diff --git a/.github/labeler-issue-triage.yml b/.github/labeler-issue-triage.yml index 02be616bacb33..8452395202a4f 100644 --- a/.github/labeler-issue-triage.yml +++ b/.github/labeler-issue-triage.yml @@ -25,11 +25,14 @@ service/app-configuration: - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_app_configuration((.|\n)*)###' service/app-service: - - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_(app_service_source_control|function_app_|linux_function_app\W+|linux_function_app\W+|linux_function_app_slot\W+|linux_web_app\W+|linux_web_app\W+|linux_web_app_slot\W+|service_plan|source_control_token|web_app_|windows_function_app\W+|windows_function_app\W+|windows_function_app_slot\W+|windows_web_app\W+|windows_web_app\W+|windows_web_app_slot\W+)((.|\n)*)###' + - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_(app_service_source_control|function_app_active_slot\W+|function_app_function\W+|function_app_hybrid_connection\W+|linux_function_app\W+|linux_function_app\W+|linux_function_app_slot\W+|linux_web_app\W+|linux_web_app\W+|linux_web_app_slot\W+|service_plan|source_control_token|web_app_|windows_function_app\W+|windows_function_app\W+|windows_function_app_slot\W+|windows_web_app\W+|windows_web_app\W+|windows_web_app_slot\W+)((.|\n)*)###' service/application-insights: - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_application_insights((.|\n)*)###' +service/arc-resource-bridge: + - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_arc_resource_bridge_appliance((.|\n)*)###' + service/attestation: - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_attestation_provider((.|\n)*)###' @@ -241,7 +244,7 @@ service/netapp: - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_netapp_((.|\n)*)###' service/network: - - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_(application_gateway\W+|application_security_group\W+|bastion_host|custom_ip_prefix|express_route_|ip_group|local_network_gateway|nat_gateway|network_connection_monitor\W+|network_ddos_protection_plan\W+|network_interface\W+|network_interface_application_gateway_backend_address_pool_association\W+|network_interface_application_security_group_association\W+|network_interface_backend_address_pool_association\W+|network_interface_nat_rule_association\W+|network_interface_security_group_association\W+|network_manager\W+|network_manager_admin_rule\W+|network_manager_admin_rule_collection\W+|network_manager_connectivity_configuration\W+|network_manager_deployment\W+|network_manager_management_group_connection\W+|network_manager_network_group\W+|network_manager_network_group\W+|network_manager_scope_connection\W+|network_manager_security_admin_configuration\W+|network_manager_static_member\W+|network_manager_subscription_connection\W+|network_packet_capture\W+|network_profile\W+|network_security_group\W+|network_security_rule\W+|network_service_tags\W+|network_watcher\W+|network_watcher_flow_log\W+|point_to_site_vpn_gateway|private_endpoint\W+|private_endpoint_application_security_group_association\W+|private_endpoint_connection\W+|private_link_service\W+|private_link_service_endpoint_connections\W+|public_ip|route|subnet|virtual_hub\W+|virtual_hub_bgp_connection\W+|virtual_hub_connection\W+|virtual_hub_ip\W+|virtual_hub_route_table\W+|virtual_hub_route_table_route\W+|virtual_hub_security_partner_provider\W+|virtual_machine_packet_capture\W+|virtual_machine_scale_set_packet_capture\W+|virtual_network\W+|virtual_network_dns_servers\W+|virtual_network_gateway\W+|virtual_network_gateway_connection\W+|virtual_network_gateway_nat_rule\W+|virtual_network_peering\W+|virtual_wan\W+|vpn_|web_application_firewall_policy)((.|\n)*)###' + - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_(application_gateway\W+|application_security_group\W+|bastion_host|custom_ip_prefix|express_route_|ip_group|local_network_gateway|nat_gateway|network_connection_monitor\W+|network_ddos_protection_plan\W+|network_interface\W+|network_interface_application_gateway_backend_address_pool_association\W+|network_interface_application_security_group_association\W+|network_interface_backend_address_pool_association\W+|network_interface_nat_rule_association\W+|network_interface_security_group_association\W+|network_manager\W+|network_manager_admin_rule\W+|network_manager_admin_rule_collection\W+|network_manager_connectivity_configuration\W+|network_manager_deployment\W+|network_manager_management_group_connection\W+|network_manager_network_group\W+|network_manager_network_group\W+|network_manager_scope_connection\W+|network_manager_security_admin_configuration\W+|network_manager_static_member\W+|network_manager_subscription_connection\W+|network_packet_capture\W+|network_profile\W+|network_security_group\W+|network_security_rule\W+|network_service_tags\W+|network_watcher\W+|network_watcher_flow_log\W+|point_to_site_vpn_gateway|private_endpoint\W+|private_endpoint_application_security_group_association\W+|private_endpoint_connection\W+|private_link_service\W+|private_link_service_endpoint_connections\W+|public_ip|route|subnet|virtual_hub\W+|virtual_hub_bgp_connection\W+|virtual_hub_connection\W+|virtual_hub_ip\W+|virtual_hub_route_table\W+|virtual_hub_route_table_route\W+|virtual_hub_routing_intent\W+|virtual_hub_security_partner_provider\W+|virtual_machine_packet_capture\W+|virtual_machine_scale_set_packet_capture\W+|virtual_network\W+|virtual_network_dns_servers\W+|virtual_network_gateway\W+|virtual_network_gateway_connection\W+|virtual_network_gateway_nat_rule\W+|virtual_network_peering\W+|virtual_wan\W+|vpn_|web_application_firewall_policy)((.|\n)*)###' service/network-function: - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_network_function_azure_traffic_collector((.|\n)*)###' @@ -298,7 +301,7 @@ service/service-bus: - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_servicebus_((.|\n)*)###' service/service-connector: - - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_(app_service_connection|spring_cloud_connection)((.|\n)*)###' + - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_(app_service_connection|function_app_connection|spring_cloud_connection)((.|\n)*)###' service/service-fabric: - '### (|New or )Affected Resource\(s\)\/Data Source\(s\)((.|\n)*)azurerm_service_fabric_cluster((.|\n)*)###' diff --git a/.github/labeler-pull-request-triage.yml b/.github/labeler-pull-request-triage.yml index 70376d840c315..3785237072d8a 100644 --- a/.github/labeler-pull-request-triage.yml +++ b/.github/labeler-pull-request-triage.yml @@ -30,6 +30,9 @@ service/app-service: service/application-insights: - internal/services/applicationinsights/**/* +service/arc-resource-bridge: + - internal/services/arcresourcebridge/**/* + service/attestation: - internal/services/attestation/**/* diff --git a/.github/workflows/automation-open-pull-request.yaml b/.github/workflows/automation-open-pull-request.yaml index 6ac47f2ba325a..2a6d33dfbfd3a 100644 --- a/.github/workflows/automation-open-pull-request.yaml +++ b/.github/workflows/automation-open-pull-request.yaml @@ -12,7 +12,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: "open a pull request" id: open-pr diff --git a/.github/workflows/breaking-change-detection.yaml b/.github/workflows/breaking-change-detection.yaml index 0bd20d3df8eee..e4d475cb377c3 100644 --- a/.github/workflows/breaking-change-detection.yaml +++ b/.github/workflows/breaking-change-detection.yaml @@ -22,7 +22,7 @@ jobs: detect: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version diff --git a/.github/workflows/depscheck.yaml b/.github/workflows/depscheck.yaml index 2e503f5dc64f2..be8571fe19fe4 100644 --- a/.github/workflows/depscheck.yaml +++ b/.github/workflows/depscheck.yaml @@ -16,7 +16,7 @@ jobs: depscheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version diff --git a/.github/workflows/gencheck.yaml b/.github/workflows/gencheck.yaml index 0242765fa67f8..e5e2d6af9960a 100644 --- a/.github/workflows/gencheck.yaml +++ b/.github/workflows/gencheck.yaml @@ -19,7 +19,7 @@ jobs: gencheck: runs-on: [custom, linux, large] steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version diff --git a/.github/workflows/golint.yaml b/.github/workflows/golint.yaml index 7680755626a54..d0a37548695de 100644 --- a/.github/workflows/golint.yaml +++ b/.github/workflows/golint.yaml @@ -20,11 +20,11 @@ jobs: golint: runs-on: [custom, linux, large] steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version - - uses: golangci/golangci-lint-action@639cd343e1d3b897ff35927a75193d57cfcba299 # v3.6.0 + - uses: golangci/golangci-lint-action@3a919529898de77ec3da873e3063ca4b10e7f5cc # v3.7.0 with: version: 'v1.51.1' args: -v ./internal/... diff --git a/.github/workflows/gradually-deprecated.yaml b/.github/workflows/gradually-deprecated.yaml index 279994a305855..442c5c9a8d58d 100644 --- a/.github/workflows/gradually-deprecated.yaml +++ b/.github/workflows/gradually-deprecated.yaml @@ -16,7 +16,7 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: fetch-depth: 0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 diff --git a/.github/workflows/increment-milestone.yaml b/.github/workflows/increment-milestone.yaml index 6b9384bd0a3bd..4e130b591af91 100644 --- a/.github/workflows/increment-milestone.yaml +++ b/.github/workflows/increment-milestone.yaml @@ -14,7 +14,7 @@ jobs: increment-milestone: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: fetch-depth: 0 - name: "Increment Milestone" diff --git a/.github/workflows/issue-opened.yaml b/.github/workflows/issue-opened.yaml index b64d83a1aa4b9..25008ab534b2c 100644 --- a/.github/workflows/issue-opened.yaml +++ b/.github/workflows/issue-opened.yaml @@ -12,7 +12,7 @@ jobs: issue_triage: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: github/issue-labeler@98b5412841f6c4b0b3d9c29d53c13fad16bd7de2 # v3.2 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/mkdocs.yaml b/.github/workflows/mkdocs.yaml index a4fa013b46bce..7de4d2f5fd350 100644 --- a/.github/workflows/mkdocs.yaml +++ b/.github/workflows/mkdocs.yaml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Publish uses: mhausenblas/mkdocs-deploy-gh-pages@d77dd03172e96abbcdb081d8c948224762033653 # 1.26 diff --git a/.github/workflows/provider-test.yaml b/.github/workflows/provider-test.yaml index 71c6de19d3d95..f2e508690a0e0 100644 --- a/.github/workflows/provider-test.yaml +++ b/.github/workflows/provider-test.yaml @@ -36,7 +36,7 @@ jobs: if: needs.secrets-check.outputs.available == 'true' steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Install Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 diff --git a/.github/workflows/pull-request-reviewed.yaml b/.github/workflows/pull-request-reviewed.yaml index 306e21133ddb3..ec359edac72d8 100644 --- a/.github/workflows/pull-request-reviewed.yaml +++ b/.github/workflows/pull-request-reviewed.yaml @@ -30,7 +30,7 @@ jobs: echo ${{ github.repository }} > wr_actions/ghrepo.txt echo ${{ github.event.pull_request.number }} > wr_actions/prnumber.txt echo "remove-waiting-response" > wr_actions/action.txt - - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 with: name: artifact path: wr_actions diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 75fc48d748fa3..74ae22c4f7ade 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -15,18 +15,18 @@ jobs: outputs: version: ${{ steps.go-version.outputs.version }} steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - id: go-version run: echo "version=$(cat ./.go-version)" >>${GITHUB_OUTPUT} release-notes: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: fetch-depth: 0 - name: Generate Release Notes run: sed -n -e "1{/# /d;}" -e "2{/^$/d;}" -e "/# $(git describe --abbrev=0 --exclude="$(git describe --abbrev=0 --match='v*.*.*' --tags)" --match='v*.*.*' --tags | tr -d v)/q;p" CHANGELOG.md > release-notes.txt - - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 with: name: release-notes path: release-notes.txt diff --git a/.github/workflows/save-artifacts.yaml b/.github/workflows/save-artifacts.yaml index 1f98c7f4bc237..5c95f66d749fa 100644 --- a/.github/workflows/save-artifacts.yaml +++ b/.github/workflows/save-artifacts.yaml @@ -14,7 +14,7 @@ jobs: echo ${{ github.repository_owner }} > wr_actions/ghowner.txt echo ${{ github.event.repository.name }} > wr_actions/ghrepo.txt echo ${{ github.event.pull_request.number }} > wr_actions/prnumber.txt - - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 with: name: artifact path: wr_actions diff --git a/.github/workflows/teamcity-test.yaml b/.github/workflows/teamcity-test.yaml index 565b1eb683d92..646c0b4009a1e 100644 --- a/.github/workflows/teamcity-test.yaml +++ b/.github/workflows/teamcity-test.yaml @@ -21,13 +21,13 @@ jobs: teamcity-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3.12.0 with: distribution: zulu java-version: 17 java-package: jdk - - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + - uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} diff --git a/.github/workflows/tflint.yaml b/.github/workflows/tflint.yaml index 88257fbedbc8d..0768b83226447 100644 --- a/.github/workflows/tflint.yaml +++ b/.github/workflows/tflint.yaml @@ -20,7 +20,7 @@ jobs: tflint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version diff --git a/.github/workflows/thirty-two-bit.yaml b/.github/workflows/thirty-two-bit.yaml index 4f6e0a83f39b5..9892137d419b1 100644 --- a/.github/workflows/thirty-two-bit.yaml +++ b/.github/workflows/thirty-two-bit.yaml @@ -21,7 +21,7 @@ jobs: compatibility-32bit-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version diff --git a/.github/workflows/unit-test.yaml b/.github/workflows/unit-test.yaml index 1164903027b44..ab17db22f3bf0 100644 --- a/.github/workflows/unit-test.yaml +++ b/.github/workflows/unit-test.yaml @@ -21,7 +21,7 @@ jobs: test: runs-on: [custom, linux, large] steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version diff --git a/.github/workflows/validate-examples.yaml b/.github/workflows/validate-examples.yaml index 084295689cc29..16f47cf87c1a8 100644 --- a/.github/workflows/validate-examples.yaml +++ b/.github/workflows/validate-examples.yaml @@ -20,7 +20,7 @@ jobs: website-lint: runs-on: [custom, linux, large] steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version diff --git a/.github/workflows/website-lint.yaml b/.github/workflows/website-lint.yaml index 14e5c6bff561b..81c401acfc9c2 100644 --- a/.github/workflows/website-lint.yaml +++ b/.github/workflows/website-lint.yaml @@ -16,7 +16,7 @@ jobs: website-lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version-file: ./.go-version diff --git a/.release/provider-schema.json b/.release/provider-schema.json index 47ea778f1f210..70d0ce7bae583 100644 --- a/.release/provider-schema.json +++ b/.release/provider-schema.json @@ -1 +1 @@ -{"providerName":"azurerm","schemaVersion":"1","providerSchema":{"schema":{"auxiliary_tenant_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":3},"client_certificate":{"type":"TypeString","optional":true,"description":"Base64 encoded PKCS#12 certificate bundle to use when authenticating as a Service Principal using a Client Certificate"},"client_certificate_password":{"type":"TypeString","optional":true,"description":"The password associated with the Client Certificate. For use when authenticating as a Service Principal using a Client Certificate"},"client_certificate_path":{"type":"TypeString","optional":true,"description":"The path to the Client Certificate associated with the Service Principal for use when authenticating as a Service Principal using a Client Certificate."},"client_id":{"type":"TypeString","optional":true,"description":"The Client ID which should be used."},"client_id_file_path":{"type":"TypeString","optional":true,"description":"The path to a file containing the Client ID which should be used."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret which should be used. For use When authenticating as a Service Principal using a Client Secret."},"client_secret_file_path":{"type":"TypeString","optional":true,"description":"The path to a file containing the Client Secret which should be used. For use When authenticating as a Service Principal using a Client Secret."},"disable_correlation_request_id":{"type":"TypeBool","optional":true,"description":"This will disable the x-ms-correlation-request-id header."},"disable_terraform_partner_id":{"type":"TypeBool","optional":true,"description":"This will disable the Terraform Partner ID which is used if a custom `partner_id` isn't specified."},"environment":{"type":"TypeString","required":true,"description":"The Cloud Environment which should be used. Possible values are public, usgovernment, and china. Defaults to public."},"features":{"type":"TypeList","required":true,"elem":{"schema":{"api_management":{"type":"TypeList","optional":true,"elem":{"schema":{"purge_soft_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true},"recover_soft_deleted":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"app_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"purge_soft_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true},"recover_soft_deleted":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"application_insights":{"type":"TypeList","optional":true,"elem":{"schema":{"disable_generated_rule":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"cognitive_account":{"type":"TypeList","optional":true,"elem":{"schema":{"purge_soft_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"purge_soft_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault` resources will be permanently deleted (e.g purged), when destroyed"},"purge_soft_deleted_certificates_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_certificate` resources will be permanently deleted (e.g purged), when destroyed"},"purge_soft_deleted_hardware_security_modules_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_managed_hardware_security_module` resources will be permanently deleted (e.g purged), when destroyed"},"purge_soft_deleted_keys_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_key` resources will be permanently deleted (e.g purged), when destroyed"},"purge_soft_deleted_secrets_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_secret` resources will be permanently deleted (e.g purged), when destroyed"},"recover_soft_deleted_certificates":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_certificate` resources will be restored, instead of creating new ones"},"recover_soft_deleted_key_vaults":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault` resources will be restored, instead of creating new ones"},"recover_soft_deleted_keys":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_key` resources will be restored, instead of creating new ones"},"recover_soft_deleted_secrets":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_secret` resources will be restored, instead of creating new ones"}}},"maxItems":1},"log_analytics_workspace":{"type":"TypeList","optional":true,"elem":{"schema":{"permanently_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"managed_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"expand_without_downtime":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"resource_group":{"type":"TypeList","optional":true,"elem":{"schema":{"prevent_deletion_if_contains_resources":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"template_deployment":{"type":"TypeList","optional":true,"elem":{"schema":{"delete_nested_items_during_deletion":{"type":"TypeBool","required":true}}},"maxItems":1},"virtual_machine":{"type":"TypeList","optional":true,"elem":{"schema":{"delete_os_disk_on_deletion":{"type":"TypeBool","optional":true,"default":false},"graceful_shutdown":{"type":"TypeBool","optional":true,"default":false},"skip_shutdown_and_force_delete":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"virtual_machine_scale_set":{"type":"TypeList","optional":true,"elem":{"schema":{"force_delete":{"type":"TypeBool","optional":true,"default":false},"roll_instances_when_required":{"type":"TypeBool","required":true},"scale_to_zero_before_deletion":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}},"maxItems":1,"minItems":1},"metadata_host":{"type":"TypeString","required":true,"description":"The Hostname which should be used for the Azure Metadata Service."},"msi_endpoint":{"type":"TypeString","optional":true,"description":"The path to a custom endpoint for Managed Service Identity - in most circumstances this should be detected automatically. "},"oidc_request_token":{"type":"TypeString","optional":true,"description":"The bearer token for the request to the OIDC provider. For use when authenticating as a Service Principal using OpenID Connect."},"oidc_request_url":{"type":"TypeString","optional":true,"description":"The URL for the OIDC provider from which to request an ID token. For use when authenticating as a Service Principal using OpenID Connect."},"oidc_token":{"type":"TypeString","optional":true,"description":"The OIDC ID token for use when authenticating as a Service Principal using OpenID Connect."},"oidc_token_file_path":{"type":"TypeString","optional":true,"description":"The path to a file containing an OIDC ID token for use when authenticating as a Service Principal using OpenID Connect."},"partner_id":{"type":"TypeString","optional":true,"description":"A GUID/UUID that is registered with Microsoft to facilitate partner resource usage attribution."},"skip_provider_registration":{"type":"TypeBool","optional":true,"description":"Should the AzureRM Provider skip registering all of the Resource Providers that it supports, if they're not already registered?"},"storage_use_azuread":{"type":"TypeBool","optional":true,"description":"Should the AzureRM Provider use AzureAD to access the Storage Data Plane API's?"},"subscription_id":{"type":"TypeString","optional":true,"description":"The Subscription ID which should be used."},"tenant_id":{"type":"TypeString","optional":true,"description":"The Tenant ID which should be used."},"use_cli":{"type":"TypeBool","optional":true,"default":true,"description":"Allow Azure CLI to be used for Authentication."},"use_msi":{"type":"TypeBool","optional":true,"description":"Allow Managed Service Identity to be used for Authentication."},"use_oidc":{"type":"TypeBool","optional":true,"description":"Allow OpenID Connect to be used for authentication"}},"resources":{"azurerm_aadb2c_directory":{"schema":{"billing_type":{"type":"TypeString","description":"The type of billing for the B2C tenant. Possible values include: `MAU` or `Auths`.","computed":true},"country_code":{"type":"TypeString","optional":true,"description":"Country code of the B2C tenant. See https://aka.ms/B2CDataResidency for valid country codes.","computed":true,"forceNew":true},"data_residency_location":{"type":"TypeString","required":true,"description":"Location in which the B2C tenant is hosted and data resides. See https://aka.ms/B2CDataResidency for more information.","forceNew":true},"display_name":{"type":"TypeString","optional":true,"description":"The initial display name of the B2C tenant.","computed":true,"forceNew":true},"domain_name":{"type":"TypeString","required":true,"description":"Domain name of the B2C tenant, including onmicrosoft.com suffix.","forceNew":true},"effective_start_date":{"type":"TypeString","description":"The date from which the billing type took effect. May not be populated until after the first billing cycle.","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"description":"Billing SKU for the B2C tenant. See https://aka.ms/b2cBilling for more information."},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","description":"The Tenant ID for the B2C tenant.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_active_directory_domain_service":{"schema":{"deployment_id":{"type":"TypeString","computed":true},"domain_configuration_type":{"type":"TypeString","optional":true,"forceNew":true},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"filtered_sync_enabled":{"type":"TypeBool","optional":true,"default":false},"initial_replica_set":{"type":"TypeList","required":true,"elem":{"schema":{"domain_controller_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"external_access_ip_address":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"service_status":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notifications":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"additional_recipients":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"notify_dc_admins":{"type":"TypeBool","optional":true,"default":false},"notify_global_admins":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_id":{"type":"TypeString","computed":true},"secure_ldap":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"certificate_expiry":{"type":"TypeString","computed":true},"certificate_thumbprint":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","required":true},"external_access_enabled":{"type":"TypeBool","optional":true,"default":false},"pfx_certificate":{"type":"TypeString","required":true},"pfx_certificate_password":{"type":"TypeString","required":true},"public_certificate":{"type":"TypeString","computed":true}}},"maxItems":1},"security":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"kerberos_armoring_enabled":{"type":"TypeBool","optional":true,"default":false},"kerberos_rc4_encryption_enabled":{"type":"TypeBool","optional":true,"default":false},"ntlm_v1_enabled":{"type":"TypeBool","optional":true,"default":false},"sync_kerberos_passwords":{"type":"TypeBool","optional":true,"default":false},"sync_ntlm_passwords":{"type":"TypeBool","optional":true,"default":false},"sync_on_prem_passwords":{"type":"TypeBool","optional":true,"default":false},"tls_v1_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"sku":{"type":"TypeString","required":true},"sync_owner":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true},"version":{"type":"TypeInt","computed":true}},"timeouts":{"create":180,"read":5,"delete":60,"update":120}},"azurerm_active_directory_domain_service_replica_set":{"schema":{"domain_controller_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"domain_service_id":{"type":"TypeString","required":true,"forceNew":true},"external_access_ip_address":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"service_status":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":180,"read":5,"delete":60,"update":120}},"azurerm_active_directory_domain_service_trust":{"schema":{"domain_service_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"trusted_domain_dns_ips":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":2},"trusted_domain_fqdn":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_advanced_threat_protection":{"schema":{"enabled":{"type":"TypeBool","required":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_analysis_services_server":{"schema":{"admin_users":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"backup_blob_container_uri":{"type":"TypeString","optional":true},"enable_power_bi_service":{"type":"TypeBool","optional":true},"ipv4_firewall_rule":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"range_end":{"type":"TypeString","required":true},"range_start":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"querypool_connection_mode":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_full_name":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_connection":{"schema":{"display_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_api_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameter_values":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management":{"schema":{"additional_location":{"type":"TypeList","optional":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true,"computed":true},"gateway_disabled":{"type":"TypeBool","optional":true,"default":false},"gateway_regional_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_id":{"type":"TypeString","optional":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_network_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"subnet_id":{"type":"TypeString","required":true}}},"maxItems":1},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}}},"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_password":{"type":"TypeString","optional":true},"encoded_certificate":{"type":"TypeString","required":true},"expiry":{"type":"TypeString","computed":true},"store_name":{"type":"TypeString","required":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}},"maxItems":10},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"delegation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"subscriptions_enabled":{"type":"TypeBool","optional":true,"default":false},"url":{"type":"TypeString","optional":true},"user_registration_enabled":{"type":"TypeBool","optional":true,"default":false},"validation_key":{"type":"TypeString","optional":true}}},"maxItems":1},"developer_portal_url":{"type":"TypeString","computed":true},"gateway_disabled":{"type":"TypeBool","optional":true,"default":false},"gateway_regional_url":{"type":"TypeString","computed":true},"gateway_url":{"type":"TypeString","computed":true},"hostname_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"developer_portal":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"management":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"portal":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"default_ssl_binding":{"type":"TypeBool","optional":true,"computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"scm":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"management_api_url":{"type":"TypeString","computed":true},"min_api_version":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification_sender_email":{"type":"TypeString","optional":true,"computed":true},"policy":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}}},"maxItems":1},"portal_url":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"protocols":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enable_http2":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"public_ip_address_id":{"type":"TypeString","optional":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"publisher_email":{"type":"TypeString","required":true},"publisher_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scm_url":{"type":"TypeString","computed":true},"security":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enable_backend_ssl30":{"type":"TypeBool","optional":true,"default":false},"enable_backend_tls10":{"type":"TypeBool","optional":true,"default":false},"enable_backend_tls11":{"type":"TypeBool","optional":true,"default":false},"enable_frontend_ssl30":{"type":"TypeBool","optional":true,"default":false},"enable_frontend_tls10":{"type":"TypeBool","optional":true,"default":false},"enable_frontend_tls11":{"type":"TypeBool","optional":true,"default":false},"tls_ecdhe_ecdsa_with_aes128_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_ecdhe_ecdsa_with_aes256_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_ecdhe_rsa_with_aes128_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_ecdhe_rsa_with_aes256_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes128_cbc_sha256_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes128_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes128_gcm_sha256_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes256_cbc_sha256_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes256_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes256_gcm_sha384_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"triple_des_ciphers_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"sign_in":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"sign_up":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"terms_of_service":{"type":"TypeList","required":true,"elem":{"schema":{"consent_required":{"type":"TypeBool","required":true},"enabled":{"type":"TypeBool","required":true},"text":{"type":"TypeString","optional":true}}},"maxItems":1}}},"maxItems":1},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_access":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"primary_key":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}},"maxItems":1},"virtual_network_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"subnet_id":{"type":"TypeString","required":true}}},"maxItems":1},"virtual_network_type":{"type":"TypeString","optional":true,"default":"None"},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_api_management_api":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_type":{"type":"TypeString","optional":true,"computed":true},"contact":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"url":{"type":"TypeString","optional":true}}},"maxItems":1,"minItems":1},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"import":{"type":"TypeList","optional":true,"elem":{"schema":{"content_format":{"type":"TypeString","required":true},"content_value":{"type":"TypeString","required":true},"wsdl_selector":{"type":"TypeList","optional":true,"elem":{"schema":{"endpoint_name":{"type":"TypeString","required":true},"service_name":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"is_current":{"type":"TypeBool","computed":true},"is_online":{"type":"TypeBool","computed":true},"license":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"url":{"type":"TypeString","optional":true}}},"maxItems":1,"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"oauth2_authorization":{"type":"TypeList","optional":true,"elem":{"schema":{"authorization_server_name":{"type":"TypeString","required":true},"scope":{"type":"TypeString","optional":true}}},"maxItems":1},"openid_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"bearer_token_sending_methods":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"openid_provider_name":{"type":"TypeString","required":true}}},"maxItems":1},"path":{"type":"TypeString","optional":true,"computed":true},"protocols":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"revision":{"type":"TypeString","required":true,"forceNew":true},"revision_description":{"type":"TypeString","optional":true},"service_url":{"type":"TypeString","optional":true,"computed":true},"soap_pass_through":{"type":"TypeBool","optional":true,"computed":true},"source_api_id":{"type":"TypeString","optional":true},"subscription_key_parameter_names":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"header":{"type":"TypeString","required":true},"query":{"type":"TypeString","required":true}}},"maxItems":1},"subscription_required":{"type":"TypeBool","optional":true,"default":true},"terms_of_service_url":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true,"computed":true},"version_description":{"type":"TypeString","optional":true},"version_set_id":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_diagnostic":{"schema":{"always_log_errors":{"type":"TypeBool","optional":true,"computed":true},"api_management_logger_id":{"type":"TypeString","required":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"backend_request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"backend_response":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"frontend_request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"frontend_response":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"http_correlation_protocol":{"type":"TypeString","optional":true,"computed":true},"identifier":{"type":"TypeString","required":true,"forceNew":true},"log_client_ip":{"type":"TypeBool","optional":true,"computed":true},"operation_name_format":{"type":"TypeString","optional":true,"default":"Name"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sampling_percentage":{"type":"TypeFloat","optional":true,"computed":true},"verbosity":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_operation":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"method":{"type":"TypeString","required":true},"operation_id":{"type":"TypeString","required":true,"forceNew":true},"request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"query_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"representation":{"type":"TypeList","optional":true,"elem":{"schema":{"content_type":{"type":"TypeString","required":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"form_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"schema_id":{"type":"TypeString","optional":true},"type_name":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"response":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"representation":{"type":"TypeList","optional":true,"elem":{"schema":{"content_type":{"type":"TypeString","required":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"form_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"schema_id":{"type":"TypeString","optional":true},"type_name":{"type":"TypeString","optional":true}}}},"status_code":{"type":"TypeInt","required":true}}}},"template_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"url_template":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_operation_policy":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"operation_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_operation_tag":{"schema":{"api_operation_id":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_policy":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_release":{"schema":{"api_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_schema":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"components":{"type":"TypeString","optional":true},"content_type":{"type":"TypeString","required":true},"definitions":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schema_id":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_tag":{"schema":{"api_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_api_management_api_tag_description":{"schema":{"api_tag_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"external_documentation_description":{"type":"TypeString","optional":true},"external_documentation_url":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_version_set":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"version_header_name":{"type":"TypeString","optional":true},"version_query_name":{"type":"TypeString","optional":true},"versioning_scheme":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_authorization_server":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"authorization_endpoint":{"type":"TypeString","required":true},"authorization_methods":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"bearer_token_sending_methods":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"client_authentication_method":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_registration_endpoint":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true},"default_scope":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"grant_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_owner_password":{"type":"TypeString","optional":true},"resource_owner_username":{"type":"TypeString","optional":true},"support_state":{"type":"TypeBool","optional":true},"token_body_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"token_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_backend":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"credentials":{"type":"TypeList","optional":true,"elem":{"schema":{"authorization":{"type":"TypeList","optional":true,"elem":{"schema":{"parameter":{"type":"TypeString","optional":true},"scheme":{"type":"TypeString","optional":true}}},"maxItems":1},"certificate":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"header":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"query":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protocol":{"type":"TypeString","required":true},"proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true},"url":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_id":{"type":"TypeString","optional":true},"service_fabric_cluster":{"type":"TypeList","optional":true,"elem":{"schema":{"client_certificate_id":{"type":"TypeString","optional":true,"computed":true},"client_certificate_thumbprint":{"type":"TypeString","optional":true,"computed":true},"management_endpoints":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"max_partition_resolution_retries":{"type":"TypeInt","required":true},"server_certificate_thumbprints":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"server_x509_name":{"type":"TypeSet","optional":true,"elem":{"schema":{"issuer_certificate_thumbprint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"title":{"type":"TypeString","optional":true},"tls":{"type":"TypeList","optional":true,"elem":{"schema":{"validate_certificate_chain":{"type":"TypeBool","optional":true},"validate_certificate_name":{"type":"TypeBool","optional":true}}},"maxItems":1},"url":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_certificate":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"data":{"type":"TypeString","optional":true},"expiration":{"type":"TypeString","computed":true},"key_vault_identity_client_id":{"type":"TypeString","optional":true},"key_vault_secret_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_custom_domain":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"developer_portal":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"gateway":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"default_ssl_binding":{"type":"TypeBool","optional":true,"computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"management":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"portal":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"scm":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_api_management_diagnostic":{"schema":{"always_log_errors":{"type":"TypeBool","optional":true,"computed":true},"api_management_logger_id":{"type":"TypeString","required":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"backend_request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"backend_response":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"frontend_request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"frontend_response":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"http_correlation_protocol":{"type":"TypeString","optional":true,"computed":true},"identifier":{"type":"TypeString","required":true,"forceNew":true},"log_client_ip":{"type":"TypeBool","optional":true,"computed":true},"operation_name_format":{"type":"TypeString","optional":true,"default":"Name"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sampling_percentage":{"type":"TypeFloat","optional":true,"computed":true},"verbosity":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_email_template":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"body":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subject":{"type":"TypeString","required":true},"template_name":{"type":"TypeString","required":true,"forceNew":true},"title":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_gateway":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"location_data":{"type":"TypeList","required":true,"elem":{"schema":{"city":{"type":"TypeString","optional":true},"district":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"region":{"type":"TypeString","optional":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_gateway_api":{"schema":{"api_id":{"type":"TypeString","required":true,"forceNew":true},"gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_gateway_certificate_authority":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"certificate_name":{"type":"TypeString","required":true,"forceNew":true},"gateway_name":{"type":"TypeString","required":true,"forceNew":true},"is_trusted":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_gateway_host_name_configuration":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"certificate_id":{"type":"TypeString","required":true},"gateway_name":{"type":"TypeString","required":true,"forceNew":true},"host_name":{"type":"TypeString","required":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"request_client_certificate_enabled":{"type":"TypeBool","optional":true},"tls10_enabled":{"type":"TypeBool","optional":true},"tls11_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_global_schema":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schema_id":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_group":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"external_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"default":"custom","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_group_user":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"user_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_aad":{"schema":{"allowed_tenants":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"signin_tenant":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_aadb2c":{"schema":{"allowed_tenant":{"type":"TypeString","required":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"authority":{"type":"TypeString","required":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"password_reset_policy":{"type":"TypeString","optional":true},"profile_editing_policy":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"signin_policy":{"type":"TypeString","required":true},"signin_tenant":{"type":"TypeString","required":true},"signup_policy":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_facebook":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_google":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_microsoft":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_twitter":{"schema":{"api_key":{"type":"TypeString","required":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_secret_key":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_logger":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"application_insights":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"instrumentation_key":{"type":"TypeString","required":true}}},"maxItems":1},"buffered":{"type":"TypeBool","optional":true,"default":true},"description":{"type":"TypeString","optional":true},"eventhub":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"connection_string":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_named_value":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secret":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","optional":true},"value_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","optional":true},"secret_id":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_notification_recipient_email":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"email":{"type":"TypeString","required":true,"forceNew":true},"notification_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_api_management_notification_recipient_user":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"notification_type":{"type":"TypeString","required":true,"forceNew":true},"user_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_api_management_openid_connect_provider":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"metadata_endpoint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_policy":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"approval_required":{"type":"TypeBool","optional":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"product_id":{"type":"TypeString","required":true,"forceNew":true},"published":{"type":"TypeBool","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_required":{"type":"TypeBool","optional":true,"default":true},"subscriptions_limit":{"type":"TypeInt","optional":true},"terms":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product_api":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"product_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product_group":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"group_name":{"type":"TypeString","required":true,"forceNew":true},"product_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product_policy":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"product_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product_tag":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_management_product_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_redis_cache":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"cache_location":{"type":"TypeString","optional":true,"default":"default"},"connection_string":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"redis_cache_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_subscription":{"schema":{"allow_tracing":{"type":"TypeBool","optional":true,"default":true},"api_id":{"type":"TypeString","optional":true,"forceNew":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","optional":true,"computed":true},"product_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_key":{"type":"TypeString","optional":true,"computed":true},"state":{"type":"TypeString","optional":true,"default":"submitted"},"subscription_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"user_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_tag":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_user":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"confirmation":{"type":"TypeString","optional":true,"forceNew":true},"email":{"type":"TypeString","required":true},"first_name":{"type":"TypeString","required":true},"last_name":{"type":"TypeString","required":true},"note":{"type":"TypeString","optional":true},"password":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"state":{"type":"TypeString","optional":true,"computed":true},"user_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":45,"read":5,"delete":45,"update":45}},"azurerm_app_configuration":{"schema":{"encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","optional":true},"key_vault_key_identifier":{"type":"TypeString","optional":true}}},"maxItems":1},"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_read_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"primary_write_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"public_network_access":{"type":"TypeString","optional":true},"purge_protection_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_read_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"secondary_write_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"sku":{"type":"TypeString","optional":true,"default":"free"},"soft_delete_retention_days":{"type":"TypeInt","optional":true,"default":7,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_configuration_feature":{"schema":{"configuration_store_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true},"etag":{"type":"TypeString","optional":true,"computed":true},"key":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"label":{"type":"TypeString","optional":true,"forceNew":true},"locked":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"percentage_filter_value":{"type":"TypeInt","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"targeting_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_rollout_percentage":{"type":"TypeInt","required":true},"groups":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"rollout_percentage":{"type":"TypeInt","required":true}}}},"users":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"timewindow_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"end":{"type":"TypeString","optional":true},"start":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":45,"read":5,"delete":30,"update":30}},"azurerm_app_configuration_key":{"schema":{"configuration_store_id":{"type":"TypeString","required":true,"forceNew":true},"content_type":{"type":"TypeString","optional":true,"computed":true},"etag":{"type":"TypeString","optional":true,"computed":true},"key":{"type":"TypeString","required":true,"forceNew":true},"label":{"type":"TypeString","optional":true,"forceNew":true},"locked":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","optional":true,"default":"kv"},"value":{"type":"TypeString","optional":true,"computed":true},"vault_key_reference":{"type":"TypeString","optional":true}},"timeouts":{"create":45,"read":5,"delete":30,"update":30}},"azurerm_app_service":{"schema":{"app_service_plan_id":{"type":"TypeString","required":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true}}},"maxItems":1},"additional_login_params":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true},"consumer_secret":{"type":"TypeString","required":true}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true},"frequency_unit":{"type":"TypeString","required":true},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false},"retention_period_in_days":{"type":"TypeInt","optional":true,"default":30},"start_time":{"type":"TypeString","optional":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_cert_enabled":{"type":"TypeBool","optional":true,"default":false},"client_cert_mode":{"type":"TypeString","optional":true,"computed":true},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_site_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","optional":true,"default":"Off"}}},"maxItems":1},"detailed_error_messages_enabled":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing_enabled":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"acr_use_managed_identity_credentials":{"type":"TypeBool","optional":true,"default":false},"acr_user_managed_identity_client_id":{"type":"TypeString","optional":true},"always_on":{"type":"TypeBool","optional":true,"default":false},"app_command_line":{"type":"TypeString","optional":true},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"java_container":{"type":"TypeString","optional":true},"java_container_version":{"type":"TypeString","optional":true},"java_version":{"type":"TypeString","optional":true},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"local_mysql_enabled":{"type":"TypeBool","optional":true,"computed":true},"managed_pipeline_mode":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"number_of_workers":{"type":"TypeInt","optional":true,"computed":true},"php_version":{"type":"TypeString","optional":true},"python_version":{"type":"TypeString","optional":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"computed":true},"windows_fx_version":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"source_control":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"branch":{"type":"TypeString","optional":true,"computed":true},"manual_integration":{"type":"TypeBool","optional":true,"computed":true},"repo_url":{"type":"TypeString","optional":true,"computed":true},"rollback_enabled":{"type":"TypeBool","optional":true,"computed":true},"use_mercurial":{"type":"TypeBool","optional":true,"computed":true}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_active_slot":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"app_service_slot_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_certificate":{"schema":{"app_service_plan_id":{"type":"TypeString","optional":true,"forceNew":true},"expiration_date":{"type":"TypeString","computed":true},"friendly_name":{"type":"TypeString","computed":true},"host_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"hosting_environment_profile_id":{"type":"TypeString","computed":true},"issue_date":{"type":"TypeString","computed":true},"issuer":{"type":"TypeString","computed":true},"key_vault_secret_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true,"forceNew":true},"pfx_blob":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subject_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_certificate_binding":{"schema":{"app_service_name":{"type":"TypeString","computed":true},"certificate_id":{"type":"TypeString","required":true,"forceNew":true},"hostname":{"type":"TypeString","computed":true},"hostname_binding_id":{"type":"TypeString","required":true,"forceNew":true},"ssl_state":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_app_service_certificate_order":{"schema":{"app_service_certificate_not_renewable_reasons":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"auto_renew":{"type":"TypeBool","optional":true,"default":true},"certificates":{"type":"TypeList","computed":true,"elem":{"schema":{"certificate_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"key_vault_secret_name":{"type":"TypeString","computed":true},"provisioning_state":{"type":"TypeString","computed":true}}}},"csr":{"type":"TypeString","optional":true,"computed":true},"distinguished_name":{"type":"TypeString","optional":true,"computed":true},"domain_verification_token":{"type":"TypeString","computed":true},"expiration_time":{"type":"TypeString","computed":true},"intermediate_thumbprint":{"type":"TypeString","computed":true},"is_private_key_external":{"type":"TypeBool","computed":true},"key_size":{"type":"TypeInt","optional":true,"default":2048},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"product_type":{"type":"TypeString","optional":true,"default":"Standard"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"root_thumbprint":{"type":"TypeString","computed":true},"signed_certificate_thumbprint":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"validity_in_years":{"type":"TypeInt","optional":true,"default":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_connection":{"schema":{"app_service_id":{"type":"TypeString","required":true,"forceNew":true},"authentication":{"type":"TypeList","required":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"client_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","optional":true},"secret":{"type":"TypeString","optional":true},"subscription_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"client_type":{"type":"TypeString","optional":true,"default":"none"},"name":{"type":"TypeString","required":true,"forceNew":true},"secret_store":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true},"vnet_solution":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_custom_hostname_binding":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"hostname":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"ssl_state":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"virtual_ip":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_environment":{"schema":{"allowed_user_ip_cidrs":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"cluster_setting":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"front_end_scale_factor":{"type":"TypeInt","optional":true,"default":15},"internal_ip_address":{"type":"TypeString","computed":true},"internal_load_balancing_mode":{"type":"TypeString","optional":true,"default":"None","forceNew":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"pricing_tier":{"type":"TypeString","optional":true,"default":"I1"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_ip_address":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_app_service_environment_v3":{"schema":{"allow_new_private_endpoint_connections":{"type":"TypeBool","optional":true,"default":true},"cluster_setting":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"dedicated_host_count":{"type":"TypeInt","optional":true,"forceNew":true},"dns_suffix":{"type":"TypeString","computed":true},"external_inbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"inbound_network_dependencies":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"internal_inbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"internal_load_balancing_mode":{"type":"TypeString","optional":true,"default":"None","forceNew":true},"ip_ssl_address_count":{"type":"TypeInt","computed":true},"linux_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pricing_tier":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"windows_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_app_service_hybrid_connection":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"hostname":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","computed":true},"port":{"type":"TypeInt","required":true},"relay_id":{"type":"TypeString","required":true,"forceNew":true},"relay_name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"send_key_name":{"type":"TypeString","optional":true,"default":"RootManageSharedAccessKey"},"send_key_value":{"type":"TypeString","computed":true},"service_bus_namespace":{"type":"TypeString","computed":true},"service_bus_suffix":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_managed_certificate":{"schema":{"canonical_name":{"type":"TypeString","computed":true},"custom_hostname_binding_id":{"type":"TypeString","required":true,"forceNew":true},"expiration_date":{"type":"TypeString","computed":true},"friendly_name":{"type":"TypeString","computed":true},"host_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"issue_date":{"type":"TypeString","computed":true},"issuer":{"type":"TypeString","computed":true},"subject_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_plan":{"schema":{"app_service_environment_id":{"type":"TypeString","optional":true,"forceNew":true},"is_xenon":{"type":"TypeBool","optional":true},"kind":{"type":"TypeString","optional":true,"default":"Windows","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maximum_elastic_worker_count":{"type":"TypeInt","optional":true,"computed":true},"maximum_number_of_workers":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"per_site_scaling":{"type":"TypeBool","optional":true},"reserved":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true,"computed":true},"size":{"type":"TypeString","required":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_app_service_public_certificate":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"blob":{"type":"TypeString","required":true,"forceNew":true},"certificate_location":{"type":"TypeString","required":true,"forceNew":true},"certificate_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_slot":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"app_service_plan_id":{"type":"TypeString","required":true,"forceNew":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true}}},"maxItems":1},"additional_login_params":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true},"consumer_secret":{"type":"TypeString","required":true}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"computed":true},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"default_site_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","optional":true,"default":"Off"}}},"maxItems":1},"detailed_error_messages_enabled":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing_enabled":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"acr_use_managed_identity_credentials":{"type":"TypeBool","optional":true,"default":false},"acr_user_managed_identity_client_id":{"type":"TypeString","optional":true},"always_on":{"type":"TypeBool","optional":true,"default":false},"app_command_line":{"type":"TypeString","optional":true},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"java_container":{"type":"TypeString","optional":true},"java_container_version":{"type":"TypeString","optional":true},"java_version":{"type":"TypeString","optional":true},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"local_mysql_enabled":{"type":"TypeBool","optional":true,"computed":true},"managed_pipeline_mode":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"number_of_workers":{"type":"TypeInt","optional":true,"computed":true},"php_version":{"type":"TypeString","optional":true},"python_version":{"type":"TypeString","optional":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"computed":true},"windows_fx_version":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_slot_custom_hostname_binding":{"schema":{"app_service_slot_id":{"type":"TypeString","required":true,"forceNew":true},"hostname":{"type":"TypeString","required":true,"forceNew":true},"ssl_state":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"virtual_ip":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_app_service_slot_virtual_network_swift_connection":{"schema":{"app_service_id":{"type":"TypeString","required":true,"forceNew":true},"slot_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_source_control":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The ID of the Windows or Linux Web App.","forceNew":true},"branch":{"type":"TypeString","optional":true,"description":"The branch name to use for deployments.","computed":true,"forceNew":true},"github_action_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"code_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"runtime_stack":{"type":"TypeString","required":true,"description":"The value to use for the Runtime Stack in the workflow file content for code base apps.","forceNew":true},"runtime_version":{"type":"TypeString","required":true,"description":"The value to use for the Runtime Version in the workflow file content for code base apps.","forceNew":true}}},"maxItems":1},"container_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"image_name":{"type":"TypeString","required":true,"description":"The image name for the build.","forceNew":true},"registry_password":{"type":"TypeString","optional":true,"description":"The password used to upload the image to the container registry.","forceNew":true},"registry_url":{"type":"TypeString","required":true,"description":"The server URL for the container registry where the build will be hosted.","forceNew":true},"registry_username":{"type":"TypeString","optional":true,"description":"The username used to upload the image to the container registry.","forceNew":true}}},"maxItems":1},"generate_workflow_file":{"type":"TypeBool","optional":true,"default":true,"description":"Should the service generate the GitHub Action Workflow file. Defaults to `true`","forceNew":true},"linux_action":{"type":"TypeBool","description":"Denotes this action uses a Linux base image.","computed":true}}},"maxItems":1},"repo_url":{"type":"TypeString","optional":true,"description":"The URL for the repository.","computed":true,"forceNew":true},"rollback_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Deployment Rollback be enabled? Defaults to `false`.","forceNew":true},"scm_type":{"type":"TypeString","description":"The SCM Type in use. This value is decoded by the service from the repository information supplied.","computed":true},"use_local_git":{"type":"TypeBool","optional":true,"default":false,"description":"Should the App use local Git configuration.","forceNew":true},"use_manual_integration":{"type":"TypeBool","optional":true,"default":false,"description":"Should code be deployed manually. Set to `false` to enable continuous integration, such as webhooks into online repos such as GitHub. Defaults to `false`.","forceNew":true},"use_mercurial":{"type":"TypeBool","optional":true,"default":false,"description":"The repository specified is Mercurial. Defaults to `false`.","forceNew":true},"uses_github_action":{"type":"TypeBool","description":"Indicates if the Slot uses a GitHub action for deployment. This value is decoded by the service from the repository information supplied.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_app_service_source_control_slot":{"schema":{"branch":{"type":"TypeString","optional":true,"description":"The URL for the repository","computed":true,"forceNew":true},"github_action_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"code_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"runtime_stack":{"type":"TypeString","required":true,"description":"The value to use for the Runtime Stack in the workflow file content for code base apps.","forceNew":true},"runtime_version":{"type":"TypeString","required":true,"description":"The value to use for the Runtime Version in the workflow file content for code base apps.","forceNew":true}}},"maxItems":1},"container_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"image_name":{"type":"TypeString","required":true,"description":"The image name for the build.","forceNew":true},"registry_password":{"type":"TypeString","optional":true,"description":"The password used to upload the image to the container registry.","forceNew":true},"registry_url":{"type":"TypeString","required":true,"description":"The server URL for the container registry where the build will be hosted.","forceNew":true},"registry_username":{"type":"TypeString","optional":true,"description":"The username used to upload the image to the container registry.","forceNew":true}}},"maxItems":1},"generate_workflow_file":{"type":"TypeBool","optional":true,"default":true,"description":"Should the service generate the GitHub Action Workflow file. Defaults to `true`","forceNew":true},"linux_action":{"type":"TypeBool","description":"Denotes this action uses a Linux base image.","computed":true}}},"maxItems":1},"repo_url":{"type":"TypeString","optional":true,"description":"The branch name to use for deployments.","computed":true,"forceNew":true},"rollback_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Deployment Rollback be enabled? Defaults to `false`","forceNew":true},"scm_type":{"type":"TypeString","description":"The SCM Type in use. This value is decoded by the service from the repository information supplied.","computed":true},"slot_id":{"type":"TypeString","required":true,"description":"The ID of the Linux or Windows Web App Slot.","forceNew":true},"use_local_git":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Slot use local Git configuration.","forceNew":true},"use_manual_integration":{"type":"TypeBool","optional":true,"default":false,"description":"Should code be deployed manually. Set to `true` to disable continuous integration, such as webhooks into online repos such as GitHub. Defaults to `false`","forceNew":true},"use_mercurial":{"type":"TypeBool","optional":true,"default":false,"description":"The repository specified is Mercurial. Defaults to `false`.","forceNew":true},"uses_github_action":{"type":"TypeBool","description":"Indicates if the Slot uses a GitHub action for deployment. This value is decoded by the service from the repository information supplied.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_app_service_source_control_token":{"schema":{"token":{"type":"TypeString","required":true},"token_secret":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_virtual_network_swift_connection":{"schema":{"app_service_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_gateway":{"schema":{"authentication_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"data":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true}}}},"autoscale_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"max_capacity":{"type":"TypeInt","optional":true},"min_capacity":{"type":"TypeInt","required":true}}},"maxItems":1},"backend_address_pool":{"type":"TypeSet","required":true,"elem":{"schema":{"fqdns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true}}}},"backend_http_settings":{"type":"TypeSet","required":true,"elem":{"schema":{"affinity_cookie_name":{"type":"TypeString","optional":true},"authentication_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true}}}},"connection_draining":{"type":"TypeList","optional":true,"elem":{"schema":{"drain_timeout_sec":{"type":"TypeInt","required":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"cookie_based_affinity":{"type":"TypeString","required":true},"host_name":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"pick_host_name_from_backend_address":{"type":"TypeBool","optional":true,"default":false},"port":{"type":"TypeInt","required":true},"probe_id":{"type":"TypeString","computed":true},"probe_name":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true},"request_timeout":{"type":"TypeInt","optional":true,"default":30},"trusted_root_certificate_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1},"custom_error_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_error_page_url":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"status_code":{"type":"TypeString","required":true}}}},"enable_http2":{"type":"TypeBool","optional":true},"fips_enabled":{"type":"TypeBool","optional":true},"firewall_policy_id":{"type":"TypeString","optional":true},"force_firewall_policy_association":{"type":"TypeBool","optional":true},"frontend_ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_ip_address":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_allocation":{"type":"TypeString","optional":true,"default":"Dynamic"},"private_link_configuration_id":{"type":"TypeString","computed":true},"private_link_configuration_name":{"type":"TypeString","optional":true},"public_ip_address_id":{"type":"TypeString","optional":true},"subnet_id":{"type":"TypeString","optional":true}}},"minItems":1},"frontend_port":{"type":"TypeSet","required":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"port":{"type":"TypeInt","required":true}}}},"gateway_ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":2},"global":{"type":"TypeList","optional":true,"elem":{"schema":{"request_buffering_enabled":{"type":"TypeBool","required":true},"response_buffering_enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"http_listener":{"type":"TypeSet","required":true,"elem":{"schema":{"custom_error_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_error_page_url":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"status_code":{"type":"TypeString","required":true}}}},"firewall_policy_id":{"type":"TypeString","optional":true},"frontend_ip_configuration_id":{"type":"TypeString","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","required":true},"frontend_port_id":{"type":"TypeString","computed":true},"frontend_port_name":{"type":"TypeString","required":true},"host_name":{"type":"TypeString","optional":true},"host_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true},"require_sni":{"type":"TypeBool","optional":true},"ssl_certificate_id":{"type":"TypeString","computed":true},"ssl_certificate_name":{"type":"TypeString","optional":true},"ssl_profile_id":{"type":"TypeString","computed":true},"ssl_profile_name":{"type":"TypeString","optional":true}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_connection":{"type":"TypeSet","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"private_link_configuration":{"type":"TypeSet","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","required":true},"private_ip_address":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_allocation":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}},"minItems":1},"name":{"type":"TypeString","required":true}}}},"probe":{"type":"TypeSet","optional":true,"elem":{"schema":{"host":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"interval":{"type":"TypeInt","required":true},"match":{"type":"TypeList","optional":true,"elem":{"schema":{"body":{"type":"TypeString","optional":true},"status_code":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"minimum_servers":{"type":"TypeInt","optional":true,"default":0},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true},"pick_host_name_from_backend_http_settings":{"type":"TypeBool","optional":true,"default":false},"port":{"type":"TypeInt","optional":true},"protocol":{"type":"TypeString","required":true},"timeout":{"type":"TypeInt","required":true},"unhealthy_threshold":{"type":"TypeInt","required":true}}}},"redirect_configuration":{"type":"TypeSet","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"include_path":{"type":"TypeBool","optional":true,"default":false},"include_query_string":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"redirect_type":{"type":"TypeString","required":true},"target_listener_id":{"type":"TypeString","computed":true},"target_listener_name":{"type":"TypeString","optional":true},"target_url":{"type":"TypeString","optional":true}}}},"request_routing_rule":{"type":"TypeSet","required":true,"elem":{"schema":{"backend_address_pool_id":{"type":"TypeString","computed":true},"backend_address_pool_name":{"type":"TypeString","optional":true},"backend_http_settings_id":{"type":"TypeString","computed":true},"backend_http_settings_name":{"type":"TypeString","optional":true},"http_listener_id":{"type":"TypeString","computed":true},"http_listener_name":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","optional":true},"redirect_configuration_id":{"type":"TypeString","computed":true},"redirect_configuration_name":{"type":"TypeString","optional":true},"rewrite_rule_set_id":{"type":"TypeString","computed":true},"rewrite_rule_set_name":{"type":"TypeString","optional":true},"rule_type":{"type":"TypeString","required":true},"url_path_map_id":{"type":"TypeString","computed":true},"url_path_map_name":{"type":"TypeString","optional":true}}},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rewrite_rule_set":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"rewrite_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"ignore_case":{"type":"TypeBool","optional":true,"default":false},"negate":{"type":"TypeBool","optional":true,"default":false},"pattern":{"type":"TypeString","required":true},"variable":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true},"request_header_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"header_value":{"type":"TypeString","required":true}}}},"response_header_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"header_value":{"type":"TypeString","required":true}}}},"rule_sequence":{"type":"TypeInt","required":true},"url":{"type":"TypeList","optional":true,"elem":{"schema":{"components":{"type":"TypeString","optional":true,"computed":true},"path":{"type":"TypeString","optional":true},"query_string":{"type":"TypeString","optional":true},"reroute":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}}}}}},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"ssl_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"data":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"key_vault_secret_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"password":{"type":"TypeString","optional":true},"public_cert_data":{"type":"TypeString","computed":true}}}},"ssl_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cipher_suites":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"disabled_protocols":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"min_protocol_version":{"type":"TypeString","optional":true},"policy_name":{"type":"TypeString","optional":true},"policy_type":{"type":"TypeString","optional":true}}},"maxItems":1},"ssl_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"ssl_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"cipher_suites":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"disabled_protocols":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"min_protocol_version":{"type":"TypeString","optional":true},"policy_name":{"type":"TypeString","optional":true},"policy_type":{"type":"TypeString","optional":true}}},"maxItems":1},"trusted_client_certificate_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"verify_client_cert_issuer_dn":{"type":"TypeBool","optional":true,"default":false}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trusted_client_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"data":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true}}}},"trusted_root_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"data":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"key_vault_secret_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true}}}},"url_path_map":{"type":"TypeList","optional":true,"elem":{"schema":{"default_backend_address_pool_id":{"type":"TypeString","computed":true},"default_backend_address_pool_name":{"type":"TypeString","optional":true},"default_backend_http_settings_id":{"type":"TypeString","computed":true},"default_backend_http_settings_name":{"type":"TypeString","optional":true},"default_redirect_configuration_id":{"type":"TypeString","computed":true},"default_redirect_configuration_name":{"type":"TypeString","optional":true},"default_rewrite_rule_set_id":{"type":"TypeString","computed":true},"default_rewrite_rule_set_name":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"path_rule":{"type":"TypeList","required":true,"elem":{"schema":{"backend_address_pool_id":{"type":"TypeString","computed":true},"backend_address_pool_name":{"type":"TypeString","optional":true},"backend_http_settings_id":{"type":"TypeString","computed":true},"backend_http_settings_name":{"type":"TypeString","optional":true},"firewall_policy_id":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"paths":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"redirect_configuration_id":{"type":"TypeString","computed":true},"redirect_configuration_name":{"type":"TypeString","optional":true},"rewrite_rule_set_id":{"type":"TypeString","computed":true},"rewrite_rule_set_name":{"type":"TypeString","optional":true}}}}}}},"waf_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"disabled_rule_group":{"type":"TypeList","optional":true,"elem":{"schema":{"rule_group_name":{"type":"TypeString","required":true},"rules":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}}}}},"enabled":{"type":"TypeBool","required":true},"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true},"selector_match_operator":{"type":"TypeString","optional":true}}}},"file_upload_limit_mb":{"type":"TypeInt","optional":true,"default":100},"firewall_mode":{"type":"TypeString","required":true},"max_request_body_size_kb":{"type":"TypeInt","optional":true,"default":128},"request_body_check":{"type":"TypeBool","optional":true,"default":true},"rule_set_type":{"type":"TypeString","optional":true,"default":"OWASP"},"rule_set_version":{"type":"TypeString","required":true}}},"maxItems":1},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_application_insights":{"schema":{"app_id":{"type":"TypeString","computed":true},"application_type":{"type":"TypeString","required":true,"forceNew":true},"connection_string":{"type":"TypeString","computed":true},"daily_data_cap_in_gb":{"type":"TypeFloat","optional":true,"computed":true},"daily_data_cap_notifications_disabled":{"type":"TypeBool","optional":true,"computed":true},"disable_ip_masking":{"type":"TypeBool","optional":true,"default":false},"force_customer_storage_for_profiler":{"type":"TypeBool","optional":true,"default":false},"instrumentation_key":{"type":"TypeString","computed":true},"internet_ingestion_enabled":{"type":"TypeBool","optional":true,"default":true},"internet_query_enabled":{"type":"TypeBool","optional":true,"default":true},"local_authentication_disabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":90},"sampling_percentage":{"type":"TypeFloat","optional":true,"default":100},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":30,"update":30}},"azurerm_application_insights_analytics_item":{"schema":{"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"content":{"type":"TypeString","required":true},"function_alias":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","required":true,"forceNew":true},"time_created":{"type":"TypeString","computed":true},"time_modified":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_api_key":{"schema":{"api_key":{"type":"TypeString","computed":true},"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_permissions":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"write_permissions":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_smart_detection_rule":{"schema":{"additional_email_recipients":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"send_emails_to_subscription_owners":{"type":"TypeBool","optional":true,"default":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_standard_web_test":{"schema":{"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true},"frequency":{"type":"TypeInt","optional":true,"default":300},"geo_locations":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"request":{"type":"TypeList","required":true,"elem":{"schema":{"body":{"type":"TypeString","optional":true},"follow_redirects_enabled":{"type":"TypeBool","optional":true,"default":true},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"http_verb":{"type":"TypeString","optional":true,"default":"GET"},"parse_dependent_requests_enabled":{"type":"TypeBool","optional":true,"default":true},"url":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retry_enabled":{"type":"TypeBool","optional":true},"synthetic_monitor_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout":{"type":"TypeInt","optional":true,"default":30},"validation_rules":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"content":{"type":"TypeList","optional":true,"elem":{"schema":{"content_match":{"type":"TypeString","required":true},"ignore_case":{"type":"TypeBool","optional":true,"default":false},"pass_if_text_found":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"expected_status_code":{"type":"TypeInt","optional":true,"default":200},"ssl_cert_remaining_lifetime":{"type":"TypeInt","optional":true},"ssl_check_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_web_test":{"schema":{"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"configuration":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true},"frequency":{"type":"TypeInt","optional":true,"default":300},"geo_locations":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"kind":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retry_enabled":{"type":"TypeBool","optional":true},"synthetic_monitor_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout":{"type":"TypeInt","optional":true,"default":30}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_workbook":{"schema":{"category":{"type":"TypeString","optional":true,"default":"workbook"},"data_json":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_id":{"type":"TypeString","optional":true,"default":"azure monitor"},"storage_container_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_workbook_template":{"schema":{"author":{"type":"TypeString","optional":true},"galleries":{"type":"TypeList","required":true,"elem":{"schema":{"category":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"order":{"type":"TypeInt","optional":true,"default":0},"resource_type":{"type":"TypeString","optional":true,"default":"Azure Monitor"},"type":{"type":"TypeString","optional":true,"default":"workbook"}}},"minItems":1},"localized":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"default":0},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_data":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_security_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_kubernetes_cluster":{"schema":{"agent_public_key_certificate":{"type":"TypeString","required":true,"forceNew":true},"agent_version":{"type":"TypeString","computed":true},"distribution":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"infrastructure":{"type":"TypeString","computed":true},"kubernetes_version":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"offering":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"total_core_count":{"type":"TypeInt","computed":true},"total_node_count":{"type":"TypeInt","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_kubernetes_cluster_extension":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"configuration_protected_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"configuration_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"current_version":{"type":"TypeString","computed":true},"extension_type":{"type":"TypeString","required":true,"forceNew":true},"identity":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"release_namespace":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"release_train":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"target_namespace":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_kubernetes_flux_configuration":{"schema":{"blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","optional":true},"container_id":{"type":"TypeString","required":true},"local_auth_reference":{"type":"TypeString","optional":true},"sas_token":{"type":"TypeString","optional":true},"service_principal":{"type":"TypeList","optional":true,"elem":{"schema":{"client_certificate_base64":{"type":"TypeString","optional":true},"client_certificate_password":{"type":"TypeString","optional":true},"client_certificate_send_chain":{"type":"TypeBool","optional":true,"default":false},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600}}},"maxItems":1},"bucket":{"type":"TypeList","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","optional":true},"bucket_name":{"type":"TypeString","required":true},"local_auth_reference":{"type":"TypeString","optional":true},"secret_key_base64":{"type":"TypeString","optional":true},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600},"tls_enabled":{"type":"TypeBool","optional":true,"default":true},"url":{"type":"TypeString","required":true}}},"maxItems":1},"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"continuous_reconciliation_enabled":{"type":"TypeBool","optional":true,"default":true},"git_repository":{"type":"TypeList","optional":true,"elem":{"schema":{"https_ca_cert_base64":{"type":"TypeString","optional":true},"https_key_base64":{"type":"TypeString","optional":true},"https_user":{"type":"TypeString","optional":true},"local_auth_reference":{"type":"TypeString","optional":true},"reference_type":{"type":"TypeString","required":true},"reference_value":{"type":"TypeString","required":true},"ssh_known_hosts_base64":{"type":"TypeString","optional":true},"ssh_private_key_base64":{"type":"TypeString","optional":true},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600},"url":{"type":"TypeString","required":true}}},"maxItems":1},"kustomizations":{"type":"TypeSet","required":true,"elem":{"schema":{"depends_on":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"garbage_collection_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"recreating_enabled":{"type":"TypeBool","optional":true,"default":false},"retry_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","optional":true,"default":"namespace","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_machine_extension":{"schema":{"arc_machine_id":{"type":"TypeString","required":true,"forceNew":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true,"default":true},"force_update_tag":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protected_settings":{"type":"TypeString","optional":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"settings":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true},"type_handler_version":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_private_link_scope":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_attestation_provider":{"schema":{"attestation_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"open_enclave_policy_base64":{"type":"TypeString","optional":true},"policy":{"type":"TypeList","optional":true,"elem":{"schema":{"data":{"type":"TypeString","optional":true},"environment_type":{"type":"TypeString","optional":true}}}},"policy_signing_certificate_data":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sev_snp_policy_base64":{"type":"TypeString","optional":true},"sgx_enclave_policy_base64":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tpm_policy_base64":{"type":"TypeString","optional":true},"trust_model":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automanage_configuration":{"schema":{"antimalware":{"type":"TypeList","optional":true,"elem":{"schema":{"exclusions":{"type":"TypeList","optional":true,"elem":{"schema":{"extensions":{"type":"TypeString","optional":true},"paths":{"type":"TypeString","optional":true},"processes":{"type":"TypeString","optional":true}}},"maxItems":1},"real_time_protection_enabled":{"type":"TypeBool","optional":true,"default":false},"scheduled_scan_day":{"type":"TypeInt","optional":true,"default":8},"scheduled_scan_enabled":{"type":"TypeBool","optional":true,"default":false},"scheduled_scan_time_in_minutes":{"type":"TypeInt","optional":true,"default":0},"scheduled_scan_type":{"type":"TypeString","optional":true,"default":"Quick"}}},"maxItems":1},"automation_account_enabled":{"type":"TypeBool","optional":true,"default":false},"azure_security_baseline":{"type":"TypeList","optional":true,"elem":{"schema":{"assignment_type":{"type":"TypeString","optional":true,"default":"ApplyAndAutoCorrect"}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"instant_rp_retention_range_in_days":{"type":"TypeInt","optional":true,"default":5},"policy_name":{"type":"TypeString","optional":true},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"daily_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_duration":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","optional":true},"duration_type":{"type":"TypeString","optional":true,"default":"Days"}}},"maxItems":1},"retention_times":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_policy_type":{"type":"TypeString","optional":true,"default":"LongTermRetentionPolicy"},"weekly_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_duration":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","optional":true},"duration_type":{"type":"TypeString","optional":true,"default":"Weeks"}}},"maxItems":1},"retention_times":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"schedule_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule_policy_type":{"type":"TypeString","optional":true,"default":"SimpleSchedulePolicy"},"schedule_run_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"schedule_run_frequency":{"type":"TypeString","optional":true,"default":"Daily"},"schedule_run_times":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"time_zone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"boot_diagnostics_enabled":{"type":"TypeBool","optional":true,"default":false},"defender_for_cloud_enabled":{"type":"TypeBool","optional":true,"default":false},"guest_configuration_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"log_analytics_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"status_change_alert_enabled":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_account":{"schema":{"dsc_primary_access_key":{"type":"TypeString","computed":true},"dsc_secondary_access_key":{"type":"TypeString","computed":true},"dsc_server_endpoint":{"type":"TypeString","computed":true},"encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"key_source":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}}},"hybrid_service_url":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_connection":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_certificate":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"base64":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"exportable":{"type":"TypeBool","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true},"values":{"type":"TypeMap","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection_certificate":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"automation_certificate_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection_classic_certificate":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"certificate_asset_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true},"subscription_name":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection_service_principal":{"schema":{"application_id":{"type":"TypeString","required":true},"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"certificate_thumbprint":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection_type":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"field":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"is_encrypted":{"type":"TypeBool","optional":true},"is_optional":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"is_global":{"type":"TypeBool","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":10}},"azurerm_automation_credential":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_dsc_configuration":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"content_embedded":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"log_verbose":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"state":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_dsc_nodeconfiguration":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"configuration_name":{"type":"TypeString","computed":true},"content_embedded":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_hybrid_runbook_worker":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"ip":{"type":"TypeString","computed":true},"last_seen_date_time":{"type":"TypeString","computed":true},"registration_date_time":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"vm_resource_id":{"type":"TypeString","required":true,"forceNew":true},"worker_group_name":{"type":"TypeString","required":true,"forceNew":true},"worker_id":{"type":"TypeString","required":true,"forceNew":true},"worker_name":{"type":"TypeString","computed":true},"worker_type":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":10}},"azurerm_automation_hybrid_runbook_worker_group":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"credential_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_automation_job_schedule":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"job_schedule_id":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"run_on":{"type":"TypeString","optional":true,"forceNew":true},"runbook_name":{"type":"TypeString","required":true,"forceNew":true},"schedule_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_module":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"module_link":{"type":"TypeList","required":true,"elem":{"schema":{"hash":{"type":"TypeList","optional":true,"elem":{"schema":{"algorithm":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_runbook":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"content":{"type":"TypeString","optional":true,"computed":true},"description":{"type":"TypeString","optional":true},"draft":{"type":"TypeList","optional":true,"elem":{"schema":{"content_link":{"type":"TypeList","optional":true,"elem":{"schema":{"hash":{"type":"TypeList","optional":true,"elem":{"schema":{"algorithm":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"creation_time":{"type":"TypeString","computed":true},"edit_mode_enabled":{"type":"TypeBool","optional":true},"last_modified_time":{"type":"TypeString","computed":true},"output_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"parameters":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"key":{"type":"TypeString","required":true},"mandatory":{"type":"TypeBool","optional":true,"default":false},"position":{"type":"TypeInt","optional":true},"type":{"type":"TypeString","required":true}}}}}},"maxItems":1},"job_schedule":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"job_schedule_id":{"type":"TypeString","computed":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"run_on":{"type":"TypeString","optional":true},"schedule_name":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"log_activity_trace_level":{"type":"TypeInt","optional":true},"log_progress":{"type":"TypeBool","required":true},"log_verbose":{"type":"TypeBool","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"publish_content_link":{"type":"TypeList","optional":true,"elem":{"schema":{"hash":{"type":"TypeList","optional":true,"elem":{"schema":{"algorithm":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"runbook_type":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_schedule":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"expiry_time":{"type":"TypeString","optional":true,"computed":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","optional":true,"computed":true},"month_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"monthly_occurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"day":{"type":"TypeString","required":true},"occurrence":{"type":"TypeInt","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"start_time":{"type":"TypeString","optional":true,"computed":true},"timezone":{"type":"TypeString","optional":true,"default":"Etc/UTC"},"week_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_software_update_configuration":{"schema":{"automation_account_id":{"type":"TypeString","required":true,"forceNew":true},"duration":{"type":"TypeString","optional":true,"default":"PT2H"},"error_code":{"type":"TypeString","computed":true},"error_meesage":{"type":"TypeString","computed":true},"error_message":{"type":"TypeString","computed":true},"linux":{"type":"TypeList","optional":true,"elem":{"schema":{"classification_included":{"type":"TypeString","optional":true,"computed":true},"classifications_included":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"excluded_packages":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"included_packages":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"reboot":{"type":"TypeString","optional":true,"default":"IfRequired"}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"non_azure_computer_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"operating_system":{"type":"TypeString","optional":true,"computed":true},"post_task":{"type":"TypeList","optional":true,"elem":{"schema":{"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"source":{"type":"TypeString","optional":true}}},"maxItems":1},"pre_task":{"type":"TypeList","optional":true,"elem":{"schema":{"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"source":{"type":"TypeString","optional":true}}},"maxItems":1},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"advanced_month_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}},"advanced_week_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"creation_time":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"expiry_time":{"type":"TypeString","optional":true,"computed":true},"expiry_time_offset_minutes":{"type":"TypeFloat","optional":true,"computed":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","optional":true},"is_enabled":{"type":"TypeBool","optional":true,"default":true},"last_modified_time":{"type":"TypeString","computed":true},"monthly_occurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"day":{"type":"TypeString","required":true},"occurrence":{"type":"TypeInt","required":true}}},"maxItems":1},"next_run":{"type":"TypeString","optional":true,"computed":true},"next_run_offset_minutes":{"type":"TypeFloat","optional":true,"computed":true},"start_time":{"type":"TypeString","optional":true,"computed":true},"start_time_offset_minutes":{"type":"TypeFloat","optional":true,"computed":true},"time_zone":{"type":"TypeString","optional":true,"default":"Etc/UTC"}}},"maxItems":1},"target":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_query":{"type":"TypeList","optional":true,"elem":{"schema":{"locations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"scope":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"tag_filter":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeList","optional":true,"elem":{"schema":{"tag":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}}}}},"non_azure_query":{"type":"TypeList","optional":true,"elem":{"schema":{"function_alias":{"type":"TypeString","optional":true},"workspace_id":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"virtual_machine_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"windows":{"type":"TypeList","optional":true,"elem":{"schema":{"classification_included":{"type":"TypeString","optional":true,"computed":true},"classifications_included":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"excluded_knowledge_base_numbers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"included_knowledge_base_numbers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"reboot":{"type":"TypeString","optional":true,"default":"IfRequired"}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":10,"update":30}},"azurerm_automation_source_control":{"schema":{"automatic_sync":{"type":"TypeBool","optional":true,"default":false},"automation_account_id":{"type":"TypeString","required":true,"forceNew":true},"branch":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"folder_path":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"publish_runbook_enabled":{"type":"TypeBool","optional":true,"default":true},"repository_url":{"type":"TypeString","required":true},"security":{"type":"TypeList","required":true,"elem":{"schema":{"refresh_token":{"type":"TypeString","optional":true},"token":{"type":"TypeString","required":true},"token_type":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"source_control_type":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_automation_variable_bool":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_variable_datetime":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_variable_int":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeInt","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_variable_object":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_variable_string":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_watcher":{"schema":{"automation_account_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"etag":{"type":"TypeString","optional":true},"execution_frequency_in_seconds":{"type":"TypeInt","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"script_name":{"type":"TypeString","required":true,"forceNew":true},"script_parameters":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"script_run_on":{"type":"TypeString","required":true},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_automation_webhook":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"expiry_time":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"run_on_worker_group":{"type":"TypeString","optional":true},"runbook_name":{"type":"TypeString","required":true},"uri":{"type":"TypeString","configMode":"Auto","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_availability_set":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"managed":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform_fault_domain_count":{"type":"TypeInt","optional":true,"default":3,"forceNew":true},"platform_update_domain_count":{"type":"TypeInt","optional":true,"default":5,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_container_storage_account":{"schema":{"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_policy_file_share":{"schema":{"backup":{"type":"TypeList","required":true,"elem":{"schema":{"frequency":{"type":"TypeString","required":true},"hourly":{"type":"TypeList","optional":true,"elem":{"schema":{"interval":{"type":"TypeInt","required":true},"start_time":{"type":"TypeString","required":true},"window_duration":{"type":"TypeInt","required":true}}},"maxItems":1},"time":{"type":"TypeString","optional":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_daily":{"type":"TypeList","required":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true}}},"maxItems":1},"retention_monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_last_days":{"type":"TypeBool","optional":true,"default":false},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"weekdays":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_yearly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_last_days":{"type":"TypeBool","optional":true,"default":false},"months":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"timezone":{"type":"TypeString","optional":true,"default":"UTC"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_policy_vm":{"schema":{"backup":{"type":"TypeList","required":true,"elem":{"schema":{"frequency":{"type":"TypeString","required":true},"hour_duration":{"type":"TypeInt","optional":true},"hour_interval":{"type":"TypeInt","optional":true},"time":{"type":"TypeString","required":true},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"instant_restore_resource_group":{"type":"TypeList","optional":true,"elem":{"schema":{"prefix":{"type":"TypeString","required":true},"suffix":{"type":"TypeString","optional":true}}},"maxItems":1},"instant_restore_retention_days":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_type":{"type":"TypeString","optional":true,"default":"V1","forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_daily":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true}}},"maxItems":1},"retention_monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_last_days":{"type":"TypeBool","optional":true,"default":false},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"weekdays":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_yearly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_last_days":{"type":"TypeBool","optional":true,"default":false},"months":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"timezone":{"type":"TypeString","optional":true,"default":"UTC"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_policy_vm_workload":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"protection_policy":{"type":"TypeSet","required":true,"elem":{"schema":{"backup":{"type":"TypeList","required":true,"elem":{"schema":{"frequency":{"type":"TypeString","optional":true},"frequency_in_minutes":{"type":"TypeInt","optional":true},"time":{"type":"TypeString","optional":true},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"policy_type":{"type":"TypeString","required":true},"retention_daily":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true}}},"maxItems":1},"retention_monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"format_type":{"type":"TypeString","required":true},"monthdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"weekdays":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_yearly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"format_type":{"type":"TypeString","required":true},"monthdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"months":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"simple_retention":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true}}},"maxItems":1}}}},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"settings":{"type":"TypeList","required":true,"elem":{"schema":{"compression_enabled":{"type":"TypeBool","optional":true,"default":false},"time_zone":{"type":"TypeString","required":true}}},"maxItems":1},"workload_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_protected_file_share":{"schema":{"backup_policy_id":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_file_share_name":{"type":"TypeString","required":true,"forceNew":true},"source_storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":80,"read":5,"delete":80,"update":80}},"azurerm_backup_protected_vm":{"schema":{"backup_policy_id":{"type":"TypeString","optional":true},"exclude_disk_luns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_disk_luns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"protection_state":{"type":"TypeString","optional":true,"computed":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_vm_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":120,"read":5,"delete":80,"update":120}},"azurerm_bastion_host":{"schema":{"copy_paste_enabled":{"type":"TypeBool","optional":true,"default":true},"dns_name":{"type":"TypeString","computed":true},"file_copy_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_configuration":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ip_connect_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scale_units":{"type":"TypeInt","optional":true,"default":2},"shareable_link_enabled":{"type":"TypeBool","optional":true,"default":false},"sku":{"type":"TypeString","optional":true,"default":"Basic"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tunneling_enabled":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_batch_account":{"schema":{"account_endpoint":{"type":"TypeString","computed":true},"allowed_authentication_modes":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"encryption":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"account_access":{"type":"TypeList","optional":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"ip_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_range":{"type":"TypeString","required":true}}}}}},"maxItems":1},"node_management_access":{"type":"TypeList","optional":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"ip_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_range":{"type":"TypeString","required":true}}}}}},"maxItems":1}}},"maxItems":1},"pool_allocation_mode":{"type":"TypeString","optional":true,"default":"BatchService"},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"storage_account_authentication_mode":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_account_node_identity":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_batch_application":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"allow_updates":{"type":"TypeBool","optional":true,"default":true},"default_version":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_batch_certificate":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"certificate":{"type":"TypeString","required":true},"format":{"type":"TypeString","required":true},"name":{"type":"TypeString","computed":true},"password":{"type":"TypeString","optional":true},"public_data":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","required":true,"forceNew":true},"thumbprint_algorithm":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_batch_job":{"schema":{"batch_pool_id":{"type":"TypeString","required":true,"forceNew":true},"common_environment_properties":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"default":0},"task_retry_maximum":{"type":"TypeInt","optional":true}},"timeouts":{"create":5,"read":5,"delete":5,"update":5}},"azurerm_batch_pool":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"auto_scale":{"type":"TypeList","optional":true,"elem":{"schema":{"evaluation_interval":{"type":"TypeString","optional":true,"default":"PT15M"},"formula":{"type":"TypeString","required":true}}},"maxItems":1},"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"store_location":{"type":"TypeString","required":true},"store_name":{"type":"TypeString","optional":true},"visibility":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"container_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"container_image_names":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"container_registries":{"type":"TypeList","configMode":"Auto","optional":true,"forceNew":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"registry_server":{"type":"TypeString","required":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Container Registry access.","forceNew":true},"user_name":{"type":"TypeString","optional":true,"forceNew":true}}}},"type":{"type":"TypeString","optional":true}}},"maxItems":1,"minItems":1},"data_disks":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"default":"ReadOnly"},"disk_size_gb":{"type":"TypeInt","required":true},"lun":{"type":"TypeInt","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"Standard_LRS"}}}},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_encryption_target":{"type":"TypeString","required":true}}}},"display_name":{"type":"TypeString","optional":true,"forceNew":true},"extensions":{"type":"TypeList","optional":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"provision_after_extensions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true},"settings_json":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","optional":true}}}},"fixed_scale":{"type":"TypeList","optional":true,"elem":{"schema":{"node_deallocation_method":{"type":"TypeString","optional":true},"resize_timeout":{"type":"TypeString","optional":true,"default":"PT15M"},"target_dedicated_nodes":{"type":"TypeInt","optional":true,"default":1},"target_low_priority_nodes":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"inter_node_communication":{"type":"TypeString","optional":true,"default":"Enabled"},"license_type":{"type":"TypeString","optional":true},"max_tasks_per_node":{"type":"TypeInt","optional":true,"default":1,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"mount":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","optional":true},"account_name":{"type":"TypeString","required":true},"blobfuse_options":{"type":"TypeString","optional":true},"container_name":{"type":"TypeString","required":true},"identity_id":{"type":"TypeString","optional":true},"relative_mount_path":{"type":"TypeString","required":true},"sas_key":{"type":"TypeString","optional":true}}},"maxItems":1},"azure_file_share":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"azure_file_url":{"type":"TypeString","required":true},"mount_options":{"type":"TypeString","optional":true},"relative_mount_path":{"type":"TypeString","required":true}}}},"cifs_mount":{"type":"TypeList","optional":true,"elem":{"schema":{"mount_options":{"type":"TypeString","optional":true},"password":{"type":"TypeString","required":true},"relative_mount_path":{"type":"TypeString","required":true},"source":{"type":"TypeString","required":true},"user_name":{"type":"TypeString","required":true}}}},"nfs_mount":{"type":"TypeList","optional":true,"elem":{"schema":{"mount_options":{"type":"TypeString","optional":true},"relative_mount_path":{"type":"TypeString","required":true},"source":{"type":"TypeString","required":true}}}}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dynamic_vnet_assignment_scope":{"type":"TypeString","optional":true,"default":"none","forceNew":true},"endpoint_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","required":true,"forceNew":true},"frontend_port_range":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_rules":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"access":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true,"forceNew":true},"source_address_prefix":{"type":"TypeString","required":true,"forceNew":true},"source_port_ranges":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString","default":"*"}}}}},"protocol":{"type":"TypeString","required":true,"forceNew":true}}}},"public_address_provisioning_type":{"type":"TypeString","optional":true},"public_ips":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"node_agent_sku_id":{"type":"TypeString","required":true,"forceNew":true},"node_placement":{"type":"TypeList","optional":true,"elem":{"schema":{"policy":{"type":"TypeString","optional":true,"default":"Regional"}}}},"os_disk_placement":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"start_task":{"type":"TypeList","optional":true,"elem":{"schema":{"command_line":{"type":"TypeString","required":true},"common_environment_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"container":{"type":"TypeList","optional":true,"elem":{"schema":{"image_name":{"type":"TypeString","required":true},"registry":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"registry_server":{"type":"TypeString","required":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Container Registry access.","forceNew":true},"user_name":{"type":"TypeString","optional":true,"forceNew":true}}}},"run_options":{"type":"TypeString","optional":true},"working_directory":{"type":"TypeString","optional":true}}}},"resource_file":{"type":"TypeList","optional":true,"elem":{"schema":{"auto_storage_container_name":{"type":"TypeString","optional":true},"blob_prefix":{"type":"TypeString","optional":true},"file_mode":{"type":"TypeString","optional":true},"file_path":{"type":"TypeString","optional":true},"http_url":{"type":"TypeString","optional":true},"storage_container_url":{"type":"TypeString","optional":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}}},"task_retry_maximum":{"type":"TypeInt","optional":true},"user_identity":{"type":"TypeList","required":true,"elem":{"schema":{"auto_user":{"type":"TypeList","optional":true,"elem":{"schema":{"elevation_level":{"type":"TypeString","optional":true,"default":"NonAdmin"},"scope":{"type":"TypeString","optional":true,"default":"Task"}}},"maxItems":1},"user_name":{"type":"TypeString","optional":true}}},"maxItems":1},"wait_for_success":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"stop_pending_resize_operation":{"type":"TypeBool","optional":true,"default":false},"storage_image_reference":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true,"forceNew":true},"offer":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","optional":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"target_node_communication_mode":{"type":"TypeString","optional":true},"task_scheduling_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"node_fill_type":{"type":"TypeString","optional":true,"computed":true}}}},"user_accounts":{"type":"TypeList","optional":true,"elem":{"schema":{"elevation_level":{"type":"TypeString","required":true},"linux_user_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"gid":{"type":"TypeInt","optional":true},"ssh_private_key":{"type":"TypeString","optional":true},"uid":{"type":"TypeInt","optional":true}}}},"name":{"type":"TypeString","required":true},"password":{"type":"TypeString","required":true},"windows_user_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"login_mode":{"type":"TypeString","required":true}}}}}}},"vm_size":{"type":"TypeString","required":true,"forceNew":true},"windows":{"type":"TypeList","optional":true,"elem":{"schema":{"enable_automatic_updates":{"type":"TypeBool","optional":true,"default":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_billing_account_cost_management_export":{"schema":{"active":{"type":"TypeBool","optional":true,"default":true},"billing_account_id":{"type":"TypeString","required":true,"forceNew":true},"export_data_options":{"type":"TypeList","required":true,"elem":{"schema":{"time_frame":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"export_data_storage_location":{"type":"TypeList","required":true,"elem":{"schema":{"container_id":{"type":"TypeString","required":true,"forceNew":true},"root_folder_path":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recurrence_period_end_date":{"type":"TypeString","required":true},"recurrence_period_start_date":{"type":"TypeString","required":true},"recurrence_type":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_blueprint_assignment":{"schema":{"blueprint_name":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"lock_exclude_actions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":200},"lock_exclude_principals":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":5},"lock_mode":{"type":"TypeString","optional":true,"default":"None"},"name":{"type":"TypeString","required":true,"forceNew":true},"parameter_values":{"type":"TypeString","optional":true},"resource_groups":{"type":"TypeString","optional":true},"target_subscription_id":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","computed":true},"version_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_bot_channel_alexa":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"skill_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_direct_line_speech":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"cognitive_service_access_key":{"type":"TypeString","required":true},"cognitive_service_location":{"type":"TypeString","required":true},"custom_speech_model_id":{"type":"TypeString","optional":true},"custom_voice_deployment_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_directline":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site":{"type":"TypeSet","required":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"enhanced_authentication_enabled":{"type":"TypeBool","optional":true,"default":false},"id":{"type":"TypeString","computed":true},"key":{"type":"TypeString","computed":true},"key2":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"trusted_origins":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"v1_allowed":{"type":"TypeBool","optional":true,"default":true},"v3_allowed":{"type":"TypeBool","optional":true,"default":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_email":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"email_address":{"type":"TypeString","required":true},"email_password":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_facebook":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"facebook_application_id":{"type":"TypeString","required":true},"facebook_application_secret":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"page":{"type":"TypeSet","required":true,"elem":{"schema":{"access_token":{"type":"TypeString","required":true},"id":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_line":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"line_channel":{"type":"TypeSet","required":true,"elem":{"schema":{"access_token":{"type":"TypeString","required":true},"secret":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_ms_teams":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"calling_web_hook":{"type":"TypeString","optional":true,"computed":true},"enable_calling":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_slack":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"landing_page_url":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"signing_secret":{"type":"TypeString","optional":true},"verification_token":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_sms":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sms_channel_account_security_id":{"type":"TypeString","required":true},"sms_channel_auth_token":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_web_chat":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_names":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channels_registration":{"schema":{"cmk_key_vault_url":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"developer_app_insights_api_key":{"type":"TypeString","optional":true,"computed":true},"developer_app_insights_application_id":{"type":"TypeString","optional":true,"computed":true},"developer_app_insights_key":{"type":"TypeString","optional":true,"computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"endpoint":{"type":"TypeString","optional":true},"icon_url":{"type":"TypeString","optional":true,"computed":true},"isolated_network_enabled":{"type":"TypeBool","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"microsoft_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"streaming_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_connection":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeString","optional":true},"service_provider_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_service_azure_bot":{"schema":{"developer_app_insights_api_key":{"type":"TypeString","optional":true},"developer_app_insights_application_id":{"type":"TypeString","optional":true},"developer_app_insights_key":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"endpoint":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"luis_app_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"luis_key":{"type":"TypeString","optional":true},"microsoft_app_id":{"type":"TypeString","required":true,"forceNew":true},"microsoft_app_msi_id":{"type":"TypeString","optional":true,"forceNew":true},"microsoft_app_tenant_id":{"type":"TypeString","optional":true,"forceNew":true},"microsoft_app_type":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"streaming_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_web_app":{"schema":{"developer_app_insights_api_key":{"type":"TypeString","optional":true,"computed":true},"developer_app_insights_application_id":{"type":"TypeString","optional":true,"computed":true},"developer_app_insights_key":{"type":"TypeString","optional":true,"computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"endpoint":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"luis_app_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"luis_key":{"type":"TypeString","optional":true},"microsoft_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_capacity_reservation":{"schema":{"capacity_reservation_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_capacity_reservation_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_endpoint":{"schema":{"content_types_to_compress":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"delivery_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"cache_expiration_action":{"type":"TypeList","optional":true,"elem":{"schema":{"behavior":{"type":"TypeString","required":true},"duration":{"type":"TypeString","optional":true}}},"maxItems":1},"cache_key_query_string_action":{"type":"TypeList","optional":true,"elem":{"schema":{"behavior":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true}}},"maxItems":1},"cookies_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"device_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}},"maxItems":1},"http_version_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"modify_request_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"modify_response_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"order":{"type":"TypeInt","required":true},"post_arg_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"query_string_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"remote_address_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true}}}},"request_body_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"request_header_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"request_method_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}},"maxItems":1},"request_scheme_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}},"maxItems":1},"request_uri_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"url_file_extension_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"url_file_name_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"url_path_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"url_redirect_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fragment":{"type":"TypeString","optional":true},"hostname":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","optional":true,"default":"MatchRequest"},"query_string":{"type":"TypeString","optional":true},"redirect_type":{"type":"TypeString","required":true}}},"maxItems":1},"url_rewrite_action":{"type":"TypeList","optional":true,"elem":{"schema":{"destination":{"type":"TypeString","required":true},"preserve_unmatched_path":{"type":"TypeBool","optional":true,"default":true},"source_pattern":{"type":"TypeString","required":true}}},"maxItems":1}}}},"fqdn":{"type":"TypeString","computed":true},"geo_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"country_codes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"relative_path":{"type":"TypeString","required":true}}}},"global_delivery_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"cache_expiration_action":{"type":"TypeList","optional":true,"elem":{"schema":{"behavior":{"type":"TypeString","required":true},"duration":{"type":"TypeString","optional":true}}},"maxItems":1},"cache_key_query_string_action":{"type":"TypeList","optional":true,"elem":{"schema":{"behavior":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true}}},"maxItems":1},"modify_request_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"modify_response_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"url_redirect_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fragment":{"type":"TypeString","optional":true},"hostname":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","optional":true,"default":"MatchRequest"},"query_string":{"type":"TypeString","optional":true},"redirect_type":{"type":"TypeString","required":true}}},"maxItems":1},"url_rewrite_action":{"type":"TypeList","optional":true,"elem":{"schema":{"destination":{"type":"TypeString","required":true},"preserve_unmatched_path":{"type":"TypeBool","optional":true,"default":true},"source_pattern":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"is_compression_enabled":{"type":"TypeBool","optional":true},"is_http_allowed":{"type":"TypeBool","optional":true,"default":true},"is_https_allowed":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"optimization_type":{"type":"TypeString","optional":true},"origin":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"host_name":{"type":"TypeString","required":true,"forceNew":true},"http_port":{"type":"TypeInt","optional":true,"default":80,"forceNew":true},"https_port":{"type":"TypeInt","optional":true,"default":443,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}}},"origin_host_header":{"type":"TypeString","optional":true},"origin_path":{"type":"TypeString","optional":true,"computed":true},"probe_path":{"type":"TypeString","optional":true,"computed":true},"profile_name":{"type":"TypeString","required":true,"forceNew":true},"querystring_caching_behaviour":{"type":"TypeString","optional":true,"default":"IgnoreQueryString"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_endpoint_custom_domain":{"schema":{"cdn_endpoint_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_managed_https":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_type":{"type":"TypeString","required":true},"protocol_type":{"type":"TypeString","required":true},"tls_version":{"type":"TypeString","optional":true,"default":"TLS12"}}},"maxItems":1,"minItems":1},"host_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"user_managed_https":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_certificate_id":{"type":"TypeString","optional":true,"computed":true},"key_vault_secret_id":{"type":"TypeString","optional":true,"computed":true},"tls_version":{"type":"TypeString","optional":true,"default":"TLS12"}}},"maxItems":1,"minItems":1}},"timeouts":{"create":720,"read":5,"delete":720,"update":1440}},"azurerm_cdn_frontdoor_custom_domain":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"dns_zone_id":{"type":"TypeString","optional":true},"expiration_date":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tls":{"type":"TypeList","required":true,"elem":{"schema":{"cdn_frontdoor_secret_id":{"type":"TypeString","optional":true,"computed":true},"certificate_type":{"type":"TypeString","optional":true,"default":"ManagedCertificate"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"TLS12"}}},"maxItems":1},"validation_token":{"type":"TypeString","computed":true}},"timeouts":{"create":720,"read":5,"delete":720,"update":1440}},"azurerm_cdn_frontdoor_custom_domain_association":{"schema":{"cdn_frontdoor_custom_domain_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_frontdoor_route_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_endpoint":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_firewall_policy":{"schema":{"custom_block_response_body":{"type":"TypeString","optional":true},"custom_block_response_status_code":{"type":"TypeInt","optional":true},"custom_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"match_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":600},"match_variable":{"type":"TypeString","required":true},"negation_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":5}}},"maxItems":10},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","optional":true,"default":1},"rate_limit_duration_in_minutes":{"type":"TypeInt","optional":true,"default":1},"rate_limit_threshold":{"type":"TypeInt","optional":true,"default":10},"type":{"type":"TypeString","required":true}}},"maxItems":100},"enabled":{"type":"TypeBool","optional":true,"default":true},"frontend_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"managed_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"override":{"type":"TypeList","optional":true,"elem":{"schema":{"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":false},"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"rule_id":{"type":"TypeString","required":true}}},"maxItems":1000},"rule_group_name":{"type":"TypeString","required":true}}},"maxItems":100},"type":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":100},"mode":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"redirect_url":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_origin":{"schema":{"cdn_frontdoor_origin_group_id":{"type":"TypeString","required":true,"forceNew":true},"certificate_name_check_enabled":{"type":"TypeBool","required":true},"enabled":{"type":"TypeBool","optional":true,"computed":true},"health_probes_enabled":{"type":"TypeBool","optional":true,"computed":true},"host_name":{"type":"TypeString","required":true},"http_port":{"type":"TypeInt","optional":true,"default":80},"https_port":{"type":"TypeInt","optional":true,"default":443},"name":{"type":"TypeString","required":true,"forceNew":true},"origin_host_header":{"type":"TypeString","optional":true},"priority":{"type":"TypeInt","optional":true,"default":1},"private_link":{"type":"TypeList","optional":true,"elem":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"private_link_target_id":{"type":"TypeString","required":true},"request_message":{"type":"TypeString","optional":true,"default":"Access request for CDN FrontDoor Private Link Origin"},"target_type":{"type":"TypeString","optional":true}}},"maxItems":1},"weight":{"type":"TypeInt","optional":true,"default":500}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_origin_group":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"health_probe":{"type":"TypeList","optional":true,"elem":{"schema":{"interval_in_seconds":{"type":"TypeInt","required":true},"path":{"type":"TypeString","optional":true,"default":"/"},"protocol":{"type":"TypeString","required":true},"request_type":{"type":"TypeString","optional":true,"default":"HEAD"}}},"maxItems":1},"load_balancing":{"type":"TypeList","required":true,"elem":{"schema":{"additional_latency_in_milliseconds":{"type":"TypeInt","optional":true,"default":50},"sample_size":{"type":"TypeInt","optional":true,"default":4},"successful_samples_required":{"type":"TypeInt","optional":true,"default":3}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"restore_traffic_time_to_healed_or_new_endpoint_in_minutes":{"type":"TypeInt","optional":true,"default":10},"session_affinity_enabled":{"type":"TypeBool","optional":true,"default":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_profile":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_guid":{"type":"TypeString","computed":true},"response_timeout_seconds":{"type":"TypeInt","optional":true,"default":120},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_route":{"schema":{"cache":{"type":"TypeList","optional":true,"elem":{"schema":{"compression_enabled":{"type":"TypeBool","optional":true,"default":false},"content_types_to_compress":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"query_string_caching_behavior":{"type":"TypeString","optional":true,"default":"IgnoreQueryString"},"query_strings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"cdn_frontdoor_custom_domain_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"cdn_frontdoor_endpoint_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_frontdoor_origin_group_id":{"type":"TypeString","required":true},"cdn_frontdoor_origin_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"cdn_frontdoor_origin_path":{"type":"TypeString","optional":true},"cdn_frontdoor_rule_set_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"forwarding_protocol":{"type":"TypeString","optional":true,"default":"MatchRequest"},"https_redirect_enabled":{"type":"TypeBool","optional":true,"default":true},"link_to_default_domain":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"patterns_to_match":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"supported_protocols":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":2}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_route_disable_link_to_default_domain":{"schema":{"cdn_frontdoor_custom_domain_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"cdn_frontdoor_route_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_rule":{"schema":{"actions":{"type":"TypeList","required":true,"elem":{"schema":{"request_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"header_action":{"type":"TypeString","required":true},"header_name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"response_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"header_action":{"type":"TypeString","required":true},"header_name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"route_configuration_override_action":{"type":"TypeList","optional":true,"elem":{"schema":{"cache_behavior":{"type":"TypeString","optional":true},"cache_duration":{"type":"TypeString","optional":true},"cdn_frontdoor_origin_group_id":{"type":"TypeString","optional":true},"compression_enabled":{"type":"TypeBool","optional":true},"forwarding_protocol":{"type":"TypeString","optional":true},"query_string_caching_behavior":{"type":"TypeString","optional":true},"query_string_parameters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":100}}},"maxItems":1},"url_redirect_action":{"type":"TypeList","optional":true,"elem":{"schema":{"destination_fragment":{"type":"TypeString","optional":true,"default":""},"destination_hostname":{"type":"TypeString","required":true},"destination_path":{"type":"TypeString","optional":true,"default":""},"query_string":{"type":"TypeString","optional":true,"default":""},"redirect_protocol":{"type":"TypeString","optional":true,"default":"MatchRequest"},"redirect_type":{"type":"TypeString","required":true}}},"maxItems":1},"url_rewrite_action":{"type":"TypeList","optional":true,"elem":{"schema":{"destination":{"type":"TypeString","required":true},"preserve_unmatched_path":{"type":"TypeBool","optional":true,"default":false},"source_pattern":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"behavior_on_match":{"type":"TypeString","optional":true,"default":"Continue"},"cdn_frontdoor_rule_set_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_frontdoor_rule_set_name":{"type":"TypeString","computed":true},"conditions":{"type":"TypeList","optional":true,"elem":{"schema":{"client_port_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true}}}},"cookies_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"cookie_name":{"type":"TypeString","required":true},"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"host_name_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"http_version_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":4},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"is_device_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"post_args_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"post_args_name":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"query_string_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"remote_address_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"IPMatch"}}}},"request_body_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"request_header_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"request_method_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":7},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"request_scheme_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString","default":"HTTP"},"maxItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"request_uri_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"server_port_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":2},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true}}}},"socket_address_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"IPMatch"}}}},"ssl_protocol_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":3},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"url_file_extension_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"url_filename_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"url_path_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"order":{"type":"TypeInt","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_rule_set":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_secret":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_frontdoor_profile_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"secret":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"customer_certificate":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"key_vault_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"subject_alternative_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_cdn_frontdoor_security_policy":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"security_policies":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"firewall":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"association":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"domain":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"active":{"type":"TypeBool","computed":true},"cdn_frontdoor_domain_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":500},"patterns_to_match":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1}}},"maxItems":1},"cdn_frontdoor_firewall_policy_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_cdn_profile":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cognitive_account":{"schema":{"custom_question_answering_search_service_id":{"type":"TypeString","optional":true},"custom_question_answering_search_service_key":{"type":"TypeString","optional":true},"custom_subdomain_name":{"type":"TypeString","optional":true,"forceNew":true},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"dynamic_throttling_enabled":{"type":"TypeBool","optional":true},"endpoint":{"type":"TypeString","computed":true},"fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"kind":{"type":"TypeString","required":true,"forceNew":true},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metrics_advisor_aad_client_id":{"type":"TypeString","optional":true,"forceNew":true},"metrics_advisor_aad_tenant_id":{"type":"TypeString","optional":true,"forceNew":true},"metrics_advisor_super_user_name":{"type":"TypeString","optional":true,"forceNew":true},"metrics_advisor_website_name":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_acls":{"type":"TypeList","optional":true,"elem":{"schema":{"default_action":{"type":"TypeString","required":true},"ip_rules":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"virtual_network_rules":{"type":"TypeSet","optional":true,"elem":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"subnet_id":{"type":"TypeString","required":true}}}}}},"maxItems":1},"outbound_network_access_restricted":{"type":"TypeBool","optional":true,"default":false},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"qna_runtime_endpoint":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","required":true},"storage":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cognitive_account_customer_managed_key":{"schema":{"cognitive_account_id":{"type":"TypeString","required":true,"forceNew":true},"identity_client_id":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cognitive_deployment":{"schema":{"cognitive_account_id":{"type":"TypeString","required":true,"forceNew":true},"model":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"format":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"rai_policy_name":{"type":"TypeString","optional":true,"forceNew":true},"scale":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true,"default":1,"forceNew":true},"family":{"type":"TypeString","optional":true,"forceNew":true},"size":{"type":"TypeString","optional":true,"forceNew":true},"tier":{"type":"TypeString","optional":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_communication_service":{"schema":{"data_location":{"type":"TypeString","optional":true,"default":"United States","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_confidential_ledger":{"schema":{"azuread_based_service_principal":{"type":"TypeList","required":true,"elem":{"schema":{"ledger_role_name":{"type":"TypeString","required":true},"principal_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"minItems":1},"certificate_based_security_principal":{"type":"TypeList","optional":true,"elem":{"schema":{"ledger_role_name":{"type":"TypeString","required":true},"pem_public_key":{"type":"TypeString","required":true}}}},"identity_service_endpoint":{"type":"TypeString","computed":true},"ledger_endpoint":{"type":"TypeString","computed":true},"ledger_type":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_consumption_budget_management_group":{"schema":{"amount":{"type":"TypeFloat","required":true},"etag":{"type":"TypeString","optional":true,"computed":true},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"not":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"tag":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"tag":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeSet","required":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeInt","required":true},"threshold_type":{"type":"TypeString","optional":true,"default":"Actual","forceNew":true}}},"maxItems":5,"minItems":1},"time_grain":{"type":"TypeString","optional":true,"default":"Monthly","forceNew":true},"time_period":{"type":"TypeList","required":true,"elem":{"schema":{"end_date":{"type":"TypeString","optional":true,"computed":true},"start_date":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_consumption_budget_resource_group":{"schema":{"amount":{"type":"TypeFloat","required":true},"etag":{"type":"TypeString","optional":true,"computed":true},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"not":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"tag":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"tag":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeSet","required":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"contact_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"contact_roles":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeInt","required":true},"threshold_type":{"type":"TypeString","optional":true,"default":"Actual","forceNew":true}}},"maxItems":5,"minItems":1},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true},"time_grain":{"type":"TypeString","optional":true,"default":"Monthly","forceNew":true},"time_period":{"type":"TypeList","required":true,"elem":{"schema":{"end_date":{"type":"TypeString","optional":true,"computed":true},"start_date":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_consumption_budget_subscription":{"schema":{"amount":{"type":"TypeFloat","required":true},"etag":{"type":"TypeString","optional":true,"computed":true},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"not":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"tag":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"tag":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeSet","required":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"contact_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"contact_roles":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeInt","required":true},"threshold_type":{"type":"TypeString","optional":true,"default":"Actual","forceNew":true}}},"maxItems":5,"minItems":1},"subscription_id":{"type":"TypeString","required":true,"forceNew":true},"time_grain":{"type":"TypeString","optional":true,"default":"Monthly","forceNew":true},"time_period":{"type":"TypeList","required":true,"elem":{"schema":{"end_date":{"type":"TypeString","optional":true,"computed":true},"start_date":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app":{"schema":{"container_app_environment_id":{"type":"TypeString","required":true,"description":"The ID of the Container App Environment to host this Container App.","forceNew":true},"custom_domain_verification_id":{"type":"TypeString","description":"The ID of the Custom Domain Verification for this Container App.","computed":true},"dapr":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The Dapr Application Identifier."},"app_port":{"type":"TypeInt","optional":true,"description":"The port which the application is listening on. This is the same as the `ingress` port."},"app_protocol":{"type":"TypeString","optional":true,"default":"http","description":"The protocol for the app. Possible values include `http` and `grpc`. Defaults to `http`."}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ingress":{"type":"TypeList","optional":true,"elem":{"schema":{"allow_insecure_connections":{"type":"TypeBool","optional":true,"default":false,"description":"Should this ingress allow insecure connections?"},"custom_domain":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_binding_type":{"type":"TypeString","optional":true,"default":"Disabled","description":"The Binding type. Possible values include `Disabled` and `SniEnabled`. Defaults to `Disabled`"},"certificate_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"description":"The hostname of the Certificate. Must be the CN or a named SAN in the certificate."}}},"maxItems":1},"external_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Is this an external Ingress."},"fqdn":{"type":"TypeString","description":"The FQDN of the ingress.","computed":true},"target_port":{"type":"TypeInt","required":true,"description":"The target port on the container for the Ingress traffic."},"traffic_weight":{"type":"TypeList","required":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"description":"The label to apply to the revision as a name prefix for routing traffic."},"latest_revision":{"type":"TypeBool","optional":true,"default":false,"description":"This traffic Weight relates to the latest stable Container Revision."},"percentage":{"type":"TypeInt","required":true,"description":"The percentage of traffic to send to this revision."},"revision_suffix":{"type":"TypeString","optional":true,"description":"The suffix string to append to the revision. This must be unique for the Container App's lifetime. A default hash created by the service will be used if this value is omitted."}}}},"transport":{"type":"TypeString","optional":true,"default":"auto","description":"The transport method for the Ingress. Possible values include `auto`, `http`, and `http2`. Defaults to `auto`"}}},"maxItems":1},"latest_revision_fqdn":{"type":"TypeString","description":"The FQDN of the Latest Revision of the Container App.","computed":true},"latest_revision_name":{"type":"TypeString","description":"The name of the latest Container Revision.","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"description":"The name for this Container App.","forceNew":true},"outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"registry":{"type":"TypeList","optional":true,"elem":{"schema":{"identity":{"type":"TypeString","optional":true,"description":"ID of the System or User Managed Identity used to pull images from the Container Registry"},"password_secret_name":{"type":"TypeString","optional":true,"description":"The name of the Secret Reference containing the password value for this user on the Container Registry."},"server":{"type":"TypeString","required":true,"description":"The hostname for the Container Registry."},"username":{"type":"TypeString","optional":true,"description":"The username to use for this Container Registry."}}},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"revision_mode":{"type":"TypeString","required":true},"secret":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The Secret name."},"value":{"type":"TypeString","required":true,"description":"The value for this secret."}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template":{"type":"TypeList","required":true,"elem":{"schema":{"container":{"type":"TypeList","required":true,"elem":{"schema":{"args":{"type":"TypeList","optional":true,"description":"A list of args to pass to the container.","elem":{"type":"TypeString"}},"command":{"type":"TypeList","optional":true,"description":"A command to pass to the container to override the default. This is provided as a list of command line elements without spaces.","elem":{"type":"TypeString"}},"cpu":{"type":"TypeFloat","required":true,"description":"The amount of vCPU to allocate to the container. Possible values include `0.25`, `0.5`, `0.75`, `1.0`, `1.25`, `1.5`, `1.75`, and `2.0`. **NOTE:** `cpu` and `memory` must be specified in `0.25'/'0.5Gi` combination increments. e.g. `1.0` / `2.0` or `0.5` / `1.0`"},"env":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the environment variable for the container."},"secret_name":{"type":"TypeString","optional":true,"description":"The name of the secret that contains the value for this environment variable."},"value":{"type":"TypeString","optional":true,"description":"The value for this environment variable. **NOTE:** This value is ignored if `secret_name` is used"}}},"minItems":1},"ephemeral_storage":{"type":"TypeString","description":"The amount of ephemeral storage available to the Container App.","computed":true},"image":{"type":"TypeString","required":true,"description":"The image to use to create the container."},"liveness_probe":{"type":"TypeList","optional":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","optional":true,"default":3,"description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`."},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The HTTP Header Name."},"value":{"type":"TypeString","required":true,"description":"The HTTP Header value."}}}},"host":{"type":"TypeString","optional":true,"description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes."},"initial_delay":{"type":"TypeInt","optional":true,"default":1,"description":"The time in seconds to wait after the container has started before the probe is started."},"interval_seconds":{"type":"TypeInt","optional":true,"default":10,"description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`"},"path":{"type":"TypeString","optional":true,"description":"The URI to use with the `host` for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port number on which to connect. Possible values are between `1` and `65535`."},"termination_grace_period_seconds":{"type":"TypeInt","description":"The time in seconds after the container is sent the termination signal before the process if forcibly killed.","computed":true},"timeout":{"type":"TypeInt","optional":true,"default":1,"description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`."},"transport":{"type":"TypeString","required":true,"description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`."}}},"minItems":1},"memory":{"type":"TypeString","required":true,"description":"The amount of memory to allocate to the container. Possible values include `0.5Gi`, `1.0Gi`, `1.5Gi`, `2.0Gi`, `2.5Gi`, `3.0Gi`, `3.5Gi`, and `4.0Gi`. **NOTE:** `cpu` and `memory` must be specified in `0.25'/'0.5Gi` combination increments. e.g. `1.25` / `2.5Gi` or `0.75` / `1.5Gi`"},"name":{"type":"TypeString","required":true,"description":"The name of the container."},"readiness_probe":{"type":"TypeList","optional":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","optional":true,"default":3,"description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`."},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The HTTP Header Name."},"value":{"type":"TypeString","required":true,"description":"The HTTP Header value."}}}},"host":{"type":"TypeString","optional":true,"description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes."},"interval_seconds":{"type":"TypeInt","optional":true,"default":10,"description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`"},"path":{"type":"TypeString","optional":true,"description":"The URI to use for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port number on which to connect. Possible values are between `1` and `65535`."},"success_count_threshold":{"type":"TypeInt","optional":true,"default":3,"description":"The number of consecutive successful responses required to consider this probe as successful. Possible values are between `1` and `10`. Defaults to `3`."},"timeout":{"type":"TypeInt","optional":true,"default":1,"description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`."},"transport":{"type":"TypeString","required":true,"description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`."}}},"minItems":1},"startup_probe":{"type":"TypeList","optional":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","optional":true,"default":3,"description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`."},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The HTTP Header Name."},"value":{"type":"TypeString","required":true,"description":"The HTTP Header value."}}}},"host":{"type":"TypeString","optional":true,"description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes."},"interval_seconds":{"type":"TypeInt","optional":true,"default":10,"description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`"},"path":{"type":"TypeString","optional":true,"description":"The URI to use with the `host` for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port number on which to connect. Possible values are between `1` and `65535`."},"termination_grace_period_seconds":{"type":"TypeInt","description":"The time in seconds after the container is sent the termination signal before the process if forcibly killed.","computed":true},"timeout":{"type":"TypeInt","optional":true,"default":1,"description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`."},"transport":{"type":"TypeString","required":true,"description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`."}}},"minItems":1},"volume_mounts":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the Volume to be mounted in the container."},"path":{"type":"TypeString","required":true,"description":"The path in the container at which to mount this volume."}}}}}},"minItems":1},"max_replicas":{"type":"TypeInt","optional":true,"default":10,"description":"The maximum number of replicas for this container."},"min_replicas":{"type":"TypeInt","optional":true,"description":"The minimum number of replicas for this container.","computed":true},"revision_suffix":{"type":"TypeString","optional":true,"description":"The suffix for the revision. This value must be unique for the lifetime of the Resource. If omitted the service will use a hash function to create one.","computed":true},"volume":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the volume."},"storage_name":{"type":"TypeString","optional":true,"description":"The name of the `AzureFile` storage. Required when `storage_type` is `AzureFile`"},"storage_type":{"type":"TypeString","optional":true,"default":"EmptyDir","description":"The type of storage volume. Possible values include `AzureFile` and `EmptyDir`. Defaults to `EmptyDir`."}}},"minItems":1}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app_environment":{"schema":{"default_domain":{"type":"TypeString","description":"The default publicly resolvable name of this Container App Environment","computed":true},"docker_bridge_cidr":{"type":"TypeString","description":"The network addressing in which the Container Apps in this Container App Environment will reside in CIDR notation.","computed":true},"infrastructure_subnet_id":{"type":"TypeString","optional":true,"description":"The existing Subnet to use for the Container Apps Control Plane. **NOTE:** The Subnet must have a `/21` or larger address space.","forceNew":true},"internal_load_balancer_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified.","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"log_analytics_workspace_id":{"type":"TypeString","optional":true,"description":"The ID for the Log Analytics Workspace to link this Container Apps Managed Environment to.","forceNew":true},"name":{"type":"TypeString","required":true,"description":"The name of the Container Apps Managed Environment.","forceNew":true},"platform_reserved_cidr":{"type":"TypeString","description":"The IP range, in CIDR notation, that is reserved for environment infrastructure IP addresses.","computed":true},"platform_reserved_dns_ip_address":{"type":"TypeString","description":"The IP address from the IP range defined by `platform_reserved_cidr` that is reserved for the internal DNS server.","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"static_ip_address":{"type":"TypeString","description":"The Static IP Address of the Environment.","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app_environment_certificate":{"schema":{"certificate_blob_base64":{"type":"TypeString","required":true,"description":"The Certificate Private Key as a base64 encoded PFX or PEM.","forceNew":true},"certificate_password":{"type":"TypeString","required":true,"description":"The password for the Certificate.","forceNew":true},"container_app_environment_id":{"type":"TypeString","required":true,"description":"The Container App Managed Environment ID to configure this Certificate on.","forceNew":true},"expiration_date":{"type":"TypeString","description":"The expiration date for the Certificate.","computed":true},"issue_date":{"type":"TypeString","description":"The date of issue for the Certificate.","computed":true},"issuer":{"type":"TypeString","description":"The Certificate Issuer.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Container Apps Environment Certificate.","forceNew":true},"subject_name":{"type":"TypeString","description":"The Subject Name for the Certificate.","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","description":"The Thumbprint of the Certificate.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app_environment_dapr_component":{"schema":{"component_type":{"type":"TypeString","required":true,"description":"The Dapr Component Type. For example `state.azure.blobstorage`.","forceNew":true},"container_app_environment_id":{"type":"TypeString","required":true,"description":"The Container App Managed Environment ID to configure this Dapr component on.","forceNew":true},"ignore_errors":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Dapr sidecar to continue initialisation if the component fails to load. Defaults to `false`"},"init_timeout":{"type":"TypeString","optional":true,"default":"5s","description":"The component initialisation timeout in ISO8601 format. e.g. `5s`, `2h`, `1m`. Defaults to `5s`."},"metadata":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the Metadata configuration item."},"secret_name":{"type":"TypeString","optional":true,"description":"The name of a secret specified in the `secrets` block that contains the value for this metadata configuration item."},"value":{"type":"TypeString","optional":true,"description":"The value for this metadata configuration item."}}},"minItems":1},"name":{"type":"TypeString","required":true,"description":"The name for this Dapr Component.","forceNew":true},"scopes":{"type":"TypeList","optional":true,"description":"A list of scopes to which this component applies. e.g. a Container App's `dapr.app_id` value.","elem":{"type":"TypeString"},"minItems":1},"secret":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The Secret name."},"value":{"type":"TypeString","required":true,"description":"The value for this secret."}}}},"version":{"type":"TypeString","required":true,"description":"The version of the component."}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app_environment_storage":{"schema":{"access_key":{"type":"TypeString","required":true,"description":"The Storage Account Access Key."},"access_mode":{"type":"TypeString","required":true,"description":"The access mode to connect this storage to the Container App. Possible values include `ReadOnly` and `ReadWrite`.","forceNew":true},"account_name":{"type":"TypeString","required":true,"description":"The Azure Storage Account in which the Share to be used is located.","forceNew":true},"container_app_environment_id":{"type":"TypeString","required":true,"description":"The ID of the Container App Environment to which this storage belongs.","forceNew":true},"name":{"type":"TypeString","required":true,"description":"The name for this Storage.","forceNew":true},"share_name":{"type":"TypeString","required":true,"description":"The name of the Azure Storage Share to use.","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_connected_registry":{"schema":{"audit_log_enabled":{"type":"TypeBool","optional":true,"default":false},"client_token_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"container_registry_id":{"type":"TypeString","required":true,"forceNew":true},"log_level":{"type":"TypeString","optional":true,"default":"None"},"mode":{"type":"TypeString","optional":true,"default":"ReadWrite","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"digest":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"tag":{"type":"TypeString","optional":true}}}},"parent_registry_id":{"type":"TypeString","optional":true,"forceNew":true},"sync_message_ttl":{"type":"TypeString","optional":true,"default":"P1D"},"sync_schedule":{"type":"TypeString","optional":true,"default":"* * * * *"},"sync_token_id":{"type":"TypeString","required":true,"forceNew":true},"sync_window":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_group":{"schema":{"container":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"commands":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"cpu":{"type":"TypeFloat","required":true,"forceNew":true},"cpu_limit":{"type":"TypeFloat","optional":true},"environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"gpu":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"count":{"type":"TypeInt","optional":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"gpu_limit":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","optional":true},"sku":{"type":"TypeString","optional":true}}},"maxItems":1},"image":{"type":"TypeString","required":true,"forceNew":true},"liveness_probe":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"exec":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"failure_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"http_get":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"http_headers":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"path":{"type":"TypeString","optional":true,"forceNew":true},"port":{"type":"TypeInt","optional":true,"forceNew":true},"scheme":{"type":"TypeString","optional":true,"forceNew":true}}}},"initial_delay_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"period_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"success_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"timeout_seconds":{"type":"TypeInt","optional":true,"forceNew":true}}},"maxItems":1},"memory":{"type":"TypeFloat","required":true,"forceNew":true},"memory_limit":{"type":"TypeFloat","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"ports":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"port":{"type":"TypeInt","optional":true,"forceNew":true},"protocol":{"type":"TypeString","optional":true,"default":"TCP","forceNew":true}}}},"readiness_probe":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"exec":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"failure_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"http_get":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"http_headers":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"path":{"type":"TypeString","optional":true,"forceNew":true},"port":{"type":"TypeInt","optional":true,"forceNew":true},"scheme":{"type":"TypeString","optional":true,"forceNew":true}}}},"initial_delay_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"period_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"success_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"timeout_seconds":{"type":"TypeInt","optional":true,"forceNew":true}}},"maxItems":1},"secure_environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"security":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"privilege_enabled":{"type":"TypeBool","required":true,"forceNew":true}}}},"volume":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"empty_dir":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"git_repo":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"directory":{"type":"TypeString","optional":true,"forceNew":true},"revision":{"type":"TypeString","optional":true,"forceNew":true},"url":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"mount_path":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_only":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"secret":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"share_name":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_key":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_name":{"type":"TypeString","optional":true,"forceNew":true}}}}}}},"diagnostics":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"log_analytics":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"log_type":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true},"workspace_key":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"dns_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"nameservers":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"options":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"search_domains":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"dns_name_label":{"type":"TypeString","optional":true,"forceNew":true},"dns_name_label_reuse_policy":{"type":"TypeString","optional":true,"default":"Unsecure"},"exposed_port":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"port":{"type":"TypeInt","optional":true,"forceNew":true},"protocol":{"type":"TypeString","optional":true,"default":"TCP","forceNew":true}}}},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"image_registry_credential":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Container Registry access.","forceNew":true},"username":{"type":"TypeString","optional":true,"forceNew":true}}}},"init_container":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"commands":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"image":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"secure_environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"security":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"privilege_enabled":{"type":"TypeBool","required":true,"forceNew":true}}}},"volume":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"empty_dir":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"git_repo":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"directory":{"type":"TypeString","optional":true,"forceNew":true},"revision":{"type":"TypeString","optional":true,"forceNew":true},"url":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"mount_path":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_only":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"secret":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"share_name":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_key":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_name":{"type":"TypeString","optional":true,"forceNew":true}}}}}}},"ip_address":{"type":"TypeString","computed":true},"ip_address_type":{"type":"TypeString","optional":true,"default":"Public","forceNew":true},"key_vault_key_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile_id":{"type":"TypeString","optional":true,"computed":true},"os_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restart_policy":{"type":"TypeString","optional":true,"default":"Always","forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Standard","forceNew":true},"subnet_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry":{"schema":{"admin_enabled":{"type":"TypeBool","optional":true,"default":false},"admin_password":{"type":"TypeString","computed":true},"admin_username":{"type":"TypeString","computed":true},"anonymous_pull_enabled":{"type":"TypeBool","optional":true},"data_endpoint_enabled":{"type":"TypeBool","optional":true},"encryption":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false},"identity_client_id":{"type":"TypeString","required":true},"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"export_policy_enabled":{"type":"TypeBool","optional":true,"default":true},"georeplications":{"type":"TypeList","optional":true,"elem":{"schema":{"location":{"type":"TypeString","required":true},"regional_endpoint_enabled":{"type":"TypeBool","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundancy_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"login_server":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rule_bypass_option":{"type":"TypeString","optional":true,"default":"AzureServices"},"network_rule_set":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_rule":{"type":"TypeSet","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"ip_range":{"type":"TypeString","required":true}}}},"virtual_network":{"type":"TypeSet","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}}}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"quarantine_policy_enabled":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_policy":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":7},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trust_policy":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"zone_redundancy_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_agent_pool":{"schema":{"container_registry_name":{"type":"TypeString","required":true,"forceNew":true},"instance_count":{"type":"TypeInt","optional":true,"default":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","optional":true,"default":"S1","forceNew":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_scope_map":{"schema":{"actions":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"container_registry_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_task":{"schema":{"agent_pool_name":{"type":"TypeString","optional":true},"agent_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"cpu":{"type":"TypeInt","required":true}}},"maxItems":1},"base_image_trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"update_trigger_endpoint":{"type":"TypeString","optional":true},"update_trigger_payload_type":{"type":"TypeString","optional":true}}},"maxItems":1},"container_registry_id":{"type":"TypeString","required":true,"forceNew":true},"docker_step":{"type":"TypeList","optional":true,"elem":{"schema":{"arguments":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"cache_enabled":{"type":"TypeBool","optional":true,"default":true},"context_access_token":{"type":"TypeString","required":true},"context_path":{"type":"TypeString","required":true},"dockerfile_path":{"type":"TypeString","required":true},"image_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"push_enabled":{"type":"TypeBool","optional":true,"default":true},"secret_arguments":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target":{"type":"TypeString","optional":true}}},"maxItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"encoded_step":{"type":"TypeList","optional":true,"elem":{"schema":{"context_access_token":{"type":"TypeString","optional":true},"context_path":{"type":"TypeString","optional":true},"secret_values":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"task_content":{"type":"TypeString","required":true},"value_content":{"type":"TypeString","optional":true},"values":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"file_step":{"type":"TypeList","optional":true,"elem":{"schema":{"context_access_token":{"type":"TypeString","optional":true},"context_path":{"type":"TypeString","optional":true},"secret_values":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"task_file_path":{"type":"TypeString","required":true},"value_file_path":{"type":"TypeString","optional":true},"values":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"is_system_task":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"log_template":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform":{"type":"TypeList","optional":true,"elem":{"schema":{"architecture":{"type":"TypeString","optional":true},"os":{"type":"TypeString","required":true},"variant":{"type":"TypeString","optional":true}}},"maxItems":1},"registry_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"custom":{"type":"TypeSet","optional":true,"elem":{"schema":{"identity":{"type":"TypeString","optional":true},"login_server":{"type":"TypeString","required":true},"password":{"type":"TypeString","optional":true},"username":{"type":"TypeString","optional":true}}}},"source":{"type":"TypeList","optional":true,"elem":{"schema":{"login_mode":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"source_trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"expire_in_seconds":{"type":"TypeInt","optional":true},"refresh_token":{"type":"TypeString","optional":true},"scope":{"type":"TypeString","optional":true},"token":{"type":"TypeString","required":true},"token_type":{"type":"TypeString","required":true}}},"maxItems":1},"branch":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"events":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"repository_url":{"type":"TypeString","required":true},"source_type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":3600},"timer_trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"schedule":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_task_schedule_run_now":{"schema":{"container_registry_task_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_container_registry_token":{"schema":{"container_registry_name":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope_map_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_token_password":{"schema":{"container_registry_token_id":{"type":"TypeString","required":true,"forceNew":true},"password1":{"type":"TypeList","required":true,"elem":{"schema":{"expiry":{"type":"TypeString","optional":true,"forceNew":true},"value":{"type":"TypeString","computed":true}}},"maxItems":1},"password2":{"type":"TypeList","optional":true,"elem":{"schema":{"expiry":{"type":"TypeString","optional":true,"forceNew":true},"value":{"type":"TypeString","computed":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_webhook":{"schema":{"actions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"custom_headers":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"registry_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","optional":true,"default":""},"service_uri":{"type":"TypeString","required":true},"status":{"type":"TypeString","optional":true,"default":"enabled"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_account":{"schema":{"access_key_metadata_writes_enabled":{"type":"TypeBool","optional":true,"default":true},"analytical_storage":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"schema_type":{"type":"TypeString","required":true}}},"maxItems":1},"analytical_storage_enabled":{"type":"TypeBool","optional":true,"default":false},"backup":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"interval_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"retention_in_hours":{"type":"TypeInt","optional":true,"computed":true},"storage_redundancy":{"type":"TypeString","optional":true,"computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"capabilities":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true}}}},"capacity":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"total_throughput_limit":{"type":"TypeInt","required":true}}},"maxItems":1},"connection_strings":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"consistency_policy":{"type":"TypeList","required":true,"elem":{"schema":{"consistency_level":{"type":"TypeString","required":true},"max_interval_in_seconds":{"type":"TypeInt","optional":true,"computed":true},"max_staleness_prefix":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"cors_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_methods":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"exposed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"max_age_in_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"create_mode":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"default_identity_type":{"type":"TypeString","optional":true,"default":"FirstPartyIdentity"},"enable_automatic_failover":{"type":"TypeBool","optional":true,"default":false},"enable_free_tier":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"enable_multiple_write_locations":{"type":"TypeBool","optional":true,"default":false},"endpoint":{"type":"TypeString","computed":true},"geo_location":{"type":"TypeSet","required":true,"elem":{"schema":{"failover_priority":{"type":"TypeInt","required":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true},"zone_redundant":{"type":"TypeBool","optional":true,"default":false}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ip_range_filter":{"type":"TypeString","optional":true},"is_virtual_network_filter_enabled":{"type":"TypeBool","optional":true,"default":false},"key_vault_key_id":{"type":"TypeString","optional":true,"forceNew":true},"kind":{"type":"TypeString","optional":true,"default":"GlobalDocumentDB","forceNew":true},"local_authentication_disabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"mongo_server_version":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_acl_bypass_for_azure_services":{"type":"TypeBool","optional":true,"default":false},"network_acl_bypass_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"offer_type":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","computed":true},"primary_readonly_key":{"type":"TypeString","computed":true},"primary_readonly_sql_connection_string":{"type":"TypeString","computed":true},"primary_sql_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"read_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore":{"type":"TypeList","optional":true,"elem":{"schema":{"database":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"collection_names":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true}}}},"restore_timestamp_in_utc":{"type":"TypeString","required":true,"forceNew":true},"source_cosmosdb_account_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"secondary_key":{"type":"TypeString","computed":true},"secondary_readonly_key":{"type":"TypeString","computed":true},"secondary_readonly_sql_connection_string":{"type":"TypeString","computed":true},"secondary_sql_connection_string":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_rule":{"type":"TypeSet","optional":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false}}}},"write_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_cosmosdb_cassandra_cluster":{"schema":{"authentication_method":{"type":"TypeString","optional":true,"default":"Cassandra"},"client_certificate_pems":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_admin_password":{"type":"TypeString","required":true,"forceNew":true},"delegated_management_subnet_id":{"type":"TypeString","required":true,"forceNew":true},"external_gossip_certificate_pems":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"external_seed_node_ip_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"hours_between_backups":{"type":"TypeInt","optional":true,"default":24},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"repair_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"default":"3.11","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_cassandra_datacenter":{"schema":{"availability_zones_enabled":{"type":"TypeBool","optional":true,"default":true},"backup_storage_customer_key_uri":{"type":"TypeString","optional":true},"base64_encoded_yaml_fragment":{"type":"TypeString","optional":true},"cassandra_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"delegated_management_subnet_id":{"type":"TypeString","required":true,"forceNew":true},"disk_count":{"type":"TypeInt","optional":true},"disk_sku":{"type":"TypeString","optional":true,"default":"P30"},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_disk_customer_key_uri":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_count":{"type":"TypeInt","optional":true,"default":3},"sku_name":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_cosmosdb_cassandra_keyspace":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_cassandra_table":{"schema":{"analytical_storage_ttl":{"type":"TypeInt","optional":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"cassandra_keyspace_id":{"type":"TypeString","required":true,"forceNew":true},"default_ttl":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"schema":{"type":"TypeList","required":true,"elem":{"schema":{"cluster_key":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"order_by":{"type":"TypeString","required":true}}}},"column":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"minItems":1},"partition_key":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_gremlin_database":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_gremlin_graph":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"analytical_storage_ttl":{"type":"TypeInt","optional":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"conflict_resolution_policy":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"conflict_resolution_path":{"type":"TypeString","optional":true},"conflict_resolution_procedure":{"type":"TypeString","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"database_name":{"type":"TypeString","required":true,"forceNew":true},"default_ttl":{"type":"TypeInt","optional":true,"computed":true},"index_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"automatic":{"type":"TypeBool","optional":true,"default":true},"composite_index":{"type":"TypeList","optional":true,"elem":{"schema":{"index":{"type":"TypeList","required":true,"elem":{"schema":{"order":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}},"minItems":1}}}},"excluded_paths":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"included_paths":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"indexing_mode":{"type":"TypeString","required":true},"spatial_index":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","required":true},"types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key_path":{"type":"TypeString","required":true,"forceNew":true},"partition_key_version":{"type":"TypeInt","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true},"unique_key":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"paths":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_mongo_collection":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"analytical_storage_ttl":{"type":"TypeInt","optional":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"database_name":{"type":"TypeString","required":true,"forceNew":true},"default_ttl_seconds":{"type":"TypeInt","optional":true},"index":{"type":"TypeSet","optional":true,"elem":{"schema":{"keys":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"unique":{"type":"TypeBool","optional":true,"default":false}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"shard_key":{"type":"TypeString","optional":true,"forceNew":true},"system_indexes":{"type":"TypeList","computed":true,"elem":{"schema":{"keys":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"unique":{"type":"TypeBool","computed":true}}}},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_mongo_database":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_mongo_role_definition":{"schema":{"cosmos_mongo_database_id":{"type":"TypeString","required":true,"forceNew":true},"inherited_role_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"privilege":{"type":"TypeList","optional":true,"elem":{"schema":{"actions":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"resource":{"type":"TypeList","required":true,"elem":{"schema":{"collection_name":{"type":"TypeString","optional":true},"db_name":{"type":"TypeString","optional":true}}},"maxItems":1}}}},"role_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_mongo_user_definition":{"schema":{"cosmos_mongo_database_id":{"type":"TypeString","required":true,"forceNew":true},"inherited_role_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_notebook_workspace":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_endpoint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_cosmosdb_postgresql_cluster":{"schema":{"administrator_login_password":{"type":"TypeString","required":true},"citus_version":{"type":"TypeString","optional":true,"computed":true},"coordinator_public_ip_access_enabled":{"type":"TypeBool","optional":true,"default":true},"coordinator_server_edition":{"type":"TypeString","optional":true,"default":"GeneralPurpose"},"coordinator_storage_quota_in_mb":{"type":"TypeInt","required":true},"coordinator_vcore_count":{"type":"TypeInt","required":true},"earliest_restore_time":{"type":"TypeString","computed":true},"ha_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeInt","optional":true,"default":0},"start_hour":{"type":"TypeInt","optional":true,"default":0},"start_minute":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"node_count":{"type":"TypeInt","required":true},"node_public_ip_access_enabled":{"type":"TypeBool","optional":true,"default":false},"node_server_edition":{"type":"TypeString","optional":true,"default":"MemoryOptimized"},"node_storage_quota_in_mb":{"type":"TypeInt","optional":true,"computed":true},"node_vcores":{"type":"TypeInt","optional":true,"computed":true},"point_in_time_in_utc":{"type":"TypeString","optional":true,"forceNew":true},"preferred_primary_zone":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"shards_on_coordinator_enabled":{"type":"TypeBool","optional":true,"computed":true},"source_location":{"type":"TypeString","optional":true,"forceNew":true},"source_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"sql_version":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_cosmosdb_postgresql_coordinator_configuration":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_postgresql_firewall_rule":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_postgresql_node_configuration":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_postgresql_role":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_cosmosdb_sql_container":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"analytical_storage_ttl":{"type":"TypeInt","optional":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"conflict_resolution_policy":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"conflict_resolution_path":{"type":"TypeString","optional":true},"conflict_resolution_procedure":{"type":"TypeString","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"database_name":{"type":"TypeString","required":true,"forceNew":true},"default_ttl":{"type":"TypeInt","optional":true,"computed":true},"indexing_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"composite_index":{"type":"TypeList","optional":true,"elem":{"schema":{"index":{"type":"TypeList","required":true,"elem":{"schema":{"order":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}},"minItems":1}}}},"excluded_path":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","required":true}}}},"included_path":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","required":true}}}},"indexing_mode":{"type":"TypeString","optional":true,"default":"consistent"},"spatial_index":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","required":true},"types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key_path":{"type":"TypeString","required":true,"forceNew":true},"partition_key_version":{"type":"TypeInt","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true},"unique_key":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"paths":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_database":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_dedicated_gateway":{"schema":{"cosmosdb_account_id":{"type":"TypeString","required":true,"forceNew":true},"instance_count":{"type":"TypeInt","required":true},"instance_size":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_function":{"schema":{"body":{"type":"TypeString","required":true},"container_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_role_assignment":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role_definition_id":{"type":"TypeString","required":true},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_role_definition":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"assignable_scopes":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"permissions":{"type":"TypeSet","required":true,"elem":{"schema":{"data_actions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role_definition_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"default":"CustomRole","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_stored_procedure":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"body":{"type":"TypeString","required":true},"container_name":{"type":"TypeString","required":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_trigger":{"schema":{"body":{"type":"TypeString","required":true},"container_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"operation":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_table":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cost_anomaly_alert":{"schema":{"display_name":{"type":"TypeString","required":true},"email_addresses":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"email_subject":{"type":"TypeString","required":true},"message":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cost_management_scheduled_action":{"schema":{"day_of_month":{"type":"TypeInt","optional":true},"days_of_week":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"display_name":{"type":"TypeString","required":true},"email_address_sender":{"type":"TypeString","required":true},"email_addresses":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":20,"minItems":1},"email_subject":{"type":"TypeString","required":true},"end_date":{"type":"TypeString","required":true},"frequency":{"type":"TypeString","required":true},"hour_of_day":{"type":"TypeInt","optional":true},"message":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"start_date":{"type":"TypeString","required":true},"view_id":{"type":"TypeString","required":true,"forceNew":true},"weeks_of_month":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_custom_ip_prefix":{"schema":{"cidr":{"type":"TypeString","required":true,"forceNew":true},"commissioning_enabled":{"type":"TypeBool","optional":true,"default":false},"internet_advertising_disabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parent_custom_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roa_validity_end_date":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"wan_validation_signed_message":{"type":"TypeString","optional":true,"forceNew":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":540,"read":5,"delete":1020,"update":1020}},"azurerm_custom_provider":{"schema":{"action":{"type":"TypeSet","optional":true,"elem":{"schema":{"endpoint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_type":{"type":"TypeSet","optional":true,"elem":{"schema":{"endpoint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"routing_type":{"type":"TypeString","optional":true,"default":"Proxy"}}}},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"validation":{"type":"TypeSet","optional":true,"elem":{"schema":{"specification":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dashboard":{"schema":{"dashboard_properties":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dashboard_grafana":{"schema":{"api_key_enabled":{"type":"TypeBool","optional":true,"default":false},"auto_generated_domain_name_label_scope":{"type":"TypeString","optional":true,"default":"TenantReuse"},"azure_monitor_workspace_integrations":{"type":"TypeList","optional":true,"elem":{"schema":{"resource_id":{"type":"TypeString","required":true}}}},"deterministic_outbound_ip_enabled":{"type":"TypeBool","optional":true,"default":false},"endpoint":{"type":"TypeString","computed":true},"grafana_version":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Standard","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundancy_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory":{"schema":{"customer_managed_key_id":{"type":"TypeString","optional":true},"customer_managed_key_identity_id":{"type":"TypeString","optional":true},"github_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"account_name":{"type":"TypeString","required":true},"branch_name":{"type":"TypeString","required":true},"git_url":{"type":"TypeString","required":true},"repository_name":{"type":"TypeString","required":true},"root_folder":{"type":"TypeString","required":true}}},"maxItems":1},"global_parameter":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_virtual_network_enabled":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_enabled":{"type":"TypeBool","optional":true,"default":true},"purview_id":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vsts_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"account_name":{"type":"TypeString","required":true},"branch_name":{"type":"TypeString","required":true},"project_name":{"type":"TypeString","required":true},"repository_name":{"type":"TypeString","required":true},"root_folder":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_custom_dataset":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_json":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true,"forceNew":true},"type_properties_json":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_data_flow":{"schema":{"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"script":{"type":"TypeString","optional":true},"script_lines":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"sink":{"type":"TypeList","required":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true},"rejected_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"schema_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}}},"source":{"type":"TypeList","required":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true},"rejected_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"schema_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}}},"transformation":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_azure_blob":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"path":{"type":"TypeString","optional":true},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_binary":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_blob_storage_location":{"type":"TypeList","optional":true,"elem":{"schema":{"container":{"type":"TypeString","required":true},"dynamic_container_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true}}},"maxItems":1},"compression":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"http_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true},"relative_url":{"type":"TypeString","required":true}}},"maxItems":1},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"sftp_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_cosmosdb_sqlapi":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"collection_name":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_delimited_text":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_blob_fs_location":{"type":"TypeList","optional":true,"elem":{"schema":{"file_system":{"type":"TypeString","required":true},"filename":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true}}},"maxItems":1},"azure_blob_storage_location":{"type":"TypeList","optional":true,"elem":{"schema":{"container":{"type":"TypeString","required":true},"dynamic_container_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true}}},"maxItems":1},"column_delimiter":{"type":"TypeString","optional":true,"default":","},"compression_codec":{"type":"TypeString","optional":true},"compression_level":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encoding":{"type":"TypeString","optional":true},"escape_character":{"type":"TypeString","optional":true,"default":"\\"},"first_row_as_header":{"type":"TypeBool","optional":true,"default":false},"folder":{"type":"TypeString","optional":true},"http_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true},"relative_url":{"type":"TypeString","required":true}}},"maxItems":1},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"null_value":{"type":"TypeString","optional":true,"default":""},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"quote_character":{"type":"TypeString","optional":true,"default":"\""},"row_delimiter":{"type":"TypeString","optional":true},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_http":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"relative_url":{"type":"TypeString","optional":true},"request_body":{"type":"TypeString","optional":true},"request_method":{"type":"TypeString","optional":true},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_json":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_blob_storage_location":{"type":"TypeList","optional":true,"elem":{"schema":{"container":{"type":"TypeString","required":true},"dynamic_container_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encoding":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"http_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true},"relative_url":{"type":"TypeString","required":true}}},"maxItems":1},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_mysql":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_parquet":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_blob_storage_location":{"type":"TypeList","optional":true,"elem":{"schema":{"container":{"type":"TypeString","required":true},"dynamic_container_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true}}},"maxItems":1},"compression_codec":{"type":"TypeString","optional":true},"compression_level":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"http_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"relative_url":{"type":"TypeString","required":true}}},"maxItems":1},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_postgresql":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_snowflake":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"precision":{"type":"TypeInt","optional":true},"scale":{"type":"TypeInt","optional":true},"type":{"type":"TypeString","optional":true}}}},"schema_name":{"type":"TypeString","optional":true},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_sql_server_table":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_flowlet_data_flow":{"schema":{"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"script":{"type":"TypeString","optional":true},"script_lines":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"sink":{"type":"TypeList","required":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true},"rejected_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"schema_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}}},"source":{"type":"TypeList","required":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true},"rejected_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"schema_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}}},"transformation":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_integration_runtime_azure":{"schema":{"cleanup_enabled":{"type":"TypeBool","optional":true,"computed":true},"compute_type":{"type":"TypeString","optional":true,"default":"General"},"core_count":{"type":"TypeInt","optional":true,"default":8},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"time_to_live_min":{"type":"TypeInt","optional":true,"default":0},"virtual_network_enabled":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_integration_runtime_azure_ssis":{"schema":{"catalog_info":{"type":"TypeList","optional":true,"elem":{"schema":{"administrator_login":{"type":"TypeString","optional":true},"administrator_password":{"type":"TypeString","optional":true},"dual_standby_pair_name":{"type":"TypeString","optional":true},"elastic_pool_name":{"type":"TypeString","optional":true},"pricing_tier":{"type":"TypeString","optional":true},"server_endpoint":{"type":"TypeString","required":true}}},"maxItems":1},"custom_setup_script":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_container_uri":{"type":"TypeString","required":true},"sas_token":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"edition":{"type":"TypeString","optional":true,"default":"Standard"},"express_custom_setup":{"type":"TypeList","optional":true,"elem":{"schema":{"command_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"secret_name":{"type":"TypeString","required":true},"secret_version":{"type":"TypeString","optional":true}}},"maxItems":1},"password":{"type":"TypeString","optional":true},"target_name":{"type":"TypeString","required":true},"user_name":{"type":"TypeString","required":true}}}},"component":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_license":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"secret_name":{"type":"TypeString","required":true},"secret_version":{"type":"TypeString","optional":true}}},"maxItems":1},"license":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true}}}},"environment":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"powershell_version":{"type":"TypeString","optional":true}}},"maxItems":1},"express_vnet_integration":{"type":"TypeList","optional":true,"elem":{"schema":{"subnet_id":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true,"default":"LicenseIncluded"},"location":{"type":"TypeString","required":true,"forceNew":true},"max_parallel_executions_per_node":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"node_size":{"type":"TypeString","required":true},"number_of_nodes":{"type":"TypeInt","optional":true,"default":1},"package_store":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","optional":true},"self_hosted_integration_runtime_name":{"type":"TypeString","required":true},"staging_storage_linked_service_name":{"type":"TypeString","required":true}}},"maxItems":1},"vnet_integration":{"type":"TypeList","optional":true,"elem":{"schema":{"public_ips":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2,"minItems":2},"subnet_id":{"type":"TypeString","optional":true},"subnet_name":{"type":"TypeString","optional":true},"vnet_id":{"type":"TypeString","optional":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_integration_runtime_managed":{"schema":{"catalog_info":{"type":"TypeList","optional":true,"elem":{"schema":{"administrator_login":{"type":"TypeString","optional":true},"administrator_password":{"type":"TypeString","optional":true},"pricing_tier":{"type":"TypeString","optional":true,"default":"Basic"},"server_endpoint":{"type":"TypeString","required":true}}},"maxItems":1},"custom_setup_script":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_container_uri":{"type":"TypeString","required":true},"sas_token":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"edition":{"type":"TypeString","optional":true,"default":"Standard"},"license_type":{"type":"TypeString","optional":true,"default":"LicenseIncluded"},"location":{"type":"TypeString","required":true,"forceNew":true},"max_parallel_executions_per_node":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"node_size":{"type":"TypeString","required":true},"number_of_nodes":{"type":"TypeInt","optional":true,"default":1},"vnet_integration":{"type":"TypeList","optional":true,"elem":{"schema":{"subnet_name":{"type":"TypeString","required":true},"vnet_id":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_integration_runtime_self_hosted":{"schema":{"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_authorization_key":{"type":"TypeString","computed":true},"rbac_authorization":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"resource_id":{"type":"TypeString","required":true}}}},"secondary_authorization_key":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_custom_service":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true},"type_properties_json":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_blob_storage":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"connection_string_insecure":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_sas_token":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"sas_uri":{"type":"TypeString","optional":true},"service_endpoint":{"type":"TypeString","optional":true},"service_principal_id":{"type":"TypeString","optional":true},"service_principal_key":{"type":"TypeString","optional":true},"service_principal_linked_key_vault_key":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"storage_kind":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","optional":true},"use_managed_identity":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_databricks":{"schema":{"access_token":{"type":"TypeString","optional":true},"adb_domain":{"type":"TypeString","required":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"existing_cluster_id":{"type":"TypeString","optional":true},"instance_pool":{"type":"TypeList","optional":true,"elem":{"schema":{"cluster_version":{"type":"TypeString","required":true},"instance_pool_id":{"type":"TypeString","required":true},"max_number_of_workers":{"type":"TypeInt","optional":true},"min_number_of_workers":{"type":"TypeInt","optional":true,"default":1}}},"maxItems":1},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"msi_work_space_resource_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"new_cluster_config":{"type":"TypeList","optional":true,"elem":{"schema":{"cluster_version":{"type":"TypeString","required":true},"custom_tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"driver_node_type":{"type":"TypeString","optional":true},"init_scripts":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"log_destination":{"type":"TypeString","optional":true},"max_number_of_workers":{"type":"TypeInt","optional":true},"min_number_of_workers":{"type":"TypeInt","optional":true,"default":"1"},"node_type":{"type":"TypeString","required":true},"spark_config":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"spark_environment_variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_file_storage":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"file_share":{"type":"TypeString","optional":true},"host":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"password":{"type":"TypeString","optional":true},"user_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_function":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key":{"type":"TypeString","optional":true},"key_vault_key":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"url":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_search":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted_credential":{"type":"TypeString","computed":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"search_service_key":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_sql_database":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_connection_string":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"service_principal_id":{"type":"TypeString","optional":true},"service_principal_key":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","optional":true},"use_managed_identity":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_table_storage":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_cosmosdb":{"schema":{"account_endpoint":{"type":"TypeString","optional":true},"account_key":{"type":"TypeString","optional":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"database":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_cosmosdb_mongoapi":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"database":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"server_version_is_32_or_higher":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_data_lake_storage_gen2":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"service_principal_id":{"type":"TypeString","optional":true},"service_principal_key":{"type":"TypeString","optional":true},"storage_account_key":{"type":"TypeString","optional":true},"tenant":{"type":"TypeString","optional":true},"url":{"type":"TypeString","required":true},"use_managed_identity":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_key_vault":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_kusto":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"kusto_database_name":{"type":"TypeString","required":true},"kusto_endpoint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"service_principal_id":{"type":"TypeString","optional":true},"service_principal_key":{"type":"TypeString","optional":true},"tenant":{"type":"TypeString","optional":true},"use_managed_identity":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_mysql":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_odata":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"basic_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"url":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_odbc":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"basic_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_postgresql":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_sftp":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"authentication_type":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"host":{"type":"TypeString","required":true},"host_key_fingerprint":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"password":{"type":"TypeString","required":true},"port":{"type":"TypeInt","required":true},"skip_host_key_validation":{"type":"TypeBool","optional":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_snowflake":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_sql_server":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_connection_string":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_synapse":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_web":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"authentication_type":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"password":{"type":"TypeString","optional":true},"url":{"type":"TypeString","required":true},"username":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_managed_private_endpoint":{"schema":{"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"fqdns":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"subresource_name":{"type":"TypeString","optional":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_data_factory_pipeline":{"schema":{"activities_json":{"type":"TypeString","optional":true},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"concurrency":{"type":"TypeInt","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"moniter_metrics_after_duration":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_trigger_blob_event":{"schema":{"activated":{"type":"TypeBool","optional":true,"default":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"blob_path_begins_with":{"type":"TypeString","optional":true},"blob_path_ends_with":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"events":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"ignore_empty_blobs":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pipeline":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_trigger_custom_event":{"schema":{"activated":{"type":"TypeBool","optional":true,"default":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"eventgrid_topic_id":{"type":"TypeString","required":true,"forceNew":true},"events":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"pipeline":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"subject_begins_with":{"type":"TypeString","optional":true},"subject_ends_with":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_trigger_schedule":{"schema":{"activated":{"type":"TypeBool","optional":true,"default":true},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"end_time":{"type":"TypeString","optional":true},"frequency":{"type":"TypeString","optional":true,"default":"Minute"},"interval":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"pipeline":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"pipeline_name":{"type":"TypeString","optional":true,"computed":true},"pipeline_parameters":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_month":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}},"days_of_week":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":7},"hours":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}},"minutes":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}},"monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"week":{"type":"TypeInt","optional":true},"weekday":{"type":"TypeString","required":true}}},"minItems":1}}},"maxItems":1,"minItems":1},"start_time":{"type":"TypeString","optional":true,"computed":true},"time_zone":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_trigger_tumbling_window":{"schema":{"activated":{"type":"TypeBool","optional":true,"default":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"delay":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"end_time":{"type":"TypeString","optional":true},"frequency":{"type":"TypeString","required":true,"forceNew":true},"interval":{"type":"TypeInt","required":true,"forceNew":true},"max_concurrency":{"type":"TypeInt","optional":true,"default":50},"name":{"type":"TypeString","required":true,"forceNew":true},"pipeline":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retry":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeInt","optional":true,"default":30}}},"maxItems":1},"start_time":{"type":"TypeString","required":true,"forceNew":true},"trigger_dependency":{"type":"TypeSet","optional":true,"elem":{"schema":{"offset":{"type":"TypeString","optional":true},"size":{"type":"TypeString","optional":true},"trigger_name":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_instance_blob_storage":{"schema":{"backup_policy_id":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_instance_disk":{"schema":{"backup_policy_id":{"type":"TypeString","required":true},"disk_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"snapshot_resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_instance_postgresql":{"schema":{"backup_policy_id":{"type":"TypeString","required":true},"database_credential_key_vault_secret_id":{"type":"TypeString","optional":true},"database_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_policy_blob_storage":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"retention_duration":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_policy_disk":{"schema":{"backup_repeating_time_intervals":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"default_retention_duration":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"retention_rule":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"criteria":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"absolute_criteria":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"duration":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true,"forceNew":true}}}},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_policy_postgresql":{"schema":{"backup_repeating_time_intervals":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"default_retention_duration":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_rule":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"criteria":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"absolute_criteria":{"type":"TypeString","optional":true,"forceNew":true},"days_of_week":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"months_of_year":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"scheduled_backup_times":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"weeks_of_month":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"duration":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true,"forceNew":true}}}},"vault_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_vault":{"schema":{"datastore_type":{"type":"TypeString","required":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"redundancy":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_resource_guard":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vault_critical_operation_exclusion_list":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_share":{"schema":{"account_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"snapshot_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"recurrence":{"type":"TypeString","required":true},"start_time":{"type":"TypeString","required":true}}},"maxItems":1},"terms":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_share_account":{"schema":{"identity":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_share_dataset_blob_storage":{"schema":{"container_name":{"type":"TypeString","required":true,"forceNew":true},"data_share_id":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","optional":true,"forceNew":true},"folder_path":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_data_share_dataset_data_lake_gen2":{"schema":{"display_name":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","optional":true,"forceNew":true},"file_system_name":{"type":"TypeString","required":true,"forceNew":true},"folder_path":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"share_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_data_share_dataset_kusto_cluster":{"schema":{"display_name":{"type":"TypeString","computed":true},"kusto_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"kusto_cluster_location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"share_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_data_share_dataset_kusto_database":{"schema":{"display_name":{"type":"TypeString","computed":true},"kusto_cluster_location":{"type":"TypeString","computed":true},"kusto_database_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"share_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_database_migration_project":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_name":{"type":"TypeString","required":true,"forceNew":true},"source_platform":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_platform":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_database_migration_service":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databox_edge_device":{"schema":{"device_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"configured_role_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"culture":{"type":"TypeString","computed":true},"hcs_version":{"type":"TypeString","computed":true},"model":{"type":"TypeString","computed":true},"node_count":{"type":"TypeInt","computed":true},"serial_number":{"type":"TypeString","computed":true},"software_version":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"time_zone":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databox_edge_order":{"schema":{"contact":{"type":"TypeList","required":true,"elem":{"schema":{"company_name":{"type":"TypeString","required":true,"forceNew":true},"emails":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"device_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"return_tracking":{"type":"TypeSet","computed":true,"elem":{"schema":{"carrier_name":{"type":"TypeString","computed":true},"serial_number":{"type":"TypeString","computed":true},"tracking_id":{"type":"TypeString","computed":true},"tracking_url":{"type":"TypeString","computed":true}}}},"serial_number":{"type":"TypeString","computed":true},"shipment_address":{"type":"TypeList","required":true,"elem":{"schema":{"address":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":3},"city":{"type":"TypeString","required":true,"forceNew":true},"country":{"type":"TypeString","required":true,"forceNew":true},"postal_code":{"type":"TypeString","required":true,"forceNew":true},"state":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"shipment_history":{"type":"TypeSet","computed":true,"elem":{"schema":{"additional_details":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"comments":{"type":"TypeString","computed":true},"last_update":{"type":"TypeString","computed":true}}}},"shipment_tracking":{"type":"TypeSet","computed":true,"elem":{"schema":{"carrier_name":{"type":"TypeString","computed":true},"serial_number":{"type":"TypeString","computed":true},"tracking_id":{"type":"TypeString","computed":true},"tracking_url":{"type":"TypeString","computed":true}}}},"status":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_details":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"comments":{"type":"TypeString","computed":true},"info":{"type":"TypeString","computed":true},"last_update":{"type":"TypeString","computed":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_access_connector":{"schema":{"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_virtual_network_peering":{"schema":{"address_space_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allow_forwarded_traffic":{"type":"TypeBool","optional":true,"default":false},"allow_gateway_transit":{"type":"TypeBool","optional":true,"default":false},"allow_virtual_network_access":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"remote_address_space_prefixes":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"remote_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"use_remote_gateways":{"type":"TypeBool","optional":true,"default":false},"virtual_network_id":{"type":"TypeString","computed":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_workspace":{"schema":{"custom_parameters":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"machine_learning_workspace_id":{"type":"TypeString","optional":true,"forceNew":true},"nat_gateway_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"no_public_ip":{"type":"TypeBool","optional":true,"computed":true},"private_subnet_name":{"type":"TypeString","optional":true,"forceNew":true},"private_subnet_network_security_group_association_id":{"type":"TypeString","optional":true},"public_ip_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"public_subnet_name":{"type":"TypeString","optional":true,"forceNew":true},"public_subnet_network_security_group_association_id":{"type":"TypeString","optional":true},"storage_account_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"storage_account_sku_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vnet_address_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"customer_managed_key_enabled":{"type":"TypeBool","optional":true,"default":false},"disk_encryption_set_id":{"type":"TypeString","computed":true},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"load_balancer_backend_address_pool_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_disk_cmk_key_vault_key_id":{"type":"TypeString","optional":true},"managed_disk_cmk_rotation_to_latest_version_enabled":{"type":"TypeBool","optional":true},"managed_disk_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"managed_resource_group_id":{"type":"TypeString","computed":true},"managed_resource_group_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_services_cmk_key_vault_key_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_rules_required":{"type":"TypeString","optional":true,"computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"storage_account_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true},"workspace_url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_workspace_customer_managed_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_workspace_root_dbfs_customer_managed_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_datadog_monitor":{"schema":{"datadog_organization":{"type":"TypeList","required":true,"elem":{"schema":{"api_key":{"type":"TypeString","required":true,"forceNew":true},"application_key":{"type":"TypeString","required":true,"forceNew":true},"enterprise_app_id":{"type":"TypeString","optional":true,"forceNew":true},"id":{"type":"TypeString","computed":true},"linking_auth_code":{"type":"TypeString","optional":true,"forceNew":true},"linking_client_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","computed":true},"redirect_uri":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"marketplace_subscription_status":{"type":"TypeString","computed":true},"monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user":{"type":"TypeList","required":true,"elem":{"schema":{"email":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_datadog_monitor_sso_configuration":{"schema":{"datadog_monitor_id":{"type":"TypeString","required":true,"forceNew":true},"enterprise_application_id":{"type":"TypeString","required":true},"login_url":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"default":"default"},"single_sign_on_enabled":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_datadog_monitor_tag_rule":{"schema":{"datadog_monitor_id":{"type":"TypeString","required":true,"forceNew":true},"log":{"type":"TypeList","optional":true,"elem":{"schema":{"aad_log_enabled":{"type":"TypeBool","optional":true},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"resource_log_enabled":{"type":"TypeBool","optional":true},"subscription_log_enabled":{"type":"TypeBool","optional":true}}}},"metric":{"type":"TypeList","optional":true,"elem":{"schema":{"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}}},"name":{"type":"TypeString","optional":true,"default":"default"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dedicated_hardware_security_module":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"management_network_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"network_interface_private_ip_addresses":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"network_interface_private_ip_addresses":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"stamp_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dedicated_host":{"schema":{"auto_replace_on_failure":{"type":"TypeBool","optional":true,"default":true},"dedicated_host_group_id":{"type":"TypeString","required":true,"forceNew":true},"license_type":{"type":"TypeString","optional":true,"default":"None"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform_fault_domain":{"type":"TypeInt","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dedicated_host_group":{"schema":{"automatic_placement_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform_fault_domain_count":{"type":"TypeInt","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_global_vm_shutdown_schedule":{"schema":{"daily_recurrence_time":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"notification_settings":{"type":"TypeList","required":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"time_in_minutes":{"type":"TypeInt","optional":true,"default":30},"webhook_url":{"type":"TypeString","optional":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timezone":{"type":"TypeString","required":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_lab":{"schema":{"artifacts_storage_account_id":{"type":"TypeString","computed":true},"default_premium_storage_account_id":{"type":"TypeString","computed":true},"default_storage_account_id":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"premium_data_disk_storage_account_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_type":{"type":"TypeString","optional":true,"default":"Premium"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_linux_virtual_machine":{"schema":{"allow_claim":{"type":"TypeBool","optional":true,"default":true},"disallow_public_ip_address":{"type":"TypeBool","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"gallery_image_reference":{"type":"TypeList","required":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"inbound_nat_rule":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","required":true,"forceNew":true},"frontend_port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","required":true}}}},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"lab_subnet_name":{"type":"TypeString","required":true,"forceNew":true},"lab_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true},"password":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"size":{"type":"TypeString","required":true,"forceNew":true},"ssh_key":{"type":"TypeString","optional":true,"forceNew":true},"storage_type":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true},"username":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_policy":{"schema":{"description":{"type":"TypeString","optional":true},"evaluator_type":{"type":"TypeString","required":true,"forceNew":true},"fact_data":{"type":"TypeString","optional":true},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_set_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threshold":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_schedule":{"schema":{"daily_recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"time":{"type":"TypeString","required":true}}},"maxItems":1},"hourly_recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"minute":{"type":"TypeInt","required":true}}},"maxItems":1},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification_settings":{"type":"TypeList","required":true,"elem":{"schema":{"status":{"type":"TypeString","optional":true,"default":"Disabled"},"time_in_minutes":{"type":"TypeInt","optional":true},"webhook_url":{"type":"TypeString","optional":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Disabled"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"task_type":{"type":"TypeString","required":true},"time_zone_id":{"type":"TypeString","required":true},"weekly_recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"time":{"type":"TypeString","required":true},"week_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_virtual_network":{"schema":{"description":{"type":"TypeString","optional":true},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"use_in_virtual_machine_creation":{"type":"TypeString","optional":true,"default":"Allow"},"use_public_ip_address":{"type":"TypeString","optional":true,"default":"Allow"}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_windows_virtual_machine":{"schema":{"allow_claim":{"type":"TypeBool","optional":true,"default":true},"disallow_public_ip_address":{"type":"TypeBool","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"gallery_image_reference":{"type":"TypeList","required":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"inbound_nat_rule":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","required":true,"forceNew":true},"frontend_port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","required":true}}}},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"lab_subnet_name":{"type":"TypeString","required":true,"forceNew":true},"lab_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true},"password":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"size":{"type":"TypeString","required":true,"forceNew":true},"storage_type":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true},"username":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_endpoint_eventgrid":{"schema":{"dead_letter_storage_secret":{"type":"TypeString","optional":true},"digital_twins_id":{"type":"TypeString","required":true,"forceNew":true},"eventgrid_topic_endpoint":{"type":"TypeString","required":true},"eventgrid_topic_primary_access_key":{"type":"TypeString","required":true},"eventgrid_topic_secondary_access_key":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_endpoint_eventhub":{"schema":{"dead_letter_storage_secret":{"type":"TypeString","optional":true},"digital_twins_id":{"type":"TypeString","required":true,"forceNew":true},"eventhub_primary_connection_string":{"type":"TypeString","required":true},"eventhub_secondary_connection_string":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_endpoint_servicebus":{"schema":{"dead_letter_storage_secret":{"type":"TypeString","optional":true},"digital_twins_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"servicebus_primary_connection_string":{"type":"TypeString","required":true},"servicebus_secondary_connection_string":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_instance":{"schema":{"host_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_time_series_database_connection":{"schema":{"digital_twins_id":{"type":"TypeString","required":true,"forceNew":true},"eventhub_consumer_group_name":{"type":"TypeString","optional":true,"default":"$Default","forceNew":true},"eventhub_name":{"type":"TypeString","required":true,"forceNew":true},"eventhub_namespace_endpoint_uri":{"type":"TypeString","required":true,"forceNew":true},"eventhub_namespace_id":{"type":"TypeString","required":true,"forceNew":true},"kusto_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"kusto_cluster_uri":{"type":"TypeString","required":true,"forceNew":true},"kusto_database_name":{"type":"TypeString","required":true,"forceNew":true},"kusto_table_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_disk_access":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_disk_encryption_set":{"schema":{"auto_key_rotation_enabled":{"type":"TypeBool","optional":true,"default":false},"encryption_type":{"type":"TypeString","optional":true,"default":"EncryptionAtRestWithCustomerKey","forceNew":true},"federated_client_id":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_key_id":{"type":"TypeString","required":true},"key_vault_key_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_disk_pool":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_disk_pool_iscsi_target":{"schema":{"acl_mode":{"type":"TypeString","required":true,"forceNew":true},"disks_pool_id":{"type":"TypeString","required":true,"forceNew":true},"endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"port":{"type":"TypeInt","computed":true},"target_iqn":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_disk_pool_iscsi_target_lun":{"schema":{"disk_pool_managed_disk_attachment_id":{"type":"TypeString","required":true,"forceNew":true},"iscsi_target_id":{"type":"TypeString","required":true,"forceNew":true},"lun":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_disk_pool_managed_disk_attachment":{"schema":{"disk_pool_id":{"type":"TypeString","required":true,"forceNew":true},"managed_disk_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_dns_a_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","optional":true},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_aaaa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","optional":true},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_caa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"flags":{"type":"TypeInt","required":true},"tag":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_cname_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","optional":true},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_mx_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"default":"@","forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"exchange":{"type":"TypeString","required":true},"preference":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_ns_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_ptr_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_srv_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"priority":{"type":"TypeInt","required":true},"target":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_txt_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"value":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_zone":{"schema":{"max_number_of_record_sets":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"name_servers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"number_of_record_sets":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"soa_record":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email":{"type":"TypeString","required":true},"expire_time":{"type":"TypeInt","optional":true,"default":2419200},"fqdn":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","optional":true,"computed":true},"minimum_ttl":{"type":"TypeInt","optional":true,"default":300},"refresh_time":{"type":"TypeInt","optional":true,"default":3600},"retry_time":{"type":"TypeInt","optional":true,"default":300},"serial_number":{"type":"TypeInt","optional":true,"default":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","optional":true,"default":3600}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_elastic_cloud_elasticsearch":{"schema":{"elastic_cloud_deployment_id":{"type":"TypeString","computed":true},"elastic_cloud_email_address":{"type":"TypeString","required":true,"forceNew":true},"elastic_cloud_sso_default_url":{"type":"TypeString","computed":true},"elastic_cloud_user_id":{"type":"TypeString","computed":true},"elasticsearch_service_url":{"type":"TypeString","computed":true},"kibana_service_url":{"type":"TypeString","computed":true},"kibana_sso_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"filtering_tag":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"send_activity_logs":{"type":"TypeBool","optional":true,"default":false},"send_azuread_logs":{"type":"TypeBool","optional":true,"default":false},"send_subscription_logs":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"monitoring_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_email_communication_service":{"schema":{"data_location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_domain":{"schema":{"auto_create_topic_with_first_subscription":{"type":"TypeBool","optional":true,"default":true},"auto_delete_topic_with_last_subscription":{"type":"TypeBool","optional":true,"default":true},"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"inbound_ip_rule":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_mask":{"type":"TypeString","required":true}}},"maxItems":128},"input_mapping_default_values":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_version":{"type":"TypeString","optional":true,"forceNew":true},"event_type":{"type":"TypeString","optional":true,"forceNew":true},"subject":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"input_mapping_fields":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_version":{"type":"TypeString","optional":true,"forceNew":true},"event_time":{"type":"TypeString","optional":true,"forceNew":true},"event_type":{"type":"TypeString","optional":true,"forceNew":true},"id":{"type":"TypeString","optional":true,"forceNew":true},"subject":{"type":"TypeString","optional":true,"forceNew":true},"topic":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"input_schema":{"type":"TypeString","optional":true,"default":"EventGridSchema","forceNew":true},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_domain_topic":{"schema":{"domain_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_eventgrid_event_subscription":{"schema":{"advanced_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"bool_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeBool","required":true}}}},"is_not_null":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true}}}},"is_null_or_undefined":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true}}}},"number_greater_than":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_greater_than_or_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeFloat"},"maxItems":25}}}},"number_in_range":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeList","elem":{"type":"TypeFloat"},"maxItems":2,"minItems":2},"maxItems":25}}}},"number_less_than":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_less_than_or_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_not_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeFloat"},"maxItems":25}}}},"number_not_in_range":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeList","elem":{"type":"TypeFloat"},"maxItems":2,"minItems":2},"maxItems":25}}}},"string_begins_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_contains":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_ends_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_begins_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_contains":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_ends_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}}}},"maxItems":1},"advanced_filtering_on_arrays_enabled":{"type":"TypeBool","optional":true,"default":false},"azure_function_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"function_id":{"type":"TypeString","required":true},"max_events_per_batch":{"type":"TypeInt","optional":true},"preferred_batch_size_in_kilobytes":{"type":"TypeInt","optional":true}}},"maxItems":1},"dead_letter_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true},"user_assigned_identity":{"type":"TypeString","optional":true}}},"maxItems":1},"delivery_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true},"user_assigned_identity":{"type":"TypeString","optional":true}}},"maxItems":1},"delivery_property":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"secret":{"type":"TypeBool","optional":true},"source_field":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"event_delivery_schema":{"type":"TypeString","optional":true,"default":"EventGridSchema","forceNew":true},"eventhub_endpoint_id":{"type":"TypeString","optional":true,"computed":true},"expiration_time_utc":{"type":"TypeString","optional":true},"hybrid_connection_endpoint_id":{"type":"TypeString","optional":true,"computed":true},"included_event_types":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"labels":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"retry_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"event_time_to_live":{"type":"TypeInt","required":true},"max_delivery_attempts":{"type":"TypeInt","required":true}}},"maxItems":1},"scope":{"type":"TypeString","required":true,"forceNew":true},"service_bus_queue_endpoint_id":{"type":"TypeString","optional":true},"service_bus_topic_endpoint_id":{"type":"TypeString","optional":true},"storage_blob_dead_letter_destination":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_id":{"type":"TypeString","required":true},"storage_blob_container_name":{"type":"TypeString","required":true}}},"maxItems":1},"storage_queue_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"queue_message_time_to_live_in_seconds":{"type":"TypeInt","optional":true},"queue_name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}},"maxItems":1},"subject_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"case_sensitive":{"type":"TypeBool","optional":true},"subject_begins_with":{"type":"TypeString","optional":true},"subject_ends_with":{"type":"TypeString","optional":true}}},"maxItems":1},"webhook_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_app_id_or_uri":{"type":"TypeString","optional":true},"active_directory_tenant_id":{"type":"TypeString","optional":true},"base_url":{"type":"TypeString","computed":true},"max_events_per_batch":{"type":"TypeInt","optional":true},"preferred_batch_size_in_kilobytes":{"type":"TypeInt","optional":true},"url":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_system_topic":{"schema":{"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"metric_arm_resource_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_arm_resource_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"topic_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_system_topic_event_subscription":{"schema":{"advanced_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"bool_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeBool","required":true}}}},"is_not_null":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true}}}},"is_null_or_undefined":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true}}}},"number_greater_than":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_greater_than_or_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeFloat"},"maxItems":25}}}},"number_in_range":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeList","elem":{"type":"TypeFloat"},"maxItems":2,"minItems":2},"maxItems":25}}}},"number_less_than":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_less_than_or_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_not_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeFloat"},"maxItems":25}}}},"number_not_in_range":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeList","elem":{"type":"TypeFloat"},"maxItems":2,"minItems":2},"maxItems":25}}}},"string_begins_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_contains":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_ends_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_begins_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_contains":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_ends_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}}}},"maxItems":1},"advanced_filtering_on_arrays_enabled":{"type":"TypeBool","optional":true,"default":false},"azure_function_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"function_id":{"type":"TypeString","required":true},"max_events_per_batch":{"type":"TypeInt","optional":true},"preferred_batch_size_in_kilobytes":{"type":"TypeInt","optional":true}}},"maxItems":1},"dead_letter_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true},"user_assigned_identity":{"type":"TypeString","optional":true}}},"maxItems":1},"delivery_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true},"user_assigned_identity":{"type":"TypeString","optional":true}}},"maxItems":1},"delivery_property":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"secret":{"type":"TypeBool","optional":true},"source_field":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"event_delivery_schema":{"type":"TypeString","optional":true,"default":"EventGridSchema","forceNew":true},"eventhub_endpoint_id":{"type":"TypeString","optional":true,"computed":true},"expiration_time_utc":{"type":"TypeString","optional":true},"hybrid_connection_endpoint_id":{"type":"TypeString","optional":true,"computed":true},"included_event_types":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"labels":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retry_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"event_time_to_live":{"type":"TypeInt","required":true},"max_delivery_attempts":{"type":"TypeInt","required":true}}},"maxItems":1},"service_bus_queue_endpoint_id":{"type":"TypeString","optional":true},"service_bus_topic_endpoint_id":{"type":"TypeString","optional":true},"storage_blob_dead_letter_destination":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_id":{"type":"TypeString","required":true},"storage_blob_container_name":{"type":"TypeString","required":true}}},"maxItems":1},"storage_queue_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"queue_message_time_to_live_in_seconds":{"type":"TypeInt","optional":true},"queue_name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}},"maxItems":1},"subject_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"case_sensitive":{"type":"TypeBool","optional":true},"subject_begins_with":{"type":"TypeString","optional":true},"subject_ends_with":{"type":"TypeString","optional":true}}},"maxItems":1},"system_topic":{"type":"TypeString","required":true,"forceNew":true},"webhook_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_app_id_or_uri":{"type":"TypeString","optional":true},"active_directory_tenant_id":{"type":"TypeString","optional":true},"base_url":{"type":"TypeString","computed":true},"max_events_per_batch":{"type":"TypeInt","optional":true},"preferred_batch_size_in_kilobytes":{"type":"TypeInt","optional":true},"url":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_topic":{"schema":{"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"inbound_ip_rule":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_mask":{"type":"TypeString","required":true}}},"maxItems":128},"input_mapping_default_values":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_version":{"type":"TypeString","optional":true,"forceNew":true},"event_type":{"type":"TypeString","optional":true,"forceNew":true},"subject":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"input_mapping_fields":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_version":{"type":"TypeString","optional":true,"forceNew":true},"event_time":{"type":"TypeString","optional":true,"forceNew":true},"event_type":{"type":"TypeString","optional":true,"forceNew":true},"id":{"type":"TypeString","optional":true,"forceNew":true},"subject":{"type":"TypeString","optional":true,"forceNew":true},"topic":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"input_schema":{"type":"TypeString","optional":true,"default":"EventGridSchema","forceNew":true},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub":{"schema":{"capture_description":{"type":"TypeList","optional":true,"elem":{"schema":{"destination":{"type":"TypeList","required":true,"elem":{"schema":{"archive_name_format":{"type":"TypeString","required":true},"blob_container_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}},"maxItems":1},"enabled":{"type":"TypeBool","required":true},"encoding":{"type":"TypeString","required":true},"interval_in_seconds":{"type":"TypeInt","optional":true,"default":300},"size_limit_in_bytes":{"type":"TypeInt","optional":true,"default":314572800},"skip_empty_archives":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"message_retention":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"partition_count":{"type":"TypeInt","required":true,"forceNew":true},"partition_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Active"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_authorization_rule":{"schema":{"eventhub_name":{"type":"TypeString","required":true,"forceNew":true},"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_cluster":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":300,"update":30}},"azurerm_eventhub_consumer_group":{"schema":{"eventhub_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"user_metadata":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace":{"schema":{"auto_inflate_enabled":{"type":"TypeBool","optional":true,"default":false},"capacity":{"type":"TypeInt","optional":true,"default":1},"dedicated_cluster_id":{"type":"TypeString","optional":true,"forceNew":true},"default_primary_connection_string":{"type":"TypeString","computed":true},"default_primary_connection_string_alias":{"type":"TypeString","computed":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_connection_string":{"type":"TypeString","computed":true},"default_secondary_connection_string_alias":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maximum_throughput_units":{"type":"TypeInt","optional":true,"computed":true},"minimum_tls_version":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rulesets":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"default_action":{"type":"TypeString","required":true},"ip_rule":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_mask":{"type":"TypeString","required":true}}},"maxItems":128},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"trusted_service_access_enabled":{"type":"TypeBool","optional":true},"virtual_network_rule":{"type":"TypeSet","configMode":"Auto","optional":true,"elem":{"schema":{"ignore_missing_virtual_network_service_endpoint":{"type":"TypeBool","optional":true},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":128}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace_customer_managed_key":{"schema":{"eventhub_namespace_id":{"type":"TypeString","required":true,"forceNew":true},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"key_vault_key_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace_disaster_recovery_config":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"partner_namespace_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace_schema_group":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"schema_compatibility":{"type":"TypeString","required":true,"forceNew":true},"schema_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_express_route_circuit":{"schema":{"allow_classic_operations":{"type":"TypeBool","optional":true,"default":false},"authorization_key":{"type":"TypeString","optional":true},"bandwidth_in_gbps":{"type":"TypeFloat","optional":true},"bandwidth_in_mbps":{"type":"TypeInt","optional":true},"express_route_port_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"peering_location":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_key":{"type":"TypeString","computed":true},"service_provider_name":{"type":"TypeString","optional":true,"forceNew":true},"service_provider_provisioning_state":{"type":"TypeString","computed":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"family":{"type":"TypeString","required":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_circuit_authorization":{"schema":{"authorization_key":{"type":"TypeString","computed":true},"authorization_use_status":{"type":"TypeString","computed":true},"express_route_circuit_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_circuit_connection":{"schema":{"address_prefix_ipv4":{"type":"TypeString","required":true,"forceNew":true},"address_prefix_ipv6":{"type":"TypeString","optional":true},"authorization_key":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"peer_peering_id":{"type":"TypeString","required":true,"forceNew":true},"peering_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_circuit_peering":{"schema":{"azure_asn":{"type":"TypeInt","computed":true},"express_route_circuit_name":{"type":"TypeString","required":true,"forceNew":true},"gateway_manager_etag":{"type":"TypeString","computed":true},"ipv4_enabled":{"type":"TypeBool","optional":true,"default":true},"ipv6":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"microsoft_peering":{"type":"TypeList","optional":true,"elem":{"schema":{"advertised_communities":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"advertised_public_prefixes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"customer_asn":{"type":"TypeInt","optional":true,"default":0},"routing_registry_name":{"type":"TypeString","optional":true,"default":"NONE"}}},"maxItems":1},"primary_peer_address_prefix":{"type":"TypeString","required":true},"route_filter_id":{"type":"TypeString","optional":true},"secondary_peer_address_prefix":{"type":"TypeString","required":true}}},"maxItems":1},"microsoft_peering_config":{"type":"TypeList","optional":true,"elem":{"schema":{"advertised_communities":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"advertised_public_prefixes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"customer_asn":{"type":"TypeInt","optional":true,"default":0},"routing_registry_name":{"type":"TypeString","optional":true,"default":"NONE"}}},"maxItems":1},"peer_asn":{"type":"TypeInt","optional":true,"computed":true},"peering_type":{"type":"TypeString","required":true},"primary_azure_port":{"type":"TypeString","computed":true},"primary_peer_address_prefix":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route_filter_id":{"type":"TypeString","optional":true},"secondary_azure_port":{"type":"TypeString","computed":true},"secondary_peer_address_prefix":{"type":"TypeString","optional":true},"shared_key":{"type":"TypeString","optional":true},"vlan_id":{"type":"TypeInt","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_connection":{"schema":{"authorization_key":{"type":"TypeString","optional":true},"enable_internet_security":{"type":"TypeBool","optional":true},"express_route_circuit_peering_id":{"type":"TypeString","required":true,"forceNew":true},"express_route_gateway_bypass_enabled":{"type":"TypeBool","optional":true,"default":false},"express_route_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"routing":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"associated_route_table_id":{"type":"TypeString","optional":true,"computed":true},"inbound_route_map_id":{"type":"TypeString","optional":true},"outbound_route_map_id":{"type":"TypeString","optional":true},"propagated_route_table":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"labels":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"route_table_ids":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"routing_weight":{"type":"TypeInt","optional":true,"default":0}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_gateway":{"schema":{"allow_non_virtual_wan_traffic":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scale_units":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_express_route_port":{"schema":{"bandwidth_in_gbps":{"type":"TypeInt","required":true,"forceNew":true},"billing_type":{"type":"TypeString","optional":true,"computed":true},"encapsulation":{"type":"TypeString","required":true,"forceNew":true},"ethertype":{"type":"TypeString","computed":true},"guid":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"link1":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"admin_enabled":{"type":"TypeBool","optional":true,"default":false},"connector_type":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"interface_name":{"type":"TypeString","computed":true},"macsec_cak_keyvault_secret_id":{"type":"TypeString","optional":true},"macsec_cipher":{"type":"TypeString","optional":true,"default":"GcmAes128"},"macsec_ckn_keyvault_secret_id":{"type":"TypeString","optional":true},"patch_panel_id":{"type":"TypeString","computed":true},"rack_id":{"type":"TypeString","computed":true},"router_name":{"type":"TypeString","computed":true}}},"maxItems":1,"minItems":1},"link2":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"admin_enabled":{"type":"TypeBool","optional":true,"default":false},"connector_type":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"interface_name":{"type":"TypeString","computed":true},"macsec_cak_keyvault_secret_id":{"type":"TypeString","optional":true},"macsec_cipher":{"type":"TypeString","optional":true,"default":"GcmAes128"},"macsec_ckn_keyvault_secret_id":{"type":"TypeString","optional":true},"patch_panel_id":{"type":"TypeString","computed":true},"rack_id":{"type":"TypeString","computed":true},"router_name":{"type":"TypeString","computed":true}}},"maxItems":1,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"mtu":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"peering_location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_port_authorization":{"schema":{"authorization_key":{"type":"TypeString","computed":true},"authorization_use_status":{"type":"TypeString","computed":true},"express_route_port_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_federated_identity_credential":{"schema":{"audience":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1},"issuer":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parent_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subject":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_firewall":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"firewall_policy_id":{"type":"TypeString","optional":true},"ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"private_ip_address":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","optional":true},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"management_ip_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"private_ip_address":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"sku_tier":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_intel_mode":{"type":"TypeString","optional":true,"computed":true},"virtual_hub":{"type":"TypeList","optional":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_count":{"type":"TypeInt","optional":true,"default":1},"virtual_hub_id":{"type":"TypeString","required":true}}},"maxItems":1},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_firewall_application_rule_collection":{"schema":{"action":{"type":"TypeString","required":true},"azure_firewall_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"fqdn_tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"type":{"type":"TypeString","required":true}}},"minItems":1},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"target_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_firewall_nat_rule_collection":{"schema":{"action":{"type":"TypeString","required":true},"azure_firewall_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"destination_addresses":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"destination_ports":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"translated_address":{"type":"TypeString","required":true},"translated_port":{"type":"TypeString","required":true}}},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_firewall_network_rule_collection":{"schema":{"action":{"type":"TypeString","required":true},"azure_firewall_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"destination_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_ports":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_firewall_policy":{"schema":{"auto_learn_private_ranges_enabled":{"type":"TypeBool","optional":true},"base_policy_id":{"type":"TypeString","optional":true},"child_policies":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns":{"type":"TypeList","optional":true,"elem":{"schema":{"proxy_enabled":{"type":"TypeBool","optional":true,"default":false},"servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"explicit_proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"enable_pac_file":{"type":"TypeBool","optional":true},"enabled":{"type":"TypeBool","optional":true},"http_port":{"type":"TypeInt","optional":true},"https_port":{"type":"TypeInt","optional":true},"pac_file":{"type":"TypeString","optional":true},"pac_file_port":{"type":"TypeInt","optional":true}}},"maxItems":1},"firewalls":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"insights":{"type":"TypeList","optional":true,"elem":{"schema":{"default_log_analytics_workspace_id":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","required":true},"log_analytics_workspace":{"type":"TypeList","optional":true,"elem":{"schema":{"firewall_location":{"type":"TypeString","required":true},"id":{"type":"TypeString","required":true}}}},"retention_in_days":{"type":"TypeInt","optional":true}}},"maxItems":1},"intrusion_detection":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","optional":true},"private_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"signature_overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"state":{"type":"TypeString","optional":true}}}},"traffic_bypass":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"destination_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_ip_groups":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_ports":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true},"source_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule_collection_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"sku":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"sql_redirect_allowed":{"type":"TypeBool","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_intelligence_allowlist":{"type":"TypeList","optional":true,"elem":{"schema":{"fqdns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"ip_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"threat_intelligence_mode":{"type":"TypeString","optional":true,"default":"Alert"},"tls_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_secret_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_firewall_policy_rule_collection_group":{"schema":{"application_rule_collection":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"destination_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_fqdn_tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"type":{"type":"TypeString","required":true}}}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"terminate_tls":{"type":"TypeBool","optional":true},"web_categories":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}}},"minItems":1},"firewall_policy_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"nat_rule_collection":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"destination_address":{"type":"TypeString","optional":true},"destination_ports":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"translated_address":{"type":"TypeString","optional":true},"translated_fqdn":{"type":"TypeString","optional":true},"translated_port":{"type":"TypeInt","required":true}}},"minItems":1}}},"minItems":1},"network_rule_collection":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"destination_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_ports":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}}},"minItems":1},"priority":{"type":"TypeInt","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_fluid_relay_server":{"schema":{"frs_tenant_id":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"orderer_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_key":{"type":"TypeString","computed":true},"service_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"storage_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"storage_sku":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_frontdoor":{"schema":{"backend_pool":{"type":"TypeList","required":true,"elem":{"schema":{"backend":{"type":"TypeList","required":true,"elem":{"schema":{"address":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"host_header":{"type":"TypeString","required":true},"http_port":{"type":"TypeInt","required":true},"https_port":{"type":"TypeInt","required":true},"priority":{"type":"TypeInt","optional":true,"default":1},"weight":{"type":"TypeInt","optional":true,"default":50}}},"maxItems":500},"health_probe_name":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"load_balancing_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"backend_pool_health_probe":{"type":"TypeList","required":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"id":{"type":"TypeString","computed":true},"interval_in_seconds":{"type":"TypeInt","optional":true,"default":120},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true,"default":"/"},"probe_method":{"type":"TypeString","optional":true,"default":"GET"},"protocol":{"type":"TypeString","optional":true,"default":"Http"}}},"maxItems":5000},"backend_pool_health_probes":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"backend_pool_load_balancing":{"type":"TypeList","required":true,"elem":{"schema":{"additional_latency_milliseconds":{"type":"TypeInt","optional":true,"default":0},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"sample_size":{"type":"TypeInt","optional":true,"default":4},"successful_samples_required":{"type":"TypeInt","optional":true,"default":2}}},"maxItems":5000},"backend_pool_load_balancing_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"backend_pool_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_pools_send_receive_timeout_seconds":{"type":"TypeInt","optional":true,"default":60},"enforce_backend_pools_certificate_name_check":{"type":"TypeBool","required":true}}}},"backend_pools":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"cname":{"type":"TypeString","computed":true},"explicit_resource_order":{"type":"TypeList","computed":true,"elem":{"schema":{"backend_pool_health_probe_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"backend_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"backend_pool_load_balancing_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"frontend_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"routing_rule_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"friendly_name":{"type":"TypeString","optional":true},"frontend_endpoint":{"type":"TypeList","required":true,"elem":{"schema":{"host_name":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"session_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"session_affinity_ttl_seconds":{"type":"TypeInt","optional":true,"default":0},"web_application_firewall_policy_link_id":{"type":"TypeString","optional":true}}},"maxItems":500},"frontend_endpoints":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"header_frontdoor_id":{"type":"TypeString","computed":true},"load_balancer_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_rule":{"type":"TypeList","required":true,"elem":{"schema":{"accepted_protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":2},"enabled":{"type":"TypeBool","optional":true,"default":true},"forwarding_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_pool_name":{"type":"TypeString","required":true},"cache_duration":{"type":"TypeString","optional":true},"cache_enabled":{"type":"TypeBool","optional":true,"default":false},"cache_query_parameter_strip_directive":{"type":"TypeString","optional":true,"default":"StripAll"},"cache_query_parameters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"cache_use_dynamic_compression":{"type":"TypeBool","optional":true,"default":false},"custom_forwarding_path":{"type":"TypeString","optional":true},"forwarding_protocol":{"type":"TypeString","optional":true,"default":"HttpsOnly"}}},"maxItems":1},"frontend_endpoints":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":500},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"patterns_to_match":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25},"redirect_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_fragment":{"type":"TypeString","optional":true},"custom_host":{"type":"TypeString","optional":true},"custom_path":{"type":"TypeString","optional":true},"custom_query_string":{"type":"TypeString","optional":true},"redirect_protocol":{"type":"TypeString","required":true},"redirect_type":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":500},"routing_rules":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_frontdoor_custom_https_configuration":{"schema":{"custom_https_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_key_vault_certificate_secret_name":{"type":"TypeString","optional":true},"azure_key_vault_certificate_secret_version":{"type":"TypeString","optional":true},"azure_key_vault_certificate_vault_id":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","optional":true,"default":"FrontDoor"},"minimum_tls_version":{"type":"TypeString","computed":true},"provisioning_state":{"type":"TypeString","computed":true},"provisioning_substate":{"type":"TypeString","computed":true}}},"maxItems":1},"custom_https_provisioning_enabled":{"type":"TypeBool","required":true},"frontend_endpoint_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_frontdoor_firewall_policy":{"schema":{"custom_block_response_body":{"type":"TypeString","optional":true},"custom_block_response_status_code":{"type":"TypeInt","optional":true},"custom_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"match_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":600},"match_variable":{"type":"TypeString","required":true},"negation_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":5}}},"maxItems":10},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","optional":true,"default":1},"rate_limit_duration_in_minutes":{"type":"TypeInt","optional":true,"default":1},"rate_limit_threshold":{"type":"TypeInt","optional":true,"default":10},"type":{"type":"TypeString","required":true}}},"maxItems":100},"enabled":{"type":"TypeBool","optional":true,"default":true},"frontend_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"managed_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"override":{"type":"TypeList","optional":true,"elem":{"schema":{"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":false},"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"rule_id":{"type":"TypeString","required":true}}},"maxItems":1000},"rule_group_name":{"type":"TypeString","required":true}}},"maxItems":100},"type":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":100},"mode":{"type":"TypeString","optional":true,"default":"Prevention"},"name":{"type":"TypeString","required":true,"forceNew":true},"redirect_url":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_frontdoor_rules_engine":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"frontdoor_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"request_header":{"type":"TypeList","optional":true,"elem":{"schema":{"header_action_type":{"type":"TypeString","optional":true},"header_name":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}},"maxItems":100},"response_header":{"type":"TypeList","optional":true,"elem":{"schema":{"header_action_type":{"type":"TypeString","optional":true},"header_name":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}},"maxItems":100}}},"maxItems":1},"match_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true},"transform":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":6},"value":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"variable":{"type":"TypeString","optional":true}}},"maxItems":100},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true}}},"maxItems":100}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_function_app":{"schema":{"app_service_plan_id":{"type":"TypeString","required":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true}}},"maxItems":1},"additional_login_params":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true},"consumer_secret":{"type":"TypeString","required":true}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true}}},"maxItems":1},"client_cert_mode":{"type":"TypeString","optional":true},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true},"default_hostname":{"type":"TypeString","computed":true},"enable_builtin_logging":{"type":"TypeBool","optional":true,"default":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_type":{"type":"TypeString","optional":true,"default":"","forceNew":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":false},"app_scale_limit":{"type":"TypeInt","optional":true,"computed":true},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"computed":true},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"java_version":{"type":"TypeString","optional":true},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"default":false},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"source_control":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"branch":{"type":"TypeString","optional":true,"computed":true},"manual_integration":{"type":"TypeBool","optional":true,"computed":true},"repo_url":{"type":"TypeString","optional":true,"computed":true},"rollback_enabled":{"type":"TypeBool","optional":true,"computed":true},"use_mercurial":{"type":"TypeBool","optional":true,"computed":true}}},"maxItems":1},"storage_account_access_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"default":"~1"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_function_app_active_slot":{"schema":{"last_successful_swap":{"type":"TypeString","description":"The timestamp of the last successful swap with `Production`","computed":true},"overwrite_network_config":{"type":"TypeBool","optional":true,"default":true,"description":"The swap action should overwrite the Production slot's network configuration with the configuration from this slot. Defaults to `true`.","forceNew":true},"slot_id":{"type":"TypeString","required":true,"description":"The ID of the Slot to swap with `Production`."}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_function_app_function":{"schema":{"config_json":{"type":"TypeString","required":true,"description":"The config for this Function in JSON format."},"config_url":{"type":"TypeString","description":"The URL of the configuration JSON.","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this function be enabled. Defaults to `true`."},"file":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"content":{"type":"TypeString","required":true,"description":"The content of the file.","forceNew":true},"name":{"type":"TypeString","required":true,"description":"The filename of the file to be uploaded.","forceNew":true}}},"minItems":1},"function_app_id":{"type":"TypeString","required":true,"description":"The ID of the Function App in which this function should reside.","forceNew":true},"invocation_url":{"type":"TypeString","description":"The invocation URL.","computed":true},"language":{"type":"TypeString","optional":true,"description":"The language the Function is written in."},"name":{"type":"TypeString","required":true,"description":"The name of the function.","forceNew":true},"script_root_path_url":{"type":"TypeString","description":"The Script root path URL.","computed":true},"script_url":{"type":"TypeString","description":"The script URL.","computed":true},"secrets_file_url":{"type":"TypeString","description":"The URL for the Secrets File.","computed":true},"test_data":{"type":"TypeString","optional":true,"description":"The test data for the function."},"test_data_url":{"type":"TypeString","description":"The Test data URL.","computed":true},"url":{"type":"TypeString","description":"The function URL.","computed":true}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_function_app_hybrid_connection":{"schema":{"function_app_id":{"type":"TypeString","required":true,"description":"The ID of the Function App for this Hybrid Connection.","forceNew":true},"hostname":{"type":"TypeString","required":true,"description":"The hostname of the endpoint."},"namespace_name":{"type":"TypeString","description":"The name of the Relay Namespace.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port to use for the endpoint"},"relay_id":{"type":"TypeString","required":true,"description":"The ID of the Relay Hybrid Connection to use.","forceNew":true},"relay_name":{"type":"TypeString","description":"The name of the Relay in use.","computed":true},"send_key_name":{"type":"TypeString","optional":true,"default":"RootManageSharedAccessKey","description":"The name of the Relay key with `Send` permission to use. Defaults to `RootManageSharedAccessKey`"},"send_key_value":{"type":"TypeString","description":"The Primary Access Key for the `send_key_name`","computed":true},"service_bus_namespace":{"type":"TypeString","description":"The Service Bus Namespace.","computed":true},"service_bus_suffix":{"type":"TypeString","description":"The suffix for the endpoint.","computed":true}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_function_app_slot":{"schema":{"app_service_plan_id":{"type":"TypeString","required":true,"forceNew":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true}}},"maxItems":1},"additional_login_params":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true},"consumer_secret":{"type":"TypeString","required":true}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true}}},"maxItems":1},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"daily_memory_time_quota":{"type":"TypeInt","optional":true},"default_hostname":{"type":"TypeString","computed":true},"enable_builtin_logging":{"type":"TypeBool","optional":true,"default":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"function_app_name":{"type":"TypeString","required":true,"forceNew":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_type":{"type":"TypeString","optional":true,"forceNew":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":false},"app_scale_limit":{"type":"TypeInt","optional":true,"computed":true},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"computed":true},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"java_version":{"type":"TypeString","optional":true},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"default":false},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"storage_account_access_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"default":"~1"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_gallery_application":{"schema":{"description":{"type":"TypeString","optional":true},"end_of_life_date":{"type":"TypeString","optional":true},"eula":{"type":"TypeString","optional":true},"gallery_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"privacy_statement_uri":{"type":"TypeString","optional":true},"release_note_uri":{"type":"TypeString","optional":true},"supported_os_type":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_gallery_application_version":{"schema":{"enable_health_check":{"type":"TypeBool","optional":true,"default":false},"end_of_life_date":{"type":"TypeString","optional":true},"exclude_from_latest":{"type":"TypeBool","optional":true,"default":false},"gallery_application_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"manage_action":{"type":"TypeList","required":true,"elem":{"schema":{"install":{"type":"TypeString","required":true,"forceNew":true},"remove":{"type":"TypeString","required":true,"forceNew":true},"update":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeList","required":true,"elem":{"schema":{"default_configuration_link":{"type":"TypeString","optional":true,"forceNew":true},"media_link":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_region":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"regional_replica_count":{"type":"TypeInt","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"Standard_LRS"}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_graph_account":{"schema":{"application_id":{"type":"TypeString","required":true,"forceNew":true},"billing_plan_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_graph_services_account":{"schema":{"application_id":{"type":"TypeString","required":true,"forceNew":true},"billing_plan_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hdinsight_hadoop_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"hadoop":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"edge_node":{"type":"TypeList","optional":true,"elem":{"schema":{"https_endpoints":{"type":"TypeList","optional":true,"elem":{"schema":{"access_modes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_port":{"type":"TypeInt","optional":true},"disable_gateway_auth":{"type":"TypeBool","optional":true},"private_ip_address":{"type":"TypeString","optional":true},"sub_domain_suffix":{"type":"TypeString","optional":true}}}},"install_script_action":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"target_instance_count":{"type":"TypeInt","required":true},"uninstall_script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"vm_size":{"type":"TypeString","required":true}}},"maxItems":1},"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"autoscale":{"type":"TypeList","optional":true,"elem":{"schema":{"capacity":{"type":"TypeList","optional":true,"elem":{"schema":{"max_instance_count":{"type":"TypeInt","required":true},"min_instance_count":{"type":"TypeInt","required":true}}},"maxItems":1},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"target_instance_count":{"type":"TypeInt","required":true},"time":{"type":"TypeString","required":true}}},"minItems":1},"timezone":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hdinsight_hbase_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"hbase":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"autoscale":{"type":"TypeList","optional":true,"elem":{"schema":{"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"target_instance_count":{"type":"TypeInt","required":true},"time":{"type":"TypeString","required":true}}},"minItems":1},"timezone":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hdinsight_interactive_query_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"interactive_hive":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"encryption_in_transit_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"autoscale":{"type":"TypeList","optional":true,"elem":{"schema":{"capacity":{"type":"TypeList","optional":true,"elem":{"schema":{"max_instance_count":{"type":"TypeInt","required":true},"min_instance_count":{"type":"TypeInt","required":true}}},"maxItems":1},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"target_instance_count":{"type":"TypeInt","required":true},"time":{"type":"TypeString","required":true}}},"minItems":1},"timezone":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hdinsight_kafka_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"kafka":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"encryption_in_transit_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"kafka_rest_proxy_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rest_proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"security_group_id":{"type":"TypeString","required":true,"forceNew":true},"security_group_name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"kafka_management_node":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"number_of_disks_per_node":{"type":"TypeInt","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hdinsight_spark_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"spark":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"encryption_in_transit_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"autoscale":{"type":"TypeList","optional":true,"elem":{"schema":{"capacity":{"type":"TypeList","optional":true,"elem":{"schema":{"max_instance_count":{"type":"TypeInt","required":true},"min_instance_count":{"type":"TypeInt","required":true}}},"maxItems":1},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"target_instance_count":{"type":"TypeInt","required":true},"time":{"type":"TypeString","required":true}}},"minItems":1},"timezone":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_healthbot":{"schema":{"bot_management_portal_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_healthcare_dicom_service":{"schema":{"authentication":{"type":"TypeList","computed":true,"elem":{"schema":{"audience":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"authority":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint":{"type":"TypeSet","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_url":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":30,"update":90}},"azurerm_healthcare_fhir_service":{"schema":{"access_policy_object_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"authentication":{"type":"TypeList","required":true,"elem":{"schema":{"audience":{"type":"TypeString","required":true},"authority":{"type":"TypeString","required":true},"smart_proxy_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"configuration_export_storage_account_name":{"type":"TypeString","optional":true},"container_registry_login_server_url":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_methods":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":64},"credentials_allowed":{"type":"TypeBool","optional":true,"default":false},"max_age_in_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"kind":{"type":"TypeString","optional":true,"default":"fhir-R4","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"oci_artifact":{"type":"TypeList","optional":true,"elem":{"schema":{"digest":{"type":"TypeString","optional":true},"image_name":{"type":"TypeString","optional":true},"login_server":{"type":"TypeString","required":true}}}},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":30,"update":90}},"azurerm_healthcare_medtech_service":{"schema":{"device_mapping_json":{"type":"TypeString","required":true},"eventhub_consumer_group_name":{"type":"TypeString","required":true},"eventhub_name":{"type":"TypeString","required":true},"eventhub_namespace_name":{"type":"TypeString","required":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_healthcare_medtech_service_fhir_destination":{"schema":{"destination_fhir_mapping_json":{"type":"TypeString","required":true},"destination_fhir_service_id":{"type":"TypeString","required":true},"destination_identity_resolution_type":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"medtech_service_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_healthcare_service":{"schema":{"access_policy_object_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"authentication_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"audience":{"type":"TypeString","optional":true},"authority":{"type":"TypeString","optional":true},"smart_proxy_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"cors_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allow_credentials":{"type":"TypeBool","optional":true},"allowed_headers":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_methods":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":64},"max_age_in_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"cosmosdb_key_vault_key_versionless_id":{"type":"TypeString","optional":true,"forceNew":true},"cosmosdb_throughput":{"type":"TypeInt","optional":true,"default":1000},"kind":{"type":"TypeString","optional":true,"default":"fhir"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_healthcare_workspace":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_connection":{"type":"TypeSet","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hpc_cache":{"schema":{"automatically_rotate_key_to_latest_enabled":{"type":"TypeBool","optional":true},"cache_size_in_gb":{"type":"TypeInt","required":true,"forceNew":true},"default_access_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"access_rule":{"type":"TypeSet","required":true,"elem":{"schema":{"access":{"type":"TypeString","required":true},"anonymous_gid":{"type":"TypeInt","optional":true},"anonymous_uid":{"type":"TypeInt","optional":true},"filter":{"type":"TypeString","optional":true},"root_squash_enabled":{"type":"TypeBool","optional":true},"scope":{"type":"TypeString","required":true},"submount_access_enabled":{"type":"TypeBool","optional":true},"suid_enabled":{"type":"TypeBool","optional":true}}},"maxItems":3,"minItems":1}}},"maxItems":1,"minItems":1},"directory_active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"cache_netbios_name":{"type":"TypeString","required":true},"dns_primary_ip":{"type":"TypeString","required":true},"dns_secondary_ip":{"type":"TypeString","optional":true},"domain_name":{"type":"TypeString","required":true},"domain_netbios_name":{"type":"TypeString","required":true},"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"directory_flat_file":{"type":"TypeList","optional":true,"elem":{"schema":{"group_file_uri":{"type":"TypeString","required":true},"password_file_uri":{"type":"TypeString","required":true}}},"maxItems":1},"directory_ldap":{"type":"TypeList","optional":true,"elem":{"schema":{"base_dn":{"type":"TypeString","required":true},"bind":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"dn":{"type":"TypeString","required":true},"password":{"type":"TypeString","required":true}}},"maxItems":1},"certificate_validation_uri":{"type":"TypeString","optional":true},"download_certificate_automatically":{"type":"TypeBool","optional":true},"encrypted":{"type":"TypeBool","optional":true},"server":{"type":"TypeString","required":true}}},"maxItems":1},"dns":{"type":"TypeList","optional":true,"elem":{"schema":{"search_domain":{"type":"TypeString","optional":true},"servers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":3}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"key_vault_key_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mount_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"mtu":{"type":"TypeInt","optional":true,"default":1500},"name":{"type":"TypeString","required":true,"forceNew":true},"ntp_server":{"type":"TypeString","optional":true,"default":"time.windows.com"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hpc_cache_access_policy":{"schema":{"access_rule":{"type":"TypeSet","required":true,"elem":{"schema":{"access":{"type":"TypeString","required":true},"anonymous_gid":{"type":"TypeInt","optional":true},"anonymous_uid":{"type":"TypeInt","optional":true},"filter":{"type":"TypeString","optional":true},"root_squash_enabled":{"type":"TypeBool","optional":true},"scope":{"type":"TypeString","required":true},"submount_access_enabled":{"type":"TypeBool","optional":true},"suid_enabled":{"type":"TypeBool","optional":true}}},"maxItems":3,"minItems":1},"hpc_cache_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hpc_cache_blob_nfs_target":{"schema":{"access_policy_name":{"type":"TypeString","optional":true,"default":"default"},"cache_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_path":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"usage_model":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hpc_cache_blob_target":{"schema":{"access_policy_name":{"type":"TypeString","optional":true,"default":"default"},"cache_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_path":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hpc_cache_nfs_target":{"schema":{"cache_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_junction":{"type":"TypeSet","required":true,"elem":{"schema":{"access_policy_name":{"type":"TypeString","optional":true,"default":"default"},"namespace_path":{"type":"TypeString","required":true},"nfs_export":{"type":"TypeString","required":true},"target_path":{"type":"TypeString","optional":true,"default":""}}},"maxItems":10,"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"target_host_name":{"type":"TypeString","required":true,"forceNew":true},"usage_model":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_image":{"schema":{"data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","optional":true,"computed":true},"caching":{"type":"TypeString","optional":true,"default":"None"},"lun":{"type":"TypeInt","optional":true},"managed_disk_id":{"type":"TypeString","optional":true,"forceNew":true},"size_gb":{"type":"TypeInt","optional":true,"computed":true}}}},"hyper_v_generation":{"type":"TypeString","optional":true,"default":"V1","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_disk":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"caching":{"type":"TypeString","optional":true,"default":"None"},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"managed_disk_id":{"type":"TypeString","optional":true,"computed":true},"os_state":{"type":"TypeString","optional":true},"os_type":{"type":"TypeString","optional":true},"size_gb":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_virtual_machine_id":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_resilient":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_integration_service_environment":{"schema":{"access_endpoint_type":{"type":"TypeString","required":true,"forceNew":true},"connector_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connector_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"default":"Developer_0"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":4,"minItems":4},"workflow_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":300,"read":5,"delete":300,"update":300}},"azurerm_iot_security_device_group":{"schema":{"allow_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_from_ips_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"connection_to_ips_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"local_users_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"processes_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"range_rule":{"type":"TypeSet","optional":true,"elem":{"schema":{"duration":{"type":"TypeString","required":true},"max":{"type":"TypeInt","required":true},"min":{"type":"TypeInt","required":true},"type":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_security_solution":{"schema":{"additional_workspace":{"type":"TypeSet","optional":true,"elem":{"schema":{"data_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true}}}},"disabled_data_sources":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"events_to_export":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"iothub_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"log_analytics_workspace_id":{"type":"TypeString","optional":true},"log_unmasked_ips_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"query_for_resources":{"type":"TypeString","optional":true,"computed":true},"query_subscription_ids":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"recommendations_enabled":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"acr_authentication":{"type":"TypeBool","optional":true,"default":true},"agent_send_unutilized_msg":{"type":"TypeBool","optional":true,"default":true},"baseline":{"type":"TypeBool","optional":true,"default":true},"edge_hub_mem_optimize":{"type":"TypeBool","optional":true,"default":true},"edge_logging_option":{"type":"TypeBool","optional":true,"default":true},"inconsistent_module_settings":{"type":"TypeBool","optional":true,"default":true},"install_agent":{"type":"TypeBool","optional":true,"default":true},"ip_filter_deny_all":{"type":"TypeBool","optional":true,"default":true},"ip_filter_permissive_rule":{"type":"TypeBool","optional":true,"default":true},"open_ports":{"type":"TypeBool","optional":true,"default":true},"permissive_firewall_policy":{"type":"TypeBool","optional":true,"default":true},"permissive_input_firewall_rules":{"type":"TypeBool","optional":true,"default":true},"permissive_output_firewall_rules":{"type":"TypeBool","optional":true,"default":true},"privileged_docker_options":{"type":"TypeBool","optional":true,"default":true},"shared_credentials":{"type":"TypeBool","optional":true,"default":true},"vulnerable_tls_cipher_suite":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_access_policy":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"principal_object_id":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"time_series_insights_environment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_event_source_eventhub":{"schema":{"consumer_group_name":{"type":"TypeString","required":true},"environment_id":{"type":"TypeString","required":true,"forceNew":true},"event_source_resource_id":{"type":"TypeString","required":true},"eventhub_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true},"shared_access_key":{"type":"TypeString","required":true},"shared_access_key_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timestamp_property_name":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_event_source_iothub":{"schema":{"consumer_group_name":{"type":"TypeString","required":true},"environment_id":{"type":"TypeString","required":true,"forceNew":true},"event_source_resource_id":{"type":"TypeString","required":true},"iothub_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"shared_access_key":{"type":"TypeString","required":true},"shared_access_key_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timestamp_property_name":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_gen2_environment":{"schema":{"data_access_fqdn":{"type":"TypeString","computed":true},"id_properties":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"storage":{"type":"TypeList","required":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"warm_store_data_retention_time":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_reference_data_set":{"schema":{"data_string_comparison_behavior":{"type":"TypeString","optional":true,"default":"Ordinal","forceNew":true},"key_property":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"time_series_insights_environment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_standard_environment":{"schema":{"data_retention_time":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"storage_limit_exceeded_behavior":{"type":"TypeString","optional":true,"default":"PurgeOldData"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iotcentral_application":{"schema":{"display_name":{"type":"TypeString","optional":true,"computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"ST1"},"sub_domain":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iotcentral_application_network_rule_set":{"schema":{"apply_to_device":{"type":"TypeBool","optional":true,"default":true},"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"iotcentral_application_id":{"type":"TypeString","required":true,"forceNew":true},"ip_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"ip_mask":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub":{"schema":{"cloud_to_device":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"default_ttl":{"type":"TypeString","optional":true,"default":"PT1H"},"feedback":{"type":"TypeList","optional":true,"elem":{"schema":{"lock_duration":{"type":"TypeString","optional":true,"default":"PT60S"},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10},"time_to_live":{"type":"TypeString","optional":true,"default":"PT1H"}}}},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10}}},"maxItems":1},"endpoint":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"batch_frequency_in_seconds":{"type":"TypeInt","optional":true,"default":300},"connection_string":{"type":"TypeString","optional":true},"container_name":{"type":"TypeString","optional":true},"encoding":{"type":"TypeString","optional":true,"default":"Avro","forceNew":true},"endpoint_uri":{"type":"TypeString","optional":true},"entity_path":{"type":"TypeString","optional":true},"file_name_format":{"type":"TypeString","optional":true,"default":"{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}"},"identity_id":{"type":"TypeString","optional":true},"max_chunk_size_in_bytes":{"type":"TypeInt","optional":true,"default":314572800},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"enrichment":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"key":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":10},"event_hub_events_endpoint":{"type":"TypeString","computed":true},"event_hub_events_namespace":{"type":"TypeString","computed":true},"event_hub_events_path":{"type":"TypeString","computed":true},"event_hub_operations_endpoint":{"type":"TypeString","computed":true},"event_hub_operations_path":{"type":"TypeString","computed":true},"event_hub_partition_count":{"type":"TypeInt","optional":true,"computed":true},"event_hub_retention_in_days":{"type":"TypeInt","optional":true,"computed":true},"fallback_route":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"condition":{"type":"TypeString","optional":true,"default":"true"},"enabled":{"type":"TypeBool","optional":true,"computed":true},"endpoint_names":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"source":{"type":"TypeString","optional":true,"default":"DeviceMessages"}}},"maxItems":1},"file_upload":{"type":"TypeList","optional":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","required":true},"container_name":{"type":"TypeString","required":true},"default_ttl":{"type":"TypeString","optional":true,"computed":true},"identity_id":{"type":"TypeString","optional":true},"lock_duration":{"type":"TypeString","optional":true,"computed":true},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10},"notifications":{"type":"TypeBool","optional":true,"default":false},"sas_ttl":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"hostname":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"min_tls_version":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rule_set":{"type":"TypeList","optional":true,"elem":{"schema":{"apply_to_builtin_eventhub_endpoint":{"type":"TypeBool","optional":true,"default":false},"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"ip_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_mask":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"condition":{"type":"TypeString","optional":true,"default":"true"},"enabled":{"type":"TypeBool","required":true},"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"source":{"type":"TypeString","required":true}}}},"shared_access_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"key_name":{"type":"TypeString","computed":true},"permissions":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true}}}},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_certificate":{"schema":{"certificate_content":{"type":"TypeString","required":true},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"is_verified":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_consumer_group":{"schema":{"eventhub_endpoint_name":{"type":"TypeString","required":true,"forceNew":true},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_device_update_account":{"schema":{"host_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Standard"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_device_update_instance":{"schema":{"device_update_account_id":{"type":"TypeString","required":true,"forceNew":true},"diagnostic_enabled":{"type":"TypeBool","optional":true,"default":false},"diagnostic_storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_string":{"type":"TypeString","required":true},"id":{"type":"TypeString","required":true}}},"maxItems":1},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_dps":{"schema":{"allocation_policy":{"type":"TypeString","optional":true,"default":"Hashed"},"data_residency_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"device_provisioning_host_name":{"type":"TypeString","computed":true},"id_scope":{"type":"TypeString","computed":true},"ip_filter_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"ip_mask":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"target":{"type":"TypeString","optional":true}}}},"linked_hub":{"type":"TypeList","optional":true,"elem":{"schema":{"allocation_weight":{"type":"TypeInt","optional":true,"default":1},"apply_allocation_policy":{"type":"TypeBool","optional":true,"default":true},"connection_string":{"type":"TypeString","required":true},"hostname":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_operations_host_name":{"type":"TypeString","computed":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_dps_certificate":{"schema":{"certificate_content":{"type":"TypeString","required":true},"iot_dps_name":{"type":"TypeString","required":true,"forceNew":true},"is_verified":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_dps_shared_access_policy":{"schema":{"enrollment_read":{"type":"TypeBool","optional":true,"default":false},"enrollment_write":{"type":"TypeBool","optional":true,"default":false},"iothub_dps_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"registration_read":{"type":"TypeBool","optional":true,"default":false},"registration_write":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"service_config":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_eventhub":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","optional":true},"endpoint_uri":{"type":"TypeString","optional":true},"entity_path":{"type":"TypeString","optional":true},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_servicebus_queue":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","optional":true},"endpoint_uri":{"type":"TypeString","optional":true},"entity_path":{"type":"TypeString","optional":true},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_servicebus_topic":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","optional":true},"endpoint_uri":{"type":"TypeString","optional":true},"entity_path":{"type":"TypeString","optional":true},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_storage_container":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"batch_frequency_in_seconds":{"type":"TypeInt","optional":true,"default":300},"connection_string":{"type":"TypeString","optional":true},"container_name":{"type":"TypeString","required":true},"encoding":{"type":"TypeString","optional":true,"default":"Avro","forceNew":true},"endpoint_uri":{"type":"TypeString","optional":true},"file_name_format":{"type":"TypeString","optional":true,"default":"{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}"},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"max_chunk_size_in_bytes":{"type":"TypeInt","optional":true,"default":314572800},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_enrichment":{"schema":{"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":100},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"key":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_fallback_route":{"schema":{"condition":{"type":"TypeString","optional":true,"default":"true"},"enabled":{"type":"TypeBool","required":true},"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":1},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeString","optional":true,"default":"DeviceMessages"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_file_upload":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","required":true},"container_name":{"type":"TypeString","required":true},"default_ttl":{"type":"TypeString","optional":true,"default":"PT1H"},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"lock_duration":{"type":"TypeString","optional":true,"default":"PT1M"},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10},"notifications_enabled":{"type":"TypeBool","optional":true,"default":false},"sas_ttl":{"type":"TypeString","optional":true,"default":"PT1H"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_route":{"schema":{"condition":{"type":"TypeString","optional":true,"default":"true"},"enabled":{"type":"TypeBool","required":true},"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":1},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_shared_access_policy":{"schema":{"device_connect":{"type":"TypeBool","optional":true,"default":false},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"registry_read":{"type":"TypeBool","optional":true,"default":false},"registry_write":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"service_connect":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_ip_group":{"schema":{"cidrs":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"firewall_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"firewall_policy_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_ip_group_cidr":{"schema":{"cidr":{"type":"TypeString","required":true,"forceNew":true},"ip_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_key_vault":{"schema":{"access_policy":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"application_id":{"type":"TypeString","optional":true},"certificate_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"key_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"object_id":{"type":"TypeString","required":true},"secret_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"storage_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1024},"contact":{"type":"TypeSet","optional":true,"elem":{"schema":{"email":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true},"phone":{"type":"TypeString","optional":true}}}},"enable_rbac_authorization":{"type":"TypeBool","optional":true},"enabled_for_deployment":{"type":"TypeBool","optional":true},"enabled_for_disk_encryption":{"type":"TypeBool","optional":true},"enabled_for_template_deployment":{"type":"TypeBool","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_acls":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"bypass":{"type":"TypeString","required":true},"default_action":{"type":"TypeString","required":true},"ip_rules":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"purge_protection_enabled":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"soft_delete_retention_days":{"type":"TypeInt","optional":true,"default":90},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","required":true},"vault_uri":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_access_policy":{"schema":{"application_id":{"type":"TypeString","optional":true,"forceNew":true},"certificate_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"key_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"object_id":{"type":"TypeString","required":true,"forceNew":true},"secret_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"storage_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_certificate":{"schema":{"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"contents":{"type":"TypeString","required":true},"password":{"type":"TypeString","optional":true}}},"maxItems":1},"certificate_attribute":{"type":"TypeList","computed":true,"elem":{"schema":{"created":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"expires":{"type":"TypeString","computed":true},"not_before":{"type":"TypeString","computed":true},"recovery_level":{"type":"TypeString","computed":true},"updated":{"type":"TypeString","computed":true}}}},"certificate_data":{"type":"TypeString","computed":true},"certificate_data_base64":{"type":"TypeString","computed":true},"certificate_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"issuer_parameters":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true}}},"maxItems":1},"key_properties":{"type":"TypeList","required":true,"elem":{"schema":{"curve":{"type":"TypeString","optional":true,"computed":true},"exportable":{"type":"TypeBool","required":true},"key_size":{"type":"TypeInt","optional":true,"computed":true},"key_type":{"type":"TypeString","required":true},"reuse_key":{"type":"TypeBool","required":true}}},"maxItems":1},"lifetime_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true}}},"maxItems":1},"trigger":{"type":"TypeList","required":true,"elem":{"schema":{"days_before_expiry":{"type":"TypeInt","optional":true},"lifetime_percentage":{"type":"TypeInt","optional":true}}},"maxItems":1}}}},"secret_properties":{"type":"TypeList","required":true,"elem":{"schema":{"content_type":{"type":"TypeString","required":true}}},"maxItems":1},"x509_certificate_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"extended_key_usage":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"key_usage":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"subject":{"type":"TypeString","required":true},"subject_alternative_names":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"dns_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"emails":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"upns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"validity_in_months":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_manager_id":{"type":"TypeString","computed":true},"resource_manager_versionless_id":{"type":"TypeString","computed":true},"secret_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true},"versionless_id":{"type":"TypeString","computed":true},"versionless_secret_id":{"type":"TypeString","computed":true}},"timeouts":{"create":60,"read":30,"delete":30,"update":30}},"azurerm_key_vault_certificate_contacts":{"schema":{"contact":{"type":"TypeSet","required":true,"elem":{"schema":{"email":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true},"phone":{"type":"TypeString","optional":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_certificate_issuer":{"schema":{"account_id":{"type":"TypeString","optional":true},"admin":{"type":"TypeList","optional":true,"elem":{"schema":{"email_address":{"type":"TypeString","required":true},"first_name":{"type":"TypeString","optional":true},"last_name":{"type":"TypeString","optional":true},"phone":{"type":"TypeString","optional":true}}}},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"org_id":{"type":"TypeString","optional":true},"password":{"type":"TypeString","optional":true},"provider_name":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_key":{"schema":{"curve":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"e":{"type":"TypeString","computed":true},"expiration_date":{"type":"TypeString","optional":true},"key_opts":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"key_size":{"type":"TypeInt","optional":true,"forceNew":true},"key_type":{"type":"TypeString","required":true,"forceNew":true},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"n":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"not_before_date":{"type":"TypeString","optional":true},"public_key_openssh":{"type":"TypeString","computed":true},"public_key_pem":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"resource_versionless_id":{"type":"TypeString","computed":true},"rotation_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"automatic":{"type":"TypeList","optional":true,"elem":{"schema":{"time_after_creation":{"type":"TypeString","optional":true},"time_before_expiry":{"type":"TypeString","optional":true}}},"maxItems":1},"expire_after":{"type":"TypeString","optional":true},"notify_before_expiry":{"type":"TypeString","optional":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true},"versionless_id":{"type":"TypeString","computed":true},"x":{"type":"TypeString","computed":true},"y":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":30,"delete":30,"update":30}},"azurerm_key_vault_managed_hardware_security_module":{"schema":{"admin_object_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"hsm_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_acls":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"bypass":{"type":"TypeString","required":true},"default_action":{"type":"TypeString","required":true}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"purge_protection_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"security_domain_encrypted_data":{"type":"TypeString","computed":true},"security_domain_key_vault_certificate_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":10,"minItems":3},"security_domain_quorum":{"type":"TypeInt","optional":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"soft_delete_retention_days":{"type":"TypeInt","optional":true,"default":90,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":30}},"azurerm_key_vault_managed_storage_account":{"schema":{"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"regenerate_key_automatically":{"type":"TypeBool","optional":true,"default":false},"regeneration_period":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","required":true},"storage_account_key":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_managed_storage_account_sas_token_definition":{"schema":{"managed_storage_account_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"sas_template_uri":{"type":"TypeString","required":true},"sas_type":{"type":"TypeString","required":true},"secret_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"validity_period":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_secret":{"schema":{"content_type":{"type":"TypeString","optional":true},"expiration_date":{"type":"TypeString","optional":true},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"not_before_date":{"type":"TypeString","optional":true},"resource_id":{"type":"TypeString","computed":true},"resource_versionless_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","required":true},"version":{"type":"TypeString","computed":true},"versionless_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":30,"delete":30,"update":30}},"azurerm_kubernetes_cluster":{"schema":{"aci_connector_linux":{"type":"TypeList","optional":true,"elem":{"schema":{"connector_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"subnet_name":{"type":"TypeString","required":true}}},"maxItems":1},"api_server_access_profile":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"authorized_ip_ranges":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true},"vnet_integration_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"api_server_authorized_ip_ranges":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auto_scaler_profile":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"balance_similar_node_groups":{"type":"TypeBool","optional":true,"default":false},"empty_bulk_delete_max":{"type":"TypeString","optional":true,"computed":true},"expander":{"type":"TypeString","optional":true,"default":"random"},"max_graceful_termination_sec":{"type":"TypeString","optional":true,"computed":true},"max_node_provisioning_time":{"type":"TypeString","optional":true,"default":"15m"},"max_unready_nodes":{"type":"TypeInt","optional":true,"default":3},"max_unready_percentage":{"type":"TypeFloat","optional":true,"default":45},"new_pod_scale_up_delay":{"type":"TypeString","optional":true,"computed":true},"scale_down_delay_after_add":{"type":"TypeString","optional":true,"computed":true},"scale_down_delay_after_delete":{"type":"TypeString","optional":true,"computed":true},"scale_down_delay_after_failure":{"type":"TypeString","optional":true,"computed":true},"scale_down_unneeded":{"type":"TypeString","optional":true,"computed":true},"scale_down_unready":{"type":"TypeString","optional":true,"computed":true},"scale_down_utilization_threshold":{"type":"TypeString","optional":true,"computed":true},"scan_interval":{"type":"TypeString","optional":true,"computed":true},"skip_nodes_with_local_storage":{"type":"TypeBool","optional":true,"default":true},"skip_nodes_with_system_pods":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"automatic_channel_upgrade":{"type":"TypeString","optional":true},"azure_active_directory_role_based_access_control":{"type":"TypeList","optional":true,"elem":{"schema":{"admin_group_object_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_rbac_enabled":{"type":"TypeBool","optional":true},"client_app_id":{"type":"TypeString","optional":true},"managed":{"type":"TypeBool","optional":true},"server_app_id":{"type":"TypeString","optional":true},"server_app_secret":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"azure_policy_enabled":{"type":"TypeBool","optional":true},"confidential_computing":{"type":"TypeList","optional":true,"elem":{"schema":{"sgx_quote_helper_enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"custom_ca_trust_certificates_base64":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":10},"default_node_pool":{"type":"TypeList","required":true,"elem":{"schema":{"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"custom_ca_trust_enabled":{"type":"TypeBool","optional":true},"enable_auto_scaling":{"type":"TypeBool","optional":true},"enable_host_encryption":{"type":"TypeBool","optional":true},"enable_node_public_ip":{"type":"TypeBool","optional":true},"fips_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"host_group_id":{"type":"TypeString","optional":true,"forceNew":true},"kubelet_config":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_unsafe_sysctls":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"container_log_max_line":{"type":"TypeInt","optional":true},"container_log_max_size_mb":{"type":"TypeInt","optional":true},"cpu_cfs_quota_enabled":{"type":"TypeBool","optional":true,"default":false},"cpu_cfs_quota_period":{"type":"TypeString","optional":true},"cpu_manager_policy":{"type":"TypeString","optional":true},"image_gc_high_threshold":{"type":"TypeInt","optional":true},"image_gc_low_threshold":{"type":"TypeInt","optional":true},"pod_max_pid":{"type":"TypeInt","optional":true},"topology_manager_policy":{"type":"TypeString","optional":true}}},"maxItems":1},"kubelet_disk_type":{"type":"TypeString","optional":true,"computed":true},"linux_os_config":{"type":"TypeList","optional":true,"elem":{"schema":{"swap_file_size_mb":{"type":"TypeInt","optional":true},"sysctl_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"fs_aio_max_nr":{"type":"TypeInt","optional":true,"forceNew":true},"fs_file_max":{"type":"TypeInt","optional":true,"forceNew":true},"fs_inotify_max_user_watches":{"type":"TypeInt","optional":true,"forceNew":true},"fs_nr_open":{"type":"TypeInt","optional":true,"forceNew":true},"kernel_threads_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_netdev_max_backlog":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_optmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_rmem_default":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_rmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_somaxconn":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_wmem_default":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_wmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_ip_local_port_range_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_ip_local_port_range_min":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh1":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh2":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh3":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_fin_timeout":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_intvl":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_probes":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_time":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_max_syn_backlog":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_max_tw_buckets":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_tw_reuse":{"type":"TypeBool","optional":true,"forceNew":true},"net_netfilter_nf_conntrack_buckets":{"type":"TypeInt","optional":true,"forceNew":true},"net_netfilter_nf_conntrack_max":{"type":"TypeInt","optional":true,"forceNew":true},"vm_max_map_count":{"type":"TypeInt","optional":true,"forceNew":true},"vm_swappiness":{"type":"TypeInt","optional":true,"forceNew":true},"vm_vfs_cache_pressure":{"type":"TypeInt","optional":true,"forceNew":true}}},"maxItems":1},"transparent_huge_page_defrag":{"type":"TypeString","optional":true},"transparent_huge_page_enabled":{"type":"TypeString","optional":true}}},"maxItems":1},"max_count":{"type":"TypeInt","optional":true},"max_pods":{"type":"TypeInt","optional":true,"computed":true},"message_of_the_day":{"type":"TypeString","optional":true,"forceNew":true},"min_count":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true},"node_count":{"type":"TypeInt","optional":true,"computed":true},"node_labels":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"node_network_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"node_public_ip_tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"node_public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"node_taints":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"only_critical_addons_enabled":{"type":"TypeBool","optional":true},"orchestrator_version":{"type":"TypeString","optional":true,"computed":true},"os_disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"os_disk_type":{"type":"TypeString","optional":true,"default":"Managed"},"os_sku":{"type":"TypeString","optional":true,"computed":true},"pod_subnet_id":{"type":"TypeString","optional":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"scale_down_mode":{"type":"TypeString","optional":true,"default":"Delete"},"snapshot_id":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"temporary_name_for_rotation":{"type":"TypeString","optional":true},"type":{"type":"TypeString","optional":true,"default":"VirtualMachineScaleSets","forceNew":true},"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false},"upgrade_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_surge":{"type":"TypeString","required":true}}},"maxItems":1},"vm_size":{"type":"TypeString","required":true},"vnet_subnet_id":{"type":"TypeString","optional":true},"workload_runtime":{"type":"TypeString","optional":true,"computed":true},"zones":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"dns_prefix":{"type":"TypeString","optional":true,"forceNew":true},"dns_prefix_private_cluster":{"type":"TypeString","optional":true,"forceNew":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_pod_security_policy":{"type":"TypeBool","optional":true},"fqdn":{"type":"TypeString","computed":true},"http_application_routing_enabled":{"type":"TypeBool","optional":true},"http_application_routing_zone_name":{"type":"TypeString","computed":true},"http_proxy_config":{"type":"TypeList","optional":true,"elem":{"schema":{"http_proxy":{"type":"TypeString","optional":true,"forceNew":true},"https_proxy":{"type":"TypeString","optional":true,"forceNew":true},"no_proxy":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"trusted_ca":{"type":"TypeString","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"image_cleaner_enabled":{"type":"TypeBool","optional":true,"default":false},"image_cleaner_interval_hours":{"type":"TypeInt","optional":true,"default":48},"ingress_application_gateway":{"type":"TypeList","optional":true,"elem":{"schema":{"effective_gateway_id":{"type":"TypeString","computed":true},"gateway_id":{"type":"TypeString","optional":true},"gateway_name":{"type":"TypeString","optional":true},"ingress_application_gateway_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"subnet_cidr":{"type":"TypeString","optional":true},"subnet_id":{"type":"TypeString","optional":true}}},"maxItems":1},"key_management_service":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"key_vault_network_access":{"type":"TypeString","optional":true,"default":"Public"}}},"maxItems":1},"key_vault_secrets_provider":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"secret_rotation_enabled":{"type":"TypeBool","optional":true,"default":false},"secret_rotation_interval":{"type":"TypeString","optional":true,"default":"2m"}}},"maxItems":1},"kube_admin_config":{"type":"TypeList","computed":true,"elem":{"schema":{"client_certificate":{"type":"TypeString","computed":true},"client_key":{"type":"TypeString","computed":true},"cluster_ca_certificate":{"type":"TypeString","computed":true},"host":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"kube_admin_config_raw":{"type":"TypeString","computed":true},"kube_config":{"type":"TypeList","computed":true,"elem":{"schema":{"client_certificate":{"type":"TypeString","computed":true},"client_key":{"type":"TypeString","computed":true},"cluster_ca_certificate":{"type":"TypeString","computed":true},"host":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"kube_config_raw":{"type":"TypeString","computed":true},"kubelet_identity":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"object_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"kubernetes_version":{"type":"TypeString","optional":true,"computed":true},"linux_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"admin_username":{"type":"TypeString","required":true,"forceNew":true},"ssh_key":{"type":"TypeList","required":true,"elem":{"schema":{"key_data":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"local_account_disabled":{"type":"TypeBool","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed":{"type":"TypeSet","optional":true,"elem":{"schema":{"day":{"type":"TypeString","required":true},"hours":{"type":"TypeSet","required":true,"elem":{"type":"TypeInt"},"minItems":1}}}},"not_allowed":{"type":"TypeSet","optional":true,"elem":{"schema":{"end":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true}}}}}},"maxItems":1},"maintenance_window_auto_upgrade":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_month":{"type":"TypeInt","optional":true},"day_of_week":{"type":"TypeString","optional":true},"duration":{"type":"TypeInt","required":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","required":true},"not_allowed":{"type":"TypeSet","optional":true,"elem":{"schema":{"end":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true}}}},"start_date":{"type":"TypeString","optional":true,"computed":true},"start_time":{"type":"TypeString","optional":true},"utc_offset":{"type":"TypeString","optional":true},"week_index":{"type":"TypeString","optional":true}}},"maxItems":1},"maintenance_window_node_os":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_month":{"type":"TypeInt","optional":true},"day_of_week":{"type":"TypeString","optional":true},"duration":{"type":"TypeInt","required":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","required":true},"not_allowed":{"type":"TypeSet","optional":true,"elem":{"schema":{"end":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true}}}},"start_date":{"type":"TypeString","optional":true,"computed":true},"start_time":{"type":"TypeString","optional":true},"utc_offset":{"type":"TypeString","optional":true},"week_index":{"type":"TypeString","optional":true}}},"maxItems":1},"microsoft_defender":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true}}},"maxItems":1},"monitor_metrics":{"type":"TypeList","optional":true,"elem":{"schema":{"annotations_allowed":{"type":"TypeString","optional":true},"labels_allowed":{"type":"TypeString","optional":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"dns_service_ip":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"docker_bridge_cidr":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"ebpf_data_plane":{"type":"TypeString","optional":true},"ip_versions":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"load_balancer_profile":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"effective_outbound_ips":{"type":"TypeSet","configMode":"Auto","computed":true,"elem":{"type":"TypeString"}},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":30},"managed_outbound_ip_count":{"type":"TypeInt","optional":true,"computed":true},"managed_outbound_ipv6_count":{"type":"TypeInt","optional":true,"computed":true},"outbound_ip_address_ids":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"outbound_ip_prefix_ids":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"outbound_ports_allocated":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"load_balancer_sku":{"type":"TypeString","optional":true,"default":"standard","forceNew":true},"nat_gateway_profile":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"effective_outbound_ips":{"type":"TypeSet","configMode":"Auto","computed":true,"elem":{"type":"TypeString"}},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"managed_outbound_ip_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"network_mode":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"network_plugin":{"type":"TypeString","required":true,"forceNew":true},"network_plugin_mode":{"type":"TypeString","optional":true,"forceNew":true},"network_policy":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"outbound_type":{"type":"TypeString","optional":true,"default":"loadBalancer","forceNew":true},"pod_cidr":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"pod_cidrs":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"service_cidr":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"service_cidrs":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"node_os_channel_upgrade":{"type":"TypeString","optional":true},"node_resource_group":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"node_resource_group_id":{"type":"TypeString","computed":true},"oidc_issuer_enabled":{"type":"TypeBool","optional":true},"oidc_issuer_url":{"type":"TypeString","computed":true},"oms_agent":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"msi_auth_for_monitoring_enabled":{"type":"TypeBool","optional":true},"oms_agent_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}}}},"maxItems":1},"open_service_mesh_enabled":{"type":"TypeBool","optional":true},"portal_fqdn":{"type":"TypeString","computed":true},"private_cluster_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"private_cluster_public_fqdn_enabled":{"type":"TypeBool","optional":true,"default":false},"private_dns_zone_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"private_fqdn":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role_based_access_control_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"run_command_enabled":{"type":"TypeBool","optional":true,"default":true},"service_mesh_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"external_ingress_gateway_enabled":{"type":"TypeBool","optional":true},"internal_ingress_gateway_enabled":{"type":"TypeBool","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"service_principal":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true}}},"maxItems":1},"sku_tier":{"type":"TypeString","optional":true,"default":"Free"},"storage_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_driver_enabled":{"type":"TypeBool","optional":true,"default":false},"disk_driver_enabled":{"type":"TypeBool","optional":true,"default":true},"disk_driver_version":{"type":"TypeString","optional":true,"default":"v1"},"file_driver_enabled":{"type":"TypeBool","optional":true,"default":true},"snapshot_controller_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"web_app_routing":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_zone_id":{"type":"TypeString","required":true},"web_app_routing_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}}}},"maxItems":1},"windows_profile":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"gmsa":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_server":{"type":"TypeString","required":true},"root_domain":{"type":"TypeString","required":true}}},"maxItems":1},"license":{"type":"TypeString","optional":true}}},"maxItems":1},"workload_autoscaler_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"keda_enabled":{"type":"TypeBool","optional":true,"default":false},"vertical_pod_autoscaler_controlled_values":{"type":"TypeString","computed":true},"vertical_pod_autoscaler_enabled":{"type":"TypeBool","optional":true,"default":false},"vertical_pod_autoscaler_update_mode":{"type":"TypeString","computed":true}}},"maxItems":1},"workload_identity_enabled":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_kubernetes_cluster_extension":{"schema":{"aks_assigned_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"configuration_protected_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"configuration_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"current_version":{"type":"TypeString","computed":true},"extension_type":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"promotion_code":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"release_namespace":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"release_train":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"target_namespace":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kubernetes_cluster_node_pool":{"schema":{"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"custom_ca_trust_enabled":{"type":"TypeBool","optional":true},"enable_auto_scaling":{"type":"TypeBool","optional":true},"enable_host_encryption":{"type":"TypeBool","optional":true,"forceNew":true},"enable_node_public_ip":{"type":"TypeBool","optional":true,"forceNew":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"fips_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"host_group_id":{"type":"TypeString","optional":true,"forceNew":true},"kubelet_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"allowed_unsafe_sysctls":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"container_log_max_line":{"type":"TypeInt","optional":true,"forceNew":true},"container_log_max_size_mb":{"type":"TypeInt","optional":true,"forceNew":true},"cpu_cfs_quota_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"cpu_cfs_quota_period":{"type":"TypeString","optional":true,"forceNew":true},"cpu_manager_policy":{"type":"TypeString","optional":true,"forceNew":true},"image_gc_high_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"image_gc_low_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"pod_max_pid":{"type":"TypeInt","optional":true,"forceNew":true},"topology_manager_policy":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"kubelet_disk_type":{"type":"TypeString","optional":true,"computed":true},"kubernetes_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"linux_os_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"swap_file_size_mb":{"type":"TypeInt","optional":true,"forceNew":true},"sysctl_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"fs_aio_max_nr":{"type":"TypeInt","optional":true,"forceNew":true},"fs_file_max":{"type":"TypeInt","optional":true,"forceNew":true},"fs_inotify_max_user_watches":{"type":"TypeInt","optional":true,"forceNew":true},"fs_nr_open":{"type":"TypeInt","optional":true,"forceNew":true},"kernel_threads_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_netdev_max_backlog":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_optmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_rmem_default":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_rmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_somaxconn":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_wmem_default":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_wmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_ip_local_port_range_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_ip_local_port_range_min":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh1":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh2":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh3":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_fin_timeout":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_intvl":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_probes":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_time":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_max_syn_backlog":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_max_tw_buckets":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_tw_reuse":{"type":"TypeBool","optional":true,"forceNew":true},"net_netfilter_nf_conntrack_buckets":{"type":"TypeInt","optional":true,"forceNew":true},"net_netfilter_nf_conntrack_max":{"type":"TypeInt","optional":true,"forceNew":true},"vm_max_map_count":{"type":"TypeInt","optional":true,"forceNew":true},"vm_swappiness":{"type":"TypeInt","optional":true,"forceNew":true},"vm_vfs_cache_pressure":{"type":"TypeInt","optional":true,"forceNew":true}}},"maxItems":1},"transparent_huge_page_defrag":{"type":"TypeString","optional":true,"forceNew":true},"transparent_huge_page_enabled":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"max_count":{"type":"TypeInt","optional":true},"max_pods":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"message_of_the_day":{"type":"TypeString","optional":true,"forceNew":true},"min_count":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","optional":true,"default":"User"},"name":{"type":"TypeString","required":true,"forceNew":true},"node_count":{"type":"TypeInt","optional":true,"computed":true},"node_labels":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"node_network_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"node_public_ip_tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"node_public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"node_taints":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"orchestrator_version":{"type":"TypeString","optional":true,"computed":true},"os_disk_size_gb":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"os_disk_type":{"type":"TypeString","optional":true,"default":"Managed","forceNew":true},"os_sku":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"os_type":{"type":"TypeString","optional":true,"default":"Linux","forceNew":true},"pod_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"scale_down_mode":{"type":"TypeString","optional":true,"default":"Delete"},"snapshot_id":{"type":"TypeString","optional":true,"forceNew":true},"spot_max_price":{"type":"TypeFloat","optional":true,"default":-1,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"upgrade_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_surge":{"type":"TypeString","required":true}}},"maxItems":1},"vm_size":{"type":"TypeString","required":true,"forceNew":true},"vnet_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"windows_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"outbound_nat_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true}}},"maxItems":1},"workload_runtime":{"type":"TypeString","optional":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kubernetes_cluster_trusted_access_role_binding":{"schema":{"kubernetes_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kubernetes_fleet_manager":{"schema":{"hub_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dns_prefix":{"type":"TypeString","required":true},"fqdn":{"type":"TypeString","computed":true},"kubernetes_version":{"type":"TypeString","computed":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kubernetes_flux_configuration":{"schema":{"blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","optional":true},"container_id":{"type":"TypeString","required":true},"local_auth_reference":{"type":"TypeString","optional":true},"managed_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true}}},"maxItems":1},"sas_token":{"type":"TypeString","optional":true},"service_principal":{"type":"TypeList","optional":true,"elem":{"schema":{"client_certificate_base64":{"type":"TypeString","optional":true},"client_certificate_password":{"type":"TypeString","optional":true},"client_certificate_send_chain":{"type":"TypeBool","optional":true,"default":false},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600}}},"maxItems":1},"bucket":{"type":"TypeList","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","optional":true},"bucket_name":{"type":"TypeString","required":true},"local_auth_reference":{"type":"TypeString","optional":true},"secret_key_base64":{"type":"TypeString","optional":true},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600},"tls_enabled":{"type":"TypeBool","optional":true,"default":true},"url":{"type":"TypeString","required":true}}},"maxItems":1},"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"continuous_reconciliation_enabled":{"type":"TypeBool","optional":true,"default":true},"git_repository":{"type":"TypeList","optional":true,"elem":{"schema":{"https_ca_cert_base64":{"type":"TypeString","optional":true},"https_key_base64":{"type":"TypeString","optional":true},"https_user":{"type":"TypeString","optional":true},"local_auth_reference":{"type":"TypeString","optional":true},"reference_type":{"type":"TypeString","required":true},"reference_value":{"type":"TypeString","required":true},"ssh_known_hosts_base64":{"type":"TypeString","optional":true},"ssh_private_key_base64":{"type":"TypeString","optional":true},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600},"url":{"type":"TypeString","required":true}}},"maxItems":1},"kustomizations":{"type":"TypeSet","required":true,"elem":{"schema":{"depends_on":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"garbage_collection_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"recreating_enabled":{"type":"TypeBool","optional":true,"default":false},"retry_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","optional":true,"default":"namespace","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kusto_attached_database_configuration":{"schema":{"attached_database_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"cluster_resource_id":{"type":"TypeString","required":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"default_principal_modification_kind":{"type":"TypeString","optional":true,"default":"None"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sharing":{"type":"TypeList","optional":true,"elem":{"schema":{"external_tables_to_exclude":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"external_tables_to_include":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"materialized_views_to_exclude":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"materialized_views_to_include":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"tables_to_exclude":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"tables_to_include":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_cluster":{"schema":{"allowed_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"allowed_ip_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"auto_stop_enabled":{"type":"TypeBool","optional":true,"default":true},"data_ingestion_uri":{"type":"TypeString","computed":true},"disk_encryption_enabled":{"type":"TypeBool","optional":true,"default":false},"double_encryption_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"engine":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"language_extensions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"optimized_auto_scale":{"type":"TypeList","optional":true,"elem":{"schema":{"maximum_instances":{"type":"TypeInt","required":true},"minimum_instances":{"type":"TypeInt","required":true}}},"maxItems":1},"outbound_network_access_restricted":{"type":"TypeBool","optional":true,"default":false},"public_ip_type":{"type":"TypeString","optional":true,"default":"IPv4"},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"purge_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"streaming_ingestion_enabled":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trusted_external_tenants":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"uri":{"type":"TypeString","computed":true},"virtual_network_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_management_public_ip_id":{"type":"TypeString","required":true},"engine_public_ip_id":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":1},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_cluster_customer_managed_key":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"key_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","required":true},"key_version":{"type":"TypeString","optional":true},"user_identity":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kusto_cluster_managed_private_endpoint":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_link_resource_id":{"type":"TypeString","required":true,"forceNew":true},"private_link_resource_region":{"type":"TypeString","optional":true,"forceNew":true},"request_message":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_cluster_principal_assignment":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"principal_name":{"type":"TypeString","computed":true},"principal_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true,"forceNew":true},"tenant_name":{"type":"TypeString","computed":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_cosmosdb_data_connection":{"schema":{"cosmosdb_container_id":{"type":"TypeString","required":true,"forceNew":true},"kusto_database_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_identity_id":{"type":"TypeString","required":true,"forceNew":true},"mapping_rule_name":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"retrieval_start_date":{"type":"TypeString","optional":true,"forceNew":true},"table_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_kusto_database":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"hot_cache_period":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"size":{"type":"TypeFloat","computed":true},"soft_delete_period":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_database_principal_assignment":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"principal_name":{"type":"TypeString","computed":true},"principal_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true,"forceNew":true},"tenant_name":{"type":"TypeString","computed":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_kusto_eventgrid_data_connection":{"schema":{"blob_storage_event_type":{"type":"TypeString","optional":true,"default":"Microsoft.Storage.BlobCreated"},"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"data_format":{"type":"TypeString","optional":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"database_routing_type":{"type":"TypeString","optional":true,"default":"Single","forceNew":true},"eventgrid_resource_id":{"type":"TypeString","optional":true},"eventhub_consumer_group_name":{"type":"TypeString","required":true,"forceNew":true},"eventhub_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","optional":true},"mapping_rule_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"skip_first_record":{"type":"TypeBool","optional":true,"default":false},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_eventhub_data_connection":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"compression":{"type":"TypeString","optional":true,"default":"None","forceNew":true},"consumer_group":{"type":"TypeString","required":true,"forceNew":true},"data_format":{"type":"TypeString","optional":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"database_routing_type":{"type":"TypeString","optional":true,"default":"Single","forceNew":true},"event_system_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"eventhub_id":{"type":"TypeString","required":true,"forceNew":true},"identity_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mapping_rule_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_iothub_data_connection":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"consumer_group":{"type":"TypeString","required":true,"forceNew":true},"data_format":{"type":"TypeString","optional":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"database_routing_type":{"type":"TypeString","optional":true,"default":"Single","forceNew":true},"event_system_properties":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mapping_rule_name":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"shared_access_policy_name":{"type":"TypeString","required":true,"forceNew":true},"table_name":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_kusto_script":{"schema":{"continue_on_errors_enabled":{"type":"TypeBool","optional":true,"default":false},"database_id":{"type":"TypeString","required":true,"forceNew":true},"force_an_update_when_value_changed":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sas_token":{"type":"TypeString","optional":true,"forceNew":true},"script_content":{"type":"TypeString","optional":true,"forceNew":true},"url":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lab_service_lab":{"schema":{"auto_shutdown":{"type":"TypeList","optional":true,"elem":{"schema":{"disconnect_delay":{"type":"TypeString","optional":true},"idle_delay":{"type":"TypeString","optional":true},"no_connect_delay":{"type":"TypeString","optional":true},"shutdown_on_idle":{"type":"TypeString","optional":true}}},"maxItems":1},"connection_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"client_rdp_access":{"type":"TypeString","optional":true},"client_ssh_access":{"type":"TypeString","optional":true}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"lab_plan_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"load_balancer_id":{"type":"TypeString","computed":true},"public_ip_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","optional":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roster":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_group_id":{"type":"TypeString","optional":true},"lms_instance":{"type":"TypeString","optional":true},"lti_client_id":{"type":"TypeString","optional":true},"lti_context_id":{"type":"TypeString","optional":true},"lti_roster_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"security":{"type":"TypeList","required":true,"elem":{"schema":{"open_access_enabled":{"type":"TypeBool","required":true},"registration_code":{"type":"TypeString","computed":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"title":{"type":"TypeString","required":true},"virtual_machine":{"type":"TypeList","required":true,"elem":{"schema":{"additional_capability_gpu_drivers_installed":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"admin_user":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"create_option":{"type":"TypeString","optional":true,"default":"Image","forceNew":true},"image_reference":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true,"forceNew":true},"offer":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","optional":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"non_admin_user":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"shared_password_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"usage_quota":{"type":"TypeString","optional":true,"default":"PT0S"}}},"maxItems":1}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_lab_service_plan":{"schema":{"allowed_regions":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":28,"minItems":1},"default_auto_shutdown":{"type":"TypeList","optional":true,"elem":{"schema":{"disconnect_delay":{"type":"TypeString","optional":true},"idle_delay":{"type":"TypeString","optional":true},"no_connect_delay":{"type":"TypeString","optional":true},"shutdown_on_idle":{"type":"TypeString","optional":true}}},"maxItems":1},"default_connection":{"type":"TypeList","optional":true,"elem":{"schema":{"client_rdp_access":{"type":"TypeString","optional":true},"client_ssh_access":{"type":"TypeString","optional":true},"web_rdp_access":{"type":"TypeString","optional":true},"web_ssh_access":{"type":"TypeString","optional":true}}},"maxItems":1},"default_network_subnet_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"shared_gallery_id":{"type":"TypeString","optional":true},"support":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"instructions":{"type":"TypeString","optional":true},"phone":{"type":"TypeString","optional":true},"url":{"type":"TypeString","optional":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lab_service_schedule":{"schema":{"lab_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"expiration_date":{"type":"TypeString","required":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","optional":true},"week_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"start_time":{"type":"TypeString","optional":true},"stop_time":{"type":"TypeString","required":true},"time_zone":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lab_service_user":{"schema":{"additional_usage_quota":{"type":"TypeString","optional":true,"default":"PT0S"},"email":{"type":"TypeString","required":true,"forceNew":true},"lab_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb":{"schema":{"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"frontend_ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"gateway_load_balancer_frontend_ip_configuration_id":{"type":"TypeString","optional":true,"computed":true},"id":{"type":"TypeString","computed":true},"inbound_nat_rules":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"load_balancer_rules":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"outbound_rules":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"private_ip_address":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_allocation":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_version":{"type":"TypeString","optional":true,"computed":true},"public_ip_address_id":{"type":"TypeString","optional":true,"computed":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"computed":true},"subnet_id":{"type":"TypeString","optional":true,"computed":true},"zones":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Basic","forceNew":true},"sku_tier":{"type":"TypeString","optional":true,"default":"Regional","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_backend_address_pool":{"schema":{"backend_ip_configurations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"inbound_nat_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancing_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tunnel_interface":{"type":"TypeList","optional":true,"elem":{"schema":{"identifier":{"type":"TypeInt","required":true},"port":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"minItems":1},"virtual_network_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_backend_address_pool_address":{"schema":{"backend_address_ip_configuration_id":{"type":"TypeString","optional":true,"description":"For global load balancer, user needs to specify the `backend_address_ip_configuration_id` of the added regional load balancers"},"backend_address_pool_id":{"type":"TypeString","required":true,"forceNew":true},"inbound_nat_rule_port_mapping":{"type":"TypeList","computed":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","computed":true},"frontend_port":{"type":"TypeInt","computed":true},"inbound_nat_rule_name":{"type":"TypeString","computed":true}}}},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"description":"For regional load balancer, user needs to specify `virtual_network_id` and `ip_address`"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_nat_pool":{"schema":{"backend_port":{"type":"TypeInt","required":true},"floating_ip_enabled":{"type":"TypeBool","optional":true},"frontend_ip_configuration_id":{"type":"TypeString","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","required":true},"frontend_port_end":{"type":"TypeInt","required":true},"frontend_port_start":{"type":"TypeInt","required":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protocol":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tcp_reset_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_nat_rule":{"schema":{"backend_address_pool_id":{"type":"TypeString","optional":true},"backend_ip_configuration_id":{"type":"TypeString","computed":true},"backend_port":{"type":"TypeInt","required":true},"enable_floating_ip":{"type":"TypeBool","optional":true,"computed":true},"enable_tcp_reset":{"type":"TypeBool","optional":true},"frontend_ip_configuration_id":{"type":"TypeString","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","required":true},"frontend_port":{"type":"TypeInt","optional":true},"frontend_port_end":{"type":"TypeInt","optional":true},"frontend_port_start":{"type":"TypeInt","optional":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protocol":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_outbound_rule":{"schema":{"allocated_outbound_ports":{"type":"TypeInt","optional":true,"default":1024},"backend_address_pool_id":{"type":"TypeString","required":true},"enable_tcp_reset":{"type":"TypeBool","optional":true,"default":false},"frontend_ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true}}},"minItems":1},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protocol":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_probe":{"schema":{"interval_in_seconds":{"type":"TypeInt","optional":true,"default":15},"load_balancer_rules":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"number_of_probes":{"type":"TypeInt","optional":true,"default":2},"port":{"type":"TypeInt","required":true},"probe_threshold":{"type":"TypeInt","optional":true,"default":1},"protocol":{"type":"TypeString","optional":true,"computed":true},"request_path":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_rule":{"schema":{"backend_address_pool_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2,"minItems":1},"backend_port":{"type":"TypeInt","required":true},"disable_outbound_snat":{"type":"TypeBool","optional":true,"default":false},"enable_floating_ip":{"type":"TypeBool","optional":true,"default":false},"enable_tcp_reset":{"type":"TypeBool","optional":true},"frontend_ip_configuration_id":{"type":"TypeString","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","required":true},"frontend_port":{"type":"TypeInt","required":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"load_distribution":{"type":"TypeString","optional":true,"computed":true},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"probe_id":{"type":"TypeString","optional":true,"computed":true},"protocol":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lighthouse_assignment":{"schema":{"lighthouse_definition_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_lighthouse_definition":{"schema":{"authorization":{"type":"TypeSet","required":true,"elem":{"schema":{"delegated_role_definition_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_display_name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","required":true},"role_definition_id":{"type":"TypeString","required":true}}},"minItems":1},"description":{"type":"TypeString","optional":true},"eligible_authorization":{"type":"TypeSet","optional":true,"elem":{"schema":{"just_in_time_access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"approver":{"type":"TypeSet","optional":true,"elem":{"schema":{"principal_display_name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","required":true}}}},"maximum_activation_duration":{"type":"TypeString","optional":true,"default":"PT8H"},"multi_factor_auth_provider":{"type":"TypeString","optional":true}}},"maxItems":1},"principal_display_name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","required":true},"role_definition_id":{"type":"TypeString","required":true}}}},"lighthouse_definition_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managing_tenant_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"product":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_linux_function_app":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs for [App Settings](https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings) and custom values.","elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"builtin_logging_enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should built in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting"},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the function app use Client Certificates"},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Optional","description":"The mode of the Function App's client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser` "},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"content_share_force_disabled":{"type":"TypeBool","optional":true,"default":false,"description":"Force disable the content share settings."},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans."},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Is the Linux Function App enabled."},"functions_extension_version":{"type":"TypeString","optional":true,"default":"~4","description":"The runtime version associated with the Function App."},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false,"description":"Can the Function App only be accessed via HTTPS?"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Key Vault access.","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"description":"Specifies the name of the Function App.","forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_plan_id":{"type":"TypeString","required":true,"description":"The ID of the App Service Plan within which to create this Function App"},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"description":"If this Linux Web App is Always On enabled. Defaults to `false`.","computed":true},"api_definition_url":{"type":"TypeString","optional":true,"description":"The URL of the API definition that describes this Linux Function App."},"api_management_api_id":{"type":"TypeString","optional":true,"description":"The ID of the API Management API for this Linux Function App."},"app_command_line":{"type":"TypeString","optional":true,"description":"The program and any arguments used to launch this app via the command line. (Example `node myapp.js`)."},"app_scale_limit":{"type":"TypeInt","optional":true,"description":"The number of workers this function app can scale out to. Only applicable to apps on the Consumption and Premium plan.","computed":true},"app_service_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","optional":true,"default":35,"description":"The amount of disk space to use for logs. Valid values are between `25` and `100`."},"retention_period_days":{"type":"TypeInt","optional":true,"description":"The retention period for logs in days. Valid values are between `0` and `99999`. Defaults to `0` (never delete)."}}},"maxItems":1},"application_insights_connection_string":{"type":"TypeString","optional":true,"description":"The Connection String for linking the Linux Function App to Application Insights."},"application_insights_key":{"type":"TypeString","optional":true,"description":"The Instrumentation Key for connecting the Linux Function App to Application Insights."},"application_stack":{"type":"TypeList","optional":true,"elem":{"schema":{"docker":{"type":"TypeList","optional":true,"description":"A docker block","elem":{"schema":{"image_name":{"type":"TypeString","required":true,"description":"The name of the Docker image to use."},"image_tag":{"type":"TypeString","required":true,"description":"The image tag of the image to use."},"registry_password":{"type":"TypeString","optional":true,"description":"The password for the account to use to connect to the registry."},"registry_url":{"type":"TypeString","required":true,"description":"The URL of the docker registry."},"registry_username":{"type":"TypeString","optional":true,"description":"The username to use for connections to the registry."}}}},"dotnet_version":{"type":"TypeString","optional":true,"description":"The version of .Net. Possible values are `3.1`, `6.0` and `7.0`"},"java_version":{"type":"TypeString","optional":true,"description":"The version of Java to use. Possible values are `8`, `11`, and `17`"},"node_version":{"type":"TypeString","optional":true,"description":"The version of Node to use. Possible values include `12`, `14`, `16` and `18`"},"powershell_core_version":{"type":"TypeString","optional":true,"description":"The version of PowerShell Core to use. Possibles values are `7`, and `7.2`"},"python_version":{"type":"TypeString","optional":true,"description":"The version of Python to use. Possible values include `3.11`, `3.10`, `3.9`, `3.8`, and `3.7`."},"use_custom_runtime":{"type":"TypeBool","optional":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","optional":true,"default":false,"description":"Should the DotNet process use an isolated runtime. Defaults to `false`."}}},"maxItems":1},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true,"description":"The Client ID of the Managed Service Identity to use for connections to the Azure Container Registry."},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should connections for Azure Container Registry use Managed Identity."},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"description":"Specifies a list of Default Documents for the Linux Web App.","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","description":"Is detailed error logging enabled","computed":true},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"description":"The number of minimum instances for this Linux Function App. Only affects apps on Elastic Premium plans.","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled","description":"State of FTP / FTPS service for this function app. Possible values include: `AllAllowed`, `FtpsOnly` and `Disabled`. Defaults to `Disabled`."},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true,"description":"The path to be checked for this function app health."},"http2_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Specifies if the http2 protocol should be enabled. Defaults to `false`."},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","description":"The Linux FX Version","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests","description":"The Site load balancing mode. Possible values include: `WeightedRoundRobin`, `LeastRequests`, `LeastResponseTime`, `WeightedTotalTraffic`, `RequestHash`, `PerSiteRoundRobin`. Defaults to `LeastRequests` if omitted."},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated","description":"The Managed Pipeline mode. Possible values include: `Integrated`, `Classic`. Defaults to `Integrated`."},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"The configures the minimum version of TLS required for SSL requests. Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"description":"The number of pre-warmed instances for this function app. Only affects apps on an Elastic Premium plan.","computed":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Remote Debugging be enabled. Defaults to `false`."},"remote_debugging_version":{"type":"TypeString","optional":true,"description":"The Remote Debugging Version. Possible values include `VS2017`, `VS2019`, and `VS2022``","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"description":"Should Functions Runtime Scale Monitoring be enabled."},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"Configures the minimum version of TLS required for SSL requests to the SCM site Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"scm_type":{"type":"TypeString","description":"The SCM Type in use by the Linux Function App.","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Linux Function App `ip_restriction` configuration be used for the SCM also."},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Linux Web App use a 32-bit worker."},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Web Sockets be enabled. Defaults to `false`."},"worker_count":{"type":"TypeInt","optional":true,"description":"The number of Workers for this Linux Function App.","computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"connection_string_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"storage_account_access_key":{"type":"TypeString","optional":true,"description":"The access key which will be used to access the storage account for the Function App."},"storage_account_name":{"type":"TypeString","optional":true,"description":"The backend storage account name which will be used by this Function App."},"storage_key_vault_secret_id":{"type":"TypeString","optional":true,"description":"The Key Vault Secret ID, including version, that contains the Connection String to connect to the storage account for this Function App."},"storage_uses_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App use its Managed Identity to access storage?"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Linux Function App. **Note:** Using this value requires either `WEBSITE_RUN_FROM_PACKAGE=1` or `SCM_DO_BUILD_DURING_DEPLOYMENT=true` to be set on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_linux_function_app_slot":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs for [App Settings](https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings) and custom values.","elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"builtin_logging_enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should built in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting."},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App Slot use Client Certificates."},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Optional","description":"The mode of the Function App Slot's client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`."},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"content_share_force_disabled":{"type":"TypeBool","optional":true,"default":false,"description":"Force disable the content share settings."},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans."},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Is the Linux Function App Slot enabled."},"function_app_id":{"type":"TypeString","required":true,"description":"The ID of the Linux Function App this Slot is a member of.","forceNew":true},"functions_extension_version":{"type":"TypeString","optional":true,"default":"~4","description":"The runtime version associated with the Function App Slot."},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false,"description":"Can the Function App Slot only be accessed via HTTPS?"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Key Vault access.","computed":true},"kind":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"description":"Specifies the name of the Function App Slot.","forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_plan_id":{"type":"TypeString","optional":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"description":"If this Linux Web App is Always On enabled. Defaults to `false`.","computed":true},"api_definition_url":{"type":"TypeString","optional":true,"description":"The URL of the API definition that describes this Linux Function App."},"api_management_api_id":{"type":"TypeString","optional":true,"description":"The ID of the API Management API for this Linux Function App."},"app_command_line":{"type":"TypeString","optional":true,"description":"The program and any arguments used to launch this app via the command line. (Example `node myapp.js`)."},"app_scale_limit":{"type":"TypeInt","optional":true,"description":"The number of workers this function app can scale out to. Only applicable to apps on the Consumption and Premium plan.","computed":true},"app_service_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","optional":true,"default":35,"description":"The amount of disk space to use for logs. Valid values are between `25` and `100`."},"retention_period_days":{"type":"TypeInt","optional":true,"description":"The retention period for logs in days. Valid values are between `0` and `99999`. Defaults to `0` (never delete)."}}},"maxItems":1},"application_insights_connection_string":{"type":"TypeString","optional":true,"description":"The Connection String for linking the Linux Function App to Application Insights."},"application_insights_key":{"type":"TypeString","optional":true,"description":"The Instrumentation Key for connecting the Linux Function App to Application Insights."},"application_stack":{"type":"TypeList","optional":true,"elem":{"schema":{"docker":{"type":"TypeList","optional":true,"description":"A docker block","elem":{"schema":{"image_name":{"type":"TypeString","required":true,"description":"The name of the Docker image to use."},"image_tag":{"type":"TypeString","required":true,"description":"The image tag of the image to use."},"registry_password":{"type":"TypeString","optional":true,"description":"The password for the account to use to connect to the registry."},"registry_url":{"type":"TypeString","required":true,"description":"The URL of the docker registry."},"registry_username":{"type":"TypeString","optional":true,"description":"The username to use for connections to the registry."}}}},"dotnet_version":{"type":"TypeString","optional":true,"description":"The version of .Net. Possible values are `3.1`, `6.0` and `7.0`"},"java_version":{"type":"TypeString","optional":true,"description":"The version of Java to use. Possible values are `8`, `11`, and `17`"},"node_version":{"type":"TypeString","optional":true,"description":"The version of Node to use. Possible values include `12`, `14`, `16` and `18`"},"powershell_core_version":{"type":"TypeString","optional":true,"description":"The version of PowerShell Core to use. Possibles values are `7`, and `7.2`"},"python_version":{"type":"TypeString","optional":true,"description":"The version of Python to use. Possible values include `3.11`, `3.10`, `3.9`, `3.8`, and `3.7`."},"use_custom_runtime":{"type":"TypeBool","optional":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","optional":true,"default":false,"description":"Should the DotNet process use an isolated runtime. Defaults to `false`."}}},"maxItems":1},"auto_swap_slot_name":{"type":"TypeString","optional":true},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true,"description":"The Client ID of the Managed Service Identity to use for connections to the Azure Container Registry."},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should connections for Azure Container Registry use Managed Identity."},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"description":"Specifies a list of Default Documents for the Linux Web App.","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","description":"Is detailed error logging enabled","computed":true},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"description":"The number of minimum instances for this Linux Function App. Only affects apps on Elastic Premium plans.","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled","description":"State of FTP / FTPS service for this function app. Possible values include: `AllAllowed`, `FtpsOnly` and `Disabled`. Defaults to `Disabled`."},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`"},"health_check_path":{"type":"TypeString","optional":true,"description":"The path to be checked for this function app health."},"http2_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Specifies if the http2 protocol should be enabled. Defaults to `false`."},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","description":"The Linux FX Version","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests","description":"The Site load balancing mode. Possible values include: `WeightedRoundRobin`, `LeastRequests`, `LeastResponseTime`, `WeightedTotalTraffic`, `RequestHash`, `PerSiteRoundRobin`. Defaults to `LeastRequests` if omitted."},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated","description":"The Managed Pipeline mode. Possible values include: `Integrated`, `Classic`. Defaults to `Integrated`."},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"The configures the minimum version of TLS required for SSL requests. Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"description":"The number of pre-warmed instances for this function app. Only affects apps on an Elastic Premium plan.","computed":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Remote Debugging be enabled. Defaults to `false`."},"remote_debugging_version":{"type":"TypeString","optional":true,"description":"The Remote Debugging Version. Possible values include `VS2017`, `VS2019`, and `VS2022`","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"description":"Should Functions Runtime Scale Monitoring be enabled."},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"Configures the minimum version of TLS required for SSL requests to the SCM site Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"scm_type":{"type":"TypeString","description":"The SCM Type in use by the Linux Function App.","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Linux Function App `ip_restriction` configuration be used for the SCM also."},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Linux Web App use a 32-bit worker."},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Web Sockets be enabled. Defaults to `false`."},"worker_count":{"type":"TypeInt","optional":true,"description":"The number of Workers for this Linux Function App.","computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"storage_account_access_key":{"type":"TypeString","optional":true,"description":"The access key which will be used to access the storage account for the Function App Slot."},"storage_account_name":{"type":"TypeString","optional":true,"description":"The backend storage account name which will be used by this Function App Slot."},"storage_key_vault_secret_id":{"type":"TypeString","optional":true,"description":"The Key Vault Secret ID, including version, that contains the Connection String to connect to the storage account for this Function App."},"storage_uses_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App Slot use its Managed Identity to access storage?"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_linux_virtual_machine":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"admin_password":{"type":"TypeString","optional":true,"forceNew":true},"admin_ssh_key":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"public_key":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}}},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"allow_extension_operations":{"type":"TypeBool","optional":true,"default":true},"availability_set_id":{"type":"TypeString","optional":true,"forceNew":true},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"bypass_platform_safety_checks_on_user_schedule_enabled":{"type":"TypeBool","optional":true,"default":false},"capacity_reservation_group_id":{"type":"TypeString","optional":true},"computer_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true,"forceNew":true},"dedicated_host_group_id":{"type":"TypeString","optional":true},"dedicated_host_id":{"type":"TypeString","optional":true},"disable_password_authentication":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"gallery_application":{"type":"TypeList","optional":true,"elem":{"schema":{"configuration_blob_uri":{"type":"TypeString","optional":true},"order":{"type":"TypeInt","optional":true,"default":0},"tag":{"type":"TypeString","optional":true},"version_id":{"type":"TypeString","required":true}}},"maxItems":100},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_encryption_type":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"patch_assessment_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"patch_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain":{"type":"TypeInt","optional":true,"default":-1,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true},"public_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"reboot_setting":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"secure_boot_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"size":{"type":"TypeString","required":true},"source_image_id":{"type":"TypeString","optional":true,"forceNew":true},"source_image_reference":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"user_data":{"type":"TypeString","optional":true},"virtual_machine_id":{"type":"TypeString","computed":true},"virtual_machine_scale_set_id":{"type":"TypeString","optional":true,"forceNew":true},"vtpm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":45,"read":5,"delete":45,"update":45}},"azurerm_linux_virtual_machine_scale_set":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"admin_password":{"type":"TypeString","optional":true,"forceNew":true},"admin_ssh_key":{"type":"TypeSet","optional":true,"elem":{"schema":{"public_key":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}}},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"automatic_instance_repair":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"grace_period":{"type":"TypeString","optional":true,"default":"PT30M"}}},"maxItems":1},"automatic_os_upgrade_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"disable_automatic_rollback":{"type":"TypeBool","required":true},"enable_automatic_os_upgrade":{"type":"TypeBool","required":true}}},"maxItems":1},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"computer_name_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true},"data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"create_option":{"type":"TypeString","optional":true,"default":"Empty"},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","required":true},"lun":{"type":"TypeInt","required":true},"name":{"type":"TypeString","optional":true},"storage_account_type":{"type":"TypeString","required":true},"ultra_ssd_disk_iops_read_write":{"type":"TypeInt","optional":true,"computed":true},"ultra_ssd_disk_mbps_read_write":{"type":"TypeInt","optional":true,"computed":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"disable_password_authentication":{"type":"TypeBool","optional":true,"default":true},"do_not_run_extensions_on_overprovisioned_machines":{"type":"TypeBool","optional":true,"default":false},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extension":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true,"default":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"force_update_tag":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"provision_after_extensions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true}}}},"extension_operations_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"gallery_application":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"configuration_blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"order":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"tag":{"type":"TypeString","optional":true,"forceNew":true},"version_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":100},"gallery_applications":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"configuration_reference_blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"order":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"package_reference_id":{"type":"TypeString","required":true,"forceNew":true},"tag":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":100},"health_probe_id":{"type":"TypeString","optional":true},"host_group_id":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"instances":{"type":"TypeInt","optional":true,"default":0},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","required":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","optional":true,"default":false},"enable_ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":20},"load_balancer_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","optional":true,"default":false},"public_ip_address":{"type":"TypeList","optional":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","optional":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"ip_tag":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"tag":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}}},"name":{"type":"TypeString","required":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true}}}},"subnet_id":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true,"default":"IPv4"}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","optional":true},"primary":{"type":"TypeBool","optional":true,"default":false}}}},"os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_encryption_type":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"overprovision":{"type":"TypeBool","optional":true,"default":true},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain_count":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rolling_upgrade_policy":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"cross_zone_upgrades_enabled":{"type":"TypeBool","optional":true},"max_batch_instance_percent":{"type":"TypeInt","required":true},"max_unhealthy_instance_percent":{"type":"TypeInt","required":true},"max_unhealthy_upgraded_instance_percent":{"type":"TypeInt","required":true},"pause_time_between_batches":{"type":"TypeString","required":true},"prioritize_unhealthy_instances_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"scale_in":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"force_deletion_enabled":{"type":"TypeBool","optional":true,"default":false},"rule":{"type":"TypeString","optional":true,"default":"Default"}}},"maxItems":1},"scale_in_policy":{"type":"TypeString","optional":true,"computed":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"secure_boot_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"single_placement_group":{"type":"TypeBool","optional":true,"default":true},"sku":{"type":"TypeString","required":true},"source_image_id":{"type":"TypeString","optional":true},"source_image_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"spot_restore":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"timeout":{"type":"TypeString","optional":true,"default":"PT1H","forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"terminate_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"unique_id":{"type":"TypeString","computed":true},"upgrade_mode":{"type":"TypeString","optional":true,"default":"Manual","forceNew":true},"user_data":{"type":"TypeString","optional":true},"vtpm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"zone_balance":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_linux_web_app":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Required"},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","required":true}}},"maxItems":1},"detailed_error_messages":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_plan_id":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":true},"api_definition_url":{"type":"TypeString","optional":true},"api_management_api_id":{"type":"TypeString","optional":true},"app_command_line":{"type":"TypeString","optional":true},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"docker_image":{"type":"TypeString","optional":true},"docker_image_name":{"type":"TypeString","optional":true},"docker_image_tag":{"type":"TypeString","optional":true},"docker_registry_password":{"type":"TypeString","optional":true,"computed":true},"docker_registry_url":{"type":"TypeString","optional":true,"computed":true},"docker_registry_username":{"type":"TypeString","optional":true,"computed":true},"dotnet_version":{"type":"TypeString","optional":true},"go_version":{"type":"TypeString","optional":true},"java_server":{"type":"TypeString","optional":true},"java_server_version":{"type":"TypeString","optional":true},"java_version":{"type":"TypeString","optional":true},"node_version":{"type":"TypeString","optional":true},"php_version":{"type":"TypeString","optional":true},"python_version":{"type":"TypeString","optional":true},"ruby_version":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_heal_enabled":{"type":"TypeBool","optional":true},"auto_heal_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true},"minimum_process_execution_time":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"requests":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true}}},"maxItems":1},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"time_taken":{"type":"TypeString","required":true}}},"maxItems":1},"status_code":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"status_code_range":{"type":"TypeString","required":true},"sub_status":{"type":"TypeInt","optional":true},"win32_status_code":{"type":"TypeInt","optional":true}}}}}},"maxItems":1}}},"maxItems":1},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled"},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests"},"local_mysql_enabled":{"type":"TypeBool","optional":true,"default":false},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false},"worker_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"connection_string_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Linux Web App. **Note:** Using this value requires either `WEBSITE_RUN_FROM_PACKAGE=1` or `SCM_DO_BUILD_DURING_DEPLOYMENT=true` to be set on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_linux_web_app_slot":{"schema":{"app_metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"app_service_id":{"type":"TypeString","required":true},"app_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Required"},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","optional":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","required":true}}},"maxItems":1},"detailed_error_messages":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_plan_id":{"type":"TypeString","optional":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":true},"api_definition_url":{"type":"TypeString","optional":true},"api_management_api_id":{"type":"TypeString","optional":true},"app_command_line":{"type":"TypeString","optional":true},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"docker_image":{"type":"TypeString","optional":true},"docker_image_name":{"type":"TypeString","optional":true},"docker_image_tag":{"type":"TypeString","optional":true},"docker_registry_password":{"type":"TypeString","optional":true,"computed":true},"docker_registry_url":{"type":"TypeString","optional":true,"computed":true},"docker_registry_username":{"type":"TypeString","optional":true,"computed":true},"dotnet_version":{"type":"TypeString","optional":true},"go_version":{"type":"TypeString","optional":true},"java_server":{"type":"TypeString","optional":true},"java_server_version":{"type":"TypeString","optional":true},"java_version":{"type":"TypeString","optional":true},"node_version":{"type":"TypeString","optional":true},"php_version":{"type":"TypeString","optional":true},"python_version":{"type":"TypeString","optional":true},"ruby_version":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_heal_enabled":{"type":"TypeBool","optional":true},"auto_heal_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true},"minimum_process_execution_time":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"requests":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true}}},"maxItems":1},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"time_taken":{"type":"TypeString","required":true}}},"maxItems":1},"status_code":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"status_code_range":{"type":"TypeString","required":true},"sub_status":{"type":"TypeInt","optional":true},"win32_status_code":{"type":"TypeInt","optional":true}}}}}},"maxItems":1}}},"maxItems":1},"auto_swap_slot_name":{"type":"TypeString","optional":true},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled"},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests"},"local_mysql_enabled":{"type":"TypeBool","optional":true,"default":false},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false},"worker_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Windows Web App. **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_load_test":{"schema":{"data_plane_uri":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_local_network_gateway":{"schema":{"address_space":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"bgp_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"asn":{"type":"TypeInt","required":true},"bgp_peering_address":{"type":"TypeString","required":true},"peer_weight":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"gateway_address":{"type":"TypeString","optional":true},"gateway_fqdn":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_cluster":{"schema":{"cluster_id":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"size_gb":{"type":"TypeInt","optional":true,"default":1000},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":360,"read":5,"delete":30,"update":360}},"azurerm_log_analytics_cluster_customer_managed_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"log_analytics_cluster_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":360,"read":5,"delete":30,"update":360}},"azurerm_log_analytics_data_export_rule":{"schema":{"destination_resource_id":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":false},"export_rule_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"table_names":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"workspace_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_datasource_windows_event":{"schema":{"event_log_name":{"type":"TypeString","required":true},"event_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"workspace_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_datasource_windows_performance_counter":{"schema":{"counter_name":{"type":"TypeString","required":true},"instance_name":{"type":"TypeString","required":true},"interval_seconds":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"object_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"workspace_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_linked_service":{"schema":{"name":{"type":"TypeString","computed":true},"read_access_id":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"workspace_id":{"type":"TypeString","required":true},"write_access_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_linked_storage_account":{"schema":{"data_source_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"workspace_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_query_pack":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_query_pack_query":{"schema":{"additional_settings_json":{"type":"TypeString","optional":true},"body":{"type":"TypeString","required":true},"categories":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"query_pack_id":{"type":"TypeString","required":true,"forceNew":true},"resource_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"solutions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_saved_search":{"schema":{"category":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","required":true,"forceNew":true},"function_alias":{"type":"TypeString","optional":true,"forceNew":true},"function_parameters":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_solution":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"product":{"type":"TypeString","required":true,"forceNew":true},"promotion_code":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"solution_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_name":{"type":"TypeString","required":true,"forceNew":true},"workspace_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_storage_insights":{"schema":{"blob_container_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true},"storage_account_key":{"type":"TypeString","required":true},"table_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_workspace":{"schema":{"allow_resource_only_permissions":{"type":"TypeBool","optional":true,"default":true},"cmk_for_query_forced":{"type":"TypeBool","optional":true},"daily_quota_gb":{"type":"TypeFloat","optional":true,"default":-1},"internet_ingestion_enabled":{"type":"TypeBool","optional":true,"default":true},"internet_query_enabled":{"type":"TypeBool","optional":true,"default":true},"local_authentication_disabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_shared_key":{"type":"TypeString","computed":true},"reservation_capacity_in_gb_per_day":{"type":"TypeInt","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_in_days":{"type":"TypeInt","optional":true,"computed":true},"secondary_shared_key":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_action_custom":{"schema":{"body":{"type":"TypeString","required":true},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_action_http":{"schema":{"body":{"type":"TypeString","optional":true},"headers":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"method":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"queries":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"run_after":{"type":"TypeSet","optional":true,"elem":{"schema":{"action_name":{"type":"TypeString","required":true},"action_result":{"type":"TypeString","required":true}}},"minItems":1},"uri":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account":{"schema":{"integration_service_environment_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_agreement":{"schema":{"agreement_type":{"type":"TypeString","required":true},"content":{"type":"TypeString","required":true},"guest_identity":{"type":"TypeList","required":true,"elem":{"schema":{"qualifier":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"guest_partner_name":{"type":"TypeString","required":true},"host_identity":{"type":"TypeList","required":true,"elem":{"schema":{"qualifier":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"host_partner_name":{"type":"TypeString","required":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_assembly":{"schema":{"assembly_name":{"type":"TypeString","required":true},"assembly_version":{"type":"TypeString","optional":true,"default":"0.0.0.0"},"content":{"type":"TypeString","optional":true},"content_link_uri":{"type":"TypeString","optional":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_batch_configuration":{"schema":{"batch_group_name":{"type":"TypeString","required":true,"forceNew":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"release_criteria":{"type":"TypeList","required":true,"elem":{"schema":{"batch_size":{"type":"TypeInt","optional":true},"message_count":{"type":"TypeInt","optional":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"end_time":{"type":"TypeString","optional":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","required":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"hours":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"minutes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"month_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"monthly":{"type":"TypeSet","optional":true,"elem":{"schema":{"week":{"type":"TypeInt","required":true},"weekday":{"type":"TypeString","required":true}}}},"week_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"start_time":{"type":"TypeString","optional":true},"time_zone":{"type":"TypeString","optional":true}}},"maxItems":1}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_certificate":{"schema":{"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"key_vault_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","required":true},"key_version":{"type":"TypeString","optional":true}}},"maxItems":1},"metadata":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_certificate":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_map":{"schema":{"content":{"type":"TypeString","required":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"map_type":{"type":"TypeString","required":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_partner":{"schema":{"business_identity":{"type":"TypeSet","required":true,"elem":{"schema":{"qualifier":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_schema":{"schema":{"content":{"type":"TypeString","required":true},"file_name":{"type":"TypeString","optional":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_session":{"schema":{"content":{"type":"TypeString","required":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_standard":{"schema":{"app_service_plan_id":{"type":"TypeString","required":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"bundle_version":{"type":"TypeString","optional":true,"default":"[1.*, 2.0.0)"},"client_affinity_enabled":{"type":"TypeBool","optional":true,"computed":true},"client_certificate_mode":{"type":"TypeString","optional":true},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":false},"app_scale_limit":{"type":"TypeInt","optional":true,"computed":true},"auto_swap_slot_name":{"type":"TypeString","computed":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"computed":true},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"default":false},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_min_tls_version":{"type":"TypeString","optional":true,"computed":true},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"storage_account_access_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_share_name":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"use_extension_bundle":{"type":"TypeBool","optional":true,"default":true},"version":{"type":"TypeString","optional":true,"default":"~3"},"virtual_network_subnet_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_trigger_custom":{"schema":{"body":{"type":"TypeString","required":true},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_trigger_http_request":{"schema":{"callback_url":{"type":"TypeString","computed":true},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"method":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"relative_path":{"type":"TypeString","optional":true},"schema":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_trigger_recurrence":{"schema":{"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","required":true},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"at_these_hours":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"at_these_minutes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"on_these_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"start_time":{"type":"TypeString","optional":true},"time_zone":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_workflow":{"schema":{"access_control":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_caller_ip_address_range":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"content":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_caller_ip_address_range":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_caller_ip_address_range":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"open_authentication_policy":{"type":"TypeSet","optional":true,"elem":{"schema":{"claim":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"workflow_management":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_caller_ip_address_range":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"access_endpoint":{"type":"TypeString","computed":true},"connector_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connector_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"integration_service_environment_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logic_app_integration_account_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workflow_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workflow_schema":{"type":"TypeString","optional":true,"default":"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#","forceNew":true},"workflow_version":{"type":"TypeString","optional":true,"default":"1.0.0.0","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logz_monitor":{"schema":{"company_name":{"type":"TypeString","optional":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"enterprise_app_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logz_organization_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"billing_cycle":{"type":"TypeString","required":true,"forceNew":true},"effective_date":{"type":"TypeString","required":true,"forceNew":true},"plan_id":{"type":"TypeString","optional":true,"default":"100gb14days","forceNew":true},"usage_type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"single_sign_on_url":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"email":{"type":"TypeString","required":true,"forceNew":true},"first_name":{"type":"TypeString","required":true,"forceNew":true},"last_name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logz_sub_account":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"logz_monitor_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"email":{"type":"TypeString","required":true,"forceNew":true},"first_name":{"type":"TypeString","required":true,"forceNew":true},"last_name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logz_sub_account_tag_rule":{"schema":{"logz_sub_account_id":{"type":"TypeString","required":true,"forceNew":true},"send_aad_logs":{"type":"TypeBool","optional":true,"default":false},"send_activity_logs":{"type":"TypeBool","optional":true,"default":false},"send_subscription_logs":{"type":"TypeBool","optional":true,"default":false},"tag_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}},"maxItems":10}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logz_tag_rule":{"schema":{"logz_monitor_id":{"type":"TypeString","required":true,"forceNew":true},"send_aad_logs":{"type":"TypeBool","optional":true,"default":false},"send_activity_logs":{"type":"TypeBool","optional":true,"default":false},"send_subscription_logs":{"type":"TypeBool","optional":true,"default":false},"tag_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}},"maxItems":10}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_compute_cluster":{"schema":{"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"machine_learning_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_public_ip_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"scale_settings":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"max_node_count":{"type":"TypeInt","required":true,"forceNew":true},"min_node_count":{"type":"TypeInt","required":true,"forceNew":true},"scale_down_nodes_after_idle_duration":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true,"forceNew":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"key_value":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"ssh_public_access_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"subnet_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"vm_priority":{"type":"TypeString","required":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_machine_learning_compute_instance":{"schema":{"assign_to_user":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"object_id":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","optional":true}}},"maxItems":1},"authorization_type":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"machine_learning_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_public_ip_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"ssh":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"port":{"type":"TypeInt","computed":true},"public_key":{"type":"TypeString","required":true},"username":{"type":"TypeString","computed":true}}},"maxItems":1},"subnet_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"virtual_machine_size":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_machine_learning_datastore_blobstorage":{"schema":{"account_key":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"is_default":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"service_data_auth_identity":{"type":"TypeString","optional":true,"default":"None"},"shared_access_signature":{"type":"TypeString","optional":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_datastore_datalake_gen2":{"schema":{"authority_url":{"type":"TypeString","optional":true,"computed":true},"client_id":{"type":"TypeString","optional":true},"client_secret":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"is_default":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"service_data_identity":{"type":"TypeString","optional":true,"default":"None"},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","optional":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_datastore_fileshare":{"schema":{"account_key":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"is_default":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"service_data_identity":{"type":"TypeString","optional":true,"default":"None"},"shared_access_signature":{"type":"TypeString","optional":true},"storage_fileshare_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_inference_cluster":{"schema":{"cluster_purpose":{"type":"TypeString","optional":true,"default":"FastProd","forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"kubernetes_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"machine_learning_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"ssl":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"cert":{"type":"TypeString","optional":true,"default":"","forceNew":true},"cname":{"type":"TypeString","optional":true,"default":"","forceNew":true},"key":{"type":"TypeString","optional":true,"default":"","forceNew":true},"leaf_domain_label":{"type":"TypeString","optional":true,"default":"","forceNew":true},"overwrite_existing_domain":{"type":"TypeBool","optional":true,"default":"","forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_synapse_spark":{"schema":{"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"machine_learning_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"synapse_spark_pool_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_machine_learning_workspace":{"schema":{"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"container_registry_id":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"discovery_url":{"type":"TypeString","computed":true},"encryption":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"key_id":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"friendly_name":{"type":"TypeString","optional":true},"high_business_impact":{"type":"TypeBool","optional":true},"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"image_build_compute_name":{"type":"TypeString","optional":true},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_user_assigned_identity":{"type":"TypeString","optional":true},"public_access_behind_virtual_network_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"default":"Basic"},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"v1_legacy_mode_enabled":{"type":"TypeBool","optional":true,"default":false},"workspace_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_maintenance_assignment_dedicated_host":{"schema":{"dedicated_host_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_maintenance_assignment_virtual_machine":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_maintenance_assignment_virtual_machine_scale_set":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_machine_scale_set_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_maintenance_configuration":{"schema":{"in_guest_user_patch_mode":{"type":"TypeString","optional":true},"install_patches":{"type":"TypeList","optional":true,"elem":{"schema":{"linux":{"type":"TypeList","optional":true,"elem":{"schema":{"classifications_to_include":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"package_names_mask_to_exclude":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"package_names_mask_to_include":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1},"reboot":{"type":"TypeString","optional":true},"windows":{"type":"TypeList","optional":true,"elem":{"schema":{"classifications_to_include":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kb_numbers_to_exclude":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kb_numbers_to_include":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}}},"maxItems":1,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"visibility":{"type":"TypeString","optional":true,"default":"Custom"},"window":{"type":"TypeList","optional":true,"elem":{"schema":{"duration":{"type":"TypeString","optional":true},"expiration_date_time":{"type":"TypeString","optional":true},"recur_every":{"type":"TypeString","optional":true},"start_date_time":{"type":"TypeString","required":true},"time_zone":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_managed_application":{"schema":{"application_definition_id":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outputs":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"parameter_values":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"promotion_code":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_managed_application_definition":{"schema":{"authorization":{"type":"TypeSet","optional":true,"elem":{"schema":{"role_definition_id":{"type":"TypeString","required":true},"service_principal_id":{"type":"TypeString","required":true}}},"minItems":1},"create_ui_definition":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"lock_level":{"type":"TypeString","required":true,"forceNew":true},"main_template":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"package_enabled":{"type":"TypeBool","optional":true,"default":true},"package_file_uri":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_managed_disk":{"schema":{"create_option":{"type":"TypeString","required":true,"forceNew":true},"disk_access_id":{"type":"TypeString","optional":true},"disk_encryption_set_id":{"type":"TypeString","optional":true},"disk_iops_read_only":{"type":"TypeInt","optional":true,"computed":true},"disk_iops_read_write":{"type":"TypeInt","optional":true,"computed":true},"disk_mbps_read_only":{"type":"TypeInt","optional":true,"computed":true},"disk_mbps_read_write":{"type":"TypeInt","optional":true,"computed":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"encryption_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"key_encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"gallery_image_reference_id":{"type":"TypeString","optional":true,"forceNew":true},"hyper_v_generation":{"type":"TypeString","optional":true,"forceNew":true},"image_reference_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logical_sector_size":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"max_shares":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_access_policy":{"type":"TypeString","optional":true},"on_demand_bursting_enabled":{"type":"TypeBool","optional":true},"os_type":{"type":"TypeString","optional":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_type":{"type":"TypeString","optional":true,"forceNew":true},"source_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"source_uri":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"storage_account_id":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","optional":true,"computed":true},"trusted_launch_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"upload_size_bytes":{"type":"TypeInt","optional":true,"forceNew":true},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_managed_disk_sas_token":{"schema":{"access_level":{"type":"TypeString","required":true,"forceNew":true},"duration_in_seconds":{"type":"TypeInt","required":true,"forceNew":true},"managed_disk_id":{"type":"TypeString","required":true,"forceNew":true},"sas_url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_managed_lustre_file_system":{"schema":{"encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"hsm_setting":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"container_id":{"type":"TypeString","required":true,"forceNew":true},"import_prefix":{"type":"TypeString","optional":true,"forceNew":true},"logging_container_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","required":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"time_of_day_in_utc":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"storage_capacity_in_tb":{"type":"TypeInt","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group":{"schema":{"display_name":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"parent_management_group_id":{"type":"TypeString","optional":true,"computed":true},"subscription_ids":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group_policy_assignment":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enforce":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","optional":true,"forceNew":true},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"policy_definition_reference_id":{"type":"TypeString","optional":true}}}},"not_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","computed":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"value":{"type":"TypeString","required":true}}}},"parameters":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true,"forceNew":true},"resource_selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","required":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","required":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group_policy_exemption":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"exemption_category":{"type":"TypeString","required":true},"expires_on":{"type":"TypeString","optional":true},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_reference_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group_policy_remediation":{"schema":{"failure_percentage":{"type":"TypeFloat","optional":true},"location_filters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parallel_deployments":{"type":"TypeInt","optional":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_id":{"type":"TypeString","optional":true},"policy_definition_reference_id":{"type":"TypeString","optional":true},"resource_count":{"type":"TypeInt","optional":true},"resource_discovery_mode":{"type":"TypeString","optional":true,"default":"ExistingNonCompliant"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group_subscription_association":{"schema":{"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":5,"read":5,"delete":5}},"azurerm_management_group_template_deployment":{"schema":{"debug_level":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_content":{"type":"TypeString","computed":true},"parameters_content":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_content":{"type":"TypeString","optional":true,"computed":true},"template_spec_version_id":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_management_lock":{"schema":{"lock_level":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true,"forceNew":true},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_maps_account":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"x_ms_client_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_maps_creator":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"maps_account_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_units":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mariadb_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mariadb_database":{"schema":{"charset":{"type":"TypeString","required":true,"forceNew":true},"collation":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mariadb_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mariadb_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","optional":true},"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":true},"backup_retention_days":{"type":"TypeInt","optional":true,"computed":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default"},"creation_source_server_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore_point_in_time":{"type":"TypeString","optional":true},"sku_name":{"type":"TypeString","required":true},"ssl_enforcement_enabled":{"type":"TypeBool","required":true},"ssl_minimal_tls_version_enforced":{"type":"TypeString","optional":true,"default":"TLS1_2"},"storage_mb":{"type":"TypeInt","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":60,"update":60}},"azurerm_mariadb_virtual_network_rule":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_marketplace_agreement":{"schema":{"license_text_link":{"type":"TypeString","computed":true},"offer":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeString","required":true,"forceNew":true},"privacy_policy_link":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_marketplace_role_assignment":{"schema":{"condition":{"type":"TypeString","optional":true,"forceNew":true},"condition_version":{"type":"TypeString","optional":true,"forceNew":true},"delegated_managed_identity_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","optional":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"principal_type":{"type":"TypeString","computed":true},"role_definition_id":{"type":"TypeString","optional":true,"forceNew":true},"role_definition_name":{"type":"TypeString","optional":true,"forceNew":true},"skip_service_principal_aad_check":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_media_asset":{"schema":{"alternate_id":{"type":"TypeString","optional":true},"container":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_asset_filter":{"schema":{"asset_id":{"type":"TypeString","required":true,"forceNew":true},"first_quality_bitrate":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"presentation_time_range":{"type":"TypeList","optional":true,"elem":{"schema":{"end_in_units":{"type":"TypeInt","optional":true},"force_end":{"type":"TypeBool","optional":true},"live_backoff_in_units":{"type":"TypeInt","optional":true},"presentation_window_in_units":{"type":"TypeInt","optional":true},"start_in_units":{"type":"TypeInt","optional":true},"unit_timescale_in_miliseconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"track_selection":{"type":"TypeList","optional":true,"elem":{"schema":{"condition":{"type":"TypeList","required":true,"elem":{"schema":{"operation":{"type":"TypeString","optional":true},"property":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_content_key_policy":{"schema":{"description":{"type":"TypeString","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_option":{"type":"TypeSet","required":true,"elem":{"schema":{"clear_key_configuration_enabled":{"type":"TypeBool","optional":true},"fairplay_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"ask":{"type":"TypeString","optional":true},"offline_rental_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"playback_duration_seconds":{"type":"TypeInt","optional":true},"storage_duration_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"pfx":{"type":"TypeString","optional":true},"pfx_password":{"type":"TypeString","optional":true},"rental_and_lease_key_type":{"type":"TypeString","optional":true},"rental_duration_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"open_restriction_enabled":{"type":"TypeBool","optional":true},"playready_configuration_license":{"type":"TypeList","optional":true,"elem":{"schema":{"allow_test_devices":{"type":"TypeBool","optional":true},"begin_date":{"type":"TypeString","optional":true},"content_key_location_from_header_enabled":{"type":"TypeBool","optional":true},"content_key_location_from_key_id":{"type":"TypeString","optional":true},"content_type":{"type":"TypeString","optional":true},"expiration_date":{"type":"TypeString","optional":true},"grace_period":{"type":"TypeString","optional":true},"license_type":{"type":"TypeString","optional":true},"play_right":{"type":"TypeList","optional":true,"elem":{"schema":{"agc_and_color_stripe_restriction":{"type":"TypeInt","optional":true},"allow_passing_video_content_to_unknown_output":{"type":"TypeString","optional":true},"analog_video_opl":{"type":"TypeInt","optional":true},"compressed_digital_audio_opl":{"type":"TypeInt","optional":true},"compressed_digital_video_opl":{"type":"TypeInt","optional":true},"digital_video_only_content_restriction":{"type":"TypeBool","optional":true},"explicit_analog_television_output_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"best_effort_enforced":{"type":"TypeBool","optional":true,"default":false},"control_bits":{"type":"TypeInt","required":true}}},"maxItems":1},"first_play_expiration":{"type":"TypeString","optional":true},"image_constraint_for_analog_component_video_restriction":{"type":"TypeBool","optional":true},"image_constraint_for_analog_computer_monitor_restriction":{"type":"TypeBool","optional":true},"scms_restriction":{"type":"TypeInt","optional":true},"uncompressed_digital_audio_opl":{"type":"TypeInt","optional":true},"uncompressed_digital_video_opl":{"type":"TypeInt","optional":true}}},"maxItems":1},"relative_begin_date":{"type":"TypeString","optional":true},"relative_expiration_date":{"type":"TypeString","optional":true},"security_level":{"type":"TypeString","optional":true}}}},"playready_response_custom_data":{"type":"TypeString","optional":true},"token_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"alternate_key":{"type":"TypeList","optional":true,"elem":{"schema":{"rsa_token_key_exponent":{"type":"TypeString","optional":true},"rsa_token_key_modulus":{"type":"TypeString","optional":true},"symmetric_token_key":{"type":"TypeString","optional":true},"x509_token_key_raw":{"type":"TypeString","optional":true}}}},"audience":{"type":"TypeString","optional":true},"issuer":{"type":"TypeString","optional":true},"open_id_connect_discovery_document":{"type":"TypeString","optional":true},"primary_rsa_token_key_exponent":{"type":"TypeString","optional":true},"primary_rsa_token_key_modulus":{"type":"TypeString","optional":true},"primary_symmetric_token_key":{"type":"TypeString","optional":true},"primary_x509_token_key_raw":{"type":"TypeString","optional":true},"required_claim":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"token_type":{"type":"TypeString","optional":true}}},"maxItems":1},"widevine_configuration_template":{"type":"TypeString","optional":true}}},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_job":{"schema":{"description":{"type":"TypeString","optional":true},"input_asset":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_asset":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"minItems":1},"priority":{"type":"TypeString","optional":true,"default":"Normal","forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"transform_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_live_event":{"schema":{"auto_start_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"cross_site_access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"client_access_policy":{"type":"TypeString","optional":true},"cross_domain_policy":{"type":"TypeString","optional":true}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"encoding":{"type":"TypeList","optional":true,"elem":{"schema":{"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"preset_name":{"type":"TypeString","optional":true,"forceNew":true},"stretch_mode":{"type":"TypeString","optional":true,"default":"None"},"type":{"type":"TypeString","optional":true,"default":"None","forceNew":true}}},"maxItems":1},"hostname_prefix":{"type":"TypeString","optional":true},"input":{"type":"TypeList","required":true,"elem":{"schema":{"access_token":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"endpoint":{"type":"TypeList","computed":true,"elem":{"schema":{"protocol":{"type":"TypeString","computed":true},"url":{"type":"TypeString","computed":true}}}},"ip_access_control_allow":{"type":"TypeList","optional":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"subnet_prefix_length":{"type":"TypeInt","optional":true}}}},"key_frame_interval_duration":{"type":"TypeString","optional":true},"streaming_protocol":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"preview":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"alternative_media_id":{"type":"TypeString","optional":true},"endpoint":{"type":"TypeList","computed":true,"elem":{"schema":{"protocol":{"type":"TypeString","computed":true},"url":{"type":"TypeString","computed":true}}}},"ip_access_control_allow":{"type":"TypeList","optional":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"subnet_prefix_length":{"type":"TypeInt","optional":true}}}},"preview_locator":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"streaming_policy_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_options":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"transcription_languages":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"use_static_hostname":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_live_event_output":{"schema":{"archive_window_duration":{"type":"TypeString","required":true,"forceNew":true},"asset_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"hls_fragments_per_ts_segment":{"type":"TypeInt","optional":true,"forceNew":true},"live_event_id":{"type":"TypeString","required":true,"forceNew":true},"manifest_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_snap_time_in_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"rewind_window_duration":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_services_account":{"schema":{"encryption":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"current_key_identifier":{"type":"TypeString","computed":true},"key_vault_key_identifier":{"type":"TypeString","optional":true},"managed_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"use_system_assigned_identity":{"type":"TypeBool","optional":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"type":{"type":"TypeString","optional":true,"default":"SystemKey"}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_delivery_access_control":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true},"ip_allow_list":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account":{"type":"TypeSet","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"is_primary":{"type":"TypeBool","optional":true,"default":false},"managed_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"use_system_assigned_identity":{"type":"TypeBool","optional":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1}}}},"storage_authentication_type":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_services_account_filter":{"schema":{"first_quality_bitrate":{"type":"TypeInt","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"presentation_time_range":{"type":"TypeList","optional":true,"elem":{"schema":{"end_in_units":{"type":"TypeInt","optional":true},"force_end":{"type":"TypeBool","optional":true},"live_backoff_in_units":{"type":"TypeInt","optional":true},"presentation_window_in_units":{"type":"TypeInt","optional":true},"start_in_units":{"type":"TypeInt","optional":true},"unit_timescale_in_milliseconds":{"type":"TypeInt","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"track_selection":{"type":"TypeList","optional":true,"elem":{"schema":{"condition":{"type":"TypeList","required":true,"elem":{"schema":{"operation":{"type":"TypeString","required":true},"property":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_streaming_endpoint":{"schema":{"access_control":{"type":"TypeList","optional":true,"elem":{"schema":{"akamai_signature_header_authentication_key":{"type":"TypeList","optional":true,"elem":{"schema":{"base64_key":{"type":"TypeString","optional":true},"expiration":{"type":"TypeString","optional":true},"identifier":{"type":"TypeString","optional":true}}}},"ip_allow":{"type":"TypeList","optional":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"subnet_prefix_length":{"type":"TypeInt","optional":true}}}}}},"maxItems":1},"auto_start_enabled":{"type":"TypeBool","optional":true,"computed":true},"cdn_enabled":{"type":"TypeBool","optional":true},"cdn_profile":{"type":"TypeString","optional":true,"computed":true},"cdn_provider":{"type":"TypeString","optional":true,"computed":true},"cross_site_access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"client_access_policy":{"type":"TypeString","optional":true,"computed":true},"cross_domain_policy":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"custom_host_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"host_name":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_cache_age_seconds":{"type":"TypeInt","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scale_units":{"type":"TypeInt","required":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_streaming_locator":{"schema":{"alternative_media_id":{"type":"TypeString","optional":true,"forceNew":true},"asset_name":{"type":"TypeString","required":true,"forceNew":true},"content_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"content_key_id":{"type":"TypeString","optional":true,"forceNew":true},"label_reference_in_streaming_policy":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"forceNew":true},"value":{"type":"TypeString","optional":true,"forceNew":true}}}},"default_content_key_policy_name":{"type":"TypeString","optional":true,"forceNew":true},"end_time":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"filter_names":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"start_time":{"type":"TypeString","optional":true,"forceNew":true},"streaming_locator_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"streaming_policy_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_media_streaming_policy":{"schema":{"common_encryption_cbcs":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"clear_key_encryption":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"custom_keys_acquisition_url_template":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"default_content_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"drm_fairplay":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"allow_persistent_license":{"type":"TypeBool","optional":true,"forceNew":true},"custom_license_acquisition_url_template":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"enabled_protocols":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dash":{"type":"TypeBool","optional":true,"forceNew":true},"download":{"type":"TypeBool","optional":true,"forceNew":true},"hls":{"type":"TypeBool","optional":true,"forceNew":true},"smooth_streaming":{"type":"TypeBool","optional":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"common_encryption_cenc":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"clear_key_encryption":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"custom_keys_acquisition_url_template":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"clear_track":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"condition":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"operation":{"type":"TypeString","required":true,"forceNew":true},"property":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}}}}}}},"content_key_to_track_mapping":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true},"track":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"condition":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"operation":{"type":"TypeString","required":true,"forceNew":true},"property":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}}}}}}}}}},"default_content_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"drm_playready":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"custom_attributes":{"type":"TypeString","optional":true,"forceNew":true},"custom_license_acquisition_url_template":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"drm_widevine_custom_license_acquisition_url_template":{"type":"TypeString","optional":true,"forceNew":true},"enabled_protocols":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dash":{"type":"TypeBool","optional":true,"forceNew":true},"download":{"type":"TypeBool","optional":true,"forceNew":true},"hls":{"type":"TypeBool","optional":true,"forceNew":true},"smooth_streaming":{"type":"TypeBool","optional":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"default_content_key_policy_name":{"type":"TypeString","optional":true,"forceNew":true},"envelope_encryption":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"custom_keys_acquisition_url_template":{"type":"TypeString","optional":true,"forceNew":true},"default_content_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"enabled_protocols":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dash":{"type":"TypeBool","optional":true,"forceNew":true},"download":{"type":"TypeBool","optional":true,"forceNew":true},"hls":{"type":"TypeBool","optional":true,"forceNew":true},"smooth_streaming":{"type":"TypeBool","optional":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"no_encryption_enabled_protocols":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dash":{"type":"TypeBool","optional":true,"forceNew":true},"download":{"type":"TypeBool","optional":true,"forceNew":true},"hls":{"type":"TypeBool","optional":true,"forceNew":true},"smooth_streaming":{"type":"TypeBool","optional":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_media_transform":{"schema":{"description":{"type":"TypeString","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_analyzer_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_analysis_mode":{"type":"TypeString","optional":true,"default":"Standard"},"audio_language":{"type":"TypeString","optional":true},"experimental_options":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"builtin_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"preset_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"complexity":{"type":"TypeString","optional":true},"interleave_output":{"type":"TypeString","optional":true},"key_frame_interval_in_seconds":{"type":"TypeFloat","optional":true},"max_bitrate_bps":{"type":"TypeInt","optional":true},"max_height":{"type":"TypeInt","optional":true},"max_layers":{"type":"TypeInt","optional":true},"min_bitrate_bps":{"type":"TypeInt","optional":true},"min_height":{"type":"TypeInt","optional":true}}},"maxItems":1},"preset_name":{"type":"TypeString","required":true}}},"maxItems":1},"custom_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"codec":{"type":"TypeList","required":true,"elem":{"schema":{"aac_audio":{"type":"TypeList","optional":true,"elem":{"schema":{"bitrate":{"type":"TypeInt","optional":true,"default":128000},"channels":{"type":"TypeInt","optional":true,"default":2},"label":{"type":"TypeString","optional":true},"profile":{"type":"TypeString","optional":true,"default":"AacLc"},"sampling_rate":{"type":"TypeInt","optional":true,"default":48000}}},"maxItems":1},"copy_audio":{"type":"TypeList","optional":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true}}},"maxItems":1},"copy_video":{"type":"TypeList","optional":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true}}},"maxItems":1},"dd_audio":{"type":"TypeList","optional":true,"elem":{"schema":{"bitrate":{"type":"TypeInt","optional":true,"default":192000},"channels":{"type":"TypeInt","optional":true,"default":2},"label":{"type":"TypeString","optional":true},"sampling_rate":{"type":"TypeInt","optional":true,"default":48000}}},"maxItems":1},"h264_video":{"type":"TypeList","optional":true,"elem":{"schema":{"complexity":{"type":"TypeString","optional":true,"default":"Balanced"},"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"label":{"type":"TypeString","optional":true},"layer":{"type":"TypeList","optional":true,"elem":{"schema":{"adaptive_b_frame_enabled":{"type":"TypeBool","optional":true,"default":true},"b_frames":{"type":"TypeInt","optional":true,"computed":true},"bitrate":{"type":"TypeInt","required":true},"buffer_window":{"type":"TypeString","optional":true,"default":"PT5S"},"crf":{"type":"TypeFloat","optional":true,"default":23},"entropy_mode":{"type":"TypeString","optional":true,"computed":true},"frame_rate":{"type":"TypeString","optional":true},"height":{"type":"TypeString","optional":true,"computed":true},"label":{"type":"TypeString","optional":true},"level":{"type":"TypeString","optional":true,"default":"auto"},"max_bitrate":{"type":"TypeInt","optional":true,"computed":true},"profile":{"type":"TypeString","optional":true,"default":"Auto"},"reference_frames":{"type":"TypeInt","optional":true,"computed":true},"slices":{"type":"TypeInt","optional":true,"computed":true},"width":{"type":"TypeString","optional":true,"computed":true}}},"minItems":1},"rate_control_mode":{"type":"TypeString","optional":true,"default":"ABR"},"scene_change_detection_enabled":{"type":"TypeBool","optional":true,"default":false},"stretch_mode":{"type":"TypeString","optional":true,"default":"AutoSize"},"sync_mode":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"h265_video":{"type":"TypeList","optional":true,"elem":{"schema":{"complexity":{"type":"TypeString","optional":true,"default":"Balanced"},"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"label":{"type":"TypeString","optional":true},"layer":{"type":"TypeList","optional":true,"elem":{"schema":{"adaptive_b_frame_enabled":{"type":"TypeBool","optional":true,"default":true},"b_frames":{"type":"TypeInt","optional":true,"computed":true},"bitrate":{"type":"TypeInt","required":true},"buffer_window":{"type":"TypeString","optional":true,"default":"PT5S"},"crf":{"type":"TypeFloat","optional":true,"default":28},"frame_rate":{"type":"TypeString","optional":true},"height":{"type":"TypeString","optional":true,"computed":true},"label":{"type":"TypeString","optional":true},"level":{"type":"TypeString","optional":true,"default":"auto"},"max_bitrate":{"type":"TypeInt","optional":true,"computed":true},"profile":{"type":"TypeString","optional":true,"default":"Auto"},"reference_frames":{"type":"TypeInt","optional":true,"computed":true},"slices":{"type":"TypeInt","optional":true,"computed":true},"width":{"type":"TypeString","optional":true,"computed":true}}},"minItems":1},"scene_change_detection_enabled":{"type":"TypeBool","optional":true,"default":false},"stretch_mode":{"type":"TypeString","optional":true,"default":"AutoSize"},"sync_mode":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"jpg_image":{"type":"TypeList","optional":true,"elem":{"schema":{"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"label":{"type":"TypeString","optional":true},"layer":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"label":{"type":"TypeString","optional":true},"quality":{"type":"TypeInt","optional":true,"default":70},"width":{"type":"TypeString","optional":true}}},"minItems":1},"range":{"type":"TypeString","optional":true,"default":"100%"},"sprite_column":{"type":"TypeInt","optional":true,"default":0},"start":{"type":"TypeString","required":true},"step":{"type":"TypeString","optional":true},"stretch_mode":{"type":"TypeString","optional":true,"default":"AutoSize"},"sync_mode":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"png_image":{"type":"TypeList","optional":true,"elem":{"schema":{"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"label":{"type":"TypeString","optional":true},"layer":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"label":{"type":"TypeString","optional":true},"width":{"type":"TypeString","optional":true}}},"minItems":1},"range":{"type":"TypeString","optional":true,"default":"100%"},"start":{"type":"TypeString","required":true},"step":{"type":"TypeString","optional":true},"stretch_mode":{"type":"TypeString","optional":true,"default":"AutoSize"},"sync_mode":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1}}},"minItems":1},"experimental_options":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"crop_rectangle":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"left":{"type":"TypeString","optional":true},"top":{"type":"TypeString","optional":true},"width":{"type":"TypeString","optional":true}}},"maxItems":1},"deinterlace":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","optional":true,"default":"AutoPixelAdaptive"},"parity":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"fade_in":{"type":"TypeList","optional":true,"elem":{"schema":{"duration":{"type":"TypeString","required":true},"fade_color":{"type":"TypeString","required":true},"start":{"type":"TypeString","optional":true,"default":"0"}}},"maxItems":1},"fade_out":{"type":"TypeList","optional":true,"elem":{"schema":{"duration":{"type":"TypeString","required":true},"fade_color":{"type":"TypeString","required":true},"start":{"type":"TypeString","optional":true,"default":"0"}}},"maxItems":1},"overlay":{"type":"TypeList","optional":true,"elem":{"schema":{"audio":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_gain_level":{"type":"TypeFloat","optional":true,"default":1},"end":{"type":"TypeString","optional":true},"fade_in_duration":{"type":"TypeString","optional":true},"fade_out_duration":{"type":"TypeString","optional":true},"input_label":{"type":"TypeString","required":true},"start":{"type":"TypeString","optional":true}}},"maxItems":1},"video":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_gain_level":{"type":"TypeFloat","optional":true,"default":1},"crop_rectangle":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"left":{"type":"TypeString","optional":true},"top":{"type":"TypeString","optional":true},"width":{"type":"TypeString","optional":true}}},"maxItems":1},"end":{"type":"TypeString","optional":true},"fade_in_duration":{"type":"TypeString","optional":true},"fade_out_duration":{"type":"TypeString","optional":true},"input_label":{"type":"TypeString","required":true},"opacity":{"type":"TypeFloat","optional":true,"default":1},"position":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"left":{"type":"TypeString","optional":true},"top":{"type":"TypeString","optional":true},"width":{"type":"TypeString","optional":true}}},"maxItems":1},"start":{"type":"TypeString","optional":true}}},"maxItems":1}}},"minItems":1},"rotation":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"format":{"type":"TypeList","required":true,"elem":{"schema":{"jpg":{"type":"TypeList","optional":true,"elem":{"schema":{"filename_pattern":{"type":"TypeString","required":true}}},"maxItems":1},"mp4":{"type":"TypeList","optional":true,"elem":{"schema":{"filename_pattern":{"type":"TypeString","required":true},"output_file":{"type":"TypeList","optional":true,"elem":{"schema":{"labels":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"minItems":1}}},"maxItems":1},"png":{"type":"TypeList","optional":true,"elem":{"schema":{"filename_pattern":{"type":"TypeString","required":true}}},"maxItems":1},"transport_stream":{"type":"TypeList","optional":true,"elem":{"schema":{"filename_pattern":{"type":"TypeString","required":true},"output_file":{"type":"TypeList","optional":true,"elem":{"schema":{"labels":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"minItems":1}}},"maxItems":1}}},"minItems":1}}},"maxItems":1},"face_detector_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"analysis_resolution":{"type":"TypeString","optional":true,"default":"SourceResolution"},"blur_type":{"type":"TypeString","optional":true},"experimental_options":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"face_redactor_mode":{"type":"TypeString","optional":true,"default":"Analyze"}}},"maxItems":1},"on_error_action":{"type":"TypeString","optional":true,"default":"StopProcessingJob"},"relative_priority":{"type":"TypeString","optional":true,"default":"Normal"},"video_analyzer_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_analysis_mode":{"type":"TypeString","optional":true,"default":"Standard"},"audio_language":{"type":"TypeString","optional":true},"experimental_options":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"insights_type":{"type":"TypeString","optional":true,"default":"AllInsights"}}},"maxItems":1}}},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mobile_network":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_country_code":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_code":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_attached_data_network":{"schema":{"dns_addresses":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_data_network_name":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_packet_core_data_plane_id":{"type":"TypeString","required":true,"forceNew":true},"network_address_port_translation":{"type":"TypeList","optional":true,"elem":{"schema":{"icmp_pinhole_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":180},"pinhole_maximum_number":{"type":"TypeInt","optional":true,"default":65536},"port_range":{"type":"TypeList","optional":true,"elem":{"schema":{"maximum":{"type":"TypeInt","optional":true,"default":49999},"minimum":{"type":"TypeInt","optional":true,"default":1024}}},"maxItems":1},"tcp_pinhole_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":180},"tcp_port_reuse_minimum_hold_time_in_seconds":{"type":"TypeInt","optional":true,"default":120},"udp_pinhole_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":180},"udp_port_reuse_minimum_hold_time_in_seconds":{"type":"TypeInt","optional":true,"default":60}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_equipment_address_pool_prefixes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"user_equipment_static_address_pool_prefixes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"user_plane_access_ipv4_address":{"type":"TypeString","optional":true},"user_plane_access_ipv4_gateway":{"type":"TypeString","optional":true},"user_plane_access_ipv4_subnet":{"type":"TypeString","optional":true},"user_plane_access_name":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_data_network":{"schema":{"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":30}},"azurerm_mobile_network_packet_core_control_plane":{"schema":{"control_plane_access_ipv4_address":{"type":"TypeString","optional":true},"control_plane_access_ipv4_gateway":{"type":"TypeString","optional":true},"control_plane_access_ipv4_subnet":{"type":"TypeString","optional":true},"control_plane_access_name":{"type":"TypeString","optional":true},"core_network_technology":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"interoperability_settings_json":{"type":"TypeString","optional":true},"local_diagnostics_access":{"type":"TypeList","required":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","required":true},"https_server_certificate_url":{"type":"TypeString","optional":true}}},"maxItems":1,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform":{"type":"TypeList","optional":true,"elem":{"schema":{"arc_kubernetes_cluster_id":{"type":"TypeString","optional":true},"custom_location_id":{"type":"TypeString","optional":true},"edge_device_id":{"type":"TypeString","optional":true},"stack_hci_cluster_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"sku":{"type":"TypeString","required":true},"software_version":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_equipment_mtu_in_bytes":{"type":"TypeInt","optional":true,"default":1440}},"timeouts":{"create":180,"read":5,"delete":180,"update":30}},"azurerm_mobile_network_packet_core_data_plane":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_packet_core_control_plane_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_plane_access_ipv4_address":{"type":"TypeString","optional":true},"user_plane_access_ipv4_gateway":{"type":"TypeString","optional":true},"user_plane_access_ipv4_subnet":{"type":"TypeString","optional":true},"user_plane_access_name":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_service":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pcc_rule":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"precedence":{"type":"TypeInt","required":true},"qos_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"allocation_and_retention_priority_level":{"type":"TypeInt","optional":true},"guaranteed_bit_rate":{"type":"TypeList","optional":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1},"maximum_bit_rate":{"type":"TypeList","required":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1},"preemption_capability":{"type":"TypeString","optional":true,"default":"NotPreempt"},"preemption_vulnerability":{"type":"TypeString","optional":true,"default":"Preemptable"},"qos_indicator":{"type":"TypeInt","required":true}}},"maxItems":1},"service_data_flow_template":{"type":"TypeList","required":true,"elem":{"schema":{"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"ports":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"protocol":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"remote_ip_list":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"traffic_control_enabled":{"type":"TypeBool","optional":true,"default":true}}}},"service_precedence":{"type":"TypeInt","required":true},"service_qos_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"allocation_and_retention_priority_level":{"type":"TypeInt","optional":true,"default":9},"maximum_bit_rate":{"type":"TypeList","required":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1},"preemption_capability":{"type":"TypeString","optional":true},"preemption_vulnerability":{"type":"TypeString","optional":true},"qos_indicator":{"type":"TypeInt","optional":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_sim":{"schema":{"authentication_key":{"type":"TypeString","required":true},"device_type":{"type":"TypeString","optional":true},"integrated_circuit_card_identifier":{"type":"TypeString","required":true,"forceNew":true},"international_mobile_subscriber_identity":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_sim_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"operator_key_code":{"type":"TypeString","required":true},"sim_policy_id":{"type":"TypeString","optional":true},"sim_state":{"type":"TypeString","computed":true},"static_ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"attached_data_network_id":{"type":"TypeString","required":true},"slice_id":{"type":"TypeString","required":true},"static_ipv4_address":{"type":"TypeString","optional":true}}},"minItems":1},"vendor_key_fingerprint":{"type":"TypeString","computed":true},"vendor_name":{"type":"TypeString","computed":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_mobile_network_sim_group":{"schema":{"encryption_key_url":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_sim_policy":{"schema":{"default_slice_id":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"rat_frequency_selection_priority_index":{"type":"TypeInt","optional":true},"registration_timer_in_seconds":{"type":"TypeInt","optional":true,"default":3240},"slice":{"type":"TypeList","required":true,"elem":{"schema":{"data_network":{"type":"TypeList","required":true,"elem":{"schema":{"additional_allowed_session_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"allocation_and_retention_priority_level":{"type":"TypeInt","optional":true,"default":0},"allowed_services_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"data_network_id":{"type":"TypeString","required":true},"default_session_type":{"type":"TypeString","optional":true,"default":"IPv4"},"max_buffered_packets":{"type":"TypeInt","optional":true,"default":10},"preemption_capability":{"type":"TypeString","optional":true,"default":"NotPreempt"},"preemption_vulnerability":{"type":"TypeString","optional":true,"default":"NotPreemptable"},"qos_indicator":{"type":"TypeInt","required":true},"session_aggregate_maximum_bit_rate":{"type":"TypeList","required":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1}}}},"default_data_network_id":{"type":"TypeString","required":true},"slice_id":{"type":"TypeString","required":true}}},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_equipment_aggregate_maximum_bit_rate":{"type":"TypeList","required":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":180,"read":5,"delete":180,"update":60}},"azurerm_mobile_network_site":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_function_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_slice":{"schema":{"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"single_network_slice_selection_assistance_information":{"type":"TypeList","required":true,"elem":{"schema":{"slice_differentiator":{"type":"TypeString","optional":true},"slice_service_type":{"type":"TypeInt","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_monitor_aad_diagnostic_setting":{"schema":{"enabled_log":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"category":{"type":"TypeString","required":true},"retention_policy":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":0},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}}},"eventhub_authorization_rule_id":{"type":"TypeString","optional":true,"forceNew":true},"eventhub_name":{"type":"TypeString","optional":true,"forceNew":true},"log":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"category":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"retention_policy":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":0},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}}},"log_analytics_workspace_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":5,"read":5,"delete":5,"update":5}},"azurerm_monitor_action_group":{"schema":{"arm_role_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"role_id":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"automation_runbook_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"automation_account_id":{"type":"TypeString","required":true},"is_global_runbook":{"type":"TypeBool","required":true},"name":{"type":"TypeString","required":true},"runbook_name":{"type":"TypeString","required":true},"service_uri":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true,"default":false},"webhook_resource_id":{"type":"TypeString","required":true}}}},"azure_app_push_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"email_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"azure_function_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"function_app_resource_id":{"type":"TypeString","required":true},"function_name":{"type":"TypeString","required":true},"http_trigger_url":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"email_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"email_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"enabled":{"type":"TypeBool","optional":true,"default":true},"event_hub_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","optional":true,"computed":true},"event_hub_name":{"type":"TypeString","optional":true,"computed":true},"event_hub_namespace":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"itsm_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"region":{"type":"TypeString","required":true},"ticket_configuration":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","optional":true,"default":"global","forceNew":true},"logic_app_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"callback_url":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"resource_id":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"short_name":{"type":"TypeString","required":true},"sms_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"country_code":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"phone_number":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"voice_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"country_code":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"phone_number":{"type":"TypeString","required":true}}}},"webhook_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"aad_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"identifier_uri":{"type":"TypeString","optional":true,"computed":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"service_uri":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_action_rule_action_group":{"schema":{"action_group_id":{"type":"TypeString","required":true},"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"alert_context":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_id":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_service":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"severity":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeList","optional":true,"elem":{"schema":{"resource_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_action_rule_suppression":{"schema":{"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"alert_context":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_id":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_service":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"severity":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeList","optional":true,"elem":{"schema":{"resource_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"suppression":{"type":"TypeList","required":true,"elem":{"schema":{"recurrence_type":{"type":"TypeString","required":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"end_date_utc":{"type":"TypeString","required":true},"recurrence_monthly":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"},"minItems":1},"recurrence_weekly":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"start_date_utc":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_activity_log_alert":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_group_id":{"type":"TypeString","required":true},"webhook_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"criteria":{"type":"TypeList","required":true,"elem":{"schema":{"caller":{"type":"TypeString","optional":true},"category":{"type":"TypeString","required":true},"level":{"type":"TypeString","optional":true},"levels":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"operation_name":{"type":"TypeString","optional":true},"recommendation_category":{"type":"TypeString","optional":true},"recommendation_impact":{"type":"TypeString","optional":true},"recommendation_type":{"type":"TypeString","optional":true},"resource_group":{"type":"TypeString","optional":true},"resource_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_health":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"current":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"previous":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"reason":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"resource_id":{"type":"TypeString","optional":true},"resource_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_provider":{"type":"TypeString","optional":true},"resource_providers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_type":{"type":"TypeString","optional":true},"resource_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"service_health":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"events":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"locations":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"services":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"status":{"type":"TypeString","optional":true},"statuses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"sub_status":{"type":"TypeString","optional":true},"sub_statuses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_alert_processing_rule_action_group":{"schema":{"add_action_group_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"alert_context":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_id":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_name":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_service":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"severity":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"signal_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_group":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"effective_from":{"type":"TypeString","optional":true},"effective_until":{"type":"TypeString","optional":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"daily":{"type":"TypeList","optional":true,"elem":{"schema":{"end_time":{"type":"TypeString","required":true},"start_time":{"type":"TypeString","required":true}}}},"monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_month":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"},"minItems":1},"end_time":{"type":"TypeString","optional":true},"start_time":{"type":"TypeString","optional":true}}}},"weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_week":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"end_time":{"type":"TypeString","optional":true},"start_time":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"time_zone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"scopes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_alert_processing_rule_suppression":{"schema":{"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"alert_context":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_id":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_name":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_service":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"severity":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"signal_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_group":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"effective_from":{"type":"TypeString","optional":true},"effective_until":{"type":"TypeString","optional":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"daily":{"type":"TypeList","optional":true,"elem":{"schema":{"end_time":{"type":"TypeString","required":true},"start_time":{"type":"TypeString","required":true}}}},"monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_month":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"},"minItems":1},"end_time":{"type":"TypeString","optional":true},"start_time":{"type":"TypeString","optional":true}}}},"weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_week":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"end_time":{"type":"TypeString","optional":true},"start_time":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"time_zone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"scopes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_alert_prometheus_rule_group":{"schema":{"cluster_name":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"interval":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_group_id":{"type":"TypeString","required":true},"action_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":5},"alert":{"type":"TypeString","optional":true},"alert_resolution":{"type":"TypeList","optional":true,"elem":{"schema":{"auto_resolved":{"type":"TypeBool","optional":true},"time_to_resolve":{"type":"TypeString","optional":true}}},"maxItems":1},"annotations":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true},"expression":{"type":"TypeString","required":true},"for":{"type":"TypeString","optional":true},"labels":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"record":{"type":"TypeString","optional":true},"severity":{"type":"TypeInt","optional":true}}}},"rule_group_enabled":{"type":"TypeBool","optional":true},"scopes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_autoscale_setting":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"send_to_subscription_administrator":{"type":"TypeBool","optional":true,"default":false},"send_to_subscription_co_administrator":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"webhook":{"type":"TypeList","optional":true,"elem":{"schema":{"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"service_uri":{"type":"TypeString","required":true}}}}}},"maxItems":1},"predictive":{"type":"TypeList","optional":true,"elem":{"schema":{"look_ahead_time":{"type":"TypeString","optional":true},"scale_mode":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"profile":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeList","required":true,"elem":{"schema":{"default":{"type":"TypeInt","required":true},"maximum":{"type":"TypeInt","required":true},"minimum":{"type":"TypeInt","required":true}}},"maxItems":1},"fixed_date":{"type":"TypeList","optional":true,"elem":{"schema":{"end":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true},"timezone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"name":{"type":"TypeString","required":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"hours":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"},"maxItems":1},"minutes":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"},"maxItems":1},"timezone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"metric_trigger":{"type":"TypeList","required":true,"elem":{"schema":{"dimensions":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"divide_by_instance_count":{"type":"TypeBool","optional":true},"metric_name":{"type":"TypeString","required":true},"metric_namespace":{"type":"TypeString","optional":true},"metric_resource_id":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"statistic":{"type":"TypeString","required":true},"threshold":{"type":"TypeFloat","required":true},"time_aggregation":{"type":"TypeString","required":true},"time_grain":{"type":"TypeString","required":true},"time_window":{"type":"TypeString","required":true}}},"maxItems":1},"scale_action":{"type":"TypeList","required":true,"elem":{"schema":{"cooldown":{"type":"TypeString","required":true},"direction":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":10}}},"maxItems":20},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_data_collection_endpoint":{"schema":{"configuration_access_endpoint":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs_ingestion_endpoint":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_data_collection_rule":{"schema":{"data_collection_endpoint_id":{"type":"TypeString","optional":true},"data_flow":{"type":"TypeList","required":true,"elem":{"schema":{"built_in_transform":{"type":"TypeString","optional":true},"destinations":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"output_stream":{"type":"TypeString","optional":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"transform_kql":{"type":"TypeString","optional":true}}},"minItems":1},"data_sources":{"type":"TypeList","optional":true,"elem":{"schema":{"data_import":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_data_source":{"type":"TypeList","required":true,"elem":{"schema":{"consumer_group":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"stream":{"type":"TypeString","required":true}}}}}},"maxItems":1},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"extension_json":{"type":"TypeString","optional":true},"extension_name":{"type":"TypeString","required":true},"input_data_sources":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"iis_log":{"type":"TypeList","optional":true,"elem":{"schema":{"log_directories":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"log_file":{"type":"TypeList","optional":true,"elem":{"schema":{"file_patterns":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"settings":{"type":"TypeList","optional":true,"elem":{"schema":{"text":{"type":"TypeList","required":true,"elem":{"schema":{"record_start_timestamp_format":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"performance_counter":{"type":"TypeList","optional":true,"elem":{"schema":{"counter_specifiers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"sampling_frequency_in_seconds":{"type":"TypeInt","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"platform_telemetry":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"prometheus_forwarder":{"type":"TypeList","optional":true,"elem":{"schema":{"label_include_filter":{"type":"TypeSet","optional":true,"elem":{"schema":{"label":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"syslog":{"type":"TypeList","optional":true,"elem":{"schema":{"facility_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"log_levels":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"},"minItems":1}}}},"windows_event_log":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"x_path_queries":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"windows_firewall_log":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"destinations":{"type":"TypeList","required":true,"elem":{"schema":{"azure_monitor_metrics":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true}}},"maxItems":1},"event_hub":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"event_hub_direct":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"log_analytics":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"workspace_resource_id":{"type":"TypeString","required":true}}}},"monitor_account":{"type":"TypeList","optional":true,"elem":{"schema":{"monitor_account_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"storage_blob":{"type":"TypeList","optional":true,"elem":{"schema":{"container_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}}},"storage_blob_direct":{"type":"TypeList","optional":true,"elem":{"schema":{"container_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}}},"storage_table_direct":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true},"table_name":{"type":"TypeString","required":true}}}}}},"maxItems":1,"minItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"immutable_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_declaration":{"type":"TypeSet","optional":true,"elem":{"schema":{"column":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"stream_name":{"type":"TypeString","required":true}}},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_data_collection_rule_association":{"schema":{"data_collection_endpoint_id":{"type":"TypeString","optional":true},"data_collection_rule_id":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"default":"configurationAccessEndpoint","forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_diagnostic_setting":{"schema":{"enabled_log":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"category":{"type":"TypeString","optional":true},"category_group":{"type":"TypeString","optional":true},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1}}}},"eventhub_authorization_rule_id":{"type":"TypeString","optional":true},"eventhub_name":{"type":"TypeString","optional":true},"log":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"category":{"type":"TypeString","optional":true},"category_group":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1}}}},"log_analytics_destination_type":{"type":"TypeString","optional":true,"computed":true},"log_analytics_workspace_id":{"type":"TypeString","optional":true},"metric":{"type":"TypeSet","optional":true,"elem":{"schema":{"category":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_solution_id":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":60,"update":30}},"azurerm_monitor_log_profile":{"schema":{"categories":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"locations":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"retention_policy":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":0},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"servicebus_rule_id":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_metric_alert":{"schema":{"action":{"type":"TypeSet","optional":true,"elem":{"schema":{"action_group_id":{"type":"TypeString","required":true},"webhook_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"application_insights_web_test_location_availability_criteria":{"type":"TypeList","optional":true,"elem":{"schema":{"component_id":{"type":"TypeString","required":true},"failed_location_count":{"type":"TypeInt","required":true},"web_test_id":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"auto_mitigate":{"type":"TypeBool","optional":true,"default":true},"criteria":{"type":"TypeList","optional":true,"elem":{"schema":{"aggregation":{"type":"TypeString","required":true},"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"metric_name":{"type":"TypeString","required":true},"metric_namespace":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"skip_metric_validation":{"type":"TypeBool","optional":true,"default":false},"threshold":{"type":"TypeFloat","required":true}}},"minItems":1},"description":{"type":"TypeString","optional":true},"dynamic_criteria":{"type":"TypeList","optional":true,"elem":{"schema":{"aggregation":{"type":"TypeString","required":true},"alert_sensitivity":{"type":"TypeString","required":true},"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"evaluation_failure_count":{"type":"TypeInt","optional":true,"default":4},"evaluation_total_count":{"type":"TypeInt","optional":true,"default":4},"ignore_data_before":{"type":"TypeString","optional":true},"metric_name":{"type":"TypeString","required":true},"metric_namespace":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"skip_metric_validation":{"type":"TypeBool","optional":true}}},"maxItems":1,"minItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"frequency":{"type":"TypeString","optional":true,"default":"PT1M"},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"severity":{"type":"TypeInt","optional":true,"default":3},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_location":{"type":"TypeString","optional":true,"description":"The location of the target pluginsdk. Required when using subscription, resource group scope or multiple scopes.","computed":true},"target_resource_type":{"type":"TypeString","optional":true,"description":"The resource type (e.g. Microsoft.Compute/virtualMachines) of the target pluginsdk. Required when using subscription, resource group scope or multiple scopes.","computed":true},"window_size":{"type":"TypeString","optional":true,"default":"PT5M"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_private_link_scope":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_private_link_scoped_service":{"schema":{"linked_resource_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_scheduled_query_rules_alert":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"action_group":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"custom_webhook_payload":{"type":"TypeString","optional":true},"email_subject":{"type":"TypeString","optional":true}}},"maxItems":1},"authorized_resource_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":100},"auto_mitigation_enabled":{"type":"TypeBool","optional":true,"default":false},"data_source_id":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"frequency":{"type":"TypeInt","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query":{"type":"TypeString","required":true},"query_type":{"type":"TypeString","optional":true,"default":"ResultCount"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"severity":{"type":"TypeInt","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"throttling":{"type":"TypeInt","optional":true},"time_window":{"type":"TypeInt","required":true},"trigger":{"type":"TypeList","required":true,"elem":{"schema":{"metric_trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"metric_column":{"type":"TypeString","optional":true},"metric_trigger_type":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeFloat","required":true}}},"maxItems":1},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeFloat","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_scheduled_query_rules_alert_v2":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"custom_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auto_mitigation_enabled":{"type":"TypeBool","optional":true,"default":false},"created_with_api_version":{"type":"TypeString","computed":true},"criteria":{"type":"TypeList","required":true,"elem":{"schema":{"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"failing_periods":{"type":"TypeList","optional":true,"elem":{"schema":{"minimum_failing_periods_to_trigger_alert":{"type":"TypeInt","required":true},"number_of_evaluation_periods":{"type":"TypeInt","required":true}}},"maxItems":1},"metric_measure_column":{"type":"TypeString","optional":true},"operator":{"type":"TypeString","required":true},"query":{"type":"TypeString","required":true},"resource_id_column":{"type":"TypeString","optional":true},"threshold":{"type":"TypeFloat","required":true},"time_aggregation_method":{"type":"TypeString","required":true}}},"minItems":1},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"evaluation_frequency":{"type":"TypeString","optional":true},"is_a_legacy_log_analytics_rule":{"type":"TypeBool","computed":true},"is_workspace_alerts_storage_configured":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mute_actions_after_alert_duration":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query_time_range_override":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1,"minItems":1},"severity":{"type":"TypeInt","required":true},"skip_query_validation":{"type":"TypeBool","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"window_duration":{"type":"TypeString","required":true},"workspace_alerts_storage_enabled":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_scheduled_query_rules_log":{"schema":{"authorized_resource_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"criteria":{"type":"TypeList","required":true,"elem":{"schema":{"dimension":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"Include"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"metric_name":{"type":"TypeString","required":true}}},"maxItems":1},"data_source_id":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_smart_detector_alert_rule":{"schema":{"action_group":{"type":"TypeList","required":true,"elem":{"schema":{"email_subject":{"type":"TypeString","optional":true},"ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"webhook_payload":{"type":"TypeString","optional":true}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"detector_type":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"frequency":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope_resource_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"severity":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"throttling_duration":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_workspace":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_database":{"schema":{"auto_pause_delay_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"collation":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default","forceNew":true},"creation_source_database_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"elastic_pool_id":{"type":"TypeString","optional":true},"geo_backup_enabled":{"type":"TypeBool","optional":true,"default":true},"import":{"type":"TypeList","optional":true,"elem":{"schema":{"administrator_login":{"type":"TypeString","required":true},"administrator_login_password":{"type":"TypeString","required":true},"authentication_type":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_key":{"type":"TypeString","required":true},"storage_key_type":{"type":"TypeString","required":true},"storage_uri":{"type":"TypeString","required":true}}},"maxItems":1},"ledger_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"license_type":{"type":"TypeString","optional":true,"computed":true},"long_term_retention_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"monthly_retention":{"type":"TypeString","optional":true,"computed":true},"week_of_year":{"type":"TypeInt","optional":true,"computed":true},"weekly_retention":{"type":"TypeString","optional":true,"computed":true},"yearly_retention":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"maintenance_configuration_name":{"type":"TypeString","optional":true,"computed":true},"max_size_gb":{"type":"TypeInt","optional":true,"computed":true},"min_capacity":{"type":"TypeFloat","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_replica_count":{"type":"TypeInt","optional":true,"computed":true},"read_scale":{"type":"TypeBool","optional":true,"computed":true},"recover_database_id":{"type":"TypeString","optional":true},"restore_dropped_database_id":{"type":"TypeString","optional":true},"restore_point_in_time":{"type":"TypeString","optional":true,"computed":true},"sample_name":{"type":"TypeString","optional":true,"computed":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"short_term_retention_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"backup_interval_in_hours":{"type":"TypeInt","optional":true,"default":12},"retention_days":{"type":"TypeInt","required":true}}},"maxItems":1},"sku_name":{"type":"TypeString","optional":true,"computed":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"Geo"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeString","optional":true,"default":"Disabled"},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"retention_days":{"type":"TypeInt","optional":true},"state":{"type":"TypeString","optional":true,"default":"Disabled"},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"transparent_data_encryption_enabled":{"type":"TypeBool","optional":true,"default":true},"zone_redundant":{"type":"TypeBool","optional":true,"computed":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_database_extended_auditing_policy":{"schema":{"database_id":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_access_key_is_secondary":{"type":"TypeBool","optional":true,"default":false},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_database_vulnerability_assessment_rule_baseline":{"schema":{"baseline_name":{"type":"TypeString","optional":true,"default":"default","forceNew":true},"baseline_result":{"type":"TypeSet","required":true,"elem":{"schema":{"result":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"database_name":{"type":"TypeString","required":true,"forceNew":true},"rule_id":{"type":"TypeString","required":true,"forceNew":true},"server_vulnerability_assessment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_elasticpool":{"schema":{"license_type":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_name":{"type":"TypeString","optional":true,"default":"SQL_Default"},"max_size_bytes":{"type":"TypeInt","optional":true,"computed":true},"max_size_gb":{"type":"TypeFloat","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"per_database_settings":{"type":"TypeList","required":true,"elem":{"schema":{"max_capacity":{"type":"TypeFloat","required":true},"min_capacity":{"type":"TypeFloat","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"family":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_failover_group":{"schema":{"databases":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_server":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"role":{"type":"TypeString","computed":true}}},"minItems":1},"read_write_endpoint_failover_policy":{"type":"TypeList","required":true,"elem":{"schema":{"grace_minutes":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"readonly_endpoint_failover_policy_enabled":{"type":"TypeBool","optional":true,"computed":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_job_agent":{"schema":{"database_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_job_credential":{"schema":{"job_agent_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_managed_database":{"schema":{"long_term_retention_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"monthly_retention":{"type":"TypeString","optional":true,"computed":true},"week_of_year":{"type":"TypeInt","optional":true,"computed":true},"weekly_retention":{"type":"TypeString","optional":true,"computed":true},"yearly_retention":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"short_term_retention_days":{"type":"TypeInt","optional":true,"default":7}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance":{"schema":{"administrator_login":{"type":"TypeString","required":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","required":true},"collation":{"type":"TypeString","optional":true,"default":"SQL_Latin1_General_CP1_CI_AS","forceNew":true},"dns_zone_partner_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_name":{"type":"TypeString","optional":true,"default":"SQL_Default"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"name":{"type":"TypeString","required":true,"forceNew":true},"proxy_override":{"type":"TypeString","optional":true,"default":"Default"},"public_data_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"GRS","forceNew":true},"storage_size_in_gb":{"type":"TypeInt","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timezone_id":{"type":"TypeString","optional":true,"default":"UTC","forceNew":true},"vcores":{"type":"TypeInt","required":true}},"timeouts":{"create":1440,"read":5,"delete":1440,"update":1440}},"azurerm_mssql_managed_instance_active_directory_administrator":{"schema":{"azuread_authentication_only":{"type":"TypeBool","optional":true},"login_username":{"type":"TypeString","required":true},"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance_failover_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"partner_region":{"type":"TypeList","computed":true,"elem":{"schema":{"location":{"type":"TypeString","computed":true},"role":{"type":"TypeString","computed":true}}}},"read_write_endpoint_failover_policy":{"type":"TypeList","required":true,"elem":{"schema":{"grace_minutes":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"readonly_endpoint_failover_policy_enabled":{"type":"TypeBool","optional":true,"default":true},"role":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance_security_alert_policy":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true},"managed_instance_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_days":{"type":"TypeInt","optional":true,"default":0},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance_transparent_data_encryption":{"schema":{"auto_rotation_enabled":{"type":"TypeBool","optional":true,"default":false},"key_vault_key_id":{"type":"TypeString","optional":true},"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance_vulnerability_assessment":{"schema":{"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"recurring_scans":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email_subscription_admins":{"type":"TypeBool","optional":true,"default":true},"emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_container_path":{"type":"TypeString","required":true},"storage_container_sas_key":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_outbound_firewall_rule":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","optional":true},"azuread_administrator":{"type":"TypeList","optional":true,"elem":{"schema":{"azuread_authentication_only":{"type":"TypeBool","optional":true,"computed":true},"login_username":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1,"minItems":1},"connection_policy":{"type":"TypeString","optional":true,"default":"Default"},"fully_qualified_domain_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_network_restriction_enabled":{"type":"TypeBool","optional":true,"default":false},"primary_user_assigned_identity_id":{"type":"TypeString","optional":true,"computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restorable_dropped_database_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"transparent_data_encryption_key_vault_key_id":{"type":"TypeString","optional":true},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_server_dns_alias":{"schema":{"dns_record":{"type":"TypeString","computed":true},"mssql_server_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":10}},"azurerm_mssql_server_extended_auditing_policy":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"server_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_access_key_is_secondary":{"type":"TypeBool","optional":true,"default":false},"storage_account_subscription_id":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server_microsoft_support_auditing_policy":{"schema":{"blob_storage_endpoint":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_subscription_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server_security_alert_policy":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","optional":true,"default":false},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_days":{"type":"TypeInt","optional":true,"default":0},"server_name":{"type":"TypeString","required":true,"forceNew":true},"state":{"type":"TypeString","required":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server_transparent_data_encryption":{"schema":{"auto_rotation_enabled":{"type":"TypeBool","optional":true,"default":false},"key_vault_key_id":{"type":"TypeString","optional":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server_vulnerability_assessment":{"schema":{"recurring_scans":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email_subscription_admins":{"type":"TypeBool","optional":true,"default":false},"emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"server_security_alert_policy_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_container_path":{"type":"TypeString","required":true},"storage_container_sas_key":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_virtual_machine":{"schema":{"assessment":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"run_immediately":{"type":"TypeBool","optional":true,"default":false},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"monthly_occurrence":{"type":"TypeInt","optional":true},"start_time":{"type":"TypeString","required":true},"weekly_interval":{"type":"TypeInt","optional":true}}},"maxItems":1}}},"maxItems":1},"auto_backup":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_enabled":{"type":"TypeBool","optional":true,"default":false},"encryption_password":{"type":"TypeString","optional":true},"manual_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_week":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"full_backup_frequency":{"type":"TypeString","required":true},"full_backup_start_hour":{"type":"TypeInt","required":true},"full_backup_window_in_hours":{"type":"TypeInt","required":true},"log_backup_frequency_in_minutes":{"type":"TypeInt","required":true}}},"maxItems":1},"retention_period_in_days":{"type":"TypeInt","required":true},"storage_account_access_key":{"type":"TypeString","required":true},"storage_blob_endpoint":{"type":"TypeString","required":true},"system_databases_backup_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"auto_patching":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"maintenance_window_duration_in_minutes":{"type":"TypeInt","required":true},"maintenance_window_starting_hour":{"type":"TypeInt","required":true}}},"maxItems":1},"key_vault_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_url":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true},"service_principal_name":{"type":"TypeString","required":true,"forceNew":true},"service_principal_secret":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"r_services_enabled":{"type":"TypeBool","optional":true},"sql_connectivity_port":{"type":"TypeInt","optional":true,"default":1433},"sql_connectivity_type":{"type":"TypeString","optional":true,"default":"PRIVATE"},"sql_connectivity_update_password":{"type":"TypeString","optional":true},"sql_connectivity_update_username":{"type":"TypeString","optional":true},"sql_instance":{"type":"TypeList","optional":true,"elem":{"schema":{"adhoc_workloads_optimization_enabled":{"type":"TypeBool","optional":true,"default":false},"collation":{"type":"TypeString","optional":true,"default":"SQL_Latin1_General_CP1_CI_AS","forceNew":true},"instant_file_initialization_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"lock_pages_in_memory_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"max_dop":{"type":"TypeInt","optional":true,"default":0},"max_server_memory_mb":{"type":"TypeInt","optional":true,"default":2147483647},"min_server_memory_mb":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"sql_license_type":{"type":"TypeString","optional":true,"forceNew":true},"sql_virtual_machine_group_id":{"type":"TypeString","optional":true},"storage_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"data_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"default_file_path":{"type":"TypeString","required":true},"luns":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"}}}},"maxItems":1},"disk_type":{"type":"TypeString","required":true},"log_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"default_file_path":{"type":"TypeString","required":true},"luns":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"}}}},"maxItems":1},"storage_workload_type":{"type":"TypeString","required":true},"system_db_on_data_disk_enabled":{"type":"TypeBool","optional":true,"default":false},"temp_db_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"data_file_count":{"type":"TypeInt","optional":true,"default":8},"data_file_growth_in_mb":{"type":"TypeInt","optional":true,"default":512},"data_file_size_mb":{"type":"TypeInt","optional":true,"default":256},"default_file_path":{"type":"TypeString","required":true},"log_file_growth_mb":{"type":"TypeInt","optional":true,"default":512},"log_file_size_mb":{"type":"TypeInt","optional":true,"default":256},"luns":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"}}}},"maxItems":1}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true},"wsfc_domain_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"cluster_bootstrap_account_password":{"type":"TypeString","required":true},"cluster_operator_account_password":{"type":"TypeString","required":true},"sql_service_account_password":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_virtual_machine_availability_group_listener":{"schema":{"availability_group_name":{"type":"TypeString","optional":true,"forceNew":true},"load_balancer_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"load_balancer_id":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","required":true,"forceNew":true},"probe_port":{"type":"TypeInt","required":true,"forceNew":true},"sql_virtual_machine_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"multi_subnet_ip_configuration":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","required":true,"forceNew":true},"sql_virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"port":{"type":"TypeInt","optional":true,"forceNew":true},"replica":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"commit":{"type":"TypeString","required":true,"forceNew":true},"failover_mode":{"type":"TypeString","required":true,"forceNew":true},"readable_secondary":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","required":true,"forceNew":true},"sql_virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}}}},"sql_virtual_machine_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_mssql_virtual_machine_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sql_image_offer":{"type":"TypeString","required":true,"forceNew":true},"sql_image_sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"wsfc_domain_profile":{"type":"TypeList","required":true,"elem":{"schema":{"cluster_bootstrap_account_name":{"type":"TypeString","optional":true,"forceNew":true},"cluster_operator_account_name":{"type":"TypeString","optional":true,"forceNew":true},"cluster_subnet_type":{"type":"TypeString","required":true,"forceNew":true},"fqdn":{"type":"TypeString","required":true,"forceNew":true},"organizational_unit_path":{"type":"TypeString","optional":true,"forceNew":true},"sql_service_account_name":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_primary_key":{"type":"TypeString","optional":true},"storage_account_url":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_virtual_network_rule":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_active_directory_administrator":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_database":{"schema":{"charset":{"type":"TypeString","required":true,"forceNew":true},"collation":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_flexible_database":{"schema":{"charset":{"type":"TypeString","required":true,"forceNew":true},"collation":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_flexible_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_password":{"type":"TypeString","optional":true},"backup_retention_days":{"type":"TypeInt","optional":true,"default":7},"create_mode":{"type":"TypeString","optional":true,"forceNew":true},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"geo_backup_key_vault_key_id":{"type":"TypeString","optional":true},"geo_backup_user_assigned_identity_id":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"primary_user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"delegated_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"high_availability":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"standby_availability_zone":{"type":"TypeString","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeInt","optional":true,"default":0},"start_hour":{"type":"TypeInt","optional":true,"default":0},"start_minute":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"point_in_time_restore_time_in_utc":{"type":"TypeString","optional":true,"forceNew":true},"private_dns_zone_id":{"type":"TypeString","optional":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"replica_capacity":{"type":"TypeInt","computed":true},"replication_role":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"computed":true},"source_server_id":{"type":"TypeString","optional":true,"forceNew":true},"storage":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":true},"iops":{"type":"TypeInt","optional":true,"computed":true},"size_gb":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"zone":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_flexible_server_active_directory_administrator":{"schema":{"identity_id":{"type":"TypeString","required":true},"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_flexible_server_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_flexible_server_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","optional":true},"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":true},"backup_retention_days":{"type":"TypeInt","optional":true,"computed":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default"},"creation_source_server_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore_point_in_time":{"type":"TypeString","optional":true},"sku_name":{"type":"TypeString","required":true},"ssl_enforcement_enabled":{"type":"TypeBool","required":true},"ssl_minimal_tls_version_enforced":{"type":"TypeString","optional":true,"default":"TLS1_2"},"storage_mb":{"type":"TypeInt","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","optional":true},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true},"retention_days":{"type":"TypeInt","optional":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_server_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_virtual_network_rule":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_nat_gateway":{"schema":{"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_guid":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","optional":true,"default":"Standard"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_nat_gateway_public_ip_association":{"schema":{"nat_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_nat_gateway_public_ip_prefix_association":{"schema":{"nat_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"public_ip_prefix_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_netapp_account":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"domain":{"type":"TypeString","required":true},"organizational_unit":{"type":"TypeString","optional":true},"password":{"type":"TypeString","required":true},"smb_server_name":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_netapp_pool":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"qos_type":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_level":{"type":"TypeString","required":true,"forceNew":true},"size_in_tb":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_netapp_snapshot":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pool_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"volume_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_netapp_snapshot_policy":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"daily_schedule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"hour":{"type":"TypeInt","required":true},"minute":{"type":"TypeInt","required":true},"snapshots_to_keep":{"type":"TypeInt","required":true}}},"maxItems":1},"enabled":{"type":"TypeBool","required":true},"hourly_schedule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"minute":{"type":"TypeInt","required":true},"snapshots_to_keep":{"type":"TypeInt","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"monthly_schedule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"days_of_month":{"type":"TypeSet","required":true,"elem":{"type":"TypeInt"},"maxItems":30},"hour":{"type":"TypeInt","required":true},"minute":{"type":"TypeInt","required":true},"snapshots_to_keep":{"type":"TypeInt","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"weekly_schedule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"days_of_week":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":7},"hour":{"type":"TypeInt","required":true},"minute":{"type":"TypeInt","required":true},"snapshots_to_keep":{"type":"TypeInt","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_netapp_volume":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"azure_vmware_data_store_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"create_from_snapshot_resource_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"data_protection_replication":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"endpoint_type":{"type":"TypeString","optional":true,"default":"dst"},"remote_volume_location":{"type":"TypeString","required":true,"forceNew":true},"remote_volume_resource_id":{"type":"TypeString","required":true},"replication_frequency":{"type":"TypeString","required":true}}},"maxItems":1},"data_protection_snapshot_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"snapshot_policy_id":{"type":"TypeString","required":true}}},"maxItems":1},"export_policy_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_clients":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"protocols_enabled":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"},"maxItems":1,"minItems":1},"root_access_enabled":{"type":"TypeBool","optional":true},"rule_index":{"type":"TypeInt","required":true},"unix_read_only":{"type":"TypeBool","optional":true},"unix_read_write":{"type":"TypeBool","optional":true}}},"maxItems":5},"location":{"type":"TypeString","required":true,"forceNew":true},"mount_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_features":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"pool_name":{"type":"TypeString","required":true,"forceNew":true},"protocols":{"type":"TypeSet","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":2},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"security_style":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"service_level":{"type":"TypeString","required":true,"forceNew":true},"snapshot_directory_visible":{"type":"TypeBool","optional":true,"computed":true},"storage_quota_in_gb":{"type":"TypeInt","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"throughput_in_mibps":{"type":"TypeFloat","optional":true,"computed":true},"volume_path":{"type":"TypeString","required":true,"forceNew":true},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_netapp_volume_group_sap_hana":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"application_identifier":{"type":"TypeString","required":true,"forceNew":true},"group_description":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"volume":{"type":"TypeList","required":true,"elem":{"schema":{"capacity_pool_id":{"type":"TypeString","required":true,"forceNew":true},"data_protection_replication":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"endpoint_type":{"type":"TypeString","optional":true,"default":"dst"},"remote_volume_location":{"type":"TypeString","required":true},"remote_volume_resource_id":{"type":"TypeString","required":true},"replication_frequency":{"type":"TypeString","required":true}}},"maxItems":1},"data_protection_snapshot_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"snapshot_policy_id":{"type":"TypeString","required":true}}},"maxItems":1},"export_policy_rule":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_clients":{"type":"TypeString","required":true},"nfsv3_enabled":{"type":"TypeBool","required":true},"nfsv41_enabled":{"type":"TypeBool","required":true},"root_access_enabled":{"type":"TypeBool","optional":true,"default":true},"rule_index":{"type":"TypeInt","required":true},"unix_read_only":{"type":"TypeBool","optional":true,"default":false},"unix_read_write":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":5,"minItems":1},"id":{"type":"TypeString","computed":true},"mount_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"protocols":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1,"minItems":1},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"security_style":{"type":"TypeString","required":true,"forceNew":true},"service_level":{"type":"TypeString","required":true,"forceNew":true},"snapshot_directory_visible":{"type":"TypeBool","required":true,"forceNew":true},"storage_quota_in_gb":{"type":"TypeInt","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"throughput_in_mibps":{"type":"TypeFloat","required":true},"volume_path":{"type":"TypeString","required":true,"forceNew":true},"volume_spec_name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":5,"minItems":2}},"timeouts":{"create":90,"read":5,"delete":120,"update":120}},"azurerm_network_connection_monitor":{"schema":{"endpoint":{"type":"TypeSet","required":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"coverage_level":{"type":"TypeString","optional":true},"excluded_ip_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"item":{"type":"TypeSet","optional":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"type":{"type":"TypeString","optional":true,"default":"AgentAddress"}}}},"type":{"type":"TypeString","optional":true,"default":"Include"}}},"maxItems":1},"included_ip_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"target_resource_id":{"type":"TypeString","optional":true,"computed":true},"target_resource_type":{"type":"TypeString","optional":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_id":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true},"output_workspace_resource_ids":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"test_configuration":{"type":"TypeSet","required":true,"elem":{"schema":{"http_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"method":{"type":"TypeString","optional":true,"default":"Get"},"path":{"type":"TypeString","optional":true},"port":{"type":"TypeInt","optional":true},"prefer_https":{"type":"TypeBool","optional":true,"default":false},"request_header":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"valid_status_code_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"icmp_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"trace_route_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"preferred_ip_version":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true},"success_threshold":{"type":"TypeList","optional":true,"elem":{"schema":{"checks_failed_percent":{"type":"TypeInt","optional":true},"round_trip_time_ms":{"type":"TypeFloat","optional":true}}},"maxItems":1},"tcp_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"destination_port_behavior":{"type":"TypeString","optional":true},"port":{"type":"TypeInt","required":true},"trace_route_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"test_frequency_in_seconds":{"type":"TypeInt","optional":true,"default":60}}}},"test_group":{"type":"TypeSet","required":true,"elem":{"schema":{"destination_endpoints":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"source_endpoints":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"test_configuration_names":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_ddos_protection_plan":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_function_azure_traffic_collector":{"schema":{"collector_policy_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface":{"schema":{"applied_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_accelerated_networking":{"type":"TypeBool","optional":true,"default":false},"enable_ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"internal_dns_name_label":{"type":"TypeString","optional":true,"computed":true},"internal_domain_name_suffix":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"gateway_load_balancer_frontend_ip_configuration_id":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","optional":true,"computed":true},"private_ip_address":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_allocation":{"type":"TypeString","required":true},"private_ip_address_version":{"type":"TypeString","optional":true,"default":"IPv4"},"public_ip_address_id":{"type":"TypeString","optional":true},"subnet_id":{"type":"TypeString","optional":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"mac_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_machine_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_application_gateway_backend_address_pool_association":{"schema":{"backend_address_pool_id":{"type":"TypeString","required":true,"forceNew":true},"ip_configuration_name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_application_security_group_association":{"schema":{"application_security_group_id":{"type":"TypeString","required":true,"forceNew":true},"network_interface_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_backend_address_pool_association":{"schema":{"backend_address_pool_id":{"type":"TypeString","required":true,"forceNew":true},"ip_configuration_name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_nat_rule_association":{"schema":{"ip_configuration_name":{"type":"TypeString","required":true,"forceNew":true},"nat_rule_id":{"type":"TypeString","required":true,"forceNew":true},"network_interface_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_security_group_association":{"schema":{"network_interface_id":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager":{"schema":{"cross_tenant_scopes":{"type":"TypeList","computed":true,"elem":{"schema":{"management_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"subscriptions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}}}},"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeList","required":true,"elem":{"schema":{"management_group_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"subscription_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"scope_accesses":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_admin_rule":{"schema":{"action":{"type":"TypeString","required":true},"admin_rule_collection_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"destination":{"type":"TypeList","optional":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","required":true},"address_prefix_type":{"type":"TypeString","required":true}}}},"destination_port_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"source":{"type":"TypeList","optional":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","required":true},"address_prefix_type":{"type":"TypeString","required":true}}}},"source_port_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_admin_rule_collection":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_group_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"security_admin_configuration_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_connectivity_configuration":{"schema":{"applies_to_group":{"type":"TypeList","required":true,"elem":{"schema":{"global_mesh_enabled":{"type":"TypeBool","optional":true},"group_connectivity":{"type":"TypeString","required":true},"network_group_id":{"type":"TypeString","required":true},"use_hub_gateway":{"type":"TypeBool","optional":true}}}},"connectivity_topology":{"type":"TypeString","required":true},"delete_existing_peering_enabled":{"type":"TypeBool","optional":true},"description":{"type":"TypeString","optional":true},"global_mesh_enabled":{"type":"TypeBool","optional":true},"hub":{"type":"TypeList","optional":true,"elem":{"schema":{"resource_id":{"type":"TypeString","required":true},"resource_type":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_deployment":{"schema":{"configuration_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true},"scope_access":{"type":"TypeString","required":true,"forceNew":true},"triggers":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":1440,"read":5,"delete":1440,"update":1440}},"azurerm_network_manager_management_group_connection":{"schema":{"connection_state":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_network_group":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_scope_connection":{"schema":{"connection_state":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true},"target_scope_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_security_admin_configuration":{"schema":{"apply_on_network_intent_policy_based_services":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_static_member":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"network_group_id":{"type":"TypeString","required":true,"forceNew":true},"region":{"type":"TypeString","computed":true},"target_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_network_manager_subscription_connection":{"schema":{"connection_state":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_packet_capture":{"schema":{"filter":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"local_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"local_port":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true},"remote_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"remote_port":{"type":"TypeString","optional":true,"forceNew":true}}}},"maximum_bytes_per_packet":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"maximum_bytes_per_session":{"type":"TypeInt","optional":true,"default":1073741824,"forceNew":true},"maximum_capture_duration":{"type":"TypeInt","optional":true,"default":18000,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_location":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"file_path":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_path":{"type":"TypeString","computed":true}}},"maxItems":1},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_profile":{"schema":{"container_network_interface":{"type":"TypeList","required":true,"elem":{"schema":{"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true}}},"maxItems":1},"container_network_interface_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_security_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"security_rule":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"access":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"destination_address_prefix":{"type":"TypeString","optional":true},"destination_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_port_range":{"type":"TypeString","optional":true},"destination_port_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"source_address_prefix":{"type":"TypeString","optional":true},"source_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_port_range":{"type":"TypeString","optional":true},"source_port_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_security_rule":{"schema":{"access":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"destination_address_prefix":{"type":"TypeString","optional":true},"destination_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":10},"destination_port_range":{"type":"TypeString","optional":true},"destination_port_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_address_prefix":{"type":"TypeString","optional":true},"source_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":10},"source_port_range":{"type":"TypeString","optional":true},"source_port_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_watcher":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_watcher_flow_log":{"schema":{"enabled":{"type":"TypeBool","required":true},"location":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_policy":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeInt","required":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"storage_account_id":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"traffic_analytics":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"interval_in_minutes":{"type":"TypeInt","optional":true,"default":60},"workspace_id":{"type":"TypeString","required":true},"workspace_region":{"type":"TypeString","required":true},"workspace_resource_id":{"type":"TypeString","required":true}}},"maxItems":1},"version":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_new_relic_monitor":{"schema":{"account_creation_source":{"type":"TypeString","optional":true,"default":"LIFTR","forceNew":true},"account_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"ingestion_key":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"org_creation_source":{"type":"TypeString","optional":true,"default":"LIFTR","forceNew":true},"organization_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"plan":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"billing_cycle":{"type":"TypeString","optional":true,"default":"MONTHLY","forceNew":true},"effective_date":{"type":"TypeString","required":true,"forceNew":true},"plan_id":{"type":"TypeString","optional":true,"default":"newrelic-pay-as-you-go-free-live","forceNew":true},"usage_type":{"type":"TypeString","optional":true,"default":"PAYG","forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"user":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"email":{"type":"TypeString","required":true,"forceNew":true},"first_name":{"type":"TypeString","required":true,"forceNew":true},"last_name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"user_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_nginx_certificate":{"schema":{"certificate_virtual_path":{"type":"TypeString","required":true},"key_vault_secret_id":{"type":"TypeString","required":true},"key_virtual_path":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"nginx_deployment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":10,"update":30}},"azurerm_nginx_configuration":{"schema":{"config_file":{"type":"TypeSet","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"virtual_path":{"type":"TypeString","required":true}}}},"nginx_deployment_id":{"type":"TypeString","required":true,"forceNew":true},"package_data":{"type":"TypeString","optional":true},"protected_file":{"type":"TypeSet","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"virtual_path":{"type":"TypeString","required":true}}}},"root_file":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_nginx_deployment":{"schema":{"diagnose_support_enabled":{"type":"TypeBool","optional":true},"frontend_private":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"allocation_method":{"type":"TypeString","required":true},"ip_address":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}}},"frontend_public":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"ip_address":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logging_storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"container_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true}}}},"managed_resource_group":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"subnet_id":{"type":"TypeString","required":true}}}},"nginx_version":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_notification_hub":{"schema":{"apns_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"application_mode":{"type":"TypeString","required":true},"bundle_id":{"type":"TypeString","required":true},"key_id":{"type":"TypeString","required":true},"team_id":{"type":"TypeString","required":true},"token":{"type":"TypeString","required":true}}},"maxItems":1},"gcm_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"api_key":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_notification_hub_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"notification_hub_name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_notification_hub_namespace":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_type":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"servicebus_endpoint":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_orbital_contact":{"schema":{"contact_profile_id":{"type":"TypeString","required":true,"forceNew":true},"ground_station_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"reservation_end_time":{"type":"TypeString","required":true,"forceNew":true},"reservation_start_time":{"type":"TypeString","required":true,"forceNew":true},"spacecraft_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_orbital_contact_profile":{"schema":{"auto_tracking":{"type":"TypeString","required":true},"event_hub_uri":{"type":"TypeString","optional":true},"links":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"channels":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"bandwidth_mhz":{"type":"TypeFloat","required":true},"center_frequency_mhz":{"type":"TypeFloat","required":true},"demodulation_configuration":{"type":"TypeString","optional":true},"end_point":{"type":"TypeSet","required":true,"elem":{"schema":{"end_point_name":{"type":"TypeString","required":true},"ip_address":{"type":"TypeString","optional":true},"port":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"modulation_configuration":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true}}},"minItems":1},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"polarization":{"type":"TypeString","required":true}}},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_elevation_degrees":{"type":"TypeFloat","optional":true},"minimum_variable_contact_duration":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_configuration_subnet_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_orbital_spacecraft":{"schema":{"links":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"bandwidth_mhz":{"type":"TypeFloat","required":true},"center_frequency_mhz":{"type":"TypeFloat","required":true},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"polarization":{"type":"TypeString","required":true}}},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"norad_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"title_line":{"type":"TypeString","required":true},"two_line_elements":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":2,"minItems":2}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_orchestrated_virtual_machine_scale_set":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"automatic_instance_repair":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"grace_period":{"type":"TypeString","optional":true,"default":"PT30M"}}},"maxItems":1},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"create_option":{"type":"TypeString","optional":true,"default":"Empty"},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","required":true},"lun":{"type":"TypeInt","required":true},"storage_account_type":{"type":"TypeString","required":true},"ultra_ssd_disk_iops_read_write":{"type":"TypeInt","optional":true,"computed":true},"ultra_ssd_disk_mbps_read_write":{"type":"TypeInt","optional":true,"computed":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extension":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"auto_upgrade_minor_version_enabled":{"type":"TypeBool","optional":true,"default":true},"extensions_to_provision_after_vm_creation":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"failure_suppression_enabled":{"type":"TypeBool","optional":true},"force_extension_execution_on_change":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"publisher":{"type":"TypeString","required":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true}}}},"extension_operations_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"instances":{"type":"TypeInt","optional":true,"computed":true},"license_type":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","optional":true,"default":false},"enable_ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":20},"load_balancer_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","optional":true,"default":false},"public_ip_address":{"type":"TypeList","optional":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","optional":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"ip_tag":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"tag":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}}},"name":{"type":"TypeString","required":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true}}}},"subnet_id":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true,"default":"IPv4"}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","optional":true},"primary":{"type":"TypeBool","optional":true,"default":false}}}},"os_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"os_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_data":{"type":"TypeString","optional":true},"linux_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true,"forceNew":true},"admin_ssh_key":{"type":"TypeSet","optional":true,"elem":{"schema":{"public_key":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}}},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"computer_name_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"disable_password_authentication":{"type":"TypeBool","optional":true,"default":true},"patch_assessment_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"patch_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}}}},"maxItems":1},"windows_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"admin_password":{"type":"TypeString","required":true,"forceNew":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"computer_name_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"enable_automatic_updates":{"type":"TypeBool","optional":true,"default":true},"hotpatching_enabled":{"type":"TypeBool","optional":true,"default":false},"patch_assessment_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"patch_mode":{"type":"TypeString","optional":true,"default":"AutomaticByOS"},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"store":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"timezone":{"type":"TypeString","optional":true},"winrm_listener":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true}}}}}},"maxItems":1}}},"maxItems":1},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain_count":{"type":"TypeInt","required":true,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"priority_mix":{"type":"TypeList","optional":true,"elem":{"schema":{"base_regular_count":{"type":"TypeInt","optional":true,"default":0},"regular_percentage_above_base":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"single_placement_group":{"type":"TypeBool","optional":true,"computed":true},"sku_name":{"type":"TypeString","optional":true},"source_image_id":{"type":"TypeString","optional":true},"source_image_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"unique_id":{"type":"TypeString","computed":true},"user_data_base64":{"type":"TypeString","optional":true},"zone_balance":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_palo_alto_local_rulestack":{"schema":{"anti_spyware_profile":{"type":"TypeString","optional":true},"anti_virus_profile":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"dns_subscription":{"type":"TypeString","optional":true},"file_blocking_profile":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"url_filtering_profile":{"type":"TypeString","optional":true},"vulnerability_profile":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_local_rulestack_certificate":{"schema":{"audit_comment":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"key_vault_certificate_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true},"rulestack_id":{"type":"TypeString","required":true,"forceNew":true},"self_signed":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_local_rulestack_fqdn_list":{"schema":{"audit_comment":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"fully_qualified_domain_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"rulestack_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_local_rulestack_outbound_trust_certificate_association":{"schema":{"certificate_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_palo_alto_local_rulestack_outbound_untrust_certificate_association":{"schema":{"certificate_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_palo_alto_local_rulestack_prefix_list":{"schema":{"audit_comment":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"prefix_list":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"rulestack_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_local_rulestack_rule":{"schema":{"action":{"type":"TypeString","required":true},"applications":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"audit_comment":{"type":"TypeString","optional":true},"category":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_urls":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"feeds":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1,"minItems":1},"decryption_rule_type":{"type":"TypeString","optional":true,"default":"None"},"description":{"type":"TypeString","optional":true},"destination":{"type":"TypeList","required":true,"elem":{"schema":{"cidrs":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"countries":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"feeds":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"local_rulestack_fqdn_list_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"local_rulestack_prefix_list_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"inspection_certificate_id":{"type":"TypeString","optional":true},"logging_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"negate_destination":{"type":"TypeBool","optional":true,"default":false},"negate_source":{"type":"TypeBool","optional":true,"default":false},"priority":{"type":"TypeInt","required":true,"forceNew":true},"protocol":{"type":"TypeString","optional":true,"default":"application-default"},"protocol_ports":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"rulestack_id":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeList","required":true,"elem":{"schema":{"cidrs":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"countries":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"feeds":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"local_rulestack_prefix_list_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_next_generation_firewall_virtual_hub_local_rulestack":{"schema":{"destination_nat":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address":{"type":"TypeString","required":true}}},"maxItems":1},"frontend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address_id":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2},"use_azure_dns":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"egress_nat_ip_address_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"egress_nat_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_of_trust_for_user_defined_routes":{"type":"TypeString","computed":true},"network_virtual_appliance_id":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"trusted_subnet_id":{"type":"TypeString","computed":true},"untrusted_subnet_id":{"type":"TypeString","computed":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rulestack_id":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":120,"read":5,"delete":120,"update":120}},"azurerm_palo_alto_next_generation_firewall_virtual_hub_panorama":{"schema":{"destination_nat":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address":{"type":"TypeString","required":true}}},"maxItems":1},"frontend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address_id":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2},"use_azure_dns":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"egress_nat_ip_address_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"egress_nat_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_of_trust_for_user_defined_routes":{"type":"TypeString","computed":true},"network_virtual_appliance_id":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"trusted_subnet_id":{"type":"TypeString","computed":true},"untrusted_subnet_id":{"type":"TypeString","computed":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"panorama":{"type":"TypeList","computed":true,"elem":{"schema":{"device_group_name":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"panorama_server_1":{"type":"TypeString","computed":true},"panorama_server_2":{"type":"TypeString","computed":true},"template_name":{"type":"TypeString","computed":true},"virtual_machine_ssh_key":{"type":"TypeString","computed":true}}}},"panorama_base64_config":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":120,"read":5,"delete":120,"update":120}},"azurerm_palo_alto_next_generation_firewall_virtual_network_local_rulestack":{"schema":{"destination_nat":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address":{"type":"TypeString","required":true}}},"maxItems":1},"frontend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address_id":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2},"use_azure_dns":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"egress_nat_ip_address_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"egress_nat_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"vnet_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"ip_of_trust_for_user_defined_routes":{"type":"TypeString","computed":true},"trusted_subnet_id":{"type":"TypeString","optional":true},"untrusted_subnet_id":{"type":"TypeString","optional":true},"virtual_network_id":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rulestack_id":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":120,"read":5,"delete":120,"update":120}},"azurerm_palo_alto_next_generation_firewall_virtual_network_panorama":{"schema":{"destination_nat":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address":{"type":"TypeString","required":true}}},"maxItems":1},"frontend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address_id":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2},"use_azure_dns":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"egress_nat_ip_address_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"egress_nat_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"vnet_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"ip_of_trust_for_user_defined_routes":{"type":"TypeString","computed":true},"trusted_subnet_id":{"type":"TypeString","optional":true},"untrusted_subnet_id":{"type":"TypeString","optional":true},"virtual_network_id":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"panorama":{"type":"TypeList","computed":true,"elem":{"schema":{"device_group_name":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"panorama_server_1":{"type":"TypeString","computed":true},"panorama_server_2":{"type":"TypeString","computed":true},"template_name":{"type":"TypeString","computed":true},"virtual_machine_ssh_key":{"type":"TypeString","computed":true}}}},"panorama_base64_config":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_palo_alto_virtual_network_appliance":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_pim_active_role_assignment":{"schema":{"justification":{"type":"TypeString","optional":true,"description":"The justification of the role assignment.","forceNew":true},"principal_id":{"type":"TypeString","required":true,"description":"The principal id.","forceNew":true},"principal_type":{"type":"TypeString","description":"The type of principal.","computed":true},"role_definition_id":{"type":"TypeString","required":true,"description":"The role definition id.","forceNew":true},"schedule":{"type":"TypeList","optional":true,"description":"The schedule details of this role assignment.","forceNew":true,"elem":{"schema":{"expiration":{"type":"TypeList","optional":true,"elem":{"schema":{"duration_days":{"type":"TypeInt","optional":true,"description":"The duration of the assignment in days.","computed":true,"forceNew":true},"duration_hours":{"type":"TypeInt","optional":true,"description":"The duration of the assignment in hours.","computed":true,"forceNew":true},"end_date_time":{"type":"TypeString","optional":true,"description":"The end date time of the assignment.","computed":true,"forceNew":true}}},"maxItems":1},"start_date_time":{"type":"TypeString","optional":true,"description":"The start date time.","computed":true,"forceNew":true}}},"maxItems":1},"scope":{"type":"TypeString","required":true,"description":"The scope.","forceNew":true},"ticket":{"type":"TypeList","optional":true,"description":"The ticket details.","forceNew":true,"elem":{"schema":{"number":{"type":"TypeString","optional":true,"description":"The ticket number."},"system":{"type":"TypeString","optional":true,"description":"The ticket system."}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_pim_eligible_role_assignment":{"schema":{"justification":{"type":"TypeString","optional":true,"description":"The justification of the eligible role assignment.","forceNew":true},"principal_id":{"type":"TypeString","required":true,"description":"The principal id.","forceNew":true},"principal_type":{"type":"TypeString","description":"The type of principal.","computed":true},"role_definition_id":{"type":"TypeString","required":true,"description":"The role definition id.","forceNew":true},"schedule":{"type":"TypeList","optional":true,"description":"The schedule details of this eligible role assignment.","forceNew":true,"elem":{"schema":{"expiration":{"type":"TypeList","optional":true,"elem":{"schema":{"duration_days":{"type":"TypeInt","optional":true,"description":"The duration of the assignment in days.","computed":true,"forceNew":true},"duration_hours":{"type":"TypeInt","optional":true,"description":"The duration of the assignment in hours.","computed":true,"forceNew":true},"end_date_time":{"type":"TypeString","optional":true,"description":"The end date time of the assignment.","computed":true,"forceNew":true}}},"maxItems":1},"start_date_time":{"type":"TypeString","optional":true,"description":"The start date time.","computed":true,"forceNew":true}}},"maxItems":1},"scope":{"type":"TypeString","required":true,"description":"The scope.","forceNew":true},"ticket":{"type":"TypeList","optional":true,"description":"Ticket details relating to the assignment.","forceNew":true,"elem":{"schema":{"number":{"type":"TypeString","optional":true,"description":"The ticket number."},"system":{"type":"TypeString","optional":true,"description":"The ticket system."}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_point_to_site_vpn_gateway":{"schema":{"connection_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"internet_security_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"name":{"type":"TypeString","required":true},"route":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"associated_route_table_id":{"type":"TypeString","required":true},"inbound_route_map_id":{"type":"TypeString","optional":true},"outbound_route_map_id":{"type":"TypeString","optional":true},"propagated_route_table":{"type":"TypeList","optional":true,"elem":{"schema":{"ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"labels":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"vpn_client_address_pool":{"type":"TypeList","required":true,"elem":{"schema":{"address_prefixes":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_preference_internet_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"scale_unit":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true},"vpn_server_configuration_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_policy_definition":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"management_group_id":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"mode":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeString","optional":true},"policy_rule":{"type":"TypeString","optional":true},"policy_type":{"type":"TypeString","required":true,"forceNew":true},"role_definition_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_policy_set_definition":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"management_group_id":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeString","optional":true},"policy_definition_group":{"type":"TypeSet","optional":true,"elem":{"schema":{"additional_metadata_resource_id":{"type":"TypeString","optional":true},"category":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true}}}},"policy_definition_reference":{"type":"TypeList","required":true,"elem":{"schema":{"parameter_values":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true},"policy_group_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"reference_id":{"type":"TypeString","optional":true,"computed":true}}}},"policy_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_policy_virtual_machine_configuration_assignment":{"schema":{"configuration":{"type":"TypeList","required":true,"elem":{"schema":{"assignment_type":{"type":"TypeString","optional":true},"content_hash":{"type":"TypeString","optional":true,"computed":true},"content_uri":{"type":"TypeString","optional":true,"computed":true},"parameter":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_portal_dashboard":{"schema":{"dashboard_properties":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_portal_tenant_configuration":{"schema":{"private_markdown_storage_enforced":{"type":"TypeBool","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_active_directory_administrator":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_database":{"schema":{"charset":{"type":"TypeString","required":true,"forceNew":true},"collation":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_postgresql_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_flexible_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true},"administrator_password":{"type":"TypeString","optional":true},"authentication":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory_auth_enabled":{"type":"TypeBool","optional":true,"default":false},"password_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"tenant_id":{"type":"TypeString","optional":true}}},"maxItems":1},"backup_retention_days":{"type":"TypeInt","optional":true,"computed":true},"create_mode":{"type":"TypeString","optional":true},"customer_managed_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"geo_backup_key_vault_key_id":{"type":"TypeString","optional":true},"geo_backup_user_assigned_identity_id":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"primary_user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"delegated_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"high_availability":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"standby_availability_zone":{"type":"TypeString","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeInt","optional":true,"default":0},"start_hour":{"type":"TypeInt","optional":true,"default":0},"start_minute":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"point_in_time_restore_time_in_utc":{"type":"TypeString","optional":true,"forceNew":true},"private_dns_zone_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"replication_role":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"computed":true},"source_server_id":{"type":"TypeString","optional":true,"forceNew":true},"storage_mb":{"type":"TypeInt","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"computed":true},"zone":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_postgresql_flexible_server_active_directory_administrator":{"schema":{"object_id":{"type":"TypeString","required":true,"forceNew":true},"principal_name":{"type":"TypeString","required":true,"forceNew":true},"principal_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_flexible_server_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_flexible_server_database":{"schema":{"charset":{"type":"TypeString","optional":true,"default":"UTF8","forceNew":true},"collation":{"type":"TypeString","optional":true,"default":"en_US.utf8","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_postgresql_flexible_server_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","optional":true},"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":true},"backup_retention_days":{"type":"TypeInt","optional":true,"computed":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default"},"creation_source_server_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore_point_in_time":{"type":"TypeString","optional":true},"sku_name":{"type":"TypeString","required":true},"ssl_enforcement_enabled":{"type":"TypeBool","required":true},"ssl_minimal_tls_version_enforced":{"type":"TypeString","optional":true,"default":"TLS1_2"},"storage_mb":{"type":"TypeInt","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","optional":true},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true},"retention_days":{"type":"TypeInt","optional":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_postgresql_server_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_postgresql_virtual_network_rule":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_powerbi_embedded":{"schema":{"administrators":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"mode":{"type":"TypeString","optional":true,"default":"Gen1","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_a_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":20},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_aaaa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_cname_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_mx_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"default":"@","forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"exchange":{"type":"TypeString","required":true},"preference":{"type":"TypeInt","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_ptr_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_dns_forwarding_ruleset":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_dns_resolver_outbound_endpoint_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_forwarding_rule":{"schema":{"dns_forwarding_ruleset_id":{"type":"TypeString","required":true,"forceNew":true},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"target_dns_servers":{"type":"TypeList","required":true,"elem":{"schema":{"ip_address":{"type":"TypeString","required":true},"port":{"type":"TypeInt","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_inbound_endpoint":{"schema":{"ip_configurations":{"type":"TypeList","required":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","computed":true},"private_ip_allocation_method":{"type":"TypeString","optional":true,"default":"Dynamic"},"subnet_id":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_dns_resolver_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_outbound_endpoint":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_dns_resolver_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_virtual_network_link":{"schema":{"dns_forwarding_ruleset_id":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_srv_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"priority":{"type":"TypeInt","required":true},"target":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_txt_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"value":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_zone":{"schema":{"max_number_of_record_sets":{"type":"TypeInt","computed":true},"max_number_of_virtual_network_links":{"type":"TypeInt","computed":true},"max_number_of_virtual_network_links_with_registration":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"number_of_record_sets":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"soa_record":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"email":{"type":"TypeString","required":true},"expire_time":{"type":"TypeInt","optional":true,"default":2419200},"fqdn":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"minimum_ttl":{"type":"TypeInt","optional":true,"default":10},"refresh_time":{"type":"TypeInt","optional":true,"default":3600},"retry_time":{"type":"TypeInt","optional":true,"default":300},"serial_number":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","optional":true,"default":3600}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_zone_virtual_network_link":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"private_dns_zone_name":{"type":"TypeString","required":true,"forceNew":true},"registration_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_endpoint":{"schema":{"custom_dns_configs":{"type":"TypeList","computed":true,"elem":{"schema":{"fqdn":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"custom_network_interface_name":{"type":"TypeString","optional":true,"forceNew":true},"ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"member_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","required":true,"forceNew":true},"subresource_name":{"type":"TypeString","optional":true,"forceNew":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"private_dns_zone_configs":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"private_dns_zone_id":{"type":"TypeString","computed":true},"record_sets":{"type":"TypeList","computed":true,"elem":{"schema":{"fqdn":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"type":{"type":"TypeString","computed":true}}}}}}},"private_dns_zone_group":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_dns_zone_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"private_service_connection":{"type":"TypeList","required":true,"elem":{"schema":{"is_manual_connection":{"type":"TypeBool","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_connection_resource_alias":{"type":"TypeString","optional":true,"forceNew":true},"private_connection_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"request_message":{"type":"TypeString","optional":true},"subresource_names":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_private_endpoint_application_security_group_association":{"schema":{"application_security_group_id":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_private_link_service":{"schema":{"alias":{"type":"TypeString","computed":true},"auto_approval_subscription_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enable_proxy_protocol":{"type":"TypeBool","optional":true},"fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"load_balancer_frontend_ip_configuration_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"nat_ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"primary":{"type":"TypeBool","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","optional":true},"private_ip_address_version":{"type":"TypeString","optional":true,"default":"IPv4"},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":8},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"visibility_subscription_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_proximity_placement_group":{"schema":{"allowed_vm_sizes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_public_ip":{"schema":{"allocation_method":{"type":"TypeString","required":true},"ddos_protection_mode":{"type":"TypeString","optional":true,"default":"VirtualNetworkInherited"},"ddos_protection_plan_id":{"type":"TypeString","optional":true},"domain_name_label":{"type":"TypeString","optional":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"ip_address":{"type":"TypeString","computed":true},"ip_tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"ip_version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"reverse_fqdn":{"type":"TypeString","optional":true},"sku":{"type":"TypeString","optional":true,"default":"Basic","forceNew":true},"sku_tier":{"type":"TypeString","optional":true,"default":"Regional","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_public_ip_prefix":{"schema":{"ip_prefix":{"type":"TypeString","computed":true},"ip_version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"prefix_length":{"type":"TypeInt","optional":true,"default":28,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Standard","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_purview_account":{"schema":{"atlas_kafka_endpoint_primary_connection_string":{"type":"TypeString","computed":true},"atlas_kafka_endpoint_secondary_connection_string":{"type":"TypeString","computed":true},"catalog_endpoint":{"type":"TypeString","computed":true},"guardian_endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_resource_group_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_resources":{"type":"TypeList","computed":true,"elem":{"schema":{"event_hub_namespace_id":{"type":"TypeString","computed":true},"resource_group_id":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scan_endpoint":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_recovery_services_vault":{"schema":{"classic_vmware_replication_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"cross_region_restore_enabled":{"type":"TypeBool","optional":true,"default":false},"encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"infrastructure_encryption_enabled":{"type":"TypeBool","required":true},"key_id":{"type":"TypeString","required":true},"use_system_assigned_identity":{"type":"TypeBool","optional":true,"default":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"immutability":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"monitoring":{"type":"TypeList","optional":true,"elem":{"schema":{"alerts_for_all_job_failures_enabled":{"type":"TypeBool","optional":true,"default":true},"alerts_for_critical_operation_failures_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"soft_delete_enabled":{"type":"TypeBool","optional":true,"default":true},"storage_mode_type":{"type":"TypeString","optional":true,"default":"GeoRedundant"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":120,"read":5,"delete":30,"update":60}},"azurerm_recovery_services_vault_resource_guard_association":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_guard_id":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_redis_cache":{"schema":{"capacity":{"type":"TypeInt","required":true},"enable_non_ssl_port":{"type":"TypeBool","optional":true,"default":false},"family":{"type":"TypeString","required":true},"hostname":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"name":{"type":"TypeString","required":true,"forceNew":true},"patch_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"maintenance_window":{"type":"TypeString","optional":true,"default":"PT5H"},"start_hour_utc":{"type":"TypeInt","optional":true}}}},"port":{"type":"TypeInt","computed":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"private_static_ip_address":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"redis_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"aof_backup_enabled":{"type":"TypeBool","optional":true},"aof_storage_connection_string_0":{"type":"TypeString","optional":true},"aof_storage_connection_string_1":{"type":"TypeString","optional":true},"enable_authentication":{"type":"TypeBool","optional":true,"default":true},"maxclients":{"type":"TypeInt","computed":true},"maxfragmentationmemory_reserved":{"type":"TypeInt","optional":true,"computed":true},"maxmemory_delta":{"type":"TypeInt","optional":true,"computed":true},"maxmemory_policy":{"type":"TypeString","optional":true,"default":"volatile-lru"},"maxmemory_reserved":{"type":"TypeInt","optional":true,"computed":true},"notify_keyspace_events":{"type":"TypeString","optional":true},"rdb_backup_enabled":{"type":"TypeBool","optional":true},"rdb_backup_frequency":{"type":"TypeInt","optional":true},"rdb_backup_max_snapshot_count":{"type":"TypeInt","optional":true},"rdb_storage_connection_string":{"type":"TypeString","optional":true}}},"maxItems":1},"redis_version":{"type":"TypeString","optional":true,"computed":true},"replicas_per_master":{"type":"TypeInt","optional":true,"computed":true},"replicas_per_primary":{"type":"TypeInt","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"shard_count":{"type":"TypeInt","optional":true},"sku_name":{"type":"TypeString","required":true},"ssl_port":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_redis_enterprise_cluster":{"schema":{"hostname":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_redis_enterprise_database":{"schema":{"client_protocol":{"type":"TypeString","optional":true,"default":"Encrypted","forceNew":true},"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"clustering_policy":{"type":"TypeString","optional":true,"default":"OSSCluster","forceNew":true},"eviction_policy":{"type":"TypeString","optional":true,"default":"VolatileLRU","forceNew":true},"linked_database_group_nickname":{"type":"TypeString","optional":true,"forceNew":true},"linked_database_id":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":5},"module":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"args":{"type":"TypeString","optional":true,"default":"","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","computed":true}}},"maxItems":4},"name":{"type":"TypeString","optional":true,"default":"default","forceNew":true},"port":{"type":"TypeInt","optional":true,"default":10000,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"secondary_access_key":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_redis_firewall_rule":{"schema":{"end_ip":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"redis_cache_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_redis_linked_server":{"schema":{"linked_redis_cache_id":{"type":"TypeString","required":true,"forceNew":true},"linked_redis_cache_location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_role":{"type":"TypeString","required":true,"forceNew":true},"target_redis_cache_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_relay_hybrid_connection":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"relay_namespace_name":{"type":"TypeString","required":true,"forceNew":true},"requires_client_authorization":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"user_metadata":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_relay_hybrid_connection_authorization_rule":{"schema":{"hybrid_connection_name":{"type":"TypeString","required":true,"forceNew":true},"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_relay_namespace":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"metric_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":60,"update":30}},"azurerm_relay_namespace_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_deployment_script_azure_cli":{"schema":{"cleanup_preference":{"type":"TypeString","optional":true,"default":"Always","forceNew":true},"command_line":{"type":"TypeString","optional":true,"forceNew":true},"container":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"container_group_name":{"type":"TypeString","optional":true}}},"maxItems":1},"environment_variable":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"secure_value":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"force_update_tag":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outputs":{"type":"TypeString","computed":true},"primary_script_uri":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_interval":{"type":"TypeString","required":true,"forceNew":true},"script_content":{"type":"TypeString","optional":true,"forceNew":true},"storage_account":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"supporting_script_uris":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout":{"type":"TypeString","optional":true,"default":"P1D","forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_deployment_script_azure_power_shell":{"schema":{"cleanup_preference":{"type":"TypeString","optional":true,"default":"Always","forceNew":true},"command_line":{"type":"TypeString","optional":true,"forceNew":true},"container":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"container_group_name":{"type":"TypeString","optional":true}}},"maxItems":1},"environment_variable":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"secure_value":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"force_update_tag":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outputs":{"type":"TypeString","computed":true},"primary_script_uri":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_interval":{"type":"TypeString","required":true,"forceNew":true},"script_content":{"type":"TypeString","optional":true,"forceNew":true},"storage_account":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"supporting_script_uris":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout":{"type":"TypeString","optional":true,"default":"P1D","forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"managed_by":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_resource_group_cost_management_export":{"schema":{"active":{"type":"TypeBool","optional":true,"default":true},"export_data_options":{"type":"TypeList","required":true,"elem":{"schema":{"time_frame":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"export_data_storage_location":{"type":"TypeList","required":true,"elem":{"schema":{"container_id":{"type":"TypeString","required":true,"forceNew":true},"root_folder_path":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recurrence_period_end_date":{"type":"TypeString","required":true},"recurrence_period_start_date":{"type":"TypeString","required":true},"recurrence_type":{"type":"TypeString","required":true},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_cost_management_view":{"schema":{"accumulated":{"type":"TypeBool","required":true,"forceNew":true},"chart_type":{"type":"TypeString","required":true},"dataset":{"type":"TypeList","required":true,"elem":{"schema":{"aggregation":{"type":"TypeSet","required":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}}},"granularity":{"type":"TypeString","required":true},"grouping":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"sorting":{"type":"TypeList","optional":true,"elem":{"schema":{"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"display_name":{"type":"TypeString","required":true},"kpi":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"pivot":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"report_type":{"type":"TypeString","required":true},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true},"timeframe":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_policy_assignment":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enforce":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"policy_definition_reference_id":{"type":"TypeString","optional":true}}}},"not_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","computed":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"value":{"type":"TypeString","required":true}}}},"parameters":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true},"resource_selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","required":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","required":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_policy_exemption":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"exemption_category":{"type":"TypeString","required":true},"expires_on":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_assignment_id":{"type":"TypeString","required":true,"forceNew":true},"policy_definition_reference_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_policy_remediation":{"schema":{"failure_percentage":{"type":"TypeFloat","optional":true},"location_filters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"parallel_deployments":{"type":"TypeInt","optional":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_id":{"type":"TypeString","optional":true},"policy_definition_reference_id":{"type":"TypeString","optional":true},"resource_count":{"type":"TypeInt","optional":true},"resource_discovery_mode":{"type":"TypeString","optional":true,"default":"ExistingNonCompliant"},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_template_deployment":{"schema":{"debug_level":{"type":"TypeString","optional":true},"deployment_mode":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_content":{"type":"TypeString","computed":true},"parameters_content":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_content":{"type":"TypeString","optional":true,"computed":true},"template_spec_version_id":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_resource_policy_assignment":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enforce":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"policy_definition_reference_id":{"type":"TypeString","optional":true}}}},"not_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","computed":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"value":{"type":"TypeString","required":true}}}},"parameters":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true,"forceNew":true},"resource_id":{"type":"TypeString","required":true,"forceNew":true},"resource_selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","required":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","required":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_policy_exemption":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"exemption_category":{"type":"TypeString","required":true},"expires_on":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_assignment_id":{"type":"TypeString","required":true,"forceNew":true},"policy_definition_reference_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_policy_remediation":{"schema":{"failure_percentage":{"type":"TypeFloat","optional":true},"location_filters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"parallel_deployments":{"type":"TypeInt","optional":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_id":{"type":"TypeString","optional":true},"policy_definition_reference_id":{"type":"TypeString","optional":true},"resource_count":{"type":"TypeInt","optional":true},"resource_discovery_mode":{"type":"TypeString","optional":true,"default":"ExistingNonCompliant"},"resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_provider_registration":{"schema":{"feature":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"registered":{"type":"TypeBool","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":120,"read":5,"delete":30,"update":120}},"azurerm_role_assignment":{"schema":{"condition":{"type":"TypeString","optional":true,"forceNew":true},"condition_version":{"type":"TypeString","optional":true,"forceNew":true},"delegated_managed_identity_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"principal_type":{"type":"TypeString","computed":true},"role_definition_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"role_definition_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"scope":{"type":"TypeString","required":true,"forceNew":true},"skip_service_principal_aad_check":{"type":"TypeBool","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_role_definition":{"schema":{"assignable_scopes":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"permissions":{"type":"TypeList","optional":true,"elem":{"schema":{"actions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_actions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"not_actions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"not_data_actions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"role_definition_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"role_definition_resource_id":{"type":"TypeString","computed":true},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":60}},"azurerm_route":{"schema":{"address_prefix":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"next_hop_in_ip_address":{"type":"TypeString","optional":true},"next_hop_type":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route_table_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_route_filter":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"access":{"type":"TypeString","required":true},"communities":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"rule_type":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_route_map":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"parameter":{"type":"TypeList","required":true,"elem":{"schema":{"as_path":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"community":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"route_prefix":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"type":{"type":"TypeString","required":true}}}},"match_criterion":{"type":"TypeList","optional":true,"elem":{"schema":{"as_path":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"community":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"match_condition":{"type":"TypeString","required":true},"route_prefix":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","required":true},"next_step_if_matched":{"type":"TypeString","optional":true,"default":"Unknown"}}}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_route_server":{"schema":{"branch_to_branch_traffic_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_state":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_router_asn":{"type":"TypeInt","computed":true},"virtual_router_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_route_server_bgp_connection":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"peer_asn":{"type":"TypeInt","required":true,"forceNew":true},"peer_ip":{"type":"TypeString","required":true,"forceNew":true},"route_server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_route_table":{"schema":{"disable_bgp_route_propagation":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"next_hop_in_ip_address":{"type":"TypeString","optional":true},"next_hop_type":{"type":"TypeString","required":true}}}},"subnets":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_search_service":{"schema":{"allowed_ips":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"authentication_failure_mode":{"type":"TypeString","optional":true},"customer_managed_key_enforcement_enabled":{"type":"TypeBool","optional":true,"default":false},"hosting_mode":{"type":"TypeString","optional":true,"default":"default","forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_count":{"type":"TypeInt","optional":true,"default":1},"primary_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"query_keys":{"type":"TypeList","computed":true,"elem":{"schema":{"key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"replica_count":{"type":"TypeInt","optional":true,"default":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_key":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_search_shared_private_link_service":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"request_message":{"type":"TypeString","optional":true},"search_service_id":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeString","computed":true},"subresource_name":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_security_center_assessment":{"schema":{"additional_data":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"assessment_policy_id":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeList","required":true,"elem":{"schema":{"cause":{"type":"TypeString","optional":true},"code":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true}}},"maxItems":1},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_security_center_assessment_policy":{"schema":{"categories":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","required":true},"display_name":{"type":"TypeString","required":true},"implementation_effort":{"type":"TypeString","optional":true},"name":{"type":"TypeString","computed":true},"remediation_description":{"type":"TypeString","optional":true},"severity":{"type":"TypeString","optional":true,"default":"Medium"},"threats":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"user_impact":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_security_center_auto_provisioning":{"schema":{"auto_provision":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_security_center_automation":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"connection_string":{"type":"TypeString","optional":true},"resource_id":{"type":"TypeString","required":true},"trigger_url":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"minItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"source":{"type":"TypeList","required":true,"elem":{"schema":{"event_source":{"type":"TypeString","required":true},"rule_set":{"type":"TypeList","optional":true,"elem":{"schema":{"rule":{"type":"TypeList","required":true,"elem":{"schema":{"expected_value":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"property_path":{"type":"TypeString","required":true},"property_type":{"type":"TypeString","required":true}}}}}}}}},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_security_center_contact":{"schema":{"alert_notifications":{"type":"TypeBool","required":true},"alerts_to_admins":{"type":"TypeBool","required":true},"email":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true,"default":"default1"},"phone":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_security_center_server_vulnerability_assessment":{"schema":{"hybrid_machine_id":{"type":"TypeString","optional":true,"forceNew":true},"virtual_machine_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":5,"read":5,"delete":10}},"azurerm_security_center_server_vulnerability_assessment_virtual_machine":{"schema":{"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":5,"read":5,"delete":10}},"azurerm_security_center_setting":{"schema":{"enabled":{"type":"TypeBool","required":true},"setting_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":10,"read":5,"delete":10,"update":10}},"azurerm_security_center_subscription_pricing":{"schema":{"extension":{"type":"TypeSet","optional":true,"elem":{"schema":{"additional_extension_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true}}}},"resource_type":{"type":"TypeString","optional":true,"default":"VirtualMachines"},"subplan":{"type":"TypeString","optional":true},"tier":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_security_center_workspace":{"schema":{"scope":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_sentinel_alert_rule_anomaly_built_in":{"schema":{"anomaly_settings_version":{"type":"TypeInt","computed":true},"anomaly_version":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"enabled":{"type":"TypeBool","required":true},"frequency":{"type":"TypeString","computed":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"mode":{"type":"TypeString","required":true},"multi_select_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","optional":true,"computed":true},"prioritized_exclude_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"exclude":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"prioritize":{"type":"TypeString","computed":true}}}},"required_data_connector":{"type":"TypeList","computed":true,"elem":{"schema":{"connector_id":{"type":"TypeString","computed":true},"data_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"settings_definition_id":{"type":"TypeString","computed":true},"single_select_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","computed":true}}}},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"threshold_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"max":{"type":"TypeString","computed":true},"min":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_sentinel_alert_rule_anomaly_duplicate":{"schema":{"anomaly_settings_version":{"type":"TypeInt","computed":true},"anomaly_version":{"type":"TypeString","computed":true},"built_in_rule_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","required":true},"frequency":{"type":"TypeString","computed":true},"is_default_settings":{"type":"TypeBool","computed":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"mode":{"type":"TypeString","required":true},"multi_select_observation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","computed":true},"prioritized_exclude_observation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"exclude":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"prioritize":{"type":"TypeString","optional":true}}}},"required_data_connector":{"type":"TypeList","computed":true,"elem":{"schema":{"connector_id":{"type":"TypeString","computed":true},"data_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"settings_definition_id":{"type":"TypeString","computed":true},"single_select_observation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","required":true}}}},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"threshold_observation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"max":{"type":"TypeString","computed":true},"min":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_sentinel_alert_rule_fusion":{"schema":{"alert_rule_template_guid":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"sub_type":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"severities_allowed":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_machine_learning_behavior_analytics":{"schema":{"alert_rule_template_guid":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_ms_security_incident":{"schema":{"alert_rule_template_guid":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"display_name_exclude_filter":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"display_name_filter":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"},"minItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"product_filter":{"type":"TypeString","required":true},"severity_filter":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_nrt":{"schema":{"alert_details_override":{"type":"TypeList","optional":true,"elem":{"schema":{"description_format":{"type":"TypeString","optional":true},"display_name_format":{"type":"TypeString","optional":true},"dynamic_property":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"severity_column_name":{"type":"TypeString","optional":true},"tactics_column_name":{"type":"TypeString","optional":true}}}},"alert_rule_template_guid":{"type":"TypeString","optional":true,"forceNew":true},"alert_rule_template_version":{"type":"TypeString","optional":true,"forceNew":true},"custom_details":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"entity_mapping":{"type":"TypeList","optional":true,"elem":{"schema":{"entity_type":{"type":"TypeString","required":true},"field_mapping":{"type":"TypeList","required":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true},"identifier":{"type":"TypeString","required":true}}},"maxItems":3}}},"maxItems":5},"event_grouping":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"aggregation_method":{"type":"TypeString","required":true}}},"maxItems":1},"incident":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"create_incident_enabled":{"type":"TypeBool","required":true},"grouping":{"type":"TypeList","required":true,"elem":{"schema":{"by_alert_details":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"by_custom_details":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"by_entities":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"entity_matching_method":{"type":"TypeString","optional":true,"default":"AnyAlert"},"lookback_duration":{"type":"TypeString","optional":true,"default":"PT5M"},"reopen_closed_incidents":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1,"minItems":1}}},"maxItems":1,"minItems":1},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query":{"type":"TypeString","required":true},"sentinel_entity_mapping":{"type":"TypeList","optional":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true}}},"maxItems":5},"severity":{"type":"TypeString","required":true},"suppression_duration":{"type":"TypeString","optional":true,"default":"PT5H"},"suppression_enabled":{"type":"TypeBool","optional":true,"default":false},"tactics":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_scheduled":{"schema":{"alert_details_override":{"type":"TypeList","optional":true,"elem":{"schema":{"description_format":{"type":"TypeString","optional":true},"display_name_format":{"type":"TypeString","optional":true},"dynamic_property":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"severity_column_name":{"type":"TypeString","optional":true},"tactics_column_name":{"type":"TypeString","optional":true}}}},"alert_rule_template_guid":{"type":"TypeString","optional":true,"forceNew":true},"alert_rule_template_version":{"type":"TypeString","optional":true,"forceNew":true},"custom_details":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"entity_mapping":{"type":"TypeList","optional":true,"elem":{"schema":{"entity_type":{"type":"TypeString","required":true},"field_mapping":{"type":"TypeList","required":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true},"identifier":{"type":"TypeString","required":true}}},"maxItems":3}}},"maxItems":5},"event_grouping":{"type":"TypeList","optional":true,"elem":{"schema":{"aggregation_method":{"type":"TypeString","required":true}}},"maxItems":1},"incident_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"create_incident":{"type":"TypeBool","required":true},"grouping":{"type":"TypeList","required":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"entity_matching_method":{"type":"TypeString","optional":true,"default":"AnyAlert"},"group_by_alert_details":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"group_by_custom_details":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"group_by_entities":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"lookback_duration":{"type":"TypeString","optional":true,"default":"PT5M"},"reopen_closed_incidents":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1,"minItems":1}}},"maxItems":1,"minItems":1},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query":{"type":"TypeString","required":true},"query_frequency":{"type":"TypeString","optional":true,"default":"PT5H"},"query_period":{"type":"TypeString","optional":true,"default":"PT5H"},"sentinel_entity_mapping":{"type":"TypeList","optional":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true}}},"maxItems":5},"severity":{"type":"TypeString","required":true},"suppression_duration":{"type":"TypeString","optional":true,"default":"PT5H"},"suppression_enabled":{"type":"TypeBool","optional":true,"default":false},"tactics":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"trigger_operator":{"type":"TypeString","optional":true,"default":"GreaterThan"},"trigger_threshold":{"type":"TypeInt","optional":true,"default":0}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_threat_intelligence":{"schema":{"alert_rule_template_guid":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_automation_rule":{"schema":{"action_incident":{"type":"TypeList","optional":true,"elem":{"schema":{"classification":{"type":"TypeString","optional":true},"classification_comment":{"type":"TypeString","optional":true},"labels":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"order":{"type":"TypeInt","required":true},"owner_id":{"type":"TypeString","optional":true},"severity":{"type":"TypeString","optional":true},"status":{"type":"TypeString","optional":true}}}},"action_playbook":{"type":"TypeList","optional":true,"elem":{"schema":{"logic_app_id":{"type":"TypeString","required":true},"order":{"type":"TypeInt","required":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}}},"condition":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"property":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"condition_json":{"type":"TypeString","optional":true,"computed":true},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"expiration":{"type":"TypeString","optional":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"order":{"type":"TypeInt","required":true},"triggers_on":{"type":"TypeString","optional":true,"default":"Incidents"},"triggers_when":{"type":"TypeString","optional":true,"default":"Created"}},"timeouts":{"create":5,"read":5,"delete":5,"update":5}},"azurerm_sentinel_data_connector_aws_cloud_trail":{"schema":{"aws_role_arn":{"type":"TypeString","required":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_data_connector_aws_s3":{"schema":{"aws_role_arn":{"type":"TypeString","required":true},"destination_table":{"type":"TypeString","required":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sqs_urls":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_data_connector_azure_active_directory":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_azure_advanced_threat_protection":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_azure_security_center":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_dynamics_365":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_iot":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_microsoft_cloud_app_security":{"schema":{"alerts_enabled":{"type":"TypeBool","optional":true,"default":true},"discovery_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_data_connector_microsoft_defender_advanced_threat_protection":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_microsoft_threat_intelligence":{"schema":{"bing_safety_phishing_url_lookback_date":{"type":"TypeString","optional":true,"forceNew":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"microsoft_emerging_threat_feed_lookback_date":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_microsoft_threat_protection":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_office_365":{"schema":{"exchange_enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sharepoint_enabled":{"type":"TypeBool","optional":true,"default":true},"teams_enabled":{"type":"TypeBool","optional":true,"default":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_data_connector_office_365_project":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_office_atp":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_office_irm":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_office_power_bi":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_threat_intelligence":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"lookback_date":{"type":"TypeString","optional":true,"default":"1970-01-01T00:00:00Z","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_threat_intelligence_taxii":{"schema":{"api_root_url":{"type":"TypeString","required":true},"collection_id":{"type":"TypeString","required":true},"display_name":{"type":"TypeString","required":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"lookback_date":{"type":"TypeString","optional":true,"default":"1970-01-01T00:00:00Z"},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true},"polling_frequency":{"type":"TypeString","optional":true,"default":"OnceAnHour"},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"user_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_log_analytics_workspace_onboarding":{"schema":{"customer_managed_key_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"workspace_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"workspace_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_metadata":{"schema":{"author":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"link":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true}}},"maxItems":1},"category":{"type":"TypeList","optional":true,"elem":{"schema":{"domains":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"verticals":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"content_id":{"type":"TypeString","required":true},"content_schema_version":{"type":"TypeString","optional":true,"default":"2.0"},"custom_version":{"type":"TypeString","optional":true},"dependency":{"type":"TypeString","optional":true},"first_publish_date":{"type":"TypeString","optional":true},"icon_id":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","required":true},"last_publish_date":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parent_id":{"type":"TypeString","required":true},"preview_images":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"preview_images_dark":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"providers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true}}},"maxItems":1},"support":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"link":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"threat_analysis_tactics":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"threat_analysis_techniques":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_threat_intelligence_indicator":{"schema":{"confidence":{"type":"TypeInt","optional":true,"default":-1},"created_by":{"type":"TypeString","optional":true},"created_on":{"type":"TypeString","computed":true},"defanged":{"type":"TypeBool","computed":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"extension":{"type":"TypeString","optional":true,"computed":true},"external_id":{"type":"TypeString","computed":true},"external_last_updated_time_utc":{"type":"TypeString","computed":true},"external_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"hashes":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","computed":true},"source_name":{"type":"TypeString","optional":true},"url":{"type":"TypeString","optional":true}}}},"granular_marking":{"type":"TypeList","optional":true,"elem":{"schema":{"language":{"type":"TypeString","optional":true},"marking_ref":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"guid":{"type":"TypeString","computed":true},"indicator_type":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"kill_chain_phase":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true}}}},"language":{"type":"TypeString","optional":true},"last_updated_time_utc":{"type":"TypeString","computed":true},"object_marking_refs":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"parsed_pattern":{"type":"TypeList","computed":true,"elem":{"schema":{"pattern_type_key":{"type":"TypeString","computed":true},"pattern_type_values":{"type":"TypeList","computed":true,"elem":{"schema":{"value":{"type":"TypeString","computed":true},"value_type":{"type":"TypeString","computed":true}}}}}}},"pattern":{"type":"TypeString","required":true},"pattern_type":{"type":"TypeString","required":true},"pattern_version":{"type":"TypeString","optional":true},"revoked":{"type":"TypeBool","optional":true,"default":false},"source":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"threat_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"validate_from_utc":{"type":"TypeString","required":true},"validate_until_utc":{"type":"TypeString","optional":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_watchlist":{"schema":{"default_duration":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"display_name":{"type":"TypeString","required":true,"forceNew":true},"item_search_key":{"type":"TypeString","required":true,"forceNew":true},"labels":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_watchlist_item":{"schema":{"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"properties":{"type":"TypeMap","required":true,"elem":{"type":"TypeString"}},"watchlist_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_service_fabric_cluster":{"schema":{"add_on_features":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"azure_active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"client_application_id":{"type":"TypeString","required":true},"cluster_application_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"thumbprint":{"type":"TypeString","required":true},"thumbprint_secondary":{"type":"TypeString","optional":true},"x509_store_name":{"type":"TypeString","required":true}}},"maxItems":1},"certificate_common_names":{"type":"TypeList","optional":true,"elem":{"schema":{"common_names":{"type":"TypeSet","required":true,"elem":{"schema":{"certificate_common_name":{"type":"TypeString","required":true},"certificate_issuer_thumbprint":{"type":"TypeString","optional":true}}},"minItems":1},"x509_store_name":{"type":"TypeString","required":true}}},"maxItems":1},"client_certificate_common_name":{"type":"TypeList","optional":true,"elem":{"schema":{"common_name":{"type":"TypeString","required":true},"is_admin":{"type":"TypeBool","required":true},"issuer_thumbprint":{"type":"TypeString","optional":true}}}},"client_certificate_thumbprint":{"type":"TypeList","optional":true,"elem":{"schema":{"is_admin":{"type":"TypeBool","required":true},"thumbprint":{"type":"TypeString","required":true}}}},"cluster_code_version":{"type":"TypeString","optional":true,"computed":true},"cluster_endpoint":{"type":"TypeString","computed":true},"diagnostics_config":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_endpoint":{"type":"TypeString","required":true},"protected_account_key_name":{"type":"TypeString","required":true},"queue_endpoint":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"table_endpoint":{"type":"TypeString","required":true}}},"maxItems":1},"fabric_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"management_endpoint":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_type":{"type":"TypeList","required":true,"elem":{"schema":{"application_ports":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"end_port":{"type":"TypeInt","required":true},"start_port":{"type":"TypeInt","required":true}}},"maxItems":1},"capacities":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"client_endpoint_port":{"type":"TypeInt","required":true},"durability_level":{"type":"TypeString","optional":true,"default":"Bronze"},"ephemeral_ports":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"end_port":{"type":"TypeInt","required":true},"start_port":{"type":"TypeInt","required":true}}},"maxItems":1},"http_endpoint_port":{"type":"TypeInt","required":true},"instance_count":{"type":"TypeInt","required":true},"is_primary":{"type":"TypeBool","required":true},"is_stateless":{"type":"TypeBool","optional":true},"multiple_availability_zones":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"placement_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"reverse_proxy_endpoint_port":{"type":"TypeInt","optional":true}}}},"reliability_level":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"reverse_proxy_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"thumbprint":{"type":"TypeString","required":true},"thumbprint_secondary":{"type":"TypeString","optional":true},"x509_store_name":{"type":"TypeString","required":true}}},"maxItems":1},"reverse_proxy_certificate_common_names":{"type":"TypeList","optional":true,"elem":{"schema":{"common_names":{"type":"TypeSet","required":true,"elem":{"schema":{"certificate_common_name":{"type":"TypeString","required":true},"certificate_issuer_thumbprint":{"type":"TypeString","optional":true}}},"minItems":1},"x509_store_name":{"type":"TypeString","required":true}}},"maxItems":1},"service_fabric_zonal_upgrade_mode":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"upgrade_mode":{"type":"TypeString","required":true},"upgrade_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"delta_health_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"max_delta_unhealthy_applications_percent":{"type":"TypeInt","optional":true,"default":0},"max_delta_unhealthy_nodes_percent":{"type":"TypeInt","optional":true,"default":0},"max_upgrade_domain_delta_unhealthy_nodes_percent":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"force_restart_enabled":{"type":"TypeBool","optional":true},"health_check_retry_timeout":{"type":"TypeString","optional":true,"default":"00:45:00"},"health_check_stable_duration":{"type":"TypeString","optional":true,"default":"00:01:00"},"health_check_wait_duration":{"type":"TypeString","optional":true,"default":"00:00:30"},"health_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"max_unhealthy_applications_percent":{"type":"TypeInt","optional":true,"default":0},"max_unhealthy_nodes_percent":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"upgrade_domain_timeout":{"type":"TypeString","optional":true,"default":"02:00:00"},"upgrade_replica_set_check_timeout":{"type":"TypeString","optional":true,"default":"10675199.02:48:05.4775807"},"upgrade_timeout":{"type":"TypeString","optional":true,"default":"12:00:00"}}},"maxItems":1},"vm_image":{"type":"TypeString","required":true,"forceNew":true},"vmss_zonal_upgrade_mode":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_service_fabric_managed_cluster":{"schema":{"authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"client_application_id":{"type":"TypeString","required":true},"cluster_application_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"common_name":{"type":"TypeString","optional":true},"thumbprint":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}}}},"maxItems":1},"backup_service_enabled":{"type":"TypeBool","optional":true},"client_connection_port":{"type":"TypeInt","required":true},"custom_fabric_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"parameter":{"type":"TypeString","required":true},"section":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"dns_name":{"type":"TypeString","optional":true,"computed":true},"dns_service_enabled":{"type":"TypeBool","optional":true},"http_gateway_port":{"type":"TypeInt","required":true},"lb_rule":{"type":"TypeList","required":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","required":true},"frontend_port":{"type":"TypeInt","required":true},"probe_protocol":{"type":"TypeString","required":true},"probe_request_path":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_type":{"type":"TypeList","optional":true,"elem":{"schema":{"application_port_range":{"type":"TypeString","required":true},"capacities":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"data_disk_size_gb":{"type":"TypeInt","required":true},"data_disk_type":{"type":"TypeString","optional":true,"default":"Standard_LRS"},"ephemeral_port_range":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"multiple_placement_groups_enabled":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"placement_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"primary":{"type":"TypeBool","optional":true},"stateless":{"type":"TypeBool","optional":true},"vm_image_offer":{"type":"TypeString","required":true},"vm_image_publisher":{"type":"TypeString","required":true},"vm_image_sku":{"type":"TypeString","required":true},"vm_image_version":{"type":"TypeString","required":true},"vm_instance_count":{"type":"TypeInt","required":true},"vm_secrets":{"type":"TypeList","optional":true,"elem":{"schema":{"certificates":{"type":"TypeList","required":true,"elem":{"schema":{"store":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}}},"vault_id":{"type":"TypeString","required":true}}}},"vm_size":{"type":"TypeString","required":true}}}},"password":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Basic","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"upgrade_wave":{"type":"TypeString","optional":true,"default":"Wave0"},"username":{"type":"TypeString","optional":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_service_plan":{"schema":{"app_service_environment_id":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maximum_elastic_worker_count":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_type":{"type":"TypeString","required":true,"forceNew":true},"per_site_scaling_enabled":{"type":"TypeBool","optional":true,"default":false},"reserved":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"worker_count":{"type":"TypeInt","optional":true,"computed":true},"zone_balancing_enabled":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_servicebus_namespace":{"schema":{"capacity":{"type":"TypeInt","optional":true,"default":0},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_id":{"type":"TypeString","required":true},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"default_primary_connection_string":{"type":"TypeString","computed":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_connection_string":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rule_set":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_rules":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"network_rules":{"type":"TypeSet","optional":true,"elem":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"subnet_id":{"type":"TypeString","required":true}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"trusted_services_allowed":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_namespace_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_namespace_disaster_recovery_config":{"schema":{"alias_authorization_rule_id":{"type":"TypeString","optional":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_namespace_id":{"type":"TypeString","required":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_namespace_id":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_namespace_network_rule_set":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_rules":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"network_rules":{"type":"TypeSet","optional":true,"elem":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"subnet_id":{"type":"TypeString","required":true}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"trusted_services_allowed":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_queue":{"schema":{"auto_delete_on_idle":{"type":"TypeString","optional":true,"computed":true},"dead_lettering_on_message_expiration":{"type":"TypeBool","optional":true,"default":false},"default_message_ttl":{"type":"TypeString","optional":true,"computed":true},"duplicate_detection_history_time_window":{"type":"TypeString","optional":true,"computed":true},"enable_batched_operations":{"type":"TypeBool","optional":true,"default":true},"enable_express":{"type":"TypeBool","optional":true,"default":false},"enable_partitioning":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"forward_dead_lettered_messages_to":{"type":"TypeString","optional":true},"forward_to":{"type":"TypeString","optional":true},"lock_duration":{"type":"TypeString","optional":true,"computed":true},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10},"max_message_size_in_kilobytes":{"type":"TypeInt","optional":true,"computed":true},"max_size_in_megabytes":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"requires_duplicate_detection":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"requires_session":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Active"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_queue_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"queue_id":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_subscription":{"schema":{"auto_delete_on_idle":{"type":"TypeString","optional":true,"computed":true},"client_scoped_subscription":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true,"forceNew":true},"is_client_scoped_subscription_durable":{"type":"TypeBool","computed":true},"is_client_scoped_subscription_shareable":{"type":"TypeBool","optional":true,"default":true,"forceNew":true}}},"maxItems":1},"client_scoped_subscription_enabled":{"type":"TypeBool","optional":true,"default":false},"dead_lettering_on_filter_evaluation_error":{"type":"TypeBool","optional":true,"default":true},"dead_lettering_on_message_expiration":{"type":"TypeBool","optional":true},"default_message_ttl":{"type":"TypeString","optional":true,"computed":true},"enable_batched_operations":{"type":"TypeBool","optional":true},"forward_dead_lettered_messages_to":{"type":"TypeString","optional":true},"forward_to":{"type":"TypeString","optional":true},"lock_duration":{"type":"TypeString","optional":true,"computed":true},"max_delivery_count":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"requires_session":{"type":"TypeBool","optional":true,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Active"},"topic_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_subscription_rule":{"schema":{"action":{"type":"TypeString","optional":true},"correlation_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"content_type":{"type":"TypeString","optional":true},"correlation_id":{"type":"TypeString","optional":true},"label":{"type":"TypeString","optional":true},"message_id":{"type":"TypeString","optional":true},"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"reply_to":{"type":"TypeString","optional":true},"reply_to_session_id":{"type":"TypeString","optional":true},"session_id":{"type":"TypeString","optional":true},"to":{"type":"TypeString","optional":true}}},"maxItems":1},"filter_type":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sql_filter":{"type":"TypeString","optional":true},"sql_filter_compatibility_level":{"type":"TypeInt","computed":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_topic":{"schema":{"auto_delete_on_idle":{"type":"TypeString","optional":true,"computed":true},"default_message_ttl":{"type":"TypeString","optional":true,"computed":true},"duplicate_detection_history_time_window":{"type":"TypeString","optional":true,"computed":true},"enable_batched_operations":{"type":"TypeBool","optional":true},"enable_express":{"type":"TypeBool","optional":true},"enable_partitioning":{"type":"TypeBool","optional":true,"forceNew":true},"max_message_size_in_kilobytes":{"type":"TypeInt","optional":true,"computed":true},"max_size_in_megabytes":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"requires_duplicate_detection":{"type":"TypeBool","optional":true,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Active"},"support_ordering":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_topic_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false},"topic_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_shared_image":{"schema":{"accelerated_network_support_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"architecture":{"type":"TypeString","optional":true,"default":"x64","forceNew":true},"confidential_vm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"confidential_vm_supported":{"type":"TypeBool","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"disk_types_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"end_of_life_date":{"type":"TypeString","optional":true},"eula":{"type":"TypeString","optional":true,"forceNew":true},"gallery_name":{"type":"TypeString","required":true,"forceNew":true},"hyper_v_generation":{"type":"TypeString","optional":true,"default":"V1","forceNew":true},"identifier":{"type":"TypeList","required":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"max_recommended_memory_in_gb":{"type":"TypeInt","optional":true},"max_recommended_vcpu_count":{"type":"TypeInt","optional":true},"min_recommended_memory_in_gb":{"type":"TypeInt","optional":true},"min_recommended_vcpu_count":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_type":{"type":"TypeString","required":true,"forceNew":true},"privacy_statement_uri":{"type":"TypeString","optional":true,"forceNew":true},"purchase_plan":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"release_note_uri":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"specialized":{"type":"TypeBool","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trusted_launch_enabled":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_shared_image_gallery":{"schema":{"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sharing":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"community_gallery":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"eula":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","computed":true},"prefix":{"type":"TypeString","required":true,"forceNew":true},"publisher_email":{"type":"TypeString","required":true,"forceNew":true},"publisher_uri":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"permission":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_name":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_shared_image_version":{"schema":{"blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"end_of_life_date":{"type":"TypeString","optional":true},"exclude_from_latest":{"type":"TypeBool","optional":true,"default":false},"gallery_name":{"type":"TypeString","required":true,"forceNew":true},"image_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_image_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_disk_snapshot_id":{"type":"TypeString","optional":true,"forceNew":true},"replication_mode":{"type":"TypeString","optional":true,"default":"Full","forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_region":{"type":"TypeList","required":true,"elem":{"schema":{"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true},"regional_replica_count":{"type":"TypeInt","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"Standard_LRS"}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_signalr_service":{"schema":{"aad_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"connectivity_logs_enabled":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}},"hostname":{"type":"TypeString","computed":true},"http_request_logs_enabled":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"live_trace":{"type":"TypeList","optional":true,"elem":{"schema":{"connectivity_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"http_request_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"messaging_logs_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"live_trace_enabled":{"type":"TypeBool","optional":true,"default":false},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"messaging_logs_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"public_port":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"server_port":{"type":"TypeInt","computed":true},"serverless_connection_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":30},"service_mode":{"type":"TypeString","optional":true,"default":"Default"},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tls_client_cert_enabled":{"type":"TypeBool","optional":true,"default":false},"upstream_endpoint":{"type":"TypeSet","optional":true,"elem":{"schema":{"category_pattern":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"event_pattern":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"hub_pattern":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"url_template":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_signalr_service_custom_certificate":{"schema":{"certificate_version":{"type":"TypeString","computed":true},"custom_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"signalr_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_signalr_service_custom_domain":{"schema":{"domain_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"signalr_custom_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"signalr_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_signalr_service_network_acl":{"schema":{"default_action":{"type":"TypeString","required":true},"private_endpoint":{"type":"TypeSet","optional":true,"elem":{"schema":{"allowed_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"denied_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","required":true}}}},"public_network":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"denied_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"signalr_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_signalr_shared_private_link_resource":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"request_message":{"type":"TypeString","optional":true},"signalr_service_id":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeString","computed":true},"sub_resource_name":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_fabric":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_hyperv_network_mapping":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true},"source_network_name":{"type":"TypeString","required":true,"forceNew":true},"source_system_center_virtual_machine_manager_name":{"type":"TypeString","required":true,"forceNew":true},"target_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_site_recovery_hyperv_replication_policy":{"schema":{"application_consistent_snapshot_frequency_in_hours":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_point_retention_in_hours":{"type":"TypeInt","required":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true},"replication_interval_in_seconds":{"type":"TypeInt","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_hyperv_replication_policy_association":{"schema":{"hyperv_site_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_site_recovery_network_mapping":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_network_id":{"type":"TypeString","required":true,"forceNew":true},"source_recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true},"target_network_id":{"type":"TypeString","required":true,"forceNew":true},"target_recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_protection_container":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_protection_container_mapping":{"schema":{"automatic_update":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","optional":true},"automation_account_id":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1,"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true},"recovery_replication_policy_id":{"type":"TypeString","required":true,"forceNew":true},"recovery_source_protection_container_name":{"type":"TypeString","required":true,"forceNew":true},"recovery_target_protection_container_id":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_replicated_vm":{"schema":{"managed_disk":{"type":"TypeSet","configMode":"Auto","optional":true,"forceNew":true,"elem":{"schema":{"disk_id":{"type":"TypeString","required":true,"forceNew":true},"staging_storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"target_disk_encryption":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","configMode":"Auto","required":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"key_encryption_key":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"key_url":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"target_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"target_disk_type":{"type":"TypeString","required":true,"forceNew":true},"target_replica_disk_type":{"type":"TypeString","required":true,"forceNew":true},"target_resource_group_id":{"type":"TypeString","required":true,"forceNew":true}}}},"multi_vm_group_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"failover_test_public_ip_address_id":{"type":"TypeString","optional":true,"computed":true},"failover_test_static_ip":{"type":"TypeString","optional":true,"computed":true},"failover_test_subnet_name":{"type":"TypeString","optional":true,"computed":true},"is_primary":{"type":"TypeBool","optional":true,"default":false},"recovery_public_ip_address_id":{"type":"TypeString","optional":true},"source_network_interface_id":{"type":"TypeString","optional":true,"computed":true},"target_static_ip":{"type":"TypeString","optional":true},"target_subnet_name":{"type":"TypeString","optional":true}}}},"recovery_replication_policy_id":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true},"source_recovery_protection_container_name":{"type":"TypeString","required":true,"forceNew":true},"source_vm_id":{"type":"TypeString","required":true,"forceNew":true},"target_availability_set_id":{"type":"TypeString","optional":true},"target_boot_diagnostic_storage_account_id":{"type":"TypeString","optional":true},"target_capacity_reservation_group_id":{"type":"TypeString","optional":true},"target_edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"target_network_id":{"type":"TypeString","optional":true,"computed":true},"target_proximity_placement_group_id":{"type":"TypeString","optional":true},"target_recovery_fabric_id":{"type":"TypeString","required":true,"forceNew":true},"target_recovery_protection_container_id":{"type":"TypeString","required":true,"forceNew":true},"target_resource_group_id":{"type":"TypeString","required":true,"forceNew":true},"target_virtual_machine_scale_set_id":{"type":"TypeString","optional":true},"target_zone":{"type":"TypeString","optional":true,"forceNew":true},"test_network_id":{"type":"TypeString","optional":true,"computed":true},"unmanaged_disk":{"type":"TypeSet","configMode":"Auto","optional":true,"forceNew":true,"elem":{"schema":{"disk_uri":{"type":"TypeString","required":true,"forceNew":true},"staging_storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"target_storage_account_id":{"type":"TypeString","required":true,"forceNew":true}}}}},"timeouts":{"create":180,"read":5,"delete":80,"update":80}},"azurerm_site_recovery_replication_policy":{"schema":{"application_consistent_snapshot_frequency_in_minutes":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_point_retention_in_minutes":{"type":"TypeInt","required":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_replication_recovery_plan":{"schema":{"azure_to_azure_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"primary_edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"primary_zone":{"type":"TypeString","optional":true,"forceNew":true},"recovery_edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"recovery_zone":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"boot_recovery_group":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"post_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"pre_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"replicated_protected_items":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1},"failover_recovery_group":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"post_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"pre_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}}}},"maxItems":1,"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_group":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"post_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"pre_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"replicated_protected_items":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"minItems":3},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true},"shutdown_recovery_group":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"post_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"pre_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}}}},"maxItems":1,"minItems":1},"source_recovery_fabric_id":{"type":"TypeString","required":true,"forceNew":true},"target_recovery_fabric_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_services_vault_hyperv_site":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":180}},"azurerm_site_recovery_vmware_replication_policy":{"schema":{"application_consistent_snapshot_frequency_in_minutes":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_point_retention_in_minutes":{"type":"TypeInt","required":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_vmware_replication_policy_association":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"policy_id":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_snapshot":{"schema":{"create_option":{"type":"TypeString","required":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"encryption_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"key_encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"incremental_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"source_uri":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trusted_launch_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_source_control_token":{"schema":{"token":{"type":"TypeString","required":true},"token_secret":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}},"timeouts":{"create":5,"read":5,"delete":5,"update":5}},"azurerm_spatial_anchors_account":{"schema":{"account_domain":{"type":"TypeString","computed":true},"account_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_accelerator":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_spring_cloud_active_deployment":{"schema":{"deployment_name":{"type":"TypeString","required":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_api_portal":{"schema":{"gateway_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"https_only_enabled":{"type":"TypeBool","optional":true},"instance_count":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"sso":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true},"client_secret":{"type":"TypeString","optional":true},"issuer_uri":{"type":"TypeString","optional":true},"scope":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_spring_cloud_api_portal_custom_domain":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_api_portal_id":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_app":{"schema":{"addon_json":{"type":"TypeString","optional":true,"computed":true},"custom_persistent_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"mount_options":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"mount_path":{"type":"TypeString","required":true},"read_only_enabled":{"type":"TypeBool","optional":true,"default":false},"share_name":{"type":"TypeString","required":true},"storage_name":{"type":"TypeString","required":true}}},"minItems":1},"fqdn":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ingress_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"backend_protocol":{"type":"TypeString","optional":true,"default":"Default"},"read_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":300},"send_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":60},"session_affinity":{"type":"TypeString","optional":true,"default":"None"},"session_cookie_max_age":{"type":"TypeInt","optional":true}}},"maxItems":1},"is_public":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"persistent_disk":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"mount_path":{"type":"TypeString","optional":true,"default":"/persistent"},"size_in_gb":{"type":"TypeInt","required":true}}},"maxItems":1},"public_endpoint_enabled":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_name":{"type":"TypeString","required":true,"forceNew":true},"tls_enabled":{"type":"TypeBool","optional":true,"default":false},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_app_cosmosdb_association":{"schema":{"api_type":{"type":"TypeString","required":true,"forceNew":true},"cosmosdb_access_key":{"type":"TypeString","required":true},"cosmosdb_account_id":{"type":"TypeString","required":true,"forceNew":true},"cosmosdb_cassandra_keyspace_name":{"type":"TypeString","optional":true},"cosmosdb_gremlin_database_name":{"type":"TypeString","optional":true},"cosmosdb_gremlin_graph_name":{"type":"TypeString","optional":true},"cosmosdb_mongo_database_name":{"type":"TypeString","optional":true},"cosmosdb_sql_database_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_app_mysql_association":{"schema":{"database_name":{"type":"TypeString","required":true},"mysql_server_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_app_redis_association":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"redis_access_key":{"type":"TypeString","required":true},"redis_cache_id":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true},"ssl_enabled":{"type":"TypeBool","optional":true,"default":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_application_live_view":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_spring_cloud_build_deployment":{"schema":{"addon_json":{"type":"TypeString","optional":true,"computed":true},"build_result_id":{"type":"TypeString","required":true},"environment_variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"instance_count":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"quota":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cpu":{"type":"TypeString","optional":true,"computed":true},"memory":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_build_pack_binding":{"schema":{"binding_type":{"type":"TypeString","optional":true},"launch":{"type":"TypeList","optional":true,"elem":{"schema":{"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"secrets":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_builder_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_builder":{"schema":{"build_pack_group":{"type":"TypeSet","required":true,"elem":{"schema":{"build_pack_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"stack":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_certificate":{"schema":{"certificate_content":{"type":"TypeString","optional":true,"forceNew":true},"exclude_private_key":{"type":"TypeBool","optional":true,"forceNew":true},"key_vault_certificate_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_name":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_spring_cloud_configuration_service":{"schema":{"generation":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"repository":{"type":"TypeList","optional":true,"elem":{"schema":{"ca_certificate_id":{"type":"TypeString","optional":true},"host_key":{"type":"TypeString","optional":true},"host_key_algorithm":{"type":"TypeString","optional":true},"label":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"password":{"type":"TypeString","optional":true},"patterns":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"private_key":{"type":"TypeString","optional":true},"search_paths":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"strict_host_key_checking":{"type":"TypeBool","optional":true},"uri":{"type":"TypeString","required":true},"username":{"type":"TypeString","optional":true}}}},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_connection":{"schema":{"authentication":{"type":"TypeList","required":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"client_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","optional":true},"secret":{"type":"TypeString","optional":true},"subscription_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"client_type":{"type":"TypeString","optional":true,"default":"none"},"name":{"type":"TypeString","required":true,"forceNew":true},"secret_store":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"spring_cloud_id":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true},"vnet_solution":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_container_deployment":{"schema":{"addon_json":{"type":"TypeString","optional":true,"computed":true},"arguments":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"commands":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"environment_variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"image":{"type":"TypeString","required":true},"instance_count":{"type":"TypeInt","optional":true,"default":1},"language_framework":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"quota":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cpu":{"type":"TypeString","optional":true,"computed":true},"memory":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"server":{"type":"TypeString","required":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_custom_domain":{"schema":{"certificate_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_customized_accelerator":{"schema":{"accelerator_tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"git_repository":{"type":"TypeList","required":true,"elem":{"schema":{"basic_auth":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"branch":{"type":"TypeString","optional":true},"ca_certificate_id":{"type":"TypeString","optional":true},"commit":{"type":"TypeString","optional":true},"git_tag":{"type":"TypeString","optional":true},"interval_in_seconds":{"type":"TypeInt","optional":true},"ssh_auth":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"host_key":{"type":"TypeString","optional":true},"host_key_algorithm":{"type":"TypeString","optional":true},"private_key":{"type":"TypeString","required":true}}},"maxItems":1},"url":{"type":"TypeString","required":true}}},"maxItems":1},"icon_url":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_accelerator_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_dev_tool_portal":{"schema":{"application_accelerator_enabled":{"type":"TypeBool","optional":true,"computed":true},"application_live_view_enabled":{"type":"TypeBool","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"sso":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true},"client_secret":{"type":"TypeString","optional":true},"metadata_url":{"type":"TypeString","optional":true},"scope":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_gateway":{"schema":{"api_metadata":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"documentation_url":{"type":"TypeString","optional":true},"server_url":{"type":"TypeString","optional":true},"title":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"application_performance_monitoring_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_authorization":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"verification_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"allowed_methods":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"allowed_origin_patterns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"allowed_origins":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"credentials_allowed":{"type":"TypeBool","optional":true},"exposed_headers":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"max_age_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"https_only":{"type":"TypeBool","optional":true},"instance_count":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true},"quota":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cpu":{"type":"TypeString","optional":true,"default":"1"},"memory":{"type":"TypeString","optional":true,"default":"2Gi"}}},"maxItems":1},"sensitive_environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"sso":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true},"client_secret":{"type":"TypeString","optional":true},"issuer_uri":{"type":"TypeString","optional":true},"scope":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_gateway_custom_domain":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_gateway_route_config":{"schema":{"filters":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"open_api":{"type":"TypeList","optional":true,"elem":{"schema":{"uri":{"type":"TypeString","optional":true}}},"maxItems":1},"predicates":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"protocol":{"type":"TypeString","optional":true,"default":"HTTP"},"route":{"type":"TypeSet","optional":true,"elem":{"schema":{"classification_tags":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"filters":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"order":{"type":"TypeInt","required":true},"predicates":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"sso_validation_enabled":{"type":"TypeBool","optional":true},"title":{"type":"TypeString","optional":true},"token_relay":{"type":"TypeBool","optional":true},"uri":{"type":"TypeString","optional":true}}}},"spring_cloud_app_id":{"type":"TypeString","optional":true},"spring_cloud_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"sso_validation_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_java_deployment":{"schema":{"environment_variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"instance_count":{"type":"TypeInt","optional":true,"default":1},"jvm_options":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"quota":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cpu":{"type":"TypeString","optional":true,"computed":true},"memory":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"default":"Java_8"},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_service":{"schema":{"build_agent_pool_size":{"type":"TypeString","optional":true},"config_server_git_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"http_basic_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"label":{"type":"TypeString","optional":true},"repository":{"type":"TypeList","optional":true,"elem":{"schema":{"http_basic_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"label":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"pattern":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"search_paths":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"ssh_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"host_key":{"type":"TypeString","optional":true},"host_key_algorithm":{"type":"TypeString","optional":true},"private_key":{"type":"TypeString","required":true},"strict_host_key_checking_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true}}}},"search_paths":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"ssh_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"host_key":{"type":"TypeString","optional":true},"host_key_algorithm":{"type":"TypeString","optional":true},"private_key":{"type":"TypeString","required":true},"strict_host_key_checking_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true}}},"maxItems":1},"container_registry":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"password":{"type":"TypeString","required":true},"server":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}}},"default_build_service":{"type":"TypeList","optional":true,"elem":{"schema":{"container_registry_name":{"type":"TypeString","optional":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"log_stream_public_endpoint_enabled":{"type":"TypeBool","optional":true},"marketplace":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"plan":{"type":"TypeString","required":true},"product":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"app_network_resource_group":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"app_subnet_id":{"type":"TypeString","required":true,"forceNew":true},"cidr_ranges":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":3},"outbound_type":{"type":"TypeString","optional":true,"default":"loadBalancer","forceNew":true},"read_timeout_seconds":{"type":"TypeInt","optional":true},"service_runtime_network_resource_group":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"service_runtime_subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"outbound_public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"required_network_traffic_rules":{"type":"TypeList","computed":true,"elem":{"schema":{"direction":{"type":"TypeString","computed":true},"fqdns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_registry_enabled":{"type":"TypeBool","optional":true},"service_registry_id":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","optional":true,"default":"S0","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trace":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_string":{"type":"TypeString","optional":true},"sample_rate":{"type":"TypeFloat","optional":true,"default":10}}},"maxItems":1},"zone_redundant":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":60,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_storage":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_active_directory_administrator":{"schema":{"azuread_authentication_only":{"type":"TypeBool","optional":true,"computed":true},"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_database":{"schema":{"collation":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default"},"creation_date":{"type":"TypeString","computed":true},"default_secondary_location":{"type":"TypeString","computed":true},"edition":{"type":"TypeString","optional":true,"computed":true},"elastic_pool_name":{"type":"TypeString","optional":true,"computed":true},"encryption":{"type":"TypeString","computed":true},"import":{"type":"TypeList","optional":true,"elem":{"schema":{"administrator_login":{"type":"TypeString","required":true},"administrator_login_password":{"type":"TypeString","required":true},"authentication_type":{"type":"TypeString","required":true},"operation_mode":{"type":"TypeString","optional":true,"default":"Import"},"storage_key":{"type":"TypeString","required":true},"storage_key_type":{"type":"TypeString","required":true},"storage_uri":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"max_size_bytes":{"type":"TypeString","optional":true,"computed":true},"max_size_gb":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_scale":{"type":"TypeBool","optional":true,"default":false},"requested_service_objective_id":{"type":"TypeString","optional":true,"computed":true},"requested_service_objective_name":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore_point_in_time":{"type":"TypeString","optional":true,"computed":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"source_database_deletion_date":{"type":"TypeString","optional":true,"computed":true},"source_database_id":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeString","optional":true,"default":"Disabled"},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"retention_days":{"type":"TypeInt","optional":true},"state":{"type":"TypeString","optional":true,"default":"Disabled"},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"zone_redundant":{"type":"TypeBool","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_sql_elasticpool":{"schema":{"creation_date":{"type":"TypeString","computed":true},"db_dtu_max":{"type":"TypeInt","optional":true,"computed":true},"db_dtu_min":{"type":"TypeInt","optional":true,"computed":true},"dtu":{"type":"TypeInt","required":true},"edition":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pool_size":{"type":"TypeInt","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_failover_group":{"schema":{"databases":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_servers":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"role":{"type":"TypeString","computed":true}}}},"read_write_endpoint_failover_policy":{"type":"TypeList","required":true,"elem":{"schema":{"grace_minutes":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"readonly_endpoint_failover_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","computed":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_managed_database":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sql_managed_instance_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":1440,"read":5,"delete":1440,"update":1440}},"azurerm_sql_managed_instance":{"schema":{"administrator_login":{"type":"TypeString","required":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","required":true},"collation":{"type":"TypeString","optional":true,"default":"SQL_Latin1_General_CP1_CI_AS","forceNew":true},"dns_zone_partner_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"name":{"type":"TypeString","required":true,"forceNew":true},"proxy_override":{"type":"TypeString","optional":true,"default":"Default"},"public_data_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"GRS","forceNew":true},"storage_size_in_gb":{"type":"TypeInt","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timezone_id":{"type":"TypeString","optional":true,"default":"UTC","forceNew":true},"vcores":{"type":"TypeInt","required":true}},"timeouts":{"create":1440,"read":5,"delete":1440,"update":1440}},"azurerm_sql_managed_instance_active_directory_administrator":{"schema":{"azuread_authentication_only":{"type":"TypeBool","optional":true,"default":false},"login":{"type":"TypeString","required":true},"managed_instance_name":{"type":"TypeString","required":true,"forceNew":true},"object_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_managed_instance_failover_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"managed_instance_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"partner_region":{"type":"TypeList","computed":true,"elem":{"schema":{"location":{"type":"TypeString","computed":true},"role":{"type":"TypeString","computed":true}}}},"read_write_endpoint_failover_policy":{"type":"TypeList","required":true,"elem":{"schema":{"grace_minutes":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"readonly_endpoint_failover_policy_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_server":{"schema":{"administrator_login":{"type":"TypeString","required":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","required":true},"connection_policy":{"type":"TypeString","optional":true,"default":"Default"},"fully_qualified_domain_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","optional":true,"computed":true},"email_addresses":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"retention_days":{"type":"TypeInt","optional":true},"state":{"type":"TypeString","optional":true,"default":"Disabled"},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_sql_virtual_network_rule":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_ssh_public_key":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_key":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":45,"read":5,"delete":45,"update":45}},"azurerm_stack_hci_cluster":{"schema":{"automanage_configuration_id":{"type":"TypeString","optional":true},"client_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_static_site":{"schema":{"api_key":{"type":"TypeString","computed":true},"default_host_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_size":{"type":"TypeString","optional":true,"default":"Free"},"sku_tier":{"type":"TypeString","optional":true,"default":"Free"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_static_site_custom_domain":{"schema":{"domain_name":{"type":"TypeString","required":true,"forceNew":true},"static_site_id":{"type":"TypeString","required":true,"forceNew":true},"validation_token":{"type":"TypeString","computed":true},"validation_type":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_account":{"schema":{"access_tier":{"type":"TypeString","optional":true,"computed":true},"account_kind":{"type":"TypeString","optional":true,"default":"StorageV2"},"account_replication_type":{"type":"TypeString","required":true},"account_tier":{"type":"TypeString","required":true,"forceNew":true},"allow_nested_items_to_be_public":{"type":"TypeBool","optional":true,"default":true},"allowed_copy_scope":{"type":"TypeString","optional":true},"azure_files_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"domain_guid":{"type":"TypeString","required":true},"domain_name":{"type":"TypeString","required":true},"domain_sid":{"type":"TypeString","required":true},"forest_name":{"type":"TypeString","required":true},"netbios_domain_name":{"type":"TypeString","required":true},"storage_sid":{"type":"TypeString","required":true}}},"maxItems":1},"directory_type":{"type":"TypeString","required":true}}},"maxItems":1},"blob_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"change_feed_enabled":{"type":"TypeBool","optional":true,"default":false},"change_feed_retention_in_days":{"type":"TypeInt","optional":true},"container_delete_retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":7}}},"maxItems":1},"cors_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"allowed_methods":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"exposed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"max_age_in_seconds":{"type":"TypeInt","required":true}}},"maxItems":5},"default_service_version":{"type":"TypeString","optional":true,"computed":true},"delete_retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":7}}},"maxItems":1},"last_access_time_enabled":{"type":"TypeBool","optional":true,"default":false},"restore_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","required":true}}},"maxItems":1},"versioning_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"cross_tenant_replication_enabled":{"type":"TypeBool","optional":true,"default":true},"custom_domain":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"use_subdomain":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","required":true}}},"maxItems":1},"default_to_oauth_authentication":{"type":"TypeBool","optional":true,"default":false},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_https_traffic_only":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"immutability_policy":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"allow_protected_append_writes":{"type":"TypeBool","required":true},"period_since_creation_in_days":{"type":"TypeInt","required":true},"state":{"type":"TypeString","required":true}}},"maxItems":1},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"is_hns_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"large_file_share_enabled":{"type":"TypeBool","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"min_tls_version":{"type":"TypeString","optional":true,"default":"TLS1_2"},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rules":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"bypass":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"default_action":{"type":"TypeString","required":true},"ip_rules":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"private_link_access":{"type":"TypeList","optional":true,"elem":{"schema":{"endpoint_resource_id":{"type":"TypeString","required":true},"endpoint_tenant_id":{"type":"TypeString","optional":true,"computed":true}}}},"virtual_network_subnet_ids":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"nfsv3_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_blob_connection_string":{"type":"TypeString","computed":true},"primary_blob_endpoint":{"type":"TypeString","computed":true},"primary_blob_host":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_dfs_endpoint":{"type":"TypeString","computed":true},"primary_dfs_host":{"type":"TypeString","computed":true},"primary_file_endpoint":{"type":"TypeString","computed":true},"primary_file_host":{"type":"TypeString","computed":true},"primary_location":{"type":"TypeString","computed":true},"primary_queue_endpoint":{"type":"TypeString","computed":true},"primary_queue_host":{"type":"TypeString","computed":true},"primary_table_endpoint":{"type":"TypeString","computed":true},"primary_table_host":{"type":"TypeString","computed":true},"primary_web_endpoint":{"type":"TypeString","computed":true},"primary_web_host":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"queue_encryption_key_type":{"type":"TypeString","optional":true,"default":"Service","forceNew":true},"queue_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cors_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"allowed_methods":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"exposed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"max_age_in_seconds":{"type":"TypeInt","required":true}}},"maxItems":5},"hour_metrics":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"include_apis":{"type":"TypeBool","optional":true},"retention_policy_days":{"type":"TypeInt","optional":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"logging":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"delete":{"type":"TypeBool","required":true},"read":{"type":"TypeBool","required":true},"retention_policy_days":{"type":"TypeInt","optional":true},"version":{"type":"TypeString","required":true},"write":{"type":"TypeBool","required":true}}},"maxItems":1},"minute_metrics":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"include_apis":{"type":"TypeBool","optional":true},"retention_policy_days":{"type":"TypeInt","optional":true},"version":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"choice":{"type":"TypeString","optional":true,"default":"MicrosoftRouting"},"publish_internet_endpoints":{"type":"TypeBool","optional":true,"default":false},"publish_microsoft_endpoints":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"sas_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"expiration_action":{"type":"TypeString","optional":true,"default":"Log"},"expiration_period":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_blob_connection_string":{"type":"TypeString","computed":true},"secondary_blob_endpoint":{"type":"TypeString","computed":true},"secondary_blob_host":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_dfs_endpoint":{"type":"TypeString","computed":true},"secondary_dfs_host":{"type":"TypeString","computed":true},"secondary_file_endpoint":{"type":"TypeString","computed":true},"secondary_file_host":{"type":"TypeString","computed":true},"secondary_location":{"type":"TypeString","computed":true},"secondary_queue_endpoint":{"type":"TypeString","computed":true},"secondary_queue_host":{"type":"TypeString","computed":true},"secondary_table_endpoint":{"type":"TypeString","computed":true},"secondary_table_host":{"type":"TypeString","computed":true},"secondary_web_endpoint":{"type":"TypeString","computed":true},"secondary_web_host":{"type":"TypeString","computed":true},"sftp_enabled":{"type":"TypeBool","optional":true,"default":false},"share_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cors_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"allowed_methods":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"exposed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"max_age_in_seconds":{"type":"TypeInt","required":true}}},"maxItems":5},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":7}}},"maxItems":1},"smb":{"type":"TypeList","optional":true,"elem":{"schema":{"authentication_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"channel_encryption_type":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"kerberos_ticket_encryption_type":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"multichannel_enabled":{"type":"TypeBool","optional":true,"default":false},"versions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"shared_access_key_enabled":{"type":"TypeBool","optional":true,"default":true},"static_website":{"type":"TypeList","optional":true,"elem":{"schema":{"error_404_document":{"type":"TypeString","optional":true},"index_document":{"type":"TypeString","optional":true}}},"maxItems":1},"table_encryption_key_type":{"type":"TypeString","optional":true,"default":"Service","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_storage_account_customer_managed_key":{"schema":{"key_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","required":true},"key_version":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_account_local_user":{"schema":{"home_directory":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","computed":true},"permission_scope":{"type":"TypeList","optional":true,"elem":{"schema":{"permissions":{"type":"TypeList","required":true,"elem":{"schema":{"create":{"type":"TypeBool","optional":true,"default":false},"delete":{"type":"TypeBool","optional":true,"default":false},"list":{"type":"TypeBool","optional":true,"default":false},"read":{"type":"TypeBool","optional":true,"default":false},"write":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"resource_name":{"type":"TypeString","required":true},"service":{"type":"TypeString","required":true}}}},"sid":{"type":"TypeString","computed":true},"ssh_authorized_key":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"key":{"type":"TypeString","required":true}}}},"ssh_key_enabled":{"type":"TypeBool","optional":true,"default":false},"ssh_password_enabled":{"type":"TypeBool","optional":true,"default":false},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_account_network_rules":{"schema":{"bypass":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"default_action":{"type":"TypeString","required":true},"ip_rules":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"private_link_access":{"type":"TypeList","optional":true,"elem":{"schema":{"endpoint_resource_id":{"type":"TypeString","required":true},"endpoint_tenant_id":{"type":"TypeString","optional":true,"computed":true}}}},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_subnet_ids":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_storage_blob":{"schema":{"access_tier":{"type":"TypeString","optional":true,"computed":true},"cache_control":{"type":"TypeString","optional":true},"content_md5":{"type":"TypeString","optional":true,"forceNew":true},"content_type":{"type":"TypeString","optional":true,"default":"application/octet-stream"},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"parallelism":{"type":"TypeInt","optional":true,"default":8,"forceNew":true},"size":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"source":{"type":"TypeString","optional":true,"forceNew":true},"source_content":{"type":"TypeString","optional":true,"forceNew":true},"source_uri":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"storage_container_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_blob_inventory_policy":{"schema":{"rules":{"type":"TypeSet","required":true,"elem":{"schema":{"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"exclude_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":10},"include_blob_versions":{"type":"TypeBool","optional":true,"default":false},"include_deleted":{"type":"TypeBool","optional":true,"default":false},"include_snapshots":{"type":"TypeBool","optional":true,"default":false},"prefix_match":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":10}}},"maxItems":1},"format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"schedule":{"type":"TypeString","required":true},"schema_fields":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"scope":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true}}}},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_container":{"schema":{"container_access_type":{"type":"TypeString","optional":true,"default":"private"},"has_immutability_policy":{"type":"TypeBool","computed":true},"has_legal_hold":{"type":"TypeBool","computed":true},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_data_lake_gen2_filesystem":{"schema":{"ace":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"permissions":{"type":"TypeString","required":true},"scope":{"type":"TypeString","optional":true,"default":"access"},"type":{"type":"TypeString","required":true}}}},"group":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"owner":{"type":"TypeString","optional":true,"computed":true},"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_data_lake_gen2_path":{"schema":{"ace":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"permissions":{"type":"TypeString","required":true},"scope":{"type":"TypeString","optional":true,"default":"access"},"type":{"type":"TypeString","required":true}}}},"filesystem_name":{"type":"TypeString","required":true,"forceNew":true},"group":{"type":"TypeString","optional":true,"computed":true},"owner":{"type":"TypeString","optional":true,"computed":true},"path":{"type":"TypeString","required":true,"forceNew":true},"resource":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_encryption_scope":{"schema":{"infrastructure_encryption_required":{"type":"TypeBool","optional":true,"forceNew":true},"key_vault_key_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_management_policy":{"schema":{"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"actions":{"type":"TypeList","required":true,"elem":{"schema":{"base_blob":{"type":"TypeList","optional":true,"elem":{"schema":{"auto_tier_to_hot_from_cool_enabled":{"type":"TypeBool","optional":true},"delete_after_days_since_creation_greater_than":{"type":"TypeInt","optional":true,"default":-1},"delete_after_days_since_last_access_time_greater_than":{"type":"TypeInt","optional":true,"default":-1},"delete_after_days_since_modification_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_creation_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_last_access_time_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_modification_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_cool_after_days_since_creation_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_cool_after_days_since_last_access_time_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_cool_after_days_since_modification_greater_than":{"type":"TypeInt","optional":true,"default":-1}}},"maxItems":1},"snapshot":{"type":"TypeList","optional":true,"elem":{"schema":{"change_tier_to_archive_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"change_tier_to_cool_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"delete_after_days_since_creation_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","optional":true,"default":-1}}},"maxItems":1},"version":{"type":"TypeList","optional":true,"elem":{"schema":{"change_tier_to_archive_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"change_tier_to_cool_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"delete_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","optional":true,"default":-1}}},"maxItems":1}}},"maxItems":1},"enabled":{"type":"TypeBool","required":true},"filters":{"type":"TypeList","required":true,"elem":{"schema":{"blob_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"match_blob_index_tag":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operation":{"type":"TypeString","optional":true,"default":"=="},"value":{"type":"TypeString","required":true}}}},"prefix_match":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true}}},"minItems":1},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover":{"schema":{"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_agent":{"schema":{"arc_virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true},"arc_virtual_machine_uuid":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_mover_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_job_definition":{"schema":{"agent_name":{"type":"TypeString","optional":true},"copy_mode":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"source_name":{"type":"TypeString","required":true,"forceNew":true},"source_sub_path":{"type":"TypeString","optional":true,"forceNew":true},"storage_mover_project_id":{"type":"TypeString","required":true,"forceNew":true},"target_name":{"type":"TypeString","required":true,"forceNew":true},"target_sub_path":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_project":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_mover_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_source_endpoint":{"schema":{"description":{"type":"TypeString","optional":true},"export":{"type":"TypeString","optional":true,"forceNew":true},"host":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"nfs_version":{"type":"TypeString","optional":true,"default":"NFSauto","forceNew":true},"storage_mover_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_target_endpoint":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"storage_container_name":{"type":"TypeString","required":true,"forceNew":true},"storage_mover_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_object_replication":{"schema":{"destination_object_replication_id":{"type":"TypeString","computed":true},"destination_storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"rules":{"type":"TypeSet","required":true,"elem":{"schema":{"copy_blobs_created_after":{"type":"TypeString","optional":true,"default":"OnlyNewObjects"},"destination_container_name":{"type":"TypeString","required":true,"forceNew":true},"filter_out_blobs_with_prefix":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"source_container_name":{"type":"TypeString","required":true,"forceNew":true}}}},"source_object_replication_id":{"type":"TypeString","computed":true},"source_storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_queue":{"schema":{"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_share":{"schema":{"access_tier":{"type":"TypeString","optional":true,"computed":true},"acl":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"expiry":{"type":"TypeString","optional":true},"permissions":{"type":"TypeString","required":true},"start":{"type":"TypeString","optional":true}}}},"id":{"type":"TypeString","required":true}}}},"enabled_protocol":{"type":"TypeString","optional":true,"default":"SMB","forceNew":true},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"quota":{"type":"TypeInt","required":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_share_directory":{"schema":{"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"share_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_share_file":{"schema":{"content_disposition":{"type":"TypeString","optional":true},"content_encoding":{"type":"TypeString","optional":true},"content_length":{"type":"TypeInt","computed":true},"content_md5":{"type":"TypeString","optional":true,"forceNew":true},"content_type":{"type":"TypeString","optional":true,"default":"application/octet-stream"},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"path":{"type":"TypeString","optional":true,"default":"","forceNew":true},"source":{"type":"TypeString","optional":true,"forceNew":true},"storage_share_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_sync":{"schema":{"incoming_traffic_policy":{"type":"TypeString","optional":true,"default":"AllowAllTraffic"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_sync_cloud_endpoint":{"schema":{"file_share_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"storage_sync_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":45,"read":5,"delete":45}},"azurerm_storage_sync_group":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"storage_sync_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_storage_table":{"schema":{"acl":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"expiry":{"type":"TypeString","required":true},"permissions":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true}}}},"id":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_table_entity":{"schema":{"entity":{"type":"TypeMap","required":true,"elem":{"type":"TypeString"}},"partition_key":{"type":"TypeString","required":true,"forceNew":true},"row_key":{"type":"TypeString","required":true,"forceNew":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"table_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_cluster":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"streaming_capacity":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_stream_analytics_function_javascript_uda":{"schema":{"input":{"type":"TypeList","required":true,"elem":{"schema":{"configuration_parameter":{"type":"TypeBool","optional":true,"default":false},"type":{"type":"TypeString","required":true}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"output":{"type":"TypeList","required":true,"elem":{"schema":{"type":{"type":"TypeString","required":true}}},"maxItems":1},"script":{"type":"TypeString","required":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_function_javascript_udf":{"schema":{"input":{"type":"TypeList","required":true,"elem":{"schema":{"configuration_parameter":{"type":"TypeBool","optional":true,"default":false},"type":{"type":"TypeString","required":true}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"output":{"type":"TypeList","required":true,"elem":{"schema":{"type":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"script":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_job":{"schema":{"compatibility_level":{"type":"TypeString","optional":true,"computed":true},"content_storage_policy":{"type":"TypeString","optional":true,"default":"SystemAccount"},"data_locale":{"type":"TypeString","optional":true,"computed":true},"events_late_arrival_max_delay_in_seconds":{"type":"TypeInt","optional":true,"default":5},"events_out_of_order_max_delay_in_seconds":{"type":"TypeInt","optional":true,"default":0},"events_out_of_order_policy":{"type":"TypeString","optional":true,"default":"Adjust"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"job_id":{"type":"TypeString","computed":true},"job_storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_error_policy":{"type":"TypeString","optional":true,"default":"Drop"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_cluster_id":{"type":"TypeString","optional":true},"streaming_units":{"type":"TypeInt","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"transformation_query":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true,"default":"Cloud","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_job_schedule":{"schema":{"last_output_time":{"type":"TypeString","computed":true},"start_mode":{"type":"TypeString","required":true},"start_time":{"type":"TypeString","optional":true,"computed":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_managed_private_endpoint":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_cluster_name":{"type":"TypeString","required":true,"forceNew":true},"subresource_name":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":5}},"azurerm_stream_analytics_output_blob":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"batch_max_wait_time":{"type":"TypeString","optional":true},"batch_min_rows":{"type":"TypeInt","optional":true},"date_format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"path_pattern":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"format":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"storage_account_key":{"type":"TypeString","optional":true},"storage_account_name":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"time_format":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_cosmosdb":{"schema":{"container_name":{"type":"TypeString","required":true},"cosmosdb_account_key":{"type":"TypeString","required":true},"cosmosdb_sql_database_id":{"type":"TypeString","required":true},"document_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_eventhub":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"eventhub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true},"property_columns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"format":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_function":{"schema":{"api_key":{"type":"TypeString","required":true},"batch_max_count":{"type":"TypeInt","optional":true,"default":100},"batch_max_in_bytes":{"type":"TypeInt","optional":true,"default":262144},"function_app":{"type":"TypeString","required":true},"function_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_mssql":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"database":{"type":"TypeString","required":true,"forceNew":true},"max_batch_count":{"type":"TypeFloat","optional":true,"default":10000},"max_writer_count":{"type":"TypeFloat","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","required":true,"forceNew":true},"user":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_powerbi":{"schema":{"dataset":{"type":"TypeString","required":true},"group_id":{"type":"TypeString","required":true},"group_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","required":true},"token_user_display_name":{"type":"TypeString","optional":true},"token_user_principal_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_servicebus_queue":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"name":{"type":"TypeString","required":true,"forceNew":true},"property_columns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"queue_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"format":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"system_property_columns":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_servicebus_topic":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"name":{"type":"TypeString","required":true,"forceNew":true},"property_columns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"format":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"system_property_columns":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"topic_name":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_synapse":{"schema":{"database":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","required":true,"forceNew":true},"user":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_table":{"schema":{"batch_size":{"type":"TypeInt","required":true},"columns_to_remove":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"row_key":{"type":"TypeString","required":true},"storage_account_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_reference_input_blob":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"date_format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"path_pattern":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"storage_account_key":{"type":"TypeString","optional":true},"storage_account_name":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"time_format":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_reference_input_mssql":{"schema":{"database":{"type":"TypeString","required":true},"delta_snapshot_query":{"type":"TypeString","optional":true},"full_snapshot_query":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"refresh_interval_duration":{"type":"TypeString","optional":true},"refresh_type":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","optional":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_stream_input_blob":{"schema":{"date_format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"path_pattern":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"storage_account_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"time_format":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_stream_input_eventhub":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"eventhub_consumer_group_name":{"type":"TypeString","optional":true},"eventhub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_stream_input_eventhub_v2":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"eventhub_consumer_group_name":{"type":"TypeString","optional":true},"eventhub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_stream_input_iothub":{"schema":{"endpoint":{"type":"TypeString","required":true},"eventhub_consumer_group_name":{"type":"TypeString","required":true},"iothub_namespace":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"shared_access_policy_key":{"type":"TypeString","required":true,"forceNew":true},"shared_access_policy_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet":{"schema":{"address_prefixes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"delegation":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"service_delegation":{"type":"TypeList","required":true,"elem":{"schema":{"actions":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true}}},"maxItems":1}}}},"enforce_private_link_endpoint_network_policies":{"type":"TypeBool","optional":true,"computed":true},"enforce_private_link_service_network_policies":{"type":"TypeBool","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_network_policies_enabled":{"type":"TypeBool","optional":true,"computed":true},"private_link_service_network_policies_enabled":{"type":"TypeBool","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_endpoint_policy_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"service_endpoints":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"virtual_network_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet_nat_gateway_association":{"schema":{"nat_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet_network_security_group_association":{"schema":{"network_security_group_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet_route_table_association":{"schema":{"route_table_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet_service_endpoint_storage_policy":{"schema":{"definition":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"service":{"type":"TypeString","optional":true,"default":"Microsoft.Storage"},"service_resources":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":2,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription":{"schema":{"alias":{"type":"TypeString","optional":true,"description":"The Alias Name of the subscription. If omitted a new UUID will be generated for this property.","computed":true,"forceNew":true},"billing_scope_id":{"type":"TypeString","optional":true},"subscription_id":{"type":"TypeString","optional":true,"description":"The GUID of the Subscription.","computed":true,"forceNew":true},"subscription_name":{"type":"TypeString","required":true,"description":"The Display Name for the Subscription."},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","description":"The Tenant ID to which the subscription belongs","computed":true},"workload":{"type":"TypeString","optional":true,"description":"The workload type for the Subscription. Possible values are `Production` (default) and `DevTest`.","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_cost_management_export":{"schema":{"active":{"type":"TypeBool","optional":true,"default":true},"export_data_options":{"type":"TypeList","required":true,"elem":{"schema":{"time_frame":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"export_data_storage_location":{"type":"TypeList","required":true,"elem":{"schema":{"container_id":{"type":"TypeString","required":true,"forceNew":true},"root_folder_path":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recurrence_period_end_date":{"type":"TypeString","required":true},"recurrence_period_start_date":{"type":"TypeString","required":true},"recurrence_type":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_cost_management_view":{"schema":{"accumulated":{"type":"TypeBool","required":true,"forceNew":true},"chart_type":{"type":"TypeString","required":true},"dataset":{"type":"TypeList","required":true,"elem":{"schema":{"aggregation":{"type":"TypeSet","required":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}}},"granularity":{"type":"TypeString","required":true},"grouping":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"sorting":{"type":"TypeList","optional":true,"elem":{"schema":{"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"display_name":{"type":"TypeString","required":true},"kpi":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"pivot":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"report_type":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true},"timeframe":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_policy_assignment":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enforce":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"policy_definition_reference_id":{"type":"TypeString","optional":true}}}},"not_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","computed":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"value":{"type":"TypeString","required":true}}}},"parameters":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true,"forceNew":true},"resource_selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","required":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","required":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}}}}},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_policy_exemption":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"exemption_category":{"type":"TypeString","required":true},"expires_on":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_assignment_id":{"type":"TypeString","required":true,"forceNew":true},"policy_definition_reference_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_policy_remediation":{"schema":{"failure_percentage":{"type":"TypeFloat","optional":true},"location_filters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"parallel_deployments":{"type":"TypeInt","optional":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_id":{"type":"TypeString","optional":true},"policy_definition_reference_id":{"type":"TypeString","optional":true},"resource_count":{"type":"TypeInt","optional":true},"resource_discovery_mode":{"type":"TypeString","optional":true,"default":"ExistingNonCompliant"},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_template_deployment":{"schema":{"debug_level":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_content":{"type":"TypeString","computed":true},"parameters_content":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_content":{"type":"TypeString","optional":true,"computed":true},"template_spec_version_id":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_synapse_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_integration_runtime_azure":{"schema":{"compute_type":{"type":"TypeString","optional":true,"default":"General"},"core_count":{"type":"TypeInt","optional":true,"default":8},"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"time_to_live_min":{"type":"TypeInt","optional":true,"default":0}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_integration_runtime_self_hosted":{"schema":{"authorization_key_primary":{"type":"TypeString","computed":true},"authorization_key_secondary":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_linked_service":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"integration_runtime":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true},"type_properties_json":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_managed_private_endpoint":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"subresource_name":{"type":"TypeString","required":true,"forceNew":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_synapse_private_link_hub":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_role_assignment":{"schema":{"principal_id":{"type":"TypeString","required":true,"forceNew":true},"role_name":{"type":"TypeString","required":true,"forceNew":true},"synapse_spark_pool_id":{"type":"TypeString","optional":true,"forceNew":true},"synapse_workspace_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_synapse_spark_pool":{"schema":{"auto_pause":{"type":"TypeList","optional":true,"elem":{"schema":{"delay_in_minutes":{"type":"TypeInt","required":true}}},"maxItems":1},"auto_scale":{"type":"TypeList","optional":true,"elem":{"schema":{"max_node_count":{"type":"TypeInt","required":true},"min_node_count":{"type":"TypeInt","required":true}}},"maxItems":1},"cache_size":{"type":"TypeInt","optional":true},"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_executor_allocation_enabled":{"type":"TypeBool","optional":true,"default":false},"library_requirement":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"filename":{"type":"TypeString","required":true}}},"maxItems":1},"max_executors":{"type":"TypeInt","optional":true},"min_executors":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_count":{"type":"TypeInt","optional":true},"node_size":{"type":"TypeString","required":true},"node_size_family":{"type":"TypeString","required":true},"session_level_packages_enabled":{"type":"TypeBool","optional":true,"default":false},"spark_config":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"filename":{"type":"TypeString","required":true}}},"maxItems":1},"spark_events_folder":{"type":"TypeString","optional":true,"default":"/events"},"spark_log_folder":{"type":"TypeString","optional":true,"default":"/logs"},"spark_version":{"type":"TypeString","optional":true,"default":"2.4"},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool":{"schema":{"collation":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default","forceNew":true},"data_encrypted":{"type":"TypeBool","optional":true},"geo_backup_policy_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_database_id":{"type":"TypeString","optional":true,"forceNew":true},"restore":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"point_in_time":{"type":"TypeString","required":true,"forceNew":true},"source_database_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"sku_name":{"type":"TypeString","required":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_extended_auditing_policy":{"schema":{"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sql_pool_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_access_key_is_secondary":{"type":"TypeBool","optional":true,"default":false},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_security_alert_policy":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"policy_state":{"type":"TypeString","required":true},"retention_days":{"type":"TypeInt","optional":true,"default":0},"sql_pool_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_vulnerability_assessment":{"schema":{"recurring_scans":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email_subscription_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"sql_pool_security_alert_policy_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_container_path":{"type":"TypeString","required":true},"storage_container_sas_key":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_vulnerability_assessment_baseline":{"schema":{"baseline":{"type":"TypeList","optional":true,"elem":{"schema":{"result":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","required":true},"rule_name":{"type":"TypeString","required":true},"sql_pool_vulnerability_assessment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_workload_classifier":{"schema":{"context":{"type":"TypeString","optional":true},"end_time":{"type":"TypeString","optional":true},"importance":{"type":"TypeString","optional":true},"label":{"type":"TypeString","optional":true},"member_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"start_time":{"type":"TypeString","optional":true},"workload_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_workload_group":{"schema":{"importance":{"type":"TypeString","optional":true,"default":"normal"},"max_resource_percent":{"type":"TypeInt","required":true},"max_resource_percent_per_request":{"type":"TypeFloat","optional":true,"default":3},"min_resource_percent":{"type":"TypeInt","required":true},"min_resource_percent_per_request":{"type":"TypeFloat","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query_execution_timeout_in_seconds":{"type":"TypeInt","optional":true},"sql_pool_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace":{"schema":{"aad_admin":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"azure_devops_repo":{"type":"TypeList","optional":true,"elem":{"schema":{"account_name":{"type":"TypeString","required":true},"branch_name":{"type":"TypeString","required":true},"last_commit_id":{"type":"TypeString","optional":true},"project_name":{"type":"TypeString","required":true},"repository_name":{"type":"TypeString","required":true},"root_folder":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"compute_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"connectivity_endpoints":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_name":{"type":"TypeString","optional":true,"default":"cmk"},"key_versionless_id":{"type":"TypeString","required":true}}},"maxItems":1},"data_exfiltration_protection_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"github_repo":{"type":"TypeList","optional":true,"elem":{"schema":{"account_name":{"type":"TypeString","required":true},"branch_name":{"type":"TypeString","required":true},"git_url":{"type":"TypeString","optional":true},"last_commit_id":{"type":"TypeString","optional":true},"repository_name":{"type":"TypeString","required":true},"root_folder":{"type":"TypeString","required":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"linking_allowed_for_aad_tenant_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_resource_group_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_virtual_network_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"purview_id":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sql_aad_admin":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"sql_administrator_login":{"type":"TypeString","optional":true,"forceNew":true},"sql_administrator_login_password":{"type":"TypeString","optional":true},"sql_identity_control_enabled":{"type":"TypeBool","optional":true},"storage_data_lake_gen2_filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_aad_admin":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"synapse_workspace_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_extended_auditing_policy":{"schema":{"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_access_key_is_secondary":{"type":"TypeBool","optional":true,"default":false},"storage_endpoint":{"type":"TypeString","optional":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_key":{"schema":{"active":{"type":"TypeBool","required":true},"customer_managed_key_name":{"type":"TypeString","required":true},"customer_managed_key_versionless_id":{"type":"TypeString","optional":true},"synapse_workspace_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_security_alert_policy":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"policy_state":{"type":"TypeString","required":true},"retention_days":{"type":"TypeInt","optional":true,"default":0},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_sql_aad_admin":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"synapse_workspace_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_vulnerability_assessment":{"schema":{"recurring_scans":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email_subscription_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_container_path":{"type":"TypeString","required":true},"storage_container_sas_key":{"type":"TypeString","optional":true},"workspace_security_alert_policy_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_template_deployment":{"schema":{"deployment_mode":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outputs":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"parameters_body":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"template_body":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_tenant_template_deployment":{"schema":{"debug_level":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_content":{"type":"TypeString","computed":true},"parameters_content":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_content":{"type":"TypeString","optional":true,"computed":true},"template_spec_version_id":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_traffic_manager_azure_endpoint":{"schema":{"custom_header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"enabled":{"type":"TypeBool","optional":true,"default":true},"geo_mappings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"computed":true},"profile_id":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"first":{"type":"TypeString","required":true},"last":{"type":"TypeString","optional":true},"scope":{"type":"TypeInt","optional":true}}}},"target_resource_id":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_traffic_manager_external_endpoint":{"schema":{"custom_header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"enabled":{"type":"TypeBool","optional":true,"default":true},"endpoint_location":{"type":"TypeString","optional":true,"computed":true},"geo_mappings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"computed":true},"profile_id":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"first":{"type":"TypeString","required":true},"last":{"type":"TypeString","optional":true},"scope":{"type":"TypeInt","optional":true}}}},"target":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_traffic_manager_nested_endpoint":{"schema":{"custom_header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"enabled":{"type":"TypeBool","optional":true,"default":true},"endpoint_location":{"type":"TypeString","optional":true,"computed":true},"geo_mappings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"minimum_child_endpoints":{"type":"TypeInt","required":true},"minimum_required_child_endpoints_ipv4":{"type":"TypeInt","optional":true},"minimum_required_child_endpoints_ipv6":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"computed":true},"profile_id":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"first":{"type":"TypeString","required":true},"last":{"type":"TypeString","optional":true},"scope":{"type":"TypeInt","optional":true}}}},"target_resource_id":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_traffic_manager_profile":{"schema":{"dns_config":{"type":"TypeList","required":true,"elem":{"schema":{"relative_name":{"type":"TypeString","required":true,"forceNew":true},"ttl":{"type":"TypeInt","required":true}}},"maxItems":1},"fqdn":{"type":"TypeString","computed":true},"max_return":{"type":"TypeInt","optional":true},"monitor_config":{"type":"TypeList","required":true,"elem":{"schema":{"custom_header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"expected_status_code_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"interval_in_seconds":{"type":"TypeInt","optional":true,"default":30},"path":{"type":"TypeString","optional":true},"port":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":10},"tolerated_number_of_failures":{"type":"TypeInt","optional":true,"default":3}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"profile_status":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"traffic_routing_method":{"type":"TypeString","required":true},"traffic_view_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_user_assigned_identity":{"schema":{"client_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"principal_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_video_analyzer":{"schema":{"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_video_analyzer_edge_module":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"video_analyzer_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_virtual_desktop_application":{"schema":{"application_group_id":{"type":"TypeString","required":true,"forceNew":true},"command_line_argument_policy":{"type":"TypeString","required":true},"command_line_arguments":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true,"computed":true},"icon_index":{"type":"TypeInt","optional":true},"icon_path":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"path":{"type":"TypeString","required":true},"show_in_portal":{"type":"TypeBool","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_application_group":{"schema":{"default_desktop_display_name":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true},"host_pool_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_host_pool":{"schema":{"custom_rdp_properties":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true},"load_balancer_type":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maximum_sessions_allowed":{"type":"TypeInt","optional":true,"default":999999},"name":{"type":"TypeString","required":true,"forceNew":true},"personal_desktop_assignment_type":{"type":"TypeString","optional":true,"forceNew":true},"preferred_app_group_type":{"type":"TypeString","optional":true,"default":"Desktop","description":"Preferred App Group type to display","forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scheduled_agent_updates":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"hour_of_day":{"type":"TypeInt","required":true}}},"maxItems":2},"timezone":{"type":"TypeString","optional":true,"default":"UTC"},"use_session_host_timezone":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"start_vm_on_connect":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true},"validate_environment":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_host_pool_registration_info":{"schema":{"expiration_date":{"type":"TypeString","required":true},"hostpool_id":{"type":"TypeString","required":true,"forceNew":true},"token":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_desktop_scaling_plan":{"schema":{"description":{"type":"TypeString","optional":true},"exclusion_tag":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true},"host_pool":{"type":"TypeList","optional":true,"elem":{"schema":{"hostpool_id":{"type":"TypeString","required":true},"scaling_plan_enabled":{"type":"TypeBool","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days_of_week":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"off_peak_load_balancing_algorithm":{"type":"TypeString","required":true},"off_peak_start_time":{"type":"TypeString","required":true},"peak_load_balancing_algorithm":{"type":"TypeString","required":true},"peak_start_time":{"type":"TypeString","required":true},"ramp_down_capacity_threshold_percent":{"type":"TypeInt","required":true},"ramp_down_force_logoff_users":{"type":"TypeBool","required":true},"ramp_down_load_balancing_algorithm":{"type":"TypeString","required":true},"ramp_down_minimum_hosts_percent":{"type":"TypeInt","required":true},"ramp_down_notification_message":{"type":"TypeString","required":true},"ramp_down_start_time":{"type":"TypeString","required":true},"ramp_down_stop_hosts_when":{"type":"TypeString","required":true},"ramp_down_wait_time_minutes":{"type":"TypeInt","required":true},"ramp_up_capacity_threshold_percent":{"type":"TypeInt","optional":true},"ramp_up_load_balancing_algorithm":{"type":"TypeString","required":true},"ramp_up_minimum_hosts_percent":{"type":"TypeInt","optional":true},"ramp_up_start_time":{"type":"TypeString","required":true}}},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"time_zone":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_workspace":{"schema":{"description":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_workspace_application_group_association":{"schema":{"application_group_id":{"type":"TypeString","required":true,"forceNew":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_hub":{"schema":{"address_prefix":{"type":"TypeString","optional":true,"forceNew":true},"default_route_table_id":{"type":"TypeString","computed":true},"hub_routing_preference":{"type":"TypeString","optional":true,"default":"ExpressRoute"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route":{"type":"TypeSet","optional":true,"elem":{"schema":{"address_prefixes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"next_hop_ip_address":{"type":"TypeString","required":true}}}},"sku":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_router_asn":{"type":"TypeInt","computed":true},"virtual_router_auto_scale_min_capacity":{"type":"TypeInt","optional":true,"default":2},"virtual_router_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_wan_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_hub_bgp_connection":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"peer_asn":{"type":"TypeInt","required":true,"forceNew":true},"peer_ip":{"type":"TypeString","required":true,"forceNew":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_connection_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_hub_connection":{"schema":{"internet_security_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"remote_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"routing":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"associated_route_table_id":{"type":"TypeString","optional":true,"computed":true},"propagated_route_table":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"labels":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"route_table_ids":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"static_vnet_route":{"type":"TypeList","optional":true,"elem":{"schema":{"address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","optional":true},"next_hop_ip_address":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_hub_ip":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","optional":true},"private_ip_allocation_method":{"type":"TypeString","optional":true,"default":"Dynamic"},"public_ip_address_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_hub_route_table":{"schema":{"labels":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"route":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"destinations":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"destinations_type":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"next_hop":{"type":"TypeString","required":true},"next_hop_type":{"type":"TypeString","optional":true,"default":"ResourceId"}}}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_hub_route_table_route":{"schema":{"destinations":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"destinations_type":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"next_hop":{"type":"TypeString","required":true},"next_hop_type":{"type":"TypeString","optional":true,"default":"ResourceId"},"route_table_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_hub_security_partner_provider":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"security_provider_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_machine":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","required":true,"forceNew":true}}},"maxItems":1},"availability_set_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"storage_uri":{"type":"TypeString","required":true}}},"maxItems":1},"delete_data_disks_on_termination":{"type":"TypeBool","optional":true,"default":false},"delete_os_disk_on_termination":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"principal_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"os_profile":{"type":"TypeSet","optional":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true},"admin_username":{"type":"TypeString","required":true},"computer_name":{"type":"TypeString","required":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"os_profile_linux_config":{"type":"TypeSet","optional":true,"elem":{"schema":{"disable_password_authentication":{"type":"TypeBool","required":true},"ssh_keys":{"type":"TypeList","optional":true,"elem":{"schema":{"key_data":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}}}}},"maxItems":1},"os_profile_secrets":{"type":"TypeList","optional":true,"elem":{"schema":{"source_vault_id":{"type":"TypeString","required":true},"vault_certificates":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_store":{"type":"TypeString","optional":true},"certificate_url":{"type":"TypeString","required":true}}}}}}},"os_profile_windows_config":{"type":"TypeSet","optional":true,"elem":{"schema":{"additional_unattend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"component":{"type":"TypeString","required":true},"content":{"type":"TypeString","required":true},"pass":{"type":"TypeString","required":true},"setting_name":{"type":"TypeString","required":true}}}},"enable_automatic_upgrades":{"type":"TypeBool","optional":true,"default":false},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":false},"timezone":{"type":"TypeString","optional":true,"forceNew":true},"winrm":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true}}}}}},"maxItems":1},"plan":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"product":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true}}},"maxItems":1},"primary_network_interface_id":{"type":"TypeString","optional":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_data_disk":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"computed":true},"create_option":{"type":"TypeString","required":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"lun":{"type":"TypeInt","required":true},"managed_disk_id":{"type":"TypeString","optional":true,"computed":true},"managed_disk_type":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"vhd_uri":{"type":"TypeString","optional":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"storage_image_reference":{"type":"TypeSet","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true,"forceNew":true},"offer":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","optional":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"storage_os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"computed":true},"create_option":{"type":"TypeString","required":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"image_uri":{"type":"TypeString","optional":true},"managed_disk_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_disk_type":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","optional":true,"computed":true},"vhd_uri":{"type":"TypeString","optional":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vm_size":{"type":"TypeString","required":true},"zones":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_machine_data_disk_attachment":{"schema":{"caching":{"type":"TypeString","required":true},"create_option":{"type":"TypeString","optional":true,"default":"Attach","forceNew":true},"lun":{"type":"TypeInt","required":true,"forceNew":true},"managed_disk_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_machine_extension":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"failure_suppression_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"publisher":{"type":"TypeString","required":true,"forceNew":true},"settings":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_machine_packet_capture":{"schema":{"filter":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"local_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"local_port":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true},"remote_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"remote_port":{"type":"TypeString","optional":true,"forceNew":true}}}},"maximum_bytes_per_packet":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"maximum_bytes_per_session":{"type":"TypeInt","optional":true,"default":1073741824,"forceNew":true},"maximum_capture_duration_in_seconds":{"type":"TypeInt","optional":true,"default":18000,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_id":{"type":"TypeString","required":true,"forceNew":true},"storage_location":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"file_path":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_path":{"type":"TypeString","computed":true}}},"maxItems":1},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_virtual_machine_scale_set":{"schema":{"automatic_os_upgrade":{"type":"TypeBool","optional":true,"default":false},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"storage_uri":{"type":"TypeString","required":true}}},"maxItems":1},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extension":{"type":"TypeSet","optional":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"provision_after_extensions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true}}}},"health_probe_id":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeSet","required":true,"elem":{"schema":{"accelerated_networking":{"type":"TypeBool","optional":true},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":20},"load_balancer_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","required":true},"public_ip_address_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","required":true},"idle_timeout":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"subnet_id":{"type":"TypeString","required":true}}}},"ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"network_security_group_id":{"type":"TypeString","optional":true},"primary":{"type":"TypeBool","required":true}}}},"os_profile":{"type":"TypeList","required":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true},"admin_username":{"type":"TypeString","required":true},"computer_name_prefix":{"type":"TypeString","required":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true}}},"maxItems":1},"os_profile_linux_config":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"disable_password_authentication":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"ssh_keys":{"type":"TypeList","optional":true,"elem":{"schema":{"key_data":{"type":"TypeString","optional":true},"path":{"type":"TypeString","required":true}}}}}},"maxItems":1},"os_profile_secrets":{"type":"TypeSet","optional":true,"elem":{"schema":{"source_vault_id":{"type":"TypeString","required":true},"vault_certificates":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_store":{"type":"TypeString","optional":true},"certificate_url":{"type":"TypeString","required":true}}}}}}},"os_profile_windows_config":{"type":"TypeSet","optional":true,"elem":{"schema":{"additional_unattend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"component":{"type":"TypeString","required":true},"content":{"type":"TypeString","required":true},"pass":{"type":"TypeString","required":true},"setting_name":{"type":"TypeString","required":true}}}},"enable_automatic_upgrades":{"type":"TypeBool","optional":true},"provision_vm_agent":{"type":"TypeBool","optional":true},"winrm":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true}}}}}},"maxItems":1},"overprovision":{"type":"TypeBool","optional":true,"default":true},"plan":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"product":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true}}},"maxItems":1},"priority":{"type":"TypeString","optional":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rolling_upgrade_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"max_batch_instance_percent":{"type":"TypeInt","optional":true,"default":20},"max_unhealthy_instance_percent":{"type":"TypeInt","optional":true,"default":20},"max_unhealthy_upgraded_instance_percent":{"type":"TypeInt","optional":true,"default":20},"pause_time_between_batches":{"type":"TypeString","optional":true,"default":"PT0S"}}},"maxItems":1},"single_placement_group":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true},"tier":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"storage_profile_data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"computed":true},"create_option":{"type":"TypeString","required":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"lun":{"type":"TypeInt","required":true},"managed_disk_type":{"type":"TypeString","optional":true,"computed":true}}}},"storage_profile_image_reference":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"offer":{"type":"TypeString","optional":true},"publisher":{"type":"TypeString","optional":true},"sku":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"storage_profile_os_disk":{"type":"TypeSet","required":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"computed":true},"create_option":{"type":"TypeString","required":true},"image":{"type":"TypeString","optional":true},"managed_disk_type":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","optional":true},"os_type":{"type":"TypeString","optional":true},"vhd_containers":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"upgrade_policy_mode":{"type":"TypeString","required":true},"zones":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_machine_scale_set_extension":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true,"default":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"failure_suppression_enabled":{"type":"TypeBool","optional":true,"default":false},"force_update_tag":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"provision_after_extensions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true,"forceNew":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true,"forceNew":true},"type_handler_version":{"type":"TypeString","required":true},"virtual_machine_scale_set_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_machine_scale_set_packet_capture":{"schema":{"filter":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"local_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"local_port":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true},"remote_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"remote_port":{"type":"TypeString","optional":true,"forceNew":true}}}},"machine_scope":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"exclude_instance_ids":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"include_instance_ids":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"maximum_bytes_per_packet":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"maximum_bytes_per_session":{"type":"TypeInt","optional":true,"default":1073741824,"forceNew":true},"maximum_capture_duration_in_seconds":{"type":"TypeInt","optional":true,"default":18000,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_id":{"type":"TypeString","required":true,"forceNew":true},"storage_location":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"file_path":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_path":{"type":"TypeString","computed":true}}},"maxItems":1},"virtual_machine_scale_set_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_virtual_network":{"schema":{"address_space":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"bgp_community":{"type":"TypeString","optional":true},"ddos_protection_plan":{"type":"TypeList","optional":true,"elem":{"schema":{"enable":{"type":"TypeBool","required":true},"id":{"type":"TypeString","required":true}}},"maxItems":1},"dns_servers":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"enforcement":{"type":"TypeString","required":true}}},"maxItems":1},"flow_timeout_in_minutes":{"type":"TypeInt","optional":true},"guid":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"security_group":{"type":"TypeString","optional":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_network_dns_servers":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_network_gateway":{"schema":{"active_active":{"type":"TypeBool","optional":true,"computed":true},"bgp_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","optional":true},"peer_weight":{"type":"TypeInt","optional":true},"peering_addresses":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"apipa_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"default_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_name":{"type":"TypeString","optional":true,"computed":true},"tunnel_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":2,"minItems":1}}},"maxItems":1},"custom_route":{"type":"TypeList","optional":true,"elem":{"schema":{"address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"default_local_network_gateway_id":{"type":"TypeString","optional":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_bgp":{"type":"TypeBool","optional":true,"computed":true},"generation":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true,"default":"vnetGatewayConfig"},"private_ip_address_allocation":{"type":"TypeString","optional":true,"default":"Dynamic"},"public_ip_address_id":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":3},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true},"vpn_client_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"aad_audience":{"type":"TypeString","optional":true},"aad_issuer":{"type":"TypeString","optional":true},"aad_tenant":{"type":"TypeString","optional":true},"address_space":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"radius_server_address":{"type":"TypeString","optional":true},"radius_server_secret":{"type":"TypeString","optional":true},"revoked_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"thumbprint":{"type":"TypeString","required":true}}}},"root_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"public_cert_data":{"type":"TypeString","required":true}}}},"vpn_auth_types":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"},"maxItems":3},"vpn_client_protocols":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"vpn_type":{"type":"TypeString","optional":true,"default":"RouteBased","forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_network_gateway_connection":{"schema":{"authorization_key":{"type":"TypeString","optional":true},"connection_mode":{"type":"TypeString","optional":true,"default":"Default","forceNew":true},"connection_protocol":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_bgp_addresses":{"type":"TypeList","optional":true,"elem":{"schema":{"primary":{"type":"TypeString","required":true},"secondary":{"type":"TypeString","optional":true}}},"maxItems":1},"dpd_timeout_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"egress_nat_rule_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enable_bgp":{"type":"TypeBool","optional":true,"computed":true},"express_route_circuit_id":{"type":"TypeString","optional":true,"forceNew":true},"express_route_gateway_bypass":{"type":"TypeBool","optional":true,"computed":true},"ingress_nat_rule_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"ipsec_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"dh_group":{"type":"TypeString","required":true},"ike_encryption":{"type":"TypeString","required":true},"ike_integrity":{"type":"TypeString","required":true},"ipsec_encryption":{"type":"TypeString","required":true},"ipsec_integrity":{"type":"TypeString","required":true},"pfs_group":{"type":"TypeString","required":true},"sa_datasize":{"type":"TypeInt","optional":true,"computed":true},"sa_lifetime":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"local_azure_ip_address_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"local_network_gateway_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"peer_virtual_network_gateway_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_weight":{"type":"TypeInt","optional":true,"computed":true},"shared_key":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"traffic_selector_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"local_address_cidrs":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"remote_address_cidrs":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"type":{"type":"TypeString","required":true,"forceNew":true},"use_policy_based_traffic_selectors":{"type":"TypeBool","optional":true,"computed":true},"virtual_network_gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_network_gateway_nat_rule":{"schema":{"external_mapping":{"type":"TypeList","required":true,"elem":{"schema":{"address_space":{"type":"TypeString","required":true},"port_range":{"type":"TypeString","optional":true}}}},"internal_mapping":{"type":"TypeList","required":true,"elem":{"schema":{"address_space":{"type":"TypeString","required":true},"port_range":{"type":"TypeString","optional":true}}}},"ip_configuration_id":{"type":"TypeString","optional":true},"mode":{"type":"TypeString","optional":true,"default":"EgressSnat","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"default":"Static","forceNew":true},"virtual_network_gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_network_peering":{"schema":{"allow_forwarded_traffic":{"type":"TypeBool","optional":true,"default":false},"allow_gateway_transit":{"type":"TypeBool","optional":true,"default":false},"allow_virtual_network_access":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"remote_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"triggers":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"use_remote_gateways":{"type":"TypeBool","optional":true,"default":false},"virtual_network_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_wan":{"schema":{"allow_branch_to_branch_traffic":{"type":"TypeBool","optional":true,"default":true},"disable_vpn_encryption":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"office365_local_breakout_category":{"type":"TypeString","optional":true,"default":"None"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","optional":true,"default":"Standard"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vmware_cluster":{"schema":{"cluster_node_count":{"type":"TypeInt","required":true},"cluster_number":{"type":"TypeInt","computed":true},"hosts":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"vmware_cloud_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":300,"read":5,"delete":300,"update":300}},"azurerm_vmware_express_route_authorization":{"schema":{"express_route_authorization_id":{"type":"TypeString","computed":true},"express_route_authorization_key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_cloud_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_vmware_netapp_volume_attachment":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"netapp_volume_id":{"type":"TypeString","required":true,"forceNew":true},"vmware_cluster_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_vmware_private_cloud":{"schema":{"circuit":{"type":"TypeList","computed":true,"elem":{"schema":{"express_route_id":{"type":"TypeString","computed":true},"express_route_private_peering_id":{"type":"TypeString","computed":true},"primary_subnet_cidr":{"type":"TypeString","computed":true},"secondary_subnet_cidr":{"type":"TypeString","computed":true}}}},"hcx_cloud_manager_endpoint":{"type":"TypeString","computed":true},"internet_connection_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"management_cluster":{"type":"TypeList","required":true,"elem":{"schema":{"hosts":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeInt","computed":true},"size":{"type":"TypeInt","required":true}}},"maxItems":1},"management_subnet_cidr":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_subnet_cidr":{"type":"TypeString","required":true,"forceNew":true},"nsxt_certificate_thumbprint":{"type":"TypeString","computed":true},"nsxt_manager_endpoint":{"type":"TypeString","computed":true},"nsxt_password":{"type":"TypeString","optional":true,"forceNew":true},"provisioning_subnet_cidr":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vcenter_certificate_thumbprint":{"type":"TypeString","computed":true},"vcenter_password":{"type":"TypeString","optional":true,"forceNew":true},"vcsa_endpoint":{"type":"TypeString","computed":true},"vmotion_subnet_cidr":{"type":"TypeString","computed":true}},"timeouts":{"create":600,"read":5,"delete":600,"update":600}},"azurerm_voice_services_communications_gateway":{"schema":{"api_bridge":{"type":"TypeString","optional":true},"auto_generated_domain_name_label_scope":{"type":"TypeString","optional":true,"default":"TenantReuse","forceNew":true},"codecs":{"type":"TypeString","required":true},"connectivity":{"type":"TypeString","required":true,"forceNew":true},"e911_type":{"type":"TypeString","required":true},"emergency_dial_strings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"microsoft_teams_voicemail_pilot_number":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"on_prem_mcp_enabled":{"type":"TypeBool","optional":true},"platforms":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_location":{"type":"TypeSet","required":true,"elem":{"schema":{"allowed_media_source_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"allowed_signaling_source_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"esrp_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true},"operator_addresses":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_voice_services_communications_gateway_test_line":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true},"purpose":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"voice_services_communications_gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vpn_gateway":{"schema":{"bgp_route_translation_for_nat_enabled":{"type":"TypeBool","optional":true,"default":false},"bgp_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","required":true,"forceNew":true},"bgp_peering_address":{"type":"TypeString","computed":true},"instance_0_bgp_peering_address":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"custom_ips":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"default_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_id":{"type":"TypeString","computed":true},"tunnel_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"instance_1_bgp_peering_address":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"custom_ips":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"default_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_id":{"type":"TypeString","computed":true},"tunnel_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"peer_weight":{"type":"TypeInt","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_preference":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"scale_unit":{"type":"TypeInt","optional":true,"default":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_vpn_gateway_connection":{"schema":{"internet_security_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"remote_vpn_site_id":{"type":"TypeString","required":true,"forceNew":true},"routing":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"associated_route_table":{"type":"TypeString","required":true},"inbound_route_map_id":{"type":"TypeString","optional":true},"outbound_route_map_id":{"type":"TypeString","optional":true},"propagated_route_table":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"labels":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"route_table_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"traffic_selector_policy":{"type":"TypeSet","optional":true,"elem":{"schema":{"local_address_ranges":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"remote_address_ranges":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}},"vpn_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"vpn_link":{"type":"TypeList","required":true,"elem":{"schema":{"bandwidth_mbps":{"type":"TypeInt","optional":true,"default":10},"bgp_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"connection_mode":{"type":"TypeString","optional":true,"default":"Default"},"custom_bgp_address":{"type":"TypeSet","optional":true,"elem":{"schema":{"ip_address":{"type":"TypeString","required":true},"ip_configuration_id":{"type":"TypeString","required":true}}}},"egress_nat_rule_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"ingress_nat_rule_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"ipsec_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"dh_group":{"type":"TypeString","required":true},"encryption_algorithm":{"type":"TypeString","required":true},"ike_encryption_algorithm":{"type":"TypeString","required":true},"ike_integrity_algorithm":{"type":"TypeString","required":true},"integrity_algorithm":{"type":"TypeString","required":true},"pfs_group":{"type":"TypeString","required":true},"sa_data_size_kb":{"type":"TypeInt","required":true},"sa_lifetime_sec":{"type":"TypeInt","required":true}}},"minItems":1},"local_azure_ip_address_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"policy_based_traffic_selector_enabled":{"type":"TypeBool","optional":true,"default":false},"protocol":{"type":"TypeString","optional":true,"default":"IKEv2"},"ratelimit_enabled":{"type":"TypeBool","optional":true,"default":false},"route_weight":{"type":"TypeInt","optional":true,"default":0},"shared_key":{"type":"TypeString","optional":true},"vpn_site_link_id":{"type":"TypeString","required":true,"forceNew":true}}},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vpn_gateway_nat_rule":{"schema":{"external_address_space_mappings":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"external_mapping":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"address_space":{"type":"TypeString","required":true},"port_range":{"type":"TypeString","optional":true}}}},"internal_address_space_mappings":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"internal_mapping":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"address_space":{"type":"TypeString","required":true},"port_range":{"type":"TypeString","optional":true}}}},"ip_configuration_id":{"type":"TypeString","optional":true},"mode":{"type":"TypeString","optional":true,"default":"EgressSnat","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"default":"Static","forceNew":true},"vpn_gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vpn_server_configuration":{"schema":{"azure_active_directory_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"audience":{"type":"TypeString","required":true},"issuer":{"type":"TypeString","required":true},"tenant":{"type":"TypeString","required":true}}},"minItems":1},"client_revoked_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"thumbprint":{"type":"TypeString","required":true}}}},"client_root_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"public_cert_data":{"type":"TypeString","required":true}}}},"ipsec_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"dh_group":{"type":"TypeString","required":true},"ike_encryption":{"type":"TypeString","required":true},"ike_integrity":{"type":"TypeString","required":true},"ipsec_encryption":{"type":"TypeString","required":true},"ipsec_integrity":{"type":"TypeString","required":true},"pfs_group":{"type":"TypeString","required":true},"sa_data_size_kilobytes":{"type":"TypeInt","required":true},"sa_lifetime_seconds":{"type":"TypeInt","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"radius":{"type":"TypeList","optional":true,"elem":{"schema":{"client_root_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"thumbprint":{"type":"TypeString","required":true}}}},"server":{"type":"TypeList","optional":true,"elem":{"schema":{"address":{"type":"TypeString","required":true},"score":{"type":"TypeInt","required":true},"secret":{"type":"TypeString","required":true}}}},"server_root_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"public_cert_data":{"type":"TypeString","required":true}}}}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vpn_authentication_types":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"vpn_protocols":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_vpn_server_configuration_policy_group":{"schema":{"is_default":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"priority":{"type":"TypeInt","optional":true,"default":0},"vpn_server_configuration_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vpn_site":{"schema":{"address_cidrs":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"device_model":{"type":"TypeString","optional":true},"device_vendor":{"type":"TypeString","optional":true},"link":{"type":"TypeList","optional":true,"elem":{"schema":{"bgp":{"type":"TypeList","optional":true,"elem":{"schema":{"asn":{"type":"TypeInt","required":true},"peering_address":{"type":"TypeString","required":true}}},"maxItems":1},"fqdn":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"provider_name":{"type":"TypeString","optional":true},"speed_in_mbps":{"type":"TypeInt","optional":true,"default":0}}},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"o365_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"traffic_category":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allow_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"default_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"optimize_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_wan_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_app_active_slot":{"schema":{"last_successful_swap":{"type":"TypeString","description":"The timestamp of the last successful swap with `Production`","computed":true},"overwrite_network_config":{"type":"TypeBool","optional":true,"default":true,"description":"The swap action should overwrite the Production slot's network configuration with the configuration from this slot. Defaults to `true`.","forceNew":true},"slot_id":{"type":"TypeString","required":true,"description":"The ID of the Slot to swap with `Production`."}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_web_app_hybrid_connection":{"schema":{"hostname":{"type":"TypeString","required":true,"description":"The hostname of the endpoint."},"namespace_name":{"type":"TypeString","description":"The name of the Relay Namespace.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port to use for the endpoint"},"relay_id":{"type":"TypeString","required":true,"description":"The ID of the Relay Hybrid Connection to use.","forceNew":true},"relay_name":{"type":"TypeString","description":"The name of the Relay in use.","computed":true},"send_key_name":{"type":"TypeString","optional":true,"default":"RootManageSharedAccessKey","description":"The name of the Relay key with `Send` permission to use. Defaults to `RootManageSharedAccessKey`"},"send_key_value":{"type":"TypeString","description":"The Primary Access Key for the `send_key_name`","computed":true},"service_bus_namespace":{"type":"TypeString","description":"The Service Bus Namespace.","computed":true},"service_bus_suffix":{"type":"TypeString","description":"The suffix for the endpoint.","computed":true},"web_app_id":{"type":"TypeString","required":true,"description":"The ID of the Web App for this Hybrid Connection.","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_web_application_firewall_policy":{"schema":{"custom_rules":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"match_conditions":{"type":"TypeList","required":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"match_variables":{"type":"TypeList","required":true,"elem":{"schema":{"selector":{"type":"TypeString","optional":true},"variable_name":{"type":"TypeString","required":true}}}},"negation_condition":{"type":"TypeBool","optional":true},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","optional":true},"priority":{"type":"TypeInt","required":true},"rule_type":{"type":"TypeString","required":true}}}},"http_listener_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_rules":{"type":"TypeList","required":true,"elem":{"schema":{"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"excluded_rule_set":{"type":"TypeList","optional":true,"elem":{"schema":{"rule_group":{"type":"TypeList","optional":true,"elem":{"schema":{"excluded_rules":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"rule_group_name":{"type":"TypeString","required":true}}}},"type":{"type":"TypeString","optional":true,"default":"OWASP"},"version":{"type":"TypeString","optional":true,"default":"3.2"}}},"maxItems":1},"match_variable":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true},"selector_match_operator":{"type":"TypeString","required":true}}}},"managed_rule_set":{"type":"TypeList","required":true,"elem":{"schema":{"rule_group_override":{"type":"TypeList","optional":true,"elem":{"schema":{"disabled_rules":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"rule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true},"id":{"type":"TypeString","required":true}}}},"rule_group_name":{"type":"TypeString","required":true}}}},"type":{"type":"TypeString","optional":true,"default":"OWASP"},"version":{"type":"TypeString","required":true}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"path_based_rule_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"policy_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"file_upload_limit_in_mb":{"type":"TypeInt","optional":true,"default":100},"log_scrubbing":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"match_variable":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true,"description":"When matchVariable is a collection, operator used to specify which elements in the collection this rule applies to."},"selector_match_operator":{"type":"TypeString","optional":true,"default":"Equals"}}}}}},"maxItems":1},"max_request_body_size_in_kb":{"type":"TypeInt","optional":true,"default":128},"mode":{"type":"TypeString","optional":true,"default":"Prevention"},"request_body_check":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_pubsub":{"schema":{"aad_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"capacity":{"type":"TypeInt","optional":true,"default":1},"external_ip":{"type":"TypeString","computed":true},"hostname":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"live_trace":{"type":"TypeList","optional":true,"elem":{"schema":{"connectivity_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"http_request_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"messaging_logs_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"public_port":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"server_port":{"type":"TypeInt","computed":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tls_client_cert_enabled":{"type":"TypeBool","optional":true,"default":false},"version":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_pubsub_custom_certificate":{"schema":{"certificate_version":{"type":"TypeString","computed":true},"custom_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_web_pubsub_custom_domain":{"schema":{"domain_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_custom_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_web_pubsub_hub":{"schema":{"anonymous_connections_enabled":{"type":"TypeBool","optional":true,"default":false},"event_handler":{"type":"TypeList","optional":true,"elem":{"schema":{"auth":{"type":"TypeList","optional":true,"elem":{"schema":{"managed_identity_id":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"system_events":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"url_template":{"type":"TypeString","required":true},"user_event_pattern":{"type":"TypeString","optional":true}}}},"event_listener":{"type":"TypeList","optional":true,"elem":{"schema":{"eventhub_name":{"type":"TypeString","required":true},"eventhub_namespace_name":{"type":"TypeString","required":true},"system_event_name_filter":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"user_event_name_filter":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_pubsub_network_acl":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"private_endpoint":{"type":"TypeSet","optional":true,"elem":{"schema":{"allowed_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"denied_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","required":true}}}},"public_network":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"denied_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_pubsub_shared_private_link_resource":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"request_message":{"type":"TypeString","optional":true},"status":{"type":"TypeString","computed":true},"subresource_name":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_windows_function_app":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs for [App Settings](https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings) and custom values.","elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"builtin_logging_enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should built in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting"},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the function app use Client Certificates"},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Optional","description":"The mode of the Function App's client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser` "},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"content_share_force_disabled":{"type":"TypeBool","optional":true,"default":false,"description":"Force disable the content share settings."},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans."},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Is the Windows Function App enabled."},"functions_extension_version":{"type":"TypeString","optional":true,"default":"~4","description":"The runtime version associated with the Function App."},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"description":"Can the Function App only be accessed via HTTPS?","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Key Vault access.","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"description":"Specifies the name of the Function App.","forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_plan_id":{"type":"TypeString","required":true,"description":"The ID of the App Service Plan within which to create this Function App"},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"description":"If this Windows Web App is Always On enabled. Defaults to `false`.","computed":true},"api_definition_url":{"type":"TypeString","optional":true,"description":"The URL of the API definition that describes this Windows Function App."},"api_management_api_id":{"type":"TypeString","optional":true,"description":"The ID of the API Management API for this Windows Function App."},"app_command_line":{"type":"TypeString","optional":true,"description":"The program and any arguments used to launch this app via the command line. (Example `node myapp.js`)."},"app_scale_limit":{"type":"TypeInt","optional":true,"description":"The number of workers this function app can scale out to. Only applicable to apps on the Consumption and Premium plan.","computed":true},"app_service_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","optional":true,"default":35,"description":"The amount of disk space to use for logs. Valid values are between `25` and `100`."},"retention_period_days":{"type":"TypeInt","optional":true,"description":"The retention period for logs in days. Valid values are between `0` and `99999`. Defaults to `0` (never delete)."}}},"maxItems":1},"application_insights_connection_string":{"type":"TypeString","optional":true,"description":"The Connection String for linking the Windows Function App to Application Insights."},"application_insights_key":{"type":"TypeString","optional":true,"description":"The Instrumentation Key for connecting the Windows Function App to Application Insights."},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"dotnet_version":{"type":"TypeString","optional":true,"default":"v4.0","description":"The version of .Net. Possible values are `v3.0`, `v4.0`, `v6.0` and `v7.0`"},"java_version":{"type":"TypeString","optional":true,"description":"The version of Java to use. Possible values are `1.8`, `11` and `17`"},"node_version":{"type":"TypeString","optional":true,"description":"The version of Node to use. Possible values include `12`, `14`, `16` and `18`"},"powershell_core_version":{"type":"TypeString","optional":true,"description":"The PowerShell Core version to use. Possible values are `7`, and `7.2`"},"use_custom_runtime":{"type":"TypeBool","optional":true,"description":"Does the Function App use a custom Application Stack?","computed":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","optional":true,"description":"Should the DotNet process use an isolated runtime. Defaults to `false`.","computed":true}}},"maxItems":1},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"description":"Specifies a list of Default Documents for the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","description":"Is detailed error logging enabled","computed":true},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"description":"The number of minimum instances for this Windows Function App. Only affects apps on Elastic Premium plans.","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled","description":"State of FTP / FTPS service for this function app. Possible values include: `AllAllowed`, `FtpsOnly` and `Disabled`. Defaults to `Disabled`."},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true,"description":"The path to be checked for this function app health."},"http2_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Specifies if the http2 protocol should be enabled. Defaults to `false`."},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests","description":"The Site load balancing mode. Possible values include: `WeightedRoundRobin`, `LeastRequests`, `LeastResponseTime`, `WeightedTotalTraffic`, `RequestHash`, `PerSiteRoundRobin`. Defaults to `LeastRequests` if omitted."},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated","description":"The Managed Pipeline mode. Possible values include: `Integrated`, `Classic`. Defaults to `Integrated`."},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"The configures the minimum version of TLS required for SSL requests. Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"description":"The number of pre-warmed instances for this function app. Only affects apps on an Elastic Premium plan.","computed":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Remote Debugging be enabled. Defaults to `false`."},"remote_debugging_version":{"type":"TypeString","optional":true,"description":"The Remote Debugging Version. Possible values include `VS2017`, `VS2019`, and `VS2022`","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"description":"Should Functions Runtime Scale Monitoring be enabled."},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"Configures the minimum version of TLS required for SSL requests to the SCM site Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"scm_type":{"type":"TypeString","description":"The SCM Type in use by the Windows Function App.","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Function App `ip_restriction` configuration be used for the SCM also."},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true,"description":"Should the Windows Web App use a 32-bit worker."},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Web Sockets be enabled. Defaults to `false`."},"windows_fx_version":{"type":"TypeString","description":"The Windows FX Version string.","computed":true},"worker_count":{"type":"TypeInt","optional":true,"description":"The number of Workers for this Windows Function App.","computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"connection_string_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"storage_account_access_key":{"type":"TypeString","optional":true,"description":"The access key which will be used to access the storage account for the Function App."},"storage_account_name":{"type":"TypeString","optional":true,"description":"The backend storage account name which will be used by this Function App."},"storage_key_vault_secret_id":{"type":"TypeString","optional":true,"description":"The Key Vault Secret ID, including version, that contains the Connection String to connect to the storage account for this Function App."},"storage_uses_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App use its Managed Identity to access storage?"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Windows Function App. **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` to be set on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_windows_function_app_slot":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs for [App Settings](https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings) and custom values.","elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"builtin_logging_enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should built in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting."},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App Slot use Client Certificates."},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Optional","description":"The mode of the Function App Slot's client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`."},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"content_share_force_disabled":{"type":"TypeBool","optional":true,"default":false,"description":"Force disable the content share settings."},"custom_domain_verification_id":{"type":"TypeString","description":"The identifier used by App Service to perform domain ownership verification via DNS TXT record.","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans."},"default_hostname":{"type":"TypeString","description":"The default hostname of the Windows Function App Slot.","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Is the Windows Function App Slot enabled."},"function_app_id":{"type":"TypeString","required":true,"description":"The ID of the Windows Function App this Slot is a member of.","forceNew":true},"functions_extension_version":{"type":"TypeString","optional":true,"default":"~4","description":"The runtime version associated with the Function App Slot."},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false,"description":"Can the Function App Slot only be accessed via HTTPS?"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Key Vault access.","computed":true},"kind":{"type":"TypeString","description":"The Kind value for this Windows Function App Slot.","computed":true},"name":{"type":"TypeString","required":true,"description":"Specifies the name of the Windows Function App Slot.","forceNew":true},"outbound_ip_address_list":{"type":"TypeList","description":"A list of outbound IP addresses. For example `[\"52.23.25.3\", \"52.143.43.12\"]`.","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","description":"A comma separated list of outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12`.","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","description":"A list of possible outbound IP addresses, not all of which are necessarily in use. This is a superset of `outbound_ip_address_list`. For example `[\"52.23.25.3\", \"52.143.43.12\"]`.","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","description":"A comma separated list of possible outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12,52.143.43.17`. This is a superset of `outbound_ip_addresses`. For example `[\"52.23.25.3\", \"52.143.43.12\",\"52.143.43.17\"]`.","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_plan_id":{"type":"TypeString","optional":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"description":"If this Windows Web App is Always On enabled. Defaults to `false`.","computed":true},"api_definition_url":{"type":"TypeString","optional":true,"description":"The URL of the API definition that describes this Windows Function App."},"api_management_api_id":{"type":"TypeString","optional":true,"description":"The ID of the API Management API for this Windows Function App."},"app_command_line":{"type":"TypeString","optional":true,"description":"The program and any arguments used to launch this app via the command line. (Example `node myapp.js`)."},"app_scale_limit":{"type":"TypeInt","optional":true,"description":"The number of workers this function app can scale out to. Only applicable to apps on the Consumption and Premium plan.","computed":true},"app_service_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","optional":true,"default":35,"description":"The amount of disk space to use for logs. Valid values are between `25` and `100`."},"retention_period_days":{"type":"TypeInt","optional":true,"description":"The retention period for logs in days. Valid values are between `0` and `99999`. Defaults to `0` (never delete)."}}},"maxItems":1},"application_insights_connection_string":{"type":"TypeString","optional":true,"description":"The Connection String for linking the Windows Function App to Application Insights."},"application_insights_key":{"type":"TypeString","optional":true,"description":"The Instrumentation Key for connecting the Windows Function App to Application Insights."},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"dotnet_version":{"type":"TypeString","optional":true,"default":"v4.0","description":"The version of .Net. Possible values are `v3.0`, `v4.0`, `v6.0` and `v7.0`"},"java_version":{"type":"TypeString","optional":true,"description":"The version of Java to use. Possible values are `1.8`, `11` and `17`"},"node_version":{"type":"TypeString","optional":true,"description":"The version of Node to use. Possible values include `12`, `14`, `16` and `18`"},"powershell_core_version":{"type":"TypeString","optional":true,"description":"The PowerShell Core version to use. Possible values are `7`, and `7.2`"},"use_custom_runtime":{"type":"TypeBool","optional":true,"description":"Does the Function App use a custom Application Stack?","computed":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","optional":true,"description":"Should the DotNet process use an isolated runtime. Defaults to `false`.","computed":true}}},"maxItems":1},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"description":"Specifies a list of Default Documents for the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","description":"Is detailed error logging enabled","computed":true},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"description":"The number of minimum instances for this Windows Function App. Only affects apps on Elastic Premium plans.","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled","description":"State of FTP / FTPS service for this function app. Possible values include: `AllAllowed`, `FtpsOnly` and `Disabled`. Defaults to `Disabled`."},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`"},"health_check_path":{"type":"TypeString","optional":true,"description":"The path to be checked for this function app health."},"http2_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Specifies if the http2 protocol should be enabled. Defaults to `false`."},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests","description":"The Site load balancing mode. Possible values include: `WeightedRoundRobin`, `LeastRequests`, `LeastResponseTime`, `WeightedTotalTraffic`, `RequestHash`, `PerSiteRoundRobin`. Defaults to `LeastRequests` if omitted."},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated","description":"The Managed Pipeline mode. Possible values include: `Integrated`, `Classic`. Defaults to `Integrated`."},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"The configures the minimum version of TLS required for SSL requests. Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"description":"The number of pre-warmed instances for this function app. Only affects apps on an Elastic Premium plan.","computed":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Remote Debugging be enabled. Defaults to `false`."},"remote_debugging_version":{"type":"TypeString","optional":true,"description":"The Remote Debugging Version. Possible values include `VS2017`, `VS2019`, and `VS2022`","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"description":"Should Functions Runtime Scale Monitoring be enabled."},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"Configures the minimum version of TLS required for SSL requests to the SCM site Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"scm_type":{"type":"TypeString","description":"The SCM Type in use by the Windows Function App.","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Function App `ip_restriction` configuration be used for the SCM also."},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true,"description":"Should the Windows Web App use a 32-bit worker."},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Web Sockets be enabled. Defaults to `false`."},"windows_fx_version":{"type":"TypeString","description":"The Windows FX Version string.","computed":true},"worker_count":{"type":"TypeInt","optional":true,"description":"The number of Workers for this Windows Function App.","computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"storage_account_access_key":{"type":"TypeString","optional":true,"description":"The access key which will be used to access the storage account for the Function App Slot."},"storage_account_name":{"type":"TypeString","optional":true,"description":"The backend storage account name which will be used by this Function App Slot."},"storage_key_vault_secret_id":{"type":"TypeString","optional":true,"description":"The Key Vault Secret ID, including version, that contains the Connection String to connect to the storage account for this Function App."},"storage_uses_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App Slot use its Managed Identity to access storage?"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_windows_virtual_machine":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"additional_unattend_content":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"content":{"type":"TypeString","required":true,"forceNew":true},"setting":{"type":"TypeString","required":true,"forceNew":true}}}},"admin_password":{"type":"TypeString","required":true,"forceNew":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"allow_extension_operations":{"type":"TypeBool","optional":true,"default":true},"availability_set_id":{"type":"TypeString","optional":true,"forceNew":true},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"bypass_platform_safety_checks_on_user_schedule_enabled":{"type":"TypeBool","optional":true,"default":false},"capacity_reservation_group_id":{"type":"TypeString","optional":true},"computer_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true,"forceNew":true},"dedicated_host_group_id":{"type":"TypeString","optional":true},"dedicated_host_id":{"type":"TypeString","optional":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_automatic_updates":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"gallery_application":{"type":"TypeList","optional":true,"elem":{"schema":{"configuration_blob_uri":{"type":"TypeString","optional":true},"order":{"type":"TypeInt","optional":true,"default":0},"tag":{"type":"TypeString","optional":true},"version_id":{"type":"TypeString","required":true}}},"maxItems":100},"hotpatching_enabled":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_encryption_type":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"patch_assessment_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"patch_mode":{"type":"TypeString","optional":true,"default":"AutomaticByOS"},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain":{"type":"TypeInt","optional":true,"default":-1,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true},"public_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"reboot_setting":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"store":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"secure_boot_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"size":{"type":"TypeString","required":true},"source_image_id":{"type":"TypeString","optional":true,"forceNew":true},"source_image_reference":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"timezone":{"type":"TypeString","optional":true,"forceNew":true},"user_data":{"type":"TypeString","optional":true},"virtual_machine_id":{"type":"TypeString","computed":true},"virtual_machine_scale_set_id":{"type":"TypeString","optional":true,"forceNew":true},"vtpm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"winrm_listener":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true}}}},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":45,"read":5,"delete":45,"update":45}},"azurerm_windows_virtual_machine_scale_set":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"additional_unattend_content":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"content":{"type":"TypeString","required":true,"forceNew":true},"setting":{"type":"TypeString","required":true,"forceNew":true}}}},"admin_password":{"type":"TypeString","required":true,"forceNew":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"automatic_instance_repair":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"grace_period":{"type":"TypeString","optional":true,"default":"PT30M"}}},"maxItems":1},"automatic_os_upgrade_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"disable_automatic_rollback":{"type":"TypeBool","required":true},"enable_automatic_os_upgrade":{"type":"TypeBool","required":true}}},"maxItems":1},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"computer_name_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true},"data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"create_option":{"type":"TypeString","optional":true,"default":"Empty"},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","required":true},"lun":{"type":"TypeInt","required":true},"name":{"type":"TypeString","optional":true},"storage_account_type":{"type":"TypeString","required":true},"ultra_ssd_disk_iops_read_write":{"type":"TypeInt","optional":true,"computed":true},"ultra_ssd_disk_mbps_read_write":{"type":"TypeInt","optional":true,"computed":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"do_not_run_extensions_on_overprovisioned_machines":{"type":"TypeBool","optional":true,"default":false},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_automatic_updates":{"type":"TypeBool","optional":true,"default":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extension":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true,"default":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"force_update_tag":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"provision_after_extensions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true}}}},"extension_operations_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"gallery_application":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"configuration_blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"order":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"tag":{"type":"TypeString","optional":true,"forceNew":true},"version_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":100},"gallery_applications":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"configuration_reference_blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"order":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"package_reference_id":{"type":"TypeString","required":true,"forceNew":true},"tag":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":100},"health_probe_id":{"type":"TypeString","optional":true},"host_group_id":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"instances":{"type":"TypeInt","required":true},"license_type":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","required":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","optional":true,"default":false},"enable_ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":20},"load_balancer_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","optional":true,"default":false},"public_ip_address":{"type":"TypeList","optional":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","optional":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"ip_tag":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"tag":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}}},"name":{"type":"TypeString","required":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true}}}},"subnet_id":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true,"default":"IPv4"}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","optional":true},"primary":{"type":"TypeBool","optional":true,"default":false}}}},"os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_encryption_type":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"overprovision":{"type":"TypeBool","optional":true,"default":true},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain_count":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rolling_upgrade_policy":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"cross_zone_upgrades_enabled":{"type":"TypeBool","optional":true},"max_batch_instance_percent":{"type":"TypeInt","required":true},"max_unhealthy_instance_percent":{"type":"TypeInt","required":true},"max_unhealthy_upgraded_instance_percent":{"type":"TypeInt","required":true},"pause_time_between_batches":{"type":"TypeString","required":true},"prioritize_unhealthy_instances_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"scale_in":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"force_deletion_enabled":{"type":"TypeBool","optional":true,"default":false},"rule":{"type":"TypeString","optional":true,"default":"Default"}}},"maxItems":1},"scale_in_policy":{"type":"TypeString","optional":true,"computed":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"store":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"secure_boot_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"single_placement_group":{"type":"TypeBool","optional":true,"default":true},"sku":{"type":"TypeString","required":true},"source_image_id":{"type":"TypeString","optional":true},"source_image_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"spot_restore":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"timeout":{"type":"TypeString","optional":true,"default":"PT1H","forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"terminate_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"timezone":{"type":"TypeString","optional":true},"unique_id":{"type":"TypeString","computed":true},"upgrade_mode":{"type":"TypeString","optional":true,"default":"Manual","forceNew":true},"user_data":{"type":"TypeString","optional":true},"vtpm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"winrm_listener":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true}}}},"zone_balance":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_windows_web_app":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Required"},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","required":true}}},"maxItems":1},"detailed_error_messages":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_plan_id":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":true},"api_definition_url":{"type":"TypeString","optional":true},"api_management_api_id":{"type":"TypeString","optional":true},"app_command_line":{"type":"TypeString","optional":true},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"current_stack":{"type":"TypeString","optional":true,"computed":true},"docker_container_name":{"type":"TypeString","optional":true},"docker_container_registry":{"type":"TypeString","optional":true},"docker_container_tag":{"type":"TypeString","optional":true},"docker_image_name":{"type":"TypeString","optional":true},"docker_registry_password":{"type":"TypeString","optional":true,"computed":true},"docker_registry_url":{"type":"TypeString","optional":true,"computed":true},"docker_registry_username":{"type":"TypeString","optional":true,"computed":true},"dotnet_core_version":{"type":"TypeString","optional":true,"description":"The version of DotNetCore to use."},"dotnet_version":{"type":"TypeString","optional":true,"computed":true},"java_container":{"type":"TypeString","optional":true},"java_container_version":{"type":"TypeString","optional":true},"java_embedded_server_enabled":{"type":"TypeBool","optional":true,"description":"Should the application use the embedded web server for the version of Java in use.","computed":true},"java_version":{"type":"TypeString","optional":true},"node_version":{"type":"TypeString","optional":true},"php_version":{"type":"TypeString","optional":true,"computed":true},"python":{"type":"TypeBool","optional":true,"default":false},"python_version":{"type":"TypeString","optional":true,"computed":true},"tomcat_version":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_heal_enabled":{"type":"TypeBool","optional":true,"default":false},"auto_heal_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true},"custom_action":{"type":"TypeList","optional":true,"elem":{"schema":{"executable":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true}}},"maxItems":1},"minimum_process_execution_time":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"trigger":{"type":"TypeList","required":true,"elem":{"schema":{"private_memory_kb":{"type":"TypeInt","optional":true},"requests":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true}}},"maxItems":1},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"time_taken":{"type":"TypeString","required":true}}},"maxItems":1},"status_code":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"status_code_range":{"type":"TypeString","required":true},"sub_status":{"type":"TypeInt","optional":true},"win32_status_code":{"type":"TypeInt","optional":true}}}}}},"maxItems":1}}},"maxItems":1},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled"},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests"},"local_mysql_enabled":{"type":"TypeBool","optional":true,"default":false},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true},"virtual_application":{"type":"TypeSet","optional":true,"elem":{"schema":{"physical_path":{"type":"TypeString","required":true},"preload":{"type":"TypeBool","required":true},"virtual_directory":{"type":"TypeSet","optional":true,"elem":{"schema":{"physical_path":{"type":"TypeString","optional":true},"virtual_path":{"type":"TypeString","optional":true}}}},"virtual_path":{"type":"TypeString","required":true}}}},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false},"windows_fx_version":{"type":"TypeString","computed":true},"worker_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"connection_string_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Windows Web App. **Note:** Using this value requires either `WEBSITE_RUN_FROM_PACKAGE=1` or `SCM_DO_BUILD_DURING_DEPLOYMENT=true` to be set on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_windows_web_app_slot":{"schema":{"app_service_id":{"type":"TypeString","required":true,"forceNew":true},"app_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Required"},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","optional":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","required":true}}},"maxItems":1},"detailed_error_messages":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_plan_id":{"type":"TypeString","optional":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":true},"api_definition_url":{"type":"TypeString","optional":true},"api_management_api_id":{"type":"TypeString","optional":true},"app_command_line":{"type":"TypeString","optional":true},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"current_stack":{"type":"TypeString","optional":true,"computed":true},"docker_container_name":{"type":"TypeString","optional":true},"docker_container_registry":{"type":"TypeString","optional":true},"docker_container_tag":{"type":"TypeString","optional":true},"docker_image_name":{"type":"TypeString","optional":true},"docker_registry_password":{"type":"TypeString","optional":true,"computed":true},"docker_registry_url":{"type":"TypeString","optional":true,"computed":true},"docker_registry_username":{"type":"TypeString","optional":true,"computed":true},"dotnet_core_version":{"type":"TypeString","optional":true,"description":"The version of DotNetCore to use."},"dotnet_version":{"type":"TypeString","optional":true,"computed":true},"java_container":{"type":"TypeString","optional":true},"java_container_version":{"type":"TypeString","optional":true},"java_embedded_server_enabled":{"type":"TypeBool","optional":true,"description":"Should the application use the embedded web server for the version of Java in use.","computed":true},"java_version":{"type":"TypeString","optional":true},"node_version":{"type":"TypeString","optional":true},"php_version":{"type":"TypeString","optional":true,"computed":true},"python":{"type":"TypeBool","optional":true,"default":false},"python_version":{"type":"TypeString","optional":true,"computed":true},"tomcat_version":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_heal_enabled":{"type":"TypeBool","optional":true,"default":false},"auto_heal_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true},"custom_action":{"type":"TypeList","optional":true,"elem":{"schema":{"executable":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true}}},"maxItems":1},"minimum_process_execution_time":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"trigger":{"type":"TypeList","required":true,"elem":{"schema":{"private_memory_kb":{"type":"TypeInt","optional":true},"requests":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true}}},"maxItems":1},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"time_taken":{"type":"TypeString","required":true}}},"maxItems":1},"status_code":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"status_code_range":{"type":"TypeString","required":true},"sub_status":{"type":"TypeInt","optional":true},"win32_status_code":{"type":"TypeInt","optional":true}}}}}},"maxItems":1}}},"maxItems":1},"auto_swap_slot_name":{"type":"TypeString","optional":true},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled"},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests"},"local_mysql_enabled":{"type":"TypeBool","optional":true,"default":false},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker":{"type":"TypeBool","optional":true,"computed":true},"virtual_application":{"type":"TypeSet","optional":true,"elem":{"schema":{"physical_path":{"type":"TypeString","required":true},"preload":{"type":"TypeBool","required":true},"virtual_directory":{"type":"TypeSet","optional":true,"elem":{"schema":{"physical_path":{"type":"TypeString","optional":true},"virtual_path":{"type":"TypeString","optional":true}}}},"virtual_path":{"type":"TypeString","required":true}}}},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false},"windows_fx_version":{"type":"TypeString","computed":true},"worker_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Windows Web App. **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}}},"dataSources":{"azurerm_aadb2c_directory":{"schema":{"billing_type":{"type":"TypeString","description":"The type of billing for the B2C tenant. Possible values include: `MAU` or `Auths`.","computed":true},"data_residency_location":{"type":"TypeString","description":"Location in which the B2C tenant is hosted and data resides.","computed":true},"domain_name":{"type":"TypeString","required":true,"description":"Domain name of the B2C tenant, including onmicrosoft.com suffix."},"effective_start_date":{"type":"TypeString","description":"The date from which the billing type took effect. May not be populated until after the first billing cycle.","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","description":"Billing SKU for the B2C tenant.","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","description":"The Tenant ID for the B2C tenant.","computed":true}},"timeouts":{"read":5}},"azurerm_active_directory_domain_service":{"schema":{"deployment_id":{"type":"TypeString","computed":true},"domain_configuration_type":{"type":"TypeString","computed":true},"domain_name":{"type":"TypeString","computed":true},"filtered_sync_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"notifications":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_recipients":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"notify_dc_admins":{"type":"TypeBool","computed":true},"notify_global_admins":{"type":"TypeBool","computed":true}}}},"replica_sets":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_controller_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"external_access_ip_address":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true},"service_status":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"resource_id":{"type":"TypeString","computed":true},"secure_ldap":{"type":"TypeList","computed":true,"elem":{"schema":{"certificate_expiry":{"type":"TypeString","computed":true},"certificate_thumbprint":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"external_access_enabled":{"type":"TypeBool","computed":true},"public_certificate":{"type":"TypeString","computed":true}}}},"security":{"type":"TypeList","computed":true,"elem":{"schema":{"kerberos_armoring_enabled":{"type":"TypeBool","computed":true},"kerberos_rc4_encryption_enabled":{"type":"TypeBool","computed":true},"ntlm_v1_enabled":{"type":"TypeBool","computed":true},"sync_kerberos_passwords":{"type":"TypeBool","computed":true},"sync_ntlm_passwords":{"type":"TypeBool","computed":true},"sync_on_prem_passwords":{"type":"TypeBool","computed":true},"tls_v1_enabled":{"type":"TypeBool","computed":true}}}},"sku":{"type":"TypeString","computed":true},"sync_owner":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true},"version":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_advisor_recommendations":{"schema":{"filter_by_category":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"filter_by_resource_groups":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"recommendations":{"type":"TypeList","computed":true,"elem":{"schema":{"category":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"impact":{"type":"TypeString","computed":true},"recommendation_name":{"type":"TypeString","computed":true},"recommendation_type_id":{"type":"TypeString","computed":true},"resource_name":{"type":"TypeString","computed":true},"resource_type":{"type":"TypeString","computed":true},"suppression_names":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"updated_time":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":10}},"azurerm_api_management":{"schema":{"additional_location":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"gateway_regional_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_id":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"developer_portal_url":{"type":"TypeString","computed":true},"gateway_regional_url":{"type":"TypeString","computed":true},"gateway_url":{"type":"TypeString","computed":true},"hostname_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"developer_portal":{"type":"TypeList","computed":true,"elem":{"schema":{"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}},"management":{"type":"TypeList","computed":true,"elem":{"schema":{"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}},"portal":{"type":"TypeList","computed":true,"elem":{"schema":{"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}},"proxy":{"type":"TypeList","computed":true,"elem":{"schema":{"default_ssl_binding":{"type":"TypeBool","computed":true},"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}},"scm":{"type":"TypeList","computed":true,"elem":{"schema":{"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"management_api_url":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"notification_sender_email":{"type":"TypeString","computed":true},"portal_url":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_id":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"publisher_email":{"type":"TypeString","computed":true},"publisher_name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"scm_url":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_access":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"primary_key":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_api_management_api":{"schema":{"api_management_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"is_current":{"type":"TypeBool","computed":true},"is_online":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","computed":true},"protocols":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"revision":{"type":"TypeString","required":true},"service_url":{"type":"TypeString","computed":true},"soap_pass_through":{"type":"TypeBool","computed":true},"subscription_key_parameter_names":{"type":"TypeList","computed":true,"elem":{"schema":{"header":{"type":"TypeString","computed":true},"query":{"type":"TypeString","computed":true}}}},"subscription_required":{"type":"TypeBool","computed":true},"version":{"type":"TypeString","computed":true},"version_set_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_api_version_set":{"schema":{"api_management_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"version_header_name":{"type":"TypeString","computed":true},"version_query_name":{"type":"TypeString","computed":true},"versioning_scheme":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_gateway":{"schema":{"api_management_id":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"location_data":{"type":"TypeList","computed":true,"elem":{"schema":{"city":{"type":"TypeString","computed":true},"district":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"region":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_api_management_gateway_host_name_configuration":{"schema":{"api_management_id":{"type":"TypeString","required":true},"certificate_id":{"type":"TypeString","computed":true},"gateway_name":{"type":"TypeString","required":true},"host_name":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"request_client_certificate_enabled":{"type":"TypeBool","computed":true},"tls10_enabled":{"type":"TypeBool","computed":true},"tls11_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_group":{"schema":{"api_management_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"external_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_product":{"schema":{"api_management_name":{"type":"TypeString","required":true},"approval_required":{"type":"TypeBool","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"product_id":{"type":"TypeString","required":true},"published":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_required":{"type":"TypeBool","computed":true},"subscriptions_limit":{"type":"TypeInt","computed":true},"terms":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_user":{"schema":{"api_management_name":{"type":"TypeString","required":true},"email":{"type":"TypeString","computed":true},"first_name":{"type":"TypeString","computed":true},"last_name":{"type":"TypeString","computed":true},"note":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"state":{"type":"TypeString","computed":true},"user_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_app_configuration":{"schema":{"encryption":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","computed":true},"key_vault_key_identifier":{"type":"TypeString","computed":true}}}},"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"local_auth_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_read_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"primary_write_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"public_network_access":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"purge_protection_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_read_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"secondary_write_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"sku":{"type":"TypeString","computed":true},"soft_delete_retention_days":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_app_configuration_key":{"schema":{"configuration_store_id":{"type":"TypeString","required":true},"content_type":{"type":"TypeString","computed":true},"etag":{"type":"TypeString","computed":true},"key":{"type":"TypeString","required":true},"label":{"type":"TypeString","optional":true,"default":""},"locked":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true},"vault_key_reference":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_app_configuration_keys":{"schema":{"configuration_store_id":{"type":"TypeString","required":true},"items":{"type":"TypeList","computed":true,"elem":{"schema":{"content_type":{"type":"TypeString","computed":true},"etag":{"type":"TypeString","computed":true},"key":{"type":"TypeString","computed":true},"label":{"type":"TypeString","computed":true},"locked":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true},"vault_key_reference":{"type":"TypeString","computed":true}}}},"key":{"type":"TypeString","optional":true,"default":""},"label":{"type":"TypeString","optional":true,"default":""}},"timeouts":{"read":5}},"azurerm_app_service":{"schema":{"app_service_plan_id":{"type":"TypeString","computed":true},"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"client_affinity_enabled":{"type":"TypeBool","computed":true},"client_cert_enabled":{"type":"TypeBool","computed":true},"connection_string":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_site_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"https_only":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"acr_use_managed_identity_credentials":{"type":"TypeBool","computed":true},"acr_user_managed_identity_client_id":{"type":"TypeString","computed":true},"always_on":{"type":"TypeBool","computed":true},"app_command_line":{"type":"TypeString","computed":true},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dotnet_framework_version":{"type":"TypeString","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"service_tag":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}}}},"java_container":{"type":"TypeString","computed":true},"java_container_version":{"type":"TypeString","computed":true},"java_version":{"type":"TypeString","computed":true},"linux_fx_version":{"type":"TypeString","computed":true},"local_mysql_enabled":{"type":"TypeBool","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"min_tls_version":{"type":"TypeString","computed":true},"number_of_workers":{"type":"TypeInt","computed":true},"php_version":{"type":"TypeString","computed":true},"python_version":{"type":"TypeString","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"scm_ip_restriction":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"service_tag":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}}}},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker_process":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"windows_fx_version":{"type":"TypeString","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"source_control":{"type":"TypeList","computed":true,"elem":{"schema":{"branch":{"type":"TypeString","computed":true},"manual_integration":{"type":"TypeBool","computed":true},"repo_url":{"type":"TypeString","computed":true},"rollback_enabled":{"type":"TypeBool","computed":true},"use_mercurial":{"type":"TypeBool","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_app_service_certificate":{"schema":{"expiration_date":{"type":"TypeString","computed":true},"friendly_name":{"type":"TypeString","computed":true},"host_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"issue_date":{"type":"TypeString","computed":true},"issuer":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"subject_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_app_service_certificate_order":{"schema":{"app_service_certificate_not_renewable_reasons":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"auto_renew":{"type":"TypeBool","computed":true},"certificates":{"type":"TypeList","computed":true,"elem":{"schema":{"certificate_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"key_vault_secret_name":{"type":"TypeString","computed":true},"provisioning_state":{"type":"TypeString","computed":true}}}},"csr":{"type":"TypeString","computed":true},"distinguished_name":{"type":"TypeString","computed":true},"domain_verification_token":{"type":"TypeString","computed":true},"expiration_time":{"type":"TypeString","computed":true},"intermediate_thumbprint":{"type":"TypeString","computed":true},"is_private_key_external":{"type":"TypeBool","computed":true},"key_size":{"type":"TypeInt","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"product_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"root_thumbprint":{"type":"TypeString","computed":true},"signed_certificate_thumbprint":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"validity_in_years":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_app_service_environment":{"schema":{"cluster_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"front_end_scale_factor":{"type":"TypeInt","computed":true},"internal_ip_address":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"pricing_tier":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_ip_address":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_app_service_environment_v3":{"schema":{"allow_new_private_endpoint_connections":{"type":"TypeBool","computed":true},"cluster_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"dedicated_host_count":{"type":"TypeInt","computed":true},"dns_suffix":{"type":"TypeString","computed":true},"external_inbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"inbound_network_dependencies":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"internal_inbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"internal_load_balancing_mode":{"type":"TypeString","computed":true},"ip_ssl_address_count":{"type":"TypeInt","computed":true},"linux_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"pricing_tier":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"windows_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_app_service_plan":{"schema":{"app_service_environment_id":{"type":"TypeString","computed":true},"is_xenon":{"type":"TypeBool","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"maximum_elastic_worker_count":{"type":"TypeInt","computed":true},"maximum_number_of_workers":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"per_site_scaling":{"type":"TypeBool","computed":true},"reserved":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"size":{"type":"TypeString","computed":true},"tier":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_application_gateway":{"schema":{"backend_address_pool":{"type":"TypeList","computed":true,"elem":{"schema":{"fqdns":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_application_insights":{"schema":{"app_id":{"type":"TypeString","computed":true},"application_type":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeString","computed":true},"instrumentation_key":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_application_security_group":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_arc_machine":{"schema":{"active_directory_fqdn":{"type":"TypeString","computed":true},"agent":{"type":"TypeList","computed":true,"elem":{"schema":{"extensions_allow_list":{"type":"TypeList","computed":true,"elem":{"schema":{"publisher":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"extensions_block_list":{"type":"TypeList","computed":true,"elem":{"schema":{"publisher":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"extensions_enabled":{"type":"TypeBool","computed":true},"guest_configuration_enabled":{"type":"TypeBool","computed":true},"incoming_connections_ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proxy_bypass":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proxy_url":{"type":"TypeString","computed":true}}}},"agent_version":{"type":"TypeString","computed":true},"client_public_key":{"type":"TypeString","computed":true},"cloud_metadata":{"type":"TypeList","computed":true,"elem":{"schema":{"provider":{"type":"TypeString","computed":true}}}},"detected_properties":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","computed":true},"dns_fqdn":{"type":"TypeString","computed":true},"domain_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"last_status_change_time":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"location_data":{"type":"TypeList","computed":true,"elem":{"schema":{"city":{"type":"TypeString","computed":true},"country_or_region":{"type":"TypeString","computed":true},"district":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"machine_fqdn":{"type":"TypeString","computed":true},"mssql_discovered":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"os_name":{"type":"TypeString","computed":true},"os_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"computer_name":{"type":"TypeString","computed":true},"linux":{"type":"TypeList","computed":true,"elem":{"schema":{"patch":{"type":"TypeList","computed":true,"elem":{"schema":{"assessment_mode":{"type":"TypeString","computed":true},"patch_mode":{"type":"TypeString","computed":true}}}}}}},"windows":{"type":"TypeList","computed":true,"elem":{"schema":{"patch":{"type":"TypeList","computed":true,"elem":{"schema":{"assessment_mode":{"type":"TypeString","computed":true},"patch_mode":{"type":"TypeString","computed":true}}}}}}}}}},"os_sku":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"os_version":{"type":"TypeString","computed":true},"parent_cluster_resource_id":{"type":"TypeString","computed":true},"private_link_scope_resource_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_status":{"type":"TypeList","computed":true,"elem":{"schema":{"extension_service":{"type":"TypeList","computed":true,"elem":{"schema":{"startup_type":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}},"guest_configuration_service":{"type":"TypeList","computed":true,"elem":{"schema":{"startup_type":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}}}}},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vm_id":{"type":"TypeString","computed":true},"vm_uuid":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_attestation_provider":{"schema":{"attestation_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"trust_model":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_account":{"schema":{"endpoint":{"type":"TypeString","computed":true},"hybrid_service_url":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","computed":true},"private_endpoint_connection":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_bool":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_datetime":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_int":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_object":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_string":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variables":{"schema":{"automation_account_id":{"type":"TypeString","required":true},"bool":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeBool","computed":true}}}},"datetime":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"encrypted":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"int":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeInt","computed":true}}}},"null":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"object":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"string":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_availability_set":{"schema":{"location":{"type":"TypeString","computed":true},"managed":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"platform_fault_domain_count":{"type":"TypeInt","computed":true},"platform_update_domain_count":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_backup_policy_file_share":{"schema":{"name":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_backup_policy_vm":{"schema":{"name":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_bastion_host":{"schema":{"copy_paste_enabled":{"type":"TypeBool","computed":true},"dns_name":{"type":"TypeString","computed":true},"file_copy_enabled":{"type":"TypeBool","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"ip_connect_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"scale_units":{"type":"TypeInt","computed":true},"shareable_link_enabled":{"type":"TypeBool","computed":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tunneling_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_batch_account":{"schema":{"account_endpoint":{"type":"TypeString","computed":true},"encryption":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"url":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"pool_allocation_mode":{"type":"TypeString","computed":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_batch_application":{"schema":{"account_name":{"type":"TypeString","required":true},"allow_updates":{"type":"TypeBool","computed":true},"default_version":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_batch_certificate":{"schema":{"account_name":{"type":"TypeString","required":true},"format":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_data":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"thumbprint":{"type":"TypeString","computed":true},"thumbprint_algorithm":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_batch_pool":{"schema":{"account_name":{"type":"TypeString","required":true},"auto_scale":{"type":"TypeList","computed":true,"elem":{"schema":{"evaluation_interval":{"type":"TypeString","computed":true},"formula":{"type":"TypeString","computed":true}}}},"certificate":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"store_location":{"type":"TypeString","computed":true},"store_name":{"type":"TypeString","computed":true},"visibility":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"container_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"container_image_names":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"container_registries":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"registry_server":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true},"user_name":{"type":"TypeString","computed":true}}}},"type":{"type":"TypeString","computed":true}}}},"data_disks":{"type":"TypeList","computed":true,"elem":{"schema":{"caching":{"type":"TypeString","computed":true},"disk_size_gb":{"type":"TypeInt","computed":true},"lun":{"type":"TypeInt","computed":true},"storage_account_type":{"type":"TypeString","computed":true}}}},"disk_encryption":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_encryption_target":{"type":"TypeString","computed":true}}}},"display_name":{"type":"TypeString","computed":true},"extensions":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","computed":true},"protected_settings":{"type":"TypeString","computed":true},"provision_after_extensions":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","computed":true},"settings_json":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"type_handler_version":{"type":"TypeString","computed":true}}}},"fixed_scale":{"type":"TypeList","computed":true,"elem":{"schema":{"resize_timeout":{"type":"TypeString","computed":true},"target_dedicated_nodes":{"type":"TypeInt","computed":true},"target_low_priority_nodes":{"type":"TypeInt","computed":true}}}},"inter_node_communication":{"type":"TypeString","computed":true},"license_type":{"type":"TypeString","computed":true},"max_tasks_per_node":{"type":"TypeInt","computed":true},"metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"mount":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","computed":true},"account_name":{"type":"TypeString","computed":true},"blobfuse_options":{"type":"TypeString","computed":true},"container_name":{"type":"TypeString","computed":true},"identity_id":{"type":"TypeString","computed":true},"relative_mount_path":{"type":"TypeString","computed":true},"sas_key":{"type":"TypeString","computed":true}}}},"azure_file_share":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","computed":true},"account_name":{"type":"TypeString","computed":true},"azure_file_url":{"type":"TypeString","computed":true},"mount_options":{"type":"TypeString","computed":true},"relative_mount_path":{"type":"TypeString","computed":true}}}},"cifs_mount":{"type":"TypeList","computed":true,"elem":{"schema":{"mount_options":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"relative_mount_path":{"type":"TypeString","computed":true},"source":{"type":"TypeString","computed":true},"user_name":{"type":"TypeString","computed":true}}}},"nfs_mount":{"type":"TypeList","computed":true,"elem":{"schema":{"mount_options":{"type":"TypeString","computed":true},"relative_mount_path":{"type":"TypeString","computed":true},"source":{"type":"TypeString","computed":true}}}}}}},"name":{"type":"TypeString","required":true},"network_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"dynamic_vnet_assignment_scope":{"type":"TypeString","computed":true},"endpoint_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","computed":true},"frontend_port_range":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"network_security_group_rules":{"type":"TypeList","computed":true,"elem":{"schema":{"access":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"source_address_prefix":{"type":"TypeString","computed":true},"source_port_ranges":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"protocol":{"type":"TypeString","computed":true}}}},"public_address_provisioning_type":{"type":"TypeString","computed":true},"public_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","computed":true}}}},"node_agent_sku_id":{"type":"TypeString","computed":true},"node_placement":{"type":"TypeList","computed":true,"elem":{"schema":{"policy":{"type":"TypeString","computed":true}}}},"os_disk_placement":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"start_task":{"type":"TypeList","computed":true,"elem":{"schema":{"command_line":{"type":"TypeString","computed":true},"common_environment_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"container":{"type":"TypeList","computed":true,"elem":{"schema":{"image_name":{"type":"TypeString","computed":true},"registry":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"registry_server":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true},"user_name":{"type":"TypeString","computed":true}}}},"run_options":{"type":"TypeString","computed":true},"working_directory":{"type":"TypeString","computed":true}}}},"resource_file":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_storage_container_name":{"type":"TypeString","computed":true},"blob_prefix":{"type":"TypeString","computed":true},"file_mode":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","computed":true},"http_url":{"type":"TypeString","computed":true},"storage_container_url":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"task_retry_maximum":{"type":"TypeInt","computed":true},"user_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_user":{"type":"TypeList","computed":true,"elem":{"schema":{"elevation_level":{"type":"TypeString","computed":true},"scope":{"type":"TypeString","computed":true}}}},"user_name":{"type":"TypeString","computed":true}}}},"wait_for_success":{"type":"TypeBool","computed":true}}}},"storage_image_reference":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"offer":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"task_scheduling_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"node_fill_type":{"type":"TypeString","computed":true}}}},"user_accounts":{"type":"TypeList","computed":true,"elem":{"schema":{"elevation_level":{"type":"TypeString","computed":true},"linux_user_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"gid":{"type":"TypeInt","computed":true},"ssh_private_key":{"type":"TypeString","computed":true},"uid":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"windows_user_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"login_mode":{"type":"TypeString","computed":true}}}}}}},"vm_size":{"type":"TypeString","computed":true},"windows":{"type":"TypeList","computed":true,"elem":{"schema":{"enable_automatic_updates":{"type":"TypeBool","computed":true}}}}},"timeouts":{"read":5}},"azurerm_billing_enrollment_account_scope":{"schema":{"billing_account_name":{"type":"TypeString","required":true},"enrollment_account_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_billing_mca_account_scope":{"schema":{"billing_account_name":{"type":"TypeString","required":true},"billing_profile_name":{"type":"TypeString","required":true},"invoice_section_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_billing_mpa_account_scope":{"schema":{"billing_account_name":{"type":"TypeString","required":true},"customer_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_blueprint_definition":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"last_modified":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"scope_id":{"type":"TypeString","required":true},"target_scope":{"type":"TypeString","computed":true},"time_created":{"type":"TypeString","computed":true},"versions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_blueprint_published_version":{"schema":{"blueprint_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"last_modified":{"type":"TypeString","computed":true},"scope_id":{"type":"TypeString","required":true},"target_scope":{"type":"TypeString","computed":true},"time_created":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"version":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_custom_domain":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","computed":true},"dns_zone_id":{"type":"TypeString","computed":true},"expiration_date":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tls":{"type":"TypeList","computed":true,"elem":{"schema":{"cdn_frontdoor_secret_id":{"type":"TypeString","computed":true},"certificate_type":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true}}}},"validation_token":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_endpoint":{"schema":{"enabled":{"type":"TypeBool","computed":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_firewall_policy":{"schema":{"enabled":{"type":"TypeBool","computed":true},"frontend_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"mode":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"redirect_url":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_origin_group":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","computed":true},"health_probe":{"type":"TypeList","computed":true,"elem":{"schema":{"interval_in_seconds":{"type":"TypeInt","computed":true},"path":{"type":"TypeString","computed":true},"protocol":{"type":"TypeString","computed":true},"request_type":{"type":"TypeString","computed":true}}}},"load_balancing":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_latency_in_milliseconds":{"type":"TypeInt","computed":true},"sample_size":{"type":"TypeInt","computed":true},"successful_samples_required":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"restore_traffic_time_to_healed_or_new_endpoint_in_minutes":{"type":"TypeInt","computed":true},"session_affinity_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_profile":{"schema":{"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"resource_guid":{"type":"TypeString","computed":true},"response_timeout_seconds":{"type":"TypeInt","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_rule_set":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_secret":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"secret":{"type":"TypeList","computed":true,"elem":{"schema":{"customer_certificate":{"type":"TypeList","computed":true,"elem":{"schema":{"expiration_date":{"type":"TypeString","computed":true},"key_vault_certificate_id":{"type":"TypeString","computed":true},"subject_alternative_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}}},"timeouts":{"read":5}},"azurerm_cdn_profile":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_client_config":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"subscription_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_cognitive_account":{"schema":{"endpoint":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"qna_runtime_endpoint":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_communication_service":{"schema":{"data_location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_confidential_ledger":{"schema":{"azuread_based_service_principal":{"type":"TypeList","computed":true,"elem":{"schema":{"ledger_role_name":{"type":"TypeString","computed":true},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}},"certificate_based_security_principal":{"type":"TypeList","computed":true,"elem":{"schema":{"ledger_role_name":{"type":"TypeString","computed":true},"pem_public_key":{"type":"TypeString","computed":true}}}},"identity_service_endpoint":{"type":"TypeString","computed":true},"ledger_endpoint":{"type":"TypeString","computed":true},"ledger_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_consumption_budget_resource_group":{"schema":{"amount":{"type":"TypeFloat","computed":true},"filter":{"type":"TypeList","computed":true,"elem":{"schema":{"dimension":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"not":{"type":"TypeList","computed":true,"elem":{"schema":{"dimension":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"name":{"type":"TypeString","required":true},"notification":{"type":"TypeList","computed":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"contact_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"contact_roles":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","computed":true},"operator":{"type":"TypeString","computed":true},"threshold":{"type":"TypeInt","computed":true},"threshold_type":{"type":"TypeString","computed":true}}}},"resource_group_id":{"type":"TypeString","required":true},"time_grain":{"type":"TypeString","computed":true},"time_period":{"type":"TypeList","computed":true,"elem":{"schema":{"end_date":{"type":"TypeString","computed":true},"start_date":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_consumption_budget_subscription":{"schema":{"amount":{"type":"TypeFloat","computed":true},"filter":{"type":"TypeList","computed":true,"elem":{"schema":{"dimension":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"not":{"type":"TypeList","computed":true,"elem":{"schema":{"dimension":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"name":{"type":"TypeString","required":true},"notification":{"type":"TypeList","computed":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"contact_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"contact_roles":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","computed":true},"operator":{"type":"TypeString","computed":true},"threshold":{"type":"TypeInt","computed":true},"threshold_type":{"type":"TypeString","computed":true}}}},"subscription_id":{"type":"TypeString","required":true},"time_grain":{"type":"TypeString","computed":true},"time_period":{"type":"TypeList","computed":true,"elem":{"schema":{"end_date":{"type":"TypeString","computed":true},"start_date":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_container_app":{"schema":{"container_app_environment_id":{"type":"TypeString","computed":true},"custom_domain_verification_id":{"type":"TypeString","description":"The ID of the Custom Domain Verification for this Container App.","computed":true},"dapr":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The Dapr Application Identifier.","computed":true},"app_port":{"type":"TypeInt","description":"The port which the application is listening on. This is the same as the `ingress` port.","computed":true},"app_protocol":{"type":"TypeString","description":"The protocol for the app. Possible values include `http` and `grpc`. Defaults to `http`.","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"ingress":{"type":"TypeList","computed":true,"elem":{"schema":{"allow_insecure_connections":{"type":"TypeBool","description":"Should this ingress allow insecure connections?","computed":true},"custom_domain":{"type":"TypeList","computed":true,"elem":{"schema":{"certificate_binding_type":{"type":"TypeString","description":"The Binding type. Possible values include `Disabled` and `SniEnabled`. Defaults to `Disabled`","computed":true},"certificate_id":{"type":"TypeString","description":"The ID of the Certificate.","computed":true},"name":{"type":"TypeString","description":"The hostname of the Certificate. Must be the CN or a named SAN in the certificate.","computed":true}}}},"external_enabled":{"type":"TypeBool","description":"Is this an external Ingress.","computed":true},"fqdn":{"type":"TypeString","description":"The FQDN of the ingress.","computed":true},"target_port":{"type":"TypeInt","description":"The target port on the container for the Ingress traffic.","computed":true},"traffic_weight":{"type":"TypeList","computed":true,"elem":{"schema":{"label":{"type":"TypeString","description":"The label to apply to the revision as a name prefix for routing traffic.","computed":true},"latest_revision":{"type":"TypeBool","description":"This traffic Weight relates to the latest stable Container Revision.","computed":true},"percentage":{"type":"TypeInt","description":"The percentage of traffic to send to this revision.","computed":true},"revision_suffix":{"type":"TypeString","description":"The suffix string to append to the revision. This must be unique for the Container App's lifetime. A default hash created by the service will be used if this value is omitted.","computed":true}}}},"transport":{"type":"TypeString","description":"The transport method for the Ingress. Possible values include `auto`, `http`, and `http2`. Defaults to `auto`","computed":true}}}},"latest_revision_fqdn":{"type":"TypeString","description":"The fully qualified domain name of the latest Container App.","computed":true},"latest_revision_name":{"type":"TypeString","description":"The name of the latest Container Revision.","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"registry":{"type":"TypeList","computed":true,"elem":{"schema":{"identity":{"type":"TypeString","description":"ID of the System or User Managed Identity used to pull images from the Container Registry","computed":true},"password_secret_name":{"type":"TypeString","description":"The name of the Secret Reference containing the password value for this user on the Container Registry.","computed":true},"server":{"type":"TypeString","description":"The hostname for the Container Registry.","computed":true},"username":{"type":"TypeString","description":"The username to use for this Container Registry.","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"revision_mode":{"type":"TypeString","computed":true},"secret":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Secret name.","computed":true},"value":{"type":"TypeString","description":"The value for this secret.","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"template":{"type":"TypeList","computed":true,"elem":{"schema":{"container":{"type":"TypeList","computed":true,"elem":{"schema":{"args":{"type":"TypeList","description":"A list of args to pass to the container.","computed":true,"elem":{"type":"TypeString"}},"command":{"type":"TypeList","description":"A command to pass to the container to override the default. This is provided as a list of command line elements without spaces.","computed":true,"elem":{"type":"TypeString"}},"cpu":{"type":"TypeFloat","description":"The amount of vCPU to allocate to the container. Possible values include `0.25`, `0.5`, `0.75`, `1.0`, `1.25`, `1.5`, `1.75`, and `2.0`. **NOTE:** `cpu` and `memory` must be specified in `0.25'/'0.5Gi` combination increments. e.g. `1.0` / `2.0` or `0.5` / `1.0`","computed":true},"env":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of the environment variable for the container.","computed":true},"secret_name":{"type":"TypeString","description":"The name of the secret that contains the value for this environment variable.","computed":true},"value":{"type":"TypeString","description":"The value for this environment variable. **NOTE:** This value is ignored if `secret_name` is used","computed":true}}}},"ephemeral_storage":{"type":"TypeString","description":"The amount of ephemeral storage available to the Container App.","computed":true},"image":{"type":"TypeString","description":"The image to use to create the container.","computed":true},"liveness_probe":{"type":"TypeList","computed":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.","computed":true},"header":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The HTTP Header Name.","computed":true},"value":{"type":"TypeString","description":"The HTTP Header value.","computed":true}}}},"host":{"type":"TypeString","description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes.","computed":true},"initial_delay":{"type":"TypeInt","description":"The time in seconds to wait after the container has started before the probe is started.","computed":true},"interval_seconds":{"type":"TypeInt","description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`","computed":true},"path":{"type":"TypeString","description":"The URI to use with the `host` for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","description":"The port number on which to connect. Possible values are between `1` and `65535`.","computed":true},"termination_grace_period_seconds":{"type":"TypeInt","description":"The time in seconds after the container is sent the termination signal before the process if forcibly killed.","computed":true},"timeout":{"type":"TypeInt","description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`.","computed":true},"transport":{"type":"TypeString","description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`.","computed":true}}}},"memory":{"type":"TypeString","description":"The amount of memory to allocate to the container. Possible values include `0.5Gi`, `1.0Gi`, `1.5Gi`, `2.0Gi`, `2.5Gi`, `3.0Gi`, `3.5Gi`, and `4.0Gi`. **NOTE:** `cpu` and `memory` must be specified in `0.25'/'0.5Gi` combination increments. e.g. `1.25` / `2.5Gi` or `0.75` / `1.5Gi`","computed":true},"name":{"type":"TypeString","description":"The name of the container.","computed":true},"readiness_probe":{"type":"TypeList","computed":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.","computed":true},"header":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The HTTP Header Name.","computed":true},"value":{"type":"TypeString","description":"The HTTP Header value.","computed":true}}}},"host":{"type":"TypeString","description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes.","computed":true},"interval_seconds":{"type":"TypeInt","description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`","computed":true},"path":{"type":"TypeString","description":"The URI to use for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","description":"The port number on which to connect. Possible values are between `1` and `65535`.","computed":true},"success_count_threshold":{"type":"TypeInt","description":"The number of consecutive successful responses required to consider this probe as successful. Possible values are between `1` and `10`. Defaults to `3`.","computed":true},"timeout":{"type":"TypeInt","description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`.","computed":true},"transport":{"type":"TypeString","description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`.","computed":true}}}},"startup_probe":{"type":"TypeList","computed":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.","computed":true},"header":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The HTTP Header Name.","computed":true},"value":{"type":"TypeString","description":"The HTTP Header value.","computed":true}}}},"host":{"type":"TypeString","computed":true},"interval_seconds":{"type":"TypeInt","description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`","computed":true},"path":{"type":"TypeString","computed":true},"port":{"type":"TypeInt","computed":true},"termination_grace_period_seconds":{"type":"TypeInt","description":"The time in seconds after the container is sent the termination signal before the process if forcibly killed.","computed":true},"timeout":{"type":"TypeInt","description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`.","computed":true},"transport":{"type":"TypeString","computed":true}}}},"volume_mounts":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of the Volume to be mounted in the container.","computed":true},"path":{"type":"TypeString","description":"The path in the container at which to mount this volume.","computed":true}}}}}}},"max_replicas":{"type":"TypeInt","description":"The maximum number of replicas for this container.","computed":true},"min_replicas":{"type":"TypeInt","description":"The minimum number of replicas for this container.","computed":true},"revision_suffix":{"type":"TypeString","description":"The suffix for the revision. This value must be unique for the lifetime of the Resource. If omitted the service will use a hash function to create one.","computed":true},"volume":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the volume."},"storage_name":{"type":"TypeString","optional":true,"description":"The name of the `AzureFile` storage. Required when `storage_type` is `AzureFile`"},"storage_type":{"type":"TypeString","optional":true,"default":"EmptyDir","description":"The type of storage volume. Possible values include `AzureFile` and `EmptyDir`. Defaults to `EmptyDir`."}}},"minItems":1}}}}},"timeouts":{"read":5}},"azurerm_container_app_environment":{"schema":{"default_domain":{"type":"TypeString","description":"The default publicly resolvable name of this Container App Environment","computed":true},"docker_bridge_cidr":{"type":"TypeString","description":"The network addressing in which the Container Apps in this Container App Environment will reside in CIDR notation.","computed":true},"infrastructure_subnet_id":{"type":"TypeString","description":"The existing Subnet in use by the Container Apps Control Plane.","computed":true},"internal_load_balancer_enabled":{"type":"TypeBool","description":"Does the Container Environment operate in Internal Load Balancing Mode?","computed":true},"location":{"type":"TypeString","computed":true},"log_analytics_workspace_name":{"type":"TypeString","description":"The name of the Log Analytics Workspace this Container Apps Managed Environment is linked to.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Container Apps Managed Environment."},"platform_reserved_cidr":{"type":"TypeString","description":"The IP range, in CIDR notation, that is reserved for environment infrastructure IP addresses.","computed":true},"platform_reserved_dns_ip_address":{"type":"TypeString","description":"The IP address from the IP range defined by `platform_reserved_cidr` that is reserved for the internal DNS server.","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"static_ip_address":{"type":"TypeString","description":"The Static IP Address of the Environment.","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_container_app_environment_certificate":{"schema":{"container_app_environment_id":{"type":"TypeString","required":true,"description":"The Container App Managed Environment ID to configure this Certificate on.","forceNew":true},"expiration_date":{"type":"TypeString","description":"The expiration date for the Certificate.","computed":true},"issue_date":{"type":"TypeString","description":"The date of issue for the Certificate.","computed":true},"issuer":{"type":"TypeString","description":"The Certificate Issuer.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Container Apps Certificate.","forceNew":true},"subject_name":{"type":"TypeString","description":"The Subject Name for the Certificate.","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","description":"The Thumbprint of the Certificate.","computed":true}},"timeouts":{"read":5}},"azurerm_container_group":{"schema":{"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"ip_address":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"subnet_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_container_registry":{"schema":{"admin_enabled":{"type":"TypeBool","computed":true},"admin_password":{"type":"TypeString","computed":true},"admin_username":{"type":"TypeString","computed":true},"data_endpoint_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"login_server":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_container_registry_scope_map":{"schema":{"actions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"container_registry_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_container_registry_token":{"schema":{"container_registry_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"scope_map_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_cosmosdb_account":{"schema":{"capabilities":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"consistency_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"consistency_level":{"type":"TypeString","computed":true},"max_interval_in_seconds":{"type":"TypeInt","computed":true},"max_staleness_prefix":{"type":"TypeInt","computed":true}}}},"enable_automatic_failover":{"type":"TypeBool","computed":true},"enable_free_tier":{"type":"TypeBool","computed":true},"enable_multiple_write_locations":{"type":"TypeBool","computed":true},"endpoint":{"type":"TypeString","computed":true},"geo_location":{"type":"TypeList","computed":true,"elem":{"schema":{"failover_priority":{"type":"TypeInt","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true}}}},"ip_range_filter":{"type":"TypeString","computed":true},"is_virtual_network_filter_enabled":{"type":"TypeBool","computed":true},"key_vault_key_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"offer_type":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"primary_readonly_key":{"type":"TypeString","computed":true},"read_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"secondary_key":{"type":"TypeString","computed":true},"secondary_readonly_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true}}}},"write_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_cosmosdb_mongo_database":{"schema":{"account_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_cosmosdb_restorable_database_accounts":{"schema":{"accounts":{"type":"TypeList","computed":true,"elem":{"schema":{"api_type":{"type":"TypeString","computed":true},"creation_time":{"type":"TypeString","computed":true},"deletion_time":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"restorable_locations":{"type":"TypeList","computed":true,"elem":{"schema":{"creation_time":{"type":"TypeString","computed":true},"deletion_time":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"regional_database_account_instance_id":{"type":"TypeString","computed":true}}}}}}},"location":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_cosmosdb_sql_database":{"schema":{"account_name":{"type":"TypeString","required":true},"autoscale_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_cosmosdb_sql_role_definition":{"schema":{"account_name":{"type":"TypeString","required":true},"assignable_scopes":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"permissions":{"type":"TypeSet","computed":true,"elem":{"schema":{"data_actions":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role_definition_id":{"type":"TypeString","required":true},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_data_factory":{"schema":{"github_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"account_name":{"type":"TypeString","computed":true},"branch_name":{"type":"TypeString","computed":true},"git_url":{"type":"TypeString","computed":true},"repository_name":{"type":"TypeString","computed":true},"root_folder":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vsts_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"account_name":{"type":"TypeString","computed":true},"branch_name":{"type":"TypeString","computed":true},"project_name":{"type":"TypeString","computed":true},"repository_name":{"type":"TypeString","computed":true},"root_folder":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_data_protection_backup_vault":{"schema":{"datastore_type":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"redundancy":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_data_share":{"schema":{"account_id":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"snapshot_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"recurrence":{"type":"TypeString","computed":true},"start_time":{"type":"TypeString","computed":true}}}},"terms":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_data_share_account":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_data_share_dataset_blob_storage":{"schema":{"container_name":{"type":"TypeString","computed":true},"data_share_id":{"type":"TypeString","required":true},"display_name":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","computed":true},"folder_path":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"storage_account":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","computed":true},"subscription_id":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_data_share_dataset_data_lake_gen2":{"schema":{"display_name":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","computed":true},"file_system_name":{"type":"TypeString","computed":true},"folder_path":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"share_id":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_data_share_dataset_kusto_cluster":{"schema":{"display_name":{"type":"TypeString","computed":true},"kusto_cluster_id":{"type":"TypeString","computed":true},"kusto_cluster_location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"share_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_data_share_dataset_kusto_database":{"schema":{"display_name":{"type":"TypeString","computed":true},"kusto_cluster_location":{"type":"TypeString","computed":true},"kusto_database_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"share_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_database_migration_project":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"service_name":{"type":"TypeString","required":true},"source_platform":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_platform":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_database_migration_service":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_databox_edge_device":{"schema":{"device_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"configured_role_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"culture":{"type":"TypeString","computed":true},"hcs_version":{"type":"TypeString","computed":true},"model":{"type":"TypeString","computed":true},"node_count":{"type":"TypeInt","computed":true},"serial_number":{"type":"TypeString","computed":true},"software_version":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"time_zone":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_databricks_workspace":{"schema":{"location":{"type":"TypeString","computed":true},"managed_disk_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"storage_account_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true},"workspace_url":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_databricks_workspace_private_endpoint_connection":{"schema":{"connections":{"type":"TypeList","computed":true,"elem":{"schema":{"action_required":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"workspace_private_endpoint_id":{"type":"TypeString","computed":true}}}},"private_endpoint_id":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dedicated_host":{"schema":{"dedicated_host_group_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_dedicated_host_group":{"schema":{"automatic_placement_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"platform_fault_domain_count":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_dev_test_lab":{"schema":{"artifacts_storage_account_id":{"type":"TypeString","computed":true},"default_premium_storage_account_id":{"type":"TypeString","computed":true},"default_storage_account_id":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"premium_data_disk_storage_account_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"storage_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_dev_test_virtual_network":{"schema":{"allowed_subnets":{"type":"TypeList","computed":true,"elem":{"schema":{"allow_public_ip":{"type":"TypeString","computed":true},"lab_subnet_name":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true}}}},"lab_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"subnet_overrides":{"type":"TypeList","computed":true,"elem":{"schema":{"lab_subnet_name":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"use_in_vm_creation_permission":{"type":"TypeString","computed":true},"use_public_ip_address_permission":{"type":"TypeString","computed":true},"virtual_network_pool_name":{"type":"TypeString","computed":true}}}},"unique_identifier":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_digital_twins_instance":{"schema":{"host_name":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_disk_access":{"schema":{"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_disk_encryption_set":{"schema":{"auto_key_rotation_enabled":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"key_vault_key_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_dns_a_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_aaaa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_caa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"flags":{"type":"TypeInt","computed":true},"tag":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_cname_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_mx_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"exchange":{"type":"TypeString","computed":true},"preference":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_ns_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_ptr_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_soa_record":{"schema":{"email":{"type":"TypeString","computed":true},"expire_time":{"type":"TypeInt","computed":true},"fqdn":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"minimum_ttl":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","optional":true,"default":"@"},"refresh_time":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"retry_time":{"type":"TypeInt","computed":true},"serial_number":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_srv_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"port":{"type":"TypeInt","computed":true},"priority":{"type":"TypeInt","computed":true},"target":{"type":"TypeString","computed":true},"weight":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_txt_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"value":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_zone":{"schema":{"max_number_of_record_sets":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"name_servers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"number_of_record_sets":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_elastic_cloud_elasticsearch":{"schema":{"elastic_cloud_deployment_id":{"type":"TypeString","computed":true},"elastic_cloud_email_address":{"type":"TypeString","computed":true},"elastic_cloud_sso_default_url":{"type":"TypeString","computed":true},"elastic_cloud_user_id":{"type":"TypeString","computed":true},"elasticsearch_service_url":{"type":"TypeString","computed":true},"kibana_service_url":{"type":"TypeString","computed":true},"kibana_sso_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"filtering_tag":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"send_activity_logs":{"type":"TypeBool","computed":true},"send_azuread_logs":{"type":"TypeBool","computed":true},"send_subscription_logs":{"type":"TypeBool","computed":true}}}},"monitoring_enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_eventgrid_domain":{"schema":{"endpoint":{"type":"TypeString","computed":true},"inbound_ip_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"ip_mask":{"type":"TypeString","computed":true}}}},"input_mapping_default_values":{"type":"TypeList","computed":true,"elem":{"schema":{"data_version":{"type":"TypeString","computed":true},"event_type":{"type":"TypeString","computed":true},"subject":{"type":"TypeString","computed":true}}}},"input_mapping_fields":{"type":"TypeList","computed":true,"elem":{"schema":{"data_version":{"type":"TypeString","computed":true},"event_time":{"type":"TypeString","computed":true},"event_type":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"subject":{"type":"TypeString","computed":true},"topic":{"type":"TypeString","computed":true}}}},"input_schema":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_eventgrid_domain_topic":{"schema":{"domain_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_eventgrid_system_topic":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"metric_arm_resource_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"source_arm_resource_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"topic_type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_eventgrid_topic":{"schema":{"endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_eventhub":{"schema":{"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"partition_count":{"type":"TypeInt","computed":true},"partition_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_eventhub_authorization_rule":{"schema":{"eventhub_name":{"type":"TypeString","required":true},"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"read":5}},"azurerm_eventhub_cluster":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_eventhub_consumer_group":{"schema":{"eventhub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"user_metadata":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_eventhub_namespace":{"schema":{"auto_inflate_enabled":{"type":"TypeBool","computed":true},"capacity":{"type":"TypeInt","computed":true},"dedicated_cluster_id":{"type":"TypeString","computed":true},"default_primary_connection_string":{"type":"TypeString","computed":true},"default_primary_connection_string_alias":{"type":"TypeString","computed":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_connection_string":{"type":"TypeString","computed":true},"default_secondary_connection_string_alias":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"kafka_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"maximum_throughput_units":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_eventhub_namespace_authorization_rule":{"schema":{"listen":{"type":"TypeBool","computed":true},"manage":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_eventhub_sas":{"schema":{"connection_string":{"type":"TypeString","required":true},"expiry":{"type":"TypeString","required":true},"sas":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_express_route_circuit":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"peerings":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_asn":{"type":"TypeInt","computed":true},"peer_asn":{"type":"TypeInt","computed":true},"peering_type":{"type":"TypeString","computed":true},"primary_peer_address_prefix":{"type":"TypeString","computed":true},"secondary_peer_address_prefix":{"type":"TypeString","computed":true},"shared_key":{"type":"TypeString","computed":true},"vlan_id":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"service_key":{"type":"TypeString","computed":true},"service_provider_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"bandwidth_in_mbps":{"type":"TypeInt","computed":true},"peering_location":{"type":"TypeString","computed":true},"service_provider_name":{"type":"TypeString","computed":true}}}},"service_provider_provisioning_state":{"type":"TypeString","computed":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"family":{"type":"TypeString","computed":true},"tier":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_extended_locations":{"schema":{"extended_locations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_firewall":{"schema":{"dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"firewall_policy_id":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"management_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"sku_tier":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"threat_intel_mode":{"type":"TypeString","computed":true},"virtual_hub":{"type":"TypeList","computed":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_count":{"type":"TypeInt","computed":true},"virtual_hub_id":{"type":"TypeString","computed":true}}}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_firewall_policy":{"schema":{"base_policy_id":{"type":"TypeString","computed":true},"child_policies":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns":{"type":"TypeList","computed":true,"elem":{"schema":{"network_rule_fqdn_enabled":{"type":"TypeBool","computed":true},"proxy_enabled":{"type":"TypeBool","computed":true},"servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"firewalls":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"rule_collection_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"threat_intelligence_allowlist":{"type":"TypeList","computed":true,"elem":{"schema":{"fqdns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"threat_intelligence_mode":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_function_app":{"schema":{"app_service_plan_id":{"type":"TypeString","computed":true},"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"client_cert_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","computed":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"app_scale_limit":{"type":"TypeInt","computed":true},"auto_swap_slot_name":{"type":"TypeString","computed":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","computed":true},"elastic_instance_minimum":{"type":"TypeInt","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"service_tag":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}}}},"java_version":{"type":"TypeString","computed":true},"linux_fx_version":{"type":"TypeString","computed":true},"min_tls_version":{"type":"TypeString","computed":true},"pre_warmed_instance_count":{"type":"TypeInt","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","computed":true},"scm_ip_restriction":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"service_tag":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}}}},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker_process":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"source_control":{"type":"TypeList","computed":true,"elem":{"schema":{"branch":{"type":"TypeString","computed":true},"manual_integration":{"type":"TypeBool","computed":true},"repo_url":{"type":"TypeString","computed":true},"rollback_enabled":{"type":"TypeBool","computed":true},"use_mercurial":{"type":"TypeBool","computed":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_function_app_host_keys":{"schema":{"blobs_extension_key":{"type":"TypeString","computed":true},"default_function_key":{"type":"TypeString","computed":true},"durabletask_extension_key":{"type":"TypeString","computed":true},"event_grid_extension_config_key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"signalr_extension_key":{"type":"TypeString","computed":true},"webpubsub_extension_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_hdinsight_cluster":{"schema":{"cluster_version":{"type":"TypeString","computed":true},"component_versions":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"edge_ssh_endpoint":{"type":"TypeString","computed":true},"gateway":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"https_endpoint":{"type":"TypeString","computed":true},"kafka_rest_proxy_endpoint":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"ssh_endpoint":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","computed":true},"tls_min_version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_healthcare_dicom_service":{"schema":{"authentication":{"type":"TypeList","computed":true,"elem":{"schema":{"audience":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"authority":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_endpoint":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"service_url":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_healthcare_fhir_service":{"schema":{"access_policy_object_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"authentication":{"type":"TypeList","computed":true,"elem":{"schema":{"audience":{"type":"TypeString","computed":true},"authority":{"type":"TypeString","computed":true},"smart_proxy_enabled":{"type":"TypeBool","computed":true}}}},"configuration_export_storage_account_name":{"type":"TypeString","computed":true},"container_registry_login_server_url":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_methods":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_origins":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"credentials_allowed":{"type":"TypeBool","computed":true},"max_age_in_seconds":{"type":"TypeInt","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_healthcare_medtech_service":{"schema":{"device_mapping_json":{"type":"TypeString","computed":true},"eventhub_consumer_group_name":{"type":"TypeString","computed":true},"eventhub_name":{"type":"TypeString","computed":true},"eventhub_namespace_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_healthcare_service":{"schema":{"access_policy_object_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"authentication_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"audience":{"type":"TypeString","computed":true},"authority":{"type":"TypeString","computed":true},"smart_proxy_enabled":{"type":"TypeBool","computed":true}}}},"cors_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"allow_credentials":{"type":"TypeBool","computed":true},"allowed_headers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"allowed_methods":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_origins":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"max_age_in_seconds":{"type":"TypeInt","computed":true}}}},"cosmosdb_key_vault_key_versionless_id":{"type":"TypeString","computed":true},"cosmosdb_throughput":{"type":"TypeInt","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_healthcare_workspace":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_hybrid_compute_machine":{"schema":{"ad_fqdn":{"type":"TypeString","computed":true},"agent_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"extensions_allow_list":{"type":"TypeList","computed":true,"elem":{"schema":{"publisher":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"extensions_block_list":{"type":"TypeList","computed":true,"elem":{"schema":{"publisher":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"extensions_enabled":{"type":"TypeBool","computed":true},"guest_configuration_enabled":{"type":"TypeBool","computed":true},"incoming_connections_ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proxy_bypass":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proxy_url":{"type":"TypeString","computed":true}}}},"agent_version":{"type":"TypeString","computed":true},"client_public_key":{"type":"TypeString","computed":true},"cloud_metadata":{"type":"TypeList","computed":true,"elem":{"schema":{"provider":{"type":"TypeString","computed":true}}}},"detected_properties":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","computed":true},"dns_fqdn":{"type":"TypeString","computed":true},"domain_name":{"type":"TypeString","computed":true},"error_details":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_info":{"type":"TypeList","computed":true,"elem":{"schema":{"info":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"code":{"type":"TypeString","computed":true},"message":{"type":"TypeString","computed":true},"target":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"last_status_change":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"location_data":{"type":"TypeList","computed":true,"elem":{"schema":{"city":{"type":"TypeString","computed":true},"country_or_region":{"type":"TypeString","computed":true},"district":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"machine_fqdn":{"type":"TypeString","computed":true},"mssql_discovered":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"os_name":{"type":"TypeString","computed":true},"os_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"computer_name":{"type":"TypeString","computed":true},"linux_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"patch_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"assessment_mode":{"type":"TypeString","computed":true},"patch_mode":{"type":"TypeString","computed":true}}}}}}},"windows_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"patch_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"assessment_mode":{"type":"TypeString","computed":true},"patch_mode":{"type":"TypeString","computed":true}}}}}}}}}},"os_sku":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"os_version":{"type":"TypeString","computed":true},"parent_cluster_resource_id":{"type":"TypeString","computed":true},"private_link_scope_resource_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_status":{"type":"TypeList","computed":true,"elem":{"schema":{"extension_service":{"type":"TypeList","computed":true,"elem":{"schema":{"startup_type":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}},"guest_configuration_service":{"type":"TypeList","computed":true,"elem":{"schema":{"startup_type":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}}}}},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vm_id":{"type":"TypeString","computed":true},"vm_uuid":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_image":{"schema":{"data_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","computed":true},"caching":{"type":"TypeString","computed":true},"lun":{"type":"TypeInt","computed":true},"managed_disk_id":{"type":"TypeString","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true},"name_regex":{"type":"TypeString","optional":true},"os_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","computed":true},"caching":{"type":"TypeString","computed":true},"managed_disk_id":{"type":"TypeString","computed":true},"os_state":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"sort_descending":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_resilient":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_images":{"schema":{"images":{"type":"TypeList","computed":true,"elem":{"schema":{"data_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","computed":true},"caching":{"type":"TypeString","computed":true},"lun":{"type":"TypeInt","computed":true},"managed_disk_id":{"type":"TypeString","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"os_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","computed":true},"caching":{"type":"TypeString","computed":true},"disk_encryption_set_id":{"type":"TypeString","computed":true},"managed_disk_id":{"type":"TypeString","computed":true},"os_state":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_resilient":{"type":"TypeBool","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags_filter":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_iothub":{"schema":{"hostname":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_iothub_dps":{"schema":{"allocation_policy":{"type":"TypeString","computed":true},"device_provisioning_host_name":{"type":"TypeString","computed":true},"id_scope":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"service_operations_host_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_iothub_dps_shared_access_policy":{"schema":{"iothub_dps_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_iothub_shared_access_policy":{"schema":{"iothub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_ip_group":{"schema":{"cidrs":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_key_vault":{"schema":{"access_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"application_id":{"type":"TypeString","computed":true},"certificate_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"key_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"object_id":{"type":"TypeString","computed":true},"secret_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"storage_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}}}},"enable_rbac_authorization":{"type":"TypeBool","computed":true},"enabled_for_deployment":{"type":"TypeBool","computed":true},"enabled_for_disk_encryption":{"type":"TypeBool","computed":true},"enabled_for_template_deployment":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_acls":{"type":"TypeList","computed":true,"elem":{"schema":{"bypass":{"type":"TypeString","computed":true},"default_action":{"type":"TypeString","computed":true},"ip_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"public_network_access_enabled":{"type":"TypeBool","computed":true},"purge_protection_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true},"vault_uri":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_key_vault_access_policy":{"schema":{"certificate_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"key_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"secret_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_key_vault_certificate":{"schema":{"certificate_data":{"type":"TypeString","computed":true},"certificate_data_base64":{"type":"TypeString","computed":true},"certificate_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"issuer_parameters":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"key_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"curve":{"type":"TypeString","computed":true},"exportable":{"type":"TypeBool","computed":true},"key_size":{"type":"TypeInt","computed":true},"key_type":{"type":"TypeString","computed":true},"reuse_key":{"type":"TypeBool","computed":true}}}},"lifetime_action":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeList","computed":true,"elem":{"schema":{"action_type":{"type":"TypeString","computed":true}}}},"trigger":{"type":"TypeList","computed":true,"elem":{"schema":{"days_before_expiry":{"type":"TypeInt","computed":true},"lifetime_percentage":{"type":"TypeInt","computed":true}}}}}}},"secret_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"content_type":{"type":"TypeString","computed":true}}}},"x509_certificate_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"extended_key_usage":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"key_usage":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"subject":{"type":"TypeString","computed":true},"subject_alternative_names":{"type":"TypeList","computed":true,"elem":{"schema":{"dns_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"emails":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"upns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"validity_in_months":{"type":"TypeInt","computed":true}}}}}}},"expires":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"not_before":{"type":"TypeString","computed":true},"resource_manager_id":{"type":"TypeString","computed":true},"resource_manager_versionless_id":{"type":"TypeString","computed":true},"secret_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true},"version":{"type":"TypeString","optional":true,"computed":true},"versionless_id":{"type":"TypeString","computed":true},"versionless_secret_id":{"type":"TypeString","computed":true}},"timeouts":{"read":30}},"azurerm_key_vault_certificate_data":{"schema":{"certificates_count":{"type":"TypeInt","computed":true},"expires":{"type":"TypeString","computed":true},"hex":{"type":"TypeString","computed":true},"key":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"not_before":{"type":"TypeString","computed":true},"pem":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"read":5}},"azurerm_key_vault_certificate_issuer":{"schema":{"account_id":{"type":"TypeString","computed":true},"admin":{"type":"TypeList","computed":true,"elem":{"schema":{"email_address":{"type":"TypeString","computed":true},"first_name":{"type":"TypeString","computed":true},"last_name":{"type":"TypeString","computed":true},"phone":{"type":"TypeString","computed":true}}}},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"org_id":{"type":"TypeString","computed":true},"provider_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_key_vault_certificates":{"schema":{"certificates":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"include_pending":{"type":"TypeBool","optional":true,"default":true},"key_vault_id":{"type":"TypeString","required":true},"names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_key_vault_encrypted_value":{"schema":{"algorithm":{"type":"TypeString","required":true},"decoded_plain_text_value":{"type":"TypeString","computed":true},"encrypted_data":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","required":true},"plain_text_value":{"type":"TypeString","optional":true}},"timeouts":{"read":5}},"azurerm_key_vault_key":{"schema":{"curve":{"type":"TypeString","computed":true},"e":{"type":"TypeString","computed":true},"key_opts":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"key_size":{"type":"TypeInt","computed":true},"key_type":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","required":true},"n":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_key_openssh":{"type":"TypeString","computed":true},"public_key_pem":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"resource_versionless_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true},"versionless_id":{"type":"TypeString","computed":true},"x":{"type":"TypeString","computed":true},"y":{"type":"TypeString","computed":true}},"timeouts":{"read":30}},"azurerm_key_vault_managed_hardware_security_module":{"schema":{"admin_object_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"hsm_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"purge_protection_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"soft_delete_retention_days":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_key_vault_secret":{"schema":{"content_type":{"type":"TypeString","computed":true},"expiration_date":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"not_before_date":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"resource_versionless_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","computed":true},"version":{"type":"TypeString","optional":true},"versionless_id":{"type":"TypeString","computed":true}},"timeouts":{"read":30}},"azurerm_key_vault_secrets":{"schema":{"key_vault_id":{"type":"TypeString","required":true},"names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"secrets":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_kubernetes_cluster":{"schema":{"aci_connector_linux":{"type":"TypeList","computed":true,"elem":{"schema":{"subnet_name":{"type":"TypeString","computed":true}}}},"agent_pool_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"enable_auto_scaling":{"type":"TypeBool","computed":true},"enable_node_public_ip":{"type":"TypeBool","computed":true},"max_count":{"type":"TypeInt","computed":true},"max_pods":{"type":"TypeInt","computed":true},"min_count":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","computed":true},"node_labels":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"node_public_ip_prefix_id":{"type":"TypeString","computed":true},"node_taints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"orchestrator_version":{"type":"TypeString","computed":true},"os_disk_size_gb":{"type":"TypeInt","computed":true},"os_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"upgrade_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"max_surge":{"type":"TypeString","computed":true}}}},"vm_size":{"type":"TypeString","computed":true},"vnet_subnet_id":{"type":"TypeString","computed":true},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"api_server_authorized_ip_ranges":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"azure_active_directory_role_based_access_control":{"type":"TypeList","computed":true,"elem":{"schema":{"admin_group_object_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"azure_rbac_enabled":{"type":"TypeBool","computed":true},"client_app_id":{"type":"TypeString","computed":true},"managed":{"type":"TypeBool","computed":true},"server_app_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}},"azure_policy_enabled":{"type":"TypeBool","computed":true},"current_kubernetes_version":{"type":"TypeString","computed":true},"custom_ca_trust_certificates_base64":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"disk_encryption_set_id":{"type":"TypeString","computed":true},"dns_prefix":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"http_application_routing_enabled":{"type":"TypeBool","computed":true},"http_application_routing_zone_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"ingress_application_gateway":{"type":"TypeList","computed":true,"elem":{"schema":{"effective_gateway_id":{"type":"TypeString","computed":true},"gateway_id":{"type":"TypeString","computed":true},"gateway_name":{"type":"TypeString","computed":true},"ingress_application_gateway_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"subnet_cidr":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"key_management_service":{"type":"TypeList","computed":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","computed":true},"key_vault_network_access":{"type":"TypeString","computed":true}}}},"key_vault_secrets_provider":{"type":"TypeList","computed":true,"elem":{"schema":{"secret_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"secret_rotation_enabled":{"type":"TypeBool","computed":true},"secret_rotation_interval":{"type":"TypeString","computed":true}}}},"kube_admin_config":{"type":"TypeList","computed":true,"elem":{"schema":{"client_certificate":{"type":"TypeString","computed":true},"client_key":{"type":"TypeString","computed":true},"cluster_ca_certificate":{"type":"TypeString","computed":true},"host":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"kube_admin_config_raw":{"type":"TypeString","computed":true},"kube_config":{"type":"TypeList","computed":true,"elem":{"schema":{"client_certificate":{"type":"TypeString","computed":true},"client_key":{"type":"TypeString","computed":true},"cluster_ca_certificate":{"type":"TypeString","computed":true},"host":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"kube_config_raw":{"type":"TypeString","computed":true},"kubelet_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"kubernetes_version":{"type":"TypeString","computed":true},"linux_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"admin_username":{"type":"TypeString","computed":true},"ssh_key":{"type":"TypeList","computed":true,"elem":{"schema":{"key_data":{"type":"TypeString","computed":true}}}}}}},"location":{"type":"TypeString","computed":true},"microsoft_defender":{"type":"TypeList","computed":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"network_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"dns_service_ip":{"type":"TypeString","computed":true},"docker_bridge_cidr":{"type":"TypeString","computed":true},"load_balancer_sku":{"type":"TypeString","computed":true},"network_plugin":{"type":"TypeString","computed":true},"network_policy":{"type":"TypeString","computed":true},"pod_cidr":{"type":"TypeString","computed":true},"service_cidr":{"type":"TypeString","computed":true}}}},"node_resource_group":{"type":"TypeString","computed":true},"node_resource_group_id":{"type":"TypeString","computed":true},"oidc_issuer_enabled":{"type":"TypeBool","computed":true},"oidc_issuer_url":{"type":"TypeString","computed":true},"oms_agent":{"type":"TypeList","computed":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","computed":true},"msi_auth_for_monitoring_enabled":{"type":"TypeBool","computed":true},"oms_agent_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}}}}},"open_service_mesh_enabled":{"type":"TypeBool","computed":true},"private_cluster_enabled":{"type":"TypeBool","computed":true},"private_fqdn":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"role_based_access_control_enabled":{"type":"TypeBool","computed":true},"service_mesh_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"external_ingress_gateway_enabled":{"type":"TypeBool","computed":true},"internal_ingress_gateway_enabled":{"type":"TypeBool","computed":true},"mode":{"type":"TypeString","computed":true}}}},"service_principal":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true}}}},"storage_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_driver_enabled":{"type":"TypeBool","computed":true},"disk_driver_enabled":{"type":"TypeBool","computed":true},"disk_driver_version":{"type":"TypeString","computed":true},"file_driver_enabled":{"type":"TypeBool","computed":true},"snapshot_controller_enabled":{"type":"TypeBool","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"windows_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"admin_username":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_kubernetes_cluster_node_pool":{"schema":{"enable_auto_scaling":{"type":"TypeBool","computed":true},"enable_node_public_ip":{"type":"TypeBool","computed":true},"eviction_policy":{"type":"TypeString","computed":true},"kubernetes_cluster_name":{"type":"TypeString","required":true},"max_count":{"type":"TypeInt","computed":true},"max_pods":{"type":"TypeInt","computed":true},"min_count":{"type":"TypeInt","computed":true},"mode":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"node_count":{"type":"TypeInt","computed":true},"node_labels":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"node_public_ip_prefix_id":{"type":"TypeString","computed":true},"node_taints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"orchestrator_version":{"type":"TypeString","computed":true},"os_disk_size_gb":{"type":"TypeInt","computed":true},"os_disk_type":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"priority":{"type":"TypeString","computed":true},"proximity_placement_group_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"spot_max_price":{"type":"TypeFloat","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"upgrade_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"max_surge":{"type":"TypeString","computed":true}}}},"vm_size":{"type":"TypeString","computed":true},"vnet_subnet_id":{"type":"TypeString","computed":true},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_kubernetes_node_pool_snapshot":{"schema":{"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"source_node_pool_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_kubernetes_service_versions":{"schema":{"include_preview":{"type":"TypeBool","optional":true,"default":true},"latest_version":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"version_prefix":{"type":"TypeString","optional":true},"versions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_kusto_cluster":{"schema":{"data_ingestion_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"uri":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_kusto_database":{"schema":{"cluster_name":{"type":"TypeString","required":true},"hot_cache_period":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"size":{"type":"TypeFloat","computed":true},"soft_delete_period":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_lb":{"schema":{"frontend_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_address_allocation":{"type":"TypeString","computed":true},"private_ip_address_version":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_lb_backend_address_pool":{"schema":{"backend_address":{"type":"TypeList","computed":true,"elem":{"schema":{"inbound_nat_rule_port_mapping":{"type":"TypeList","computed":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","computed":true},"frontend_port":{"type":"TypeInt","computed":true},"inbound_nat_rule_name":{"type":"TypeString","computed":true}}}},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"virtual_network_id":{"type":"TypeString","computed":true}}}},"backend_ip_configurations":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true}}}},"inbound_nat_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancing_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"loadbalancer_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"outbound_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_lb_outbound_rule":{"schema":{"allocated_outbound_ports":{"type":"TypeInt","computed":true},"backend_address_pool_id":{"type":"TypeString","computed":true},"frontend_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"loadbalancer_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","computed":true},"tcp_reset_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_lb_rule":{"schema":{"backend_address_pool_id":{"type":"TypeString","computed":true},"backend_port":{"type":"TypeInt","computed":true},"disable_outbound_snat":{"type":"TypeBool","computed":true},"enable_floating_ip":{"type":"TypeBool","computed":true},"enable_tcp_reset":{"type":"TypeBool","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","computed":true},"frontend_port":{"type":"TypeInt","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"load_distribution":{"type":"TypeString","computed":true},"loadbalancer_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"probe_id":{"type":"TypeString","computed":true},"protocol":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_linux_function_app":{"schema":{"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"The list of Allowed audience values considered when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret for the Client ID.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true}}}},"additional_login_parameters":{"type":"TypeMap","description":"The map of Login Parameters sent to the OpenID Connect authorization endpoint when a user logs in.","computed":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","description":"The default authentication provider used when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","description":"Is the Authentication / Authorization feature enabled?","computed":true},"facebook":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret":{"type":"TypeString","description":"The App Secret of the Facebook app used for Facebook Login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"github":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret of the GitHub app used for GitHub Login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret":{"type":"TypeString","description":"The client secret associated with the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes that requested as part of Google Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"issuer":{"type":"TypeString","description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens.","computed":true},"microsoft":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret":{"type":"TypeString","description":"The OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"runtime_version":{"type":"TypeString","description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Are platform-specific security tokens that are obtained during login flows durably stored?","computed":true},"twitter":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret":{"type":"TypeString","description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_client_action":{"type":"TypeString","description":"The action taken when an unauthenticated client attempts to access the app.","computed":true}}}},"auth_settings_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret_certificate_thumbprint":{"type":"TypeString","description":"The thumbprint of the certificate used for signing purposes.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true},"jwt_allowed_client_applications":{"type":"TypeList","description":"A list of Allowed Client Applications in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","description":"A list of Allowed Groups in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","description":"The Azure Tenant URI for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`","computed":true},"www_authentication_disabled":{"type":"TypeBool","description":"Is the www-authenticate provider omitted from the request?","computed":true}}}},"apple_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Apple web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Apple Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Apple Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"auth_enabled":{"type":"TypeBool","description":"Is the AuthV2 Settings be enabled.","computed":true},"azure_static_web_app_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with Azure Static Web App Authentication.","computed":true}}}},"config_file_path":{"type":"TypeString","description":"The path to the App Auth settings.","computed":true},"custom_oidc_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`","computed":true},"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with this Custom OIDC.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","description":"The name of the Custom OIDC Authentication Provider.","computed":true},"name_claim_type":{"type":"TypeString","description":"The name of the claim that contains the users name.","computed":true},"openid_configuration_endpoint":{"type":"TypeString","description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider.","computed":true},"scopes":{"type":"TypeList","description":"The list of the scopes that should be requested while authenticating.","computed":true,"elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","description":"The Default Authentication Provider used when the `unauthenticated_action` is set to `RedirectToLoginPage`.","computed":true},"excluded_paths":{"type":"TypeList","description":"The paths which are excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","computed":true,"elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"graph_api_version":{"type":"TypeString","description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"forward_proxy_convention":{"type":"TypeString","description":"The convention used to determine the url of the request made.","computed":true},"forward_proxy_custom_host_header_name":{"type":"TypeString","description":"The name of the header containing the host of the request.","computed":true},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","description":"The name of the header containing the scheme of the request.","computed":true},"github_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"http_route_api_prefix":{"type":"TypeString","description":"The prefix that precedes all the authentication and authorisation paths.","computed":true},"login":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","computed":true,"elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","computed":true},"cookie_expiration_time":{"type":"TypeString","description":"The time after the request is made when the session cookie will expire.","computed":true},"logout_endpoint":{"type":"TypeString","description":"The endpoint to which logout requests are made.","computed":true},"nonce_expiration_time":{"type":"TypeString","description":"The time after the request is made when the nonce will expire.","computed":true},"preserve_url_fragments_for_logins":{"type":"TypeBool","description":"Are the fragments from the request be preserved after the login request is made.","computed":true},"token_refresh_extension_time":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Is the Token Store configuration Enabled.","computed":true},"token_store_path":{"type":"TypeString","description":"The directory path in the App Filesystem in which the tokens are stored.","computed":true},"token_store_sas_setting_name":{"type":"TypeString","description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens.","computed":true},"validate_nonce":{"type":"TypeBool","description":"Is the nonce be validated while completing the login flow.","computed":true}}}},"microsoft_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"require_authentication":{"type":"TypeBool","description":"Is the authentication flow used for all requests.","computed":true},"require_https":{"type":"TypeBool","description":"Is HTTPS required on connections?","computed":true},"runtime_version":{"type":"TypeString","description":"The Runtime Version of the Authentication and Authorisation feature of this App.","computed":true},"twitter_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_action":{"type":"TypeString","computed":true}}}},"availability":{"type":"TypeString","computed":true},"backup":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","description":"Is this backup job enabled?","computed":true},"name":{"type":"TypeString","description":"The name of this Backup.","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","description":"How often the backup should is executed in multiples of the `frequency_unit`.","computed":true},"frequency_unit":{"type":"TypeString","description":"The unit of time for how often the backup takes place.","computed":true},"keep_at_least_one_backup":{"type":"TypeBool","description":"Does the service keep at least one backup, regardless of age of backup.","computed":true},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","description":"After how many days are backups deleted.","computed":true},"start_time":{"type":"TypeString","description":"When the schedule should start working in RFC-3339 format.","computed":true}}}},"storage_account_url":{"type":"TypeString","description":"The SAS URL to the container.","computed":true}}}},"builtin_logging_enabled":{"type":"TypeBool","computed":true},"client_certificate_enabled":{"type":"TypeBool","computed":true},"client_certificate_exclusion_paths":{"type":"TypeString","description":"Paths to exclude when using client certificates, separated by ;","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of this Connection.","computed":true},"type":{"type":"TypeString","description":"The type of database.","computed":true},"value":{"type":"TypeString","description":"The connection string value.","computed":true}}}},"content_share_force_disabled":{"type":"TypeBool","computed":true},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"functions_extension_version":{"type":"TypeString","computed":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_plan_id":{"type":"TypeString","computed":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"api_definition_url":{"type":"TypeString","computed":true},"api_management_api_id":{"type":"TypeString","computed":true},"app_command_line":{"type":"TypeString","computed":true},"app_scale_limit":{"type":"TypeInt","computed":true},"app_service_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","computed":true},"retention_period_days":{"type":"TypeInt","computed":true}}}},"application_insights_connection_string":{"type":"TypeString","computed":true},"application_insights_key":{"type":"TypeString","computed":true},"application_stack":{"type":"TypeList","computed":true,"elem":{"schema":{"docker":{"type":"TypeList","computed":true,"elem":{"schema":{"image_name":{"type":"TypeString","computed":true},"image_tag":{"type":"TypeString","computed":true},"registry_password":{"type":"TypeString","computed":true},"registry_url":{"type":"TypeString","computed":true},"registry_username":{"type":"TypeString","computed":true}}}},"dotnet_version":{"type":"TypeString","computed":true},"java_version":{"type":"TypeString","computed":true},"node_version":{"type":"TypeString","computed":true},"powershell_core_version":{"type":"TypeString","computed":true},"python_version":{"type":"TypeString","computed":true},"use_custom_runtime":{"type":"TypeBool","computed":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","computed":true}}}},"container_registry_managed_identity_client_id":{"type":"TypeString","computed":true},"container_registry_use_managed_identity":{"type":"TypeBool","computed":true},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeList","description":"The list of origins that are allowed to make cross-origin calls.","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","description":"Are credentials allowed in CORS requests?","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"elastic_instance_minimum":{"type":"TypeInt","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_eviction_time_in_min":{"type":"TypeInt","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"pre_warmed_instance_count":{"type":"TypeInt","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"scm_minimum_tls_version":{"type":"TypeString","computed":true},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"worker_count":{"type":"TypeInt","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connection_string_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"storage_account_access_key":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","computed":true},"storage_key_vault_secret_id":{"type":"TypeString","description":"The Key Vault Secret ID, including version, that contains the Connection String used to connect to the storage account for this Function App.","computed":true},"storage_uses_managed_identity":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"usage":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":25}},"azurerm_linux_web_app":{"schema":{"app_metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"The list of Allowed audience values considered when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret for the Client ID.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true}}}},"additional_login_parameters":{"type":"TypeMap","description":"The map of Login Parameters sent to the OpenID Connect authorization endpoint when a user logs in.","computed":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","description":"The default authentication provider used when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","description":"Is the Authentication / Authorization feature enabled?","computed":true},"facebook":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret":{"type":"TypeString","description":"The App Secret of the Facebook app used for Facebook Login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"github":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret of the GitHub app used for GitHub Login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret":{"type":"TypeString","description":"The client secret associated with the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes that requested as part of Google Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"issuer":{"type":"TypeString","description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens.","computed":true},"microsoft":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret":{"type":"TypeString","description":"The OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"runtime_version":{"type":"TypeString","description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Are platform-specific security tokens that are obtained during login flows durably stored?","computed":true},"twitter":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret":{"type":"TypeString","description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_client_action":{"type":"TypeString","description":"The action taken when an unauthenticated client attempts to access the app.","computed":true}}}},"auth_settings_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret_certificate_thumbprint":{"type":"TypeString","description":"The thumbprint of the certificate used for signing purposes.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true},"jwt_allowed_client_applications":{"type":"TypeList","description":"A list of Allowed Client Applications in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","description":"A list of Allowed Groups in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","description":"The Azure Tenant URI for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`","computed":true},"www_authentication_disabled":{"type":"TypeBool","description":"Is the www-authenticate provider omitted from the request?","computed":true}}}},"apple_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Apple web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Apple Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Apple Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"auth_enabled":{"type":"TypeBool","description":"Is the AuthV2 Settings be enabled.","computed":true},"azure_static_web_app_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with Azure Static Web App Authentication.","computed":true}}}},"config_file_path":{"type":"TypeString","description":"The path to the App Auth settings.","computed":true},"custom_oidc_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`","computed":true},"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with this Custom OIDC.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","description":"The name of the Custom OIDC Authentication Provider.","computed":true},"name_claim_type":{"type":"TypeString","description":"The name of the claim that contains the users name.","computed":true},"openid_configuration_endpoint":{"type":"TypeString","description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider.","computed":true},"scopes":{"type":"TypeList","description":"The list of the scopes that should be requested while authenticating.","computed":true,"elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","description":"The Default Authentication Provider used when the `unauthenticated_action` is set to `RedirectToLoginPage`.","computed":true},"excluded_paths":{"type":"TypeList","description":"The paths which are excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","computed":true,"elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"graph_api_version":{"type":"TypeString","description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"forward_proxy_convention":{"type":"TypeString","description":"The convention used to determine the url of the request made.","computed":true},"forward_proxy_custom_host_header_name":{"type":"TypeString","description":"The name of the header containing the host of the request.","computed":true},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","description":"The name of the header containing the scheme of the request.","computed":true},"github_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"http_route_api_prefix":{"type":"TypeString","description":"The prefix that precedes all the authentication and authorisation paths.","computed":true},"login":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","computed":true,"elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","computed":true},"cookie_expiration_time":{"type":"TypeString","description":"The time after the request is made when the session cookie will expire.","computed":true},"logout_endpoint":{"type":"TypeString","description":"The endpoint to which logout requests are made.","computed":true},"nonce_expiration_time":{"type":"TypeString","description":"The time after the request is made when the nonce will expire.","computed":true},"preserve_url_fragments_for_logins":{"type":"TypeBool","description":"Are the fragments from the request be preserved after the login request is made.","computed":true},"token_refresh_extension_time":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Is the Token Store configuration Enabled.","computed":true},"token_store_path":{"type":"TypeString","description":"The directory path in the App Filesystem in which the tokens are stored.","computed":true},"token_store_sas_setting_name":{"type":"TypeString","description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens.","computed":true},"validate_nonce":{"type":"TypeBool","description":"Is the nonce be validated while completing the login flow.","computed":true}}}},"microsoft_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"require_authentication":{"type":"TypeBool","description":"Is the authentication flow used for all requests.","computed":true},"require_https":{"type":"TypeBool","description":"Is HTTPS required on connections?","computed":true},"runtime_version":{"type":"TypeString","description":"The Runtime Version of the Authentication and Authorisation feature of this App.","computed":true},"twitter_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_action":{"type":"TypeString","computed":true}}}},"availability":{"type":"TypeString","computed":true},"backup":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","description":"Is this backup job enabled?","computed":true},"name":{"type":"TypeString","description":"The name of this Backup.","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","description":"How often the backup should is executed in multiples of the `frequency_unit`.","computed":true},"frequency_unit":{"type":"TypeString","description":"The unit of time for how often the backup takes place.","computed":true},"keep_at_least_one_backup":{"type":"TypeBool","description":"Does the service keep at least one backup, regardless of age of backup.","computed":true},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","description":"After how many days are backups deleted.","computed":true},"start_time":{"type":"TypeString","description":"When the schedule should start working in RFC-3339 format.","computed":true}}}},"storage_account_url":{"type":"TypeString","description":"The SAS URL to the container.","computed":true}}}},"client_affinity_enabled":{"type":"TypeBool","computed":true},"client_certificate_enabled":{"type":"TypeBool","computed":true},"client_certificate_exclusion_paths":{"type":"TypeString","description":"Paths to exclude when using client certificates, separated by ;","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of this Connection.","computed":true},"type":{"type":"TypeString","description":"The type of database.","computed":true},"value":{"type":"TypeString","description":"The connection string value.","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"key_vault_reference_identity_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","computed":true,"elem":{"schema":{"application_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","computed":true,"elem":{"schema":{"level":{"type":"TypeString","computed":true},"retention_in_days":{"type":"TypeInt","computed":true},"sas_url":{"type":"TypeString","computed":true}}}},"file_system_level":{"type":"TypeString","computed":true}}}},"detailed_error_messages":{"type":"TypeBool","computed":true},"failed_request_tracing":{"type":"TypeBool","computed":true},"http_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","computed":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","computed":true},"sas_url":{"type":"TypeString","computed":true}}}},"file_system":{"type":"TypeList","computed":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","computed":true},"retention_in_mb":{"type":"TypeInt","computed":true}}}}}}}}}},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_plan_id":{"type":"TypeString","computed":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"api_definition_url":{"type":"TypeString","computed":true},"api_management_api_id":{"type":"TypeString","computed":true},"app_command_line":{"type":"TypeString","computed":true},"application_stack":{"type":"TypeList","computed":true,"elem":{"schema":{"docker_image":{"type":"TypeString","computed":true},"docker_image_name":{"type":"TypeString","computed":true},"docker_image_tag":{"type":"TypeString","computed":true},"docker_registry_password":{"type":"TypeString","computed":true},"docker_registry_url":{"type":"TypeString","computed":true},"docker_registry_username":{"type":"TypeString","computed":true},"dotnet_version":{"type":"TypeString","computed":true},"go_version":{"type":"TypeString","computed":true},"java_server":{"type":"TypeString","computed":true},"java_server_version":{"type":"TypeString","computed":true},"java_version":{"type":"TypeString","computed":true},"node_version":{"type":"TypeString","computed":true},"php_version":{"type":"TypeString","computed":true},"python_version":{"type":"TypeString","computed":true},"ruby_version":{"type":"TypeString","computed":true}}}},"auto_heal_enabled":{"type":"TypeBool","computed":true},"auto_heal_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeList","computed":true,"elem":{"schema":{"action_type":{"type":"TypeString","computed":true},"minimum_process_execution_time":{"type":"TypeString","computed":true}}}},"trigger":{"type":"TypeList","computed":true,"elem":{"schema":{"requests":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true}}}},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true},"path":{"type":"TypeString","computed":true},"time_taken":{"type":"TypeString","computed":true}}}},"status_code":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true},"path":{"type":"TypeString","computed":true},"status_code_range":{"type":"TypeString","computed":true},"sub_status":{"type":"TypeInt","computed":true},"win32_status_code":{"type":"TypeInt","computed":true}}}}}}}}}},"container_registry_managed_identity_client_id":{"type":"TypeString","computed":true},"container_registry_use_managed_identity":{"type":"TypeBool","computed":true},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeList","description":"The list of origins that are allowed to make cross-origin calls.","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","description":"Are credentials allowed in CORS requests?","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_eviction_time_in_min":{"type":"TypeInt","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","computed":true},"local_mysql_enabled":{"type":"TypeBool","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"scm_minimum_tls_version":{"type":"TypeString","computed":true},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"worker_count":{"type":"TypeInt","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connection_string_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"storage_account":{"type":"TypeList","computed":true,"elem":{"schema":{"access_key":{"type":"TypeString","computed":true},"account_name":{"type":"TypeString","computed":true},"mount_path":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"share_name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"usage":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_local_network_gateway":{"schema":{"address_space":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"bgp_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","required":true},"bgp_peering_address":{"type":"TypeString","required":true},"peer_weight":{"type":"TypeInt","computed":true}}}},"gateway_address":{"type":"TypeString","computed":true},"gateway_fqdn":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_log_analytics_workspace":{"schema":{"daily_quota_gb":{"type":"TypeFloat","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_shared_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","computed":true},"secondary_shared_key":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_logic_app_integration_account":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_logic_app_standard":{"schema":{"app_service_plan_id":{"type":"TypeString","computed":true},"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"bundle_version":{"type":"TypeString","computed":true},"client_affinity_enabled":{"type":"TypeBool","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":false},"app_scale_limit":{"type":"TypeInt","optional":true,"computed":true},"auto_swap_slot_name":{"type":"TypeString","computed":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"computed":true},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"default":false},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_min_tls_version":{"type":"TypeString","optional":true,"computed":true},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"storage_account_access_key":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","computed":true},"storage_account_share_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"use_extension_bundle":{"type":"TypeBool","computed":true},"version":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_logic_app_workflow":{"schema":{"access_endpoint":{"type":"TypeString","computed":true},"connector_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connector_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"logic_app_integration_account_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"workflow_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_schema":{"type":"TypeString","computed":true},"workflow_version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_machine_learning_workspace":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_maintenance_configuration":{"schema":{"in_guest_user_patch_mode":{"type":"TypeString","computed":true},"install_patches":{"type":"TypeList","computed":true,"elem":{"schema":{"linux":{"type":"TypeList","computed":true,"elem":{"schema":{"classifications_to_include":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"package_names_mask_to_exclude":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"package_names_mask_to_include":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"reboot":{"type":"TypeString","computed":true},"windows":{"type":"TypeList","computed":true,"elem":{"schema":{"classifications_to_include":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"kb_numbers_to_exclude":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"kb_numbers_to_include":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"properties":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"scope":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"visibility":{"type":"TypeString","computed":true},"window":{"type":"TypeList","computed":true,"elem":{"schema":{"duration":{"type":"TypeString","computed":true},"expiration_date_time":{"type":"TypeString","computed":true},"recur_every":{"type":"TypeString","computed":true},"start_date_time":{"type":"TypeString","computed":true},"time_zone":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_managed_api":{"schema":{"location":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_managed_application_definition":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_managed_disk":{"schema":{"create_option":{"type":"TypeString","computed":true},"disk_access_id":{"type":"TypeString","computed":true},"disk_encryption_set_id":{"type":"TypeString","computed":true},"disk_iops_read_write":{"type":"TypeInt","computed":true},"disk_mbps_read_write":{"type":"TypeInt","computed":true},"disk_size_gb":{"type":"TypeInt","computed":true},"encryption_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","computed":true,"elem":{"schema":{"secret_url":{"type":"TypeString","computed":true},"source_vault_id":{"type":"TypeString","computed":true}}}},"enabled":{"type":"TypeBool","computed":true},"key_encryption_key":{"type":"TypeList","computed":true,"elem":{"schema":{"key_url":{"type":"TypeString","computed":true},"source_vault_id":{"type":"TypeString","computed":true}}}}}}},"image_reference_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_access_policy":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"source_resource_id":{"type":"TypeString","computed":true},"source_uri":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true},"storage_account_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_management_group":{"schema":{"all_management_group_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"all_subscription_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","optional":true,"computed":true},"management_group_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","optional":true,"computed":true},"parent_management_group_id":{"type":"TypeString","computed":true},"subscription_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_management_group_template_deployment":{"schema":{"management_group_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"output_content":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_maps_account":{"schema":{"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"x_ms_client_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mariadb_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"ssl_enforcement":{"type":"TypeString","computed":true},"storage_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_grow":{"type":"TypeString","computed":true},"backup_retention_days":{"type":"TypeInt","computed":true},"geo_redundant_backup":{"type":"TypeString","computed":true},"storage_mb":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_marketplace_agreement":{"schema":{"license_text_link":{"type":"TypeString","computed":true},"offer":{"type":"TypeString","required":true},"plan":{"type":"TypeString","required":true},"privacy_policy_link":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_mobile_network":{"schema":{"location":{"type":"TypeString","computed":true},"mobile_country_code":{"type":"TypeString","computed":true},"mobile_network_code":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_attached_data_network":{"schema":{"dns_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"mobile_network_data_network_name":{"type":"TypeString","required":true},"mobile_network_packet_core_data_plane_id":{"type":"TypeString","required":true},"network_address_port_translation":{"type":"TypeList","computed":true,"elem":{"schema":{"icmp_pinhole_timeout_in_seconds":{"type":"TypeInt","computed":true},"pinhole_maximum_number":{"type":"TypeInt","optional":true},"port_range":{"type":"TypeList","computed":true,"elem":{"schema":{"maximum":{"type":"TypeInt","computed":true},"minimum":{"type":"TypeInt","computed":true}}}},"tcp_pinhole_timeout_in_seconds":{"type":"TypeInt","computed":true},"tcp_port_reuse_minimum_hold_time_in_seconds":{"type":"TypeInt","computed":true},"udp_pinhole_timeout_in_seconds":{"type":"TypeInt","computed":true},"udp_port_reuse_minimum_hold_time_in_seconds":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"user_equipment_address_pool_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"user_equipment_static_address_pool_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"user_plane_access_ipv4_address":{"type":"TypeString","computed":true},"user_plane_access_ipv4_gateway":{"type":"TypeString","computed":true},"user_plane_access_ipv4_subnet":{"type":"TypeString","computed":true},"user_plane_access_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mobile_network_data_network":{"schema":{"description":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_packet_core_control_plane":{"schema":{"control_plane_access_ipv4_address":{"type":"TypeString","computed":true},"control_plane_access_ipv4_gateway":{"type":"TypeString","computed":true},"control_plane_access_ipv4_subnet":{"type":"TypeString","computed":true},"control_plane_access_name":{"type":"TypeString","computed":true},"core_network_technology":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"interoperability_settings_json":{"type":"TypeString","computed":true},"local_diagnostics_access":{"type":"TypeList","computed":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","computed":true},"https_server_certificate_url":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"platform":{"type":"TypeList","computed":true,"elem":{"schema":{"arc_kubernetes_cluster_id":{"type":"TypeString","computed":true},"custom_location_id":{"type":"TypeString","computed":true},"edge_device_id":{"type":"TypeString","computed":true},"stack_hci_cluster_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"sku":{"type":"TypeString","computed":true},"software_version":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"user_equipment_mtu_in_bytes":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_mobile_network_packet_core_data_plane":{"schema":{"location":{"type":"TypeString","computed":true},"mobile_network_packet_core_control_plane_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"user_plane_access_ipv4_address":{"type":"TypeString","computed":true},"user_plane_access_ipv4_gateway":{"type":"TypeString","computed":true},"user_plane_access_ipv4_subnet":{"type":"TypeString","computed":true},"user_plane_access_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mobile_network_service":{"schema":{"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"pcc_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"precedence":{"type":"TypeInt","computed":true},"qos_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"allocation_and_retention_priority_level":{"type":"TypeInt","computed":true},"guaranteed_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}},"maximum_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}},"preemption_capability":{"type":"TypeString","computed":true},"preemption_vulnerability":{"type":"TypeString","computed":true},"qos_indicator":{"type":"TypeInt","computed":true}}}},"service_data_flow_template":{"type":"TypeList","computed":true,"elem":{"schema":{"direction":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"protocol":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"remote_ip_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"traffic_control_enabled":{"type":"TypeBool","computed":true}}}},"service_precedence":{"type":"TypeInt","computed":true},"service_qos_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"allocation_and_retention_priority_level":{"type":"TypeInt","computed":true},"maximum_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}},"preemption_capability":{"type":"TypeString","computed":true},"preemption_vulnerability":{"type":"TypeString","computed":true},"qos_indicator":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_sim":{"schema":{"device_type":{"type":"TypeString","computed":true},"integrated_circuit_card_identifier":{"type":"TypeString","computed":true},"international_mobile_subscriber_identity":{"type":"TypeString","computed":true},"mobile_network_sim_group_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"sim_policy_id":{"type":"TypeString","computed":true},"sim_state":{"type":"TypeString","computed":true},"static_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"attached_data_network_id":{"type":"TypeString","computed":true},"slice_id":{"type":"TypeString","computed":true},"static_ipv4_address":{"type":"TypeString","computed":true}}}},"vendor_key_fingerprint":{"type":"TypeString","computed":true},"vendor_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mobile_network_sim_group":{"schema":{"encryption_key_url":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_sim_policy":{"schema":{"default_slice_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"rat_frequency_selection_priority_index":{"type":"TypeInt","computed":true},"registration_timer_in_seconds":{"type":"TypeInt","computed":true},"slice":{"type":"TypeList","computed":true,"elem":{"schema":{"data_network":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_allowed_session_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allocation_and_retention_priority_level":{"type":"TypeInt","computed":true},"allowed_services_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"data_network_id":{"type":"TypeString","computed":true},"default_session_type":{"type":"TypeString","computed":true},"max_buffered_packets":{"type":"TypeInt","computed":true},"preemption_capability":{"type":"TypeString","computed":true},"preemption_vulnerability":{"type":"TypeString","computed":true},"qos_indicator":{"type":"TypeInt","computed":true},"session_aggregate_maximum_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}}}}},"default_data_network_id":{"type":"TypeString","computed":true},"slice_id":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"user_equipment_aggregate_maximum_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_mobile_network_site":{"schema":{"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"network_function_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_slice":{"schema":{"description":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"single_network_slice_selection_assistance_information":{"type":"TypeList","computed":true,"elem":{"schema":{"slice_differentiator":{"type":"TypeString","computed":true},"slice_service_type":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_monitor_action_group":{"schema":{"arm_role_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"role_id":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}},"automation_runbook_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"automation_account_id":{"type":"TypeString","computed":true},"is_global_runbook":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","computed":true},"runbook_name":{"type":"TypeString","computed":true},"service_uri":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true},"webhook_resource_id":{"type":"TypeString","computed":true}}}},"azure_app_push_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"email_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"azure_function_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"function_app_resource_id":{"type":"TypeString","computed":true},"function_name":{"type":"TypeString","computed":true},"http_trigger_url":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}},"email_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"email_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}},"enabled":{"type":"TypeBool","computed":true},"event_hub_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","optional":true,"computed":true},"event_hub_name":{"type":"TypeString","optional":true,"computed":true},"event_hub_namespace":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"itsm_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"region":{"type":"TypeString","computed":true},"ticket_configuration":{"type":"TypeString","computed":true},"workspace_id":{"type":"TypeString","computed":true}}}},"logic_app_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"callback_url":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"short_name":{"type":"TypeString","computed":true},"sms_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"country_code":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"phone_number":{"type":"TypeString","computed":true}}}},"voice_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"country_code":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"phone_number":{"type":"TypeString","computed":true}}}},"webhook_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"aad_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"identifier_uri":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"service_uri":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}}},"timeouts":{"read":5}},"azurerm_monitor_data_collection_endpoint":{"schema":{"configuration_access_endpoint":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"logs_ingestion_endpoint":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_monitor_data_collection_rule":{"schema":{"data_collection_endpoint_id":{"type":"TypeString","computed":true},"data_flow":{"type":"TypeList","computed":true,"elem":{"schema":{"built_in_transform":{"type":"TypeString","computed":true},"destinations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"output_stream":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"transform_kql":{"type":"TypeString","computed":true}}}},"data_sources":{"type":"TypeList","computed":true,"elem":{"schema":{"data_import":{"type":"TypeList","computed":true,"elem":{"schema":{"event_hub_data_source":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_group":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"stream":{"type":"TypeString","computed":true}}}}}}},"extension":{"type":"TypeList","computed":true,"elem":{"schema":{"extension_json":{"type":"TypeString","computed":true},"extension_name":{"type":"TypeString","computed":true},"input_data_sources":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"iis_log":{"type":"TypeList","computed":true,"elem":{"schema":{"log_directories":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"log_file":{"type":"TypeList","optional":true,"elem":{"schema":{"file_patterns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"format":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"settings":{"type":"TypeList","computed":true,"elem":{"schema":{"text":{"type":"TypeList","computed":true,"elem":{"schema":{"record_start_timestamp_format":{"type":"TypeString","computed":true}}}}}}},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"performance_counter":{"type":"TypeList","computed":true,"elem":{"schema":{"counter_specifiers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"sampling_frequency_in_seconds":{"type":"TypeInt","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"platform_telemetry":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"prometheus_forwarder":{"type":"TypeList","computed":true,"elem":{"schema":{"label_include_filter":{"type":"TypeList","computed":true,"elem":{"schema":{"label":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"syslog":{"type":"TypeList","computed":true,"elem":{"schema":{"facility_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"log_levels":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"windows_event_log":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"x_path_queries":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"windows_firewall_log":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"description":{"type":"TypeString","computed":true},"destinations":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_monitor_metrics":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"event_hub":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}},"maxItems":1},"event_hub_direct":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}},"maxItems":1},"log_analytics":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"workspace_resource_id":{"type":"TypeString","computed":true}}}},"monitor_account":{"type":"TypeList","computed":true,"elem":{"schema":{"monitor_account_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"storage_blob":{"type":"TypeList","computed":true,"elem":{"schema":{"container_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true}}}},"storage_blob_direct":{"type":"TypeList","computed":true,"elem":{"schema":{"container_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true}}}},"storage_table_direct":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true},"table_name":{"type":"TypeString","computed":true}}}}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"immutable_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"stream_declaration":{"type":"TypeList","computed":true,"elem":{"schema":{"column":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"stream_name":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_monitor_diagnostic_categories":{"schema":{"log_category_groups":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"log_category_types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"logs":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"metrics":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_monitor_log_profile":{"schema":{"categories":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"locations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"retention_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"days":{"type":"TypeInt","computed":true},"enabled":{"type":"TypeBool","computed":true}}}},"servicebus_rule_id":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_monitor_scheduled_query_rules_alert":{"schema":{"action":{"type":"TypeSet","computed":true,"elem":{"schema":{"action_group":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"custom_webhook_payload":{"type":"TypeString","computed":true},"email_subject":{"type":"TypeString","computed":true}}}},"authorized_resource_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"data_source_id":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"frequency":{"type":"TypeInt","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"query":{"type":"TypeString","computed":true},"query_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"severity":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"throttling":{"type":"TypeInt","computed":true},"time_window":{"type":"TypeInt","computed":true},"trigger":{"type":"TypeSet","computed":true,"elem":{"schema":{"metric_trigger":{"type":"TypeSet","computed":true,"elem":{"schema":{"metric_column":{"type":"TypeString","computed":true},"metric_trigger_type":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"threshold":{"type":"TypeFloat","computed":true}}}},"operator":{"type":"TypeString","computed":true},"threshold":{"type":"TypeFloat","computed":true}}}}},"timeouts":{"read":5}},"azurerm_monitor_scheduled_query_rules_log":{"schema":{"authorized_resource_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"criteria":{"type":"TypeSet","computed":true,"elem":{"schema":{"dimension":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"metric_name":{"type":"TypeString","computed":true}}}},"data_source_id":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mssql_database":{"schema":{"collation":{"type":"TypeString","computed":true},"elastic_pool_id":{"type":"TypeString","computed":true},"license_type":{"type":"TypeString","computed":true},"max_size_gb":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"read_replica_count":{"type":"TypeInt","computed":true},"read_scale":{"type":"TypeBool","computed":true},"server_id":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"storage_account_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_mssql_elasticpool":{"schema":{"license_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"max_size_bytes":{"type":"TypeInt","computed":true},"max_size_gb":{"type":"TypeFloat","computed":true},"name":{"type":"TypeString","required":true},"per_db_max_capacity":{"type":"TypeInt","computed":true},"per_db_min_capacity":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"server_name":{"type":"TypeString","required":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"family":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"tier":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_mssql_managed_instance":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"collation":{"type":"TypeString","computed":true},"customer_managed_key_id":{"type":"TypeString","computed":true},"dns_zone_partner_id":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"license_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"proxy_override":{"type":"TypeString","computed":true},"public_data_endpoint_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"storage_account_type":{"type":"TypeString","computed":true},"storage_size_in_gb":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"timezone_id":{"type":"TypeString","computed":true},"vcores":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_mssql_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"fully_qualified_domain_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"restorable_dropped_database_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mysql_flexible_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"backup_retention_days":{"type":"TypeInt","computed":true},"delegated_subnet_id":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","computed":true},"high_availability":{"type":"TypeList","computed":true,"elem":{"schema":{"mode":{"type":"TypeString","computed":true},"standby_availability_zone":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"maintenance_window":{"type":"TypeList","computed":true,"elem":{"schema":{"day_of_week":{"type":"TypeInt","computed":true},"start_hour":{"type":"TypeInt","computed":true},"start_minute":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"private_dns_zone_id":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"replica_capacity":{"type":"TypeInt","computed":true},"replication_role":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"restore_point_in_time":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"storage":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_grow_enabled":{"type":"TypeBool","computed":true},"iops":{"type":"TypeInt","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true},"zone":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mysql_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"auto_grow_enabled":{"type":"TypeBool","computed":true},"backup_retention_days":{"type":"TypeInt","computed":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"infrastructure_encryption_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"restore_point_in_time":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"ssl_enforcement_enabled":{"type":"TypeBool","computed":true},"ssl_minimal_tls_version_enforced":{"type":"TypeString","computed":true},"storage_mb":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","computed":true},"email_addresses":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","computed":true},"retention_days":{"type":"TypeInt","computed":true},"storage_account_access_key":{"type":"TypeString","computed":true},"storage_endpoint":{"type":"TypeString","computed":true}}}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_nat_gateway":{"schema":{"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_ip_address_ids":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"public_ip_prefix_ids":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"resource_guid":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_netapp_account":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_netapp_pool":{"schema":{"account_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"service_level":{"type":"TypeString","computed":true},"size_in_tb":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_netapp_snapshot":{"schema":{"account_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"pool_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"volume_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_netapp_snapshot_policy":{"schema":{"account_name":{"type":"TypeString","required":true},"daily_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"hour":{"type":"TypeInt","computed":true},"minute":{"type":"TypeInt","computed":true},"snapshots_to_keep":{"type":"TypeInt","computed":true}}}},"enabled":{"type":"TypeBool","computed":true},"hourly_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"minute":{"type":"TypeInt","computed":true},"snapshots_to_keep":{"type":"TypeInt","computed":true}}}},"location":{"type":"TypeString","computed":true},"monthly_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"days_of_month":{"type":"TypeSet","computed":true,"elem":{"type":"TypeInt"}},"hour":{"type":"TypeInt","computed":true},"minute":{"type":"TypeInt","computed":true},"snapshots_to_keep":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"weekly_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"days_of_week":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"hour":{"type":"TypeInt","computed":true},"minute":{"type":"TypeInt","computed":true},"snapshots_to_keep":{"type":"TypeInt","computed":true}}}}},"timeouts":{"read":5}},"azurerm_netapp_volume":{"schema":{"account_name":{"type":"TypeString","required":true},"data_protection_replication":{"type":"TypeList","computed":true,"elem":{"schema":{"endpoint_type":{"type":"TypeString","computed":true},"remote_volume_location":{"type":"TypeString","computed":true},"remote_volume_resource_id":{"type":"TypeString","computed":true},"replication_frequency":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"mount_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"network_features":{"type":"TypeString","computed":true},"pool_name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"security_style":{"type":"TypeString","optional":true},"service_level":{"type":"TypeString","computed":true},"storage_quota_in_gb":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"volume_path":{"type":"TypeString","computed":true},"zone":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_netapp_volume_group_sap_hana":{"schema":{"account_name":{"type":"TypeString","required":true},"application_identifier":{"type":"TypeString","computed":true},"group_description":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"volume":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity_pool_id":{"type":"TypeString","computed":true},"data_protection_replication":{"type":"TypeList","computed":true,"elem":{"schema":{"endpoint_type":{"type":"TypeString","computed":true},"remote_volume_location":{"type":"TypeString","computed":true},"remote_volume_resource_id":{"type":"TypeString","computed":true},"replication_frequency":{"type":"TypeString","computed":true}}}},"data_protection_snapshot_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"snapshot_policy_id":{"type":"TypeString","computed":true}}}},"export_policy_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_clients":{"type":"TypeString","computed":true},"nfsv3_enabled":{"type":"TypeBool","computed":true},"nfsv41_enabled":{"type":"TypeBool","computed":true},"root_access_enabled":{"type":"TypeBool","computed":true},"rule_index":{"type":"TypeInt","computed":true},"unix_read_only":{"type":"TypeBool","computed":true},"unix_read_write":{"type":"TypeBool","computed":true}}}},"id":{"type":"TypeString","computed":true},"mount_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"protocols":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proximity_placement_group_id":{"type":"TypeString","computed":true},"security_style":{"type":"TypeString","computed":true},"service_level":{"type":"TypeString","computed":true},"snapshot_directory_visible":{"type":"TypeBool","computed":true},"storage_quota_in_gb":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"throughput_in_mibps":{"type":"TypeFloat","required":true},"volume_path":{"type":"TypeString","computed":true},"volume_spec_name":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_network_ddos_protection_plan":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_network_interface":{"schema":{"applied_dns_servers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","computed":true},"enable_ip_forwarding":{"type":"TypeBool","computed":true},"internal_dns_name_label":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"application_gateway_backend_address_pools_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"gateway_load_balancer_frontend_ip_configuration_id":{"type":"TypeString","computed":true},"load_balancer_backend_address_pools_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_address_allocation":{"type":"TypeString","computed":true},"private_ip_address_version":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"mac_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_security_group_id":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_machine_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_network_manager_network_group":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_manager_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_network_security_group":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"security_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"access":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"destination_address_prefix":{"type":"TypeString","computed":true},"destination_address_prefixes":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"destination_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_port_range":{"type":"TypeString","computed":true},"destination_port_ranges":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"direction":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","computed":true},"source_address_prefix":{"type":"TypeString","computed":true},"source_address_prefixes":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"source_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_port_range":{"type":"TypeString","computed":true},"source_port_ranges":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_network_service_tags":{"schema":{"address_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ipv4_cidrs":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ipv6_cidrs":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"location_filter":{"type":"TypeString","optional":true,"forceNew":true},"service":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_network_watcher":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_notification_hub":{"schema":{"apns_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"application_mode":{"type":"TypeString","computed":true},"bundle_id":{"type":"TypeString","computed":true},"key_id":{"type":"TypeString","computed":true},"team_id":{"type":"TypeString","computed":true},"token":{"type":"TypeString","computed":true}}}},"gcm_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"api_key":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_notification_hub_namespace":{"schema":{"enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"namespace_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"servicebus_endpoint":{"type":"TypeString","computed":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_orchestrated_virtual_machine_scale_set":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_interface":{"type":"TypeList","computed":true,"elem":{"schema":{"accelerated_networking_enabled":{"type":"TypeBool","computed":true},"dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancer_backend_address_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true},"public_ip_address":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"ip_tag":{"type":"TypeList","computed":true,"elem":{"schema":{"tag":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"public_ip_prefix_id":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"subnet_id":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"ip_forwarding_enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","computed":true},"network_security_group_id":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_palo_alto_local_rulestack":{"schema":{"anti_spyware_profile":{"type":"TypeString","computed":true},"anti_virus_profile":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"dns_subscription":{"type":"TypeString","computed":true},"file_blocking_profile":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_trust_certificate":{"type":"TypeString","computed":true},"outbound_untrust_certificate":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"url_filtering_profile":{"type":"TypeString","computed":true},"vulnerability_profile":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_platform_image":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"offer":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true},"sku":{"type":"TypeString","required":true},"version":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"read":5}},"azurerm_policy_assignment":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"enforce":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"metadata":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","computed":true,"elem":{"schema":{"content":{"type":"TypeString","computed":true},"policy_definition_reference_id":{"type":"TypeString","computed":true}}}},"not_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"parameters":{"type":"TypeString","computed":true},"policy_definition_id":{"type":"TypeString","computed":true},"scope_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"read":5}},"azurerm_policy_definition":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"management_group_name":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","computed":true},"mode":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeString","computed":true},"policy_rule":{"type":"TypeString","computed":true},"policy_type":{"type":"TypeString","computed":true},"role_definition_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_policy_definition_built_in":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"management_group_name":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","computed":true},"mode":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeString","computed":true},"policy_rule":{"type":"TypeString","computed":true},"policy_type":{"type":"TypeString","computed":true},"role_definition_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_policy_set_definition":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"management_group_name":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeString","computed":true},"policy_definition_group":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_metadata_resource_id":{"type":"TypeString","computed":true},"category":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"policy_definition_reference":{"type":"TypeList","computed":true,"elem":{"schema":{"parameter_values":{"type":"TypeString","computed":true},"parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"policy_definition_id":{"type":"TypeString","computed":true},"policy_group_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"reference_id":{"type":"TypeString","computed":true}}}},"policy_definitions":{"type":"TypeString","computed":true},"policy_type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_policy_virtual_machine_configuration_assignment":{"schema":{"assignment_hash":{"type":"TypeString","computed":true},"compliance_status":{"type":"TypeString","computed":true},"content_hash":{"type":"TypeString","computed":true},"content_uri":{"type":"TypeString","computed":true},"last_compliance_status_checked":{"type":"TypeString","computed":true},"latest_report_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"virtual_machine_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_portal_dashboard":{"schema":{"dashboard_properties":{"type":"TypeString","optional":true,"computed":true},"display_name":{"type":"TypeString","optional":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_postgresql_flexible_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"backup_retention_days":{"type":"TypeInt","computed":true},"delegated_subnet_id":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"storage_mb":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_postgresql_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":10}},"azurerm_private_dns_a_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_aaaa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_cname_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_mx_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"exchange":{"type":"TypeString","computed":true},"preference":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_ptr_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_resolver":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_dns_forwarding_ruleset":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_dns_resolver_outbound_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_forwarding_rule":{"schema":{"dns_forwarding_ruleset_id":{"type":"TypeString","required":true},"domain_name":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"target_dns_servers":{"type":"TypeList","computed":true,"elem":{"schema":{"ip_address":{"type":"TypeString","computed":true},"port":{"type":"TypeInt","computed":true}}}}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_inbound_endpoint":{"schema":{"ip_configurations":{"type":"TypeList","computed":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","computed":true},"private_ip_allocation_method":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_dns_resolver_id":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_outbound_endpoint":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_dns_resolver_id":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_virtual_network_link":{"schema":{"dns_forwarding_ruleset_id":{"type":"TypeString","required":true},"metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"virtual_network_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_private_dns_soa_record":{"schema":{"email":{"type":"TypeString","computed":true},"expire_time":{"type":"TypeInt","computed":true},"fqdn":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"minimum_ttl":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","optional":true,"default":"@"},"refresh_time":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"retry_time":{"type":"TypeInt","computed":true},"serial_number":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_srv_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"port":{"type":"TypeInt","computed":true},"priority":{"type":"TypeInt","computed":true},"target":{"type":"TypeString","computed":true},"weight":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_txt_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"value":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_zone":{"schema":{"max_number_of_record_sets":{"type":"TypeInt","computed":true},"max_number_of_virtual_network_links":{"type":"TypeInt","computed":true},"max_number_of_virtual_network_links_with_registration":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"number_of_record_sets":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_dns_zone_virtual_network_link":{"schema":{"name":{"type":"TypeString","required":true},"private_dns_zone_name":{"type":"TypeString","required":true},"registration_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_private_endpoint_connection":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_interface":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"private_service_connection":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"request_response":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_link_service":{"schema":{"alias":{"type":"TypeString","computed":true},"auto_approval_subscription_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enable_proxy_protocol":{"type":"TypeBool","computed":true},"load_balancer_frontend_ip_configuration_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"nat_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_address_version":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"visibility_subscription_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_link_service_endpoint_connections":{"schema":{"location":{"type":"TypeString","computed":true},"private_endpoint_connections":{"type":"TypeList","computed":true,"elem":{"schema":{"action_required":{"type":"TypeString","computed":true},"connection_id":{"type":"TypeString","computed":true},"connection_name":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"private_endpoint_id":{"type":"TypeString","computed":true},"private_endpoint_name":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"service_id":{"type":"TypeString","required":true},"service_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_proximity_placement_group":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_public_ip":{"schema":{"allocation_method":{"type":"TypeString","computed":true},"ddos_protection_mode":{"type":"TypeString","computed":true},"ddos_protection_plan_id":{"type":"TypeString","computed":true},"domain_name_label":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"ip_address":{"type":"TypeString","computed":true},"ip_tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ip_version":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"reverse_fqdn":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_public_ip_prefix":{"schema":{"ip_prefix":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"prefix_length":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_public_ips":{"schema":{"allocation_type":{"type":"TypeString","optional":true},"attachment_status":{"type":"TypeString","optional":true},"name_prefix":{"type":"TypeString","optional":true},"public_ips":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_public_maintenance_configurations":{"schema":{"configs":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"duration":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"maintenance_scope":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"recur_every":{"type":"TypeString","computed":true},"time_zone":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","optional":true},"recur_every":{"type":"TypeString","optional":true},"scope":{"type":"TypeString","optional":true}},"timeouts":{"read":5}},"azurerm_recovery_services_vault":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_redis_cache":{"schema":{"capacity":{"type":"TypeInt","computed":true},"enable_non_ssl_port":{"type":"TypeBool","computed":true},"family":{"type":"TypeString","computed":true},"hostname":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"patch_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","computed":true},"maintenance_window":{"type":"TypeString","computed":true},"start_hour_utc":{"type":"TypeInt","computed":true}}}},"port":{"type":"TypeInt","computed":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"private_static_ip_address":{"type":"TypeString","computed":true},"redis_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"aof_backup_enabled":{"type":"TypeBool","computed":true},"aof_storage_connection_string_0":{"type":"TypeString","computed":true},"aof_storage_connection_string_1":{"type":"TypeString","computed":true},"enable_authentication":{"type":"TypeBool","computed":true},"maxclients":{"type":"TypeInt","computed":true},"maxfragmentationmemory_reserved":{"type":"TypeInt","computed":true},"maxmemory_delta":{"type":"TypeInt","computed":true},"maxmemory_policy":{"type":"TypeString","computed":true},"maxmemory_reserved":{"type":"TypeInt","computed":true},"notify_keyspace_events":{"type":"TypeString","computed":true},"rdb_backup_enabled":{"type":"TypeBool","computed":true},"rdb_backup_frequency":{"type":"TypeInt","computed":true},"rdb_backup_max_snapshot_count":{"type":"TypeInt","computed":true},"rdb_storage_connection_string":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"shard_count":{"type":"TypeInt","computed":true},"sku_name":{"type":"TypeString","computed":true},"ssl_port":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_redis_enterprise_database":{"schema":{"cluster_id":{"type":"TypeString","required":true},"linked_database_group_nickname":{"type":"TypeString","computed":true},"linked_database_id":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"secondary_access_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_resource_group":{"schema":{"location":{"type":"TypeString","computed":true},"managed_by":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_resource_group_template_deployment":{"schema":{"name":{"type":"TypeString","required":true},"output_content":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_resources":{"schema":{"name":{"type":"TypeString","optional":true,"computed":true},"required_tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"resources":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"type":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"read":5}},"azurerm_role_definition":{"schema":{"assignable_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"computed":true},"permissions":{"type":"TypeList","computed":true,"elem":{"schema":{"actions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"data_actions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"not_actions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"not_data_actions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"role_definition_id":{"type":"TypeString","optional":true,"computed":true},"scope":{"type":"TypeString","optional":true},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_route_filter":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"rule":{"type":"TypeList","computed":true,"elem":{"schema":{"access":{"type":"TypeString","computed":true},"communities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"rule_type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_route_table":{"schema":{"bgp_route_propagation_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"route":{"type":"TypeList","computed":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"next_hop_in_ip_address":{"type":"TypeString","computed":true},"next_hop_type":{"type":"TypeString","computed":true}}}},"subnets":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_search_service":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"partition_count":{"type":"TypeInt","computed":true},"primary_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"query_keys":{"type":"TypeList","computed":true,"elem":{"schema":{"key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"replica_count":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_sentinel_alert_rule":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_sentinel_alert_rule_anomaly":{"schema":{"anomaly_settings_version":{"type":"TypeInt","computed":true},"anomaly_version":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"enabled":{"type":"TypeBool","computed":true},"frequency":{"type":"TypeString","computed":true},"log_analytics_workspace_id":{"type":"TypeString","required":true},"mode":{"type":"TypeString","computed":true},"multi_select_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","optional":true,"computed":true},"prioritized_exclude_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"exclude":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"prioritize":{"type":"TypeString","computed":true}}}},"required_data_connector":{"type":"TypeList","computed":true,"elem":{"schema":{"connector_id":{"type":"TypeString","computed":true},"data_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"settings_definition_id":{"type":"TypeString","computed":true},"single_select_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","computed":true}}}},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"threshold_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"max":{"type":"TypeString","computed":true},"min":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_sentinel_alert_rule_template":{"schema":{"display_name":{"type":"TypeString","optional":true,"computed":true},"log_analytics_workspace_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true,"computed":true},"nrt_template":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"query":{"type":"TypeString","computed":true},"severity":{"type":"TypeString","computed":true},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"scheduled_template":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"query":{"type":"TypeString","computed":true},"query_frequency":{"type":"TypeString","computed":true},"query_period":{"type":"TypeString","computed":true},"severity":{"type":"TypeString","computed":true},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"trigger_operator":{"type":"TypeString","computed":true},"trigger_threshold":{"type":"TypeInt","computed":true}}}},"security_incident_template":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"product_filter":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_service_plan":{"schema":{"app_service_environment_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"maximum_elastic_worker_count":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","computed":true},"per_site_scaling_enabled":{"type":"TypeBool","computed":true},"reserved":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"worker_count":{"type":"TypeInt","computed":true},"zone_balancing_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_namespace":{"schema":{"capacity":{"type":"TypeInt","computed":true},"default_primary_connection_string":{"type":"TypeString","computed":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_connection_string":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_namespace_authorization_rule":{"schema":{"name":{"type":"TypeString","required":true},"namespace_id":{"type":"TypeString","optional":true},"namespace_name":{"type":"TypeString","optional":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_namespace_disaster_recovery_config":{"schema":{"alias_authorization_rule_id":{"type":"TypeString","optional":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"namespace_id":{"type":"TypeString","optional":true},"namespace_name":{"type":"TypeString","optional":true},"partner_namespace_id":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_queue":{"schema":{"auto_delete_on_idle":{"type":"TypeString","computed":true},"dead_lettering_on_message_expiration":{"type":"TypeBool","computed":true},"default_message_ttl":{"type":"TypeString","computed":true},"duplicate_detection_history_time_window":{"type":"TypeString","computed":true},"enable_batched_operations":{"type":"TypeBool","computed":true},"enable_express":{"type":"TypeBool","computed":true},"enable_partitioning":{"type":"TypeBool","computed":true},"forward_dead_lettered_messages_to":{"type":"TypeString","computed":true},"forward_to":{"type":"TypeString","computed":true},"lock_duration":{"type":"TypeString","computed":true},"max_delivery_count":{"type":"TypeInt","computed":true},"max_size_in_megabytes":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"namespace_id":{"type":"TypeString","optional":true},"namespace_name":{"type":"TypeString","optional":true},"requires_duplicate_detection":{"type":"TypeBool","computed":true},"requires_session":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"status":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_queue_authorization_rule":{"schema":{"listen":{"type":"TypeBool","computed":true},"manage":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","optional":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"queue_id":{"type":"TypeString","optional":true},"queue_name":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","optional":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_subscription":{"schema":{"auto_delete_on_idle":{"type":"TypeString","computed":true},"dead_lettering_on_filter_evaluation_error":{"type":"TypeBool","computed":true},"dead_lettering_on_message_expiration":{"type":"TypeBool","computed":true},"default_message_ttl":{"type":"TypeString","computed":true},"enable_batched_operations":{"type":"TypeBool","computed":true},"forward_dead_lettered_messages_to":{"type":"TypeString","computed":true},"forward_to":{"type":"TypeString","computed":true},"lock_duration":{"type":"TypeString","computed":true},"max_delivery_count":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","optional":true},"requires_session":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"topic_id":{"type":"TypeString","optional":true},"topic_name":{"type":"TypeString","optional":true}},"timeouts":{"read":5}},"azurerm_servicebus_topic":{"schema":{"auto_delete_on_idle":{"type":"TypeString","computed":true},"default_message_ttl":{"type":"TypeString","computed":true},"duplicate_detection_history_time_window":{"type":"TypeString","computed":true},"enable_batched_operations":{"type":"TypeBool","computed":true},"enable_express":{"type":"TypeBool","computed":true},"enable_partitioning":{"type":"TypeBool","computed":true},"max_size_in_megabytes":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"namespace_id":{"type":"TypeString","optional":true},"namespace_name":{"type":"TypeString","optional":true},"requires_duplicate_detection":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"status":{"type":"TypeString","computed":true},"support_ordering":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_topic_authorization_rule":{"schema":{"listen":{"type":"TypeBool","computed":true},"manage":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","optional":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"queue_name":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","optional":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","computed":true},"topic_id":{"type":"TypeString","optional":true},"topic_name":{"type":"TypeString","optional":true}},"timeouts":{"read":5}},"azurerm_shared_image":{"schema":{"architecture":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"eula":{"type":"TypeString","computed":true},"gallery_name":{"type":"TypeString","required":true},"hyper_v_generation":{"type":"TypeString","computed":true},"identifier":{"type":"TypeList","computed":true,"elem":{"schema":{"offer":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","computed":true},"privacy_statement_uri":{"type":"TypeString","computed":true},"purchase_plan":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"product":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","computed":true}}}},"release_note_uri":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"specialized":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_shared_image_gallery":{"schema":{"description":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"unique_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_shared_image_version":{"schema":{"exclude_from_latest":{"type":"TypeBool","computed":true},"gallery_name":{"type":"TypeString","required":true},"image_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"managed_image_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"os_disk_image_size_gb":{"type":"TypeInt","computed":true},"os_disk_snapshot_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sort_versions_by_semver":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_region":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"regional_replica_count":{"type":"TypeInt","computed":true},"storage_account_type":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_shared_image_versions":{"schema":{"gallery_name":{"type":"TypeString","required":true},"image_name":{"type":"TypeString","required":true},"images":{"type":"TypeList","computed":true,"elem":{"schema":{"exclude_from_latest":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"managed_image_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_region":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"regional_replica_count":{"type":"TypeInt","computed":true},"storage_account_type":{"type":"TypeString","computed":true}}}}}}},"resource_group_name":{"type":"TypeString","required":true},"tags_filter":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_signalr_service":{"schema":{"aad_auth_enabled":{"type":"TypeBool","computed":true},"hostname":{"type":"TypeString","computed":true},"ip_address":{"type":"TypeString","computed":true},"local_auth_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"public_port":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"server_port":{"type":"TypeInt","computed":true},"serverless_connection_timeout_in_seconds":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tls_client_cert_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_site_recovery_fabric":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_site_recovery_protection_container":{"schema":{"name":{"type":"TypeString","required":true},"recovery_fabric_name":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_site_recovery_replication_policy":{"schema":{"application_consistent_snapshot_frequency_in_minutes":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"recovery_point_retention_in_minutes":{"type":"TypeInt","computed":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_site_recovery_replication_recovery_plan":{"schema":{"azure_to_azure_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"primary_edge_zone":{"type":"TypeString","computed":true},"primary_zone":{"type":"TypeString","computed":true},"recovery_edge_zone":{"type":"TypeString","computed":true},"recovery_zone":{"type":"TypeString","computed":true}}}},"failover_deployment_model":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"recovery_group":{"type":"TypeSet","computed":true,"elem":{"schema":{"post_action":{"type":"TypeSet","computed":true,"elem":{"type":"TypeList","elem":{"schema":{"fabric_location":{"type":"TypeString","computed":true},"fail_over_directions":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"runbook_id":{"type":"TypeString","computed":true},"script_path":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}}},"pre_action":{"type":"TypeSet","computed":true,"elem":{"type":"TypeList","elem":{"schema":{"fabric_location":{"type":"TypeString","computed":true},"fail_over_directions":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"runbook_id":{"type":"TypeString","computed":true},"script_path":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}}},"replicated_protected_items":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"recovery_vault_id":{"type":"TypeString","required":true},"source_recovery_fabric_id":{"type":"TypeString","computed":true},"target_recovery_fabric_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_snapshot":{"schema":{"creation_option":{"type":"TypeString","computed":true},"disk_size_gb":{"type":"TypeInt","computed":true},"encryption_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","computed":true,"elem":{"schema":{"secret_url":{"type":"TypeString","computed":true},"source_vault_id":{"type":"TypeString","computed":true}}}},"enabled":{"type":"TypeBool","computed":true},"key_encryption_key":{"type":"TypeList","computed":true,"elem":{"schema":{"key_url":{"type":"TypeString","computed":true},"source_vault_id":{"type":"TypeString","computed":true}}}}}}},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"source_resource_id":{"type":"TypeString","computed":true},"source_uri":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true},"time_created":{"type":"TypeString","computed":true},"trusted_launch_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_source_control_token":{"schema":{"token":{"type":"TypeString","computed":true},"token_secret":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_spatial_anchors_account":{"schema":{"account_domain":{"type":"TypeString","computed":true},"account_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_spring_cloud_app":{"schema":{"fqdn":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"is_public":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"persistent_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"mount_path":{"type":"TypeString","computed":true},"size_in_gb":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"service_name":{"type":"TypeString","required":true},"tls_enabled":{"type":"TypeBool","computed":true},"url":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_spring_cloud_service":{"schema":{"config_server_git_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"http_basic_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"label":{"type":"TypeString","computed":true},"repository":{"type":"TypeList","computed":true,"elem":{"schema":{"http_basic_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"label":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"pattern":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"search_paths":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ssh_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"host_key":{"type":"TypeString","computed":true},"host_key_algorithm":{"type":"TypeString","computed":true},"private_key":{"type":"TypeString","computed":true},"strict_host_key_checking_enabled":{"type":"TypeBool","computed":true}}}},"uri":{"type":"TypeString","computed":true}}}},"search_paths":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ssh_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"host_key":{"type":"TypeString","computed":true},"host_key_algorithm":{"type":"TypeString","computed":true},"private_key":{"type":"TypeString","computed":true},"strict_host_key_checking_enabled":{"type":"TypeBool","computed":true}}}},"uri":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"required_network_traffic_rules":{"type":"TypeList","computed":true,"elem":{"schema":{"direction":{"type":"TypeString","computed":true},"fqdns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_sql_database":{"schema":{"collation":{"type":"TypeString","computed":true},"default_secondary_location":{"type":"TypeString","computed":true},"edition":{"type":"TypeString","computed":true},"elastic_pool_name":{"type":"TypeString","computed":true},"failover_group_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"read_scale":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"server_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_sql_managed_instance":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"collation":{"type":"TypeString","computed":true},"dns_zone_partner_id":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"license_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"proxy_override":{"type":"TypeString","computed":true},"public_data_endpoint_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"storage_account_type":{"type":"TypeString","computed":true},"storage_size_in_gb":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timezone_id":{"type":"TypeString","computed":true},"vcores":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_sql_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_ssh_public_key":{"schema":{"name":{"type":"TypeString","required":true},"public_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_storage_account":{"schema":{"access_tier":{"type":"TypeString","computed":true},"account_kind":{"type":"TypeString","computed":true},"account_replication_type":{"type":"TypeString","computed":true},"account_tier":{"type":"TypeString","computed":true},"allow_nested_items_to_be_public":{"type":"TypeBool","computed":true},"azure_files_authentication":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_guid":{"type":"TypeString","computed":true},"domain_name":{"type":"TypeString","computed":true},"domain_sid":{"type":"TypeString","computed":true},"forest_name":{"type":"TypeString","computed":true},"netbios_domain_name":{"type":"TypeString","computed":true},"storage_sid":{"type":"TypeString","computed":true}}}},"directory_type":{"type":"TypeString","computed":true}}}},"custom_domain":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"enable_https_traffic_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"infrastructure_encryption_enabled":{"type":"TypeBool","computed":true},"is_hns_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"min_tls_version":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"nfsv3_enabled":{"type":"TypeBool","computed":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_blob_connection_string":{"type":"TypeString","computed":true},"primary_blob_endpoint":{"type":"TypeString","computed":true},"primary_blob_host":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_dfs_endpoint":{"type":"TypeString","computed":true},"primary_dfs_host":{"type":"TypeString","computed":true},"primary_file_endpoint":{"type":"TypeString","computed":true},"primary_file_host":{"type":"TypeString","computed":true},"primary_location":{"type":"TypeString","computed":true},"primary_queue_endpoint":{"type":"TypeString","computed":true},"primary_queue_host":{"type":"TypeString","computed":true},"primary_table_endpoint":{"type":"TypeString","computed":true},"primary_table_host":{"type":"TypeString","computed":true},"primary_web_endpoint":{"type":"TypeString","computed":true},"primary_web_host":{"type":"TypeString","computed":true},"queue_encryption_key_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_blob_connection_string":{"type":"TypeString","computed":true},"secondary_blob_endpoint":{"type":"TypeString","computed":true},"secondary_blob_host":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_dfs_endpoint":{"type":"TypeString","computed":true},"secondary_dfs_host":{"type":"TypeString","computed":true},"secondary_file_endpoint":{"type":"TypeString","computed":true},"secondary_file_host":{"type":"TypeString","computed":true},"secondary_location":{"type":"TypeString","computed":true},"secondary_queue_endpoint":{"type":"TypeString","computed":true},"secondary_queue_host":{"type":"TypeString","computed":true},"secondary_table_endpoint":{"type":"TypeString","computed":true},"secondary_table_host":{"type":"TypeString","computed":true},"secondary_web_endpoint":{"type":"TypeString","computed":true},"secondary_web_host":{"type":"TypeString","computed":true},"table_encryption_key_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_storage_account_blob_container_sas":{"schema":{"cache_control":{"type":"TypeString","optional":true},"connection_string":{"type":"TypeString","required":true},"container_name":{"type":"TypeString","required":true},"content_disposition":{"type":"TypeString","optional":true},"content_encoding":{"type":"TypeString","optional":true},"content_language":{"type":"TypeString","optional":true},"content_type":{"type":"TypeString","optional":true},"expiry":{"type":"TypeString","required":true},"https_only":{"type":"TypeBool","optional":true,"default":true},"ip_address":{"type":"TypeString","optional":true},"permissions":{"type":"TypeList","required":true,"elem":{"schema":{"add":{"type":"TypeBool","required":true},"create":{"type":"TypeBool","required":true},"delete":{"type":"TypeBool","required":true},"list":{"type":"TypeBool","required":true},"read":{"type":"TypeBool","required":true},"write":{"type":"TypeBool","required":true}}},"maxItems":1},"sas":{"type":"TypeString","computed":true},"start":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_account_sas":{"schema":{"connection_string":{"type":"TypeString","required":true},"expiry":{"type":"TypeString","required":true},"https_only":{"type":"TypeBool","optional":true,"default":true},"ip_addresses":{"type":"TypeString","optional":true},"permissions":{"type":"TypeList","required":true,"elem":{"schema":{"add":{"type":"TypeBool","required":true},"create":{"type":"TypeBool","required":true},"delete":{"type":"TypeBool","required":true},"filter":{"type":"TypeBool","required":true},"list":{"type":"TypeBool","required":true},"process":{"type":"TypeBool","required":true},"read":{"type":"TypeBool","required":true},"tag":{"type":"TypeBool","required":true},"update":{"type":"TypeBool","required":true},"write":{"type":"TypeBool","required":true}}},"maxItems":1},"resource_types":{"type":"TypeList","required":true,"elem":{"schema":{"container":{"type":"TypeBool","required":true},"object":{"type":"TypeBool","required":true},"service":{"type":"TypeBool","required":true}}},"maxItems":1},"sas":{"type":"TypeString","computed":true},"services":{"type":"TypeList","required":true,"elem":{"schema":{"blob":{"type":"TypeBool","required":true},"file":{"type":"TypeBool","required":true},"queue":{"type":"TypeBool","required":true},"table":{"type":"TypeBool","required":true}}},"maxItems":1},"signed_version":{"type":"TypeString","optional":true,"default":"2017-07-29"},"start":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_blob":{"schema":{"access_tier":{"type":"TypeString","computed":true},"content_md5":{"type":"TypeString","computed":true},"content_type":{"type":"TypeString","computed":true},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","computed":true},"url":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_storage_container":{"schema":{"container_access_type":{"type":"TypeString","computed":true},"has_immutability_policy":{"type":"TypeBool","computed":true},"has_legal_hold":{"type":"TypeBool","computed":true},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_encryption_scope":{"schema":{"key_vault_key_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"source":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_management_policy":{"schema":{"rule":{"type":"TypeList","computed":true,"elem":{"schema":{"actions":{"type":"TypeList","computed":true,"elem":{"schema":{"base_blob":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_tier_to_hot_from_cool_enabled":{"type":"TypeBool","computed":true},"delete_after_days_since_creation_greater_than":{"type":"TypeInt","computed":true},"delete_after_days_since_last_access_time_greater_than":{"type":"TypeInt","computed":true},"delete_after_days_since_modification_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_creation_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_last_access_time_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_modification_greater_than":{"type":"TypeInt","computed":true},"tier_to_cool_after_days_since_creation_greater_than":{"type":"TypeInt","computed":true},"tier_to_cool_after_days_since_last_access_time_greater_than":{"type":"TypeInt","computed":true},"tier_to_cool_after_days_since_modification_greater_than":{"type":"TypeInt","computed":true}}}},"snapshot":{"type":"TypeList","computed":true,"elem":{"schema":{"change_tier_to_archive_after_days_since_creation":{"type":"TypeInt","computed":true},"change_tier_to_cool_after_days_since_creation":{"type":"TypeInt","computed":true},"delete_after_days_since_creation_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","computed":true}}}},"version":{"type":"TypeList","computed":true,"elem":{"schema":{"change_tier_to_archive_after_days_since_creation":{"type":"TypeInt","computed":true},"change_tier_to_cool_after_days_since_creation":{"type":"TypeInt","computed":true},"delete_after_days_since_creation":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","computed":true}}}}}}},"enabled":{"type":"TypeBool","computed":true},"filters":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"match_blob_index_tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operation":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"prefix_match":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","computed":true}}}},"storage_account_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_share":{"schema":{"acl":{"type":"TypeList","optional":true,"elem":{"schema":{"access_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"expiry":{"type":"TypeString","computed":true},"permissions":{"type":"TypeString","computed":true},"start":{"type":"TypeString","computed":true}}}},"id":{"type":"TypeString","computed":true}}}},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"quota":{"type":"TypeInt","computed":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_sync":{"schema":{"incoming_traffic_policy":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_storage_sync_group":{"schema":{"name":{"type":"TypeString","required":true},"storage_sync_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_table_entity":{"schema":{"entity":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"partition_key":{"type":"TypeString","required":true},"row_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"table_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_stream_analytics_job":{"schema":{"compatibility_level":{"type":"TypeString","computed":true},"data_locale":{"type":"TypeString","computed":true},"events_late_arrival_max_delay_in_seconds":{"type":"TypeInt","computed":true},"events_out_of_order_max_delay_in_seconds":{"type":"TypeInt","computed":true},"events_out_of_order_policy":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"job_id":{"type":"TypeString","computed":true},"last_output_time":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"output_error_policy":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"start_mode":{"type":"TypeString","computed":true},"start_time":{"type":"TypeString","computed":true},"streaming_units":{"type":"TypeInt","computed":true},"transformation_query":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_subnet":{"schema":{"address_prefix":{"type":"TypeString","computed":true},"address_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enforce_private_link_endpoint_network_policies":{"type":"TypeBool","computed":true},"enforce_private_link_service_network_policies":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"network_security_group_id":{"type":"TypeString","computed":true},"private_endpoint_network_policies_enabled":{"type":"TypeBool","computed":true},"private_link_service_network_policies_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"route_table_id":{"type":"TypeString","computed":true},"service_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_network_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_subscription":{"schema":{"display_name":{"type":"TypeString","computed":true},"location_placement_id":{"type":"TypeString","computed":true},"quota_id":{"type":"TypeString","computed":true},"spending_limit":{"type":"TypeString","computed":true},"state":{"type":"TypeString","computed":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_subscription_template_deployment":{"schema":{"name":{"type":"TypeString","required":true},"output_content":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_subscriptions":{"schema":{"display_name_contains":{"type":"TypeString","optional":true},"display_name_prefix":{"type":"TypeString","optional":true},"subscriptions":{"type":"TypeList","computed":true,"elem":{"schema":{"display_name":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"location_placement_id":{"type":"TypeString","computed":true},"quota_id":{"type":"TypeString","computed":true},"spending_limit":{"type":"TypeString","computed":true},"state":{"type":"TypeString","computed":true},"subscription_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_synapse_workspace":{"schema":{"connectivity_endpoints":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_template_spec_version":{"schema":{"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"template_body":{"type":"TypeString","computed":true},"version":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_tenant_template_deployment":{"schema":{"name":{"type":"TypeString","required":true},"output_content":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_traffic_manager_geographical_location":{"schema":{"name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_traffic_manager_profile":{"schema":{"dns_config":{"type":"TypeList","computed":true,"elem":{"schema":{"relative_name":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true}}}},"fqdn":{"type":"TypeString","computed":true},"monitor_config":{"type":"TypeList","computed":true,"elem":{"schema":{"custom_header":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"expected_status_code_ranges":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"interval_in_seconds":{"type":"TypeInt","computed":true},"path":{"type":"TypeString","computed":true},"port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","computed":true},"timeout_in_seconds":{"type":"TypeInt","computed":true},"tolerated_number_of_failures":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"profile_status":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"traffic_routing_method":{"type":"TypeString","computed":true},"traffic_view_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"read":5}},"azurerm_user_assigned_identity":{"schema":{"client_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"principal_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_desktop_host_pool":{"schema":{"custom_rdp_properties":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"friendly_name":{"type":"TypeString","computed":true},"load_balancer_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"maximum_sessions_allowed":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"personal_desktop_assignment_type":{"type":"TypeString","computed":true},"preferred_app_group_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"scheduled_agent_updates":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","computed":true},"hour_of_day":{"type":"TypeInt","computed":true}}}},"timezone":{"type":"TypeString","computed":true},"use_session_host_timezone":{"type":"TypeBool","computed":true}}}},"start_vm_on_connect":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"validate_environment":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_hub":{"schema":{"address_prefix":{"type":"TypeString","computed":true},"default_route_table_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_router_asn":{"type":"TypeInt","computed":true},"virtual_router_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_wan_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_hub_connection":{"schema":{"internet_security_enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"remote_virtual_network_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"routing":{"type":"TypeList","computed":true,"elem":{"schema":{"associated_route_table_id":{"type":"TypeString","computed":true},"propagated_route_table":{"type":"TypeList","computed":true,"elem":{"schema":{"labels":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"route_table_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"static_vnet_route":{"type":"TypeList","computed":true,"elem":{"schema":{"address_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"next_hop_ip_address":{"type":"TypeString","computed":true}}}}}}},"virtual_hub_id":{"type":"TypeString","computed":true},"virtual_hub_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_virtual_hub_route_table":{"schema":{"labels":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"route":{"type":"TypeList","computed":true,"elem":{"schema":{"destinations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"destinations_type":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"next_hop":{"type":"TypeString","computed":true},"next_hop_type":{"type":"TypeString","computed":true}}}},"virtual_hub_id":{"type":"TypeString","computed":true},"virtual_hub_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_virtual_machine":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"power_state":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_virtual_machine_scale_set":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"instances":{"type":"TypeList","computed":true,"elem":{"schema":{"computer_name":{"type":"TypeString","computed":true},"instance_id":{"type":"TypeString","computed":true},"latest_model_applied":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","computed":true},"power_state":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_machine_id":{"type":"TypeString","computed":true},"zone":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_interface":{"type":"TypeList","computed":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","computed":true},"enable_ip_forwarding":{"type":"TypeBool","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancer_backend_address_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true},"public_ip_address":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"ip_tag":{"type":"TypeList","computed":true,"elem":{"schema":{"tag":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"public_ip_prefix_id":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"subnet_id":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"network_security_group_id":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_virtual_network":{"schema":{"address_space":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"guid":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"subnets":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vnet_peerings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vnet_peerings_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_virtual_network_gateway":{"schema":{"active_active":{"type":"TypeBool","computed":true},"bgp_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","computed":true},"peer_weight":{"type":"TypeInt","computed":true},"peering_address":{"type":"TypeString","computed":true}}}},"custom_route":{"type":"TypeList","computed":true,"elem":{"schema":{"address_prefixes":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"default_local_network_gateway_id":{"type":"TypeString","computed":true},"enable_bgp":{"type":"TypeBool","computed":true},"generation":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_address_allocation":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_ip_address_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"vpn_client_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"aad_audience":{"type":"TypeString","computed":true},"aad_issuer":{"type":"TypeString","computed":true},"aad_tenant":{"type":"TypeString","computed":true},"address_space":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"radius_server_address":{"type":"TypeString","computed":true},"radius_server_secret":{"type":"TypeString","computed":true},"revoked_certificate":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"root_certificate":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"public_cert_data":{"type":"TypeString","computed":true}}}},"vpn_client_protocols":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"vpn_type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_network_gateway_connection":{"schema":{"authorization_key":{"type":"TypeString","computed":true},"connection_protocol":{"type":"TypeString","computed":true},"dpd_timeout_seconds":{"type":"TypeInt","computed":true},"egress_bytes_transferred":{"type":"TypeInt","computed":true},"enable_bgp":{"type":"TypeBool","computed":true},"express_route_circuit_id":{"type":"TypeString","computed":true},"express_route_gateway_bypass":{"type":"TypeBool","computed":true},"ingress_bytes_transferred":{"type":"TypeInt","computed":true},"ipsec_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"dh_group":{"type":"TypeString","computed":true},"ike_encryption":{"type":"TypeString","computed":true},"ike_integrity":{"type":"TypeString","computed":true},"ipsec_encryption":{"type":"TypeString","computed":true},"ipsec_integrity":{"type":"TypeString","computed":true},"pfs_group":{"type":"TypeString","computed":true},"sa_datasize":{"type":"TypeInt","computed":true},"sa_lifetime":{"type":"TypeInt","computed":true}}}},"local_azure_ip_address_enabled":{"type":"TypeBool","computed":true},"local_network_gateway_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"peer_virtual_network_gateway_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"resource_guid":{"type":"TypeString","computed":true},"routing_weight":{"type":"TypeInt","computed":true},"shared_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"traffic_selector_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"local_address_cidrs":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"remote_address_cidrs":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"type":{"type":"TypeString","computed":true},"use_policy_based_traffic_selectors":{"type":"TypeBool","computed":true},"virtual_network_gateway_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_wan":{"schema":{"allow_branch_to_branch_traffic":{"type":"TypeBool","computed":true},"disable_vpn_encryption":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"office365_local_breakout_category":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_hub_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"vpn_site_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_vmware_private_cloud":{"schema":{"circuit":{"type":"TypeList","computed":true,"elem":{"schema":{"express_route_id":{"type":"TypeString","computed":true},"express_route_private_peering_id":{"type":"TypeString","computed":true},"primary_subnet_cidr":{"type":"TypeString","computed":true},"secondary_subnet_cidr":{"type":"TypeString","computed":true}}}},"hcx_cloud_manager_endpoint":{"type":"TypeString","computed":true},"internet_connection_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"management_cluster":{"type":"TypeList","computed":true,"elem":{"schema":{"hosts":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeInt","computed":true},"size":{"type":"TypeInt","computed":true}}}},"management_subnet_cidr":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_subnet_cidr":{"type":"TypeString","computed":true},"nsxt_certificate_thumbprint":{"type":"TypeString","computed":true},"nsxt_manager_endpoint":{"type":"TypeString","computed":true},"provisioning_subnet_cidr":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vcenter_certificate_thumbprint":{"type":"TypeString","computed":true},"vcsa_endpoint":{"type":"TypeString","computed":true},"vmotion_subnet_cidr":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_vpn_gateway":{"schema":{"bgp_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","computed":true},"bgp_peering_address":{"type":"TypeString","computed":true},"instance_0_bgp_peering_address":{"type":"TypeList","computed":true,"elem":{"schema":{"custom_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"default_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_id":{"type":"TypeString","computed":true},"tunnel_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"instance_1_bgp_peering_address":{"type":"TypeList","computed":true,"elem":{"schema":{"custom_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"default_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_id":{"type":"TypeString","computed":true},"tunnel_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"peer_weight":{"type":"TypeInt","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"scale_unit":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_web_application_firewall_policy":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_web_pubsub":{"schema":{"aad_auth_enabled":{"type":"TypeBool","computed":true},"capacity":{"type":"TypeInt","computed":true},"external_ip":{"type":"TypeString","computed":true},"hostname":{"type":"TypeString","computed":true},"local_auth_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"public_port":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"server_port":{"type":"TypeInt","computed":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tls_client_cert_enabled":{"type":"TypeBool","computed":true},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_web_pubsub_private_link_resource":{"schema":{"shared_private_link_resource_types":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"subresource_name":{"type":"TypeString","computed":true}}}},"web_pubsub_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_windows_function_app":{"schema":{"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"The list of Allowed audience values considered when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret for the Client ID.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true}}}},"additional_login_parameters":{"type":"TypeMap","description":"The map of Login Parameters sent to the OpenID Connect authorization endpoint when a user logs in.","computed":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","description":"The default authentication provider used when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","description":"Is the Authentication / Authorization feature enabled?","computed":true},"facebook":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret":{"type":"TypeString","description":"The App Secret of the Facebook app used for Facebook Login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"github":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret of the GitHub app used for GitHub Login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret":{"type":"TypeString","description":"The client secret associated with the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes that requested as part of Google Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"issuer":{"type":"TypeString","description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens.","computed":true},"microsoft":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret":{"type":"TypeString","description":"The OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"runtime_version":{"type":"TypeString","description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Are platform-specific security tokens that are obtained during login flows durably stored?","computed":true},"twitter":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret":{"type":"TypeString","description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_client_action":{"type":"TypeString","description":"The action taken when an unauthenticated client attempts to access the app.","computed":true}}}},"auth_settings_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret_certificate_thumbprint":{"type":"TypeString","description":"The thumbprint of the certificate used for signing purposes.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true},"jwt_allowed_client_applications":{"type":"TypeList","description":"A list of Allowed Client Applications in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","description":"A list of Allowed Groups in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","description":"The Azure Tenant URI for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`","computed":true},"www_authentication_disabled":{"type":"TypeBool","description":"Is the www-authenticate provider omitted from the request?","computed":true}}}},"apple_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Apple web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Apple Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Apple Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"auth_enabled":{"type":"TypeBool","description":"Is the AuthV2 Settings be enabled.","computed":true},"azure_static_web_app_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with Azure Static Web App Authentication.","computed":true}}}},"config_file_path":{"type":"TypeString","description":"The path to the App Auth settings.","computed":true},"custom_oidc_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`","computed":true},"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with this Custom OIDC.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","description":"The name of the Custom OIDC Authentication Provider.","computed":true},"name_claim_type":{"type":"TypeString","description":"The name of the claim that contains the users name.","computed":true},"openid_configuration_endpoint":{"type":"TypeString","description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider.","computed":true},"scopes":{"type":"TypeList","description":"The list of the scopes that should be requested while authenticating.","computed":true,"elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","description":"The Default Authentication Provider used when the `unauthenticated_action` is set to `RedirectToLoginPage`.","computed":true},"excluded_paths":{"type":"TypeList","description":"The paths which are excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","computed":true,"elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"graph_api_version":{"type":"TypeString","description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"forward_proxy_convention":{"type":"TypeString","description":"The convention used to determine the url of the request made.","computed":true},"forward_proxy_custom_host_header_name":{"type":"TypeString","description":"The name of the header containing the host of the request.","computed":true},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","description":"The name of the header containing the scheme of the request.","computed":true},"github_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"http_route_api_prefix":{"type":"TypeString","description":"The prefix that precedes all the authentication and authorisation paths.","computed":true},"login":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","computed":true,"elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","computed":true},"cookie_expiration_time":{"type":"TypeString","description":"The time after the request is made when the session cookie will expire.","computed":true},"logout_endpoint":{"type":"TypeString","description":"The endpoint to which logout requests are made.","computed":true},"nonce_expiration_time":{"type":"TypeString","description":"The time after the request is made when the nonce will expire.","computed":true},"preserve_url_fragments_for_logins":{"type":"TypeBool","description":"Are the fragments from the request be preserved after the login request is made.","computed":true},"token_refresh_extension_time":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Is the Token Store configuration Enabled.","computed":true},"token_store_path":{"type":"TypeString","description":"The directory path in the App Filesystem in which the tokens are stored.","computed":true},"token_store_sas_setting_name":{"type":"TypeString","description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens.","computed":true},"validate_nonce":{"type":"TypeBool","description":"Is the nonce be validated while completing the login flow.","computed":true}}}},"microsoft_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"require_authentication":{"type":"TypeBool","description":"Is the authentication flow used for all requests.","computed":true},"require_https":{"type":"TypeBool","description":"Is HTTPS required on connections?","computed":true},"runtime_version":{"type":"TypeString","description":"The Runtime Version of the Authentication and Authorisation feature of this App.","computed":true},"twitter_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_action":{"type":"TypeString","computed":true}}}},"backup":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","description":"Is this backup job enabled?","computed":true},"name":{"type":"TypeString","description":"The name of this Backup.","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","description":"How often the backup should is executed in multiples of the `frequency_unit`.","computed":true},"frequency_unit":{"type":"TypeString","description":"The unit of time for how often the backup takes place.","computed":true},"keep_at_least_one_backup":{"type":"TypeBool","description":"Does the service keep at least one backup, regardless of age of backup.","computed":true},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","description":"After how many days are backups deleted.","computed":true},"start_time":{"type":"TypeString","description":"When the schedule should start working in RFC-3339 format.","computed":true}}}},"storage_account_url":{"type":"TypeString","description":"The SAS URL to the container.","computed":true}}}},"builtin_logging_enabled":{"type":"TypeBool","computed":true},"client_certificate_enabled":{"type":"TypeBool","computed":true},"client_certificate_exclusion_paths":{"type":"TypeString","description":"Paths to exclude when using client certificates, separated by ;","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of this Connection.","computed":true},"type":{"type":"TypeString","description":"The type of database.","computed":true},"value":{"type":"TypeString","description":"The connection string value.","computed":true}}}},"content_share_force_disabled":{"type":"TypeBool","computed":true},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"functions_extension_version":{"type":"TypeString","computed":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_plan_id":{"type":"TypeString","computed":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"api_definition_url":{"type":"TypeString","computed":true},"api_management_api_id":{"type":"TypeString","computed":true},"app_command_line":{"type":"TypeString","computed":true},"app_scale_limit":{"type":"TypeInt","computed":true},"app_service_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","computed":true},"retention_period_days":{"type":"TypeInt","computed":true}}}},"application_insights_connection_string":{"type":"TypeString","computed":true},"application_insights_key":{"type":"TypeString","computed":true},"application_stack":{"type":"TypeList","computed":true,"elem":{"schema":{"dotnet_version":{"type":"TypeString","computed":true},"java_version":{"type":"TypeString","computed":true},"node_version":{"type":"TypeString","computed":true},"powershell_core_version":{"type":"TypeString","computed":true},"use_custom_runtime":{"type":"TypeBool","computed":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","computed":true}}}},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeList","description":"The list of origins that are allowed to make cross-origin calls.","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","description":"Are credentials allowed in CORS requests?","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"elastic_instance_minimum":{"type":"TypeInt","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_eviction_time_in_min":{"type":"TypeInt","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"load_balancing_mode":{"type":"TypeString","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"pre_warmed_instance_count":{"type":"TypeInt","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"scm_minimum_tls_version":{"type":"TypeString","computed":true},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"windows_fx_version":{"type":"TypeString","computed":true},"worker_count":{"type":"TypeInt","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connection_string_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"storage_account_access_key":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","computed":true},"storage_key_vault_secret_id":{"type":"TypeString","description":"The Key Vault Secret ID, including version, that contains the Connection String used to connect to the storage account for this Function App.","computed":true},"storage_uses_managed_identity":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":10}},"azurerm_windows_web_app":{"schema":{"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"The list of Allowed audience values considered when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret for the Client ID.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true}}}},"additional_login_parameters":{"type":"TypeMap","description":"The map of Login Parameters sent to the OpenID Connect authorization endpoint when a user logs in.","computed":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","description":"The default authentication provider used when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","description":"Is the Authentication / Authorization feature enabled?","computed":true},"facebook":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret":{"type":"TypeString","description":"The App Secret of the Facebook app used for Facebook Login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"github":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret of the GitHub app used for GitHub Login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret":{"type":"TypeString","description":"The client secret associated with the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes that requested as part of Google Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"issuer":{"type":"TypeString","description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens.","computed":true},"microsoft":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret":{"type":"TypeString","description":"The OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"runtime_version":{"type":"TypeString","description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Are platform-specific security tokens that are obtained during login flows durably stored?","computed":true},"twitter":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret":{"type":"TypeString","description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_client_action":{"type":"TypeString","description":"The action taken when an unauthenticated client attempts to access the app.","computed":true}}}},"auth_settings_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret_certificate_thumbprint":{"type":"TypeString","description":"The thumbprint of the certificate used for signing purposes.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true},"jwt_allowed_client_applications":{"type":"TypeList","description":"A list of Allowed Client Applications in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","description":"A list of Allowed Groups in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","description":"The Azure Tenant URI for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`","computed":true},"www_authentication_disabled":{"type":"TypeBool","description":"Is the www-authenticate provider omitted from the request?","computed":true}}}},"apple_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Apple web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Apple Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Apple Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"auth_enabled":{"type":"TypeBool","description":"Is the AuthV2 Settings be enabled.","computed":true},"azure_static_web_app_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with Azure Static Web App Authentication.","computed":true}}}},"config_file_path":{"type":"TypeString","description":"The path to the App Auth settings.","computed":true},"custom_oidc_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`","computed":true},"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with this Custom OIDC.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","description":"The name of the Custom OIDC Authentication Provider.","computed":true},"name_claim_type":{"type":"TypeString","description":"The name of the claim that contains the users name.","computed":true},"openid_configuration_endpoint":{"type":"TypeString","description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider.","computed":true},"scopes":{"type":"TypeList","description":"The list of the scopes that should be requested while authenticating.","computed":true,"elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","description":"The Default Authentication Provider used when the `unauthenticated_action` is set to `RedirectToLoginPage`.","computed":true},"excluded_paths":{"type":"TypeList","description":"The paths which are excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","computed":true,"elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"graph_api_version":{"type":"TypeString","description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"forward_proxy_convention":{"type":"TypeString","description":"The convention used to determine the url of the request made.","computed":true},"forward_proxy_custom_host_header_name":{"type":"TypeString","description":"The name of the header containing the host of the request.","computed":true},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","description":"The name of the header containing the scheme of the request.","computed":true},"github_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"http_route_api_prefix":{"type":"TypeString","description":"The prefix that precedes all the authentication and authorisation paths.","computed":true},"login":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","computed":true,"elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","computed":true},"cookie_expiration_time":{"type":"TypeString","description":"The time after the request is made when the session cookie will expire.","computed":true},"logout_endpoint":{"type":"TypeString","description":"The endpoint to which logout requests are made.","computed":true},"nonce_expiration_time":{"type":"TypeString","description":"The time after the request is made when the nonce will expire.","computed":true},"preserve_url_fragments_for_logins":{"type":"TypeBool","description":"Are the fragments from the request be preserved after the login request is made.","computed":true},"token_refresh_extension_time":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Is the Token Store configuration Enabled.","computed":true},"token_store_path":{"type":"TypeString","description":"The directory path in the App Filesystem in which the tokens are stored.","computed":true},"token_store_sas_setting_name":{"type":"TypeString","description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens.","computed":true},"validate_nonce":{"type":"TypeBool","description":"Is the nonce be validated while completing the login flow.","computed":true}}}},"microsoft_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"require_authentication":{"type":"TypeBool","description":"Is the authentication flow used for all requests.","computed":true},"require_https":{"type":"TypeBool","description":"Is HTTPS required on connections?","computed":true},"runtime_version":{"type":"TypeString","description":"The Runtime Version of the Authentication and Authorisation feature of this App.","computed":true},"twitter_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_action":{"type":"TypeString","computed":true}}}},"backup":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","description":"Is this backup job enabled?","computed":true},"name":{"type":"TypeString","description":"The name of this Backup.","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","description":"How often the backup should is executed in multiples of the `frequency_unit`.","computed":true},"frequency_unit":{"type":"TypeString","description":"The unit of time for how often the backup takes place.","computed":true},"keep_at_least_one_backup":{"type":"TypeBool","description":"Does the service keep at least one backup, regardless of age of backup.","computed":true},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","description":"After how many days are backups deleted.","computed":true},"start_time":{"type":"TypeString","description":"When the schedule should start working in RFC-3339 format.","computed":true}}}},"storage_account_url":{"type":"TypeString","description":"The SAS URL to the container.","computed":true}}}},"client_affinity_enabled":{"type":"TypeBool","computed":true},"client_certificate_enabled":{"type":"TypeBool","computed":true},"client_certificate_exclusion_paths":{"type":"TypeString","description":"Paths to exclude when using client certificates, separated by ;","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of this Connection.","computed":true},"type":{"type":"TypeString","description":"The type of database.","computed":true},"value":{"type":"TypeString","description":"The connection string value.","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","computed":true,"elem":{"schema":{"application_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","computed":true,"elem":{"schema":{"level":{"type":"TypeString","computed":true},"retention_in_days":{"type":"TypeInt","computed":true},"sas_url":{"type":"TypeString","computed":true}}}},"file_system_level":{"type":"TypeString","computed":true}}}},"detailed_error_messages":{"type":"TypeBool","computed":true},"failed_request_tracing":{"type":"TypeBool","computed":true},"http_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","computed":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","computed":true},"sas_url":{"type":"TypeString","computed":true}}}},"file_system":{"type":"TypeList","computed":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","computed":true},"retention_in_mb":{"type":"TypeInt","computed":true}}}}}}}}}},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_plan_id":{"type":"TypeString","computed":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"api_definition_url":{"type":"TypeString","computed":true},"api_management_api_id":{"type":"TypeString","computed":true},"app_command_line":{"type":"TypeString","computed":true},"application_stack":{"type":"TypeList","computed":true,"elem":{"schema":{"current_stack":{"type":"TypeString","computed":true},"docker_container_name":{"type":"TypeString","computed":true},"docker_container_registry":{"type":"TypeString","computed":true},"docker_container_tag":{"type":"TypeString","computed":true},"docker_image_name":{"type":"TypeString","computed":true},"docker_registry_password":{"type":"TypeString","computed":true},"docker_registry_url":{"type":"TypeString","computed":true},"docker_registry_username":{"type":"TypeString","computed":true},"dotnet_core_version":{"type":"TypeString","computed":true},"dotnet_version":{"type":"TypeString","computed":true},"java_container":{"type":"TypeString","computed":true},"java_container_version":{"type":"TypeString","computed":true},"java_embedded_server_enabled":{"type":"TypeBool","computed":true},"java_version":{"type":"TypeString","computed":true},"node_version":{"type":"TypeString","computed":true},"php_version":{"type":"TypeString","computed":true},"python":{"type":"TypeBool","computed":true},"python_version":{"type":"TypeString","computed":true},"tomcat_version":{"type":"TypeString","computed":true}}}},"auto_heal_enabled":{"type":"TypeBool","computed":true},"auto_heal_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeList","computed":true,"elem":{"schema":{"action_type":{"type":"TypeString","computed":true},"custom_action":{"type":"TypeList","computed":true,"elem":{"schema":{"executable":{"type":"TypeString","computed":true},"parameters":{"type":"TypeString","computed":true}}}},"minimum_process_execution_time":{"type":"TypeString","computed":true}}}},"trigger":{"type":"TypeList","computed":true,"elem":{"schema":{"private_memory_kb":{"type":"TypeInt","computed":true},"requests":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true}}}},"slow_request":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true},"path":{"type":"TypeString","computed":true},"time_taken":{"type":"TypeString","computed":true}}}},"status_code":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true},"path":{"type":"TypeString","computed":true},"status_code_range":{"type":"TypeString","computed":true},"sub_status":{"type":"TypeInt","computed":true},"win32_status_code":{"type":"TypeInt","computed":true}}}}}}}}}},"container_registry_managed_identity_client_id":{"type":"TypeString","computed":true},"container_registry_use_managed_identity":{"type":"TypeBool","computed":true},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeList","description":"The list of origins that are allowed to make cross-origin calls.","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","description":"Are credentials allowed in CORS requests?","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_eviction_time_in_min":{"type":"TypeInt","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"load_balancing_mode":{"type":"TypeString","computed":true},"local_mysql_enabled":{"type":"TypeBool","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"scm_minimum_tls_version":{"type":"TypeString","computed":true},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker":{"type":"TypeBool","computed":true},"virtual_application":{"type":"TypeList","computed":true,"elem":{"schema":{"physical_path":{"type":"TypeString","computed":true},"preload":{"type":"TypeBool","computed":true},"virtual_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"physical_path":{"type":"TypeString","computed":true},"virtual_path":{"type":"TypeString","computed":true}}}},"virtual_path":{"type":"TypeString","computed":true}}}},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"windows_fx_version":{"type":"TypeString","computed":true},"worker_count":{"type":"TypeInt","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connection_string_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"storage_account":{"type":"TypeList","computed":true,"elem":{"schema":{"access_key":{"type":"TypeString","computed":true},"account_name":{"type":"TypeString","computed":true},"mount_path":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"share_name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":10}}}}} +{"providerName":"azurerm","schemaVersion":"1","providerSchema":{"schema":{"auxiliary_tenant_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":3},"client_certificate":{"type":"TypeString","optional":true,"description":"Base64 encoded PKCS#12 certificate bundle to use when authenticating as a Service Principal using a Client Certificate"},"client_certificate_password":{"type":"TypeString","optional":true,"description":"The password associated with the Client Certificate. For use when authenticating as a Service Principal using a Client Certificate"},"client_certificate_path":{"type":"TypeString","optional":true,"description":"The path to the Client Certificate associated with the Service Principal for use when authenticating as a Service Principal using a Client Certificate."},"client_id":{"type":"TypeString","optional":true,"description":"The Client ID which should be used."},"client_id_file_path":{"type":"TypeString","optional":true,"description":"The path to a file containing the Client ID which should be used."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret which should be used. For use When authenticating as a Service Principal using a Client Secret."},"client_secret_file_path":{"type":"TypeString","optional":true,"description":"The path to a file containing the Client Secret which should be used. For use When authenticating as a Service Principal using a Client Secret."},"disable_correlation_request_id":{"type":"TypeBool","optional":true,"description":"This will disable the x-ms-correlation-request-id header."},"disable_terraform_partner_id":{"type":"TypeBool","optional":true,"description":"This will disable the Terraform Partner ID which is used if a custom `partner_id` isn't specified."},"environment":{"type":"TypeString","required":true,"description":"The Cloud Environment which should be used. Possible values are public, usgovernment, and china. Defaults to public."},"features":{"type":"TypeList","required":true,"elem":{"schema":{"api_management":{"type":"TypeList","optional":true,"elem":{"schema":{"purge_soft_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true},"recover_soft_deleted":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"app_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"purge_soft_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true},"recover_soft_deleted":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"application_insights":{"type":"TypeList","optional":true,"elem":{"schema":{"disable_generated_rule":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"cognitive_account":{"type":"TypeList","optional":true,"elem":{"schema":{"purge_soft_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"purge_soft_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault` resources will be permanently deleted (e.g purged), when destroyed"},"purge_soft_deleted_certificates_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_certificate` resources will be permanently deleted (e.g purged), when destroyed"},"purge_soft_deleted_hardware_security_modules_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_managed_hardware_security_module` resources will be permanently deleted (e.g purged), when destroyed"},"purge_soft_deleted_keys_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_key` resources will be permanently deleted (e.g purged), when destroyed"},"purge_soft_deleted_secrets_on_destroy":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_secret` resources will be permanently deleted (e.g purged), when destroyed"},"recover_soft_deleted_certificates":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_certificate` resources will be restored, instead of creating new ones"},"recover_soft_deleted_key_vaults":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault` resources will be restored, instead of creating new ones"},"recover_soft_deleted_keys":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_key` resources will be restored, instead of creating new ones"},"recover_soft_deleted_secrets":{"type":"TypeBool","optional":true,"default":true,"description":"When enabled soft-deleted `azurerm_key_vault_secret` resources will be restored, instead of creating new ones"}}},"maxItems":1},"log_analytics_workspace":{"type":"TypeList","optional":true,"elem":{"schema":{"permanently_delete_on_destroy":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"managed_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"expand_without_downtime":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"resource_group":{"type":"TypeList","optional":true,"elem":{"schema":{"prevent_deletion_if_contains_resources":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"subscription":{"type":"TypeList","optional":true,"elem":{"schema":{"prevent_cancellation_on_destroy":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"template_deployment":{"type":"TypeList","optional":true,"elem":{"schema":{"delete_nested_items_during_deletion":{"type":"TypeBool","required":true}}},"maxItems":1},"virtual_machine":{"type":"TypeList","optional":true,"elem":{"schema":{"delete_os_disk_on_deletion":{"type":"TypeBool","optional":true,"default":false},"graceful_shutdown":{"type":"TypeBool","optional":true,"default":false},"skip_shutdown_and_force_delete":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"virtual_machine_scale_set":{"type":"TypeList","optional":true,"elem":{"schema":{"force_delete":{"type":"TypeBool","optional":true,"default":false},"roll_instances_when_required":{"type":"TypeBool","required":true},"scale_to_zero_before_deletion":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}},"maxItems":1,"minItems":1},"metadata_host":{"type":"TypeString","required":true,"description":"The Hostname which should be used for the Azure Metadata Service."},"msi_endpoint":{"type":"TypeString","optional":true,"description":"The path to a custom endpoint for Managed Service Identity - in most circumstances this should be detected automatically. "},"oidc_request_token":{"type":"TypeString","optional":true,"description":"The bearer token for the request to the OIDC provider. For use when authenticating as a Service Principal using OpenID Connect."},"oidc_request_url":{"type":"TypeString","optional":true,"description":"The URL for the OIDC provider from which to request an ID token. For use when authenticating as a Service Principal using OpenID Connect."},"oidc_token":{"type":"TypeString","optional":true,"description":"The OIDC ID token for use when authenticating as a Service Principal using OpenID Connect."},"oidc_token_file_path":{"type":"TypeString","optional":true,"description":"The path to a file containing an OIDC ID token for use when authenticating as a Service Principal using OpenID Connect."},"partner_id":{"type":"TypeString","optional":true,"description":"A GUID/UUID that is registered with Microsoft to facilitate partner resource usage attribution."},"skip_provider_registration":{"type":"TypeBool","optional":true,"description":"Should the AzureRM Provider skip registering all of the Resource Providers that it supports, if they're not already registered?"},"storage_use_azuread":{"type":"TypeBool","optional":true,"description":"Should the AzureRM Provider use AzureAD to access the Storage Data Plane API's?"},"subscription_id":{"type":"TypeString","optional":true,"description":"The Subscription ID which should be used."},"tenant_id":{"type":"TypeString","optional":true,"description":"The Tenant ID which should be used."},"use_cli":{"type":"TypeBool","optional":true,"default":true,"description":"Allow Azure CLI to be used for Authentication."},"use_msi":{"type":"TypeBool","optional":true,"description":"Allow Managed Service Identity to be used for Authentication."},"use_oidc":{"type":"TypeBool","optional":true,"description":"Allow OpenID Connect to be used for authentication"}},"resources":{"azurerm_aadb2c_directory":{"schema":{"billing_type":{"type":"TypeString","description":"The type of billing for the B2C tenant. Possible values include: `MAU` or `Auths`.","computed":true},"country_code":{"type":"TypeString","optional":true,"description":"Country code of the B2C tenant. See https://aka.ms/B2CDataResidency for valid country codes.","computed":true,"forceNew":true},"data_residency_location":{"type":"TypeString","required":true,"description":"Location in which the B2C tenant is hosted and data resides. See https://aka.ms/B2CDataResidency for more information.","forceNew":true},"display_name":{"type":"TypeString","optional":true,"description":"The initial display name of the B2C tenant.","computed":true,"forceNew":true},"domain_name":{"type":"TypeString","required":true,"description":"Domain name of the B2C tenant, including onmicrosoft.com suffix.","forceNew":true},"effective_start_date":{"type":"TypeString","description":"The date from which the billing type took effect. May not be populated until after the first billing cycle.","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"description":"Billing SKU for the B2C tenant. See https://aka.ms/b2cBilling for more information."},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","description":"The Tenant ID for the B2C tenant.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_active_directory_domain_service":{"schema":{"deployment_id":{"type":"TypeString","computed":true},"domain_configuration_type":{"type":"TypeString","optional":true,"forceNew":true},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"filtered_sync_enabled":{"type":"TypeBool","optional":true,"default":false},"initial_replica_set":{"type":"TypeList","required":true,"elem":{"schema":{"domain_controller_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"external_access_ip_address":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"service_status":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notifications":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"additional_recipients":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"notify_dc_admins":{"type":"TypeBool","optional":true,"default":false},"notify_global_admins":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_id":{"type":"TypeString","computed":true},"secure_ldap":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"certificate_expiry":{"type":"TypeString","computed":true},"certificate_thumbprint":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","required":true},"external_access_enabled":{"type":"TypeBool","optional":true,"default":false},"pfx_certificate":{"type":"TypeString","required":true},"pfx_certificate_password":{"type":"TypeString","required":true},"public_certificate":{"type":"TypeString","computed":true}}},"maxItems":1},"security":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"kerberos_armoring_enabled":{"type":"TypeBool","optional":true,"default":false},"kerberos_rc4_encryption_enabled":{"type":"TypeBool","optional":true,"default":false},"ntlm_v1_enabled":{"type":"TypeBool","optional":true,"default":false},"sync_kerberos_passwords":{"type":"TypeBool","optional":true,"default":false},"sync_ntlm_passwords":{"type":"TypeBool","optional":true,"default":false},"sync_on_prem_passwords":{"type":"TypeBool","optional":true,"default":false},"tls_v1_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"sku":{"type":"TypeString","required":true},"sync_owner":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true},"version":{"type":"TypeInt","computed":true}},"timeouts":{"create":180,"read":5,"delete":60,"update":120}},"azurerm_active_directory_domain_service_replica_set":{"schema":{"domain_controller_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"domain_service_id":{"type":"TypeString","required":true,"forceNew":true},"external_access_ip_address":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"service_status":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":180,"read":5,"delete":60,"update":120}},"azurerm_active_directory_domain_service_trust":{"schema":{"domain_service_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"trusted_domain_dns_ips":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":2},"trusted_domain_fqdn":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_advanced_threat_protection":{"schema":{"enabled":{"type":"TypeBool","required":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_analysis_services_server":{"schema":{"admin_users":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"backup_blob_container_uri":{"type":"TypeString","optional":true},"enable_power_bi_service":{"type":"TypeBool","optional":true},"ipv4_firewall_rule":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"range_end":{"type":"TypeString","required":true},"range_start":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"querypool_connection_mode":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_full_name":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_connection":{"schema":{"display_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_api_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameter_values":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management":{"schema":{"additional_location":{"type":"TypeList","optional":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true,"computed":true},"gateway_disabled":{"type":"TypeBool","optional":true,"default":false},"gateway_regional_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_id":{"type":"TypeString","optional":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_network_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"subnet_id":{"type":"TypeString","required":true}}},"maxItems":1},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}}},"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_password":{"type":"TypeString","optional":true},"encoded_certificate":{"type":"TypeString","required":true},"expiry":{"type":"TypeString","computed":true},"store_name":{"type":"TypeString","required":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}},"maxItems":10},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"delegation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"subscriptions_enabled":{"type":"TypeBool","optional":true,"default":false},"url":{"type":"TypeString","optional":true},"user_registration_enabled":{"type":"TypeBool","optional":true,"default":false},"validation_key":{"type":"TypeString","optional":true}}},"maxItems":1},"developer_portal_url":{"type":"TypeString","computed":true},"gateway_disabled":{"type":"TypeBool","optional":true,"default":false},"gateway_regional_url":{"type":"TypeString","computed":true},"gateway_url":{"type":"TypeString","computed":true},"hostname_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"developer_portal":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"management":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"portal":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"default_ssl_binding":{"type":"TypeBool","optional":true,"computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"scm":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"management_api_url":{"type":"TypeString","computed":true},"min_api_version":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification_sender_email":{"type":"TypeString","optional":true,"computed":true},"policy":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}}},"maxItems":1},"portal_url":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"protocols":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enable_http2":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"public_ip_address_id":{"type":"TypeString","optional":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"publisher_email":{"type":"TypeString","required":true},"publisher_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scm_url":{"type":"TypeString","computed":true},"security":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enable_backend_ssl30":{"type":"TypeBool","optional":true,"default":false},"enable_backend_tls10":{"type":"TypeBool","optional":true,"default":false},"enable_backend_tls11":{"type":"TypeBool","optional":true,"default":false},"enable_frontend_ssl30":{"type":"TypeBool","optional":true,"default":false},"enable_frontend_tls10":{"type":"TypeBool","optional":true,"default":false},"enable_frontend_tls11":{"type":"TypeBool","optional":true,"default":false},"tls_ecdhe_ecdsa_with_aes128_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_ecdhe_ecdsa_with_aes256_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_ecdhe_rsa_with_aes128_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_ecdhe_rsa_with_aes256_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes128_cbc_sha256_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes128_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes128_gcm_sha256_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes256_cbc_sha256_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes256_cbc_sha_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"tls_rsa_with_aes256_gcm_sha384_ciphers_enabled":{"type":"TypeBool","optional":true,"default":false},"triple_des_ciphers_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"sign_in":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"sign_up":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"terms_of_service":{"type":"TypeList","required":true,"elem":{"schema":{"consent_required":{"type":"TypeBool","required":true},"enabled":{"type":"TypeBool","required":true},"text":{"type":"TypeString","optional":true}}},"maxItems":1}}},"maxItems":1},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_access":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"primary_key":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}},"maxItems":1},"virtual_network_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"subnet_id":{"type":"TypeString","required":true}}},"maxItems":1},"virtual_network_type":{"type":"TypeString","optional":true,"default":"None"},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_api_management_api":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_type":{"type":"TypeString","optional":true,"computed":true},"contact":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"url":{"type":"TypeString","optional":true}}},"maxItems":1,"minItems":1},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"import":{"type":"TypeList","optional":true,"elem":{"schema":{"content_format":{"type":"TypeString","required":true},"content_value":{"type":"TypeString","required":true},"wsdl_selector":{"type":"TypeList","optional":true,"elem":{"schema":{"endpoint_name":{"type":"TypeString","required":true},"service_name":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"is_current":{"type":"TypeBool","computed":true},"is_online":{"type":"TypeBool","computed":true},"license":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"url":{"type":"TypeString","optional":true}}},"maxItems":1,"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"oauth2_authorization":{"type":"TypeList","optional":true,"elem":{"schema":{"authorization_server_name":{"type":"TypeString","required":true},"scope":{"type":"TypeString","optional":true}}},"maxItems":1},"openid_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"bearer_token_sending_methods":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"openid_provider_name":{"type":"TypeString","required":true}}},"maxItems":1},"path":{"type":"TypeString","optional":true,"computed":true},"protocols":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"revision":{"type":"TypeString","required":true,"forceNew":true},"revision_description":{"type":"TypeString","optional":true},"service_url":{"type":"TypeString","optional":true,"computed":true},"soap_pass_through":{"type":"TypeBool","optional":true,"computed":true},"source_api_id":{"type":"TypeString","optional":true},"subscription_key_parameter_names":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"header":{"type":"TypeString","required":true},"query":{"type":"TypeString","required":true}}},"maxItems":1},"subscription_required":{"type":"TypeBool","optional":true,"default":true},"terms_of_service_url":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true,"computed":true},"version_description":{"type":"TypeString","optional":true},"version_set_id":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_diagnostic":{"schema":{"always_log_errors":{"type":"TypeBool","optional":true,"computed":true},"api_management_logger_id":{"type":"TypeString","required":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"backend_request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"backend_response":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"frontend_request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"frontend_response":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"http_correlation_protocol":{"type":"TypeString","optional":true,"computed":true},"identifier":{"type":"TypeString","required":true,"forceNew":true},"log_client_ip":{"type":"TypeBool","optional":true,"computed":true},"operation_name_format":{"type":"TypeString","optional":true,"default":"Name"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sampling_percentage":{"type":"TypeFloat","optional":true,"computed":true},"verbosity":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_operation":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"method":{"type":"TypeString","required":true},"operation_id":{"type":"TypeString","required":true,"forceNew":true},"request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"query_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"representation":{"type":"TypeList","optional":true,"elem":{"schema":{"content_type":{"type":"TypeString","required":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"form_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"schema_id":{"type":"TypeString","optional":true},"type_name":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"response":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"representation":{"type":"TypeList","optional":true,"elem":{"schema":{"content_type":{"type":"TypeString","required":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"form_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"schema_id":{"type":"TypeString","optional":true},"type_name":{"type":"TypeString","optional":true}}}},"status_code":{"type":"TypeInt","required":true}}}},"template_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"example":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"external_value":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"summary":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"required":{"type":"TypeBool","required":true},"schema_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_name":{"type":"TypeString","optional":true},"values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"url_template":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_operation_policy":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"operation_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_operation_tag":{"schema":{"api_operation_id":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_policy":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_release":{"schema":{"api_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_schema":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"components":{"type":"TypeString","optional":true},"content_type":{"type":"TypeString","required":true},"definitions":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schema_id":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_tag":{"schema":{"api_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_api_management_api_tag_description":{"schema":{"api_tag_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"external_documentation_description":{"type":"TypeString","optional":true},"external_documentation_url":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_api_version_set":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"version_header_name":{"type":"TypeString","optional":true},"version_query_name":{"type":"TypeString","optional":true},"versioning_scheme":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_authorization_server":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"authorization_endpoint":{"type":"TypeString","required":true},"authorization_methods":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"bearer_token_sending_methods":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"client_authentication_method":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_registration_endpoint":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true},"default_scope":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"grant_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_owner_password":{"type":"TypeString","optional":true},"resource_owner_username":{"type":"TypeString","optional":true},"support_state":{"type":"TypeBool","optional":true},"token_body_parameter":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"token_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_backend":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"credentials":{"type":"TypeList","optional":true,"elem":{"schema":{"authorization":{"type":"TypeList","optional":true,"elem":{"schema":{"parameter":{"type":"TypeString","optional":true},"scheme":{"type":"TypeString","optional":true}}},"maxItems":1},"certificate":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"header":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"query":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protocol":{"type":"TypeString","required":true},"proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true},"url":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_id":{"type":"TypeString","optional":true},"service_fabric_cluster":{"type":"TypeList","optional":true,"elem":{"schema":{"client_certificate_id":{"type":"TypeString","optional":true,"computed":true},"client_certificate_thumbprint":{"type":"TypeString","optional":true,"computed":true},"management_endpoints":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"max_partition_resolution_retries":{"type":"TypeInt","required":true},"server_certificate_thumbprints":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"server_x509_name":{"type":"TypeSet","optional":true,"elem":{"schema":{"issuer_certificate_thumbprint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"title":{"type":"TypeString","optional":true},"tls":{"type":"TypeList","optional":true,"elem":{"schema":{"validate_certificate_chain":{"type":"TypeBool","optional":true},"validate_certificate_name":{"type":"TypeBool","optional":true}}},"maxItems":1},"url":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_certificate":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"data":{"type":"TypeString","optional":true},"expiration":{"type":"TypeString","computed":true},"key_vault_identity_client_id":{"type":"TypeString","optional":true},"key_vault_secret_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_custom_domain":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"developer_portal":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"gateway":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"default_ssl_binding":{"type":"TypeBool","optional":true,"computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"management":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"portal":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"scm":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"certificate_password":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","computed":true},"certificate_status":{"type":"TypeString","computed":true},"expiry":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","optional":true},"negotiate_client_certificate":{"type":"TypeBool","optional":true,"default":false},"ssl_keyvault_identity_client_id":{"type":"TypeString","optional":true},"subject":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_api_management_diagnostic":{"schema":{"always_log_errors":{"type":"TypeBool","optional":true,"computed":true},"api_management_logger_id":{"type":"TypeString","required":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"backend_request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"backend_response":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"frontend_request":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"frontend_response":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"body_bytes":{"type":"TypeInt","optional":true},"data_masking":{"type":"TypeList","optional":true,"elem":{"schema":{"headers":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"query_params":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}},"maxItems":1},"headers_to_log":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"http_correlation_protocol":{"type":"TypeString","optional":true,"computed":true},"identifier":{"type":"TypeString","required":true,"forceNew":true},"log_client_ip":{"type":"TypeBool","optional":true,"computed":true},"operation_name_format":{"type":"TypeString","optional":true,"default":"Name"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sampling_percentage":{"type":"TypeFloat","optional":true,"computed":true},"verbosity":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_email_template":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"body":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subject":{"type":"TypeString","required":true},"template_name":{"type":"TypeString","required":true,"forceNew":true},"title":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_gateway":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"location_data":{"type":"TypeList","required":true,"elem":{"schema":{"city":{"type":"TypeString","optional":true},"district":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"region":{"type":"TypeString","optional":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_gateway_api":{"schema":{"api_id":{"type":"TypeString","required":true,"forceNew":true},"gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_gateway_certificate_authority":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"certificate_name":{"type":"TypeString","required":true,"forceNew":true},"gateway_name":{"type":"TypeString","required":true,"forceNew":true},"is_trusted":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_gateway_host_name_configuration":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"certificate_id":{"type":"TypeString","required":true},"gateway_name":{"type":"TypeString","required":true,"forceNew":true},"host_name":{"type":"TypeString","required":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"request_client_certificate_enabled":{"type":"TypeBool","optional":true},"tls10_enabled":{"type":"TypeBool","optional":true},"tls11_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_global_schema":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schema_id":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_group":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"external_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"default":"custom","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_group_user":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"user_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_aad":{"schema":{"allowed_tenants":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"signin_tenant":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_aadb2c":{"schema":{"allowed_tenant":{"type":"TypeString","required":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"authority":{"type":"TypeString","required":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"password_reset_policy":{"type":"TypeString","optional":true},"profile_editing_policy":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"signin_policy":{"type":"TypeString","required":true},"signin_tenant":{"type":"TypeString","required":true},"signup_policy":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_facebook":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_google":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_microsoft":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_identity_provider_twitter":{"schema":{"api_key":{"type":"TypeString","required":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_secret_key":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_logger":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"application_insights":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"instrumentation_key":{"type":"TypeString","required":true}}},"maxItems":1},"buffered":{"type":"TypeBool","optional":true,"default":true},"description":{"type":"TypeString","optional":true},"eventhub":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"connection_string":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_named_value":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secret":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","optional":true},"value_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","optional":true},"secret_id":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_notification_recipient_email":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"email":{"type":"TypeString","required":true,"forceNew":true},"notification_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_api_management_notification_recipient_user":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"notification_type":{"type":"TypeString","required":true,"forceNew":true},"user_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_api_management_openid_connect_provider":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"metadata_endpoint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_policy":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"approval_required":{"type":"TypeBool","optional":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"product_id":{"type":"TypeString","required":true,"forceNew":true},"published":{"type":"TypeBool","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_required":{"type":"TypeBool","optional":true,"default":true},"subscriptions_limit":{"type":"TypeInt","optional":true},"terms":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product_api":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_name":{"type":"TypeString","required":true,"forceNew":true},"product_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product_group":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"group_name":{"type":"TypeString","required":true,"forceNew":true},"product_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product_policy":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"product_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"xml_content":{"type":"TypeString","optional":true,"computed":true},"xml_link":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_product_tag":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"api_management_product_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_redis_cache":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"cache_location":{"type":"TypeString","optional":true,"default":"default"},"connection_string":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"redis_cache_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_subscription":{"schema":{"allow_tracing":{"type":"TypeBool","optional":true,"default":true},"api_id":{"type":"TypeString","optional":true,"forceNew":true},"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","optional":true,"computed":true},"product_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_key":{"type":"TypeString","optional":true,"computed":true},"state":{"type":"TypeString","optional":true,"default":"submitted"},"subscription_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"user_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_tag":{"schema":{"api_management_id":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_api_management_user":{"schema":{"api_management_name":{"type":"TypeString","required":true,"forceNew":true},"confirmation":{"type":"TypeString","optional":true,"forceNew":true},"email":{"type":"TypeString","required":true},"first_name":{"type":"TypeString","required":true},"last_name":{"type":"TypeString","required":true},"note":{"type":"TypeString","optional":true},"password":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"state":{"type":"TypeString","optional":true,"computed":true},"user_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":45,"read":5,"delete":45,"update":45}},"azurerm_app_configuration":{"schema":{"encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","optional":true},"key_vault_key_identifier":{"type":"TypeString","optional":true}}},"maxItems":1},"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_read_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"primary_write_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"public_network_access":{"type":"TypeString","optional":true},"purge_protection_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_read_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"secondary_write_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"sku":{"type":"TypeString","optional":true,"default":"free"},"soft_delete_retention_days":{"type":"TypeInt","optional":true,"default":7,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_configuration_feature":{"schema":{"configuration_store_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true},"etag":{"type":"TypeString","optional":true,"computed":true},"key":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"label":{"type":"TypeString","optional":true,"forceNew":true},"locked":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"percentage_filter_value":{"type":"TypeInt","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"targeting_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"default_rollout_percentage":{"type":"TypeInt","required":true},"groups":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"rollout_percentage":{"type":"TypeInt","required":true}}}},"users":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"timewindow_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"end":{"type":"TypeString","optional":true},"start":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":45,"read":5,"delete":30,"update":30}},"azurerm_app_configuration_key":{"schema":{"configuration_store_id":{"type":"TypeString","required":true,"forceNew":true},"content_type":{"type":"TypeString","optional":true,"computed":true},"etag":{"type":"TypeString","optional":true,"computed":true},"key":{"type":"TypeString","required":true,"forceNew":true},"label":{"type":"TypeString","optional":true,"forceNew":true},"locked":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","optional":true,"default":"kv"},"value":{"type":"TypeString","optional":true,"computed":true},"vault_key_reference":{"type":"TypeString","optional":true}},"timeouts":{"create":45,"read":5,"delete":30,"update":30}},"azurerm_app_service":{"schema":{"app_service_plan_id":{"type":"TypeString","required":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true}}},"maxItems":1},"additional_login_params":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true},"consumer_secret":{"type":"TypeString","required":true}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true},"frequency_unit":{"type":"TypeString","required":true},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false},"retention_period_in_days":{"type":"TypeInt","optional":true,"default":30},"start_time":{"type":"TypeString","optional":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_cert_enabled":{"type":"TypeBool","optional":true,"default":false},"client_cert_mode":{"type":"TypeString","optional":true,"computed":true},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_site_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","optional":true,"default":"Off"}}},"maxItems":1},"detailed_error_messages_enabled":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing_enabled":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"acr_use_managed_identity_credentials":{"type":"TypeBool","optional":true,"default":false},"acr_user_managed_identity_client_id":{"type":"TypeString","optional":true},"always_on":{"type":"TypeBool","optional":true,"default":false},"app_command_line":{"type":"TypeString","optional":true},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"java_container":{"type":"TypeString","optional":true},"java_container_version":{"type":"TypeString","optional":true},"java_version":{"type":"TypeString","optional":true},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"local_mysql_enabled":{"type":"TypeBool","optional":true,"computed":true},"managed_pipeline_mode":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"number_of_workers":{"type":"TypeInt","optional":true,"computed":true},"php_version":{"type":"TypeString","optional":true},"python_version":{"type":"TypeString","optional":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"computed":true},"windows_fx_version":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"source_control":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"branch":{"type":"TypeString","optional":true,"computed":true},"manual_integration":{"type":"TypeBool","optional":true,"computed":true},"repo_url":{"type":"TypeString","optional":true,"computed":true},"rollback_enabled":{"type":"TypeBool","optional":true,"computed":true},"use_mercurial":{"type":"TypeBool","optional":true,"computed":true}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_active_slot":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"app_service_slot_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_certificate":{"schema":{"app_service_plan_id":{"type":"TypeString","optional":true,"forceNew":true},"expiration_date":{"type":"TypeString","computed":true},"friendly_name":{"type":"TypeString","computed":true},"host_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"hosting_environment_profile_id":{"type":"TypeString","computed":true},"issue_date":{"type":"TypeString","computed":true},"issuer":{"type":"TypeString","computed":true},"key_vault_secret_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true,"forceNew":true},"pfx_blob":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subject_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_certificate_binding":{"schema":{"app_service_name":{"type":"TypeString","computed":true},"certificate_id":{"type":"TypeString","required":true,"forceNew":true},"hostname":{"type":"TypeString","computed":true},"hostname_binding_id":{"type":"TypeString","required":true,"forceNew":true},"ssl_state":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_app_service_certificate_order":{"schema":{"app_service_certificate_not_renewable_reasons":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"auto_renew":{"type":"TypeBool","optional":true,"default":true},"certificates":{"type":"TypeList","computed":true,"elem":{"schema":{"certificate_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"key_vault_secret_name":{"type":"TypeString","computed":true},"provisioning_state":{"type":"TypeString","computed":true}}}},"csr":{"type":"TypeString","optional":true,"computed":true},"distinguished_name":{"type":"TypeString","optional":true,"computed":true},"domain_verification_token":{"type":"TypeString","computed":true},"expiration_time":{"type":"TypeString","computed":true},"intermediate_thumbprint":{"type":"TypeString","computed":true},"is_private_key_external":{"type":"TypeBool","computed":true},"key_size":{"type":"TypeInt","optional":true,"default":2048},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"product_type":{"type":"TypeString","optional":true,"default":"Standard"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"root_thumbprint":{"type":"TypeString","computed":true},"signed_certificate_thumbprint":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"validity_in_years":{"type":"TypeInt","optional":true,"default":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_connection":{"schema":{"app_service_id":{"type":"TypeString","required":true,"forceNew":true},"authentication":{"type":"TypeList","required":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"client_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","optional":true},"secret":{"type":"TypeString","optional":true},"subscription_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"client_type":{"type":"TypeString","optional":true,"default":"none"},"name":{"type":"TypeString","required":true,"forceNew":true},"secret_store":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true},"vnet_solution":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_custom_hostname_binding":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"hostname":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"ssl_state":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"virtual_ip":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_environment":{"schema":{"allowed_user_ip_cidrs":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"cluster_setting":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"front_end_scale_factor":{"type":"TypeInt","optional":true,"default":15},"internal_ip_address":{"type":"TypeString","computed":true},"internal_load_balancing_mode":{"type":"TypeString","optional":true,"default":"None","forceNew":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"pricing_tier":{"type":"TypeString","optional":true,"default":"I1"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_ip_address":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_app_service_environment_v3":{"schema":{"allow_new_private_endpoint_connections":{"type":"TypeBool","optional":true,"default":true},"cluster_setting":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"dedicated_host_count":{"type":"TypeInt","optional":true,"forceNew":true},"dns_suffix":{"type":"TypeString","computed":true},"external_inbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"inbound_network_dependencies":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"internal_inbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"internal_load_balancing_mode":{"type":"TypeString","optional":true,"default":"None","forceNew":true},"ip_ssl_address_count":{"type":"TypeInt","computed":true},"linux_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pricing_tier":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"windows_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_app_service_hybrid_connection":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"hostname":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","computed":true},"port":{"type":"TypeInt","required":true},"relay_id":{"type":"TypeString","required":true,"forceNew":true},"relay_name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"send_key_name":{"type":"TypeString","optional":true,"default":"RootManageSharedAccessKey"},"send_key_value":{"type":"TypeString","computed":true},"service_bus_namespace":{"type":"TypeString","computed":true},"service_bus_suffix":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_managed_certificate":{"schema":{"canonical_name":{"type":"TypeString","computed":true},"custom_hostname_binding_id":{"type":"TypeString","required":true,"forceNew":true},"expiration_date":{"type":"TypeString","computed":true},"friendly_name":{"type":"TypeString","computed":true},"host_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"issue_date":{"type":"TypeString","computed":true},"issuer":{"type":"TypeString","computed":true},"subject_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_plan":{"schema":{"app_service_environment_id":{"type":"TypeString","optional":true,"forceNew":true},"is_xenon":{"type":"TypeBool","optional":true},"kind":{"type":"TypeString","optional":true,"default":"Windows","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maximum_elastic_worker_count":{"type":"TypeInt","optional":true,"computed":true},"maximum_number_of_workers":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"per_site_scaling":{"type":"TypeBool","optional":true},"reserved":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true,"computed":true},"size":{"type":"TypeString","required":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_app_service_public_certificate":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"blob":{"type":"TypeString","required":true,"forceNew":true},"certificate_location":{"type":"TypeString","required":true,"forceNew":true},"certificate_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_slot":{"schema":{"app_service_name":{"type":"TypeString","required":true,"forceNew":true},"app_service_plan_id":{"type":"TypeString","required":true,"forceNew":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true}}},"maxItems":1},"additional_login_params":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true},"consumer_secret":{"type":"TypeString","required":true}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"computed":true},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"default_site_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","optional":true,"default":"Off"}}},"maxItems":1},"detailed_error_messages_enabled":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing_enabled":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"acr_use_managed_identity_credentials":{"type":"TypeBool","optional":true,"default":false},"acr_user_managed_identity_client_id":{"type":"TypeString","optional":true},"always_on":{"type":"TypeBool","optional":true,"default":false},"app_command_line":{"type":"TypeString","optional":true},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"java_container":{"type":"TypeString","optional":true},"java_container_version":{"type":"TypeString","optional":true},"java_version":{"type":"TypeString","optional":true},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"local_mysql_enabled":{"type":"TypeBool","optional":true,"computed":true},"managed_pipeline_mode":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"number_of_workers":{"type":"TypeInt","optional":true,"computed":true},"php_version":{"type":"TypeString","optional":true},"python_version":{"type":"TypeString","optional":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"computed":true},"windows_fx_version":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_slot_custom_hostname_binding":{"schema":{"app_service_slot_id":{"type":"TypeString","required":true,"forceNew":true},"hostname":{"type":"TypeString","required":true,"forceNew":true},"ssl_state":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"virtual_ip":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_app_service_slot_virtual_network_swift_connection":{"schema":{"app_service_id":{"type":"TypeString","required":true,"forceNew":true},"slot_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_source_control":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The ID of the Windows or Linux Web App.","forceNew":true},"branch":{"type":"TypeString","optional":true,"description":"The branch name to use for deployments.","computed":true,"forceNew":true},"github_action_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"code_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"runtime_stack":{"type":"TypeString","required":true,"description":"The value to use for the Runtime Stack in the workflow file content for code base apps.","forceNew":true},"runtime_version":{"type":"TypeString","required":true,"description":"The value to use for the Runtime Version in the workflow file content for code base apps.","forceNew":true}}},"maxItems":1},"container_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"image_name":{"type":"TypeString","required":true,"description":"The image name for the build.","forceNew":true},"registry_password":{"type":"TypeString","optional":true,"description":"The password used to upload the image to the container registry.","forceNew":true},"registry_url":{"type":"TypeString","required":true,"description":"The server URL for the container registry where the build will be hosted.","forceNew":true},"registry_username":{"type":"TypeString","optional":true,"description":"The username used to upload the image to the container registry.","forceNew":true}}},"maxItems":1},"generate_workflow_file":{"type":"TypeBool","optional":true,"default":true,"description":"Should the service generate the GitHub Action Workflow file. Defaults to `true`","forceNew":true},"linux_action":{"type":"TypeBool","description":"Denotes this action uses a Linux base image.","computed":true}}},"maxItems":1},"repo_url":{"type":"TypeString","optional":true,"description":"The URL for the repository.","computed":true,"forceNew":true},"rollback_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Deployment Rollback be enabled? Defaults to `false`.","forceNew":true},"scm_type":{"type":"TypeString","description":"The SCM Type in use. This value is decoded by the service from the repository information supplied.","computed":true},"use_local_git":{"type":"TypeBool","optional":true,"default":false,"description":"Should the App use local Git configuration.","forceNew":true},"use_manual_integration":{"type":"TypeBool","optional":true,"default":false,"description":"Should code be deployed manually. Set to `false` to enable continuous integration, such as webhooks into online repos such as GitHub. Defaults to `false`.","forceNew":true},"use_mercurial":{"type":"TypeBool","optional":true,"default":false,"description":"The repository specified is Mercurial. Defaults to `false`.","forceNew":true},"uses_github_action":{"type":"TypeBool","description":"Indicates if the Slot uses a GitHub action for deployment. This value is decoded by the service from the repository information supplied.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_app_service_source_control_slot":{"schema":{"branch":{"type":"TypeString","optional":true,"description":"The URL for the repository","computed":true,"forceNew":true},"github_action_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"code_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"runtime_stack":{"type":"TypeString","required":true,"description":"The value to use for the Runtime Stack in the workflow file content for code base apps.","forceNew":true},"runtime_version":{"type":"TypeString","required":true,"description":"The value to use for the Runtime Version in the workflow file content for code base apps.","forceNew":true}}},"maxItems":1},"container_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"image_name":{"type":"TypeString","required":true,"description":"The image name for the build.","forceNew":true},"registry_password":{"type":"TypeString","optional":true,"description":"The password used to upload the image to the container registry.","forceNew":true},"registry_url":{"type":"TypeString","required":true,"description":"The server URL for the container registry where the build will be hosted.","forceNew":true},"registry_username":{"type":"TypeString","optional":true,"description":"The username used to upload the image to the container registry.","forceNew":true}}},"maxItems":1},"generate_workflow_file":{"type":"TypeBool","optional":true,"default":true,"description":"Should the service generate the GitHub Action Workflow file. Defaults to `true`","forceNew":true},"linux_action":{"type":"TypeBool","description":"Denotes this action uses a Linux base image.","computed":true}}},"maxItems":1},"repo_url":{"type":"TypeString","optional":true,"description":"The branch name to use for deployments.","computed":true,"forceNew":true},"rollback_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Deployment Rollback be enabled? Defaults to `false`","forceNew":true},"scm_type":{"type":"TypeString","description":"The SCM Type in use. This value is decoded by the service from the repository information supplied.","computed":true},"slot_id":{"type":"TypeString","required":true,"description":"The ID of the Linux or Windows Web App Slot.","forceNew":true},"use_local_git":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Slot use local Git configuration.","forceNew":true},"use_manual_integration":{"type":"TypeBool","optional":true,"default":false,"description":"Should code be deployed manually. Set to `true` to disable continuous integration, such as webhooks into online repos such as GitHub. Defaults to `false`","forceNew":true},"use_mercurial":{"type":"TypeBool","optional":true,"default":false,"description":"The repository specified is Mercurial. Defaults to `false`.","forceNew":true},"uses_github_action":{"type":"TypeBool","description":"Indicates if the Slot uses a GitHub action for deployment. This value is decoded by the service from the repository information supplied.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_app_service_source_control_token":{"schema":{"token":{"type":"TypeString","required":true},"token_secret":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_app_service_virtual_network_swift_connection":{"schema":{"app_service_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_gateway":{"schema":{"authentication_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"data":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true}}}},"autoscale_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"max_capacity":{"type":"TypeInt","optional":true},"min_capacity":{"type":"TypeInt","required":true}}},"maxItems":1},"backend_address_pool":{"type":"TypeSet","required":true,"elem":{"schema":{"fqdns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true}}}},"backend_http_settings":{"type":"TypeSet","required":true,"elem":{"schema":{"affinity_cookie_name":{"type":"TypeString","optional":true},"authentication_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true}}}},"connection_draining":{"type":"TypeList","optional":true,"elem":{"schema":{"drain_timeout_sec":{"type":"TypeInt","required":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"cookie_based_affinity":{"type":"TypeString","required":true},"host_name":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"pick_host_name_from_backend_address":{"type":"TypeBool","optional":true,"default":false},"port":{"type":"TypeInt","required":true},"probe_id":{"type":"TypeString","computed":true},"probe_name":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true},"request_timeout":{"type":"TypeInt","optional":true,"default":30},"trusted_root_certificate_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1},"custom_error_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_error_page_url":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"status_code":{"type":"TypeString","required":true}}}},"enable_http2":{"type":"TypeBool","optional":true},"fips_enabled":{"type":"TypeBool","optional":true},"firewall_policy_id":{"type":"TypeString","optional":true},"force_firewall_policy_association":{"type":"TypeBool","optional":true},"frontend_ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_ip_address":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_allocation":{"type":"TypeString","optional":true,"default":"Dynamic"},"private_link_configuration_id":{"type":"TypeString","computed":true},"private_link_configuration_name":{"type":"TypeString","optional":true},"public_ip_address_id":{"type":"TypeString","optional":true},"subnet_id":{"type":"TypeString","optional":true}}},"minItems":1},"frontend_port":{"type":"TypeSet","required":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"port":{"type":"TypeInt","required":true}}}},"gateway_ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":2},"global":{"type":"TypeList","optional":true,"elem":{"schema":{"request_buffering_enabled":{"type":"TypeBool","required":true},"response_buffering_enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"http_listener":{"type":"TypeSet","required":true,"elem":{"schema":{"custom_error_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_error_page_url":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"status_code":{"type":"TypeString","required":true}}}},"firewall_policy_id":{"type":"TypeString","optional":true},"frontend_ip_configuration_id":{"type":"TypeString","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","required":true},"frontend_port_id":{"type":"TypeString","computed":true},"frontend_port_name":{"type":"TypeString","required":true},"host_name":{"type":"TypeString","optional":true},"host_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true},"require_sni":{"type":"TypeBool","optional":true},"ssl_certificate_id":{"type":"TypeString","computed":true},"ssl_certificate_name":{"type":"TypeString","optional":true},"ssl_profile_id":{"type":"TypeString","computed":true},"ssl_profile_name":{"type":"TypeString","optional":true}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_connection":{"type":"TypeSet","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"private_link_configuration":{"type":"TypeSet","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","required":true},"private_ip_address":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_allocation":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}},"minItems":1},"name":{"type":"TypeString","required":true}}}},"probe":{"type":"TypeSet","optional":true,"elem":{"schema":{"host":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"interval":{"type":"TypeInt","required":true},"match":{"type":"TypeList","optional":true,"elem":{"schema":{"body":{"type":"TypeString","optional":true},"status_code":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"minimum_servers":{"type":"TypeInt","optional":true,"default":0},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true},"pick_host_name_from_backend_http_settings":{"type":"TypeBool","optional":true,"default":false},"port":{"type":"TypeInt","optional":true},"protocol":{"type":"TypeString","required":true},"timeout":{"type":"TypeInt","required":true},"unhealthy_threshold":{"type":"TypeInt","required":true}}}},"redirect_configuration":{"type":"TypeSet","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"include_path":{"type":"TypeBool","optional":true,"default":false},"include_query_string":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"redirect_type":{"type":"TypeString","required":true},"target_listener_id":{"type":"TypeString","computed":true},"target_listener_name":{"type":"TypeString","optional":true},"target_url":{"type":"TypeString","optional":true}}}},"request_routing_rule":{"type":"TypeSet","required":true,"elem":{"schema":{"backend_address_pool_id":{"type":"TypeString","computed":true},"backend_address_pool_name":{"type":"TypeString","optional":true},"backend_http_settings_id":{"type":"TypeString","computed":true},"backend_http_settings_name":{"type":"TypeString","optional":true},"http_listener_id":{"type":"TypeString","computed":true},"http_listener_name":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","optional":true},"redirect_configuration_id":{"type":"TypeString","computed":true},"redirect_configuration_name":{"type":"TypeString","optional":true},"rewrite_rule_set_id":{"type":"TypeString","computed":true},"rewrite_rule_set_name":{"type":"TypeString","optional":true},"rule_type":{"type":"TypeString","required":true},"url_path_map_id":{"type":"TypeString","computed":true},"url_path_map_name":{"type":"TypeString","optional":true}}},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rewrite_rule_set":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"rewrite_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"ignore_case":{"type":"TypeBool","optional":true,"default":false},"negate":{"type":"TypeBool","optional":true,"default":false},"pattern":{"type":"TypeString","required":true},"variable":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true},"request_header_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"header_value":{"type":"TypeString","required":true}}}},"response_header_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"header_value":{"type":"TypeString","required":true}}}},"rule_sequence":{"type":"TypeInt","required":true},"url":{"type":"TypeList","optional":true,"elem":{"schema":{"components":{"type":"TypeString","optional":true,"computed":true},"path":{"type":"TypeString","optional":true},"query_string":{"type":"TypeString","optional":true},"reroute":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}}}}}},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"ssl_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"data":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"key_vault_secret_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"password":{"type":"TypeString","optional":true},"public_cert_data":{"type":"TypeString","computed":true}}}},"ssl_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cipher_suites":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"disabled_protocols":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"min_protocol_version":{"type":"TypeString","optional":true},"policy_name":{"type":"TypeString","optional":true},"policy_type":{"type":"TypeString","optional":true}}},"maxItems":1},"ssl_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"ssl_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"cipher_suites":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"disabled_protocols":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"min_protocol_version":{"type":"TypeString","optional":true},"policy_name":{"type":"TypeString","optional":true},"policy_type":{"type":"TypeString","optional":true}}},"maxItems":1},"trusted_client_certificate_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"verify_client_cert_issuer_dn":{"type":"TypeBool","optional":true,"default":false},"verify_client_certificate_revocation":{"type":"TypeString","optional":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trusted_client_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"data":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true}}}},"trusted_root_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"data":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"key_vault_secret_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true}}}},"url_path_map":{"type":"TypeList","optional":true,"elem":{"schema":{"default_backend_address_pool_id":{"type":"TypeString","computed":true},"default_backend_address_pool_name":{"type":"TypeString","optional":true},"default_backend_http_settings_id":{"type":"TypeString","computed":true},"default_backend_http_settings_name":{"type":"TypeString","optional":true},"default_redirect_configuration_id":{"type":"TypeString","computed":true},"default_redirect_configuration_name":{"type":"TypeString","optional":true},"default_rewrite_rule_set_id":{"type":"TypeString","computed":true},"default_rewrite_rule_set_name":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"path_rule":{"type":"TypeList","required":true,"elem":{"schema":{"backend_address_pool_id":{"type":"TypeString","computed":true},"backend_address_pool_name":{"type":"TypeString","optional":true},"backend_http_settings_id":{"type":"TypeString","computed":true},"backend_http_settings_name":{"type":"TypeString","optional":true},"firewall_policy_id":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"paths":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"redirect_configuration_id":{"type":"TypeString","computed":true},"redirect_configuration_name":{"type":"TypeString","optional":true},"rewrite_rule_set_id":{"type":"TypeString","computed":true},"rewrite_rule_set_name":{"type":"TypeString","optional":true}}}}}}},"waf_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"disabled_rule_group":{"type":"TypeList","optional":true,"elem":{"schema":{"rule_group_name":{"type":"TypeString","required":true},"rules":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}}}}},"enabled":{"type":"TypeBool","required":true},"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true},"selector_match_operator":{"type":"TypeString","optional":true}}}},"file_upload_limit_mb":{"type":"TypeInt","optional":true,"default":100},"firewall_mode":{"type":"TypeString","required":true},"max_request_body_size_kb":{"type":"TypeInt","optional":true,"default":128},"request_body_check":{"type":"TypeBool","optional":true,"default":true},"rule_set_type":{"type":"TypeString","optional":true,"default":"OWASP"},"rule_set_version":{"type":"TypeString","required":true}}},"maxItems":1},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_application_insights":{"schema":{"app_id":{"type":"TypeString","computed":true},"application_type":{"type":"TypeString","required":true,"forceNew":true},"connection_string":{"type":"TypeString","computed":true},"daily_data_cap_in_gb":{"type":"TypeFloat","optional":true,"computed":true},"daily_data_cap_notifications_disabled":{"type":"TypeBool","optional":true,"computed":true},"disable_ip_masking":{"type":"TypeBool","optional":true,"default":false},"force_customer_storage_for_profiler":{"type":"TypeBool","optional":true,"default":false},"instrumentation_key":{"type":"TypeString","computed":true},"internet_ingestion_enabled":{"type":"TypeBool","optional":true,"default":true},"internet_query_enabled":{"type":"TypeBool","optional":true,"default":true},"local_authentication_disabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":90},"sampling_percentage":{"type":"TypeFloat","optional":true,"default":100},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":30,"update":30}},"azurerm_application_insights_analytics_item":{"schema":{"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"content":{"type":"TypeString","required":true},"function_alias":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","required":true,"forceNew":true},"time_created":{"type":"TypeString","computed":true},"time_modified":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_api_key":{"schema":{"api_key":{"type":"TypeString","computed":true},"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_permissions":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"write_permissions":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_smart_detection_rule":{"schema":{"additional_email_recipients":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"send_emails_to_subscription_owners":{"type":"TypeBool","optional":true,"default":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_standard_web_test":{"schema":{"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true},"frequency":{"type":"TypeInt","optional":true,"default":300},"geo_locations":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"request":{"type":"TypeList","required":true,"elem":{"schema":{"body":{"type":"TypeString","optional":true},"follow_redirects_enabled":{"type":"TypeBool","optional":true,"default":true},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"http_verb":{"type":"TypeString","optional":true,"default":"GET"},"parse_dependent_requests_enabled":{"type":"TypeBool","optional":true,"default":true},"url":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retry_enabled":{"type":"TypeBool","optional":true},"synthetic_monitor_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout":{"type":"TypeInt","optional":true,"default":30},"validation_rules":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"content":{"type":"TypeList","optional":true,"elem":{"schema":{"content_match":{"type":"TypeString","required":true},"ignore_case":{"type":"TypeBool","optional":true,"default":false},"pass_if_text_found":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"expected_status_code":{"type":"TypeInt","optional":true,"default":200},"ssl_cert_remaining_lifetime":{"type":"TypeInt","optional":true},"ssl_check_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_web_test":{"schema":{"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"configuration":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true},"frequency":{"type":"TypeInt","optional":true,"default":300},"geo_locations":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"kind":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retry_enabled":{"type":"TypeBool","optional":true},"synthetic_monitor_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout":{"type":"TypeInt","optional":true,"default":30}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_workbook":{"schema":{"category":{"type":"TypeString","optional":true,"default":"workbook"},"data_json":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_id":{"type":"TypeString","optional":true,"default":"azure monitor"},"storage_container_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_insights_workbook_template":{"schema":{"author":{"type":"TypeString","optional":true},"galleries":{"type":"TypeList","required":true,"elem":{"schema":{"category":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"order":{"type":"TypeInt","optional":true,"default":0},"resource_type":{"type":"TypeString","optional":true,"default":"Azure Monitor"},"type":{"type":"TypeString","optional":true,"default":"workbook"}}},"minItems":1},"localized":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"default":0},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_data":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_application_security_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_kubernetes_cluster":{"schema":{"agent_public_key_certificate":{"type":"TypeString","required":true,"forceNew":true},"agent_version":{"type":"TypeString","computed":true},"distribution":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"infrastructure":{"type":"TypeString","computed":true},"kubernetes_version":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"offering":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"total_core_count":{"type":"TypeInt","computed":true},"total_node_count":{"type":"TypeInt","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_kubernetes_cluster_extension":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"configuration_protected_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"configuration_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"current_version":{"type":"TypeString","computed":true},"extension_type":{"type":"TypeString","required":true,"forceNew":true},"identity":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"release_namespace":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"release_train":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"target_namespace":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_kubernetes_flux_configuration":{"schema":{"blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","optional":true},"container_id":{"type":"TypeString","required":true},"local_auth_reference":{"type":"TypeString","optional":true},"sas_token":{"type":"TypeString","optional":true},"service_principal":{"type":"TypeList","optional":true,"elem":{"schema":{"client_certificate_base64":{"type":"TypeString","optional":true},"client_certificate_password":{"type":"TypeString","optional":true},"client_certificate_send_chain":{"type":"TypeBool","optional":true,"default":false},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600}}},"maxItems":1},"bucket":{"type":"TypeList","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","optional":true},"bucket_name":{"type":"TypeString","required":true},"local_auth_reference":{"type":"TypeString","optional":true},"secret_key_base64":{"type":"TypeString","optional":true},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600},"tls_enabled":{"type":"TypeBool","optional":true,"default":true},"url":{"type":"TypeString","required":true}}},"maxItems":1},"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"continuous_reconciliation_enabled":{"type":"TypeBool","optional":true,"default":true},"git_repository":{"type":"TypeList","optional":true,"elem":{"schema":{"https_ca_cert_base64":{"type":"TypeString","optional":true},"https_key_base64":{"type":"TypeString","optional":true},"https_user":{"type":"TypeString","optional":true},"local_auth_reference":{"type":"TypeString","optional":true},"reference_type":{"type":"TypeString","required":true},"reference_value":{"type":"TypeString","required":true},"ssh_known_hosts_base64":{"type":"TypeString","optional":true},"ssh_private_key_base64":{"type":"TypeString","optional":true},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600},"url":{"type":"TypeString","required":true}}},"maxItems":1},"kustomizations":{"type":"TypeSet","required":true,"elem":{"schema":{"depends_on":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"garbage_collection_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"recreating_enabled":{"type":"TypeBool","optional":true,"default":false},"retry_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","optional":true,"default":"namespace","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_machine_extension":{"schema":{"arc_machine_id":{"type":"TypeString","required":true,"forceNew":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true,"default":true},"force_update_tag":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protected_settings":{"type":"TypeString","optional":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"settings":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true},"type_handler_version":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_arc_private_link_scope":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_attestation_provider":{"schema":{"attestation_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"open_enclave_policy_base64":{"type":"TypeString","optional":true},"policy":{"type":"TypeList","optional":true,"elem":{"schema":{"data":{"type":"TypeString","optional":true},"environment_type":{"type":"TypeString","optional":true}}}},"policy_signing_certificate_data":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sev_snp_policy_base64":{"type":"TypeString","optional":true},"sgx_enclave_policy_base64":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tpm_policy_base64":{"type":"TypeString","optional":true},"trust_model":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automanage_configuration":{"schema":{"antimalware":{"type":"TypeList","optional":true,"elem":{"schema":{"exclusions":{"type":"TypeList","optional":true,"elem":{"schema":{"extensions":{"type":"TypeString","optional":true},"paths":{"type":"TypeString","optional":true},"processes":{"type":"TypeString","optional":true}}},"maxItems":1},"real_time_protection_enabled":{"type":"TypeBool","optional":true,"default":false},"scheduled_scan_day":{"type":"TypeInt","optional":true,"default":8},"scheduled_scan_enabled":{"type":"TypeBool","optional":true,"default":false},"scheduled_scan_time_in_minutes":{"type":"TypeInt","optional":true,"default":0},"scheduled_scan_type":{"type":"TypeString","optional":true,"default":"Quick"}}},"maxItems":1},"automation_account_enabled":{"type":"TypeBool","optional":true,"default":false},"azure_security_baseline":{"type":"TypeList","optional":true,"elem":{"schema":{"assignment_type":{"type":"TypeString","optional":true,"default":"ApplyAndAutoCorrect"}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"instant_rp_retention_range_in_days":{"type":"TypeInt","optional":true,"default":5},"policy_name":{"type":"TypeString","optional":true},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"daily_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_duration":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","optional":true},"duration_type":{"type":"TypeString","optional":true,"default":"Days"}}},"maxItems":1},"retention_times":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_policy_type":{"type":"TypeString","optional":true,"default":"LongTermRetentionPolicy"},"weekly_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_duration":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","optional":true},"duration_type":{"type":"TypeString","optional":true,"default":"Weeks"}}},"maxItems":1},"retention_times":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"schedule_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule_policy_type":{"type":"TypeString","optional":true,"default":"SimpleSchedulePolicy"},"schedule_run_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"schedule_run_frequency":{"type":"TypeString","optional":true,"default":"Daily"},"schedule_run_times":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"time_zone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"boot_diagnostics_enabled":{"type":"TypeBool","optional":true,"default":false},"defender_for_cloud_enabled":{"type":"TypeBool","optional":true,"default":false},"guest_configuration_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"log_analytics_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"status_change_alert_enabled":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_account":{"schema":{"dsc_primary_access_key":{"type":"TypeString","computed":true},"dsc_secondary_access_key":{"type":"TypeString","computed":true},"dsc_server_endpoint":{"type":"TypeString","computed":true},"encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"key_source":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}}},"hybrid_service_url":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_connection":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_certificate":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"base64":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"exportable":{"type":"TypeBool","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true},"values":{"type":"TypeMap","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection_certificate":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"automation_certificate_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection_classic_certificate":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"certificate_asset_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true},"subscription_name":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection_service_principal":{"schema":{"application_id":{"type":"TypeString","required":true},"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"certificate_thumbprint":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_connection_type":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"field":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"is_encrypted":{"type":"TypeBool","optional":true},"is_optional":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"is_global":{"type":"TypeBool","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":10}},"azurerm_automation_credential":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_dsc_configuration":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"content_embedded":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"log_verbose":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"state":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_dsc_nodeconfiguration":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"configuration_name":{"type":"TypeString","computed":true},"content_embedded":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_hybrid_runbook_worker":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"ip":{"type":"TypeString","computed":true},"last_seen_date_time":{"type":"TypeString","computed":true},"registration_date_time":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"vm_resource_id":{"type":"TypeString","required":true,"forceNew":true},"worker_group_name":{"type":"TypeString","required":true,"forceNew":true},"worker_id":{"type":"TypeString","required":true,"forceNew":true},"worker_name":{"type":"TypeString","computed":true},"worker_type":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":10}},"azurerm_automation_hybrid_runbook_worker_group":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"credential_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_automation_job_schedule":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"job_schedule_id":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"run_on":{"type":"TypeString","optional":true,"forceNew":true},"runbook_name":{"type":"TypeString","required":true,"forceNew":true},"schedule_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_module":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"module_link":{"type":"TypeList","required":true,"elem":{"schema":{"hash":{"type":"TypeList","optional":true,"elem":{"schema":{"algorithm":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_python3_package":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"content_uri":{"type":"TypeString","required":true,"forceNew":true},"content_version":{"type":"TypeString","optional":true,"forceNew":true},"hash_algorithm":{"type":"TypeString","optional":true,"forceNew":true},"hash_value":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_automation_runbook":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"content":{"type":"TypeString","optional":true,"computed":true},"description":{"type":"TypeString","optional":true},"draft":{"type":"TypeList","optional":true,"elem":{"schema":{"content_link":{"type":"TypeList","optional":true,"elem":{"schema":{"hash":{"type":"TypeList","optional":true,"elem":{"schema":{"algorithm":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"creation_time":{"type":"TypeString","computed":true},"edit_mode_enabled":{"type":"TypeBool","optional":true},"last_modified_time":{"type":"TypeString","computed":true},"output_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"parameters":{"type":"TypeList","optional":true,"elem":{"schema":{"default_value":{"type":"TypeString","optional":true},"key":{"type":"TypeString","required":true},"mandatory":{"type":"TypeBool","optional":true,"default":false},"position":{"type":"TypeInt","optional":true},"type":{"type":"TypeString","required":true}}}}}},"maxItems":1},"job_schedule":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"job_schedule_id":{"type":"TypeString","computed":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"run_on":{"type":"TypeString","optional":true},"schedule_name":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"log_activity_trace_level":{"type":"TypeInt","optional":true},"log_progress":{"type":"TypeBool","required":true},"log_verbose":{"type":"TypeBool","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"publish_content_link":{"type":"TypeList","optional":true,"elem":{"schema":{"hash":{"type":"TypeList","optional":true,"elem":{"schema":{"algorithm":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"runbook_type":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_schedule":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"expiry_time":{"type":"TypeString","optional":true,"computed":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","optional":true,"computed":true},"month_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"monthly_occurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"day":{"type":"TypeString","required":true},"occurrence":{"type":"TypeInt","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"start_time":{"type":"TypeString","optional":true,"computed":true},"timezone":{"type":"TypeString","optional":true,"default":"Etc/UTC"},"week_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_software_update_configuration":{"schema":{"automation_account_id":{"type":"TypeString","required":true,"forceNew":true},"duration":{"type":"TypeString","optional":true,"default":"PT2H"},"error_code":{"type":"TypeString","computed":true},"error_meesage":{"type":"TypeString","computed":true},"error_message":{"type":"TypeString","computed":true},"linux":{"type":"TypeList","optional":true,"elem":{"schema":{"classification_included":{"type":"TypeString","optional":true,"computed":true},"classifications_included":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"excluded_packages":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"included_packages":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"reboot":{"type":"TypeString","optional":true,"default":"IfRequired"}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"non_azure_computer_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"operating_system":{"type":"TypeString","optional":true,"computed":true},"post_task":{"type":"TypeList","optional":true,"elem":{"schema":{"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"source":{"type":"TypeString","optional":true}}},"maxItems":1},"pre_task":{"type":"TypeList","optional":true,"elem":{"schema":{"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"source":{"type":"TypeString","optional":true}}},"maxItems":1},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"advanced_month_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}},"advanced_week_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"creation_time":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"expiry_time":{"type":"TypeString","optional":true,"computed":true},"expiry_time_offset_minutes":{"type":"TypeFloat","optional":true,"computed":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","optional":true},"is_enabled":{"type":"TypeBool","optional":true,"default":true},"last_modified_time":{"type":"TypeString","computed":true},"monthly_occurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"day":{"type":"TypeString","required":true},"occurrence":{"type":"TypeInt","required":true}}},"maxItems":1},"next_run":{"type":"TypeString","optional":true,"computed":true},"next_run_offset_minutes":{"type":"TypeFloat","optional":true,"computed":true},"start_time":{"type":"TypeString","optional":true,"computed":true},"start_time_offset_minutes":{"type":"TypeFloat","optional":true,"computed":true},"time_zone":{"type":"TypeString","optional":true,"default":"Etc/UTC"}}},"maxItems":1},"target":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_query":{"type":"TypeList","optional":true,"elem":{"schema":{"locations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"scope":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"tag_filter":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeList","optional":true,"elem":{"schema":{"tag":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}}}}},"non_azure_query":{"type":"TypeList","optional":true,"elem":{"schema":{"function_alias":{"type":"TypeString","optional":true},"workspace_id":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"virtual_machine_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"windows":{"type":"TypeList","optional":true,"elem":{"schema":{"classification_included":{"type":"TypeString","optional":true,"computed":true},"classifications_included":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"excluded_knowledge_base_numbers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"included_knowledge_base_numbers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"reboot":{"type":"TypeString","optional":true,"default":"IfRequired"}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":10,"update":30}},"azurerm_automation_source_control":{"schema":{"automatic_sync":{"type":"TypeBool","optional":true,"default":false},"automation_account_id":{"type":"TypeString","required":true,"forceNew":true},"branch":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"folder_path":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"publish_runbook_enabled":{"type":"TypeBool","optional":true,"default":true},"repository_url":{"type":"TypeString","required":true},"security":{"type":"TypeList","required":true,"elem":{"schema":{"refresh_token":{"type":"TypeString","optional":true},"token":{"type":"TypeString","required":true},"token_type":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"source_control_type":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_automation_variable_bool":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_variable_datetime":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_variable_int":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeInt","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_variable_object":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_variable_string":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_automation_watcher":{"schema":{"automation_account_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"etag":{"type":"TypeString","optional":true},"execution_frequency_in_seconds":{"type":"TypeInt","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"script_name":{"type":"TypeString","required":true,"forceNew":true},"script_parameters":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"script_run_on":{"type":"TypeString","required":true},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_automation_webhook":{"schema":{"automation_account_name":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"expiry_time":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"run_on_worker_group":{"type":"TypeString","optional":true},"runbook_name":{"type":"TypeString","required":true},"uri":{"type":"TypeString","configMode":"Auto","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_availability_set":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"managed":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform_fault_domain_count":{"type":"TypeInt","optional":true,"default":3,"forceNew":true},"platform_update_domain_count":{"type":"TypeInt","optional":true,"default":5,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_container_storage_account":{"schema":{"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_policy_file_share":{"schema":{"backup":{"type":"TypeList","required":true,"elem":{"schema":{"frequency":{"type":"TypeString","required":true},"hourly":{"type":"TypeList","optional":true,"elem":{"schema":{"interval":{"type":"TypeInt","required":true},"start_time":{"type":"TypeString","required":true},"window_duration":{"type":"TypeInt","required":true}}},"maxItems":1},"time":{"type":"TypeString","optional":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_daily":{"type":"TypeList","required":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true}}},"maxItems":1},"retention_monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_last_days":{"type":"TypeBool","optional":true,"default":false},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"weekdays":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_yearly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_last_days":{"type":"TypeBool","optional":true,"default":false},"months":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"timezone":{"type":"TypeString","optional":true,"default":"UTC"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_policy_vm":{"schema":{"backup":{"type":"TypeList","required":true,"elem":{"schema":{"frequency":{"type":"TypeString","required":true},"hour_duration":{"type":"TypeInt","optional":true},"hour_interval":{"type":"TypeInt","optional":true},"time":{"type":"TypeString","required":true},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"instant_restore_resource_group":{"type":"TypeList","optional":true,"elem":{"schema":{"prefix":{"type":"TypeString","required":true},"suffix":{"type":"TypeString","optional":true}}},"maxItems":1},"instant_restore_retention_days":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_type":{"type":"TypeString","optional":true,"default":"V1","forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_daily":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true}}},"maxItems":1},"retention_monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_last_days":{"type":"TypeBool","optional":true,"default":false},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"weekdays":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_yearly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_last_days":{"type":"TypeBool","optional":true,"default":false},"months":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"timezone":{"type":"TypeString","optional":true,"default":"UTC"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_policy_vm_workload":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"protection_policy":{"type":"TypeSet","required":true,"elem":{"schema":{"backup":{"type":"TypeList","required":true,"elem":{"schema":{"frequency":{"type":"TypeString","optional":true},"frequency_in_minutes":{"type":"TypeInt","optional":true},"time":{"type":"TypeString","optional":true},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"policy_type":{"type":"TypeString","required":true},"retention_daily":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true}}},"maxItems":1},"retention_monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"format_type":{"type":"TypeString","required":true},"monthdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"weekdays":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retention_yearly":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"format_type":{"type":"TypeString","required":true},"monthdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"months":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"weekdays":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"weeks":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"simple_retention":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true}}},"maxItems":1}}}},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"settings":{"type":"TypeList","required":true,"elem":{"schema":{"compression_enabled":{"type":"TypeBool","optional":true,"default":false},"time_zone":{"type":"TypeString","required":true}}},"maxItems":1},"workload_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_backup_protected_file_share":{"schema":{"backup_policy_id":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_file_share_name":{"type":"TypeString","required":true,"forceNew":true},"source_storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":80,"read":5,"delete":80,"update":80}},"azurerm_backup_protected_vm":{"schema":{"backup_policy_id":{"type":"TypeString","optional":true},"exclude_disk_luns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"include_disk_luns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"protection_state":{"type":"TypeString","optional":true,"computed":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_vm_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":120,"read":5,"delete":80,"update":120}},"azurerm_bastion_host":{"schema":{"copy_paste_enabled":{"type":"TypeBool","optional":true,"default":true},"dns_name":{"type":"TypeString","computed":true},"file_copy_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_configuration":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ip_connect_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scale_units":{"type":"TypeInt","optional":true,"default":2},"shareable_link_enabled":{"type":"TypeBool","optional":true,"default":false},"sku":{"type":"TypeString","optional":true,"default":"Basic"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tunneling_enabled":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_batch_account":{"schema":{"account_endpoint":{"type":"TypeString","computed":true},"allowed_authentication_modes":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"encryption":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"account_access":{"type":"TypeList","optional":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"ip_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_range":{"type":"TypeString","required":true}}}}}},"maxItems":1},"node_management_access":{"type":"TypeList","optional":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"ip_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_range":{"type":"TypeString","required":true}}}}}},"maxItems":1}}},"maxItems":1},"pool_allocation_mode":{"type":"TypeString","optional":true,"default":"BatchService"},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"storage_account_authentication_mode":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_account_node_identity":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_batch_application":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"allow_updates":{"type":"TypeBool","optional":true,"default":true},"default_version":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_batch_certificate":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"certificate":{"type":"TypeString","required":true},"format":{"type":"TypeString","required":true},"name":{"type":"TypeString","computed":true},"password":{"type":"TypeString","optional":true},"public_data":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","required":true,"forceNew":true},"thumbprint_algorithm":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_batch_job":{"schema":{"batch_pool_id":{"type":"TypeString","required":true,"forceNew":true},"common_environment_properties":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"default":0},"task_retry_maximum":{"type":"TypeInt","optional":true}},"timeouts":{"create":5,"read":5,"delete":5,"update":5}},"azurerm_batch_pool":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"auto_scale":{"type":"TypeList","optional":true,"elem":{"schema":{"evaluation_interval":{"type":"TypeString","optional":true,"default":"PT15M"},"formula":{"type":"TypeString","required":true}}},"maxItems":1},"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"store_location":{"type":"TypeString","required":true},"store_name":{"type":"TypeString","optional":true},"visibility":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"container_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"container_image_names":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"container_registries":{"type":"TypeList","configMode":"Auto","optional":true,"forceNew":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"registry_server":{"type":"TypeString","required":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Container Registry access.","forceNew":true},"user_name":{"type":"TypeString","optional":true,"forceNew":true}}}},"type":{"type":"TypeString","optional":true}}},"maxItems":1,"minItems":1},"data_disks":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"default":"ReadOnly"},"disk_size_gb":{"type":"TypeInt","required":true},"lun":{"type":"TypeInt","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"Standard_LRS"}}}},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_encryption_target":{"type":"TypeString","required":true}}}},"display_name":{"type":"TypeString","optional":true,"forceNew":true},"extensions":{"type":"TypeList","optional":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"provision_after_extensions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true},"settings_json":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","optional":true}}}},"fixed_scale":{"type":"TypeList","optional":true,"elem":{"schema":{"node_deallocation_method":{"type":"TypeString","optional":true},"resize_timeout":{"type":"TypeString","optional":true,"default":"PT15M"},"target_dedicated_nodes":{"type":"TypeInt","optional":true,"default":1},"target_low_priority_nodes":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"inter_node_communication":{"type":"TypeString","optional":true,"default":"Enabled"},"license_type":{"type":"TypeString","optional":true},"max_tasks_per_node":{"type":"TypeInt","optional":true,"default":1,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"mount":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","optional":true},"account_name":{"type":"TypeString","required":true},"blobfuse_options":{"type":"TypeString","optional":true},"container_name":{"type":"TypeString","required":true},"identity_id":{"type":"TypeString","optional":true},"relative_mount_path":{"type":"TypeString","required":true},"sas_key":{"type":"TypeString","optional":true}}},"maxItems":1},"azure_file_share":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"azure_file_url":{"type":"TypeString","required":true},"mount_options":{"type":"TypeString","optional":true},"relative_mount_path":{"type":"TypeString","required":true}}}},"cifs_mount":{"type":"TypeList","optional":true,"elem":{"schema":{"mount_options":{"type":"TypeString","optional":true},"password":{"type":"TypeString","required":true},"relative_mount_path":{"type":"TypeString","required":true},"source":{"type":"TypeString","required":true},"user_name":{"type":"TypeString","required":true}}}},"nfs_mount":{"type":"TypeList","optional":true,"elem":{"schema":{"mount_options":{"type":"TypeString","optional":true},"relative_mount_path":{"type":"TypeString","required":true},"source":{"type":"TypeString","required":true}}}}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"accelerated_networking_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"dynamic_vnet_assignment_scope":{"type":"TypeString","optional":true,"default":"none","forceNew":true},"endpoint_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","required":true,"forceNew":true},"frontend_port_range":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_rules":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"access":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true,"forceNew":true},"source_address_prefix":{"type":"TypeString","required":true,"forceNew":true},"source_port_ranges":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString","default":"*"}}}}},"protocol":{"type":"TypeString","required":true,"forceNew":true}}}},"public_address_provisioning_type":{"type":"TypeString","optional":true},"public_ips":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"node_agent_sku_id":{"type":"TypeString","required":true,"forceNew":true},"node_placement":{"type":"TypeList","optional":true,"elem":{"schema":{"policy":{"type":"TypeString","optional":true,"default":"Regional"}}}},"os_disk_placement":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"start_task":{"type":"TypeList","optional":true,"elem":{"schema":{"command_line":{"type":"TypeString","required":true},"common_environment_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"container":{"type":"TypeList","optional":true,"elem":{"schema":{"image_name":{"type":"TypeString","required":true},"registry":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"registry_server":{"type":"TypeString","required":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Container Registry access.","forceNew":true},"user_name":{"type":"TypeString","optional":true,"forceNew":true}}}},"run_options":{"type":"TypeString","optional":true},"working_directory":{"type":"TypeString","optional":true}}}},"resource_file":{"type":"TypeList","optional":true,"elem":{"schema":{"auto_storage_container_name":{"type":"TypeString","optional":true},"blob_prefix":{"type":"TypeString","optional":true},"file_mode":{"type":"TypeString","optional":true},"file_path":{"type":"TypeString","optional":true},"http_url":{"type":"TypeString","optional":true},"storage_container_url":{"type":"TypeString","optional":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}}},"task_retry_maximum":{"type":"TypeInt","optional":true},"user_identity":{"type":"TypeList","required":true,"elem":{"schema":{"auto_user":{"type":"TypeList","optional":true,"elem":{"schema":{"elevation_level":{"type":"TypeString","optional":true,"default":"NonAdmin"},"scope":{"type":"TypeString","optional":true,"default":"Task"}}},"maxItems":1},"user_name":{"type":"TypeString","optional":true}}},"maxItems":1},"wait_for_success":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"stop_pending_resize_operation":{"type":"TypeBool","optional":true,"default":false},"storage_image_reference":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true,"forceNew":true},"offer":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","optional":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"target_node_communication_mode":{"type":"TypeString","optional":true},"task_scheduling_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"node_fill_type":{"type":"TypeString","optional":true,"computed":true}}}},"user_accounts":{"type":"TypeList","optional":true,"elem":{"schema":{"elevation_level":{"type":"TypeString","required":true},"linux_user_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"gid":{"type":"TypeInt","optional":true},"ssh_private_key":{"type":"TypeString","optional":true},"uid":{"type":"TypeInt","optional":true}}}},"name":{"type":"TypeString","required":true},"password":{"type":"TypeString","required":true},"windows_user_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"login_mode":{"type":"TypeString","required":true}}}}}}},"vm_size":{"type":"TypeString","required":true,"forceNew":true},"windows":{"type":"TypeList","optional":true,"elem":{"schema":{"enable_automatic_updates":{"type":"TypeBool","optional":true,"default":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_billing_account_cost_management_export":{"schema":{"active":{"type":"TypeBool","optional":true,"default":true},"billing_account_id":{"type":"TypeString","required":true,"forceNew":true},"export_data_options":{"type":"TypeList","required":true,"elem":{"schema":{"time_frame":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"export_data_storage_location":{"type":"TypeList","required":true,"elem":{"schema":{"container_id":{"type":"TypeString","required":true,"forceNew":true},"root_folder_path":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recurrence_period_end_date":{"type":"TypeString","required":true},"recurrence_period_start_date":{"type":"TypeString","required":true},"recurrence_type":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_blueprint_assignment":{"schema":{"blueprint_name":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"lock_exclude_actions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":200},"lock_exclude_principals":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":5},"lock_mode":{"type":"TypeString","optional":true,"default":"None"},"name":{"type":"TypeString","required":true,"forceNew":true},"parameter_values":{"type":"TypeString","optional":true},"resource_groups":{"type":"TypeString","optional":true},"target_subscription_id":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","computed":true},"version_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_bot_channel_alexa":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"skill_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_direct_line_speech":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"cognitive_account_id":{"type":"TypeString","optional":true},"cognitive_service_access_key":{"type":"TypeString","required":true},"cognitive_service_location":{"type":"TypeString","required":true},"custom_speech_model_id":{"type":"TypeString","optional":true},"custom_voice_deployment_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_directline":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site":{"type":"TypeSet","required":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"enhanced_authentication_enabled":{"type":"TypeBool","optional":true,"default":false},"id":{"type":"TypeString","computed":true},"key":{"type":"TypeString","computed":true},"key2":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"trusted_origins":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"v1_allowed":{"type":"TypeBool","optional":true,"default":true},"v3_allowed":{"type":"TypeBool","optional":true,"default":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_email":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"email_address":{"type":"TypeString","required":true},"email_password":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_facebook":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"facebook_application_id":{"type":"TypeString","required":true},"facebook_application_secret":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"page":{"type":"TypeSet","required":true,"elem":{"schema":{"access_token":{"type":"TypeString","required":true},"id":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_line":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"line_channel":{"type":"TypeSet","required":true,"elem":{"schema":{"access_token":{"type":"TypeString","required":true},"secret":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_ms_teams":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"calling_web_hook":{"type":"TypeString","optional":true,"computed":true},"deployment_environment":{"type":"TypeString","optional":true,"default":"CommercialDeployment"},"enable_calling":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_slack":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"landing_page_url":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"signing_secret":{"type":"TypeString","optional":true},"verification_token":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_sms":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sms_channel_account_security_id":{"type":"TypeString","required":true},"sms_channel_auth_token":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channel_web_chat":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_names":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_channels_registration":{"schema":{"cmk_key_vault_url":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"developer_app_insights_api_key":{"type":"TypeString","optional":true,"computed":true},"developer_app_insights_application_id":{"type":"TypeString","optional":true,"computed":true},"developer_app_insights_key":{"type":"TypeString","optional":true,"computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"endpoint":{"type":"TypeString","optional":true},"icon_url":{"type":"TypeString","optional":true,"computed":true},"isolated_network_enabled":{"type":"TypeBool","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"microsoft_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"streaming_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_connection":{"schema":{"bot_name":{"type":"TypeString","required":true,"forceNew":true},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeString","optional":true},"service_provider_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_service_azure_bot":{"schema":{"developer_app_insights_api_key":{"type":"TypeString","optional":true},"developer_app_insights_application_id":{"type":"TypeString","optional":true},"developer_app_insights_key":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"endpoint":{"type":"TypeString","optional":true},"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"luis_app_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"luis_key":{"type":"TypeString","optional":true},"microsoft_app_id":{"type":"TypeString","required":true,"forceNew":true},"microsoft_app_msi_id":{"type":"TypeString","optional":true,"forceNew":true},"microsoft_app_tenant_id":{"type":"TypeString","optional":true,"forceNew":true},"microsoft_app_type":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"streaming_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_bot_web_app":{"schema":{"developer_app_insights_api_key":{"type":"TypeString","optional":true,"computed":true},"developer_app_insights_application_id":{"type":"TypeString","optional":true,"computed":true},"developer_app_insights_key":{"type":"TypeString","optional":true,"computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"endpoint":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"luis_app_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"luis_key":{"type":"TypeString","optional":true},"microsoft_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_capacity_reservation":{"schema":{"capacity_reservation_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_capacity_reservation_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_endpoint":{"schema":{"content_types_to_compress":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"delivery_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"cache_expiration_action":{"type":"TypeList","optional":true,"elem":{"schema":{"behavior":{"type":"TypeString","required":true},"duration":{"type":"TypeString","optional":true}}},"maxItems":1},"cache_key_query_string_action":{"type":"TypeList","optional":true,"elem":{"schema":{"behavior":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true}}},"maxItems":1},"cookies_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"device_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}},"maxItems":1},"http_version_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"modify_request_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"modify_response_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"name":{"type":"TypeString","required":true},"order":{"type":"TypeInt","required":true},"post_arg_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"query_string_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"remote_address_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true}}}},"request_body_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"request_header_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"request_method_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}},"maxItems":1},"request_scheme_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}},"maxItems":1},"request_uri_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"url_file_extension_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"url_file_name_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"url_path_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"url_redirect_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fragment":{"type":"TypeString","optional":true},"hostname":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","optional":true,"default":"MatchRequest"},"query_string":{"type":"TypeString","optional":true},"redirect_type":{"type":"TypeString","required":true}}},"maxItems":1},"url_rewrite_action":{"type":"TypeList","optional":true,"elem":{"schema":{"destination":{"type":"TypeString","required":true},"preserve_unmatched_path":{"type":"TypeBool","optional":true,"default":true},"source_pattern":{"type":"TypeString","required":true}}},"maxItems":1}}}},"fqdn":{"type":"TypeString","computed":true},"geo_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"country_codes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"relative_path":{"type":"TypeString","required":true}}}},"global_delivery_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"cache_expiration_action":{"type":"TypeList","optional":true,"elem":{"schema":{"behavior":{"type":"TypeString","required":true},"duration":{"type":"TypeString","optional":true}}},"maxItems":1},"cache_key_query_string_action":{"type":"TypeList","optional":true,"elem":{"schema":{"behavior":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true}}},"maxItems":1},"modify_request_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"modify_response_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"url_redirect_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fragment":{"type":"TypeString","optional":true},"hostname":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","optional":true,"default":"MatchRequest"},"query_string":{"type":"TypeString","optional":true},"redirect_type":{"type":"TypeString","required":true}}},"maxItems":1},"url_rewrite_action":{"type":"TypeList","optional":true,"elem":{"schema":{"destination":{"type":"TypeString","required":true},"preserve_unmatched_path":{"type":"TypeBool","optional":true,"default":true},"source_pattern":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"is_compression_enabled":{"type":"TypeBool","optional":true},"is_http_allowed":{"type":"TypeBool","optional":true,"default":true},"is_https_allowed":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"optimization_type":{"type":"TypeString","optional":true},"origin":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"host_name":{"type":"TypeString","required":true,"forceNew":true},"http_port":{"type":"TypeInt","optional":true,"default":80,"forceNew":true},"https_port":{"type":"TypeInt","optional":true,"default":443,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}}},"origin_host_header":{"type":"TypeString","optional":true},"origin_path":{"type":"TypeString","optional":true,"computed":true},"probe_path":{"type":"TypeString","optional":true,"computed":true},"profile_name":{"type":"TypeString","required":true,"forceNew":true},"querystring_caching_behaviour":{"type":"TypeString","optional":true,"default":"IgnoreQueryString"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_endpoint_custom_domain":{"schema":{"cdn_endpoint_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_managed_https":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_type":{"type":"TypeString","required":true},"protocol_type":{"type":"TypeString","required":true},"tls_version":{"type":"TypeString","optional":true,"default":"TLS12"}}},"maxItems":1,"minItems":1},"host_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"user_managed_https":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_certificate_id":{"type":"TypeString","optional":true,"computed":true},"key_vault_secret_id":{"type":"TypeString","optional":true,"computed":true},"tls_version":{"type":"TypeString","optional":true,"default":"TLS12"}}},"maxItems":1,"minItems":1}},"timeouts":{"create":720,"read":5,"delete":720,"update":1440}},"azurerm_cdn_frontdoor_custom_domain":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"dns_zone_id":{"type":"TypeString","optional":true},"expiration_date":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tls":{"type":"TypeList","required":true,"elem":{"schema":{"cdn_frontdoor_secret_id":{"type":"TypeString","optional":true,"computed":true},"certificate_type":{"type":"TypeString","optional":true,"default":"ManagedCertificate"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"TLS12"}}},"maxItems":1},"validation_token":{"type":"TypeString","computed":true}},"timeouts":{"create":720,"read":5,"delete":720,"update":1440}},"azurerm_cdn_frontdoor_custom_domain_association":{"schema":{"cdn_frontdoor_custom_domain_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_frontdoor_route_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_endpoint":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_firewall_policy":{"schema":{"custom_block_response_body":{"type":"TypeString","optional":true},"custom_block_response_status_code":{"type":"TypeInt","optional":true},"custom_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"match_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":600},"match_variable":{"type":"TypeString","required":true},"negation_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":5}}},"maxItems":10},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","optional":true,"default":1},"rate_limit_duration_in_minutes":{"type":"TypeInt","optional":true,"default":1},"rate_limit_threshold":{"type":"TypeInt","optional":true,"default":10},"type":{"type":"TypeString","required":true}}},"maxItems":100},"enabled":{"type":"TypeBool","optional":true,"default":true},"frontend_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"managed_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"override":{"type":"TypeList","optional":true,"elem":{"schema":{"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":false},"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"rule_id":{"type":"TypeString","required":true}}},"maxItems":1000},"rule_group_name":{"type":"TypeString","required":true}}},"maxItems":100},"type":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":100},"mode":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"redirect_url":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_origin":{"schema":{"cdn_frontdoor_origin_group_id":{"type":"TypeString","required":true,"forceNew":true},"certificate_name_check_enabled":{"type":"TypeBool","required":true},"enabled":{"type":"TypeBool","optional":true,"computed":true},"health_probes_enabled":{"type":"TypeBool","optional":true,"computed":true},"host_name":{"type":"TypeString","required":true},"http_port":{"type":"TypeInt","optional":true,"default":80},"https_port":{"type":"TypeInt","optional":true,"default":443},"name":{"type":"TypeString","required":true,"forceNew":true},"origin_host_header":{"type":"TypeString","optional":true},"priority":{"type":"TypeInt","optional":true,"default":1},"private_link":{"type":"TypeList","optional":true,"elem":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"private_link_target_id":{"type":"TypeString","required":true},"request_message":{"type":"TypeString","optional":true,"default":"Access request for CDN FrontDoor Private Link Origin"},"target_type":{"type":"TypeString","optional":true}}},"maxItems":1},"weight":{"type":"TypeInt","optional":true,"default":500}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_origin_group":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"health_probe":{"type":"TypeList","optional":true,"elem":{"schema":{"interval_in_seconds":{"type":"TypeInt","required":true},"path":{"type":"TypeString","optional":true,"default":"/"},"protocol":{"type":"TypeString","required":true},"request_type":{"type":"TypeString","optional":true,"default":"HEAD"}}},"maxItems":1},"load_balancing":{"type":"TypeList","required":true,"elem":{"schema":{"additional_latency_in_milliseconds":{"type":"TypeInt","optional":true,"default":50},"sample_size":{"type":"TypeInt","optional":true,"default":4},"successful_samples_required":{"type":"TypeInt","optional":true,"default":3}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"restore_traffic_time_to_healed_or_new_endpoint_in_minutes":{"type":"TypeInt","optional":true,"default":10},"session_affinity_enabled":{"type":"TypeBool","optional":true,"default":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_profile":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_guid":{"type":"TypeString","computed":true},"response_timeout_seconds":{"type":"TypeInt","optional":true,"default":120},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_route":{"schema":{"cache":{"type":"TypeList","optional":true,"elem":{"schema":{"compression_enabled":{"type":"TypeBool","optional":true,"default":false},"content_types_to_compress":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"query_string_caching_behavior":{"type":"TypeString","optional":true,"default":"IgnoreQueryString"},"query_strings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"cdn_frontdoor_custom_domain_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"cdn_frontdoor_endpoint_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_frontdoor_origin_group_id":{"type":"TypeString","required":true},"cdn_frontdoor_origin_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"cdn_frontdoor_origin_path":{"type":"TypeString","optional":true},"cdn_frontdoor_rule_set_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"forwarding_protocol":{"type":"TypeString","optional":true,"default":"MatchRequest"},"https_redirect_enabled":{"type":"TypeBool","optional":true,"default":true},"link_to_default_domain":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"patterns_to_match":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"supported_protocols":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":2}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_route_disable_link_to_default_domain":{"schema":{"cdn_frontdoor_custom_domain_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"cdn_frontdoor_route_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_rule":{"schema":{"actions":{"type":"TypeList","required":true,"elem":{"schema":{"request_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"header_action":{"type":"TypeString","required":true},"header_name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"response_header_action":{"type":"TypeList","optional":true,"elem":{"schema":{"header_action":{"type":"TypeString","required":true},"header_name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"route_configuration_override_action":{"type":"TypeList","optional":true,"elem":{"schema":{"cache_behavior":{"type":"TypeString","optional":true},"cache_duration":{"type":"TypeString","optional":true},"cdn_frontdoor_origin_group_id":{"type":"TypeString","optional":true},"compression_enabled":{"type":"TypeBool","optional":true},"forwarding_protocol":{"type":"TypeString","optional":true},"query_string_caching_behavior":{"type":"TypeString","optional":true},"query_string_parameters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":100}}},"maxItems":1},"url_redirect_action":{"type":"TypeList","optional":true,"elem":{"schema":{"destination_fragment":{"type":"TypeString","optional":true,"default":""},"destination_hostname":{"type":"TypeString","required":true},"destination_path":{"type":"TypeString","optional":true,"default":""},"query_string":{"type":"TypeString","optional":true,"default":""},"redirect_protocol":{"type":"TypeString","optional":true,"default":"MatchRequest"},"redirect_type":{"type":"TypeString","required":true}}},"maxItems":1},"url_rewrite_action":{"type":"TypeList","optional":true,"elem":{"schema":{"destination":{"type":"TypeString","required":true},"preserve_unmatched_path":{"type":"TypeBool","optional":true,"default":false},"source_pattern":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"behavior_on_match":{"type":"TypeString","optional":true,"default":"Continue"},"cdn_frontdoor_rule_set_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_frontdoor_rule_set_name":{"type":"TypeString","computed":true},"conditions":{"type":"TypeList","optional":true,"elem":{"schema":{"client_port_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true}}}},"cookies_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"cookie_name":{"type":"TypeString","required":true},"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"host_name_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"http_version_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":4},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"is_device_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"post_args_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"post_args_name":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"query_string_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"remote_address_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"IPMatch"}}}},"request_body_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"request_header_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"request_method_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":7},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"request_scheme_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString","default":"HTTP"},"maxItems":1},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"request_uri_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"server_port_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":2},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true}}}},"socket_address_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"IPMatch"}}}},"ssl_protocol_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":3},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","optional":true,"default":"Equal"}}}},"url_file_extension_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"url_filename_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}},"url_path_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":4}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"order":{"type":"TypeInt","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_rule_set":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cdn_frontdoor_secret":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"cdn_frontdoor_profile_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"secret":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"customer_certificate":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"key_vault_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"subject_alternative_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_cdn_frontdoor_security_policy":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"security_policies":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"firewall":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"association":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"domain":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"active":{"type":"TypeBool","computed":true},"cdn_frontdoor_domain_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":500},"patterns_to_match":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1}}},"maxItems":1},"cdn_frontdoor_firewall_policy_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_cdn_profile":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cognitive_account":{"schema":{"custom_question_answering_search_service_id":{"type":"TypeString","optional":true},"custom_question_answering_search_service_key":{"type":"TypeString","optional":true},"custom_subdomain_name":{"type":"TypeString","optional":true,"forceNew":true},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"dynamic_throttling_enabled":{"type":"TypeBool","optional":true},"endpoint":{"type":"TypeString","computed":true},"fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"kind":{"type":"TypeString","required":true,"forceNew":true},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metrics_advisor_aad_client_id":{"type":"TypeString","optional":true,"forceNew":true},"metrics_advisor_aad_tenant_id":{"type":"TypeString","optional":true,"forceNew":true},"metrics_advisor_super_user_name":{"type":"TypeString","optional":true,"forceNew":true},"metrics_advisor_website_name":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_acls":{"type":"TypeList","optional":true,"elem":{"schema":{"default_action":{"type":"TypeString","required":true},"ip_rules":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"virtual_network_rules":{"type":"TypeSet","optional":true,"elem":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"subnet_id":{"type":"TypeString","required":true}}}}}},"maxItems":1},"outbound_network_access_restricted":{"type":"TypeBool","optional":true,"default":false},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"qna_runtime_endpoint":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","required":true},"storage":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cognitive_account_customer_managed_key":{"schema":{"cognitive_account_id":{"type":"TypeString","required":true,"forceNew":true},"identity_client_id":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cognitive_deployment":{"schema":{"cognitive_account_id":{"type":"TypeString","required":true,"forceNew":true},"model":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"format":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"rai_policy_name":{"type":"TypeString","optional":true,"forceNew":true},"scale":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true,"default":1,"forceNew":true},"family":{"type":"TypeString","optional":true,"forceNew":true},"size":{"type":"TypeString","optional":true,"forceNew":true},"tier":{"type":"TypeString","optional":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_communication_service":{"schema":{"data_location":{"type":"TypeString","optional":true,"default":"United States","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_confidential_ledger":{"schema":{"azuread_based_service_principal":{"type":"TypeList","required":true,"elem":{"schema":{"ledger_role_name":{"type":"TypeString","required":true},"principal_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"minItems":1},"certificate_based_security_principal":{"type":"TypeList","optional":true,"elem":{"schema":{"ledger_role_name":{"type":"TypeString","required":true},"pem_public_key":{"type":"TypeString","required":true}}}},"identity_service_endpoint":{"type":"TypeString","computed":true},"ledger_endpoint":{"type":"TypeString","computed":true},"ledger_type":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_consumption_budget_management_group":{"schema":{"amount":{"type":"TypeFloat","required":true},"etag":{"type":"TypeString","optional":true,"computed":true},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"not":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"tag":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"tag":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeSet","required":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeInt","required":true},"threshold_type":{"type":"TypeString","optional":true,"default":"Actual","forceNew":true}}},"maxItems":5,"minItems":1},"time_grain":{"type":"TypeString","optional":true,"default":"Monthly","forceNew":true},"time_period":{"type":"TypeList","required":true,"elem":{"schema":{"end_date":{"type":"TypeString","optional":true,"computed":true},"start_date":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_consumption_budget_resource_group":{"schema":{"amount":{"type":"TypeFloat","required":true},"etag":{"type":"TypeString","optional":true,"computed":true},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"not":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"tag":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"tag":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeSet","required":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"contact_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"contact_roles":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeInt","required":true},"threshold_type":{"type":"TypeString","optional":true,"default":"Actual","forceNew":true}}},"maxItems":5,"minItems":1},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true},"time_grain":{"type":"TypeString","optional":true,"default":"Monthly","forceNew":true},"time_period":{"type":"TypeList","required":true,"elem":{"schema":{"end_date":{"type":"TypeString","optional":true,"computed":true},"start_date":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_consumption_budget_subscription":{"schema":{"amount":{"type":"TypeFloat","required":true},"etag":{"type":"TypeString","optional":true,"computed":true},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"not":{"type":"TypeList","optional":true,"elem":{"schema":{"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"tag":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"tag":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"In"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeSet","required":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"contact_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"contact_roles":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeInt","required":true},"threshold_type":{"type":"TypeString","optional":true,"default":"Actual","forceNew":true}}},"maxItems":5,"minItems":1},"subscription_id":{"type":"TypeString","required":true,"forceNew":true},"time_grain":{"type":"TypeString","optional":true,"default":"Monthly","forceNew":true},"time_period":{"type":"TypeList","required":true,"elem":{"schema":{"end_date":{"type":"TypeString","optional":true,"computed":true},"start_date":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app":{"schema":{"container_app_environment_id":{"type":"TypeString","required":true,"description":"The ID of the Container App Environment to host this Container App.","forceNew":true},"custom_domain_verification_id":{"type":"TypeString","description":"The ID of the Custom Domain Verification for this Container App.","computed":true},"dapr":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The Dapr Application Identifier."},"app_port":{"type":"TypeInt","optional":true,"description":"The port which the application is listening on. This is the same as the `ingress` port."},"app_protocol":{"type":"TypeString","optional":true,"default":"http","description":"The protocol for the app. Possible values include `http` and `grpc`. Defaults to `http`."}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ingress":{"type":"TypeList","optional":true,"elem":{"schema":{"allow_insecure_connections":{"type":"TypeBool","optional":true,"default":false,"description":"Should this ingress allow insecure connections?"},"custom_domain":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_binding_type":{"type":"TypeString","optional":true,"default":"Disabled","description":"The Binding type. Possible values include `Disabled` and `SniEnabled`. Defaults to `Disabled`"},"certificate_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"description":"The hostname of the Certificate. Must be the CN or a named SAN in the certificate."}}},"maxItems":1},"external_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Is this an external Ingress."},"fqdn":{"type":"TypeString","description":"The FQDN of the ingress.","computed":true},"target_port":{"type":"TypeInt","required":true,"description":"The target port on the container for the Ingress traffic."},"traffic_weight":{"type":"TypeList","required":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"description":"The label to apply to the revision as a name prefix for routing traffic."},"latest_revision":{"type":"TypeBool","optional":true,"default":false,"description":"This traffic Weight relates to the latest stable Container Revision."},"percentage":{"type":"TypeInt","required":true,"description":"The percentage of traffic to send to this revision."},"revision_suffix":{"type":"TypeString","optional":true,"description":"The suffix string to append to the revision. This must be unique for the Container App's lifetime. A default hash created by the service will be used if this value is omitted."}}}},"transport":{"type":"TypeString","optional":true,"default":"auto","description":"The transport method for the Ingress. Possible values include `auto`, `http`, and `http2`. Defaults to `auto`"}}},"maxItems":1},"latest_revision_fqdn":{"type":"TypeString","description":"The FQDN of the Latest Revision of the Container App.","computed":true},"latest_revision_name":{"type":"TypeString","description":"The name of the latest Container Revision.","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"description":"The name for this Container App.","forceNew":true},"outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"registry":{"type":"TypeList","optional":true,"elem":{"schema":{"identity":{"type":"TypeString","optional":true,"description":"ID of the System or User Managed Identity used to pull images from the Container Registry"},"password_secret_name":{"type":"TypeString","optional":true,"description":"The name of the Secret Reference containing the password value for this user on the Container Registry."},"server":{"type":"TypeString","required":true,"description":"The hostname for the Container Registry."},"username":{"type":"TypeString","optional":true,"description":"The username to use for this Container Registry."}}},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"revision_mode":{"type":"TypeString","required":true},"secret":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The Secret name."},"value":{"type":"TypeString","required":true,"description":"The value for this secret."}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template":{"type":"TypeList","required":true,"elem":{"schema":{"container":{"type":"TypeList","required":true,"elem":{"schema":{"args":{"type":"TypeList","optional":true,"description":"A list of args to pass to the container.","elem":{"type":"TypeString"}},"command":{"type":"TypeList","optional":true,"description":"A command to pass to the container to override the default. This is provided as a list of command line elements without spaces.","elem":{"type":"TypeString"}},"cpu":{"type":"TypeFloat","required":true,"description":"The amount of vCPU to allocate to the container. Possible values include `0.25`, `0.5`, `0.75`, `1.0`, `1.25`, `1.5`, `1.75`, and `2.0`. **NOTE:** `cpu` and `memory` must be specified in `0.25'/'0.5Gi` combination increments. e.g. `1.0` / `2.0` or `0.5` / `1.0`"},"env":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the environment variable for the container."},"secret_name":{"type":"TypeString","optional":true,"description":"The name of the secret that contains the value for this environment variable."},"value":{"type":"TypeString","optional":true,"description":"The value for this environment variable. **NOTE:** This value is ignored if `secret_name` is used"}}},"minItems":1},"ephemeral_storage":{"type":"TypeString","description":"The amount of ephemeral storage available to the Container App.","computed":true},"image":{"type":"TypeString","required":true,"description":"The image to use to create the container."},"liveness_probe":{"type":"TypeList","optional":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","optional":true,"default":3,"description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`."},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The HTTP Header Name."},"value":{"type":"TypeString","required":true,"description":"The HTTP Header value."}}}},"host":{"type":"TypeString","optional":true,"description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes."},"initial_delay":{"type":"TypeInt","optional":true,"default":1,"description":"The time in seconds to wait after the container has started before the probe is started."},"interval_seconds":{"type":"TypeInt","optional":true,"default":10,"description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`"},"path":{"type":"TypeString","optional":true,"description":"The URI to use with the `host` for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port number on which to connect. Possible values are between `1` and `65535`."},"termination_grace_period_seconds":{"type":"TypeInt","description":"The time in seconds after the container is sent the termination signal before the process if forcibly killed.","computed":true},"timeout":{"type":"TypeInt","optional":true,"default":1,"description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`."},"transport":{"type":"TypeString","required":true,"description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`."}}},"minItems":1},"memory":{"type":"TypeString","required":true,"description":"The amount of memory to allocate to the container. Possible values include `0.5Gi`, `1.0Gi`, `1.5Gi`, `2.0Gi`, `2.5Gi`, `3.0Gi`, `3.5Gi`, and `4.0Gi`. **NOTE:** `cpu` and `memory` must be specified in `0.25'/'0.5Gi` combination increments. e.g. `1.25` / `2.5Gi` or `0.75` / `1.5Gi`"},"name":{"type":"TypeString","required":true,"description":"The name of the container."},"readiness_probe":{"type":"TypeList","optional":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","optional":true,"default":3,"description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`."},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The HTTP Header Name."},"value":{"type":"TypeString","required":true,"description":"The HTTP Header value."}}}},"host":{"type":"TypeString","optional":true,"description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes."},"interval_seconds":{"type":"TypeInt","optional":true,"default":10,"description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`"},"path":{"type":"TypeString","optional":true,"description":"The URI to use for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port number on which to connect. Possible values are between `1` and `65535`."},"success_count_threshold":{"type":"TypeInt","optional":true,"default":3,"description":"The number of consecutive successful responses required to consider this probe as successful. Possible values are between `1` and `10`. Defaults to `3`."},"timeout":{"type":"TypeInt","optional":true,"default":1,"description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`."},"transport":{"type":"TypeString","required":true,"description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`."}}},"minItems":1},"startup_probe":{"type":"TypeList","optional":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","optional":true,"default":3,"description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`."},"header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The HTTP Header Name."},"value":{"type":"TypeString","required":true,"description":"The HTTP Header value."}}}},"host":{"type":"TypeString","optional":true,"description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes."},"interval_seconds":{"type":"TypeInt","optional":true,"default":10,"description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`"},"path":{"type":"TypeString","optional":true,"description":"The URI to use with the `host` for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port number on which to connect. Possible values are between `1` and `65535`."},"termination_grace_period_seconds":{"type":"TypeInt","description":"The time in seconds after the container is sent the termination signal before the process if forcibly killed.","computed":true},"timeout":{"type":"TypeInt","optional":true,"default":1,"description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`."},"transport":{"type":"TypeString","required":true,"description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`."}}},"minItems":1},"volume_mounts":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the Volume to be mounted in the container."},"path":{"type":"TypeString","required":true,"description":"The path in the container at which to mount this volume."}}}}}},"minItems":1},"max_replicas":{"type":"TypeInt","optional":true,"default":10,"description":"The maximum number of replicas for this container."},"min_replicas":{"type":"TypeInt","optional":true,"description":"The minimum number of replicas for this container.","computed":true},"revision_suffix":{"type":"TypeString","optional":true,"description":"The suffix for the revision. This value must be unique for the lifetime of the Resource. If omitted the service will use a hash function to create one.","computed":true},"volume":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the volume."},"storage_name":{"type":"TypeString","optional":true,"description":"The name of the `AzureFile` storage. Required when `storage_type` is `AzureFile`"},"storage_type":{"type":"TypeString","optional":true,"default":"EmptyDir","description":"The type of storage volume. Possible values include `AzureFile` and `EmptyDir`. Defaults to `EmptyDir`."}}},"minItems":1}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app_environment":{"schema":{"dapr_application_insights_connection_string":{"type":"TypeString","optional":true,"description":"Application Insights connection string used by Dapr to export Service to Service communication telemetry.","forceNew":true},"default_domain":{"type":"TypeString","description":"The default publicly resolvable name of this Container App Environment","computed":true},"docker_bridge_cidr":{"type":"TypeString","description":"The network addressing in which the Container Apps in this Container App Environment will reside in CIDR notation.","computed":true},"infrastructure_subnet_id":{"type":"TypeString","optional":true,"description":"The existing Subnet to use for the Container Apps Control Plane. **NOTE:** The Subnet must have a `/21` or larger address space.","forceNew":true},"internal_load_balancer_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified.","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"log_analytics_workspace_id":{"type":"TypeString","optional":true,"description":"The ID for the Log Analytics Workspace to link this Container Apps Managed Environment to.","forceNew":true},"name":{"type":"TypeString","required":true,"description":"The name of the Container Apps Managed Environment.","forceNew":true},"platform_reserved_cidr":{"type":"TypeString","description":"The IP range, in CIDR notation, that is reserved for environment infrastructure IP addresses.","computed":true},"platform_reserved_dns_ip_address":{"type":"TypeString","description":"The IP address from the IP range defined by `platform_reserved_cidr` that is reserved for the internal DNS server.","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"static_ip_address":{"type":"TypeString","description":"The Static IP Address of the Environment.","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app_environment_certificate":{"schema":{"certificate_blob_base64":{"type":"TypeString","required":true,"description":"The Certificate Private Key as a base64 encoded PFX or PEM.","forceNew":true},"certificate_password":{"type":"TypeString","required":true,"description":"The password for the Certificate.","forceNew":true},"container_app_environment_id":{"type":"TypeString","required":true,"description":"The Container App Managed Environment ID to configure this Certificate on.","forceNew":true},"expiration_date":{"type":"TypeString","description":"The expiration date for the Certificate.","computed":true},"issue_date":{"type":"TypeString","description":"The date of issue for the Certificate.","computed":true},"issuer":{"type":"TypeString","description":"The Certificate Issuer.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Container Apps Environment Certificate.","forceNew":true},"subject_name":{"type":"TypeString","description":"The Subject Name for the Certificate.","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","description":"The Thumbprint of the Certificate.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app_environment_dapr_component":{"schema":{"component_type":{"type":"TypeString","required":true,"description":"The Dapr Component Type. For example `state.azure.blobstorage`.","forceNew":true},"container_app_environment_id":{"type":"TypeString","required":true,"description":"The Container App Managed Environment ID to configure this Dapr component on.","forceNew":true},"ignore_errors":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Dapr sidecar to continue initialisation if the component fails to load. Defaults to `false`"},"init_timeout":{"type":"TypeString","optional":true,"default":"5s","description":"The component initialisation timeout in ISO8601 format. e.g. `5s`, `2h`, `1m`. Defaults to `5s`."},"metadata":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the Metadata configuration item."},"secret_name":{"type":"TypeString","optional":true,"description":"The name of a secret specified in the `secrets` block that contains the value for this metadata configuration item."},"value":{"type":"TypeString","optional":true,"description":"The value for this metadata configuration item."}}},"minItems":1},"name":{"type":"TypeString","required":true,"description":"The name for this Dapr Component.","forceNew":true},"scopes":{"type":"TypeList","optional":true,"description":"A list of scopes to which this component applies. e.g. a Container App's `dapr.app_id` value.","elem":{"type":"TypeString"},"minItems":1},"secret":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The Secret name."},"value":{"type":"TypeString","required":true,"description":"The value for this secret."}}}},"version":{"type":"TypeString","required":true,"description":"The version of the component."}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_app_environment_storage":{"schema":{"access_key":{"type":"TypeString","required":true,"description":"The Storage Account Access Key."},"access_mode":{"type":"TypeString","required":true,"description":"The access mode to connect this storage to the Container App. Possible values include `ReadOnly` and `ReadWrite`.","forceNew":true},"account_name":{"type":"TypeString","required":true,"description":"The Azure Storage Account in which the Share to be used is located.","forceNew":true},"container_app_environment_id":{"type":"TypeString","required":true,"description":"The ID of the Container App Environment to which this storage belongs.","forceNew":true},"name":{"type":"TypeString","required":true,"description":"The name for this Storage.","forceNew":true},"share_name":{"type":"TypeString","required":true,"description":"The name of the Azure Storage Share to use.","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_connected_registry":{"schema":{"audit_log_enabled":{"type":"TypeBool","optional":true,"default":false},"client_token_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"container_registry_id":{"type":"TypeString","required":true,"forceNew":true},"log_level":{"type":"TypeString","optional":true,"default":"None"},"mode":{"type":"TypeString","optional":true,"default":"ReadWrite","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"digest":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"tag":{"type":"TypeString","optional":true}}}},"parent_registry_id":{"type":"TypeString","optional":true,"forceNew":true},"sync_message_ttl":{"type":"TypeString","optional":true,"default":"P1D"},"sync_schedule":{"type":"TypeString","optional":true,"default":"* * * * *"},"sync_token_id":{"type":"TypeString","required":true,"forceNew":true},"sync_window":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_group":{"schema":{"container":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"commands":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"cpu":{"type":"TypeFloat","required":true,"forceNew":true},"cpu_limit":{"type":"TypeFloat","optional":true},"environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"gpu":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"count":{"type":"TypeInt","optional":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"gpu_limit":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","optional":true},"sku":{"type":"TypeString","optional":true}}},"maxItems":1},"image":{"type":"TypeString","required":true,"forceNew":true},"liveness_probe":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"exec":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"failure_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"http_get":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"http_headers":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"path":{"type":"TypeString","optional":true,"forceNew":true},"port":{"type":"TypeInt","optional":true,"forceNew":true},"scheme":{"type":"TypeString","optional":true,"forceNew":true}}}},"initial_delay_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"period_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"success_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"timeout_seconds":{"type":"TypeInt","optional":true,"forceNew":true}}},"maxItems":1},"memory":{"type":"TypeFloat","required":true,"forceNew":true},"memory_limit":{"type":"TypeFloat","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"ports":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"port":{"type":"TypeInt","optional":true,"forceNew":true},"protocol":{"type":"TypeString","optional":true,"default":"TCP","forceNew":true}}}},"readiness_probe":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"exec":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"failure_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"http_get":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"http_headers":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"path":{"type":"TypeString","optional":true,"forceNew":true},"port":{"type":"TypeInt","optional":true,"forceNew":true},"scheme":{"type":"TypeString","optional":true,"forceNew":true}}}},"initial_delay_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"period_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"success_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"timeout_seconds":{"type":"TypeInt","optional":true,"forceNew":true}}},"maxItems":1},"secure_environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"security":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"privilege_enabled":{"type":"TypeBool","required":true,"forceNew":true}}}},"volume":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"empty_dir":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"git_repo":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"directory":{"type":"TypeString","optional":true,"forceNew":true},"revision":{"type":"TypeString","optional":true,"forceNew":true},"url":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"mount_path":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_only":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"secret":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"share_name":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_key":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_name":{"type":"TypeString","optional":true,"forceNew":true}}}}}}},"diagnostics":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"log_analytics":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"log_type":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true},"workspace_key":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"dns_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"nameservers":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"options":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"search_domains":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"dns_name_label":{"type":"TypeString","optional":true,"forceNew":true},"dns_name_label_reuse_policy":{"type":"TypeString","optional":true,"default":"Unsecure"},"exposed_port":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"port":{"type":"TypeInt","optional":true,"forceNew":true},"protocol":{"type":"TypeString","optional":true,"default":"TCP","forceNew":true}}}},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"image_registry_credential":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Container Registry access.","forceNew":true},"username":{"type":"TypeString","optional":true,"forceNew":true}}}},"init_container":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"commands":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"image":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"secure_environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"security":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"privilege_enabled":{"type":"TypeBool","required":true,"forceNew":true}}}},"volume":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"empty_dir":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"git_repo":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"directory":{"type":"TypeString","optional":true,"forceNew":true},"revision":{"type":"TypeString","optional":true,"forceNew":true},"url":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"mount_path":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_only":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"secret":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"share_name":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_key":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_name":{"type":"TypeString","optional":true,"forceNew":true}}}}}}},"ip_address":{"type":"TypeString","computed":true},"ip_address_type":{"type":"TypeString","optional":true,"default":"Public","forceNew":true},"key_vault_key_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile_id":{"type":"TypeString","optional":true,"computed":true},"os_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restart_policy":{"type":"TypeString","optional":true,"default":"Always","forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Standard","forceNew":true},"subnet_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry":{"schema":{"admin_enabled":{"type":"TypeBool","optional":true,"default":false},"admin_password":{"type":"TypeString","computed":true},"admin_username":{"type":"TypeString","computed":true},"anonymous_pull_enabled":{"type":"TypeBool","optional":true},"data_endpoint_enabled":{"type":"TypeBool","optional":true},"encryption":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false},"identity_client_id":{"type":"TypeString","required":true},"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"export_policy_enabled":{"type":"TypeBool","optional":true,"default":true},"georeplications":{"type":"TypeList","optional":true,"elem":{"schema":{"location":{"type":"TypeString","required":true},"regional_endpoint_enabled":{"type":"TypeBool","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundancy_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"login_server":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rule_bypass_option":{"type":"TypeString","optional":true,"default":"AzureServices"},"network_rule_set":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_rule":{"type":"TypeSet","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"ip_range":{"type":"TypeString","required":true}}}},"virtual_network":{"type":"TypeSet","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}}}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"quarantine_policy_enabled":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_policy":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":7},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trust_policy":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"zone_redundancy_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_agent_pool":{"schema":{"container_registry_name":{"type":"TypeString","required":true,"forceNew":true},"instance_count":{"type":"TypeInt","optional":true,"default":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","optional":true,"default":"S1","forceNew":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_scope_map":{"schema":{"actions":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"container_registry_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_task":{"schema":{"agent_pool_name":{"type":"TypeString","optional":true},"agent_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"cpu":{"type":"TypeInt","required":true}}},"maxItems":1},"base_image_trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"update_trigger_endpoint":{"type":"TypeString","optional":true},"update_trigger_payload_type":{"type":"TypeString","optional":true}}},"maxItems":1},"container_registry_id":{"type":"TypeString","required":true,"forceNew":true},"docker_step":{"type":"TypeList","optional":true,"elem":{"schema":{"arguments":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"cache_enabled":{"type":"TypeBool","optional":true,"default":true},"context_access_token":{"type":"TypeString","required":true},"context_path":{"type":"TypeString","required":true},"dockerfile_path":{"type":"TypeString","required":true},"image_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"push_enabled":{"type":"TypeBool","optional":true,"default":true},"secret_arguments":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target":{"type":"TypeString","optional":true}}},"maxItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"encoded_step":{"type":"TypeList","optional":true,"elem":{"schema":{"context_access_token":{"type":"TypeString","optional":true},"context_path":{"type":"TypeString","optional":true},"secret_values":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"task_content":{"type":"TypeString","required":true},"value_content":{"type":"TypeString","optional":true},"values":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"file_step":{"type":"TypeList","optional":true,"elem":{"schema":{"context_access_token":{"type":"TypeString","optional":true},"context_path":{"type":"TypeString","optional":true},"secret_values":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"task_file_path":{"type":"TypeString","required":true},"value_file_path":{"type":"TypeString","optional":true},"values":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"is_system_task":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"log_template":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform":{"type":"TypeList","optional":true,"elem":{"schema":{"architecture":{"type":"TypeString","optional":true},"os":{"type":"TypeString","required":true},"variant":{"type":"TypeString","optional":true}}},"maxItems":1},"registry_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"custom":{"type":"TypeSet","optional":true,"elem":{"schema":{"identity":{"type":"TypeString","optional":true},"login_server":{"type":"TypeString","required":true},"password":{"type":"TypeString","optional":true},"username":{"type":"TypeString","optional":true}}}},"source":{"type":"TypeList","optional":true,"elem":{"schema":{"login_mode":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"source_trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"expire_in_seconds":{"type":"TypeInt","optional":true},"refresh_token":{"type":"TypeString","optional":true},"scope":{"type":"TypeString","optional":true},"token":{"type":"TypeString","required":true},"token_type":{"type":"TypeString","required":true}}},"maxItems":1},"branch":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"events":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"repository_url":{"type":"TypeString","required":true},"source_type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":3600},"timer_trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"schedule":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_task_schedule_run_now":{"schema":{"container_registry_task_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_container_registry_token":{"schema":{"container_registry_name":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope_map_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_token_password":{"schema":{"container_registry_token_id":{"type":"TypeString","required":true,"forceNew":true},"password1":{"type":"TypeList","required":true,"elem":{"schema":{"expiry":{"type":"TypeString","optional":true,"forceNew":true},"value":{"type":"TypeString","computed":true}}},"maxItems":1},"password2":{"type":"TypeList","optional":true,"elem":{"schema":{"expiry":{"type":"TypeString","optional":true,"forceNew":true},"value":{"type":"TypeString","computed":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_container_registry_webhook":{"schema":{"actions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"custom_headers":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"registry_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","optional":true,"default":""},"service_uri":{"type":"TypeString","required":true},"status":{"type":"TypeString","optional":true,"default":"enabled"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_account":{"schema":{"access_key_metadata_writes_enabled":{"type":"TypeBool","optional":true,"default":true},"analytical_storage":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"schema_type":{"type":"TypeString","required":true}}},"maxItems":1},"analytical_storage_enabled":{"type":"TypeBool","optional":true,"default":false},"backup":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"interval_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"retention_in_hours":{"type":"TypeInt","optional":true,"computed":true},"storage_redundancy":{"type":"TypeString","optional":true,"computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"capabilities":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true}}}},"capacity":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"total_throughput_limit":{"type":"TypeInt","required":true}}},"maxItems":1},"connection_strings":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"consistency_policy":{"type":"TypeList","required":true,"elem":{"schema":{"consistency_level":{"type":"TypeString","required":true},"max_interval_in_seconds":{"type":"TypeInt","optional":true,"computed":true},"max_staleness_prefix":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"cors_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_methods":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"exposed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"max_age_in_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"create_mode":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"default_identity_type":{"type":"TypeString","optional":true,"default":"FirstPartyIdentity"},"enable_automatic_failover":{"type":"TypeBool","optional":true,"default":false},"enable_free_tier":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"enable_multiple_write_locations":{"type":"TypeBool","optional":true,"default":false},"endpoint":{"type":"TypeString","computed":true},"geo_location":{"type":"TypeSet","required":true,"elem":{"schema":{"failover_priority":{"type":"TypeInt","required":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true},"zone_redundant":{"type":"TypeBool","optional":true,"default":false}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ip_range_filter":{"type":"TypeString","optional":true},"is_virtual_network_filter_enabled":{"type":"TypeBool","optional":true,"default":false},"key_vault_key_id":{"type":"TypeString","optional":true,"forceNew":true},"kind":{"type":"TypeString","optional":true,"default":"GlobalDocumentDB","forceNew":true},"local_authentication_disabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"mongo_server_version":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_acl_bypass_for_azure_services":{"type":"TypeBool","optional":true,"default":false},"network_acl_bypass_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"offer_type":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","computed":true},"primary_readonly_key":{"type":"TypeString","computed":true},"primary_readonly_sql_connection_string":{"type":"TypeString","computed":true},"primary_sql_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"read_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore":{"type":"TypeList","optional":true,"elem":{"schema":{"database":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"collection_names":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true}}}},"restore_timestamp_in_utc":{"type":"TypeString","required":true,"forceNew":true},"source_cosmosdb_account_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"secondary_key":{"type":"TypeString","computed":true},"secondary_readonly_key":{"type":"TypeString","computed":true},"secondary_readonly_sql_connection_string":{"type":"TypeString","computed":true},"secondary_sql_connection_string":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_rule":{"type":"TypeSet","optional":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false}}}},"write_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_cosmosdb_cassandra_cluster":{"schema":{"authentication_method":{"type":"TypeString","optional":true,"default":"Cassandra"},"client_certificate_pems":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_admin_password":{"type":"TypeString","required":true,"forceNew":true},"delegated_management_subnet_id":{"type":"TypeString","required":true,"forceNew":true},"external_gossip_certificate_pems":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"external_seed_node_ip_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"hours_between_backups":{"type":"TypeInt","optional":true,"default":24},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"repair_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"default":"3.11","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_cassandra_datacenter":{"schema":{"availability_zones_enabled":{"type":"TypeBool","optional":true,"default":true},"backup_storage_customer_key_uri":{"type":"TypeString","optional":true},"base64_encoded_yaml_fragment":{"type":"TypeString","optional":true},"cassandra_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"delegated_management_subnet_id":{"type":"TypeString","required":true,"forceNew":true},"disk_count":{"type":"TypeInt","optional":true},"disk_sku":{"type":"TypeString","optional":true,"default":"P30"},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_disk_customer_key_uri":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_count":{"type":"TypeInt","optional":true,"default":3},"sku_name":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_cosmosdb_cassandra_keyspace":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_cassandra_table":{"schema":{"analytical_storage_ttl":{"type":"TypeInt","optional":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"cassandra_keyspace_id":{"type":"TypeString","required":true,"forceNew":true},"default_ttl":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"schema":{"type":"TypeList","required":true,"elem":{"schema":{"cluster_key":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"order_by":{"type":"TypeString","required":true}}}},"column":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"minItems":1},"partition_key":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_gremlin_database":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_gremlin_graph":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"analytical_storage_ttl":{"type":"TypeInt","optional":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"conflict_resolution_policy":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"conflict_resolution_path":{"type":"TypeString","optional":true},"conflict_resolution_procedure":{"type":"TypeString","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"database_name":{"type":"TypeString","required":true,"forceNew":true},"default_ttl":{"type":"TypeInt","optional":true,"computed":true},"index_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"automatic":{"type":"TypeBool","optional":true,"default":true},"composite_index":{"type":"TypeList","optional":true,"elem":{"schema":{"index":{"type":"TypeList","required":true,"elem":{"schema":{"order":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}},"minItems":1}}}},"excluded_paths":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"included_paths":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"indexing_mode":{"type":"TypeString","required":true},"spatial_index":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","required":true},"types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key_path":{"type":"TypeString","required":true,"forceNew":true},"partition_key_version":{"type":"TypeInt","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true},"unique_key":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"paths":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_mongo_collection":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"analytical_storage_ttl":{"type":"TypeInt","optional":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"database_name":{"type":"TypeString","required":true,"forceNew":true},"default_ttl_seconds":{"type":"TypeInt","optional":true},"index":{"type":"TypeSet","optional":true,"elem":{"schema":{"keys":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"unique":{"type":"TypeBool","optional":true,"default":false}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"shard_key":{"type":"TypeString","optional":true,"forceNew":true},"system_indexes":{"type":"TypeList","computed":true,"elem":{"schema":{"keys":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"unique":{"type":"TypeBool","computed":true}}}},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_mongo_database":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_mongo_role_definition":{"schema":{"cosmos_mongo_database_id":{"type":"TypeString","required":true,"forceNew":true},"inherited_role_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"privilege":{"type":"TypeList","optional":true,"elem":{"schema":{"actions":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"resource":{"type":"TypeList","required":true,"elem":{"schema":{"collection_name":{"type":"TypeString","optional":true},"db_name":{"type":"TypeString","optional":true}}},"maxItems":1}}}},"role_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_mongo_user_definition":{"schema":{"cosmos_mongo_database_id":{"type":"TypeString","required":true,"forceNew":true},"inherited_role_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_notebook_workspace":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_endpoint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_cosmosdb_postgresql_cluster":{"schema":{"administrator_login_password":{"type":"TypeString","required":true},"citus_version":{"type":"TypeString","optional":true,"computed":true},"coordinator_public_ip_access_enabled":{"type":"TypeBool","optional":true,"default":true},"coordinator_server_edition":{"type":"TypeString","optional":true,"default":"GeneralPurpose"},"coordinator_storage_quota_in_mb":{"type":"TypeInt","required":true},"coordinator_vcore_count":{"type":"TypeInt","required":true},"earliest_restore_time":{"type":"TypeString","computed":true},"ha_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeInt","optional":true,"default":0},"start_hour":{"type":"TypeInt","optional":true,"default":0},"start_minute":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"node_count":{"type":"TypeInt","required":true},"node_public_ip_access_enabled":{"type":"TypeBool","optional":true,"default":false},"node_server_edition":{"type":"TypeString","optional":true,"default":"MemoryOptimized"},"node_storage_quota_in_mb":{"type":"TypeInt","optional":true,"computed":true},"node_vcores":{"type":"TypeInt","optional":true,"computed":true},"point_in_time_in_utc":{"type":"TypeString","optional":true,"forceNew":true},"preferred_primary_zone":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"shards_on_coordinator_enabled":{"type":"TypeBool","optional":true,"computed":true},"source_location":{"type":"TypeString","optional":true,"forceNew":true},"source_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"sql_version":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_cosmosdb_postgresql_coordinator_configuration":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_postgresql_firewall_rule":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_postgresql_node_configuration":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_postgresql_role":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_cosmosdb_sql_container":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"analytical_storage_ttl":{"type":"TypeInt","optional":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"conflict_resolution_policy":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"conflict_resolution_path":{"type":"TypeString","optional":true},"conflict_resolution_procedure":{"type":"TypeString","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"database_name":{"type":"TypeString","required":true,"forceNew":true},"default_ttl":{"type":"TypeInt","optional":true,"computed":true},"indexing_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"composite_index":{"type":"TypeList","optional":true,"elem":{"schema":{"index":{"type":"TypeList","required":true,"elem":{"schema":{"order":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}},"minItems":1}}}},"excluded_path":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","required":true}}}},"included_path":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","required":true}}}},"indexing_mode":{"type":"TypeString","optional":true,"default":"consistent"},"spatial_index":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","required":true},"types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key_path":{"type":"TypeString","required":true,"forceNew":true},"partition_key_version":{"type":"TypeInt","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true},"unique_key":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"paths":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_database":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_dedicated_gateway":{"schema":{"cosmosdb_account_id":{"type":"TypeString","required":true,"forceNew":true},"instance_count":{"type":"TypeInt","required":true},"instance_size":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_function":{"schema":{"body":{"type":"TypeString","required":true},"container_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_role_assignment":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role_definition_id":{"type":"TypeString","required":true},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_role_definition":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"assignable_scopes":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"permissions":{"type":"TypeSet","required":true,"elem":{"schema":{"data_actions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role_definition_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"default":"CustomRole","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_stored_procedure":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"body":{"type":"TypeString","required":true},"container_name":{"type":"TypeString","required":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_sql_trigger":{"schema":{"body":{"type":"TypeString","required":true},"container_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"operation":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cosmosdb_table":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"autoscale_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cost_anomaly_alert":{"schema":{"display_name":{"type":"TypeString","required":true},"email_addresses":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"email_subject":{"type":"TypeString","required":true},"message":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_cost_management_scheduled_action":{"schema":{"day_of_month":{"type":"TypeInt","optional":true},"days_of_week":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"display_name":{"type":"TypeString","required":true},"email_address_sender":{"type":"TypeString","required":true},"email_addresses":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":20,"minItems":1},"email_subject":{"type":"TypeString","required":true},"end_date":{"type":"TypeString","required":true},"frequency":{"type":"TypeString","required":true},"hour_of_day":{"type":"TypeInt","optional":true},"message":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"start_date":{"type":"TypeString","required":true},"view_id":{"type":"TypeString","required":true,"forceNew":true},"weeks_of_month":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_custom_ip_prefix":{"schema":{"cidr":{"type":"TypeString","required":true,"forceNew":true},"commissioning_enabled":{"type":"TypeBool","optional":true,"default":false},"internet_advertising_disabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parent_custom_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roa_validity_end_date":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"wan_validation_signed_message":{"type":"TypeString","optional":true,"forceNew":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":540,"read":5,"delete":1020,"update":1020}},"azurerm_custom_provider":{"schema":{"action":{"type":"TypeSet","optional":true,"elem":{"schema":{"endpoint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_type":{"type":"TypeSet","optional":true,"elem":{"schema":{"endpoint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"routing_type":{"type":"TypeString","optional":true,"default":"Proxy"}}}},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"validation":{"type":"TypeSet","optional":true,"elem":{"schema":{"specification":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dashboard":{"schema":{"dashboard_properties":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dashboard_grafana":{"schema":{"api_key_enabled":{"type":"TypeBool","optional":true,"default":false},"auto_generated_domain_name_label_scope":{"type":"TypeString","optional":true,"default":"TenantReuse"},"azure_monitor_workspace_integrations":{"type":"TypeList","optional":true,"elem":{"schema":{"resource_id":{"type":"TypeString","required":true}}}},"deterministic_outbound_ip_enabled":{"type":"TypeBool","optional":true,"default":false},"endpoint":{"type":"TypeString","computed":true},"grafana_version":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Standard","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundancy_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory":{"schema":{"customer_managed_key_id":{"type":"TypeString","optional":true},"customer_managed_key_identity_id":{"type":"TypeString","optional":true},"github_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"account_name":{"type":"TypeString","required":true},"branch_name":{"type":"TypeString","required":true},"git_url":{"type":"TypeString","required":true},"repository_name":{"type":"TypeString","required":true},"root_folder":{"type":"TypeString","required":true}}},"maxItems":1},"global_parameter":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_virtual_network_enabled":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_enabled":{"type":"TypeBool","optional":true,"default":true},"purview_id":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vsts_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"account_name":{"type":"TypeString","required":true},"branch_name":{"type":"TypeString","required":true},"project_name":{"type":"TypeString","required":true},"repository_name":{"type":"TypeString","required":true},"root_folder":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_custom_dataset":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_json":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true,"forceNew":true},"type_properties_json":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_data_flow":{"schema":{"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"script":{"type":"TypeString","optional":true},"script_lines":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"sink":{"type":"TypeList","required":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true},"rejected_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"schema_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}}},"source":{"type":"TypeList","required":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true},"rejected_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"schema_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}}},"transformation":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_azure_blob":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"path":{"type":"TypeString","optional":true},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_binary":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_blob_storage_location":{"type":"TypeList","optional":true,"elem":{"schema":{"container":{"type":"TypeString","required":true},"dynamic_container_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true}}},"maxItems":1},"compression":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"http_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true},"relative_url":{"type":"TypeString","required":true}}},"maxItems":1},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"sftp_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_cosmosdb_sqlapi":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"collection_name":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_delimited_text":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_blob_fs_location":{"type":"TypeList","optional":true,"elem":{"schema":{"file_system":{"type":"TypeString","required":true},"filename":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true}}},"maxItems":1},"azure_blob_storage_location":{"type":"TypeList","optional":true,"elem":{"schema":{"container":{"type":"TypeString","required":true},"dynamic_container_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true}}},"maxItems":1},"column_delimiter":{"type":"TypeString","optional":true,"default":","},"compression_codec":{"type":"TypeString","optional":true},"compression_level":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encoding":{"type":"TypeString","optional":true},"escape_character":{"type":"TypeString","optional":true,"default":"\\"},"first_row_as_header":{"type":"TypeBool","optional":true,"default":false},"folder":{"type":"TypeString","optional":true},"http_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true},"relative_url":{"type":"TypeString","required":true}}},"maxItems":1},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"null_value":{"type":"TypeString","optional":true,"default":""},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"quote_character":{"type":"TypeString","optional":true,"default":"\""},"row_delimiter":{"type":"TypeString","optional":true},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_http":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"relative_url":{"type":"TypeString","optional":true},"request_body":{"type":"TypeString","optional":true},"request_method":{"type":"TypeString","optional":true},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_json":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_blob_storage_location":{"type":"TypeList","optional":true,"elem":{"schema":{"container":{"type":"TypeString","required":true},"dynamic_container_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encoding":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"http_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true},"relative_url":{"type":"TypeString","required":true}}},"maxItems":1},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_mysql":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_parquet":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_blob_storage_location":{"type":"TypeList","optional":true,"elem":{"schema":{"container":{"type":"TypeString","required":true},"dynamic_container_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","optional":true},"path":{"type":"TypeString","optional":true}}},"maxItems":1},"compression_codec":{"type":"TypeString","optional":true},"compression_level":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"http_server_location":{"type":"TypeList","optional":true,"elem":{"schema":{"dynamic_filename_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_path_enabled":{"type":"TypeBool","optional":true,"default":false},"filename":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"relative_url":{"type":"TypeString","required":true}}},"maxItems":1},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_postgresql":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_snowflake":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"precision":{"type":"TypeInt","optional":true},"scale":{"type":"TypeInt","optional":true},"type":{"type":"TypeString","optional":true}}}},"schema_name":{"type":"TypeString","optional":true},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_dataset_sql_server_table":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"schema_column":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true}}}},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_flowlet_data_flow":{"schema":{"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"script":{"type":"TypeString","optional":true},"script_lines":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"sink":{"type":"TypeList","required":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true},"rejected_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"schema_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}}},"source":{"type":"TypeList","required":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true},"rejected_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"schema_linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}}},"transformation":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"flowlet":{"type":"TypeList","optional":true,"elem":{"schema":{"dataset_parameters":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"linked_service":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_integration_runtime_azure":{"schema":{"cleanup_enabled":{"type":"TypeBool","optional":true,"computed":true},"compute_type":{"type":"TypeString","optional":true,"default":"General"},"core_count":{"type":"TypeInt","optional":true,"default":8},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"time_to_live_min":{"type":"TypeInt","optional":true,"default":0},"virtual_network_enabled":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_integration_runtime_azure_ssis":{"schema":{"catalog_info":{"type":"TypeList","optional":true,"elem":{"schema":{"administrator_login":{"type":"TypeString","optional":true},"administrator_password":{"type":"TypeString","optional":true},"dual_standby_pair_name":{"type":"TypeString","optional":true},"elastic_pool_name":{"type":"TypeString","optional":true},"pricing_tier":{"type":"TypeString","optional":true},"server_endpoint":{"type":"TypeString","required":true}}},"maxItems":1},"custom_setup_script":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_container_uri":{"type":"TypeString","required":true},"sas_token":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"edition":{"type":"TypeString","optional":true,"default":"Standard"},"express_custom_setup":{"type":"TypeList","optional":true,"elem":{"schema":{"command_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"secret_name":{"type":"TypeString","required":true},"secret_version":{"type":"TypeString","optional":true}}},"maxItems":1},"password":{"type":"TypeString","optional":true},"target_name":{"type":"TypeString","required":true},"user_name":{"type":"TypeString","required":true}}}},"component":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_license":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"secret_name":{"type":"TypeString","required":true},"secret_version":{"type":"TypeString","optional":true}}},"maxItems":1},"license":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true}}}},"environment":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"powershell_version":{"type":"TypeString","optional":true}}},"maxItems":1},"express_vnet_integration":{"type":"TypeList","optional":true,"elem":{"schema":{"subnet_id":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true,"default":"LicenseIncluded"},"location":{"type":"TypeString","required":true,"forceNew":true},"max_parallel_executions_per_node":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"node_size":{"type":"TypeString","required":true},"number_of_nodes":{"type":"TypeInt","optional":true,"default":1},"package_store":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"path":{"type":"TypeString","optional":true},"self_hosted_integration_runtime_name":{"type":"TypeString","required":true},"staging_storage_linked_service_name":{"type":"TypeString","required":true}}},"maxItems":1},"vnet_integration":{"type":"TypeList","optional":true,"elem":{"schema":{"public_ips":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2,"minItems":2},"subnet_id":{"type":"TypeString","optional":true},"subnet_name":{"type":"TypeString","optional":true},"vnet_id":{"type":"TypeString","optional":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_integration_runtime_managed":{"schema":{"catalog_info":{"type":"TypeList","optional":true,"elem":{"schema":{"administrator_login":{"type":"TypeString","optional":true},"administrator_password":{"type":"TypeString","optional":true},"pricing_tier":{"type":"TypeString","optional":true,"default":"Basic"},"server_endpoint":{"type":"TypeString","required":true}}},"maxItems":1},"custom_setup_script":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_container_uri":{"type":"TypeString","required":true},"sas_token":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"edition":{"type":"TypeString","optional":true,"default":"Standard"},"license_type":{"type":"TypeString","optional":true,"default":"LicenseIncluded"},"location":{"type":"TypeString","required":true,"forceNew":true},"max_parallel_executions_per_node":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"node_size":{"type":"TypeString","required":true},"number_of_nodes":{"type":"TypeInt","optional":true,"default":1},"vnet_integration":{"type":"TypeList","optional":true,"elem":{"schema":{"subnet_name":{"type":"TypeString","required":true},"vnet_id":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_integration_runtime_self_hosted":{"schema":{"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_authorization_key":{"type":"TypeString","computed":true},"rbac_authorization":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"resource_id":{"type":"TypeString","required":true}}}},"secondary_authorization_key":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_custom_service":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true},"type_properties_json":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_blob_storage":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"connection_string_insecure":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_sas_token":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"sas_uri":{"type":"TypeString","optional":true},"service_endpoint":{"type":"TypeString","optional":true},"service_principal_id":{"type":"TypeString","optional":true},"service_principal_key":{"type":"TypeString","optional":true},"service_principal_linked_key_vault_key":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"storage_kind":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","optional":true},"use_managed_identity":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_databricks":{"schema":{"access_token":{"type":"TypeString","optional":true},"adb_domain":{"type":"TypeString","required":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"existing_cluster_id":{"type":"TypeString","optional":true},"instance_pool":{"type":"TypeList","optional":true,"elem":{"schema":{"cluster_version":{"type":"TypeString","required":true},"instance_pool_id":{"type":"TypeString","required":true},"max_number_of_workers":{"type":"TypeInt","optional":true},"min_number_of_workers":{"type":"TypeInt","optional":true,"default":1}}},"maxItems":1},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"msi_work_space_resource_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"new_cluster_config":{"type":"TypeList","optional":true,"elem":{"schema":{"cluster_version":{"type":"TypeString","required":true},"custom_tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"driver_node_type":{"type":"TypeString","optional":true},"init_scripts":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"log_destination":{"type":"TypeString","optional":true},"max_number_of_workers":{"type":"TypeInt","optional":true},"min_number_of_workers":{"type":"TypeInt","optional":true,"default":"1"},"node_type":{"type":"TypeString","required":true},"spark_config":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"spark_environment_variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_file_storage":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"file_share":{"type":"TypeString","optional":true},"host":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"password":{"type":"TypeString","optional":true},"user_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_function":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key":{"type":"TypeString","optional":true},"key_vault_key":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"url":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_search":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"encrypted_credential":{"type":"TypeString","computed":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"search_service_key":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_sql_database":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_connection_string":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"service_principal_id":{"type":"TypeString","optional":true},"service_principal_key":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","optional":true},"use_managed_identity":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_azure_table_storage":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_cosmosdb":{"schema":{"account_endpoint":{"type":"TypeString","optional":true},"account_key":{"type":"TypeString","optional":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"database":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_cosmosdb_mongoapi":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"database":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"server_version_is_32_or_higher":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_data_lake_storage_gen2":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"service_principal_id":{"type":"TypeString","optional":true},"service_principal_key":{"type":"TypeString","optional":true},"storage_account_key":{"type":"TypeString","optional":true},"tenant":{"type":"TypeString","optional":true},"url":{"type":"TypeString","required":true},"use_managed_identity":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_key_vault":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_kusto":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"kusto_database_name":{"type":"TypeString","required":true},"kusto_endpoint":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"service_principal_id":{"type":"TypeString","optional":true},"service_principal_key":{"type":"TypeString","optional":true},"tenant":{"type":"TypeString","optional":true},"use_managed_identity":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_mysql":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_odata":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"basic_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"url":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_odbc":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"basic_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_postgresql":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_sftp":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"authentication_type":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"host":{"type":"TypeString","required":true},"host_key_fingerprint":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"password":{"type":"TypeString","required":true},"port":{"type":"TypeInt","required":true},"skip_host_key_validation":{"type":"TypeBool","optional":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_snowflake":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_sql_server":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_connection_string":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_synapse":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"connection_string":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"key_vault_password":{"type":"TypeList","optional":true,"elem":{"schema":{"linked_service_name":{"type":"TypeString","required":true},"secret_name":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_linked_service_web":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"authentication_type":{"type":"TypeString","required":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"integration_runtime_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"password":{"type":"TypeString","optional":true},"url":{"type":"TypeString","required":true},"username":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_managed_private_endpoint":{"schema":{"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"fqdns":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"subresource_name":{"type":"TypeString","optional":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_data_factory_pipeline":{"schema":{"activities_json":{"type":"TypeString","optional":true},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"concurrency":{"type":"TypeInt","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"folder":{"type":"TypeString","optional":true},"moniter_metrics_after_duration":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_trigger_blob_event":{"schema":{"activated":{"type":"TypeBool","optional":true,"default":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"blob_path_begins_with":{"type":"TypeString","optional":true},"blob_path_ends_with":{"type":"TypeString","optional":true},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"events":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"ignore_empty_blobs":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pipeline":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_trigger_custom_event":{"schema":{"activated":{"type":"TypeBool","optional":true,"default":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"eventgrid_topic_id":{"type":"TypeString","required":true,"forceNew":true},"events":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"pipeline":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"subject_begins_with":{"type":"TypeString","optional":true},"subject_ends_with":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_trigger_schedule":{"schema":{"activated":{"type":"TypeBool","optional":true,"default":true},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"end_time":{"type":"TypeString","optional":true},"frequency":{"type":"TypeString","optional":true,"default":"Minute"},"interval":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"pipeline":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"pipeline_name":{"type":"TypeString","optional":true,"computed":true},"pipeline_parameters":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_month":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}},"days_of_week":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":7},"hours":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}},"minutes":{"type":"TypeList","optional":true,"elem":{"type":"TypeInt"}},"monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"week":{"type":"TypeInt","optional":true},"weekday":{"type":"TypeString","required":true}}},"minItems":1}}},"maxItems":1,"minItems":1},"start_time":{"type":"TypeString","optional":true,"computed":true},"time_zone":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_factory_trigger_tumbling_window":{"schema":{"activated":{"type":"TypeBool","optional":true,"default":true},"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_factory_id":{"type":"TypeString","required":true,"forceNew":true},"delay":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"end_time":{"type":"TypeString","optional":true},"frequency":{"type":"TypeString","required":true,"forceNew":true},"interval":{"type":"TypeInt","required":true,"forceNew":true},"max_concurrency":{"type":"TypeInt","optional":true,"default":50},"name":{"type":"TypeString","required":true,"forceNew":true},"pipeline":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"retry":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeInt","optional":true,"default":30}}},"maxItems":1},"start_time":{"type":"TypeString","required":true,"forceNew":true},"trigger_dependency":{"type":"TypeSet","optional":true,"elem":{"schema":{"offset":{"type":"TypeString","optional":true},"size":{"type":"TypeString","optional":true},"trigger_name":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_instance_blob_storage":{"schema":{"backup_policy_id":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_instance_disk":{"schema":{"backup_policy_id":{"type":"TypeString","required":true},"disk_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"snapshot_resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_instance_postgresql":{"schema":{"backup_policy_id":{"type":"TypeString","required":true},"database_credential_key_vault_secret_id":{"type":"TypeString","optional":true},"database_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_policy_blob_storage":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"retention_duration":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_policy_disk":{"schema":{"backup_repeating_time_intervals":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"default_retention_duration":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"retention_rule":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"criteria":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"absolute_criteria":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"duration":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true,"forceNew":true}}}},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_policy_postgresql":{"schema":{"backup_repeating_time_intervals":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"default_retention_duration":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_rule":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"criteria":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"absolute_criteria":{"type":"TypeString","optional":true,"forceNew":true},"days_of_week":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"months_of_year":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"scheduled_backup_times":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1},"weeks_of_month":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"duration":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true,"forceNew":true}}}},"vault_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_backup_vault":{"schema":{"datastore_type":{"type":"TypeString","required":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"redundancy":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_protection_resource_guard":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vault_critical_operation_exclusion_list":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_share":{"schema":{"account_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"snapshot_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"recurrence":{"type":"TypeString","required":true},"start_time":{"type":"TypeString","required":true}}},"maxItems":1},"terms":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_share_account":{"schema":{"identity":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_data_share_dataset_blob_storage":{"schema":{"container_name":{"type":"TypeString","required":true,"forceNew":true},"data_share_id":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","optional":true,"forceNew":true},"folder_path":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_data_share_dataset_data_lake_gen2":{"schema":{"display_name":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","optional":true,"forceNew":true},"file_system_name":{"type":"TypeString","required":true,"forceNew":true},"folder_path":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"share_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_data_share_dataset_kusto_cluster":{"schema":{"display_name":{"type":"TypeString","computed":true},"kusto_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"kusto_cluster_location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"share_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_data_share_dataset_kusto_database":{"schema":{"display_name":{"type":"TypeString","computed":true},"kusto_cluster_location":{"type":"TypeString","computed":true},"kusto_database_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"share_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_database_migration_project":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_name":{"type":"TypeString","required":true,"forceNew":true},"source_platform":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_platform":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_database_migration_service":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databox_edge_device":{"schema":{"device_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"configured_role_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"culture":{"type":"TypeString","computed":true},"hcs_version":{"type":"TypeString","computed":true},"model":{"type":"TypeString","computed":true},"node_count":{"type":"TypeInt","computed":true},"serial_number":{"type":"TypeString","computed":true},"software_version":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"time_zone":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databox_edge_order":{"schema":{"contact":{"type":"TypeList","required":true,"elem":{"schema":{"company_name":{"type":"TypeString","required":true,"forceNew":true},"emails":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"device_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"return_tracking":{"type":"TypeSet","computed":true,"elem":{"schema":{"carrier_name":{"type":"TypeString","computed":true},"serial_number":{"type":"TypeString","computed":true},"tracking_id":{"type":"TypeString","computed":true},"tracking_url":{"type":"TypeString","computed":true}}}},"serial_number":{"type":"TypeString","computed":true},"shipment_address":{"type":"TypeList","required":true,"elem":{"schema":{"address":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":3},"city":{"type":"TypeString","required":true,"forceNew":true},"country":{"type":"TypeString","required":true,"forceNew":true},"postal_code":{"type":"TypeString","required":true,"forceNew":true},"state":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"shipment_history":{"type":"TypeSet","computed":true,"elem":{"schema":{"additional_details":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"comments":{"type":"TypeString","computed":true},"last_update":{"type":"TypeString","computed":true}}}},"shipment_tracking":{"type":"TypeSet","computed":true,"elem":{"schema":{"carrier_name":{"type":"TypeString","computed":true},"serial_number":{"type":"TypeString","computed":true},"tracking_id":{"type":"TypeString","computed":true},"tracking_url":{"type":"TypeString","computed":true}}}},"status":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_details":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"comments":{"type":"TypeString","computed":true},"info":{"type":"TypeString","computed":true},"last_update":{"type":"TypeString","computed":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_access_connector":{"schema":{"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_virtual_network_peering":{"schema":{"address_space_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allow_forwarded_traffic":{"type":"TypeBool","optional":true,"default":false},"allow_gateway_transit":{"type":"TypeBool","optional":true,"default":false},"allow_virtual_network_access":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"remote_address_space_prefixes":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"remote_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"use_remote_gateways":{"type":"TypeBool","optional":true,"default":false},"virtual_network_id":{"type":"TypeString","computed":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_workspace":{"schema":{"custom_parameters":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"machine_learning_workspace_id":{"type":"TypeString","optional":true,"forceNew":true},"nat_gateway_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"no_public_ip":{"type":"TypeBool","optional":true,"computed":true},"private_subnet_name":{"type":"TypeString","optional":true,"forceNew":true},"private_subnet_network_security_group_association_id":{"type":"TypeString","optional":true},"public_ip_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"public_subnet_name":{"type":"TypeString","optional":true,"forceNew":true},"public_subnet_network_security_group_association_id":{"type":"TypeString","optional":true},"storage_account_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"storage_account_sku_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vnet_address_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"customer_managed_key_enabled":{"type":"TypeBool","optional":true,"default":false},"disk_encryption_set_id":{"type":"TypeString","computed":true},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"load_balancer_backend_address_pool_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_disk_cmk_key_vault_key_id":{"type":"TypeString","optional":true},"managed_disk_cmk_rotation_to_latest_version_enabled":{"type":"TypeBool","optional":true},"managed_disk_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"managed_resource_group_id":{"type":"TypeString","computed":true},"managed_resource_group_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_services_cmk_key_vault_key_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_rules_required":{"type":"TypeString","optional":true,"computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"storage_account_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true},"workspace_url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_workspace_customer_managed_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_databricks_workspace_root_dbfs_customer_managed_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_datadog_monitor":{"schema":{"datadog_organization":{"type":"TypeList","required":true,"elem":{"schema":{"api_key":{"type":"TypeString","required":true,"forceNew":true},"application_key":{"type":"TypeString","required":true,"forceNew":true},"enterprise_app_id":{"type":"TypeString","optional":true,"forceNew":true},"id":{"type":"TypeString","computed":true},"linking_auth_code":{"type":"TypeString","optional":true,"forceNew":true},"linking_client_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","computed":true},"redirect_uri":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"marketplace_subscription_status":{"type":"TypeString","computed":true},"monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user":{"type":"TypeList","required":true,"elem":{"schema":{"email":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_datadog_monitor_sso_configuration":{"schema":{"datadog_monitor_id":{"type":"TypeString","required":true,"forceNew":true},"enterprise_application_id":{"type":"TypeString","required":true},"login_url":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"default":"default"},"single_sign_on_enabled":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_datadog_monitor_tag_rule":{"schema":{"datadog_monitor_id":{"type":"TypeString","required":true,"forceNew":true},"log":{"type":"TypeList","optional":true,"elem":{"schema":{"aad_log_enabled":{"type":"TypeBool","optional":true},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"resource_log_enabled":{"type":"TypeBool","optional":true},"subscription_log_enabled":{"type":"TypeBool","optional":true}}}},"metric":{"type":"TypeList","optional":true,"elem":{"schema":{"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}}},"name":{"type":"TypeString","optional":true,"default":"default"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dedicated_hardware_security_module":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"management_network_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"network_interface_private_ip_addresses":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"network_interface_private_ip_addresses":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"stamp_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dedicated_host":{"schema":{"auto_replace_on_failure":{"type":"TypeBool","optional":true,"default":true},"dedicated_host_group_id":{"type":"TypeString","required":true,"forceNew":true},"license_type":{"type":"TypeString","optional":true,"default":"None"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform_fault_domain":{"type":"TypeInt","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dedicated_host_group":{"schema":{"automatic_placement_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform_fault_domain_count":{"type":"TypeInt","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_global_vm_shutdown_schedule":{"schema":{"daily_recurrence_time":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"notification_settings":{"type":"TypeList","required":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"time_in_minutes":{"type":"TypeInt","optional":true,"default":30},"webhook_url":{"type":"TypeString","optional":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timezone":{"type":"TypeString","required":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_lab":{"schema":{"artifacts_storage_account_id":{"type":"TypeString","computed":true},"default_premium_storage_account_id":{"type":"TypeString","computed":true},"default_storage_account_id":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"premium_data_disk_storage_account_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_type":{"type":"TypeString","optional":true,"default":"Premium"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_linux_virtual_machine":{"schema":{"allow_claim":{"type":"TypeBool","optional":true,"default":true},"disallow_public_ip_address":{"type":"TypeBool","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"gallery_image_reference":{"type":"TypeList","required":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"inbound_nat_rule":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","required":true,"forceNew":true},"frontend_port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","required":true}}}},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"lab_subnet_name":{"type":"TypeString","required":true,"forceNew":true},"lab_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true},"password":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"size":{"type":"TypeString","required":true,"forceNew":true},"ssh_key":{"type":"TypeString","optional":true,"forceNew":true},"storage_type":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true},"username":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_policy":{"schema":{"description":{"type":"TypeString","optional":true},"evaluator_type":{"type":"TypeString","required":true,"forceNew":true},"fact_data":{"type":"TypeString","optional":true},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_set_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threshold":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_schedule":{"schema":{"daily_recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"time":{"type":"TypeString","required":true}}},"maxItems":1},"hourly_recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"minute":{"type":"TypeInt","required":true}}},"maxItems":1},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification_settings":{"type":"TypeList","required":true,"elem":{"schema":{"status":{"type":"TypeString","optional":true,"default":"Disabled"},"time_in_minutes":{"type":"TypeInt","optional":true},"webhook_url":{"type":"TypeString","optional":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Disabled"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"task_type":{"type":"TypeString","required":true},"time_zone_id":{"type":"TypeString","required":true},"weekly_recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"time":{"type":"TypeString","required":true},"week_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_virtual_network":{"schema":{"description":{"type":"TypeString","optional":true},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"use_in_virtual_machine_creation":{"type":"TypeString","optional":true,"default":"Allow"},"use_public_ip_address":{"type":"TypeString","optional":true,"default":"Allow"}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dev_test_windows_virtual_machine":{"schema":{"allow_claim":{"type":"TypeBool","optional":true,"default":true},"disallow_public_ip_address":{"type":"TypeBool","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"gallery_image_reference":{"type":"TypeList","required":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"inbound_nat_rule":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","required":true,"forceNew":true},"frontend_port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","required":true}}}},"lab_name":{"type":"TypeString","required":true,"forceNew":true},"lab_subnet_name":{"type":"TypeString","required":true,"forceNew":true},"lab_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true},"password":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"size":{"type":"TypeString","required":true,"forceNew":true},"storage_type":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true},"username":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_endpoint_eventgrid":{"schema":{"dead_letter_storage_secret":{"type":"TypeString","optional":true},"digital_twins_id":{"type":"TypeString","required":true,"forceNew":true},"eventgrid_topic_endpoint":{"type":"TypeString","required":true},"eventgrid_topic_primary_access_key":{"type":"TypeString","required":true},"eventgrid_topic_secondary_access_key":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_endpoint_eventhub":{"schema":{"dead_letter_storage_secret":{"type":"TypeString","optional":true},"digital_twins_id":{"type":"TypeString","required":true,"forceNew":true},"eventhub_primary_connection_string":{"type":"TypeString","required":true},"eventhub_secondary_connection_string":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_endpoint_servicebus":{"schema":{"dead_letter_storage_secret":{"type":"TypeString","optional":true},"digital_twins_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"servicebus_primary_connection_string":{"type":"TypeString","required":true},"servicebus_secondary_connection_string":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_instance":{"schema":{"host_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_digital_twins_time_series_database_connection":{"schema":{"digital_twins_id":{"type":"TypeString","required":true,"forceNew":true},"eventhub_consumer_group_name":{"type":"TypeString","optional":true,"default":"$Default","forceNew":true},"eventhub_name":{"type":"TypeString","required":true,"forceNew":true},"eventhub_namespace_endpoint_uri":{"type":"TypeString","required":true,"forceNew":true},"eventhub_namespace_id":{"type":"TypeString","required":true,"forceNew":true},"kusto_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"kusto_cluster_uri":{"type":"TypeString","required":true,"forceNew":true},"kusto_database_name":{"type":"TypeString","required":true,"forceNew":true},"kusto_table_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_disk_access":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_disk_encryption_set":{"schema":{"auto_key_rotation_enabled":{"type":"TypeBool","optional":true,"default":false},"encryption_type":{"type":"TypeString","optional":true,"default":"EncryptionAtRestWithCustomerKey","forceNew":true},"federated_client_id":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_key_id":{"type":"TypeString","required":true},"key_vault_key_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_disk_pool":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_disk_pool_iscsi_target":{"schema":{"acl_mode":{"type":"TypeString","required":true,"forceNew":true},"disks_pool_id":{"type":"TypeString","required":true,"forceNew":true},"endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"port":{"type":"TypeInt","computed":true},"target_iqn":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_disk_pool_iscsi_target_lun":{"schema":{"disk_pool_managed_disk_attachment_id":{"type":"TypeString","required":true,"forceNew":true},"iscsi_target_id":{"type":"TypeString","required":true,"forceNew":true},"lun":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_disk_pool_managed_disk_attachment":{"schema":{"disk_pool_id":{"type":"TypeString","required":true,"forceNew":true},"managed_disk_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_dns_a_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","optional":true},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_aaaa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","optional":true},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_caa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"flags":{"type":"TypeInt","required":true},"tag":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_cname_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","optional":true},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_mx_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"default":"@","forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"exchange":{"type":"TypeString","required":true},"preference":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_ns_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_ptr_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_srv_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"priority":{"type":"TypeInt","required":true},"target":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_txt_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"value":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_dns_zone":{"schema":{"max_number_of_record_sets":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"name_servers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"number_of_record_sets":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"soa_record":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email":{"type":"TypeString","required":true},"expire_time":{"type":"TypeInt","optional":true,"default":2419200},"fqdn":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","optional":true,"computed":true},"minimum_ttl":{"type":"TypeInt","optional":true,"default":300},"refresh_time":{"type":"TypeInt","optional":true,"default":3600},"retry_time":{"type":"TypeInt","optional":true,"default":300},"serial_number":{"type":"TypeInt","optional":true,"default":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","optional":true,"default":3600}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_elastic_cloud_elasticsearch":{"schema":{"elastic_cloud_deployment_id":{"type":"TypeString","computed":true},"elastic_cloud_email_address":{"type":"TypeString","required":true,"forceNew":true},"elastic_cloud_sso_default_url":{"type":"TypeString","computed":true},"elastic_cloud_user_id":{"type":"TypeString","computed":true},"elasticsearch_service_url":{"type":"TypeString","computed":true},"kibana_service_url":{"type":"TypeString","computed":true},"kibana_sso_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"filtering_tag":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"send_activity_logs":{"type":"TypeBool","optional":true,"default":false},"send_azuread_logs":{"type":"TypeBool","optional":true,"default":false},"send_subscription_logs":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"monitoring_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_email_communication_service":{"schema":{"data_location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_domain":{"schema":{"auto_create_topic_with_first_subscription":{"type":"TypeBool","optional":true,"default":true},"auto_delete_topic_with_last_subscription":{"type":"TypeBool","optional":true,"default":true},"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"inbound_ip_rule":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_mask":{"type":"TypeString","required":true}}},"maxItems":128},"input_mapping_default_values":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_version":{"type":"TypeString","optional":true,"forceNew":true},"event_type":{"type":"TypeString","optional":true,"forceNew":true},"subject":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"input_mapping_fields":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_version":{"type":"TypeString","optional":true,"forceNew":true},"event_time":{"type":"TypeString","optional":true,"forceNew":true},"event_type":{"type":"TypeString","optional":true,"forceNew":true},"id":{"type":"TypeString","optional":true,"forceNew":true},"subject":{"type":"TypeString","optional":true,"forceNew":true},"topic":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"input_schema":{"type":"TypeString","optional":true,"default":"EventGridSchema","forceNew":true},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_domain_topic":{"schema":{"domain_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_eventgrid_event_subscription":{"schema":{"advanced_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"bool_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeBool","required":true}}}},"is_not_null":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true}}}},"is_null_or_undefined":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true}}}},"number_greater_than":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_greater_than_or_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeFloat"},"maxItems":25}}}},"number_in_range":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeList","elem":{"type":"TypeFloat"},"maxItems":2,"minItems":2},"maxItems":25}}}},"number_less_than":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_less_than_or_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_not_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeFloat"},"maxItems":25}}}},"number_not_in_range":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeList","elem":{"type":"TypeFloat"},"maxItems":2,"minItems":2},"maxItems":25}}}},"string_begins_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_contains":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_ends_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_begins_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_contains":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_ends_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}}}},"maxItems":1},"advanced_filtering_on_arrays_enabled":{"type":"TypeBool","optional":true,"default":false},"azure_function_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"function_id":{"type":"TypeString","required":true},"max_events_per_batch":{"type":"TypeInt","optional":true},"preferred_batch_size_in_kilobytes":{"type":"TypeInt","optional":true}}},"maxItems":1},"dead_letter_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true},"user_assigned_identity":{"type":"TypeString","optional":true}}},"maxItems":1},"delivery_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true},"user_assigned_identity":{"type":"TypeString","optional":true}}},"maxItems":1},"delivery_property":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"secret":{"type":"TypeBool","optional":true},"source_field":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"event_delivery_schema":{"type":"TypeString","optional":true,"default":"EventGridSchema","forceNew":true},"eventhub_endpoint_id":{"type":"TypeString","optional":true,"computed":true},"expiration_time_utc":{"type":"TypeString","optional":true},"hybrid_connection_endpoint_id":{"type":"TypeString","optional":true,"computed":true},"included_event_types":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"labels":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"retry_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"event_time_to_live":{"type":"TypeInt","required":true},"max_delivery_attempts":{"type":"TypeInt","required":true}}},"maxItems":1},"scope":{"type":"TypeString","required":true,"forceNew":true},"service_bus_queue_endpoint_id":{"type":"TypeString","optional":true},"service_bus_topic_endpoint_id":{"type":"TypeString","optional":true},"storage_blob_dead_letter_destination":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_id":{"type":"TypeString","required":true},"storage_blob_container_name":{"type":"TypeString","required":true}}},"maxItems":1},"storage_queue_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"queue_message_time_to_live_in_seconds":{"type":"TypeInt","optional":true},"queue_name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}},"maxItems":1},"subject_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"case_sensitive":{"type":"TypeBool","optional":true},"subject_begins_with":{"type":"TypeString","optional":true},"subject_ends_with":{"type":"TypeString","optional":true}}},"maxItems":1},"webhook_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_app_id_or_uri":{"type":"TypeString","optional":true},"active_directory_tenant_id":{"type":"TypeString","optional":true},"base_url":{"type":"TypeString","computed":true},"max_events_per_batch":{"type":"TypeInt","optional":true},"preferred_batch_size_in_kilobytes":{"type":"TypeInt","optional":true},"url":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_system_topic":{"schema":{"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"metric_arm_resource_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_arm_resource_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"topic_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_system_topic_event_subscription":{"schema":{"advanced_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"bool_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeBool","required":true}}}},"is_not_null":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true}}}},"is_null_or_undefined":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true}}}},"number_greater_than":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_greater_than_or_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeFloat"},"maxItems":25}}}},"number_in_range":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeList","elem":{"type":"TypeFloat"},"maxItems":2,"minItems":2},"maxItems":25}}}},"number_less_than":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_less_than_or_equals":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"value":{"type":"TypeFloat","required":true}}}},"number_not_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeFloat"},"maxItems":25}}}},"number_not_in_range":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeList","elem":{"type":"TypeFloat"},"maxItems":2,"minItems":2},"maxItems":25}}}},"string_begins_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_contains":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_ends_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_begins_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_contains":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_ends_with":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}},"string_not_in":{"type":"TypeList","optional":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25}}}}}},"maxItems":1},"advanced_filtering_on_arrays_enabled":{"type":"TypeBool","optional":true,"default":false},"azure_function_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"function_id":{"type":"TypeString","required":true},"max_events_per_batch":{"type":"TypeInt","optional":true},"preferred_batch_size_in_kilobytes":{"type":"TypeInt","optional":true}}},"maxItems":1},"dead_letter_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true},"user_assigned_identity":{"type":"TypeString","optional":true}}},"maxItems":1},"delivery_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true},"user_assigned_identity":{"type":"TypeString","optional":true}}},"maxItems":1},"delivery_property":{"type":"TypeList","optional":true,"elem":{"schema":{"header_name":{"type":"TypeString","required":true},"secret":{"type":"TypeBool","optional":true},"source_field":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}}},"event_delivery_schema":{"type":"TypeString","optional":true,"default":"EventGridSchema","forceNew":true},"eventhub_endpoint_id":{"type":"TypeString","optional":true,"computed":true},"expiration_time_utc":{"type":"TypeString","optional":true},"hybrid_connection_endpoint_id":{"type":"TypeString","optional":true,"computed":true},"included_event_types":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"labels":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retry_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"event_time_to_live":{"type":"TypeInt","required":true},"max_delivery_attempts":{"type":"TypeInt","required":true}}},"maxItems":1},"service_bus_queue_endpoint_id":{"type":"TypeString","optional":true},"service_bus_topic_endpoint_id":{"type":"TypeString","optional":true},"storage_blob_dead_letter_destination":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_id":{"type":"TypeString","required":true},"storage_blob_container_name":{"type":"TypeString","required":true}}},"maxItems":1},"storage_queue_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"queue_message_time_to_live_in_seconds":{"type":"TypeInt","optional":true},"queue_name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}},"maxItems":1},"subject_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"case_sensitive":{"type":"TypeBool","optional":true},"subject_begins_with":{"type":"TypeString","optional":true},"subject_ends_with":{"type":"TypeString","optional":true}}},"maxItems":1},"system_topic":{"type":"TypeString","required":true,"forceNew":true},"webhook_endpoint":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_app_id_or_uri":{"type":"TypeString","optional":true},"active_directory_tenant_id":{"type":"TypeString","optional":true},"base_url":{"type":"TypeString","computed":true},"max_events_per_batch":{"type":"TypeInt","optional":true},"preferred_batch_size_in_kilobytes":{"type":"TypeInt","optional":true},"url":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventgrid_topic":{"schema":{"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"inbound_ip_rule":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_mask":{"type":"TypeString","required":true}}},"maxItems":128},"input_mapping_default_values":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_version":{"type":"TypeString","optional":true,"forceNew":true},"event_type":{"type":"TypeString","optional":true,"forceNew":true},"subject":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"input_mapping_fields":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_version":{"type":"TypeString","optional":true,"forceNew":true},"event_time":{"type":"TypeString","optional":true,"forceNew":true},"event_type":{"type":"TypeString","optional":true,"forceNew":true},"id":{"type":"TypeString","optional":true,"forceNew":true},"subject":{"type":"TypeString","optional":true,"forceNew":true},"topic":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"input_schema":{"type":"TypeString","optional":true,"default":"EventGridSchema","forceNew":true},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub":{"schema":{"capture_description":{"type":"TypeList","optional":true,"elem":{"schema":{"destination":{"type":"TypeList","required":true,"elem":{"schema":{"archive_name_format":{"type":"TypeString","required":true},"blob_container_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}},"maxItems":1},"enabled":{"type":"TypeBool","required":true},"encoding":{"type":"TypeString","required":true},"interval_in_seconds":{"type":"TypeInt","optional":true,"default":300},"size_limit_in_bytes":{"type":"TypeInt","optional":true,"default":314572800},"skip_empty_archives":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"message_retention":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"partition_count":{"type":"TypeInt","required":true,"forceNew":true},"partition_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Active"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_authorization_rule":{"schema":{"eventhub_name":{"type":"TypeString","required":true,"forceNew":true},"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_cluster":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":300,"update":30}},"azurerm_eventhub_consumer_group":{"schema":{"eventhub_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"user_metadata":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace":{"schema":{"auto_inflate_enabled":{"type":"TypeBool","optional":true,"default":false},"capacity":{"type":"TypeInt","optional":true,"default":1},"dedicated_cluster_id":{"type":"TypeString","optional":true,"forceNew":true},"default_primary_connection_string":{"type":"TypeString","computed":true},"default_primary_connection_string_alias":{"type":"TypeString","computed":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_connection_string":{"type":"TypeString","computed":true},"default_secondary_connection_string_alias":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maximum_throughput_units":{"type":"TypeInt","optional":true,"computed":true},"minimum_tls_version":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rulesets":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"default_action":{"type":"TypeString","required":true},"ip_rule":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_mask":{"type":"TypeString","required":true}}},"maxItems":128},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"trusted_service_access_enabled":{"type":"TypeBool","optional":true},"virtual_network_rule":{"type":"TypeSet","configMode":"Auto","optional":true,"elem":{"schema":{"ignore_missing_virtual_network_service_endpoint":{"type":"TypeBool","optional":true},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":128}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace_customer_managed_key":{"schema":{"eventhub_namespace_id":{"type":"TypeString","required":true,"forceNew":true},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"key_vault_key_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace_disaster_recovery_config":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"partner_namespace_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_eventhub_namespace_schema_group":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"schema_compatibility":{"type":"TypeString","required":true,"forceNew":true},"schema_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_express_route_circuit":{"schema":{"allow_classic_operations":{"type":"TypeBool","optional":true,"default":false},"authorization_key":{"type":"TypeString","optional":true},"bandwidth_in_gbps":{"type":"TypeFloat","optional":true},"bandwidth_in_mbps":{"type":"TypeInt","optional":true},"express_route_port_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"peering_location":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_key":{"type":"TypeString","computed":true},"service_provider_name":{"type":"TypeString","optional":true,"forceNew":true},"service_provider_provisioning_state":{"type":"TypeString","computed":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"family":{"type":"TypeString","required":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_circuit_authorization":{"schema":{"authorization_key":{"type":"TypeString","computed":true},"authorization_use_status":{"type":"TypeString","computed":true},"express_route_circuit_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_circuit_connection":{"schema":{"address_prefix_ipv4":{"type":"TypeString","required":true,"forceNew":true},"address_prefix_ipv6":{"type":"TypeString","optional":true},"authorization_key":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"peer_peering_id":{"type":"TypeString","required":true,"forceNew":true},"peering_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_circuit_peering":{"schema":{"azure_asn":{"type":"TypeInt","computed":true},"express_route_circuit_name":{"type":"TypeString","required":true,"forceNew":true},"gateway_manager_etag":{"type":"TypeString","computed":true},"ipv4_enabled":{"type":"TypeBool","optional":true,"default":true},"ipv6":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"microsoft_peering":{"type":"TypeList","optional":true,"elem":{"schema":{"advertised_communities":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"advertised_public_prefixes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"customer_asn":{"type":"TypeInt","optional":true,"default":0},"routing_registry_name":{"type":"TypeString","optional":true,"default":"NONE"}}},"maxItems":1},"primary_peer_address_prefix":{"type":"TypeString","required":true},"route_filter_id":{"type":"TypeString","optional":true},"secondary_peer_address_prefix":{"type":"TypeString","required":true}}},"maxItems":1},"microsoft_peering_config":{"type":"TypeList","optional":true,"elem":{"schema":{"advertised_communities":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"advertised_public_prefixes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"customer_asn":{"type":"TypeInt","optional":true,"default":0},"routing_registry_name":{"type":"TypeString","optional":true,"default":"NONE"}}},"maxItems":1},"peer_asn":{"type":"TypeInt","optional":true,"computed":true},"peering_type":{"type":"TypeString","required":true},"primary_azure_port":{"type":"TypeString","computed":true},"primary_peer_address_prefix":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route_filter_id":{"type":"TypeString","optional":true},"secondary_azure_port":{"type":"TypeString","computed":true},"secondary_peer_address_prefix":{"type":"TypeString","optional":true},"shared_key":{"type":"TypeString","optional":true},"vlan_id":{"type":"TypeInt","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_connection":{"schema":{"authorization_key":{"type":"TypeString","optional":true},"enable_internet_security":{"type":"TypeBool","optional":true},"express_route_circuit_peering_id":{"type":"TypeString","required":true,"forceNew":true},"express_route_gateway_bypass_enabled":{"type":"TypeBool","optional":true,"default":false},"express_route_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"routing":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"associated_route_table_id":{"type":"TypeString","optional":true,"computed":true},"inbound_route_map_id":{"type":"TypeString","optional":true},"outbound_route_map_id":{"type":"TypeString","optional":true},"propagated_route_table":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"labels":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"route_table_ids":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"routing_weight":{"type":"TypeInt","optional":true,"default":0}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_gateway":{"schema":{"allow_non_virtual_wan_traffic":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scale_units":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_express_route_port":{"schema":{"bandwidth_in_gbps":{"type":"TypeInt","required":true,"forceNew":true},"billing_type":{"type":"TypeString","optional":true,"computed":true},"encapsulation":{"type":"TypeString","required":true,"forceNew":true},"ethertype":{"type":"TypeString","computed":true},"guid":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"link1":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"admin_enabled":{"type":"TypeBool","optional":true,"default":false},"connector_type":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"interface_name":{"type":"TypeString","computed":true},"macsec_cak_keyvault_secret_id":{"type":"TypeString","optional":true},"macsec_cipher":{"type":"TypeString","optional":true,"default":"GcmAes128"},"macsec_ckn_keyvault_secret_id":{"type":"TypeString","optional":true},"patch_panel_id":{"type":"TypeString","computed":true},"rack_id":{"type":"TypeString","computed":true},"router_name":{"type":"TypeString","computed":true}}},"maxItems":1,"minItems":1},"link2":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"admin_enabled":{"type":"TypeBool","optional":true,"default":false},"connector_type":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"interface_name":{"type":"TypeString","computed":true},"macsec_cak_keyvault_secret_id":{"type":"TypeString","optional":true},"macsec_cipher":{"type":"TypeString","optional":true,"default":"GcmAes128"},"macsec_ckn_keyvault_secret_id":{"type":"TypeString","optional":true},"patch_panel_id":{"type":"TypeString","computed":true},"rack_id":{"type":"TypeString","computed":true},"router_name":{"type":"TypeString","computed":true}}},"maxItems":1,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"mtu":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"peering_location":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_express_route_port_authorization":{"schema":{"authorization_key":{"type":"TypeString","computed":true},"authorization_use_status":{"type":"TypeString","computed":true},"express_route_port_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_federated_identity_credential":{"schema":{"audience":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1},"issuer":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parent_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subject":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_firewall":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"firewall_policy_id":{"type":"TypeString","optional":true},"ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"private_ip_address":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","optional":true},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"management_ip_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"private_ip_address":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"sku_tier":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_intel_mode":{"type":"TypeString","optional":true,"computed":true},"virtual_hub":{"type":"TypeList","optional":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_count":{"type":"TypeInt","optional":true,"default":1},"virtual_hub_id":{"type":"TypeString","required":true}}},"maxItems":1},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_firewall_application_rule_collection":{"schema":{"action":{"type":"TypeString","required":true},"azure_firewall_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"fqdn_tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"type":{"type":"TypeString","required":true}}},"minItems":1},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"target_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_firewall_nat_rule_collection":{"schema":{"action":{"type":"TypeString","required":true},"azure_firewall_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"destination_addresses":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"destination_ports":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"translated_address":{"type":"TypeString","required":true},"translated_port":{"type":"TypeString","required":true}}},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_firewall_network_rule_collection":{"schema":{"action":{"type":"TypeString","required":true},"azure_firewall_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"destination_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_ports":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_firewall_policy":{"schema":{"auto_learn_private_ranges_enabled":{"type":"TypeBool","optional":true},"base_policy_id":{"type":"TypeString","optional":true},"child_policies":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns":{"type":"TypeList","optional":true,"elem":{"schema":{"proxy_enabled":{"type":"TypeBool","optional":true,"default":false},"servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"explicit_proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"enable_pac_file":{"type":"TypeBool","optional":true},"enabled":{"type":"TypeBool","optional":true},"http_port":{"type":"TypeInt","optional":true},"https_port":{"type":"TypeInt","optional":true},"pac_file":{"type":"TypeString","optional":true},"pac_file_port":{"type":"TypeInt","optional":true}}},"maxItems":1},"firewalls":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"insights":{"type":"TypeList","optional":true,"elem":{"schema":{"default_log_analytics_workspace_id":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","required":true},"log_analytics_workspace":{"type":"TypeList","optional":true,"elem":{"schema":{"firewall_location":{"type":"TypeString","required":true},"id":{"type":"TypeString","required":true}}}},"retention_in_days":{"type":"TypeInt","optional":true}}},"maxItems":1},"intrusion_detection":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","optional":true},"private_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"signature_overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"state":{"type":"TypeString","optional":true}}}},"traffic_bypass":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"destination_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_ip_groups":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_ports":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true},"source_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule_collection_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"sku":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"sql_redirect_allowed":{"type":"TypeBool","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_intelligence_allowlist":{"type":"TypeList","optional":true,"elem":{"schema":{"fqdns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"ip_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"threat_intelligence_mode":{"type":"TypeString","optional":true,"default":"Alert"},"tls_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_secret_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_firewall_policy_rule_collection_group":{"schema":{"application_rule_collection":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"destination_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_fqdn_tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"type":{"type":"TypeString","required":true}}}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"terminate_tls":{"type":"TypeBool","optional":true},"web_categories":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}}},"minItems":1},"firewall_policy_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"nat_rule_collection":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"destination_address":{"type":"TypeString","optional":true},"destination_ports":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"translated_address":{"type":"TypeString","optional":true},"translated_fqdn":{"type":"TypeString","optional":true},"translated_port":{"type":"TypeInt","required":true}}},"minItems":1}}},"minItems":1},"network_rule_collection":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"destination_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_ports":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source_ip_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}}},"minItems":1},"priority":{"type":"TypeInt","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_fluid_relay_server":{"schema":{"frs_tenant_id":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"orderer_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_key":{"type":"TypeString","computed":true},"service_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"storage_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"storage_sku":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_frontdoor":{"schema":{"backend_pool":{"type":"TypeList","required":true,"elem":{"schema":{"backend":{"type":"TypeList","required":true,"elem":{"schema":{"address":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"host_header":{"type":"TypeString","required":true},"http_port":{"type":"TypeInt","required":true},"https_port":{"type":"TypeInt","required":true},"priority":{"type":"TypeInt","optional":true,"default":1},"weight":{"type":"TypeInt","optional":true,"default":50}}},"maxItems":500},"health_probe_name":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"load_balancing_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"backend_pool_health_probe":{"type":"TypeList","required":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"id":{"type":"TypeString","computed":true},"interval_in_seconds":{"type":"TypeInt","optional":true,"default":120},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true,"default":"/"},"probe_method":{"type":"TypeString","optional":true,"default":"GET"},"protocol":{"type":"TypeString","optional":true,"default":"Http"}}},"maxItems":5000},"backend_pool_health_probes":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"backend_pool_load_balancing":{"type":"TypeList","required":true,"elem":{"schema":{"additional_latency_milliseconds":{"type":"TypeInt","optional":true,"default":0},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"sample_size":{"type":"TypeInt","optional":true,"default":4},"successful_samples_required":{"type":"TypeInt","optional":true,"default":2}}},"maxItems":5000},"backend_pool_load_balancing_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"backend_pool_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_pools_send_receive_timeout_seconds":{"type":"TypeInt","optional":true,"default":60},"enforce_backend_pools_certificate_name_check":{"type":"TypeBool","required":true}}}},"backend_pools":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"cname":{"type":"TypeString","computed":true},"explicit_resource_order":{"type":"TypeList","computed":true,"elem":{"schema":{"backend_pool_health_probe_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"backend_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"backend_pool_load_balancing_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"frontend_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"routing_rule_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"friendly_name":{"type":"TypeString","optional":true},"frontend_endpoint":{"type":"TypeList","required":true,"elem":{"schema":{"host_name":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"session_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"session_affinity_ttl_seconds":{"type":"TypeInt","optional":true,"default":0},"web_application_firewall_policy_link_id":{"type":"TypeString","optional":true}}},"maxItems":500},"frontend_endpoints":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"header_frontdoor_id":{"type":"TypeString","computed":true},"load_balancer_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_rule":{"type":"TypeList","required":true,"elem":{"schema":{"accepted_protocols":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":2},"enabled":{"type":"TypeBool","optional":true,"default":true},"forwarding_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_pool_name":{"type":"TypeString","required":true},"cache_duration":{"type":"TypeString","optional":true},"cache_enabled":{"type":"TypeBool","optional":true,"default":false},"cache_query_parameter_strip_directive":{"type":"TypeString","optional":true,"default":"StripAll"},"cache_query_parameters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"cache_use_dynamic_compression":{"type":"TypeBool","optional":true,"default":false},"custom_forwarding_path":{"type":"TypeString","optional":true},"forwarding_protocol":{"type":"TypeString","optional":true,"default":"HttpsOnly"}}},"maxItems":1},"frontend_endpoints":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":500},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"patterns_to_match":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":25},"redirect_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_fragment":{"type":"TypeString","optional":true},"custom_host":{"type":"TypeString","optional":true},"custom_path":{"type":"TypeString","optional":true},"custom_query_string":{"type":"TypeString","optional":true},"redirect_protocol":{"type":"TypeString","required":true},"redirect_type":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":500},"routing_rules":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_frontdoor_custom_https_configuration":{"schema":{"custom_https_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_key_vault_certificate_secret_name":{"type":"TypeString","optional":true},"azure_key_vault_certificate_secret_version":{"type":"TypeString","optional":true},"azure_key_vault_certificate_vault_id":{"type":"TypeString","optional":true},"certificate_source":{"type":"TypeString","optional":true,"default":"FrontDoor"},"minimum_tls_version":{"type":"TypeString","computed":true},"provisioning_state":{"type":"TypeString","computed":true},"provisioning_substate":{"type":"TypeString","computed":true}}},"maxItems":1},"custom_https_provisioning_enabled":{"type":"TypeBool","required":true},"frontend_endpoint_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_frontdoor_firewall_policy":{"schema":{"custom_block_response_body":{"type":"TypeString","optional":true},"custom_block_response_status_code":{"type":"TypeInt","optional":true},"custom_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"match_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"match_values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":600},"match_variable":{"type":"TypeString","required":true},"negation_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true},"transforms":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":5}}},"maxItems":10},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","optional":true,"default":1},"rate_limit_duration_in_minutes":{"type":"TypeInt","optional":true,"default":1},"rate_limit_threshold":{"type":"TypeInt","optional":true,"default":10},"type":{"type":"TypeString","required":true}}},"maxItems":100},"enabled":{"type":"TypeBool","optional":true,"default":true},"frontend_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"managed_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"override":{"type":"TypeList","optional":true,"elem":{"schema":{"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":false},"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"match_variable":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true}}},"maxItems":100},"rule_id":{"type":"TypeString","required":true}}},"maxItems":1000},"rule_group_name":{"type":"TypeString","required":true}}},"maxItems":100},"type":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":100},"mode":{"type":"TypeString","optional":true,"default":"Prevention"},"name":{"type":"TypeString","required":true,"forceNew":true},"redirect_url":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_frontdoor_rules_engine":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"frontdoor_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"request_header":{"type":"TypeList","optional":true,"elem":{"schema":{"header_action_type":{"type":"TypeString","optional":true},"header_name":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}},"maxItems":100},"response_header":{"type":"TypeList","optional":true,"elem":{"schema":{"header_action_type":{"type":"TypeString","optional":true},"header_name":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}},"maxItems":100}}},"maxItems":1},"match_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"negate_condition":{"type":"TypeBool","optional":true,"default":false},"operator":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true},"transform":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":6},"value":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":25},"variable":{"type":"TypeString","optional":true}}},"maxItems":100},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true}}},"maxItems":100}},"timeouts":{"create":360,"read":5,"delete":360,"update":360}},"azurerm_function_app":{"schema":{"app_service_plan_id":{"type":"TypeString","required":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true}}},"maxItems":1},"additional_login_params":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true},"consumer_secret":{"type":"TypeString","required":true}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true}}},"maxItems":1},"client_cert_mode":{"type":"TypeString","optional":true},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true},"default_hostname":{"type":"TypeString","computed":true},"enable_builtin_logging":{"type":"TypeBool","optional":true,"default":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_type":{"type":"TypeString","optional":true,"default":"","forceNew":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":false},"app_scale_limit":{"type":"TypeInt","optional":true,"computed":true},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"computed":true},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"java_version":{"type":"TypeString","optional":true},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"default":false},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"source_control":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"branch":{"type":"TypeString","optional":true,"computed":true},"manual_integration":{"type":"TypeBool","optional":true,"computed":true},"repo_url":{"type":"TypeString","optional":true,"computed":true},"rollback_enabled":{"type":"TypeBool","optional":true,"computed":true},"use_mercurial":{"type":"TypeBool","optional":true,"computed":true}}},"maxItems":1},"storage_account_access_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"default":"~1"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_function_app_active_slot":{"schema":{"last_successful_swap":{"type":"TypeString","description":"The timestamp of the last successful swap with `Production`","computed":true},"overwrite_network_config":{"type":"TypeBool","optional":true,"default":true,"description":"The swap action should overwrite the Production slot's network configuration with the configuration from this slot. Defaults to `true`.","forceNew":true},"slot_id":{"type":"TypeString","required":true,"description":"The ID of the Slot to swap with `Production`."}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_function_app_function":{"schema":{"config_json":{"type":"TypeString","required":true,"description":"The config for this Function in JSON format."},"config_url":{"type":"TypeString","description":"The URL of the configuration JSON.","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this function be enabled. Defaults to `true`."},"file":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"content":{"type":"TypeString","required":true,"description":"The content of the file.","forceNew":true},"name":{"type":"TypeString","required":true,"description":"The filename of the file to be uploaded.","forceNew":true}}},"minItems":1},"function_app_id":{"type":"TypeString","required":true,"description":"The ID of the Function App in which this function should reside.","forceNew":true},"invocation_url":{"type":"TypeString","description":"The invocation URL.","computed":true},"language":{"type":"TypeString","optional":true,"description":"The language the Function is written in."},"name":{"type":"TypeString","required":true,"description":"The name of the function.","forceNew":true},"script_root_path_url":{"type":"TypeString","description":"The Script root path URL.","computed":true},"script_url":{"type":"TypeString","description":"The script URL.","computed":true},"secrets_file_url":{"type":"TypeString","description":"The URL for the Secrets File.","computed":true},"test_data":{"type":"TypeString","optional":true,"description":"The test data for the function."},"test_data_url":{"type":"TypeString","description":"The Test data URL.","computed":true},"url":{"type":"TypeString","description":"The function URL.","computed":true}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_function_app_hybrid_connection":{"schema":{"function_app_id":{"type":"TypeString","required":true,"description":"The ID of the Function App for this Hybrid Connection.","forceNew":true},"hostname":{"type":"TypeString","required":true,"description":"The hostname of the endpoint."},"namespace_name":{"type":"TypeString","description":"The name of the Relay Namespace.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port to use for the endpoint"},"relay_id":{"type":"TypeString","required":true,"description":"The ID of the Relay Hybrid Connection to use.","forceNew":true},"relay_name":{"type":"TypeString","description":"The name of the Relay in use.","computed":true},"send_key_name":{"type":"TypeString","optional":true,"default":"RootManageSharedAccessKey","description":"The name of the Relay key with `Send` permission to use. Defaults to `RootManageSharedAccessKey`"},"send_key_value":{"type":"TypeString","description":"The Primary Access Key for the `send_key_name`","computed":true},"service_bus_namespace":{"type":"TypeString","description":"The Service Bus Namespace.","computed":true},"service_bus_suffix":{"type":"TypeString","description":"The suffix for the endpoint.","computed":true}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_function_app_slot":{"schema":{"app_service_plan_id":{"type":"TypeString","required":true,"forceNew":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true}}},"maxItems":1},"additional_login_params":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","required":true},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true},"app_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true},"oauth_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true},"consumer_secret":{"type":"TypeString","required":true}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true}}},"maxItems":1},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"daily_memory_time_quota":{"type":"TypeInt","optional":true},"default_hostname":{"type":"TypeString","computed":true},"enable_builtin_logging":{"type":"TypeBool","optional":true,"default":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"function_app_name":{"type":"TypeString","required":true,"forceNew":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_type":{"type":"TypeString","optional":true,"forceNew":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":false},"app_scale_limit":{"type":"TypeInt","optional":true,"computed":true},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"computed":true},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"java_version":{"type":"TypeString","optional":true},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"default":false},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"storage_account_access_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"default":"~1"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_gallery_application":{"schema":{"description":{"type":"TypeString","optional":true},"end_of_life_date":{"type":"TypeString","optional":true},"eula":{"type":"TypeString","optional":true},"gallery_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"privacy_statement_uri":{"type":"TypeString","optional":true},"release_note_uri":{"type":"TypeString","optional":true},"supported_os_type":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_gallery_application_version":{"schema":{"enable_health_check":{"type":"TypeBool","optional":true,"default":false},"end_of_life_date":{"type":"TypeString","optional":true},"exclude_from_latest":{"type":"TypeBool","optional":true,"default":false},"gallery_application_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"manage_action":{"type":"TypeList","required":true,"elem":{"schema":{"install":{"type":"TypeString","required":true,"forceNew":true},"remove":{"type":"TypeString","required":true,"forceNew":true},"update":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeList","required":true,"elem":{"schema":{"default_configuration_link":{"type":"TypeString","optional":true,"forceNew":true},"media_link":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_region":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"regional_replica_count":{"type":"TypeInt","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"Standard_LRS"}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_graph_account":{"schema":{"application_id":{"type":"TypeString","required":true,"forceNew":true},"billing_plan_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_graph_services_account":{"schema":{"application_id":{"type":"TypeString","required":true,"forceNew":true},"billing_plan_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hdinsight_hadoop_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"hadoop":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"edge_node":{"type":"TypeList","optional":true,"elem":{"schema":{"https_endpoints":{"type":"TypeList","optional":true,"elem":{"schema":{"access_modes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"destination_port":{"type":"TypeInt","optional":true},"disable_gateway_auth":{"type":"TypeBool","optional":true},"private_ip_address":{"type":"TypeString","optional":true},"sub_domain_suffix":{"type":"TypeString","optional":true}}}},"install_script_action":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"target_instance_count":{"type":"TypeInt","required":true},"uninstall_script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"vm_size":{"type":"TypeString","required":true}}},"maxItems":1},"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"autoscale":{"type":"TypeList","optional":true,"elem":{"schema":{"capacity":{"type":"TypeList","optional":true,"elem":{"schema":{"max_instance_count":{"type":"TypeInt","required":true},"min_instance_count":{"type":"TypeInt","required":true}}},"maxItems":1},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"target_instance_count":{"type":"TypeInt","required":true},"time":{"type":"TypeString","required":true}}},"minItems":1},"timezone":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hdinsight_hbase_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"hbase":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"autoscale":{"type":"TypeList","optional":true,"elem":{"schema":{"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"target_instance_count":{"type":"TypeInt","required":true},"time":{"type":"TypeString","required":true}}},"minItems":1},"timezone":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hdinsight_interactive_query_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"interactive_hive":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"encryption_in_transit_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"autoscale":{"type":"TypeList","optional":true,"elem":{"schema":{"capacity":{"type":"TypeList","optional":true,"elem":{"schema":{"max_instance_count":{"type":"TypeInt","required":true},"min_instance_count":{"type":"TypeInt","required":true}}},"maxItems":1},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"target_instance_count":{"type":"TypeInt","required":true},"time":{"type":"TypeString","required":true}}},"minItems":1},"timezone":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hdinsight_kafka_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"kafka":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"encryption_in_transit_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"kafka_rest_proxy_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rest_proxy":{"type":"TypeList","optional":true,"elem":{"schema":{"security_group_id":{"type":"TypeString","required":true,"forceNew":true},"security_group_name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"kafka_management_node":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"number_of_disks_per_node":{"type":"TypeInt","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hdinsight_spark_cluster":{"schema":{"cluster_version":{"type":"TypeString","required":true,"forceNew":true},"component_version":{"type":"TypeList","required":true,"elem":{"schema":{"spark":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"compute_isolation":{"type":"TypeList","optional":true,"elem":{"schema":{"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"host_sku":{"type":"TypeString","optional":true}}},"maxItems":1},"disk_encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_algorithm":{"type":"TypeString","optional":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"key_vault_managed_identity_id":{"type":"TypeString","optional":true}}}},"encryption_in_transit_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"gateway":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"https_endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"metastores":{"type":"TypeList","optional":true,"elem":{"schema":{"ambari":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"hive":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"oozie":{"type":"TypeList","optional":true,"elem":{"schema":{"database_name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_direction":{"type":"TypeString","optional":true,"default":"Inbound","forceNew":true},"private_link_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"schema":{"head_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"worker_node":{"type":"TypeList","required":true,"elem":{"schema":{"autoscale":{"type":"TypeList","optional":true,"elem":{"schema":{"capacity":{"type":"TypeList","optional":true,"elem":{"schema":{"max_instance_count":{"type":"TypeInt","required":true},"min_instance_count":{"type":"TypeInt","required":true}}},"maxItems":1},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"target_instance_count":{"type":"TypeInt","required":true},"time":{"type":"TypeString","required":true}}},"minItems":1},"timezone":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"target_instance_count":{"type":"TypeInt","required":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"zookeeper_node":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","optional":true,"forceNew":true},"script_actions":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true},"uri":{"type":"TypeString","required":true}}},"minItems":1},"ssh_keys":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"security_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"aadds_resource_id":{"type":"TypeString","required":true,"forceNew":true},"cluster_users_group_dns":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"domain_user_password":{"type":"TypeString","required":true,"forceNew":true},"domain_username":{"type":"TypeString","required":true,"forceNew":true},"ldaps_urls":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"msi_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh_endpoint":{"type":"TypeString","computed":true},"storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"is_default":{"type":"TypeBool","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","optional":true,"forceNew":true}}}},"storage_account_gen2":{"type":"TypeList","optional":true,"elem":{"schema":{"filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"is_default":{"type":"TypeBool","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","required":true,"forceNew":true},"storage_resource_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","required":true,"forceNew":true},"tls_min_version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_healthbot":{"schema":{"bot_management_portal_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_healthcare_dicom_service":{"schema":{"authentication":{"type":"TypeList","computed":true,"elem":{"schema":{"audience":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"authority":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint":{"type":"TypeSet","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_url":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":30,"update":90}},"azurerm_healthcare_fhir_service":{"schema":{"access_policy_object_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"authentication":{"type":"TypeList","required":true,"elem":{"schema":{"audience":{"type":"TypeString","required":true},"authority":{"type":"TypeString","required":true},"smart_proxy_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"configuration_export_storage_account_name":{"type":"TypeString","optional":true},"container_registry_login_server_url":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_methods":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":64},"credentials_allowed":{"type":"TypeBool","optional":true,"default":false},"max_age_in_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"kind":{"type":"TypeString","optional":true,"default":"fhir-R4","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"oci_artifact":{"type":"TypeList","optional":true,"elem":{"schema":{"digest":{"type":"TypeString","optional":true},"image_name":{"type":"TypeString","optional":true},"login_server":{"type":"TypeString","required":true}}}},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":30,"update":90}},"azurerm_healthcare_medtech_service":{"schema":{"device_mapping_json":{"type":"TypeString","required":true},"eventhub_consumer_group_name":{"type":"TypeString","required":true},"eventhub_name":{"type":"TypeString","required":true},"eventhub_namespace_name":{"type":"TypeString","required":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_healthcare_medtech_service_fhir_destination":{"schema":{"destination_fhir_mapping_json":{"type":"TypeString","required":true},"destination_fhir_service_id":{"type":"TypeString","required":true},"destination_identity_resolution_type":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"medtech_service_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_healthcare_service":{"schema":{"access_policy_object_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"authentication_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"audience":{"type":"TypeString","optional":true},"authority":{"type":"TypeString","optional":true},"smart_proxy_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"cors_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allow_credentials":{"type":"TypeBool","optional":true},"allowed_headers":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_methods":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":64},"max_age_in_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"cosmosdb_key_vault_key_versionless_id":{"type":"TypeString","optional":true,"forceNew":true},"cosmosdb_throughput":{"type":"TypeInt","optional":true,"default":1000},"kind":{"type":"TypeString","optional":true,"default":"fhir"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_healthcare_workspace":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_connection":{"type":"TypeSet","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hpc_cache":{"schema":{"automatically_rotate_key_to_latest_enabled":{"type":"TypeBool","optional":true},"cache_size_in_gb":{"type":"TypeInt","required":true,"forceNew":true},"default_access_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"access_rule":{"type":"TypeSet","required":true,"elem":{"schema":{"access":{"type":"TypeString","required":true},"anonymous_gid":{"type":"TypeInt","optional":true},"anonymous_uid":{"type":"TypeInt","optional":true},"filter":{"type":"TypeString","optional":true},"root_squash_enabled":{"type":"TypeBool","optional":true},"scope":{"type":"TypeString","required":true},"submount_access_enabled":{"type":"TypeBool","optional":true},"suid_enabled":{"type":"TypeBool","optional":true}}},"maxItems":3,"minItems":1}}},"maxItems":1,"minItems":1},"directory_active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"cache_netbios_name":{"type":"TypeString","required":true},"dns_primary_ip":{"type":"TypeString","required":true},"dns_secondary_ip":{"type":"TypeString","optional":true},"domain_name":{"type":"TypeString","required":true},"domain_netbios_name":{"type":"TypeString","required":true},"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"directory_flat_file":{"type":"TypeList","optional":true,"elem":{"schema":{"group_file_uri":{"type":"TypeString","required":true},"password_file_uri":{"type":"TypeString","required":true}}},"maxItems":1},"directory_ldap":{"type":"TypeList","optional":true,"elem":{"schema":{"base_dn":{"type":"TypeString","required":true},"bind":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"dn":{"type":"TypeString","required":true},"password":{"type":"TypeString","required":true}}},"maxItems":1},"certificate_validation_uri":{"type":"TypeString","optional":true},"download_certificate_automatically":{"type":"TypeBool","optional":true},"encrypted":{"type":"TypeBool","optional":true},"server":{"type":"TypeString","required":true}}},"maxItems":1},"dns":{"type":"TypeList","optional":true,"elem":{"schema":{"search_domain":{"type":"TypeString","optional":true},"servers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":3}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"key_vault_key_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mount_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"mtu":{"type":"TypeInt","optional":true,"default":1500},"name":{"type":"TypeString","required":true,"forceNew":true},"ntp_server":{"type":"TypeString","optional":true,"default":"time.windows.com"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_hpc_cache_access_policy":{"schema":{"access_rule":{"type":"TypeSet","required":true,"elem":{"schema":{"access":{"type":"TypeString","required":true},"anonymous_gid":{"type":"TypeInt","optional":true},"anonymous_uid":{"type":"TypeInt","optional":true},"filter":{"type":"TypeString","optional":true},"root_squash_enabled":{"type":"TypeBool","optional":true},"scope":{"type":"TypeString","required":true},"submount_access_enabled":{"type":"TypeBool","optional":true},"suid_enabled":{"type":"TypeBool","optional":true}}},"maxItems":3,"minItems":1},"hpc_cache_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hpc_cache_blob_nfs_target":{"schema":{"access_policy_name":{"type":"TypeString","optional":true,"default":"default"},"cache_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_path":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"usage_model":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hpc_cache_blob_target":{"schema":{"access_policy_name":{"type":"TypeString","optional":true,"default":"default"},"cache_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_path":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_hpc_cache_nfs_target":{"schema":{"cache_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_junction":{"type":"TypeSet","required":true,"elem":{"schema":{"access_policy_name":{"type":"TypeString","optional":true,"default":"default"},"namespace_path":{"type":"TypeString","required":true},"nfs_export":{"type":"TypeString","required":true},"target_path":{"type":"TypeString","optional":true,"default":""}}},"maxItems":10,"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"target_host_name":{"type":"TypeString","required":true,"forceNew":true},"usage_model":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_image":{"schema":{"data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","optional":true,"computed":true},"caching":{"type":"TypeString","optional":true,"default":"None"},"lun":{"type":"TypeInt","optional":true},"managed_disk_id":{"type":"TypeString","optional":true,"forceNew":true},"size_gb":{"type":"TypeInt","optional":true,"computed":true}}}},"hyper_v_generation":{"type":"TypeString","optional":true,"default":"V1","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_disk":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"caching":{"type":"TypeString","optional":true,"default":"None"},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"managed_disk_id":{"type":"TypeString","optional":true,"computed":true},"os_state":{"type":"TypeString","optional":true},"os_type":{"type":"TypeString","optional":true},"size_gb":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_virtual_machine_id":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_resilient":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_integration_service_environment":{"schema":{"access_endpoint_type":{"type":"TypeString","required":true,"forceNew":true},"connector_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connector_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"default":"Developer_0"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":4,"minItems":4},"workflow_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":300,"read":5,"delete":300,"update":300}},"azurerm_iot_security_device_group":{"schema":{"allow_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_from_ips_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"connection_to_ips_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"local_users_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"processes_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"range_rule":{"type":"TypeSet","optional":true,"elem":{"schema":{"duration":{"type":"TypeString","required":true},"max":{"type":"TypeInt","required":true},"min":{"type":"TypeInt","required":true},"type":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_security_solution":{"schema":{"additional_workspace":{"type":"TypeSet","optional":true,"elem":{"schema":{"data_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true}}}},"disabled_data_sources":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"events_to_export":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"iothub_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"log_analytics_workspace_id":{"type":"TypeString","optional":true},"log_unmasked_ips_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"query_for_resources":{"type":"TypeString","optional":true,"computed":true},"query_subscription_ids":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"recommendations_enabled":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"acr_authentication":{"type":"TypeBool","optional":true,"default":true},"agent_send_unutilized_msg":{"type":"TypeBool","optional":true,"default":true},"baseline":{"type":"TypeBool","optional":true,"default":true},"edge_hub_mem_optimize":{"type":"TypeBool","optional":true,"default":true},"edge_logging_option":{"type":"TypeBool","optional":true,"default":true},"inconsistent_module_settings":{"type":"TypeBool","optional":true,"default":true},"install_agent":{"type":"TypeBool","optional":true,"default":true},"ip_filter_deny_all":{"type":"TypeBool","optional":true,"default":true},"ip_filter_permissive_rule":{"type":"TypeBool","optional":true,"default":true},"open_ports":{"type":"TypeBool","optional":true,"default":true},"permissive_firewall_policy":{"type":"TypeBool","optional":true,"default":true},"permissive_input_firewall_rules":{"type":"TypeBool","optional":true,"default":true},"permissive_output_firewall_rules":{"type":"TypeBool","optional":true,"default":true},"privileged_docker_options":{"type":"TypeBool","optional":true,"default":true},"shared_credentials":{"type":"TypeBool","optional":true,"default":true},"vulnerable_tls_cipher_suite":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_access_policy":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"principal_object_id":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"time_series_insights_environment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_event_source_eventhub":{"schema":{"consumer_group_name":{"type":"TypeString","required":true},"environment_id":{"type":"TypeString","required":true,"forceNew":true},"event_source_resource_id":{"type":"TypeString","required":true},"eventhub_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true},"shared_access_key":{"type":"TypeString","required":true},"shared_access_key_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timestamp_property_name":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_event_source_iothub":{"schema":{"consumer_group_name":{"type":"TypeString","required":true},"environment_id":{"type":"TypeString","required":true,"forceNew":true},"event_source_resource_id":{"type":"TypeString","required":true},"iothub_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"shared_access_key":{"type":"TypeString","required":true},"shared_access_key_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timestamp_property_name":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_gen2_environment":{"schema":{"data_access_fqdn":{"type":"TypeString","computed":true},"id_properties":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"storage":{"type":"TypeList","required":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"warm_store_data_retention_time":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_reference_data_set":{"schema":{"data_string_comparison_behavior":{"type":"TypeString","optional":true,"default":"Ordinal","forceNew":true},"key_property":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"time_series_insights_environment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iot_time_series_insights_standard_environment":{"schema":{"data_retention_time":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"storage_limit_exceeded_behavior":{"type":"TypeString","optional":true,"default":"PurgeOldData"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iotcentral_application":{"schema":{"display_name":{"type":"TypeString","optional":true,"computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"ST1"},"sub_domain":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iotcentral_application_network_rule_set":{"schema":{"apply_to_device":{"type":"TypeBool","optional":true,"default":true},"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"iotcentral_application_id":{"type":"TypeString","required":true,"forceNew":true},"ip_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"ip_mask":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub":{"schema":{"cloud_to_device":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"default_ttl":{"type":"TypeString","optional":true,"default":"PT1H"},"feedback":{"type":"TypeList","optional":true,"elem":{"schema":{"lock_duration":{"type":"TypeString","optional":true,"default":"PT60S"},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10},"time_to_live":{"type":"TypeString","optional":true,"default":"PT1H"}}}},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10}}},"maxItems":1},"endpoint":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"batch_frequency_in_seconds":{"type":"TypeInt","optional":true,"default":300},"connection_string":{"type":"TypeString","optional":true},"container_name":{"type":"TypeString","optional":true},"encoding":{"type":"TypeString","optional":true,"default":"Avro","forceNew":true},"endpoint_uri":{"type":"TypeString","optional":true},"entity_path":{"type":"TypeString","optional":true},"file_name_format":{"type":"TypeString","optional":true,"default":"{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}"},"identity_id":{"type":"TypeString","optional":true},"max_chunk_size_in_bytes":{"type":"TypeInt","optional":true,"default":314572800},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"enrichment":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"key":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":10},"event_hub_events_endpoint":{"type":"TypeString","computed":true},"event_hub_events_namespace":{"type":"TypeString","computed":true},"event_hub_events_path":{"type":"TypeString","computed":true},"event_hub_operations_endpoint":{"type":"TypeString","computed":true},"event_hub_operations_path":{"type":"TypeString","computed":true},"event_hub_partition_count":{"type":"TypeInt","optional":true,"computed":true},"event_hub_retention_in_days":{"type":"TypeInt","optional":true,"computed":true},"fallback_route":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"condition":{"type":"TypeString","optional":true,"default":"true"},"enabled":{"type":"TypeBool","optional":true,"computed":true},"endpoint_names":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"source":{"type":"TypeString","optional":true,"default":"DeviceMessages"}}},"maxItems":1},"file_upload":{"type":"TypeList","optional":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","required":true},"container_name":{"type":"TypeString","required":true},"default_ttl":{"type":"TypeString","optional":true,"computed":true},"identity_id":{"type":"TypeString","optional":true},"lock_duration":{"type":"TypeString","optional":true,"computed":true},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10},"notifications":{"type":"TypeBool","optional":true,"default":false},"sas_ttl":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"hostname":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"min_tls_version":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rule_set":{"type":"TypeList","optional":true,"elem":{"schema":{"apply_to_builtin_eventhub_endpoint":{"type":"TypeBool","optional":true,"default":false},"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"ip_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_mask":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"condition":{"type":"TypeString","optional":true,"default":"true"},"enabled":{"type":"TypeBool","required":true},"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"source":{"type":"TypeString","required":true}}}},"shared_access_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"key_name":{"type":"TypeString","computed":true},"permissions":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true}}}},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_certificate":{"schema":{"certificate_content":{"type":"TypeString","required":true},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"is_verified":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_consumer_group":{"schema":{"eventhub_endpoint_name":{"type":"TypeString","required":true,"forceNew":true},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_device_update_account":{"schema":{"host_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Standard"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_device_update_instance":{"schema":{"device_update_account_id":{"type":"TypeString","required":true,"forceNew":true},"diagnostic_enabled":{"type":"TypeBool","optional":true,"default":false},"diagnostic_storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_string":{"type":"TypeString","required":true},"id":{"type":"TypeString","required":true}}},"maxItems":1},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_dps":{"schema":{"allocation_policy":{"type":"TypeString","optional":true,"default":"Hashed"},"data_residency_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"device_provisioning_host_name":{"type":"TypeString","computed":true},"id_scope":{"type":"TypeString","computed":true},"ip_filter_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"ip_mask":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"target":{"type":"TypeString","optional":true}}}},"linked_hub":{"type":"TypeList","optional":true,"elem":{"schema":{"allocation_weight":{"type":"TypeInt","optional":true,"default":1},"apply_allocation_policy":{"type":"TypeBool","optional":true,"default":true},"connection_string":{"type":"TypeString","required":true},"hostname":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_operations_host_name":{"type":"TypeString","computed":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_dps_certificate":{"schema":{"certificate_content":{"type":"TypeString","required":true},"iot_dps_name":{"type":"TypeString","required":true,"forceNew":true},"is_verified":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_dps_shared_access_policy":{"schema":{"enrollment_read":{"type":"TypeBool","optional":true,"default":false},"enrollment_write":{"type":"TypeBool","optional":true,"default":false},"iothub_dps_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"registration_read":{"type":"TypeBool","optional":true,"default":false},"registration_write":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"service_config":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_cosmosdb_account":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"container_name":{"type":"TypeString","required":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"endpoint_uri":{"type":"TypeString","required":true,"forceNew":true},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key_name":{"type":"TypeString","optional":true},"partition_key_template":{"type":"TypeString","optional":true},"primary_key":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_key":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_eventhub":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","optional":true},"endpoint_uri":{"type":"TypeString","optional":true},"entity_path":{"type":"TypeString","optional":true},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_servicebus_queue":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","optional":true},"endpoint_uri":{"type":"TypeString","optional":true},"entity_path":{"type":"TypeString","optional":true},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_servicebus_topic":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","optional":true},"endpoint_uri":{"type":"TypeString","optional":true},"entity_path":{"type":"TypeString","optional":true},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_endpoint_storage_container":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"batch_frequency_in_seconds":{"type":"TypeInt","optional":true,"default":300},"connection_string":{"type":"TypeString","optional":true},"container_name":{"type":"TypeString","required":true},"encoding":{"type":"TypeString","optional":true,"default":"Avro","forceNew":true},"endpoint_uri":{"type":"TypeString","optional":true},"file_name_format":{"type":"TypeString","optional":true,"default":"{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}"},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"max_chunk_size_in_bytes":{"type":"TypeInt","optional":true,"default":314572800},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_enrichment":{"schema":{"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":100},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"key":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_fallback_route":{"schema":{"condition":{"type":"TypeString","optional":true,"default":"true"},"enabled":{"type":"TypeBool","required":true},"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":1},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeString","optional":true,"default":"DeviceMessages"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_file_upload":{"schema":{"authentication_type":{"type":"TypeString","optional":true,"default":"keyBased"},"connection_string":{"type":"TypeString","required":true},"container_name":{"type":"TypeString","required":true},"default_ttl":{"type":"TypeString","optional":true,"default":"PT1H"},"identity_id":{"type":"TypeString","optional":true},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"lock_duration":{"type":"TypeString","optional":true,"default":"PT1M"},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10},"notifications_enabled":{"type":"TypeBool","optional":true,"default":false},"sas_ttl":{"type":"TypeString","optional":true,"default":"PT1H"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_route":{"schema":{"condition":{"type":"TypeString","optional":true,"default":"true"},"enabled":{"type":"TypeBool","required":true},"endpoint_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":1},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_iothub_shared_access_policy":{"schema":{"device_connect":{"type":"TypeBool","optional":true,"default":false},"iothub_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"registry_read":{"type":"TypeBool","optional":true,"default":false},"registry_write":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"service_connect":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_ip_group":{"schema":{"cidrs":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"firewall_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"firewall_policy_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_ip_group_cidr":{"schema":{"cidr":{"type":"TypeString","required":true,"forceNew":true},"ip_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_key_vault":{"schema":{"access_policy":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"application_id":{"type":"TypeString","optional":true},"certificate_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"key_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"object_id":{"type":"TypeString","required":true},"secret_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"storage_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1024},"contact":{"type":"TypeSet","optional":true,"elem":{"schema":{"email":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true},"phone":{"type":"TypeString","optional":true}}}},"enable_rbac_authorization":{"type":"TypeBool","optional":true},"enabled_for_deployment":{"type":"TypeBool","optional":true},"enabled_for_disk_encryption":{"type":"TypeBool","optional":true},"enabled_for_template_deployment":{"type":"TypeBool","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_acls":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"bypass":{"type":"TypeString","required":true},"default_action":{"type":"TypeString","required":true},"ip_rules":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"purge_protection_enabled":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"soft_delete_retention_days":{"type":"TypeInt","optional":true,"default":90},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","required":true},"vault_uri":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_access_policy":{"schema":{"application_id":{"type":"TypeString","optional":true,"forceNew":true},"certificate_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"key_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"object_id":{"type":"TypeString","required":true,"forceNew":true},"secret_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"storage_permissions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_certificate":{"schema":{"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"contents":{"type":"TypeString","required":true},"password":{"type":"TypeString","optional":true}}},"maxItems":1},"certificate_attribute":{"type":"TypeList","computed":true,"elem":{"schema":{"created":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"expires":{"type":"TypeString","computed":true},"not_before":{"type":"TypeString","computed":true},"recovery_level":{"type":"TypeString","computed":true},"updated":{"type":"TypeString","computed":true}}}},"certificate_data":{"type":"TypeString","computed":true},"certificate_data_base64":{"type":"TypeString","computed":true},"certificate_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"issuer_parameters":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true}}},"maxItems":1},"key_properties":{"type":"TypeList","required":true,"elem":{"schema":{"curve":{"type":"TypeString","optional":true,"computed":true},"exportable":{"type":"TypeBool","required":true},"key_size":{"type":"TypeInt","optional":true,"computed":true},"key_type":{"type":"TypeString","required":true},"reuse_key":{"type":"TypeBool","required":true}}},"maxItems":1},"lifetime_action":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true}}},"maxItems":1},"trigger":{"type":"TypeList","required":true,"elem":{"schema":{"days_before_expiry":{"type":"TypeInt","optional":true},"lifetime_percentage":{"type":"TypeInt","optional":true}}},"maxItems":1}}}},"secret_properties":{"type":"TypeList","required":true,"elem":{"schema":{"content_type":{"type":"TypeString","required":true}}},"maxItems":1},"x509_certificate_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"extended_key_usage":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"key_usage":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"subject":{"type":"TypeString","required":true},"subject_alternative_names":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"dns_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"emails":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"upns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"validity_in_months":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_manager_id":{"type":"TypeString","computed":true},"resource_manager_versionless_id":{"type":"TypeString","computed":true},"secret_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true},"versionless_id":{"type":"TypeString","computed":true},"versionless_secret_id":{"type":"TypeString","computed":true}},"timeouts":{"create":60,"read":30,"delete":30,"update":30}},"azurerm_key_vault_certificate_contacts":{"schema":{"contact":{"type":"TypeSet","required":true,"elem":{"schema":{"email":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true},"phone":{"type":"TypeString","optional":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_certificate_issuer":{"schema":{"account_id":{"type":"TypeString","optional":true},"admin":{"type":"TypeList","optional":true,"elem":{"schema":{"email_address":{"type":"TypeString","required":true},"first_name":{"type":"TypeString","optional":true},"last_name":{"type":"TypeString","optional":true},"phone":{"type":"TypeString","optional":true}}}},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"org_id":{"type":"TypeString","optional":true},"password":{"type":"TypeString","optional":true},"provider_name":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_key":{"schema":{"curve":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"e":{"type":"TypeString","computed":true},"expiration_date":{"type":"TypeString","optional":true},"key_opts":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"key_size":{"type":"TypeInt","optional":true,"forceNew":true},"key_type":{"type":"TypeString","required":true,"forceNew":true},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"n":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"not_before_date":{"type":"TypeString","optional":true},"public_key_openssh":{"type":"TypeString","computed":true},"public_key_pem":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"resource_versionless_id":{"type":"TypeString","computed":true},"rotation_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"automatic":{"type":"TypeList","optional":true,"elem":{"schema":{"time_after_creation":{"type":"TypeString","optional":true},"time_before_expiry":{"type":"TypeString","optional":true}}},"maxItems":1},"expire_after":{"type":"TypeString","optional":true},"notify_before_expiry":{"type":"TypeString","optional":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true},"versionless_id":{"type":"TypeString","computed":true},"x":{"type":"TypeString","computed":true},"y":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":30,"delete":30,"update":30}},"azurerm_key_vault_managed_hardware_security_module":{"schema":{"admin_object_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"hsm_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_acls":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"bypass":{"type":"TypeString","required":true},"default_action":{"type":"TypeString","required":true}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"purge_protection_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"security_domain_encrypted_data":{"type":"TypeString","computed":true},"security_domain_key_vault_certificate_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":10,"minItems":3},"security_domain_quorum":{"type":"TypeInt","optional":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"soft_delete_retention_days":{"type":"TypeInt","optional":true,"default":90,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":30}},"azurerm_key_vault_managed_storage_account":{"schema":{"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"regenerate_key_automatically":{"type":"TypeBool","optional":true,"default":false},"regeneration_period":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","required":true},"storage_account_key":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_managed_storage_account_sas_token_definition":{"schema":{"managed_storage_account_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"sas_template_uri":{"type":"TypeString","required":true},"sas_type":{"type":"TypeString","required":true},"secret_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"validity_period":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_key_vault_secret":{"schema":{"content_type":{"type":"TypeString","optional":true},"expiration_date":{"type":"TypeString","optional":true},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"not_before_date":{"type":"TypeString","optional":true},"resource_id":{"type":"TypeString","computed":true},"resource_versionless_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","required":true},"version":{"type":"TypeString","computed":true},"versionless_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":30,"delete":30,"update":30}},"azurerm_kubernetes_cluster":{"schema":{"aci_connector_linux":{"type":"TypeList","optional":true,"elem":{"schema":{"connector_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"subnet_name":{"type":"TypeString","required":true}}},"maxItems":1},"api_server_access_profile":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"authorized_ip_ranges":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","optional":true},"vnet_integration_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"api_server_authorized_ip_ranges":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"auto_scaler_profile":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"balance_similar_node_groups":{"type":"TypeBool","optional":true,"default":false},"empty_bulk_delete_max":{"type":"TypeString","optional":true,"computed":true},"expander":{"type":"TypeString","optional":true,"default":"random"},"max_graceful_termination_sec":{"type":"TypeString","optional":true,"computed":true},"max_node_provisioning_time":{"type":"TypeString","optional":true,"default":"15m"},"max_unready_nodes":{"type":"TypeInt","optional":true,"default":3},"max_unready_percentage":{"type":"TypeFloat","optional":true,"default":45},"new_pod_scale_up_delay":{"type":"TypeString","optional":true,"computed":true},"scale_down_delay_after_add":{"type":"TypeString","optional":true,"computed":true},"scale_down_delay_after_delete":{"type":"TypeString","optional":true,"computed":true},"scale_down_delay_after_failure":{"type":"TypeString","optional":true,"computed":true},"scale_down_unneeded":{"type":"TypeString","optional":true,"computed":true},"scale_down_unready":{"type":"TypeString","optional":true,"computed":true},"scale_down_utilization_threshold":{"type":"TypeString","optional":true,"computed":true},"scan_interval":{"type":"TypeString","optional":true,"computed":true},"skip_nodes_with_local_storage":{"type":"TypeBool","optional":true,"default":true},"skip_nodes_with_system_pods":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"automatic_channel_upgrade":{"type":"TypeString","optional":true},"azure_active_directory_role_based_access_control":{"type":"TypeList","optional":true,"elem":{"schema":{"admin_group_object_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"azure_rbac_enabled":{"type":"TypeBool","optional":true},"client_app_id":{"type":"TypeString","optional":true},"managed":{"type":"TypeBool","optional":true},"server_app_id":{"type":"TypeString","optional":true},"server_app_secret":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"azure_policy_enabled":{"type":"TypeBool","optional":true},"confidential_computing":{"type":"TypeList","optional":true,"elem":{"schema":{"sgx_quote_helper_enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"custom_ca_trust_certificates_base64":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":10},"default_node_pool":{"type":"TypeList","required":true,"elem":{"schema":{"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"custom_ca_trust_enabled":{"type":"TypeBool","optional":true},"enable_auto_scaling":{"type":"TypeBool","optional":true},"enable_host_encryption":{"type":"TypeBool","optional":true},"enable_node_public_ip":{"type":"TypeBool","optional":true},"fips_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"host_group_id":{"type":"TypeString","optional":true,"forceNew":true},"kubelet_config":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_unsafe_sysctls":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"container_log_max_line":{"type":"TypeInt","optional":true},"container_log_max_size_mb":{"type":"TypeInt","optional":true},"cpu_cfs_quota_enabled":{"type":"TypeBool","optional":true,"default":false},"cpu_cfs_quota_period":{"type":"TypeString","optional":true},"cpu_manager_policy":{"type":"TypeString","optional":true},"image_gc_high_threshold":{"type":"TypeInt","optional":true},"image_gc_low_threshold":{"type":"TypeInt","optional":true},"pod_max_pid":{"type":"TypeInt","optional":true},"topology_manager_policy":{"type":"TypeString","optional":true}}},"maxItems":1},"kubelet_disk_type":{"type":"TypeString","optional":true,"computed":true},"linux_os_config":{"type":"TypeList","optional":true,"elem":{"schema":{"swap_file_size_mb":{"type":"TypeInt","optional":true},"sysctl_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"fs_aio_max_nr":{"type":"TypeInt","optional":true,"forceNew":true},"fs_file_max":{"type":"TypeInt","optional":true,"forceNew":true},"fs_inotify_max_user_watches":{"type":"TypeInt","optional":true,"forceNew":true},"fs_nr_open":{"type":"TypeInt","optional":true,"forceNew":true},"kernel_threads_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_netdev_max_backlog":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_optmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_rmem_default":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_rmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_somaxconn":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_wmem_default":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_wmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_ip_local_port_range_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_ip_local_port_range_min":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh1":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh2":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh3":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_fin_timeout":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_intvl":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_probes":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_time":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_max_syn_backlog":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_max_tw_buckets":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_tw_reuse":{"type":"TypeBool","optional":true,"forceNew":true},"net_netfilter_nf_conntrack_buckets":{"type":"TypeInt","optional":true,"forceNew":true},"net_netfilter_nf_conntrack_max":{"type":"TypeInt","optional":true,"forceNew":true},"vm_max_map_count":{"type":"TypeInt","optional":true,"forceNew":true},"vm_swappiness":{"type":"TypeInt","optional":true,"forceNew":true},"vm_vfs_cache_pressure":{"type":"TypeInt","optional":true,"forceNew":true}}},"maxItems":1},"transparent_huge_page_defrag":{"type":"TypeString","optional":true},"transparent_huge_page_enabled":{"type":"TypeString","optional":true}}},"maxItems":1},"max_count":{"type":"TypeInt","optional":true},"max_pods":{"type":"TypeInt","optional":true,"computed":true},"message_of_the_day":{"type":"TypeString","optional":true,"forceNew":true},"min_count":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true},"node_count":{"type":"TypeInt","optional":true,"computed":true},"node_labels":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"node_network_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"node_public_ip_tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"node_public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"node_taints":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"only_critical_addons_enabled":{"type":"TypeBool","optional":true},"orchestrator_version":{"type":"TypeString","optional":true,"computed":true},"os_disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"os_disk_type":{"type":"TypeString","optional":true,"default":"Managed"},"os_sku":{"type":"TypeString","optional":true,"computed":true},"pod_subnet_id":{"type":"TypeString","optional":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"scale_down_mode":{"type":"TypeString","optional":true,"default":"Delete"},"snapshot_id":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"temporary_name_for_rotation":{"type":"TypeString","optional":true},"type":{"type":"TypeString","optional":true,"default":"VirtualMachineScaleSets","forceNew":true},"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false},"upgrade_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_surge":{"type":"TypeString","required":true}}},"maxItems":1},"vm_size":{"type":"TypeString","required":true},"vnet_subnet_id":{"type":"TypeString","optional":true},"workload_runtime":{"type":"TypeString","optional":true,"computed":true},"zones":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"dns_prefix":{"type":"TypeString","optional":true,"forceNew":true},"dns_prefix_private_cluster":{"type":"TypeString","optional":true,"forceNew":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_pod_security_policy":{"type":"TypeBool","optional":true},"fqdn":{"type":"TypeString","computed":true},"http_application_routing_enabled":{"type":"TypeBool","optional":true},"http_application_routing_zone_name":{"type":"TypeString","computed":true},"http_proxy_config":{"type":"TypeList","optional":true,"elem":{"schema":{"http_proxy":{"type":"TypeString","optional":true,"forceNew":true},"https_proxy":{"type":"TypeString","optional":true,"forceNew":true},"no_proxy":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"trusted_ca":{"type":"TypeString","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"image_cleaner_enabled":{"type":"TypeBool","optional":true,"default":false},"image_cleaner_interval_hours":{"type":"TypeInt","optional":true,"default":48},"ingress_application_gateway":{"type":"TypeList","optional":true,"elem":{"schema":{"effective_gateway_id":{"type":"TypeString","computed":true},"gateway_id":{"type":"TypeString","optional":true},"gateway_name":{"type":"TypeString","optional":true},"ingress_application_gateway_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"subnet_cidr":{"type":"TypeString","optional":true},"subnet_id":{"type":"TypeString","optional":true}}},"maxItems":1},"key_management_service":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"key_vault_network_access":{"type":"TypeString","optional":true,"default":"Public"}}},"maxItems":1},"key_vault_secrets_provider":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"secret_rotation_enabled":{"type":"TypeBool","optional":true,"default":false},"secret_rotation_interval":{"type":"TypeString","optional":true,"default":"2m"}}},"maxItems":1},"kube_admin_config":{"type":"TypeList","computed":true,"elem":{"schema":{"client_certificate":{"type":"TypeString","computed":true},"client_key":{"type":"TypeString","computed":true},"cluster_ca_certificate":{"type":"TypeString","computed":true},"host":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"kube_admin_config_raw":{"type":"TypeString","computed":true},"kube_config":{"type":"TypeList","computed":true,"elem":{"schema":{"client_certificate":{"type":"TypeString","computed":true},"client_key":{"type":"TypeString","computed":true},"cluster_ca_certificate":{"type":"TypeString","computed":true},"host":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"kube_config_raw":{"type":"TypeString","computed":true},"kubelet_identity":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"object_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"kubernetes_version":{"type":"TypeString","optional":true,"computed":true},"linux_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"admin_username":{"type":"TypeString","required":true,"forceNew":true},"ssh_key":{"type":"TypeList","required":true,"elem":{"schema":{"key_data":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"local_account_disabled":{"type":"TypeBool","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed":{"type":"TypeSet","optional":true,"elem":{"schema":{"day":{"type":"TypeString","required":true},"hours":{"type":"TypeSet","required":true,"elem":{"type":"TypeInt"},"minItems":1}}}},"not_allowed":{"type":"TypeSet","optional":true,"elem":{"schema":{"end":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true}}}}}},"maxItems":1},"maintenance_window_auto_upgrade":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_month":{"type":"TypeInt","optional":true},"day_of_week":{"type":"TypeString","optional":true},"duration":{"type":"TypeInt","required":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","required":true},"not_allowed":{"type":"TypeSet","optional":true,"elem":{"schema":{"end":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true}}}},"start_date":{"type":"TypeString","optional":true,"computed":true},"start_time":{"type":"TypeString","optional":true},"utc_offset":{"type":"TypeString","optional":true},"week_index":{"type":"TypeString","optional":true}}},"maxItems":1},"maintenance_window_node_os":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_month":{"type":"TypeInt","optional":true},"day_of_week":{"type":"TypeString","optional":true},"duration":{"type":"TypeInt","required":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","required":true},"not_allowed":{"type":"TypeSet","optional":true,"elem":{"schema":{"end":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true}}}},"start_date":{"type":"TypeString","optional":true,"computed":true},"start_time":{"type":"TypeString","optional":true},"utc_offset":{"type":"TypeString","optional":true},"week_index":{"type":"TypeString","optional":true}}},"maxItems":1},"microsoft_defender":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true}}},"maxItems":1},"monitor_metrics":{"type":"TypeList","optional":true,"elem":{"schema":{"annotations_allowed":{"type":"TypeString","optional":true},"labels_allowed":{"type":"TypeString","optional":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"dns_service_ip":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"docker_bridge_cidr":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"ebpf_data_plane":{"type":"TypeString","optional":true},"ip_versions":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"load_balancer_profile":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"effective_outbound_ips":{"type":"TypeSet","configMode":"Auto","computed":true,"elem":{"type":"TypeString"}},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":30},"managed_outbound_ip_count":{"type":"TypeInt","optional":true,"computed":true},"managed_outbound_ipv6_count":{"type":"TypeInt","optional":true,"computed":true},"outbound_ip_address_ids":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"outbound_ip_prefix_ids":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"outbound_ports_allocated":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"load_balancer_sku":{"type":"TypeString","optional":true,"default":"standard","forceNew":true},"nat_gateway_profile":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"effective_outbound_ips":{"type":"TypeSet","configMode":"Auto","computed":true,"elem":{"type":"TypeString"}},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"managed_outbound_ip_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"network_mode":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"network_plugin":{"type":"TypeString","required":true,"forceNew":true},"network_plugin_mode":{"type":"TypeString","optional":true},"network_policy":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"outbound_type":{"type":"TypeString","optional":true,"default":"loadBalancer","forceNew":true},"pod_cidr":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"pod_cidrs":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}},"service_cidr":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"service_cidrs":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"node_os_channel_upgrade":{"type":"TypeString","optional":true},"node_resource_group":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"node_resource_group_id":{"type":"TypeString","computed":true},"oidc_issuer_enabled":{"type":"TypeBool","optional":true},"oidc_issuer_url":{"type":"TypeString","computed":true},"oms_agent":{"type":"TypeList","optional":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"msi_auth_for_monitoring_enabled":{"type":"TypeBool","optional":true},"oms_agent_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}}}},"maxItems":1},"open_service_mesh_enabled":{"type":"TypeBool","optional":true},"portal_fqdn":{"type":"TypeString","computed":true},"private_cluster_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"private_cluster_public_fqdn_enabled":{"type":"TypeBool","optional":true,"default":false},"private_dns_zone_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"private_fqdn":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role_based_access_control_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"run_command_enabled":{"type":"TypeBool","optional":true,"default":true},"service_mesh_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"external_ingress_gateway_enabled":{"type":"TypeBool","optional":true},"internal_ingress_gateway_enabled":{"type":"TypeBool","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"service_principal":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","required":true}}},"maxItems":1},"sku_tier":{"type":"TypeString","optional":true,"default":"Free"},"storage_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_driver_enabled":{"type":"TypeBool","optional":true,"default":false},"disk_driver_enabled":{"type":"TypeBool","optional":true,"default":true},"disk_driver_version":{"type":"TypeString","optional":true,"default":"v1"},"file_driver_enabled":{"type":"TypeBool","optional":true,"default":true},"snapshot_controller_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"web_app_routing":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_zone_id":{"type":"TypeString","required":true},"web_app_routing_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}}}},"maxItems":1},"windows_profile":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"gmsa":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_server":{"type":"TypeString","required":true},"root_domain":{"type":"TypeString","required":true}}},"maxItems":1},"license":{"type":"TypeString","optional":true}}},"maxItems":1},"workload_autoscaler_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"keda_enabled":{"type":"TypeBool","optional":true,"default":false},"vertical_pod_autoscaler_controlled_values":{"type":"TypeString","computed":true},"vertical_pod_autoscaler_enabled":{"type":"TypeBool","optional":true,"default":false},"vertical_pod_autoscaler_update_mode":{"type":"TypeString","computed":true}}},"maxItems":1},"workload_identity_enabled":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_kubernetes_cluster_extension":{"schema":{"aks_assigned_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"configuration_protected_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"configuration_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"current_version":{"type":"TypeString","computed":true},"extension_type":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"promotion_code":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"release_namespace":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"release_train":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"target_namespace":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kubernetes_cluster_node_pool":{"schema":{"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"custom_ca_trust_enabled":{"type":"TypeBool","optional":true},"enable_auto_scaling":{"type":"TypeBool","optional":true},"enable_host_encryption":{"type":"TypeBool","optional":true,"forceNew":true},"enable_node_public_ip":{"type":"TypeBool","optional":true,"forceNew":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"fips_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"host_group_id":{"type":"TypeString","optional":true,"forceNew":true},"kubelet_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"allowed_unsafe_sysctls":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"container_log_max_line":{"type":"TypeInt","optional":true,"forceNew":true},"container_log_max_size_mb":{"type":"TypeInt","optional":true,"forceNew":true},"cpu_cfs_quota_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"cpu_cfs_quota_period":{"type":"TypeString","optional":true,"forceNew":true},"cpu_manager_policy":{"type":"TypeString","optional":true,"forceNew":true},"image_gc_high_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"image_gc_low_threshold":{"type":"TypeInt","optional":true,"forceNew":true},"pod_max_pid":{"type":"TypeInt","optional":true,"forceNew":true},"topology_manager_policy":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"kubelet_disk_type":{"type":"TypeString","optional":true,"computed":true},"kubernetes_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"linux_os_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"swap_file_size_mb":{"type":"TypeInt","optional":true,"forceNew":true},"sysctl_config":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"fs_aio_max_nr":{"type":"TypeInt","optional":true,"forceNew":true},"fs_file_max":{"type":"TypeInt","optional":true,"forceNew":true},"fs_inotify_max_user_watches":{"type":"TypeInt","optional":true,"forceNew":true},"fs_nr_open":{"type":"TypeInt","optional":true,"forceNew":true},"kernel_threads_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_netdev_max_backlog":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_optmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_rmem_default":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_rmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_somaxconn":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_wmem_default":{"type":"TypeInt","optional":true,"forceNew":true},"net_core_wmem_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_ip_local_port_range_max":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_ip_local_port_range_min":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh1":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh2":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_neigh_default_gc_thresh3":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_fin_timeout":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_intvl":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_probes":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_keepalive_time":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_max_syn_backlog":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_max_tw_buckets":{"type":"TypeInt","optional":true,"forceNew":true},"net_ipv4_tcp_tw_reuse":{"type":"TypeBool","optional":true,"forceNew":true},"net_netfilter_nf_conntrack_buckets":{"type":"TypeInt","optional":true,"forceNew":true},"net_netfilter_nf_conntrack_max":{"type":"TypeInt","optional":true,"forceNew":true},"vm_max_map_count":{"type":"TypeInt","optional":true,"forceNew":true},"vm_swappiness":{"type":"TypeInt","optional":true,"forceNew":true},"vm_vfs_cache_pressure":{"type":"TypeInt","optional":true,"forceNew":true}}},"maxItems":1},"transparent_huge_page_defrag":{"type":"TypeString","optional":true,"forceNew":true},"transparent_huge_page_enabled":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"max_count":{"type":"TypeInt","optional":true},"max_pods":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"message_of_the_day":{"type":"TypeString","optional":true,"forceNew":true},"min_count":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","optional":true,"default":"User"},"name":{"type":"TypeString","required":true,"forceNew":true},"node_count":{"type":"TypeInt","optional":true,"computed":true},"node_labels":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"node_network_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"node_public_ip_tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"node_public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"node_taints":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"orchestrator_version":{"type":"TypeString","optional":true,"computed":true},"os_disk_size_gb":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"os_disk_type":{"type":"TypeString","optional":true,"default":"Managed","forceNew":true},"os_sku":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"os_type":{"type":"TypeString","optional":true,"default":"Linux","forceNew":true},"pod_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"scale_down_mode":{"type":"TypeString","optional":true,"default":"Delete"},"snapshot_id":{"type":"TypeString","optional":true,"forceNew":true},"spot_max_price":{"type":"TypeFloat","optional":true,"default":-1,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"upgrade_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"max_surge":{"type":"TypeString","required":true}}},"maxItems":1},"vm_size":{"type":"TypeString","required":true,"forceNew":true},"vnet_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"windows_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"outbound_nat_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true}}},"maxItems":1},"workload_runtime":{"type":"TypeString","optional":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kubernetes_cluster_trusted_access_role_binding":{"schema":{"kubernetes_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"roles":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"source_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kubernetes_fleet_manager":{"schema":{"hub_profile":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dns_prefix":{"type":"TypeString","required":true},"fqdn":{"type":"TypeString","computed":true},"kubernetes_version":{"type":"TypeString","computed":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kubernetes_flux_configuration":{"schema":{"blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","optional":true},"container_id":{"type":"TypeString","required":true},"local_auth_reference":{"type":"TypeString","optional":true},"managed_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true}}},"maxItems":1},"sas_token":{"type":"TypeString","optional":true},"service_principal":{"type":"TypeList","optional":true,"elem":{"schema":{"client_certificate_base64":{"type":"TypeString","optional":true},"client_certificate_password":{"type":"TypeString","optional":true},"client_certificate_send_chain":{"type":"TypeBool","optional":true,"default":false},"client_id":{"type":"TypeString","required":true},"client_secret":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600}}},"maxItems":1},"bucket":{"type":"TypeList","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","optional":true},"bucket_name":{"type":"TypeString","required":true},"local_auth_reference":{"type":"TypeString","optional":true},"secret_key_base64":{"type":"TypeString","optional":true},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600},"tls_enabled":{"type":"TypeBool","optional":true,"default":true},"url":{"type":"TypeString","required":true}}},"maxItems":1},"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"continuous_reconciliation_enabled":{"type":"TypeBool","optional":true,"default":true},"git_repository":{"type":"TypeList","optional":true,"elem":{"schema":{"https_ca_cert_base64":{"type":"TypeString","optional":true},"https_key_base64":{"type":"TypeString","optional":true},"https_user":{"type":"TypeString","optional":true},"local_auth_reference":{"type":"TypeString","optional":true},"reference_type":{"type":"TypeString","required":true},"reference_value":{"type":"TypeString","required":true},"ssh_known_hosts_base64":{"type":"TypeString","optional":true},"ssh_private_key_base64":{"type":"TypeString","optional":true},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600},"url":{"type":"TypeString","required":true}}},"maxItems":1},"kustomizations":{"type":"TypeSet","required":true,"elem":{"schema":{"depends_on":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"garbage_collection_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"recreating_enabled":{"type":"TypeBool","optional":true,"default":false},"retry_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"sync_interval_in_seconds":{"type":"TypeInt","optional":true,"default":600},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":600}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","optional":true,"default":"namespace","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kusto_attached_database_configuration":{"schema":{"attached_database_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"cluster_resource_id":{"type":"TypeString","required":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"default_principal_modification_kind":{"type":"TypeString","optional":true,"default":"None"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sharing":{"type":"TypeList","optional":true,"elem":{"schema":{"external_tables_to_exclude":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"external_tables_to_include":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"materialized_views_to_exclude":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"materialized_views_to_include":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"tables_to_exclude":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"tables_to_include":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_cluster":{"schema":{"allowed_fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"allowed_ip_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"auto_stop_enabled":{"type":"TypeBool","optional":true,"default":true},"data_ingestion_uri":{"type":"TypeString","computed":true},"disk_encryption_enabled":{"type":"TypeBool","optional":true,"default":false},"double_encryption_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"engine":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"language_extensions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"optimized_auto_scale":{"type":"TypeList","optional":true,"elem":{"schema":{"maximum_instances":{"type":"TypeInt","required":true},"minimum_instances":{"type":"TypeInt","required":true}}},"maxItems":1},"outbound_network_access_restricted":{"type":"TypeBool","optional":true,"default":false},"public_ip_type":{"type":"TypeString","optional":true,"default":"IPv4"},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"purge_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"streaming_ingestion_enabled":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trusted_external_tenants":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"uri":{"type":"TypeString","computed":true},"virtual_network_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"data_management_public_ip_id":{"type":"TypeString","required":true},"engine_public_ip_id":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":1},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_cluster_customer_managed_key":{"schema":{"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"key_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","required":true},"key_version":{"type":"TypeString","optional":true},"user_identity":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_kusto_cluster_managed_private_endpoint":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_link_resource_id":{"type":"TypeString","required":true,"forceNew":true},"private_link_resource_region":{"type":"TypeString","optional":true,"forceNew":true},"request_message":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_cluster_principal_assignment":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"principal_name":{"type":"TypeString","computed":true},"principal_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true,"forceNew":true},"tenant_name":{"type":"TypeString","computed":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_cosmosdb_data_connection":{"schema":{"cosmosdb_container_id":{"type":"TypeString","required":true,"forceNew":true},"kusto_database_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_identity_id":{"type":"TypeString","required":true,"forceNew":true},"mapping_rule_name":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"retrieval_start_date":{"type":"TypeString","optional":true,"forceNew":true},"table_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_kusto_database":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"hot_cache_period":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"size":{"type":"TypeFloat","computed":true},"soft_delete_period":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_database_principal_assignment":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"principal_name":{"type":"TypeString","computed":true},"principal_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true,"forceNew":true},"tenant_name":{"type":"TypeString","computed":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_kusto_eventgrid_data_connection":{"schema":{"blob_storage_event_type":{"type":"TypeString","optional":true,"default":"Microsoft.Storage.BlobCreated"},"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"data_format":{"type":"TypeString","optional":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"database_routing_type":{"type":"TypeString","optional":true,"default":"Single","forceNew":true},"eventgrid_resource_id":{"type":"TypeString","optional":true},"eventhub_consumer_group_name":{"type":"TypeString","required":true,"forceNew":true},"eventhub_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_identity_resource_id":{"type":"TypeString","optional":true},"mapping_rule_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"skip_first_record":{"type":"TypeBool","optional":true,"default":false},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_eventhub_data_connection":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"compression":{"type":"TypeString","optional":true,"default":"None","forceNew":true},"consumer_group":{"type":"TypeString","required":true,"forceNew":true},"data_format":{"type":"TypeString","optional":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"database_routing_type":{"type":"TypeString","optional":true,"default":"Single","forceNew":true},"event_system_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"eventhub_id":{"type":"TypeString","required":true,"forceNew":true},"identity_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mapping_rule_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"table_name":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_kusto_iothub_data_connection":{"schema":{"cluster_name":{"type":"TypeString","required":true,"forceNew":true},"consumer_group":{"type":"TypeString","required":true,"forceNew":true},"data_format":{"type":"TypeString","optional":true,"forceNew":true},"database_name":{"type":"TypeString","required":true,"forceNew":true},"database_routing_type":{"type":"TypeString","optional":true,"default":"Single","forceNew":true},"event_system_properties":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"iothub_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mapping_rule_name":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"shared_access_policy_name":{"type":"TypeString","required":true,"forceNew":true},"table_name":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_kusto_script":{"schema":{"continue_on_errors_enabled":{"type":"TypeBool","optional":true,"default":false},"database_id":{"type":"TypeString","required":true,"forceNew":true},"force_an_update_when_value_changed":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sas_token":{"type":"TypeString","optional":true,"forceNew":true},"script_content":{"type":"TypeString","optional":true,"forceNew":true},"url":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lab_service_lab":{"schema":{"auto_shutdown":{"type":"TypeList","optional":true,"elem":{"schema":{"disconnect_delay":{"type":"TypeString","optional":true},"idle_delay":{"type":"TypeString","optional":true},"no_connect_delay":{"type":"TypeString","optional":true},"shutdown_on_idle":{"type":"TypeString","optional":true}}},"maxItems":1},"connection_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"client_rdp_access":{"type":"TypeString","optional":true},"client_ssh_access":{"type":"TypeString","optional":true}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"lab_plan_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"elem":{"schema":{"load_balancer_id":{"type":"TypeString","computed":true},"public_ip_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","optional":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"roster":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_group_id":{"type":"TypeString","optional":true},"lms_instance":{"type":"TypeString","optional":true},"lti_client_id":{"type":"TypeString","optional":true},"lti_context_id":{"type":"TypeString","optional":true},"lti_roster_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"security":{"type":"TypeList","required":true,"elem":{"schema":{"open_access_enabled":{"type":"TypeBool","required":true},"registration_code":{"type":"TypeString","computed":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"title":{"type":"TypeString","required":true},"virtual_machine":{"type":"TypeList","required":true,"elem":{"schema":{"additional_capability_gpu_drivers_installed":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"admin_user":{"type":"TypeList","required":true,"elem":{"schema":{"password":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"create_option":{"type":"TypeString","optional":true,"default":"Image","forceNew":true},"image_reference":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true,"forceNew":true},"offer":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","optional":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"non_admin_user":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"shared_password_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"usage_quota":{"type":"TypeString","optional":true,"default":"PT0S"}}},"maxItems":1}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_lab_service_plan":{"schema":{"allowed_regions":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":28,"minItems":1},"default_auto_shutdown":{"type":"TypeList","optional":true,"elem":{"schema":{"disconnect_delay":{"type":"TypeString","optional":true},"idle_delay":{"type":"TypeString","optional":true},"no_connect_delay":{"type":"TypeString","optional":true},"shutdown_on_idle":{"type":"TypeString","optional":true}}},"maxItems":1},"default_connection":{"type":"TypeList","optional":true,"elem":{"schema":{"client_rdp_access":{"type":"TypeString","optional":true},"client_ssh_access":{"type":"TypeString","optional":true},"web_rdp_access":{"type":"TypeString","optional":true},"web_ssh_access":{"type":"TypeString","optional":true}}},"maxItems":1},"default_network_subnet_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"shared_gallery_id":{"type":"TypeString","optional":true},"support":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"instructions":{"type":"TypeString","optional":true},"phone":{"type":"TypeString","optional":true},"url":{"type":"TypeString","optional":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lab_service_schedule":{"schema":{"lab_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"expiration_date":{"type":"TypeString","required":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","optional":true},"week_days":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"start_time":{"type":"TypeString","optional":true},"stop_time":{"type":"TypeString","required":true},"time_zone":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lab_service_user":{"schema":{"additional_usage_quota":{"type":"TypeString","optional":true,"default":"PT0S"},"email":{"type":"TypeString","required":true,"forceNew":true},"lab_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb":{"schema":{"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"frontend_ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"gateway_load_balancer_frontend_ip_configuration_id":{"type":"TypeString","optional":true,"computed":true},"id":{"type":"TypeString","computed":true},"inbound_nat_rules":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"load_balancer_rules":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"outbound_rules":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"private_ip_address":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_allocation":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_version":{"type":"TypeString","optional":true,"computed":true},"public_ip_address_id":{"type":"TypeString","optional":true,"computed":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"computed":true},"subnet_id":{"type":"TypeString","optional":true,"computed":true},"zones":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Basic","forceNew":true},"sku_tier":{"type":"TypeString","optional":true,"default":"Regional","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_backend_address_pool":{"schema":{"backend_ip_configurations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"inbound_nat_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancing_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tunnel_interface":{"type":"TypeList","optional":true,"elem":{"schema":{"identifier":{"type":"TypeInt","required":true},"port":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"minItems":1},"virtual_network_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_backend_address_pool_address":{"schema":{"backend_address_ip_configuration_id":{"type":"TypeString","optional":true,"description":"For global load balancer, user needs to specify the `backend_address_ip_configuration_id` of the added regional load balancers"},"backend_address_pool_id":{"type":"TypeString","required":true,"forceNew":true},"inbound_nat_rule_port_mapping":{"type":"TypeList","computed":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","computed":true},"frontend_port":{"type":"TypeInt","computed":true},"inbound_nat_rule_name":{"type":"TypeString","computed":true}}}},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","optional":true,"description":"For regional load balancer, user needs to specify `virtual_network_id` and `ip_address`"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_nat_pool":{"schema":{"backend_port":{"type":"TypeInt","required":true},"floating_ip_enabled":{"type":"TypeBool","optional":true},"frontend_ip_configuration_id":{"type":"TypeString","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","required":true},"frontend_port_end":{"type":"TypeInt","required":true},"frontend_port_start":{"type":"TypeInt","required":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protocol":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tcp_reset_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_nat_rule":{"schema":{"backend_address_pool_id":{"type":"TypeString","optional":true},"backend_ip_configuration_id":{"type":"TypeString","computed":true},"backend_port":{"type":"TypeInt","required":true},"enable_floating_ip":{"type":"TypeBool","optional":true,"computed":true},"enable_tcp_reset":{"type":"TypeBool","optional":true},"frontend_ip_configuration_id":{"type":"TypeString","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","required":true},"frontend_port":{"type":"TypeInt","optional":true},"frontend_port_end":{"type":"TypeInt","optional":true},"frontend_port_start":{"type":"TypeInt","optional":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protocol":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_outbound_rule":{"schema":{"allocated_outbound_ports":{"type":"TypeInt","optional":true,"default":1024},"backend_address_pool_id":{"type":"TypeString","required":true},"enable_tcp_reset":{"type":"TypeBool","optional":true,"default":false},"frontend_ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true}}},"minItems":1},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protocol":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_probe":{"schema":{"interval_in_seconds":{"type":"TypeInt","optional":true,"default":15},"load_balancer_rules":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"number_of_probes":{"type":"TypeInt","optional":true,"default":2},"port":{"type":"TypeInt","required":true},"probe_threshold":{"type":"TypeInt","optional":true,"default":1},"protocol":{"type":"TypeString","optional":true,"computed":true},"request_path":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lb_rule":{"schema":{"backend_address_pool_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2,"minItems":1},"backend_port":{"type":"TypeInt","required":true},"disable_outbound_snat":{"type":"TypeBool","optional":true,"default":false},"enable_floating_ip":{"type":"TypeBool","optional":true,"default":false},"enable_tcp_reset":{"type":"TypeBool","optional":true},"frontend_ip_configuration_id":{"type":"TypeString","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","required":true},"frontend_port":{"type":"TypeInt","required":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"load_distribution":{"type":"TypeString","optional":true,"computed":true},"loadbalancer_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"probe_id":{"type":"TypeString","optional":true,"computed":true},"protocol":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_lighthouse_assignment":{"schema":{"lighthouse_definition_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_lighthouse_definition":{"schema":{"authorization":{"type":"TypeSet","required":true,"elem":{"schema":{"delegated_role_definition_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_display_name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","required":true},"role_definition_id":{"type":"TypeString","required":true}}},"minItems":1},"description":{"type":"TypeString","optional":true},"eligible_authorization":{"type":"TypeSet","optional":true,"elem":{"schema":{"just_in_time_access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"approver":{"type":"TypeSet","optional":true,"elem":{"schema":{"principal_display_name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","required":true}}}},"maximum_activation_duration":{"type":"TypeString","optional":true,"default":"PT8H"},"multi_factor_auth_provider":{"type":"TypeString","optional":true}}},"maxItems":1},"principal_display_name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","required":true},"role_definition_id":{"type":"TypeString","required":true}}}},"lighthouse_definition_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managing_tenant_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"product":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_linux_function_app":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs for [App Settings](https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings) and custom values.","elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"builtin_logging_enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should built in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting"},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the function app use Client Certificates"},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Optional","description":"The mode of the Function App's client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser` "},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"content_share_force_disabled":{"type":"TypeBool","optional":true,"default":false,"description":"Force disable the content share settings."},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans."},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Is the Linux Function App enabled."},"functions_extension_version":{"type":"TypeString","optional":true,"default":"~4","description":"The runtime version associated with the Function App."},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false,"description":"Can the Function App only be accessed via HTTPS?"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Key Vault access.","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"description":"Specifies the name of the Function App.","forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_plan_id":{"type":"TypeString","required":true,"description":"The ID of the App Service Plan within which to create this Function App"},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"description":"If this Linux Web App is Always On enabled. Defaults to `false`.","computed":true},"api_definition_url":{"type":"TypeString","optional":true,"description":"The URL of the API definition that describes this Linux Function App."},"api_management_api_id":{"type":"TypeString","optional":true,"description":"The ID of the API Management API for this Linux Function App."},"app_command_line":{"type":"TypeString","optional":true,"description":"The program and any arguments used to launch this app via the command line. (Example `node myapp.js`)."},"app_scale_limit":{"type":"TypeInt","optional":true,"description":"The number of workers this function app can scale out to. Only applicable to apps on the Consumption and Premium plan.","computed":true},"app_service_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","optional":true,"default":35,"description":"The amount of disk space to use for logs. Valid values are between `25` and `100`."},"retention_period_days":{"type":"TypeInt","optional":true,"description":"The retention period for logs in days. Valid values are between `0` and `99999`. Defaults to `0` (never delete)."}}},"maxItems":1},"application_insights_connection_string":{"type":"TypeString","optional":true,"description":"The Connection String for linking the Linux Function App to Application Insights."},"application_insights_key":{"type":"TypeString","optional":true,"description":"The Instrumentation Key for connecting the Linux Function App to Application Insights."},"application_stack":{"type":"TypeList","optional":true,"elem":{"schema":{"docker":{"type":"TypeList","optional":true,"description":"A docker block","elem":{"schema":{"image_name":{"type":"TypeString","required":true,"description":"The name of the Docker image to use."},"image_tag":{"type":"TypeString","required":true,"description":"The image tag of the image to use."},"registry_password":{"type":"TypeString","optional":true,"description":"The password for the account to use to connect to the registry."},"registry_url":{"type":"TypeString","required":true,"description":"The URL of the docker registry."},"registry_username":{"type":"TypeString","optional":true,"description":"The username to use for connections to the registry."}}}},"dotnet_version":{"type":"TypeString","optional":true,"description":"The version of .Net. Possible values are `3.1`, `6.0` and `7.0`"},"java_version":{"type":"TypeString","optional":true,"description":"The version of Java to use. Possible values are `8`, `11`, and `17`"},"node_version":{"type":"TypeString","optional":true,"description":"The version of Node to use. Possible values include `12`, `14`, `16` and `18`"},"powershell_core_version":{"type":"TypeString","optional":true,"description":"The version of PowerShell Core to use. Possibles values are `7`, and `7.2`"},"python_version":{"type":"TypeString","optional":true,"description":"The version of Python to use. Possible values include `3.11`, `3.10`, `3.9`, `3.8`, and `3.7`."},"use_custom_runtime":{"type":"TypeBool","optional":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","optional":true,"default":false,"description":"Should the DotNet process use an isolated runtime. Defaults to `false`."}}},"maxItems":1},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true,"description":"The Client ID of the Managed Service Identity to use for connections to the Azure Container Registry."},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should connections for Azure Container Registry use Managed Identity."},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"description":"Specifies a list of Default Documents for the Linux Web App.","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","description":"Is detailed error logging enabled","computed":true},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"description":"The number of minimum instances for this Linux Function App. Only affects apps on Elastic Premium plans.","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled","description":"State of FTP / FTPS service for this function app. Possible values include: `AllAllowed`, `FtpsOnly` and `Disabled`. Defaults to `Disabled`."},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true,"description":"The path to be checked for this function app health."},"http2_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Specifies if the http2 protocol should be enabled. Defaults to `false`."},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","description":"The Linux FX Version","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests","description":"The Site load balancing mode. Possible values include: `WeightedRoundRobin`, `LeastRequests`, `LeastResponseTime`, `WeightedTotalTraffic`, `RequestHash`, `PerSiteRoundRobin`. Defaults to `LeastRequests` if omitted."},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated","description":"The Managed Pipeline mode. Possible values include: `Integrated`, `Classic`. Defaults to `Integrated`."},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"The configures the minimum version of TLS required for SSL requests. Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"description":"The number of pre-warmed instances for this function app. Only affects apps on an Elastic Premium plan.","computed":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Remote Debugging be enabled. Defaults to `false`."},"remote_debugging_version":{"type":"TypeString","optional":true,"description":"The Remote Debugging Version. Possible values include `VS2017`, `VS2019`, and `VS2022``","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"description":"Should Functions Runtime Scale Monitoring be enabled."},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"Configures the minimum version of TLS required for SSL requests to the SCM site Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"scm_type":{"type":"TypeString","description":"The SCM Type in use by the Linux Function App.","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Linux Function App `ip_restriction` configuration be used for the SCM also."},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Linux Web App use a 32-bit worker."},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Web Sockets be enabled. Defaults to `false`."},"worker_count":{"type":"TypeInt","optional":true,"description":"The number of Workers for this Linux Function App.","computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"connection_string_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"storage_account_access_key":{"type":"TypeString","optional":true,"description":"The access key which will be used to access the storage account for the Function App."},"storage_account_name":{"type":"TypeString","optional":true,"description":"The backend storage account name which will be used by this Function App."},"storage_key_vault_secret_id":{"type":"TypeString","optional":true,"description":"The Key Vault Secret ID, including version, that contains the Connection String to connect to the storage account for this Function App."},"storage_uses_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App use its Managed Identity to access storage?"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Linux Function App. **Note:** Using this value requires either `WEBSITE_RUN_FROM_PACKAGE=1` or `SCM_DO_BUILD_DURING_DEPLOYMENT=true` to be set on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_linux_function_app_slot":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs for [App Settings](https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings) and custom values.","elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"builtin_logging_enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should built in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting."},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App Slot use Client Certificates."},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Optional","description":"The mode of the Function App Slot's client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`."},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"content_share_force_disabled":{"type":"TypeBool","optional":true,"default":false,"description":"Force disable the content share settings."},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans."},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Is the Linux Function App Slot enabled."},"function_app_id":{"type":"TypeString","required":true,"description":"The ID of the Linux Function App this Slot is a member of.","forceNew":true},"functions_extension_version":{"type":"TypeString","optional":true,"default":"~4","description":"The runtime version associated with the Function App Slot."},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false,"description":"Can the Function App Slot only be accessed via HTTPS?"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Key Vault access.","computed":true},"kind":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"description":"Specifies the name of the Function App Slot.","forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_plan_id":{"type":"TypeString","optional":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"description":"If this Linux Web App is Always On enabled. Defaults to `false`.","computed":true},"api_definition_url":{"type":"TypeString","optional":true,"description":"The URL of the API definition that describes this Linux Function App."},"api_management_api_id":{"type":"TypeString","optional":true,"description":"The ID of the API Management API for this Linux Function App."},"app_command_line":{"type":"TypeString","optional":true,"description":"The program and any arguments used to launch this app via the command line. (Example `node myapp.js`)."},"app_scale_limit":{"type":"TypeInt","optional":true,"description":"The number of workers this function app can scale out to. Only applicable to apps on the Consumption and Premium plan.","computed":true},"app_service_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","optional":true,"default":35,"description":"The amount of disk space to use for logs. Valid values are between `25` and `100`."},"retention_period_days":{"type":"TypeInt","optional":true,"description":"The retention period for logs in days. Valid values are between `0` and `99999`. Defaults to `0` (never delete)."}}},"maxItems":1},"application_insights_connection_string":{"type":"TypeString","optional":true,"description":"The Connection String for linking the Linux Function App to Application Insights."},"application_insights_key":{"type":"TypeString","optional":true,"description":"The Instrumentation Key for connecting the Linux Function App to Application Insights."},"application_stack":{"type":"TypeList","optional":true,"elem":{"schema":{"docker":{"type":"TypeList","optional":true,"description":"A docker block","elem":{"schema":{"image_name":{"type":"TypeString","required":true,"description":"The name of the Docker image to use."},"image_tag":{"type":"TypeString","required":true,"description":"The image tag of the image to use."},"registry_password":{"type":"TypeString","optional":true,"description":"The password for the account to use to connect to the registry."},"registry_url":{"type":"TypeString","required":true,"description":"The URL of the docker registry."},"registry_username":{"type":"TypeString","optional":true,"description":"The username to use for connections to the registry."}}}},"dotnet_version":{"type":"TypeString","optional":true,"description":"The version of .Net. Possible values are `3.1`, `6.0` and `7.0`"},"java_version":{"type":"TypeString","optional":true,"description":"The version of Java to use. Possible values are `8`, `11`, and `17`"},"node_version":{"type":"TypeString","optional":true,"description":"The version of Node to use. Possible values include `12`, `14`, `16` and `18`"},"powershell_core_version":{"type":"TypeString","optional":true,"description":"The version of PowerShell Core to use. Possibles values are `7`, and `7.2`"},"python_version":{"type":"TypeString","optional":true,"description":"The version of Python to use. Possible values include `3.11`, `3.10`, `3.9`, `3.8`, and `3.7`."},"use_custom_runtime":{"type":"TypeBool","optional":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","optional":true,"default":false,"description":"Should the DotNet process use an isolated runtime. Defaults to `false`."}}},"maxItems":1},"auto_swap_slot_name":{"type":"TypeString","optional":true},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true,"description":"The Client ID of the Managed Service Identity to use for connections to the Azure Container Registry."},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should connections for Azure Container Registry use Managed Identity."},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"description":"Specifies a list of Default Documents for the Linux Web App.","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","description":"Is detailed error logging enabled","computed":true},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"description":"The number of minimum instances for this Linux Function App. Only affects apps on Elastic Premium plans.","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled","description":"State of FTP / FTPS service for this function app. Possible values include: `AllAllowed`, `FtpsOnly` and `Disabled`. Defaults to `Disabled`."},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`"},"health_check_path":{"type":"TypeString","optional":true,"description":"The path to be checked for this function app health."},"http2_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Specifies if the http2 protocol should be enabled. Defaults to `false`."},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","description":"The Linux FX Version","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests","description":"The Site load balancing mode. Possible values include: `WeightedRoundRobin`, `LeastRequests`, `LeastResponseTime`, `WeightedTotalTraffic`, `RequestHash`, `PerSiteRoundRobin`. Defaults to `LeastRequests` if omitted."},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated","description":"The Managed Pipeline mode. Possible values include: `Integrated`, `Classic`. Defaults to `Integrated`."},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"The configures the minimum version of TLS required for SSL requests. Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"description":"The number of pre-warmed instances for this function app. Only affects apps on an Elastic Premium plan.","computed":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Remote Debugging be enabled. Defaults to `false`."},"remote_debugging_version":{"type":"TypeString","optional":true,"description":"The Remote Debugging Version. Possible values include `VS2017`, `VS2019`, and `VS2022`","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"description":"Should Functions Runtime Scale Monitoring be enabled."},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"Configures the minimum version of TLS required for SSL requests to the SCM site Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"scm_type":{"type":"TypeString","description":"The SCM Type in use by the Linux Function App.","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Linux Function App `ip_restriction` configuration be used for the SCM also."},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Linux Web App use a 32-bit worker."},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Web Sockets be enabled. Defaults to `false`."},"worker_count":{"type":"TypeInt","optional":true,"description":"The number of Workers for this Linux Function App.","computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"storage_account_access_key":{"type":"TypeString","optional":true,"description":"The access key which will be used to access the storage account for the Function App Slot."},"storage_account_name":{"type":"TypeString","optional":true,"description":"The backend storage account name which will be used by this Function App Slot."},"storage_key_vault_secret_id":{"type":"TypeString","optional":true,"description":"The Key Vault Secret ID, including version, that contains the Connection String to connect to the storage account for this Function App."},"storage_uses_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App Slot use its Managed Identity to access storage?"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_linux_virtual_machine":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"admin_password":{"type":"TypeString","optional":true,"forceNew":true},"admin_ssh_key":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"public_key":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true,"forceNew":true}}}},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"allow_extension_operations":{"type":"TypeBool","optional":true,"default":true},"availability_set_id":{"type":"TypeString","optional":true,"forceNew":true},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"bypass_platform_safety_checks_on_user_schedule_enabled":{"type":"TypeBool","optional":true,"default":false},"capacity_reservation_group_id":{"type":"TypeString","optional":true},"computer_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true,"forceNew":true},"dedicated_host_group_id":{"type":"TypeString","optional":true},"dedicated_host_id":{"type":"TypeString","optional":true},"disable_password_authentication":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"gallery_application":{"type":"TypeList","optional":true,"elem":{"schema":{"configuration_blob_uri":{"type":"TypeString","optional":true},"order":{"type":"TypeInt","optional":true,"default":0},"tag":{"type":"TypeString","optional":true},"version_id":{"type":"TypeString","required":true}}},"maxItems":100},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_encryption_type":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"patch_assessment_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"patch_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain":{"type":"TypeInt","optional":true,"default":-1,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true},"public_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"reboot_setting":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"secure_boot_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"size":{"type":"TypeString","required":true},"source_image_id":{"type":"TypeString","optional":true,"forceNew":true},"source_image_reference":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"user_data":{"type":"TypeString","optional":true},"virtual_machine_id":{"type":"TypeString","computed":true},"virtual_machine_scale_set_id":{"type":"TypeString","optional":true,"forceNew":true},"vtpm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":45,"read":5,"delete":45,"update":45}},"azurerm_linux_virtual_machine_scale_set":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"admin_password":{"type":"TypeString","optional":true,"forceNew":true},"admin_ssh_key":{"type":"TypeSet","optional":true,"elem":{"schema":{"public_key":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}}},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"automatic_instance_repair":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"grace_period":{"type":"TypeString","optional":true,"default":"PT30M"}}},"maxItems":1},"automatic_os_upgrade_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"disable_automatic_rollback":{"type":"TypeBool","required":true},"enable_automatic_os_upgrade":{"type":"TypeBool","required":true}}},"maxItems":1},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"computer_name_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true},"data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"create_option":{"type":"TypeString","optional":true,"default":"Empty"},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","required":true},"lun":{"type":"TypeInt","required":true},"name":{"type":"TypeString","optional":true},"storage_account_type":{"type":"TypeString","required":true},"ultra_ssd_disk_iops_read_write":{"type":"TypeInt","optional":true,"computed":true},"ultra_ssd_disk_mbps_read_write":{"type":"TypeInt","optional":true,"computed":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"disable_password_authentication":{"type":"TypeBool","optional":true,"default":true},"do_not_run_extensions_on_overprovisioned_machines":{"type":"TypeBool","optional":true,"default":false},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extension":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true,"default":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"force_update_tag":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"provision_after_extensions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true}}}},"extension_operations_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"gallery_application":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"configuration_blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"order":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"tag":{"type":"TypeString","optional":true,"forceNew":true},"version_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":100},"gallery_applications":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"configuration_reference_blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"order":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"package_reference_id":{"type":"TypeString","required":true,"forceNew":true},"tag":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":100},"health_probe_id":{"type":"TypeString","optional":true},"host_group_id":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"instances":{"type":"TypeInt","optional":true,"default":0},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","required":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","optional":true,"default":false},"enable_ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":20},"load_balancer_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","optional":true,"default":false},"public_ip_address":{"type":"TypeList","optional":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","optional":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"ip_tag":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"tag":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}}},"name":{"type":"TypeString","required":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true}}}},"subnet_id":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true,"default":"IPv4"}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","optional":true},"primary":{"type":"TypeBool","optional":true,"default":false}}}},"os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_encryption_type":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"overprovision":{"type":"TypeBool","optional":true,"default":true},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain_count":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rolling_upgrade_policy":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"cross_zone_upgrades_enabled":{"type":"TypeBool","optional":true},"max_batch_instance_percent":{"type":"TypeInt","required":true},"max_unhealthy_instance_percent":{"type":"TypeInt","required":true},"max_unhealthy_upgraded_instance_percent":{"type":"TypeInt","required":true},"pause_time_between_batches":{"type":"TypeString","required":true},"prioritize_unhealthy_instances_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"scale_in":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"force_deletion_enabled":{"type":"TypeBool","optional":true,"default":false},"rule":{"type":"TypeString","optional":true,"default":"Default"}}},"maxItems":1},"scale_in_policy":{"type":"TypeString","optional":true,"computed":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"secure_boot_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"single_placement_group":{"type":"TypeBool","optional":true,"default":true},"sku":{"type":"TypeString","required":true},"source_image_id":{"type":"TypeString","optional":true},"source_image_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"spot_restore":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"timeout":{"type":"TypeString","optional":true,"default":"PT1H","forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"terminate_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"unique_id":{"type":"TypeString","computed":true},"upgrade_mode":{"type":"TypeString","optional":true,"default":"Manual","forceNew":true},"user_data":{"type":"TypeString","optional":true},"vtpm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"zone_balance":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_linux_web_app":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Required"},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","required":true}}},"maxItems":1},"detailed_error_messages":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_plan_id":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":true},"api_definition_url":{"type":"TypeString","optional":true},"api_management_api_id":{"type":"TypeString","optional":true},"app_command_line":{"type":"TypeString","optional":true},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"docker_image":{"type":"TypeString","optional":true},"docker_image_name":{"type":"TypeString","optional":true},"docker_image_tag":{"type":"TypeString","optional":true},"docker_registry_password":{"type":"TypeString","optional":true,"computed":true},"docker_registry_url":{"type":"TypeString","optional":true,"computed":true},"docker_registry_username":{"type":"TypeString","optional":true,"computed":true},"dotnet_version":{"type":"TypeString","optional":true},"go_version":{"type":"TypeString","optional":true},"java_server":{"type":"TypeString","optional":true},"java_server_version":{"type":"TypeString","optional":true},"java_version":{"type":"TypeString","optional":true},"node_version":{"type":"TypeString","optional":true},"php_version":{"type":"TypeString","optional":true},"python_version":{"type":"TypeString","optional":true},"ruby_version":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_heal_enabled":{"type":"TypeBool","optional":true},"auto_heal_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true},"minimum_process_execution_time":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"requests":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true}}},"maxItems":1},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"time_taken":{"type":"TypeString","required":true}}},"maxItems":1},"status_code":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"status_code_range":{"type":"TypeString","required":true},"sub_status":{"type":"TypeInt","optional":true},"win32_status_code":{"type":"TypeInt","optional":true}}}}}},"maxItems":1}}},"maxItems":1},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled"},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests"},"local_mysql_enabled":{"type":"TypeBool","optional":true,"default":false},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false},"worker_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"connection_string_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Linux Web App. **Note:** Using this value requires either `WEBSITE_RUN_FROM_PACKAGE=1` or `SCM_DO_BUILD_DURING_DEPLOYMENT=true` to be set on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_linux_web_app_slot":{"schema":{"app_metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"app_service_id":{"type":"TypeString","required":true},"app_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Required"},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","optional":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","required":true}}},"maxItems":1},"detailed_error_messages":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_plan_id":{"type":"TypeString","optional":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":true},"api_definition_url":{"type":"TypeString","optional":true},"api_management_api_id":{"type":"TypeString","optional":true},"app_command_line":{"type":"TypeString","optional":true},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"docker_image":{"type":"TypeString","optional":true},"docker_image_name":{"type":"TypeString","optional":true},"docker_image_tag":{"type":"TypeString","optional":true},"docker_registry_password":{"type":"TypeString","optional":true,"computed":true},"docker_registry_url":{"type":"TypeString","optional":true,"computed":true},"docker_registry_username":{"type":"TypeString","optional":true,"computed":true},"dotnet_version":{"type":"TypeString","optional":true},"go_version":{"type":"TypeString","optional":true},"java_server":{"type":"TypeString","optional":true},"java_server_version":{"type":"TypeString","optional":true},"java_version":{"type":"TypeString","optional":true},"node_version":{"type":"TypeString","optional":true},"php_version":{"type":"TypeString","optional":true},"python_version":{"type":"TypeString","optional":true},"ruby_version":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_heal_enabled":{"type":"TypeBool","optional":true},"auto_heal_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true},"minimum_process_execution_time":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"requests":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true}}},"maxItems":1},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"time_taken":{"type":"TypeString","required":true}}},"maxItems":1},"status_code":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"status_code_range":{"type":"TypeString","required":true},"sub_status":{"type":"TypeInt","optional":true},"win32_status_code":{"type":"TypeInt","optional":true}}}}}},"maxItems":1}}},"maxItems":1},"auto_swap_slot_name":{"type":"TypeString","optional":true},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled"},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests"},"local_mysql_enabled":{"type":"TypeBool","optional":true,"default":false},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false},"worker_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Windows Web App. **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_load_test":{"schema":{"data_plane_uri":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_local_network_gateway":{"schema":{"address_space":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"bgp_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"asn":{"type":"TypeInt","required":true},"bgp_peering_address":{"type":"TypeString","required":true},"peer_weight":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"gateway_address":{"type":"TypeString","optional":true},"gateway_fqdn":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_cluster":{"schema":{"cluster_id":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"size_gb":{"type":"TypeInt","optional":true,"default":1000},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":360,"read":5,"delete":30,"update":360}},"azurerm_log_analytics_cluster_customer_managed_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"log_analytics_cluster_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":360,"read":5,"delete":30,"update":360}},"azurerm_log_analytics_data_export_rule":{"schema":{"destination_resource_id":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":false},"export_rule_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"table_names":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"workspace_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_datasource_windows_event":{"schema":{"event_log_name":{"type":"TypeString","required":true},"event_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"workspace_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_datasource_windows_performance_counter":{"schema":{"counter_name":{"type":"TypeString","required":true},"instance_name":{"type":"TypeString","required":true},"interval_seconds":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"object_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"workspace_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_linked_service":{"schema":{"name":{"type":"TypeString","computed":true},"read_access_id":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"workspace_id":{"type":"TypeString","required":true},"write_access_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_linked_storage_account":{"schema":{"data_source_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"workspace_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_query_pack":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_query_pack_query":{"schema":{"additional_settings_json":{"type":"TypeString","optional":true},"body":{"type":"TypeString","required":true},"categories":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"query_pack_id":{"type":"TypeString","required":true,"forceNew":true},"resource_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"solutions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_saved_search":{"schema":{"category":{"type":"TypeString","required":true,"forceNew":true},"display_name":{"type":"TypeString","required":true,"forceNew":true},"function_alias":{"type":"TypeString","optional":true,"forceNew":true},"function_parameters":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_solution":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"product":{"type":"TypeString","required":true,"forceNew":true},"promotion_code":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"solution_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_name":{"type":"TypeString","required":true,"forceNew":true},"workspace_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_storage_insights":{"schema":{"blob_container_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true},"storage_account_key":{"type":"TypeString","required":true},"table_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_log_analytics_workspace":{"schema":{"allow_resource_only_permissions":{"type":"TypeBool","optional":true,"default":true},"cmk_for_query_forced":{"type":"TypeBool","optional":true},"daily_quota_gb":{"type":"TypeFloat","optional":true,"default":-1},"internet_ingestion_enabled":{"type":"TypeBool","optional":true,"default":true},"internet_query_enabled":{"type":"TypeBool","optional":true,"default":true},"local_authentication_disabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_shared_key":{"type":"TypeString","computed":true},"reservation_capacity_in_gb_per_day":{"type":"TypeInt","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_in_days":{"type":"TypeInt","optional":true,"computed":true},"secondary_shared_key":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_action_custom":{"schema":{"body":{"type":"TypeString","required":true},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_action_http":{"schema":{"body":{"type":"TypeString","optional":true},"headers":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"method":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"queries":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"run_after":{"type":"TypeSet","optional":true,"elem":{"schema":{"action_name":{"type":"TypeString","required":true},"action_result":{"type":"TypeString","required":true}}},"minItems":1},"uri":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account":{"schema":{"integration_service_environment_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_agreement":{"schema":{"agreement_type":{"type":"TypeString","required":true},"content":{"type":"TypeString","required":true},"guest_identity":{"type":"TypeList","required":true,"elem":{"schema":{"qualifier":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"guest_partner_name":{"type":"TypeString","required":true},"host_identity":{"type":"TypeList","required":true,"elem":{"schema":{"qualifier":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}},"maxItems":1},"host_partner_name":{"type":"TypeString","required":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_assembly":{"schema":{"assembly_name":{"type":"TypeString","required":true},"assembly_version":{"type":"TypeString","optional":true,"default":"0.0.0.0"},"content":{"type":"TypeString","optional":true},"content_link_uri":{"type":"TypeString","optional":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_batch_configuration":{"schema":{"batch_group_name":{"type":"TypeString","required":true,"forceNew":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"release_criteria":{"type":"TypeList","required":true,"elem":{"schema":{"batch_size":{"type":"TypeInt","optional":true},"message_count":{"type":"TypeInt","optional":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"end_time":{"type":"TypeString","optional":true},"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","required":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"hours":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"minutes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"month_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"monthly":{"type":"TypeSet","optional":true,"elem":{"schema":{"week":{"type":"TypeInt","required":true},"weekday":{"type":"TypeString","required":true}}}},"week_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"start_time":{"type":"TypeString","optional":true},"time_zone":{"type":"TypeString","optional":true}}},"maxItems":1}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_certificate":{"schema":{"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"key_vault_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","required":true},"key_version":{"type":"TypeString","optional":true}}},"maxItems":1},"metadata":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_certificate":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_map":{"schema":{"content":{"type":"TypeString","required":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"map_type":{"type":"TypeString","required":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_partner":{"schema":{"business_identity":{"type":"TypeSet","required":true,"elem":{"schema":{"qualifier":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_schema":{"schema":{"content":{"type":"TypeString","required":true},"file_name":{"type":"TypeString","optional":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_integration_account_session":{"schema":{"content":{"type":"TypeString","required":true},"integration_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_standard":{"schema":{"app_service_plan_id":{"type":"TypeString","required":true},"app_settings":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"bundle_version":{"type":"TypeString","optional":true,"default":"[1.*, 2.0.0)"},"client_affinity_enabled":{"type":"TypeBool","optional":true,"computed":true},"client_certificate_mode":{"type":"TypeString","optional":true},"connection_string":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":false},"app_scale_limit":{"type":"TypeInt","optional":true,"computed":true},"auto_swap_slot_name":{"type":"TypeString","computed":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"computed":true},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"default":false},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_min_tls_version":{"type":"TypeString","optional":true,"computed":true},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"storage_account_access_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_share_name":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"use_extension_bundle":{"type":"TypeBool","optional":true,"default":true},"version":{"type":"TypeString","optional":true,"default":"~3"},"virtual_network_subnet_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_trigger_custom":{"schema":{"body":{"type":"TypeString","required":true},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_trigger_http_request":{"schema":{"callback_url":{"type":"TypeString","computed":true},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"method":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"relative_path":{"type":"TypeString","optional":true},"schema":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_trigger_recurrence":{"schema":{"frequency":{"type":"TypeString","required":true},"interval":{"type":"TypeInt","required":true},"logic_app_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"at_these_hours":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"at_these_minutes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"}},"on_these_days":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"start_time":{"type":"TypeString","optional":true},"time_zone":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logic_app_workflow":{"schema":{"access_control":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_caller_ip_address_range":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"content":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_caller_ip_address_range":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_caller_ip_address_range":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"open_authentication_policy":{"type":"TypeSet","optional":true,"elem":{"schema":{"claim":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"workflow_management":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_caller_ip_address_range":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"access_endpoint":{"type":"TypeString","computed":true},"connector_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connector_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"integration_service_environment_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logic_app_integration_account_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workflow_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workflow_schema":{"type":"TypeString","optional":true,"default":"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#","forceNew":true},"workflow_version":{"type":"TypeString","optional":true,"default":"1.0.0.0","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logz_monitor":{"schema":{"company_name":{"type":"TypeString","optional":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"enterprise_app_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logz_organization_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"billing_cycle":{"type":"TypeString","required":true,"forceNew":true},"effective_date":{"type":"TypeString","required":true,"forceNew":true},"plan_id":{"type":"TypeString","optional":true,"default":"100gb14days","forceNew":true},"usage_type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"single_sign_on_url":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"email":{"type":"TypeString","required":true,"forceNew":true},"first_name":{"type":"TypeString","required":true,"forceNew":true},"last_name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logz_sub_account":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"logz_monitor_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"email":{"type":"TypeString","required":true,"forceNew":true},"first_name":{"type":"TypeString","required":true,"forceNew":true},"last_name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logz_sub_account_tag_rule":{"schema":{"logz_sub_account_id":{"type":"TypeString","required":true,"forceNew":true},"send_aad_logs":{"type":"TypeBool","optional":true,"default":false},"send_activity_logs":{"type":"TypeBool","optional":true,"default":false},"send_subscription_logs":{"type":"TypeBool","optional":true,"default":false},"tag_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}},"maxItems":10}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_logz_tag_rule":{"schema":{"logz_monitor_id":{"type":"TypeString","required":true,"forceNew":true},"send_aad_logs":{"type":"TypeBool","optional":true,"default":false},"send_activity_logs":{"type":"TypeBool","optional":true,"default":false},"send_subscription_logs":{"type":"TypeBool","optional":true,"default":false},"tag_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","optional":true}}},"maxItems":10}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_compute_cluster":{"schema":{"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"machine_learning_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_public_ip_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"scale_settings":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"max_node_count":{"type":"TypeInt","required":true,"forceNew":true},"min_node_count":{"type":"TypeInt","required":true,"forceNew":true},"scale_down_nodes_after_idle_duration":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"ssh":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true,"forceNew":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"key_value":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"ssh_public_access_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"subnet_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"vm_priority":{"type":"TypeString","required":true,"forceNew":true},"vm_size":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_machine_learning_compute_instance":{"schema":{"assign_to_user":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"object_id":{"type":"TypeString","optional":true},"tenant_id":{"type":"TypeString","optional":true}}},"maxItems":1},"authorization_type":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"machine_learning_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_public_ip_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"ssh":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"port":{"type":"TypeInt","computed":true},"public_key":{"type":"TypeString","required":true},"username":{"type":"TypeString","computed":true}}},"maxItems":1},"subnet_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"virtual_machine_size":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_machine_learning_datastore_blobstorage":{"schema":{"account_key":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"is_default":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"service_data_auth_identity":{"type":"TypeString","optional":true,"default":"None"},"shared_access_signature":{"type":"TypeString","optional":true},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_datastore_datalake_gen2":{"schema":{"authority_url":{"type":"TypeString","optional":true,"computed":true},"client_id":{"type":"TypeString","optional":true},"client_secret":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"is_default":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"service_data_identity":{"type":"TypeString","optional":true,"default":"None"},"storage_container_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","optional":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_datastore_fileshare":{"schema":{"account_key":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"is_default":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"service_data_identity":{"type":"TypeString","optional":true,"default":"None"},"shared_access_signature":{"type":"TypeString","optional":true},"storage_fileshare_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_inference_cluster":{"schema":{"cluster_purpose":{"type":"TypeString","optional":true,"default":"FastProd","forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"kubernetes_cluster_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"machine_learning_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"ssl":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"cert":{"type":"TypeString","optional":true,"default":"","forceNew":true},"cname":{"type":"TypeString","optional":true,"default":"","forceNew":true},"key":{"type":"TypeString","optional":true,"default":"","forceNew":true},"leaf_domain_label":{"type":"TypeString","optional":true,"default":"","forceNew":true},"overwrite_existing_domain":{"type":"TypeBool","optional":true,"default":"","forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_machine_learning_synapse_spark":{"schema":{"description":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"machine_learning_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"synapse_spark_pool_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_machine_learning_workspace":{"schema":{"application_insights_id":{"type":"TypeString","required":true,"forceNew":true},"container_registry_id":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"discovery_url":{"type":"TypeString","computed":true},"encryption":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"key_id":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"friendly_name":{"type":"TypeString","optional":true},"high_business_impact":{"type":"TypeBool","optional":true},"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"image_build_compute_name":{"type":"TypeString","optional":true},"key_vault_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_user_assigned_identity":{"type":"TypeString","optional":true},"public_access_behind_virtual_network_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"default":"Basic"},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"v1_legacy_mode_enabled":{"type":"TypeBool","optional":true,"default":false},"workspace_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_maintenance_assignment_dedicated_host":{"schema":{"dedicated_host_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_maintenance_assignment_virtual_machine":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_maintenance_assignment_virtual_machine_scale_set":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_machine_scale_set_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_maintenance_configuration":{"schema":{"in_guest_user_patch_mode":{"type":"TypeString","optional":true},"install_patches":{"type":"TypeList","optional":true,"elem":{"schema":{"linux":{"type":"TypeList","optional":true,"elem":{"schema":{"classifications_to_include":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"package_names_mask_to_exclude":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"package_names_mask_to_include":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1},"reboot":{"type":"TypeString","optional":true},"windows":{"type":"TypeList","optional":true,"elem":{"schema":{"classifications_to_include":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kb_numbers_to_exclude":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kb_numbers_to_include":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1}}},"maxItems":1,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"visibility":{"type":"TypeString","optional":true,"default":"Custom"},"window":{"type":"TypeList","optional":true,"elem":{"schema":{"duration":{"type":"TypeString","optional":true},"expiration_date_time":{"type":"TypeString","optional":true},"recur_every":{"type":"TypeString","optional":true},"start_date_time":{"type":"TypeString","required":true},"time_zone":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_managed_application":{"schema":{"application_definition_id":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outputs":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"parameter_values":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"promotion_code":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_managed_application_definition":{"schema":{"authorization":{"type":"TypeSet","optional":true,"elem":{"schema":{"role_definition_id":{"type":"TypeString","required":true},"service_principal_id":{"type":"TypeString","required":true}}},"minItems":1},"create_ui_definition":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"lock_level":{"type":"TypeString","required":true,"forceNew":true},"main_template":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"package_enabled":{"type":"TypeBool","optional":true,"default":true},"package_file_uri":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_managed_disk":{"schema":{"create_option":{"type":"TypeString","required":true,"forceNew":true},"disk_access_id":{"type":"TypeString","optional":true},"disk_encryption_set_id":{"type":"TypeString","optional":true},"disk_iops_read_only":{"type":"TypeInt","optional":true,"computed":true},"disk_iops_read_write":{"type":"TypeInt","optional":true,"computed":true},"disk_mbps_read_only":{"type":"TypeInt","optional":true,"computed":true},"disk_mbps_read_write":{"type":"TypeInt","optional":true,"computed":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"encryption_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"key_encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"gallery_image_reference_id":{"type":"TypeString","optional":true,"forceNew":true},"hyper_v_generation":{"type":"TypeString","optional":true,"forceNew":true},"image_reference_id":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logical_sector_size":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"max_shares":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_access_policy":{"type":"TypeString","optional":true},"on_demand_bursting_enabled":{"type":"TypeBool","optional":true},"optimized_frequent_attach_enabled":{"type":"TypeBool","optional":true,"default":false},"os_type":{"type":"TypeString","optional":true},"performance_plus_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_type":{"type":"TypeString","optional":true,"forceNew":true},"source_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"source_uri":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"storage_account_id":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","optional":true,"computed":true},"trusted_launch_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"upload_size_bytes":{"type":"TypeInt","optional":true,"forceNew":true},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_managed_disk_sas_token":{"schema":{"access_level":{"type":"TypeString","required":true,"forceNew":true},"duration_in_seconds":{"type":"TypeInt","required":true,"forceNew":true},"managed_disk_id":{"type":"TypeString","required":true,"forceNew":true},"sas_url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_managed_lustre_file_system":{"schema":{"encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"hsm_setting":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"container_id":{"type":"TypeString","required":true,"forceNew":true},"import_prefix":{"type":"TypeString","optional":true,"forceNew":true},"logging_container_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","required":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"time_of_day_in_utc":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"storage_capacity_in_tb":{"type":"TypeInt","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group":{"schema":{"display_name":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"parent_management_group_id":{"type":"TypeString","optional":true,"computed":true},"subscription_ids":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group_policy_assignment":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enforce":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","optional":true,"forceNew":true},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"policy_definition_reference_id":{"type":"TypeString","optional":true}}}},"not_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","computed":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"value":{"type":"TypeString","required":true}}}},"parameters":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true,"forceNew":true},"resource_selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","required":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","required":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group_policy_exemption":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"exemption_category":{"type":"TypeString","required":true},"expires_on":{"type":"TypeString","optional":true},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_reference_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group_policy_remediation":{"schema":{"failure_percentage":{"type":"TypeFloat","optional":true},"location_filters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parallel_deployments":{"type":"TypeInt","optional":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_id":{"type":"TypeString","optional":true},"policy_definition_reference_id":{"type":"TypeString","optional":true},"resource_count":{"type":"TypeInt","optional":true},"resource_discovery_mode":{"type":"TypeString","optional":true,"default":"ExistingNonCompliant"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_management_group_subscription_association":{"schema":{"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":5,"read":5,"delete":5}},"azurerm_management_group_template_deployment":{"schema":{"debug_level":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_content":{"type":"TypeString","computed":true},"parameters_content":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_content":{"type":"TypeString","optional":true,"computed":true},"template_spec_version_id":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_management_lock":{"schema":{"lock_level":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true,"forceNew":true},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_maps_account":{"schema":{"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"x_ms_client_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_maps_creator":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"maps_account_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_units":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mariadb_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mariadb_database":{"schema":{"charset":{"type":"TypeString","required":true,"forceNew":true},"collation":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mariadb_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mariadb_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","optional":true},"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":true},"backup_retention_days":{"type":"TypeInt","optional":true,"computed":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default"},"creation_source_server_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore_point_in_time":{"type":"TypeString","optional":true},"sku_name":{"type":"TypeString","required":true},"ssl_enforcement_enabled":{"type":"TypeBool","required":true},"ssl_minimal_tls_version_enforced":{"type":"TypeString","optional":true,"default":"TLS1_2"},"storage_mb":{"type":"TypeInt","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":60,"update":60}},"azurerm_mariadb_virtual_network_rule":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_marketplace_agreement":{"schema":{"license_text_link":{"type":"TypeString","computed":true},"offer":{"type":"TypeString","required":true,"forceNew":true},"plan":{"type":"TypeString","required":true,"forceNew":true},"privacy_policy_link":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_marketplace_role_assignment":{"schema":{"condition":{"type":"TypeString","optional":true,"forceNew":true},"condition_version":{"type":"TypeString","optional":true,"forceNew":true},"delegated_managed_identity_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","optional":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"principal_type":{"type":"TypeString","computed":true},"role_definition_id":{"type":"TypeString","optional":true,"forceNew":true},"role_definition_name":{"type":"TypeString","optional":true,"forceNew":true},"skip_service_principal_aad_check":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_media_asset":{"schema":{"alternate_id":{"type":"TypeString","optional":true},"container":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_asset_filter":{"schema":{"asset_id":{"type":"TypeString","required":true,"forceNew":true},"first_quality_bitrate":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"presentation_time_range":{"type":"TypeList","optional":true,"elem":{"schema":{"end_in_units":{"type":"TypeInt","optional":true},"force_end":{"type":"TypeBool","optional":true},"live_backoff_in_units":{"type":"TypeInt","optional":true},"presentation_window_in_units":{"type":"TypeInt","optional":true},"start_in_units":{"type":"TypeInt","optional":true},"unit_timescale_in_miliseconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"track_selection":{"type":"TypeList","optional":true,"elem":{"schema":{"condition":{"type":"TypeList","required":true,"elem":{"schema":{"operation":{"type":"TypeString","optional":true},"property":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_content_key_policy":{"schema":{"description":{"type":"TypeString","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_option":{"type":"TypeSet","required":true,"elem":{"schema":{"clear_key_configuration_enabled":{"type":"TypeBool","optional":true},"fairplay_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"ask":{"type":"TypeString","optional":true},"offline_rental_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"playback_duration_seconds":{"type":"TypeInt","optional":true},"storage_duration_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"pfx":{"type":"TypeString","optional":true},"pfx_password":{"type":"TypeString","optional":true},"rental_and_lease_key_type":{"type":"TypeString","optional":true},"rental_duration_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"open_restriction_enabled":{"type":"TypeBool","optional":true},"playready_configuration_license":{"type":"TypeList","optional":true,"elem":{"schema":{"allow_test_devices":{"type":"TypeBool","optional":true},"begin_date":{"type":"TypeString","optional":true},"content_key_location_from_header_enabled":{"type":"TypeBool","optional":true},"content_key_location_from_key_id":{"type":"TypeString","optional":true},"content_type":{"type":"TypeString","optional":true},"expiration_date":{"type":"TypeString","optional":true},"grace_period":{"type":"TypeString","optional":true},"license_type":{"type":"TypeString","optional":true},"play_right":{"type":"TypeList","optional":true,"elem":{"schema":{"agc_and_color_stripe_restriction":{"type":"TypeInt","optional":true},"allow_passing_video_content_to_unknown_output":{"type":"TypeString","optional":true},"analog_video_opl":{"type":"TypeInt","optional":true},"compressed_digital_audio_opl":{"type":"TypeInt","optional":true},"compressed_digital_video_opl":{"type":"TypeInt","optional":true},"digital_video_only_content_restriction":{"type":"TypeBool","optional":true},"explicit_analog_television_output_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"best_effort_enforced":{"type":"TypeBool","optional":true,"default":false},"control_bits":{"type":"TypeInt","required":true}}},"maxItems":1},"first_play_expiration":{"type":"TypeString","optional":true},"image_constraint_for_analog_component_video_restriction":{"type":"TypeBool","optional":true},"image_constraint_for_analog_computer_monitor_restriction":{"type":"TypeBool","optional":true},"scms_restriction":{"type":"TypeInt","optional":true},"uncompressed_digital_audio_opl":{"type":"TypeInt","optional":true},"uncompressed_digital_video_opl":{"type":"TypeInt","optional":true}}},"maxItems":1},"relative_begin_date":{"type":"TypeString","optional":true},"relative_expiration_date":{"type":"TypeString","optional":true},"security_level":{"type":"TypeString","optional":true}}}},"playready_response_custom_data":{"type":"TypeString","optional":true},"token_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"alternate_key":{"type":"TypeList","optional":true,"elem":{"schema":{"rsa_token_key_exponent":{"type":"TypeString","optional":true},"rsa_token_key_modulus":{"type":"TypeString","optional":true},"symmetric_token_key":{"type":"TypeString","optional":true},"x509_token_key_raw":{"type":"TypeString","optional":true}}}},"audience":{"type":"TypeString","optional":true},"issuer":{"type":"TypeString","optional":true},"open_id_connect_discovery_document":{"type":"TypeString","optional":true},"primary_rsa_token_key_exponent":{"type":"TypeString","optional":true},"primary_rsa_token_key_modulus":{"type":"TypeString","optional":true},"primary_symmetric_token_key":{"type":"TypeString","optional":true},"primary_x509_token_key_raw":{"type":"TypeString","optional":true},"required_claim":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"token_type":{"type":"TypeString","optional":true}}},"maxItems":1},"widevine_configuration_template":{"type":"TypeString","optional":true}}},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_job":{"schema":{"description":{"type":"TypeString","optional":true},"input_asset":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_asset":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}},"minItems":1},"priority":{"type":"TypeString","optional":true,"default":"Normal","forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"transform_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_live_event":{"schema":{"auto_start_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"cross_site_access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"client_access_policy":{"type":"TypeString","optional":true},"cross_domain_policy":{"type":"TypeString","optional":true}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"encoding":{"type":"TypeList","optional":true,"elem":{"schema":{"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"preset_name":{"type":"TypeString","optional":true,"forceNew":true},"stretch_mode":{"type":"TypeString","optional":true,"default":"None"},"type":{"type":"TypeString","optional":true,"default":"None","forceNew":true}}},"maxItems":1},"hostname_prefix":{"type":"TypeString","optional":true},"input":{"type":"TypeList","required":true,"elem":{"schema":{"access_token":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"endpoint":{"type":"TypeList","computed":true,"elem":{"schema":{"protocol":{"type":"TypeString","computed":true},"url":{"type":"TypeString","computed":true}}}},"ip_access_control_allow":{"type":"TypeList","optional":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"subnet_prefix_length":{"type":"TypeInt","optional":true}}}},"key_frame_interval_duration":{"type":"TypeString","optional":true},"streaming_protocol":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"preview":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"alternative_media_id":{"type":"TypeString","optional":true},"endpoint":{"type":"TypeList","computed":true,"elem":{"schema":{"protocol":{"type":"TypeString","computed":true},"url":{"type":"TypeString","computed":true}}}},"ip_access_control_allow":{"type":"TypeList","optional":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"subnet_prefix_length":{"type":"TypeInt","optional":true}}}},"preview_locator":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"streaming_policy_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_options":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"transcription_languages":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"use_static_hostname":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_live_event_output":{"schema":{"archive_window_duration":{"type":"TypeString","required":true,"forceNew":true},"asset_name":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"hls_fragments_per_ts_segment":{"type":"TypeInt","optional":true,"forceNew":true},"live_event_id":{"type":"TypeString","required":true,"forceNew":true},"manifest_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_snap_time_in_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"rewind_window_duration":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_services_account":{"schema":{"encryption":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"current_key_identifier":{"type":"TypeString","computed":true},"key_vault_key_identifier":{"type":"TypeString","optional":true},"managed_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"use_system_assigned_identity":{"type":"TypeBool","optional":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"type":{"type":"TypeString","optional":true,"default":"SystemKey"}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_delivery_access_control":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true},"ip_allow_list":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account":{"type":"TypeSet","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"is_primary":{"type":"TypeBool","optional":true,"default":false},"managed_identity":{"type":"TypeList","optional":true,"elem":{"schema":{"use_system_assigned_identity":{"type":"TypeBool","optional":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1}}}},"storage_authentication_type":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_services_account_filter":{"schema":{"first_quality_bitrate":{"type":"TypeInt","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"presentation_time_range":{"type":"TypeList","optional":true,"elem":{"schema":{"end_in_units":{"type":"TypeInt","optional":true},"force_end":{"type":"TypeBool","optional":true},"live_backoff_in_units":{"type":"TypeInt","optional":true},"presentation_window_in_units":{"type":"TypeInt","optional":true},"start_in_units":{"type":"TypeInt","optional":true},"unit_timescale_in_milliseconds":{"type":"TypeInt","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"track_selection":{"type":"TypeList","optional":true,"elem":{"schema":{"condition":{"type":"TypeList","required":true,"elem":{"schema":{"operation":{"type":"TypeString","required":true},"property":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_streaming_endpoint":{"schema":{"access_control":{"type":"TypeList","optional":true,"elem":{"schema":{"akamai_signature_header_authentication_key":{"type":"TypeList","optional":true,"elem":{"schema":{"base64_key":{"type":"TypeString","optional":true},"expiration":{"type":"TypeString","optional":true},"identifier":{"type":"TypeString","optional":true}}}},"ip_allow":{"type":"TypeList","optional":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"subnet_prefix_length":{"type":"TypeInt","optional":true}}}}}},"maxItems":1},"auto_start_enabled":{"type":"TypeBool","optional":true,"computed":true},"cdn_enabled":{"type":"TypeBool","optional":true},"cdn_profile":{"type":"TypeString","optional":true,"computed":true},"cdn_provider":{"type":"TypeString","optional":true,"computed":true},"cross_site_access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"client_access_policy":{"type":"TypeString","optional":true,"computed":true},"cross_domain_policy":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"custom_host_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"host_name":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_cache_age_seconds":{"type":"TypeInt","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scale_units":{"type":"TypeInt","required":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_media_streaming_locator":{"schema":{"alternative_media_id":{"type":"TypeString","optional":true,"forceNew":true},"asset_name":{"type":"TypeString","required":true,"forceNew":true},"content_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"content_key_id":{"type":"TypeString","optional":true,"forceNew":true},"label_reference_in_streaming_policy":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"forceNew":true},"value":{"type":"TypeString","optional":true,"forceNew":true}}}},"default_content_key_policy_name":{"type":"TypeString","optional":true,"forceNew":true},"end_time":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"filter_names":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"start_time":{"type":"TypeString","optional":true,"forceNew":true},"streaming_locator_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"streaming_policy_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_media_streaming_policy":{"schema":{"common_encryption_cbcs":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"clear_key_encryption":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"custom_keys_acquisition_url_template":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"default_content_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"drm_fairplay":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"allow_persistent_license":{"type":"TypeBool","optional":true,"forceNew":true},"custom_license_acquisition_url_template":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"enabled_protocols":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dash":{"type":"TypeBool","optional":true,"forceNew":true},"download":{"type":"TypeBool","optional":true,"forceNew":true},"hls":{"type":"TypeBool","optional":true,"forceNew":true},"smooth_streaming":{"type":"TypeBool","optional":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"common_encryption_cenc":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"clear_key_encryption":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"custom_keys_acquisition_url_template":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"clear_track":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"condition":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"operation":{"type":"TypeString","required":true,"forceNew":true},"property":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}}}}}}},"content_key_to_track_mapping":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true},"track":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"condition":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"operation":{"type":"TypeString","required":true,"forceNew":true},"property":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}}}}}}}}}},"default_content_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"drm_playready":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"custom_attributes":{"type":"TypeString","optional":true,"forceNew":true},"custom_license_acquisition_url_template":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"drm_widevine_custom_license_acquisition_url_template":{"type":"TypeString","optional":true,"forceNew":true},"enabled_protocols":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dash":{"type":"TypeBool","optional":true,"forceNew":true},"download":{"type":"TypeBool","optional":true,"forceNew":true},"hls":{"type":"TypeBool","optional":true,"forceNew":true},"smooth_streaming":{"type":"TypeBool","optional":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"default_content_key_policy_name":{"type":"TypeString","optional":true,"forceNew":true},"envelope_encryption":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"custom_keys_acquisition_url_template":{"type":"TypeString","optional":true,"forceNew":true},"default_content_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true,"forceNew":true},"policy_name":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"enabled_protocols":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dash":{"type":"TypeBool","optional":true,"forceNew":true},"download":{"type":"TypeBool","optional":true,"forceNew":true},"hls":{"type":"TypeBool","optional":true,"forceNew":true},"smooth_streaming":{"type":"TypeBool","optional":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"no_encryption_enabled_protocols":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"dash":{"type":"TypeBool","optional":true,"forceNew":true},"download":{"type":"TypeBool","optional":true,"forceNew":true},"hls":{"type":"TypeBool","optional":true,"forceNew":true},"smooth_streaming":{"type":"TypeBool","optional":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_media_transform":{"schema":{"description":{"type":"TypeString","optional":true},"media_services_account_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_analyzer_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_analysis_mode":{"type":"TypeString","optional":true,"default":"Standard"},"audio_language":{"type":"TypeString","optional":true},"experimental_options":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"builtin_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"preset_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"complexity":{"type":"TypeString","optional":true},"interleave_output":{"type":"TypeString","optional":true},"key_frame_interval_in_seconds":{"type":"TypeFloat","optional":true},"max_bitrate_bps":{"type":"TypeInt","optional":true},"max_height":{"type":"TypeInt","optional":true},"max_layers":{"type":"TypeInt","optional":true},"min_bitrate_bps":{"type":"TypeInt","optional":true},"min_height":{"type":"TypeInt","optional":true}}},"maxItems":1},"preset_name":{"type":"TypeString","required":true}}},"maxItems":1},"custom_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"codec":{"type":"TypeList","required":true,"elem":{"schema":{"aac_audio":{"type":"TypeList","optional":true,"elem":{"schema":{"bitrate":{"type":"TypeInt","optional":true,"default":128000},"channels":{"type":"TypeInt","optional":true,"default":2},"label":{"type":"TypeString","optional":true},"profile":{"type":"TypeString","optional":true,"default":"AacLc"},"sampling_rate":{"type":"TypeInt","optional":true,"default":48000}}},"maxItems":1},"copy_audio":{"type":"TypeList","optional":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true}}},"maxItems":1},"copy_video":{"type":"TypeList","optional":true,"elem":{"schema":{"label":{"type":"TypeString","optional":true}}},"maxItems":1},"dd_audio":{"type":"TypeList","optional":true,"elem":{"schema":{"bitrate":{"type":"TypeInt","optional":true,"default":192000},"channels":{"type":"TypeInt","optional":true,"default":2},"label":{"type":"TypeString","optional":true},"sampling_rate":{"type":"TypeInt","optional":true,"default":48000}}},"maxItems":1},"h264_video":{"type":"TypeList","optional":true,"elem":{"schema":{"complexity":{"type":"TypeString","optional":true,"default":"Balanced"},"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"label":{"type":"TypeString","optional":true},"layer":{"type":"TypeList","optional":true,"elem":{"schema":{"adaptive_b_frame_enabled":{"type":"TypeBool","optional":true,"default":true},"b_frames":{"type":"TypeInt","optional":true,"computed":true},"bitrate":{"type":"TypeInt","required":true},"buffer_window":{"type":"TypeString","optional":true,"default":"PT5S"},"crf":{"type":"TypeFloat","optional":true,"default":23},"entropy_mode":{"type":"TypeString","optional":true,"computed":true},"frame_rate":{"type":"TypeString","optional":true},"height":{"type":"TypeString","optional":true,"computed":true},"label":{"type":"TypeString","optional":true},"level":{"type":"TypeString","optional":true,"default":"auto"},"max_bitrate":{"type":"TypeInt","optional":true,"computed":true},"profile":{"type":"TypeString","optional":true,"default":"Auto"},"reference_frames":{"type":"TypeInt","optional":true,"computed":true},"slices":{"type":"TypeInt","optional":true,"computed":true},"width":{"type":"TypeString","optional":true,"computed":true}}},"minItems":1},"rate_control_mode":{"type":"TypeString","optional":true,"default":"ABR"},"scene_change_detection_enabled":{"type":"TypeBool","optional":true,"default":false},"stretch_mode":{"type":"TypeString","optional":true,"default":"AutoSize"},"sync_mode":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"h265_video":{"type":"TypeList","optional":true,"elem":{"schema":{"complexity":{"type":"TypeString","optional":true,"default":"Balanced"},"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"label":{"type":"TypeString","optional":true},"layer":{"type":"TypeList","optional":true,"elem":{"schema":{"adaptive_b_frame_enabled":{"type":"TypeBool","optional":true,"default":true},"b_frames":{"type":"TypeInt","optional":true,"computed":true},"bitrate":{"type":"TypeInt","required":true},"buffer_window":{"type":"TypeString","optional":true,"default":"PT5S"},"crf":{"type":"TypeFloat","optional":true,"default":28},"frame_rate":{"type":"TypeString","optional":true},"height":{"type":"TypeString","optional":true,"computed":true},"label":{"type":"TypeString","optional":true},"level":{"type":"TypeString","optional":true,"default":"auto"},"max_bitrate":{"type":"TypeInt","optional":true,"computed":true},"profile":{"type":"TypeString","optional":true,"default":"Auto"},"reference_frames":{"type":"TypeInt","optional":true,"computed":true},"slices":{"type":"TypeInt","optional":true,"computed":true},"width":{"type":"TypeString","optional":true,"computed":true}}},"minItems":1},"scene_change_detection_enabled":{"type":"TypeBool","optional":true,"default":false},"stretch_mode":{"type":"TypeString","optional":true,"default":"AutoSize"},"sync_mode":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"jpg_image":{"type":"TypeList","optional":true,"elem":{"schema":{"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"label":{"type":"TypeString","optional":true},"layer":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"label":{"type":"TypeString","optional":true},"quality":{"type":"TypeInt","optional":true,"default":70},"width":{"type":"TypeString","optional":true}}},"minItems":1},"range":{"type":"TypeString","optional":true,"default":"100%"},"sprite_column":{"type":"TypeInt","optional":true,"default":0},"start":{"type":"TypeString","required":true},"step":{"type":"TypeString","optional":true},"stretch_mode":{"type":"TypeString","optional":true,"default":"AutoSize"},"sync_mode":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"png_image":{"type":"TypeList","optional":true,"elem":{"schema":{"key_frame_interval":{"type":"TypeString","optional":true,"default":"PT2S"},"label":{"type":"TypeString","optional":true},"layer":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"label":{"type":"TypeString","optional":true},"width":{"type":"TypeString","optional":true}}},"minItems":1},"range":{"type":"TypeString","optional":true,"default":"100%"},"start":{"type":"TypeString","required":true},"step":{"type":"TypeString","optional":true},"stretch_mode":{"type":"TypeString","optional":true,"default":"AutoSize"},"sync_mode":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1}}},"minItems":1},"experimental_options":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"crop_rectangle":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"left":{"type":"TypeString","optional":true},"top":{"type":"TypeString","optional":true},"width":{"type":"TypeString","optional":true}}},"maxItems":1},"deinterlace":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","optional":true,"default":"AutoPixelAdaptive"},"parity":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"fade_in":{"type":"TypeList","optional":true,"elem":{"schema":{"duration":{"type":"TypeString","required":true},"fade_color":{"type":"TypeString","required":true},"start":{"type":"TypeString","optional":true,"default":"0"}}},"maxItems":1},"fade_out":{"type":"TypeList","optional":true,"elem":{"schema":{"duration":{"type":"TypeString","required":true},"fade_color":{"type":"TypeString","required":true},"start":{"type":"TypeString","optional":true,"default":"0"}}},"maxItems":1},"overlay":{"type":"TypeList","optional":true,"elem":{"schema":{"audio":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_gain_level":{"type":"TypeFloat","optional":true,"default":1},"end":{"type":"TypeString","optional":true},"fade_in_duration":{"type":"TypeString","optional":true},"fade_out_duration":{"type":"TypeString","optional":true},"input_label":{"type":"TypeString","required":true},"start":{"type":"TypeString","optional":true}}},"maxItems":1},"video":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_gain_level":{"type":"TypeFloat","optional":true,"default":1},"crop_rectangle":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"left":{"type":"TypeString","optional":true},"top":{"type":"TypeString","optional":true},"width":{"type":"TypeString","optional":true}}},"maxItems":1},"end":{"type":"TypeString","optional":true},"fade_in_duration":{"type":"TypeString","optional":true},"fade_out_duration":{"type":"TypeString","optional":true},"input_label":{"type":"TypeString","required":true},"opacity":{"type":"TypeFloat","optional":true,"default":1},"position":{"type":"TypeList","optional":true,"elem":{"schema":{"height":{"type":"TypeString","optional":true},"left":{"type":"TypeString","optional":true},"top":{"type":"TypeString","optional":true},"width":{"type":"TypeString","optional":true}}},"maxItems":1},"start":{"type":"TypeString","optional":true}}},"maxItems":1}}},"minItems":1},"rotation":{"type":"TypeString","optional":true,"default":"Auto"}}},"maxItems":1},"format":{"type":"TypeList","required":true,"elem":{"schema":{"jpg":{"type":"TypeList","optional":true,"elem":{"schema":{"filename_pattern":{"type":"TypeString","required":true}}},"maxItems":1},"mp4":{"type":"TypeList","optional":true,"elem":{"schema":{"filename_pattern":{"type":"TypeString","required":true},"output_file":{"type":"TypeList","optional":true,"elem":{"schema":{"labels":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"minItems":1}}},"maxItems":1},"png":{"type":"TypeList","optional":true,"elem":{"schema":{"filename_pattern":{"type":"TypeString","required":true}}},"maxItems":1},"transport_stream":{"type":"TypeList","optional":true,"elem":{"schema":{"filename_pattern":{"type":"TypeString","required":true},"output_file":{"type":"TypeList","optional":true,"elem":{"schema":{"labels":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}},"minItems":1}}},"maxItems":1}}},"minItems":1}}},"maxItems":1},"face_detector_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"analysis_resolution":{"type":"TypeString","optional":true,"default":"SourceResolution"},"blur_type":{"type":"TypeString","optional":true},"experimental_options":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"face_redactor_mode":{"type":"TypeString","optional":true,"default":"Analyze"}}},"maxItems":1},"on_error_action":{"type":"TypeString","optional":true,"default":"StopProcessingJob"},"relative_priority":{"type":"TypeString","optional":true,"default":"Normal"},"video_analyzer_preset":{"type":"TypeList","optional":true,"elem":{"schema":{"audio_analysis_mode":{"type":"TypeString","optional":true,"default":"Standard"},"audio_language":{"type":"TypeString","optional":true},"experimental_options":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"insights_type":{"type":"TypeString","optional":true,"default":"AllInsights"}}},"maxItems":1}}},"minItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mobile_network":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_country_code":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_code":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_attached_data_network":{"schema":{"dns_addresses":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_data_network_name":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_packet_core_data_plane_id":{"type":"TypeString","required":true,"forceNew":true},"network_address_port_translation":{"type":"TypeList","optional":true,"elem":{"schema":{"icmp_pinhole_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":180},"pinhole_maximum_number":{"type":"TypeInt","optional":true,"default":65536},"port_range":{"type":"TypeList","optional":true,"elem":{"schema":{"maximum":{"type":"TypeInt","optional":true,"default":49999},"minimum":{"type":"TypeInt","optional":true,"default":1024}}},"maxItems":1},"tcp_pinhole_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":180},"tcp_port_reuse_minimum_hold_time_in_seconds":{"type":"TypeInt","optional":true,"default":120},"udp_pinhole_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":180},"udp_port_reuse_minimum_hold_time_in_seconds":{"type":"TypeInt","optional":true,"default":60}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_equipment_address_pool_prefixes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"user_equipment_static_address_pool_prefixes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"user_plane_access_ipv4_address":{"type":"TypeString","optional":true},"user_plane_access_ipv4_gateway":{"type":"TypeString","optional":true},"user_plane_access_ipv4_subnet":{"type":"TypeString","optional":true},"user_plane_access_name":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_data_network":{"schema":{"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":30}},"azurerm_mobile_network_packet_core_control_plane":{"schema":{"control_plane_access_ipv4_address":{"type":"TypeString","optional":true},"control_plane_access_ipv4_gateway":{"type":"TypeString","optional":true},"control_plane_access_ipv4_subnet":{"type":"TypeString","optional":true},"control_plane_access_name":{"type":"TypeString","optional":true},"core_network_technology":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"interoperability_settings_json":{"type":"TypeString","optional":true},"local_diagnostics_access":{"type":"TypeList","required":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","required":true},"https_server_certificate_url":{"type":"TypeString","optional":true}}},"maxItems":1,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"platform":{"type":"TypeList","optional":true,"elem":{"schema":{"arc_kubernetes_cluster_id":{"type":"TypeString","optional":true},"custom_location_id":{"type":"TypeString","optional":true},"edge_device_id":{"type":"TypeString","optional":true},"stack_hci_cluster_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"sku":{"type":"TypeString","required":true},"software_version":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_equipment_mtu_in_bytes":{"type":"TypeInt","optional":true,"default":1440}},"timeouts":{"create":180,"read":5,"delete":180,"update":30}},"azurerm_mobile_network_packet_core_data_plane":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_packet_core_control_plane_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_plane_access_ipv4_address":{"type":"TypeString","optional":true},"user_plane_access_ipv4_gateway":{"type":"TypeString","optional":true},"user_plane_access_ipv4_subnet":{"type":"TypeString","optional":true},"user_plane_access_name":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_service":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pcc_rule":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"precedence":{"type":"TypeInt","required":true},"qos_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"allocation_and_retention_priority_level":{"type":"TypeInt","optional":true},"guaranteed_bit_rate":{"type":"TypeList","optional":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1},"maximum_bit_rate":{"type":"TypeList","required":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1},"preemption_capability":{"type":"TypeString","optional":true,"default":"NotPreempt"},"preemption_vulnerability":{"type":"TypeString","optional":true,"default":"Preemptable"},"qos_indicator":{"type":"TypeInt","required":true}}},"maxItems":1},"service_data_flow_template":{"type":"TypeList","required":true,"elem":{"schema":{"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"ports":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"protocol":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"remote_ip_list":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"traffic_control_enabled":{"type":"TypeBool","optional":true,"default":true}}}},"service_precedence":{"type":"TypeInt","required":true},"service_qos_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"allocation_and_retention_priority_level":{"type":"TypeInt","optional":true,"default":9},"maximum_bit_rate":{"type":"TypeList","required":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1},"preemption_capability":{"type":"TypeString","optional":true},"preemption_vulnerability":{"type":"TypeString","optional":true},"qos_indicator":{"type":"TypeInt","optional":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_sim":{"schema":{"authentication_key":{"type":"TypeString","required":true},"device_type":{"type":"TypeString","optional":true},"integrated_circuit_card_identifier":{"type":"TypeString","required":true,"forceNew":true},"international_mobile_subscriber_identity":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_sim_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"operator_key_code":{"type":"TypeString","required":true},"sim_policy_id":{"type":"TypeString","optional":true},"sim_state":{"type":"TypeString","computed":true},"static_ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"attached_data_network_id":{"type":"TypeString","required":true},"slice_id":{"type":"TypeString","required":true},"static_ipv4_address":{"type":"TypeString","optional":true}}},"minItems":1},"vendor_key_fingerprint":{"type":"TypeString","computed":true},"vendor_name":{"type":"TypeString","computed":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_mobile_network_sim_group":{"schema":{"encryption_key_url":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_sim_policy":{"schema":{"default_slice_id":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"rat_frequency_selection_priority_index":{"type":"TypeInt","optional":true},"registration_timer_in_seconds":{"type":"TypeInt","optional":true,"default":3240},"slice":{"type":"TypeList","required":true,"elem":{"schema":{"data_network":{"type":"TypeList","required":true,"elem":{"schema":{"additional_allowed_session_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"allocation_and_retention_priority_level":{"type":"TypeInt","optional":true,"default":0},"allowed_services_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"data_network_id":{"type":"TypeString","required":true},"default_session_type":{"type":"TypeString","optional":true,"default":"IPv4"},"max_buffered_packets":{"type":"TypeInt","optional":true,"default":10},"preemption_capability":{"type":"TypeString","optional":true,"default":"NotPreempt"},"preemption_vulnerability":{"type":"TypeString","optional":true,"default":"NotPreemptable"},"qos_indicator":{"type":"TypeInt","required":true},"session_aggregate_maximum_bit_rate":{"type":"TypeList","required":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1}}}},"default_data_network_id":{"type":"TypeString","required":true},"slice_id":{"type":"TypeString","required":true}}},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"user_equipment_aggregate_maximum_bit_rate":{"type":"TypeList","required":true,"elem":{"schema":{"downlink":{"type":"TypeString","required":true},"uplink":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":180,"read":5,"delete":180,"update":60}},"azurerm_mobile_network_site":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_function_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_mobile_network_slice":{"schema":{"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mobile_network_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"single_network_slice_selection_assistance_information":{"type":"TypeList","required":true,"elem":{"schema":{"slice_differentiator":{"type":"TypeString","optional":true},"slice_service_type":{"type":"TypeInt","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_monitor_aad_diagnostic_setting":{"schema":{"enabled_log":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"category":{"type":"TypeString","required":true},"retention_policy":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":0},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}}},"eventhub_authorization_rule_id":{"type":"TypeString","optional":true,"forceNew":true},"eventhub_name":{"type":"TypeString","optional":true,"forceNew":true},"log":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"category":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"retention_policy":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":0},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}}},"log_analytics_workspace_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":5,"read":5,"delete":5,"update":5}},"azurerm_monitor_action_group":{"schema":{"arm_role_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"role_id":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"automation_runbook_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"automation_account_id":{"type":"TypeString","required":true},"is_global_runbook":{"type":"TypeBool","required":true},"name":{"type":"TypeString","required":true},"runbook_name":{"type":"TypeString","required":true},"service_uri":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true,"default":false},"webhook_resource_id":{"type":"TypeString","required":true}}}},"azure_app_push_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"email_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"azure_function_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"function_app_resource_id":{"type":"TypeString","required":true},"function_name":{"type":"TypeString","required":true},"http_trigger_url":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"email_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"email_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"enabled":{"type":"TypeBool","optional":true,"default":true},"event_hub_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","optional":true,"computed":true},"event_hub_name":{"type":"TypeString","optional":true,"computed":true},"event_hub_namespace":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"itsm_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"region":{"type":"TypeString","required":true},"ticket_configuration":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","optional":true,"default":"global","forceNew":true},"logic_app_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"callback_url":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"resource_id":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"short_name":{"type":"TypeString","required":true},"sms_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"country_code":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"phone_number":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"voice_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"country_code":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"phone_number":{"type":"TypeString","required":true}}}},"webhook_receiver":{"type":"TypeList","optional":true,"elem":{"schema":{"aad_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"identifier_uri":{"type":"TypeString","optional":true,"computed":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"service_uri":{"type":"TypeString","required":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_action_rule_action_group":{"schema":{"action_group_id":{"type":"TypeString","required":true},"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"alert_context":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_id":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_service":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"severity":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeList","optional":true,"elem":{"schema":{"resource_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_action_rule_suppression":{"schema":{"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"alert_context":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_id":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_service":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"severity":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeList","optional":true,"elem":{"schema":{"resource_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"suppression":{"type":"TypeList","required":true,"elem":{"schema":{"recurrence_type":{"type":"TypeString","required":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"end_date_utc":{"type":"TypeString","required":true},"recurrence_monthly":{"type":"TypeSet","optional":true,"elem":{"type":"TypeInt"},"minItems":1},"recurrence_weekly":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"start_date_utc":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_activity_log_alert":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_group_id":{"type":"TypeString","required":true},"webhook_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"criteria":{"type":"TypeList","required":true,"elem":{"schema":{"caller":{"type":"TypeString","optional":true},"category":{"type":"TypeString","required":true},"level":{"type":"TypeString","optional":true},"levels":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"operation_name":{"type":"TypeString","optional":true},"recommendation_category":{"type":"TypeString","optional":true},"recommendation_impact":{"type":"TypeString","optional":true},"recommendation_type":{"type":"TypeString","optional":true},"resource_group":{"type":"TypeString","optional":true},"resource_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_health":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"current":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"previous":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"reason":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"resource_id":{"type":"TypeString","optional":true},"resource_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_provider":{"type":"TypeString","optional":true},"resource_providers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_type":{"type":"TypeString","optional":true},"resource_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"service_health":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"events":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"locations":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"services":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"status":{"type":"TypeString","optional":true},"statuses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"sub_status":{"type":"TypeString","optional":true},"sub_statuses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_alert_processing_rule_action_group":{"schema":{"add_action_group_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"alert_context":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_id":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_name":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_service":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"severity":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"signal_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_group":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"effective_from":{"type":"TypeString","optional":true},"effective_until":{"type":"TypeString","optional":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"daily":{"type":"TypeList","optional":true,"elem":{"schema":{"end_time":{"type":"TypeString","required":true},"start_time":{"type":"TypeString","required":true}}}},"monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_month":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"},"minItems":1},"end_time":{"type":"TypeString","optional":true},"start_time":{"type":"TypeString","optional":true}}}},"weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_week":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"end_time":{"type":"TypeString","optional":true},"start_time":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"time_zone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"scopes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_alert_processing_rule_suppression":{"schema":{"condition":{"type":"TypeList","optional":true,"elem":{"schema":{"alert_context":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_id":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"alert_rule_name":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"description":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_condition":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"monitor_service":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"severity":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"signal_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_group":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"target_resource_type":{"type":"TypeList","optional":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"effective_from":{"type":"TypeString","optional":true},"effective_until":{"type":"TypeString","optional":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"daily":{"type":"TypeList","optional":true,"elem":{"schema":{"end_time":{"type":"TypeString","required":true},"start_time":{"type":"TypeString","required":true}}}},"monthly":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_month":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"},"minItems":1},"end_time":{"type":"TypeString","optional":true},"start_time":{"type":"TypeString","optional":true}}}},"weekly":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_week":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"end_time":{"type":"TypeString","optional":true},"start_time":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"time_zone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"scopes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_alert_prometheus_rule_group":{"schema":{"cluster_name":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"interval":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","required":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_group_id":{"type":"TypeString","required":true},"action_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":5},"alert":{"type":"TypeString","optional":true},"alert_resolution":{"type":"TypeList","optional":true,"elem":{"schema":{"auto_resolved":{"type":"TypeBool","optional":true},"time_to_resolve":{"type":"TypeString","optional":true}}},"maxItems":1},"annotations":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true},"expression":{"type":"TypeString","required":true},"for":{"type":"TypeString","optional":true},"labels":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"record":{"type":"TypeString","optional":true},"severity":{"type":"TypeInt","optional":true}}}},"rule_group_enabled":{"type":"TypeBool","optional":true},"scopes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_autoscale_setting":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"notification":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"send_to_subscription_administrator":{"type":"TypeBool","optional":true,"default":false},"send_to_subscription_co_administrator":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"webhook":{"type":"TypeList","optional":true,"elem":{"schema":{"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"service_uri":{"type":"TypeString","required":true}}}}}},"maxItems":1},"predictive":{"type":"TypeList","optional":true,"elem":{"schema":{"look_ahead_time":{"type":"TypeString","optional":true},"scale_mode":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"profile":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeList","required":true,"elem":{"schema":{"default":{"type":"TypeInt","required":true},"maximum":{"type":"TypeInt","required":true},"minimum":{"type":"TypeInt","required":true}}},"maxItems":1},"fixed_date":{"type":"TypeList","optional":true,"elem":{"schema":{"end":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true},"timezone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"name":{"type":"TypeString","required":true},"recurrence":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"hours":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"},"maxItems":1},"minutes":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"},"maxItems":1},"timezone":{"type":"TypeString","optional":true,"default":"UTC"}}},"maxItems":1},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"metric_trigger":{"type":"TypeList","required":true,"elem":{"schema":{"dimensions":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"divide_by_instance_count":{"type":"TypeBool","optional":true},"metric_name":{"type":"TypeString","required":true},"metric_namespace":{"type":"TypeString","optional":true},"metric_resource_id":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"statistic":{"type":"TypeString","required":true},"threshold":{"type":"TypeFloat","required":true},"time_aggregation":{"type":"TypeString","required":true},"time_grain":{"type":"TypeString","required":true},"time_window":{"type":"TypeString","required":true}}},"maxItems":1},"scale_action":{"type":"TypeList","required":true,"elem":{"schema":{"cooldown":{"type":"TypeString","required":true},"direction":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":10}}},"maxItems":20},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_data_collection_endpoint":{"schema":{"configuration_access_endpoint":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs_ingestion_endpoint":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_data_collection_rule":{"schema":{"data_collection_endpoint_id":{"type":"TypeString","optional":true},"data_flow":{"type":"TypeList","required":true,"elem":{"schema":{"built_in_transform":{"type":"TypeString","optional":true},"destinations":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"output_stream":{"type":"TypeString","optional":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"transform_kql":{"type":"TypeString","optional":true}}},"minItems":1},"data_sources":{"type":"TypeList","optional":true,"elem":{"schema":{"data_import":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_data_source":{"type":"TypeList","required":true,"elem":{"schema":{"consumer_group":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"stream":{"type":"TypeString","required":true}}}}}},"maxItems":1},"extension":{"type":"TypeList","optional":true,"elem":{"schema":{"extension_json":{"type":"TypeString","optional":true},"extension_name":{"type":"TypeString","required":true},"input_data_sources":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"iis_log":{"type":"TypeList","optional":true,"elem":{"schema":{"log_directories":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"log_file":{"type":"TypeList","optional":true,"elem":{"schema":{"file_patterns":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"settings":{"type":"TypeList","optional":true,"elem":{"schema":{"text":{"type":"TypeList","required":true,"elem":{"schema":{"record_start_timestamp_format":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"performance_counter":{"type":"TypeList","optional":true,"elem":{"schema":{"counter_specifiers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"sampling_frequency_in_seconds":{"type":"TypeInt","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"platform_telemetry":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"prometheus_forwarder":{"type":"TypeList","optional":true,"elem":{"schema":{"label_include_filter":{"type":"TypeSet","optional":true,"elem":{"schema":{"label":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"syslog":{"type":"TypeList","optional":true,"elem":{"schema":{"facility_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"log_levels":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"},"minItems":1}}}},"windows_event_log":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"x_path_queries":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"windows_firewall_log":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"streams":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"destinations":{"type":"TypeList","required":true,"elem":{"schema":{"azure_monitor_metrics":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true}}},"maxItems":1},"event_hub":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"event_hub_direct":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"log_analytics":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"workspace_resource_id":{"type":"TypeString","required":true}}}},"monitor_account":{"type":"TypeList","optional":true,"elem":{"schema":{"monitor_account_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}},"storage_blob":{"type":"TypeList","optional":true,"elem":{"schema":{"container_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}}},"storage_blob_direct":{"type":"TypeList","optional":true,"elem":{"schema":{"container_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true}}}},"storage_table_direct":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true},"table_name":{"type":"TypeString","required":true}}}}}},"maxItems":1,"minItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"immutable_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_declaration":{"type":"TypeSet","optional":true,"elem":{"schema":{"column":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"stream_name":{"type":"TypeString","required":true}}},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_data_collection_rule_association":{"schema":{"data_collection_endpoint_id":{"type":"TypeString","optional":true},"data_collection_rule_id":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"default":"configurationAccessEndpoint","forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_diagnostic_setting":{"schema":{"enabled_log":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"category":{"type":"TypeString","optional":true},"category_group":{"type":"TypeString","optional":true},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1}}}},"eventhub_authorization_rule_id":{"type":"TypeString","optional":true},"eventhub_name":{"type":"TypeString","optional":true},"log":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"category":{"type":"TypeString","optional":true},"category_group":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1}}}},"log_analytics_destination_type":{"type":"TypeString","optional":true,"computed":true},"log_analytics_workspace_id":{"type":"TypeString","optional":true},"metric":{"type":"TypeSet","optional":true,"elem":{"schema":{"category":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_solution_id":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":60,"update":30}},"azurerm_monitor_log_profile":{"schema":{"categories":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"locations":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"retention_policy":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":0},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"servicebus_rule_id":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_metric_alert":{"schema":{"action":{"type":"TypeSet","optional":true,"elem":{"schema":{"action_group_id":{"type":"TypeString","required":true},"webhook_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"application_insights_web_test_location_availability_criteria":{"type":"TypeList","optional":true,"elem":{"schema":{"component_id":{"type":"TypeString","required":true},"failed_location_count":{"type":"TypeInt","required":true},"web_test_id":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"auto_mitigate":{"type":"TypeBool","optional":true,"default":true},"criteria":{"type":"TypeList","optional":true,"elem":{"schema":{"aggregation":{"type":"TypeString","required":true},"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"metric_name":{"type":"TypeString","required":true},"metric_namespace":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"skip_metric_validation":{"type":"TypeBool","optional":true,"default":false},"threshold":{"type":"TypeFloat","required":true}}},"minItems":1},"description":{"type":"TypeString","optional":true},"dynamic_criteria":{"type":"TypeList","optional":true,"elem":{"schema":{"aggregation":{"type":"TypeString","required":true},"alert_sensitivity":{"type":"TypeString","required":true},"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1}}}},"evaluation_failure_count":{"type":"TypeInt","optional":true,"default":4},"evaluation_total_count":{"type":"TypeInt","optional":true,"default":4},"ignore_data_before":{"type":"TypeString","optional":true},"metric_name":{"type":"TypeString","required":true},"metric_namespace":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"skip_metric_validation":{"type":"TypeBool","optional":true}}},"maxItems":1,"minItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"frequency":{"type":"TypeString","optional":true,"default":"PT1M"},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1},"severity":{"type":"TypeInt","optional":true,"default":3},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_location":{"type":"TypeString","optional":true,"description":"The location of the target pluginsdk. Required when using subscription, resource group scope or multiple scopes.","computed":true},"target_resource_type":{"type":"TypeString","optional":true,"description":"The resource type (e.g. Microsoft.Compute/virtualMachines) of the target pluginsdk. Required when using subscription, resource group scope or multiple scopes.","computed":true},"window_size":{"type":"TypeString","optional":true,"default":"PT5M"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_private_link_scope":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_private_link_scoped_service":{"schema":{"linked_resource_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_scheduled_query_rules_alert":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"action_group":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"custom_webhook_payload":{"type":"TypeString","optional":true},"email_subject":{"type":"TypeString","optional":true}}},"maxItems":1},"authorized_resource_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":100},"auto_mitigation_enabled":{"type":"TypeBool","optional":true,"default":false},"data_source_id":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"frequency":{"type":"TypeInt","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query":{"type":"TypeString","required":true},"query_type":{"type":"TypeString","optional":true,"default":"ResultCount"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"severity":{"type":"TypeInt","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"throttling":{"type":"TypeInt","optional":true},"time_window":{"type":"TypeInt","required":true},"trigger":{"type":"TypeList","required":true,"elem":{"schema":{"metric_trigger":{"type":"TypeList","optional":true,"elem":{"schema":{"metric_column":{"type":"TypeString","optional":true},"metric_trigger_type":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeFloat","required":true}}},"maxItems":1},"operator":{"type":"TypeString","required":true},"threshold":{"type":"TypeFloat","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_scheduled_query_rules_alert_v2":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"action_groups":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"custom_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auto_mitigation_enabled":{"type":"TypeBool","optional":true,"default":false},"created_with_api_version":{"type":"TypeString","computed":true},"criteria":{"type":"TypeList","required":true,"elem":{"schema":{"dimension":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"failing_periods":{"type":"TypeList","optional":true,"elem":{"schema":{"minimum_failing_periods_to_trigger_alert":{"type":"TypeInt","required":true},"number_of_evaluation_periods":{"type":"TypeInt","required":true}}},"maxItems":1},"metric_measure_column":{"type":"TypeString","optional":true},"operator":{"type":"TypeString","required":true},"query":{"type":"TypeString","required":true},"resource_id_column":{"type":"TypeString","optional":true},"threshold":{"type":"TypeFloat","required":true},"time_aggregation_method":{"type":"TypeString","required":true}}},"minItems":1},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"evaluation_frequency":{"type":"TypeString","optional":true},"is_a_legacy_log_analytics_rule":{"type":"TypeBool","computed":true},"is_workspace_alerts_storage_configured":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"mute_actions_after_alert_duration":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query_time_range_override":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1,"minItems":1},"severity":{"type":"TypeInt","required":true},"skip_query_validation":{"type":"TypeBool","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_resource_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"window_duration":{"type":"TypeString","required":true},"workspace_alerts_storage_enabled":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_scheduled_query_rules_log":{"schema":{"authorized_resource_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"criteria":{"type":"TypeList","required":true,"elem":{"schema":{"dimension":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operator":{"type":"TypeString","optional":true,"default":"Include"},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"metric_name":{"type":"TypeString","required":true}}},"maxItems":1},"data_source_id":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_smart_detector_alert_rule":{"schema":{"action_group":{"type":"TypeList","required":true,"elem":{"schema":{"email_subject":{"type":"TypeString","optional":true},"ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"webhook_payload":{"type":"TypeString","optional":true}}},"maxItems":1},"description":{"type":"TypeString","optional":true},"detector_type":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"frequency":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope_resource_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"severity":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"throttling_duration":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_monitor_workspace":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_database":{"schema":{"auto_pause_delay_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"collation":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default","forceNew":true},"creation_source_database_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"elastic_pool_id":{"type":"TypeString","optional":true},"geo_backup_enabled":{"type":"TypeBool","optional":true,"default":true},"import":{"type":"TypeList","optional":true,"elem":{"schema":{"administrator_login":{"type":"TypeString","required":true},"administrator_login_password":{"type":"TypeString","required":true},"authentication_type":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_key":{"type":"TypeString","required":true},"storage_key_type":{"type":"TypeString","required":true},"storage_uri":{"type":"TypeString","required":true}}},"maxItems":1},"ledger_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"license_type":{"type":"TypeString","optional":true,"computed":true},"long_term_retention_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"monthly_retention":{"type":"TypeString","optional":true,"computed":true},"week_of_year":{"type":"TypeInt","optional":true,"computed":true},"weekly_retention":{"type":"TypeString","optional":true,"computed":true},"yearly_retention":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"maintenance_configuration_name":{"type":"TypeString","optional":true,"computed":true},"max_size_gb":{"type":"TypeInt","optional":true,"computed":true},"min_capacity":{"type":"TypeFloat","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_replica_count":{"type":"TypeInt","optional":true,"computed":true},"read_scale":{"type":"TypeBool","optional":true,"computed":true},"recover_database_id":{"type":"TypeString","optional":true},"restore_dropped_database_id":{"type":"TypeString","optional":true},"restore_point_in_time":{"type":"TypeString","optional":true,"computed":true},"sample_name":{"type":"TypeString","optional":true,"computed":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"short_term_retention_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"backup_interval_in_hours":{"type":"TypeInt","optional":true,"default":12},"retention_days":{"type":"TypeInt","required":true}}},"maxItems":1},"sku_name":{"type":"TypeString","optional":true,"computed":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"Geo"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeString","optional":true,"default":"Disabled"},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"retention_days":{"type":"TypeInt","optional":true},"state":{"type":"TypeString","optional":true,"default":"Disabled"},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"transparent_data_encryption_enabled":{"type":"TypeBool","optional":true,"default":true},"zone_redundant":{"type":"TypeBool","optional":true,"computed":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_database_extended_auditing_policy":{"schema":{"database_id":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_access_key_is_secondary":{"type":"TypeBool","optional":true,"default":false},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_database_vulnerability_assessment_rule_baseline":{"schema":{"baseline_name":{"type":"TypeString","optional":true,"default":"default","forceNew":true},"baseline_result":{"type":"TypeSet","required":true,"elem":{"schema":{"result":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"database_name":{"type":"TypeString","required":true,"forceNew":true},"rule_id":{"type":"TypeString","required":true,"forceNew":true},"server_vulnerability_assessment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_elasticpool":{"schema":{"license_type":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_name":{"type":"TypeString","optional":true,"default":"SQL_Default"},"max_size_bytes":{"type":"TypeInt","optional":true,"computed":true},"max_size_gb":{"type":"TypeFloat","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"per_database_settings":{"type":"TypeList","required":true,"elem":{"schema":{"max_capacity":{"type":"TypeFloat","required":true},"min_capacity":{"type":"TypeFloat","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"family":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_failover_group":{"schema":{"databases":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_server":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"role":{"type":"TypeString","computed":true}}},"minItems":1},"read_write_endpoint_failover_policy":{"type":"TypeList","required":true,"elem":{"schema":{"grace_minutes":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"readonly_endpoint_failover_policy_enabled":{"type":"TypeBool","optional":true,"computed":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_job_agent":{"schema":{"database_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_job_credential":{"schema":{"job_agent_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_managed_database":{"schema":{"long_term_retention_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"monthly_retention":{"type":"TypeString","optional":true,"computed":true},"week_of_year":{"type":"TypeInt","optional":true,"computed":true},"weekly_retention":{"type":"TypeString","optional":true,"computed":true},"yearly_retention":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"short_term_retention_days":{"type":"TypeInt","optional":true,"default":7}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance":{"schema":{"administrator_login":{"type":"TypeString","required":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","required":true},"collation":{"type":"TypeString","optional":true,"default":"SQL_Latin1_General_CP1_CI_AS","forceNew":true},"dns_zone_partner_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_configuration_name":{"type":"TypeString","optional":true,"default":"SQL_Default"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"name":{"type":"TypeString","required":true,"forceNew":true},"proxy_override":{"type":"TypeString","optional":true,"default":"Default"},"public_data_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"GRS","forceNew":true},"storage_size_in_gb":{"type":"TypeInt","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timezone_id":{"type":"TypeString","optional":true,"default":"UTC","forceNew":true},"vcores":{"type":"TypeInt","required":true}},"timeouts":{"create":1440,"read":5,"delete":1440,"update":1440}},"azurerm_mssql_managed_instance_active_directory_administrator":{"schema":{"azuread_authentication_only":{"type":"TypeBool","optional":true},"login_username":{"type":"TypeString","required":true},"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance_failover_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"partner_region":{"type":"TypeList","computed":true,"elem":{"schema":{"location":{"type":"TypeString","computed":true},"role":{"type":"TypeString","computed":true}}}},"read_write_endpoint_failover_policy":{"type":"TypeList","required":true,"elem":{"schema":{"grace_minutes":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"readonly_endpoint_failover_policy_enabled":{"type":"TypeBool","optional":true,"default":true},"role":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance_security_alert_policy":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true},"managed_instance_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_days":{"type":"TypeInt","optional":true,"default":0},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance_transparent_data_encryption":{"schema":{"auto_rotation_enabled":{"type":"TypeBool","optional":true,"default":false},"key_vault_key_id":{"type":"TypeString","optional":true},"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_managed_instance_vulnerability_assessment":{"schema":{"managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"recurring_scans":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email_subscription_admins":{"type":"TypeBool","optional":true,"default":true},"emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_container_path":{"type":"TypeString","required":true},"storage_container_sas_key":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_outbound_firewall_rule":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","optional":true},"azuread_administrator":{"type":"TypeList","optional":true,"elem":{"schema":{"azuread_authentication_only":{"type":"TypeBool","optional":true,"computed":true},"login_username":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1,"minItems":1},"connection_policy":{"type":"TypeString","optional":true,"default":"Default"},"fully_qualified_domain_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_network_restriction_enabled":{"type":"TypeBool","optional":true,"default":false},"primary_user_assigned_identity_id":{"type":"TypeString","optional":true,"computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restorable_dropped_database_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"transparent_data_encryption_key_vault_key_id":{"type":"TypeString","optional":true},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_server_dns_alias":{"schema":{"dns_record":{"type":"TypeString","computed":true},"mssql_server_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":10}},"azurerm_mssql_server_extended_auditing_policy":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"server_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_access_key_is_secondary":{"type":"TypeBool","optional":true,"default":false},"storage_account_subscription_id":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server_microsoft_support_auditing_policy":{"schema":{"blob_storage_endpoint":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_subscription_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server_security_alert_policy":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","optional":true,"default":false},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_days":{"type":"TypeInt","optional":true,"default":0},"server_name":{"type":"TypeString","required":true,"forceNew":true},"state":{"type":"TypeString","required":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server_transparent_data_encryption":{"schema":{"auto_rotation_enabled":{"type":"TypeBool","optional":true,"default":false},"key_vault_key_id":{"type":"TypeString","optional":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_server_vulnerability_assessment":{"schema":{"recurring_scans":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email_subscription_admins":{"type":"TypeBool","optional":true,"default":false},"emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"server_security_alert_policy_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_container_path":{"type":"TypeString","required":true},"storage_container_sas_key":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_virtual_machine":{"schema":{"assessment":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"run_immediately":{"type":"TypeBool","optional":true,"default":false},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"monthly_occurrence":{"type":"TypeInt","optional":true},"start_time":{"type":"TypeString","required":true},"weekly_interval":{"type":"TypeInt","optional":true}}},"maxItems":1}}},"maxItems":1},"auto_backup":{"type":"TypeList","optional":true,"elem":{"schema":{"encryption_enabled":{"type":"TypeBool","optional":true,"default":false},"encryption_password":{"type":"TypeString","optional":true},"manual_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"days_of_week":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"full_backup_frequency":{"type":"TypeString","required":true},"full_backup_start_hour":{"type":"TypeInt","required":true},"full_backup_window_in_hours":{"type":"TypeInt","required":true},"log_backup_frequency_in_minutes":{"type":"TypeInt","required":true}}},"maxItems":1},"retention_period_in_days":{"type":"TypeInt","required":true},"storage_account_access_key":{"type":"TypeString","required":true},"storage_blob_endpoint":{"type":"TypeString","required":true},"system_databases_backup_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"auto_patching":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"maintenance_window_duration_in_minutes":{"type":"TypeInt","required":true},"maintenance_window_starting_hour":{"type":"TypeInt","required":true}}},"maxItems":1},"key_vault_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_url":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true},"service_principal_name":{"type":"TypeString","required":true,"forceNew":true},"service_principal_secret":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"r_services_enabled":{"type":"TypeBool","optional":true},"sql_connectivity_port":{"type":"TypeInt","optional":true,"default":1433},"sql_connectivity_type":{"type":"TypeString","optional":true,"default":"PRIVATE"},"sql_connectivity_update_password":{"type":"TypeString","optional":true},"sql_connectivity_update_username":{"type":"TypeString","optional":true},"sql_instance":{"type":"TypeList","optional":true,"elem":{"schema":{"adhoc_workloads_optimization_enabled":{"type":"TypeBool","optional":true,"default":false},"collation":{"type":"TypeString","optional":true,"default":"SQL_Latin1_General_CP1_CI_AS","forceNew":true},"instant_file_initialization_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"lock_pages_in_memory_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"max_dop":{"type":"TypeInt","optional":true,"default":0},"max_server_memory_mb":{"type":"TypeInt","optional":true,"default":2147483647},"min_server_memory_mb":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"sql_license_type":{"type":"TypeString","optional":true,"forceNew":true},"sql_virtual_machine_group_id":{"type":"TypeString","optional":true},"storage_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"data_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"default_file_path":{"type":"TypeString","required":true},"luns":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"}}}},"maxItems":1},"disk_type":{"type":"TypeString","required":true},"log_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"default_file_path":{"type":"TypeString","required":true},"luns":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"}}}},"maxItems":1},"storage_workload_type":{"type":"TypeString","required":true},"system_db_on_data_disk_enabled":{"type":"TypeBool","optional":true,"default":false},"temp_db_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"data_file_count":{"type":"TypeInt","optional":true,"default":8},"data_file_growth_in_mb":{"type":"TypeInt","optional":true,"default":512},"data_file_size_mb":{"type":"TypeInt","optional":true,"default":256},"default_file_path":{"type":"TypeString","required":true},"log_file_growth_mb":{"type":"TypeInt","optional":true,"default":512},"log_file_size_mb":{"type":"TypeInt","optional":true,"default":256},"luns":{"type":"TypeList","required":true,"elem":{"type":"TypeInt"}}}},"maxItems":1}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true},"wsfc_domain_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"cluster_bootstrap_account_password":{"type":"TypeString","required":true},"cluster_operator_account_password":{"type":"TypeString","required":true},"sql_service_account_password":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mssql_virtual_machine_availability_group_listener":{"schema":{"availability_group_name":{"type":"TypeString","optional":true,"forceNew":true},"load_balancer_configuration":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"load_balancer_id":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","required":true,"forceNew":true},"probe_port":{"type":"TypeInt","required":true,"forceNew":true},"sql_virtual_machine_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"multi_subnet_ip_configuration":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","required":true,"forceNew":true},"sql_virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"port":{"type":"TypeInt","optional":true,"forceNew":true},"replica":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"schema":{"commit":{"type":"TypeString","required":true,"forceNew":true},"failover_mode":{"type":"TypeString","required":true,"forceNew":true},"readable_secondary":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","required":true,"forceNew":true},"sql_virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}}}},"sql_virtual_machine_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_mssql_virtual_machine_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sql_image_offer":{"type":"TypeString","required":true,"forceNew":true},"sql_image_sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"wsfc_domain_profile":{"type":"TypeList","required":true,"elem":{"schema":{"cluster_bootstrap_account_name":{"type":"TypeString","optional":true,"forceNew":true},"cluster_operator_account_name":{"type":"TypeString","optional":true,"forceNew":true},"cluster_subnet_type":{"type":"TypeString","required":true,"forceNew":true},"fqdn":{"type":"TypeString","required":true,"forceNew":true},"organizational_unit_path":{"type":"TypeString","optional":true,"forceNew":true},"sql_service_account_name":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_primary_key":{"type":"TypeString","optional":true},"storage_account_url":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mssql_virtual_network_rule":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_active_directory_administrator":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_database":{"schema":{"charset":{"type":"TypeString","required":true,"forceNew":true},"collation":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_flexible_database":{"schema":{"charset":{"type":"TypeString","required":true,"forceNew":true},"collation":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_flexible_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_password":{"type":"TypeString","optional":true},"backup_retention_days":{"type":"TypeInt","optional":true,"default":7},"create_mode":{"type":"TypeString","optional":true,"forceNew":true},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"geo_backup_key_vault_key_id":{"type":"TypeString","optional":true},"geo_backup_user_assigned_identity_id":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"primary_user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"delegated_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"high_availability":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"standby_availability_zone":{"type":"TypeString","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeInt","optional":true,"default":0},"start_hour":{"type":"TypeInt","optional":true,"default":0},"start_minute":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"point_in_time_restore_time_in_utc":{"type":"TypeString","optional":true,"forceNew":true},"private_dns_zone_id":{"type":"TypeString","optional":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"replica_capacity":{"type":"TypeInt","computed":true},"replication_role":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"computed":true},"source_server_id":{"type":"TypeString","optional":true,"forceNew":true},"storage":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":true},"iops":{"type":"TypeInt","optional":true,"computed":true},"size_gb":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"zone":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_flexible_server_active_directory_administrator":{"schema":{"identity_id":{"type":"TypeString","required":true},"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_flexible_server_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_flexible_server_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_mysql_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","optional":true},"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":true},"backup_retention_days":{"type":"TypeInt","optional":true,"computed":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default"},"creation_source_server_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore_point_in_time":{"type":"TypeString","optional":true},"sku_name":{"type":"TypeString","required":true},"ssl_enforcement_enabled":{"type":"TypeBool","required":true},"ssl_minimal_tls_version_enforced":{"type":"TypeString","optional":true,"default":"TLS1_2"},"storage_mb":{"type":"TypeInt","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","optional":true},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true},"retention_days":{"type":"TypeInt","optional":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_server_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_mysql_virtual_network_rule":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_nat_gateway":{"schema":{"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"resource_guid":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","optional":true,"default":"Standard"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_nat_gateway_public_ip_association":{"schema":{"nat_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_nat_gateway_public_ip_prefix_association":{"schema":{"nat_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"public_ip_prefix_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_netapp_account":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"domain":{"type":"TypeString","required":true},"organizational_unit":{"type":"TypeString","optional":true},"password":{"type":"TypeString","required":true},"smb_server_name":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_netapp_pool":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"qos_type":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_level":{"type":"TypeString","required":true,"forceNew":true},"size_in_tb":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_netapp_snapshot":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pool_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"volume_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_netapp_snapshot_policy":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"daily_schedule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"hour":{"type":"TypeInt","required":true},"minute":{"type":"TypeInt","required":true},"snapshots_to_keep":{"type":"TypeInt","required":true}}},"maxItems":1},"enabled":{"type":"TypeBool","required":true},"hourly_schedule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"minute":{"type":"TypeInt","required":true},"snapshots_to_keep":{"type":"TypeInt","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"monthly_schedule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"days_of_month":{"type":"TypeSet","required":true,"elem":{"type":"TypeInt"},"maxItems":30},"hour":{"type":"TypeInt","required":true},"minute":{"type":"TypeInt","required":true},"snapshots_to_keep":{"type":"TypeInt","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"weekly_schedule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"days_of_week":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":7},"hour":{"type":"TypeInt","required":true},"minute":{"type":"TypeInt","required":true},"snapshots_to_keep":{"type":"TypeInt","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_netapp_volume":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"azure_vmware_data_store_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"create_from_snapshot_resource_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"data_protection_replication":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"endpoint_type":{"type":"TypeString","optional":true,"default":"dst"},"remote_volume_location":{"type":"TypeString","required":true,"forceNew":true},"remote_volume_resource_id":{"type":"TypeString","required":true},"replication_frequency":{"type":"TypeString","required":true}}},"maxItems":1},"data_protection_snapshot_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"snapshot_policy_id":{"type":"TypeString","required":true}}},"maxItems":1},"export_policy_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_clients":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"protocols_enabled":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"},"maxItems":1,"minItems":1},"root_access_enabled":{"type":"TypeBool","optional":true},"rule_index":{"type":"TypeInt","required":true},"unix_read_only":{"type":"TypeBool","optional":true},"unix_read_write":{"type":"TypeBool","optional":true}}},"maxItems":5},"location":{"type":"TypeString","required":true,"forceNew":true},"mount_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_features":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"pool_name":{"type":"TypeString","required":true,"forceNew":true},"protocols":{"type":"TypeSet","optional":true,"computed":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":2},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"security_style":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"service_level":{"type":"TypeString","required":true,"forceNew":true},"snapshot_directory_visible":{"type":"TypeBool","optional":true,"computed":true},"storage_quota_in_gb":{"type":"TypeInt","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"throughput_in_mibps":{"type":"TypeFloat","optional":true,"computed":true},"volume_path":{"type":"TypeString","required":true,"forceNew":true},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_netapp_volume_group_sap_hana":{"schema":{"account_name":{"type":"TypeString","required":true,"forceNew":true},"application_identifier":{"type":"TypeString","required":true,"forceNew":true},"group_description":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"volume":{"type":"TypeList","required":true,"elem":{"schema":{"capacity_pool_id":{"type":"TypeString","required":true,"forceNew":true},"data_protection_replication":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"endpoint_type":{"type":"TypeString","optional":true,"default":"dst"},"remote_volume_location":{"type":"TypeString","required":true},"remote_volume_resource_id":{"type":"TypeString","required":true},"replication_frequency":{"type":"TypeString","required":true}}},"maxItems":1},"data_protection_snapshot_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"snapshot_policy_id":{"type":"TypeString","required":true}}},"maxItems":1},"export_policy_rule":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_clients":{"type":"TypeString","required":true},"nfsv3_enabled":{"type":"TypeBool","required":true},"nfsv41_enabled":{"type":"TypeBool","required":true},"root_access_enabled":{"type":"TypeBool","optional":true,"default":true},"rule_index":{"type":"TypeInt","required":true},"unix_read_only":{"type":"TypeBool","optional":true,"default":false},"unix_read_write":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":5,"minItems":1},"id":{"type":"TypeString","computed":true},"mount_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"protocols":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1,"minItems":1},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"security_style":{"type":"TypeString","required":true,"forceNew":true},"service_level":{"type":"TypeString","required":true,"forceNew":true},"snapshot_directory_visible":{"type":"TypeBool","required":true,"forceNew":true},"storage_quota_in_gb":{"type":"TypeInt","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"throughput_in_mibps":{"type":"TypeFloat","required":true},"volume_path":{"type":"TypeString","required":true,"forceNew":true},"volume_spec_name":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":5,"minItems":2}},"timeouts":{"create":90,"read":5,"delete":120,"update":120}},"azurerm_netapp_volume_quota_rule":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"quota_size_in_kib":{"type":"TypeInt","required":true},"quota_target":{"type":"TypeString","optional":true,"forceNew":true},"quota_type":{"type":"TypeString","required":true,"forceNew":true},"volume_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":120,"update":120}},"azurerm_network_connection_monitor":{"schema":{"endpoint":{"type":"TypeSet","required":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"coverage_level":{"type":"TypeString","optional":true},"excluded_ip_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"item":{"type":"TypeSet","optional":true,"elem":{"schema":{"address":{"type":"TypeString","optional":true},"type":{"type":"TypeString","optional":true,"default":"AgentAddress"}}}},"type":{"type":"TypeString","optional":true,"default":"Include"}}},"maxItems":1},"included_ip_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"target_resource_id":{"type":"TypeString","optional":true,"computed":true},"target_resource_type":{"type":"TypeString","optional":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_id":{"type":"TypeString","required":true,"forceNew":true},"notes":{"type":"TypeString","optional":true},"output_workspace_resource_ids":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"test_configuration":{"type":"TypeSet","required":true,"elem":{"schema":{"http_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"method":{"type":"TypeString","optional":true,"default":"Get"},"path":{"type":"TypeString","optional":true},"port":{"type":"TypeInt","optional":true},"prefer_https":{"type":"TypeBool","optional":true,"default":false},"request_header":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"valid_status_code_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"icmp_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"trace_route_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"preferred_ip_version":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true},"success_threshold":{"type":"TypeList","optional":true,"elem":{"schema":{"checks_failed_percent":{"type":"TypeInt","optional":true},"round_trip_time_ms":{"type":"TypeFloat","optional":true}}},"maxItems":1},"tcp_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"destination_port_behavior":{"type":"TypeString","optional":true},"port":{"type":"TypeInt","required":true},"trace_route_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"test_frequency_in_seconds":{"type":"TypeInt","optional":true,"default":60}}}},"test_group":{"type":"TypeSet","required":true,"elem":{"schema":{"destination_endpoints":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"source_endpoints":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"test_configuration_names":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_ddos_protection_plan":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_function_azure_traffic_collector":{"schema":{"collector_policy_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface":{"schema":{"applied_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_accelerated_networking":{"type":"TypeBool","optional":true,"default":false},"enable_ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"internal_dns_name_label":{"type":"TypeString","optional":true,"computed":true},"internal_domain_name_suffix":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"gateway_load_balancer_frontend_ip_configuration_id":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","optional":true,"computed":true},"private_ip_address":{"type":"TypeString","optional":true,"computed":true},"private_ip_address_allocation":{"type":"TypeString","required":true},"private_ip_address_version":{"type":"TypeString","optional":true,"default":"IPv4"},"public_ip_address_id":{"type":"TypeString","optional":true},"subnet_id":{"type":"TypeString","optional":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"mac_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_machine_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_application_gateway_backend_address_pool_association":{"schema":{"backend_address_pool_id":{"type":"TypeString","required":true,"forceNew":true},"ip_configuration_name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_application_security_group_association":{"schema":{"application_security_group_id":{"type":"TypeString","required":true,"forceNew":true},"network_interface_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_backend_address_pool_association":{"schema":{"backend_address_pool_id":{"type":"TypeString","required":true,"forceNew":true},"ip_configuration_name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_nat_rule_association":{"schema":{"ip_configuration_name":{"type":"TypeString","required":true,"forceNew":true},"nat_rule_id":{"type":"TypeString","required":true,"forceNew":true},"network_interface_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_interface_security_group_association":{"schema":{"network_interface_id":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager":{"schema":{"cross_tenant_scopes":{"type":"TypeList","computed":true,"elem":{"schema":{"management_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"subscriptions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}}}},"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scope":{"type":"TypeList","required":true,"elem":{"schema":{"management_group_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"subscription_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"scope_accesses":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_admin_rule":{"schema":{"action":{"type":"TypeString","required":true},"admin_rule_collection_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"destination":{"type":"TypeList","optional":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","required":true},"address_prefix_type":{"type":"TypeString","required":true}}}},"destination_port_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"source":{"type":"TypeList","optional":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","required":true},"address_prefix_type":{"type":"TypeString","required":true}}}},"source_port_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_admin_rule_collection":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_group_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"security_admin_configuration_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_connectivity_configuration":{"schema":{"applies_to_group":{"type":"TypeList","required":true,"elem":{"schema":{"global_mesh_enabled":{"type":"TypeBool","optional":true},"group_connectivity":{"type":"TypeString","required":true},"network_group_id":{"type":"TypeString","required":true},"use_hub_gateway":{"type":"TypeBool","optional":true}}}},"connectivity_topology":{"type":"TypeString","required":true},"delete_existing_peering_enabled":{"type":"TypeBool","optional":true},"description":{"type":"TypeString","optional":true},"global_mesh_enabled":{"type":"TypeBool","optional":true},"hub":{"type":"TypeList","optional":true,"elem":{"schema":{"resource_id":{"type":"TypeString","required":true},"resource_type":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_deployment":{"schema":{"configuration_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true},"scope_access":{"type":"TypeString","required":true,"forceNew":true},"triggers":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":1440,"read":5,"delete":1440,"update":1440}},"azurerm_network_manager_management_group_connection":{"schema":{"connection_state":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"management_group_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_network_group":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_scope_connection":{"schema":{"connection_state":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true},"target_scope_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_security_admin_configuration":{"schema":{"apply_on_network_intent_policy_based_services":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_manager_static_member":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"network_group_id":{"type":"TypeString","required":true,"forceNew":true},"region":{"type":"TypeString","computed":true},"target_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_network_manager_subscription_connection":{"schema":{"connection_state":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_manager_id":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_packet_capture":{"schema":{"filter":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"local_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"local_port":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true},"remote_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"remote_port":{"type":"TypeString","optional":true,"forceNew":true}}}},"maximum_bytes_per_packet":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"maximum_bytes_per_session":{"type":"TypeInt","optional":true,"default":1073741824,"forceNew":true},"maximum_capture_duration":{"type":"TypeInt","optional":true,"default":18000,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_location":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"file_path":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_path":{"type":"TypeString","computed":true}}},"maxItems":1},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_profile":{"schema":{"container_network_interface":{"type":"TypeList","required":true,"elem":{"schema":{"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true}}},"maxItems":1},"container_network_interface_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_security_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"security_rule":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"access":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"destination_address_prefix":{"type":"TypeString","optional":true},"destination_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_port_range":{"type":"TypeString","optional":true},"destination_port_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"priority":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"source_address_prefix":{"type":"TypeString","optional":true},"source_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_port_range":{"type":"TypeString","optional":true},"source_port_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_security_rule":{"schema":{"access":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"destination_address_prefix":{"type":"TypeString","optional":true},"destination_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":10},"destination_port_range":{"type":"TypeString","optional":true},"destination_port_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_address_prefix":{"type":"TypeString","optional":true},"source_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":10},"source_port_range":{"type":"TypeString","optional":true},"source_port_ranges":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_watcher":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_network_watcher_flow_log":{"schema":{"enabled":{"type":"TypeBool","required":true},"location":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_policy":{"type":"TypeList","required":true,"elem":{"schema":{"days":{"type":"TypeInt","required":true},"enabled":{"type":"TypeBool","required":true}}},"maxItems":1},"storage_account_id":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"traffic_analytics":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"interval_in_minutes":{"type":"TypeInt","optional":true,"default":60},"workspace_id":{"type":"TypeString","required":true},"workspace_region":{"type":"TypeString","required":true},"workspace_resource_id":{"type":"TypeString","required":true}}},"maxItems":1},"version":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_new_relic_monitor":{"schema":{"account_creation_source":{"type":"TypeString","optional":true,"default":"LIFTR","forceNew":true},"account_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"ingestion_key":{"type":"TypeString","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"org_creation_source":{"type":"TypeString","optional":true,"default":"LIFTR","forceNew":true},"organization_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"plan":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"billing_cycle":{"type":"TypeString","optional":true,"default":"MONTHLY","forceNew":true},"effective_date":{"type":"TypeString","required":true,"forceNew":true},"plan_id":{"type":"TypeString","optional":true,"default":"newrelic-pay-as-you-go-free-live","forceNew":true},"usage_type":{"type":"TypeString","optional":true,"default":"PAYG","forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"user":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"email":{"type":"TypeString","required":true,"forceNew":true},"first_name":{"type":"TypeString","required":true,"forceNew":true},"last_name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"user_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_nginx_certificate":{"schema":{"certificate_virtual_path":{"type":"TypeString","required":true},"key_vault_secret_id":{"type":"TypeString","required":true},"key_virtual_path":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"nginx_deployment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":10,"update":30}},"azurerm_nginx_configuration":{"schema":{"config_file":{"type":"TypeSet","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"virtual_path":{"type":"TypeString","required":true}}}},"nginx_deployment_id":{"type":"TypeString","required":true,"forceNew":true},"package_data":{"type":"TypeString","optional":true},"protected_file":{"type":"TypeSet","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"virtual_path":{"type":"TypeString","required":true}}}},"root_file":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":10,"update":10}},"azurerm_nginx_deployment":{"schema":{"diagnose_support_enabled":{"type":"TypeBool","optional":true},"frontend_private":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"allocation_method":{"type":"TypeString","required":true},"ip_address":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}}},"frontend_public":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"ip_address":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logging_storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"container_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true}}}},"managed_resource_group":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"subnet_id":{"type":"TypeString","required":true}}}},"nginx_version":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_notification_hub":{"schema":{"apns_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"application_mode":{"type":"TypeString","required":true},"bundle_id":{"type":"TypeString","required":true},"key_id":{"type":"TypeString","required":true},"team_id":{"type":"TypeString","required":true},"token":{"type":"TypeString","required":true}}},"maxItems":1},"gcm_credential":{"type":"TypeList","optional":true,"elem":{"schema":{"api_key":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_notification_hub_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"notification_hub_name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_notification_hub_namespace":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_type":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"servicebus_endpoint":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_orbital_contact":{"schema":{"contact_profile_id":{"type":"TypeString","required":true,"forceNew":true},"ground_station_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"reservation_end_time":{"type":"TypeString","required":true,"forceNew":true},"reservation_start_time":{"type":"TypeString","required":true,"forceNew":true},"spacecraft_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_orbital_contact_profile":{"schema":{"auto_tracking":{"type":"TypeString","required":true},"event_hub_uri":{"type":"TypeString","optional":true},"links":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"channels":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"bandwidth_mhz":{"type":"TypeFloat","required":true},"center_frequency_mhz":{"type":"TypeFloat","required":true},"demodulation_configuration":{"type":"TypeString","optional":true},"end_point":{"type":"TypeSet","required":true,"elem":{"schema":{"end_point_name":{"type":"TypeString","required":true},"ip_address":{"type":"TypeString","optional":true},"port":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"modulation_configuration":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true}}},"minItems":1},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"polarization":{"type":"TypeString","required":true}}},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_elevation_degrees":{"type":"TypeFloat","optional":true},"minimum_variable_contact_duration":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_configuration_subnet_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_orbital_spacecraft":{"schema":{"links":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"bandwidth_mhz":{"type":"TypeFloat","required":true},"center_frequency_mhz":{"type":"TypeFloat","required":true},"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"polarization":{"type":"TypeString","required":true}}},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"norad_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"title_line":{"type":"TypeString","required":true},"two_line_elements":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":2,"minItems":2}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_orchestrated_virtual_machine_scale_set":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"automatic_instance_repair":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"grace_period":{"type":"TypeString","optional":true,"default":"PT30M"}}},"maxItems":1},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"create_option":{"type":"TypeString","optional":true,"default":"Empty"},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","required":true},"lun":{"type":"TypeInt","required":true},"storage_account_type":{"type":"TypeString","required":true},"ultra_ssd_disk_iops_read_write":{"type":"TypeInt","optional":true,"computed":true},"ultra_ssd_disk_mbps_read_write":{"type":"TypeInt","optional":true,"computed":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extension":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"auto_upgrade_minor_version_enabled":{"type":"TypeBool","optional":true,"default":true},"extensions_to_provision_after_vm_creation":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"failure_suppression_enabled":{"type":"TypeBool","optional":true},"force_extension_execution_on_change":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"publisher":{"type":"TypeString","required":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true}}}},"extension_operations_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"instances":{"type":"TypeInt","optional":true,"computed":true},"license_type":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","optional":true,"default":false},"enable_ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":20},"load_balancer_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","optional":true,"default":false},"public_ip_address":{"type":"TypeList","optional":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","optional":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"ip_tag":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"tag":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}}},"name":{"type":"TypeString","required":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true}}}},"subnet_id":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true,"default":"IPv4"}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","optional":true},"primary":{"type":"TypeBool","optional":true,"default":false}}}},"os_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"os_profile":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_data":{"type":"TypeString","optional":true},"linux_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true,"forceNew":true},"admin_ssh_key":{"type":"TypeSet","optional":true,"elem":{"schema":{"public_key":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}}},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"computer_name_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"disable_password_authentication":{"type":"TypeBool","optional":true,"default":true},"patch_assessment_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"patch_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}}}},"maxItems":1},"windows_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"admin_password":{"type":"TypeString","required":true,"forceNew":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"computer_name_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"enable_automatic_updates":{"type":"TypeBool","optional":true,"default":true},"hotpatching_enabled":{"type":"TypeBool","optional":true,"default":false},"patch_assessment_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"patch_mode":{"type":"TypeString","optional":true,"default":"AutomaticByOS"},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"store":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"timezone":{"type":"TypeString","optional":true},"winrm_listener":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true}}}}}},"maxItems":1}}},"maxItems":1},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain_count":{"type":"TypeInt","required":true,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"priority_mix":{"type":"TypeList","optional":true,"elem":{"schema":{"base_regular_count":{"type":"TypeInt","optional":true,"default":0},"regular_percentage_above_base":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"single_placement_group":{"type":"TypeBool","optional":true,"computed":true},"sku_name":{"type":"TypeString","optional":true},"source_image_id":{"type":"TypeString","optional":true},"source_image_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"unique_id":{"type":"TypeString","computed":true},"user_data_base64":{"type":"TypeString","optional":true},"zone_balance":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_palo_alto_local_rulestack":{"schema":{"anti_spyware_profile":{"type":"TypeString","optional":true},"anti_virus_profile":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"dns_subscription":{"type":"TypeString","optional":true},"file_blocking_profile":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"url_filtering_profile":{"type":"TypeString","optional":true},"vulnerability_profile":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_local_rulestack_certificate":{"schema":{"audit_comment":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"key_vault_certificate_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true},"rulestack_id":{"type":"TypeString","required":true,"forceNew":true},"self_signed":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_local_rulestack_fqdn_list":{"schema":{"audit_comment":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"fully_qualified_domain_names":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"rulestack_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_local_rulestack_outbound_trust_certificate_association":{"schema":{"certificate_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_palo_alto_local_rulestack_outbound_untrust_certificate_association":{"schema":{"certificate_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_palo_alto_local_rulestack_prefix_list":{"schema":{"audit_comment":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"prefix_list":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"rulestack_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_local_rulestack_rule":{"schema":{"action":{"type":"TypeString","required":true},"applications":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"audit_comment":{"type":"TypeString","optional":true},"category":{"type":"TypeList","optional":true,"elem":{"schema":{"custom_urls":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"feeds":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1,"minItems":1},"decryption_rule_type":{"type":"TypeString","optional":true,"default":"None"},"description":{"type":"TypeString","optional":true},"destination":{"type":"TypeList","required":true,"elem":{"schema":{"cidrs":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"countries":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"feeds":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"local_rulestack_fqdn_list_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"local_rulestack_prefix_list_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"inspection_certificate_id":{"type":"TypeString","optional":true},"logging_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"negate_destination":{"type":"TypeBool","optional":true,"default":false},"negate_source":{"type":"TypeBool","optional":true,"default":false},"priority":{"type":"TypeInt","required":true,"forceNew":true},"protocol":{"type":"TypeString","optional":true,"default":"application-default"},"protocol_ports":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"rulestack_id":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeList","required":true,"elem":{"schema":{"cidrs":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"countries":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"feeds":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"local_rulestack_prefix_list_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1,"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_palo_alto_next_generation_firewall_virtual_hub_local_rulestack":{"schema":{"destination_nat":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address":{"type":"TypeString","required":true}}},"maxItems":1},"frontend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address_id":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2},"use_azure_dns":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"egress_nat_ip_address_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"egress_nat_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_of_trust_for_user_defined_routes":{"type":"TypeString","computed":true},"network_virtual_appliance_id":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"trusted_subnet_id":{"type":"TypeString","computed":true},"untrusted_subnet_id":{"type":"TypeString","computed":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rulestack_id":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":120,"read":5,"delete":120,"update":120}},"azurerm_palo_alto_next_generation_firewall_virtual_hub_panorama":{"schema":{"destination_nat":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address":{"type":"TypeString","required":true}}},"maxItems":1},"frontend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address_id":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2},"use_azure_dns":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"egress_nat_ip_address_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"egress_nat_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_of_trust_for_user_defined_routes":{"type":"TypeString","computed":true},"network_virtual_appliance_id":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"trusted_subnet_id":{"type":"TypeString","computed":true},"untrusted_subnet_id":{"type":"TypeString","computed":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"panorama":{"type":"TypeList","computed":true,"elem":{"schema":{"device_group_name":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"panorama_server_1":{"type":"TypeString","computed":true},"panorama_server_2":{"type":"TypeString","computed":true},"template_name":{"type":"TypeString","computed":true},"virtual_machine_ssh_key":{"type":"TypeString","computed":true}}}},"panorama_base64_config":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":120,"read":5,"delete":120,"update":120}},"azurerm_palo_alto_next_generation_firewall_virtual_network_local_rulestack":{"schema":{"destination_nat":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address":{"type":"TypeString","required":true}}},"maxItems":1},"frontend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address_id":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2},"use_azure_dns":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"egress_nat_ip_address_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"egress_nat_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"vnet_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"ip_of_trust_for_user_defined_routes":{"type":"TypeString","computed":true},"trusted_subnet_id":{"type":"TypeString","optional":true},"untrusted_subnet_id":{"type":"TypeString","optional":true},"virtual_network_id":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rulestack_id":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":120,"read":5,"delete":120,"update":120}},"azurerm_palo_alto_next_generation_firewall_virtual_network_panorama":{"schema":{"destination_nat":{"type":"TypeList","optional":true,"elem":{"schema":{"backend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address":{"type":"TypeString","required":true}}},"maxItems":1},"frontend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"public_ip_address_id":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","required":true}}}},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":2},"use_azure_dns":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeList","required":true,"elem":{"schema":{"egress_nat_ip_address_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"egress_nat_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"vnet_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"ip_of_trust_for_user_defined_routes":{"type":"TypeString","computed":true},"trusted_subnet_id":{"type":"TypeString","optional":true},"untrusted_subnet_id":{"type":"TypeString","optional":true},"virtual_network_id":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"panorama":{"type":"TypeList","computed":true,"elem":{"schema":{"device_group_name":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"panorama_server_1":{"type":"TypeString","computed":true},"panorama_server_2":{"type":"TypeString","computed":true},"template_name":{"type":"TypeString","computed":true},"virtual_machine_ssh_key":{"type":"TypeString","computed":true}}}},"panorama_base64_config":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_palo_alto_virtual_network_appliance":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_pim_active_role_assignment":{"schema":{"justification":{"type":"TypeString","optional":true,"description":"The justification of the role assignment.","forceNew":true},"principal_id":{"type":"TypeString","required":true,"description":"The principal id.","forceNew":true},"principal_type":{"type":"TypeString","description":"The type of principal.","computed":true},"role_definition_id":{"type":"TypeString","required":true,"description":"The role definition id.","forceNew":true},"schedule":{"type":"TypeList","optional":true,"description":"The schedule details of this role assignment.","forceNew":true,"elem":{"schema":{"expiration":{"type":"TypeList","optional":true,"elem":{"schema":{"duration_days":{"type":"TypeInt","optional":true,"description":"The duration of the assignment in days.","computed":true,"forceNew":true},"duration_hours":{"type":"TypeInt","optional":true,"description":"The duration of the assignment in hours.","computed":true,"forceNew":true},"end_date_time":{"type":"TypeString","optional":true,"description":"The end date time of the assignment.","computed":true,"forceNew":true}}},"maxItems":1},"start_date_time":{"type":"TypeString","optional":true,"description":"The start date time.","computed":true,"forceNew":true}}},"maxItems":1},"scope":{"type":"TypeString","required":true,"description":"The scope.","forceNew":true},"ticket":{"type":"TypeList","optional":true,"description":"The ticket details.","forceNew":true,"elem":{"schema":{"number":{"type":"TypeString","optional":true,"description":"The ticket number."},"system":{"type":"TypeString","optional":true,"description":"The ticket system."}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_pim_eligible_role_assignment":{"schema":{"justification":{"type":"TypeString","optional":true,"description":"The justification of the eligible role assignment.","forceNew":true},"principal_id":{"type":"TypeString","required":true,"description":"The principal id.","forceNew":true},"principal_type":{"type":"TypeString","description":"The type of principal.","computed":true},"role_definition_id":{"type":"TypeString","required":true,"description":"The role definition id.","forceNew":true},"schedule":{"type":"TypeList","optional":true,"description":"The schedule details of this eligible role assignment.","forceNew":true,"elem":{"schema":{"expiration":{"type":"TypeList","optional":true,"elem":{"schema":{"duration_days":{"type":"TypeInt","optional":true,"description":"The duration of the assignment in days.","computed":true,"forceNew":true},"duration_hours":{"type":"TypeInt","optional":true,"description":"The duration of the assignment in hours.","computed":true,"forceNew":true},"end_date_time":{"type":"TypeString","optional":true,"description":"The end date time of the assignment.","computed":true,"forceNew":true}}},"maxItems":1},"start_date_time":{"type":"TypeString","optional":true,"description":"The start date time.","computed":true,"forceNew":true}}},"maxItems":1},"scope":{"type":"TypeString","required":true,"description":"The scope.","forceNew":true},"ticket":{"type":"TypeList","optional":true,"description":"Ticket details relating to the assignment.","forceNew":true,"elem":{"schema":{"number":{"type":"TypeString","optional":true,"description":"The ticket number."},"system":{"type":"TypeString","optional":true,"description":"The ticket system."}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_point_to_site_vpn_gateway":{"schema":{"connection_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"internet_security_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"name":{"type":"TypeString","required":true},"route":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"associated_route_table_id":{"type":"TypeString","required":true},"inbound_route_map_id":{"type":"TypeString","optional":true},"outbound_route_map_id":{"type":"TypeString","optional":true},"propagated_route_table":{"type":"TypeList","optional":true,"elem":{"schema":{"ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"labels":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"vpn_client_address_pool":{"type":"TypeList","required":true,"elem":{"schema":{"address_prefixes":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_preference_internet_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"scale_unit":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true},"vpn_server_configuration_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_policy_definition":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"management_group_id":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"mode":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeString","optional":true},"policy_rule":{"type":"TypeString","optional":true},"policy_type":{"type":"TypeString","required":true,"forceNew":true},"role_definition_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_policy_set_definition":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"management_group_id":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeString","optional":true},"policy_definition_group":{"type":"TypeSet","optional":true,"elem":{"schema":{"additional_metadata_resource_id":{"type":"TypeString","optional":true},"category":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true}}}},"policy_definition_reference":{"type":"TypeList","required":true,"elem":{"schema":{"parameter_values":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true},"policy_group_names":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"reference_id":{"type":"TypeString","optional":true,"computed":true}}}},"policy_type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_policy_virtual_machine_configuration_assignment":{"schema":{"configuration":{"type":"TypeList","required":true,"elem":{"schema":{"assignment_type":{"type":"TypeString","optional":true},"content_hash":{"type":"TypeString","optional":true,"computed":true},"content_uri":{"type":"TypeString","optional":true,"computed":true},"parameter":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_portal_dashboard":{"schema":{"dashboard_properties":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_portal_tenant_configuration":{"schema":{"private_markdown_storage_enforced":{"type":"TypeBool","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_active_directory_administrator":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_database":{"schema":{"charset":{"type":"TypeString","required":true,"forceNew":true},"collation":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_postgresql_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_flexible_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true},"administrator_password":{"type":"TypeString","optional":true},"authentication":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"active_directory_auth_enabled":{"type":"TypeBool","optional":true,"default":false},"password_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"tenant_id":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":false},"backup_retention_days":{"type":"TypeInt","optional":true,"computed":true},"create_mode":{"type":"TypeString","optional":true},"customer_managed_key":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"geo_backup_key_vault_key_id":{"type":"TypeString","optional":true},"geo_backup_user_assigned_identity_id":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","optional":true},"primary_user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"delegated_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"high_availability":{"type":"TypeList","optional":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true},"standby_availability_zone":{"type":"TypeString","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"maintenance_window":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeInt","optional":true,"default":0},"start_hour":{"type":"TypeInt","optional":true,"default":0},"start_minute":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"point_in_time_restore_time_in_utc":{"type":"TypeString","optional":true,"forceNew":true},"private_dns_zone_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"replication_role":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","optional":true,"computed":true},"source_server_id":{"type":"TypeString","optional":true,"forceNew":true},"storage_mb":{"type":"TypeInt","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"computed":true},"zone":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_postgresql_flexible_server_active_directory_administrator":{"schema":{"object_id":{"type":"TypeString","required":true,"forceNew":true},"principal_name":{"type":"TypeString","required":true,"forceNew":true},"principal_type":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_flexible_server_configuration":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_flexible_server_database":{"schema":{"charset":{"type":"TypeString","optional":true,"default":"UTF8","forceNew":true},"collation":{"type":"TypeString","optional":true,"default":"en_US.utf8","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_postgresql_flexible_server_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"server_id":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_postgresql_server":{"schema":{"administrator_login":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","optional":true},"auto_grow_enabled":{"type":"TypeBool","optional":true,"default":true},"backup_retention_days":{"type":"TypeInt","optional":true,"computed":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default"},"creation_source_server_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore_point_in_time":{"type":"TypeString","optional":true},"sku_name":{"type":"TypeString","required":true},"ssl_enforcement_enabled":{"type":"TypeBool","required":true},"ssl_minimal_tls_version_enforced":{"type":"TypeString","optional":true,"default":"TLS1_2"},"storage_mb":{"type":"TypeInt","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","optional":true},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true},"retention_days":{"type":"TypeInt","optional":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_postgresql_server_key":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_postgresql_virtual_network_rule":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_powerbi_embedded":{"schema":{"administrators":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"mode":{"type":"TypeString","optional":true,"default":"Gen1","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_a_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"maxItems":20},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_aaaa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_cname_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_mx_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"default":"@","forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"exchange":{"type":"TypeString","required":true},"preference":{"type":"TypeInt","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_ptr_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"records":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_dns_forwarding_ruleset":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_dns_resolver_outbound_endpoint_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_forwarding_rule":{"schema":{"dns_forwarding_ruleset_id":{"type":"TypeString","required":true,"forceNew":true},"domain_name":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"target_dns_servers":{"type":"TypeList","required":true,"elem":{"schema":{"ip_address":{"type":"TypeString","required":true},"port":{"type":"TypeInt","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_inbound_endpoint":{"schema":{"ip_configurations":{"type":"TypeList","required":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","computed":true},"private_ip_allocation_method":{"type":"TypeString","optional":true,"default":"Dynamic"},"subnet_id":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_dns_resolver_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_outbound_endpoint":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_dns_resolver_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_resolver_virtual_network_link":{"schema":{"dns_forwarding_ruleset_id":{"type":"TypeString","required":true,"forceNew":true},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_srv_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"port":{"type":"TypeInt","required":true},"priority":{"type":"TypeInt","required":true},"target":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_txt_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"record":{"type":"TypeSet","required":true,"elem":{"schema":{"value":{"type":"TypeString","required":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","required":true},"zone_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_zone":{"schema":{"max_number_of_record_sets":{"type":"TypeInt","computed":true},"max_number_of_virtual_network_links":{"type":"TypeInt","computed":true},"max_number_of_virtual_network_links_with_registration":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"number_of_record_sets":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"soa_record":{"type":"TypeList","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"email":{"type":"TypeString","required":true},"expire_time":{"type":"TypeInt","optional":true,"default":2419200},"fqdn":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"minimum_ttl":{"type":"TypeInt","optional":true,"default":10},"refresh_time":{"type":"TypeInt","optional":true,"default":3600},"retry_time":{"type":"TypeInt","optional":true,"default":300},"serial_number":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","optional":true,"default":3600}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_dns_zone_virtual_network_link":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"private_dns_zone_name":{"type":"TypeString","required":true,"forceNew":true},"registration_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_private_endpoint":{"schema":{"custom_dns_configs":{"type":"TypeList","computed":true,"elem":{"schema":{"fqdn":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"custom_network_interface_name":{"type":"TypeString","optional":true,"forceNew":true},"ip_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"member_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","required":true,"forceNew":true},"subresource_name":{"type":"TypeString","optional":true,"forceNew":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"private_dns_zone_configs":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"private_dns_zone_id":{"type":"TypeString","computed":true},"record_sets":{"type":"TypeList","computed":true,"elem":{"schema":{"fqdn":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"type":{"type":"TypeString","computed":true}}}}}}},"private_dns_zone_group":{"type":"TypeList","optional":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_dns_zone_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"private_service_connection":{"type":"TypeList","required":true,"elem":{"schema":{"is_manual_connection":{"type":"TypeBool","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_connection_resource_alias":{"type":"TypeString","optional":true,"forceNew":true},"private_connection_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"request_message":{"type":"TypeString","optional":true},"subresource_names":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_private_endpoint_application_security_group_association":{"schema":{"application_security_group_id":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_private_link_service":{"schema":{"alias":{"type":"TypeString","computed":true},"auto_approval_subscription_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enable_proxy_protocol":{"type":"TypeBool","optional":true},"fqdns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"load_balancer_frontend_ip_configuration_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"nat_ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"primary":{"type":"TypeBool","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","optional":true},"private_ip_address_version":{"type":"TypeString","optional":true,"default":"IPv4"},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":8},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"visibility_subscription_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_proximity_placement_group":{"schema":{"allowed_vm_sizes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_public_ip":{"schema":{"allocation_method":{"type":"TypeString","required":true},"ddos_protection_mode":{"type":"TypeString","optional":true,"default":"VirtualNetworkInherited"},"ddos_protection_plan_id":{"type":"TypeString","optional":true},"domain_name_label":{"type":"TypeString","optional":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"fqdn":{"type":"TypeString","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"default":4},"ip_address":{"type":"TypeString","computed":true},"ip_tags":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"ip_version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"reverse_fqdn":{"type":"TypeString","optional":true},"sku":{"type":"TypeString","optional":true,"default":"Basic","forceNew":true},"sku_tier":{"type":"TypeString","optional":true,"default":"Regional","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_public_ip_prefix":{"schema":{"ip_prefix":{"type":"TypeString","computed":true},"ip_version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"prefix_length":{"type":"TypeInt","optional":true,"default":28,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Standard","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_purview_account":{"schema":{"atlas_kafka_endpoint_primary_connection_string":{"type":"TypeString","computed":true},"atlas_kafka_endpoint_secondary_connection_string":{"type":"TypeString","computed":true},"catalog_endpoint":{"type":"TypeString","computed":true},"guardian_endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_resource_group_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_resources":{"type":"TypeList","computed":true,"elem":{"schema":{"event_hub_namespace_id":{"type":"TypeString","computed":true},"resource_group_id":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scan_endpoint":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_recovery_services_vault":{"schema":{"classic_vmware_replication_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"cross_region_restore_enabled":{"type":"TypeBool","optional":true,"default":false},"encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"infrastructure_encryption_enabled":{"type":"TypeBool","required":true},"key_id":{"type":"TypeString","required":true},"use_system_assigned_identity":{"type":"TypeBool","optional":true,"default":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"immutability":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"monitoring":{"type":"TypeList","optional":true,"elem":{"schema":{"alerts_for_all_job_failures_enabled":{"type":"TypeBool","optional":true,"default":true},"alerts_for_critical_operation_failures_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"soft_delete_enabled":{"type":"TypeBool","optional":true,"default":true},"storage_mode_type":{"type":"TypeString","optional":true,"default":"GeoRedundant"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":120,"read":5,"delete":30,"update":60}},"azurerm_recovery_services_vault_resource_guard_association":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_guard_id":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_redis_cache":{"schema":{"capacity":{"type":"TypeInt","required":true},"enable_non_ssl_port":{"type":"TypeBool","optional":true,"default":false},"family":{"type":"TypeString","required":true},"hostname":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"name":{"type":"TypeString","required":true,"forceNew":true},"patch_schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"maintenance_window":{"type":"TypeString","optional":true,"default":"PT5H"},"start_hour_utc":{"type":"TypeInt","optional":true}}}},"port":{"type":"TypeInt","computed":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"private_static_ip_address":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"redis_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"aof_backup_enabled":{"type":"TypeBool","optional":true},"aof_storage_connection_string_0":{"type":"TypeString","optional":true},"aof_storage_connection_string_1":{"type":"TypeString","optional":true},"enable_authentication":{"type":"TypeBool","optional":true,"default":true},"maxclients":{"type":"TypeInt","computed":true},"maxfragmentationmemory_reserved":{"type":"TypeInt","optional":true,"computed":true},"maxmemory_delta":{"type":"TypeInt","optional":true,"computed":true},"maxmemory_policy":{"type":"TypeString","optional":true,"default":"volatile-lru"},"maxmemory_reserved":{"type":"TypeInt","optional":true,"computed":true},"notify_keyspace_events":{"type":"TypeString","optional":true},"rdb_backup_enabled":{"type":"TypeBool","optional":true},"rdb_backup_frequency":{"type":"TypeInt","optional":true},"rdb_backup_max_snapshot_count":{"type":"TypeInt","optional":true},"rdb_storage_connection_string":{"type":"TypeString","optional":true}}},"maxItems":1},"redis_version":{"type":"TypeString","optional":true,"computed":true},"replicas_per_master":{"type":"TypeInt","optional":true,"computed":true},"replicas_per_primary":{"type":"TypeInt","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"shard_count":{"type":"TypeInt","optional":true},"sku_name":{"type":"TypeString","required":true},"ssl_port":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_redis_enterprise_cluster":{"schema":{"hostname":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_redis_enterprise_database":{"schema":{"client_protocol":{"type":"TypeString","optional":true,"default":"Encrypted","forceNew":true},"cluster_id":{"type":"TypeString","required":true,"forceNew":true},"clustering_policy":{"type":"TypeString","optional":true,"default":"OSSCluster","forceNew":true},"eviction_policy":{"type":"TypeString","optional":true,"default":"VolatileLRU","forceNew":true},"linked_database_group_nickname":{"type":"TypeString","optional":true,"forceNew":true},"linked_database_id":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":5},"module":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"args":{"type":"TypeString","optional":true,"default":"","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","computed":true}}},"maxItems":4},"name":{"type":"TypeString","optional":true,"default":"default","forceNew":true},"port":{"type":"TypeInt","optional":true,"default":10000,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"secondary_access_key":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_redis_firewall_rule":{"schema":{"end_ip":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"redis_cache_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_redis_linked_server":{"schema":{"linked_redis_cache_id":{"type":"TypeString","required":true,"forceNew":true},"linked_redis_cache_location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_role":{"type":"TypeString","required":true,"forceNew":true},"target_redis_cache_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_relay_hybrid_connection":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"relay_namespace_name":{"type":"TypeString","required":true,"forceNew":true},"requires_client_authorization":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"user_metadata":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_relay_hybrid_connection_authorization_rule":{"schema":{"hybrid_connection_name":{"type":"TypeString","required":true,"forceNew":true},"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_relay_namespace":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"metric_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":60,"update":30}},"azurerm_relay_namespace_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_deployment_script_azure_cli":{"schema":{"cleanup_preference":{"type":"TypeString","optional":true,"default":"Always","forceNew":true},"command_line":{"type":"TypeString","optional":true,"forceNew":true},"container":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"container_group_name":{"type":"TypeString","optional":true}}},"maxItems":1},"environment_variable":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"secure_value":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"force_update_tag":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outputs":{"type":"TypeString","computed":true},"primary_script_uri":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_interval":{"type":"TypeString","required":true,"forceNew":true},"script_content":{"type":"TypeString","optional":true,"forceNew":true},"storage_account":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"supporting_script_uris":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout":{"type":"TypeString","optional":true,"default":"P1D","forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_deployment_script_azure_power_shell":{"schema":{"cleanup_preference":{"type":"TypeString","optional":true,"default":"Always","forceNew":true},"command_line":{"type":"TypeString","optional":true,"forceNew":true},"container":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"container_group_name":{"type":"TypeString","optional":true}}},"maxItems":1},"environment_variable":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"secure_value":{"type":"TypeString","optional":true},"value":{"type":"TypeString","optional":true}}}},"force_update_tag":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"forceNew":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outputs":{"type":"TypeString","computed":true},"primary_script_uri":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"retention_interval":{"type":"TypeString","required":true,"forceNew":true},"script_content":{"type":"TypeString","optional":true,"forceNew":true},"storage_account":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"key":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"supporting_script_uris":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timeout":{"type":"TypeString","optional":true,"default":"P1D","forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"managed_by":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_resource_group_cost_management_export":{"schema":{"active":{"type":"TypeBool","optional":true,"default":true},"export_data_options":{"type":"TypeList","required":true,"elem":{"schema":{"time_frame":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"export_data_storage_location":{"type":"TypeList","required":true,"elem":{"schema":{"container_id":{"type":"TypeString","required":true,"forceNew":true},"root_folder_path":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recurrence_period_end_date":{"type":"TypeString","required":true},"recurrence_period_start_date":{"type":"TypeString","required":true},"recurrence_type":{"type":"TypeString","required":true},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_cost_management_view":{"schema":{"accumulated":{"type":"TypeBool","required":true,"forceNew":true},"chart_type":{"type":"TypeString","required":true},"dataset":{"type":"TypeList","required":true,"elem":{"schema":{"aggregation":{"type":"TypeSet","required":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}}},"granularity":{"type":"TypeString","required":true},"grouping":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"sorting":{"type":"TypeList","optional":true,"elem":{"schema":{"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"display_name":{"type":"TypeString","required":true},"kpi":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"pivot":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"report_type":{"type":"TypeString","required":true},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true},"timeframe":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_policy_assignment":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enforce":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"policy_definition_reference_id":{"type":"TypeString","optional":true}}}},"not_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","computed":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"value":{"type":"TypeString","required":true}}}},"parameters":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true},"resource_selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","required":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","required":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_policy_exemption":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"exemption_category":{"type":"TypeString","required":true},"expires_on":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_assignment_id":{"type":"TypeString","required":true,"forceNew":true},"policy_definition_reference_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_policy_remediation":{"schema":{"failure_percentage":{"type":"TypeFloat","optional":true},"location_filters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"parallel_deployments":{"type":"TypeInt","optional":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_id":{"type":"TypeString","optional":true},"policy_definition_reference_id":{"type":"TypeString","optional":true},"resource_count":{"type":"TypeInt","optional":true},"resource_discovery_mode":{"type":"TypeString","optional":true,"default":"ExistingNonCompliant"},"resource_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_group_template_deployment":{"schema":{"debug_level":{"type":"TypeString","optional":true},"deployment_mode":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_content":{"type":"TypeString","computed":true},"parameters_content":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_content":{"type":"TypeString","optional":true,"computed":true},"template_spec_version_id":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_resource_policy_assignment":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enforce":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"policy_definition_reference_id":{"type":"TypeString","optional":true}}}},"not_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","computed":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"value":{"type":"TypeString","required":true}}}},"parameters":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true,"forceNew":true},"resource_id":{"type":"TypeString","required":true,"forceNew":true},"resource_selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","required":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","required":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_policy_exemption":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"exemption_category":{"type":"TypeString","required":true},"expires_on":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_assignment_id":{"type":"TypeString","required":true,"forceNew":true},"policy_definition_reference_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_policy_remediation":{"schema":{"failure_percentage":{"type":"TypeFloat","optional":true},"location_filters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"parallel_deployments":{"type":"TypeInt","optional":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_id":{"type":"TypeString","optional":true},"policy_definition_reference_id":{"type":"TypeString","optional":true},"resource_count":{"type":"TypeInt","optional":true},"resource_discovery_mode":{"type":"TypeString","optional":true,"default":"ExistingNonCompliant"},"resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_resource_provider_registration":{"schema":{"feature":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"registered":{"type":"TypeBool","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":120,"read":5,"delete":30,"update":120}},"azurerm_role_assignment":{"schema":{"condition":{"type":"TypeString","optional":true,"forceNew":true},"condition_version":{"type":"TypeString","optional":true,"forceNew":true},"delegated_managed_identity_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"principal_id":{"type":"TypeString","required":true,"forceNew":true},"principal_type":{"type":"TypeString","computed":true},"role_definition_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"role_definition_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"scope":{"type":"TypeString","required":true,"forceNew":true},"skip_service_principal_aad_check":{"type":"TypeBool","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_role_definition":{"schema":{"assignable_scopes":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"permissions":{"type":"TypeList","optional":true,"elem":{"schema":{"actions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"data_actions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"not_actions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"not_data_actions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"role_definition_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"role_definition_resource_id":{"type":"TypeString","computed":true},"scope":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":60}},"azurerm_route":{"schema":{"address_prefix":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"next_hop_in_ip_address":{"type":"TypeString","optional":true},"next_hop_type":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route_table_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_route_filter":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"access":{"type":"TypeString","required":true},"communities":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true},"rule_type":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_route_map":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","optional":true,"elem":{"schema":{"parameter":{"type":"TypeList","required":true,"elem":{"schema":{"as_path":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"community":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"route_prefix":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"type":{"type":"TypeString","required":true}}}},"match_criterion":{"type":"TypeList","optional":true,"elem":{"schema":{"as_path":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"community":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"match_condition":{"type":"TypeString","required":true},"route_prefix":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","required":true},"next_step_if_matched":{"type":"TypeString","optional":true,"default":"Unknown"}}}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_route_server":{"schema":{"branch_to_branch_traffic_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_ip_address_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_state":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_router_asn":{"type":"TypeInt","computed":true},"virtual_router_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_route_server_bgp_connection":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"peer_asn":{"type":"TypeInt","required":true,"forceNew":true},"peer_ip":{"type":"TypeString","required":true,"forceNew":true},"route_server_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_route_table":{"schema":{"disable_bgp_route_propagation":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"next_hop_in_ip_address":{"type":"TypeString","optional":true},"next_hop_type":{"type":"TypeString","required":true}}}},"subnets":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_search_service":{"schema":{"allowed_ips":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"authentication_failure_mode":{"type":"TypeString","optional":true},"customer_managed_key_enforcement_enabled":{"type":"TypeBool","optional":true,"default":false},"hosting_mode":{"type":"TypeString","optional":true,"default":"default","forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_authentication_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_count":{"type":"TypeInt","optional":true,"default":1},"primary_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"query_keys":{"type":"TypeList","computed":true,"elem":{"schema":{"key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"replica_count":{"type":"TypeInt","optional":true,"default":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_key":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_search_shared_private_link_service":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"request_message":{"type":"TypeString","optional":true},"search_service_id":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeString","computed":true},"subresource_name":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_security_center_assessment":{"schema":{"additional_data":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"assessment_policy_id":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeList","required":true,"elem":{"schema":{"cause":{"type":"TypeString","optional":true},"code":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true}}},"maxItems":1},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_security_center_assessment_policy":{"schema":{"categories":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","required":true},"display_name":{"type":"TypeString","required":true},"implementation_effort":{"type":"TypeString","optional":true},"name":{"type":"TypeString","computed":true},"remediation_description":{"type":"TypeString","optional":true},"severity":{"type":"TypeString","optional":true,"default":"Medium"},"threats":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"user_impact":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_security_center_auto_provisioning":{"schema":{"auto_provision":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_security_center_automation":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"connection_string":{"type":"TypeString","optional":true},"resource_id":{"type":"TypeString","required":true},"trigger_url":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"minItems":1},"description":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scopes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"source":{"type":"TypeList","required":true,"elem":{"schema":{"event_source":{"type":"TypeString","required":true},"rule_set":{"type":"TypeList","optional":true,"elem":{"schema":{"rule":{"type":"TypeList","required":true,"elem":{"schema":{"expected_value":{"type":"TypeString","required":true},"operator":{"type":"TypeString","required":true},"property_path":{"type":"TypeString","required":true},"property_type":{"type":"TypeString","required":true}}}}}}}}},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_security_center_contact":{"schema":{"alert_notifications":{"type":"TypeBool","required":true},"alerts_to_admins":{"type":"TypeBool","required":true},"email":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true,"default":"default1"},"phone":{"type":"TypeString","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_security_center_server_vulnerability_assessment":{"schema":{"hybrid_machine_id":{"type":"TypeString","optional":true,"forceNew":true},"virtual_machine_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":5,"read":5,"delete":10}},"azurerm_security_center_server_vulnerability_assessment_virtual_machine":{"schema":{"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":5,"read":5,"delete":10}},"azurerm_security_center_setting":{"schema":{"enabled":{"type":"TypeBool","required":true},"setting_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":10,"read":5,"delete":10,"update":10}},"azurerm_security_center_subscription_pricing":{"schema":{"extension":{"type":"TypeSet","optional":true,"elem":{"schema":{"additional_extension_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true}}}},"resource_type":{"type":"TypeString","optional":true,"default":"VirtualMachines"},"subplan":{"type":"TypeString","optional":true},"tier":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_security_center_workspace":{"schema":{"scope":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_sentinel_alert_rule_anomaly_built_in":{"schema":{"anomaly_settings_version":{"type":"TypeInt","computed":true},"anomaly_version":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"enabled":{"type":"TypeBool","required":true},"frequency":{"type":"TypeString","computed":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"mode":{"type":"TypeString","required":true},"multi_select_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","optional":true,"computed":true},"prioritized_exclude_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"exclude":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"prioritize":{"type":"TypeString","computed":true}}}},"required_data_connector":{"type":"TypeList","computed":true,"elem":{"schema":{"connector_id":{"type":"TypeString","computed":true},"data_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"settings_definition_id":{"type":"TypeString","computed":true},"single_select_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","computed":true}}}},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"threshold_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"max":{"type":"TypeString","computed":true},"min":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_sentinel_alert_rule_anomaly_duplicate":{"schema":{"anomaly_settings_version":{"type":"TypeInt","computed":true},"anomaly_version":{"type":"TypeString","computed":true},"built_in_rule_id":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","required":true},"frequency":{"type":"TypeString","computed":true},"is_default_settings":{"type":"TypeBool","computed":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"mode":{"type":"TypeString","required":true},"multi_select_observation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","computed":true},"prioritized_exclude_observation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"exclude":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"prioritize":{"type":"TypeString","optional":true}}}},"required_data_connector":{"type":"TypeList","computed":true,"elem":{"schema":{"connector_id":{"type":"TypeString","computed":true},"data_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"settings_definition_id":{"type":"TypeString","computed":true},"single_select_observation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","required":true}}}},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"threshold_observation":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"max":{"type":"TypeString","computed":true},"min":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_sentinel_alert_rule_fusion":{"schema":{"alert_rule_template_guid":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"sub_type":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true},"severities_allowed":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1}}}}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_machine_learning_behavior_analytics":{"schema":{"alert_rule_template_guid":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_ms_security_incident":{"schema":{"alert_rule_template_guid":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"display_name_exclude_filter":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"display_name_filter":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"},"minItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"product_filter":{"type":"TypeString","required":true},"severity_filter":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_nrt":{"schema":{"alert_details_override":{"type":"TypeList","optional":true,"elem":{"schema":{"description_format":{"type":"TypeString","optional":true},"display_name_format":{"type":"TypeString","optional":true},"dynamic_property":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"severity_column_name":{"type":"TypeString","optional":true},"tactics_column_name":{"type":"TypeString","optional":true}}}},"alert_rule_template_guid":{"type":"TypeString","optional":true,"forceNew":true},"alert_rule_template_version":{"type":"TypeString","optional":true,"forceNew":true},"custom_details":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"entity_mapping":{"type":"TypeList","optional":true,"elem":{"schema":{"entity_type":{"type":"TypeString","required":true},"field_mapping":{"type":"TypeList","required":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true},"identifier":{"type":"TypeString","required":true}}},"maxItems":3}}},"maxItems":5},"event_grouping":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"aggregation_method":{"type":"TypeString","required":true}}},"maxItems":1},"incident":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"create_incident_enabled":{"type":"TypeBool","required":true},"grouping":{"type":"TypeList","required":true,"elem":{"schema":{"by_alert_details":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"by_custom_details":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"by_entities":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":true},"entity_matching_method":{"type":"TypeString","optional":true,"default":"AnyAlert"},"lookback_duration":{"type":"TypeString","optional":true,"default":"PT5M"},"reopen_closed_incidents":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1,"minItems":1}}},"maxItems":1,"minItems":1},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query":{"type":"TypeString","required":true},"sentinel_entity_mapping":{"type":"TypeList","optional":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true}}},"maxItems":5},"severity":{"type":"TypeString","required":true},"suppression_duration":{"type":"TypeString","optional":true,"default":"PT5H"},"suppression_enabled":{"type":"TypeBool","optional":true,"default":false},"tactics":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_scheduled":{"schema":{"alert_details_override":{"type":"TypeList","optional":true,"elem":{"schema":{"description_format":{"type":"TypeString","optional":true},"display_name_format":{"type":"TypeString","optional":true},"dynamic_property":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"severity_column_name":{"type":"TypeString","optional":true},"tactics_column_name":{"type":"TypeString","optional":true}}}},"alert_rule_template_guid":{"type":"TypeString","optional":true,"forceNew":true},"alert_rule_template_version":{"type":"TypeString","optional":true,"forceNew":true},"custom_details":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"entity_mapping":{"type":"TypeList","optional":true,"elem":{"schema":{"entity_type":{"type":"TypeString","required":true},"field_mapping":{"type":"TypeList","required":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true},"identifier":{"type":"TypeString","required":true}}},"maxItems":3}}},"maxItems":5},"event_grouping":{"type":"TypeList","optional":true,"elem":{"schema":{"aggregation_method":{"type":"TypeString","required":true}}},"maxItems":1},"incident_configuration":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"create_incident":{"type":"TypeBool","required":true},"grouping":{"type":"TypeList","required":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"entity_matching_method":{"type":"TypeString","optional":true,"default":"AnyAlert"},"group_by_alert_details":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"group_by_custom_details":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"group_by_entities":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"lookback_duration":{"type":"TypeString","optional":true,"default":"PT5M"},"reopen_closed_incidents":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1,"minItems":1}}},"maxItems":1,"minItems":1},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query":{"type":"TypeString","required":true},"query_frequency":{"type":"TypeString","optional":true,"default":"PT5H"},"query_period":{"type":"TypeString","optional":true,"default":"PT5H"},"sentinel_entity_mapping":{"type":"TypeList","optional":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true}}},"maxItems":5},"severity":{"type":"TypeString","required":true},"suppression_duration":{"type":"TypeString","optional":true,"default":"PT5H"},"suppression_enabled":{"type":"TypeBool","optional":true,"default":false},"tactics":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"trigger_operator":{"type":"TypeString","optional":true,"default":"GreaterThan"},"trigger_threshold":{"type":"TypeInt","optional":true,"default":0}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_alert_rule_threat_intelligence":{"schema":{"alert_rule_template_guid":{"type":"TypeString","required":true,"forceNew":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_automation_rule":{"schema":{"action_incident":{"type":"TypeList","optional":true,"elem":{"schema":{"classification":{"type":"TypeString","optional":true},"classification_comment":{"type":"TypeString","optional":true},"labels":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"order":{"type":"TypeInt","required":true},"owner_id":{"type":"TypeString","optional":true},"severity":{"type":"TypeString","optional":true},"status":{"type":"TypeString","optional":true}}}},"action_playbook":{"type":"TypeList","optional":true,"elem":{"schema":{"logic_app_id":{"type":"TypeString","required":true},"order":{"type":"TypeInt","required":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}}},"condition":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"operator":{"type":"TypeString","required":true},"property":{"type":"TypeString","required":true},"values":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"condition_json":{"type":"TypeString","optional":true,"computed":true},"display_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"expiration":{"type":"TypeString","optional":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"order":{"type":"TypeInt","required":true},"triggers_on":{"type":"TypeString","optional":true,"default":"Incidents"},"triggers_when":{"type":"TypeString","optional":true,"default":"Created"}},"timeouts":{"create":5,"read":5,"delete":5,"update":5}},"azurerm_sentinel_data_connector_aws_cloud_trail":{"schema":{"aws_role_arn":{"type":"TypeString","required":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_data_connector_aws_s3":{"schema":{"aws_role_arn":{"type":"TypeString","required":true},"destination_table":{"type":"TypeString","required":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sqs_urls":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_data_connector_azure_active_directory":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_azure_advanced_threat_protection":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_azure_security_center":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_dynamics_365":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_iot":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_microsoft_cloud_app_security":{"schema":{"alerts_enabled":{"type":"TypeBool","optional":true,"default":true},"discovery_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_data_connector_microsoft_defender_advanced_threat_protection":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_microsoft_threat_intelligence":{"schema":{"bing_safety_phishing_url_lookback_date":{"type":"TypeString","optional":true,"forceNew":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"microsoft_emerging_threat_feed_lookback_date":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_microsoft_threat_protection":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_office_365":{"schema":{"exchange_enabled":{"type":"TypeBool","optional":true,"default":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sharepoint_enabled":{"type":"TypeBool","optional":true,"default":true},"teams_enabled":{"type":"TypeBool","optional":true,"default":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_data_connector_office_365_project":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_office_atp":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_office_irm":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_office_power_bi":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_threat_intelligence":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"lookback_date":{"type":"TypeString","optional":true,"default":"1970-01-01T00:00:00Z","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_data_connector_threat_intelligence_taxii":{"schema":{"api_root_url":{"type":"TypeString","required":true},"collection_id":{"type":"TypeString","required":true},"display_name":{"type":"TypeString","required":true},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"lookback_date":{"type":"TypeString","optional":true,"default":"1970-01-01T00:00:00Z"},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true},"polling_frequency":{"type":"TypeString","optional":true,"default":"OnceAnHour"},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"user_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_log_analytics_workspace_onboarding":{"schema":{"customer_managed_key_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"workspace_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"workspace_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_metadata":{"schema":{"author":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"link":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true}}},"maxItems":1},"category":{"type":"TypeList","optional":true,"elem":{"schema":{"domains":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"verticals":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"content_id":{"type":"TypeString","required":true},"content_schema_version":{"type":"TypeString","optional":true,"default":"2.0"},"custom_version":{"type":"TypeString","optional":true},"dependency":{"type":"TypeString","optional":true},"first_publish_date":{"type":"TypeString","optional":true},"icon_id":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","required":true},"last_publish_date":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"parent_id":{"type":"TypeString","required":true},"preview_images":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"preview_images_dark":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"providers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"source":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true}}},"maxItems":1},"support":{"type":"TypeList","optional":true,"elem":{"schema":{"email":{"type":"TypeString","optional":true},"link":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"tier":{"type":"TypeString","required":true}}},"maxItems":1},"threat_analysis_tactics":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"threat_analysis_techniques":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_threat_intelligence_indicator":{"schema":{"confidence":{"type":"TypeInt","optional":true,"default":-1},"created_by":{"type":"TypeString","optional":true},"created_on":{"type":"TypeString","computed":true},"defanged":{"type":"TypeBool","computed":true},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","required":true},"extension":{"type":"TypeString","optional":true,"computed":true},"external_id":{"type":"TypeString","computed":true},"external_last_updated_time_utc":{"type":"TypeString","computed":true},"external_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"hashes":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","computed":true},"source_name":{"type":"TypeString","optional":true},"url":{"type":"TypeString","optional":true}}}},"granular_marking":{"type":"TypeList","optional":true,"elem":{"schema":{"language":{"type":"TypeString","optional":true},"marking_ref":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"guid":{"type":"TypeString","computed":true},"indicator_type":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"kill_chain_phase":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true}}}},"language":{"type":"TypeString","optional":true},"last_updated_time_utc":{"type":"TypeString","computed":true},"object_marking_refs":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"parsed_pattern":{"type":"TypeList","computed":true,"elem":{"schema":{"pattern_type_key":{"type":"TypeString","computed":true},"pattern_type_values":{"type":"TypeList","computed":true,"elem":{"schema":{"value":{"type":"TypeString","computed":true},"value_type":{"type":"TypeString","computed":true}}}}}}},"pattern":{"type":"TypeString","required":true},"pattern_type":{"type":"TypeString","required":true},"pattern_version":{"type":"TypeString","optional":true},"revoked":{"type":"TypeBool","optional":true,"default":false},"source":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"threat_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"validate_from_utc":{"type":"TypeString","required":true},"validate_until_utc":{"type":"TypeString","optional":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sentinel_watchlist":{"schema":{"default_duration":{"type":"TypeString","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true,"forceNew":true},"display_name":{"type":"TypeString","required":true,"forceNew":true},"item_search_key":{"type":"TypeString","required":true,"forceNew":true},"labels":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"log_analytics_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_sentinel_watchlist_item":{"schema":{"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"properties":{"type":"TypeMap","required":true,"elem":{"type":"TypeString"}},"watchlist_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_service_fabric_cluster":{"schema":{"add_on_features":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"azure_active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"client_application_id":{"type":"TypeString","required":true},"cluster_application_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"thumbprint":{"type":"TypeString","required":true},"thumbprint_secondary":{"type":"TypeString","optional":true},"x509_store_name":{"type":"TypeString","required":true}}},"maxItems":1},"certificate_common_names":{"type":"TypeList","optional":true,"elem":{"schema":{"common_names":{"type":"TypeSet","required":true,"elem":{"schema":{"certificate_common_name":{"type":"TypeString","required":true},"certificate_issuer_thumbprint":{"type":"TypeString","optional":true}}},"minItems":1},"x509_store_name":{"type":"TypeString","required":true}}},"maxItems":1},"client_certificate_common_name":{"type":"TypeList","optional":true,"elem":{"schema":{"common_name":{"type":"TypeString","required":true},"is_admin":{"type":"TypeBool","required":true},"issuer_thumbprint":{"type":"TypeString","optional":true}}}},"client_certificate_thumbprint":{"type":"TypeList","optional":true,"elem":{"schema":{"is_admin":{"type":"TypeBool","required":true},"thumbprint":{"type":"TypeString","required":true}}}},"cluster_code_version":{"type":"TypeString","optional":true,"computed":true},"cluster_endpoint":{"type":"TypeString","computed":true},"diagnostics_config":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_endpoint":{"type":"TypeString","required":true},"protected_account_key_name":{"type":"TypeString","required":true},"queue_endpoint":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"table_endpoint":{"type":"TypeString","required":true}}},"maxItems":1},"fabric_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"management_endpoint":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_type":{"type":"TypeList","required":true,"elem":{"schema":{"application_ports":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"end_port":{"type":"TypeInt","required":true},"start_port":{"type":"TypeInt","required":true}}},"maxItems":1},"capacities":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"client_endpoint_port":{"type":"TypeInt","required":true},"durability_level":{"type":"TypeString","optional":true,"default":"Bronze"},"ephemeral_ports":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"end_port":{"type":"TypeInt","required":true},"start_port":{"type":"TypeInt","required":true}}},"maxItems":1},"http_endpoint_port":{"type":"TypeInt","required":true},"instance_count":{"type":"TypeInt","required":true},"is_primary":{"type":"TypeBool","required":true},"is_stateless":{"type":"TypeBool","optional":true},"multiple_availability_zones":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"placement_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"reverse_proxy_endpoint_port":{"type":"TypeInt","optional":true}}}},"reliability_level":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"reverse_proxy_certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"thumbprint":{"type":"TypeString","required":true},"thumbprint_secondary":{"type":"TypeString","optional":true},"x509_store_name":{"type":"TypeString","required":true}}},"maxItems":1},"reverse_proxy_certificate_common_names":{"type":"TypeList","optional":true,"elem":{"schema":{"common_names":{"type":"TypeSet","required":true,"elem":{"schema":{"certificate_common_name":{"type":"TypeString","required":true},"certificate_issuer_thumbprint":{"type":"TypeString","optional":true}}},"minItems":1},"x509_store_name":{"type":"TypeString","required":true}}},"maxItems":1},"service_fabric_zonal_upgrade_mode":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"upgrade_mode":{"type":"TypeString","required":true},"upgrade_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"delta_health_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"max_delta_unhealthy_applications_percent":{"type":"TypeInt","optional":true,"default":0},"max_delta_unhealthy_nodes_percent":{"type":"TypeInt","optional":true,"default":0},"max_upgrade_domain_delta_unhealthy_nodes_percent":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"force_restart_enabled":{"type":"TypeBool","optional":true},"health_check_retry_timeout":{"type":"TypeString","optional":true,"default":"00:45:00"},"health_check_stable_duration":{"type":"TypeString","optional":true,"default":"00:01:00"},"health_check_wait_duration":{"type":"TypeString","optional":true,"default":"00:00:30"},"health_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"max_unhealthy_applications_percent":{"type":"TypeInt","optional":true,"default":0},"max_unhealthy_nodes_percent":{"type":"TypeInt","optional":true,"default":0}}},"maxItems":1},"upgrade_domain_timeout":{"type":"TypeString","optional":true,"default":"02:00:00"},"upgrade_replica_set_check_timeout":{"type":"TypeString","optional":true,"default":"10675199.02:48:05.4775807"},"upgrade_timeout":{"type":"TypeString","optional":true,"default":"12:00:00"}}},"maxItems":1},"vm_image":{"type":"TypeString","required":true,"forceNew":true},"vmss_zonal_upgrade_mode":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_service_fabric_managed_cluster":{"schema":{"authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"client_application_id":{"type":"TypeString","required":true},"cluster_application_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"certificate":{"type":"TypeList","optional":true,"elem":{"schema":{"common_name":{"type":"TypeString","optional":true},"thumbprint":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}}}},"maxItems":1},"backup_service_enabled":{"type":"TypeBool","optional":true},"client_connection_port":{"type":"TypeInt","required":true},"custom_fabric_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"parameter":{"type":"TypeString","required":true},"section":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"dns_name":{"type":"TypeString","optional":true,"computed":true},"dns_service_enabled":{"type":"TypeBool","optional":true},"http_gateway_port":{"type":"TypeInt","required":true},"lb_rule":{"type":"TypeList","required":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","required":true},"frontend_port":{"type":"TypeInt","required":true},"probe_protocol":{"type":"TypeString","required":true},"probe_request_path":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_type":{"type":"TypeList","optional":true,"elem":{"schema":{"application_port_range":{"type":"TypeString","required":true},"capacities":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"data_disk_size_gb":{"type":"TypeInt","required":true},"data_disk_type":{"type":"TypeString","optional":true,"default":"Standard_LRS"},"ephemeral_port_range":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"multiple_placement_groups_enabled":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"placement_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"primary":{"type":"TypeBool","optional":true},"stateless":{"type":"TypeBool","optional":true},"vm_image_offer":{"type":"TypeString","required":true},"vm_image_publisher":{"type":"TypeString","required":true},"vm_image_sku":{"type":"TypeString","required":true},"vm_image_version":{"type":"TypeString","required":true},"vm_instance_count":{"type":"TypeInt","required":true},"vm_secrets":{"type":"TypeList","optional":true,"elem":{"schema":{"certificates":{"type":"TypeList","required":true,"elem":{"schema":{"store":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}}},"vault_id":{"type":"TypeString","required":true}}}},"vm_size":{"type":"TypeString","required":true}}}},"password":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"default":"Basic","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"upgrade_wave":{"type":"TypeString","optional":true,"default":"Wave0"},"username":{"type":"TypeString","optional":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_service_plan":{"schema":{"app_service_environment_id":{"type":"TypeString","optional":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maximum_elastic_worker_count":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_type":{"type":"TypeString","required":true,"forceNew":true},"per_site_scaling_enabled":{"type":"TypeBool","optional":true,"default":false},"reserved":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"worker_count":{"type":"TypeInt","optional":true,"computed":true},"zone_balancing_enabled":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_servicebus_namespace":{"schema":{"capacity":{"type":"TypeInt","optional":true,"default":0},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_id":{"type":"TypeString","required":true},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"default_primary_connection_string":{"type":"TypeString","computed":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_connection_string":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rule_set":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_rules":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"network_rules":{"type":"TypeSet","optional":true,"elem":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"subnet_id":{"type":"TypeString","required":true}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"trusted_services_allowed":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_namespace_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_namespace_disaster_recovery_config":{"schema":{"alias_authorization_rule_id":{"type":"TypeString","optional":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_namespace_id":{"type":"TypeString","required":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_namespace_id":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_namespace_network_rule_set":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Allow"},"ip_rules":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"network_rules":{"type":"TypeSet","optional":true,"elem":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"subnet_id":{"type":"TypeString","required":true}}}},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"trusted_services_allowed":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_queue":{"schema":{"auto_delete_on_idle":{"type":"TypeString","optional":true,"computed":true},"dead_lettering_on_message_expiration":{"type":"TypeBool","optional":true,"default":false},"default_message_ttl":{"type":"TypeString","optional":true,"computed":true},"duplicate_detection_history_time_window":{"type":"TypeString","optional":true,"computed":true},"enable_batched_operations":{"type":"TypeBool","optional":true,"default":true},"enable_express":{"type":"TypeBool","optional":true,"default":false},"enable_partitioning":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"forward_dead_lettered_messages_to":{"type":"TypeString","optional":true},"forward_to":{"type":"TypeString","optional":true},"lock_duration":{"type":"TypeString","optional":true,"computed":true},"max_delivery_count":{"type":"TypeInt","optional":true,"default":10},"max_message_size_in_kilobytes":{"type":"TypeInt","optional":true,"computed":true},"max_size_in_megabytes":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"requires_duplicate_detection":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"requires_session":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Active"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_queue_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"queue_id":{"type":"TypeString","required":true,"forceNew":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_subscription":{"schema":{"auto_delete_on_idle":{"type":"TypeString","optional":true,"computed":true},"client_scoped_subscription":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true,"forceNew":true},"is_client_scoped_subscription_durable":{"type":"TypeBool","computed":true},"is_client_scoped_subscription_shareable":{"type":"TypeBool","optional":true,"default":true,"forceNew":true}}},"maxItems":1},"client_scoped_subscription_enabled":{"type":"TypeBool","optional":true,"default":false},"dead_lettering_on_filter_evaluation_error":{"type":"TypeBool","optional":true,"default":true},"dead_lettering_on_message_expiration":{"type":"TypeBool","optional":true},"default_message_ttl":{"type":"TypeString","optional":true,"computed":true},"enable_batched_operations":{"type":"TypeBool","optional":true},"forward_dead_lettered_messages_to":{"type":"TypeString","optional":true},"forward_to":{"type":"TypeString","optional":true},"lock_duration":{"type":"TypeString","optional":true,"computed":true},"max_delivery_count":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"requires_session":{"type":"TypeBool","optional":true,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Active"},"topic_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_subscription_rule":{"schema":{"action":{"type":"TypeString","optional":true},"correlation_filter":{"type":"TypeList","optional":true,"elem":{"schema":{"content_type":{"type":"TypeString","optional":true},"correlation_id":{"type":"TypeString","optional":true},"label":{"type":"TypeString","optional":true},"message_id":{"type":"TypeString","optional":true},"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"reply_to":{"type":"TypeString","optional":true},"reply_to_session_id":{"type":"TypeString","optional":true},"session_id":{"type":"TypeString","optional":true},"to":{"type":"TypeString","optional":true}}},"maxItems":1},"filter_type":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sql_filter":{"type":"TypeString","optional":true},"sql_filter_compatibility_level":{"type":"TypeInt","computed":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_topic":{"schema":{"auto_delete_on_idle":{"type":"TypeString","optional":true,"computed":true},"default_message_ttl":{"type":"TypeString","optional":true,"computed":true},"duplicate_detection_history_time_window":{"type":"TypeString","optional":true,"computed":true},"enable_batched_operations":{"type":"TypeBool","optional":true},"enable_express":{"type":"TypeBool","optional":true},"enable_partitioning":{"type":"TypeBool","optional":true,"forceNew":true},"max_message_size_in_kilobytes":{"type":"TypeInt","optional":true,"computed":true},"max_size_in_megabytes":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"namespace_id":{"type":"TypeString","required":true,"forceNew":true},"requires_duplicate_detection":{"type":"TypeBool","optional":true,"forceNew":true},"status":{"type":"TypeString","optional":true,"default":"Active"},"support_ordering":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_servicebus_topic_authorization_rule":{"schema":{"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false},"topic_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_shared_image":{"schema":{"accelerated_network_support_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"architecture":{"type":"TypeString","optional":true,"default":"x64","forceNew":true},"confidential_vm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"confidential_vm_supported":{"type":"TypeBool","optional":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"disk_types_not_allowed":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"end_of_life_date":{"type":"TypeString","optional":true},"eula":{"type":"TypeString","optional":true,"forceNew":true},"gallery_name":{"type":"TypeString","required":true,"forceNew":true},"hyper_v_generation":{"type":"TypeString","optional":true,"default":"V1","forceNew":true},"identifier":{"type":"TypeList","required":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"max_recommended_memory_in_gb":{"type":"TypeInt","optional":true},"max_recommended_vcpu_count":{"type":"TypeInt","optional":true},"min_recommended_memory_in_gb":{"type":"TypeInt","optional":true},"min_recommended_vcpu_count":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_type":{"type":"TypeString","required":true,"forceNew":true},"privacy_statement_uri":{"type":"TypeString","optional":true,"forceNew":true},"purchase_plan":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"release_note_uri":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"specialized":{"type":"TypeBool","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trusted_launch_enabled":{"type":"TypeBool","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_shared_image_gallery":{"schema":{"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sharing":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"community_gallery":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"eula":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","computed":true},"prefix":{"type":"TypeString","required":true,"forceNew":true},"publisher_email":{"type":"TypeString","required":true,"forceNew":true},"publisher_uri":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"permission":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"unique_name":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_shared_image_version":{"schema":{"blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"end_of_life_date":{"type":"TypeString","optional":true},"exclude_from_latest":{"type":"TypeBool","optional":true,"default":false},"gallery_name":{"type":"TypeString","required":true,"forceNew":true},"image_name":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_image_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"os_disk_snapshot_id":{"type":"TypeString","optional":true,"forceNew":true},"replication_mode":{"type":"TypeString","optional":true,"default":"Full","forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"target_region":{"type":"TypeList","required":true,"elem":{"schema":{"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true},"regional_replica_count":{"type":"TypeInt","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"Standard_LRS"}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_signalr_service":{"schema":{"aad_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"connectivity_logs_enabled":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}},"hostname":{"type":"TypeString","computed":true},"http_request_logs_enabled":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"live_trace":{"type":"TypeList","optional":true,"elem":{"schema":{"connectivity_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"http_request_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"messaging_logs_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"live_trace_enabled":{"type":"TypeBool","optional":true,"default":false},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"messaging_logs_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"public_port":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"server_port":{"type":"TypeInt","computed":true},"serverless_connection_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":30},"service_mode":{"type":"TypeString","optional":true,"default":"Default"},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tls_client_cert_enabled":{"type":"TypeBool","optional":true,"default":false},"upstream_endpoint":{"type":"TypeSet","optional":true,"elem":{"schema":{"category_pattern":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"event_pattern":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"hub_pattern":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"url_template":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}}}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_signalr_service_custom_certificate":{"schema":{"certificate_version":{"type":"TypeString","computed":true},"custom_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"signalr_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_signalr_service_custom_domain":{"schema":{"domain_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"signalr_custom_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"signalr_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_signalr_service_network_acl":{"schema":{"default_action":{"type":"TypeString","required":true},"private_endpoint":{"type":"TypeSet","optional":true,"elem":{"schema":{"allowed_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"denied_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","required":true}}}},"public_network":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"denied_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"signalr_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_signalr_shared_private_link_resource":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"request_message":{"type":"TypeString","optional":true},"signalr_service_id":{"type":"TypeString","required":true,"forceNew":true},"status":{"type":"TypeString","computed":true},"sub_resource_name":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_fabric":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_hyperv_network_mapping":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true},"source_network_name":{"type":"TypeString","required":true,"forceNew":true},"source_system_center_virtual_machine_manager_name":{"type":"TypeString","required":true,"forceNew":true},"target_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_site_recovery_hyperv_replication_policy":{"schema":{"application_consistent_snapshot_frequency_in_hours":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_point_retention_in_hours":{"type":"TypeInt","required":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true},"replication_interval_in_seconds":{"type":"TypeInt","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_hyperv_replication_policy_association":{"schema":{"hyperv_site_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60}},"azurerm_site_recovery_network_mapping":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_network_id":{"type":"TypeString","required":true,"forceNew":true},"source_recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true},"target_network_id":{"type":"TypeString","required":true,"forceNew":true},"target_recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_protection_container":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_protection_container_mapping":{"schema":{"automatic_update":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","optional":true},"automation_account_id":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1,"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true},"recovery_replication_policy_id":{"type":"TypeString","required":true,"forceNew":true},"recovery_source_protection_container_name":{"type":"TypeString","required":true,"forceNew":true},"recovery_target_protection_container_id":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_replicated_vm":{"schema":{"managed_disk":{"type":"TypeSet","configMode":"Auto","optional":true,"forceNew":true,"elem":{"schema":{"disk_id":{"type":"TypeString","required":true,"forceNew":true},"staging_storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"target_disk_encryption":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","configMode":"Auto","required":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"key_encryption_key":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"key_url":{"type":"TypeString","required":true,"forceNew":true},"vault_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1}}},"maxItems":1},"target_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"target_disk_type":{"type":"TypeString","required":true,"forceNew":true},"target_replica_disk_type":{"type":"TypeString","required":true,"forceNew":true},"target_resource_group_id":{"type":"TypeString","required":true,"forceNew":true}}}},"multi_vm_group_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"failover_test_public_ip_address_id":{"type":"TypeString","optional":true,"computed":true},"failover_test_static_ip":{"type":"TypeString","optional":true,"computed":true},"failover_test_subnet_name":{"type":"TypeString","optional":true,"computed":true},"is_primary":{"type":"TypeBool","optional":true,"default":false},"recovery_public_ip_address_id":{"type":"TypeString","optional":true},"source_network_interface_id":{"type":"TypeString","optional":true,"computed":true},"target_static_ip":{"type":"TypeString","optional":true},"target_subnet_name":{"type":"TypeString","optional":true}}}},"recovery_replication_policy_id":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_recovery_fabric_name":{"type":"TypeString","required":true,"forceNew":true},"source_recovery_protection_container_name":{"type":"TypeString","required":true,"forceNew":true},"source_vm_id":{"type":"TypeString","required":true,"forceNew":true},"target_availability_set_id":{"type":"TypeString","optional":true},"target_boot_diagnostic_storage_account_id":{"type":"TypeString","optional":true},"target_capacity_reservation_group_id":{"type":"TypeString","optional":true},"target_edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"target_network_id":{"type":"TypeString","optional":true,"computed":true},"target_proximity_placement_group_id":{"type":"TypeString","optional":true},"target_recovery_fabric_id":{"type":"TypeString","required":true,"forceNew":true},"target_recovery_protection_container_id":{"type":"TypeString","required":true,"forceNew":true},"target_resource_group_id":{"type":"TypeString","required":true,"forceNew":true},"target_virtual_machine_scale_set_id":{"type":"TypeString","optional":true},"target_zone":{"type":"TypeString","optional":true,"forceNew":true},"test_network_id":{"type":"TypeString","optional":true,"computed":true},"unmanaged_disk":{"type":"TypeSet","configMode":"Auto","optional":true,"forceNew":true,"elem":{"schema":{"disk_uri":{"type":"TypeString","required":true,"forceNew":true},"staging_storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"target_storage_account_id":{"type":"TypeString","required":true,"forceNew":true}}}}},"timeouts":{"create":180,"read":5,"delete":80,"update":80}},"azurerm_site_recovery_replication_policy":{"schema":{"application_consistent_snapshot_frequency_in_minutes":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_point_retention_in_minutes":{"type":"TypeInt","required":true},"recovery_vault_name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_replication_recovery_plan":{"schema":{"azure_to_azure_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"primary_edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"primary_zone":{"type":"TypeString","optional":true,"forceNew":true},"recovery_edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"recovery_zone":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":1},"boot_recovery_group":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"post_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"pre_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"replicated_protected_items":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}},"minItems":1},"failover_recovery_group":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"post_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"pre_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}}}},"maxItems":1,"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_group":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"post_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"pre_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"replicated_protected_items":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"minItems":3},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true},"shutdown_recovery_group":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"post_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}},"pre_action":{"type":"TypeList","optional":true,"elem":{"schema":{"fabric_location":{"type":"TypeString","optional":true},"fail_over_directions":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"runbook_id":{"type":"TypeString","optional":true},"script_path":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}}}}},"maxItems":1,"minItems":1},"source_recovery_fabric_id":{"type":"TypeString","required":true,"forceNew":true},"target_recovery_fabric_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_services_vault_hyperv_site":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":180}},"azurerm_site_recovery_vmware_replication_policy":{"schema":{"application_consistent_snapshot_frequency_in_minutes":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_point_retention_in_minutes":{"type":"TypeInt","required":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_site_recovery_vmware_replication_policy_association":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"policy_id":{"type":"TypeString","required":true,"forceNew":true},"recovery_vault_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_snapshot":{"schema":{"create_option":{"type":"TypeString","required":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"encryption_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"enabled":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"key_encryption_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"incremental_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"source_resource_id":{"type":"TypeString","optional":true,"forceNew":true},"source_uri":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_id":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trusted_launch_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_source_control_token":{"schema":{"token":{"type":"TypeString","required":true},"token_secret":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}},"timeouts":{"create":5,"read":5,"delete":5,"update":5}},"azurerm_spatial_anchors_account":{"schema":{"account_domain":{"type":"TypeString","computed":true},"account_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_accelerator":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_spring_cloud_active_deployment":{"schema":{"deployment_name":{"type":"TypeString","required":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_api_portal":{"schema":{"gateway_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"https_only_enabled":{"type":"TypeBool","optional":true},"instance_count":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"sso":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true},"client_secret":{"type":"TypeString","optional":true},"issuer_uri":{"type":"TypeString","optional":true},"scope":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_spring_cloud_api_portal_custom_domain":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_api_portal_id":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_app":{"schema":{"addon_json":{"type":"TypeString","optional":true,"computed":true},"custom_persistent_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"mount_options":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"mount_path":{"type":"TypeString","required":true},"read_only_enabled":{"type":"TypeBool","optional":true,"default":false},"share_name":{"type":"TypeString","required":true},"storage_name":{"type":"TypeString","required":true}}},"minItems":1},"fqdn":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"ingress_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"backend_protocol":{"type":"TypeString","optional":true,"default":"Default"},"read_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":300},"send_timeout_in_seconds":{"type":"TypeInt","optional":true,"default":60},"session_affinity":{"type":"TypeString","optional":true,"default":"None"},"session_cookie_max_age":{"type":"TypeInt","optional":true}}},"maxItems":1},"is_public":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"persistent_disk":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"mount_path":{"type":"TypeString","optional":true,"default":"/persistent"},"size_in_gb":{"type":"TypeInt","required":true}}},"maxItems":1},"public_endpoint_enabled":{"type":"TypeBool","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_name":{"type":"TypeString","required":true,"forceNew":true},"tls_enabled":{"type":"TypeBool","optional":true,"default":false},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_app_cosmosdb_association":{"schema":{"api_type":{"type":"TypeString","required":true,"forceNew":true},"cosmosdb_access_key":{"type":"TypeString","required":true},"cosmosdb_account_id":{"type":"TypeString","required":true,"forceNew":true},"cosmosdb_cassandra_keyspace_name":{"type":"TypeString","optional":true},"cosmosdb_gremlin_database_name":{"type":"TypeString","optional":true},"cosmosdb_gremlin_graph_name":{"type":"TypeString","optional":true},"cosmosdb_mongo_database_name":{"type":"TypeString","optional":true},"cosmosdb_sql_database_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_app_mysql_association":{"schema":{"database_name":{"type":"TypeString","required":true},"mysql_server_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_app_redis_association":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"redis_access_key":{"type":"TypeString","required":true},"redis_cache_id":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true},"ssl_enabled":{"type":"TypeBool","optional":true,"default":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_application_live_view":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_spring_cloud_build_deployment":{"schema":{"addon_json":{"type":"TypeString","optional":true,"computed":true},"build_result_id":{"type":"TypeString","required":true},"environment_variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"instance_count":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"quota":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cpu":{"type":"TypeString","optional":true,"computed":true},"memory":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_build_pack_binding":{"schema":{"binding_type":{"type":"TypeString","optional":true},"launch":{"type":"TypeList","optional":true,"elem":{"schema":{"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"secrets":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_builder_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_builder":{"schema":{"build_pack_group":{"type":"TypeSet","required":true,"elem":{"schema":{"build_pack_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"name":{"type":"TypeString","required":true}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"stack":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_certificate":{"schema":{"certificate_content":{"type":"TypeString","optional":true,"forceNew":true},"exclude_private_key":{"type":"TypeBool","optional":true,"forceNew":true},"key_vault_certificate_id":{"type":"TypeString","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_name":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_spring_cloud_configuration_service":{"schema":{"generation":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"repository":{"type":"TypeList","optional":true,"elem":{"schema":{"ca_certificate_id":{"type":"TypeString","optional":true},"host_key":{"type":"TypeString","optional":true},"host_key_algorithm":{"type":"TypeString","optional":true},"label":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"password":{"type":"TypeString","optional":true},"patterns":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"private_key":{"type":"TypeString","optional":true},"search_paths":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"strict_host_key_checking":{"type":"TypeBool","optional":true},"uri":{"type":"TypeString","required":true},"username":{"type":"TypeString","optional":true}}}},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_connection":{"schema":{"authentication":{"type":"TypeList","required":true,"elem":{"schema":{"certificate":{"type":"TypeString","optional":true},"client_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true},"principal_id":{"type":"TypeString","optional":true},"secret":{"type":"TypeString","optional":true},"subscription_id":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"client_type":{"type":"TypeString","optional":true,"default":"none"},"name":{"type":"TypeString","required":true,"forceNew":true},"secret_store":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"spring_cloud_id":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true},"vnet_solution":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_container_deployment":{"schema":{"addon_json":{"type":"TypeString","optional":true,"computed":true},"arguments":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"commands":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"environment_variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"image":{"type":"TypeString","required":true},"instance_count":{"type":"TypeInt","optional":true,"default":1},"language_framework":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"quota":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cpu":{"type":"TypeString","optional":true,"computed":true},"memory":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"server":{"type":"TypeString","required":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_custom_domain":{"schema":{"certificate_name":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_customized_accelerator":{"schema":{"accelerator_tags":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"git_repository":{"type":"TypeList","required":true,"elem":{"schema":{"basic_auth":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"branch":{"type":"TypeString","optional":true},"ca_certificate_id":{"type":"TypeString","optional":true},"commit":{"type":"TypeString","optional":true},"git_tag":{"type":"TypeString","optional":true},"interval_in_seconds":{"type":"TypeInt","optional":true},"ssh_auth":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"host_key":{"type":"TypeString","optional":true},"host_key_algorithm":{"type":"TypeString","optional":true},"private_key":{"type":"TypeString","required":true}}},"maxItems":1},"url":{"type":"TypeString","required":true}}},"maxItems":1},"icon_url":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_accelerator_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_dev_tool_portal":{"schema":{"application_accelerator_enabled":{"type":"TypeBool","optional":true,"computed":true},"application_live_view_enabled":{"type":"TypeBool","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"sso":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true},"client_secret":{"type":"TypeString","optional":true},"metadata_url":{"type":"TypeString","optional":true},"scope":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_gateway":{"schema":{"api_metadata":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"documentation_url":{"type":"TypeString","optional":true},"server_url":{"type":"TypeString","optional":true},"title":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"application_performance_monitoring_types":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"client_authorization":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"verification_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"allowed_methods":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"allowed_origin_patterns":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"allowed_origins":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"credentials_allowed":{"type":"TypeBool","optional":true},"exposed_headers":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"max_age_seconds":{"type":"TypeInt","optional":true}}},"maxItems":1},"environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"https_only":{"type":"TypeBool","optional":true},"instance_count":{"type":"TypeInt","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true},"quota":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cpu":{"type":"TypeString","optional":true,"default":"1"},"memory":{"type":"TypeString","optional":true,"default":"2Gi"}}},"maxItems":1},"sensitive_environment_variables":{"type":"TypeMap","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"sso":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","optional":true},"client_secret":{"type":"TypeString","optional":true},"issuer_uri":{"type":"TypeString","optional":true},"scope":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_gateway_custom_domain":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"thumbprint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_gateway_route_config":{"schema":{"filters":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"open_api":{"type":"TypeList","optional":true,"elem":{"schema":{"uri":{"type":"TypeString","optional":true}}},"maxItems":1},"predicates":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"protocol":{"type":"TypeString","optional":true,"default":"HTTP"},"route":{"type":"TypeSet","optional":true,"elem":{"schema":{"classification_tags":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"filters":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"order":{"type":"TypeInt","required":true},"predicates":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"sso_validation_enabled":{"type":"TypeBool","optional":true},"title":{"type":"TypeString","optional":true},"token_relay":{"type":"TypeBool","optional":true},"uri":{"type":"TypeString","optional":true}}}},"spring_cloud_app_id":{"type":"TypeString","optional":true},"spring_cloud_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"sso_validation_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_java_deployment":{"schema":{"environment_variables":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"instance_count":{"type":"TypeInt","optional":true,"default":1},"jvm_options":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"quota":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cpu":{"type":"TypeString","optional":true,"computed":true},"memory":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"default":"Java_8"},"spring_cloud_app_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_service":{"schema":{"build_agent_pool_size":{"type":"TypeString","optional":true},"config_server_git_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"http_basic_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"label":{"type":"TypeString","optional":true},"repository":{"type":"TypeList","optional":true,"elem":{"schema":{"http_basic_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"password":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}},"maxItems":1},"label":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"pattern":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"search_paths":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"ssh_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"host_key":{"type":"TypeString","optional":true},"host_key_algorithm":{"type":"TypeString","optional":true},"private_key":{"type":"TypeString","required":true},"strict_host_key_checking_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true}}}},"search_paths":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"ssh_auth":{"type":"TypeList","optional":true,"elem":{"schema":{"host_key":{"type":"TypeString","optional":true},"host_key_algorithm":{"type":"TypeString","optional":true},"private_key":{"type":"TypeString","required":true},"strict_host_key_checking_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"uri":{"type":"TypeString","required":true}}},"maxItems":1},"container_registry":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"password":{"type":"TypeString","required":true},"server":{"type":"TypeString","required":true},"username":{"type":"TypeString","required":true}}}},"default_build_service":{"type":"TypeList","optional":true,"elem":{"schema":{"container_registry_name":{"type":"TypeString","optional":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"log_stream_public_endpoint_enabled":{"type":"TypeBool","optional":true},"marketplace":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"plan":{"type":"TypeString","required":true},"product":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"network":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"app_network_resource_group":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"app_subnet_id":{"type":"TypeString","required":true,"forceNew":true},"cidr_ranges":{"type":"TypeList","required":true,"forceNew":true,"elem":{"type":"TypeString"},"minItems":3},"outbound_type":{"type":"TypeString","optional":true,"default":"loadBalancer","forceNew":true},"read_timeout_seconds":{"type":"TypeInt","optional":true},"service_runtime_network_resource_group":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"service_runtime_subnet_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"outbound_public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"required_network_traffic_rules":{"type":"TypeList","computed":true,"elem":{"schema":{"direction":{"type":"TypeString","computed":true},"fqdns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_registry_enabled":{"type":"TypeBool","optional":true},"service_registry_id":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","optional":true,"default":"S0","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"trace":{"type":"TypeList","optional":true,"elem":{"schema":{"connection_string":{"type":"TypeString","optional":true},"sample_rate":{"type":"TypeFloat","optional":true,"default":10}}},"maxItems":1},"zone_redundant":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":60,"read":5,"delete":30,"update":30}},"azurerm_spring_cloud_storage":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"spring_cloud_service_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_active_directory_administrator":{"schema":{"azuread_authentication_only":{"type":"TypeBool","optional":true,"computed":true},"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_database":{"schema":{"collation":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default"},"creation_date":{"type":"TypeString","computed":true},"default_secondary_location":{"type":"TypeString","computed":true},"edition":{"type":"TypeString","optional":true,"computed":true},"elastic_pool_name":{"type":"TypeString","optional":true,"computed":true},"encryption":{"type":"TypeString","computed":true},"import":{"type":"TypeList","optional":true,"elem":{"schema":{"administrator_login":{"type":"TypeString","required":true},"administrator_login_password":{"type":"TypeString","required":true},"authentication_type":{"type":"TypeString","required":true},"operation_mode":{"type":"TypeString","optional":true,"default":"Import"},"storage_key":{"type":"TypeString","required":true},"storage_key_type":{"type":"TypeString","required":true},"storage_uri":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"max_size_bytes":{"type":"TypeString","optional":true,"computed":true},"max_size_gb":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"read_scale":{"type":"TypeBool","optional":true,"default":false},"requested_service_objective_id":{"type":"TypeString","optional":true,"computed":true},"requested_service_objective_name":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"restore_point_in_time":{"type":"TypeString","optional":true,"computed":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"source_database_deletion_date":{"type":"TypeString","optional":true,"computed":true},"source_database_id":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeString","optional":true,"default":"Disabled"},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"retention_days":{"type":"TypeInt","optional":true},"state":{"type":"TypeString","optional":true,"default":"Disabled"},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"zone_redundant":{"type":"TypeBool","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_sql_elasticpool":{"schema":{"creation_date":{"type":"TypeString","computed":true},"db_dtu_max":{"type":"TypeInt","optional":true,"computed":true},"db_dtu_min":{"type":"TypeInt","optional":true,"computed":true},"dtu":{"type":"TypeInt","required":true},"edition":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"pool_size":{"type":"TypeInt","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_failover_group":{"schema":{"databases":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_servers":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"role":{"type":"TypeString","computed":true}}}},"read_write_endpoint_failover_policy":{"type":"TypeList","required":true,"elem":{"schema":{"grace_minutes":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"readonly_endpoint_failover_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"mode":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","computed":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_managed_database":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"sql_managed_instance_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":1440,"read":5,"delete":1440,"update":1440}},"azurerm_sql_managed_instance":{"schema":{"administrator_login":{"type":"TypeString","required":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","required":true},"collation":{"type":"TypeString","optional":true,"default":"SQL_Latin1_General_CP1_CI_AS","forceNew":true},"dns_zone_partner_id":{"type":"TypeString","optional":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"name":{"type":"TypeString","required":true,"forceNew":true},"proxy_override":{"type":"TypeString","optional":true,"default":"Default"},"public_data_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true},"storage_account_type":{"type":"TypeString","optional":true,"default":"GRS","forceNew":true},"storage_size_in_gb":{"type":"TypeInt","required":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timezone_id":{"type":"TypeString","optional":true,"default":"UTC","forceNew":true},"vcores":{"type":"TypeInt","required":true}},"timeouts":{"create":1440,"read":5,"delete":1440,"update":1440}},"azurerm_sql_managed_instance_active_directory_administrator":{"schema":{"azuread_authentication_only":{"type":"TypeBool","optional":true,"default":false},"login":{"type":"TypeString","required":true},"managed_instance_name":{"type":"TypeString","required":true,"forceNew":true},"object_id":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_managed_instance_failover_group":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"managed_instance_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partner_managed_instance_id":{"type":"TypeString","required":true,"forceNew":true},"partner_region":{"type":"TypeList","computed":true,"elem":{"schema":{"location":{"type":"TypeString","computed":true},"role":{"type":"TypeString","computed":true}}}},"read_write_endpoint_failover_policy":{"type":"TypeList","required":true,"elem":{"schema":{"grace_minutes":{"type":"TypeInt","optional":true},"mode":{"type":"TypeString","required":true}}},"maxItems":1},"readonly_endpoint_failover_policy_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_sql_server":{"schema":{"administrator_login":{"type":"TypeString","required":true,"forceNew":true},"administrator_login_password":{"type":"TypeString","required":true},"connection_policy":{"type":"TypeString","optional":true,"default":"Default"},"fully_qualified_domain_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","optional":true,"computed":true},"email_addresses":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"retention_days":{"type":"TypeInt","optional":true},"state":{"type":"TypeString","optional":true,"default":"Disabled"},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}}},"maxItems":1},"version":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_sql_virtual_network_rule":{"schema":{"ignore_missing_vnet_service_endpoint":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server_name":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_ssh_public_key":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_key":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":45,"read":5,"delete":45,"update":45}},"azurerm_stack_hci_cluster":{"schema":{"automanage_configuration_id":{"type":"TypeString","optional":true},"client_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_static_site":{"schema":{"api_key":{"type":"TypeString","computed":true},"default_host_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_size":{"type":"TypeString","optional":true,"default":"Free"},"sku_tier":{"type":"TypeString","optional":true,"default":"Free"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_static_site_custom_domain":{"schema":{"domain_name":{"type":"TypeString","required":true,"forceNew":true},"static_site_id":{"type":"TypeString","required":true,"forceNew":true},"validation_token":{"type":"TypeString","computed":true},"validation_type":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_account":{"schema":{"access_tier":{"type":"TypeString","optional":true,"computed":true},"account_kind":{"type":"TypeString","optional":true,"default":"StorageV2"},"account_replication_type":{"type":"TypeString","required":true},"account_tier":{"type":"TypeString","required":true,"forceNew":true},"allow_nested_items_to_be_public":{"type":"TypeBool","optional":true,"default":true},"allowed_copy_scope":{"type":"TypeString","optional":true},"azure_files_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"domain_guid":{"type":"TypeString","required":true},"domain_name":{"type":"TypeString","required":true},"domain_sid":{"type":"TypeString","required":true},"forest_name":{"type":"TypeString","required":true},"netbios_domain_name":{"type":"TypeString","required":true},"storage_sid":{"type":"TypeString","required":true}}},"maxItems":1},"directory_type":{"type":"TypeString","required":true}}},"maxItems":1},"blob_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"change_feed_enabled":{"type":"TypeBool","optional":true,"default":false},"change_feed_retention_in_days":{"type":"TypeInt","optional":true},"container_delete_retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":7}}},"maxItems":1},"cors_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"allowed_methods":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"exposed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"max_age_in_seconds":{"type":"TypeInt","required":true}}},"maxItems":5},"default_service_version":{"type":"TypeString","optional":true,"computed":true},"delete_retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":7}}},"maxItems":1},"last_access_time_enabled":{"type":"TypeBool","optional":true,"default":false},"restore_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","required":true}}},"maxItems":1},"versioning_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"cross_tenant_replication_enabled":{"type":"TypeBool","optional":true,"default":true},"custom_domain":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"use_subdomain":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","required":true}}},"maxItems":1},"default_to_oauth_authentication":{"type":"TypeBool","optional":true,"default":false},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_https_traffic_only":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"immutability_policy":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"allow_protected_append_writes":{"type":"TypeBool","required":true},"period_since_creation_in_days":{"type":"TypeInt","required":true},"state":{"type":"TypeString","required":true}}},"maxItems":1},"infrastructure_encryption_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"is_hns_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"large_file_share_enabled":{"type":"TypeBool","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"min_tls_version":{"type":"TypeString","optional":true,"default":"TLS1_2"},"name":{"type":"TypeString","required":true,"forceNew":true},"network_rules":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"bypass":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"default_action":{"type":"TypeString","required":true},"ip_rules":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"private_link_access":{"type":"TypeList","optional":true,"elem":{"schema":{"endpoint_resource_id":{"type":"TypeString","required":true},"endpoint_tenant_id":{"type":"TypeString","optional":true,"computed":true}}}},"virtual_network_subnet_ids":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"nfsv3_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_blob_connection_string":{"type":"TypeString","computed":true},"primary_blob_endpoint":{"type":"TypeString","computed":true},"primary_blob_host":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_dfs_endpoint":{"type":"TypeString","computed":true},"primary_dfs_host":{"type":"TypeString","computed":true},"primary_file_endpoint":{"type":"TypeString","computed":true},"primary_file_host":{"type":"TypeString","computed":true},"primary_location":{"type":"TypeString","computed":true},"primary_queue_endpoint":{"type":"TypeString","computed":true},"primary_queue_host":{"type":"TypeString","computed":true},"primary_table_endpoint":{"type":"TypeString","computed":true},"primary_table_host":{"type":"TypeString","computed":true},"primary_web_endpoint":{"type":"TypeString","computed":true},"primary_web_host":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"queue_encryption_key_type":{"type":"TypeString","optional":true,"default":"Service","forceNew":true},"queue_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cors_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"allowed_methods":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"exposed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"max_age_in_seconds":{"type":"TypeInt","required":true}}},"maxItems":5},"hour_metrics":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"include_apis":{"type":"TypeBool","optional":true},"retention_policy_days":{"type":"TypeInt","optional":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"logging":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"delete":{"type":"TypeBool","required":true},"read":{"type":"TypeBool","required":true},"retention_policy_days":{"type":"TypeInt","optional":true},"version":{"type":"TypeString","required":true},"write":{"type":"TypeBool","required":true}}},"maxItems":1},"minute_metrics":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"include_apis":{"type":"TypeBool","optional":true},"retention_policy_days":{"type":"TypeInt","optional":true},"version":{"type":"TypeString","required":true}}},"maxItems":1}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"choice":{"type":"TypeString","optional":true,"default":"MicrosoftRouting"},"publish_internet_endpoints":{"type":"TypeBool","optional":true,"default":false},"publish_microsoft_endpoints":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"sas_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"expiration_action":{"type":"TypeString","optional":true,"default":"Log"},"expiration_period":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_blob_connection_string":{"type":"TypeString","computed":true},"secondary_blob_endpoint":{"type":"TypeString","computed":true},"secondary_blob_host":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_dfs_endpoint":{"type":"TypeString","computed":true},"secondary_dfs_host":{"type":"TypeString","computed":true},"secondary_file_endpoint":{"type":"TypeString","computed":true},"secondary_file_host":{"type":"TypeString","computed":true},"secondary_location":{"type":"TypeString","computed":true},"secondary_queue_endpoint":{"type":"TypeString","computed":true},"secondary_queue_host":{"type":"TypeString","computed":true},"secondary_table_endpoint":{"type":"TypeString","computed":true},"secondary_table_host":{"type":"TypeString","computed":true},"secondary_web_endpoint":{"type":"TypeString","computed":true},"secondary_web_host":{"type":"TypeString","computed":true},"sftp_enabled":{"type":"TypeBool","optional":true,"default":false},"share_properties":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"cors_rule":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"allowed_methods":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"allowed_origins":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64},"exposed_headers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"maxItems":64,"minItems":1},"max_age_in_seconds":{"type":"TypeInt","required":true}}},"maxItems":5},"retention_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"days":{"type":"TypeInt","optional":true,"default":7}}},"maxItems":1},"smb":{"type":"TypeList","optional":true,"elem":{"schema":{"authentication_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"channel_encryption_type":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"kerberos_ticket_encryption_type":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"multichannel_enabled":{"type":"TypeBool","optional":true,"default":false},"versions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"shared_access_key_enabled":{"type":"TypeBool","optional":true,"default":true},"static_website":{"type":"TypeList","optional":true,"elem":{"schema":{"error_404_document":{"type":"TypeString","optional":true},"index_document":{"type":"TypeString","optional":true}}},"maxItems":1},"table_encryption_key_type":{"type":"TypeString","optional":true,"default":"Service","forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_storage_account_customer_managed_key":{"schema":{"key_name":{"type":"TypeString","required":true},"key_vault_id":{"type":"TypeString","required":true},"key_version":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"user_assigned_identity_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_account_local_user":{"schema":{"home_directory":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","computed":true},"permission_scope":{"type":"TypeList","optional":true,"elem":{"schema":{"permissions":{"type":"TypeList","required":true,"elem":{"schema":{"create":{"type":"TypeBool","optional":true,"default":false},"delete":{"type":"TypeBool","optional":true,"default":false},"list":{"type":"TypeBool","optional":true,"default":false},"read":{"type":"TypeBool","optional":true,"default":false},"write":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"resource_name":{"type":"TypeString","required":true},"service":{"type":"TypeString","required":true}}}},"sid":{"type":"TypeString","computed":true},"ssh_authorized_key":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"key":{"type":"TypeString","required":true}}}},"ssh_key_enabled":{"type":"TypeBool","optional":true,"default":false},"ssh_password_enabled":{"type":"TypeBool","optional":true,"default":false},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_account_network_rules":{"schema":{"bypass":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"default_action":{"type":"TypeString","required":true},"ip_rules":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}},"private_link_access":{"type":"TypeList","optional":true,"elem":{"schema":{"endpoint_resource_id":{"type":"TypeString","required":true},"endpoint_tenant_id":{"type":"TypeString","optional":true,"computed":true}}}},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_subnet_ids":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_storage_blob":{"schema":{"access_tier":{"type":"TypeString","optional":true,"computed":true},"cache_control":{"type":"TypeString","optional":true},"content_md5":{"type":"TypeString","optional":true,"forceNew":true},"content_type":{"type":"TypeString","optional":true,"default":"application/octet-stream"},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"parallelism":{"type":"TypeInt","optional":true,"default":8,"forceNew":true},"size":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"source":{"type":"TypeString","optional":true,"forceNew":true},"source_content":{"type":"TypeString","optional":true,"forceNew":true},"source_uri":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"storage_container_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_blob_inventory_policy":{"schema":{"rules":{"type":"TypeSet","required":true,"elem":{"schema":{"filter":{"type":"TypeList","optional":true,"elem":{"schema":{"blob_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"exclude_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":10},"include_blob_versions":{"type":"TypeBool","optional":true,"default":false},"include_deleted":{"type":"TypeBool","optional":true,"default":false},"include_snapshots":{"type":"TypeBool","optional":true,"default":false},"prefix_match":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":10}}},"maxItems":1},"format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"schedule":{"type":"TypeString","required":true},"schema_fields":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"scope":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true}}}},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_container":{"schema":{"container_access_type":{"type":"TypeString","optional":true,"default":"private"},"has_immutability_policy":{"type":"TypeBool","computed":true},"has_legal_hold":{"type":"TypeBool","computed":true},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_data_lake_gen2_filesystem":{"schema":{"ace":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"permissions":{"type":"TypeString","required":true},"scope":{"type":"TypeString","optional":true,"default":"access"},"type":{"type":"TypeString","required":true}}}},"group":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"owner":{"type":"TypeString","optional":true,"computed":true},"properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_data_lake_gen2_path":{"schema":{"ace":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"permissions":{"type":"TypeString","required":true},"scope":{"type":"TypeString","optional":true,"default":"access"},"type":{"type":"TypeString","required":true}}}},"filesystem_name":{"type":"TypeString","required":true,"forceNew":true},"group":{"type":"TypeString","optional":true,"computed":true},"owner":{"type":"TypeString","optional":true,"computed":true},"path":{"type":"TypeString","required":true,"forceNew":true},"resource":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_encryption_scope":{"schema":{"infrastructure_encryption_required":{"type":"TypeBool","optional":true,"forceNew":true},"key_vault_key_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"source":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_management_policy":{"schema":{"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"actions":{"type":"TypeList","required":true,"elem":{"schema":{"base_blob":{"type":"TypeList","optional":true,"elem":{"schema":{"auto_tier_to_hot_from_cool_enabled":{"type":"TypeBool","optional":true},"delete_after_days_since_creation_greater_than":{"type":"TypeInt","optional":true,"default":-1},"delete_after_days_since_last_access_time_greater_than":{"type":"TypeInt","optional":true,"default":-1},"delete_after_days_since_modification_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_creation_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_last_access_time_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_modification_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_cool_after_days_since_creation_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_cool_after_days_since_last_access_time_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_cool_after_days_since_modification_greater_than":{"type":"TypeInt","optional":true,"default":-1}}},"maxItems":1},"snapshot":{"type":"TypeList","optional":true,"elem":{"schema":{"change_tier_to_archive_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"change_tier_to_cool_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"delete_after_days_since_creation_greater_than":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","optional":true,"default":-1}}},"maxItems":1},"version":{"type":"TypeList","optional":true,"elem":{"schema":{"change_tier_to_archive_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"change_tier_to_cool_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"delete_after_days_since_creation":{"type":"TypeInt","optional":true,"default":-1},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","optional":true,"default":-1}}},"maxItems":1}}},"maxItems":1},"enabled":{"type":"TypeBool","required":true},"filters":{"type":"TypeList","required":true,"elem":{"schema":{"blob_types":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"match_blob_index_tag":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"operation":{"type":"TypeString","optional":true,"default":"=="},"value":{"type":"TypeString","required":true}}}},"prefix_match":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true}}},"minItems":1},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover":{"schema":{"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_agent":{"schema":{"arc_virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true},"arc_virtual_machine_uuid":{"type":"TypeString","required":true,"forceNew":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_mover_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_job_definition":{"schema":{"agent_name":{"type":"TypeString","optional":true},"copy_mode":{"type":"TypeString","required":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"source_name":{"type":"TypeString","required":true,"forceNew":true},"source_sub_path":{"type":"TypeString","optional":true,"forceNew":true},"storage_mover_project_id":{"type":"TypeString","required":true,"forceNew":true},"target_name":{"type":"TypeString","required":true,"forceNew":true},"target_sub_path":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_project":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_mover_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_source_endpoint":{"schema":{"description":{"type":"TypeString","optional":true},"export":{"type":"TypeString","optional":true,"forceNew":true},"host":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"nfs_version":{"type":"TypeString","optional":true,"default":"NFSauto","forceNew":true},"storage_mover_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_mover_target_endpoint":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"storage_container_name":{"type":"TypeString","required":true,"forceNew":true},"storage_mover_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_object_replication":{"schema":{"destination_object_replication_id":{"type":"TypeString","computed":true},"destination_storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"rules":{"type":"TypeSet","required":true,"elem":{"schema":{"copy_blobs_created_after":{"type":"TypeString","optional":true,"default":"OnlyNewObjects"},"destination_container_name":{"type":"TypeString","required":true,"forceNew":true},"filter_out_blobs_with_prefix":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"source_container_name":{"type":"TypeString","required":true,"forceNew":true}}}},"source_object_replication_id":{"type":"TypeString","computed":true},"source_storage_account_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_queue":{"schema":{"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_share":{"schema":{"access_tier":{"type":"TypeString","optional":true,"computed":true},"acl":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"expiry":{"type":"TypeString","optional":true},"permissions":{"type":"TypeString","required":true},"start":{"type":"TypeString","optional":true}}}},"id":{"type":"TypeString","required":true}}}},"enabled_protocol":{"type":"TypeString","optional":true,"default":"SMB","forceNew":true},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"quota":{"type":"TypeInt","required":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"url":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_share_directory":{"schema":{"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"share_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_share_file":{"schema":{"content_disposition":{"type":"TypeString","optional":true},"content_encoding":{"type":"TypeString","optional":true},"content_length":{"type":"TypeInt","computed":true},"content_md5":{"type":"TypeString","optional":true,"forceNew":true},"content_type":{"type":"TypeString","optional":true,"default":"application/octet-stream"},"metadata":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"path":{"type":"TypeString","optional":true,"default":"","forceNew":true},"source":{"type":"TypeString","optional":true,"forceNew":true},"storage_share_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_sync":{"schema":{"incoming_traffic_policy":{"type":"TypeString","optional":true,"default":"AllowAllTraffic"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_sync_cloud_endpoint":{"schema":{"file_share_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_tenant_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"storage_sync_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":45,"read":5,"delete":45}},"azurerm_storage_sync_group":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"storage_sync_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_storage_table":{"schema":{"acl":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"expiry":{"type":"TypeString","required":true},"permissions":{"type":"TypeString","required":true},"start":{"type":"TypeString","required":true}}}},"id":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_storage_table_entity":{"schema":{"entity":{"type":"TypeMap","required":true,"elem":{"type":"TypeString"}},"partition_key":{"type":"TypeString","required":true,"forceNew":true},"row_key":{"type":"TypeString","required":true,"forceNew":true},"storage_account_name":{"type":"TypeString","required":true,"forceNew":true},"table_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_cluster":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"streaming_capacity":{"type":"TypeInt","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_stream_analytics_function_javascript_uda":{"schema":{"input":{"type":"TypeList","required":true,"elem":{"schema":{"configuration_parameter":{"type":"TypeBool","optional":true,"default":false},"type":{"type":"TypeString","required":true}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"output":{"type":"TypeList","required":true,"elem":{"schema":{"type":{"type":"TypeString","required":true}}},"maxItems":1},"script":{"type":"TypeString","required":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_function_javascript_udf":{"schema":{"input":{"type":"TypeList","required":true,"elem":{"schema":{"configuration_parameter":{"type":"TypeBool","optional":true,"default":false},"type":{"type":"TypeString","required":true}}},"minItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"output":{"type":"TypeList","required":true,"elem":{"schema":{"type":{"type":"TypeString","required":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"script":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_job":{"schema":{"compatibility_level":{"type":"TypeString","optional":true,"computed":true},"content_storage_policy":{"type":"TypeString","optional":true,"default":"SystemAccount"},"data_locale":{"type":"TypeString","optional":true,"computed":true},"events_late_arrival_max_delay_in_seconds":{"type":"TypeInt","optional":true,"default":5},"events_out_of_order_max_delay_in_seconds":{"type":"TypeInt","optional":true,"default":0},"events_out_of_order_policy":{"type":"TypeString","optional":true,"default":"Adjust"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"job_id":{"type":"TypeString","computed":true},"job_storage_account":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_error_policy":{"type":"TypeString","optional":true,"default":"Drop"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_cluster_id":{"type":"TypeString","optional":true},"streaming_units":{"type":"TypeInt","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"transformation_query":{"type":"TypeString","required":true},"type":{"type":"TypeString","optional":true,"default":"Cloud","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_job_schedule":{"schema":{"last_output_time":{"type":"TypeString","computed":true},"start_mode":{"type":"TypeString","required":true},"start_time":{"type":"TypeString","optional":true,"computed":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_managed_private_endpoint":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_cluster_name":{"type":"TypeString","required":true,"forceNew":true},"subresource_name":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":5}},"azurerm_stream_analytics_output_blob":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"batch_max_wait_time":{"type":"TypeString","optional":true},"batch_min_rows":{"type":"TypeInt","optional":true},"date_format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"path_pattern":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"format":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"storage_account_key":{"type":"TypeString","optional":true},"storage_account_name":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"time_format":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_cosmosdb":{"schema":{"container_name":{"type":"TypeString","required":true},"cosmosdb_account_key":{"type":"TypeString","required":true},"cosmosdb_sql_database_id":{"type":"TypeString","required":true},"document_id":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_eventhub":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"eventhub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true},"property_columns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"format":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_function":{"schema":{"api_key":{"type":"TypeString","required":true},"batch_max_count":{"type":"TypeInt","optional":true,"default":100},"batch_max_in_bytes":{"type":"TypeInt","optional":true,"default":262144},"function_app":{"type":"TypeString","required":true},"function_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_mssql":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"database":{"type":"TypeString","required":true,"forceNew":true},"max_batch_count":{"type":"TypeFloat","optional":true,"default":10000},"max_writer_count":{"type":"TypeFloat","optional":true,"default":1},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","required":true,"forceNew":true},"user":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_powerbi":{"schema":{"dataset":{"type":"TypeString","required":true},"group_id":{"type":"TypeString","required":true},"group_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","required":true},"token_user_display_name":{"type":"TypeString","optional":true},"token_user_principal_name":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_servicebus_queue":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"name":{"type":"TypeString","required":true,"forceNew":true},"property_columns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"queue_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"format":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"system_property_columns":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_servicebus_topic":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"name":{"type":"TypeString","required":true,"forceNew":true},"property_columns":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"format":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"system_property_columns":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"topic_name":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_synapse":{"schema":{"database":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true,"forceNew":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","required":true,"forceNew":true},"user":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_output_table":{"schema":{"batch_size":{"type":"TypeInt","required":true},"columns_to_remove":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"row_key":{"type":"TypeString","required":true},"storage_account_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_reference_input_blob":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"date_format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"path_pattern":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"storage_account_key":{"type":"TypeString","optional":true},"storage_account_name":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"time_format":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_reference_input_mssql":{"schema":{"database":{"type":"TypeString","required":true},"delta_snapshot_query":{"type":"TypeString","optional":true},"full_snapshot_query":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"password":{"type":"TypeString","required":true},"refresh_interval_duration":{"type":"TypeString","optional":true},"refresh_type":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"server":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"table":{"type":"TypeString","optional":true},"username":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_stream_input_blob":{"schema":{"date_format":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"path_pattern":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"storage_account_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true},"time_format":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_stream_input_eventhub":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"eventhub_consumer_group_name":{"type":"TypeString","optional":true},"eventhub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_stream_input_eventhub_v2":{"schema":{"authentication_mode":{"type":"TypeString","optional":true,"default":"ConnectionString"},"eventhub_consumer_group_name":{"type":"TypeString","optional":true},"eventhub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"partition_key":{"type":"TypeString","optional":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"servicebus_namespace":{"type":"TypeString","required":true},"shared_access_policy_key":{"type":"TypeString","optional":true},"shared_access_policy_name":{"type":"TypeString","optional":true},"stream_analytics_job_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_stream_analytics_stream_input_iothub":{"schema":{"endpoint":{"type":"TypeString","required":true},"eventhub_consumer_group_name":{"type":"TypeString","required":true},"iothub_namespace":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"serialization":{"type":"TypeList","required":true,"elem":{"schema":{"encoding":{"type":"TypeString","optional":true},"field_delimiter":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"shared_access_policy_key":{"type":"TypeString","required":true,"forceNew":true},"shared_access_policy_name":{"type":"TypeString","required":true},"stream_analytics_job_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet":{"schema":{"address_prefixes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"delegation":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"service_delegation":{"type":"TypeList","required":true,"elem":{"schema":{"actions":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true}}},"maxItems":1}}}},"enforce_private_link_endpoint_network_policies":{"type":"TypeBool","optional":true,"computed":true},"enforce_private_link_service_network_policies":{"type":"TypeBool","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_endpoint_network_policies_enabled":{"type":"TypeBool","optional":true,"computed":true},"private_link_service_network_policies_enabled":{"type":"TypeBool","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_endpoint_policy_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"minItems":1},"service_endpoints":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"virtual_network_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet_nat_gateway_association":{"schema":{"nat_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet_network_security_group_association":{"schema":{"network_security_group_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet_route_table_association":{"schema":{"route_table_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subnet_service_endpoint_storage_policy":{"schema":{"definition":{"type":"TypeList","optional":true,"elem":{"schema":{"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"service":{"type":"TypeString","optional":true,"default":"Microsoft.Storage"},"service_resources":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}},"maxItems":2,"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription":{"schema":{"alias":{"type":"TypeString","optional":true,"description":"The Alias Name of the subscription. If omitted a new UUID will be generated for this property.","computed":true,"forceNew":true},"billing_scope_id":{"type":"TypeString","optional":true},"subscription_id":{"type":"TypeString","optional":true,"description":"The GUID of the Subscription.","computed":true,"forceNew":true},"subscription_name":{"type":"TypeString","required":true,"description":"The Display Name for the Subscription."},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","description":"The Tenant ID to which the subscription belongs","computed":true},"workload":{"type":"TypeString","optional":true,"description":"The workload type for the Subscription. Possible values are `Production` (default) and `DevTest`.","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_cost_management_export":{"schema":{"active":{"type":"TypeBool","optional":true,"default":true},"export_data_options":{"type":"TypeList","required":true,"elem":{"schema":{"time_frame":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"export_data_storage_location":{"type":"TypeList","required":true,"elem":{"schema":{"container_id":{"type":"TypeString","required":true,"forceNew":true},"root_folder_path":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"recurrence_period_end_date":{"type":"TypeString","required":true},"recurrence_period_start_date":{"type":"TypeString","required":true},"recurrence_type":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_cost_management_view":{"schema":{"accumulated":{"type":"TypeBool","required":true,"forceNew":true},"chart_type":{"type":"TypeString","required":true},"dataset":{"type":"TypeList","required":true,"elem":{"schema":{"aggregation":{"type":"TypeSet","required":true,"elem":{"schema":{"column_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true}}}},"granularity":{"type":"TypeString","required":true},"grouping":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"sorting":{"type":"TypeList","optional":true,"elem":{"schema":{"direction":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}}}}}},"maxItems":1},"display_name":{"type":"TypeString","required":true},"kpi":{"type":"TypeList","optional":true,"elem":{"schema":{"type":{"type":"TypeString","required":true}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"pivot":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"report_type":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","required":true,"forceNew":true},"timeframe":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_policy_assignment":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"enforce":{"type":"TypeBool","optional":true,"default":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","optional":true,"forceNew":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"policy_definition_reference_id":{"type":"TypeString","optional":true}}}},"not_scopes":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"overrides":{"type":"TypeList","optional":true,"elem":{"schema":{"selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","computed":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"value":{"type":"TypeString","required":true}}}},"parameters":{"type":"TypeString","optional":true},"policy_definition_id":{"type":"TypeString","required":true,"forceNew":true},"resource_selectors":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true},"selectors":{"type":"TypeList","required":true,"elem":{"schema":{"in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"kind":{"type":"TypeString","required":true},"not_in":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}}}}},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_policy_exemption":{"schema":{"description":{"type":"TypeString","optional":true},"display_name":{"type":"TypeString","optional":true},"exemption_category":{"type":"TypeString","required":true},"expires_on":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy_assignment_id":{"type":"TypeString","required":true,"forceNew":true},"policy_definition_reference_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_policy_remediation":{"schema":{"failure_percentage":{"type":"TypeFloat","optional":true},"location_filters":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"parallel_deployments":{"type":"TypeInt","optional":true},"policy_assignment_id":{"type":"TypeString","required":true},"policy_definition_id":{"type":"TypeString","optional":true},"policy_definition_reference_id":{"type":"TypeString","optional":true},"resource_count":{"type":"TypeInt","optional":true},"resource_discovery_mode":{"type":"TypeString","optional":true,"default":"ExistingNonCompliant"},"subscription_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_subscription_template_deployment":{"schema":{"debug_level":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_content":{"type":"TypeString","computed":true},"parameters_content":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_content":{"type":"TypeString","optional":true,"computed":true},"template_spec_version_id":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_synapse_firewall_rule":{"schema":{"end_ip_address":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"start_ip_address":{"type":"TypeString","required":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_integration_runtime_azure":{"schema":{"compute_type":{"type":"TypeString","optional":true,"default":"General"},"core_count":{"type":"TypeInt","optional":true,"default":8},"description":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"time_to_live_min":{"type":"TypeInt","optional":true,"default":0}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_integration_runtime_self_hosted":{"schema":{"authorization_key_primary":{"type":"TypeString","computed":true},"authorization_key_secondary":{"type":"TypeString","computed":true},"description":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_linked_service":{"schema":{"additional_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"annotations":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","optional":true},"integration_runtime":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true},"type_properties_json":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_managed_private_endpoint":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"subresource_name":{"type":"TypeString","required":true,"forceNew":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_synapse_private_link_hub":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_role_assignment":{"schema":{"principal_id":{"type":"TypeString","required":true,"forceNew":true},"role_name":{"type":"TypeString","required":true,"forceNew":true},"synapse_spark_pool_id":{"type":"TypeString","optional":true,"forceNew":true},"synapse_workspace_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_synapse_spark_pool":{"schema":{"auto_pause":{"type":"TypeList","optional":true,"elem":{"schema":{"delay_in_minutes":{"type":"TypeInt","required":true}}},"maxItems":1},"auto_scale":{"type":"TypeList","optional":true,"elem":{"schema":{"max_node_count":{"type":"TypeInt","required":true},"min_node_count":{"type":"TypeInt","required":true}}},"maxItems":1},"cache_size":{"type":"TypeInt","optional":true},"compute_isolation_enabled":{"type":"TypeBool","optional":true,"default":false},"dynamic_executor_allocation_enabled":{"type":"TypeBool","optional":true,"default":false},"library_requirement":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"filename":{"type":"TypeString","required":true}}},"maxItems":1},"max_executors":{"type":"TypeInt","optional":true},"min_executors":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"node_count":{"type":"TypeInt","optional":true},"node_size":{"type":"TypeString","required":true},"node_size_family":{"type":"TypeString","required":true},"session_level_packages_enabled":{"type":"TypeBool","optional":true,"default":false},"spark_config":{"type":"TypeList","optional":true,"elem":{"schema":{"content":{"type":"TypeString","required":true},"filename":{"type":"TypeString","required":true}}},"maxItems":1},"spark_events_folder":{"type":"TypeString","optional":true,"default":"/events"},"spark_log_folder":{"type":"TypeString","optional":true,"default":"/logs"},"spark_version":{"type":"TypeString","optional":true,"default":"2.4"},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool":{"schema":{"collation":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"create_mode":{"type":"TypeString","optional":true,"default":"Default","forceNew":true},"data_encrypted":{"type":"TypeBool","optional":true},"geo_backup_policy_enabled":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"recovery_database_id":{"type":"TypeString","optional":true,"forceNew":true},"restore":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"point_in_time":{"type":"TypeString","required":true,"forceNew":true},"source_database_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"sku_name":{"type":"TypeString","required":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_extended_auditing_policy":{"schema":{"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sql_pool_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_access_key_is_secondary":{"type":"TypeBool","optional":true,"default":false},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_security_alert_policy":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"policy_state":{"type":"TypeString","required":true},"retention_days":{"type":"TypeInt","optional":true,"default":0},"sql_pool_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_vulnerability_assessment":{"schema":{"recurring_scans":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email_subscription_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"sql_pool_security_alert_policy_id":{"type":"TypeString","required":true,"forceNew":true},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_container_path":{"type":"TypeString","required":true},"storage_container_sas_key":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_vulnerability_assessment_baseline":{"schema":{"baseline":{"type":"TypeList","optional":true,"elem":{"schema":{"result":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","required":true},"rule_name":{"type":"TypeString","required":true},"sql_pool_vulnerability_assessment_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_workload_classifier":{"schema":{"context":{"type":"TypeString","optional":true},"end_time":{"type":"TypeString","optional":true},"importance":{"type":"TypeString","optional":true},"label":{"type":"TypeString","optional":true},"member_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"start_time":{"type":"TypeString","optional":true},"workload_group_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_sql_pool_workload_group":{"schema":{"importance":{"type":"TypeString","optional":true,"default":"normal"},"max_resource_percent":{"type":"TypeInt","required":true},"max_resource_percent_per_request":{"type":"TypeFloat","optional":true,"default":3},"min_resource_percent":{"type":"TypeInt","required":true},"min_resource_percent_per_request":{"type":"TypeFloat","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"query_execution_timeout_in_seconds":{"type":"TypeInt","optional":true},"sql_pool_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace":{"schema":{"aad_admin":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"azure_devops_repo":{"type":"TypeList","optional":true,"elem":{"schema":{"account_name":{"type":"TypeString","required":true},"branch_name":{"type":"TypeString","required":true},"last_commit_id":{"type":"TypeString","optional":true},"project_name":{"type":"TypeString","required":true},"repository_name":{"type":"TypeString","required":true},"root_folder":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"compute_subnet_id":{"type":"TypeString","optional":true,"forceNew":true},"connectivity_endpoints":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"customer_managed_key":{"type":"TypeList","optional":true,"elem":{"schema":{"key_name":{"type":"TypeString","optional":true,"default":"cmk"},"key_versionless_id":{"type":"TypeString","required":true}}},"maxItems":1},"data_exfiltration_protection_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"github_repo":{"type":"TypeList","optional":true,"elem":{"schema":{"account_name":{"type":"TypeString","required":true},"branch_name":{"type":"TypeString","required":true},"git_url":{"type":"TypeString","optional":true},"last_commit_id":{"type":"TypeString","optional":true},"repository_name":{"type":"TypeString","required":true},"root_folder":{"type":"TypeString","required":true}}},"maxItems":1},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"linking_allowed_for_aad_tenant_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_resource_group_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_virtual_network_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"purview_id":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sql_aad_admin":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}}},"maxItems":1},"sql_administrator_login":{"type":"TypeString","optional":true,"forceNew":true},"sql_administrator_login_password":{"type":"TypeString","optional":true},"sql_identity_control_enabled":{"type":"TypeBool","optional":true},"storage_data_lake_gen2_filesystem_id":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_aad_admin":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"synapse_workspace_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_extended_auditing_policy":{"schema":{"log_monitoring_enabled":{"type":"TypeBool","optional":true,"default":true},"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_account_access_key_is_secondary":{"type":"TypeBool","optional":true,"default":false},"storage_endpoint":{"type":"TypeString","optional":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_key":{"schema":{"active":{"type":"TypeBool","required":true},"customer_managed_key_name":{"type":"TypeString","required":true},"customer_managed_key_versionless_id":{"type":"TypeString","optional":true},"synapse_workspace_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_security_alert_policy":{"schema":{"disabled_alerts":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"email_account_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"email_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"policy_state":{"type":"TypeString","required":true},"retention_days":{"type":"TypeInt","optional":true,"default":0},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_endpoint":{"type":"TypeString","optional":true},"synapse_workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_sql_aad_admin":{"schema":{"login":{"type":"TypeString","required":true},"object_id":{"type":"TypeString","required":true},"synapse_workspace_id":{"type":"TypeString","required":true},"tenant_id":{"type":"TypeString","required":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_synapse_workspace_vulnerability_assessment":{"schema":{"recurring_scans":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"email_subscription_admins_enabled":{"type":"TypeBool","optional":true,"default":false},"emails":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"storage_account_access_key":{"type":"TypeString","optional":true},"storage_container_path":{"type":"TypeString","required":true},"storage_container_sas_key":{"type":"TypeString","optional":true},"workspace_security_alert_policy_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_template_deployment":{"schema":{"deployment_mode":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"outputs":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"parameters":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"parameters_body":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"template_body":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_tenant_template_deployment":{"schema":{"debug_level":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"output_content":{"type":"TypeString","computed":true},"parameters_content":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"template_content":{"type":"TypeString","optional":true,"computed":true},"template_spec_version_id":{"type":"TypeString","optional":true}},"timeouts":{"create":180,"read":5,"delete":180,"update":180}},"azurerm_traffic_manager_azure_endpoint":{"schema":{"custom_header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"enabled":{"type":"TypeBool","optional":true,"default":true},"geo_mappings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"computed":true},"profile_id":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"first":{"type":"TypeString","required":true},"last":{"type":"TypeString","optional":true},"scope":{"type":"TypeInt","optional":true}}}},"target_resource_id":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_traffic_manager_external_endpoint":{"schema":{"custom_header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"enabled":{"type":"TypeBool","optional":true,"default":true},"endpoint_location":{"type":"TypeString","optional":true,"computed":true},"geo_mappings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"computed":true},"profile_id":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"first":{"type":"TypeString","required":true},"last":{"type":"TypeString","optional":true},"scope":{"type":"TypeInt","optional":true}}}},"target":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_traffic_manager_nested_endpoint":{"schema":{"custom_header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"enabled":{"type":"TypeBool","optional":true,"default":true},"endpoint_location":{"type":"TypeString","optional":true,"computed":true},"geo_mappings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"minimum_child_endpoints":{"type":"TypeInt","required":true},"minimum_required_child_endpoints_ipv4":{"type":"TypeInt","optional":true},"minimum_required_child_endpoints_ipv6":{"type":"TypeInt","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"priority":{"type":"TypeInt","optional":true,"computed":true},"profile_id":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"first":{"type":"TypeString","required":true},"last":{"type":"TypeString","optional":true},"scope":{"type":"TypeInt","optional":true}}}},"target_resource_id":{"type":"TypeString","required":true},"weight":{"type":"TypeInt","optional":true,"computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_traffic_manager_profile":{"schema":{"dns_config":{"type":"TypeList","required":true,"elem":{"schema":{"relative_name":{"type":"TypeString","required":true,"forceNew":true},"ttl":{"type":"TypeInt","required":true}}},"maxItems":1},"fqdn":{"type":"TypeString","computed":true},"max_return":{"type":"TypeInt","optional":true},"monitor_config":{"type":"TypeList","required":true,"elem":{"schema":{"custom_header":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"expected_status_code_ranges":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"interval_in_seconds":{"type":"TypeInt","optional":true,"default":30},"path":{"type":"TypeString","optional":true},"port":{"type":"TypeInt","required":true},"protocol":{"type":"TypeString","required":true},"timeout_in_seconds":{"type":"TypeInt","optional":true,"default":10},"tolerated_number_of_failures":{"type":"TypeInt","optional":true,"default":3}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"profile_status":{"type":"TypeString","optional":true,"computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"traffic_routing_method":{"type":"TypeString","required":true},"traffic_view_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_user_assigned_identity":{"schema":{"client_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"principal_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_video_analyzer":{"schema":{"identity":{"type":"TypeList","required":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_account":{"type":"TypeList","required":true,"elem":{"schema":{"id":{"type":"TypeString","required":true},"user_assigned_identity_id":{"type":"TypeString","required":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_video_analyzer_edge_module":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"video_analyzer_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_virtual_desktop_application":{"schema":{"application_group_id":{"type":"TypeString","required":true,"forceNew":true},"command_line_argument_policy":{"type":"TypeString","required":true},"command_line_arguments":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true,"computed":true},"icon_index":{"type":"TypeInt","optional":true},"icon_path":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"path":{"type":"TypeString","required":true},"show_in_portal":{"type":"TypeBool","optional":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_application_group":{"schema":{"default_desktop_display_name":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true},"host_pool_id":{"type":"TypeString","required":true,"forceNew":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_host_pool":{"schema":{"custom_rdp_properties":{"type":"TypeString","optional":true},"description":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true},"load_balancer_type":{"type":"TypeString","required":true},"location":{"type":"TypeString","required":true,"forceNew":true},"maximum_sessions_allowed":{"type":"TypeInt","optional":true,"default":999999},"name":{"type":"TypeString","required":true,"forceNew":true},"personal_desktop_assignment_type":{"type":"TypeString","optional":true,"forceNew":true},"preferred_app_group_type":{"type":"TypeString","optional":true,"default":"Desktop","description":"Preferred App Group type to display","forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"scheduled_agent_updates":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false},"schedule":{"type":"TypeList","optional":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","required":true},"hour_of_day":{"type":"TypeInt","required":true}}},"maxItems":2},"timezone":{"type":"TypeString","optional":true,"default":"UTC"},"use_session_host_timezone":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"start_vm_on_connect":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true},"validate_environment":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_host_pool_registration_info":{"schema":{"expiration_date":{"type":"TypeString","required":true},"hostpool_id":{"type":"TypeString","required":true,"forceNew":true},"token":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_desktop_scaling_plan":{"schema":{"description":{"type":"TypeString","optional":true},"exclusion_tag":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true},"host_pool":{"type":"TypeList","optional":true,"elem":{"schema":{"hostpool_id":{"type":"TypeString","required":true},"scaling_plan_enabled":{"type":"TypeBool","required":true}}}},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"days_of_week":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"off_peak_load_balancing_algorithm":{"type":"TypeString","required":true},"off_peak_start_time":{"type":"TypeString","required":true},"peak_load_balancing_algorithm":{"type":"TypeString","required":true},"peak_start_time":{"type":"TypeString","required":true},"ramp_down_capacity_threshold_percent":{"type":"TypeInt","required":true},"ramp_down_force_logoff_users":{"type":"TypeBool","required":true},"ramp_down_load_balancing_algorithm":{"type":"TypeString","required":true},"ramp_down_minimum_hosts_percent":{"type":"TypeInt","required":true},"ramp_down_notification_message":{"type":"TypeString","required":true},"ramp_down_start_time":{"type":"TypeString","required":true},"ramp_down_stop_hosts_when":{"type":"TypeString","required":true},"ramp_down_wait_time_minutes":{"type":"TypeInt","required":true},"ramp_up_capacity_threshold_percent":{"type":"TypeInt","optional":true},"ramp_up_load_balancing_algorithm":{"type":"TypeString","required":true},"ramp_up_minimum_hosts_percent":{"type":"TypeInt","optional":true},"ramp_up_start_time":{"type":"TypeString","required":true}}},"minItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"time_zone":{"type":"TypeString","required":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_workspace":{"schema":{"description":{"type":"TypeString","optional":true},"friendly_name":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_desktop_workspace_application_group_association":{"schema":{"application_group_id":{"type":"TypeString","required":true,"forceNew":true},"workspace_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_hub":{"schema":{"address_prefix":{"type":"TypeString","optional":true,"forceNew":true},"default_route_table_id":{"type":"TypeString","computed":true},"hub_routing_preference":{"type":"TypeString","optional":true,"default":"ExpressRoute"},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"route":{"type":"TypeSet","optional":true,"elem":{"schema":{"address_prefixes":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"next_hop_ip_address":{"type":"TypeString","required":true}}}},"sku":{"type":"TypeString","optional":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_router_asn":{"type":"TypeInt","computed":true},"virtual_router_auto_scale_min_capacity":{"type":"TypeInt","optional":true,"default":2},"virtual_router_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_wan_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_hub_bgp_connection":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"peer_asn":{"type":"TypeInt","required":true,"forceNew":true},"peer_ip":{"type":"TypeString","required":true,"forceNew":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_network_connection_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_hub_connection":{"schema":{"internet_security_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"remote_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"routing":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"associated_route_table_id":{"type":"TypeString","optional":true,"computed":true},"inbound_route_map_id":{"type":"TypeString","optional":true},"outbound_route_map_id":{"type":"TypeString","optional":true},"propagated_route_table":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"labels":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"route_table_ids":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"static_vnet_local_route_override_criteria":{"type":"TypeString","optional":true,"default":"Contains","forceNew":true},"static_vnet_route":{"type":"TypeList","optional":true,"elem":{"schema":{"address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","optional":true},"next_hop_ip_address":{"type":"TypeString","optional":true}}}}}},"maxItems":1},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_hub_ip":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address":{"type":"TypeString","optional":true},"private_ip_allocation_method":{"type":"TypeString","optional":true,"default":"Dynamic"},"public_ip_address_id":{"type":"TypeString","required":true,"forceNew":true},"subnet_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_hub_route_table":{"schema":{"labels":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"route":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"destinations":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"destinations_type":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"next_hop":{"type":"TypeString","required":true},"next_hop_type":{"type":"TypeString","optional":true,"default":"ResourceId"}}}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_hub_route_table_route":{"schema":{"destinations":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"destinations_type":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true,"forceNew":true},"next_hop":{"type":"TypeString","required":true},"next_hop_type":{"type":"TypeString","optional":true,"default":"ResourceId"},"route_table_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_hub_routing_intent":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"routing_policy":{"type":"TypeList","required":true,"elem":{"schema":{"destinations":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"next_hop":{"type":"TypeString","required":true}}}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_hub_security_partner_provider":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"security_provider_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_machine":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","required":true,"forceNew":true}}},"maxItems":1},"availability_set_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"storage_uri":{"type":"TypeString","required":true}}},"maxItems":1},"delete_data_disks_on_termination":{"type":"TypeBool","optional":true,"default":false},"delete_os_disk_on_termination":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"principal_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"os_profile":{"type":"TypeSet","optional":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true},"admin_username":{"type":"TypeString","required":true},"computer_name":{"type":"TypeString","required":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"os_profile_linux_config":{"type":"TypeSet","optional":true,"elem":{"schema":{"disable_password_authentication":{"type":"TypeBool","required":true},"ssh_keys":{"type":"TypeList","optional":true,"elem":{"schema":{"key_data":{"type":"TypeString","required":true},"path":{"type":"TypeString","required":true}}}}}},"maxItems":1},"os_profile_secrets":{"type":"TypeList","optional":true,"elem":{"schema":{"source_vault_id":{"type":"TypeString","required":true},"vault_certificates":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_store":{"type":"TypeString","optional":true},"certificate_url":{"type":"TypeString","required":true}}}}}}},"os_profile_windows_config":{"type":"TypeSet","optional":true,"elem":{"schema":{"additional_unattend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"component":{"type":"TypeString","required":true},"content":{"type":"TypeString","required":true},"pass":{"type":"TypeString","required":true},"setting_name":{"type":"TypeString","required":true}}}},"enable_automatic_upgrades":{"type":"TypeBool","optional":true,"default":false},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":false},"timezone":{"type":"TypeString","optional":true,"forceNew":true},"winrm":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true}}}}}},"maxItems":1},"plan":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"product":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true}}},"maxItems":1},"primary_network_interface_id":{"type":"TypeString","optional":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"storage_data_disk":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"computed":true},"create_option":{"type":"TypeString","required":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"lun":{"type":"TypeInt","required":true},"managed_disk_id":{"type":"TypeString","optional":true,"computed":true},"managed_disk_type":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"vhd_uri":{"type":"TypeString","optional":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"storage_image_reference":{"type":"TypeSet","optional":true,"computed":true,"forceNew":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true,"forceNew":true},"offer":{"type":"TypeString","optional":true,"forceNew":true},"publisher":{"type":"TypeString","optional":true,"forceNew":true},"sku":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"computed":true,"forceNew":true}}},"maxItems":1},"storage_os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"computed":true},"create_option":{"type":"TypeString","required":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"image_uri":{"type":"TypeString","optional":true},"managed_disk_id":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"managed_disk_type":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","optional":true,"computed":true},"vhd_uri":{"type":"TypeString","optional":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vm_size":{"type":"TypeString","required":true},"zones":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"},"maxItems":1}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_machine_data_disk_attachment":{"schema":{"caching":{"type":"TypeString","required":true},"create_option":{"type":"TypeString","optional":true,"default":"Attach","forceNew":true},"lun":{"type":"TypeInt","required":true,"forceNew":true},"managed_disk_id":{"type":"TypeString","required":true,"forceNew":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_machine_extension":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"failure_suppression_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"provision_after_extensions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true,"forceNew":true},"settings":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_machine_packet_capture":{"schema":{"filter":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"local_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"local_port":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true},"remote_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"remote_port":{"type":"TypeString","optional":true,"forceNew":true}}}},"maximum_bytes_per_packet":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"maximum_bytes_per_session":{"type":"TypeInt","optional":true,"default":1073741824,"forceNew":true},"maximum_capture_duration_in_seconds":{"type":"TypeInt","optional":true,"default":18000,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_id":{"type":"TypeString","required":true,"forceNew":true},"storage_location":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"file_path":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_path":{"type":"TypeString","computed":true}}},"maxItems":1},"virtual_machine_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_virtual_machine_scale_set":{"schema":{"automatic_os_upgrade":{"type":"TypeBool","optional":true,"default":false},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"storage_uri":{"type":"TypeString","required":true}}},"maxItems":1},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extension":{"type":"TypeSet","optional":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"provision_after_extensions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true}}}},"health_probe_id":{"type":"TypeString","optional":true},"identity":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true,"computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_profile":{"type":"TypeSet","required":true,"elem":{"schema":{"accelerated_networking":{"type":"TypeBool","optional":true},"dns_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":20},"load_balancer_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","required":true},"public_ip_address_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","required":true},"idle_timeout":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true}}},"maxItems":1},"subnet_id":{"type":"TypeString","required":true}}}},"ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"network_security_group_id":{"type":"TypeString","optional":true},"primary":{"type":"TypeBool","required":true}}}},"os_profile":{"type":"TypeList","required":true,"elem":{"schema":{"admin_password":{"type":"TypeString","optional":true},"admin_username":{"type":"TypeString","required":true},"computer_name_prefix":{"type":"TypeString","required":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true}}},"maxItems":1},"os_profile_linux_config":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"disable_password_authentication":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"ssh_keys":{"type":"TypeList","optional":true,"elem":{"schema":{"key_data":{"type":"TypeString","optional":true},"path":{"type":"TypeString","required":true}}}}}},"maxItems":1},"os_profile_secrets":{"type":"TypeSet","optional":true,"elem":{"schema":{"source_vault_id":{"type":"TypeString","required":true},"vault_certificates":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_store":{"type":"TypeString","optional":true},"certificate_url":{"type":"TypeString","required":true}}}}}}},"os_profile_windows_config":{"type":"TypeSet","optional":true,"elem":{"schema":{"additional_unattend_config":{"type":"TypeList","optional":true,"elem":{"schema":{"component":{"type":"TypeString","required":true},"content":{"type":"TypeString","required":true},"pass":{"type":"TypeString","required":true},"setting_name":{"type":"TypeString","required":true}}}},"enable_automatic_upgrades":{"type":"TypeBool","optional":true},"provision_vm_agent":{"type":"TypeBool","optional":true},"winrm":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true},"protocol":{"type":"TypeString","required":true}}}}}},"maxItems":1},"overprovision":{"type":"TypeBool","optional":true,"default":true},"plan":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"product":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true}}},"maxItems":1},"priority":{"type":"TypeString","optional":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rolling_upgrade_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"max_batch_instance_percent":{"type":"TypeInt","optional":true,"default":20},"max_unhealthy_instance_percent":{"type":"TypeInt","optional":true,"default":20},"max_unhealthy_upgraded_instance_percent":{"type":"TypeInt","optional":true,"default":20},"pause_time_between_batches":{"type":"TypeString","optional":true,"default":"PT0S"}}},"maxItems":1},"single_placement_group":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"sku":{"type":"TypeList","required":true,"elem":{"schema":{"capacity":{"type":"TypeInt","required":true},"name":{"type":"TypeString","required":true},"tier":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"storage_profile_data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"computed":true},"create_option":{"type":"TypeString","required":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"lun":{"type":"TypeInt","required":true},"managed_disk_type":{"type":"TypeString","optional":true,"computed":true}}}},"storage_profile_image_reference":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"id":{"type":"TypeString","optional":true},"offer":{"type":"TypeString","optional":true},"publisher":{"type":"TypeString","optional":true},"sku":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true}}},"maxItems":1},"storage_profile_os_disk":{"type":"TypeSet","required":true,"elem":{"schema":{"caching":{"type":"TypeString","optional":true,"computed":true},"create_option":{"type":"TypeString","required":true},"image":{"type":"TypeString","optional":true},"managed_disk_type":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","optional":true},"os_type":{"type":"TypeString","optional":true},"vhd_containers":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"upgrade_policy_mode":{"type":"TypeString","required":true},"zones":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_virtual_machine_scale_set_extension":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true,"default":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"failure_suppression_enabled":{"type":"TypeBool","optional":true,"default":false},"force_update_tag":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"provision_after_extensions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true,"forceNew":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true,"forceNew":true},"type_handler_version":{"type":"TypeString","required":true},"virtual_machine_scale_set_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_machine_scale_set_packet_capture":{"schema":{"filter":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"local_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"local_port":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true},"remote_ip_address":{"type":"TypeString","optional":true,"forceNew":true},"remote_port":{"type":"TypeString","optional":true,"forceNew":true}}}},"machine_scope":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"exclude_instance_ids":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}},"include_instance_ids":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"maximum_bytes_per_packet":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"maximum_bytes_per_session":{"type":"TypeInt","optional":true,"default":1073741824,"forceNew":true},"maximum_capture_duration_in_seconds":{"type":"TypeInt","optional":true,"default":18000,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_watcher_id":{"type":"TypeString","required":true,"forceNew":true},"storage_location":{"type":"TypeList","required":true,"forceNew":true,"elem":{"schema":{"file_path":{"type":"TypeString","optional":true},"storage_account_id":{"type":"TypeString","optional":true},"storage_path":{"type":"TypeString","computed":true}}},"maxItems":1},"virtual_machine_scale_set_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_virtual_network":{"schema":{"address_space":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"bgp_community":{"type":"TypeString","optional":true},"ddos_protection_plan":{"type":"TypeList","optional":true,"elem":{"schema":{"enable":{"type":"TypeBool","required":true},"id":{"type":"TypeString","required":true}}},"maxItems":1},"dns_servers":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"encryption":{"type":"TypeList","optional":true,"elem":{"schema":{"enforcement":{"type":"TypeString","required":true}}},"maxItems":1},"flow_timeout_in_minutes":{"type":"TypeInt","optional":true},"guid":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subnet":{"type":"TypeSet","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","required":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"security_group":{"type":"TypeString","optional":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_network_dns_servers":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_network_gateway":{"schema":{"active_active":{"type":"TypeBool","optional":true,"computed":true},"bgp_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","optional":true},"peer_weight":{"type":"TypeInt","optional":true},"peering_addresses":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"apipa_addresses":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"default_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_name":{"type":"TypeString","optional":true,"computed":true},"tunnel_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":2,"minItems":1}}},"maxItems":1},"custom_route":{"type":"TypeList","optional":true,"elem":{"schema":{"address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"default_local_network_gateway_id":{"type":"TypeString","optional":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_bgp":{"type":"TypeBool","optional":true,"computed":true},"generation":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"name":{"type":"TypeString","optional":true,"default":"vnetGatewayConfig"},"private_ip_address_allocation":{"type":"TypeString","optional":true,"default":"Dynamic"},"public_ip_address_id":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","required":true}}},"maxItems":3},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_ip_address_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","required":true,"forceNew":true},"vpn_client_configuration":{"type":"TypeList","optional":true,"elem":{"schema":{"aad_audience":{"type":"TypeString","optional":true},"aad_issuer":{"type":"TypeString","optional":true},"aad_tenant":{"type":"TypeString","optional":true},"address_space":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"radius_server_address":{"type":"TypeString","optional":true},"radius_server_secret":{"type":"TypeString","optional":true},"revoked_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"thumbprint":{"type":"TypeString","required":true}}}},"root_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"public_cert_data":{"type":"TypeString","required":true}}}},"vpn_auth_types":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"},"maxItems":3},"vpn_client_protocols":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"vpn_type":{"type":"TypeString","optional":true,"default":"RouteBased","forceNew":true}},"timeouts":{"create":90,"read":5,"delete":60,"update":60}},"azurerm_virtual_network_gateway_connection":{"schema":{"authorization_key":{"type":"TypeString","optional":true},"connection_mode":{"type":"TypeString","optional":true,"default":"Default","forceNew":true},"connection_protocol":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_bgp_addresses":{"type":"TypeList","optional":true,"elem":{"schema":{"primary":{"type":"TypeString","required":true},"secondary":{"type":"TypeString","optional":true}}},"maxItems":1},"dpd_timeout_seconds":{"type":"TypeInt","optional":true,"forceNew":true},"egress_nat_rule_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"enable_bgp":{"type":"TypeBool","optional":true,"computed":true},"express_route_circuit_id":{"type":"TypeString","optional":true,"forceNew":true},"express_route_gateway_bypass":{"type":"TypeBool","optional":true,"computed":true},"ingress_nat_rule_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"ipsec_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"dh_group":{"type":"TypeString","required":true},"ike_encryption":{"type":"TypeString","required":true},"ike_integrity":{"type":"TypeString","required":true},"ipsec_encryption":{"type":"TypeString","required":true},"ipsec_integrity":{"type":"TypeString","required":true},"pfs_group":{"type":"TypeString","required":true},"sa_datasize":{"type":"TypeInt","optional":true,"computed":true},"sa_lifetime":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"local_azure_ip_address_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"local_network_gateway_id":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"peer_virtual_network_gateway_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_weight":{"type":"TypeInt","optional":true,"computed":true},"shared_key":{"type":"TypeString","optional":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"traffic_selector_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"local_address_cidrs":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"remote_address_cidrs":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}}},"type":{"type":"TypeString","required":true,"forceNew":true},"use_policy_based_traffic_selectors":{"type":"TypeBool","optional":true,"computed":true},"virtual_network_gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_network_gateway_nat_rule":{"schema":{"external_mapping":{"type":"TypeList","required":true,"elem":{"schema":{"address_space":{"type":"TypeString","required":true},"port_range":{"type":"TypeString","optional":true}}}},"internal_mapping":{"type":"TypeList","required":true,"elem":{"schema":{"address_space":{"type":"TypeString","required":true},"port_range":{"type":"TypeString","optional":true}}}},"ip_configuration_id":{"type":"TypeString","optional":true},"mode":{"type":"TypeString","optional":true,"default":"EgressSnat","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"default":"Static","forceNew":true},"virtual_network_gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_network_peering":{"schema":{"allow_forwarded_traffic":{"type":"TypeBool","optional":true,"default":false},"allow_gateway_transit":{"type":"TypeBool","optional":true,"default":false},"allow_virtual_network_access":{"type":"TypeBool","optional":true,"default":true},"name":{"type":"TypeString","required":true,"forceNew":true},"remote_virtual_network_id":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"triggers":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"use_remote_gateways":{"type":"TypeBool","optional":true,"default":false},"virtual_network_name":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_virtual_wan":{"schema":{"allow_branch_to_branch_traffic":{"type":"TypeBool","optional":true,"default":true},"disable_vpn_encryption":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"office365_local_breakout_category":{"type":"TypeString","optional":true,"default":"None"},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","optional":true,"default":"Standard"}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vmware_cluster":{"schema":{"cluster_node_count":{"type":"TypeInt","required":true},"cluster_number":{"type":"TypeInt","computed":true},"hosts":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"vmware_cloud_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":300,"read":5,"delete":300,"update":300}},"azurerm_vmware_express_route_authorization":{"schema":{"express_route_authorization_id":{"type":"TypeString","computed":true},"express_route_authorization_key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"private_cloud_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_vmware_netapp_volume_attachment":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"netapp_volume_id":{"type":"TypeString","required":true,"forceNew":true},"vmware_cluster_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_vmware_private_cloud":{"schema":{"circuit":{"type":"TypeList","computed":true,"elem":{"schema":{"express_route_id":{"type":"TypeString","computed":true},"express_route_private_peering_id":{"type":"TypeString","computed":true},"primary_subnet_cidr":{"type":"TypeString","computed":true},"secondary_subnet_cidr":{"type":"TypeString","computed":true}}}},"hcx_cloud_manager_endpoint":{"type":"TypeString","computed":true},"internet_connection_enabled":{"type":"TypeBool","optional":true,"default":false},"location":{"type":"TypeString","required":true,"forceNew":true},"management_cluster":{"type":"TypeList","required":true,"elem":{"schema":{"hosts":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeInt","computed":true},"size":{"type":"TypeInt","required":true}}},"maxItems":1},"management_subnet_cidr":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"network_subnet_cidr":{"type":"TypeString","required":true,"forceNew":true},"nsxt_certificate_thumbprint":{"type":"TypeString","computed":true},"nsxt_manager_endpoint":{"type":"TypeString","computed":true},"nsxt_password":{"type":"TypeString","optional":true,"forceNew":true},"provisioning_subnet_cidr":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vcenter_certificate_thumbprint":{"type":"TypeString","computed":true},"vcenter_password":{"type":"TypeString","optional":true,"forceNew":true},"vcsa_endpoint":{"type":"TypeString","computed":true},"vmotion_subnet_cidr":{"type":"TypeString","computed":true}},"timeouts":{"create":600,"read":5,"delete":600,"update":600}},"azurerm_voice_services_communications_gateway":{"schema":{"api_bridge":{"type":"TypeString","optional":true},"auto_generated_domain_name_label_scope":{"type":"TypeString","optional":true,"default":"TenantReuse","forceNew":true},"codecs":{"type":"TypeString","required":true},"connectivity":{"type":"TypeString","required":true,"forceNew":true},"e911_type":{"type":"TypeString","required":true},"emergency_dial_strings":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"microsoft_teams_voicemail_pilot_number":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true,"forceNew":true},"on_prem_mcp_enabled":{"type":"TypeBool","optional":true},"platforms":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_location":{"type":"TypeSet","required":true,"elem":{"schema":{"allowed_media_source_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"allowed_signaling_source_address_prefixes":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"esrp_addresses":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true},"operator_addresses":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_voice_services_communications_gateway_test_line":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"phone_number":{"type":"TypeString","required":true},"purpose":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"voice_services_communications_gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vpn_gateway":{"schema":{"bgp_route_translation_for_nat_enabled":{"type":"TypeBool","optional":true,"default":false},"bgp_settings":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","required":true,"forceNew":true},"bgp_peering_address":{"type":"TypeString","computed":true},"instance_0_bgp_peering_address":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"custom_ips":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"default_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_id":{"type":"TypeString","computed":true},"tunnel_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"instance_1_bgp_peering_address":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"custom_ips":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"default_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_id":{"type":"TypeString","computed":true},"tunnel_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"peer_weight":{"type":"TypeInt","required":true,"forceNew":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"routing_preference":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"scale_unit":{"type":"TypeInt","optional":true,"default":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_vpn_gateway_connection":{"schema":{"internet_security_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true,"forceNew":true},"remote_vpn_site_id":{"type":"TypeString","required":true,"forceNew":true},"routing":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"associated_route_table":{"type":"TypeString","required":true},"inbound_route_map_id":{"type":"TypeString","optional":true},"outbound_route_map_id":{"type":"TypeString","optional":true},"propagated_route_table":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"labels":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"route_table_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}}}},"maxItems":1}}},"maxItems":1},"traffic_selector_policy":{"type":"TypeSet","optional":true,"elem":{"schema":{"local_address_ranges":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"remote_address_ranges":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}}}}},"vpn_gateway_id":{"type":"TypeString","required":true,"forceNew":true},"vpn_link":{"type":"TypeList","required":true,"elem":{"schema":{"bandwidth_mbps":{"type":"TypeInt","optional":true,"default":10},"bgp_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"connection_mode":{"type":"TypeString","optional":true,"default":"Default"},"custom_bgp_address":{"type":"TypeSet","optional":true,"elem":{"schema":{"ip_address":{"type":"TypeString","required":true},"ip_configuration_id":{"type":"TypeString","required":true}}}},"egress_nat_rule_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"ingress_nat_rule_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"ipsec_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"dh_group":{"type":"TypeString","required":true},"encryption_algorithm":{"type":"TypeString","required":true},"ike_encryption_algorithm":{"type":"TypeString","required":true},"ike_integrity_algorithm":{"type":"TypeString","required":true},"integrity_algorithm":{"type":"TypeString","required":true},"pfs_group":{"type":"TypeString","required":true},"sa_data_size_kb":{"type":"TypeInt","required":true},"sa_lifetime_sec":{"type":"TypeInt","required":true}}},"minItems":1},"local_azure_ip_address_enabled":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"policy_based_traffic_selector_enabled":{"type":"TypeBool","optional":true,"default":false},"protocol":{"type":"TypeString","optional":true,"default":"IKEv2"},"ratelimit_enabled":{"type":"TypeBool","optional":true,"default":false},"route_weight":{"type":"TypeInt","optional":true,"default":0},"shared_key":{"type":"TypeString","optional":true},"vpn_site_link_id":{"type":"TypeString","required":true,"forceNew":true}}},"minItems":1}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vpn_gateway_nat_rule":{"schema":{"external_address_space_mappings":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"external_mapping":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"address_space":{"type":"TypeString","required":true},"port_range":{"type":"TypeString","optional":true}}}},"internal_address_space_mappings":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"internal_mapping":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"address_space":{"type":"TypeString","required":true},"port_range":{"type":"TypeString","optional":true}}}},"ip_configuration_id":{"type":"TypeString","optional":true},"mode":{"type":"TypeString","optional":true,"default":"EgressSnat","forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","optional":true,"default":"Static","forceNew":true},"vpn_gateway_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vpn_server_configuration":{"schema":{"azure_active_directory_authentication":{"type":"TypeList","optional":true,"elem":{"schema":{"audience":{"type":"TypeString","required":true},"issuer":{"type":"TypeString","required":true},"tenant":{"type":"TypeString","required":true}}},"minItems":1},"client_revoked_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"thumbprint":{"type":"TypeString","required":true}}}},"client_root_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"public_cert_data":{"type":"TypeString","required":true}}}},"ipsec_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"dh_group":{"type":"TypeString","required":true},"ike_encryption":{"type":"TypeString","required":true},"ike_integrity":{"type":"TypeString","required":true},"ipsec_encryption":{"type":"TypeString","required":true},"ipsec_integrity":{"type":"TypeString","required":true},"pfs_group":{"type":"TypeString","required":true},"sa_data_size_kilobytes":{"type":"TypeInt","required":true},"sa_lifetime_seconds":{"type":"TypeInt","required":true}}},"maxItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"radius":{"type":"TypeList","optional":true,"elem":{"schema":{"client_root_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"thumbprint":{"type":"TypeString","required":true}}}},"server":{"type":"TypeList","optional":true,"elem":{"schema":{"address":{"type":"TypeString","required":true},"score":{"type":"TypeInt","required":true},"secret":{"type":"TypeString","required":true}}}},"server_root_certificate":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"public_cert_data":{"type":"TypeString","required":true}}}}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"vpn_authentication_types":{"type":"TypeList","required":true,"elem":{"type":"TypeString"}},"vpn_protocols":{"type":"TypeSet","optional":true,"computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":90,"read":5,"delete":90,"update":90}},"azurerm_vpn_server_configuration_policy_group":{"schema":{"is_default":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"policy":{"type":"TypeSet","required":true,"elem":{"schema":{"name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true},"value":{"type":"TypeString","required":true}}}},"priority":{"type":"TypeInt","optional":true,"default":0},"vpn_server_configuration_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_vpn_site":{"schema":{"address_cidrs":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"device_model":{"type":"TypeString","optional":true},"device_vendor":{"type":"TypeString","optional":true},"link":{"type":"TypeList","optional":true,"elem":{"schema":{"bgp":{"type":"TypeList","optional":true,"elem":{"schema":{"asn":{"type":"TypeInt","required":true},"peering_address":{"type":"TypeString","required":true}}},"maxItems":1},"fqdn":{"type":"TypeString","optional":true},"id":{"type":"TypeString","computed":true},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"provider_name":{"type":"TypeString","optional":true},"speed_in_mbps":{"type":"TypeInt","optional":true,"default":0}}},"minItems":1},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"o365_policy":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"traffic_category":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allow_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"default_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false},"optimize_endpoint_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_wan_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_app_active_slot":{"schema":{"last_successful_swap":{"type":"TypeString","description":"The timestamp of the last successful swap with `Production`","computed":true},"overwrite_network_config":{"type":"TypeBool","optional":true,"default":true,"description":"The swap action should overwrite the Production slot's network configuration with the configuration from this slot. Defaults to `true`.","forceNew":true},"slot_id":{"type":"TypeString","required":true,"description":"The ID of the Slot to swap with `Production`."}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_web_app_hybrid_connection":{"schema":{"hostname":{"type":"TypeString","required":true,"description":"The hostname of the endpoint."},"namespace_name":{"type":"TypeString","description":"The name of the Relay Namespace.","computed":true},"port":{"type":"TypeInt","required":true,"description":"The port to use for the endpoint"},"relay_id":{"type":"TypeString","required":true,"description":"The ID of the Relay Hybrid Connection to use.","forceNew":true},"relay_name":{"type":"TypeString","description":"The name of the Relay in use.","computed":true},"send_key_name":{"type":"TypeString","optional":true,"default":"RootManageSharedAccessKey","description":"The name of the Relay key with `Send` permission to use. Defaults to `RootManageSharedAccessKey`"},"send_key_value":{"type":"TypeString","description":"The Primary Access Key for the `send_key_name`","computed":true},"service_bus_namespace":{"type":"TypeString","description":"The Service Bus Namespace.","computed":true},"service_bus_suffix":{"type":"TypeString","description":"The suffix for the endpoint.","computed":true},"web_app_id":{"type":"TypeString","required":true,"description":"The ID of the Web App for this Hybrid Connection.","forceNew":true}},"timeouts":{"create":30,"read":5,"delete":5,"update":30}},"azurerm_web_application_firewall_policy":{"schema":{"custom_rules":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"match_conditions":{"type":"TypeList","required":true,"elem":{"schema":{"match_values":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"match_variables":{"type":"TypeList","required":true,"elem":{"schema":{"selector":{"type":"TypeString","optional":true},"variable_name":{"type":"TypeString","required":true}}}},"negation_condition":{"type":"TypeBool","optional":true},"operator":{"type":"TypeString","required":true},"transforms":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","optional":true},"priority":{"type":"TypeInt","required":true},"rule_type":{"type":"TypeString","required":true}}}},"http_listener_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"managed_rules":{"type":"TypeList","required":true,"elem":{"schema":{"exclusion":{"type":"TypeList","optional":true,"elem":{"schema":{"excluded_rule_set":{"type":"TypeList","optional":true,"elem":{"schema":{"rule_group":{"type":"TypeList","optional":true,"elem":{"schema":{"excluded_rules":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"rule_group_name":{"type":"TypeString","required":true}}}},"type":{"type":"TypeString","optional":true,"default":"OWASP"},"version":{"type":"TypeString","optional":true,"default":"3.2"}}},"maxItems":1},"match_variable":{"type":"TypeString","required":true},"selector":{"type":"TypeString","required":true},"selector_match_operator":{"type":"TypeString","required":true}}}},"managed_rule_set":{"type":"TypeList","required":true,"elem":{"schema":{"rule_group_override":{"type":"TypeList","optional":true,"elem":{"schema":{"disabled_rules":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"rule":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true},"enabled":{"type":"TypeBool","optional":true},"id":{"type":"TypeString","required":true}}}},"rule_group_name":{"type":"TypeString","required":true}}}},"type":{"type":"TypeString","optional":true,"default":"OWASP"},"version":{"type":"TypeString","required":true}}}}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"path_based_rule_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"policy_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"file_upload_limit_in_mb":{"type":"TypeInt","optional":true,"default":100},"log_scrubbing":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"rule":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true},"match_variable":{"type":"TypeString","required":true},"selector":{"type":"TypeString","optional":true,"description":"When matchVariable is a collection, operator used to specify which elements in the collection this rule applies to."},"selector_match_operator":{"type":"TypeString","optional":true,"default":"Equals"}}}}}},"maxItems":1},"max_request_body_size_in_kb":{"type":"TypeInt","optional":true,"default":128},"mode":{"type":"TypeString","optional":true,"default":"Prevention"},"request_body_check":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_pubsub":{"schema":{"aad_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"capacity":{"type":"TypeInt","optional":true,"default":1},"external_ip":{"type":"TypeString","computed":true},"hostname":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"live_trace":{"type":"TypeList","optional":true,"elem":{"schema":{"connectivity_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"http_request_logs_enabled":{"type":"TypeBool","optional":true,"default":true},"messaging_logs_enabled":{"type":"TypeBool","optional":true,"default":true}}},"maxItems":1},"local_auth_enabled":{"type":"TypeBool","optional":true,"default":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"public_port":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"server_port":{"type":"TypeInt","computed":true},"sku":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tls_client_cert_enabled":{"type":"TypeBool","optional":true,"default":false},"version":{"type":"TypeString","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_pubsub_custom_certificate":{"schema":{"certificate_version":{"type":"TypeString","computed":true},"custom_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_web_pubsub_custom_domain":{"schema":{"domain_name":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_custom_certificate_id":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30}},"azurerm_web_pubsub_hub":{"schema":{"anonymous_connections_enabled":{"type":"TypeBool","optional":true,"default":false},"event_handler":{"type":"TypeList","optional":true,"elem":{"schema":{"auth":{"type":"TypeList","optional":true,"elem":{"schema":{"managed_identity_id":{"type":"TypeString","required":true}}},"maxItems":1,"minItems":1},"system_events":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"url_template":{"type":"TypeString","required":true},"user_event_pattern":{"type":"TypeString","optional":true}}}},"event_listener":{"type":"TypeList","optional":true,"elem":{"schema":{"eventhub_name":{"type":"TypeString","required":true},"eventhub_namespace_name":{"type":"TypeString","required":true},"system_event_name_filter":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"user_event_name_filter":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_pubsub_network_acl":{"schema":{"default_action":{"type":"TypeString","optional":true,"default":"Deny"},"private_endpoint":{"type":"TypeSet","optional":true,"elem":{"schema":{"allowed_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"denied_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","required":true}}}},"public_network":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"denied_request_types":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_web_pubsub_shared_private_link_resource":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"request_message":{"type":"TypeString","optional":true},"status":{"type":"TypeString","computed":true},"subresource_name":{"type":"TypeString","required":true,"forceNew":true},"target_resource_id":{"type":"TypeString","required":true,"forceNew":true},"web_pubsub_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_windows_function_app":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs for [App Settings](https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings) and custom values.","elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"builtin_logging_enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should built in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting"},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the function app use Client Certificates"},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Optional","description":"The mode of the Function App's client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser` "},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"content_share_force_disabled":{"type":"TypeBool","optional":true,"default":false,"description":"Force disable the content share settings."},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans."},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Is the Windows Function App enabled."},"functions_extension_version":{"type":"TypeString","optional":true,"default":"~4","description":"The runtime version associated with the Function App."},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"description":"Can the Function App only be accessed via HTTPS?","computed":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Key Vault access.","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"description":"Specifies the name of the Function App.","forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_plan_id":{"type":"TypeString","required":true,"description":"The ID of the App Service Plan within which to create this Function App"},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"description":"If this Windows Web App is Always On enabled. Defaults to `false`.","computed":true},"api_definition_url":{"type":"TypeString","optional":true,"description":"The URL of the API definition that describes this Windows Function App."},"api_management_api_id":{"type":"TypeString","optional":true,"description":"The ID of the API Management API for this Windows Function App."},"app_command_line":{"type":"TypeString","optional":true,"description":"The program and any arguments used to launch this app via the command line. (Example `node myapp.js`)."},"app_scale_limit":{"type":"TypeInt","optional":true,"description":"The number of workers this function app can scale out to. Only applicable to apps on the Consumption and Premium plan.","computed":true},"app_service_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","optional":true,"default":35,"description":"The amount of disk space to use for logs. Valid values are between `25` and `100`."},"retention_period_days":{"type":"TypeInt","optional":true,"description":"The retention period for logs in days. Valid values are between `0` and `99999`. Defaults to `0` (never delete)."}}},"maxItems":1},"application_insights_connection_string":{"type":"TypeString","optional":true,"description":"The Connection String for linking the Windows Function App to Application Insights."},"application_insights_key":{"type":"TypeString","optional":true,"description":"The Instrumentation Key for connecting the Windows Function App to Application Insights."},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"dotnet_version":{"type":"TypeString","optional":true,"default":"v4.0","description":"The version of .Net. Possible values are `v3.0`, `v4.0`, `v6.0` and `v7.0`"},"java_version":{"type":"TypeString","optional":true,"description":"The version of Java to use. Possible values are `1.8`, `11` and `17`"},"node_version":{"type":"TypeString","optional":true,"description":"The version of Node to use. Possible values include `12`, `14`, `16` and `18`"},"powershell_core_version":{"type":"TypeString","optional":true,"description":"The PowerShell Core version to use. Possible values are `7`, and `7.2`"},"use_custom_runtime":{"type":"TypeBool","optional":true,"description":"Does the Function App use a custom Application Stack?","computed":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","optional":true,"description":"Should the DotNet process use an isolated runtime. Defaults to `false`.","computed":true}}},"maxItems":1},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"description":"Specifies a list of Default Documents for the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","description":"Is detailed error logging enabled","computed":true},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"description":"The number of minimum instances for this Windows Function App. Only affects apps on Elastic Premium plans.","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled","description":"State of FTP / FTPS service for this function app. Possible values include: `AllAllowed`, `FtpsOnly` and `Disabled`. Defaults to `Disabled`."},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true,"description":"The path to be checked for this function app health."},"http2_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Specifies if the http2 protocol should be enabled. Defaults to `false`."},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests","description":"The Site load balancing mode. Possible values include: `WeightedRoundRobin`, `LeastRequests`, `LeastResponseTime`, `WeightedTotalTraffic`, `RequestHash`, `PerSiteRoundRobin`. Defaults to `LeastRequests` if omitted."},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated","description":"The Managed Pipeline mode. Possible values include: `Integrated`, `Classic`. Defaults to `Integrated`."},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"The configures the minimum version of TLS required for SSL requests. Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"description":"The number of pre-warmed instances for this function app. Only affects apps on an Elastic Premium plan.","computed":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Remote Debugging be enabled. Defaults to `false`."},"remote_debugging_version":{"type":"TypeString","optional":true,"description":"The Remote Debugging Version. Possible values include `VS2017`, `VS2019`, and `VS2022`","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"description":"Should Functions Runtime Scale Monitoring be enabled."},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"Configures the minimum version of TLS required for SSL requests to the SCM site Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"scm_type":{"type":"TypeString","description":"The SCM Type in use by the Windows Function App.","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Function App `ip_restriction` configuration be used for the SCM also."},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true,"description":"Should the Windows Web App use a 32-bit worker."},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Web Sockets be enabled. Defaults to `false`."},"windows_fx_version":{"type":"TypeString","description":"The Windows FX Version string.","computed":true},"worker_count":{"type":"TypeInt","optional":true,"description":"The number of Workers for this Windows Function App.","computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"connection_string_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"storage_account_access_key":{"type":"TypeString","optional":true,"description":"The access key which will be used to access the storage account for the Function App."},"storage_account_name":{"type":"TypeString","optional":true,"description":"The backend storage account name which will be used by this Function App."},"storage_key_vault_secret_id":{"type":"TypeString","optional":true,"description":"The Key Vault Secret ID, including version, that contains the Connection String to connect to the storage account for this Function App."},"storage_uses_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App use its Managed Identity to access storage?"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Windows Function App. **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` to be set on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_windows_function_app_slot":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs for [App Settings](https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings) and custom values.","elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"builtin_logging_enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should built in logging be enabled. Configures `AzureWebJobsDashboard` app setting based on the configured storage setting."},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App Slot use Client Certificates."},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Optional","description":"The mode of the Function App Slot's client certificates requirement for incoming requests. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`."},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"content_share_force_disabled":{"type":"TypeBool","optional":true,"default":false,"description":"Force disable the content share settings."},"custom_domain_verification_id":{"type":"TypeString","description":"The identifier used by App Service to perform domain ownership verification via DNS TXT record.","computed":true},"daily_memory_time_quota":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of memory in gigabyte-seconds that your application is allowed to consume per day. Setting this value only affects function apps in Consumption Plans."},"default_hostname":{"type":"TypeString","description":"The default hostname of the Windows Function App Slot.","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Is the Windows Function App Slot enabled."},"function_app_id":{"type":"TypeString","required":true,"description":"The ID of the Windows Function App this Slot is a member of.","forceNew":true},"functions_extension_version":{"type":"TypeString","optional":true,"default":"~4","description":"The runtime version associated with the Function App Slot."},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false,"description":"Can the Function App Slot only be accessed via HTTPS?"},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"description":"The User Assigned Identity to use for Key Vault access.","computed":true},"kind":{"type":"TypeString","description":"The Kind value for this Windows Function App Slot.","computed":true},"name":{"type":"TypeString","required":true,"description":"Specifies the name of the Windows Function App Slot.","forceNew":true},"outbound_ip_address_list":{"type":"TypeList","description":"A list of outbound IP addresses. For example `[\"52.23.25.3\", \"52.143.43.12\"]`.","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","description":"A comma separated list of outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12`.","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","description":"A list of possible outbound IP addresses, not all of which are necessarily in use. This is a superset of `outbound_ip_address_list`. For example `[\"52.23.25.3\", \"52.143.43.12\"]`.","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","description":"A comma separated list of possible outbound IP addresses as a string. For example `52.23.25.3,52.143.43.12,52.143.43.17`. This is a superset of `outbound_ip_addresses`. For example `[\"52.23.25.3\", \"52.143.43.12\",\"52.143.43.17\"]`.","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_plan_id":{"type":"TypeString","optional":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"description":"If this Windows Web App is Always On enabled. Defaults to `false`.","computed":true},"api_definition_url":{"type":"TypeString","optional":true,"description":"The URL of the API definition that describes this Windows Function App."},"api_management_api_id":{"type":"TypeString","optional":true,"description":"The ID of the API Management API for this Windows Function App."},"app_command_line":{"type":"TypeString","optional":true,"description":"The program and any arguments used to launch this app via the command line. (Example `node myapp.js`)."},"app_scale_limit":{"type":"TypeInt","optional":true,"description":"The number of workers this function app can scale out to. Only applicable to apps on the Consumption and Premium plan.","computed":true},"app_service_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","optional":true,"default":35,"description":"The amount of disk space to use for logs. Valid values are between `25` and `100`."},"retention_period_days":{"type":"TypeInt","optional":true,"description":"The retention period for logs in days. Valid values are between `0` and `99999`. Defaults to `0` (never delete)."}}},"maxItems":1},"application_insights_connection_string":{"type":"TypeString","optional":true,"description":"The Connection String for linking the Windows Function App to Application Insights."},"application_insights_key":{"type":"TypeString","optional":true,"description":"The Instrumentation Key for connecting the Windows Function App to Application Insights."},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"dotnet_version":{"type":"TypeString","optional":true,"default":"v4.0","description":"The version of .Net. Possible values are `v3.0`, `v4.0`, `v6.0` and `v7.0`"},"java_version":{"type":"TypeString","optional":true,"description":"The version of Java to use. Possible values are `1.8`, `11` and `17`"},"node_version":{"type":"TypeString","optional":true,"description":"The version of Node to use. Possible values include `12`, `14`, `16` and `18`"},"powershell_core_version":{"type":"TypeString","optional":true,"description":"The PowerShell Core version to use. Possible values are `7`, and `7.2`"},"use_custom_runtime":{"type":"TypeBool","optional":true,"description":"Does the Function App use a custom Application Stack?","computed":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","optional":true,"description":"Should the DotNet process use an isolated runtime. Defaults to `false`.","computed":true}}},"maxItems":1},"auto_swap_slot_name":{"type":"TypeString","optional":true},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"description":"Specifies a list of Default Documents for the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","description":"Is detailed error logging enabled","computed":true},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"description":"The number of minimum instances for this Windows Function App. Only affects apps on Elastic Premium plans.","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled","description":"State of FTP / FTPS service for this function app. Possible values include: `AllAllowed`, `FtpsOnly` and `Disabled`. Defaults to `Disabled`."},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"default":0,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`"},"health_check_path":{"type":"TypeString","optional":true,"description":"The path to be checked for this function app health."},"http2_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Specifies if the http2 protocol should be enabled. Defaults to `false`."},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests","description":"The Site load balancing mode. Possible values include: `WeightedRoundRobin`, `LeastRequests`, `LeastResponseTime`, `WeightedTotalTraffic`, `RequestHash`, `PerSiteRoundRobin`. Defaults to `LeastRequests` if omitted."},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated","description":"The Managed Pipeline mode. Possible values include: `Integrated`, `Classic`. Defaults to `Integrated`."},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"The configures the minimum version of TLS required for SSL requests. Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"description":"The number of pre-warmed instances for this function app. Only affects apps on an Elastic Premium plan.","computed":true},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Remote Debugging be enabled. Defaults to `false`."},"remote_debugging_version":{"type":"TypeString","optional":true,"description":"The Remote Debugging Version. Possible values include `VS2017`, `VS2019`, and `VS2022`","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"description":"Should Functions Runtime Scale Monitoring be enabled."},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2","description":"Configures the minimum version of TLS required for SSL requests to the SCM site Possible values include: `1.0`, `1.1`, and `1.2`. Defaults to `1.2`."},"scm_type":{"type":"TypeString","description":"The SCM Type in use by the Windows Function App.","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Function App `ip_restriction` configuration be used for the SCM also."},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true,"description":"Should the Windows Web App use a 32-bit worker."},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should Web Sockets be enabled. Defaults to `false`."},"windows_fx_version":{"type":"TypeString","description":"The Windows FX Version string.","computed":true},"worker_count":{"type":"TypeInt","optional":true,"description":"The number of Workers for this Windows Function App.","computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"storage_account_access_key":{"type":"TypeString","optional":true,"description":"The access key which will be used to access the storage account for the Function App Slot."},"storage_account_name":{"type":"TypeString","optional":true,"description":"The backend storage account name which will be used by this Function App Slot."},"storage_key_vault_secret_id":{"type":"TypeString","optional":true,"description":"The Key Vault Secret ID, including version, that contains the Connection String to connect to the storage account for this Function App."},"storage_uses_managed_identity":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Function App Slot use its Managed Identity to access storage?"},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_windows_virtual_machine":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"additional_unattend_content":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"content":{"type":"TypeString","required":true,"forceNew":true},"setting":{"type":"TypeString","required":true,"forceNew":true}}}},"admin_password":{"type":"TypeString","required":true,"forceNew":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"allow_extension_operations":{"type":"TypeBool","optional":true,"default":true},"availability_set_id":{"type":"TypeString","optional":true,"forceNew":true},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"bypass_platform_safety_checks_on_user_schedule_enabled":{"type":"TypeBool","optional":true,"default":false},"capacity_reservation_group_id":{"type":"TypeString","optional":true},"computer_name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true,"forceNew":true},"dedicated_host_group_id":{"type":"TypeString","optional":true},"dedicated_host_id":{"type":"TypeString","optional":true},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_automatic_updates":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"gallery_application":{"type":"TypeList","optional":true,"elem":{"schema":{"configuration_blob_uri":{"type":"TypeString","optional":true},"order":{"type":"TypeInt","optional":true,"default":0},"tag":{"type":"TypeString","optional":true},"version_id":{"type":"TypeString","required":true}}},"maxItems":100},"hotpatching_enabled":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"license_type":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface_ids":{"type":"TypeList","required":true,"elem":{"type":"TypeString"},"minItems":1},"os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"name":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_encryption_type":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"patch_assessment_mode":{"type":"TypeString","optional":true,"default":"ImageDefault"},"patch_mode":{"type":"TypeString","optional":true,"default":"AutomaticByOS"},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain":{"type":"TypeInt","optional":true,"default":-1,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true},"public_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"reboot_setting":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"store":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"secure_boot_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"size":{"type":"TypeString","required":true},"source_image_id":{"type":"TypeString","optional":true,"forceNew":true},"source_image_reference":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true,"forceNew":true},"version":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"timezone":{"type":"TypeString","optional":true,"forceNew":true},"user_data":{"type":"TypeString","optional":true},"virtual_machine_id":{"type":"TypeString","computed":true},"virtual_machine_scale_set_id":{"type":"TypeString","optional":true,"forceNew":true},"vtpm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"winrm_listener":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true}}}},"zone":{"type":"TypeString","optional":true,"forceNew":true}},"timeouts":{"create":45,"read":5,"delete":45,"update":45}},"azurerm_windows_virtual_machine_scale_set":{"schema":{"additional_capabilities":{"type":"TypeList","optional":true,"elem":{"schema":{"ultra_ssd_enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true}}},"maxItems":1},"additional_unattend_content":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"content":{"type":"TypeString","required":true,"forceNew":true},"setting":{"type":"TypeString","required":true,"forceNew":true}}}},"admin_password":{"type":"TypeString","required":true,"forceNew":true},"admin_username":{"type":"TypeString","required":true,"forceNew":true},"automatic_instance_repair":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"grace_period":{"type":"TypeString","optional":true,"default":"PT30M"}}},"maxItems":1},"automatic_os_upgrade_policy":{"type":"TypeList","optional":true,"elem":{"schema":{"disable_automatic_rollback":{"type":"TypeBool","required":true},"enable_automatic_os_upgrade":{"type":"TypeBool","required":true}}},"maxItems":1},"boot_diagnostics":{"type":"TypeList","optional":true,"elem":{"schema":{"storage_account_uri":{"type":"TypeString","optional":true}}},"maxItems":1},"capacity_reservation_group_id":{"type":"TypeString","optional":true,"forceNew":true},"computer_name_prefix":{"type":"TypeString","optional":true,"computed":true,"forceNew":true},"custom_data":{"type":"TypeString","optional":true},"data_disk":{"type":"TypeList","optional":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"create_option":{"type":"TypeString","optional":true,"default":"Empty"},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","required":true},"lun":{"type":"TypeInt","required":true},"name":{"type":"TypeString","optional":true},"storage_account_type":{"type":"TypeString","required":true},"ultra_ssd_disk_iops_read_write":{"type":"TypeInt","optional":true,"computed":true},"ultra_ssd_disk_mbps_read_write":{"type":"TypeInt","optional":true,"computed":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}}},"do_not_run_extensions_on_overprovisioned_machines":{"type":"TypeBool","optional":true,"default":false},"edge_zone":{"type":"TypeString","optional":true,"forceNew":true},"enable_automatic_updates":{"type":"TypeBool","optional":true,"default":true},"encryption_at_host_enabled":{"type":"TypeBool","optional":true},"eviction_policy":{"type":"TypeString","optional":true,"forceNew":true},"extension":{"type":"TypeSet","optional":true,"computed":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","optional":true,"default":true},"automatic_upgrade_enabled":{"type":"TypeBool","optional":true},"force_update_tag":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"protected_settings":{"type":"TypeString","optional":true},"protected_settings_from_key_vault":{"type":"TypeList","optional":true,"elem":{"schema":{"secret_url":{"type":"TypeString","required":true},"source_vault_id":{"type":"TypeString","required":true}}},"maxItems":1},"provision_after_extensions":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","required":true},"settings":{"type":"TypeString","optional":true},"type":{"type":"TypeString","required":true},"type_handler_version":{"type":"TypeString","required":true}}}},"extension_operations_enabled":{"type":"TypeBool","optional":true,"computed":true,"forceNew":true},"extensions_time_budget":{"type":"TypeString","optional":true,"default":"PT1H30M"},"gallery_application":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"configuration_blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"order":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"tag":{"type":"TypeString","optional":true,"forceNew":true},"version_id":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":100},"gallery_applications":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"configuration_reference_blob_uri":{"type":"TypeString","optional":true,"forceNew":true},"order":{"type":"TypeInt","optional":true,"default":0,"forceNew":true},"package_reference_id":{"type":"TypeString","required":true,"forceNew":true},"tag":{"type":"TypeString","optional":true,"forceNew":true}}},"maxItems":100},"health_probe_id":{"type":"TypeString","optional":true},"host_group_id":{"type":"TypeString","optional":true,"forceNew":true},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"instances":{"type":"TypeInt","required":true},"license_type":{"type":"TypeString","optional":true},"location":{"type":"TypeString","required":true,"forceNew":true},"max_bid_price":{"type":"TypeFloat","optional":true,"default":-1},"name":{"type":"TypeString","required":true,"forceNew":true},"network_interface":{"type":"TypeList","required":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","optional":true,"default":false},"enable_ip_forwarding":{"type":"TypeBool","optional":true,"default":false},"ip_configuration":{"type":"TypeList","required":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":20},"load_balancer_backend_address_pool_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary":{"type":"TypeBool","optional":true,"default":false},"public_ip_address":{"type":"TypeList","optional":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","optional":true},"idle_timeout_in_minutes":{"type":"TypeInt","optional":true,"computed":true},"ip_tag":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"tag":{"type":"TypeString","required":true,"forceNew":true},"type":{"type":"TypeString","required":true,"forceNew":true}}}},"name":{"type":"TypeString","required":true},"public_ip_prefix_id":{"type":"TypeString","optional":true,"forceNew":true},"version":{"type":"TypeString","optional":true,"default":"IPv4","forceNew":true}}}},"subnet_id":{"type":"TypeString","optional":true},"version":{"type":"TypeString","optional":true,"default":"IPv4"}}}},"name":{"type":"TypeString","required":true,"forceNew":true},"network_security_group_id":{"type":"TypeString","optional":true},"primary":{"type":"TypeBool","optional":true,"default":false}}}},"os_disk":{"type":"TypeList","required":true,"elem":{"schema":{"caching":{"type":"TypeString","required":true},"diff_disk_settings":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"option":{"type":"TypeString","required":true,"forceNew":true},"placement":{"type":"TypeString","optional":true,"default":"CacheDisk","forceNew":true}}},"maxItems":1},"disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"disk_size_gb":{"type":"TypeInt","optional":true,"computed":true},"secure_vm_disk_encryption_set_id":{"type":"TypeString","optional":true,"forceNew":true},"security_encryption_type":{"type":"TypeString","optional":true,"forceNew":true},"storage_account_type":{"type":"TypeString","required":true,"forceNew":true},"write_accelerator_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"overprovision":{"type":"TypeBool","optional":true,"default":true},"plan":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"forceNew":true},"product":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true}}},"maxItems":1},"platform_fault_domain_count":{"type":"TypeInt","optional":true,"computed":true,"forceNew":true},"priority":{"type":"TypeString","optional":true,"default":"Regular","forceNew":true},"provision_vm_agent":{"type":"TypeBool","optional":true,"default":true,"forceNew":true},"proximity_placement_group_id":{"type":"TypeString","optional":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"rolling_upgrade_policy":{"type":"TypeList","optional":true,"forceNew":true,"elem":{"schema":{"cross_zone_upgrades_enabled":{"type":"TypeBool","optional":true},"max_batch_instance_percent":{"type":"TypeInt","required":true},"max_unhealthy_instance_percent":{"type":"TypeInt","required":true},"max_unhealthy_upgraded_instance_percent":{"type":"TypeInt","required":true},"pause_time_between_batches":{"type":"TypeString","required":true},"prioritize_unhealthy_instances_enabled":{"type":"TypeBool","optional":true}}},"maxItems":1},"scale_in":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"force_deletion_enabled":{"type":"TypeBool","optional":true,"default":false},"rule":{"type":"TypeString","optional":true,"default":"Default"}}},"maxItems":1},"scale_in_policy":{"type":"TypeString","optional":true,"computed":true},"secret":{"type":"TypeList","optional":true,"elem":{"schema":{"certificate":{"type":"TypeSet","required":true,"elem":{"schema":{"store":{"type":"TypeString","required":true},"url":{"type":"TypeString","required":true}}},"minItems":1},"key_vault_id":{"type":"TypeString","required":true}}}},"secure_boot_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"single_placement_group":{"type":"TypeBool","optional":true,"default":true},"sku":{"type":"TypeString","required":true},"source_image_id":{"type":"TypeString","optional":true},"source_image_reference":{"type":"TypeList","optional":true,"elem":{"schema":{"offer":{"type":"TypeString","required":true,"forceNew":true},"publisher":{"type":"TypeString","required":true,"forceNew":true},"sku":{"type":"TypeString","required":true},"version":{"type":"TypeString","required":true}}},"maxItems":1},"spot_restore":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"timeout":{"type":"TypeString","optional":true,"default":"PT1H","forceNew":true}}},"maxItems":1},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"terminate_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"termination_notification":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","required":true},"timeout":{"type":"TypeString","optional":true,"default":"PT5M"}}},"maxItems":1},"timezone":{"type":"TypeString","optional":true},"unique_id":{"type":"TypeString","computed":true},"upgrade_mode":{"type":"TypeString","optional":true,"default":"Manual","forceNew":true},"user_data":{"type":"TypeString","optional":true},"vtpm_enabled":{"type":"TypeBool","optional":true,"forceNew":true},"winrm_listener":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"schema":{"certificate_url":{"type":"TypeString","optional":true,"forceNew":true},"protocol":{"type":"TypeString","required":true,"forceNew":true}}}},"zone_balance":{"type":"TypeBool","optional":true,"default":false,"forceNew":true},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"create":60,"read":5,"delete":60,"update":60}},"azurerm_windows_web_app":{"schema":{"app_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Required"},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"logs":{"type":"TypeList","optional":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","required":true}}},"maxItems":1},"detailed_error_messages":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_plan_id":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":true},"api_definition_url":{"type":"TypeString","optional":true},"api_management_api_id":{"type":"TypeString","optional":true},"app_command_line":{"type":"TypeString","optional":true},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"current_stack":{"type":"TypeString","optional":true,"computed":true},"docker_container_name":{"type":"TypeString","optional":true},"docker_container_registry":{"type":"TypeString","optional":true},"docker_container_tag":{"type":"TypeString","optional":true},"docker_image_name":{"type":"TypeString","optional":true},"docker_registry_password":{"type":"TypeString","optional":true,"computed":true},"docker_registry_url":{"type":"TypeString","optional":true,"computed":true},"docker_registry_username":{"type":"TypeString","optional":true,"computed":true},"dotnet_core_version":{"type":"TypeString","optional":true,"description":"The version of DotNetCore to use."},"dotnet_version":{"type":"TypeString","optional":true,"computed":true},"java_container":{"type":"TypeString","optional":true},"java_container_version":{"type":"TypeString","optional":true},"java_embedded_server_enabled":{"type":"TypeBool","optional":true,"description":"Should the application use the embedded web server for the version of Java in use.","computed":true},"java_version":{"type":"TypeString","optional":true},"node_version":{"type":"TypeString","optional":true},"php_version":{"type":"TypeString","optional":true,"computed":true},"python":{"type":"TypeBool","optional":true,"default":false},"python_version":{"type":"TypeString","optional":true,"computed":true},"tomcat_version":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_heal_enabled":{"type":"TypeBool","optional":true,"default":false},"auto_heal_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true},"custom_action":{"type":"TypeList","optional":true,"elem":{"schema":{"executable":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true}}},"maxItems":1},"minimum_process_execution_time":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"trigger":{"type":"TypeList","required":true,"elem":{"schema":{"private_memory_kb":{"type":"TypeInt","optional":true},"requests":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true}}},"maxItems":1},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"time_taken":{"type":"TypeString","required":true}}},"maxItems":1},"status_code":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"status_code_range":{"type":"TypeString","required":true},"sub_status":{"type":"TypeInt","optional":true},"win32_status_code":{"type":"TypeInt","optional":true}}}}}},"maxItems":1}}},"maxItems":1},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled"},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests"},"local_mysql_enabled":{"type":"TypeBool","optional":true,"default":false},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker":{"type":"TypeBool","optional":true,"default":true},"virtual_application":{"type":"TypeSet","optional":true,"elem":{"schema":{"physical_path":{"type":"TypeString","required":true},"preload":{"type":"TypeBool","required":true},"virtual_directory":{"type":"TypeSet","optional":true,"elem":{"schema":{"physical_path":{"type":"TypeString","optional":true},"virtual_path":{"type":"TypeString","optional":true}}}},"virtual_path":{"type":"TypeString","required":true}}}},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false},"windows_fx_version":{"type":"TypeString","computed":true},"worker_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1},"connection_string_names":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"minItems":1}}},"maxItems":1},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Windows Web App. **Note:** Using this value requires either `WEBSITE_RUN_FROM_PACKAGE=1` or `SCM_DO_BUILD_DURING_DEPLOYMENT=true` to be set on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}},"azurerm_windows_web_app_slot":{"schema":{"app_service_id":{"type":"TypeString","required":true,"forceNew":true},"app_settings":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret for the Client ID. Cannot be used with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client. Cannot be used with `client_secret`."}}},"maxItems":1},"additional_login_parameters":{"type":"TypeMap","optional":true,"description":"Specifies a map of Login Parameters to send to the OpenID Connect authorization endpoint when a user logs in.","elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","optional":true,"description":"The default authentication provider to use when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","required":true,"description":"Should the Authentication / Authorization feature be enabled?"},"facebook":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret":{"type":"TypeString","optional":true,"description":"The App Secret of the Facebook app used for Facebook Login. Cannot be specified with `app_secret_setting_name`."},"app_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login. Cannot be specified with `app_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"github":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret":{"type":"TypeString","optional":true,"description":"The Client Secret of the GitHub app used for GitHub Login. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret":{"type":"TypeString","optional":true,"description":"The client secret associated with the Google web application. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the `client_secret` value used for Google Login. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","elem":{"type":"TypeString"}}}},"maxItems":1},"issuer":{"type":"TypeString","optional":true,"description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens."},"microsoft":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret":{"type":"TypeString","optional":true,"description":"The OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret_setting_name`."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication. Cannot be specified with `client_secret`."},"oauth_scopes":{"type":"TypeList","optional":true,"description":"The list of OAuth 2.0 scopes that will be requested as part of Microsoft Account authentication. If not specified, `wl.basic` is used as the default scope.","elem":{"type":"TypeString"}}}},"maxItems":1},"runtime_version":{"type":"TypeString","optional":true,"description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Windows Web App durably store platform-specific security tokens that are obtained during login flows? Defaults to `false`."},"twitter":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret":{"type":"TypeString","optional":true,"description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret_setting_name`."},"consumer_secret_setting_name":{"type":"TypeString","optional":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in. Cannot be specified with `consumer_secret`."}}},"maxItems":1},"unauthenticated_client_action":{"type":"TypeString","optional":true,"description":"The action to take when an unauthenticated client attempts to access the app. Possible values include: `RedirectToLoginPage`, `AllowAnonymous`.","computed":true}}},"maxItems":1},"auth_settings_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","optional":true,"description":"The list of allowed Applications for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","optional":true,"description":"The list of allowed Group Names for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","optional":true,"description":"The list of allowed Identities for the Default Authorisation Policy.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Active Directory."},"client_secret_certificate_thumbprint":{"type":"TypeString","optional":true,"description":"The thumbprint of the certificate used for signing purposes."},"client_secret_setting_name":{"type":"TypeString","optional":true,"description":"The App Setting name that contains the client secret of the Client."},"jwt_allowed_client_applications":{"type":"TypeList","optional":true,"description":"A list of Allowed Client Applications in the JWT Claim.","elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","optional":true,"description":"A list of Allowed Groups in the JWT Claim.","elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","optional":true,"description":"A map of key-value pairs to send to the Authorisation Endpoint when a user logs in.","elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","required":true,"description":"The Azure Tenant Endpoint for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`."},"www_authentication_disabled":{"type":"TypeBool","optional":true,"description":"Should the www-authenticate provider should be omitted from the request? Defaults to `false`"}}},"maxItems":1},"apple_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Apple web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Apple Login."},"login_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"auth_enabled":{"type":"TypeBool","optional":true,"description":"Should the AuthV2 Settings be enabled. Defaults to `false`"},"azure_static_web_app_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with Azure Static Web App Authentication."}}},"maxItems":1},"config_file_path":{"type":"TypeString","optional":true,"description":"The path to the App Auth settings. **Note:** Relative Paths are evaluated from the Site Root directory."},"custom_oidc_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`.","computed":true},"client_id":{"type":"TypeString","required":true,"description":"The ID of the Client to use to authenticate with this Custom OIDC."},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Custom OIDC Authentication Provider."},"name_claim_type":{"type":"TypeString","optional":true,"description":"The name of the claim that contains the users name."},"openid_configuration_endpoint":{"type":"TypeString","required":true,"description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider."},"scopes":{"type":"TypeList","optional":true,"description":"The list of the scopes that should be requested while authenticating.","elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","optional":true,"description":"The Default Authentication Provider to use when the `unauthenticated_action` is set to `RedirectToLoginPage`. Possible values include: `apple`, `azureactivedirectory`, `facebook`, `github`, `google`, `twitter` and the `name` of your `custom_oidc_v2` provider."},"excluded_paths":{"type":"TypeList","optional":true,"description":"The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"app_id":{"type":"TypeString","required":true,"description":"The App ID of the Facebook app used for login."},"app_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `app_secret` value used for Facebook Login."},"graph_api_version":{"type":"TypeString","optional":true,"description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of scopes to be requested as part of Facebook Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"forward_proxy_convention":{"type":"TypeString","optional":true,"default":"NoProxy","description":"The convention used to determine the url of the request made. Possible values include `ForwardProxyConventionNoProxy`, `ForwardProxyConventionStandard`, `ForwardProxyConventionCustom`. Defaults to `ForwardProxyConventionNoProxy`"},"forward_proxy_custom_host_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the host of the request."},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","optional":true,"description":"The name of the header containing the scheme of the request."},"github_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"client_id":{"type":"TypeString","required":true,"description":"The ID of the GitHub app used for login."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for GitHub Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"google_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OpenID Connect Client ID for the Google web application."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the `client_secret` value used for Google Login."},"login_scopes":{"type":"TypeList","optional":true,"description":"Specifies a list of Login scopes that will be requested as part of Google Sign-In authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"http_route_api_prefix":{"type":"TypeString","optional":true,"default":"/.auth","description":"The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`"},"login":{"type":"TypeList","required":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","optional":true,"description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","optional":true,"default":"FixedTime","description":"The method by which cookies expire. Possible values include: `FixedTime`, and `IdentityProviderDerived`. Defaults to `FixedTime`."},"cookie_expiration_time":{"type":"TypeString","optional":true,"default":"08:00:00","description":"The time after the request is made when the session cookie should expire. Defaults to `08:00:00`."},"logout_endpoint":{"type":"TypeString","optional":true,"description":"The endpoint to which logout requests should be made."},"nonce_expiration_time":{"type":"TypeString","optional":true,"default":"00:05:00","description":"The time after the request is made when the nonce should expire. Defaults to `00:05:00`."},"preserve_url_fragments_for_logins":{"type":"TypeBool","optional":true,"default":false,"description":"Should the fragments from the request be preserved after the login request is made. Defaults to `false`."},"token_refresh_extension_time":{"type":"TypeFloat","optional":true,"default":72,"description":"The number of hours after session token expiration that a session token can be used to call the token refresh API. Defaults to `72` hours."},"token_store_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should the Token Store configuration Enabled. Defaults to `false`"},"token_store_path":{"type":"TypeString","optional":true,"description":"The directory path in the App Filesystem in which the tokens will be stored."},"token_store_sas_setting_name":{"type":"TypeString","optional":true,"description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens."},"validate_nonce":{"type":"TypeBool","optional":true,"default":true,"description":"Should the nonce be validated while completing the login flow. Defaults to `true`."}}},"maxItems":1},"microsoft_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","optional":true,"description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","required":true,"description":"The OAuth 2.0 client ID that was created for the app used for authentication."},"client_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication."},"login_scopes":{"type":"TypeList","optional":true,"description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","elem":{"type":"TypeString"}}}},"maxItems":1},"require_authentication":{"type":"TypeBool","optional":true,"description":"Should the authentication flow be used for all requests."},"require_https":{"type":"TypeBool","optional":true,"default":true,"description":"Should HTTPS be required on connections? Defaults to true."},"runtime_version":{"type":"TypeString","optional":true,"default":"~1","description":"The Runtime Version of the Authentication and Authorisation feature of this App. Defaults to `~1`"},"twitter_v2":{"type":"TypeList","optional":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","required":true,"description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in."},"consumer_secret_setting_name":{"type":"TypeString","required":true,"description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in."}}},"maxItems":1},"unauthenticated_action":{"type":"TypeString","optional":true,"default":"RedirectToLoginPage","description":"The action to take for requests made without authentication. Possible values include `RedirectToLoginPage`, `AllowAnonymous`, `Return401`, and `Return403`. Defaults to `RedirectToLoginPage`."}}},"maxItems":1},"backup":{"type":"TypeList","optional":true,"elem":{"schema":{"enabled":{"type":"TypeBool","optional":true,"default":true,"description":"Should this backup job be enabled?"},"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Backup."},"schedule":{"type":"TypeList","required":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","required":true,"description":"How often the backup should be executed (e.g. for weekly backup, this should be set to `7` and `frequency_unit` should be set to `Day`)."},"frequency_unit":{"type":"TypeString","required":true,"description":"The unit of time for how often the backup should take place. Possible values include: `Day` and `Hour`."},"keep_at_least_one_backup":{"type":"TypeBool","optional":true,"default":false,"description":"Should the service keep at least one backup, regardless of age of backup. Defaults to `false`."},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","optional":true,"default":30,"description":"After how many days backups should be deleted."},"start_time":{"type":"TypeString","optional":true,"description":"When the schedule should start working in RFC-3339 format.","computed":true}}},"maxItems":1},"storage_account_url":{"type":"TypeString","required":true,"description":"The SAS URL to the container."}}},"maxItems":1},"client_affinity_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_enabled":{"type":"TypeBool","optional":true,"default":false},"client_certificate_exclusion_paths":{"type":"TypeString","optional":true,"description":"Paths to exclude when using client certificates, separated by ;"},"client_certificate_mode":{"type":"TypeString","optional":true,"default":"Required"},"connection_string":{"type":"TypeSet","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name which should be used for this Connection."},"type":{"type":"TypeString","required":true,"description":"Type of database. Possible values include: `MySQL`, `SQLServer`, `SQLAzure`, `Custom`, `NotificationHub`, `ServiceBus`, `EventHub`, `APIHub`, `DocDb`, `RedisCache`, and `PostgreSQL`."},"value":{"type":"TypeString","required":true,"description":"The connection string value."}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","optional":true,"default":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","optional":true,"default":false},"identity":{"type":"TypeList","optional":true,"elem":{"schema":{"identity_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference_identity_id":{"type":"TypeString","optional":true,"computed":true},"kind":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","optional":true,"elem":{"schema":{"application_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"level":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","required":true},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system_level":{"type":"TypeString","required":true}}},"maxItems":1},"detailed_error_messages":{"type":"TypeBool","optional":true,"default":false},"failed_request_tracing":{"type":"TypeBool","optional":true,"default":false},"http_logs":{"type":"TypeList","optional":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","optional":true,"default":0},"sas_url":{"type":"TypeString","required":true}}},"maxItems":1},"file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","required":true},"retention_in_mb":{"type":"TypeInt","required":true}}},"maxItems":1}}},"maxItems":1}}},"maxItems":1},"name":{"type":"TypeString","required":true,"forceNew":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","optional":true,"default":true},"service_plan_id":{"type":"TypeString","optional":true},"site_config":{"type":"TypeList","required":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":true},"api_definition_url":{"type":"TypeString","optional":true},"api_management_api_id":{"type":"TypeString","optional":true},"app_command_line":{"type":"TypeString","optional":true},"application_stack":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"current_stack":{"type":"TypeString","optional":true,"computed":true},"docker_container_name":{"type":"TypeString","optional":true},"docker_container_registry":{"type":"TypeString","optional":true},"docker_container_tag":{"type":"TypeString","optional":true},"docker_image_name":{"type":"TypeString","optional":true},"docker_registry_password":{"type":"TypeString","optional":true,"computed":true},"docker_registry_url":{"type":"TypeString","optional":true,"computed":true},"docker_registry_username":{"type":"TypeString","optional":true,"computed":true},"dotnet_core_version":{"type":"TypeString","optional":true,"description":"The version of DotNetCore to use."},"dotnet_version":{"type":"TypeString","optional":true,"computed":true},"java_container":{"type":"TypeString","optional":true},"java_container_version":{"type":"TypeString","optional":true},"java_embedded_server_enabled":{"type":"TypeBool","optional":true,"description":"Should the application use the embedded web server for the version of Java in use.","computed":true},"java_version":{"type":"TypeString","optional":true},"node_version":{"type":"TypeString","optional":true},"php_version":{"type":"TypeString","optional":true,"computed":true},"python":{"type":"TypeBool","optional":true,"default":false},"python_version":{"type":"TypeString","optional":true,"computed":true},"tomcat_version":{"type":"TypeString","optional":true}}},"maxItems":1},"auto_heal_enabled":{"type":"TypeBool","optional":true,"default":false},"auto_heal_setting":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeList","required":true,"elem":{"schema":{"action_type":{"type":"TypeString","required":true},"custom_action":{"type":"TypeList","optional":true,"elem":{"schema":{"executable":{"type":"TypeString","required":true},"parameters":{"type":"TypeString","optional":true}}},"maxItems":1},"minimum_process_execution_time":{"type":"TypeString","optional":true,"computed":true}}},"maxItems":1},"trigger":{"type":"TypeList","required":true,"elem":{"schema":{"private_memory_kb":{"type":"TypeInt","optional":true},"requests":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true}}},"maxItems":1},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"time_taken":{"type":"TypeString","required":true}}},"maxItems":1},"status_code":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","required":true},"interval":{"type":"TypeString","required":true},"path":{"type":"TypeString","optional":true},"status_code_range":{"type":"TypeString","required":true},"sub_status":{"type":"TypeInt","optional":true},"win32_status_code":{"type":"TypeInt","optional":true}}}}}},"maxItems":1}}},"maxItems":1},"auto_swap_slot_name":{"type":"TypeString","optional":true},"container_registry_managed_identity_client_id":{"type":"TypeString","optional":true},"container_registry_use_managed_identity":{"type":"TypeBool","optional":true,"default":false},"cors":{"type":"TypeList","optional":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","optional":true,"description":"Specifies a list of origins that should be allowed to make cross-origin calls.","elem":{"type":"TypeString"},"minItems":1},"support_credentials":{"type":"TypeBool","optional":true,"default":false,"description":"Are credentials allowed in CORS requests? Defaults to `false`."}}},"maxItems":1},"default_documents":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","optional":true,"default":"Disabled"},"health_check_eviction_time_in_min":{"type":"TypeInt","optional":true,"description":"The amount of time in minutes that a node is unhealthy before being removed from the load balancer. Possible values are between `2` and `10`. Defaults to `10`. Only valid in conjunction with `health_check_path`","computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"load_balancing_mode":{"type":"TypeString","optional":true,"default":"LeastRequests"},"local_mysql_enabled":{"type":"TypeBool","optional":true,"default":false},"managed_pipeline_mode":{"type":"TypeString","optional":true,"default":"Integrated"},"minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"remote_debugging_enabled":{"type":"TypeBool","optional":true,"default":false},"remote_debugging_version":{"type":"TypeString","optional":true,"computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow","description":"The action to take. Possible values are `Allow` or `Deny`."},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","optional":true,"description":"Specifies a list of Azure Front Door IDs.","elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeList","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeList","optional":true,"description":"Specifies a list of addresses for which matching should be applied. Omitting this value means allow any.","elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeList","optional":true,"description":"Specifies a list of Hosts for which matching should be applied.","elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true,"description":"The CIDR notation of the IP or IP Range to match. For example: `10.0.0.0/24` or `192.168.10.1/32` or `fe80::/64` or `13.107.6.152/31,13.107.128.0/22`"},"name":{"type":"TypeString","optional":true,"description":"The name which should be used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000,"description":"The priority value of this `ip_restriction`."},"service_tag":{"type":"TypeString","optional":true,"description":"The Service Tag used for this IP Restriction."},"virtual_network_subnet_id":{"type":"TypeString","optional":true,"description":"The Virtual Network Subnet ID used for this IP Restriction."}}}},"scm_minimum_tls_version":{"type":"TypeString","optional":true,"default":"1.2"},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker":{"type":"TypeBool","optional":true,"computed":true},"virtual_application":{"type":"TypeSet","optional":true,"elem":{"schema":{"physical_path":{"type":"TypeString","required":true},"preload":{"type":"TypeBool","required":true},"virtual_directory":{"type":"TypeSet","optional":true,"elem":{"schema":{"physical_path":{"type":"TypeString","optional":true},"virtual_path":{"type":"TypeString","optional":true}}}},"virtual_path":{"type":"TypeString","required":true}}}},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"default":false,"description":"Should all outbound traffic to have Virtual Network Security Groups and User Defined Routes applied? Defaults to `false`."},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false},"windows_fx_version":{"type":"TypeString","computed":true},"worker_count":{"type":"TypeInt","optional":true,"computed":true}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"storage_account":{"type":"TypeSet","optional":true,"elem":{"schema":{"access_key":{"type":"TypeString","required":true},"account_name":{"type":"TypeString","required":true},"mount_path":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"share_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","required":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","optional":true},"zip_deploy_file":{"type":"TypeString","optional":true,"description":"The local path and filename of the Zip packaged application to deploy to this Windows Web App. **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` on the App in `app_settings`.","computed":true}},"timeouts":{"create":30,"read":5,"delete":30,"update":30}}},"dataSources":{"azurerm_aadb2c_directory":{"schema":{"billing_type":{"type":"TypeString","description":"The type of billing for the B2C tenant. Possible values include: `MAU` or `Auths`.","computed":true},"data_residency_location":{"type":"TypeString","description":"Location in which the B2C tenant is hosted and data resides.","computed":true},"domain_name":{"type":"TypeString","required":true,"description":"Domain name of the B2C tenant, including onmicrosoft.com suffix."},"effective_start_date":{"type":"TypeString","description":"The date from which the billing type took effect. May not be populated until after the first billing cycle.","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","description":"Billing SKU for the B2C tenant.","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","description":"The Tenant ID for the B2C tenant.","computed":true}},"timeouts":{"read":5}},"azurerm_active_directory_domain_service":{"schema":{"deployment_id":{"type":"TypeString","computed":true},"domain_configuration_type":{"type":"TypeString","computed":true},"domain_name":{"type":"TypeString","computed":true},"filtered_sync_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"notifications":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_recipients":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"notify_dc_admins":{"type":"TypeBool","computed":true},"notify_global_admins":{"type":"TypeBool","computed":true}}}},"replica_sets":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_controller_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"external_access_ip_address":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true},"service_status":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"resource_id":{"type":"TypeString","computed":true},"secure_ldap":{"type":"TypeList","computed":true,"elem":{"schema":{"certificate_expiry":{"type":"TypeString","computed":true},"certificate_thumbprint":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"external_access_enabled":{"type":"TypeBool","computed":true},"public_certificate":{"type":"TypeString","computed":true}}}},"security":{"type":"TypeList","computed":true,"elem":{"schema":{"kerberos_armoring_enabled":{"type":"TypeBool","computed":true},"kerberos_rc4_encryption_enabled":{"type":"TypeBool","computed":true},"ntlm_v1_enabled":{"type":"TypeBool","computed":true},"sync_kerberos_passwords":{"type":"TypeBool","computed":true},"sync_ntlm_passwords":{"type":"TypeBool","computed":true},"sync_on_prem_passwords":{"type":"TypeBool","computed":true},"tls_v1_enabled":{"type":"TypeBool","computed":true}}}},"sku":{"type":"TypeString","computed":true},"sync_owner":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true},"version":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_advisor_recommendations":{"schema":{"filter_by_category":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"filter_by_resource_groups":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"recommendations":{"type":"TypeList","computed":true,"elem":{"schema":{"category":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"impact":{"type":"TypeString","computed":true},"recommendation_name":{"type":"TypeString","computed":true},"recommendation_type_id":{"type":"TypeString","computed":true},"resource_name":{"type":"TypeString","computed":true},"resource_type":{"type":"TypeString","computed":true},"suppression_names":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"updated_time":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":10}},"azurerm_api_management":{"schema":{"additional_location":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"gateway_regional_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_id":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"developer_portal_url":{"type":"TypeString","computed":true},"gateway_regional_url":{"type":"TypeString","computed":true},"gateway_url":{"type":"TypeString","computed":true},"hostname_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"developer_portal":{"type":"TypeList","computed":true,"elem":{"schema":{"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}},"management":{"type":"TypeList","computed":true,"elem":{"schema":{"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}},"portal":{"type":"TypeList","computed":true,"elem":{"schema":{"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}},"proxy":{"type":"TypeList","computed":true,"elem":{"schema":{"default_ssl_binding":{"type":"TypeBool","computed":true},"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}},"scm":{"type":"TypeList","computed":true,"elem":{"schema":{"host_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"negotiate_client_certificate":{"type":"TypeBool","computed":true}}}}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"management_api_url":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"notification_sender_email":{"type":"TypeString","computed":true},"portal_url":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address_id":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"publisher_email":{"type":"TypeString","computed":true},"publisher_name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"scm_url":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"tenant_access":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"primary_key":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_api_management_api":{"schema":{"api_management_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"is_current":{"type":"TypeBool","computed":true},"is_online":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"path":{"type":"TypeString","computed":true},"protocols":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"revision":{"type":"TypeString","required":true},"service_url":{"type":"TypeString","computed":true},"soap_pass_through":{"type":"TypeBool","computed":true},"subscription_key_parameter_names":{"type":"TypeList","computed":true,"elem":{"schema":{"header":{"type":"TypeString","computed":true},"query":{"type":"TypeString","computed":true}}}},"subscription_required":{"type":"TypeBool","computed":true},"version":{"type":"TypeString","computed":true},"version_set_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_api_version_set":{"schema":{"api_management_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"version_header_name":{"type":"TypeString","computed":true},"version_query_name":{"type":"TypeString","computed":true},"versioning_scheme":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_gateway":{"schema":{"api_management_id":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"location_data":{"type":"TypeList","computed":true,"elem":{"schema":{"city":{"type":"TypeString","computed":true},"district":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"region":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_api_management_gateway_host_name_configuration":{"schema":{"api_management_id":{"type":"TypeString","required":true},"certificate_id":{"type":"TypeString","computed":true},"gateway_name":{"type":"TypeString","required":true},"host_name":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"request_client_certificate_enabled":{"type":"TypeBool","computed":true},"tls10_enabled":{"type":"TypeBool","computed":true},"tls11_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_group":{"schema":{"api_management_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"external_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_product":{"schema":{"api_management_name":{"type":"TypeString","required":true},"approval_required":{"type":"TypeBool","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"product_id":{"type":"TypeString","required":true},"published":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"subscription_required":{"type":"TypeBool","computed":true},"subscriptions_limit":{"type":"TypeInt","computed":true},"terms":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_api_management_user":{"schema":{"api_management_name":{"type":"TypeString","required":true},"email":{"type":"TypeString","computed":true},"first_name":{"type":"TypeString","computed":true},"last_name":{"type":"TypeString","computed":true},"note":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"state":{"type":"TypeString","computed":true},"user_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_app_configuration":{"schema":{"encryption":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_client_id":{"type":"TypeString","computed":true},"key_vault_key_identifier":{"type":"TypeString","computed":true}}}},"endpoint":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"local_auth_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_read_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"primary_write_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"public_network_access":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"purge_protection_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_read_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"secondary_write_key":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_string":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"secret":{"type":"TypeString","computed":true}}}},"sku":{"type":"TypeString","computed":true},"soft_delete_retention_days":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_app_configuration_key":{"schema":{"configuration_store_id":{"type":"TypeString","required":true},"content_type":{"type":"TypeString","computed":true},"etag":{"type":"TypeString","computed":true},"key":{"type":"TypeString","required":true},"label":{"type":"TypeString","optional":true,"default":""},"locked":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true},"vault_key_reference":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_app_configuration_keys":{"schema":{"configuration_store_id":{"type":"TypeString","required":true},"items":{"type":"TypeList","computed":true,"elem":{"schema":{"content_type":{"type":"TypeString","computed":true},"etag":{"type":"TypeString","computed":true},"key":{"type":"TypeString","computed":true},"label":{"type":"TypeString","computed":true},"locked":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true},"vault_key_reference":{"type":"TypeString","computed":true}}}},"key":{"type":"TypeString","optional":true,"default":""},"label":{"type":"TypeString","optional":true,"default":""}},"timeouts":{"read":5}},"azurerm_app_service":{"schema":{"app_service_plan_id":{"type":"TypeString","computed":true},"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"client_affinity_enabled":{"type":"TypeBool","computed":true},"client_cert_enabled":{"type":"TypeBool","computed":true},"connection_string":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_site_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"https_only":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"acr_use_managed_identity_credentials":{"type":"TypeBool","computed":true},"acr_user_managed_identity_client_id":{"type":"TypeString","computed":true},"always_on":{"type":"TypeBool","computed":true},"app_command_line":{"type":"TypeString","computed":true},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dotnet_framework_version":{"type":"TypeString","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"service_tag":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}}}},"java_container":{"type":"TypeString","computed":true},"java_container_version":{"type":"TypeString","computed":true},"java_version":{"type":"TypeString","computed":true},"linux_fx_version":{"type":"TypeString","computed":true},"local_mysql_enabled":{"type":"TypeBool","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"min_tls_version":{"type":"TypeString","computed":true},"number_of_workers":{"type":"TypeInt","computed":true},"php_version":{"type":"TypeString","computed":true},"python_version":{"type":"TypeString","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"scm_ip_restriction":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"service_tag":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}}}},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker_process":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"windows_fx_version":{"type":"TypeString","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"source_control":{"type":"TypeList","computed":true,"elem":{"schema":{"branch":{"type":"TypeString","computed":true},"manual_integration":{"type":"TypeBool","computed":true},"repo_url":{"type":"TypeString","computed":true},"rollback_enabled":{"type":"TypeBool","computed":true},"use_mercurial":{"type":"TypeBool","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_app_service_certificate":{"schema":{"expiration_date":{"type":"TypeString","computed":true},"friendly_name":{"type":"TypeString","computed":true},"host_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"issue_date":{"type":"TypeString","computed":true},"issuer":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"subject_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_app_service_certificate_order":{"schema":{"app_service_certificate_not_renewable_reasons":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"auto_renew":{"type":"TypeBool","computed":true},"certificates":{"type":"TypeList","computed":true,"elem":{"schema":{"certificate_name":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"key_vault_secret_name":{"type":"TypeString","computed":true},"provisioning_state":{"type":"TypeString","computed":true}}}},"csr":{"type":"TypeString","computed":true},"distinguished_name":{"type":"TypeString","computed":true},"domain_verification_token":{"type":"TypeString","computed":true},"expiration_time":{"type":"TypeString","computed":true},"intermediate_thumbprint":{"type":"TypeString","computed":true},"is_private_key_external":{"type":"TypeBool","computed":true},"key_size":{"type":"TypeInt","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"product_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"root_thumbprint":{"type":"TypeString","computed":true},"signed_certificate_thumbprint":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"validity_in_years":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_app_service_environment":{"schema":{"cluster_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"front_end_scale_factor":{"type":"TypeInt","computed":true},"internal_ip_address":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"pricing_tier":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_ip_address":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_app_service_environment_v3":{"schema":{"allow_new_private_endpoint_connections":{"type":"TypeBool","computed":true},"cluster_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"dedicated_host_count":{"type":"TypeInt","computed":true},"dns_suffix":{"type":"TypeString","computed":true},"external_inbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"inbound_network_dependencies":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"internal_inbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"internal_load_balancing_mode":{"type":"TypeString","computed":true},"ip_ssl_address_count":{"type":"TypeInt","computed":true},"linux_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"pricing_tier":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"windows_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_app_service_plan":{"schema":{"app_service_environment_id":{"type":"TypeString","computed":true},"is_xenon":{"type":"TypeBool","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"maximum_elastic_worker_count":{"type":"TypeInt","computed":true},"maximum_number_of_workers":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"per_site_scaling":{"type":"TypeBool","computed":true},"reserved":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"size":{"type":"TypeString","computed":true},"tier":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_application_gateway":{"schema":{"backend_address_pool":{"type":"TypeList","computed":true,"elem":{"schema":{"fqdns":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeString","computed":true},"ip_addresses":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_application_insights":{"schema":{"app_id":{"type":"TypeString","computed":true},"application_type":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeString","computed":true},"instrumentation_key":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_application_security_group":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_arc_machine":{"schema":{"active_directory_fqdn":{"type":"TypeString","computed":true},"agent":{"type":"TypeList","computed":true,"elem":{"schema":{"extensions_allow_list":{"type":"TypeList","computed":true,"elem":{"schema":{"publisher":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"extensions_block_list":{"type":"TypeList","computed":true,"elem":{"schema":{"publisher":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"extensions_enabled":{"type":"TypeBool","computed":true},"guest_configuration_enabled":{"type":"TypeBool","computed":true},"incoming_connections_ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proxy_bypass":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proxy_url":{"type":"TypeString","computed":true}}}},"agent_version":{"type":"TypeString","computed":true},"client_public_key":{"type":"TypeString","computed":true},"cloud_metadata":{"type":"TypeList","computed":true,"elem":{"schema":{"provider":{"type":"TypeString","computed":true}}}},"detected_properties":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","computed":true},"dns_fqdn":{"type":"TypeString","computed":true},"domain_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"last_status_change_time":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"location_data":{"type":"TypeList","computed":true,"elem":{"schema":{"city":{"type":"TypeString","computed":true},"country_or_region":{"type":"TypeString","computed":true},"district":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"machine_fqdn":{"type":"TypeString","computed":true},"mssql_discovered":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"os_name":{"type":"TypeString","computed":true},"os_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"computer_name":{"type":"TypeString","computed":true},"linux":{"type":"TypeList","computed":true,"elem":{"schema":{"patch":{"type":"TypeList","computed":true,"elem":{"schema":{"assessment_mode":{"type":"TypeString","computed":true},"patch_mode":{"type":"TypeString","computed":true}}}}}}},"windows":{"type":"TypeList","computed":true,"elem":{"schema":{"patch":{"type":"TypeList","computed":true,"elem":{"schema":{"assessment_mode":{"type":"TypeString","computed":true},"patch_mode":{"type":"TypeString","computed":true}}}}}}}}}},"os_sku":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"os_version":{"type":"TypeString","computed":true},"parent_cluster_resource_id":{"type":"TypeString","computed":true},"private_link_scope_resource_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_status":{"type":"TypeList","computed":true,"elem":{"schema":{"extension_service":{"type":"TypeList","computed":true,"elem":{"schema":{"startup_type":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}},"guest_configuration_service":{"type":"TypeList","computed":true,"elem":{"schema":{"startup_type":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}}}}},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vm_id":{"type":"TypeString","computed":true},"vm_uuid":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_attestation_provider":{"schema":{"attestation_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"trust_model":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_account":{"schema":{"endpoint":{"type":"TypeString","computed":true},"hybrid_service_url":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","computed":true},"private_endpoint_connection":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_bool":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_datetime":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_int":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_object":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variable_string":{"schema":{"automation_account_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"value":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_automation_variables":{"schema":{"automation_account_id":{"type":"TypeString","required":true},"bool":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeBool","computed":true}}}},"datetime":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"encrypted":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"int":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeInt","computed":true}}}},"null":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"object":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"string":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"encrypted":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_availability_set":{"schema":{"location":{"type":"TypeString","computed":true},"managed":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"platform_fault_domain_count":{"type":"TypeInt","computed":true},"platform_update_domain_count":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_backup_policy_file_share":{"schema":{"name":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_backup_policy_vm":{"schema":{"name":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_bastion_host":{"schema":{"copy_paste_enabled":{"type":"TypeBool","computed":true},"dns_name":{"type":"TypeString","computed":true},"file_copy_enabled":{"type":"TypeBool","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"ip_connect_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"scale_units":{"type":"TypeInt","computed":true},"shareable_link_enabled":{"type":"TypeBool","computed":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tunneling_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_batch_account":{"schema":{"account_endpoint":{"type":"TypeString","computed":true},"encryption":{"type":"TypeList","configMode":"Auto","optional":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","required":true}}},"maxItems":1},"key_vault_reference":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"url":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"pool_allocation_mode":{"type":"TypeString","computed":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_batch_application":{"schema":{"account_name":{"type":"TypeString","required":true},"allow_updates":{"type":"TypeBool","computed":true},"default_version":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_batch_certificate":{"schema":{"account_name":{"type":"TypeString","required":true},"format":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_data":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"thumbprint":{"type":"TypeString","computed":true},"thumbprint_algorithm":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_batch_pool":{"schema":{"account_name":{"type":"TypeString","required":true},"auto_scale":{"type":"TypeList","computed":true,"elem":{"schema":{"evaluation_interval":{"type":"TypeString","computed":true},"formula":{"type":"TypeString","computed":true}}}},"certificate":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"store_location":{"type":"TypeString","computed":true},"store_name":{"type":"TypeString","computed":true},"visibility":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"container_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"container_image_names":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"container_registries":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"registry_server":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true},"user_name":{"type":"TypeString","computed":true}}}},"type":{"type":"TypeString","computed":true}}}},"data_disks":{"type":"TypeList","computed":true,"elem":{"schema":{"caching":{"type":"TypeString","computed":true},"disk_size_gb":{"type":"TypeInt","computed":true},"lun":{"type":"TypeInt","computed":true},"storage_account_type":{"type":"TypeString","computed":true}}}},"disk_encryption":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_encryption_target":{"type":"TypeString","computed":true}}}},"display_name":{"type":"TypeString","computed":true},"extensions":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_upgrade_minor_version":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","computed":true},"protected_settings":{"type":"TypeString","computed":true},"provision_after_extensions":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"publisher":{"type":"TypeString","computed":true},"settings_json":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"type_handler_version":{"type":"TypeString","computed":true}}}},"fixed_scale":{"type":"TypeList","computed":true,"elem":{"schema":{"resize_timeout":{"type":"TypeString","computed":true},"target_dedicated_nodes":{"type":"TypeInt","computed":true},"target_low_priority_nodes":{"type":"TypeInt","computed":true}}}},"inter_node_communication":{"type":"TypeString","computed":true},"license_type":{"type":"TypeString","computed":true},"max_tasks_per_node":{"type":"TypeInt","computed":true},"metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"mount":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_file_system":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","computed":true},"account_name":{"type":"TypeString","computed":true},"blobfuse_options":{"type":"TypeString","computed":true},"container_name":{"type":"TypeString","computed":true},"identity_id":{"type":"TypeString","computed":true},"relative_mount_path":{"type":"TypeString","computed":true},"sas_key":{"type":"TypeString","computed":true}}}},"azure_file_share":{"type":"TypeList","optional":true,"elem":{"schema":{"account_key":{"type":"TypeString","computed":true},"account_name":{"type":"TypeString","computed":true},"azure_file_url":{"type":"TypeString","computed":true},"mount_options":{"type":"TypeString","computed":true},"relative_mount_path":{"type":"TypeString","computed":true}}}},"cifs_mount":{"type":"TypeList","computed":true,"elem":{"schema":{"mount_options":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"relative_mount_path":{"type":"TypeString","computed":true},"source":{"type":"TypeString","computed":true},"user_name":{"type":"TypeString","computed":true}}}},"nfs_mount":{"type":"TypeList","computed":true,"elem":{"schema":{"mount_options":{"type":"TypeString","computed":true},"relative_mount_path":{"type":"TypeString","computed":true},"source":{"type":"TypeString","computed":true}}}}}}},"name":{"type":"TypeString","required":true},"network_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"accelerated_networking_enabled":{"type":"TypeBool","computed":true},"dynamic_vnet_assignment_scope":{"type":"TypeString","computed":true},"endpoint_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","computed":true},"frontend_port_range":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"network_security_group_rules":{"type":"TypeList","computed":true,"elem":{"schema":{"access":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"source_address_prefix":{"type":"TypeString","computed":true},"source_port_ranges":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"protocol":{"type":"TypeString","computed":true}}}},"public_address_provisioning_type":{"type":"TypeString","computed":true},"public_ips":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"subnet_id":{"type":"TypeString","computed":true}}}},"node_agent_sku_id":{"type":"TypeString","computed":true},"node_placement":{"type":"TypeList","computed":true,"elem":{"schema":{"policy":{"type":"TypeString","computed":true}}}},"os_disk_placement":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"start_task":{"type":"TypeList","computed":true,"elem":{"schema":{"command_line":{"type":"TypeString","computed":true},"common_environment_properties":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"container":{"type":"TypeList","computed":true,"elem":{"schema":{"image_name":{"type":"TypeString","computed":true},"registry":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"registry_server":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true},"user_name":{"type":"TypeString","computed":true}}}},"run_options":{"type":"TypeString","computed":true},"working_directory":{"type":"TypeString","computed":true}}}},"resource_file":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_storage_container_name":{"type":"TypeString","computed":true},"blob_prefix":{"type":"TypeString","computed":true},"file_mode":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","computed":true},"http_url":{"type":"TypeString","computed":true},"storage_container_url":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"task_retry_maximum":{"type":"TypeInt","computed":true},"user_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_user":{"type":"TypeList","computed":true,"elem":{"schema":{"elevation_level":{"type":"TypeString","computed":true},"scope":{"type":"TypeString","computed":true}}}},"user_name":{"type":"TypeString","computed":true}}}},"wait_for_success":{"type":"TypeBool","computed":true}}}},"storage_image_reference":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"offer":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"task_scheduling_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"node_fill_type":{"type":"TypeString","computed":true}}}},"user_accounts":{"type":"TypeList","computed":true,"elem":{"schema":{"elevation_level":{"type":"TypeString","computed":true},"linux_user_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"gid":{"type":"TypeInt","computed":true},"ssh_private_key":{"type":"TypeString","computed":true},"uid":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"windows_user_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"login_mode":{"type":"TypeString","computed":true}}}}}}},"vm_size":{"type":"TypeString","computed":true},"windows":{"type":"TypeList","computed":true,"elem":{"schema":{"enable_automatic_updates":{"type":"TypeBool","computed":true}}}}},"timeouts":{"read":5}},"azurerm_billing_enrollment_account_scope":{"schema":{"billing_account_name":{"type":"TypeString","required":true},"enrollment_account_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_billing_mca_account_scope":{"schema":{"billing_account_name":{"type":"TypeString","required":true},"billing_profile_name":{"type":"TypeString","required":true},"invoice_section_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_billing_mpa_account_scope":{"schema":{"billing_account_name":{"type":"TypeString","required":true},"customer_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_blueprint_definition":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"last_modified":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"scope_id":{"type":"TypeString","required":true},"target_scope":{"type":"TypeString","computed":true},"time_created":{"type":"TypeString","computed":true},"versions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_blueprint_published_version":{"schema":{"blueprint_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"last_modified":{"type":"TypeString","computed":true},"scope_id":{"type":"TypeString","required":true},"target_scope":{"type":"TypeString","computed":true},"time_created":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"version":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_custom_domain":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","computed":true},"dns_zone_id":{"type":"TypeString","computed":true},"expiration_date":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tls":{"type":"TypeList","computed":true,"elem":{"schema":{"cdn_frontdoor_secret_id":{"type":"TypeString","computed":true},"certificate_type":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true}}}},"validation_token":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_endpoint":{"schema":{"enabled":{"type":"TypeBool","computed":true},"host_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_firewall_policy":{"schema":{"enabled":{"type":"TypeBool","computed":true},"frontend_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"mode":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"redirect_url":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_origin_group":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","computed":true},"health_probe":{"type":"TypeList","computed":true,"elem":{"schema":{"interval_in_seconds":{"type":"TypeInt","computed":true},"path":{"type":"TypeString","computed":true},"protocol":{"type":"TypeString","computed":true},"request_type":{"type":"TypeString","computed":true}}}},"load_balancing":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_latency_in_milliseconds":{"type":"TypeInt","computed":true},"sample_size":{"type":"TypeInt","computed":true},"successful_samples_required":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"restore_traffic_time_to_healed_or_new_endpoint_in_minutes":{"type":"TypeInt","computed":true},"session_affinity_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_profile":{"schema":{"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"resource_guid":{"type":"TypeString","computed":true},"response_timeout_seconds":{"type":"TypeInt","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_rule_set":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_cdn_frontdoor_secret":{"schema":{"cdn_frontdoor_profile_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"profile_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"secret":{"type":"TypeList","computed":true,"elem":{"schema":{"customer_certificate":{"type":"TypeList","computed":true,"elem":{"schema":{"expiration_date":{"type":"TypeString","computed":true},"key_vault_certificate_id":{"type":"TypeString","computed":true},"subject_alternative_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}}},"timeouts":{"read":5}},"azurerm_cdn_profile":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_client_config":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"subscription_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_cognitive_account":{"schema":{"endpoint":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"qna_runtime_endpoint":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_communication_service":{"schema":{"data_location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_confidential_ledger":{"schema":{"azuread_based_service_principal":{"type":"TypeList","computed":true,"elem":{"schema":{"ledger_role_name":{"type":"TypeString","computed":true},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}},"certificate_based_security_principal":{"type":"TypeList","computed":true,"elem":{"schema":{"ledger_role_name":{"type":"TypeString","computed":true},"pem_public_key":{"type":"TypeString","computed":true}}}},"identity_service_endpoint":{"type":"TypeString","computed":true},"ledger_endpoint":{"type":"TypeString","computed":true},"ledger_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_consumption_budget_resource_group":{"schema":{"amount":{"type":"TypeFloat","computed":true},"filter":{"type":"TypeList","computed":true,"elem":{"schema":{"dimension":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"not":{"type":"TypeList","computed":true,"elem":{"schema":{"dimension":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"name":{"type":"TypeString","required":true},"notification":{"type":"TypeList","computed":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"contact_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"contact_roles":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","computed":true},"operator":{"type":"TypeString","computed":true},"threshold":{"type":"TypeInt","computed":true},"threshold_type":{"type":"TypeString","computed":true}}}},"resource_group_id":{"type":"TypeString","required":true},"time_grain":{"type":"TypeString","computed":true},"time_period":{"type":"TypeList","computed":true,"elem":{"schema":{"end_date":{"type":"TypeString","computed":true},"start_date":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_consumption_budget_subscription":{"schema":{"amount":{"type":"TypeFloat","computed":true},"filter":{"type":"TypeList","computed":true,"elem":{"schema":{"dimension":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"not":{"type":"TypeList","computed":true,"elem":{"schema":{"dimension":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"name":{"type":"TypeString","required":true},"notification":{"type":"TypeList","computed":true,"elem":{"schema":{"contact_emails":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"contact_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"contact_roles":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","computed":true},"operator":{"type":"TypeString","computed":true},"threshold":{"type":"TypeInt","computed":true},"threshold_type":{"type":"TypeString","computed":true}}}},"subscription_id":{"type":"TypeString","required":true},"time_grain":{"type":"TypeString","computed":true},"time_period":{"type":"TypeList","computed":true,"elem":{"schema":{"end_date":{"type":"TypeString","computed":true},"start_date":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_container_app":{"schema":{"container_app_environment_id":{"type":"TypeString","computed":true},"custom_domain_verification_id":{"type":"TypeString","description":"The ID of the Custom Domain Verification for this Container App.","computed":true},"dapr":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The Dapr Application Identifier.","computed":true},"app_port":{"type":"TypeInt","description":"The port which the application is listening on. This is the same as the `ingress` port.","computed":true},"app_protocol":{"type":"TypeString","description":"The protocol for the app. Possible values include `http` and `grpc`. Defaults to `http`.","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"ingress":{"type":"TypeList","computed":true,"elem":{"schema":{"allow_insecure_connections":{"type":"TypeBool","description":"Should this ingress allow insecure connections?","computed":true},"custom_domain":{"type":"TypeList","computed":true,"elem":{"schema":{"certificate_binding_type":{"type":"TypeString","description":"The Binding type. Possible values include `Disabled` and `SniEnabled`. Defaults to `Disabled`","computed":true},"certificate_id":{"type":"TypeString","description":"The ID of the Certificate.","computed":true},"name":{"type":"TypeString","description":"The hostname of the Certificate. Must be the CN or a named SAN in the certificate.","computed":true}}}},"external_enabled":{"type":"TypeBool","description":"Is this an external Ingress.","computed":true},"fqdn":{"type":"TypeString","description":"The FQDN of the ingress.","computed":true},"target_port":{"type":"TypeInt","description":"The target port on the container for the Ingress traffic.","computed":true},"traffic_weight":{"type":"TypeList","computed":true,"elem":{"schema":{"label":{"type":"TypeString","description":"The label to apply to the revision as a name prefix for routing traffic.","computed":true},"latest_revision":{"type":"TypeBool","description":"This traffic Weight relates to the latest stable Container Revision.","computed":true},"percentage":{"type":"TypeInt","description":"The percentage of traffic to send to this revision.","computed":true},"revision_suffix":{"type":"TypeString","description":"The suffix string to append to the revision. This must be unique for the Container App's lifetime. A default hash created by the service will be used if this value is omitted.","computed":true}}}},"transport":{"type":"TypeString","description":"The transport method for the Ingress. Possible values include `auto`, `http`, and `http2`. Defaults to `auto`","computed":true}}}},"latest_revision_fqdn":{"type":"TypeString","description":"The fully qualified domain name of the latest Container App.","computed":true},"latest_revision_name":{"type":"TypeString","description":"The name of the latest Container Revision.","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"registry":{"type":"TypeList","computed":true,"elem":{"schema":{"identity":{"type":"TypeString","description":"ID of the System or User Managed Identity used to pull images from the Container Registry","computed":true},"password_secret_name":{"type":"TypeString","description":"The name of the Secret Reference containing the password value for this user on the Container Registry.","computed":true},"server":{"type":"TypeString","description":"The hostname for the Container Registry.","computed":true},"username":{"type":"TypeString","description":"The username to use for this Container Registry.","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"revision_mode":{"type":"TypeString","computed":true},"secret":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Secret name.","computed":true},"value":{"type":"TypeString","description":"The value for this secret.","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"template":{"type":"TypeList","computed":true,"elem":{"schema":{"container":{"type":"TypeList","computed":true,"elem":{"schema":{"args":{"type":"TypeList","description":"A list of args to pass to the container.","computed":true,"elem":{"type":"TypeString"}},"command":{"type":"TypeList","description":"A command to pass to the container to override the default. This is provided as a list of command line elements without spaces.","computed":true,"elem":{"type":"TypeString"}},"cpu":{"type":"TypeFloat","description":"The amount of vCPU to allocate to the container. Possible values include `0.25`, `0.5`, `0.75`, `1.0`, `1.25`, `1.5`, `1.75`, and `2.0`. **NOTE:** `cpu` and `memory` must be specified in `0.25'/'0.5Gi` combination increments. e.g. `1.0` / `2.0` or `0.5` / `1.0`","computed":true},"env":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of the environment variable for the container.","computed":true},"secret_name":{"type":"TypeString","description":"The name of the secret that contains the value for this environment variable.","computed":true},"value":{"type":"TypeString","description":"The value for this environment variable. **NOTE:** This value is ignored if `secret_name` is used","computed":true}}}},"ephemeral_storage":{"type":"TypeString","description":"The amount of ephemeral storage available to the Container App.","computed":true},"image":{"type":"TypeString","description":"The image to use to create the container.","computed":true},"liveness_probe":{"type":"TypeList","computed":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.","computed":true},"header":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The HTTP Header Name.","computed":true},"value":{"type":"TypeString","description":"The HTTP Header value.","computed":true}}}},"host":{"type":"TypeString","description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes.","computed":true},"initial_delay":{"type":"TypeInt","description":"The time in seconds to wait after the container has started before the probe is started.","computed":true},"interval_seconds":{"type":"TypeInt","description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`","computed":true},"path":{"type":"TypeString","description":"The URI to use with the `host` for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","description":"The port number on which to connect. Possible values are between `1` and `65535`.","computed":true},"termination_grace_period_seconds":{"type":"TypeInt","description":"The time in seconds after the container is sent the termination signal before the process if forcibly killed.","computed":true},"timeout":{"type":"TypeInt","description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`.","computed":true},"transport":{"type":"TypeString","description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`.","computed":true}}}},"memory":{"type":"TypeString","description":"The amount of memory to allocate to the container. Possible values include `0.5Gi`, `1.0Gi`, `1.5Gi`, `2.0Gi`, `2.5Gi`, `3.0Gi`, `3.5Gi`, and `4.0Gi`. **NOTE:** `cpu` and `memory` must be specified in `0.25'/'0.5Gi` combination increments. e.g. `1.25` / `2.5Gi` or `0.75` / `1.5Gi`","computed":true},"name":{"type":"TypeString","description":"The name of the container.","computed":true},"readiness_probe":{"type":"TypeList","computed":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.","computed":true},"header":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The HTTP Header Name.","computed":true},"value":{"type":"TypeString","description":"The HTTP Header value.","computed":true}}}},"host":{"type":"TypeString","description":"The probe hostname. Defaults to the pod IP address. Setting a value for `Host` in `headers` can be used to override this for `http` and `https` type probes.","computed":true},"interval_seconds":{"type":"TypeInt","description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`","computed":true},"path":{"type":"TypeString","description":"The URI to use for http type probes. Not valid for `TCP` type probes. Defaults to `/`.","computed":true},"port":{"type":"TypeInt","description":"The port number on which to connect. Possible values are between `1` and `65535`.","computed":true},"success_count_threshold":{"type":"TypeInt","description":"The number of consecutive successful responses required to consider this probe as successful. Possible values are between `1` and `10`. Defaults to `3`.","computed":true},"timeout":{"type":"TypeInt","description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`.","computed":true},"transport":{"type":"TypeString","description":"Type of probe. Possible values are `TCP`, `HTTP`, and `HTTPS`.","computed":true}}}},"startup_probe":{"type":"TypeList","computed":true,"elem":{"schema":{"failure_count_threshold":{"type":"TypeInt","description":"The number of consecutive failures required to consider this probe as failed. Possible values are between `1` and `10`. Defaults to `3`.","computed":true},"header":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The HTTP Header Name.","computed":true},"value":{"type":"TypeString","description":"The HTTP Header value.","computed":true}}}},"host":{"type":"TypeString","computed":true},"interval_seconds":{"type":"TypeInt","description":"How often, in seconds, the probe should run. Possible values are between `1` and `240`. Defaults to `10`","computed":true},"path":{"type":"TypeString","computed":true},"port":{"type":"TypeInt","computed":true},"termination_grace_period_seconds":{"type":"TypeInt","description":"The time in seconds after the container is sent the termination signal before the process if forcibly killed.","computed":true},"timeout":{"type":"TypeInt","description":"Time in seconds after which the probe times out. Possible values are between `1` an `240`. Defaults to `1`.","computed":true},"transport":{"type":"TypeString","computed":true}}}},"volume_mounts":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of the Volume to be mounted in the container.","computed":true},"path":{"type":"TypeString","description":"The path in the container at which to mount this volume.","computed":true}}}}}}},"max_replicas":{"type":"TypeInt","description":"The maximum number of replicas for this container.","computed":true},"min_replicas":{"type":"TypeInt","description":"The minimum number of replicas for this container.","computed":true},"revision_suffix":{"type":"TypeString","description":"The suffix for the revision. This value must be unique for the lifetime of the Resource. If omitted the service will use a hash function to create one.","computed":true},"volume":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","required":true,"description":"The name of the volume."},"storage_name":{"type":"TypeString","optional":true,"description":"The name of the `AzureFile` storage. Required when `storage_type` is `AzureFile`"},"storage_type":{"type":"TypeString","optional":true,"default":"EmptyDir","description":"The type of storage volume. Possible values include `AzureFile` and `EmptyDir`. Defaults to `EmptyDir`."}}},"minItems":1}}}}},"timeouts":{"read":5}},"azurerm_container_app_environment":{"schema":{"default_domain":{"type":"TypeString","description":"The default publicly resolvable name of this Container App Environment","computed":true},"docker_bridge_cidr":{"type":"TypeString","description":"The network addressing in which the Container Apps in this Container App Environment will reside in CIDR notation.","computed":true},"infrastructure_subnet_id":{"type":"TypeString","description":"The existing Subnet in use by the Container Apps Control Plane.","computed":true},"internal_load_balancer_enabled":{"type":"TypeBool","description":"Does the Container Environment operate in Internal Load Balancing Mode?","computed":true},"location":{"type":"TypeString","computed":true},"log_analytics_workspace_name":{"type":"TypeString","description":"The name of the Log Analytics Workspace this Container Apps Managed Environment is linked to.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Container Apps Managed Environment."},"platform_reserved_cidr":{"type":"TypeString","description":"The IP range, in CIDR notation, that is reserved for environment infrastructure IP addresses.","computed":true},"platform_reserved_dns_ip_address":{"type":"TypeString","description":"The IP address from the IP range defined by `platform_reserved_cidr` that is reserved for the internal DNS server.","computed":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"static_ip_address":{"type":"TypeString","description":"The Static IP Address of the Environment.","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_container_app_environment_certificate":{"schema":{"container_app_environment_id":{"type":"TypeString","required":true,"description":"The Container App Managed Environment ID to configure this Certificate on.","forceNew":true},"expiration_date":{"type":"TypeString","description":"The expiration date for the Certificate.","computed":true},"issue_date":{"type":"TypeString","description":"The date of issue for the Certificate.","computed":true},"issuer":{"type":"TypeString","description":"The Certificate Issuer.","computed":true},"name":{"type":"TypeString","required":true,"description":"The name of the Container Apps Certificate.","forceNew":true},"subject_name":{"type":"TypeString","description":"The Subject Name for the Certificate.","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","description":"The Thumbprint of the Certificate.","computed":true}},"timeouts":{"read":5}},"azurerm_container_group":{"schema":{"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"ip_address":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"subnet_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeSet","optional":true,"forceNew":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_container_registry":{"schema":{"admin_enabled":{"type":"TypeBool","computed":true},"admin_password":{"type":"TypeString","computed":true},"admin_username":{"type":"TypeString","computed":true},"data_endpoint_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"login_server":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_container_registry_scope_map":{"schema":{"actions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"container_registry_name":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_container_registry_token":{"schema":{"container_registry_name":{"type":"TypeString","required":true},"enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"scope_map_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_cosmosdb_account":{"schema":{"capabilities":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"consistency_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"consistency_level":{"type":"TypeString","computed":true},"max_interval_in_seconds":{"type":"TypeInt","computed":true},"max_staleness_prefix":{"type":"TypeInt","computed":true}}}},"enable_automatic_failover":{"type":"TypeBool","computed":true},"enable_free_tier":{"type":"TypeBool","computed":true},"enable_multiple_write_locations":{"type":"TypeBool","computed":true},"endpoint":{"type":"TypeString","computed":true},"geo_location":{"type":"TypeList","computed":true,"elem":{"schema":{"failover_priority":{"type":"TypeInt","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true}}}},"ip_range_filter":{"type":"TypeString","computed":true},"is_virtual_network_filter_enabled":{"type":"TypeBool","computed":true},"key_vault_key_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"offer_type":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"primary_readonly_key":{"type":"TypeString","computed":true},"read_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"secondary_key":{"type":"TypeString","computed":true},"secondary_readonly_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true}}}},"write_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_cosmosdb_mongo_database":{"schema":{"account_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_cosmosdb_restorable_database_accounts":{"schema":{"accounts":{"type":"TypeList","computed":true,"elem":{"schema":{"api_type":{"type":"TypeString","computed":true},"creation_time":{"type":"TypeString","computed":true},"deletion_time":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"restorable_locations":{"type":"TypeList","computed":true,"elem":{"schema":{"creation_time":{"type":"TypeString","computed":true},"deletion_time":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"regional_database_account_instance_id":{"type":"TypeString","computed":true}}}}}}},"location":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_cosmosdb_sql_database":{"schema":{"account_name":{"type":"TypeString","required":true},"autoscale_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"max_throughput":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"throughput":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_cosmosdb_sql_role_definition":{"schema":{"account_name":{"type":"TypeString","required":true},"assignable_scopes":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"permissions":{"type":"TypeSet","computed":true,"elem":{"schema":{"data_actions":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"role_definition_id":{"type":"TypeString","required":true},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_data_factory":{"schema":{"github_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"account_name":{"type":"TypeString","computed":true},"branch_name":{"type":"TypeString","computed":true},"git_url":{"type":"TypeString","computed":true},"repository_name":{"type":"TypeString","computed":true},"root_folder":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vsts_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"account_name":{"type":"TypeString","computed":true},"branch_name":{"type":"TypeString","computed":true},"project_name":{"type":"TypeString","computed":true},"repository_name":{"type":"TypeString","computed":true},"root_folder":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_data_protection_backup_vault":{"schema":{"datastore_type":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"redundancy":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_data_share":{"schema":{"account_id":{"type":"TypeString","required":true},"description":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"snapshot_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"recurrence":{"type":"TypeString","computed":true},"start_time":{"type":"TypeString","computed":true}}}},"terms":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_data_share_account":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_data_share_dataset_blob_storage":{"schema":{"container_name":{"type":"TypeString","computed":true},"data_share_id":{"type":"TypeString","required":true},"display_name":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","computed":true},"folder_path":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"storage_account":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","computed":true},"subscription_id":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_data_share_dataset_data_lake_gen2":{"schema":{"display_name":{"type":"TypeString","computed":true},"file_path":{"type":"TypeString","computed":true},"file_system_name":{"type":"TypeString","computed":true},"folder_path":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"share_id":{"type":"TypeString","required":true},"storage_account_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_data_share_dataset_kusto_cluster":{"schema":{"display_name":{"type":"TypeString","computed":true},"kusto_cluster_id":{"type":"TypeString","computed":true},"kusto_cluster_location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"share_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_data_share_dataset_kusto_database":{"schema":{"display_name":{"type":"TypeString","computed":true},"kusto_cluster_location":{"type":"TypeString","computed":true},"kusto_database_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"share_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_database_migration_project":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"service_name":{"type":"TypeString","required":true},"source_platform":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_platform":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_database_migration_service":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_databox_edge_device":{"schema":{"device_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"configured_role_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"culture":{"type":"TypeString","computed":true},"hcs_version":{"type":"TypeString","computed":true},"model":{"type":"TypeString","computed":true},"node_count":{"type":"TypeInt","computed":true},"serial_number":{"type":"TypeString","computed":true},"software_version":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"time_zone":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_databricks_workspace":{"schema":{"location":{"type":"TypeString","computed":true},"managed_disk_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"storage_account_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true},"workspace_url":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_databricks_workspace_private_endpoint_connection":{"schema":{"connections":{"type":"TypeList","computed":true,"elem":{"schema":{"action_required":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true},"workspace_private_endpoint_id":{"type":"TypeString","computed":true}}}},"private_endpoint_id":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dedicated_host":{"schema":{"dedicated_host_group_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_dedicated_host_group":{"schema":{"automatic_placement_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"platform_fault_domain_count":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_dev_test_lab":{"schema":{"artifacts_storage_account_id":{"type":"TypeString","computed":true},"default_premium_storage_account_id":{"type":"TypeString","computed":true},"default_storage_account_id":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"premium_data_disk_storage_account_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"storage_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"unique_identifier":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_dev_test_virtual_network":{"schema":{"allowed_subnets":{"type":"TypeList","computed":true,"elem":{"schema":{"allow_public_ip":{"type":"TypeString","computed":true},"lab_subnet_name":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true}}}},"lab_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"subnet_overrides":{"type":"TypeList","computed":true,"elem":{"schema":{"lab_subnet_name":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"use_in_vm_creation_permission":{"type":"TypeString","computed":true},"use_public_ip_address_permission":{"type":"TypeString","computed":true},"virtual_network_pool_name":{"type":"TypeString","computed":true}}}},"unique_identifier":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_digital_twins_instance":{"schema":{"host_name":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_disk_access":{"schema":{"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_disk_encryption_set":{"schema":{"auto_key_rotation_enabled":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"key_vault_key_url":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_dns_a_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_aaaa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_caa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"flags":{"type":"TypeInt","computed":true},"tag":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_cname_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_mx_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"exchange":{"type":"TypeString","computed":true},"preference":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_ns_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_ptr_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_soa_record":{"schema":{"email":{"type":"TypeString","computed":true},"expire_time":{"type":"TypeInt","computed":true},"fqdn":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"minimum_ttl":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","optional":true,"default":"@"},"refresh_time":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"retry_time":{"type":"TypeInt","computed":true},"serial_number":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_srv_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"port":{"type":"TypeInt","computed":true},"priority":{"type":"TypeInt","computed":true},"target":{"type":"TypeString","computed":true},"weight":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_txt_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"value":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_dns_zone":{"schema":{"max_number_of_record_sets":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"name_servers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"number_of_record_sets":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_elastic_cloud_elasticsearch":{"schema":{"elastic_cloud_deployment_id":{"type":"TypeString","computed":true},"elastic_cloud_email_address":{"type":"TypeString","computed":true},"elastic_cloud_sso_default_url":{"type":"TypeString","computed":true},"elastic_cloud_user_id":{"type":"TypeString","computed":true},"elasticsearch_service_url":{"type":"TypeString","computed":true},"kibana_service_url":{"type":"TypeString","computed":true},"kibana_sso_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"filtering_tag":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"send_activity_logs":{"type":"TypeBool","computed":true},"send_azuread_logs":{"type":"TypeBool","computed":true},"send_subscription_logs":{"type":"TypeBool","computed":true}}}},"monitoring_enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_eventgrid_domain":{"schema":{"endpoint":{"type":"TypeString","computed":true},"inbound_ip_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"ip_mask":{"type":"TypeString","computed":true}}}},"input_mapping_default_values":{"type":"TypeList","computed":true,"elem":{"schema":{"data_version":{"type":"TypeString","computed":true},"event_type":{"type":"TypeString","computed":true},"subject":{"type":"TypeString","computed":true}}}},"input_mapping_fields":{"type":"TypeList","computed":true,"elem":{"schema":{"data_version":{"type":"TypeString","computed":true},"event_time":{"type":"TypeString","computed":true},"event_type":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"subject":{"type":"TypeString","computed":true},"topic":{"type":"TypeString","computed":true}}}},"input_schema":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_eventgrid_domain_topic":{"schema":{"domain_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_eventgrid_system_topic":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"metric_arm_resource_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"source_arm_resource_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"topic_type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_eventgrid_topic":{"schema":{"endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_eventhub":{"schema":{"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"partition_count":{"type":"TypeInt","computed":true},"partition_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_eventhub_authorization_rule":{"schema":{"eventhub_name":{"type":"TypeString","required":true},"listen":{"type":"TypeBool","optional":true,"default":false},"manage":{"type":"TypeBool","optional":true,"default":false},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","optional":true,"default":false}},"timeouts":{"read":5}},"azurerm_eventhub_cluster":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_eventhub_consumer_group":{"schema":{"eventhub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"user_metadata":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_eventhub_namespace":{"schema":{"auto_inflate_enabled":{"type":"TypeBool","computed":true},"capacity":{"type":"TypeInt","computed":true},"dedicated_cluster_id":{"type":"TypeString","computed":true},"default_primary_connection_string":{"type":"TypeString","computed":true},"default_primary_connection_string_alias":{"type":"TypeString","computed":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_connection_string":{"type":"TypeString","computed":true},"default_secondary_connection_string_alias":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"kafka_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"maximum_throughput_units":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_eventhub_namespace_authorization_rule":{"schema":{"listen":{"type":"TypeBool","computed":true},"manage":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_eventhub_sas":{"schema":{"connection_string":{"type":"TypeString","required":true},"expiry":{"type":"TypeString","required":true},"sas":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_express_route_circuit":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"peerings":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_asn":{"type":"TypeInt","computed":true},"peer_asn":{"type":"TypeInt","computed":true},"peering_type":{"type":"TypeString","computed":true},"primary_peer_address_prefix":{"type":"TypeString","computed":true},"secondary_peer_address_prefix":{"type":"TypeString","computed":true},"shared_key":{"type":"TypeString","computed":true},"vlan_id":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"service_key":{"type":"TypeString","computed":true},"service_provider_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"bandwidth_in_mbps":{"type":"TypeInt","computed":true},"peering_location":{"type":"TypeString","computed":true},"service_provider_name":{"type":"TypeString","computed":true}}}},"service_provider_provisioning_state":{"type":"TypeString","computed":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"family":{"type":"TypeString","computed":true},"tier":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_extended_locations":{"schema":{"extended_locations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_firewall":{"schema":{"dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"firewall_policy_id":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"management_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"sku_tier":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"threat_intel_mode":{"type":"TypeString","computed":true},"virtual_hub":{"type":"TypeList","computed":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_count":{"type":"TypeInt","computed":true},"virtual_hub_id":{"type":"TypeString","computed":true}}}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_firewall_policy":{"schema":{"base_policy_id":{"type":"TypeString","computed":true},"child_policies":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns":{"type":"TypeList","computed":true,"elem":{"schema":{"network_rule_fqdn_enabled":{"type":"TypeBool","computed":true},"proxy_enabled":{"type":"TypeBool","computed":true},"servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"firewalls":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"rule_collection_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"threat_intelligence_allowlist":{"type":"TypeList","computed":true,"elem":{"schema":{"fqdns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"threat_intelligence_mode":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_function_app":{"schema":{"app_service_plan_id":{"type":"TypeString","computed":true},"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"client_cert_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","computed":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"app_scale_limit":{"type":"TypeInt","computed":true},"auto_swap_slot_name":{"type":"TypeString","computed":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","computed":true},"elastic_instance_minimum":{"type":"TypeInt","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"service_tag":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}}}},"java_version":{"type":"TypeString","computed":true},"linux_fx_version":{"type":"TypeString","computed":true},"min_tls_version":{"type":"TypeString","computed":true},"pre_warmed_instance_count":{"type":"TypeInt","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","computed":true},"scm_ip_restriction":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeString","computed":true},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}},"maxItems":1},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"service_tag":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}}}},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker_process":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"source_control":{"type":"TypeList","computed":true,"elem":{"schema":{"branch":{"type":"TypeString","computed":true},"manual_integration":{"type":"TypeBool","computed":true},"repo_url":{"type":"TypeString","computed":true},"rollback_enabled":{"type":"TypeBool","computed":true},"use_mercurial":{"type":"TypeBool","computed":true}}}},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_function_app_host_keys":{"schema":{"blobs_extension_key":{"type":"TypeString","computed":true},"default_function_key":{"type":"TypeString","computed":true},"durabletask_extension_key":{"type":"TypeString","computed":true},"event_grid_extension_config_key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"signalr_extension_key":{"type":"TypeString","computed":true},"webpubsub_extension_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_hdinsight_cluster":{"schema":{"cluster_version":{"type":"TypeString","computed":true},"component_versions":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"edge_ssh_endpoint":{"type":"TypeString","computed":true},"gateway":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"https_endpoint":{"type":"TypeString","computed":true},"kafka_rest_proxy_endpoint":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"ssh_endpoint":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tier":{"type":"TypeString","computed":true},"tls_min_version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_healthcare_dicom_service":{"schema":{"authentication":{"type":"TypeList","computed":true,"elem":{"schema":{"audience":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"authority":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_endpoint":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"service_url":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_healthcare_fhir_service":{"schema":{"access_policy_object_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"authentication":{"type":"TypeList","computed":true,"elem":{"schema":{"audience":{"type":"TypeString","computed":true},"authority":{"type":"TypeString","computed":true},"smart_proxy_enabled":{"type":"TypeBool","computed":true}}}},"configuration_export_storage_account_name":{"type":"TypeString","computed":true},"container_registry_login_server_url":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_headers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_methods":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_origins":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"credentials_allowed":{"type":"TypeBool","computed":true},"max_age_in_seconds":{"type":"TypeInt","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_healthcare_medtech_service":{"schema":{"device_mapping_json":{"type":"TypeString","computed":true},"eventhub_consumer_group_name":{"type":"TypeString","computed":true},"eventhub_name":{"type":"TypeString","computed":true},"eventhub_namespace_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"workspace_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_healthcare_service":{"schema":{"access_policy_object_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"authentication_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"audience":{"type":"TypeString","computed":true},"authority":{"type":"TypeString","computed":true},"smart_proxy_enabled":{"type":"TypeBool","computed":true}}}},"cors_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"allow_credentials":{"type":"TypeBool","computed":true},"allowed_headers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"allowed_methods":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_origins":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"max_age_in_seconds":{"type":"TypeInt","computed":true}}}},"cosmosdb_key_vault_key_versionless_id":{"type":"TypeString","computed":true},"cosmosdb_throughput":{"type":"TypeInt","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_healthcare_workspace":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_hybrid_compute_machine":{"schema":{"ad_fqdn":{"type":"TypeString","computed":true},"agent_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"extensions_allow_list":{"type":"TypeList","computed":true,"elem":{"schema":{"publisher":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"extensions_block_list":{"type":"TypeList","computed":true,"elem":{"schema":{"publisher":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"extensions_enabled":{"type":"TypeBool","computed":true},"guest_configuration_enabled":{"type":"TypeBool","computed":true},"incoming_connections_ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proxy_bypass":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proxy_url":{"type":"TypeString","computed":true}}}},"agent_version":{"type":"TypeString","computed":true},"client_public_key":{"type":"TypeString","computed":true},"cloud_metadata":{"type":"TypeList","computed":true,"elem":{"schema":{"provider":{"type":"TypeString","computed":true}}}},"detected_properties":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","computed":true},"dns_fqdn":{"type":"TypeString","computed":true},"domain_name":{"type":"TypeString","computed":true},"error_details":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_info":{"type":"TypeList","computed":true,"elem":{"schema":{"info":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"code":{"type":"TypeString","computed":true},"message":{"type":"TypeString","computed":true},"target":{"type":"TypeString","computed":true}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"last_status_change":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"location_data":{"type":"TypeList","computed":true,"elem":{"schema":{"city":{"type":"TypeString","computed":true},"country_or_region":{"type":"TypeString","computed":true},"district":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"machine_fqdn":{"type":"TypeString","computed":true},"mssql_discovered":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"os_name":{"type":"TypeString","computed":true},"os_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"computer_name":{"type":"TypeString","computed":true},"linux_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"patch_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"assessment_mode":{"type":"TypeString","computed":true},"patch_mode":{"type":"TypeString","computed":true}}}}}}},"windows_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"patch_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"assessment_mode":{"type":"TypeString","computed":true},"patch_mode":{"type":"TypeString","computed":true}}}}}}}}}},"os_sku":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"os_version":{"type":"TypeString","computed":true},"parent_cluster_resource_id":{"type":"TypeString","computed":true},"private_link_scope_resource_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_status":{"type":"TypeList","computed":true,"elem":{"schema":{"extension_service":{"type":"TypeList","computed":true,"elem":{"schema":{"startup_type":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}},"guest_configuration_service":{"type":"TypeList","computed":true,"elem":{"schema":{"startup_type":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}}}}},"status":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vm_id":{"type":"TypeString","computed":true},"vm_uuid":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_image":{"schema":{"data_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","computed":true},"caching":{"type":"TypeString","computed":true},"lun":{"type":"TypeInt","computed":true},"managed_disk_id":{"type":"TypeString","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true},"name_regex":{"type":"TypeString","optional":true},"os_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","computed":true},"caching":{"type":"TypeString","computed":true},"managed_disk_id":{"type":"TypeString","computed":true},"os_state":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"sort_descending":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_resilient":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_images":{"schema":{"images":{"type":"TypeList","computed":true,"elem":{"schema":{"data_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","computed":true},"caching":{"type":"TypeString","computed":true},"lun":{"type":"TypeInt","computed":true},"managed_disk_id":{"type":"TypeString","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"os_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_uri":{"type":"TypeString","computed":true},"caching":{"type":"TypeString","computed":true},"disk_encryption_set_id":{"type":"TypeString","computed":true},"managed_disk_id":{"type":"TypeString","computed":true},"os_state":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_resilient":{"type":"TypeBool","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags_filter":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_iothub":{"schema":{"hostname":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_iothub_dps":{"schema":{"allocation_policy":{"type":"TypeString","computed":true},"device_provisioning_host_name":{"type":"TypeString","computed":true},"id_scope":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"service_operations_host_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_iothub_dps_shared_access_policy":{"schema":{"iothub_dps_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_iothub_shared_access_policy":{"schema":{"iothub_name":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_ip_group":{"schema":{"cidrs":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_key_vault":{"schema":{"access_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"application_id":{"type":"TypeString","computed":true},"certificate_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"key_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"object_id":{"type":"TypeString","computed":true},"secret_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"storage_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}}}},"enable_rbac_authorization":{"type":"TypeBool","computed":true},"enabled_for_deployment":{"type":"TypeBool","computed":true},"enabled_for_disk_encryption":{"type":"TypeBool","computed":true},"enabled_for_template_deployment":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_acls":{"type":"TypeList","computed":true,"elem":{"schema":{"bypass":{"type":"TypeString","computed":true},"default_action":{"type":"TypeString","computed":true},"ip_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"public_network_access_enabled":{"type":"TypeBool","computed":true},"purge_protection_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true},"vault_uri":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_key_vault_access_policy":{"schema":{"certificate_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"key_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"secret_permissions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_key_vault_certificate":{"schema":{"certificate_data":{"type":"TypeString","computed":true},"certificate_data_base64":{"type":"TypeString","computed":true},"certificate_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"issuer_parameters":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"key_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"curve":{"type":"TypeString","computed":true},"exportable":{"type":"TypeBool","computed":true},"key_size":{"type":"TypeInt","computed":true},"key_type":{"type":"TypeString","computed":true},"reuse_key":{"type":"TypeBool","computed":true}}}},"lifetime_action":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeList","computed":true,"elem":{"schema":{"action_type":{"type":"TypeString","computed":true}}}},"trigger":{"type":"TypeList","computed":true,"elem":{"schema":{"days_before_expiry":{"type":"TypeInt","computed":true},"lifetime_percentage":{"type":"TypeInt","computed":true}}}}}}},"secret_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"content_type":{"type":"TypeString","computed":true}}}},"x509_certificate_properties":{"type":"TypeList","computed":true,"elem":{"schema":{"extended_key_usage":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"key_usage":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"subject":{"type":"TypeString","computed":true},"subject_alternative_names":{"type":"TypeList","computed":true,"elem":{"schema":{"dns_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"emails":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"upns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"validity_in_months":{"type":"TypeInt","computed":true}}}}}}},"expires":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"not_before":{"type":"TypeString","computed":true},"resource_manager_id":{"type":"TypeString","computed":true},"resource_manager_versionless_id":{"type":"TypeString","computed":true},"secret_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"thumbprint":{"type":"TypeString","computed":true},"version":{"type":"TypeString","optional":true,"computed":true},"versionless_id":{"type":"TypeString","computed":true},"versionless_secret_id":{"type":"TypeString","computed":true}},"timeouts":{"read":30}},"azurerm_key_vault_certificate_data":{"schema":{"certificates_count":{"type":"TypeInt","computed":true},"expires":{"type":"TypeString","computed":true},"hex":{"type":"TypeString","computed":true},"key":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"not_before":{"type":"TypeString","computed":true},"pem":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"read":5}},"azurerm_key_vault_certificate_issuer":{"schema":{"account_id":{"type":"TypeString","computed":true},"admin":{"type":"TypeList","computed":true,"elem":{"schema":{"email_address":{"type":"TypeString","computed":true},"first_name":{"type":"TypeString","computed":true},"last_name":{"type":"TypeString","computed":true},"phone":{"type":"TypeString","computed":true}}}},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"org_id":{"type":"TypeString","computed":true},"provider_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_key_vault_certificates":{"schema":{"certificates":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"include_pending":{"type":"TypeBool","optional":true,"default":true},"key_vault_id":{"type":"TypeString","required":true},"names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_key_vault_encrypted_value":{"schema":{"algorithm":{"type":"TypeString","required":true},"decoded_plain_text_value":{"type":"TypeString","computed":true},"encrypted_data":{"type":"TypeString","optional":true},"key_vault_key_id":{"type":"TypeString","required":true},"plain_text_value":{"type":"TypeString","optional":true}},"timeouts":{"read":5}},"azurerm_key_vault_key":{"schema":{"curve":{"type":"TypeString","computed":true},"e":{"type":"TypeString","computed":true},"key_opts":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"key_size":{"type":"TypeInt","computed":true},"key_type":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","required":true},"n":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_key_openssh":{"type":"TypeString","computed":true},"public_key_pem":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"resource_versionless_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true},"versionless_id":{"type":"TypeString","computed":true},"x":{"type":"TypeString","computed":true},"y":{"type":"TypeString","computed":true}},"timeouts":{"read":30}},"azurerm_key_vault_managed_hardware_security_module":{"schema":{"admin_object_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"hsm_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"purge_protection_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"soft_delete_retention_days":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_key_vault_secret":{"schema":{"content_type":{"type":"TypeString","computed":true},"expiration_date":{"type":"TypeString","computed":true},"key_vault_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"not_before_date":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"resource_versionless_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","computed":true},"version":{"type":"TypeString","optional":true},"versionless_id":{"type":"TypeString","computed":true}},"timeouts":{"read":30}},"azurerm_key_vault_secrets":{"schema":{"key_vault_id":{"type":"TypeString","required":true},"names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"secrets":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_kubernetes_cluster":{"schema":{"aci_connector_linux":{"type":"TypeList","computed":true,"elem":{"schema":{"subnet_name":{"type":"TypeString","computed":true}}}},"agent_pool_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"enable_auto_scaling":{"type":"TypeBool","computed":true},"enable_node_public_ip":{"type":"TypeBool","computed":true},"max_count":{"type":"TypeInt","computed":true},"max_pods":{"type":"TypeInt","computed":true},"min_count":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","computed":true},"node_labels":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"node_public_ip_prefix_id":{"type":"TypeString","computed":true},"node_taints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"orchestrator_version":{"type":"TypeString","computed":true},"os_disk_size_gb":{"type":"TypeInt","computed":true},"os_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"upgrade_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"max_surge":{"type":"TypeString","computed":true}}}},"vm_size":{"type":"TypeString","computed":true},"vnet_subnet_id":{"type":"TypeString","computed":true},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"api_server_authorized_ip_ranges":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"azure_active_directory_role_based_access_control":{"type":"TypeList","computed":true,"elem":{"schema":{"admin_group_object_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"azure_rbac_enabled":{"type":"TypeBool","computed":true},"client_app_id":{"type":"TypeString","computed":true},"managed":{"type":"TypeBool","computed":true},"server_app_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}},"azure_policy_enabled":{"type":"TypeBool","computed":true},"current_kubernetes_version":{"type":"TypeString","computed":true},"custom_ca_trust_certificates_base64":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"disk_encryption_set_id":{"type":"TypeString","computed":true},"dns_prefix":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"http_application_routing_enabled":{"type":"TypeBool","computed":true},"http_application_routing_zone_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"ingress_application_gateway":{"type":"TypeList","computed":true,"elem":{"schema":{"effective_gateway_id":{"type":"TypeString","computed":true},"gateway_id":{"type":"TypeString","computed":true},"gateway_name":{"type":"TypeString","computed":true},"ingress_application_gateway_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"subnet_cidr":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"key_management_service":{"type":"TypeList","computed":true,"elem":{"schema":{"key_vault_key_id":{"type":"TypeString","computed":true},"key_vault_network_access":{"type":"TypeString","computed":true}}}},"key_vault_secrets_provider":{"type":"TypeList","computed":true,"elem":{"schema":{"secret_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"secret_rotation_enabled":{"type":"TypeBool","computed":true},"secret_rotation_interval":{"type":"TypeString","computed":true}}}},"kube_admin_config":{"type":"TypeList","computed":true,"elem":{"schema":{"client_certificate":{"type":"TypeString","computed":true},"client_key":{"type":"TypeString","computed":true},"cluster_ca_certificate":{"type":"TypeString","computed":true},"host":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"kube_admin_config_raw":{"type":"TypeString","computed":true},"kube_config":{"type":"TypeList","computed":true,"elem":{"schema":{"client_certificate":{"type":"TypeString","computed":true},"client_key":{"type":"TypeString","computed":true},"cluster_ca_certificate":{"type":"TypeString","computed":true},"host":{"type":"TypeString","computed":true},"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"kube_config_raw":{"type":"TypeString","computed":true},"kubelet_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}},"kubernetes_version":{"type":"TypeString","computed":true},"linux_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"admin_username":{"type":"TypeString","computed":true},"ssh_key":{"type":"TypeList","computed":true,"elem":{"schema":{"key_data":{"type":"TypeString","computed":true}}}}}}},"location":{"type":"TypeString","computed":true},"microsoft_defender":{"type":"TypeList","computed":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"network_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"dns_service_ip":{"type":"TypeString","computed":true},"docker_bridge_cidr":{"type":"TypeString","computed":true},"load_balancer_sku":{"type":"TypeString","computed":true},"network_plugin":{"type":"TypeString","computed":true},"network_policy":{"type":"TypeString","computed":true},"pod_cidr":{"type":"TypeString","computed":true},"service_cidr":{"type":"TypeString","computed":true}}}},"node_resource_group":{"type":"TypeString","computed":true},"node_resource_group_id":{"type":"TypeString","computed":true},"oidc_issuer_enabled":{"type":"TypeBool","computed":true},"oidc_issuer_url":{"type":"TypeString","computed":true},"oms_agent":{"type":"TypeList","computed":true,"elem":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","computed":true},"msi_auth_for_monitoring_enabled":{"type":"TypeBool","computed":true},"oms_agent_identity":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"user_assigned_identity_id":{"type":"TypeString","computed":true}}}}}}},"open_service_mesh_enabled":{"type":"TypeBool","computed":true},"private_cluster_enabled":{"type":"TypeBool","computed":true},"private_fqdn":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"role_based_access_control_enabled":{"type":"TypeBool","computed":true},"service_mesh_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"external_ingress_gateway_enabled":{"type":"TypeBool","computed":true},"internal_ingress_gateway_enabled":{"type":"TypeBool","computed":true},"mode":{"type":"TypeString","computed":true}}}},"service_principal":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","computed":true}}}},"storage_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_driver_enabled":{"type":"TypeBool","computed":true},"disk_driver_enabled":{"type":"TypeBool","computed":true},"disk_driver_version":{"type":"TypeString","computed":true},"file_driver_enabled":{"type":"TypeBool","computed":true},"snapshot_controller_enabled":{"type":"TypeBool","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"windows_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"admin_username":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_kubernetes_cluster_node_pool":{"schema":{"enable_auto_scaling":{"type":"TypeBool","computed":true},"enable_node_public_ip":{"type":"TypeBool","computed":true},"eviction_policy":{"type":"TypeString","computed":true},"kubernetes_cluster_name":{"type":"TypeString","required":true},"max_count":{"type":"TypeInt","computed":true},"max_pods":{"type":"TypeInt","computed":true},"min_count":{"type":"TypeInt","computed":true},"mode":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"node_count":{"type":"TypeInt","computed":true},"node_labels":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"node_public_ip_prefix_id":{"type":"TypeString","computed":true},"node_taints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"orchestrator_version":{"type":"TypeString","computed":true},"os_disk_size_gb":{"type":"TypeInt","computed":true},"os_disk_type":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"priority":{"type":"TypeString","computed":true},"proximity_placement_group_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"spot_max_price":{"type":"TypeFloat","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"upgrade_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"max_surge":{"type":"TypeString","computed":true}}}},"vm_size":{"type":"TypeString","computed":true},"vnet_subnet_id":{"type":"TypeString","computed":true},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_kubernetes_node_pool_snapshot":{"schema":{"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"source_node_pool_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_kubernetes_service_versions":{"schema":{"include_preview":{"type":"TypeBool","optional":true,"default":true},"latest_version":{"type":"TypeString","computed":true},"location":{"type":"TypeString","required":true,"forceNew":true},"version_prefix":{"type":"TypeString","optional":true},"versions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_kusto_cluster":{"schema":{"data_ingestion_uri":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"uri":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_kusto_database":{"schema":{"cluster_name":{"type":"TypeString","required":true},"hot_cache_period":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"size":{"type":"TypeFloat","computed":true},"soft_delete_period":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_lb":{"schema":{"frontend_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_address_allocation":{"type":"TypeString","computed":true},"private_ip_address_version":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_lb_backend_address_pool":{"schema":{"backend_address":{"type":"TypeList","computed":true,"elem":{"schema":{"inbound_nat_rule_port_mapping":{"type":"TypeList","computed":true,"elem":{"schema":{"backend_port":{"type":"TypeInt","computed":true},"frontend_port":{"type":"TypeInt","computed":true},"inbound_nat_rule_name":{"type":"TypeString","computed":true}}}},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"virtual_network_id":{"type":"TypeString","computed":true}}}},"backend_ip_configurations":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true}}}},"inbound_nat_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancing_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"loadbalancer_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"outbound_rules":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_lb_outbound_rule":{"schema":{"allocated_outbound_ports":{"type":"TypeInt","computed":true},"backend_address_pool_id":{"type":"TypeString","computed":true},"frontend_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"loadbalancer_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"protocol":{"type":"TypeString","computed":true},"tcp_reset_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_lb_rule":{"schema":{"backend_address_pool_id":{"type":"TypeString","computed":true},"backend_port":{"type":"TypeInt","computed":true},"disable_outbound_snat":{"type":"TypeBool","computed":true},"enable_floating_ip":{"type":"TypeBool","computed":true},"enable_tcp_reset":{"type":"TypeBool","computed":true},"frontend_ip_configuration_name":{"type":"TypeString","computed":true},"frontend_port":{"type":"TypeInt","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"load_distribution":{"type":"TypeString","computed":true},"loadbalancer_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"probe_id":{"type":"TypeString","computed":true},"protocol":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_linux_function_app":{"schema":{"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"The list of Allowed audience values considered when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret for the Client ID.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true}}}},"additional_login_parameters":{"type":"TypeMap","description":"The map of Login Parameters sent to the OpenID Connect authorization endpoint when a user logs in.","computed":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","description":"The default authentication provider used when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","description":"Is the Authentication / Authorization feature enabled?","computed":true},"facebook":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret":{"type":"TypeString","description":"The App Secret of the Facebook app used for Facebook Login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"github":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret of the GitHub app used for GitHub Login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret":{"type":"TypeString","description":"The client secret associated with the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes that requested as part of Google Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"issuer":{"type":"TypeString","description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens.","computed":true},"microsoft":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret":{"type":"TypeString","description":"The OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"runtime_version":{"type":"TypeString","description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Are platform-specific security tokens that are obtained during login flows durably stored?","computed":true},"twitter":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret":{"type":"TypeString","description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_client_action":{"type":"TypeString","description":"The action taken when an unauthenticated client attempts to access the app.","computed":true}}}},"auth_settings_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret_certificate_thumbprint":{"type":"TypeString","description":"The thumbprint of the certificate used for signing purposes.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true},"jwt_allowed_client_applications":{"type":"TypeList","description":"A list of Allowed Client Applications in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","description":"A list of Allowed Groups in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","description":"The Azure Tenant URI for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`","computed":true},"www_authentication_disabled":{"type":"TypeBool","description":"Is the www-authenticate provider omitted from the request?","computed":true}}}},"apple_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Apple web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Apple Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Apple Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"auth_enabled":{"type":"TypeBool","description":"Is the AuthV2 Settings be enabled.","computed":true},"azure_static_web_app_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with Azure Static Web App Authentication.","computed":true}}}},"config_file_path":{"type":"TypeString","description":"The path to the App Auth settings.","computed":true},"custom_oidc_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`","computed":true},"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with this Custom OIDC.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","description":"The name of the Custom OIDC Authentication Provider.","computed":true},"name_claim_type":{"type":"TypeString","description":"The name of the claim that contains the users name.","computed":true},"openid_configuration_endpoint":{"type":"TypeString","description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider.","computed":true},"scopes":{"type":"TypeList","description":"The list of the scopes that should be requested while authenticating.","computed":true,"elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","description":"The Default Authentication Provider used when the `unauthenticated_action` is set to `RedirectToLoginPage`.","computed":true},"excluded_paths":{"type":"TypeList","description":"The paths which are excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","computed":true,"elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"graph_api_version":{"type":"TypeString","description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"forward_proxy_convention":{"type":"TypeString","description":"The convention used to determine the url of the request made.","computed":true},"forward_proxy_custom_host_header_name":{"type":"TypeString","description":"The name of the header containing the host of the request.","computed":true},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","description":"The name of the header containing the scheme of the request.","computed":true},"github_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"http_route_api_prefix":{"type":"TypeString","description":"The prefix that precedes all the authentication and authorisation paths.","computed":true},"login":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","computed":true,"elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","computed":true},"cookie_expiration_time":{"type":"TypeString","description":"The time after the request is made when the session cookie will expire.","computed":true},"logout_endpoint":{"type":"TypeString","description":"The endpoint to which logout requests are made.","computed":true},"nonce_expiration_time":{"type":"TypeString","description":"The time after the request is made when the nonce will expire.","computed":true},"preserve_url_fragments_for_logins":{"type":"TypeBool","description":"Are the fragments from the request be preserved after the login request is made.","computed":true},"token_refresh_extension_time":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Is the Token Store configuration Enabled.","computed":true},"token_store_path":{"type":"TypeString","description":"The directory path in the App Filesystem in which the tokens are stored.","computed":true},"token_store_sas_setting_name":{"type":"TypeString","description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens.","computed":true},"validate_nonce":{"type":"TypeBool","description":"Is the nonce be validated while completing the login flow.","computed":true}}}},"microsoft_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"require_authentication":{"type":"TypeBool","description":"Is the authentication flow used for all requests.","computed":true},"require_https":{"type":"TypeBool","description":"Is HTTPS required on connections?","computed":true},"runtime_version":{"type":"TypeString","description":"The Runtime Version of the Authentication and Authorisation feature of this App.","computed":true},"twitter_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_action":{"type":"TypeString","computed":true}}}},"availability":{"type":"TypeString","computed":true},"backup":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","description":"Is this backup job enabled?","computed":true},"name":{"type":"TypeString","description":"The name of this Backup.","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","description":"How often the backup should is executed in multiples of the `frequency_unit`.","computed":true},"frequency_unit":{"type":"TypeString","description":"The unit of time for how often the backup takes place.","computed":true},"keep_at_least_one_backup":{"type":"TypeBool","description":"Does the service keep at least one backup, regardless of age of backup.","computed":true},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","description":"After how many days are backups deleted.","computed":true},"start_time":{"type":"TypeString","description":"When the schedule should start working in RFC-3339 format.","computed":true}}}},"storage_account_url":{"type":"TypeString","description":"The SAS URL to the container.","computed":true}}}},"builtin_logging_enabled":{"type":"TypeBool","computed":true},"client_certificate_enabled":{"type":"TypeBool","computed":true},"client_certificate_exclusion_paths":{"type":"TypeString","description":"Paths to exclude when using client certificates, separated by ;","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of this Connection.","computed":true},"type":{"type":"TypeString","description":"The type of database.","computed":true},"value":{"type":"TypeString","description":"The connection string value.","computed":true}}}},"content_share_force_disabled":{"type":"TypeBool","computed":true},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"functions_extension_version":{"type":"TypeString","computed":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_plan_id":{"type":"TypeString","computed":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"api_definition_url":{"type":"TypeString","computed":true},"api_management_api_id":{"type":"TypeString","computed":true},"app_command_line":{"type":"TypeString","computed":true},"app_scale_limit":{"type":"TypeInt","computed":true},"app_service_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","computed":true},"retention_period_days":{"type":"TypeInt","computed":true}}}},"application_insights_connection_string":{"type":"TypeString","computed":true},"application_insights_key":{"type":"TypeString","computed":true},"application_stack":{"type":"TypeList","computed":true,"elem":{"schema":{"docker":{"type":"TypeList","computed":true,"elem":{"schema":{"image_name":{"type":"TypeString","computed":true},"image_tag":{"type":"TypeString","computed":true},"registry_password":{"type":"TypeString","computed":true},"registry_url":{"type":"TypeString","computed":true},"registry_username":{"type":"TypeString","computed":true}}}},"dotnet_version":{"type":"TypeString","computed":true},"java_version":{"type":"TypeString","computed":true},"node_version":{"type":"TypeString","computed":true},"powershell_core_version":{"type":"TypeString","computed":true},"python_version":{"type":"TypeString","computed":true},"use_custom_runtime":{"type":"TypeBool","computed":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","computed":true}}}},"container_registry_managed_identity_client_id":{"type":"TypeString","computed":true},"container_registry_use_managed_identity":{"type":"TypeBool","computed":true},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeList","description":"The list of origins that are allowed to make cross-origin calls.","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","description":"Are credentials allowed in CORS requests?","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"elastic_instance_minimum":{"type":"TypeInt","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_eviction_time_in_min":{"type":"TypeInt","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"pre_warmed_instance_count":{"type":"TypeInt","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"scm_minimum_tls_version":{"type":"TypeString","computed":true},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"worker_count":{"type":"TypeInt","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connection_string_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"storage_account_access_key":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","computed":true},"storage_key_vault_secret_id":{"type":"TypeString","description":"The Key Vault Secret ID, including version, that contains the Connection String used to connect to the storage account for this Function App.","computed":true},"storage_uses_managed_identity":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"usage":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":25}},"azurerm_linux_web_app":{"schema":{"app_metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"The list of Allowed audience values considered when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret for the Client ID.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true}}}},"additional_login_parameters":{"type":"TypeMap","description":"The map of Login Parameters sent to the OpenID Connect authorization endpoint when a user logs in.","computed":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","description":"The default authentication provider used when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","description":"Is the Authentication / Authorization feature enabled?","computed":true},"facebook":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret":{"type":"TypeString","description":"The App Secret of the Facebook app used for Facebook Login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"github":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret of the GitHub app used for GitHub Login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret":{"type":"TypeString","description":"The client secret associated with the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes that requested as part of Google Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"issuer":{"type":"TypeString","description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens.","computed":true},"microsoft":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret":{"type":"TypeString","description":"The OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"runtime_version":{"type":"TypeString","description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Are platform-specific security tokens that are obtained during login flows durably stored?","computed":true},"twitter":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret":{"type":"TypeString","description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_client_action":{"type":"TypeString","description":"The action taken when an unauthenticated client attempts to access the app.","computed":true}}}},"auth_settings_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret_certificate_thumbprint":{"type":"TypeString","description":"The thumbprint of the certificate used for signing purposes.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true},"jwt_allowed_client_applications":{"type":"TypeList","description":"A list of Allowed Client Applications in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","description":"A list of Allowed Groups in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","description":"The Azure Tenant URI for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`","computed":true},"www_authentication_disabled":{"type":"TypeBool","description":"Is the www-authenticate provider omitted from the request?","computed":true}}}},"apple_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Apple web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Apple Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Apple Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"auth_enabled":{"type":"TypeBool","description":"Is the AuthV2 Settings be enabled.","computed":true},"azure_static_web_app_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with Azure Static Web App Authentication.","computed":true}}}},"config_file_path":{"type":"TypeString","description":"The path to the App Auth settings.","computed":true},"custom_oidc_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`","computed":true},"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with this Custom OIDC.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","description":"The name of the Custom OIDC Authentication Provider.","computed":true},"name_claim_type":{"type":"TypeString","description":"The name of the claim that contains the users name.","computed":true},"openid_configuration_endpoint":{"type":"TypeString","description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider.","computed":true},"scopes":{"type":"TypeList","description":"The list of the scopes that should be requested while authenticating.","computed":true,"elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","description":"The Default Authentication Provider used when the `unauthenticated_action` is set to `RedirectToLoginPage`.","computed":true},"excluded_paths":{"type":"TypeList","description":"The paths which are excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","computed":true,"elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"graph_api_version":{"type":"TypeString","description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"forward_proxy_convention":{"type":"TypeString","description":"The convention used to determine the url of the request made.","computed":true},"forward_proxy_custom_host_header_name":{"type":"TypeString","description":"The name of the header containing the host of the request.","computed":true},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","description":"The name of the header containing the scheme of the request.","computed":true},"github_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"http_route_api_prefix":{"type":"TypeString","description":"The prefix that precedes all the authentication and authorisation paths.","computed":true},"login":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","computed":true,"elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","computed":true},"cookie_expiration_time":{"type":"TypeString","description":"The time after the request is made when the session cookie will expire.","computed":true},"logout_endpoint":{"type":"TypeString","description":"The endpoint to which logout requests are made.","computed":true},"nonce_expiration_time":{"type":"TypeString","description":"The time after the request is made when the nonce will expire.","computed":true},"preserve_url_fragments_for_logins":{"type":"TypeBool","description":"Are the fragments from the request be preserved after the login request is made.","computed":true},"token_refresh_extension_time":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Is the Token Store configuration Enabled.","computed":true},"token_store_path":{"type":"TypeString","description":"The directory path in the App Filesystem in which the tokens are stored.","computed":true},"token_store_sas_setting_name":{"type":"TypeString","description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens.","computed":true},"validate_nonce":{"type":"TypeBool","description":"Is the nonce be validated while completing the login flow.","computed":true}}}},"microsoft_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"require_authentication":{"type":"TypeBool","description":"Is the authentication flow used for all requests.","computed":true},"require_https":{"type":"TypeBool","description":"Is HTTPS required on connections?","computed":true},"runtime_version":{"type":"TypeString","description":"The Runtime Version of the Authentication and Authorisation feature of this App.","computed":true},"twitter_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_action":{"type":"TypeString","computed":true}}}},"availability":{"type":"TypeString","computed":true},"backup":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","description":"Is this backup job enabled?","computed":true},"name":{"type":"TypeString","description":"The name of this Backup.","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","description":"How often the backup should is executed in multiples of the `frequency_unit`.","computed":true},"frequency_unit":{"type":"TypeString","description":"The unit of time for how often the backup takes place.","computed":true},"keep_at_least_one_backup":{"type":"TypeBool","description":"Does the service keep at least one backup, regardless of age of backup.","computed":true},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","description":"After how many days are backups deleted.","computed":true},"start_time":{"type":"TypeString","description":"When the schedule should start working in RFC-3339 format.","computed":true}}}},"storage_account_url":{"type":"TypeString","description":"The SAS URL to the container.","computed":true}}}},"client_affinity_enabled":{"type":"TypeBool","computed":true},"client_certificate_enabled":{"type":"TypeBool","computed":true},"client_certificate_exclusion_paths":{"type":"TypeString","description":"Paths to exclude when using client certificates, separated by ;","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of this Connection.","computed":true},"type":{"type":"TypeString","description":"The type of database.","computed":true},"value":{"type":"TypeString","description":"The connection string value.","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"key_vault_reference_identity_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","computed":true,"elem":{"schema":{"application_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","computed":true,"elem":{"schema":{"level":{"type":"TypeString","computed":true},"retention_in_days":{"type":"TypeInt","computed":true},"sas_url":{"type":"TypeString","computed":true}}}},"file_system_level":{"type":"TypeString","computed":true}}}},"detailed_error_messages":{"type":"TypeBool","computed":true},"failed_request_tracing":{"type":"TypeBool","computed":true},"http_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","computed":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","computed":true},"sas_url":{"type":"TypeString","computed":true}}}},"file_system":{"type":"TypeList","computed":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","computed":true},"retention_in_mb":{"type":"TypeInt","computed":true}}}}}}}}}},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_plan_id":{"type":"TypeString","computed":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"api_definition_url":{"type":"TypeString","computed":true},"api_management_api_id":{"type":"TypeString","computed":true},"app_command_line":{"type":"TypeString","computed":true},"application_stack":{"type":"TypeList","computed":true,"elem":{"schema":{"docker_image":{"type":"TypeString","computed":true},"docker_image_name":{"type":"TypeString","computed":true},"docker_image_tag":{"type":"TypeString","computed":true},"docker_registry_password":{"type":"TypeString","computed":true},"docker_registry_url":{"type":"TypeString","computed":true},"docker_registry_username":{"type":"TypeString","computed":true},"dotnet_version":{"type":"TypeString","computed":true},"go_version":{"type":"TypeString","computed":true},"java_server":{"type":"TypeString","computed":true},"java_server_version":{"type":"TypeString","computed":true},"java_version":{"type":"TypeString","computed":true},"node_version":{"type":"TypeString","computed":true},"php_version":{"type":"TypeString","computed":true},"python_version":{"type":"TypeString","computed":true},"ruby_version":{"type":"TypeString","computed":true}}}},"auto_heal_enabled":{"type":"TypeBool","computed":true},"auto_heal_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeList","computed":true,"elem":{"schema":{"action_type":{"type":"TypeString","computed":true},"minimum_process_execution_time":{"type":"TypeString","computed":true}}}},"trigger":{"type":"TypeList","computed":true,"elem":{"schema":{"requests":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true}}}},"slow_request":{"type":"TypeList","optional":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true},"path":{"type":"TypeString","computed":true},"time_taken":{"type":"TypeString","computed":true}}}},"status_code":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true},"path":{"type":"TypeString","computed":true},"status_code_range":{"type":"TypeString","computed":true},"sub_status":{"type":"TypeInt","computed":true},"win32_status_code":{"type":"TypeInt","computed":true}}}}}}}}}},"container_registry_managed_identity_client_id":{"type":"TypeString","computed":true},"container_registry_use_managed_identity":{"type":"TypeBool","computed":true},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeList","description":"The list of origins that are allowed to make cross-origin calls.","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","description":"Are credentials allowed in CORS requests?","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_eviction_time_in_min":{"type":"TypeInt","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"linux_fx_version":{"type":"TypeString","computed":true},"load_balancing_mode":{"type":"TypeString","computed":true},"local_mysql_enabled":{"type":"TypeBool","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"scm_minimum_tls_version":{"type":"TypeString","computed":true},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"worker_count":{"type":"TypeInt","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connection_string_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"storage_account":{"type":"TypeList","computed":true,"elem":{"schema":{"access_key":{"type":"TypeString","computed":true},"account_name":{"type":"TypeString","computed":true},"mount_path":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"share_name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"usage":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_local_network_gateway":{"schema":{"address_space":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"bgp_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","required":true},"bgp_peering_address":{"type":"TypeString","required":true},"peer_weight":{"type":"TypeInt","computed":true}}}},"gateway_address":{"type":"TypeString","computed":true},"gateway_fqdn":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_log_analytics_workspace":{"schema":{"daily_quota_gb":{"type":"TypeFloat","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_shared_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"retention_in_days":{"type":"TypeInt","computed":true},"secondary_shared_key":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"workspace_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_logic_app_integration_account":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_logic_app_standard":{"schema":{"app_service_plan_id":{"type":"TypeString","computed":true},"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"bundle_version":{"type":"TypeString","computed":true},"client_affinity_enabled":{"type":"TypeBool","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"site_config":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","optional":true,"default":false},"app_scale_limit":{"type":"TypeInt","optional":true,"computed":true},"auto_swap_slot_name":{"type":"TypeString","computed":true},"cors":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeSet","required":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"dotnet_framework_version":{"type":"TypeString","optional":true,"default":"v4.0"},"elastic_instance_minimum":{"type":"TypeInt","optional":true,"computed":true},"ftps_state":{"type":"TypeString","optional":true,"computed":true},"health_check_path":{"type":"TypeString","optional":true},"http2_enabled":{"type":"TypeBool","optional":true,"default":false},"ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"linux_fx_version":{"type":"TypeString","optional":true,"computed":true},"min_tls_version":{"type":"TypeString","optional":true,"computed":true},"pre_warmed_instance_count":{"type":"TypeInt","optional":true,"computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","optional":true,"default":false},"scm_ip_restriction":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","optional":true,"default":"Allow"},"headers":{"type":"TypeList","configMode":"Auto","optional":true,"computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_fd_health_probe":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":1},"x_forwarded_for":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8},"x_forwarded_host":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"},"maxItems":8}}},"maxItems":1},"ip_address":{"type":"TypeString","optional":true},"name":{"type":"TypeString","optional":true,"computed":true},"priority":{"type":"TypeInt","optional":true,"default":65000},"service_tag":{"type":"TypeString","optional":true},"virtual_network_subnet_id":{"type":"TypeString","optional":true}}}},"scm_min_tls_version":{"type":"TypeString","optional":true,"computed":true},"scm_type":{"type":"TypeString","optional":true,"computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","optional":true,"default":false},"use_32_bit_worker_process":{"type":"TypeBool","optional":true,"default":true},"vnet_route_all_enabled":{"type":"TypeBool","optional":true,"computed":true},"websockets_enabled":{"type":"TypeBool","optional":true,"default":false}}},"maxItems":1},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"storage_account_access_key":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","computed":true},"storage_account_share_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"use_extension_bundle":{"type":"TypeBool","computed":true},"version":{"type":"TypeString","computed":true},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_logic_app_workflow":{"schema":{"access_endpoint":{"type":"TypeString","computed":true},"connector_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connector_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"logic_app_integration_account_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"workflow_endpoint_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_outbound_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"workflow_schema":{"type":"TypeString","computed":true},"workflow_version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_machine_learning_workspace":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_maintenance_configuration":{"schema":{"in_guest_user_patch_mode":{"type":"TypeString","computed":true},"install_patches":{"type":"TypeList","computed":true,"elem":{"schema":{"linux":{"type":"TypeList","computed":true,"elem":{"schema":{"classifications_to_include":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"package_names_mask_to_exclude":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"package_names_mask_to_include":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"reboot":{"type":"TypeString","computed":true},"windows":{"type":"TypeList","computed":true,"elem":{"schema":{"classifications_to_include":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"kb_numbers_to_exclude":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"kb_numbers_to_include":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"properties":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"scope":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"visibility":{"type":"TypeString","computed":true},"window":{"type":"TypeList","computed":true,"elem":{"schema":{"duration":{"type":"TypeString","computed":true},"expiration_date_time":{"type":"TypeString","computed":true},"recur_every":{"type":"TypeString","computed":true},"start_date_time":{"type":"TypeString","computed":true},"time_zone":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_managed_api":{"schema":{"location":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_managed_application_definition":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_managed_disk":{"schema":{"create_option":{"type":"TypeString","computed":true},"disk_access_id":{"type":"TypeString","computed":true},"disk_encryption_set_id":{"type":"TypeString","computed":true},"disk_iops_read_write":{"type":"TypeInt","computed":true},"disk_mbps_read_write":{"type":"TypeInt","computed":true},"disk_size_gb":{"type":"TypeInt","computed":true},"encryption_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","computed":true,"elem":{"schema":{"secret_url":{"type":"TypeString","computed":true},"source_vault_id":{"type":"TypeString","computed":true}}}},"enabled":{"type":"TypeBool","computed":true},"key_encryption_key":{"type":"TypeList","computed":true,"elem":{"schema":{"key_url":{"type":"TypeString","computed":true},"source_vault_id":{"type":"TypeString","computed":true}}}}}}},"image_reference_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_access_policy":{"type":"TypeString","computed":true},"os_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"source_resource_id":{"type":"TypeString","computed":true},"source_uri":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true},"storage_account_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_management_group":{"schema":{"all_management_group_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"all_subscription_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"display_name":{"type":"TypeString","optional":true,"computed":true},"management_group_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","optional":true,"computed":true},"parent_management_group_id":{"type":"TypeString","computed":true},"subscription_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_management_group_template_deployment":{"schema":{"management_group_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"output_content":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_maps_account":{"schema":{"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"x_ms_client_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mariadb_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"ssl_enforcement":{"type":"TypeString","computed":true},"storage_profile":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_grow":{"type":"TypeString","computed":true},"backup_retention_days":{"type":"TypeInt","computed":true},"geo_redundant_backup":{"type":"TypeString","computed":true},"storage_mb":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_marketplace_agreement":{"schema":{"license_text_link":{"type":"TypeString","computed":true},"offer":{"type":"TypeString","required":true},"plan":{"type":"TypeString","required":true},"privacy_policy_link":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_mobile_network":{"schema":{"location":{"type":"TypeString","computed":true},"mobile_country_code":{"type":"TypeString","computed":true},"mobile_network_code":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"service_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_attached_data_network":{"schema":{"dns_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"mobile_network_data_network_name":{"type":"TypeString","required":true},"mobile_network_packet_core_data_plane_id":{"type":"TypeString","required":true},"network_address_port_translation":{"type":"TypeList","computed":true,"elem":{"schema":{"icmp_pinhole_timeout_in_seconds":{"type":"TypeInt","computed":true},"pinhole_maximum_number":{"type":"TypeInt","optional":true},"port_range":{"type":"TypeList","computed":true,"elem":{"schema":{"maximum":{"type":"TypeInt","computed":true},"minimum":{"type":"TypeInt","computed":true}}}},"tcp_pinhole_timeout_in_seconds":{"type":"TypeInt","computed":true},"tcp_port_reuse_minimum_hold_time_in_seconds":{"type":"TypeInt","computed":true},"udp_pinhole_timeout_in_seconds":{"type":"TypeInt","computed":true},"udp_port_reuse_minimum_hold_time_in_seconds":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"user_equipment_address_pool_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"user_equipment_static_address_pool_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"user_plane_access_ipv4_address":{"type":"TypeString","computed":true},"user_plane_access_ipv4_gateway":{"type":"TypeString","computed":true},"user_plane_access_ipv4_subnet":{"type":"TypeString","computed":true},"user_plane_access_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mobile_network_data_network":{"schema":{"description":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_packet_core_control_plane":{"schema":{"control_plane_access_ipv4_address":{"type":"TypeString","computed":true},"control_plane_access_ipv4_gateway":{"type":"TypeString","computed":true},"control_plane_access_ipv4_subnet":{"type":"TypeString","computed":true},"control_plane_access_name":{"type":"TypeString","computed":true},"core_network_technology":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"interoperability_settings_json":{"type":"TypeString","computed":true},"local_diagnostics_access":{"type":"TypeList","computed":true,"elem":{"schema":{"authentication_type":{"type":"TypeString","computed":true},"https_server_certificate_url":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"platform":{"type":"TypeList","computed":true,"elem":{"schema":{"arc_kubernetes_cluster_id":{"type":"TypeString","computed":true},"custom_location_id":{"type":"TypeString","computed":true},"edge_device_id":{"type":"TypeString","computed":true},"stack_hci_cluster_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"site_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"sku":{"type":"TypeString","computed":true},"software_version":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"user_equipment_mtu_in_bytes":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_mobile_network_packet_core_data_plane":{"schema":{"location":{"type":"TypeString","computed":true},"mobile_network_packet_core_control_plane_id":{"type":"TypeString","required":true,"forceNew":true},"name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"user_plane_access_ipv4_address":{"type":"TypeString","computed":true},"user_plane_access_ipv4_gateway":{"type":"TypeString","computed":true},"user_plane_access_ipv4_subnet":{"type":"TypeString","computed":true},"user_plane_access_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mobile_network_service":{"schema":{"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"pcc_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"precedence":{"type":"TypeInt","computed":true},"qos_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"allocation_and_retention_priority_level":{"type":"TypeInt","computed":true},"guaranteed_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}},"maximum_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}},"preemption_capability":{"type":"TypeString","computed":true},"preemption_vulnerability":{"type":"TypeString","computed":true},"qos_indicator":{"type":"TypeInt","computed":true}}}},"service_data_flow_template":{"type":"TypeList","computed":true,"elem":{"schema":{"direction":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"ports":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"protocol":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"remote_ip_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"traffic_control_enabled":{"type":"TypeBool","computed":true}}}},"service_precedence":{"type":"TypeInt","computed":true},"service_qos_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"allocation_and_retention_priority_level":{"type":"TypeInt","computed":true},"maximum_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}},"preemption_capability":{"type":"TypeString","computed":true},"preemption_vulnerability":{"type":"TypeString","computed":true},"qos_indicator":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_sim":{"schema":{"device_type":{"type":"TypeString","computed":true},"integrated_circuit_card_identifier":{"type":"TypeString","computed":true},"international_mobile_subscriber_identity":{"type":"TypeString","computed":true},"mobile_network_sim_group_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"sim_policy_id":{"type":"TypeString","computed":true},"sim_state":{"type":"TypeString","computed":true},"static_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"attached_data_network_id":{"type":"TypeString","computed":true},"slice_id":{"type":"TypeString","computed":true},"static_ipv4_address":{"type":"TypeString","computed":true}}}},"vendor_key_fingerprint":{"type":"TypeString","computed":true},"vendor_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mobile_network_sim_group":{"schema":{"encryption_key_url":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_sim_policy":{"schema":{"default_slice_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"rat_frequency_selection_priority_index":{"type":"TypeInt","computed":true},"registration_timer_in_seconds":{"type":"TypeInt","computed":true},"slice":{"type":"TypeList","computed":true,"elem":{"schema":{"data_network":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_allowed_session_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allocation_and_retention_priority_level":{"type":"TypeInt","computed":true},"allowed_services_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"data_network_id":{"type":"TypeString","computed":true},"default_session_type":{"type":"TypeString","computed":true},"max_buffered_packets":{"type":"TypeInt","computed":true},"preemption_capability":{"type":"TypeString","computed":true},"preemption_vulnerability":{"type":"TypeString","computed":true},"qos_indicator":{"type":"TypeInt","computed":true},"session_aggregate_maximum_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}}}}},"default_data_network_id":{"type":"TypeString","computed":true},"slice_id":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"user_equipment_aggregate_maximum_bit_rate":{"type":"TypeList","computed":true,"elem":{"schema":{"downlink":{"type":"TypeString","computed":true},"uplink":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_mobile_network_site":{"schema":{"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"network_function_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mobile_network_slice":{"schema":{"description":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"mobile_network_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true},"single_network_slice_selection_assistance_information":{"type":"TypeList","computed":true,"elem":{"schema":{"slice_differentiator":{"type":"TypeString","computed":true},"slice_service_type":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_monitor_action_group":{"schema":{"arm_role_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"role_id":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}},"automation_runbook_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"automation_account_id":{"type":"TypeString","computed":true},"is_global_runbook":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","computed":true},"runbook_name":{"type":"TypeString","computed":true},"service_uri":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true},"webhook_resource_id":{"type":"TypeString","computed":true}}}},"azure_app_push_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"email_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"azure_function_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"function_app_resource_id":{"type":"TypeString","computed":true},"function_name":{"type":"TypeString","computed":true},"http_trigger_url":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}},"email_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"email_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}},"enabled":{"type":"TypeBool","computed":true},"event_hub_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","optional":true,"computed":true},"event_hub_name":{"type":"TypeString","optional":true,"computed":true},"event_hub_namespace":{"type":"TypeString","optional":true,"computed":true},"name":{"type":"TypeString","required":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true},"tenant_id":{"type":"TypeString","optional":true,"computed":true},"use_common_alert_schema":{"type":"TypeBool","optional":true}}}},"itsm_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"connection_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"region":{"type":"TypeString","computed":true},"ticket_configuration":{"type":"TypeString","computed":true},"workspace_id":{"type":"TypeString","computed":true}}}},"logic_app_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"callback_url":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"resource_id":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"short_name":{"type":"TypeString","computed":true},"sms_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"country_code":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"phone_number":{"type":"TypeString","computed":true}}}},"voice_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"country_code":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"phone_number":{"type":"TypeString","computed":true}}}},"webhook_receiver":{"type":"TypeList","computed":true,"elem":{"schema":{"aad_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"identifier_uri":{"type":"TypeString","computed":true},"object_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"service_uri":{"type":"TypeString","computed":true},"use_common_alert_schema":{"type":"TypeBool","computed":true}}}}},"timeouts":{"read":5}},"azurerm_monitor_data_collection_endpoint":{"schema":{"configuration_access_endpoint":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"logs_ingestion_endpoint":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_monitor_data_collection_rule":{"schema":{"data_collection_endpoint_id":{"type":"TypeString","computed":true},"data_flow":{"type":"TypeList","computed":true,"elem":{"schema":{"built_in_transform":{"type":"TypeString","computed":true},"destinations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"output_stream":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"transform_kql":{"type":"TypeString","computed":true}}}},"data_sources":{"type":"TypeList","computed":true,"elem":{"schema":{"data_import":{"type":"TypeList","computed":true,"elem":{"schema":{"event_hub_data_source":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_group":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"stream":{"type":"TypeString","computed":true}}}}}}},"extension":{"type":"TypeList","computed":true,"elem":{"schema":{"extension_json":{"type":"TypeString","computed":true},"extension_name":{"type":"TypeString","computed":true},"input_data_sources":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"iis_log":{"type":"TypeList","computed":true,"elem":{"schema":{"log_directories":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"log_file":{"type":"TypeList","optional":true,"elem":{"schema":{"file_patterns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"format":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"settings":{"type":"TypeList","computed":true,"elem":{"schema":{"text":{"type":"TypeList","computed":true,"elem":{"schema":{"record_start_timestamp_format":{"type":"TypeString","computed":true}}}}}}},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"performance_counter":{"type":"TypeList","computed":true,"elem":{"schema":{"counter_specifiers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"sampling_frequency_in_seconds":{"type":"TypeInt","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"platform_telemetry":{"type":"TypeList","optional":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"prometheus_forwarder":{"type":"TypeList","computed":true,"elem":{"schema":{"label_include_filter":{"type":"TypeList","computed":true,"elem":{"schema":{"label":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"syslog":{"type":"TypeList","computed":true,"elem":{"schema":{"facility_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"log_levels":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"windows_event_log":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"x_path_queries":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"windows_firewall_log":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"streams":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}}}}},"description":{"type":"TypeString","computed":true},"destinations":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_monitor_metrics":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"event_hub":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}},"maxItems":1},"event_hub_direct":{"type":"TypeList","optional":true,"elem":{"schema":{"event_hub_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}},"maxItems":1},"log_analytics":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"workspace_resource_id":{"type":"TypeString","computed":true}}}},"monitor_account":{"type":"TypeList","computed":true,"elem":{"schema":{"monitor_account_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"storage_blob":{"type":"TypeList","computed":true,"elem":{"schema":{"container_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true}}}},"storage_blob_direct":{"type":"TypeList","computed":true,"elem":{"schema":{"container_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true}}}},"storage_table_direct":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true},"table_name":{"type":"TypeString","computed":true}}}}}}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"immutable_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"stream_declaration":{"type":"TypeList","computed":true,"elem":{"schema":{"column":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"stream_name":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_monitor_diagnostic_categories":{"schema":{"log_category_groups":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"log_category_types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"logs":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"metrics":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_monitor_log_profile":{"schema":{"categories":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"locations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"retention_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"days":{"type":"TypeInt","computed":true},"enabled":{"type":"TypeBool","computed":true}}}},"servicebus_rule_id":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_monitor_scheduled_query_rules_alert":{"schema":{"action":{"type":"TypeSet","computed":true,"elem":{"schema":{"action_group":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"custom_webhook_payload":{"type":"TypeString","computed":true},"email_subject":{"type":"TypeString","computed":true}}}},"authorized_resource_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"data_source_id":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"frequency":{"type":"TypeInt","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"query":{"type":"TypeString","computed":true},"query_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"severity":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"throttling":{"type":"TypeInt","computed":true},"time_window":{"type":"TypeInt","computed":true},"trigger":{"type":"TypeSet","computed":true,"elem":{"schema":{"metric_trigger":{"type":"TypeSet","computed":true,"elem":{"schema":{"metric_column":{"type":"TypeString","computed":true},"metric_trigger_type":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"threshold":{"type":"TypeFloat","computed":true}}}},"operator":{"type":"TypeString","computed":true},"threshold":{"type":"TypeFloat","computed":true}}}}},"timeouts":{"read":5}},"azurerm_monitor_scheduled_query_rules_log":{"schema":{"authorized_resource_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"criteria":{"type":"TypeSet","computed":true,"elem":{"schema":{"dimension":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operator":{"type":"TypeString","computed":true},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"metric_name":{"type":"TypeString","computed":true}}}},"data_source_id":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_mssql_database":{"schema":{"collation":{"type":"TypeString","computed":true},"elastic_pool_id":{"type":"TypeString","computed":true},"license_type":{"type":"TypeString","computed":true},"max_size_gb":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"read_replica_count":{"type":"TypeInt","computed":true},"read_scale":{"type":"TypeBool","computed":true},"server_id":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"storage_account_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_mssql_elasticpool":{"schema":{"license_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"max_size_bytes":{"type":"TypeInt","computed":true},"max_size_gb":{"type":"TypeFloat","computed":true},"name":{"type":"TypeString","required":true},"per_db_max_capacity":{"type":"TypeInt","computed":true},"per_db_min_capacity":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"server_name":{"type":"TypeString","required":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity":{"type":"TypeInt","computed":true},"family":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"tier":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_mssql_managed_instance":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"collation":{"type":"TypeString","computed":true},"customer_managed_key_id":{"type":"TypeString","computed":true},"dns_zone_partner_id":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"license_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"proxy_override":{"type":"TypeString","computed":true},"public_data_endpoint_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"storage_account_type":{"type":"TypeString","computed":true},"storage_size_in_gb":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"timezone_id":{"type":"TypeString","computed":true},"vcores":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_mssql_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"fully_qualified_domain_name":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"restorable_dropped_database_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mysql_flexible_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"backup_retention_days":{"type":"TypeInt","computed":true},"delegated_subnet_id":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","computed":true},"high_availability":{"type":"TypeList","computed":true,"elem":{"schema":{"mode":{"type":"TypeString","computed":true},"standby_availability_zone":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"maintenance_window":{"type":"TypeList","computed":true,"elem":{"schema":{"day_of_week":{"type":"TypeInt","computed":true},"start_hour":{"type":"TypeInt","computed":true},"start_minute":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"private_dns_zone_id":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"replica_capacity":{"type":"TypeInt","computed":true},"replication_role":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"restore_point_in_time":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"storage":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_grow_enabled":{"type":"TypeBool","computed":true},"iops":{"type":"TypeInt","computed":true},"size_gb":{"type":"TypeInt","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true},"zone":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_mysql_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"auto_grow_enabled":{"type":"TypeBool","computed":true},"backup_retention_days":{"type":"TypeInt","computed":true},"fqdn":{"type":"TypeString","computed":true},"geo_redundant_backup_enabled":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"infrastructure_encryption_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"restore_point_in_time":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"ssl_enforcement_enabled":{"type":"TypeBool","computed":true},"ssl_minimal_tls_version_enforced":{"type":"TypeString","computed":true},"storage_mb":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"threat_detection_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"disabled_alerts":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"email_account_admins":{"type":"TypeBool","computed":true},"email_addresses":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"enabled":{"type":"TypeBool","computed":true},"retention_days":{"type":"TypeInt","computed":true},"storage_account_access_key":{"type":"TypeString","computed":true},"storage_endpoint":{"type":"TypeString","computed":true}}}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_nat_gateway":{"schema":{"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_ip_address_ids":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"public_ip_prefix_ids":{"type":"TypeList","optional":true,"computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"resource_guid":{"type":"TypeString","computed":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_netapp_account":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_netapp_pool":{"schema":{"account_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"service_level":{"type":"TypeString","computed":true},"size_in_tb":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_netapp_snapshot":{"schema":{"account_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"pool_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"volume_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_netapp_snapshot_policy":{"schema":{"account_name":{"type":"TypeString","required":true},"daily_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"hour":{"type":"TypeInt","computed":true},"minute":{"type":"TypeInt","computed":true},"snapshots_to_keep":{"type":"TypeInt","computed":true}}}},"enabled":{"type":"TypeBool","computed":true},"hourly_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"minute":{"type":"TypeInt","computed":true},"snapshots_to_keep":{"type":"TypeInt","computed":true}}}},"location":{"type":"TypeString","computed":true},"monthly_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"days_of_month":{"type":"TypeSet","computed":true,"elem":{"type":"TypeInt"}},"hour":{"type":"TypeInt","computed":true},"minute":{"type":"TypeInt","computed":true},"snapshots_to_keep":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"weekly_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"days_of_week":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"hour":{"type":"TypeInt","computed":true},"minute":{"type":"TypeInt","computed":true},"snapshots_to_keep":{"type":"TypeInt","computed":true}}}}},"timeouts":{"read":5}},"azurerm_netapp_volume":{"schema":{"account_name":{"type":"TypeString","required":true},"data_protection_replication":{"type":"TypeList","computed":true,"elem":{"schema":{"endpoint_type":{"type":"TypeString","computed":true},"remote_volume_location":{"type":"TypeString","computed":true},"remote_volume_resource_id":{"type":"TypeString","computed":true},"replication_frequency":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"mount_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"network_features":{"type":"TypeString","computed":true},"pool_name":{"type":"TypeString","required":true},"protocols":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"security_style":{"type":"TypeString","optional":true},"service_level":{"type":"TypeString","computed":true},"storage_quota_in_gb":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"volume_path":{"type":"TypeString","computed":true},"zone":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_netapp_volume_group_sap_hana":{"schema":{"account_name":{"type":"TypeString","required":true},"application_identifier":{"type":"TypeString","computed":true},"group_description":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"volume":{"type":"TypeList","computed":true,"elem":{"schema":{"capacity_pool_id":{"type":"TypeString","computed":true},"data_protection_replication":{"type":"TypeList","computed":true,"elem":{"schema":{"endpoint_type":{"type":"TypeString","computed":true},"remote_volume_location":{"type":"TypeString","computed":true},"remote_volume_resource_id":{"type":"TypeString","computed":true},"replication_frequency":{"type":"TypeString","computed":true}}}},"data_protection_snapshot_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"snapshot_policy_id":{"type":"TypeString","computed":true}}}},"export_policy_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_clients":{"type":"TypeString","computed":true},"nfsv3_enabled":{"type":"TypeBool","computed":true},"nfsv41_enabled":{"type":"TypeBool","computed":true},"root_access_enabled":{"type":"TypeBool","computed":true},"rule_index":{"type":"TypeInt","computed":true},"unix_read_only":{"type":"TypeBool","computed":true},"unix_read_write":{"type":"TypeBool","computed":true}}}},"id":{"type":"TypeString","computed":true},"mount_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"protocols":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"proximity_placement_group_id":{"type":"TypeString","computed":true},"security_style":{"type":"TypeString","computed":true},"service_level":{"type":"TypeString","computed":true},"snapshot_directory_visible":{"type":"TypeBool","computed":true},"storage_quota_in_gb":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"throughput_in_mibps":{"type":"TypeFloat","required":true},"volume_path":{"type":"TypeString","computed":true},"volume_spec_name":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_netapp_volume_quota_rule":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"quota_size_in_kib":{"type":"TypeInt","computed":true},"quota_target":{"type":"TypeString","computed":true},"quota_type":{"type":"TypeString","computed":true},"volume_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"read":5}},"azurerm_network_ddos_protection_plan":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"virtual_network_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_network_interface":{"schema":{"applied_dns_servers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","computed":true},"enable_ip_forwarding":{"type":"TypeBool","computed":true},"internal_dns_name_label":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"application_gateway_backend_address_pools_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"gateway_load_balancer_frontend_ip_configuration_id":{"type":"TypeString","computed":true},"load_balancer_backend_address_pools_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_address_allocation":{"type":"TypeString","computed":true},"private_ip_address_version":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"mac_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_security_group_id":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_machine_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_network_manager_network_group":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_manager_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_network_security_group":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"security_rule":{"type":"TypeList","computed":true,"elem":{"schema":{"access":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"destination_address_prefix":{"type":"TypeString","computed":true},"destination_address_prefixes":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"destination_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"destination_port_range":{"type":"TypeString","computed":true},"destination_port_ranges":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"direction":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"priority":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","computed":true},"source_address_prefix":{"type":"TypeString","computed":true},"source_address_prefixes":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"source_application_security_group_ids":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"source_port_range":{"type":"TypeString","computed":true},"source_port_ranges":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_network_service_tags":{"schema":{"address_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ipv4_cidrs":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ipv6_cidrs":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","required":true,"forceNew":true},"location_filter":{"type":"TypeString","optional":true,"forceNew":true},"service":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_network_watcher":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_notification_hub":{"schema":{"apns_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"application_mode":{"type":"TypeString","computed":true},"bundle_id":{"type":"TypeString","computed":true},"key_id":{"type":"TypeString","computed":true},"team_id":{"type":"TypeString","computed":true},"token":{"type":"TypeString","computed":true}}}},"gcm_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"api_key":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_notification_hub_namespace":{"schema":{"enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"namespace_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"servicebus_endpoint":{"type":"TypeString","computed":true},"sku":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_orchestrated_virtual_machine_scale_set":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_interface":{"type":"TypeList","computed":true,"elem":{"schema":{"accelerated_networking_enabled":{"type":"TypeBool","computed":true},"dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancer_backend_address_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true},"public_ip_address":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"ip_tag":{"type":"TypeList","computed":true,"elem":{"schema":{"tag":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"public_ip_prefix_id":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"subnet_id":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"ip_forwarding_enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","computed":true},"network_security_group_id":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_palo_alto_local_rulestack":{"schema":{"anti_spyware_profile":{"type":"TypeString","computed":true},"anti_virus_profile":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"dns_subscription":{"type":"TypeString","computed":true},"file_blocking_profile":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_trust_certificate":{"type":"TypeString","computed":true},"outbound_untrust_certificate":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"url_filtering_profile":{"type":"TypeString","computed":true},"vulnerability_profile":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_platform_image":{"schema":{"location":{"type":"TypeString","required":true,"forceNew":true},"offer":{"type":"TypeString","required":true},"publisher":{"type":"TypeString","required":true},"sku":{"type":"TypeString","required":true},"version":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"read":5}},"azurerm_policy_assignment":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"enforce":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"metadata":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true,"forceNew":true},"non_compliance_message":{"type":"TypeList","computed":true,"elem":{"schema":{"content":{"type":"TypeString","computed":true},"policy_definition_reference_id":{"type":"TypeString","computed":true}}}},"not_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"parameters":{"type":"TypeString","computed":true},"policy_definition_id":{"type":"TypeString","computed":true},"scope_id":{"type":"TypeString","required":true,"forceNew":true}},"timeouts":{"read":5}},"azurerm_policy_definition":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"management_group_name":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","computed":true},"mode":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeString","computed":true},"policy_rule":{"type":"TypeString","computed":true},"policy_type":{"type":"TypeString","computed":true},"role_definition_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_policy_definition_built_in":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"management_group_name":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","computed":true},"mode":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeString","computed":true},"policy_rule":{"type":"TypeString","computed":true},"policy_type":{"type":"TypeString","computed":true},"role_definition_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_policy_set_definition":{"schema":{"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"management_group_name":{"type":"TypeString","optional":true},"metadata":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"computed":true},"parameters":{"type":"TypeString","computed":true},"policy_definition_group":{"type":"TypeList","computed":true,"elem":{"schema":{"additional_metadata_resource_id":{"type":"TypeString","computed":true},"category":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"policy_definition_reference":{"type":"TypeList","computed":true,"elem":{"schema":{"parameter_values":{"type":"TypeString","computed":true},"parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"policy_definition_id":{"type":"TypeString","computed":true},"policy_group_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"reference_id":{"type":"TypeString","computed":true}}}},"policy_definitions":{"type":"TypeString","computed":true},"policy_type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_policy_virtual_machine_configuration_assignment":{"schema":{"assignment_hash":{"type":"TypeString","computed":true},"compliance_status":{"type":"TypeString","computed":true},"content_hash":{"type":"TypeString","computed":true},"content_uri":{"type":"TypeString","computed":true},"last_compliance_status_checked":{"type":"TypeString","computed":true},"latest_report_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"virtual_machine_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_portal_dashboard":{"schema":{"dashboard_properties":{"type":"TypeString","optional":true,"computed":true},"display_name":{"type":"TypeString","optional":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_postgresql_flexible_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"auto_grow_enabled":{"type":"TypeBool","computed":true},"backup_retention_days":{"type":"TypeInt","computed":true},"delegated_subnet_id":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"storage_mb":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_postgresql_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":10}},"azurerm_private_dns_a_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_aaaa_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_cname_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_resource_id":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_mx_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"exchange":{"type":"TypeString","computed":true},"preference":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_ptr_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"records":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_resolver":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_dns_forwarding_ruleset":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_dns_resolver_outbound_endpoint_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true,"forceNew":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_forwarding_rule":{"schema":{"dns_forwarding_ruleset_id":{"type":"TypeString","required":true},"domain_name":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"target_dns_servers":{"type":"TypeList","computed":true,"elem":{"schema":{"ip_address":{"type":"TypeString","computed":true},"port":{"type":"TypeInt","computed":true}}}}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_inbound_endpoint":{"schema":{"ip_configurations":{"type":"TypeList","computed":true,"elem":{"schema":{"private_ip_address":{"type":"TypeString","computed":true},"private_ip_allocation_method":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_dns_resolver_id":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_outbound_endpoint":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_dns_resolver_id":{"type":"TypeString","required":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_dns_resolver_virtual_network_link":{"schema":{"dns_forwarding_ruleset_id":{"type":"TypeString","required":true},"metadata":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"virtual_network_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_private_dns_soa_record":{"schema":{"email":{"type":"TypeString","computed":true},"expire_time":{"type":"TypeInt","computed":true},"fqdn":{"type":"TypeString","computed":true},"host_name":{"type":"TypeString","computed":true},"minimum_ttl":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","optional":true,"default":"@"},"refresh_time":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"retry_time":{"type":"TypeInt","computed":true},"serial_number":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_srv_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"port":{"type":"TypeInt","computed":true},"priority":{"type":"TypeInt","computed":true},"target":{"type":"TypeString","computed":true},"weight":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_txt_record":{"schema":{"fqdn":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"record":{"type":"TypeSet","computed":true,"elem":{"schema":{"value":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ttl":{"type":"TypeInt","computed":true},"zone_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_dns_zone":{"schema":{"max_number_of_record_sets":{"type":"TypeInt","computed":true},"max_number_of_virtual_network_links":{"type":"TypeInt","computed":true},"max_number_of_virtual_network_links_with_registration":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"number_of_record_sets":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_dns_zone_virtual_network_link":{"schema":{"name":{"type":"TypeString","required":true},"private_dns_zone_name":{"type":"TypeString","required":true},"registration_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_private_endpoint_connection":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_interface":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"private_service_connection":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"request_response":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_private_link_service":{"schema":{"alias":{"type":"TypeString","computed":true},"auto_approval_subscription_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enable_proxy_protocol":{"type":"TypeBool","computed":true},"load_balancer_frontend_ip_configuration_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"nat_ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_address_version":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"visibility_subscription_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_private_link_service_endpoint_connections":{"schema":{"location":{"type":"TypeString","computed":true},"private_endpoint_connections":{"type":"TypeList","computed":true,"elem":{"schema":{"action_required":{"type":"TypeString","computed":true},"connection_id":{"type":"TypeString","computed":true},"connection_name":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"private_endpoint_id":{"type":"TypeString","computed":true},"private_endpoint_name":{"type":"TypeString","computed":true},"status":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"service_id":{"type":"TypeString","required":true},"service_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_proximity_placement_group":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_public_ip":{"schema":{"allocation_method":{"type":"TypeString","computed":true},"ddos_protection_mode":{"type":"TypeString","computed":true},"ddos_protection_plan_id":{"type":"TypeString","computed":true},"domain_name_label":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"ip_address":{"type":"TypeString","computed":true},"ip_tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"ip_version":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"reverse_fqdn":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_public_ip_prefix":{"schema":{"ip_prefix":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"prefix_length":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_public_ips":{"schema":{"allocation_type":{"type":"TypeString","optional":true},"attachment_status":{"type":"TypeString","optional":true},"name_prefix":{"type":"TypeString","optional":true},"public_ips":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"ip_address":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_public_maintenance_configurations":{"schema":{"configs":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"duration":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"maintenance_scope":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"recur_every":{"type":"TypeString","computed":true},"time_zone":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","optional":true},"recur_every":{"type":"TypeString","optional":true},"scope":{"type":"TypeString","optional":true}},"timeouts":{"read":5}},"azurerm_recovery_services_vault":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_redis_cache":{"schema":{"capacity":{"type":"TypeInt","computed":true},"enable_non_ssl_port":{"type":"TypeBool","computed":true},"family":{"type":"TypeString","computed":true},"hostname":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"patch_schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","computed":true},"maintenance_window":{"type":"TypeString","computed":true},"start_hour_utc":{"type":"TypeInt","computed":true}}}},"port":{"type":"TypeInt","computed":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"private_static_ip_address":{"type":"TypeString","computed":true},"redis_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"aof_backup_enabled":{"type":"TypeBool","computed":true},"aof_storage_connection_string_0":{"type":"TypeString","computed":true},"aof_storage_connection_string_1":{"type":"TypeString","computed":true},"enable_authentication":{"type":"TypeBool","computed":true},"maxclients":{"type":"TypeInt","computed":true},"maxfragmentationmemory_reserved":{"type":"TypeInt","computed":true},"maxmemory_delta":{"type":"TypeInt","computed":true},"maxmemory_policy":{"type":"TypeString","computed":true},"maxmemory_reserved":{"type":"TypeInt","computed":true},"notify_keyspace_events":{"type":"TypeString","computed":true},"rdb_backup_enabled":{"type":"TypeBool","computed":true},"rdb_backup_frequency":{"type":"TypeInt","computed":true},"rdb_backup_max_snapshot_count":{"type":"TypeInt","computed":true},"rdb_storage_connection_string":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"shard_count":{"type":"TypeInt","computed":true},"sku_name":{"type":"TypeString","computed":true},"ssl_port":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zones":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_redis_enterprise_database":{"schema":{"cluster_id":{"type":"TypeString","required":true},"linked_database_group_nickname":{"type":"TypeString","computed":true},"linked_database_id":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"secondary_access_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_resource_group":{"schema":{"location":{"type":"TypeString","computed":true},"managed_by":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_resource_group_template_deployment":{"schema":{"name":{"type":"TypeString","required":true},"output_content":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_resources":{"schema":{"name":{"type":"TypeString","optional":true,"computed":true},"required_tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","optional":true,"computed":true},"resources":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"type":{"type":"TypeString","optional":true,"computed":true}},"timeouts":{"read":5}},"azurerm_role_definition":{"schema":{"assignable_scopes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","optional":true,"computed":true},"permissions":{"type":"TypeList","computed":true,"elem":{"schema":{"actions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"data_actions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}},"not_actions":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"not_data_actions":{"type":"TypeSet","optional":true,"elem":{"type":"TypeString"}}}}},"role_definition_id":{"type":"TypeString","optional":true,"computed":true},"scope":{"type":"TypeString","optional":true},"type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_route_filter":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"rule":{"type":"TypeList","computed":true,"elem":{"schema":{"access":{"type":"TypeString","computed":true},"communities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"rule_type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_route_table":{"schema":{"bgp_route_propagation_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"route":{"type":"TypeList","computed":true,"elem":{"schema":{"address_prefix":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"next_hop_in_ip_address":{"type":"TypeString","computed":true},"next_hop_type":{"type":"TypeString","computed":true}}}},"subnets":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_search_service":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","required":true},"partition_count":{"type":"TypeInt","computed":true},"primary_key":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"query_keys":{"type":"TypeList","computed":true,"elem":{"schema":{"key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true}}}},"replica_count":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_sentinel_alert_rule":{"schema":{"log_analytics_workspace_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_sentinel_alert_rule_anomaly":{"schema":{"anomaly_settings_version":{"type":"TypeInt","computed":true},"anomaly_version":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"display_name":{"type":"TypeString","optional":true,"computed":true},"enabled":{"type":"TypeBool","computed":true},"frequency":{"type":"TypeString","computed":true},"log_analytics_workspace_id":{"type":"TypeString","required":true},"mode":{"type":"TypeString","computed":true},"multi_select_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","optional":true,"computed":true},"prioritized_exclude_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"exclude":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"prioritize":{"type":"TypeString","computed":true}}}},"required_data_connector":{"type":"TypeList","computed":true,"elem":{"schema":{"connector_id":{"type":"TypeString","computed":true},"data_types":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"settings_definition_id":{"type":"TypeString","computed":true},"single_select_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"supported_values":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"value":{"type":"TypeString","computed":true}}}},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"techniques":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"threshold_observation":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"max":{"type":"TypeString","computed":true},"min":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_sentinel_alert_rule_template":{"schema":{"display_name":{"type":"TypeString","optional":true,"computed":true},"log_analytics_workspace_id":{"type":"TypeString","required":true},"name":{"type":"TypeString","optional":true,"computed":true},"nrt_template":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"query":{"type":"TypeString","computed":true},"severity":{"type":"TypeString","computed":true},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"scheduled_template":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"query":{"type":"TypeString","computed":true},"query_frequency":{"type":"TypeString","computed":true},"query_period":{"type":"TypeString","computed":true},"severity":{"type":"TypeString","computed":true},"tactics":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"trigger_operator":{"type":"TypeString","computed":true},"trigger_threshold":{"type":"TypeInt","computed":true}}}},"security_incident_template":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"product_filter":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_service_plan":{"schema":{"app_service_environment_id":{"type":"TypeString","computed":true},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"maximum_elastic_worker_count":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","computed":true},"per_site_scaling_enabled":{"type":"TypeBool","computed":true},"reserved":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"worker_count":{"type":"TypeInt","computed":true},"zone_balancing_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_namespace":{"schema":{"capacity":{"type":"TypeInt","computed":true},"default_primary_connection_string":{"type":"TypeString","computed":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_connection_string":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"endpoint":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"zone_redundant":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_namespace_authorization_rule":{"schema":{"name":{"type":"TypeString","required":true},"namespace_id":{"type":"TypeString","optional":true},"namespace_name":{"type":"TypeString","optional":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_namespace_disaster_recovery_config":{"schema":{"alias_authorization_rule_id":{"type":"TypeString","optional":true},"default_primary_key":{"type":"TypeString","computed":true},"default_secondary_key":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"namespace_id":{"type":"TypeString","optional":true},"namespace_name":{"type":"TypeString","optional":true},"partner_namespace_id":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_queue":{"schema":{"auto_delete_on_idle":{"type":"TypeString","computed":true},"dead_lettering_on_message_expiration":{"type":"TypeBool","computed":true},"default_message_ttl":{"type":"TypeString","computed":true},"duplicate_detection_history_time_window":{"type":"TypeString","computed":true},"enable_batched_operations":{"type":"TypeBool","computed":true},"enable_express":{"type":"TypeBool","computed":true},"enable_partitioning":{"type":"TypeBool","computed":true},"forward_dead_lettered_messages_to":{"type":"TypeString","computed":true},"forward_to":{"type":"TypeString","computed":true},"lock_duration":{"type":"TypeString","computed":true},"max_delivery_count":{"type":"TypeInt","computed":true},"max_size_in_megabytes":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"namespace_id":{"type":"TypeString","optional":true},"namespace_name":{"type":"TypeString","optional":true},"requires_duplicate_detection":{"type":"TypeBool","computed":true},"requires_session":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"status":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_queue_authorization_rule":{"schema":{"listen":{"type":"TypeBool","computed":true},"manage":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","optional":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"queue_id":{"type":"TypeString","optional":true},"queue_name":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","optional":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_subscription":{"schema":{"auto_delete_on_idle":{"type":"TypeString","computed":true},"dead_lettering_on_filter_evaluation_error":{"type":"TypeBool","computed":true},"dead_lettering_on_message_expiration":{"type":"TypeBool","computed":true},"default_message_ttl":{"type":"TypeString","computed":true},"enable_batched_operations":{"type":"TypeBool","computed":true},"forward_dead_lettered_messages_to":{"type":"TypeString","computed":true},"forward_to":{"type":"TypeString","computed":true},"lock_duration":{"type":"TypeString","computed":true},"max_delivery_count":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","optional":true},"requires_session":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"topic_id":{"type":"TypeString","optional":true},"topic_name":{"type":"TypeString","optional":true}},"timeouts":{"read":5}},"azurerm_servicebus_topic":{"schema":{"auto_delete_on_idle":{"type":"TypeString","computed":true},"default_message_ttl":{"type":"TypeString","computed":true},"duplicate_detection_history_time_window":{"type":"TypeString","computed":true},"enable_batched_operations":{"type":"TypeBool","computed":true},"enable_express":{"type":"TypeBool","computed":true},"enable_partitioning":{"type":"TypeBool","computed":true},"max_size_in_megabytes":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"namespace_id":{"type":"TypeString","optional":true},"namespace_name":{"type":"TypeString","optional":true},"requires_duplicate_detection":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","optional":true},"status":{"type":"TypeString","computed":true},"support_ordering":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_servicebus_topic_authorization_rule":{"schema":{"listen":{"type":"TypeBool","computed":true},"manage":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"namespace_name":{"type":"TypeString","optional":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_connection_string_alias":{"type":"TypeString","computed":true},"primary_key":{"type":"TypeString","computed":true},"queue_name":{"type":"TypeString","optional":true},"resource_group_name":{"type":"TypeString","optional":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_connection_string_alias":{"type":"TypeString","computed":true},"secondary_key":{"type":"TypeString","computed":true},"send":{"type":"TypeBool","computed":true},"topic_id":{"type":"TypeString","optional":true},"topic_name":{"type":"TypeString","optional":true}},"timeouts":{"read":5}},"azurerm_shared_image":{"schema":{"architecture":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"eula":{"type":"TypeString","computed":true},"gallery_name":{"type":"TypeString","required":true},"hyper_v_generation":{"type":"TypeString","computed":true},"identifier":{"type":"TypeList","computed":true,"elem":{"schema":{"offer":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","computed":true},"sku":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","computed":true},"privacy_statement_uri":{"type":"TypeString","computed":true},"purchase_plan":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"product":{"type":"TypeString","computed":true},"publisher":{"type":"TypeString","computed":true}}}},"release_note_uri":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"specialized":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_shared_image_gallery":{"schema":{"description":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"unique_name":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_shared_image_version":{"schema":{"exclude_from_latest":{"type":"TypeBool","computed":true},"gallery_name":{"type":"TypeString","required":true},"image_name":{"type":"TypeString","required":true},"location":{"type":"TypeString","computed":true},"managed_image_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"os_disk_image_size_gb":{"type":"TypeInt","computed":true},"os_disk_snapshot_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sort_versions_by_semver":{"type":"TypeBool","optional":true,"default":false},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_region":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"regional_replica_count":{"type":"TypeInt","computed":true},"storage_account_type":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_shared_image_versions":{"schema":{"gallery_name":{"type":"TypeString","required":true},"image_name":{"type":"TypeString","required":true},"images":{"type":"TypeList","computed":true,"elem":{"schema":{"exclude_from_latest":{"type":"TypeBool","computed":true},"id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"managed_image_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"target_region":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"regional_replica_count":{"type":"TypeInt","computed":true},"storage_account_type":{"type":"TypeString","computed":true}}}}}}},"resource_group_name":{"type":"TypeString","required":true},"tags_filter":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_signalr_service":{"schema":{"aad_auth_enabled":{"type":"TypeBool","computed":true},"hostname":{"type":"TypeString","computed":true},"ip_address":{"type":"TypeString","computed":true},"local_auth_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"public_port":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"server_port":{"type":"TypeInt","computed":true},"serverless_connection_timeout_in_seconds":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tls_client_cert_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_site_recovery_fabric":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_site_recovery_protection_container":{"schema":{"name":{"type":"TypeString","required":true},"recovery_fabric_name":{"type":"TypeString","required":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_site_recovery_replication_policy":{"schema":{"application_consistent_snapshot_frequency_in_minutes":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"recovery_point_retention_in_minutes":{"type":"TypeInt","computed":true},"recovery_vault_name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_site_recovery_replication_recovery_plan":{"schema":{"azure_to_azure_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"primary_edge_zone":{"type":"TypeString","computed":true},"primary_zone":{"type":"TypeString","computed":true},"recovery_edge_zone":{"type":"TypeString","computed":true},"recovery_zone":{"type":"TypeString","computed":true}}}},"failover_deployment_model":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"recovery_group":{"type":"TypeSet","computed":true,"elem":{"schema":{"post_action":{"type":"TypeSet","computed":true,"elem":{"type":"TypeList","elem":{"schema":{"fabric_location":{"type":"TypeString","computed":true},"fail_over_directions":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"runbook_id":{"type":"TypeString","computed":true},"script_path":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}}},"pre_action":{"type":"TypeSet","computed":true,"elem":{"type":"TypeList","elem":{"schema":{"fabric_location":{"type":"TypeString","computed":true},"fail_over_directions":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"fail_over_types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"manual_action_instruction":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"runbook_id":{"type":"TypeString","computed":true},"script_path":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}}},"replicated_protected_items":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true}}}},"recovery_vault_id":{"type":"TypeString","required":true},"source_recovery_fabric_id":{"type":"TypeString","computed":true},"target_recovery_fabric_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_snapshot":{"schema":{"creation_option":{"type":"TypeString","computed":true},"disk_size_gb":{"type":"TypeInt","computed":true},"encryption_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_encryption_key":{"type":"TypeList","computed":true,"elem":{"schema":{"secret_url":{"type":"TypeString","computed":true},"source_vault_id":{"type":"TypeString","computed":true}}}},"enabled":{"type":"TypeBool","computed":true},"key_encryption_key":{"type":"TypeList","computed":true,"elem":{"schema":{"key_url":{"type":"TypeString","computed":true},"source_vault_id":{"type":"TypeString","computed":true}}}}}}},"name":{"type":"TypeString","required":true},"os_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"source_resource_id":{"type":"TypeString","computed":true},"source_uri":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","computed":true},"time_created":{"type":"TypeString","computed":true},"trusted_launch_enabled":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_source_control_token":{"schema":{"token":{"type":"TypeString","computed":true},"token_secret":{"type":"TypeString","computed":true},"type":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_spatial_anchors_account":{"schema":{"account_domain":{"type":"TypeString","computed":true},"account_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_spring_cloud_app":{"schema":{"fqdn":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"is_public":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"persistent_disk":{"type":"TypeList","computed":true,"elem":{"schema":{"mount_path":{"type":"TypeString","computed":true},"size_in_gb":{"type":"TypeInt","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"service_name":{"type":"TypeString","required":true},"tls_enabled":{"type":"TypeBool","computed":true},"url":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_spring_cloud_service":{"schema":{"config_server_git_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"http_basic_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"label":{"type":"TypeString","computed":true},"repository":{"type":"TypeList","computed":true,"elem":{"schema":{"http_basic_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"password":{"type":"TypeString","computed":true},"username":{"type":"TypeString","computed":true}}}},"label":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"pattern":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"search_paths":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ssh_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"host_key":{"type":"TypeString","computed":true},"host_key_algorithm":{"type":"TypeString","computed":true},"private_key":{"type":"TypeString","computed":true},"strict_host_key_checking_enabled":{"type":"TypeBool","computed":true}}}},"uri":{"type":"TypeString","computed":true}}}},"search_paths":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ssh_auth":{"type":"TypeList","computed":true,"elem":{"schema":{"host_key":{"type":"TypeString","computed":true},"host_key_algorithm":{"type":"TypeString","computed":true},"private_key":{"type":"TypeString","computed":true},"strict_host_key_checking_enabled":{"type":"TypeBool","computed":true}}}},"uri":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"required_network_traffic_rules":{"type":"TypeList","computed":true,"elem":{"schema":{"direction":{"type":"TypeString","computed":true},"fqdns":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_sql_database":{"schema":{"collation":{"type":"TypeString","computed":true},"default_secondary_location":{"type":"TypeString","computed":true},"edition":{"type":"TypeString","computed":true},"elastic_pool_name":{"type":"TypeString","computed":true},"failover_group_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"read_scale":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"server_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_sql_managed_instance":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"collation":{"type":"TypeString","computed":true},"dns_zone_partner_id":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"license_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"proxy_override":{"type":"TypeString","computed":true},"public_data_endpoint_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"storage_account_type":{"type":"TypeString","computed":true},"storage_size_in_gb":{"type":"TypeInt","computed":true},"subnet_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"timezone_id":{"type":"TypeString","computed":true},"vcores":{"type":"TypeInt","computed":true}},"timeouts":{"read":5}},"azurerm_sql_server":{"schema":{"administrator_login":{"type":"TypeString","computed":true},"fqdn":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_ssh_public_key":{"schema":{"name":{"type":"TypeString","required":true},"public_key":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_storage_account":{"schema":{"access_tier":{"type":"TypeString","computed":true},"account_kind":{"type":"TypeString","computed":true},"account_replication_type":{"type":"TypeString","computed":true},"account_tier":{"type":"TypeString","computed":true},"allow_nested_items_to_be_public":{"type":"TypeBool","computed":true},"azure_files_authentication":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_guid":{"type":"TypeString","computed":true},"domain_name":{"type":"TypeString","computed":true},"domain_sid":{"type":"TypeString","computed":true},"forest_name":{"type":"TypeString","computed":true},"netbios_domain_name":{"type":"TypeString","computed":true},"storage_sid":{"type":"TypeString","computed":true}}}},"directory_type":{"type":"TypeString","computed":true}}}},"custom_domain":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true}}}},"enable_https_traffic_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"infrastructure_encryption_enabled":{"type":"TypeBool","computed":true},"is_hns_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"min_tls_version":{"type":"TypeString","optional":true},"name":{"type":"TypeString","required":true},"nfsv3_enabled":{"type":"TypeBool","computed":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_blob_connection_string":{"type":"TypeString","computed":true},"primary_blob_endpoint":{"type":"TypeString","computed":true},"primary_blob_host":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"primary_dfs_endpoint":{"type":"TypeString","computed":true},"primary_dfs_host":{"type":"TypeString","computed":true},"primary_file_endpoint":{"type":"TypeString","computed":true},"primary_file_host":{"type":"TypeString","computed":true},"primary_location":{"type":"TypeString","computed":true},"primary_queue_endpoint":{"type":"TypeString","computed":true},"primary_queue_host":{"type":"TypeString","computed":true},"primary_table_endpoint":{"type":"TypeString","computed":true},"primary_table_host":{"type":"TypeString","computed":true},"primary_web_endpoint":{"type":"TypeString","computed":true},"primary_web_host":{"type":"TypeString","computed":true},"queue_encryption_key_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_blob_connection_string":{"type":"TypeString","computed":true},"secondary_blob_endpoint":{"type":"TypeString","computed":true},"secondary_blob_host":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"secondary_dfs_endpoint":{"type":"TypeString","computed":true},"secondary_dfs_host":{"type":"TypeString","computed":true},"secondary_file_endpoint":{"type":"TypeString","computed":true},"secondary_file_host":{"type":"TypeString","computed":true},"secondary_location":{"type":"TypeString","computed":true},"secondary_queue_endpoint":{"type":"TypeString","computed":true},"secondary_queue_host":{"type":"TypeString","computed":true},"secondary_table_endpoint":{"type":"TypeString","computed":true},"secondary_table_host":{"type":"TypeString","computed":true},"secondary_web_endpoint":{"type":"TypeString","computed":true},"secondary_web_host":{"type":"TypeString","computed":true},"table_encryption_key_type":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_storage_account_blob_container_sas":{"schema":{"cache_control":{"type":"TypeString","optional":true},"connection_string":{"type":"TypeString","required":true},"container_name":{"type":"TypeString","required":true},"content_disposition":{"type":"TypeString","optional":true},"content_encoding":{"type":"TypeString","optional":true},"content_language":{"type":"TypeString","optional":true},"content_type":{"type":"TypeString","optional":true},"expiry":{"type":"TypeString","required":true},"https_only":{"type":"TypeBool","optional":true,"default":true},"ip_address":{"type":"TypeString","optional":true},"permissions":{"type":"TypeList","required":true,"elem":{"schema":{"add":{"type":"TypeBool","required":true},"create":{"type":"TypeBool","required":true},"delete":{"type":"TypeBool","required":true},"list":{"type":"TypeBool","required":true},"read":{"type":"TypeBool","required":true},"write":{"type":"TypeBool","required":true}}},"maxItems":1},"sas":{"type":"TypeString","computed":true},"start":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_account_sas":{"schema":{"connection_string":{"type":"TypeString","required":true},"expiry":{"type":"TypeString","required":true},"https_only":{"type":"TypeBool","optional":true,"default":true},"ip_addresses":{"type":"TypeString","optional":true},"permissions":{"type":"TypeList","required":true,"elem":{"schema":{"add":{"type":"TypeBool","required":true},"create":{"type":"TypeBool","required":true},"delete":{"type":"TypeBool","required":true},"filter":{"type":"TypeBool","required":true},"list":{"type":"TypeBool","required":true},"process":{"type":"TypeBool","required":true},"read":{"type":"TypeBool","required":true},"tag":{"type":"TypeBool","required":true},"update":{"type":"TypeBool","required":true},"write":{"type":"TypeBool","required":true}}},"maxItems":1},"resource_types":{"type":"TypeList","required":true,"elem":{"schema":{"container":{"type":"TypeBool","required":true},"object":{"type":"TypeBool","required":true},"service":{"type":"TypeBool","required":true}}},"maxItems":1},"sas":{"type":"TypeString","computed":true},"services":{"type":"TypeList","required":true,"elem":{"schema":{"blob":{"type":"TypeBool","required":true},"file":{"type":"TypeBool","required":true},"queue":{"type":"TypeBool","required":true},"table":{"type":"TypeBool","required":true}}},"maxItems":1},"signed_version":{"type":"TypeString","optional":true,"default":"2017-07-29"},"start":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_blob":{"schema":{"access_tier":{"type":"TypeString","computed":true},"content_md5":{"type":"TypeString","computed":true},"content_type":{"type":"TypeString","computed":true},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"storage_container_name":{"type":"TypeString","required":true},"type":{"type":"TypeString","computed":true},"url":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_storage_container":{"schema":{"container_access_type":{"type":"TypeString","computed":true},"has_immutability_policy":{"type":"TypeBool","computed":true},"has_legal_hold":{"type":"TypeBool","computed":true},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_encryption_scope":{"schema":{"key_vault_key_id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"source":{"type":"TypeString","computed":true},"storage_account_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_management_policy":{"schema":{"rule":{"type":"TypeList","computed":true,"elem":{"schema":{"actions":{"type":"TypeList","computed":true,"elem":{"schema":{"base_blob":{"type":"TypeList","computed":true,"elem":{"schema":{"auto_tier_to_hot_from_cool_enabled":{"type":"TypeBool","computed":true},"delete_after_days_since_creation_greater_than":{"type":"TypeInt","computed":true},"delete_after_days_since_last_access_time_greater_than":{"type":"TypeInt","computed":true},"delete_after_days_since_modification_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_creation_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_last_access_time_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_modification_greater_than":{"type":"TypeInt","computed":true},"tier_to_cool_after_days_since_creation_greater_than":{"type":"TypeInt","computed":true},"tier_to_cool_after_days_since_last_access_time_greater_than":{"type":"TypeInt","computed":true},"tier_to_cool_after_days_since_modification_greater_than":{"type":"TypeInt","computed":true}}}},"snapshot":{"type":"TypeList","computed":true,"elem":{"schema":{"change_tier_to_archive_after_days_since_creation":{"type":"TypeInt","computed":true},"change_tier_to_cool_after_days_since_creation":{"type":"TypeInt","computed":true},"delete_after_days_since_creation_greater_than":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","computed":true}}}},"version":{"type":"TypeList","computed":true,"elem":{"schema":{"change_tier_to_archive_after_days_since_creation":{"type":"TypeInt","computed":true},"change_tier_to_cool_after_days_since_creation":{"type":"TypeInt","computed":true},"delete_after_days_since_creation":{"type":"TypeInt","computed":true},"tier_to_archive_after_days_since_last_tier_change_greater_than":{"type":"TypeInt","computed":true}}}}}}},"enabled":{"type":"TypeBool","computed":true},"filters":{"type":"TypeList","computed":true,"elem":{"schema":{"blob_types":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"match_blob_index_tag":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"operation":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"prefix_match":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"name":{"type":"TypeString","computed":true}}}},"storage_account_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_share":{"schema":{"acl":{"type":"TypeList","optional":true,"elem":{"schema":{"access_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"expiry":{"type":"TypeString","computed":true},"permissions":{"type":"TypeString","computed":true},"start":{"type":"TypeString","computed":true}}}},"id":{"type":"TypeString","computed":true}}}},"metadata":{"type":"TypeMap","optional":true,"computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"quota":{"type":"TypeInt","computed":true},"resource_manager_id":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_sync":{"schema":{"incoming_traffic_policy":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_storage_sync_group":{"schema":{"name":{"type":"TypeString","required":true},"storage_sync_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_storage_table_entity":{"schema":{"entity":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"partition_key":{"type":"TypeString","required":true},"row_key":{"type":"TypeString","required":true},"storage_account_name":{"type":"TypeString","required":true},"table_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_stream_analytics_job":{"schema":{"compatibility_level":{"type":"TypeString","computed":true},"data_locale":{"type":"TypeString","computed":true},"events_late_arrival_max_delay_in_seconds":{"type":"TypeInt","computed":true},"events_out_of_order_max_delay_in_seconds":{"type":"TypeInt","computed":true},"events_out_of_order_policy":{"type":"TypeString","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"job_id":{"type":"TypeString","computed":true},"last_output_time":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"output_error_policy":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"start_mode":{"type":"TypeString","computed":true},"start_time":{"type":"TypeString","computed":true},"streaming_units":{"type":"TypeInt","computed":true},"transformation_query":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_subnet":{"schema":{"address_prefix":{"type":"TypeString","computed":true},"address_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enforce_private_link_endpoint_network_policies":{"type":"TypeBool","computed":true},"enforce_private_link_service_network_policies":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"network_security_group_id":{"type":"TypeString","computed":true},"private_endpoint_network_policies_enabled":{"type":"TypeBool","computed":true},"private_link_service_network_policies_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"route_table_id":{"type":"TypeString","computed":true},"service_endpoints":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_network_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_subscription":{"schema":{"display_name":{"type":"TypeString","computed":true},"location_placement_id":{"type":"TypeString","computed":true},"quota_id":{"type":"TypeString","computed":true},"spending_limit":{"type":"TypeString","computed":true},"state":{"type":"TypeString","computed":true},"subscription_id":{"type":"TypeString","optional":true,"computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_subscription_template_deployment":{"schema":{"name":{"type":"TypeString","required":true},"output_content":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_subscriptions":{"schema":{"display_name_contains":{"type":"TypeString","optional":true},"display_name_prefix":{"type":"TypeString","optional":true},"subscriptions":{"type":"TypeList","computed":true,"elem":{"schema":{"display_name":{"type":"TypeString","computed":true},"id":{"type":"TypeString","computed":true},"location_placement_id":{"type":"TypeString","computed":true},"quota_id":{"type":"TypeString","computed":true},"spending_limit":{"type":"TypeString","computed":true},"state":{"type":"TypeString","computed":true},"subscription_id":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}}}}},"timeouts":{"read":5}},"azurerm_synapse_workspace":{"schema":{"connectivity_endpoints":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_template_spec_version":{"schema":{"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"template_body":{"type":"TypeString","computed":true},"version":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_tenant_template_deployment":{"schema":{"name":{"type":"TypeString","required":true},"output_content":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_traffic_manager_geographical_location":{"schema":{"name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_traffic_manager_profile":{"schema":{"dns_config":{"type":"TypeList","computed":true,"elem":{"schema":{"relative_name":{"type":"TypeString","computed":true},"ttl":{"type":"TypeInt","computed":true}}}},"fqdn":{"type":"TypeString","computed":true},"monitor_config":{"type":"TypeList","computed":true,"elem":{"schema":{"custom_header":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"value":{"type":"TypeString","computed":true}}}},"expected_status_code_ranges":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"interval_in_seconds":{"type":"TypeInt","computed":true},"path":{"type":"TypeString","computed":true},"port":{"type":"TypeInt","computed":true},"protocol":{"type":"TypeString","computed":true},"timeout_in_seconds":{"type":"TypeInt","computed":true},"tolerated_number_of_failures":{"type":"TypeInt","computed":true}}}},"name":{"type":"TypeString","required":true},"profile_status":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}},"traffic_routing_method":{"type":"TypeString","computed":true},"traffic_view_enabled":{"type":"TypeBool","optional":true}},"timeouts":{"read":5}},"azurerm_user_assigned_identity":{"schema":{"client_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"principal_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_desktop_host_pool":{"schema":{"custom_rdp_properties":{"type":"TypeString","computed":true},"description":{"type":"TypeString","computed":true},"friendly_name":{"type":"TypeString","computed":true},"load_balancer_type":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"maximum_sessions_allowed":{"type":"TypeInt","computed":true},"name":{"type":"TypeString","required":true},"personal_desktop_assignment_type":{"type":"TypeString","computed":true},"preferred_app_group_type":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"scheduled_agent_updates":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"day_of_week":{"type":"TypeString","computed":true},"hour_of_day":{"type":"TypeInt","computed":true}}}},"timezone":{"type":"TypeString","computed":true},"use_session_host_timezone":{"type":"TypeBool","computed":true}}}},"start_vm_on_connect":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"validate_environment":{"type":"TypeBool","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_hub":{"schema":{"address_prefix":{"type":"TypeString","computed":true},"default_route_table_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_router_asn":{"type":"TypeInt","computed":true},"virtual_router_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_wan_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_hub_connection":{"schema":{"internet_security_enabled":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","required":true},"remote_virtual_network_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"routing":{"type":"TypeList","computed":true,"elem":{"schema":{"associated_route_table_id":{"type":"TypeString","computed":true},"propagated_route_table":{"type":"TypeList","computed":true,"elem":{"schema":{"labels":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"route_table_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"static_vnet_route":{"type":"TypeList","computed":true,"elem":{"schema":{"address_prefixes":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"next_hop_ip_address":{"type":"TypeString","computed":true}}}}}}},"virtual_hub_id":{"type":"TypeString","computed":true},"virtual_hub_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_virtual_hub_route_table":{"schema":{"labels":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"route":{"type":"TypeList","computed":true,"elem":{"schema":{"destinations":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"destinations_type":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"next_hop":{"type":"TypeString","computed":true},"next_hop_type":{"type":"TypeString","computed":true}}}},"virtual_hub_id":{"type":"TypeString","computed":true},"virtual_hub_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_virtual_machine":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"power_state":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_virtual_machine_scale_set":{"schema":{"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"instances":{"type":"TypeList","computed":true,"elem":{"schema":{"computer_name":{"type":"TypeString","computed":true},"instance_id":{"type":"TypeString","computed":true},"latest_model_applied":{"type":"TypeBool","computed":true},"name":{"type":"TypeString","computed":true},"power_state":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"public_ip_address":{"type":"TypeString","computed":true},"public_ip_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"virtual_machine_id":{"type":"TypeString","computed":true},"zone":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_interface":{"type":"TypeList","computed":true,"elem":{"schema":{"dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"enable_accelerated_networking":{"type":"TypeBool","computed":true},"enable_ip_forwarding":{"type":"TypeBool","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"application_gateway_backend_address_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"application_security_group_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancer_backend_address_pool_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"load_balancer_inbound_nat_rules_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"name":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true},"public_ip_address":{"type":"TypeList","computed":true,"elem":{"schema":{"domain_name_label":{"type":"TypeString","computed":true},"idle_timeout_in_minutes":{"type":"TypeInt","computed":true},"ip_tag":{"type":"TypeList","computed":true,"elem":{"schema":{"tag":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"public_ip_prefix_id":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"subnet_id":{"type":"TypeString","computed":true},"version":{"type":"TypeString","computed":true}}}},"name":{"type":"TypeString","computed":true},"network_security_group_id":{"type":"TypeString","computed":true},"primary":{"type":"TypeBool","computed":true}}}},"resource_group_name":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_virtual_network":{"schema":{"address_space":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"dns_servers":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"guid":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"subnets":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vnet_peerings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vnet_peerings_addresses":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_virtual_network_gateway":{"schema":{"active_active":{"type":"TypeBool","computed":true},"bgp_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","computed":true},"peer_weight":{"type":"TypeInt","computed":true},"peering_address":{"type":"TypeString","computed":true}}}},"custom_route":{"type":"TypeList","computed":true,"elem":{"schema":{"address_prefixes":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"default_local_network_gateway_id":{"type":"TypeString","computed":true},"enable_bgp":{"type":"TypeBool","computed":true},"generation":{"type":"TypeString","computed":true},"ip_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"id":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"private_ip_address":{"type":"TypeString","computed":true},"private_ip_address_allocation":{"type":"TypeString","computed":true},"public_ip_address_id":{"type":"TypeString","computed":true},"subnet_id":{"type":"TypeString","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"private_ip_address_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"type":{"type":"TypeString","computed":true},"vpn_client_configuration":{"type":"TypeList","computed":true,"elem":{"schema":{"aad_audience":{"type":"TypeString","computed":true},"aad_issuer":{"type":"TypeString","computed":true},"aad_tenant":{"type":"TypeString","computed":true},"address_space":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"radius_server_address":{"type":"TypeString","computed":true},"radius_server_secret":{"type":"TypeString","computed":true},"revoked_certificate":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"thumbprint":{"type":"TypeString","computed":true}}}},"root_certificate":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","computed":true},"public_cert_data":{"type":"TypeString","computed":true}}}},"vpn_client_protocols":{"type":"TypeSet","computed":true,"elem":{"type":"TypeString"}}}}},"vpn_type":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_network_gateway_connection":{"schema":{"authorization_key":{"type":"TypeString","computed":true},"connection_protocol":{"type":"TypeString","computed":true},"dpd_timeout_seconds":{"type":"TypeInt","computed":true},"egress_bytes_transferred":{"type":"TypeInt","computed":true},"enable_bgp":{"type":"TypeBool","computed":true},"express_route_circuit_id":{"type":"TypeString","computed":true},"express_route_gateway_bypass":{"type":"TypeBool","computed":true},"ingress_bytes_transferred":{"type":"TypeInt","computed":true},"ipsec_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"dh_group":{"type":"TypeString","computed":true},"ike_encryption":{"type":"TypeString","computed":true},"ike_integrity":{"type":"TypeString","computed":true},"ipsec_encryption":{"type":"TypeString","computed":true},"ipsec_integrity":{"type":"TypeString","computed":true},"pfs_group":{"type":"TypeString","computed":true},"sa_datasize":{"type":"TypeInt","computed":true},"sa_lifetime":{"type":"TypeInt","computed":true}}}},"local_azure_ip_address_enabled":{"type":"TypeBool","computed":true},"local_network_gateway_id":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"peer_virtual_network_gateway_id":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"resource_guid":{"type":"TypeString","computed":true},"routing_weight":{"type":"TypeInt","computed":true},"shared_key":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"traffic_selector_policy":{"type":"TypeList","computed":true,"elem":{"schema":{"local_address_cidrs":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"remote_address_cidrs":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"type":{"type":"TypeString","computed":true},"use_policy_based_traffic_selectors":{"type":"TypeBool","computed":true},"virtual_network_gateway_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_virtual_wan":{"schema":{"allow_branch_to_branch_traffic":{"type":"TypeBool","computed":true},"disable_vpn_encryption":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"office365_local_breakout_category":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_hub_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"vpn_site_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_vmware_private_cloud":{"schema":{"circuit":{"type":"TypeList","computed":true,"elem":{"schema":{"express_route_id":{"type":"TypeString","computed":true},"express_route_private_peering_id":{"type":"TypeString","computed":true},"primary_subnet_cidr":{"type":"TypeString","computed":true},"secondary_subnet_cidr":{"type":"TypeString","computed":true}}}},"hcx_cloud_manager_endpoint":{"type":"TypeString","computed":true},"internet_connection_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"management_cluster":{"type":"TypeList","computed":true,"elem":{"schema":{"hosts":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"id":{"type":"TypeInt","computed":true},"size":{"type":"TypeInt","computed":true}}}},"management_subnet_cidr":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"network_subnet_cidr":{"type":"TypeString","computed":true},"nsxt_certificate_thumbprint":{"type":"TypeString","computed":true},"nsxt_manager_endpoint":{"type":"TypeString","computed":true},"provisioning_subnet_cidr":{"type":"TypeString","computed":true},"resource_group_name":{"type":"TypeString","required":true},"sku_name":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"vcenter_certificate_thumbprint":{"type":"TypeString","computed":true},"vcsa_endpoint":{"type":"TypeString","computed":true},"vmotion_subnet_cidr":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_vpn_gateway":{"schema":{"bgp_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"asn":{"type":"TypeInt","computed":true},"bgp_peering_address":{"type":"TypeString","computed":true},"instance_0_bgp_peering_address":{"type":"TypeList","computed":true,"elem":{"schema":{"custom_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"default_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_id":{"type":"TypeString","computed":true},"tunnel_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"instance_1_bgp_peering_address":{"type":"TypeList","computed":true,"elem":{"schema":{"custom_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"default_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"ip_configuration_id":{"type":"TypeString","computed":true},"tunnel_ips":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"peer_weight":{"type":"TypeInt","computed":true}}}},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"scale_unit":{"type":"TypeInt","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_hub_id":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_web_application_firewall_policy":{"schema":{"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"resource_group_name":{"type":"TypeString","required":true},"tags":{"type":"TypeMap","optional":true,"elem":{"type":"TypeString"}}},"timeouts":{"read":5}},"azurerm_web_pubsub":{"schema":{"aad_auth_enabled":{"type":"TypeBool","computed":true},"capacity":{"type":"TypeInt","computed":true},"external_ip":{"type":"TypeString","computed":true},"hostname":{"type":"TypeString","computed":true},"local_auth_enabled":{"type":"TypeBool","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"primary_access_key":{"type":"TypeString","computed":true},"primary_connection_string":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"public_port":{"type":"TypeInt","computed":true},"resource_group_name":{"type":"TypeString","required":true},"secondary_access_key":{"type":"TypeString","computed":true},"secondary_connection_string":{"type":"TypeString","computed":true},"server_port":{"type":"TypeInt","computed":true},"sku":{"type":"TypeString","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tls_client_cert_enabled":{"type":"TypeBool","computed":true},"version":{"type":"TypeString","computed":true}},"timeouts":{"read":5}},"azurerm_web_pubsub_private_link_resource":{"schema":{"shared_private_link_resource_types":{"type":"TypeList","computed":true,"elem":{"schema":{"description":{"type":"TypeString","computed":true},"subresource_name":{"type":"TypeString","computed":true}}}},"web_pubsub_id":{"type":"TypeString","required":true}},"timeouts":{"read":5}},"azurerm_windows_function_app":{"schema":{"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"The list of Allowed audience values considered when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret for the Client ID.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true}}}},"additional_login_parameters":{"type":"TypeMap","description":"The map of Login Parameters sent to the OpenID Connect authorization endpoint when a user logs in.","computed":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","description":"The default authentication provider used when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","description":"Is the Authentication / Authorization feature enabled?","computed":true},"facebook":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret":{"type":"TypeString","description":"The App Secret of the Facebook app used for Facebook Login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"github":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret of the GitHub app used for GitHub Login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret":{"type":"TypeString","description":"The client secret associated with the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes that requested as part of Google Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"issuer":{"type":"TypeString","description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens.","computed":true},"microsoft":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret":{"type":"TypeString","description":"The OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"runtime_version":{"type":"TypeString","description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Are platform-specific security tokens that are obtained during login flows durably stored?","computed":true},"twitter":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret":{"type":"TypeString","description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_client_action":{"type":"TypeString","description":"The action taken when an unauthenticated client attempts to access the app.","computed":true}}}},"auth_settings_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret_certificate_thumbprint":{"type":"TypeString","description":"The thumbprint of the certificate used for signing purposes.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true},"jwt_allowed_client_applications":{"type":"TypeList","description":"A list of Allowed Client Applications in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","description":"A list of Allowed Groups in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","description":"The Azure Tenant URI for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`","computed":true},"www_authentication_disabled":{"type":"TypeBool","description":"Is the www-authenticate provider omitted from the request?","computed":true}}}},"apple_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Apple web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Apple Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Apple Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"auth_enabled":{"type":"TypeBool","description":"Is the AuthV2 Settings be enabled.","computed":true},"azure_static_web_app_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with Azure Static Web App Authentication.","computed":true}}}},"config_file_path":{"type":"TypeString","description":"The path to the App Auth settings.","computed":true},"custom_oidc_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`","computed":true},"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with this Custom OIDC.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","description":"The name of the Custom OIDC Authentication Provider.","computed":true},"name_claim_type":{"type":"TypeString","description":"The name of the claim that contains the users name.","computed":true},"openid_configuration_endpoint":{"type":"TypeString","description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider.","computed":true},"scopes":{"type":"TypeList","description":"The list of the scopes that should be requested while authenticating.","computed":true,"elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","description":"The Default Authentication Provider used when the `unauthenticated_action` is set to `RedirectToLoginPage`.","computed":true},"excluded_paths":{"type":"TypeList","description":"The paths which are excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","computed":true,"elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"graph_api_version":{"type":"TypeString","description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"forward_proxy_convention":{"type":"TypeString","description":"The convention used to determine the url of the request made.","computed":true},"forward_proxy_custom_host_header_name":{"type":"TypeString","description":"The name of the header containing the host of the request.","computed":true},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","description":"The name of the header containing the scheme of the request.","computed":true},"github_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"http_route_api_prefix":{"type":"TypeString","description":"The prefix that precedes all the authentication and authorisation paths.","computed":true},"login":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","computed":true,"elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","computed":true},"cookie_expiration_time":{"type":"TypeString","description":"The time after the request is made when the session cookie will expire.","computed":true},"logout_endpoint":{"type":"TypeString","description":"The endpoint to which logout requests are made.","computed":true},"nonce_expiration_time":{"type":"TypeString","description":"The time after the request is made when the nonce will expire.","computed":true},"preserve_url_fragments_for_logins":{"type":"TypeBool","description":"Are the fragments from the request be preserved after the login request is made.","computed":true},"token_refresh_extension_time":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Is the Token Store configuration Enabled.","computed":true},"token_store_path":{"type":"TypeString","description":"The directory path in the App Filesystem in which the tokens are stored.","computed":true},"token_store_sas_setting_name":{"type":"TypeString","description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens.","computed":true},"validate_nonce":{"type":"TypeBool","description":"Is the nonce be validated while completing the login flow.","computed":true}}}},"microsoft_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"require_authentication":{"type":"TypeBool","description":"Is the authentication flow used for all requests.","computed":true},"require_https":{"type":"TypeBool","description":"Is HTTPS required on connections?","computed":true},"runtime_version":{"type":"TypeString","description":"The Runtime Version of the Authentication and Authorisation feature of this App.","computed":true},"twitter_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_action":{"type":"TypeString","computed":true}}}},"backup":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","description":"Is this backup job enabled?","computed":true},"name":{"type":"TypeString","description":"The name of this Backup.","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","description":"How often the backup should is executed in multiples of the `frequency_unit`.","computed":true},"frequency_unit":{"type":"TypeString","description":"The unit of time for how often the backup takes place.","computed":true},"keep_at_least_one_backup":{"type":"TypeBool","description":"Does the service keep at least one backup, regardless of age of backup.","computed":true},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","description":"After how many days are backups deleted.","computed":true},"start_time":{"type":"TypeString","description":"When the schedule should start working in RFC-3339 format.","computed":true}}}},"storage_account_url":{"type":"TypeString","description":"The SAS URL to the container.","computed":true}}}},"builtin_logging_enabled":{"type":"TypeBool","computed":true},"client_certificate_enabled":{"type":"TypeBool","computed":true},"client_certificate_exclusion_paths":{"type":"TypeString","description":"Paths to exclude when using client certificates, separated by ;","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of this Connection.","computed":true},"type":{"type":"TypeString","description":"The type of database.","computed":true},"value":{"type":"TypeString","description":"The connection string value.","computed":true}}}},"content_share_force_disabled":{"type":"TypeBool","computed":true},"custom_domain_verification_id":{"type":"TypeString","computed":true},"daily_memory_time_quota":{"type":"TypeInt","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"functions_extension_version":{"type":"TypeString","computed":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_plan_id":{"type":"TypeString","computed":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"api_definition_url":{"type":"TypeString","computed":true},"api_management_api_id":{"type":"TypeString","computed":true},"app_command_line":{"type":"TypeString","computed":true},"app_scale_limit":{"type":"TypeInt","computed":true},"app_service_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"disk_quota_mb":{"type":"TypeInt","computed":true},"retention_period_days":{"type":"TypeInt","computed":true}}}},"application_insights_connection_string":{"type":"TypeString","computed":true},"application_insights_key":{"type":"TypeString","computed":true},"application_stack":{"type":"TypeList","computed":true,"elem":{"schema":{"dotnet_version":{"type":"TypeString","computed":true},"java_version":{"type":"TypeString","computed":true},"node_version":{"type":"TypeString","computed":true},"powershell_core_version":{"type":"TypeString","computed":true},"use_custom_runtime":{"type":"TypeBool","computed":true},"use_dotnet_isolated_runtime":{"type":"TypeBool","computed":true}}}},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeList","description":"The list of origins that are allowed to make cross-origin calls.","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","description":"Are credentials allowed in CORS requests?","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"elastic_instance_minimum":{"type":"TypeInt","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_eviction_time_in_min":{"type":"TypeInt","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"load_balancing_mode":{"type":"TypeString","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"pre_warmed_instance_count":{"type":"TypeInt","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"runtime_scale_monitoring_enabled":{"type":"TypeBool","computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"scm_minimum_tls_version":{"type":"TypeString","computed":true},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker":{"type":"TypeBool","computed":true},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"windows_fx_version":{"type":"TypeString","computed":true},"worker_count":{"type":"TypeInt","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connection_string_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"storage_account_access_key":{"type":"TypeString","computed":true},"storage_account_name":{"type":"TypeString","computed":true},"storage_key_vault_secret_id":{"type":"TypeString","description":"The Key Vault Secret ID, including version, that contains the Connection String used to connect to the storage account for this Function App.","computed":true},"storage_uses_managed_identity":{"type":"TypeBool","computed":true},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":10}},"azurerm_windows_web_app":{"schema":{"app_settings":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"auth_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"The list of Allowed audience values considered when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret for the Client ID.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true}}}},"additional_login_parameters":{"type":"TypeMap","description":"The map of Login Parameters sent to the OpenID Connect authorization endpoint when a user logs in.","computed":true,"elem":{"type":"TypeString"}},"allowed_external_redirect_urls":{"type":"TypeList","description":"Specifies a list of External URLs that can be redirected to as part of logging in or logging out of the Windows Web App.","computed":true,"elem":{"type":"TypeString"}},"default_provider":{"type":"TypeString","description":"The default authentication provider used when multiple providers are configured. Possible values include: `AzureActiveDirectory`, `Facebook`, `Google`, `MicrosoftAccount`, `Twitter`, `Github`.","computed":true},"enabled":{"type":"TypeBool","description":"Is the Authentication / Authorization feature enabled?","computed":true},"facebook":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret":{"type":"TypeString","description":"The App Secret of the Facebook app used for Facebook Login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"github":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret":{"type":"TypeString","description":"The Client Secret of the GitHub app used for GitHub Login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret":{"type":"TypeString","description":"The client secret associated with the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes that requested as part of Google Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"issuer":{"type":"TypeString","description":"The OpenID Connect Issuer URI that represents the entity which issues access tokens.","computed":true},"microsoft":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret":{"type":"TypeString","description":"The OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"oauth_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"runtime_version":{"type":"TypeString","description":"The RuntimeVersion of the Authentication / Authorization feature in use.","computed":true},"token_refresh_extension_hours":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Are platform-specific security tokens that are obtained during login flows durably stored?","computed":true},"twitter":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret":{"type":"TypeString","description":"The OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_client_action":{"type":"TypeString","description":"The action taken when an unauthenticated client attempts to access the app.","computed":true}}}},"auth_settings_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"active_directory_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_applications":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed audience values to consider when validating JWTs issued by Azure Active Directory.","computed":true,"elem":{"type":"TypeString"}},"allowed_groups":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"allowed_identities":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The ID of the Client to use to authenticate with Azure Active Directory.","computed":true},"client_secret_certificate_thumbprint":{"type":"TypeString","description":"The thumbprint of the certificate used for signing purposes.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the client secret of the Client.","computed":true},"jwt_allowed_client_applications":{"type":"TypeList","description":"A list of Allowed Client Applications in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"jwt_allowed_groups":{"type":"TypeList","description":"A list of Allowed Groups in the JWT Claim.","computed":true,"elem":{"type":"TypeString"}},"login_parameters":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"tenant_auth_endpoint":{"type":"TypeString","description":"The Azure Tenant URI for the Authenticating Tenant. e.g. `https://login.microsoftonline.com/v2.0/{tenant-guid}/`","computed":true},"www_authentication_disabled":{"type":"TypeBool","description":"Is the www-authenticate provider omitted from the request?","computed":true}}}},"apple_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Apple web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Apple Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of Apple Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"auth_enabled":{"type":"TypeBool","description":"Is the AuthV2 Settings be enabled.","computed":true},"azure_static_web_app_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with Azure Static Web App Authentication.","computed":true}}}},"config_file_path":{"type":"TypeString","description":"The path to the App Auth settings.","computed":true},"custom_oidc_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"authorisation_endpoint":{"type":"TypeString","description":"The endpoint to make the Authorisation Request.","computed":true},"certification_uri":{"type":"TypeString","description":"The endpoint that provides the keys necessary to validate the token.","computed":true},"client_credential_method":{"type":"TypeString","description":"The Client Credential Method used. Currently the only supported value is `ClientSecretPost`","computed":true},"client_id":{"type":"TypeString","description":"The ID of the Client used to authenticate with this Custom OIDC.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The App Setting name that contains the secret for this Custom OIDC Client.","computed":true},"issuer_endpoint":{"type":"TypeString","description":"The endpoint that issued the Token.","computed":true},"name":{"type":"TypeString","description":"The name of the Custom OIDC Authentication Provider.","computed":true},"name_claim_type":{"type":"TypeString","description":"The name of the claim that contains the users name.","computed":true},"openid_configuration_endpoint":{"type":"TypeString","description":"The endpoint that contains all the configuration endpoints for this Custom OIDC provider.","computed":true},"scopes":{"type":"TypeList","description":"The list of the scopes that should be requested while authenticating.","computed":true,"elem":{"type":"TypeString"}},"token_endpoint":{"type":"TypeString","description":"The endpoint used to request a Token.","computed":true}}}},"default_provider":{"type":"TypeString","description":"The Default Authentication Provider used when the `unauthenticated_action` is set to `RedirectToLoginPage`.","computed":true},"excluded_paths":{"type":"TypeList","description":"The paths which are excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`.","computed":true,"elem":{"type":"TypeString"}},"facebook_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"app_id":{"type":"TypeString","description":"The App ID of the Facebook app used for login.","computed":true},"app_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `app_secret` value used for Facebook Login.","computed":true},"graph_api_version":{"type":"TypeString","description":"The version of the Facebook API to be used while logging in.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes to be requested as part of Facebook Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"forward_proxy_convention":{"type":"TypeString","description":"The convention used to determine the url of the request made.","computed":true},"forward_proxy_custom_host_header_name":{"type":"TypeString","description":"The name of the header containing the host of the request.","computed":true},"forward_proxy_custom_scheme_header_name":{"type":"TypeString","description":"The name of the header containing the scheme of the request.","computed":true},"github_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"client_id":{"type":"TypeString","description":"The ID of the GitHub app used for login.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for GitHub Login.","computed":true},"login_scopes":{"type":"TypeList","description":"Specifies a list of OAuth 2.0 scopes that will be requested as part of GitHub Login authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"google_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OpenID Connect Client ID for the Google web application.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the `client_secret` value used for Google Login.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of OAuth 2.0 scopes requested as part of Google Sign-In authentication. If not specified, \"openid\", \"profile\", and \"email\" are used as default scopes.","computed":true,"elem":{"type":"TypeString"}}}}},"http_route_api_prefix":{"type":"TypeString","description":"The prefix that precedes all the authentication and authorisation paths.","computed":true},"login":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_external_redirect_urls":{"type":"TypeList","description":"External URLs that can be redirected to as part of logging in or logging out of the app. This is an advanced setting typically only needed by Windows Store application backends. **Note:** URLs within the current domain are always implicitly allowed.","computed":true,"elem":{"type":"TypeString"}},"cookie_expiration_convention":{"type":"TypeString","computed":true},"cookie_expiration_time":{"type":"TypeString","description":"The time after the request is made when the session cookie will expire.","computed":true},"logout_endpoint":{"type":"TypeString","description":"The endpoint to which logout requests are made.","computed":true},"nonce_expiration_time":{"type":"TypeString","description":"The time after the request is made when the nonce will expire.","computed":true},"preserve_url_fragments_for_logins":{"type":"TypeBool","description":"Are the fragments from the request be preserved after the login request is made.","computed":true},"token_refresh_extension_time":{"type":"TypeFloat","description":"The number of hours after session token expiration that a session token can be used to call the token refresh API.","computed":true},"token_store_enabled":{"type":"TypeBool","description":"Is the Token Store configuration Enabled.","computed":true},"token_store_path":{"type":"TypeString","description":"The directory path in the App Filesystem in which the tokens are stored.","computed":true},"token_store_sas_setting_name":{"type":"TypeString","description":"The name of the app setting which contains the SAS URL of the blob storage containing the tokens.","computed":true},"validate_nonce":{"type":"TypeBool","description":"Is the nonce be validated while completing the login flow.","computed":true}}}},"microsoft_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_audiences":{"type":"TypeList","description":"Specifies a list of Allowed Audiences that will be requested as part of Microsoft Sign-In authentication.","computed":true,"elem":{"type":"TypeString"}},"client_id":{"type":"TypeString","description":"The OAuth 2.0 client ID that was created for the app used for authentication.","computed":true},"client_secret_setting_name":{"type":"TypeString","description":"The app setting name containing the OAuth 2.0 client secret that was created for the app used for authentication.","computed":true},"login_scopes":{"type":"TypeList","description":"The list of Login scopes that will be requested as part of Microsoft Account authentication.","computed":true,"elem":{"type":"TypeString"}}}}},"require_authentication":{"type":"TypeBool","description":"Is the authentication flow used for all requests.","computed":true},"require_https":{"type":"TypeBool","description":"Is HTTPS required on connections?","computed":true},"runtime_version":{"type":"TypeString","description":"The Runtime Version of the Authentication and Authorisation feature of this App.","computed":true},"twitter_v2":{"type":"TypeList","computed":true,"elem":{"schema":{"consumer_key":{"type":"TypeString","description":"The OAuth 1.0a consumer key of the Twitter application used for sign-in.","computed":true},"consumer_secret_setting_name":{"type":"TypeString","description":"The app setting name that contains the OAuth 1.0a consumer secret of the Twitter application used for sign-in.","computed":true}}}},"unauthenticated_action":{"type":"TypeString","computed":true}}}},"backup":{"type":"TypeList","computed":true,"elem":{"schema":{"enabled":{"type":"TypeBool","description":"Is this backup job enabled?","computed":true},"name":{"type":"TypeString","description":"The name of this Backup.","computed":true},"schedule":{"type":"TypeList","computed":true,"elem":{"schema":{"frequency_interval":{"type":"TypeInt","description":"How often the backup should is executed in multiples of the `frequency_unit`.","computed":true},"frequency_unit":{"type":"TypeString","description":"The unit of time for how often the backup takes place.","computed":true},"keep_at_least_one_backup":{"type":"TypeBool","description":"Does the service keep at least one backup, regardless of age of backup.","computed":true},"last_execution_time":{"type":"TypeString","description":"The time the backup was last attempted.","computed":true},"retention_period_days":{"type":"TypeInt","description":"After how many days are backups deleted.","computed":true},"start_time":{"type":"TypeString","description":"When the schedule should start working in RFC-3339 format.","computed":true}}}},"storage_account_url":{"type":"TypeString","description":"The SAS URL to the container.","computed":true}}}},"client_affinity_enabled":{"type":"TypeBool","computed":true},"client_certificate_enabled":{"type":"TypeBool","computed":true},"client_certificate_exclusion_paths":{"type":"TypeString","description":"Paths to exclude when using client certificates, separated by ;","computed":true},"client_certificate_mode":{"type":"TypeString","computed":true},"connection_string":{"type":"TypeSet","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The name of this Connection.","computed":true},"type":{"type":"TypeString","description":"The type of database.","computed":true},"value":{"type":"TypeString","description":"The connection string value.","computed":true}}}},"custom_domain_verification_id":{"type":"TypeString","computed":true},"default_hostname":{"type":"TypeString","computed":true},"enabled":{"type":"TypeBool","computed":true},"hosting_environment_id":{"type":"TypeString","computed":true},"https_only":{"type":"TypeBool","computed":true},"identity":{"type":"TypeList","computed":true,"elem":{"schema":{"identity_ids":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"principal_id":{"type":"TypeString","computed":true},"tenant_id":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"kind":{"type":"TypeString","computed":true},"location":{"type":"TypeString","computed":true},"logs":{"type":"TypeList","computed":true,"elem":{"schema":{"application_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","computed":true,"elem":{"schema":{"level":{"type":"TypeString","computed":true},"retention_in_days":{"type":"TypeInt","computed":true},"sas_url":{"type":"TypeString","computed":true}}}},"file_system_level":{"type":"TypeString","computed":true}}}},"detailed_error_messages":{"type":"TypeBool","computed":true},"failed_request_tracing":{"type":"TypeBool","computed":true},"http_logs":{"type":"TypeList","computed":true,"elem":{"schema":{"azure_blob_storage":{"type":"TypeList","computed":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","computed":true},"sas_url":{"type":"TypeString","computed":true}}}},"file_system":{"type":"TypeList","computed":true,"elem":{"schema":{"retention_in_days":{"type":"TypeInt","computed":true},"retention_in_mb":{"type":"TypeInt","computed":true}}}}}}}}}},"name":{"type":"TypeString","required":true},"outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"outbound_ip_addresses":{"type":"TypeString","computed":true},"possible_outbound_ip_address_list":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"possible_outbound_ip_addresses":{"type":"TypeString","computed":true},"public_network_access_enabled":{"type":"TypeBool","computed":true},"resource_group_name":{"type":"TypeString","required":true},"service_plan_id":{"type":"TypeString","computed":true},"site_config":{"type":"TypeList","computed":true,"elem":{"schema":{"always_on":{"type":"TypeBool","computed":true},"api_definition_url":{"type":"TypeString","computed":true},"api_management_api_id":{"type":"TypeString","computed":true},"app_command_line":{"type":"TypeString","computed":true},"application_stack":{"type":"TypeList","computed":true,"elem":{"schema":{"current_stack":{"type":"TypeString","computed":true},"docker_container_name":{"type":"TypeString","computed":true},"docker_container_registry":{"type":"TypeString","computed":true},"docker_container_tag":{"type":"TypeString","computed":true},"docker_image_name":{"type":"TypeString","computed":true},"docker_registry_password":{"type":"TypeString","computed":true},"docker_registry_url":{"type":"TypeString","computed":true},"docker_registry_username":{"type":"TypeString","computed":true},"dotnet_core_version":{"type":"TypeString","computed":true},"dotnet_version":{"type":"TypeString","computed":true},"java_container":{"type":"TypeString","computed":true},"java_container_version":{"type":"TypeString","computed":true},"java_embedded_server_enabled":{"type":"TypeBool","computed":true},"java_version":{"type":"TypeString","computed":true},"node_version":{"type":"TypeString","computed":true},"php_version":{"type":"TypeString","computed":true},"python":{"type":"TypeBool","computed":true},"python_version":{"type":"TypeString","computed":true},"tomcat_version":{"type":"TypeString","computed":true}}}},"auto_heal_enabled":{"type":"TypeBool","computed":true},"auto_heal_setting":{"type":"TypeList","computed":true,"elem":{"schema":{"action":{"type":"TypeList","computed":true,"elem":{"schema":{"action_type":{"type":"TypeString","computed":true},"custom_action":{"type":"TypeList","computed":true,"elem":{"schema":{"executable":{"type":"TypeString","computed":true},"parameters":{"type":"TypeString","computed":true}}}},"minimum_process_execution_time":{"type":"TypeString","computed":true}}}},"trigger":{"type":"TypeList","computed":true,"elem":{"schema":{"private_memory_kb":{"type":"TypeInt","computed":true},"requests":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true}}}},"slow_request":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true},"path":{"type":"TypeString","computed":true},"time_taken":{"type":"TypeString","computed":true}}}},"status_code":{"type":"TypeList","computed":true,"elem":{"schema":{"count":{"type":"TypeInt","computed":true},"interval":{"type":"TypeString","computed":true},"path":{"type":"TypeString","computed":true},"status_code_range":{"type":"TypeString","computed":true},"sub_status":{"type":"TypeInt","computed":true},"win32_status_code":{"type":"TypeInt","computed":true}}}}}}}}}},"container_registry_managed_identity_client_id":{"type":"TypeString","computed":true},"container_registry_use_managed_identity":{"type":"TypeBool","computed":true},"cors":{"type":"TypeList","computed":true,"elem":{"schema":{"allowed_origins":{"type":"TypeList","description":"The list of origins that are allowed to make cross-origin calls.","computed":true,"elem":{"type":"TypeString"}},"support_credentials":{"type":"TypeBool","description":"Are credentials allowed in CORS requests?","computed":true}}}},"default_documents":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"detailed_error_logging_enabled":{"type":"TypeBool","computed":true},"ftps_state":{"type":"TypeString","computed":true},"health_check_eviction_time_in_min":{"type":"TypeInt","computed":true},"health_check_path":{"type":"TypeString","computed":true},"http2_enabled":{"type":"TypeBool","computed":true},"ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"load_balancing_mode":{"type":"TypeString","computed":true},"local_mysql_enabled":{"type":"TypeBool","computed":true},"managed_pipeline_mode":{"type":"TypeString","computed":true},"minimum_tls_version":{"type":"TypeString","computed":true},"remote_debugging_enabled":{"type":"TypeBool","computed":true},"remote_debugging_version":{"type":"TypeString","computed":true},"scm_ip_restriction":{"type":"TypeList","optional":true,"computed":true,"elem":{"schema":{"action":{"type":"TypeString","description":"The action to take.","computed":true},"headers":{"type":"TypeList","computed":true,"elem":{"schema":{"x_azure_fdid":{"type":"TypeList","description":"The list of Azure Front Door IDs.","computed":true,"elem":{"type":"TypeString"}},"x_fd_health_probe":{"type":"TypeList","description":"Specifies if a Front Door Health Probe is expected.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_for":{"type":"TypeList","description":"The list of addresses for which matching is applied.","computed":true,"elem":{"type":"TypeString"}},"x_forwarded_host":{"type":"TypeList","description":"The list of Hosts for which matching will be applied.","computed":true,"elem":{"type":"TypeString"}}}}},"ip_address":{"type":"TypeString","description":"The CIDR notation of the IP or IP Range to match.","computed":true},"name":{"type":"TypeString","description":"The name used for this `ip_restriction`.","computed":true},"priority":{"type":"TypeInt","description":"The priority value of this `ip_restriction`.","computed":true},"service_tag":{"type":"TypeString","description":"The Service Tag used for this IP Restriction.","computed":true},"virtual_network_subnet_id":{"type":"TypeString","description":"The Virtual Network Subnet ID used for this IP Restriction.","computed":true}}}},"scm_minimum_tls_version":{"type":"TypeString","computed":true},"scm_type":{"type":"TypeString","computed":true},"scm_use_main_ip_restriction":{"type":"TypeBool","computed":true},"use_32_bit_worker":{"type":"TypeBool","computed":true},"virtual_application":{"type":"TypeList","computed":true,"elem":{"schema":{"physical_path":{"type":"TypeString","computed":true},"preload":{"type":"TypeBool","computed":true},"virtual_directory":{"type":"TypeList","computed":true,"elem":{"schema":{"physical_path":{"type":"TypeString","computed":true},"virtual_path":{"type":"TypeString","computed":true}}}},"virtual_path":{"type":"TypeString","computed":true}}}},"vnet_route_all_enabled":{"type":"TypeBool","computed":true},"websockets_enabled":{"type":"TypeBool","computed":true},"windows_fx_version":{"type":"TypeString","computed":true},"worker_count":{"type":"TypeInt","computed":true}}}},"site_credential":{"type":"TypeList","computed":true,"elem":{"schema":{"name":{"type":"TypeString","description":"The Site Credentials Username used for publishing.","computed":true},"password":{"type":"TypeString","description":"The Site Credentials Password used for publishing.","computed":true}}}},"sticky_settings":{"type":"TypeList","computed":true,"elem":{"schema":{"app_setting_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}},"connection_string_names":{"type":"TypeList","computed":true,"elem":{"type":"TypeString"}}}}},"storage_account":{"type":"TypeList","computed":true,"elem":{"schema":{"access_key":{"type":"TypeString","computed":true},"account_name":{"type":"TypeString","computed":true},"mount_path":{"type":"TypeString","computed":true},"name":{"type":"TypeString","computed":true},"share_name":{"type":"TypeString","computed":true},"type":{"type":"TypeString","computed":true}}}},"tags":{"type":"TypeMap","computed":true,"elem":{"type":"TypeString"}},"virtual_network_subnet_id":{"type":"TypeString","computed":true}},"timeouts":{"read":10}}}}} diff --git a/.teamcity/components/generated/services.kt b/.teamcity/components/generated/services.kt index 3091b615091b8..00d9e83827a35 100644 --- a/.teamcity/components/generated/services.kt +++ b/.teamcity/components/generated/services.kt @@ -10,6 +10,7 @@ var services = mapOf( "appconfiguration" to "App Configuration", "appservice" to "AppService", "applicationinsights" to "Application Insights", + "arcresourcebridge" to "Arc Resource Bridge", "arckubernetes" to "ArcKubernetes", "attestation" to "Attestation", "authorization" to "Authorization", diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a9aa9db081be..c4b6f43f853ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,28 +1,146 @@ -## 3.72.0 (Unreleased) +## 3.74.0 (Unreleased) FEATURES: -* **New Resource**: `azurerm_automation_python3_package` [GH-23087] +* **New Resource**: `azurerm_arc_resource_bridge_appliance` [GH-23108] +* **New Resource**: `azurerm_data_factory_dataset_azure_sql_table` [GH-23264] +* **New Resource**: `azurerm_function_app_connection` [GH-23127] ENHANCEMENTS: -* dependencies: updating to `v0.20230825.1030756` of `github.com/hashicorp/go-azure-sdk` [GH-23088] -* `containerapps`: updating to API Version `2023-05-01` [GH-22804] -* `keyvault`: upgrade remaining resources to `2023-02-01` [GH-23089] -* `internal/sdk`: typed resources using a custom importer now get a timed context [GH-23081] -* `azurerm_batch_pool` - support for `automatic_upgrade_enabled` [GH-23021] -* `azurerm_container_app_environment` - support for the `dapr_application_insights_connection_string` [GH-23080] -* `azurerm_monitor_diagnostic_setting` - deprecating `retention_policy` within `enabled_log` [GH-23029] -* `azurerm_postgresql_flexible_server` - support for the `auto_grow_enabled` property [GH-23069] -* `azurerm_resource_provider_registration` - refactoring to use `hashicorp/go-azure-sdk` [GH-23072] -* `azurerm_virtual_network_gateway` - increasing the default timeout for create to `90m` [GH-23003] -* `azurerm_virtual_hub_connection` - support for `inbound_route_map_id`, `outbound_route_map_id`, and `static_vnet_local_route_override_criteria` properties [GH-23049] +* dependencies: updating to `v0.20230918.1115907` of `github.com/hashicorp/go-azure-sdk` [GH-23337] +* dependencies: downgrading to `v1.12.5` of `github.com/rickb777/date` [GH-23296] +* `mysql`: updating to use API Version `2022-01-01` [GH-23320] +* `azurerm_app_configuration` - add support for the `replica` block [GH-22452] +* `azurerm_bot_channel_directline` - add support for `user_upload_enabled`, `endpoint_parameters_enabled` and `storage_enabled` [GH-23149] +* `azurerm_container_app` - add support for scale rules [GH-23294] +* `azurerm_container_app_environment` - add support for zone redundancy [GH-23313] +* `azurerm_cosmosdb_account` - add support for MongoDB connection strings [GH-23331] +* `azurerm_data_factory_dataset_delimited_text` - add support for the `dynamic_file_system_enabled`, `dynamic_path_enabled` and `dynamic_filename_enabled` properties [GH-23261] +* `azurerm_data_factory_dataset_parquet` - add support for the `azure_blob_fs_location` block [GH-23261] +* `azurerm_network_interface` - add support for the `auxiliary_mode` and `auxiliary_sku` properties [GH-22979] +* `azurerm_postgresql_flexible_server` - increase the maximum supported value for `storage_mb` [GH-23277] +* `azurerm_shared_image_version` - add support for the `replicated_region_deletion_enabled` and `target_region.exclude_from_latest_enabled` properties [GH-23147] +* `azurerm_storage_account` - add support for setting `domain_name` and `domain_guid` for `AADKERB` [GH-22833] +* `azurerm_web_application_firewall_policy` - add support for the `rate_limit_duration`, `rate_limit_threshold`, `group_rate_limit_by` and `request_body_inspect_limit_in_kb` properties [GH-23239] BUG FIXES: -* `azurerm_automation_account` - fixes logic for `local_authentication_enabled` [GH-23082] -* `azurerm_synapse_workspace` - fixes index out-of-range panic when parsing `storage_data_lake_gen2_filesystem_id` [GH-23019] -* `azurerm_monitor_diagnostic_setting` - fix `enabled_log` feature flagged schema [GH-23093] +* Data Source: `azurerm_container_app_environment`: fix `log_analytics_workspace_name` output to correct value [GH-23298] +* `azurerm_api_management_api` - set the `service_url` property when importing the resource [GH-23011] +* `azurerm_app_configuration` - prevent crash by nil checking the encryption configuration [GH-23302] +* `azurerm_app_configuration_feature` - update `percentage_filter_value` to accept correct type of float [GH-23263] +* `azurerm_key_vault_key` - ForceNew when `expiration_date` is removed from the config file [GH-23327] +* `azurerm_linux_function_app` - fix a bug in setting the storage settings when using Elastic Premium plans [GH-21212] +* `azurerm_linux_web_app` - fix docker app stack update [GH-23303] +* `azurerm_linux_web_app` - Fix crash in auto heal expansion [GH-21328] +* `azurerm_linux_web_app_slot` - fix docker app stack update [GH-23303] +* `azurerm_linux_web_app_slot` - Fix crash in auto heal expansion [GH-21328] +* `azurerm_mssql_elasticpool` - remove check that prevents `license_type` from being set for certain skus [GH-23262] +* `azurerm_servicebus_queue` - fixing an issue where `auto_delete_on_idle` couldn't be set to `P10675199DT2H48M5.4775807S` [GH-23296] +* `azurerm_servicebus_topic` - fixing an issue where `auto_delete_on_idle` couldn't be set to `P10675199DT2H48M5.4775807S` [GH-23296] +* `azurerm_storage_account` - prevent sending unsupported blob properties in payload for `Storage` account kind [GH-23288] +* `azurerm_windows_function_app` - fix a bug in setting the storage settings when using Elastic Premium plans [GH-21212] +* `azurerm_windows_web_app` - fix docker app stack update [GH-23303] +* `azurerm_windows_web_app_slot` - fix docker app stack update [GH-23303] + +DEPRECATIONS: + +* `azurerm_application_gateway` - deprecate `Standard` and `WAF` skus [GH-23310] +* `azurerm_bot_channel_web_chat` - deprecate `site_names` in favour of `site` block [GH-23161] +* `azurerm_monitor_diagnostic_setting` - deprecate `retention_policy` in favour of `azurerm_storage_management_policy` [GH-23260] + +## 3.73.0 (September 14, 2023) + +FEATURES: + +* **New Resource**: `azurerm_iothub_endpoint_cosmosdb_account` ([#23065](https://github.com/hashicorp/terraform-provider-azurerm/issues/23065)) +* **New Resource**: `azurerm_virtual_hub_routing_intent` ([#23138](https://github.com/hashicorp/terraform-provider-azurerm/issues/23138)) + +ENHANCEMENTS: + +* dependencies: updating to `v0.1.1` of `github.com/btubbs/datetime` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v1.3.1` of `github.com/google/uuid` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v0.61.0` of `github.com/hashicorp/go-azure-helpers` ([#23249](https://github.com/hashicorp/terraform-provider-azurerm/issues/23249)) +* dependencies: updating to `v0.20230907.1113401` of `github.com/hashicorp/go-azure-sdk` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v1.5.0` of `github.com/hashicorp/go-hclog` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v2.29.0` of `github.com/hashicorp/terraform-plugin-sdk/v2` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v1.5.1` of `github.com/hashicorp/terraform-plugin-testing` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v1.20.2` of `github.com/rickb777/date` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v0.13.0` of `golang.org/x/crypto` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v0.15.0` of `golang.org/x/net` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* dependencies: updating to `v0.13.0` of `golang.org/x/tools` ([#23221](https://github.com/hashicorp/terraform-provider-azurerm/issues/23221)) +* `azurerm_bot_channel_ms_teams` - support for `deployment_environment` ([#23122](https://github.com/hashicorp/terraform-provider-azurerm/issues/23122)) +* `azurerm_managed_disk` - updating to use API Version `2023-04-02` ([#23233](https://github.com/hashicorp/terraform-provider-azurerm/issues/23233)) +* `azurerm_managed_disk` - support for `optimized_frequent_attach_enabled` ([#23241](https://github.com/hashicorp/terraform-provider-azurerm/issues/23241)) +* `azurerm_managed_disk` - support for `performance_plus_enabled` ([#23241](https://github.com/hashicorp/terraform-provider-azurerm/issues/23241)) +* `azurerm_maps_account` - support for `local_authentication_enabled` ([#23216](https://github.com/hashicorp/terraform-provider-azurerm/issues/23216)) +* `azurerm_mssql_elasticpool` - support for configuring `license_type` when using the `Hyperscale` sku ([#23256](https://github.com/hashicorp/terraform-provider-azurerm/issues/23256)) +* `azurerm_security_center_assessment_policy` - refactoring to use `hashicorp/go-azure-sdk` ([#23158](https://github.com/hashicorp/terraform-provider-azurerm/issues/23158)) + +BUG FIXES: + +* `azurerm_api_management` - split create and update methods ([#23259](https://github.com/hashicorp/terraform-provider-azurerm/issues/23259)) +* `azurerm_api_management_backend` - fixing a panic when flattening the `credentials` block ([#23219](https://github.com/hashicorp/terraform-provider-azurerm/issues/23219)) +* `azurerm_key_vault_certificate` - fixing a regression where certificates from a custom/unknown issuer would be polled indefinitely ([#23214](https://github.com/hashicorp/terraform-provider-azurerm/issues/23214)) +* `azurerm_redis_cache` - prevent sending `redis_configuration.aof_backup_enabled` when the sku is not `Premium` to avoid API error ([#22774](https://github.com/hashicorp/terraform-provider-azurerm/issues/22774)) +* `azurerm_web_application_firewall_policy` - capture and toggle state of `custom_rule` blocks with an `enabled` field ([#23163](https://github.com/hashicorp/terraform-provider-azurerm/issues/23163)) + +## 3.72.0 (September 07, 2023) + +FEATURES: + +* Provider Feature: subscription cancellation on `destroy` can now be disabled via the provider `features` block ([#19936](https://github.com/hashicorp/terraform-provider-azurerm/issues/19936)) +* **New Data Source**: `netapp_volume_quota_rule` ([#23042](https://github.com/hashicorp/terraform-provider-azurerm/issues/23042)) +* **New Resource**: `azurerm_automation_python3_package` ([#23087](https://github.com/hashicorp/terraform-provider-azurerm/issues/23087)) +* **New Resource**: `netapp_volume_quota_rule` ([#23042](https://github.com/hashicorp/terraform-provider-azurerm/issues/23042)) + +ENHANCEMENTS: + +* dependencies: updating to `v0.20230906.1160501` of `github.com/hashicorp/go-azure-sdk` ([#23191](https://github.com/hashicorp/terraform-provider-azurerm/issues/23191)) +* `containerapps`: updating to API Version `2023-05-01` ([#22804](https://github.com/hashicorp/terraform-provider-azurerm/issues/22804)) +* `keyvault`: upgrade remaining resources to `2023-02-01` ([#23089](https://github.com/hashicorp/terraform-provider-azurerm/issues/23089)) +* `redisenterprise`: updating to API Version `2023-07-01` ([#23178](https://github.com/hashicorp/terraform-provider-azurerm/issues/23178)) +* `vpngateway`: updating to use `hashicorp/go-azure-sdk` ([#22906](https://github.com/hashicorp/terraform-provider-azurerm/issues/22906)) +* `internal/sdk`: typed resources using a custom importer now get a timed context ([#23160](https://github.com/hashicorp/terraform-provider-azurerm/issues/23160)) +* `azurerm_batch_pool` - support for `accelerated_networking_enabled` ([#23021](https://github.com/hashicorp/terraform-provider-azurerm/issues/23021)) +* `azurerm_batch_pool` - support for `automatic_upgrade_enabled` ([#23021](https://github.com/hashicorp/terraform-provider-azurerm/issues/23021)) +* `azurerm_bot_channel_direct_line_speech` - support for the `cognitive_account_id` property ([#23106](https://github.com/hashicorp/terraform-provider-azurerm/issues/23106)) +* `azurerm_bot_service_azure_bot` - support for the `local_authentication_enabled` property ([#23096](https://github.com/hashicorp/terraform-provider-azurerm/issues/23096)) +* `azurerm_container_app_environment` - support for the `dapr_application_insights_connection_string` ([#23080](https://github.com/hashicorp/terraform-provider-azurerm/issues/23080)) +* `azurerm_cosmosdb_cassandra_datacenter` - refactoring to use `hashicorp/go-azure-sdk` ([#23110](https://github.com/hashicorp/terraform-provider-azurerm/issues/23110)) +* `azurerm_cosmosdb_cassandra_datacenter` - updating to API Version `2023-04-15` ([#23110](https://github.com/hashicorp/terraform-provider-azurerm/issues/23110)) +* `azurerm_kubernetes_cluster` - Azure CNI can be updated to use `overlay` ([#22709](https://github.com/hashicorp/terraform-provider-azurerm/issues/22709)) +* `azurerm_monitor_diagnostic_setting` - deprecating `retention_policy` within `enabled_log` ([#23029](https://github.com/hashicorp/terraform-provider-azurerm/issues/23029)) +* `azurerm_mssql_database` - split create and update methods ([#23209](https://github.com/hashicorp/terraform-provider-azurerm/issues/23209)) +* `azurerm_postgresql_database` - `collation` can now be set to `English_United Kingdom.1252` ([#23171](https://github.com/hashicorp/terraform-provider-azurerm/issues/23171)) +* `azurerm_postgresql_flexible_database` - `collation` can now be set to `English_United Kingdom.1252` ([#23171](https://github.com/hashicorp/terraform-provider-azurerm/issues/23171)) +* `azurerm_postgresql_flexible_server` - support for the `auto_grow_enabled` property ([#23069](https://github.com/hashicorp/terraform-provider-azurerm/issues/23069)) +* `azurerm_redis_enterprise_cluster` - support for Flash clusters in Brazil South ([#23200](https://github.com/hashicorp/terraform-provider-azurerm/issues/23200)) +* `azurerm_resource_provider_registration` - refactoring to use `hashicorp/go-azure-sdk` ([#23072](https://github.com/hashicorp/terraform-provider-azurerm/issues/23072)) +* `azurerm_virtual_machine_extension` - support for `provision_after_extensions` ([#23124](https://github.com/hashicorp/terraform-provider-azurerm/issues/23124)) +* `azurerm_virtual_network_gateway` - increasing the default timeout for create to `90m` ([#23003](https://github.com/hashicorp/terraform-provider-azurerm/issues/23003)) +* `azurerm_virtual_hub_connection` - support for `inbound_route_map_id`, `outbound_route_map_id`, and `static_vnet_local_route_override_criteria` properties ([#23049](https://github.com/hashicorp/terraform-provider-azurerm/issues/23049)) + +BUG FIXES: + +* `azurerm_api_management_api_policy` - added state migration to mutate id's ending in `policies/policy` ([#23128](https://github.com/hashicorp/terraform-provider-azurerm/issues/23128)) +* `azurerm_api_management_api_operation_policy` - added state migration to mutate id's ending in `policies/policy` ([#23128](https://github.com/hashicorp/terraform-provider-azurerm/issues/23128)) +* `azurerm_api_management_product_policy` - added state migration to mutate id's ending in `policies/policy` ([#23128](https://github.com/hashicorp/terraform-provider-azurerm/issues/23128)) +* `azurerm_automation_account` - fixes logic for `local_authentication_enabled` ([#23082](https://github.com/hashicorp/terraform-provider-azurerm/issues/23082)) +* `azurerm_key_vault_managed_storage_account` - check id can be parsed correctly before setting it in state ([#23022](https://github.com/hashicorp/terraform-provider-azurerm/issues/23022)) +* `azurerm_monitor_diagnostic_setting` - fix `enabled_log` feature flagged schema ([#23093](https://github.com/hashicorp/terraform-provider-azurerm/issues/23093)) +* `azurerm_pim_active_role_assignment`: polling for the duration of the timeout, rather than a fixed 5 minute value ([#22932](https://github.com/hashicorp/terraform-provider-azurerm/issues/22932)) +* `azurerm_policy_set_definition` - only sending `parameters` when a value is configured ([#23155](https://github.com/hashicorp/terraform-provider-azurerm/issues/23155)) +* `azurerm_synapse_workspace` - fixes index out-of-range panic when parsing `storage_data_lake_gen2_filesystem_id` ([#23019](https://github.com/hashicorp/terraform-provider-azurerm/issues/23019)) +* `machine_learning_datastore_*` - fixes container ids ([#23140](https://github.com/hashicorp/terraform-provider-azurerm/issues/23140)) +* `azurerm_key_vault_certificate` - id now points to new version when certificate is updated ([#23135](https://github.com/hashicorp/terraform-provider-azurerm/issues/23135)) +* `azurerm_site_recovery_replicated_vm` - update `network_interface` diff so replicated items now can be updated ([#23199](https://github.com/hashicorp/terraform-provider-azurerm/issues/23199)) + +DEPRECATION: + +* Data Source: `azure_monitor_log_profile` - Azure is retiring Azure Log Profiles on the 30th of September 2026 ([#23146](https://github.com/hashicorp/terraform-provider-azurerm/issues/23146)) +* `azure_monitor_log_profile` - Azure is retiring Azure Log Profiles on the 30th of September 2026 ([#23146](https://github.com/hashicorp/terraform-provider-azurerm/issues/23146)) ## 3.71.0 (August 24, 2023) diff --git a/contributing/topics/reference-naming.md b/contributing/topics/reference-naming.md index 81476eaa9e7aa..e740b61a985ed 100755 --- a/contributing/topics/reference-naming.md +++ b/contributing/topics/reference-naming.md @@ -8,10 +8,32 @@ Here are some general guidelines you can turn to when naming properties: * The name should describe what the property is for succinctly, but as with many things a balance should be struck between too short or too long. -* Abbreviations should not be used and the full words should be used instead e.g. `resource_group_name` instead of `rg_name` or `virtual_machine` instead of `vm`. +* Choose the officially marketed name for new properties over the ones used in the API if they differ. -* For blocks avoid redundant words in the name that don't add informational value e.g.`firewall_properties` can be shortened to `firewall`, the same can apply to individual properties e.g. `email_address` to `email`. +* Abbreviations should not be used and the full words should be used instead e.g. +>`resource_group_name` instead of `rg_name` or `virtual_machine` instead of `vm`. -* As a general rule, booleans should be appended with `_enabled`, e.g. `public_network_access_enabled`. +* For blocks avoid redundant words in the name that don't add informational value e.g. +>`firewall_properties` can be shortened to `firewall`, the same can apply to individual properties e.g. `email_address` to `email`. -* Choose the officially marketed name for new properties over the ones used in the API if they differ. \ No newline at end of file +* Properties for certificates or artifacts that must be in a certain format should be appended with the format e.g. +> A certificate that must be base64 encoded should be named `certificate_base64` + +* Similarly, properties that pertain to sizes or durations/windows/occurences should be appended with the appropriate unit of measure e.g. +> `duration_in_seconds` or `size_in_gb` + +* Time properties that are not in the format of RFC3339 or are specified as UTC in the documentation should have that appended e.g. + > `timestamp_in_utc` + +* For booleans these guidelines apply: + + * As a general rule, booleans should be appended with `_enabled` e.g. + >`public_network_access_enabled` + + * Booleans named `disableSomething` in the API should be flipped and exposed as `something_enabled` in the provider. + + * Avoid redundant verbs like `is` at the beginning of the property e.g. + >`is_storage_enabled` must be renamed to `storage_enabled`. + + * Avoid double negatives which obfuscate the purpose of the property these should be removed and flipped e.g. + >`no_storage_enabled` becomes `storage_enabled` or `block_user_upload_enabled` becomes `user_upload_enabled`. diff --git a/examples/virtual-machines/linux/custom-data/main.tf b/examples/virtual-machines/linux/custom-data/main.tf index b4d6ee762ea4c..3eb8e03d444cb 100644 --- a/examples/virtual-machines/linux/custom-data/main.tf +++ b/examples/virtual-machines/linux/custom-data/main.tf @@ -5,6 +5,16 @@ provider "azurerm" { features {} } +locals { + custom_data = < /etc/customdata +example data +EOF +CUSTOM_DATA +} + resource "azurerm_resource_group" "main" { name = "${var.prefix}-resources" location = var.location @@ -43,16 +53,17 @@ resource "azurerm_linux_virtual_machine" "main" { size = "Standard_F2" admin_username = "adminuser" admin_password = "P@ssw0rd1234!" - custom_data = base64encode("Hello World!") + custom_data = base64encode(local.custom_data) disable_password_authentication = false network_interface_ids = [ azurerm_network_interface.main.id, ] + source_image_reference { publisher = "Canonical" - offer = "UbuntuServer" - sku = "16.04-LTS" + offer = "0001-com-ubuntu-server-focal" + sku = "20_04-lts" version = "latest" } diff --git a/examples/virtual-machines/linux/user-data/README.md b/examples/virtual-machines/linux/user-data/README.md new file mode 100644 index 0000000000000..246e6028b999b --- /dev/null +++ b/examples/virtual-machines/linux/user-data/README.md @@ -0,0 +1,3 @@ +## Example: Linux Virtual Machine with User Data + +This example provisions a Linux Virtual Machine with some User Data. diff --git a/examples/virtual-machines/linux/user-data/main.tf b/examples/virtual-machines/linux/user-data/main.tf new file mode 100644 index 0000000000000..b7ef60b3da4b7 --- /dev/null +++ b/examples/virtual-machines/linux/user-data/main.tf @@ -0,0 +1,63 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "main" { + name = "${var.prefix}-resources" + location = var.location +} + +resource "azurerm_virtual_network" "main" { + name = "${var.prefix}-network" + address_space = ["10.0.0.0/16"] + location = azurerm_resource_group.main.location + resource_group_name = azurerm_resource_group.main.name +} + +resource "azurerm_subnet" "internal" { + name = "internal" + resource_group_name = azurerm_resource_group.main.name + virtual_network_name = azurerm_virtual_network.main.name + address_prefixes = ["10.0.2.0/24"] +} + +resource "azurerm_network_interface" "main" { + name = "${var.prefix}-nic" + resource_group_name = azurerm_resource_group.main.name + location = azurerm_resource_group.main.location + + ip_configuration { + name = "internal" + subnet_id = azurerm_subnet.internal.id + private_ip_address_allocation = "Dynamic" + } +} + +resource "azurerm_linux_virtual_machine" "main" { + name = "${var.prefix}-vm" + resource_group_name = azurerm_resource_group.main.name + location = azurerm_resource_group.main.location + size = "Standard_F2" + admin_username = "adminuser" + admin_password = "P@ssw0rd1234!" + user_data = base64encode("Hello World!") + disable_password_authentication = false + network_interface_ids = [ + azurerm_network_interface.main.id, + ] + + source_image_reference { + publisher = "Canonical" + offer = "0001-com-ubuntu-server-focal" + sku = "20_04-lts" + version = "latest" + } + + os_disk { + storage_account_type = "Standard_LRS" + caching = "ReadWrite" + } +} diff --git a/examples/virtual-machines/linux/user-data/variables.tf b/examples/virtual-machines/linux/user-data/variables.tf new file mode 100644 index 0000000000000..371d4695d13dd --- /dev/null +++ b/examples/virtual-machines/linux/user-data/variables.tf @@ -0,0 +1,10 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +variable "prefix" { + description = "The prefix which should be used for all resources in this example" +} + +variable "location" { + description = "The Azure Region in which all resources in this example should be created." +} diff --git a/examples/virtual-machines/windows/custom-data/main.tf b/examples/virtual-machines/windows/custom-data/main.tf index de7ec1cd8e619..25b4c3dff6025 100644 --- a/examples/virtual-machines/windows/custom-data/main.tf +++ b/examples/virtual-machines/windows/custom-data/main.tf @@ -5,6 +5,14 @@ provider "azurerm" { features {} } +locals { + custom_data = < C:/custom_data_exampe + +CUSTOMDATA +} + resource "azurerm_resource_group" "main" { name = "${var.prefix}-resources" location = var.location @@ -43,7 +51,7 @@ resource "azurerm_windows_virtual_machine" "main" { size = "Standard_F2" admin_username = "adminuser" admin_password = "P@ssw0rd1234!" - custom_data = base64encode("Hello World!") + custom_data = base64encode(local.custom_data) network_interface_ids = [ azurerm_network_interface.main.id, ] diff --git a/examples/virtual-machines/windows/user-data/README.md b/examples/virtual-machines/windows/user-data/README.md new file mode 100644 index 0000000000000..21d311c4d32b1 --- /dev/null +++ b/examples/virtual-machines/windows/user-data/README.md @@ -0,0 +1,3 @@ +## Example: Windows Virtual Machine with User Data + +This example provisions a Windows Virtual Machine with some User Data. diff --git a/examples/virtual-machines/windows/user-data/main.tf b/examples/virtual-machines/windows/user-data/main.tf new file mode 100644 index 0000000000000..14d8c0aa7b29c --- /dev/null +++ b/examples/virtual-machines/windows/user-data/main.tf @@ -0,0 +1,62 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "main" { + name = "${var.prefix}-resources" + location = var.location +} + +resource "azurerm_virtual_network" "main" { + name = "${var.prefix}-network" + address_space = ["10.0.0.0/16"] + location = azurerm_resource_group.main.location + resource_group_name = azurerm_resource_group.main.name +} + +resource "azurerm_subnet" "internal" { + name = "internal" + resource_group_name = azurerm_resource_group.main.name + virtual_network_name = azurerm_virtual_network.main.name + address_prefixes = ["10.0.2.0/24"] +} + +resource "azurerm_network_interface" "main" { + name = "${var.prefix}-nic" + resource_group_name = azurerm_resource_group.main.name + location = azurerm_resource_group.main.location + + ip_configuration { + name = "internal" + subnet_id = azurerm_subnet.internal.id + private_ip_address_allocation = "Dynamic" + } +} + +resource "azurerm_windows_virtual_machine" "main" { + name = "${var.prefix}-vm" + resource_group_name = azurerm_resource_group.main.name + location = azurerm_resource_group.main.location + size = "Standard_F2" + admin_username = "adminuser" + admin_password = "P@ssw0rd1234!" + user_data = base64encode("Hello World!") + network_interface_ids = [ + azurerm_network_interface.main.id, + ] + + source_image_reference { + publisher = "MicrosoftWindowsServer" + offer = "WindowsServer" + sku = "2016-Datacenter" + version = "latest" + } + + os_disk { + storage_account_type = "Standard_LRS" + caching = "ReadWrite" + } +} diff --git a/examples/virtual-machines/windows/user-data/variables.tf b/examples/virtual-machines/windows/user-data/variables.tf new file mode 100644 index 0000000000000..371d4695d13dd --- /dev/null +++ b/examples/virtual-machines/windows/user-data/variables.tf @@ -0,0 +1,10 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +variable "prefix" { + description = "The prefix which should be used for all resources in this example" +} + +variable "location" { + description = "The Azure Region in which all resources in this example should be created." +} diff --git a/go.mod b/go.mod index d56808e46214b..a8a1abc89d86d 100644 --- a/go.mod +++ b/go.mod @@ -7,31 +7,30 @@ require ( github.com/Azure/go-autorest/autorest/to v0.4.0 github.com/Azure/go-autorest/autorest/validation v0.3.1 github.com/Azure/go-autorest/tracing v0.6.0 - github.com/agiledragon/gomonkey/v2 v2.9.0 - github.com/btubbs/datetime v0.1.0 + github.com/btubbs/datetime v0.1.1 github.com/dave/jennifer v1.6.0 github.com/davecgh/go-spew v1.1.1 github.com/gofrs/uuid v4.4.0+incompatible github.com/golang-jwt/jwt/v4 v4.5.0 github.com/google/go-cmp v0.5.9 - github.com/google/uuid v1.3.0 - github.com/hashicorp/go-azure-helpers v0.59.0 - github.com/hashicorp/go-azure-sdk v0.20230825.1030756 - github.com/hashicorp/go-hclog v1.4.0 + github.com/google/uuid v1.3.1 + github.com/hashicorp/go-azure-helpers v0.61.0 + github.com/hashicorp/go-azure-sdk v0.20230918.1115907 + github.com/hashicorp/go-hclog v1.5.0 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/go-uuid v1.0.3 github.com/hashicorp/go-version v1.6.0 - github.com/hashicorp/terraform-plugin-sdk/v2 v2.26.1 - github.com/hashicorp/terraform-plugin-testing v1.0.0 + github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0 + github.com/hashicorp/terraform-plugin-testing v1.5.1 github.com/magodo/terraform-provider-azurerm-example-gen v0.0.0-20220407025246-3a3ee0ab24a8 github.com/mitchellh/mapstructure v1.5.0 github.com/rickb777/date v1.12.5-0.20200422084442-6300e543c4d9 github.com/sergi/go-diff v1.2.0 github.com/tombuildsstuff/giovanni v0.20.0 github.com/tombuildsstuff/kermit v0.20230703.1101016 - golang.org/x/crypto v0.9.0 - golang.org/x/net v0.10.0 - golang.org/x/tools v0.6.0 + golang.org/x/crypto v0.13.0 + golang.org/x/net v0.15.0 + golang.org/x/tools v0.13.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -39,49 +38,52 @@ require ( github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/apparentlymart/go-textseg v1.0.0 // indirect - github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/fatih/color v1.13.0 // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/cloudflare/circl v1.3.3 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect - github.com/hashicorp/go-plugin v1.4.8 // indirect + github.com/hashicorp/go-plugin v1.5.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.4 // indirect - github.com/hashicorp/hc-install v0.5.0 // indirect - github.com/hashicorp/hcl/v2 v2.16.2 // indirect + github.com/hashicorp/hc-install v0.6.0 // indirect + github.com/hashicorp/hcl/v2 v2.18.0 // indirect github.com/hashicorp/hcl2 v0.0.0-20191002203319-fb75b3253c80 // indirect github.com/hashicorp/logutils v1.0.0 // indirect - github.com/hashicorp/terraform-exec v0.18.1 // indirect - github.com/hashicorp/terraform-json v0.16.0 // indirect - github.com/hashicorp/terraform-plugin-go v0.14.3 // indirect - github.com/hashicorp/terraform-plugin-log v0.8.0 // indirect - github.com/hashicorp/terraform-registry-address v0.1.0 // indirect - github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 // indirect - github.com/hashicorp/yamux v0.0.0-20210316155119-a95892c5f864 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/hashicorp/terraform-exec v0.19.0 // indirect + github.com/hashicorp/terraform-json v0.17.1 // indirect + github.com/hashicorp/terraform-plugin-go v0.19.0 // indirect + github.com/hashicorp/terraform-plugin-log v0.9.0 // indirect + github.com/hashicorp/terraform-registry-address v0.2.2 // indirect + github.com/hashicorp/terraform-svchost v0.1.1 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/oklog/run v1.1.0 // indirect - github.com/rickb777/plural v1.2.0 // indirect + github.com/rickb777/plural v1.4.1 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect - github.com/vmihailenco/msgpack/v4 v4.3.12 // indirect - github.com/vmihailenco/tagparser v0.1.1 // indirect - github.com/zclconf/go-cty v1.13.1 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/oauth2 v0.4.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect - google.golang.org/grpc v1.53.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect - software.sslmate.com/src/go-pkcs12 v0.2.0 // indirect + github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/zclconf/go-cty v1.14.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/grpc v1.58.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect + software.sslmate.com/src/go-pkcs12 v0.2.1 // indirect ) go 1.20 diff --git a/go.sum b/go.sum index 8504b41ae2698..76fae18e20e35 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,4 @@ -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= github.com/Azure/azure-sdk-for-go v45.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v56.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v66.0.0+incompatible h1:bmmC38SlE8/E81nNADlgmVGurPWMHDX2YNXVQMrBpEE= @@ -34,35 +34,26 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/agiledragon/gomonkey/v2 v2.9.0 h1:PDiKKybR596O6FHW+RVSG0Z7uGCBNbmbUXh3uCNQ7Hc= -github.com/agiledragon/gomonkey/v2 v2.9.0/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-textseg v1.0.0 h1:rRmlIsPEEhUTIKQb7T++Nz/A5Q6C9IuX2wFoYVvnCs0= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= -github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= -github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= github.com/bsm/go-vlq v0.0.0-20150828105119-ec6e8d4f5f4e/go.mod h1:N+BjUcTjSxc2mtRGSCPsat1kze3CUtvJN3/jTXlp29k= -github.com/btubbs/datetime v0.1.0 h1:183iHRjmNAokYM5D8V3wbEOOEe/HYEYpm7E2oom3vhM= -github.com/btubbs/datetime v0.1.0/go.mod h1:n2BZ/2ltnRzNiz27aE3wUb2onNttQdC+WFxAoks5jJM= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/btubbs/datetime v0.1.1 h1:KuV+F9tyq/hEnezmKZNGk8dzqMVsId6EpFVrQCfA3To= +github.com/btubbs/datetime v0.1.1/go.mod h1:n2BZ/2ltnRzNiz27aE3wUb2onNttQdC+WFxAoks5jJM= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/dave/jennifer v1.6.0 h1:MQ/6emI2xM7wt0tJzJzyUik2Q3Tcn2eE0vtYgh4GPVI= github.com/dave/jennifer v1.6.0/go.mod h1:AxTG893FiZKqxy3FP1kL80VMshSMuz2G+EgvszgGRnk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -71,24 +62,16 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= +github.com/go-git/go-git/v5 v5.8.1 h1:Zo79E4p7TRk0xoRgMq0RShiTHGKcKI4+DI6BfJc/Q+A= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= @@ -96,125 +79,105 @@ github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/errwrap v0.0.0-20180715044906-d6c0cd880357/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-azure-helpers v0.12.0/go.mod h1:Zc3v4DNeX6PDdy7NljlYpnrdac1++qNW0I4U+ofGwpg= -github.com/hashicorp/go-azure-helpers v0.59.0 h1:E73yoPN2r1y0vvZ4dgAh8NRGuVTNXH3lZKRjT+4oNmA= -github.com/hashicorp/go-azure-helpers v0.59.0/go.mod h1:BQUQp5udwbJ8pnzl0wByCLVEEyPMAFpJ9vOREiCzObo= -github.com/hashicorp/go-azure-sdk v0.20230825.1030756 h1:zXrOc4ZqWOYxxoQTnWZzpkgNVKj1L89l41vrPKx+y5o= -github.com/hashicorp/go-azure-sdk v0.20230825.1030756/go.mod h1:Rk63T4GsVOHb/WohiAX7F0tMEd8MIKV+g4aV0Jv4XEk= +github.com/hashicorp/go-azure-helpers v0.61.0 h1:dIz23Vp8LdErxuImc6V5QIPtJcWjMgqP75bfp8o1Lro= +github.com/hashicorp/go-azure-helpers v0.61.0/go.mod h1:BQUQp5udwbJ8pnzl0wByCLVEEyPMAFpJ9vOREiCzObo= +github.com/hashicorp/go-azure-sdk v0.20230918.1115907 h1:V+SyLwBD9tpnW00H/AnqM2ir11CUchc0EPuf2Mi0c+s= +github.com/hashicorp/go-azure-sdk v0.20230918.1115907/go.mod h1:KSQRt0kuQGxFXo3t0KtQwTXhOWWxso2ZoSbtqQitruY= github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU= github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v1.4.0 h1:ctuWFGrhFha8BnnzxqeRGidlEcQkDyL5u8J8t5eA11I= -github.com/hashicorp/go-hclog v1.4.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= +github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-multierror v0.0.0-20180717150148-3d5d8f294aa0/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.4.8 h1:CHGwpxYDOttQOY7HOWgETU9dyVjOXzniXDqJcYJE1zM= -github.com/hashicorp/go-plugin v1.4.8/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= +github.com/hashicorp/go-plugin v1.5.1 h1:oGm7cWBaYIp3lJpx1RUEfLWophprE2EV/KUeqBYo+6k= +github.com/hashicorp/go-plugin v1.5.1/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/hc-install v0.5.0 h1:D9bl4KayIYKEeJ4vUDe9L5huqxZXczKaykSRcmQ0xY0= -github.com/hashicorp/hc-install v0.5.0/go.mod h1:JyzMfbzfSBSjoDCRPna1vi/24BEDxFaCPfdHtM5SCdo= -github.com/hashicorp/hcl/v2 v2.16.2 h1:mpkHZh/Tv+xet3sy3F9Ld4FyI2tUpWe9x3XtPx9f1a0= -github.com/hashicorp/hcl/v2 v2.16.2/go.mod h1:JRmR89jycNkrrqnMmvPDMd56n1rQJ2Q6KocSLCMCXng= +github.com/hashicorp/hc-install v0.6.0 h1:fDHnU7JNFNSQebVKYhHZ0va1bC6SrPQ8fpebsvNr2w4= +github.com/hashicorp/hc-install v0.6.0/go.mod h1:10I912u3nntx9Umo1VAeYPUUuehk0aRQJYpMwbX5wQA= +github.com/hashicorp/hcl/v2 v2.18.0 h1:wYnG7Lt31t2zYkcquwgKo6MWXzRUDIeIVU5naZwHLl8= +github.com/hashicorp/hcl/v2 v2.18.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= github.com/hashicorp/hcl2 v0.0.0-20191002203319-fb75b3253c80 h1:PFfGModn55JA0oBsvFghhj0v93me+Ctr3uHC/UmFAls= github.com/hashicorp/hcl2 v0.0.0-20191002203319-fb75b3253c80/go.mod h1:Cxv+IJLuBiEhQ7pBYGEuORa0nr4U994pE8mYLuFd7v0= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX5H8XZxHlH4= -github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= -github.com/hashicorp/terraform-json v0.16.0 h1:UKkeWRWb23do5LNAFlh/K3N0ymn1qTOO8c+85Albo3s= -github.com/hashicorp/terraform-json v0.16.0/go.mod h1:v0Ufk9jJnk6tcIZvScHvetlKfiNTC+WS21mnXIlc0B0= -github.com/hashicorp/terraform-plugin-go v0.14.3 h1:nlnJ1GXKdMwsC8g1Nh05tK2wsC3+3BL/DBBxFEki+j0= -github.com/hashicorp/terraform-plugin-go v0.14.3/go.mod h1:7ees7DMZ263q8wQ6E4RdIdR6nHHJtrdt4ogX5lPkX1A= -github.com/hashicorp/terraform-plugin-log v0.8.0 h1:pX2VQ/TGKu+UU1rCay0OlzosNKe4Nz1pepLXj95oyy0= -github.com/hashicorp/terraform-plugin-log v0.8.0/go.mod h1:1myFrhVsBLeylQzYYEV17VVjtG8oYPRFdaZs7xdW2xs= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.26.1 h1:G9WAfb8LHeCxu7Ae8nc1agZlQOSCUWsb610iAogBhCs= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.26.1/go.mod h1:xcOSYlRVdPLmDUoqPhO9fiO/YCN/l6MGYeTzGt5jgkQ= -github.com/hashicorp/terraform-plugin-testing v1.0.0 h1:3dJV+etJxfiRQ4ENe5fZ38ZQPN5aJ8PwqUAOE2NzDnw= -github.com/hashicorp/terraform-plugin-testing v1.0.0/go.mod h1:sv9NoAabKrcjYzvYYwnJCJU+EfF0QnZbaodl+SgWUM8= -github.com/hashicorp/terraform-registry-address v0.1.0 h1:W6JkV9wbum+m516rCl5/NjKxCyTVaaUBbzYcMzBDO3U= -github.com/hashicorp/terraform-registry-address v0.1.0/go.mod h1:EnyO2jYO6j29DTHbJcm00E5nQTFeTtyZH3H5ycydQ5A= -github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 h1:HKLsbzeOsfXmKNpr3GiT18XAblV0BjCbzL8KQAMZGa0= -github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734/go.mod h1:kNDNcF7sN4DocDLBkQYz73HGKwN1ANB1blq4lIYLYvg= -github.com/hashicorp/yamux v0.0.0-20210316155119-a95892c5f864 h1:Y4V+SFe7d3iH+9pJCoeWIOS5/xBJIFsltS7E+KJSsJY= -github.com/hashicorp/yamux v0.0.0-20210316155119-a95892c5f864/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/hashicorp/terraform-exec v0.19.0 h1:FpqZ6n50Tk95mItTSS9BjeOVUb4eg81SpgVtZNNtFSM= +github.com/hashicorp/terraform-exec v0.19.0/go.mod h1:tbxUpe3JKruE9Cuf65mycSIT8KiNPZ0FkuTE3H4urQg= +github.com/hashicorp/terraform-json v0.17.1 h1:eMfvh/uWggKmY7Pmb3T85u86E2EQg6EQHgyRwf3RkyA= +github.com/hashicorp/terraform-json v0.17.1/go.mod h1:Huy6zt6euxaY9knPAFKjUITn8QxUFIe9VuSzb4zn/0o= +github.com/hashicorp/terraform-plugin-go v0.19.0 h1:BuZx/6Cp+lkmiG0cOBk6Zps0Cb2tmqQpDM3iAtnhDQU= +github.com/hashicorp/terraform-plugin-go v0.19.0/go.mod h1:EhRSkEPNoylLQntYsk5KrDHTZJh9HQoumZXbOGOXmec= +github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= +github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0 h1:wcOKYwPI9IorAJEBLzgclh3xVolO7ZorYd6U1vnok14= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0/go.mod h1:qH/34G25Ugdj5FcM95cSoXzUgIbgfhVLXCcEcYaMwq8= +github.com/hashicorp/terraform-plugin-testing v1.5.1 h1:T4aQh9JAhmWo4+t1A7x+rnxAJHCDIYW9kXyo4sVO92c= +github.com/hashicorp/terraform-plugin-testing v1.5.1/go.mod h1:dg8clO6K59rZ8w9EshBmDp1CxTIPu3yA4iaDpX1h5u0= +github.com/hashicorp/terraform-registry-address v0.2.2 h1:lPQBg403El8PPicg/qONZJDC6YlgCVbWDtNmmZKtBno= +github.com/hashicorp/terraform-registry-address v0.2.2/go.mod h1:LtwNbCihUoUZ3RYriyS2wF/lGPB6gF9ICLRtuDk7hSo= +github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= +github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc= +github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/magodo/terraform-provider-azurerm-example-gen v0.0.0-20220407025246-3a3ee0ab24a8 h1:HHSqLmPZaa8U66U7N2Gtx3gYptSHrUB/rB5t+6fZTkQ= github.com/magodo/terraform-provider-azurerm-example-gen v0.0.0-20220407025246-3a3ee0ab24a8/go.mod h1:iMzpAzVr2v/NUVie/apAYtZlFZYFndPcp6/E0VLxgAM= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= @@ -223,44 +186,33 @@ github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQ github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/rickb777/date v1.12.5-0.20200422084442-6300e543c4d9 h1:czJCcoUR3FMpHnRQow2E84H/0CPrX1fMAGn9HugzyI4= github.com/rickb777/date v1.12.5-0.20200422084442-6300e543c4d9/go.mod h1:L8WrssTzvgYw34/Ppa0JpJfI7KKXZ2cVGI6Djt0brUU= -github.com/rickb777/plural v1.2.0 h1:5tvEc7UBCZ7l8h/2UeybSkt/uu1DQsZFOFdNevmUhlE= github.com/rickb777/plural v1.2.0/go.mod h1:UdpyWFCGbo3mvK3f/PfZOAOrkjzJlYN/sD46XNWJ+Es= +github.com/rickb777/plural v1.4.1 h1:5MMLcbIaapLFmvDGRT5iPk8877hpTPt8Y9cdSKRw9sU= +github.com/rickb777/plural v1.4.1/go.mod h1:kdmXUpmKBJTS0FtG/TFumd//VBWsNTD7zOw7x4umxNw= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -273,86 +225,66 @@ github.com/tombuildsstuff/kermit v0.20230703.1101016/go.mod h1:YleYDYRKTGy5ihWHG github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= -github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= -github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= -github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= -github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.0.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= -github.com/zclconf/go-cty v1.1.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= -github.com/zclconf/go-cty v1.13.1 h1:0a6bRwuiSHtAmqCqNOE+c2oHgepv0ctoxU4FUe43kwc= -github.com/zclconf/go-cty v1.13.1/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/zclconf/go-cty v1.14.0 h1:/Xrd39K7DXbHzlisFP9c4pHao4yyf+/Ug9LEz+Y/yhc= +github.com/zclconf/go-cty v1.14.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190502183928-7f726cade0ab/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191009170851-d66e71096ffb/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -360,66 +292,65 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o= +google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= -software.sslmate.com/src/go-pkcs12 v0.2.0 h1:nlFkj7bTysH6VkC4fGphtjXRbezREPgrHuJG20hBGPE= -software.sslmate.com/src/go-pkcs12 v0.2.0/go.mod h1:23rNcYsMabIc1otwLpTkCCPwUq6kQsTyowttG/as0kQ= +software.sslmate.com/src/go-pkcs12 v0.2.1 h1:tbT1jjaeFOF230tzOIRJ6U5S1jNqpsSyNjzDd58H3J8= +software.sslmate.com/src/go-pkcs12 v0.2.1/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= diff --git a/helpers/validate/time_test.go b/helpers/validate/time_test.go index e455d0dab1555..d275f76bfeb1d 100644 --- a/helpers/validate/time_test.go +++ b/helpers/validate/time_test.go @@ -81,6 +81,11 @@ func TestISO8601Duration(t *testing.T) { Value: "P1Y2M3DT7H42M3S", Errors: 0, }, + { + // .Net's TimeSpan.Max value (used as the default value for ServiceBus Topics) + Value: "P10675199DT2H48M5.4775807S", + Errors: 0, + }, { // Invalid prefix Value: "1Y2M3DT7H42M3S", diff --git a/internal/acceptance/plugin_sdk_aliases.go b/internal/acceptance/plugin_sdk_aliases.go index df5946f953f44..1fb7a37f260ad 100644 --- a/internal/acceptance/plugin_sdk_aliases.go +++ b/internal/acceptance/plugin_sdk_aliases.go @@ -6,6 +6,7 @@ package acceptance import ( "regexp" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" @@ -20,7 +21,7 @@ type State = terraform.State type TestStep = resource.TestStep -type StateChangeConf = resource.StateChangeConf +type StateChangeConf = retry.StateChangeConf type TestCheckFunc = resource.TestCheckFunc diff --git a/internal/acceptance/ssh/run.go b/internal/acceptance/ssh/run.go index c203b9d9ef512..87baeb82312e7 100644 --- a/internal/acceptance/ssh/run.go +++ b/internal/acceptance/ssh/run.go @@ -10,7 +10,8 @@ import ( "log" "time" - "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "golang.org/x/crypto/ssh" ) @@ -23,14 +24,14 @@ type Runner struct { } func (r Runner) Run(ctx context.Context) error { - if err := resource.RetryContext(ctx, 5*time.Minute, r.tryRun); err != nil { + if err := retry.RetryContext(ctx, 5*time.Minute, r.tryRun); err != nil { return err } return nil } -func (r Runner) tryRun() *resource.RetryError { +func (r Runner) tryRun() *pluginsdk.RetryError { config := &ssh.ClientConfig{ User: r.Username, Auth: []ssh.AuthMethod{ @@ -43,12 +44,12 @@ func (r Runner) tryRun() *resource.RetryError { log.Printf("[INFO] SSHing to %q...", hostAddress) client, err := ssh.Dial("tcp", hostAddress, config) if err != nil { - return resource.RetryableError(fmt.Errorf("connecting to host: %+v", err)) + return pluginsdk.RetryableError(fmt.Errorf("connecting to host: %+v", err)) } session, err := client.NewSession() if err != nil { - return resource.RetryableError(fmt.Errorf("creating session: %+v", err)) + return pluginsdk.RetryableError(fmt.Errorf("creating session: %+v", err)) } defer session.Close() @@ -57,7 +58,7 @@ func (r Runner) tryRun() *resource.RetryError { var b bytes.Buffer session.Stdout = &b if err := session.Run(cmd); err != nil { - return resource.NonRetryableError(fmt.Errorf("failure running command %q: %+v", cmd, err)) + return pluginsdk.NonRetryableError(fmt.Errorf("failure running command %q: %+v", cmd, err)) } } diff --git a/internal/clients/client.go b/internal/clients/client.go index a62564cc3b3f2..f02c68a88aa49 100644 --- a/internal/clients/client.go +++ b/internal/clients/client.go @@ -30,6 +30,7 @@ import ( applicationInsights "github.com/hashicorp/terraform-provider-azurerm/internal/services/applicationinsights/client" appService "github.com/hashicorp/terraform-provider-azurerm/internal/services/appservice/client" arckubernetes "github.com/hashicorp/terraform-provider-azurerm/internal/services/arckubernetes/client" + arcResourceBridge "github.com/hashicorp/terraform-provider-azurerm/internal/services/arcresourcebridge/client" attestation "github.com/hashicorp/terraform-provider-azurerm/internal/services/attestation/client" authorization "github.com/hashicorp/terraform-provider-azurerm/internal/services/authorization/client" automanage "github.com/hashicorp/terraform-provider-azurerm/internal/services/automanage/client" @@ -162,6 +163,7 @@ type Client struct { AppPlatform *appPlatform.Client AppService *appService.Client ArcKubernetes *arckubernetes.Client + ArcResourceBridge *arcResourceBridge.Client Attestation *attestation.Client Authorization *authorization.Client Automanage *automanage.Client @@ -314,6 +316,9 @@ func (client *Client) Build(ctx context.Context, o *common.ClientOptions) error if client.ArcKubernetes, err = arckubernetes.NewClient(o); err != nil { return fmt.Errorf("building clients for ArcKubernetes: %+v", err) } + if client.ArcResourceBridge, err = arcResourceBridge.NewClient(o); err != nil { + return fmt.Errorf("building clients for Arc Resource Bridge: %+v", err) + } if client.Attestation, err = attestation.NewClient(o); err != nil { return fmt.Errorf("building clients for Attestation: %+v", err) } diff --git a/internal/features/defaults.go b/internal/features/defaults.go index d1d094c78ba0d..133d6a01a8871 100644 --- a/internal/features/defaults.go +++ b/internal/features/defaults.go @@ -53,5 +53,8 @@ func Default() UserFeatures { RollInstancesWhenRequired: true, ScaleToZeroOnDelete: true, }, + Subscription: SubscriptionFeatures{ + PreventCancellationOnDestroy: false, + }, } } diff --git a/internal/features/user_flags.go b/internal/features/user_flags.go index e913798469374..a0b1cfe9f4481 100644 --- a/internal/features/user_flags.go +++ b/internal/features/user_flags.go @@ -15,6 +15,7 @@ type UserFeatures struct { LogAnalyticsWorkspace LogAnalyticsWorkspaceFeatures ResourceGroup ResourceGroupFeatures ManagedDisk ManagedDiskFeatures + Subscription SubscriptionFeatures } type CognitiveAccountFeatures struct { @@ -74,3 +75,7 @@ type AppConfigurationFeatures struct { PurgeSoftDeleteOnDestroy bool RecoverSoftDeleted bool } + +type SubscriptionFeatures struct { + PreventCancellationOnDestroy bool +} diff --git a/internal/provider/features.go b/internal/provider/features.go index bdb0cbfe3a9f5..872386ce9a03d 100644 --- a/internal/provider/features.go +++ b/internal/provider/features.go @@ -268,6 +268,21 @@ func schemaFeatures(supportLegacyTestSuite bool) *pluginsdk.Schema { }, }, }, + + "subscription": { + Type: pluginsdk.TypeList, + Optional: true, + MaxItems: 1, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "prevent_cancellation_on_destroy": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + }, + }, + }, } // this is a temporary hack to enable us to gradually add provider blocks to test configurations @@ -455,5 +470,15 @@ func expandFeatures(input []interface{}) features.UserFeatures { } } + if raw, ok := val["subscription"]; ok { + items := raw.([]interface{}) + if len(items) > 0 { + subscriptionRaw := items[0].(map[string]interface{}) + if v, ok := subscriptionRaw["prevent_cancellation_on_destroy"]; ok { + featuresMap.Subscription.PreventCancellationOnDestroy = v.(bool) + } + } + } + return featuresMap } diff --git a/internal/provider/features_test.go b/internal/provider/features_test.go index 1b5c2a949e682..2e35abf8a3850 100644 --- a/internal/provider/features_test.go +++ b/internal/provider/features_test.go @@ -68,6 +68,9 @@ func TestExpandFeatures(t *testing.T) { ResourceGroup: features.ResourceGroupFeatures{ PreventDeletionIfContainsResources: true, }, + Subscription: features.SubscriptionFeatures{ + PreventCancellationOnDestroy: false, + }, }, }, { @@ -124,6 +127,11 @@ func TestExpandFeatures(t *testing.T) { "prevent_deletion_if_contains_resources": true, }, }, + "subscription": []interface{}{ + map[string]interface{}{ + "prevent_cancellation_on_destroy": true, + }, + }, "template_deployment": []interface{}{ map[string]interface{}{ "delete_nested_items_during_deletion": true, @@ -180,6 +188,9 @@ func TestExpandFeatures(t *testing.T) { ResourceGroup: features.ResourceGroupFeatures{ PreventDeletionIfContainsResources: true, }, + Subscription: features.SubscriptionFeatures{ + PreventCancellationOnDestroy: true, + }, TemplateDeployment: features.TemplateDeploymentFeatures{ DeleteNestedItemsDuringDeletion: true, }, @@ -249,6 +260,11 @@ func TestExpandFeatures(t *testing.T) { "prevent_deletion_if_contains_resources": false, }, }, + "subscription": []interface{}{ + map[string]interface{}{ + "prevent_cancellation_on_destroy": false, + }, + }, "template_deployment": []interface{}{ map[string]interface{}{ "delete_nested_items_during_deletion": false, @@ -305,6 +321,9 @@ func TestExpandFeatures(t *testing.T) { ResourceGroup: features.ResourceGroupFeatures{ PreventDeletionIfContainsResources: false, }, + Subscription: features.SubscriptionFeatures{ + PreventCancellationOnDestroy: false, + }, TemplateDeployment: features.TemplateDeploymentFeatures{ DeleteNestedItemsDuringDeletion: false, }, @@ -1196,3 +1215,51 @@ func TestExpandFeaturesManagedDisk(t *testing.T) { } } } + +func TestExpandFeaturesSubscription(t *testing.T) { + testData := []struct { + Name string + Input []interface{} + EnvVars map[string]interface{} + Expected features.UserFeatures + }{ + { + Name: "Empty Block", + Input: []interface{}{ + map[string]interface{}{ + "subscription": []interface{}{}, + }, + }, + Expected: features.UserFeatures{ + Subscription: features.SubscriptionFeatures{ + PreventCancellationOnDestroy: false, + }, + }, + }, + { + Name: "No Downtime Resize Enabled", + Input: []interface{}{ + map[string]interface{}{ + "subscription": []interface{}{ + map[string]interface{}{ + "prevent_cancellation_on_destroy": true, + }, + }, + }, + }, + Expected: features.UserFeatures{ + Subscription: features.SubscriptionFeatures{ + PreventCancellationOnDestroy: true, + }, + }, + }, + } + + for _, testCase := range testData { + t.Logf("[DEBUG] Test Case: %q", testCase.Name) + result := expandFeatures(testCase.Input) + if !reflect.DeepEqual(result.Subscription, testCase.Expected.Subscription) { + t.Fatalf("Expected %+v but got %+v", result.Subscription, testCase.Expected.Subscription) + } + } +} diff --git a/internal/provider/services.go b/internal/provider/services.go index d5bb4c99babea..7f84046a203ba 100644 --- a/internal/provider/services.go +++ b/internal/provider/services.go @@ -13,6 +13,7 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/internal/services/applicationinsights" "github.com/hashicorp/terraform-provider-azurerm/internal/services/appservice" "github.com/hashicorp/terraform-provider-azurerm/internal/services/arckubernetes" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/arcresourcebridge" "github.com/hashicorp/terraform-provider-azurerm/internal/services/attestation" "github.com/hashicorp/terraform-provider-azurerm/internal/services/authorization" "github.com/hashicorp/terraform-provider-azurerm/internal/services/automanage" @@ -139,6 +140,7 @@ func SupportedTypedServices() []sdk.TypedServiceRegistration { applicationinsights.Registration{}, appservice.Registration{}, arckubernetes.Registration{}, + arcresourcebridge.Registration{}, authorization.Registration{}, automanage.Registration{}, automation.Registration{}, @@ -155,6 +157,7 @@ func SupportedTypedServices() []sdk.TypedServiceRegistration { dashboard.Registration{}, databoxedge.Registration{}, databricks.Registration{}, + datafactory.Registration{}, digitaltwins.Registration{}, disks.Registration{}, domainservices.Registration{}, diff --git a/internal/services/apimanagement/api_management_api_operation_policy_resource.go b/internal/services/apimanagement/api_management_api_operation_policy_resource.go index b8ee32d49614d..52a3326ac0164 100644 --- a/internal/services/apimanagement/api_management_api_operation_policy_resource.go +++ b/internal/services/apimanagement/api_management_api_operation_policy_resource.go @@ -39,9 +39,10 @@ func resourceApiManagementApiOperationPolicy() *pluginsdk.Resource { Delete: pluginsdk.DefaultTimeout(30 * time.Minute), }, - SchemaVersion: 1, + SchemaVersion: 2, StateUpgraders: pluginsdk.StateUpgrades(map[int]pluginsdk.StateUpgrade{ 0: migration.ApiManagementApiOperationPolicyV0ToV1{}, + 1: migration.ApiManagementApiOperationPolicyV1ToV2{}, }), Schema: map[string]*pluginsdk.Schema{ diff --git a/internal/services/apimanagement/api_management_api_policy_resource.go b/internal/services/apimanagement/api_management_api_policy_resource.go index a47542f96b0cf..9678471893987 100644 --- a/internal/services/apimanagement/api_management_api_policy_resource.go +++ b/internal/services/apimanagement/api_management_api_policy_resource.go @@ -39,9 +39,10 @@ func resourceApiManagementApiPolicy() *pluginsdk.Resource { Delete: pluginsdk.DefaultTimeout(30 * time.Minute), }, - SchemaVersion: 1, + SchemaVersion: 2, StateUpgraders: pluginsdk.StateUpgrades(map[int]pluginsdk.StateUpgrade{ 0: migration.ApiManagementApiPolicyV0ToV1{}, + 1: migration.ApiManagementApiPolicyV1ToV2{}, }), Schema: map[string]*pluginsdk.Schema{ diff --git a/internal/services/apimanagement/api_management_api_resource.go b/internal/services/apimanagement/api_management_api_resource.go index d89657647d8c4..695211d6d6aaf 100644 --- a/internal/services/apimanagement/api_management_api_resource.go +++ b/internal/services/apimanagement/api_management_api_resource.go @@ -420,6 +420,11 @@ func resourceApiManagementApiCreateUpdate(d *pluginsdk.ResourceData, meta interf ApiVersion: pointer.To(version), }, } + + if v, ok := d.GetOk("service_url"); ok { + apiParams.Properties.ServiceUrl = pointer.To(v.(string)) + } + wsdlSelectorVs := importV["wsdl_selector"].([]interface{}) if len(wsdlSelectorVs) > 0 { diff --git a/internal/services/apimanagement/api_management_api_resource_test.go b/internal/services/apimanagement/api_management_api_resource_test.go index 5896fd89ee304..9074c07e7cae6 100644 --- a/internal/services/apimanagement/api_management_api_resource_test.go +++ b/internal/services/apimanagement/api_management_api_resource_test.go @@ -247,6 +247,44 @@ func TestAccApiManagementApi_importSwagger(t *testing.T) { }) } +func TestAccApiManagementApi_importSwaggerWithServiceUrl(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_api_management_api", "test") + r := ApiManagementApiResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.importSwaggerWithServiceUrl(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + { + ResourceName: data.ResourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + // not returned from the API + "import", + }, + }, + { + Config: r.importSwaggerWithServiceUrlUpdate(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + { + ResourceName: data.ResourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + // not returned from the API + "import", + }, + }, + }) +} + func TestAccApiManagementApi_importWsdl(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_api_management_api", "test") r := ApiManagementApiResource{} @@ -606,6 +644,52 @@ resource "azurerm_api_management_api" "test" { `, r.template(data, SkuNameConsumption), data.RandomInteger) } +func (r ApiManagementApiResource) importSwaggerWithServiceUrl(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_api_management_api" "test" { + name = "acctestapi-%d" + resource_group_name = azurerm_resource_group.test.name + api_management_name = azurerm_api_management.test.name + display_name = "api1" + path = "api1" + protocols = ["https"] + revision = "1" + description = "import swagger" + service_url = "https://example.com/foo/bar" + + import { + content_value = file("testdata/api_management_api_swagger.json") + content_format = "swagger-json" + } +} +`, r.template(data, SkuNameConsumption), data.RandomInteger) +} + +func (r ApiManagementApiResource) importSwaggerWithServiceUrlUpdate(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_api_management_api" "test" { + name = "acctestapi-%d" + resource_group_name = azurerm_resource_group.test.name + api_management_name = azurerm_api_management.test.name + display_name = "api1" + path = "api1" + protocols = ["https"] + revision = "1" + description = "import swagger update" + service_url = "https://example.com/foo/bar" + + import { + content_value = file("testdata/api_management_api_swagger.json") + content_format = "swagger-json" + } +} +`, r.template(data, SkuNameConsumption), data.RandomInteger) +} + func (r ApiManagementApiResource) importWsdl(data acceptance.TestData) string { return fmt.Sprintf(` %s diff --git a/internal/services/apimanagement/api_management_backend_resource.go b/internal/services/apimanagement/api_management_backend_resource.go index a990324ed88ba..2e1ae7abcd6cf 100644 --- a/internal/services/apimanagement/api_management_backend_resource.go +++ b/internal/services/apimanagement/api_management_backend_resource.go @@ -540,17 +540,17 @@ func flattenApiManagementBackendCredentials(input *backend.BackendCredentialsCon if input.Certificate != nil { result["certificate"] = *input.Certificate } - result["header"] = flattenApiManagementBackendCredentialsObject(*input.Header) - result["query"] = flattenApiManagementBackendCredentialsObject(*input.Query) + result["header"] = flattenApiManagementBackendCredentialsObject(input.Header) + result["query"] = flattenApiManagementBackendCredentialsObject(input.Query) return append(results, result) } -func flattenApiManagementBackendCredentialsObject(input map[string][]string) map[string]interface{} { +func flattenApiManagementBackendCredentialsObject(input *map[string][]string) map[string]interface{} { results := make(map[string]interface{}) if input == nil { return results } - for k, v := range input { + for k, v := range *input { results[k] = strings.Join(v, ",") } return results diff --git a/internal/services/apimanagement/api_management_data_source_test.go b/internal/services/apimanagement/api_management_data_source_test.go index 0fdf78a258ab3..0522a4398ffe6 100644 --- a/internal/services/apimanagement/api_management_data_source_test.go +++ b/internal/services/apimanagement/api_management_data_source_test.go @@ -247,45 +247,45 @@ provider "azurerm" { } resource "azurerm_resource_group" "test1" { - name = "amestRG1-%d" + name = "acctestRG1-%d" location = "%s" } resource "azurerm_resource_group" "test2" { - name = "amestRG2-%d" + name = "acctestRG2-%d" location = "%s" } resource "azurerm_virtual_network" "test1" { - name = "amtestVNET1-%d" + name = "acctestVNET1-%d" location = azurerm_resource_group.test1.location resource_group_name = azurerm_resource_group.test1.name address_space = ["10.0.0.0/16"] } resource "azurerm_subnet" "test1" { - name = "amtestSNET1-%d" + name = "acctestSNET1-%d" resource_group_name = azurerm_resource_group.test1.name virtual_network_name = azurerm_virtual_network.test1.name address_prefixes = ["10.0.1.0/24"] } resource "azurerm_virtual_network" "test2" { - name = "amtestVNET2-%d" + name = "acctestVNET2-%d" location = azurerm_resource_group.test2.location resource_group_name = azurerm_resource_group.test2.name address_space = ["10.1.0.0/16"] } resource "azurerm_subnet" "test2" { - name = "amtestSNET2-%d" + name = "acctestSNET2-%d" resource_group_name = azurerm_resource_group.test2.name virtual_network_name = azurerm_virtual_network.test2.name address_prefixes = ["10.1.1.0/24"] } resource "azurerm_api_management" "test" { - name = "amtestAM-%d" + name = "acctestAM-%d" location = azurerm_resource_group.test1.location resource_group_name = azurerm_resource_group.test1.name publisher_name = "pub1" diff --git a/internal/services/apimanagement/api_management_product_policy_resource.go b/internal/services/apimanagement/api_management_product_policy_resource.go index c3188a2ab9e02..fd56130c7c350 100644 --- a/internal/services/apimanagement/api_management_product_policy_resource.go +++ b/internal/services/apimanagement/api_management_product_policy_resource.go @@ -39,9 +39,10 @@ func resourceApiManagementProductPolicy() *pluginsdk.Resource { Delete: pluginsdk.DefaultTimeout(30 * time.Minute), }, - SchemaVersion: 1, + SchemaVersion: 2, StateUpgraders: pluginsdk.StateUpgrades(map[int]pluginsdk.StateUpgrade{ 0: migration.ApiManagementProductPolicyV0ToV1{}, + 1: migration.ApiManagementProductPolicyV1ToV2{}, }), Schema: map[string]*pluginsdk.Schema{ diff --git a/internal/services/apimanagement/api_management_resource.go b/internal/services/apimanagement/api_management_resource.go index 0f1dd533d9137..a720035b69e4e 100644 --- a/internal/services/apimanagement/api_management_resource.go +++ b/internal/services/apimanagement/api_management_resource.go @@ -64,9 +64,9 @@ var ( func resourceApiManagementService() *pluginsdk.Resource { return &pluginsdk.Resource{ - Create: resourceApiManagementServiceCreateUpdate, + Create: resourceApiManagementServiceCreate, Read: resourceApiManagementServiceRead, - Update: resourceApiManagementServiceCreateUpdate, + Update: resourceApiManagementServiceUpdate, Delete: resourceApiManagementServiceDelete, Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { _, err := apimanagementservice.ParseServiceID(id) @@ -666,7 +666,7 @@ func resourceApiManagementSchema() map[string]*pluginsdk.Schema { } } -func resourceApiManagementServiceCreateUpdate(d *pluginsdk.ResourceData, meta interface{}) error { +func resourceApiManagementServiceCreate(d *pluginsdk.ResourceData, meta interface{}) error { client := meta.(*clients.Client).ApiManagement.ServiceClient apiClient := meta.(*clients.Client).ApiManagement.ApiClient deletedServicesClient := meta.(*clients.Client).ApiManagement.DeletedServicesClient @@ -681,17 +681,15 @@ func resourceApiManagementServiceCreateUpdate(d *pluginsdk.ResourceData, meta in id := apimanagementservice.NewServiceID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) - if d.IsNewResource() { - existing, err := client.Get(ctx, id) - if err != nil { - if !response.WasNotFound(existing.HttpResponse) { - return fmt.Errorf("checking for presence of an existing %s: %+v", id, err) - } - } + existing, err := client.Get(ctx, id) + if err != nil { if !response.WasNotFound(existing.HttpResponse) { - return tf.ImportAsExistsError("azurerm_api_management", id.ID()) + return fmt.Errorf("checking for presence of an existing %s: %+v", id, err) } } + if !response.WasNotFound(existing.HttpResponse) { + return tf.ImportAsExistsError("azurerm_api_management", id.ID()) + } location := azure.NormalizeLocation(d.Get("location").(string)) t := d.Get("tags").(map[string]interface{}) @@ -711,51 +709,49 @@ func resourceApiManagementServiceCreateUpdate(d *pluginsdk.ResourceData, meta in publicNetworkAccess = apimanagementservice.PublicNetworkAccessDisabled } - if d.IsNewResource() { - // before creating check to see if the resource exists in the soft delete state - deletedServiceId := deletedservice.NewDeletedServiceID(id.SubscriptionId, location, id.ServiceName) - softDeleted, err := deletedServicesClient.GetByName(ctx, deletedServiceId) - if err != nil { - // If Terraform lacks permission to read at the Subscription we'll get 403, not 404 - if !response.WasNotFound(softDeleted.HttpResponse) && !response.WasForbidden(softDeleted.HttpResponse) { - return fmt.Errorf("checking for the presence of an existing Soft-Deleted API Management %q (Location %q): %+v", id.ServiceName, location, err) - } + // before creating check to see if the resource exists in the soft delete state + deletedServiceId := deletedservice.NewDeletedServiceID(id.SubscriptionId, location, id.ServiceName) + softDeleted, err := deletedServicesClient.GetByName(ctx, deletedServiceId) + if err != nil { + // If Terraform lacks permission to read at the Subscription we'll get 403, not 404 + if !response.WasNotFound(softDeleted.HttpResponse) && !response.WasForbidden(softDeleted.HttpResponse) { + return fmt.Errorf("checking for the presence of an existing Soft-Deleted API Management %q (Location %q): %+v", id.ServiceName, location, err) } + } - // if so, does the user want us to recover it? - if !response.WasNotFound(softDeleted.HttpResponse) && !response.WasForbidden(softDeleted.HttpResponse) { - if !meta.(*clients.Client).Features.ApiManagement.RecoverSoftDeleted { - // this exists but the users opted out, so they must import this it out-of-band - return fmt.Errorf(optedOutOfRecoveringSoftDeletedApiManagementErrorFmt(id.ServiceName, location)) - } + // if so, does the user want us to recover it? + if !response.WasNotFound(softDeleted.HttpResponse) && !response.WasForbidden(softDeleted.HttpResponse) { + if !meta.(*clients.Client).Features.ApiManagement.RecoverSoftDeleted { + // this exists but the users opted out, so they must import this it out-of-band + return fmt.Errorf(optedOutOfRecoveringSoftDeletedApiManagementErrorFmt(id.ServiceName, location)) + } - // First recover the deleted API Management, since all other properties are ignored during a restore operation - // (don't set the ID just yet to avoid tainting on failure) - params := apimanagementservice.ApiManagementServiceResource{ - Location: location, - Properties: apimanagementservice.ApiManagementServiceProperties{ - Restore: pointer.To(true), - }, - Sku: sku, - } + // First recover the deleted API Management, since all other properties are ignored during a restore operation + // (don't set the ID just yet to avoid tainting on failure) + params := apimanagementservice.ApiManagementServiceResource{ + Location: location, + Properties: apimanagementservice.ApiManagementServiceProperties{ + Restore: pointer.To(true), + }, + Sku: sku, + } - // retry to restore service since there is an API issue : https://github.com/Azure/azure-rest-api-specs/issues/25262 - err = pluginsdk.Retry(d.Timeout(pluginsdk.TimeoutCreate), func() *pluginsdk.RetryError { - resp, err := client.CreateOrUpdate(ctx, id, params) - if err != nil { - if response.WasBadRequest(resp.HttpResponse) { - return pluginsdk.RetryableError(err) - } - return pluginsdk.NonRetryableError(err) - } - if err := resp.Poller.PollUntilDone(ctx); err != nil { - return pluginsdk.NonRetryableError(err) - } - return nil - }) + // retry to restore service since there is an API issue : https://github.com/Azure/azure-rest-api-specs/issues/25262 + err = pluginsdk.Retry(d.Timeout(pluginsdk.TimeoutCreate), func() *pluginsdk.RetryError { + resp, err := client.CreateOrUpdate(ctx, id, params) if err != nil { - return fmt.Errorf("recovering %s: %+v", id, err) + if response.WasBadRequest(resp.HttpResponse) { + return pluginsdk.RetryableError(err) + } + return pluginsdk.NonRetryableError(err) } + if err := resp.Poller.PollUntilDone(ctx); err != nil { + return pluginsdk.NonRetryableError(err) + } + return nil + }) + if err != nil { + return fmt.Errorf("recovering %s: %+v", id, err) } } @@ -856,50 +852,48 @@ func resourceApiManagementServiceCreateUpdate(d *pluginsdk.ResourceData, meta in d.SetId(id.ID()) // Remove sample products and APIs after creating (v3.0 behaviour) - if d.IsNewResource() { - apiServiceId := api.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) + apiServiceId := api.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) - listResp, err := apiClient.ListByService(ctx, apiServiceId, api.ListByServiceOperationOptions{}) - if err != nil { - return fmt.Errorf("listing APIs after creation of %s: %+v", id, err) - } - if model := listResp.Model; model != nil { - for _, contract := range *model { - if contract.Id == nil { - continue - } - apiId, err := api.ParseApiID(pointer.From(contract.Id)) - if err != nil { - return fmt.Errorf("parsing API ID: %+v", err) - } - log.Printf("[DEBUG] Deleting %s", apiId) - if delResp, err := apiClient.Delete(ctx, *apiId, api.DeleteOperationOptions{DeleteRevisions: pointer.To(true)}); err != nil { - if !response.WasNotFound(delResp.HttpResponse) { - return fmt.Errorf("deleting %s: %+v", *apiId, err) - } + listResp, err := apiClient.ListByService(ctx, apiServiceId, api.ListByServiceOperationOptions{}) + if err != nil { + return fmt.Errorf("listing APIs after creation of %s: %+v", id, err) + } + if model := listResp.Model; model != nil { + for _, contract := range *model { + if contract.Id == nil { + continue + } + apiId, err := api.ParseApiID(pointer.From(contract.Id)) + if err != nil { + return fmt.Errorf("parsing API ID: %+v", err) + } + log.Printf("[DEBUG] Deleting %s", apiId) + if delResp, err := apiClient.Delete(ctx, *apiId, api.DeleteOperationOptions{DeleteRevisions: pointer.To(true)}); err != nil { + if !response.WasNotFound(delResp.HttpResponse) { + return fmt.Errorf("deleting %s: %+v", *apiId, err) } } } + } - produceServiceId := product.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) - proListResp, err := productsClient.ListByService(ctx, produceServiceId, product.ListByServiceOperationOptions{}) - if err != nil { - return fmt.Errorf("listing products after creation of %s: %+v", id, err) - } - if model := proListResp.Model; model != nil { - for _, contract := range *model { - if contract.Id == nil { - continue - } - productId, err := product.ParseProductID(pointer.From(contract.Id)) - if err != nil { - return fmt.Errorf("parsing product ID: %+v", err) - } - log.Printf("[DEBUG] Deleting %s", productId) - if delResp, err := productsClient.Delete(ctx, *productId, product.DeleteOperationOptions{DeleteSubscriptions: pointer.To(true)}); err != nil { - if !response.WasNotFound(delResp.HttpResponse) { - return fmt.Errorf("deleting %s: %+v", *productId, err) - } + produceServiceId := product.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) + proListResp, err := productsClient.ListByService(ctx, produceServiceId, product.ListByServiceOperationOptions{}) + if err != nil { + return fmt.Errorf("listing products after creation of %s: %+v", id, err) + } + if model := proListResp.Model; model != nil { + for _, contract := range *model { + if contract.Id == nil { + continue + } + productId, err := product.ParseProductID(pointer.From(contract.Id)) + if err != nil { + return fmt.Errorf("parsing product ID: %+v", err) + } + log.Printf("[DEBUG] Deleting %s", productId) + if delResp, err := productsClient.Delete(ctx, *productId, product.DeleteOperationOptions{DeleteSubscriptions: pointer.To(true)}); err != nil { + if !response.WasNotFound(delResp.HttpResponse) { + return fmt.Errorf("deleting %s: %+v", *productId, err) } } } @@ -919,7 +913,7 @@ func resourceApiManagementServiceCreateUpdate(d *pluginsdk.ResourceData, meta in } signUpSettingsRaw := d.Get("sign_up").([]interface{}) - if sku.Name == apimanagementservice.SkuTypeConsumption && len(signInSettingsRaw) > 0 { + if sku.Name == apimanagementservice.SkuTypeConsumption && len(signUpSettingsRaw) > 0 { return fmt.Errorf("`sign_up` is not support for sku tier `Consumption`") } if sku.Name != apimanagementservice.SkuTypeConsumption { @@ -951,7 +945,7 @@ func resourceApiManagementServiceCreateUpdate(d *pluginsdk.ResourceData, meta in return err } - if d.HasChange("policy") { + if _, ok := d.GetOk("policy"); ok { policyServiceId := policy.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) // remove the existing policy if delResp, err := policyClient.Delete(ctx, policyServiceId, policy.DeleteOperationOptions{}); err != nil { @@ -985,6 +979,249 @@ func resourceApiManagementServiceCreateUpdate(d *pluginsdk.ResourceData, meta in return resourceApiManagementServiceRead(d, meta) } +func resourceApiManagementServiceUpdate(d *pluginsdk.ResourceData, meta interface{}) error { + client := meta.(*clients.Client).ApiManagement.ServiceClient + subscriptionId := meta.(*clients.Client).Account.SubscriptionId + ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + defer cancel() + + sku := expandAzureRmApiManagementSkuName(d.Get("sku_name").(string)) + + log.Printf("[INFO] preparing arguments for API Management Service creation.") + + id := apimanagementservice.NewServiceID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + + _, err := client.Get(ctx, id) + if err != nil { + return fmt.Errorf("checking for presence of an existing %s: %+v", id, err) + } + + props := apimanagementservice.ApiManagementServiceUpdateProperties{} + payload := apimanagementservice.ApiManagementServiceUpdateParameters{} + + if d.HasChange("sku_name") { + payload.Sku = pointer.To(sku) + } + + if d.HasChange("tags") { + payload.Tags = tags.Expand(d.Get("tags").(map[string]interface{})) + } + + if d.HasChange("public_ip_address_id") { + publicIpAddressId := d.Get("public_ip_address_id").(string) + if publicIpAddressId != "" { + if sku.Name != apimanagementservice.SkuTypePremium && sku.Name != apimanagementservice.SkuTypeDeveloper { + if d.Get("virtual_network_type").(string) == string(apimanagementservice.VirtualNetworkTypeNone) { + return fmt.Errorf("`public_ip_address_id` is only supported when sku type is `Developer` or `Premium`, and the APIM instance is deployed in a virtual network.") + } + } + props.PublicIPAddressId = pointer.To(publicIpAddressId) + } + } + + if d.HasChange("notification_sender_email") { + props.NotificationSenderEmail = pointer.To(d.Get("notification_sender_email").(string)) + } + + if d.HasChange("virtual_network_type") { + virtualNetworkType := d.Get("virtual_network_type").(string) + props.VirtualNetworkType = pointer.To(apimanagementservice.VirtualNetworkType(virtualNetworkType)) + + if virtualNetworkType != string(apimanagementservice.VirtualNetworkTypeNone) { + virtualNetworkConfiguration := expandAzureRmApiManagementVirtualNetworkConfigurations(d) + if virtualNetworkConfiguration == nil { + return fmt.Errorf("You must specify 'virtual_network_configuration' when 'virtual_network_type' is %q", virtualNetworkType) + } + props.VirtualNetworkConfiguration = virtualNetworkConfiguration + } + } + + if d.HasChanges("security", "protocols") { + customProperties, err := expandApiManagementCustomProperties(d, sku.Name == apimanagementservice.SkuTypeConsumption) + if err != nil { + return err + } + props.CustomProperties = pointer.To(customProperties) + } + + if d.HasChange("certificate") { + props.Certificates = expandAzureRmApiManagementCertificates(d) + } + + if d.HasChange("public_network_access_enabled") { + publicNetworkAccess := apimanagementservice.PublicNetworkAccessEnabled + if !d.Get("public_network_access_enabled").(bool) { + publicNetworkAccess = apimanagementservice.PublicNetworkAccessDisabled + } + + props.PublicNetworkAccess = pointer.To(publicNetworkAccess) + } + + if d.HasChange("publisher_name") { + props.PublisherName = pointer.To(d.Get("publisher_name").(string)) + } + + if d.HasChange("publisher_email") { + props.PublisherEmail = pointer.To(d.Get("publisher_email").(string)) + } + + if d.HasChange("hostname_configuration") { + props.HostnameConfigurations = expandAzureRmApiManagementHostnameConfigurations(d) + } + + // intentionally not gated since we specify a default value (of None) in the expand, which we need on updates + if d.HasChange("identity") { + identityRaw := d.Get("identity").([]interface{}) + identity, err := identity.ExpandSystemAndUserAssignedMap(identityRaw) + if err != nil { + return fmt.Errorf("expanding `identity`: %+v", err) + } + payload.Identity = identity + } + + if d.HasChange("additional_location") { + props.AdditionalLocations, err = expandAzureRmApiManagementAdditionalLocations(d, sku) + if err != nil { + return err + } + } + + if d.HasChange("client_certificate_enabled") { + enableClientCertificate := d.Get("client_certificate_enabled").(bool) + if enableClientCertificate && sku.Name != apimanagementservice.SkuTypeConsumption { + return fmt.Errorf("`client_certificate_enabled` is only supported when sku type is `Consumption`") + } + props.EnableClientCertificate = pointer.To(enableClientCertificate) + } + + if d.HasChange("gateway_disabled") { + gateWayDisabled := d.Get("gateway_disabled").(bool) + if gateWayDisabled && props.AdditionalLocations != nil && len(*props.AdditionalLocations) == 0 { + return fmt.Errorf("`gateway_disabled` is only supported when `additional_location` is set") + } + props.DisableGateway = pointer.To(gateWayDisabled) + } + + if d.HasChange("min_api_version") { + props.ApiVersionConstraint = &apimanagementservice.ApiVersionConstraint{ + MinApiVersion: nil, + } + + if v, ok := d.GetOk("min_api_version"); ok { + props.ApiVersionConstraint.MinApiVersion = pointer.To(v.(string)) + } + } + + if d.HasChange("zones") { + if v := d.Get("zones").(*schema.Set).List(); len(v) > 0 { + if sku.Name != apimanagementservice.SkuTypePremium { + return fmt.Errorf("`zones` is only supported when sku type is `Premium`") + } + + if d.Get("public_ip_address_id").(string) == "" { + return fmt.Errorf("`public_ip_address` must be specified when `zones` are provided") + } + zones := zones.ExpandUntyped(v) + payload.Zones = &zones + } + } + + payload.Properties = pointer.To(props) + + if err := client.UpdateThenPoll(ctx, id, payload); err != nil { + return fmt.Errorf("creating/updating %s: %+v", id, err) + } + + d.SetId(id.ID()) + + if d.HasChange("sign_in") { + signInSettingsRaw := d.Get("sign_in").([]interface{}) + if sku.Name == apimanagementservice.SkuTypeConsumption && len(signInSettingsRaw) > 0 { + return fmt.Errorf("`sign_in` is not support for sku tier `Consumption`") + } + if sku.Name != apimanagementservice.SkuTypeConsumption { + signInSettingServiceId := signinsettings.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) + signInSettings := expandApiManagementSignInSettings(signInSettingsRaw) + signInClient := meta.(*clients.Client).ApiManagement.SignInClient + if _, err := signInClient.CreateOrUpdate(ctx, signInSettingServiceId, signInSettings, signinsettings.CreateOrUpdateOperationOptions{}); err != nil { + return fmt.Errorf(" setting Sign In settings for %s: %+v", id, err) + } + } + } + + if d.HasChange("sign_up") { + signUpSettingsRaw := d.Get("sign_up").([]interface{}) + if sku.Name == apimanagementservice.SkuTypeConsumption && len(signUpSettingsRaw) > 0 { + return fmt.Errorf("`sign_up` is not support for sku tier `Consumption`") + } + if sku.Name != apimanagementservice.SkuTypeConsumption { + signUpSettingServiceId := signupsettings.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) + signUpSettings := expandApiManagementSignUpSettings(signUpSettingsRaw) + signUpClient := meta.(*clients.Client).ApiManagement.SignUpClient + if _, err := signUpClient.CreateOrUpdate(ctx, signUpSettingServiceId, signUpSettings, signupsettings.CreateOrUpdateOperationOptions{}); err != nil { + return fmt.Errorf(" setting Sign Up settings for %s: %+v", id, err) + } + } + } + + if d.HasChange("delegation") { + delegationSettingsRaw := d.Get("delegation").([]interface{}) + if sku.Name == apimanagementservice.SkuTypeConsumption && len(delegationSettingsRaw) > 0 { + return fmt.Errorf("`delegation` is not support for sku tier `Consumption`") + } + if sku.Name != apimanagementservice.SkuTypeConsumption && len(delegationSettingsRaw) > 0 { + delegationSettingServiceId := delegationsettings.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) + delegationSettings := expandApiManagementDelegationSettings(delegationSettingsRaw) + delegationClient := meta.(*clients.Client).ApiManagement.DelegationSettingsClient + if _, err := delegationClient.CreateOrUpdate(ctx, delegationSettingServiceId, delegationSettings, delegationsettings.CreateOrUpdateOperationOptions{}); err != nil { + return fmt.Errorf(" setting Delegation settings for %s: %+v", id, err) + } + } + } + + if d.HasChange("policy") { + policyClient := meta.(*clients.Client).ApiManagement.PolicyClient + policiesRaw := d.Get("policy").([]interface{}) + policyContract, err := expandApiManagementPolicies(policiesRaw) + if err != nil { + return err + } + + policyServiceId := policy.NewServiceID(subscriptionId, id.ResourceGroupName, id.ServiceName) + // remove the existing policy + if delResp, err := policyClient.Delete(ctx, policyServiceId, policy.DeleteOperationOptions{}); err != nil { + if !response.WasNotFound(delResp.HttpResponse) { + return fmt.Errorf("removing Policies from %s: %+v", id, err) + } + } + + // then add the new one, if it exists + if policyContract != nil { + if _, err := policyClient.CreateOrUpdate(ctx, policyServiceId, *policyContract, policy.CreateOrUpdateOperationOptions{}); err != nil { + return fmt.Errorf(" setting Policies for %s: %+v", id, err) + } + } + } + + if d.HasChange("tenant_access") { + tenantAccessRaw := d.Get("tenant_access").([]interface{}) + if sku.Name == apimanagementservice.SkuTypeConsumption && len(tenantAccessRaw) > 0 { + return fmt.Errorf("`tenant_access` is not supported for sku tier `Consumption`") + } + if sku.Name != apimanagementservice.SkuTypeConsumption && d.HasChange("tenant_access") { + tenantAccessServiceId := tenantaccess.NewAccessID(subscriptionId, id.ResourceGroupName, id.ServiceName, "access") + tenantAccessInformationParametersRaw := d.Get("tenant_access").([]interface{}) + tenantAccessInformationParameters := expandApiManagementTenantAccessSettings(tenantAccessInformationParametersRaw) + tenantAccessClient := meta.(*clients.Client).ApiManagement.TenantAccessClient + if _, err := tenantAccessClient.Update(ctx, tenantAccessServiceId, tenantAccessInformationParameters, tenantaccess.UpdateOperationOptions{}); err != nil { + return fmt.Errorf(" updating tenant access settings for %s: %+v", id, err) + } + } + } + + return resourceApiManagementServiceRead(d, meta) +} + func resourceApiManagementServiceRead(d *pluginsdk.ResourceData, meta interface{}) error { client := meta.(*clients.Client).ApiManagement.ServiceClient signInClient := meta.(*clients.Client).ApiManagement.SignInClient diff --git a/internal/services/apimanagement/migration/api_operation_policy_v1_to_v2.go b/internal/services/apimanagement/migration/api_operation_policy_v1_to_v2.go new file mode 100644 index 0000000000000..20dbe8473a8fd --- /dev/null +++ b/internal/services/apimanagement/migration/api_operation_policy_v1_to_v2.go @@ -0,0 +1,76 @@ +package migration + +import ( + "context" + "log" + "strings" + + "github.com/hashicorp/go-azure-sdk/resource-manager/apimanagement/2021-08-01/apioperationpolicy" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" +) + +var _ pluginsdk.StateUpgrade = ApiManagementApiOperationPolicyV1ToV2{} + +type ApiManagementApiOperationPolicyV1ToV2 struct{} + +func (ApiManagementApiOperationPolicyV1ToV2) Schema() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + + "resource_group_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "api_management_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "api_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "operation_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "xml_content": { + Type: pluginsdk.TypeString, + Optional: true, + Computed: true, + }, + + "xml_link": { + Type: pluginsdk.TypeString, + Optional: true, + }, + } +} + +func (ApiManagementApiOperationPolicyV1ToV2) UpgradeFunc() pluginsdk.StateUpgraderFunc { + return func(ctx context.Context, rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) { + // old id : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.ApiManagement/service/instance1/apis/api1/operations/operation1/policies/policy + // new id : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.ApiManagement/service/instance1/apis/api1/operations/operation1 + oldId := rawState["id"].(string) + + // Prior to v3.70.0 of Terraform Provider, after importing resource, the id in state file ends with "/policies/policy", the id in state file ends with "/policies/xml" for creating resource by Terraform. + // So after migrating pandora SDK (starting from v3.70.0), these two cases need to be migrated. + // In ApiManagementApiPolicyV0ToV1, only the case where the ID ends with "/policies/xml" is processed, so the case where the ID ends with "/policies/policy" is processed here to solve the parse id error. + newId := strings.TrimSuffix(oldId, "/policies/policy") + parsed, err := apioperationpolicy.ParseOperationID(newId) + if err != nil { + return rawState, err + } + newId = parsed.ID() + log.Printf("[DEBUG] Updating ID from %q to %q", oldId, newId) + rawState["id"] = newId + + return rawState, nil + } +} diff --git a/internal/services/apimanagement/migration/api_policy_v1_to_v2.go b/internal/services/apimanagement/migration/api_policy_v1_to_v2.go new file mode 100644 index 0000000000000..18e73afb07ad0 --- /dev/null +++ b/internal/services/apimanagement/migration/api_policy_v1_to_v2.go @@ -0,0 +1,70 @@ +package migration + +import ( + "context" + "log" + "strings" + + "github.com/hashicorp/go-azure-sdk/resource-manager/apimanagement/2021-08-01/apipolicy" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" +) + +var _ pluginsdk.StateUpgrade = ApiManagementApiPolicyV1ToV2{} + +type ApiManagementApiPolicyV1ToV2 struct{} + +func (ApiManagementApiPolicyV1ToV2) Schema() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + + "resource_group_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "api_management_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "api_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "xml_content": { + Type: pluginsdk.TypeString, + Optional: true, + Computed: true, + }, + + "xml_link": { + Type: pluginsdk.TypeString, + Optional: true, + }, + } +} + +func (ApiManagementApiPolicyV1ToV2) UpgradeFunc() pluginsdk.StateUpgraderFunc { + return func(ctx context.Context, rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) { + // old id : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.ApiManagement/service/service1/apis/exampleId/policies/policy + // new id : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.ApiManagement/service/service1/apis/exampleId + oldId := rawState["id"].(string) + + // Prior to v3.70.0 of Terraform Provider, after importing resource, the id in state file ends with "/policies/policy", the id in state file ends with "/policies/xml" for creating resource by Terraform. + // So after migrating pandora SDK (starting from v3.70.0), these two cases need to be migrated. + // In ApiManagementApiPolicyV0ToV1, only the case where the ID ends with "/policies/xml" is processed, so the case where the ID ends with "/policies/policy" is processed here to solve the parse id error. + newId := strings.TrimSuffix(oldId, "/policies/policy") + parsed, err := apipolicy.ParseApiID(newId) + if err != nil { + return rawState, err + } + newId = parsed.ID() + log.Printf("[DEBUG] Updating ID from %q to %q", oldId, newId) + rawState["id"] = newId + + return rawState, nil + } +} diff --git a/internal/services/apimanagement/migration/api_product_policy_v1_to_v2.go b/internal/services/apimanagement/migration/api_product_policy_v1_to_v2.go new file mode 100644 index 0000000000000..a74c1f10cc1d6 --- /dev/null +++ b/internal/services/apimanagement/migration/api_product_policy_v1_to_v2.go @@ -0,0 +1,69 @@ +package migration + +import ( + "context" + "log" + "strings" + + "github.com/hashicorp/go-azure-sdk/resource-manager/apimanagement/2021-08-01/productpolicy" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" +) + +var _ pluginsdk.StateUpgrade = ApiManagementProductPolicyV1ToV2{} + +type ApiManagementProductPolicyV1ToV2 struct{} + +func (ApiManagementProductPolicyV1ToV2) Schema() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "resource_group_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "api_management_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "product_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + }, + + "xml_content": { + Type: pluginsdk.TypeString, + Optional: true, + Computed: true, + }, + + "xml_link": { + Type: pluginsdk.TypeString, + Optional: true, + }, + } +} + +func (ApiManagementProductPolicyV1ToV2) UpgradeFunc() pluginsdk.StateUpgraderFunc { + return func(ctx context.Context, rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) { + // old id : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.ApiManagement/service/service1/products/exampleId/policies/policy + // new id : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.ApiManagement/service/service1/products/exampleId + oldId := rawState["id"].(string) + + // Prior to v3.70.0 of Terraform Provider, after importing resource, the id in state file ends with "/policies/policy", the id in state file ends with "/policies/xml" for creating resource by Terraform. + // So after migrating pandora SDK (starting from v3.70.0), these two cases need to be migrated. + // In ApiManagementApiPolicyV0ToV1, only the case where the ID ends with "/policies/xml" is processed, so the case where the ID ends with "/policies/policy" is processed here to solve the parse id error. + newId := strings.TrimSuffix(oldId, "/policies/policy") + parsed, err := productpolicy.ParseProductID(newId) + if err != nil { + return rawState, err + } + newId = parsed.ID() + log.Printf("[DEBUG] Updating ID from %q to %q", oldId, newId) + rawState["id"] = newId + + return rawState, nil + } +} diff --git a/internal/services/appconfiguration/app_configuration.go b/internal/services/appconfiguration/app_configuration.go index 527dcd2186ffc..b54c2d691f1ed 100644 --- a/internal/services/appconfiguration/app_configuration.go +++ b/internal/services/appconfiguration/app_configuration.go @@ -4,11 +4,15 @@ package appconfiguration import ( + "bytes" "context" + "fmt" "github.com/Azure/go-autorest/autorest" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/configurationstores" + "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/tombuildsstuff/kermit/sdk/appconfiguration/1.0/appconfiguration" ) @@ -25,6 +29,39 @@ func flattenAppConfigurationEncryption(input *configurationstores.EncryptionProp }, } } + +func flattenAppConfigurationReplicas(input []replicas.Replica) ([]interface{}, error) { + results := make([]interface{}, 0) + for _, v := range input { + if v.Properties == nil { + return results, fmt.Errorf("retrieving Replica %s Properties is nil", *v.Id) + } + + replicaId, err := replicas.ParseReplicaIDInsensitively(pointer.From(v.Id)) + if err != nil { + return results, err + } + + result := map[string]interface{}{ + "name": pointer.From(v.Name), + "location": pointer.From(v.Location), + "endpoint": pointer.From(v.Properties.Endpoint), + "id": replicaId.ID(), + } + results = append(results, result) + } + return results, nil +} + +func resourceConfigurationStoreReplicaHash(input interface{}) int { + var buf bytes.Buffer + if rawData, ok := input.(map[string]interface{}); ok { + buf.WriteString(rawData["name"].(string)) + buf.WriteString(rawData["location"].(string)) + } + return pluginsdk.HashString(buf.String()) +} + func appConfigurationGetKeyRefreshFunc(ctx context.Context, client *appconfiguration.BaseClient, key, label string) pluginsdk.StateRefreshFunc { return func() (interface{}, string, error) { res, err := client.GetKeyValue(ctx, key, label, "", "", "", []appconfiguration.KeyValueFields{}) diff --git a/internal/services/appconfiguration/app_configuration_data_source.go b/internal/services/appconfiguration/app_configuration_data_source.go index 6672cf34e69cb..f7f57558c4222 100644 --- a/internal/services/appconfiguration/app_configuration_data_source.go +++ b/internal/services/appconfiguration/app_configuration_data_source.go @@ -14,6 +14,7 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/configurationstores" + "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/services/appconfiguration/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" @@ -93,6 +94,28 @@ func dataSourceAppConfiguration() *pluginsdk.Resource { Computed: true, }, + "replica": { + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + "location": commonschema.LocationComputed(), + "endpoint": { + Type: pluginsdk.TypeString, + Computed: true, + }, + "id": { + Type: pluginsdk.TypeString, + Computed: true, + }, + }, + }, + }, + "primary_read_key": { Type: pluginsdk.TypeList, Computed: true, @@ -257,6 +280,19 @@ func dataSourceAppConfigurationRead(d *pluginsdk.ResourceData, meta interface{}) return fmt.Errorf("setting `identity`: %+v", err) } + replicasClient := meta.(*clients.Client).AppConfiguration.ReplicasClient + resp, err := replicasClient.ListByConfigurationStoreComplete(ctx, replicas.NewConfigurationStoreID(id.SubscriptionId, id.ResourceGroupName, id.ConfigurationStoreName)) + if err != nil { + return fmt.Errorf("retrieving replicas for %s: %+v", id, err) + } + + replica, err := flattenAppConfigurationReplicas(resp.Items) + if err != nil { + return fmt.Errorf("flattening replicas for %s: %+v", id, err) + } + + d.Set("replica", replica) + return tags.FlattenAndSet(d, model.Tags) } diff --git a/internal/services/appconfiguration/app_configuration_data_source_test.go b/internal/services/appconfiguration/app_configuration_data_source_test.go index 0cdaf2c96d263..2bbbd31e0b55b 100644 --- a/internal/services/appconfiguration/app_configuration_data_source_test.go +++ b/internal/services/appconfiguration/app_configuration_data_source_test.go @@ -49,6 +49,10 @@ func TestAccAppConfigurationDataSource_basic(t *testing.T) { check.That(data.ResourceName).Key("secondary_write_key.0.secret").Exists(), check.That(data.ResourceName).Key("sku").Exists(), check.That(data.ResourceName).Key("soft_delete_retention_days").Exists(), + check.That(data.ResourceName).Key("replica.#").HasValue("2"), + check.That(data.ResourceName).Key("replica.0.name").Exists(), + check.That(data.ResourceName).Key("replica.1.id").Exists(), + check.That(data.ResourceName).Key("replica.1.endpoint").Exists(), ), }, }) diff --git a/internal/services/appconfiguration/app_configuration_feature_resource.go b/internal/services/appconfiguration/app_configuration_feature_resource.go index 48ae9ee52d477..e9ab5b72bc75d 100644 --- a/internal/services/appconfiguration/app_configuration_feature_resource.go +++ b/internal/services/appconfiguration/app_configuration_feature_resource.go @@ -12,6 +12,7 @@ import ( "time" "github.com/Azure/go-autorest/autorest" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/configurationstores" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" @@ -46,7 +47,7 @@ type FeatureResourceModel struct { Label string `tfschema:"label"` Locked bool `tfschema:"locked"` Tags map[string]interface{} `tfschema:"tags"` - PercentageFilter int `tfschema:"percentage_filter_value"` + PercentageFilter float64 `tfschema:"percentage_filter_value"` TimewindowFilters []TimewindowFilterParameters `tfschema:"timewindow_filter"` TargetingFilters []TargetingFilterAudience `tfschema:"targeting_filter"` } @@ -96,9 +97,9 @@ func (k FeatureResource) Arguments() map[string]*pluginsdk.Schema { Default: false, }, "percentage_filter_value": { - Type: pluginsdk.TypeInt, + Type: pluginsdk.TypeFloat, Optional: true, - ValidateFunc: validation.IntBetween(0, 100), + ValidateFunc: validation.FloatBetween(0, 100), }, "targeting_filter": { Type: pluginsdk.TypeList, @@ -242,9 +243,64 @@ func (k FeatureResource) Create() sdk.ResourceFunc { return tf.ImportAsExistsError(k.ResourceType(), nestedItemId.ID()) } - err = createOrUpdateFeature(ctx, client, model) + entity := appconfiguration.KeyValue{ + Key: pointer.To(featureKey), + Label: pointer.To(model.Label), + Tags: tags.Expand(model.Tags), + ContentType: pointer.To(FeatureKeyContentType), + Locked: pointer.To(model.Locked), + } + + value := FeatureValue{ + ID: model.Name, + Description: model.Description, + Enabled: model.Enabled, + } + + value.Conditions.ClientFilters.Filters = make([]interface{}, 0) + + if model.PercentageFilter > 0 { + value.Conditions.ClientFilters.Filters = append(value.Conditions.ClientFilters.Filters, PercentageFeatureFilter{ + Name: PercentageFilterName, + Parameters: PercentageFilterParameters{Value: model.PercentageFilter}, + }) + } + + if len(model.TargetingFilters) > 0 { + for _, tgtf := range model.TargetingFilters { + value.Conditions.ClientFilters.Filters = append(value.Conditions.ClientFilters.Filters, TargetingFeatureFilter{ + Name: TargetingFilterName, + Parameters: TargetingFilterParameters{Audience: tgtf}, + }) + } + } + + if len(model.TimewindowFilters) > 0 { + for _, twf := range model.TimewindowFilters { + value.Conditions.ClientFilters.Filters = append(value.Conditions.ClientFilters.Filters, TimewindowFeatureFilter{ + Name: TimewindowFilterName, + Parameters: twf, + }) + } + } + + valueBytes, err := json.Marshal(value) if err != nil { - return fmt.Errorf("while creating feature: %+v", err) + return fmt.Errorf("while marshalling FeatureValue struct: %+v", err) + } + entity.Value = pointer.To(string(valueBytes)) + if _, err = client.PutKeyValue(ctx, featureKey, model.Label, &entity, "", ""); err != nil { + return err + } + + if model.Locked { + if _, err = client.PutLock(ctx, featureKey, model.Label, "", ""); err != nil { + return fmt.Errorf("while locking key/label pair %s/%s: %+v", model.Name, model.Label, err) + } + } else { + if _, err = client.DeleteLock(ctx, featureKey, model.Label, "", ""); err != nil { + return fmt.Errorf("while unlocking key/label pair %s/%s: %+v", model.Name, model.Label, err) + } } // https://github.com/Azure/AppConfiguration/issues/763 @@ -373,6 +429,17 @@ func (k FeatureResource) Update() sdk.ResourceFunc { return err } + kv, err := client.GetKeyValue(ctx, nestedItemId.Key, nestedItemId.Label, "", "", "", []appconfiguration.KeyValueFields{}) + if err != nil { + return fmt.Errorf("while checking for key %q existence: %+v", *nestedItemId, err) + } + + var fv FeatureValue + err = json.Unmarshal([]byte(utils.NormalizeNilableString(kv.Value)), &fv) + if err != nil { + return fmt.Errorf("while unmarshalling underlying key's value: %+v", err) + } + var model FeatureResourceModel if err := metadata.Decode(&model); err != nil { return fmt.Errorf("decoding %+v", err) @@ -385,14 +452,104 @@ func (k FeatureResource) Update() sdk.ResourceFunc { metadata.Client.AppConfiguration.AddToCache(*configurationStoreId, nestedItemId.ConfigurationStoreEndpoint) - if metadata.ResourceData.HasChange("tags") || metadata.ResourceData.HasChange("enabled") || metadata.ResourceData.HasChange("locked") || metadata.ResourceData.HasChange("description") { - // Remove the lock, if any. We will put it back again if the model says so. - if _, err = client.DeleteLock(ctx, nestedItemId.Key, nestedItemId.Label, "", ""); err != nil { - return fmt.Errorf("while unlocking key/label pair %s/%s: %+v", nestedItemId.Key, nestedItemId.Label, err) + // Remove the lock, if any. We will put it back again if the model says so. + if _, err = client.DeleteLock(ctx, nestedItemId.Key, nestedItemId.Label, "", ""); err != nil { + return fmt.Errorf("while unlocking key/label pair %s/%s: %+v", nestedItemId.Key, nestedItemId.Label, err) + } + + if metadata.ResourceData.HasChange("tags") { + kv.Tags = tags.Expand(model.Tags) + } + + if metadata.ResourceData.HasChange("locked") { + kv.Locked = pointer.To(model.Locked) + } + + if metadata.ResourceData.HasChange("enabled") { + fv.Enabled = model.Enabled + } + + if metadata.ResourceData.HasChange("description") { + fv.Description = model.Description + } + + filters := make([]interface{}, 0) + filterChanged := false + timewindowFilters := make([]interface{}, 0) + targetingFilters := make([]interface{}, 0) + percentageFilter := PercentageFeatureFilter{} + if len(fv.Conditions.ClientFilters.Filters) > 0 { + for _, f := range fv.Conditions.ClientFilters.Filters { + switch f := f.(type) { + case TimewindowFeatureFilter: + twfp := f + timewindowFilters = append(timewindowFilters, twfp) + case TargetingFeatureFilter: + tfp := f + targetingFilters = append(targetingFilters, tfp) + case PercentageFeatureFilter: + pfp := f + percentageFilter = pfp + default: + return fmt.Errorf("while unmarshaling feature payload: unknown filter type %+v", f) + } + } + } + + if metadata.ResourceData.HasChange("percentage_filter_value") { + filters = append(filters, PercentageFeatureFilter{ + Name: PercentageFilterName, + Parameters: PercentageFilterParameters{Value: model.PercentageFilter}, + }) + filterChanged = true + } else { + filters = append(filters, percentageFilter) + } + + if metadata.ResourceData.HasChange("targeting_filter") { + for _, tgtf := range model.TargetingFilters { + filters = append(filters, TargetingFeatureFilter{ + Name: TargetingFilterName, + Parameters: TargetingFilterParameters{Audience: tgtf}, + }) + } + filterChanged = true + } else { + filters = append(filters, targetingFilters...) + } + + if metadata.ResourceData.HasChange("timewindow_filter") { + for _, twf := range model.TimewindowFilters { + filters = append(filters, TimewindowFeatureFilter{ + Name: TimewindowFilterName, + Parameters: twf, + }) + } + filterChanged = true + } else { + filters = append(filters, timewindowFilters...) + } + + if filterChanged { + fv.Conditions.ClientFilters.Filters = filters + } + + valueBytes, err := json.Marshal(fv) + if err != nil { + return fmt.Errorf("while marshalling FeatureValue struct: %+v", err) + } + kv.Value = pointer.To(string(valueBytes)) + if _, err = client.PutKeyValue(ctx, nestedItemId.Key, model.Label, &kv, "", ""); err != nil { + return err + } + + if model.Locked { + if _, err = client.PutLock(ctx, nestedItemId.Key, model.Label, "", ""); err != nil { + return fmt.Errorf("while locking key/label pair %s/%s: %+v", model.Name, model.Label, err) } - err = createOrUpdateFeature(ctx, client, model) - if err != nil { - return fmt.Errorf("while updating feature: %+v", err) + } else { + if _, err = client.DeleteLock(ctx, nestedItemId.Key, model.Label, "", ""); err != nil { + return fmt.Errorf("while unlocking key/label pair %s/%s: %+v", model.Name, model.Label, err) } } @@ -442,74 +599,6 @@ func (k FeatureResource) IDValidationFunc() pluginsdk.SchemaValidateFunc { return validate.NestedItemId } -func createOrUpdateFeature(ctx context.Context, client *appconfiguration.BaseClient, model FeatureResourceModel) error { - rawKey := model.Name - if model.Key != "" { - rawKey = model.Key - } - featureKey := fmt.Sprintf("%s/%s", FeatureKeyPrefix, rawKey) - - entity := appconfiguration.KeyValue{ - Key: utils.String(featureKey), - Label: utils.String(model.Label), - Tags: tags.Expand(model.Tags), - ContentType: utils.String(FeatureKeyContentType), - Locked: utils.Bool(model.Locked), - } - - value := FeatureValue{ - ID: model.Name, - Description: model.Description, - Enabled: model.Enabled, - } - - value.Conditions.ClientFilters.Filters = make([]interface{}, 0) - if model.PercentageFilter > 0 { - value.Conditions.ClientFilters.Filters = append(value.Conditions.ClientFilters.Filters, PercentageFeatureFilter{ - Name: PercentageFilterName, - Parameters: PercentageFilterParameters{Value: model.PercentageFilter}, - }) - } - - if len(model.TargetingFilters) > 0 { - for _, tgtf := range model.TargetingFilters { - value.Conditions.ClientFilters.Filters = append(value.Conditions.ClientFilters.Filters, TargetingFeatureFilter{ - Name: TargetingFilterName, - Parameters: TargetingFilterParameters{Audience: tgtf}, - }) - } - } - - if len(model.TimewindowFilters) > 0 { - for _, twf := range model.TimewindowFilters { - value.Conditions.ClientFilters.Filters = append(value.Conditions.ClientFilters.Filters, TimewindowFeatureFilter{ - Name: TimewindowFilterName, - Parameters: twf, - }) - } - } - - valueBytes, err := json.Marshal(value) - if err != nil { - return fmt.Errorf("while marshalling FeatureValue struct: %+v", err) - } - entity.Value = utils.String(string(valueBytes)) - if _, err = client.PutKeyValue(ctx, featureKey, model.Label, &entity, "", ""); err != nil { - return err - } - - if model.Locked { - if _, err = client.PutLock(ctx, featureKey, model.Label, "", ""); err != nil { - return fmt.Errorf("while locking key/label pair %s/%s: %+v", model.Name, model.Label, err) - } - } else { - if _, err = client.DeleteLock(ctx, featureKey, model.Label, "", ""); err != nil { - return fmt.Errorf("while unlocking key/label pair %s/%s: %+v", model.Name, model.Label, err) - } - } - - return nil -} func (k FeatureResource) StateUpgraders() sdk.StateUpgradeData { return sdk.StateUpgradeData{ SchemaVersion: 1, diff --git a/internal/services/appconfiguration/app_configuration_feature_resource_test.go b/internal/services/appconfiguration/app_configuration_feature_resource_test.go index 00efbbd1f54e7..0efbec10c1470 100644 --- a/internal/services/appconfiguration/app_configuration_feature_resource_test.go +++ b/internal/services/appconfiguration/app_configuration_feature_resource_test.go @@ -50,6 +50,33 @@ func TestAccAppConfigurationFeature_basic(t *testing.T) { }) } +func TestAccAppConfigurationFeature_percentFilter(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_app_configuration_feature", "test") + r := AppConfigurationFeatureResource{} + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.percentageFilter(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.basicPercentageFilter(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} func TestAccAppConfigurationFeature_basicNoLabel(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_app_configuration_feature", "test") r := AppConfigurationFeatureResource{} @@ -253,6 +280,60 @@ resource "azurerm_app_configuration_feature" "test" { `, t.template(data), data.RandomInteger) } +func (t AppConfigurationFeatureResource) percentageFilter(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_app_configuration_feature" "test" { + configuration_store_id = azurerm_app_configuration.test.id + description = "test description" + name = "acctest-ackey-%d" + label = "acctest-ackeylabel-%[2]d" + enabled = true + + percentage_filter_value = 50.65 + + timewindow_filter { + start = "2019-11-12T07:20:50.52Z" + end = "2019-11-13T07:20:50.52Z" + } + + targeting_filter { + default_rollout_percentage = 39 + users = ["random", "user"] + + groups { + name = "testgroup" + rollout_percentage = 50 + } + + groups { + name = "testgroup2" + rollout_percentage = 30 + } + } +} + +`, t.template(data), data.RandomInteger) +} + +func (t AppConfigurationFeatureResource) basicPercentageFilter(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_app_configuration_feature" "test" { + configuration_store_id = azurerm_app_configuration.test.id + description = "test description" + name = "acctest-ackey-%d" + label = "acctest-ackeylabel-%[2]d" + enabled = true + + percentage_filter_value = 89.91 +} + +`, t.template(data), data.RandomInteger) +} + func (t AppConfigurationFeatureResource) basicNoLabel(data acceptance.TestData) string { return fmt.Sprintf(` %s diff --git a/internal/services/appconfiguration/app_configuration_resource.go b/internal/services/appconfiguration/app_configuration_resource.go index ef9a52ed84624..e2e3d7679a476 100644 --- a/internal/services/appconfiguration/app_configuration_resource.go +++ b/internal/services/appconfiguration/app_configuration_resource.go @@ -21,9 +21,9 @@ import ( "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/configurationstores" "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/deletedconfigurationstores" "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/operations" + "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas" "github.com/hashicorp/go-azure-sdk/sdk/client" "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" - "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/services/appconfiguration/validate" @@ -41,10 +41,10 @@ func resourceAppConfiguration() *pluginsdk.Resource { Delete: resourceAppConfigurationDelete, Timeouts: &pluginsdk.ResourceTimeout{ - Create: pluginsdk.DefaultTimeout(30 * time.Minute), + Create: pluginsdk.DefaultTimeout(60 * time.Minute), Read: pluginsdk.DefaultTimeout(5 * time.Minute), - Update: pluginsdk.DefaultTimeout(30 * time.Minute), - Delete: pluginsdk.DefaultTimeout(30 * time.Minute), + Update: pluginsdk.DefaultTimeout(60 * time.Minute), + Delete: pluginsdk.DefaultTimeout(60 * time.Minute), }, Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { @@ -132,6 +132,31 @@ func resourceAppConfiguration() *pluginsdk.Resource { ValidateFunc: validation.StringInSlice(configurationstores.PossibleValuesForPublicNetworkAccess(), true), }, + "replica": { + Type: pluginsdk.TypeSet, + Optional: true, + MinItems: 1, + Set: resourceConfigurationStoreReplicaHash, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validate.ConfigurationStoreReplicaName, + }, + "location": commonschema.LocationWithoutForceNew(), + "endpoint": { + Type: pluginsdk.TypeString, + Computed: true, + }, + "id": { + Type: pluginsdk.TypeString, + Computed: true, + }, + }, + }, + }, + "primary_read_key": { Type: pluginsdk.TypeList, Computed: true, @@ -256,7 +281,7 @@ func resourceAppConfigurationCreate(d *pluginsdk.ResourceData, meta interface{}) return tf.ImportAsExistsError("azurerm_app_configuration", resourceId.ID()) } - location := azure.NormalizeLocation(d.Get("location").(string)) + location := location.Normalize(d.Get("location").(string)) recoverSoftDeleted := false if meta.(*clients.Client).Features.AppConfiguration.RecoverSoftDeleted { @@ -325,6 +350,21 @@ func resourceAppConfigurationCreate(d *pluginsdk.ResourceData, meta interface{}) } meta.(*clients.Client).AppConfiguration.AddToCache(resourceId, *resp.Model.Properties.Endpoint) + expandedReplicas, err := expandAppConfigurationReplicas(d.Get("replica").(*pluginsdk.Set).List(), name, location) + if err != nil { + return fmt.Errorf("expanding `replica`: %+v", err) + } + + replicaClient := meta.(*clients.Client).AppConfiguration.ReplicasClient + for _, replica := range *expandedReplicas { + replicaId := replicas.NewReplicaID(resourceId.SubscriptionId, resourceId.ResourceGroupName, resourceId.ConfigurationStoreName, *replica.Name) + + if err := replicaClient.CreateThenPoll(ctx, replicaId, replica); err != nil { + return fmt.Errorf("creating %s: %+v", replicaId, err) + } + + } + return resourceAppConfigurationRead(d, meta) } @@ -434,6 +474,67 @@ func resourceAppConfigurationUpdate(d *pluginsdk.ResourceData, meta interface{}) return fmt.Errorf("updating %s: %+v", *id, err) } + if d.HasChange("replica") { + replicaClient := meta.(*clients.Client).AppConfiguration.ReplicasClient + operationsClient := meta.(*clients.Client).AppConfiguration.OperationsClient + + // check if a replica has been removed from config and if so, delete it + deleteReplicaIds := make([]replicas.ReplicaId, 0) + unchangedReplicaNames := make(map[string]struct{}, 0) + oldReplicas, newReplicas := d.GetChange("replica") + for _, oldReplica := range oldReplicas.(*pluginsdk.Set).List() { + isRemoved := true + oldReplicaMap := oldReplica.(map[string]interface{}) + + for _, newReplica := range newReplicas.(*pluginsdk.Set).List() { + newReplicaMap := newReplica.(map[string]interface{}) + + if strings.EqualFold(oldReplicaMap["name"].(string), newReplicaMap["name"].(string)) && strings.EqualFold(location.Normalize(oldReplicaMap["location"].(string)), location.Normalize(newReplicaMap["location"].(string))) { + unchangedReplicaNames[oldReplicaMap["name"].(string)] = struct{}{} + isRemoved = false + break + } + } + + if isRemoved { + deleteReplicaIds = append(deleteReplicaIds, replicas.NewReplicaID(id.SubscriptionId, id.ResourceGroupName, id.ConfigurationStoreName, oldReplicaMap["name"].(string))) + } + } + + if err := deleteReplicas(ctx, replicaClient, operationsClient, deleteReplicaIds); err != nil { + return err + } + + expandedReplicas, err := expandAppConfigurationReplicas(d.Get("replica").(*pluginsdk.Set).List(), id.ConfigurationStoreName, location.Normalize(existing.Model.Location)) + if err != nil { + return fmt.Errorf("expanding `replica`: %+v", err) + } + + // check if a replica has been added or an existing one changed its location, (re)create it + for _, replica := range *expandedReplicas { + if _, isUnchanged := unchangedReplicaNames[*replica.Name]; isUnchanged { + continue + } + + replicaId := replicas.NewReplicaID(id.SubscriptionId, id.ResourceGroupName, id.ConfigurationStoreName, *replica.Name) + + existingReplica, err := replicaClient.Get(ctx, replicaId) + if err != nil { + if !response.WasNotFound(existingReplica.HttpResponse) { + return fmt.Errorf("retrieving %s: %+v", replicaId, err) + } + } + + if !response.WasNotFound(existingReplica.HttpResponse) { + return fmt.Errorf("updating %s: replica %s already exists", *id, replicaId) + } + + if err = replicaClient.CreateThenPoll(ctx, replicaId, replica); err != nil { + return fmt.Errorf("creating %s: %+v", replicaId, err) + } + } + } + return resourceAppConfigurationRead(d, meta) } @@ -508,6 +609,18 @@ func resourceAppConfigurationRead(d *pluginsdk.ResourceData, meta interface{}) e return fmt.Errorf("setting `identity`: %+v", err) } + replicasClient := meta.(*clients.Client).AppConfiguration.ReplicasClient + resp, err := replicasClient.ListByConfigurationStoreComplete(ctx, replicas.NewConfigurationStoreID(id.SubscriptionId, id.ResourceGroupName, id.ConfigurationStoreName)) + if err != nil { + return fmt.Errorf("retrieving replicas for %s: %+v", *id, err) + } + + replica, err := flattenAppConfigurationReplicas(resp.Items) + if err != nil { + return fmt.Errorf("flattening replicas for %s: %+v", *id, err) + } + d.Set("replica", replica) + return tags.FlattenAndSet(d, model.Tags) } @@ -647,11 +760,12 @@ type flattenedAccessKeys struct { } func expandAppConfigurationEncryption(input []interface{}) *configurationstores.EncryptionProperties { - if len(input) == 0 { + if len(input) == 0 || input[0] == nil { return nil } encryptionParam := input[0].(map[string]interface{}) + result := &configurationstores.EncryptionProperties{ KeyVaultProperties: &configurationstores.KeyVaultProperties{}, } @@ -665,6 +779,46 @@ func expandAppConfigurationEncryption(input []interface{}) *configurationstores. return result } +func expandAppConfigurationReplicas(input []interface{}, configurationStoreName, configurationStoreLocation string) (*[]replicas.Replica, error) { + result := make([]replicas.Replica, 0) + + // check if there are duplicated replica names or locations + // location cannot be same as original configuration store and other replicas + locationSet := make(map[string]string, 0) + replicaNameSet := make(map[string]struct{}, 0) + + for _, v := range input { + replica := v.(map[string]interface{}) + replicaName := replica["name"].(string) + replicaLocation := location.Normalize(replica["location"].(string)) + if strings.EqualFold(replicaLocation, configurationStoreLocation) { + return nil, fmt.Errorf("location (%q) of replica %q is duplicated with original configuration store %q", replicaName, replicaLocation, configurationStoreName) + } + + if name, ok := locationSet[replicaLocation]; ok { + return nil, fmt.Errorf("location (%q) of replica %q is duplicated with replica %q", replicaName, replicaLocation, name) + } + locationSet[replicaLocation] = replicaName + + normalizedReplicaName := strings.ToLower(replicaName) + if _, ok := replicaNameSet[normalizedReplicaName]; ok { + return nil, fmt.Errorf("replica name %q is duplicated", replicaName) + } + replicaNameSet[normalizedReplicaName] = struct{}{} + + if len(replicaName)+len(configurationStoreName) > 60 { + return nil, fmt.Errorf("replica name %q is too long, the total length of replica name and configuration store name should be greater than 60", replicaName) + } + + result = append(result, replicas.Replica{ + Name: pointer.To(replicaName), + Location: pointer.To(replicaLocation), + }) + } + + return &result, nil +} + func flattenAppConfigurationAccessKeys(values []configurationstores.ApiKey) flattenedAccessKeys { result := flattenedAccessKeys{ primaryReadKey: make([]interface{}, 0), @@ -766,9 +920,8 @@ func resourceConfigurationStoreWaitForNameAvailable(ctx context.Context, client Timeout: time.Until(deadline), } - _, err := state.WaitForStateContext(ctx) - if err != nil { - return fmt.Errorf("waiting for the Name from %s to become available: %+v", configurationStoreId, err) + if _, err := state.WaitForStateContext(ctx); err != nil { + return fmt.Errorf("waiting for the name from %s to become available: %+v", configurationStoreId, err) } return nil @@ -805,3 +958,72 @@ func resourceConfigurationStoreNameAvailabilityRefreshFunc(ctx context.Context, return resp, "Available", nil } } + +func deleteReplicas(ctx context.Context, replicaClient *replicas.ReplicasClient, operationClient *operations.OperationsClient, configurationStoreReplicaIds []replicas.ReplicaId) error { + for _, configurationStoreReplicaId := range configurationStoreReplicaIds { + log.Printf("[DEBUG] Deleting Replica %q", configurationStoreReplicaId) + if err := replicaClient.DeleteThenPoll(ctx, configurationStoreReplicaId); err != nil { + return fmt.Errorf("deleting replica %q: %+v", configurationStoreReplicaId, err) + } + } + + for _, configurationStoreReplicaId := range configurationStoreReplicaIds { + if err := resourceConfigurationStoreReplicaWaitForNameAvailable(ctx, operationClient, configurationStoreReplicaId); err != nil { + return fmt.Errorf("waiting for replica %q name to be released: %+v", configurationStoreReplicaId, err) + } + } + + return nil +} + +func resourceConfigurationStoreReplicaWaitForNameAvailable(ctx context.Context, client *operations.OperationsClient, configurationStoreReplicaId replicas.ReplicaId) error { + deadline, ok := ctx.Deadline() + if !ok { + return fmt.Errorf("internal error: context had no deadline") + } + state := &pluginsdk.StateChangeConf{ + MinTimeout: 10 * time.Second, + ContinuousTargetOccurence: 2, + Pending: []string{"Unavailable"}, + Target: []string{"Available"}, + Refresh: resourceConfigurationStoreReplicaNameAvailabilityRefreshFunc(ctx, client, configurationStoreReplicaId), + Timeout: time.Until(deadline), + } + + if _, err := state.WaitForStateContext(ctx); err != nil { + return fmt.Errorf("waiting for the name from %s to become available: %+v", configurationStoreReplicaId, err) + } + + return nil +} + +func resourceConfigurationStoreReplicaNameAvailabilityRefreshFunc(ctx context.Context, client *operations.OperationsClient, configurationStoreReplicaId replicas.ReplicaId) pluginsdk.StateRefreshFunc { + return func() (interface{}, string, error) { + log.Printf("[DEBUG] Checking to see if the name for %s is available ..", configurationStoreReplicaId) + + subscriptionId := commonids.NewSubscriptionID(configurationStoreReplicaId.SubscriptionId) + + parameters := operations.CheckNameAvailabilityParameters{ + Name: fmt.Sprintf("%s-%s", configurationStoreReplicaId.ConfigurationStoreName, configurationStoreReplicaId.ReplicaName), + Type: operations.ConfigurationResourceTypeMicrosoftPointAppConfigurationConfigurationStores, + } + + resp, err := client.CheckNameAvailability(ctx, subscriptionId, parameters) + if err != nil { + return resp, "Error", fmt.Errorf("retrieving Deployment: %+v", err) + } + + if resp.Model == nil { + return resp, "Error", fmt.Errorf("unexpected null model of %s", configurationStoreReplicaId) + } + + if resp.Model.NameAvailable == nil { + return resp, "Error", fmt.Errorf("unexpected null NameAvailable property of %s", configurationStoreReplicaId) + } + + if !*resp.Model.NameAvailable { + return resp, "Unavailable", nil + } + return resp, "Available", nil + } +} diff --git a/internal/services/appconfiguration/app_configuration_resource_test.go b/internal/services/appconfiguration/app_configuration_resource_test.go index 76c01eaf87078..7605b102cad34 100644 --- a/internal/services/appconfiguration/app_configuration_resource_test.go +++ b/internal/services/appconfiguration/app_configuration_resource_test.go @@ -185,6 +185,86 @@ func TestAccAppConfiguration_encryption(t *testing.T) { }) } +func TestAccAppConfiguration_replica(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_app_configuration", "test") + r := AppConfigurationResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.replica(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccAppConfiguration_replicaRemove(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_app_configuration", "test") + r := AppConfigurationResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.replica(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.standard(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccAppConfiguration_replicaUpdate(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_app_configuration", "test") + r := AppConfigurationResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.standard(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.replica(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.replicaUpdated(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.replicaUpdatedPartial(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.complete(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccAppConfiguration_encryptionUpdated(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_app_configuration", "test") r := AppConfigurationResource{} @@ -419,6 +499,91 @@ resource "azurerm_app_configuration" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomInteger) } +func (AppConfigurationResource) replica(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-appconfig-%d" + location = "%s" +} + +resource "azurerm_app_configuration" "test" { + name = "testaccappconf%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + sku = "standard" + + replica { + name = "replica1" + location = "%s" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.Locations.Ternary) +} + +func (AppConfigurationResource) replicaUpdated(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-appconfig-%d" + location = "%s" +} + +resource "azurerm_app_configuration" "test" { + name = "testaccappconf%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + sku = "standard" + + replica { + name = "replica1" + location = "%s" + } + + replica { + name = "replica2" + location = "%s" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.Locations.Ternary, data.Locations.Secondary) +} + +func (AppConfigurationResource) replicaUpdatedPartial(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-appconfig-%d" + location = "%s" +} + +resource "azurerm_app_configuration" "test" { + name = "testaccappconf%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + sku = "standard" + + replica { + name = "replica3" + location = "%s" + } + + replica { + name = "replica2" + location = "%s" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.Locations.Ternary, data.Locations.Secondary) +} + func (r AppConfigurationResource) requiresImport(data acceptance.TestData) string { template := r.standard(data) return fmt.Sprintf(` @@ -527,6 +692,16 @@ resource "azurerm_app_configuration" "test" { identity_client_id = azurerm_user_assigned_identity.test.client_id } + replica { + name = "replica1" + location = "%[3]s" + } + + replica { + name = "replica2" + location = "%[4]s" + } + tags = { environment = "development" } @@ -536,7 +711,7 @@ resource "azurerm_app_configuration" "test" { azurerm_key_vault_access_policy.server, ] } -`, data.RandomInteger, data.Locations.Primary) +`, data.RandomInteger, data.Locations.Primary, data.Locations.Secondary, data.Locations.Ternary) } func (AppConfigurationResource) identity(data acceptance.TestData) string { diff --git a/internal/services/appconfiguration/client/client.go b/internal/services/appconfiguration/client/client.go index 2053af90c79c7..9cb616eb04387 100644 --- a/internal/services/appconfiguration/client/client.go +++ b/internal/services/appconfiguration/client/client.go @@ -4,14 +4,13 @@ package client import ( - "context" "fmt" "github.com/Azure/go-autorest/autorest" - "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/configurationstores" "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/deletedconfigurationstores" "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/operations" + "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas" authWrapper "github.com/hashicorp/go-azure-sdk/sdk/auth/autorest" "github.com/hashicorp/go-azure-sdk/sdk/environments" "github.com/hashicorp/terraform-provider-azurerm/internal/common" @@ -23,6 +22,7 @@ type Client struct { ConfigurationStoresClient *configurationstores.ConfigurationStoresClient DeletedConfigurationStoresClient *deletedconfigurationstores.DeletedConfigurationStoresClient OperationsClient *operations.OperationsClient + ReplicasClient *replicas.ReplicasClient authorizerFunc common.ApiAuthorizerFunc configureClientFunc func(c *autorest.Client, authorizer autorest.Authorizer) } @@ -54,73 +54,6 @@ func (c Client) LinkWorkaroundDataPlaneClientWithEndpoint(configurationStoreEndp return &workaroundClient, nil } -func (c Client) DataPlaneClient(ctx context.Context, configurationStoreId string) (*appconfiguration.BaseClient, error) { - appConfigId, err := configurationstores.ParseConfigurationStoreID(configurationStoreId) - if err != nil { - return nil, err - } - - // TODO: caching all of this - appConfig, err := c.ConfigurationStoresClient.Get(ctx, *appConfigId) - if err != nil { - if response.WasNotFound(appConfig.HttpResponse) { - return nil, nil - } - - return nil, err - } - - if appConfig.Model == nil || appConfig.Model.Properties == nil || appConfig.Model.Properties.Endpoint == nil { - return nil, fmt.Errorf("endpoint was nil") - } - - endpoint := *appConfig.Model.Properties.Endpoint - - api := environments.NewApiEndpoint("AppConfiguration", endpoint, nil) - appConfigAuth, err := c.authorizerFunc(api) - if err != nil { - return nil, fmt.Errorf("obtaining auth token for %q: %+v", endpoint, err) - } - - client := appconfiguration.NewWithoutDefaults("", endpoint) - c.configureClientFunc(&client.Client, authWrapper.AutorestAuthorizer(appConfigAuth)) - - return &client, nil -} - -func (c Client) LinkWorkaroundDataPlaneClient(ctx context.Context, configurationStoreId string) (*azuresdkhacks.DataPlaneClient, error) { - appConfigId, err := configurationstores.ParseConfigurationStoreID(configurationStoreId) - if err != nil { - return nil, err - } - - // TODO: caching all of this - appConfig, err := c.ConfigurationStoresClient.Get(ctx, *appConfigId) - if err != nil { - if response.WasNotFound(appConfig.HttpResponse) { - return nil, nil - } - - return nil, err - } - - if appConfig.Model == nil || appConfig.Model.Properties == nil || appConfig.Model.Properties.Endpoint == nil { - return nil, fmt.Errorf("endpoint was nil") - } - - api := environments.NewApiEndpoint("AppConfiguration", *appConfig.Model.Properties.Endpoint, nil) - appConfigAuth, err := c.authorizerFunc(api) - if err != nil { - return nil, fmt.Errorf("obtaining auth token for %q: %+v", *appConfig.Model.Properties.Endpoint, err) - } - - client := appconfiguration.NewWithoutDefaults("", *appConfig.Model.Properties.Endpoint) - c.configureClientFunc(&client.Client, authWrapper.AutorestAuthorizer(appConfigAuth)) - workaroundClient := azuresdkhacks.NewDataPlaneClient(client) - - return &workaroundClient, nil -} - func NewClient(o *common.ClientOptions) (*Client, error) { configurationStores, err := configurationstores.NewConfigurationStoresClientWithBaseURI(o.Environment.ResourceManager) if err != nil { @@ -140,10 +73,17 @@ func NewClient(o *common.ClientOptions) (*Client, error) { } o.Configure(operationsClient.Client, o.Authorizers.ResourceManager) + replicasClient, err := replicas.NewReplicasClientWithBaseURI(o.Environment.ResourceManager) + if err != nil { + return nil, fmt.Errorf("building DeletedConfigurationStores client: %+v", err) + } + o.Configure(replicasClient.Client, o.Authorizers.ResourceManager) + return &Client{ ConfigurationStoresClient: configurationStores, DeletedConfigurationStoresClient: deletedConfigurationStores, OperationsClient: operationsClient, + ReplicasClient: replicasClient, authorizerFunc: o.Authorizers.AuthorizerFunc, configureClientFunc: o.ConfigureClient, }, nil diff --git a/internal/services/appconfiguration/feature_structs.go b/internal/services/appconfiguration/feature_structs.go index 4ba5ca47131fa..8c33f6c8e59eb 100644 --- a/internal/services/appconfiguration/feature_structs.go +++ b/internal/services/appconfiguration/feature_structs.go @@ -98,7 +98,7 @@ func (p ClientFilter) MarshalJSON() ([]byte, error) { } type PercentageFilterParameters struct { - Value int `json:"Value"` + Value float64 `json:"Value"` } type PercentageFeatureFilter struct { diff --git a/internal/services/appconfiguration/validate/configuration_store_replica_name.go b/internal/services/appconfiguration/validate/configuration_store_replica_name.go new file mode 100644 index 0000000000000..9e7f513f7684a --- /dev/null +++ b/internal/services/appconfiguration/validate/configuration_store_replica_name.go @@ -0,0 +1,15 @@ +package validate + +import ( + "fmt" + "regexp" +) + +func ConfigurationStoreReplicaName(v interface{}, k string) (warnings []string, errors []error) { + value := v.(string) + if matched := regexp.MustCompile(`^[a-zA-Z0-9]{1,50}$`).Match([]byte(value)); !matched { + errors = append(errors, fmt.Errorf("%q Replica name may only contain alphanumeric characters and must be between 1-50 chars", k)) + } + + return warnings, errors +} diff --git a/internal/services/appconfiguration/validate/configuration_store_replica_name_test.go b/internal/services/appconfiguration/validate/configuration_store_replica_name_test.go new file mode 100644 index 0000000000000..f0db179e91bd6 --- /dev/null +++ b/internal/services/appconfiguration/validate/configuration_store_replica_name_test.go @@ -0,0 +1,60 @@ +package validate + +import ( + "testing" +) + +func TestAppConfigurationReplicaName(t *testing.T) { + cases := []struct { + Value string + ErrCount int + }{ + { + Value: "four", + ErrCount: 0, + }, + { + Value: "5five", + ErrCount: 0, + }, + { + Value: "hello-world", + ErrCount: 1, + }, + { + Value: "hello_world", + ErrCount: 1, + }, + { + Value: "helloWorld", + ErrCount: 0, + }, + { + Value: "helloworld12", + ErrCount: 0, + }, + { + Value: "hello@world", + ErrCount: 1, + }, + { + Value: "qfvbdsbvipqdbwsbddbdcwqffewsqwcdw21ddwqwd3324120", + ErrCount: 0, + }, + { + Value: "qfvbdsbvipqdbwsbddbdcwqffewsqwcdw21ddwqwd332412020", + ErrCount: 0, + }, + { + Value: "qfvbdsbvipqdbwsbddbdcwqfjjfewsqwcdw21ddwqwd33241201", + ErrCount: 1, + }, + } + + for _, tc := range cases { + _, errors := ConfigurationStoreReplicaName(tc.Value, "azurerm_app_configuration") + if len(errors) != tc.ErrCount { + t.Fatalf("Expected the Azure App Configuration Replica Name to trigger a validation error: %v", tc) + } + } +} diff --git a/internal/services/appservice/helpers/linux_web_app_schema.go b/internal/services/appservice/helpers/linux_web_app_schema.go index 646a4f7c6724b..70be35d4310a4 100644 --- a/internal/services/appservice/helpers/linux_web_app_schema.go +++ b/internal/services/appservice/helpers/linux_web_app_schema.go @@ -936,6 +936,9 @@ func (s *SiteConfigLinux) ExpandForUpdate(metadata sdk.ResourceMetaData, existin if linuxAppStack.DockerImageName != "" { expanded.LinuxFxVersion = pointer.To(EncodeDockerFxString(linuxAppStack.DockerImageName, linuxAppStack.DockerRegistryUrl)) + if appSettings == nil { + appSettings = map[string]string{} + } appSettings["DOCKER_REGISTRY_SERVER_URL"] = linuxAppStack.DockerRegistryUrl appSettings["DOCKER_REGISTRY_SERVER_USERNAME"] = linuxAppStack.DockerRegistryUsername appSettings["DOCKER_REGISTRY_SERVER_PASSWORD"] = linuxAppStack.DockerRegistryPassword @@ -945,6 +948,8 @@ func (s *SiteConfigLinux) ExpandForUpdate(metadata sdk.ResourceMetaData, existin } } + expanded.AppSettings = ExpandAppSettingsForCreate(appSettings) + if metadata.ResourceData.HasChange("site_config.0.container_registry_managed_identity_client_id") { expanded.AcrUserManagedIdentityID = pointer.To(s.ContainerRegistryMSI) } @@ -1142,6 +1147,16 @@ func expandAutoHealSettingsLinux(autoHealSettings []AutoHealSettingLinux) *web.A autoHeal := autoHealSettings[0] + if len(autoHeal.Actions) > 0 { + action := autoHeal.Actions[0] + result.Actions.ActionType = web.AutoHealActionType(action.ActionType) + result.Actions.MinProcessExecutionTime = pointer.To(action.MinimumProcessTime) + } + + if len(autoHeal.Triggers) == 0 { + return result + } + triggers := autoHeal.Triggers[0] if len(triggers.Requests) == 1 { result.Triggers.Requests = &web.RequestsBasedTrigger{ @@ -1193,10 +1208,6 @@ func expandAutoHealSettingsLinux(autoHealSettings []AutoHealSettingLinux) *web.A result.Triggers.StatusCodesRange = &statusCodeRangeTriggers } - action := autoHeal.Actions[0] - result.Actions.ActionType = web.AutoHealActionType(action.ActionType) - result.Actions.MinProcessExecutionTime = pointer.To(action.MinimumProcessTime) - return result } diff --git a/internal/services/appservice/helpers/web_app_slot_schema.go b/internal/services/appservice/helpers/web_app_slot_schema.go index e521cb96a7f63..b4140bd7fa604 100644 --- a/internal/services/appservice/helpers/web_app_slot_schema.go +++ b/internal/services/appservice/helpers/web_app_slot_schema.go @@ -619,6 +619,11 @@ func (s *SiteConfigLinuxWebAppSlot) ExpandForCreate(appSettings map[string]strin if linuxAppStack.DockerImageName != "" { expanded.LinuxFxVersion = pointer.To(EncodeDockerFxString(linuxAppStack.DockerImageName, linuxAppStack.DockerRegistryUrl)) + + if appSettings == nil { + appSettings = make(map[string]string) + } + appSettings["DOCKER_REGISTRY_SERVER_URL"] = linuxAppStack.DockerRegistryUrl appSettings["DOCKER_REGISTRY_SERVER_USERNAME"] = linuxAppStack.DockerRegistryUsername appSettings["DOCKER_REGISTRY_SERVER_PASSWORD"] = linuxAppStack.DockerRegistryPassword @@ -748,6 +753,11 @@ func (s *SiteConfigLinuxWebAppSlot) ExpandForUpdate(metadata sdk.ResourceMetaDat if linuxAppStack.DockerImageName != "" { expanded.LinuxFxVersion = pointer.To(EncodeDockerFxString(linuxAppStack.DockerImageName, linuxAppStack.DockerRegistryUrl)) + + if appSettings == nil { + appSettings = make(map[string]string) + } + appSettings["DOCKER_REGISTRY_SERVER_URL"] = linuxAppStack.DockerRegistryUrl appSettings["DOCKER_REGISTRY_SERVER_USERNAME"] = linuxAppStack.DockerRegistryUsername appSettings["DOCKER_REGISTRY_SERVER_PASSWORD"] = linuxAppStack.DockerRegistryPassword @@ -756,6 +766,7 @@ func (s *SiteConfigLinuxWebAppSlot) ExpandForUpdate(metadata sdk.ResourceMetaDat expanded.LinuxFxVersion = pointer.To("") } } + expanded.AppSettings = ExpandAppSettingsForCreate(appSettings) if metadata.ResourceData.HasChange("site_config.0.auto_swap_slot_name") { expanded.AutoSwapSlotName = pointer.To(s.AutoSwapSlotName) @@ -1028,15 +1039,19 @@ func (s *SiteConfigWindowsWebAppSlot) ExpandForCreate(appSettings map[string]str if winAppStack.DockerImageName != "" { expanded.WindowsFxVersion = pointer.To(EncodeDockerFxStringWindows(winAppStack.DockerImageName, winAppStack.DockerRegistryUrl)) + + if appSettings == nil { + appSettings = make(map[string]string) + } + appSettings["DOCKER_REGISTRY_SERVER_URL"] = winAppStack.DockerRegistryUrl appSettings["DOCKER_REGISTRY_SERVER_USERNAME"] = winAppStack.DockerRegistryUsername appSettings["DOCKER_REGISTRY_SERVER_PASSWORD"] = winAppStack.DockerRegistryPassword - } - } else { expanded.WindowsFxVersion = pointer.To("") } + expanded.AppSettings = ExpandAppSettingsForCreate(appSettings) if s.AutoSwapSlotName != "" { expanded.AutoSwapSlotName = pointer.To(s.AutoSwapSlotName) @@ -1165,10 +1180,14 @@ func (s *SiteConfigWindowsWebAppSlot) ExpandForUpdate(metadata sdk.ResourceMetaD if winAppStack.DockerImageName != "" { expanded.WindowsFxVersion = pointer.To(EncodeDockerFxStringWindows(winAppStack.DockerImageName, winAppStack.DockerRegistryUrl)) + + if appSettings == nil { + appSettings = make(map[string]string) + } + appSettings["DOCKER_REGISTRY_SERVER_URL"] = winAppStack.DockerRegistryUrl appSettings["DOCKER_REGISTRY_SERVER_USERNAME"] = winAppStack.DockerRegistryUsername appSettings["DOCKER_REGISTRY_SERVER_PASSWORD"] = winAppStack.DockerRegistryPassword - } } else { @@ -1176,6 +1195,8 @@ func (s *SiteConfigWindowsWebAppSlot) ExpandForUpdate(metadata sdk.ResourceMetaD } } + expanded.AppSettings = ExpandAppSettingsForCreate(appSettings) + if metadata.ResourceData.HasChange("site_config.0.auto_swap_slot_name") { expanded.AutoSwapSlotName = pointer.To(s.AutoSwapSlotName) } diff --git a/internal/services/appservice/linux_function_app_resource.go b/internal/services/appservice/linux_function_app_resource.go index 0161ebe2dbff1..13c9326515e07 100644 --- a/internal/services/appservice/linux_function_app_resource.go +++ b/internal/services/appservice/linux_function_app_resource.go @@ -459,7 +459,9 @@ func (r LinuxFunctionAppResource) Create() sdk.ResourceFunc { suffix := uuid.New().String()[0:4] _, contentOverVnetEnabled := functionApp.AppSettings["WEBSITE_CONTENTOVERVNET"] _, contentSharePresent := functionApp.AppSettings["WEBSITE_CONTENTSHARE"] - _, contentShareConnectionString := functionApp.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] + if _, contentShareConnectionStringPresent := functionApp.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"]; !contentShareConnectionStringPresent { + functionApp.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] = storageString + } if !contentSharePresent { if contentOverVnetEnabled { @@ -467,12 +469,6 @@ func (r LinuxFunctionAppResource) Create() sdk.ResourceFunc { } functionApp.AppSettings["WEBSITE_CONTENTSHARE"] = fmt.Sprintf("%s-%s", strings.ToLower(functionApp.Name), suffix) } - if !contentShareConnectionString { - if contentOverVnetEnabled && contentSharePresent { - return fmt.Errorf("WEBSITE_CONTENTAZUREFILECONNECTIONSTRING must be set when WEBSITE_CONTENTSHARE and WEBSITE_CONTENTOVERVNET are specified") - } - functionApp.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] = storageString - } } else { if _, present := functionApp.AppSettings["AzureWebJobsStorage__accountName"]; !present { functionApp.AppSettings["AzureWebJobsStorage__accountName"] = storageString @@ -945,7 +941,9 @@ func (r LinuxFunctionAppResource) Update() sdk.ResourceFunc { suffix := uuid.New().String()[0:4] _, contentOverVnetEnabled := state.AppSettings["WEBSITE_CONTENTOVERVNET"] _, contentSharePresent := state.AppSettings["WEBSITE_CONTENTSHARE"] - _, contentShareConnectionString := state.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] + if _, contentShareConnectionStringPresent := state.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"]; !contentShareConnectionStringPresent { + state.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] = storageString + } if !contentSharePresent { if contentOverVnetEnabled { @@ -953,12 +951,6 @@ func (r LinuxFunctionAppResource) Update() sdk.ResourceFunc { } state.AppSettings["WEBSITE_CONTENTSHARE"] = fmt.Sprintf("%s-%s", strings.ToLower(state.Name), suffix) } - if !contentShareConnectionString { - if contentOverVnetEnabled && contentSharePresent { - return fmt.Errorf("WEBSITE_CONTENTAZUREFILECONNECTIONSTRING must be set when WEBSITE_CONTENTSHARE and WEBSITE_CONTENTOVERVNET is specified") - } - state.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] = storageString - } } else { if _, present := state.AppSettings["AzureWebJobsStorage__accountName"]; !present { state.AppSettings["AzureWebJobsStorage__accountName"] = storageString diff --git a/internal/services/appservice/linux_web_app_resource_test.go b/internal/services/appservice/linux_web_app_resource_test.go index e15421ed32455..928c69114806d 100644 --- a/internal/services/appservice/linux_web_app_resource_test.go +++ b/internal/services/appservice/linux_web_app_resource_test.go @@ -1128,6 +1128,30 @@ func TestAccLinuxWebApp_withDockerImageDockerHub(t *testing.T) { }) } +func TestAccLinuxWebApp_withDockerImageDockerHubUpdate(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_linux_web_app", "test") + r := LinuxWebAppResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.dockerImageName(data, "https://index.docker.io", "nginx:latest"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("site_config.0.linux_fx_version").HasValue("DOCKER|index.docker.io/nginx:latest"), + ), + }, + data.ImportStep(), + { + Config: r.dockerImageName(data, "https://index.docker.io", "nginx:stable"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("site_config.0.linux_fx_version").HasValue("DOCKER|index.docker.io/nginx:stable"), + ), + }, + data.ImportStep(), + }) +} + // Change Application stack of an app? func TestAccLinuxWebApp_updateAppStack(t *testing.T) { diff --git a/internal/services/appservice/linux_web_app_slot_resource_test.go b/internal/services/appservice/linux_web_app_slot_resource_test.go index 2c691c65bfa92..42d209d61a053 100644 --- a/internal/services/appservice/linux_web_app_slot_resource_test.go +++ b/internal/services/appservice/linux_web_app_slot_resource_test.go @@ -1106,6 +1106,30 @@ func TestAccLinuxWebAppSlot_withDockerImageDockerHub(t *testing.T) { }) } +func TestAccLinuxWebAppSlot_withDockerImageDockerHubUpdate(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_linux_web_app_slot", "test") + r := LinuxWebAppSlotResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.dockerImageName(data, "https://index.docker.io", "nginx:latest"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("site_config.0.linux_fx_version").HasValue("DOCKER|index.docker.io/nginx:latest"), + ), + }, + data.ImportStep(), + { + Config: r.dockerImageName(data, "https://index.docker.io", "nginx:stable"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("site_config.0.linux_fx_version").HasValue("DOCKER|index.docker.io/nginx:stable"), + ), + }, + data.ImportStep(), + }) +} + // Deployments func TestAccLinuxWebAppSlot_zipDeploy(t *testing.T) { diff --git a/internal/services/appservice/windows_function_app_resource.go b/internal/services/appservice/windows_function_app_resource.go index 09652b5ff3427..41b5497281c32 100644 --- a/internal/services/appservice/windows_function_app_resource.go +++ b/internal/services/appservice/windows_function_app_resource.go @@ -457,7 +457,9 @@ func (r WindowsFunctionAppResource) Create() sdk.ResourceFunc { suffix := uuid.New().String()[0:4] _, contentOverVnetEnabled := functionApp.AppSettings["WEBSITE_CONTENTOVERVNET"] _, contentSharePresent := functionApp.AppSettings["WEBSITE_CONTENTSHARE"] - _, contentShareConnectionString := functionApp.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] + if _, contentShareConnectionStringPresent := functionApp.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"]; !contentShareConnectionStringPresent { + functionApp.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] = storageString + } if !contentSharePresent { if contentOverVnetEnabled { @@ -465,12 +467,6 @@ func (r WindowsFunctionAppResource) Create() sdk.ResourceFunc { } functionApp.AppSettings["WEBSITE_CONTENTSHARE"] = fmt.Sprintf("%s-%s", strings.ToLower(functionApp.Name), suffix) } - if !contentShareConnectionString { - if contentOverVnetEnabled && contentSharePresent { - return fmt.Errorf("WEBSITE_CONTENTAZUREFILECONNECTIONSTRING must be set when WEBSITE_CONTENTSHARE and WEBSITE_CONTENTOVERVNET are specified") - } - functionApp.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] = storageString - } } else { if _, present := functionApp.AppSettings["AzureWebJobsStorage__accountName"]; !present { functionApp.AppSettings["AzureWebJobsStorage__accountName"] = storageString @@ -948,7 +944,9 @@ func (r WindowsFunctionAppResource) Update() sdk.ResourceFunc { suffix := uuid.New().String()[0:4] _, contentOverVnetEnabled := state.AppSettings["WEBSITE_CONTENTOVERVNET"] _, contentSharePresent := state.AppSettings["WEBSITE_CONTENTSHARE"] - _, contentShareConnectionString := state.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] + if _, contentShareConnectionStringPresent := state.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"]; !contentShareConnectionStringPresent { + state.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] = storageString + } if !contentSharePresent { if contentOverVnetEnabled { @@ -956,12 +954,6 @@ func (r WindowsFunctionAppResource) Update() sdk.ResourceFunc { } state.AppSettings["WEBSITE_CONTENTSHARE"] = fmt.Sprintf("%s-%s", strings.ToLower(state.Name), suffix) } - if !contentShareConnectionString { - if contentOverVnetEnabled && contentSharePresent { - return fmt.Errorf("WEBSITE_CONTENTAZUREFILECONNECTIONSTRING must be set when WEBSITE_CONTENTSHARE and WEBSITE_CONTENTOVERVNET is specified") - } - state.AppSettings["WEBSITE_CONTENTAZUREFILECONNECTIONSTRING"] = storageString - } } else { if _, present := state.AppSettings["AzureWebJobsStorage__accountName"]; !present { state.AppSettings["AzureWebJobsStorage__accountName"] = storageString diff --git a/internal/services/appservice/windows_web_app_resource_test.go b/internal/services/appservice/windows_web_app_resource_test.go index f1bfea96c5b05..bcaf1a6095926 100644 --- a/internal/services/appservice/windows_web_app_resource_test.go +++ b/internal/services/appservice/windows_web_app_resource_test.go @@ -916,6 +916,14 @@ func TestAccWindowsWebApp_withDockerImageDockerHub(t *testing.T) { ), }, data.ImportStep(), + { + Config: r.dockerImageName(data, "https://index.docker.io", "traefik:v3.0-windowsservercore-1809"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("site_config.0.windows_fx_version").HasValue("DOCKER|traefik:v3.0-windowsservercore-1809"), + ), + }, + data.ImportStep(), }) } diff --git a/internal/services/appservice/windows_web_app_slot_resource_test.go b/internal/services/appservice/windows_web_app_slot_resource_test.go index 9dd7029de3211..48889ee497e3c 100644 --- a/internal/services/appservice/windows_web_app_slot_resource_test.go +++ b/internal/services/appservice/windows_web_app_slot_resource_test.go @@ -883,10 +883,10 @@ func TestAccWindowsWebAppSlot_withDockerImageDockerHub(t *testing.T) { data.ResourceTest(t, r, []acceptance.TestStep{ { - Config: r.dockerImageName(data, "https://index.docker.io", "traefik:windowsservercore-1809"), + Config: r.dockerImageName(data, "https://index.docker.io", "traefik:v3.0-windowsservercore-1809"), Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), - check.That(data.ResourceName).Key("site_config.0.windows_fx_version").HasValue("DOCKER|traefik:windowsservercore-1809"), + check.That(data.ResourceName).Key("site_config.0.windows_fx_version").HasValue("DOCKER|traefik:v3.0-windowsservercore-1809"), ), }, data.ImportStep(), diff --git a/internal/services/arcresourcebridge/arc_resource_bridge_appliance_resource.go b/internal/services/arcresourcebridge/arc_resource_bridge_appliance_resource.go new file mode 100644 index 0000000000000..997d31885379e --- /dev/null +++ b/internal/services/arcresourcebridge/arc_resource_bridge_appliance_resource.go @@ -0,0 +1,276 @@ +package arcresourcebridge + +import ( + "context" + "fmt" + "regexp" + "time" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" + "github.com/hashicorp/go-azure-helpers/resourcemanager/identity" + "github.com/hashicorp/go-azure-helpers/resourcemanager/location" + "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" + "github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" +) + +var _ sdk.Resource = ArcResourceBridgeApplianceResource{} + +type ArcResourceBridgeApplianceResource struct{} + +type ApplianceModel struct { + Name string `tfschema:"name"` + ResourceGroupName string `tfschema:"resource_group_name"` + Location string `tfschema:"location"` + Distro appliances.Distro `tfschema:"distro"` + Identity []identity.ModelSystemAssigned `tfschema:"identity"` + Provider appliances.Provider `tfschema:"infrastructure_provider"` + PublicKeyBase64 string `tfschema:"public_key_base64"` + Tags map[string]interface{} `tfschema:"tags"` +} + +func (r ArcResourceBridgeApplianceResource) Arguments() map[string]*schema.Schema { + return map[string]*schema.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.All( + validation.StringLenBetween(1, 260), + validation.StringMatch(regexp.MustCompile(`[^+#%&'?/,%\\]+$`), "any of '+', '#', '%', '&', ''', '?', '/', ',', '%', '&', '\\', are not allowed"), + ), + }, + + "resource_group_name": commonschema.ResourceGroupName(), + + "location": commonschema.Location(), + + "distro": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringInSlice([]string{ + string(appliances.DistroAKSEdge), + }, false), + }, + + "identity": commonschema.SystemAssignedIdentityRequiredForceNew(), + + "infrastructure_provider": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringInSlice([]string{ + string(appliances.ProviderHCI), + string(appliances.ProviderSCVMM), + string(appliances.ProviderVMWare), + }, false), + }, + + "public_key_base64": { + Type: pluginsdk.TypeString, + Optional: true, + ForceNew: true, + ValidateFunc: validate.Base64EncodedString, + }, + + "tags": commonschema.Tags(), + } +} + +func (r ArcResourceBridgeApplianceResource) Attributes() map[string]*schema.Schema { + return map[string]*pluginsdk.Schema{} +} + +func (r ArcResourceBridgeApplianceResource) ModelObject() interface{} { + return &ArcResourceBridgeApplianceResource{} +} + +func (r ArcResourceBridgeApplianceResource) ResourceType() string { + return "azurerm_arc_resource_bridge_appliance" +} + +func (r ArcResourceBridgeApplianceResource) Create() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 60 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + var model ApplianceModel + if err := metadata.Decode(&model); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + client := metadata.Client.ArcResourceBridge.AppliancesClient + subscriptionId := metadata.Client.Account.SubscriptionId + + id := appliances.NewApplianceID(subscriptionId, model.ResourceGroupName, model.Name) + existing, err := client.Get(ctx, id) + if err != nil && !response.WasNotFound(existing.HttpResponse) { + return fmt.Errorf("checking for presence of existing %s: %+v", id, err) + } + if !response.WasNotFound(existing.HttpResponse) { + return metadata.ResourceRequiresImport(r.ResourceType(), id) + } + + identity, err := identity.ExpandSystemAssignedFromModel(model.Identity) + if err != nil { + return err + } + + parameters := appliances.Appliance{ + Location: location.Normalize(model.Location), + Properties: &appliances.ApplianceProperties{ + Distro: pointer.To(model.Distro), + InfrastructureConfig: &appliances.AppliancePropertiesInfrastructureConfig{ + Provider: pointer.To(model.Provider), + }, + }, + Tags: tags.Expand(model.Tags), + } + + parameters.Identity = identity + + if err := client.CreateOrUpdateThenPoll(ctx, id, parameters); err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } + + // since the public key could not be set during creation, update after creation + if model.PublicKeyBase64 != "" { + parameters.Properties.PublicKey = pointer.To(model.PublicKeyBase64) + + if err := client.CreateOrUpdateThenPoll(ctx, id, parameters); err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } + } + + metadata.SetID(id) + return nil + }, + } +} + +func (r ArcResourceBridgeApplianceResource) Update() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.ArcResourceBridge.AppliancesClient + + id, err := appliances.ParseApplianceID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + metadata.Logger.Infof("Decoding state for %s", *id) + var model ApplianceModel + if err := metadata.Decode(&model); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + resp, err := client.Get(ctx, *id) + if err != nil { + return fmt.Errorf("retrieving %s: %+v", *id, err) + } + + parameters := resp.Model + if parameters == nil { + return fmt.Errorf("retrieving %s: model was nil", *id) + } + + if metadata.ResourceData.HasChange("identity") { + identity, err := identity.ExpandSystemAssignedFromModel(model.Identity) + if err != nil { + return err + } + + parameters.Identity = identity + } + + if metadata.ResourceData.HasChange("tags") { + parameters.Tags = tags.Expand(model.Tags) + } + + if metadata.ResourceData.HasChanges("public_key_base64") { + if parameters.Properties == nil { + parameters.Properties = &appliances.ApplianceProperties{} + } + parameters.Properties.PublicKey = pointer.To(model.PublicKeyBase64) + } + + if err := client.CreateOrUpdateThenPoll(ctx, *id, *parameters); err != nil { + return fmt.Errorf("updating %s: %+v", id, err) + } + + return nil + }, + } +} + +func (r ArcResourceBridgeApplianceResource) Read() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 5 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + id, err := appliances.ParseApplianceID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + client := metadata.Client.ArcResourceBridge.AppliancesClient + + resp, err := client.Get(ctx, *id) + if err != nil { + if response.WasNotFound(resp.HttpResponse) { + return metadata.MarkAsGone(*id) + } + return fmt.Errorf("retrieving %q: %+v", *id, err) + } + + state := ApplianceModel{ + Name: id.ApplianceName, + ResourceGroupName: id.ResourceGroupName, + } + + if model := resp.Model; model != nil { + state.Location = location.Normalize(model.Location) + state.Identity = identity.FlattenSystemAssignedToModel(model.Identity) + state.Tags = tags.Flatten(model.Tags) + + if props := model.Properties; props != nil { + state.Distro = pointer.From(props.Distro) + state.PublicKeyBase64 = pointer.From(props.PublicKey) + + if infraConfig := props.InfrastructureConfig; infraConfig != nil { + state.Provider = pointer.From(infraConfig.Provider) + } + } + } + return metadata.Encode(&state) + }, + } +} + +func (r ArcResourceBridgeApplianceResource) Delete() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.ArcResourceBridge.AppliancesClient + id, err := appliances.ParseApplianceID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + if err := client.DeleteThenPoll(ctx, *id); err != nil { + return fmt.Errorf("deleting %s: %+v", *id, err) + } + + return nil + }, + } +} + +func (r ArcResourceBridgeApplianceResource) IDValidationFunc() pluginsdk.SchemaValidateFunc { + return appliances.ValidateApplianceID +} diff --git a/internal/services/arcresourcebridge/arc_resource_bridge_appliance_resource_test.go b/internal/services/arcresourcebridge/arc_resource_bridge_appliance_resource_test.go new file mode 100644 index 0000000000000..e332808c1952b --- /dev/null +++ b/internal/services/arcresourcebridge/arc_resource_bridge_appliance_resource_test.go @@ -0,0 +1,207 @@ +package arcresourcebridge_test + +import ( + "context" + cryptoRand "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/base64" + "fmt" + "testing" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" +) + +type ArcResourceBridgeApplianceResource struct{} + +func TestAccArcResourceBridgeAppliance_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_arc_resource_bridge_appliance", "test") + r := ArcResourceBridgeApplianceResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccArcResourceBridgeAppliance_update(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_arc_resource_bridge_appliance", "test") + r := ArcResourceBridgeApplianceResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.update(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccArcResourceBridgeAppliance_complete(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_arc_resource_bridge_appliance", "test") + r := ArcResourceBridgeApplianceResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.complete(data, r.generatePublicKey()), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccArcResourceBridgeAppliance_requiresImport(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_arc_resource_bridge_appliance", "test") + r := ArcResourceBridgeApplianceResource{} + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + }, + { + Config: r.requiresImport(data), + ExpectError: acceptance.RequiresImportError("azurerm_arc_resource_bridge_appliance"), + }, + }) +} + +func (r ArcResourceBridgeApplianceResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { + id, err := appliances.ParseApplianceID(state.ID) + if err != nil { + return nil, err + } + + client := clients.ArcResourceBridge.AppliancesClient + resp, err := client.Get(ctx, *id) + + if err != nil { + return nil, fmt.Errorf("retrieving %q: %+v", *id, err) + } + + return pointer.To(resp.Model != nil), nil +} + +func (r ArcResourceBridgeApplianceResource) basic(data acceptance.TestData) string { + return fmt.Sprintf(` + +%s + +resource "azurerm_arc_resource_bridge_appliance" "test" { + name = "acctestrcapplicance-%[2]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + distro = "AKSEdge" + infrastructure_provider = "VMWare" + identity { + type = "SystemAssigned" + } +} +`, r.template(data), data.RandomInteger) +} + +func (r ArcResourceBridgeApplianceResource) update(data acceptance.TestData) string { + return fmt.Sprintf(` + +%s + +resource "azurerm_arc_resource_bridge_appliance" "test" { + name = "acctestrcapplicance-%[2]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + distro = "AKSEdge" + infrastructure_provider = "VMWare" + identity { + type = "SystemAssigned" + } + tags = { + "hello" = "world" + } +} +`, r.template(data), data.RandomInteger) +} + +func (r ArcResourceBridgeApplianceResource) complete(data acceptance.TestData, publicKey string) string { + return fmt.Sprintf(` + +%s + +resource "azurerm_arc_resource_bridge_appliance" "test" { + name = "acctestrcapplicance-%[2]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + distro = "AKSEdge" + infrastructure_provider = "VMWare" + public_key_base64 = "%[3]s" + identity { + type = "SystemAssigned" + } + tags = { + "hello" = "world" + } +} +`, r.template(data), data.RandomInteger, publicKey) +} + +func (r ArcResourceBridgeApplianceResource) requiresImport(data acceptance.TestData) string { + return fmt.Sprintf(` +%[1]s +resource "azurerm_arc_resource_bridge_appliance" "import" { + name = azurerm_arc_resource_bridge_appliance.test.name + location = azurerm_arc_resource_bridge_appliance.test.location + resource_group_name = azurerm_arc_resource_bridge_appliance.test.resource_group_name + distro = azurerm_arc_resource_bridge_appliance.test.distro + infrastructure_provider = azurerm_arc_resource_bridge_appliance.test.infrastructure_provider + identity { + type = "SystemAssigned" + } +} +`, r.basic(data), data.RandomInteger) +} + +func (r ArcResourceBridgeApplianceResource) template(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestrg-appliances-%[1]d" + location = "%[2]s" +} +`, data.RandomInteger, data.Locations.Primary) +} + +func (r ArcResourceBridgeApplianceResource) generatePublicKey() string { + privateKey, err := rsa.GenerateKey(cryptoRand.Reader, 4096) + if err != nil { + return "" + } + return base64.StdEncoding.EncodeToString(x509.MarshalPKCS1PublicKey(&privateKey.PublicKey)) +} diff --git a/internal/services/arcresourcebridge/client/client.go b/internal/services/arcresourcebridge/client/client.go new file mode 100644 index 0000000000000..1da72a0636435 --- /dev/null +++ b/internal/services/arcresourcebridge/client/client.go @@ -0,0 +1,24 @@ +package client + +import ( + "fmt" + + "github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances" + "github.com/hashicorp/terraform-provider-azurerm/internal/common" +) + +type Client struct { + AppliancesClient *appliances.AppliancesClient +} + +func NewClient(o *common.ClientOptions) (*Client, error) { + appliancesClient, err := appliances.NewAppliancesClientWithBaseURI(o.Environment.ResourceManager) + if err != nil { + return nil, fmt.Errorf("building appliances Client: %+v", err) + } + o.Configure(appliancesClient.Client, o.Authorizers.ResourceManager) + + return &Client{ + AppliancesClient: appliancesClient, + }, nil +} diff --git a/internal/services/arcresourcebridge/registration.go b/internal/services/arcresourcebridge/registration.go new file mode 100644 index 0000000000000..fef3dfe3f8956 --- /dev/null +++ b/internal/services/arcresourcebridge/registration.go @@ -0,0 +1,33 @@ +package arcresourcebridge + +import ( + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" +) + +var _ sdk.TypedServiceRegistrationWithAGitHubLabel = Registration{} + +type Registration struct{} + +func (r Registration) AssociatedGitHubLabel() string { + return "service/arc-resource-bridge" +} + +func (r Registration) Name() string { + return "Arc Resource Bridge" +} + +func (r Registration) DataSources() []sdk.DataSource { + return []sdk.DataSource{} +} + +func (r Registration) Resources() []sdk.Resource { + return []sdk.Resource{ + ArcResourceBridgeApplianceResource{}, + } +} + +func (r Registration) WebsiteCategories() []string { + return []string{ + "Arc Resource Bridge", + } +} diff --git a/internal/services/authorization/pim_active_role_assignment_resource.go b/internal/services/authorization/pim_active_role_assignment_resource.go index 2dd57a956ef50..4523d2731827e 100644 --- a/internal/services/authorization/pim_active_role_assignment_resource.go +++ b/internal/services/authorization/pim_active_role_assignment_resource.go @@ -201,13 +201,18 @@ func (r PimActiveRoleAssignmentResource) Create() sdk.ResourceFunc { return fmt.Errorf("generating uuid: %+v", err) } + deadline, ok := ctx.Deadline() + if !ok { + return fmt.Errorf("internal error: context has no deadline") + } + requestId := roleassignmentschedulerequests.NewScopedRoleAssignmentScheduleRequestID(config.Scope, uuid) stateConf := &pluginsdk.StateChangeConf{ Pending: []string{"Missing"}, Target: []string{"Created"}, Refresh: createActiveRoleAssignment(ctx, clientRequest, requestId, &payload), MinTimeout: 30 * time.Second, - Timeout: 5 * time.Minute, + Timeout: time.Until(deadline), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { return fmt.Errorf("waiting for %s to be created: %+v", id, err) @@ -219,7 +224,7 @@ func (r PimActiveRoleAssignmentResource) Create() sdk.ResourceFunc { Target: []string{"Found"}, Refresh: waitForActiveRoleAssignment(ctx, clientInstances, config.Scope, config.PrincipalId, config.RoleDefinitionId, "Found"), MinTimeout: 30 * time.Second, - Timeout: 5 * time.Minute, + Timeout: time.Until(deadline), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { @@ -341,13 +346,17 @@ func (PimActiveRoleAssignmentResource) Delete() sdk.ResourceFunc { } deleteId := roleassignmentschedulerequests.NewScopedRoleAssignmentScheduleRequestID(id.Scope, uuid) + deadline, ok := ctx.Deadline() + if !ok { + return fmt.Errorf("internal error: context has no deadline") + } // wait for resource to deleted stateConf := &pluginsdk.StateChangeConf{ Pending: []string{"Exist"}, Target: []string{"Deleted"}, Refresh: deleteActiveRoleAssignment(ctx, clientRequest, deleteId, &payload), MinTimeout: 1 * time.Minute, - Timeout: 5 * time.Minute, + Timeout: time.Until(deadline), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { @@ -360,7 +369,7 @@ func (PimActiveRoleAssignmentResource) Delete() sdk.ResourceFunc { Target: []string{"Missing"}, Refresh: waitForActiveRoleAssignment(ctx, clientInstances, id.Scope, id.PrincipalId, id.RoleDefinitionId, "Missing"), MinTimeout: 30 * time.Second, - Timeout: 5 * time.Minute, + Timeout: time.Until(deadline), } if _, err = stateConf.WaitForStateContext(ctx); err != nil { diff --git a/internal/services/authorization/pim_active_role_assignment_test.go b/internal/services/authorization/pim_active_role_assignment_test.go index 2ada4b8163026..bccc425cca087 100644 --- a/internal/services/authorization/pim_active_role_assignment_test.go +++ b/internal/services/authorization/pim_active_role_assignment_test.go @@ -233,7 +233,7 @@ resource "azurerm_resource_group" "test" { location = "%[2]s" } resource "azurerm_virtual_network" "test" { - name = "amtestVNET1-%[1]d" + name = "acctestVNET1-%[1]d" location = azurerm_resource_group.test.location resource_group_name = azurerm_resource_group.test.name address_space = ["10.0.0.0/16"] diff --git a/internal/services/authorization/pim_eligible_role_assignment_test.go b/internal/services/authorization/pim_eligible_role_assignment_test.go index 1edd385631acd..2f6fde637886b 100644 --- a/internal/services/authorization/pim_eligible_role_assignment_test.go +++ b/internal/services/authorization/pim_eligible_role_assignment_test.go @@ -277,7 +277,7 @@ resource "azurerm_resource_group" "test" { location = "%[3]s" } resource "azurerm_virtual_network" "test" { - name = "amtestVNET1-%[2]d" + name = "acctestVNET1-%[2]d" location = azurerm_resource_group.test.location resource_group_name = azurerm_resource_group.test.name address_space = ["10.0.0.0/16"] diff --git a/internal/services/automation/automation_software_update_configuration_resource.go b/internal/services/automation/automation_software_update_configuration_resource.go index 2806e2f8130e0..d79d951700838 100644 --- a/internal/services/automation/automation_software_update_configuration_resource.go +++ b/internal/services/automation/automation_software_update_configuration_resource.go @@ -18,7 +18,6 @@ import ( validate4 "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/features" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" validate2 "github.com/hashicorp/terraform-provider-azurerm/internal/services/resource/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/suppress" @@ -396,7 +395,7 @@ func (m SoftwareUpdateConfigurationResource) Arguments() map[string]*pluginsdk.S Optional: true, Elem: &pluginsdk.Schema{ Type: pluginsdk.TypeString, - ValidateFunc: computeValidate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, }, @@ -763,7 +762,7 @@ func (m SoftwareUpdateConfigurationResource) Create() sdk.ResourceFunc { subscriptionID := meta.Client.Account.SubscriptionId id := softwareupdateconfiguration.NewSoftwareUpdateConfigurationID(subscriptionID, automationID.ResourceGroupName, automationID.AutomationAccountName, model.Name) - existing, err := client.SoftwareUpdateConfigurationsGetByName(ctx, id, softwareupdateconfiguration.SoftwareUpdateConfigurationsGetByNameOperationOptions{}) + existing, err := client.GetByName(ctx, id, softwareupdateconfiguration.DefaultGetByNameOperationOptions()) if err != nil { if !response.WasNotFound(existing.HttpResponse) { return meta.ResourceRequiresImport(m.ResourceType(), id) @@ -771,7 +770,7 @@ func (m SoftwareUpdateConfigurationResource) Create() sdk.ResourceFunc { } updateConfig := expandUpdateConfig(model) - if _, err = client.SoftwareUpdateConfigurationsCreate(ctx, id, *updateConfig, softwareupdateconfiguration.SoftwareUpdateConfigurationsCreateOperationOptions{}); err != nil { + if _, err = client.Create(ctx, id, *updateConfig, softwareupdateconfiguration.DefaultCreateOperationOptions()); err != nil { return fmt.Errorf("creating %s: %v", id, err) } @@ -790,7 +789,7 @@ func (m SoftwareUpdateConfigurationResource) Read() sdk.ResourceFunc { return err } client := meta.Client.Automation.SoftwareUpdateConfigClient - resp, err := client.SoftwareUpdateConfigurationsGetByName(ctx, *id, softwareupdateconfiguration.SoftwareUpdateConfigurationsGetByNameOperationOptions{}) + resp, err := client.GetByName(ctx, *id, softwareupdateconfiguration.DefaultGetByNameOperationOptions()) if err != nil { if response.WasNotFound(resp.HttpResponse) { return meta.MarkAsGone(id) @@ -798,167 +797,169 @@ func (m SoftwareUpdateConfigurationResource) Read() sdk.ResourceFunc { return err } - var state SoftwareUpdateConfigurationModel - - state.AutomationAccountID = softwareupdateconfiguration.NewAutomationAccountID(id.SubscriptionId, id.ResourceGroupName, id.AutomationAccountName).ID() + state := SoftwareUpdateConfigurationModel{ + AutomationAccountID: softwareupdateconfiguration.NewAutomationAccountID(id.SubscriptionId, id.ResourceGroupName, id.AutomationAccountName).ID(), + Name: id.SoftwareUpdateConfigurationName, + } - props := resp.Model.Properties - updateConfiguration := props.UpdateConfiguration - scheduleConfiguration := props.ScheduleInfo + if model := resp.Model; model != nil { + props := resp.Model.Properties + updateConfiguration := props.UpdateConfiguration + scheduleConfiguration := props.ScheduleInfo + + state.Duration = pointer.From(updateConfiguration.Duration) + if linux := updateConfiguration.Linux; linux != nil { + l := Linux{ + Reboot: pointer.From(linux.RebootSetting), + Classifications: strings.Split(string(pointer.From(linux.IncludedPackageClassifications)), ", "), + ExcludedPackages: pointer.From(linux.ExcludedPackageNameMasks), + IncludedPackages: pointer.From(linux.IncludedPackageNameMasks), + } - state.Name = id.SoftwareUpdateConfigurationName - state.Duration = pointer.From(updateConfiguration.Duration) - if linux := updateConfiguration.Linux; linux != nil { - l := Linux{ - Reboot: pointer.From(linux.RebootSetting), - Classifications: strings.Split(string(pointer.From(linux.IncludedPackageClassifications)), ", "), - ExcludedPackages: pointer.From(linux.ExcludedPackageNameMasks), - IncludedPackages: pointer.From(linux.IncludedPackageNameMasks), - } + if !features.FourPointOhBeta() && len(strings.Split(string(pointer.From(linux.IncludedPackageClassifications)), ", ")) == 1 { + l.Classification = string(pointer.From(linux.IncludedPackageClassifications)) + } - if !features.FourPointOhBeta() && len(strings.Split(string(pointer.From(linux.IncludedPackageClassifications)), ", ")) == 1 { - l.Classification = string(pointer.From(linux.IncludedPackageClassifications)) + state.Linux = []Linux{l} + state.OperatingSystem = string(softwareupdateconfiguration.OperatingSystemTypeLinux) } + if windows := updateConfiguration.Windows; windows != nil { + w := Windows{ + Classifications: strings.Split(strings.ReplaceAll(string(pointer.From(windows.IncludedUpdateClassifications)), " ", ""), ","), + ExcludedKbs: pointer.From(windows.ExcludedKbNumbers), + IncludedKbs: pointer.From(windows.IncludedKbNumbers), + RebootSetting: pointer.From(windows.RebootSetting), + } - state.Linux = []Linux{l} - state.OperatingSystem = string(softwareupdateconfiguration.OperatingSystemTypeLinux) - } - if windows := updateConfiguration.Windows; windows != nil { - w := Windows{ - Classifications: strings.Split(strings.ReplaceAll(string(pointer.From(windows.IncludedUpdateClassifications)), " ", ""), ","), - ExcludedKbs: pointer.From(windows.ExcludedKbNumbers), - IncludedKbs: pointer.From(windows.IncludedKbNumbers), - RebootSetting: pointer.From(windows.RebootSetting), - } + if !features.FourPointOhBeta() && len(strings.Split(string(pointer.From(windows.IncludedUpdateClassifications)), ", ")) == 1 { + w.Classification = string(pointer.From(windows.IncludedUpdateClassifications)) + } - if !features.FourPointOhBeta() && len(strings.Split(string(pointer.From(windows.IncludedUpdateClassifications)), ", ")) == 1 { - w.Classification = string(pointer.From(windows.IncludedUpdateClassifications)) + state.Windows = []Windows{w} + state.OperatingSystem = string(softwareupdateconfiguration.OperatingSystemTypeWindows) } - - state.Windows = []Windows{w} - state.OperatingSystem = string(softwareupdateconfiguration.OperatingSystemTypeWindows) - } - if targets := updateConfiguration.Targets; targets != nil { - t := Target{} - aq := make([]AzureQuery, 0) - for _, v := range pointer.From(targets.AzureQueries) { - tagsList := make([]Tag, 0) - tagFilter := "" - if tags := v.TagSettings; tags != nil { - for k, vals := range pointer.From(tags.Tags) { - tagsList = append(tagsList, Tag{ - Tag: k, - Values: vals, - }) + if targets := updateConfiguration.Targets; targets != nil { + t := Target{} + aq := make([]AzureQuery, 0) + for _, v := range pointer.From(targets.AzureQueries) { + tagsList := make([]Tag, 0) + tagFilter := "" + if tags := v.TagSettings; tags != nil { + for k, vals := range pointer.From(tags.Tags) { + tagsList = append(tagsList, Tag{ + Tag: k, + Values: vals, + }) + } + tagFilter = string(pointer.From(tags.FilterOperator)) } - tagFilter = string(pointer.From(tags.FilterOperator)) + aq = append(aq, AzureQuery{ + Scope: pointer.From(v.Scope), + Locations: pointer.From(v.Locations), + Tags: tagsList, + TagFilter: tagFilter, + }) } - aq = append(aq, AzureQuery{ - Scope: pointer.From(v.Scope), - Locations: pointer.From(v.Locations), - Tags: tagsList, - TagFilter: tagFilter, - }) - } - t.AzureQueries = aq + t.AzureQueries = aq - naq := make([]NonAzureQuery, 0) - for _, v := range pointer.From(targets.NonAzureQueries) { - naq = append(naq, NonAzureQuery{ - FunctionAlias: pointer.From(v.FunctionAlias), - WorkspaceId: pointer.From(v.WorkspaceId), - }) - } + naq := make([]NonAzureQuery, 0) + for _, v := range pointer.From(targets.NonAzureQueries) { + naq = append(naq, NonAzureQuery{ + FunctionAlias: pointer.From(v.FunctionAlias), + WorkspaceId: pointer.From(v.WorkspaceId), + }) + } - t.NonAzureQueries = naq - state.Targets = []Target{t} - } + t.NonAzureQueries = naq + state.Targets = []Target{t} + } - state.VirtualMachines = pointer.From(updateConfiguration.AzureVirtualMachines) - state.NonAzureComputerNames = pointer.From(updateConfiguration.NonAzureComputerNames) - - schedule := Schedule{ - Description: pointer.From(scheduleConfiguration.Description), - StartTime: pointer.From(scheduleConfiguration.StartTime), - StartTimeOffsetMinutes: pointer.From(scheduleConfiguration.StartTimeOffsetMinutes), - ExpiryTime: pointer.From(scheduleConfiguration.ExpiryTime), - ExpiryTimeOffsetMinutes: pointer.From(scheduleConfiguration.ExpiryTimeOffsetMinutes), - IsEnabled: pointer.From(scheduleConfiguration.IsEnabled), - NextRun: pointer.From(scheduleConfiguration.NextRun), - NextRunOffsetMinutes: pointer.From(scheduleConfiguration.NextRunOffsetMinutes), - Interval: int(pointer.From(scheduleConfiguration.Interval)), - Frequency: string(pointer.From(scheduleConfiguration.Frequency)), - CreationTime: pointer.From(scheduleConfiguration.CreationTime), - LastModifiedTime: pointer.From(scheduleConfiguration.LastModifiedTime), - TimeZone: pointer.From(scheduleConfiguration.TimeZone), - } + state.VirtualMachines = pointer.From(updateConfiguration.AzureVirtualMachines) + state.NonAzureComputerNames = pointer.From(updateConfiguration.NonAzureComputerNames) + + schedule := Schedule{ + Description: pointer.From(scheduleConfiguration.Description), + StartTime: pointer.From(scheduleConfiguration.StartTime), + StartTimeOffsetMinutes: pointer.From(scheduleConfiguration.StartTimeOffsetMinutes), + ExpiryTime: pointer.From(scheduleConfiguration.ExpiryTime), + ExpiryTimeOffsetMinutes: pointer.From(scheduleConfiguration.ExpiryTimeOffsetMinutes), + IsEnabled: pointer.From(scheduleConfiguration.IsEnabled), + NextRun: pointer.From(scheduleConfiguration.NextRun), + NextRunOffsetMinutes: pointer.From(scheduleConfiguration.NextRunOffsetMinutes), + Interval: int(pointer.From(scheduleConfiguration.Interval)), + Frequency: string(pointer.From(scheduleConfiguration.Frequency)), + CreationTime: pointer.From(scheduleConfiguration.CreationTime), + LastModifiedTime: pointer.From(scheduleConfiguration.LastModifiedTime), + TimeZone: pointer.From(scheduleConfiguration.TimeZone), + } - // (@jackofallops) - Advanced Schedule info is never returned so we'll pull it in from Config until the tracked issue is resolved - // Tracking Issue: https://github.com/Azure/azure-rest-api-specs/issues/24436 - if advSchedule := scheduleConfiguration.AdvancedSchedule; advSchedule != nil { - schedule.AdvancedWeekDays = pointer.From(advSchedule.WeekDays) - if monthDays := pointer.From(advSchedule.MonthDays); len(monthDays) > 0 { - advMonthDays := make([]int, 0) - for _, v := range monthDays { - advMonthDays = append(advMonthDays, int(v)) + // (@jackofallops) - Advanced Schedule info is never returned so we'll pull it in from Config until the tracked issue is resolved + // Tracking Issue: https://github.com/Azure/azure-rest-api-specs/issues/24436 + if advSchedule := scheduleConfiguration.AdvancedSchedule; advSchedule != nil { + schedule.AdvancedWeekDays = pointer.From(advSchedule.WeekDays) + if monthDays := pointer.From(advSchedule.MonthDays); len(monthDays) > 0 { + advMonthDays := make([]int, 0) + for _, v := range monthDays { + advMonthDays = append(advMonthDays, int(v)) + } + schedule.AdvancedMonthDays = advMonthDays } - schedule.AdvancedMonthDays = advMonthDays - } - if monthlyOccurrence := pointer.From(advSchedule.MonthlyOccurrences); len(monthlyOccurrence) > 0 { - mo := make([]MonthlyOccurrence, 0) - for _, v := range monthlyOccurrence { - mo = append(mo, MonthlyOccurrence{ - Occurrence: int(pointer.From(v.Occurrence)), - Day: string(pointer.From(v.Day)), - }) + if monthlyOccurrence := pointer.From(advSchedule.MonthlyOccurrences); len(monthlyOccurrence) > 0 { + mo := make([]MonthlyOccurrence, 0) + for _, v := range monthlyOccurrence { + mo = append(mo, MonthlyOccurrence{ + Occurrence: int(pointer.From(v.Occurrence)), + Day: string(pointer.From(v.Day)), + }) + } + schedule.MonthlyOccurrence = mo } - schedule.MonthlyOccurrence = mo - } - } else { - if weekDays, ok := meta.ResourceData.GetOk("schedule.0.advanced_week_days"); ok { - wd := make([]string, 0) - for _, v := range weekDays.([]interface{}) { - wd = append(wd, v.(string)) + } else { + if weekDays, ok := meta.ResourceData.GetOk("schedule.0.advanced_week_days"); ok { + wd := make([]string, 0) + for _, v := range weekDays.([]interface{}) { + wd = append(wd, v.(string)) + } + schedule.AdvancedWeekDays = wd } - schedule.AdvancedWeekDays = wd - } - if monthDays, ok := meta.ResourceData.GetOk("schedule.0.advanced_month_days"); ok { - md := make([]int, 0) - for _, v := range monthDays.([]interface{}) { - md = append(md, v.(int)) + if monthDays, ok := meta.ResourceData.GetOk("schedule.0.advanced_month_days"); ok { + md := make([]int, 0) + for _, v := range monthDays.([]interface{}) { + md = append(md, v.(int)) + } + schedule.AdvancedMonthDays = md } - schedule.AdvancedMonthDays = md - } - if monthlyOccurrence, ok := meta.ResourceData.GetOk("schedule.0.monthly_occurrence"); ok { - mos := make([]MonthlyOccurrence, 0) - if moRaw, ok := monthlyOccurrence.([]interface{}); ok { - for _, v := range moRaw { - mo := v.(map[string]interface{}) - mos = append(mos, MonthlyOccurrence{ - Occurrence: mo["occurrence"].(int), - Day: mo["day"].(string), - }) + if monthlyOccurrence, ok := meta.ResourceData.GetOk("schedule.0.monthly_occurrence"); ok { + mos := make([]MonthlyOccurrence, 0) + if moRaw, ok := monthlyOccurrence.([]interface{}); ok { + for _, v := range moRaw { + mo := v.(map[string]interface{}) + mos = append(mos, MonthlyOccurrence{ + Occurrence: mo["occurrence"].(int), + Day: mo["day"].(string), + }) + } } + schedule.MonthlyOccurrence = mos } - schedule.MonthlyOccurrence = mos } - } - state.Schedule = []Schedule{schedule} + state.Schedule = []Schedule{schedule} - if tasks := props.Tasks; tasks != nil { - if pre := tasks.PreTask; pre != nil { - state.PreTask = []UpdateTask{{ - Source: pointer.From(pre.Source), - Parameters: pointer.From(pre.Parameters), - }} - } - if post := tasks.PostTask; post != nil { - state.PostTask = []UpdateTask{{ - Source: pointer.From(post.Source), - Parameters: pointer.From(post.Parameters), - }} + if tasks := props.Tasks; tasks != nil { + if pre := tasks.PreTask; pre != nil { + state.PreTask = []UpdateTask{{ + Source: pointer.From(pre.Source), + Parameters: pointer.From(pre.Parameters), + }} + } + if post := tasks.PostTask; post != nil { + state.PostTask = []UpdateTask{{ + Source: pointer.From(post.Source), + Parameters: pointer.From(post.Parameters), + }} + } } } @@ -983,7 +984,7 @@ func (m SoftwareUpdateConfigurationResource) Update() sdk.ResourceFunc { return fmt.Errorf("decoding: %+v", err) } - resp, err := client.SoftwareUpdateConfigurationsGetByName(ctx, *id, softwareupdateconfiguration.SoftwareUpdateConfigurationsGetByNameOperationOptions{}) + resp, err := client.GetByName(ctx, *id, softwareupdateconfiguration.DefaultGetByNameOperationOptions()) if err != nil { return fmt.Errorf("reading %s: %+v", *id, err) } @@ -1171,7 +1172,7 @@ func (m SoftwareUpdateConfigurationResource) Update() sdk.ResourceFunc { } } - if _, err = client.SoftwareUpdateConfigurationsCreate(ctx, *id, *existing, softwareupdateconfiguration.SoftwareUpdateConfigurationsCreateOperationOptions{}); err != nil { + if _, err = client.Create(ctx, *id, *existing, softwareupdateconfiguration.DefaultCreateOperationOptions()); err != nil { return fmt.Errorf("creating %s: %v", id, err) } @@ -1190,7 +1191,7 @@ func (m SoftwareUpdateConfigurationResource) Delete() sdk.ResourceFunc { } meta.Logger.Infof("deleting %s", *id) client := meta.Client.Automation.SoftwareUpdateConfigClient - if _, err = client.SoftwareUpdateConfigurationsDelete(ctx, *id, softwareupdateconfiguration.SoftwareUpdateConfigurationsDeleteOperationOptions{}); err != nil { + if _, err = client.Delete(ctx, *id, softwareupdateconfiguration.DefaultDeleteOperationOptions()); err != nil { return fmt.Errorf("deleting %s: %v", *id, err) } return nil diff --git a/internal/services/automation/automation_software_update_configuration_resource_test.go b/internal/services/automation/automation_software_update_configuration_resource_test.go index ae863aa90de7e..0cdaa020c000a 100644 --- a/internal/services/automation/automation_software_update_configuration_resource_test.go +++ b/internal/services/automation/automation_software_update_configuration_resource_test.go @@ -41,7 +41,7 @@ func (a SoftwareUpdateConfigurationResource) Exists(ctx context.Context, client if err != nil { return nil, err } - resp, err := client.Automation.SoftwareUpdateConfigClient.SoftwareUpdateConfigurationsGetByName(ctx, *id, softwareupdateconfiguration.SoftwareUpdateConfigurationsGetByNameOperationOptions{}) + resp, err := client.Automation.SoftwareUpdateConfigClient.GetByName(ctx, *id, softwareupdateconfiguration.DefaultGetByNameOperationOptions()) if err != nil { return nil, fmt.Errorf("retrieving %s: %+v", *id, err) } diff --git a/internal/services/batch/batch_pool.go b/internal/services/batch/batch_pool.go index 8dd2c0ab9f72b..08f50ba894c9f 100644 --- a/internal/services/batch/batch_pool.go +++ b/internal/services/batch/batch_pool.go @@ -1114,6 +1114,10 @@ func ExpandBatchPoolNetworkConfiguration(list []interface{}) (*pool.NetworkConfi networkConfiguration.DynamicVnetAssignmentScope = pointer.To(pool.DynamicVNetAssignmentScope(v.(string))) } + if v, ok := networkConfigValue["accelerated_networking_enabled"]; ok { + networkConfiguration.EnableAcceleratedNetworking = pointer.FromBool(v.(bool)) + } + if v, ok := networkConfigValue["subnet_id"]; ok { if value := v.(string); value != "" { networkConfiguration.SubnetId = &value @@ -1311,6 +1315,7 @@ func flattenBatchPoolNetworkConfiguration(input *pool.NetworkConfiguration) []in return []interface{}{ map[string]interface{}{ "dynamic_vnet_assignment_scope": dynamicVNetAssignmentScope, + "accelerated_networking_enabled": pointer.From(input.EnableAcceleratedNetworking), "endpoint_configuration": endpointConfigs, "public_address_provisioning_type": publicAddressProvisioningType, "public_ips": pluginsdk.NewSet(pluginsdk.HashString, publicIPAddressIds), diff --git a/internal/services/batch/batch_pool_data_source.go b/internal/services/batch/batch_pool_data_source.go index ab33868e1683a..09bb6e3ff5d13 100644 --- a/internal/services/batch/batch_pool_data_source.go +++ b/internal/services/batch/batch_pool_data_source.go @@ -478,6 +478,10 @@ func dataSourceBatchPool() *pluginsdk.Resource { Type: pluginsdk.TypeString, Computed: true, }, + "accelerated_networking_enabled": { + Type: pluginsdk.TypeBool, + Computed: true, + }, "subnet_id": { Type: pluginsdk.TypeString, Computed: true, diff --git a/internal/services/batch/batch_pool_resource.go b/internal/services/batch/batch_pool_resource.go index e19c7caf6e146..b330786f36a8d 100644 --- a/internal/services/batch/batch_pool_resource.go +++ b/internal/services/batch/batch_pool_resource.go @@ -463,9 +463,15 @@ func resourceBatchPool() *pluginsdk.Resource { string(pool.DynamicVNetAssignmentScopeJob), }, false), }, + "accelerated_networking_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + ForceNew: true, + }, "subnet_id": { Type: pluginsdk.TypeString, - Required: true, + Optional: true, ForceNew: true, ValidateFunc: validation.StringIsNotEmpty, }, diff --git a/internal/services/batch/batch_pool_resource_test.go b/internal/services/batch/batch_pool_resource_test.go index 7f15ee02f76ae..c3ca98be85efc 100644 --- a/internal/services/batch/batch_pool_resource_test.go +++ b/internal/services/batch/batch_pool_resource_test.go @@ -44,6 +44,22 @@ func TestAccBatchPool_basic(t *testing.T) { }) } +func TestAccBatchPool_acceleratedNetworkingEnabled(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_batch_pool", "test") + r := BatchPoolResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.acceleratedNetworkingEnabled(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("network_configuration.0.accelerated_networking_enabled").HasValue("true"), + ), + }, + data.ImportStep("stop_pending_resize_operation"), + }) +} + func TestAccBatchPool_identity(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_batch_pool", "test") r := BatchPoolResource{} @@ -995,6 +1011,48 @@ resource "azurerm_batch_pool" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString) } +func (BatchPoolResource) acceleratedNetworkingEnabled(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-batch-%d" + location = "%s" +} + +resource "azurerm_batch_account" "test" { + name = "testaccbatch%s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location +} + +resource "azurerm_batch_pool" "test" { + name = "testaccpool%s" + resource_group_name = azurerm_resource_group.test.name + account_name = azurerm_batch_account.test.name + node_agent_sku_id = "batch.node.windows amd64" + vm_size = "Standard_D1_v2" + + fixed_scale { + target_dedicated_nodes = 2 + } + + storage_image_reference { + publisher = "MicrosoftWindowsServer" + offer = "WindowsServer" + sku = "2016-datacenter-smalldisk" + version = "latest" + } + + network_configuration { + accelerated_networking_enabled = true + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString) +} + func (BatchPoolResource) identity(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { diff --git a/internal/services/bot/bot_channel_direct_line_speech_resource.go b/internal/services/bot/bot_channel_direct_line_speech_resource.go index d0fb0b0f0d75e..d07ffc5fe8ca6 100644 --- a/internal/services/bot/bot_channel_direct_line_speech_resource.go +++ b/internal/services/bot/bot_channel_direct_line_speech_resource.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" + "github.com/hashicorp/go-azure-sdk/resource-manager/cognitive/2023-05-01/cognitiveservicesaccounts" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" @@ -64,6 +65,12 @@ func resourceBotChannelDirectLineSpeech() *pluginsdk.Resource { "cognitive_service_location": commonschema.LocationWithoutForceNew(), + "cognitive_account_id": { + Type: schema.TypeString, + Optional: true, + ValidateFunc: cognitiveservicesaccounts.ValidateAccountID, + }, + "custom_speech_model_id": { Type: schema.TypeString, Optional: true, @@ -112,6 +119,11 @@ func resourceBotChannelDirectLineSpeechCreate(d *pluginsdk.ResourceData, meta in Kind: botservice.KindBot, } + if v, ok := d.GetOk("cognitive_account_id"); ok { + channel, _ := channel.Properties.AsDirectLineSpeechChannel() + channel.Properties.CognitiveServiceResourceID = utils.String(v.(string)) + } + if v, ok := d.GetOk("custom_speech_model_id"); ok { channel, _ := channel.Properties.AsDirectLineSpeechChannel() channel.Properties.CustomSpeechModelID = utils.String(v.(string)) @@ -158,6 +170,7 @@ func resourceBotChannelDirectLineSpeechRead(d *pluginsdk.ResourceData, meta inte if props := resp.Properties; props != nil { if channel, ok := props.AsDirectLineSpeechChannel(); ok { if channelProps := channel.Properties; channelProps != nil { + d.Set("cognitive_account_id", channelProps.CognitiveServiceResourceID) d.Set("custom_speech_model_id", channelProps.CustomSpeechModelID) d.Set("custom_voice_deployment_id", channelProps.CustomVoiceDeploymentID) } @@ -191,6 +204,11 @@ func resourceBotChannelDirectLineSpeechUpdate(d *pluginsdk.ResourceData, meta in Kind: botservice.KindBot, } + if d.HasChange("cognitive_account_id") { + channel, _ := channel.Properties.AsDirectLineSpeechChannel() + channel.Properties.CognitiveServiceResourceID = utils.String(d.Get("cognitive_account_id").(string)) + } + if v, ok := d.GetOk("custom_speech_model_id"); ok { channel, _ := channel.Properties.AsDirectLineSpeechChannel() channel.Properties.CustomSpeechModelID = utils.String(v.(string)) diff --git a/internal/services/bot/bot_channel_direct_line_speech_resource_test.go b/internal/services/bot/bot_channel_direct_line_speech_resource_test.go index 27e58f32d6862..e6a59e91f2b82 100644 --- a/internal/services/bot/bot_channel_direct_line_speech_resource_test.go +++ b/internal/services/bot/bot_channel_direct_line_speech_resource_test.go @@ -171,6 +171,7 @@ resource "azurerm_bot_channel_direct_line_speech" "test" { bot_name = azurerm_bot_channels_registration.test.name location = azurerm_bot_channels_registration.test.location resource_group_name = azurerm_resource_group.test.name + cognitive_account_id = azurerm_cognitive_account.test.id cognitive_service_location = azurerm_cognitive_account.test.location cognitive_service_access_key = azurerm_cognitive_account.test.primary_access_key custom_speech_model_id = "a9316355-7b04-4468-9f6e-114419e6c9cc" @@ -206,6 +207,7 @@ resource "azurerm_bot_channel_direct_line_speech" "test" { bot_name = azurerm_bot_channels_registration.test.name location = azurerm_bot_channels_registration.test.location resource_group_name = azurerm_resource_group.test.name + cognitive_account_id = azurerm_cognitive_account.test2.id cognitive_service_location = azurerm_cognitive_account.test2.location cognitive_service_access_key = azurerm_cognitive_account.test2.primary_access_key custom_speech_model_id = "cf7a4202-9be3-4195-9619-5a747260626d" diff --git a/internal/services/bot/bot_channel_directline_resource.go b/internal/services/bot/bot_channel_directline_resource.go index 032e342c1650a..6be3af008571b 100644 --- a/internal/services/bot/bot_channel_directline_resource.go +++ b/internal/services/bot/bot_channel_directline_resource.go @@ -64,12 +64,29 @@ func resourceBotChannelDirectline() *pluginsdk.Resource { ValidateFunc: validation.StringIsNotEmpty, }, + "user_upload_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: true, + }, + "enabled": { Type: pluginsdk.TypeBool, Optional: true, Default: true, }, + "endpoint_parameters_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + }, + + "storage_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: true, + }, + "v1_allowed": { Type: pluginsdk.TypeBool, Optional: true, @@ -162,7 +179,7 @@ func resourceBotChannelDirectlineCreate(d *pluginsdk.ResourceData, meta interfac } d.SetId(resourceId.ID()) - // Unable to create a new site with enhanced_authentication_enabled in the same operation, so we need to make two calls + // Unable to add a new site with enhanced_authentication_enabled, user_upload_enabled, endpoint_parameters_enabled, storage_enabled in the same operation, so we need to make two calls if _, err := client.Update(ctx, resourceId.ResourceGroup, resourceId.BotServiceName, botservice.ChannelNameDirectLineChannel, channel); err != nil { return fmt.Errorf("updating Directline Channel for Bot %q (Resource Group %q): %+v", resourceId.BotServiceName, resourceId.ResourceGroup, err) } @@ -236,6 +253,12 @@ func resourceBotChannelDirectlineUpdate(d *pluginsdk.ResourceData, meta interfac return fmt.Errorf("updating Directline Channel for Bot %q (Resource Group %q): %+v", id.BotServiceName, id.ResourceGroup, err) } + // Unable to add a new site with enhanced_authentication_enabled, user_upload_enabled, endpoint_parameters_enabled, storage_enabled in the same operation, so we need to make two calls + // Once this issue https://github.com/Azure/azure-rest-api-specs/issues/25758 is fixed, this update will be removed + if _, err := client.Update(ctx, id.ResourceGroup, id.BotServiceName, botservice.ChannelNameDirectLineChannel, channel); err != nil { + return fmt.Errorf("updating Directline Channel for Bot %q (Resource Group %q): %+v", id.BotServiceName, id.ResourceGroup, err) + } + return resourceBotChannelDirectlineRead(d, meta) } @@ -268,7 +291,11 @@ func expandDirectlineSites(input []interface{}) *[]botservice.DirectLineSite { } site := element.(map[string]interface{}) - expanded := botservice.DirectLineSite{} + expanded := botservice.DirectLineSite{ + IsBlockUserUploadEnabled: utils.Bool(!site["user_upload_enabled"].(bool)), + IsEndpointParametersEnabled: utils.Bool(site["endpoint_parameters_enabled"].(bool)), + IsNoStorageEnabled: utils.Bool(!site["storage_enabled"].(bool)), + } if v, ok := site["name"].(string); ok { expanded.SiteName = &v @@ -310,6 +337,24 @@ func flattenDirectlineSites(input []botservice.DirectLineSite) []interface{} { site["name"] = *v } + userUploadEnabled := true + if v := element.IsBlockUserUploadEnabled; v != nil { + userUploadEnabled = !*v + } + site["user_upload_enabled"] = userUploadEnabled + + var endpointParametersEnabled bool + if v := element.IsEndpointParametersEnabled; v != nil { + endpointParametersEnabled = *v + } + site["endpoint_parameters_enabled"] = endpointParametersEnabled + + storageEnabled := true + if v := element.IsNoStorageEnabled; v != nil { + storageEnabled = !*v + } + site["storage_enabled"] = storageEnabled + if element.Key != nil { site["key"] = *element.Key } diff --git a/internal/services/bot/bot_channel_directline_resource_test.go b/internal/services/bot/bot_channel_directline_resource_test.go index edd733d3d55e7..2461f9d4fdc60 100644 --- a/internal/services/bot/bot_channel_directline_resource_test.go +++ b/internal/services/bot/bot_channel_directline_resource_test.go @@ -116,13 +116,26 @@ resource "azurerm_bot_channel_directline" "test" { bot_name = "${azurerm_bot_channels_registration.test.name}" location = "${azurerm_bot_channels_registration.test.location}" resource_group_name = "${azurerm_resource_group.test.name}" + site { - name = "test" + name = "test1" enabled = true v1_allowed = true v3_allowed = true enhanced_authentication_enabled = true trusted_origins = ["https://example.com"] + user_upload_enabled = false + endpoint_parameters_enabled = true + storage_enabled = false + } + + site { + name = "test2" + enabled = true + enhanced_authentication_enabled = false + user_upload_enabled = true + endpoint_parameters_enabled = false + storage_enabled = true } } `, BotChannelsRegistrationResource{}.basicConfig(data)) diff --git a/internal/services/bot/bot_channel_ms_teams_resource.go b/internal/services/bot/bot_channel_ms_teams_resource.go index 0acaf1a78de25..2d39eeb9faedd 100644 --- a/internal/services/bot/bot_channel_ms_teams_resource.go +++ b/internal/services/bot/bot_channel_ms_teams_resource.go @@ -63,6 +63,16 @@ func resourceBotChannelMsTeams() *pluginsdk.Resource { ValidateFunc: validate.BotMSTeamsCallingWebHook(), }, + "deployment_environment": { + Type: pluginsdk.TypeString, + Optional: true, + Default: "CommercialDeployment", + ValidateFunc: validation.StringInSlice([]string{ + "CommercialDeployment", + "GCCModerateDeployment", + }, false), + }, + // TODO 4.0: change this from enable_* to *_enabled "enable_calling": { Type: pluginsdk.TypeBool, @@ -95,8 +105,10 @@ func resourceBotChannelMsTeamsCreate(d *pluginsdk.ResourceData, meta interface{} channel := botservice.BotChannel{ Properties: botservice.MsTeamsChannel{ Properties: &botservice.MsTeamsChannelProperties{ - EnableCalling: utils.Bool(d.Get("enable_calling").(bool)), - IsEnabled: utils.Bool(true), + AcceptedTerms: utils.Bool(true), + DeploymentEnvironment: utils.String(d.Get("deployment_environment").(string)), + EnableCalling: utils.Bool(d.Get("enable_calling").(bool)), + IsEnabled: utils.Bool(true), }, ChannelName: botservice.ChannelNameBasicChannelChannelNameMsTeamsChannel, }, @@ -146,6 +158,7 @@ func resourceBotChannelMsTeamsRead(d *pluginsdk.ResourceData, meta interface{}) if channel, ok := props.AsMsTeamsChannel(); ok { if channelProps := channel.Properties; channelProps != nil { d.Set("calling_web_hook", channelProps.CallingWebhook) + d.Set("deployment_environment", channelProps.DeploymentEnvironment) d.Set("enable_calling", channelProps.EnableCalling) } } @@ -167,9 +180,11 @@ func resourceBotChannelMsTeamsUpdate(d *pluginsdk.ResourceData, meta interface{} channel := botservice.BotChannel{ Properties: botservice.MsTeamsChannel{ Properties: &botservice.MsTeamsChannelProperties{ - EnableCalling: utils.Bool(d.Get("enable_calling").(bool)), - CallingWebhook: utils.String(d.Get("calling_web_hook").(string)), - IsEnabled: utils.Bool(true), + AcceptedTerms: utils.Bool(true), + DeploymentEnvironment: utils.String(d.Get("deployment_environment").(string)), + EnableCalling: utils.Bool(d.Get("enable_calling").(bool)), + CallingWebhook: utils.String(d.Get("calling_web_hook").(string)), + IsEnabled: utils.Bool(true), }, ChannelName: botservice.ChannelNameBasicChannelChannelNameMsTeamsChannel, }, diff --git a/internal/services/bot/bot_channel_ms_teams_resource_test.go b/internal/services/bot/bot_channel_ms_teams_resource_test.go index 97bd44e4355ca..67f193eae6ffc 100644 --- a/internal/services/bot/bot_channel_ms_teams_resource_test.go +++ b/internal/services/bot/bot_channel_ms_teams_resource_test.go @@ -94,11 +94,12 @@ func (BotChannelMsTeamsResource) basicUpdate(data acceptance.TestData) string { %s resource "azurerm_bot_channel_ms_teams" "test" { - bot_name = azurerm_bot_channels_registration.test.name - location = azurerm_bot_channels_registration.test.location - resource_group_name = azurerm_resource_group.test.name - calling_web_hook = "https://example.com/" - enable_calling = true + bot_name = azurerm_bot_channels_registration.test.name + location = azurerm_bot_channels_registration.test.location + resource_group_name = azurerm_resource_group.test.name + calling_web_hook = "https://example.com/" + enable_calling = true + deployment_environment = "CommercialDeployment" } `, BotChannelsRegistrationResource{}.basicConfig(data)) } diff --git a/internal/services/bot/bot_channel_web_chat_resource.go b/internal/services/bot/bot_channel_web_chat_resource.go index b5ba830a2608d..960fa0305cf99 100644 --- a/internal/services/bot/bot_channel_web_chat_resource.go +++ b/internal/services/bot/bot_channel_web_chat_resource.go @@ -13,6 +13,7 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/features" "github.com/hashicorp/terraform-provider-azurerm/internal/services/bot/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/bot/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" @@ -23,7 +24,7 @@ import ( ) func resourceBotChannelWebChat() *pluginsdk.Resource { - return &pluginsdk.Resource{ + resource := &pluginsdk.Resource{ Create: resourceBotChannelWebChatCreate, Read: resourceBotChannelWebChatRead, Delete: resourceBotChannelWebChatDelete, @@ -53,16 +54,61 @@ func resourceBotChannelWebChat() *pluginsdk.Resource { ValidateFunc: validate.BotName, }, - "site_names": { + "site": { Type: pluginsdk.TypeSet, - Required: true, - Elem: &pluginsdk.Schema{ - Type: pluginsdk.TypeString, - ValidateFunc: validation.StringIsNotEmpty, + Optional: true, + Computed: !features.FourPointOhBeta(), + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "user_upload_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: true, + }, + + "endpoint_parameters_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + }, + + "storage_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: true, + }, + }, }, + ExactlyOneOf: func() []string { + if !features.FourPointOhBeta() { + return []string{"site_names", "site"} + } + return []string{} + }(), }, }, } + + if !features.FourPointOhBeta() { + resource.Schema["site_names"] = &pluginsdk.Schema{ + Type: pluginsdk.TypeSet, + Optional: true, + Computed: true, + Elem: &pluginsdk.Schema{ + Type: pluginsdk.TypeString, + ValidateFunc: validation.StringIsNotEmpty, + }, + Deprecated: "`site_names` will be removed in favour of the property `site` in version 4.0 of the AzureRM Provider.", + ExactlyOneOf: []string{"site_names", "site"}, + } + } + + return resource } func resourceBotChannelWebChatCreate(d *pluginsdk.ResourceData, meta interface{}) error { @@ -99,20 +145,36 @@ func resourceBotChannelWebChatCreate(d *pluginsdk.ResourceData, meta interface{} channel := botservice.BotChannel{ Properties: botservice.WebChatChannel{ - Properties: &botservice.WebChatChannelProperties{ - Sites: expandSiteNames(d.Get("site_names").(*pluginsdk.Set).List()), - }, + Properties: &botservice.WebChatChannelProperties{}, ChannelName: botservice.ChannelNameBasicChannelChannelNameWebChatChannel, }, Location: utils.String(azure.NormalizeLocation(d.Get("location").(string))), Kind: botservice.KindBot, } + if !features.FourPointOhBeta() { + if v, ok := d.GetOk("site_names"); ok { + channel, _ := channel.Properties.AsWebChatChannel() + channel.Properties.Sites = expandSiteNames(v.(*pluginsdk.Set).List()) + } + } + + if v, ok := d.GetOk("site"); ok { + channel, _ := channel.Properties.AsWebChatChannel() + channel.Properties.Sites = expandSites(v.(*pluginsdk.Set).List()) + } + if _, err := client.Create(ctx, id.ResourceGroup, id.BotServiceName, botservice.ChannelNameWebChatChannel, channel); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } + // Unable to add a new site with user_upload_enabled, endpoint_parameters_enabled, storage_enabled in the same operation, so we need to make two calls + if _, err := client.Update(ctx, id.ResourceGroup, id.BotServiceName, botservice.ChannelNameWebChatChannel, channel); err != nil { + return fmt.Errorf("updating %s: %+v", id, err) + } + d.SetId(id.ID()) + return resourceBotChannelWebChatRead(d, meta) } @@ -144,8 +206,14 @@ func resourceBotChannelWebChatRead(d *pluginsdk.ResourceData, meta interface{}) if props := resp.Properties; props != nil { if channel, ok := props.AsWebChatChannel(); ok { if channelProps := channel.Properties; channelProps != nil { - if err := d.Set("site_names", flattenSiteNames(channelProps.Sites)); err != nil { - return fmt.Errorf("setting `site_names`: %+v", err) + if !features.FourPointOhBeta() { + if err := d.Set("site_names", flattenSiteNames(channelProps.Sites)); err != nil { + return fmt.Errorf("setting `site_names`: %+v", err) + } + } + + if err := d.Set("site", flattenSites(channelProps.Sites)); err != nil { + return fmt.Errorf("setting `site`: %+v", err) } } } @@ -166,15 +234,30 @@ func resourceBotChannelWebChatUpdate(d *pluginsdk.ResourceData, meta interface{} channel := botservice.BotChannel{ Properties: botservice.WebChatChannel{ - Properties: &botservice.WebChatChannelProperties{ - Sites: expandSiteNames(d.Get("site_names").(*pluginsdk.Set).List()), - }, + Properties: &botservice.WebChatChannelProperties{}, ChannelName: botservice.ChannelNameBasicChannelChannelNameWebChatChannel, }, Location: utils.String(azure.NormalizeLocation(d.Get("location").(string))), Kind: botservice.KindBot, } + if !features.FourPointOhBeta() { + if d.HasChange("site_names") { + channel, _ := channel.Properties.AsWebChatChannel() + channel.Properties.Sites = expandSiteNames(d.Get("site_names").(*pluginsdk.Set).List()) + } + } + + if d.HasChange("site") { + channel, _ := channel.Properties.AsWebChatChannel() + channel.Properties.Sites = expandSites(d.Get("site").(*pluginsdk.Set).List()) + } + + if _, err := client.Update(ctx, id.ResourceGroup, id.BotServiceName, botservice.ChannelNameWebChatChannel, channel); err != nil { + return fmt.Errorf("updating %s: %+v", id, err) + } + + // Unable to add a new site with user_upload_enabled, endpoint_parameters_enabled, storage_enabled in the same operation, so we need to make two calls if _, err := client.Update(ctx, id.ResourceGroup, id.BotServiceName, botservice.ChannelNameWebChatChannel, channel); err != nil { return fmt.Errorf("updating %s: %+v", id, err) } @@ -192,6 +275,11 @@ func resourceBotChannelWebChatDelete(d *pluginsdk.ResourceData, meta interface{} return err } + existing, err := client.Get(ctx, id.ResourceGroup, id.BotServiceName, string(botservice.ChannelNameWebChatChannel)) + if err != nil { + return err + } + channel := botservice.BotChannel{ Properties: botservice.WebChatChannel{ Properties: &botservice.WebChatChannelProperties{ @@ -204,7 +292,7 @@ func resourceBotChannelWebChatDelete(d *pluginsdk.ResourceData, meta interface{} }, ChannelName: botservice.ChannelNameBasicChannelChannelNameWebChatChannel, }, - Location: utils.String(azure.NormalizeLocation(d.Get("location").(string))), + Location: utils.String(azure.NormalizeLocation(*existing.Location)), Kind: botservice.KindBot, } @@ -230,6 +318,28 @@ func expandSiteNames(input []interface{}) *[]botservice.WebChatSite { return &results } +func expandSites(input []interface{}) *[]botservice.WebChatSite { + results := make([]botservice.WebChatSite, 0) + + for _, item := range input { + site := item.(map[string]interface{}) + result := botservice.WebChatSite{ + IsEnabled: utils.Bool(true), + IsBlockUserUploadEnabled: utils.Bool(!site["user_upload_enabled"].(bool)), + IsEndpointParametersEnabled: utils.Bool(site["endpoint_parameters_enabled"].(bool)), + IsNoStorageEnabled: utils.Bool(!site["storage_enabled"].(bool)), + } + + if siteName := site["name"].(string); siteName != "" { + result.SiteName = utils.String(siteName) + } + + results = append(results, result) + } + + return &results +} + func flattenSiteNames(input *[]botservice.WebChatSite) []interface{} { results := make([]interface{}, 0) if input == nil { @@ -248,6 +358,42 @@ func flattenSiteNames(input *[]botservice.WebChatSite) []interface{} { return results } +func flattenSites(input *[]botservice.WebChatSite) []interface{} { + results := make([]interface{}, 0) + + for _, item := range *input { + result := make(map[string]interface{}) + + var name string + if v := item.SiteName; v != nil { + name = *v + } + result["name"] = name + + userUploadEnabled := true + if v := item.IsBlockUserUploadEnabled; v != nil { + userUploadEnabled = !*v + } + result["user_upload_enabled"] = userUploadEnabled + + var endpointParametersEnabled bool + if v := item.IsEndpointParametersEnabled; v != nil { + endpointParametersEnabled = *v + } + result["endpoint_parameters_enabled"] = endpointParametersEnabled + + storageEnabled := true + if v := item.IsNoStorageEnabled; v != nil { + storageEnabled = !*v + } + result["storage_enabled"] = storageEnabled + + results = append(results, result) + } + + return results +} + func includeDefaultWebChatSite(sites *[]botservice.WebChatSite) bool { includeDefaultSite := false for _, site := range *sites { diff --git a/internal/services/bot/bot_channel_web_chat_resource_test.go b/internal/services/bot/bot_channel_web_chat_resource_test.go index 137b7fc851983..b698ec5765b7a 100644 --- a/internal/services/bot/bot_channel_web_chat_resource_test.go +++ b/internal/services/bot/bot_channel_web_chat_resource_test.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/features" "github.com/hashicorp/terraform-provider-azurerm/internal/services/bot/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" @@ -68,9 +69,16 @@ func testAccBotChannelWebChat_update(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_bot_channel_web_chat", "test") r := BotChannelWebChatResource{} + var basicConfig string + if features.FourPointOhBeta() { + basicConfig = r.basic(data) + } else { + basicConfig = r.siteNames(data) + } + data.ResourceSequentialTest(t, r, []acceptance.TestStep{ { - Config: r.basic(data), + Config: basicConfig, Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), ), @@ -115,7 +123,10 @@ resource "azurerm_bot_channel_web_chat" "test" { bot_name = azurerm_bot_channels_registration.test.name location = azurerm_bot_channels_registration.test.location resource_group_name = azurerm_resource_group.test.name - site_names = ["TestSite"] + + site { + name = "TestSite" + } } `, BotChannelsRegistrationResource{}.basicConfig(data)) } @@ -128,7 +139,10 @@ resource "azurerm_bot_channel_web_chat" "import" { bot_name = azurerm_bot_channel_web_chat.test.bot_name location = azurerm_bot_channel_web_chat.test.location resource_group_name = azurerm_bot_channel_web_chat.test.resource_group_name - site_names = ["TestSite"] + + site { + name = "TestSite" + } } `, r.basic(data)) } @@ -141,7 +155,33 @@ resource "azurerm_bot_channel_web_chat" "test" { bot_name = azurerm_bot_channels_registration.test.name location = azurerm_bot_channels_registration.test.location resource_group_name = azurerm_resource_group.test.name - site_names = ["TestSite2", "TestSite3"] + + site { + name = "TestSite1" + user_upload_enabled = false + endpoint_parameters_enabled = true + storage_enabled = false + } + + site { + name = "TestSite2" + user_upload_enabled = true + endpoint_parameters_enabled = false + storage_enabled = true + } +} +`, BotChannelsRegistrationResource{}.basicConfig(data)) +} + +func (BotChannelWebChatResource) siteNames(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_bot_channel_web_chat" "test" { + bot_name = azurerm_bot_channels_registration.test.name + location = azurerm_bot_channels_registration.test.location + resource_group_name = azurerm_resource_group.test.name + site_names = ["TestSite"] } `, BotChannelsRegistrationResource{}.basicConfig(data)) } diff --git a/internal/services/bot/bot_service_azure_bot_resource_test.go b/internal/services/bot/bot_service_azure_bot_resource_test.go index 23d66b22dd00b..3a03ed63003ba 100644 --- a/internal/services/bot/bot_service_azure_bot_resource_test.go +++ b/internal/services/bot/bot_service_azure_bot_resource_test.go @@ -183,11 +183,12 @@ resource "azurerm_application_insights_api_key" "test" { } resource "azurerm_bot_service_azure_bot" "test" { - name = "acctestdf%[1]d" - resource_group_name = azurerm_resource_group.test.name - location = "global" - microsoft_app_id = data.azurerm_client_config.current.client_id - sku = "F0" + name = "acctestdf%[1]d" + resource_group_name = azurerm_resource_group.test.name + location = "global" + microsoft_app_id = data.azurerm_client_config.current.client_id + sku = "F0" + local_authentication_enabled = false endpoint = "https://example.com" developer_app_insights_api_key = azurerm_application_insights_api_key.test.api_key diff --git a/internal/services/bot/bot_service_resource_base.go b/internal/services/bot/bot_service_resource_base.go index 9f24a669716e2..b1bc2fdc890f7 100644 --- a/internal/services/bot/bot_service_resource_base.go +++ b/internal/services/bot/bot_service_resource_base.go @@ -107,6 +107,12 @@ func (br botBaseResource) arguments(fields map[string]*pluginsdk.Schema) map[str }, false), }, + "local_authentication_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: true, + }, + "luis_app_ids": { Type: pluginsdk.TypeList, Optional: true, @@ -180,6 +186,7 @@ func (br botBaseResource) createFunc(resourceName, botKind string) sdk.ResourceF DeveloperAppInsightKey: utils.String(metadata.ResourceData.Get("developer_app_insights_key").(string)), DeveloperAppInsightsAPIKey: utils.String(metadata.ResourceData.Get("developer_app_insights_api_key").(string)), DeveloperAppInsightsApplicationID: utils.String(metadata.ResourceData.Get("developer_app_insights_application_id").(string)), + DisableLocalAuth: utils.Bool(!metadata.ResourceData.Get("local_authentication_enabled").(bool)), LuisAppIds: utils.ExpandStringSlice(metadata.ResourceData.Get("luis_app_ids").([]interface{})), LuisKey: utils.String(metadata.ResourceData.Get("luis_key").(string)), IsStreamingSupported: utils.Bool(metadata.ResourceData.Get("streaming_endpoint_enabled").(bool)), @@ -295,6 +302,12 @@ func (br botBaseResource) readFunc() sdk.ResourceFunc { } metadata.ResourceData.Set("microsoft_app_msi_id", msaAppMSIId) + localAuthEnabled := true + if v := props.DisableLocalAuth; v != nil { + localAuthEnabled = !*v + } + metadata.ResourceData.Set("local_authentication_enabled", localAuthEnabled) + var luisAppIds []string if v := props.LuisAppIds; v != nil { luisAppIds = *v @@ -367,6 +380,10 @@ func (br botBaseResource) updateFunc() sdk.ResourceFunc { existing.Properties.DeveloperAppInsightsApplicationID = utils.String(metadata.ResourceData.Get("developer_app_insights_application_id").(string)) } + if metadata.ResourceData.HasChange("local_authentication_enabled") { + existing.Properties.DisableLocalAuth = utils.Bool(!metadata.ResourceData.Get("local_authentication_enabled").(bool)) + } + if metadata.ResourceData.HasChange("luis_app_ids") { existing.Properties.LuisAppIds = utils.ExpandStringSlice(metadata.ResourceData.Get("luis_app_ids").([]interface{})) } diff --git a/internal/services/compute/client/client.go b/internal/services/compute/client/client.go index d0e33a8ea1ac7..796ae11379d65 100644 --- a/internal/services/compute/client/client.go +++ b/internal/services/compute/client/client.go @@ -9,6 +9,7 @@ import ( "log" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2021-07-01/skus" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2021-11-01/availabilitysets" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2021-11-01/dedicatedhostgroups" @@ -21,15 +22,14 @@ import ( "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/proximityplacementgroups" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/diskaccesses" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/diskencryptionsets" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/snapshots" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/galleries" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/galleryapplications" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/galleryapplicationversions" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/gallerysharingupdate" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/marketplaceordering/2015-06-01/agreements" "github.com/hashicorp/terraform-provider-azurerm/internal/common" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/utils" "github.com/tombuildsstuff/kermit/sdk/compute/2023-03-01/compute" ) @@ -251,8 +251,8 @@ func NewClient(o *common.ClientOptions) (*Client, error) { }, nil } -func (c *Client) CancelRollingUpgradesBeforeDeletion(ctx context.Context, id parse.VirtualMachineScaleSetId) error { - resp, err := c.VMScaleSetRollingUpgradesClient.GetLatest(ctx, id.ResourceGroup, id.Name) +func (c *Client) CancelRollingUpgradesBeforeDeletion(ctx context.Context, id commonids.VirtualMachineScaleSetId) error { + resp, err := c.VMScaleSetRollingUpgradesClient.GetLatest(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName) if err != nil { // No rolling upgrades are running so skipping attempt to cancel them before deletion if utils.ResponseWasNotFound(resp.Response) { @@ -271,7 +271,7 @@ func (c *Client) CancelRollingUpgradesBeforeDeletion(ctx context.Context, id par return nil } - future, err := c.VMScaleSetRollingUpgradesClient.Cancel(ctx, id.ResourceGroup, id.Name) + future, err := c.VMScaleSetRollingUpgradesClient.Cancel(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName) if err != nil { // If there is no rolling upgrade the API will throw a 409/No rolling upgrade to cancel // we don't error out in this case diff --git a/internal/services/compute/disk_encryption_set.go b/internal/services/compute/disk_encryption_set.go index 4ae2dbf3385a7..c0f4c94c4e821 100644 --- a/internal/services/compute/disk_encryption_set.go +++ b/internal/services/compute/disk_encryption_set.go @@ -8,7 +8,7 @@ import ( "fmt" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/diskencryptionsets" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" ) // retrieveDiskEncryptionSetEncryptionType returns encryption type of the disk encryption set diff --git a/internal/services/compute/disk_sas_token_resource.go b/internal/services/compute/disk_sas_token_resource.go index 089a32b0d3fe5..2430a0950679c 100644 --- a/internal/services/compute/disk_sas_token_resource.go +++ b/internal/services/compute/disk_sas_token_resource.go @@ -8,7 +8,7 @@ import ( "log" "time" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" diff --git a/internal/services/compute/disk_sas_token_resource_test.go b/internal/services/compute/disk_sas_token_resource_test.go index 88eaebb583883..2c393e009bc02 100644 --- a/internal/services/compute/disk_sas_token_resource_test.go +++ b/internal/services/compute/disk_sas_token_resource_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" diff --git a/internal/services/compute/encryption_settings.go b/internal/services/compute/encryption_settings.go index d4701e154716c..1bf0254552f14 100644 --- a/internal/services/compute/encryption_settings.go +++ b/internal/services/compute/encryption_settings.go @@ -4,8 +4,8 @@ package compute import ( - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/snapshots" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/internal/features" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" diff --git a/internal/services/compute/image_resource.go b/internal/services/compute/image_resource.go index 054c343318349..6762dc0363cfd 100644 --- a/internal/services/compute/image_resource.go +++ b/internal/services/compute/image_resource.go @@ -9,15 +9,15 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/images" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/suppress" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -75,7 +75,7 @@ func resourceImage() *pluginsdk.Resource { "source_virtual_machine_id": { Type: pluginsdk.TypeString, Optional: true, - ValidateFunc: computeValidate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, "os_disk": { diff --git a/internal/services/compute/image_resource_test.go b/internal/services/compute/image_resource_test.go index 748e59c779df1..7ae8f5a511156 100644 --- a/internal/services/compute/image_resource_test.go +++ b/internal/services/compute/image_resource_test.go @@ -12,13 +12,13 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2021-11-01/virtualmachines" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/images" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/ssh" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" networkParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" @@ -332,13 +332,13 @@ func (ImageResource) virtualMachineExists(ctx context.Context, client *clients.C } func (ImageResource) virtualMachineScaleSetExists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) error { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - resp, err := client.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, "") + resp, err := client.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, "") if err != nil { if utils.ResponseWasNotFound(resp.Response) { return fmt.Errorf("%s does not exist", *id) diff --git a/internal/services/compute/linux_virtual_machine_resource.go b/internal/services/compute/linux_virtual_machine_resource.go index 72cd33b9e643b..685f0629efcb1 100644 --- a/internal/services/compute/linux_virtual_machine_resource.go +++ b/internal/services/compute/linux_virtual_machine_resource.go @@ -11,6 +11,7 @@ import ( "time" "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2021-11-01/availabilitysets" @@ -19,13 +20,12 @@ import ( "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/capacityreservationgroups" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/images" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/proximityplacementgroups" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" azValidate "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/locks" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" networkValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" @@ -45,7 +45,7 @@ func resourceLinuxVirtualMachine() *pluginsdk.Resource { Update: resourceLinuxVirtualMachineUpdate, Delete: resourceLinuxVirtualMachineDelete, Importer: pluginsdk.ImporterValidatingResourceIdThen(func(id string) error { - _, err := parse.VirtualMachineID(id) + _, err := commonids.ParseVirtualMachineID(id) return err }, importVirtualMachine(compute.OperatingSystemTypesLinux, "azurerm_linux_virtual_machine")), @@ -337,7 +337,7 @@ func resourceLinuxVirtualMachine() *pluginsdk.Resource { ConflictsWith: []string{ "availability_set_id", }, - ValidateFunc: computeValidate.VirtualMachineScaleSetID, + ValidateFunc: commonids.ValidateVirtualMachineScaleSetID, }, "vtpm_enabled": { @@ -404,12 +404,12 @@ func resourceLinuxVirtualMachineCreate(d *pluginsdk.ResourceData, meta interface ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() - id := parse.NewVirtualMachineID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + id := commonids.NewVirtualMachineID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) - locks.ByName(id.Name, VirtualMachineResourceName) - defer locks.UnlockByName(id.Name, VirtualMachineResourceName) + locks.ByName(id.VirtualMachineName, VirtualMachineResourceName) + defer locks.UnlockByName(id.VirtualMachineName, VirtualMachineResourceName) - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { if !utils.ResponseWasNotFound(resp.Response) { return fmt.Errorf("checking for existing %s: %+v", id, err) @@ -437,7 +437,7 @@ func resourceLinuxVirtualMachineCreate(d *pluginsdk.ResourceData, meta interface if len(errs) > 0 { return fmt.Errorf("unable to assume default computer name %s Please adjust the %q, or specify an explicit %q", errs[0], "name", "computer_name") } - computerName = id.Name + computerName = id.VirtualMachineName } disablePasswordAuthentication := d.Get("disable_password_authentication").(bool) location := azure.NormalizeLocation(d.Get("location").(string)) @@ -474,7 +474,7 @@ func resourceLinuxVirtualMachineCreate(d *pluginsdk.ResourceData, meta interface sshKeys := ExpandSSHKeys(sshKeysRaw) params := compute.VirtualMachine{ - Name: utils.String(id.Name), + Name: utils.String(id.VirtualMachineName), ExtendedLocation: expandEdgeZone(d.Get("edge_zone").(string)), Location: utils.String(location), Identity: identity, @@ -731,7 +731,7 @@ func resourceLinuxVirtualMachineCreate(d *pluginsdk.ResourceData, meta interface params.OsProfile.AdminPassword = utils.String(adminPassword) } - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, params) + future, err := client.CreateOrUpdate(ctx, id.ResourceGroupName, id.VirtualMachineName, params) if err != nil { return fmt.Errorf("creating Linux %s: %+v", id, err) } @@ -752,24 +752,24 @@ func resourceLinuxVirtualMachineRead(d *pluginsdk.ResourceData, meta interface{} ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineID(d.Id()) + id, err := commonids.ParseVirtualMachineID(d.Id()) if err != nil { return err } - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.InstanceViewTypesUserData) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, compute.InstanceViewTypesUserData) if err != nil { if utils.ResponseWasNotFound(resp.Response) { - log.Printf("[DEBUG] Linux Virtual Machine %q was not found in Resource Group %q - removing from state!", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Linux %s was not found - removing from state!", id) d.SetId("") return nil } - return fmt.Errorf("retrieving Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Linux %s: %+v", id, err) } - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) + d.Set("name", id.VirtualMachineName) + d.Set("resource_group_name", id.ResourceGroupName) d.Set("location", location.NormalizeNilable(resp.Location)) d.Set("edge_zone", flattenEdgeZone(resp.ExtendedLocation)) @@ -786,7 +786,7 @@ func resourceLinuxVirtualMachineRead(d *pluginsdk.ResourceData, meta interface{} } if resp.VirtualMachineProperties == nil { - return fmt.Errorf("retrieving Linux Virtual Machine %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Linux %s: `properties` was nil", id) } props := *resp.VirtualMachineProperties @@ -1006,24 +1006,24 @@ func resourceLinuxVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interface ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineID(d.Id()) + id, err := commonids.ParseVirtualMachineID(d.Id()) if err != nil { return err } - locks.ByName(id.Name, VirtualMachineResourceName) - defer locks.UnlockByName(id.Name, VirtualMachineResourceName) + locks.ByName(id.VirtualMachineName, VirtualMachineResourceName) + defer locks.UnlockByName(id.VirtualMachineName, VirtualMachineResourceName) - log.Printf("[DEBUG] Retrieving Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.InstanceViewTypesUserData) + log.Printf("[DEBUG] Retrieving Linux %s", id) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, compute.InstanceViewTypesUserData) if err != nil { - return fmt.Errorf("retrieving Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Retrieving InstanceView for Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - instanceView, err := client.InstanceView(ctx, id.ResourceGroup, id.Name) + log.Printf("[DEBUG] Retrieving InstanceView for Linux %s.", id) + instanceView, err := client.InstanceView(ctx, id.ResourceGroupName, id.VirtualMachineName) if err != nil { - return fmt.Errorf("retrieving InstanceView for Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving InstanceView for Linux %s: %+v", id, err) } shouldTurnBackOn := virtualMachineShouldBeStarted(instanceView) @@ -1224,9 +1224,9 @@ func resourceLinuxVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interface // Azure will auto-reboot this for us, providing this machine will fit on this host // otherwise we need to shut down the VM to move it to another host to be able to use this size availableOnThisHost := false - sizes, err := client.ListAvailableSizes(ctx, id.ResourceGroup, id.Name) + sizes, err := client.ListAvailableSizes(ctx, id.ResourceGroupName, id.VirtualMachineName) if err != nil { - return fmt.Errorf("retrieving available sizes for Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving available sizes for Linux %s: %+v", id, err) } if sizes.Value != nil { @@ -1448,37 +1448,37 @@ func resourceLinuxVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interface } if shouldShutDown { - log.Printf("[DEBUG] Shutting Down Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Shutting Down Linux %s", id) forceShutdown := false - future, err := client.PowerOff(ctx, id.ResourceGroup, id.Name, utils.Bool(forceShutdown)) + future, err := client.PowerOff(ctx, id.ResourceGroupName, id.VirtualMachineName, utils.Bool(forceShutdown)) if err != nil { - return fmt.Errorf("sending Power Off to Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("sending Power Off to Linux %s: %+v", id, err) } if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for Power Off of Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for Power Off of Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Shut Down Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Shut Down Linux %s.", id) } if shouldDeallocate { if !hasEphemeralOSDisk { - log.Printf("[DEBUG] Deallocating Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deallocating Linux %s", id) // Upgrade to 2021-07-01 added a hibernate parameter to this call defaulting to false - future, err := client.Deallocate(ctx, id.ResourceGroup, id.Name, utils.Bool(false)) + future, err := client.Deallocate(ctx, id.ResourceGroupName, id.VirtualMachineName, utils.Bool(false)) if err != nil { - return fmt.Errorf("deallocating Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("deallocating Linux %s: %+v", id, err) } if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for Deallocation of Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for Deallocation of Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Deallocated Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deallocated Linux %s", id) } else { // Code="OperationNotAllowed" Message="Operation 'deallocate' is not supported for VMs or VM Scale Set instances using an ephemeral OS disk." - log.Printf("[DEBUG] Skipping deallocation for Linux Virtual Machine %q (Resource Group %q) since cannot deallocate a Virtual Machine with an Ephemeral OS Disk", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Skipping deallocation for Linux %s since cannot deallocate a Virtual Machine with an Ephemeral OS Disk", id) } } @@ -1488,11 +1488,11 @@ func resourceLinuxVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interface if d.HasChange("os_disk.0.disk_size_gb") { diskName := d.Get("os_disk.0.name").(string) newSize := d.Get("os_disk.0.disk_size_gb").(int) - log.Printf("[DEBUG] Resizing OS Disk %q for Linux Virtual Machine %q (Resource Group %q) to %dGB..", diskName, id.Name, id.ResourceGroup, newSize) + log.Printf("[DEBUG] Resizing OS Disk %q for Linux %s to %dGB..", diskName, id, newSize) disksClient := meta.(*clients.Client).Compute.DisksClient subscriptionId := meta.(*clients.Client).Account.SubscriptionId - id := disks.NewDiskID(subscriptionId, id.ResourceGroup, diskName) + id := disks.NewDiskID(subscriptionId, id.ResourceGroupName, diskName) update := disks.DiskUpdate{ Properties: &disks.DiskUpdateProperties{ @@ -1511,7 +1511,7 @@ func resourceLinuxVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interface if d.HasChange("os_disk.0.disk_encryption_set_id") { if diskEncryptionSetId := d.Get("os_disk.0.disk_encryption_set_id").(string); diskEncryptionSetId != "" { diskName := d.Get("os_disk.0.name").(string) - log.Printf("[DEBUG] Updating encryption settings of OS Disk %q for Linux Virtual Machine %q (Resource Group %q) to %q..", diskName, id.Name, id.ResourceGroup, diskEncryptionSetId) + log.Printf("[DEBUG] Updating encryption settings of OS Disk %q for Linux %s to %q..", diskName, id, diskEncryptionSetId) encryptionType, err := retrieveDiskEncryptionSetEncryptionType(ctx, meta.(*clients.Client).Compute.DiskEncryptionSetsClient, diskEncryptionSetId) if err != nil { @@ -1520,7 +1520,7 @@ func resourceLinuxVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interface disksClient := meta.(*clients.Client).Compute.DisksClient subscriptionId := meta.(*clients.Client).Account.SubscriptionId - id := disks.NewDiskID(subscriptionId, id.ResourceGroup, diskName) + id := disks.NewDiskID(subscriptionId, id.ResourceGroupName, diskName) update := disks.DiskUpdate{ Properties: &disks.DiskUpdateProperties{ @@ -1543,32 +1543,32 @@ func resourceLinuxVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interface } if shouldUpdate { - log.Printf("[DEBUG] Updating Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - future, err := client.Update(ctx, id.ResourceGroup, id.Name, update) + log.Printf("[DEBUG] Updating Linux %s", id) + future, err := client.Update(ctx, id.ResourceGroupName, id.VirtualMachineName, update) if err != nil { - return fmt.Errorf("updating Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("updating Linux %s: %+v", id, err) } if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for update of Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for update of Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Updated Linux Virtual Machine %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Updated Linux %s", id) } // if we've shut it down and it was turned off, let's boot it back up if shouldTurnBackOn && (shouldShutDown || shouldDeallocate) { - log.Printf("[DEBUG] Starting Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - future, err := client.Start(ctx, id.ResourceGroup, id.Name) + log.Printf("[DEBUG] Starting Linux %s", id) + future, err := client.Start(ctx, id.ResourceGroupName, id.VirtualMachineName) if err != nil { - return fmt.Errorf("starting Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("starting Linux %s: %+v", id, err) } if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for start of Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for start of Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Started Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Started Linux %s", id) } return resourceLinuxVirtualMachineRead(d, meta) @@ -1579,47 +1579,47 @@ func resourceLinuxVirtualMachineDelete(d *pluginsdk.ResourceData, meta interface ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineID(d.Id()) + id, err := commonids.ParseVirtualMachineID(d.Id()) if err != nil { return err } - locks.ByName(id.Name, VirtualMachineResourceName) - defer locks.UnlockByName(id.Name, VirtualMachineResourceName) + locks.ByName(id.VirtualMachineName, VirtualMachineResourceName) + defer locks.UnlockByName(id.VirtualMachineName, VirtualMachineResourceName) - log.Printf("[DEBUG] Retrieving Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + log.Printf("[DEBUG] Retrieving Linux %s", id) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { if utils.ResponseWasNotFound(existing.Response) { return nil } - return fmt.Errorf("retrieving Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Linux %s: %+v", id, err) } if !meta.(*clients.Client).Features.VirtualMachine.SkipShutdownAndForceDelete { // If the VM was in a Failed state we can skip powering off, since that'll fail if strings.EqualFold(*existing.ProvisioningState, "failed") { - log.Printf("[DEBUG] Powering Off Linux Virtual Machine was skipped because the VM was in %q state %q (Resource Group %q).", *existing.ProvisioningState, id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Powering Off Linux Virtual Machine was skipped because the VM was in %q state %s", *existing.ProvisioningState, id) } else { // ISSUE: 4920 // shutting down the Virtual Machine prior to removing it means users are no longer charged for some Azure resources // thus this can be a large cost-saving when deleting larger instances // https://docs.microsoft.com/en-us/azure/virtual-machines/states-lifecycle - log.Printf("[DEBUG] Powering Off Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Powering Off Linux %s", id) skipShutdown := !meta.(*clients.Client).Features.VirtualMachine.GracefulShutdown - powerOffFuture, err := client.PowerOff(ctx, id.ResourceGroup, id.Name, utils.Bool(skipShutdown)) + powerOffFuture, err := client.PowerOff(ctx, id.ResourceGroupName, id.VirtualMachineName, utils.Bool(skipShutdown)) if err != nil { - return fmt.Errorf("powering off Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("powering off Linux %s: %+v", id, err) } if err := powerOffFuture.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for power off of Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for power off of Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Powered Off Linux Virtual Machine %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Powered Off Linux %s", id) } } - log.Printf("[DEBUG] Deleting Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleting Linux %s", id) // Force Delete is in an opt-in Preview and can only be specified (true/false) if the feature is enabled // as such we default this to `nil` which matches the previous behaviour (where this isn't sent) and @@ -1628,18 +1628,18 @@ func resourceLinuxVirtualMachineDelete(d *pluginsdk.ResourceData, meta interface if meta.(*clients.Client).Features.VirtualMachine.SkipShutdownAndForceDelete { forceDeletion = utils.Bool(true) } - deleteFuture, err := client.Delete(ctx, id.ResourceGroup, id.Name, forceDeletion) + deleteFuture, err := client.Delete(ctx, id.ResourceGroupName, id.VirtualMachineName, forceDeletion) if err != nil { - return fmt.Errorf("deleting Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("deleting Linux %s: %+v", id, err) } if err := deleteFuture.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for deletion of Linux Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for deletion of Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Deleted Linux Virtual Machine %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleted Linux %s", id) deleteOSDisk := meta.(*clients.Client).Features.VirtualMachine.DeleteOSDiskOnDeletion if deleteOSDisk { - log.Printf("[DEBUG] Deleting OS Disk from Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleting OS Disk from Linux %s", id) disksClient := meta.(*clients.Client).Compute.DisksClient managedDiskId := "" if props := existing.VirtualMachineProperties; props != nil && props.StorageProfile != nil && props.StorageProfile.OsDisk != nil { @@ -1655,29 +1655,29 @@ func resourceLinuxVirtualMachineDelete(d *pluginsdk.ResourceData, meta interface } if err := disksClient.DeleteThenPoll(ctx, *diskId); err != nil { - return fmt.Errorf("deleting OS Disk %q (Resource Group %q) for Linux Virtual Machine %q (Resource Group %q): %+v", diskId.DiskName, diskId.ResourceGroupName, id.Name, id.ResourceGroup, err) + return fmt.Errorf("deleting %s for Linux %s: %+v", diskId, id, err) } - log.Printf("[DEBUG] Deleted OS Disk from Linux Virtual Machine %q (Resource Group %q).", diskId.DiskName, diskId.ResourceGroupName) + log.Printf("[DEBUG] Deleted %s for Linux %s", diskId, id) } else { - log.Printf("[DEBUG] Skipping Deleting OS Disk from Linux Virtual Machine %q (Resource Group %q) - cannot determine OS Disk ID.", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Skipping Deleting OS Disk from Linux %s - cannot determine OS Disk ID.", id) } } else { - log.Printf("[DEBUG] Skipping Deleting OS Disk from Linux Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Skipping Deleting OS Disk from Linux %s", id) } // Need to add a get and a state wait to avoid bug in network API where the attached disk(s) are not actually deleted // Service team indicated that we need to do a get after VM delete call returns to verify that the VM and all attached // disks have actually been deleted. - log.Printf("[INFO] verifying Linux Virtual Machine %q has been deleted", id.Name) - virtualMachine, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + log.Printf("[INFO] verifying Linux %s has been deleted", id) + virtualMachine, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil && !utils.ResponseWasNotFound(virtualMachine.Response) { - return fmt.Errorf("verifying Linux Virtual Machine %q (Resource Group %q) has been deleted: %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("verifying Linux %s has been deleted: %+v", id, err) } if !utils.ResponseWasNotFound(virtualMachine.Response) { - log.Printf("[INFO] Linux Virtual Machine still exists, waiting on Linux Virtual Machine %q to be deleted", id.Name) + log.Printf("[INFO] %s still exists, waiting on vm to be deleted", id) deleteWait := &pluginsdk.StateChangeConf{ Pending: []string{"200"}, @@ -1685,20 +1685,20 @@ func resourceLinuxVirtualMachineDelete(d *pluginsdk.ResourceData, meta interface MinTimeout: 30 * time.Second, Timeout: d.Timeout(pluginsdk.TimeoutDelete), Refresh: func() (interface{}, string, error) { - log.Printf("[INFO] checking on state of Linux Virtual Machine %q", id.Name) - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + log.Printf("[INFO] checking on state of Linux %s", id) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { if utils.ResponseWasNotFound(resp.Response) { return resp, strconv.Itoa(resp.StatusCode), nil } - return nil, "nil", fmt.Errorf("polling for the status of Linux Virtual Machine %q (Resource Group %q): %v", id.Name, id.ResourceGroup, err) + return nil, "nil", fmt.Errorf("polling for the status of Linux %s: %v", id, err) } return resp, strconv.Itoa(resp.StatusCode), nil }, } if _, err := deleteWait.WaitForStateContext(ctx); err != nil { - return fmt.Errorf("waiting for the deletion of Linux Virtual Machine %q (Resource Group %q): %v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for the deletion of Linux %s: %v", id, err) } } diff --git a/internal/services/compute/linux_virtual_machine_scale_set_resource.go b/internal/services/compute/linux_virtual_machine_scale_set_resource.go index bd69b717bbd7a..815d28fcaf00c 100644 --- a/internal/services/compute/linux_virtual_machine_scale_set_resource.go +++ b/internal/services/compute/linux_virtual_machine_scale_set_resource.go @@ -8,6 +8,7 @@ import ( "log" "time" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/zones" @@ -20,7 +21,6 @@ import ( azValidate "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/features" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/base64" @@ -40,7 +40,7 @@ func resourceLinuxVirtualMachineScaleSet() *pluginsdk.Resource { Delete: resourceLinuxVirtualMachineScaleSetDelete, Importer: pluginsdk.ImporterValidatingResourceIdThen(func(id string) error { - _, err := parse.VirtualMachineScaleSetID(id) + _, err := commonids.ParseVirtualMachineScaleSetID(id) return err }, importVirtualMachineScaleSet(compute.OperatingSystemTypesLinux, "azurerm_linux_virtual_machine_scale_set")), @@ -64,10 +64,10 @@ func resourceLinuxVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, meta i ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() - id := parse.NewVirtualMachineScaleSetID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + id := commonids.NewVirtualMachineScaleSetID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) // Upgrading to the 2021-07-01 exposed a new expand parameter to the GET method - exists, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + exists, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if !utils.ResponseWasNotFound(exists.Response) { return fmt.Errorf("checking for existing Linux %s: %+v", id, err) @@ -159,7 +159,7 @@ func resourceLinuxVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, meta i if len(errs) > 0 { return fmt.Errorf("unable to assume default computer name prefix %s. Please adjust the %q, or specify an explicit %q", errs[0], "name", "computer_name_prefix") } - computerNamePrefix = id.Name + computerNamePrefix = id.VirtualMachineScaleSetName } disablePasswordAuthentication := d.Get("disable_password_authentication").(bool) @@ -445,7 +445,7 @@ func resourceLinuxVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, meta i } log.Printf("[DEBUG] Creating Linux %s", id) - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, props) + future, err := client.CreateOrUpdate(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, props) if err != nil { return fmt.Errorf("creating Linux %s: %+v", id, err) } @@ -466,7 +466,7 @@ func resourceLinuxVirtualMachineScaleSetUpdate(d *pluginsdk.ResourceData, meta i ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } @@ -475,18 +475,18 @@ func resourceLinuxVirtualMachineScaleSetUpdate(d *pluginsdk.ResourceData, meta i // retrieve // Upgrading to the 2021-07-01 exposed a new expand parameter to the GET method - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { - return fmt.Errorf("retrieving Linux Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Linux %s: %+v", id, err) } if existing.VirtualMachineScaleSetProperties == nil { - return fmt.Errorf("retrieving Linux Virtual Machine Scale Set %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Linux %s: `properties` was nil", id) } if existing.VirtualMachineScaleSetProperties.VirtualMachineProfile == nil { - return fmt.Errorf("retrieving Linux Virtual Machine Scale Set %q (Resource Group %q): `properties.virtualMachineProfile` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Linux %s: `properties.virtualMachineProfile` was nil", id) } if existing.VirtualMachineScaleSetProperties.VirtualMachineProfile.StorageProfile == nil { - return fmt.Errorf("retrieving Linux Virtual Machine Scale Set %q (Resource Group %q): `properties.virtualMachineProfile,storageProfile` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Linux %s: `properties.virtualMachineProfile,storageProfile` was nil", id) } updateProps := compute.VirtualMachineScaleSetUpdateProperties{ @@ -808,25 +808,25 @@ func resourceLinuxVirtualMachineScaleSetRead(d *pluginsdk.ResourceData, meta int ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter to the GET method - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if utils.ResponseWasNotFound(resp.Response) { - log.Printf("[DEBUG] Linux Virtual Machine Scale Set %q was not found in Resource Group %q - removing from state!", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Linux %s - removing from state!", id) d.SetId("") return nil } - return fmt.Errorf("retrieving Linux Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Linux %s: %+v", id, err) } - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) + d.Set("name", id.VirtualMachineScaleSetName) + d.Set("resource_group_name", id.ResourceGroupName) d.Set("location", location.NormalizeNilable(resp.Location)) d.Set("edge_zone", flattenEdgeZone(resp.ExtendedLocation)) d.Set("zones", zones.FlattenUntyped(resp.Zones)) @@ -855,7 +855,7 @@ func resourceLinuxVirtualMachineScaleSetRead(d *pluginsdk.ResourceData, meta int } if resp.VirtualMachineScaleSetProperties == nil { - return fmt.Errorf("retrieving Linux Virtual Machine Scale Set %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Linux %s: `properties` was nil", id) } props := *resp.VirtualMachineScaleSetProperties @@ -1075,19 +1075,19 @@ func resourceLinuxVirtualMachineScaleSetDelete(d *pluginsdk.ResourceData, meta i ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter to the GET method - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if utils.ResponseWasNotFound(resp.Response) { return nil } - return fmt.Errorf("retrieving Linux Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Linux %s: %+v", id, err) } // If rolling upgrades are configured and running we need to cancel them before trying to delete the VMSS @@ -1109,36 +1109,36 @@ func resourceLinuxVirtualMachineScaleSetDelete(d *pluginsdk.ResourceData, meta i update := compute.VirtualMachineScaleSetUpdate{ Sku: resp.Sku, } - future, err := client.Update(ctx, id.ResourceGroup, id.Name, update) + future, err := client.Update(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, update) if err != nil { - return fmt.Errorf("updating number of instances in Linux Virtual Machine Scale Set %q (Resource Group %q) to scale to 0: %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("updating number of instances in %s to scale to 0: %+v", id, err) } log.Printf("[DEBUG] Waiting for scaling of instances to 0 prior to deletion - this helps avoids networking issues within Azure") err = future.WaitForCompletionRef(ctx, client.Client) if err != nil { - return fmt.Errorf("waiting for number of instances in Linux Virtual Machine Scale Set %q (Resource Group %q) to scale to 0: %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for number of instances in Linux %s to scale to 0: %+v", id, err) } log.Printf("[DEBUG] Scaled instances to 0 prior to deletion - this helps avoids networking issues within Azure") } else { log.Printf("[DEBUG] Unable to scale instances to `0` since the `sku` block is nil - trying to delete anyway") } - log.Printf("[DEBUG] Deleting Linux Virtual Machine Scale Set %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleting Linux %s", id) // @ArcturusZhang (mimicking from linux_virtual_machine_pluginsdk.go): sending `nil` here omits this value from being sent // which matches the previous behaviour - we're only splitting this out so it's clear why // TODO: support force deletion once it's out of Preview, if applicable var forceDeletion *bool = nil - future, err := client.Delete(ctx, id.ResourceGroup, id.Name, forceDeletion) + future, err := client.Delete(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, forceDeletion) if err != nil { - return fmt.Errorf("deleting Linux Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("deleting Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Waiting for deletion of Linux Virtual Machine Scale Set %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Waiting for deletion of Linux %s", id) if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for deletion of Linux Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for deletion of Linux %s: %+v", id, err) } - log.Printf("[DEBUG] Deleted Linux Virtual Machine Scale Set %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleted Linux %s", id) return nil } diff --git a/internal/services/compute/linux_virtual_machine_scale_set_resource_other_test.go b/internal/services/compute/linux_virtual_machine_scale_set_resource_other_test.go index 5cd7216f487ab..867c46ace0c6e 100644 --- a/internal/services/compute/linux_virtual_machine_scale_set_resource_other_test.go +++ b/internal/services/compute/linux_virtual_machine_scale_set_resource_other_test.go @@ -10,11 +10,11 @@ import ( "testing" "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/tombuildsstuff/kermit/sdk/compute/2023-03-01/compute" ) @@ -803,12 +803,12 @@ func TestAccLinuxVirtualMachineScaleSet_otherCancelRollingUpgrades(t *testing.T) // and simulates the scenario where rolling upgrades are running when we try to delete a VMSS client := clients.Compute.VMScaleSetClient - id, err := parse.VirtualMachineScaleSetID(state.Attributes["id"]) + id, err := commonids.ParseVirtualMachineScaleSetID(state.Attributes["id"]) if err != nil { return err } - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { return fmt.Errorf("retrieving %s: %+v", *id, err) } @@ -834,7 +834,7 @@ func TestAccLinuxVirtualMachineScaleSet_otherCancelRollingUpgrades(t *testing.T) VirtualMachineScaleSetUpdateProperties: &updateProps, } - if _, err := client.Update(ctx, id.ResourceGroup, id.Name, update); err != nil { + if _, err := client.Update(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, update); err != nil { return fmt.Errorf("updating %s: %+v", *id, err) } diff --git a/internal/services/compute/linux_virtual_machine_scale_set_resource_test.go b/internal/services/compute/linux_virtual_machine_scale_set_resource_test.go index f6140866a1d53..30f455ce738ee 100644 --- a/internal/services/compute/linux_virtual_machine_scale_set_resource_test.go +++ b/internal/services/compute/linux_virtual_machine_scale_set_resource_test.go @@ -7,9 +7,9 @@ import ( "context" "fmt" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) @@ -17,14 +17,14 @@ import ( type LinuxVirtualMachineScaleSetResource struct{} func (r LinuxVirtualMachineScaleSetResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return nil, err } - resp, err := clients.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, "") + resp, err := clients.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, "") if err != nil { - return nil, fmt.Errorf("retrieving Compute Linux Virtual Machine Scale Set %q: %+v", id, err) + return nil, fmt.Errorf("retrieving Linux %s: %+v", id, err) } return utils.Bool(resp.ID != nil), nil diff --git a/internal/services/compute/managed_disk_data_source.go b/internal/services/compute/managed_disk_data_source.go index 3fc142b41a964..d36e8da82ced3 100644 --- a/internal/services/compute/managed_disk_data_source.go +++ b/internal/services/compute/managed_disk_data_source.go @@ -12,7 +12,7 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" "github.com/hashicorp/go-azure-helpers/resourcemanager/zones" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" diff --git a/internal/services/compute/managed_disk_resource.go b/internal/services/compute/managed_disk_resource.go index f5c2602fc544c..7c246c7e1f3f3 100644 --- a/internal/services/compute/managed_disk_resource.go +++ b/internal/services/compute/managed_disk_resource.go @@ -17,7 +17,7 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/diskaccesses" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" @@ -25,7 +25,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/internal/features" "github.com/hashicorp/terraform-provider-azurerm/internal/locks" "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/migration" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/suppress" @@ -113,6 +112,19 @@ func resourceManagedDisk() *pluginsdk.Resource { Computed: true, }, + "optimized_frequent_attach_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + + "performance_plus_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + ForceNew: true, + Default: false, + }, + "source_uri": { Type: pluginsdk.TypeString, Optional: true, @@ -342,9 +354,11 @@ func resourceManagedDiskCreate(d *pluginsdk.ResourceData, meta interface{}) erro props := &disks.DiskProperties{ CreationData: disks.CreationData{ - CreateOption: createOption, + CreateOption: createOption, + PerformancePlus: pointer.To(d.Get("performance_plus_enabled").(bool)), }, - OsType: &osType, + OptimizedForFrequentAttach: pointer.To(d.Get("optimized_frequent_attach_enabled").(bool)), + OsType: &osType, Encryption: &disks.Encryption{ Type: &encryptionTypePlatformKey, }, @@ -702,6 +716,10 @@ func resourceManagedDiskUpdate(d *pluginsdk.ResourceData, meta interface{}) erro return fmt.Errorf("[ERROR] disk_iops_read_write, disk_mbps_read_write, disk_iops_read_only and disk_mbps_read_only are only available for UltraSSD disks and PremiumV2 disks") } + if d.HasChange("optimized_frequent_attach_enabled") { + diskUpdate.Properties.OptimizedForFrequentAttach = pointer.To(d.Get("optimized_frequent_attach_enabled").(bool)) + } + if d.HasChange("os_type") { operatingSystemType := disks.OperatingSystemTypes(d.Get("os_type").(string)) diskUpdate.Properties.OsType = &operatingSystemType @@ -808,7 +826,7 @@ func resourceManagedDiskUpdate(d *pluginsdk.ResourceData, meta interface{}) erro // if we are attached to a VM we bring down the VM as necessary for the operations which are not allowed while it's online if shouldShutDown { - virtualMachine, err := parse.VirtualMachineID(*disk.Model.ManagedBy) + virtualMachine, err := commonids.ParseVirtualMachineID(*disk.Model.ManagedBy) if err != nil { return fmt.Errorf("parsing VMID %q for disk attachment: %+v", *disk.Model.ManagedBy, err) } @@ -818,14 +836,14 @@ func resourceManagedDiskUpdate(d *pluginsdk.ResourceData, meta interface{}) erro locks.ByName(name, VirtualMachineResourceName) defer locks.UnlockByName(name, VirtualMachineResourceName) - vm, err := vmClient.Get(ctx, virtualMachine.ResourceGroup, virtualMachine.Name, "") + vm, err := vmClient.Get(ctx, virtualMachine.ResourceGroupName, virtualMachine.VirtualMachineName, "") if err != nil { - return fmt.Errorf("retrieving Virtual Machine %q (Resource Group %q): %+v", virtualMachine.Name, virtualMachine.ResourceGroup, err) + return fmt.Errorf("retrieving %s: %+v", virtualMachine, err) } - instanceView, err := vmClient.InstanceView(ctx, virtualMachine.ResourceGroup, virtualMachine.Name) + instanceView, err := vmClient.InstanceView(ctx, virtualMachine.ResourceGroupName, virtualMachine.VirtualMachineName) if err != nil { - return fmt.Errorf("retrieving InstanceView for Virtual Machine %q (Resource Group %q): %+v", virtualMachine.Name, virtualMachine.ResourceGroup, err) + return fmt.Errorf("retrieving InstanceView for V%s: %+v", virtualMachine, err) } shouldTurnBackOn := virtualMachineShouldBeStarted(instanceView) @@ -883,7 +901,7 @@ func resourceManagedDiskUpdate(d *pluginsdk.ResourceData, meta interface{}) erro // fixes #1600 vm.Resources = nil - future, err := vmClient.CreateOrUpdate(ctx, virtualMachine.ResourceGroup, virtualMachine.Name, vm) + future, err := vmClient.CreateOrUpdate(ctx, virtualMachine.ResourceGroupName, virtualMachine.VirtualMachineName, vm) if err != nil { return fmt.Errorf("removing Disk %q from Virtual Machine %q : %+v", id.DiskName, virtualMachine.String(), err) } @@ -896,34 +914,34 @@ func resourceManagedDiskUpdate(d *pluginsdk.ResourceData, meta interface{}) erro // Shutdown if shouldShutDown { - log.Printf("[DEBUG] Shutting Down Virtual Machine %q (Resource Group %q)..", virtualMachine.Name, virtualMachine.ResourceGroup) + log.Printf("[DEBUG] Shutting Down %s", virtualMachine) forceShutdown := false - future, err := vmClient.PowerOff(ctx, virtualMachine.ResourceGroup, virtualMachine.Name, utils.Bool(forceShutdown)) + future, err := vmClient.PowerOff(ctx, virtualMachine.ResourceGroupName, virtualMachine.VirtualMachineName, utils.Bool(forceShutdown)) if err != nil { - return fmt.Errorf("sending Power Off to Virtual Machine %q (Resource Group %q): %+v", virtualMachine.Name, virtualMachine.ResourceGroup, err) + return fmt.Errorf("sending Power Off to %s: %+v", virtualMachine, err) } if err := future.WaitForCompletionRef(ctx, vmClient.Client); err != nil { - return fmt.Errorf("waiting for Power Off of Virtual Machine %q (Resource Group %q): %+v", virtualMachine.Name, virtualMachine.ResourceGroup, err) + return fmt.Errorf("waiting for Power Off of %s: %+v", virtualMachine, err) } - log.Printf("[DEBUG] Shut Down Virtual Machine %q (Resource Group %q)..", virtualMachine.Name, virtualMachine.ResourceGroup) + log.Printf("[DEBUG] Shut Down %s", virtualMachine) } // De-allocate if shouldDeallocate { - log.Printf("[DEBUG] Deallocating Virtual Machine %q (Resource Group %q)..", virtualMachine.Name, virtualMachine.ResourceGroup) + log.Printf("[DEBUG] Deallocating %s.", virtualMachine) // Upgrading to 2021-07-01 exposed a new hibernate paramater to the Deallocate method - deAllocFuture, err := vmClient.Deallocate(ctx, virtualMachine.ResourceGroup, virtualMachine.Name, utils.Bool(false)) + deAllocFuture, err := vmClient.Deallocate(ctx, virtualMachine.ResourceGroupName, virtualMachine.VirtualMachineName, utils.Bool(false)) if err != nil { - return fmt.Errorf("Deallocating to Virtual Machine %q (Resource Group %q): %+v", virtualMachine.Name, virtualMachine.ResourceGroup, err) + return fmt.Errorf("Deallocating to %s: %+v", virtualMachine, err) } if err := deAllocFuture.WaitForCompletionRef(ctx, vmClient.Client); err != nil { - return fmt.Errorf("waiting for Deallocation of Virtual Machine %q (Resource Group %q): %+v", virtualMachine.Name, virtualMachine.ResourceGroup, err) + return fmt.Errorf("waiting for Deallocation of %s: %+v", virtualMachine, err) } - log.Printf("[DEBUG] Deallocated Virtual Machine %q (Resource Group %q)..", virtualMachine.Name, virtualMachine.ResourceGroup) + log.Printf("[DEBUG] Deallocated %s", virtualMachine) } // Update Disk @@ -949,7 +967,7 @@ func resourceManagedDiskUpdate(d *pluginsdk.ResourceData, meta interface{}) erro // if there's too many disks we get a 409 back with: // `The maximum number of data disks allowed to be attached to a VM of this size is 1.` // which we're intentionally not wrapping, since the errors good. - future, err := vmClient.CreateOrUpdate(ctx, virtualMachine.ResourceGroup, virtualMachine.Name, vm) + future, err := vmClient.CreateOrUpdate(ctx, virtualMachine.ResourceGroupName, virtualMachine.VirtualMachineName, vm) if err != nil { return fmt.Errorf("updating Virtual Machine %q to reattach Disk %q: %+v", virtualMachine.String(), name, err) } @@ -960,17 +978,17 @@ func resourceManagedDiskUpdate(d *pluginsdk.ResourceData, meta interface{}) erro } if shouldTurnBackOn && (shouldShutDown || shouldDeallocate) { - log.Printf("[DEBUG] Starting Linux Virtual Machine %q (Resource Group %q)..", virtualMachine.Name, virtualMachine.ResourceGroup) - future, err := vmClient.Start(ctx, virtualMachine.ResourceGroup, virtualMachine.Name) + log.Printf("[DEBUG] Starting %s", virtualMachine) + future, err := vmClient.Start(ctx, virtualMachine.ResourceGroupName, virtualMachine.VirtualMachineName) if err != nil { - return fmt.Errorf("starting Virtual Machine %q (Resource Group %q): %+v", virtualMachine.Name, virtualMachine.ResourceGroup, err) + return fmt.Errorf("starting %s: %+v", virtualMachine, err) } if err := future.WaitForCompletionRef(ctx, vmClient.Client); err != nil { - return fmt.Errorf("waiting for start of Virtual Machine %q (Resource Group %q): %+v", virtualMachine.Name, virtualMachine.ResourceGroup, err) + return fmt.Errorf("waiting for start of %s %+v", virtualMachine, err) } - log.Printf("[DEBUG] Started Virtual Machine %q (Resource Group %q)..", virtualMachine.Name, virtualMachine.ResourceGroup) + log.Printf("[DEBUG] Started %s", virtualMachine) } } else { // otherwise, just update it err := client.UpdateThenPoll(ctx, *id, diskUpdate) @@ -1038,6 +1056,7 @@ func resourceManagedDiskRead(d *pluginsdk.ResourceData, meta interface{}) error d.Set("gallery_image_reference_id", galleryImageReferenceId) d.Set("image_reference_id", imageReferenceId) + d.Set("performance_plus_enabled", creationData.PerformancePlus) d.Set("source_resource_id", creationData.SourceResourceId) d.Set("source_uri", creationData.SourceUri) d.Set("storage_account_id", creationData.StorageAccountId) @@ -1048,6 +1067,7 @@ func resourceManagedDiskRead(d *pluginsdk.ResourceData, meta interface{}) error d.Set("disk_mbps_read_write", props.DiskMBpsReadWrite) d.Set("disk_iops_read_only", props.DiskIOPSReadOnly) d.Set("disk_mbps_read_only", props.DiskMBpsReadOnly) + d.Set("optimized_frequent_attach_enabled", props.OptimizedForFrequentAttach) d.Set("os_type", string(pointer.From(props.OsType))) d.Set("tier", props.Tier) d.Set("max_shares", props.MaxShares) diff --git a/internal/services/compute/managed_disk_resource_test.go b/internal/services/compute/managed_disk_resource_test.go index e45f15a2b1ced..fcebe0b14b74f 100644 --- a/internal/services/compute/managed_disk_resource_test.go +++ b/internal/services/compute/managed_disk_resource_test.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" @@ -170,6 +170,40 @@ func TestAccManagedDisk_update(t *testing.T) { }) } +func TestAccManagedDisk_optimizedFrequentAttach(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_managed_disk", "test") + r := ManagedDiskResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.optimizedFrequentAttach(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + { + Config: r.empty(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + }) +} + +func TestAccManagedDisk_performancePlus(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_managed_disk", "test") + r := ManagedDiskResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.performancePlus(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + }) +} + func TestAccManagedDisk_encryption(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_managed_disk", "test") r := ManagedDiskResource{} @@ -822,6 +856,61 @@ resource "azurerm_managed_disk" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomInteger) } +func (ManagedDiskResource) optimizedFrequentAttach(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_managed_disk" "test" { + name = "acctestd-%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + storage_account_type = "Standard_LRS" + create_option = "Empty" + disk_size_gb = "1" + optimized_frequent_attach_enabled = true + + tags = { + environment = "acctest" + cost-center = "ops" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger) +} + +func (ManagedDiskResource) performancePlus(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_managed_disk" "test" { + name = "acctestd-%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + storage_account_type = "Premium_LRS" + create_option = "Empty" + disk_size_gb = "1024" + performance_plus_enabled = true + tags = { + environment = "acctest" + cost-center = "ops" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger) +} + func (ManagedDiskResource) requiresImport(data acceptance.TestData) string { template := ManagedDiskResource{}.empty(data) return fmt.Sprintf(` diff --git a/internal/services/compute/migration/managed_disk_v0_to_v1.go b/internal/services/compute/migration/managed_disk_v0_to_v1.go index bbfc3beb71491..82b0224dcd9c3 100644 --- a/internal/services/compute/migration/managed_disk_v0_to_v1.go +++ b/internal/services/compute/migration/managed_disk_v0_to_v1.go @@ -7,7 +7,7 @@ import ( "context" "log" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" ) diff --git a/internal/services/compute/no_downtime_resize.go b/internal/services/compute/no_downtime_resize.go index 5e951b2691e76..f7125a4f90183 100644 --- a/internal/services/compute/no_downtime_resize.go +++ b/internal/services/compute/no_downtime_resize.go @@ -13,7 +13,7 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2021-07-01/skus" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2021-11-01/virtualmachines" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" ) // The logic on this file is based on: diff --git a/internal/services/compute/orchestrated_virtual_machine_scale_set_data_source.go b/internal/services/compute/orchestrated_virtual_machine_scale_set_data_source.go index a34f57fd48b82..7f044b3e6aa38 100644 --- a/internal/services/compute/orchestrated_virtual_machine_scale_set_data_source.go +++ b/internal/services/compute/orchestrated_virtual_machine_scale_set_data_source.go @@ -8,11 +8,11 @@ import ( "fmt" "time" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/identity" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" @@ -149,9 +149,9 @@ func (r OrchestratedVirtualMachineScaleSetDataSource) Read() sdk.ResourceFunc { return err } - id := parse.NewVirtualMachineScaleSetID(subscriptionId, orchestratedVMSS.ResourceGroup, orchestratedVMSS.Name) + id := commonids.NewVirtualMachineScaleSetID(subscriptionId, orchestratedVMSS.ResourceGroup, orchestratedVMSS.Name) - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if utils.ResponseWasNotFound(existing.Response) { return fmt.Errorf("%s not found", id) diff --git a/internal/services/compute/orchestrated_virtual_machine_scale_set_resource.go b/internal/services/compute/orchestrated_virtual_machine_scale_set_resource.go index 9b9f647f770c6..82320f6993f69 100644 --- a/internal/services/compute/orchestrated_virtual_machine_scale_set_resource.go +++ b/internal/services/compute/orchestrated_virtual_machine_scale_set_resource.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/zones" @@ -22,7 +23,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/features" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" @@ -41,7 +41,7 @@ func resourceOrchestratedVirtualMachineScaleSet() *pluginsdk.Resource { Delete: resourceOrchestratedVirtualMachineScaleSetDelete, Importer: pluginsdk.ImporterValidatingResourceIdThen(func(id string) error { - _, err := parse.VirtualMachineScaleSetID(id) + _, err := commonids.ParseVirtualMachineScaleSetID(id) return err }, importOrchestratedVirtualMachineScaleSet), @@ -277,11 +277,11 @@ func resourceOrchestratedVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, defer cancel() isLegacy := true - id := parse.NewVirtualMachineScaleSetID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + id := commonids.NewVirtualMachineScaleSetID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) if d.IsNewResource() { // Upgrading to the 2021-07-01 exposed a new expand parameter to the GET method - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if !utils.ResponseWasNotFound(existing.Response) { return fmt.Errorf("checking for existing %s: %+v", id, err) @@ -375,7 +375,7 @@ func resourceOrchestratedVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, } if hasHealthExtension { - log.Printf("[DEBUG] Orchestrated Virtual Machine Scale Set %q (Resource Group %q) has a Health Extension defined", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Orchestrated %s has a Health Extension defined", id) } if v, ok := d.GetOk("extensions_time_budget"); ok { @@ -423,11 +423,11 @@ func resourceOrchestratedVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, // if the Computer Prefix Name was not defined use the computer name if vmssOsProfile.ComputerNamePrefix == nil || len(*vmssOsProfile.ComputerNamePrefix) == 0 { // validate that the computer name is a valid Computer Prefix Name - _, errs := computeValidate.WindowsComputerNamePrefix(id.Name, "computer_name_prefix") + _, errs := computeValidate.WindowsComputerNamePrefix(id.VirtualMachineScaleSetName, "computer_name_prefix") if len(errs) > 0 { return fmt.Errorf("unable to assume default computer name prefix %s. Please adjust the 'name', or specify an explicit 'computer_name_prefix'", errs[0]) } - vmssOsProfile.ComputerNamePrefix = utils.String(id.Name) + vmssOsProfile.ComputerNamePrefix = utils.String(id.VirtualMachineScaleSetName) } if extensionOperationsEnabled && !provisionVMAgent { @@ -488,12 +488,12 @@ func resourceOrchestratedVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, // if the Computer Prefix Name was not defined use the computer name if vmssOsProfile.ComputerNamePrefix == nil || len(*vmssOsProfile.ComputerNamePrefix) == 0 { // validate that the computer name is a valid Computer Prefix Name - _, errs := computeValidate.LinuxComputerNamePrefix(id.Name, "computer_name_prefix") + _, errs := computeValidate.LinuxComputerNamePrefix(id.VirtualMachineScaleSetName, "computer_name_prefix") if len(errs) > 0 { return fmt.Errorf("unable to assume default computer name prefix %s. Please adjust the 'name', or specify an explicit 'computer_name_prefix'", errs[0]) } - vmssOsProfile.ComputerNamePrefix = utils.String(id.Name) + vmssOsProfile.ComputerNamePrefix = utils.String(id.VirtualMachineScaleSetName) } if extensionOperationsEnabled && !provisionVMAgent { @@ -640,7 +640,7 @@ func resourceOrchestratedVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, } log.Printf("[DEBUG] Creating Orchestrated %s.", id) - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, props) + future, err := client.CreateOrUpdate(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, props) if err != nil { return fmt.Errorf("creating Orchestrated %s: %+v", id, err) } @@ -654,7 +654,7 @@ func resourceOrchestratedVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, for { log.Printf("[DEBUG] Retrying PUT %d for Orchestrated %s.", errCount, id) - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, props) + future, err := client.CreateOrUpdate(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, props) if err != nil { return fmt.Errorf("creating Orchestrated %s after %d retries: %+v", id, errCount, err) } @@ -694,7 +694,7 @@ func resourceOrchestratedVirtualMachineScaleSetUpdate(d *pluginsdk.ResourceData, ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } @@ -706,23 +706,23 @@ func resourceOrchestratedVirtualMachineScaleSetUpdate(d *pluginsdk.ResourceData, // retrieve // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { - return fmt.Errorf("retrieving Orchestrated Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Orchestrated %s: %+v", id, err) } if existing.Sku != nil { isLegacy = false } if existing.VirtualMachineScaleSetProperties == nil { - return fmt.Errorf("retrieving Orchestrated Virtual Machine Scale Set %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Orchestrated %s: `properties` was nil", id) } if !isLegacy { if existing.VirtualMachineScaleSetProperties.VirtualMachineProfile == nil { - return fmt.Errorf("retrieving Orchestrated Virtual Machine Scale Set %q (Resource Group %q): `properties.virtualMachineProfile` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Orchestrated %s: `properties.virtualMachineProfile` was nil", id) } if existing.VirtualMachineScaleSetProperties.VirtualMachineProfile.StorageProfile == nil { - return fmt.Errorf("retrieving Orchestrated Virtual Machine Scale Set %q (Resource Group %q): `properties.virtualMachineProfile,storageProfile` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Orchestrated %s: `properties.virtualMachineProfile,storageProfile` was nil", id) } } @@ -1099,7 +1099,7 @@ func resourceOrchestratedVirtualMachineScaleSetUpdate(d *pluginsdk.ResourceData, update.VirtualMachineScaleSetUpdateProperties = &updateProps if updateInstances { - log.Printf("[DEBUG] Orchestrated Virtual Machine Scale Set %q in Resource Group %q - updateInstances is true", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Orchestrated %s - updateInstances is true", id) } // AutomaticOSUpgradeIsEnabled currently is not supported in orchestrated VMSS flex @@ -1127,25 +1127,25 @@ func resourceOrchestratedVirtualMachineScaleSetRead(d *pluginsdk.ResourceData, m ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if utils.ResponseWasNotFound(resp.Response) { - log.Printf("[DEBUG] Orchestrated Virtual Machine Scale Set %q was not found in Resource Group %q - removing from state!", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Orchestrated %s was not found - removing from state!", id) d.SetId("") return nil } - return fmt.Errorf("retrieving Orchestrated Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Orchestrated %s: %+v", id, err) } - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) + d.Set("name", id.VirtualMachineScaleSetName) + d.Set("resource_group_name", id.ResourceGroupName) d.Set("location", location.NormalizeNilable(resp.Location)) d.Set("zones", zones.FlattenUntyped(resp.Zones)) @@ -1178,7 +1178,7 @@ func resourceOrchestratedVirtualMachineScaleSetRead(d *pluginsdk.ResourceData, m } if resp.VirtualMachineScaleSetProperties == nil { - return fmt.Errorf("retrieving Orchestrated Virtual Machine Scale Set %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Orchestrated %s: `properties` was nil", id) } props := *resp.VirtualMachineScaleSetProperties @@ -1319,19 +1319,19 @@ func resourceOrchestratedVirtualMachineScaleSetDelete(d *pluginsdk.ResourceData, ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if utils.ResponseWasNotFound(resp.Response) { return nil } - return fmt.Errorf("retrieving Orchestrated Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Orchestrated %s: %+v", id, err) } // Sometimes VMSS's aren't fully deleted when the `Delete` call returns - as such we'll try to scale the cluster @@ -1347,36 +1347,36 @@ func resourceOrchestratedVirtualMachineScaleSetDelete(d *pluginsdk.ResourceData, update := compute.VirtualMachineScaleSetUpdate{ Sku: resp.Sku, } - future, err := client.Update(ctx, id.ResourceGroup, id.Name, update) + future, err := client.Update(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, update) if err != nil { - return fmt.Errorf("updating number of instances in Orchestrated Virtual Machine Scale Set %q (Resource Group %q) to scale to 0: %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("updating number of instances in Orchestrated %s to scale to 0: %+v", id, err) } log.Printf("[DEBUG] Waiting for scaling of instances to 0 prior to deletion - this helps avoids networking issues within Azure") err = future.WaitForCompletionRef(ctx, client.Client) if err != nil { - return fmt.Errorf("waiting for number of instances in Orchestrated Virtual Machine Scale Set %q (Resource Group %q) to scale to 0: %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for number of instances in Orchestrated %s to scale to 0: %+v", id, err) } log.Printf("[DEBUG] Scaled instances to 0 prior to deletion - this helps avoids networking issues within Azure") } else { log.Printf("[DEBUG] Unable to scale instances to `0` since the `sku` block is nil - trying to delete anyway") } - log.Printf("[DEBUG] Deleting Orchestrated Virtual Machine Scale Set %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleting Orchestrated %s", id) // @ArcturusZhang (mimicking from windows_virtual_machine_pluginsdk.go): sending `nil` here omits this value from being sent // which matches the previous behaviour - we're only splitting this out so it's clear why // TODO: support force deletion once it's out of Preview, if applicable var forceDeletion *bool = nil - future, err := client.Delete(ctx, id.ResourceGroup, id.Name, forceDeletion) + future, err := client.Delete(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, forceDeletion) if err != nil { - return fmt.Errorf("deleting Orchestrated Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("deleting Orchestrated %s: %+v", id, err) } - log.Printf("[DEBUG] Waiting for deletion of Orchestrated Virtual Machine Scale Set %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Waiting for deletion of Orchestrated %s", id) if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for deletion of Orchestrated Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for deletion of Orchestrated %s: %+v", id, err) } - log.Printf("[DEBUG] Deleted Orchestrated Virtual Machine Scale Set %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleted Orchestrated %s", id) return nil } diff --git a/internal/services/compute/orchestrated_virtual_machine_scale_set_resource_network_test.go b/internal/services/compute/orchestrated_virtual_machine_scale_set_resource_network_test.go index 28ef0f46cb6ba..faca57cb4bedc 100644 --- a/internal/services/compute/orchestrated_virtual_machine_scale_set_resource_network_test.go +++ b/internal/services/compute/orchestrated_virtual_machine_scale_set_resource_network_test.go @@ -8,10 +8,10 @@ import ( "fmt" "testing" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/tombuildsstuff/kermit/sdk/compute/2023-03-01/compute" ) @@ -246,13 +246,13 @@ func TestAccOrchestratedVirtualMachineScaleSet_networkPublicIPVersion(t *testing } func (OrchestratedVirtualMachineScaleSetResource) hasLoadBalancer(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) error { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - read, err := client.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + read, err := client.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { return err } diff --git a/internal/services/compute/orchestrated_virtual_machine_scale_set_resource_test.go b/internal/services/compute/orchestrated_virtual_machine_scale_set_resource_test.go index 62b36fa217c17..c8adcb0973a9d 100644 --- a/internal/services/compute/orchestrated_virtual_machine_scale_set_resource_test.go +++ b/internal/services/compute/orchestrated_virtual_machine_scale_set_resource_test.go @@ -8,10 +8,10 @@ import ( "fmt" "testing" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" "github.com/tombuildsstuff/kermit/sdk/compute/2023-03-01/compute" @@ -487,13 +487,13 @@ func TestAccOrchestratedVirtualMachineScaleSet_updatePriorityMixPolicy(t *testin // } func (t OrchestratedVirtualMachineScaleSetResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return nil, err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - resp, err := clients.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + resp, err := clients.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { return nil, fmt.Errorf("retrieving Virtual Machine Scale Set %q", id) } @@ -502,14 +502,14 @@ func (t OrchestratedVirtualMachineScaleSetResource) Exists(ctx context.Context, } func (OrchestratedVirtualMachineScaleSetResource) Destroy(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return nil, err } // this is a preview feature we don't want to use right now var forceDelete *bool = nil - future, err := client.Compute.VMScaleSetClient.Delete(ctx, id.ResourceGroup, id.Name, forceDelete) + future, err := client.Compute.VMScaleSetClient.Delete(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, forceDelete) if err != nil { return nil, fmt.Errorf("Bad: deleting %s: %+v", *id, err) } @@ -522,13 +522,13 @@ func (OrchestratedVirtualMachineScaleSetResource) Destroy(ctx context.Context, c } func (OrchestratedVirtualMachineScaleSetResource) hasApplicationGateway(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) error { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - read, err := client.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + read, err := client.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { return err } diff --git a/internal/services/compute/parse/virtual_machine.go b/internal/services/compute/parse/virtual_machine.go deleted file mode 100644 index 4b973531543ac..0000000000000 --- a/internal/services/compute/parse/virtual_machine.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - "strings" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -type VirtualMachineId struct { - SubscriptionId string - ResourceGroup string - Name string -} - -func NewVirtualMachineID(subscriptionId, resourceGroup, name string) VirtualMachineId { - return VirtualMachineId{ - SubscriptionId: subscriptionId, - ResourceGroup: resourceGroup, - Name: name, - } -} - -func (id VirtualMachineId) String() string { - segments := []string{ - fmt.Sprintf("Name %q", id.Name), - fmt.Sprintf("Resource Group %q", id.ResourceGroup), - } - segmentsStr := strings.Join(segments, " / ") - return fmt.Sprintf("%s: (%s)", "Virtual Machine", segmentsStr) -} - -func (id VirtualMachineId) ID() string { - fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/virtualMachines/%s" - return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.Name) -} - -// VirtualMachineID parses a VirtualMachine ID into an VirtualMachineId struct -func VirtualMachineID(input string) (*VirtualMachineId, error) { - id, err := resourceids.ParseAzureResourceID(input) - if err != nil { - return nil, fmt.Errorf("parsing %q as an VirtualMachine ID: %+v", input, err) - } - - resourceId := VirtualMachineId{ - SubscriptionId: id.SubscriptionID, - ResourceGroup: id.ResourceGroup, - } - - if resourceId.SubscriptionId == "" { - return nil, fmt.Errorf("ID was missing the 'subscriptions' element") - } - - if resourceId.ResourceGroup == "" { - return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") - } - - if resourceId.Name, err = id.PopSegment("virtualMachines"); err != nil { - return nil, err - } - - if err := id.ValidateNoEmptySegments(input); err != nil { - return nil, err - } - - return &resourceId, nil -} diff --git a/internal/services/compute/parse/virtual_machine_scale_set.go b/internal/services/compute/parse/virtual_machine_scale_set.go deleted file mode 100644 index 1fdff2bfe27e5..0000000000000 --- a/internal/services/compute/parse/virtual_machine_scale_set.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - "strings" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -type VirtualMachineScaleSetId struct { - SubscriptionId string - ResourceGroup string - Name string -} - -func NewVirtualMachineScaleSetID(subscriptionId, resourceGroup, name string) VirtualMachineScaleSetId { - return VirtualMachineScaleSetId{ - SubscriptionId: subscriptionId, - ResourceGroup: resourceGroup, - Name: name, - } -} - -func (id VirtualMachineScaleSetId) String() string { - segments := []string{ - fmt.Sprintf("Name %q", id.Name), - fmt.Sprintf("Resource Group %q", id.ResourceGroup), - } - segmentsStr := strings.Join(segments, " / ") - return fmt.Sprintf("%s: (%s)", "Virtual Machine Scale Set", segmentsStr) -} - -func (id VirtualMachineScaleSetId) ID() string { - fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/virtualMachineScaleSets/%s" - return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.Name) -} - -// VirtualMachineScaleSetID parses a VirtualMachineScaleSet ID into an VirtualMachineScaleSetId struct -func VirtualMachineScaleSetID(input string) (*VirtualMachineScaleSetId, error) { - id, err := resourceids.ParseAzureResourceID(input) - if err != nil { - return nil, fmt.Errorf("parsing %q as an VirtualMachineScaleSet ID: %+v", input, err) - } - - resourceId := VirtualMachineScaleSetId{ - SubscriptionId: id.SubscriptionID, - ResourceGroup: id.ResourceGroup, - } - - if resourceId.SubscriptionId == "" { - return nil, fmt.Errorf("ID was missing the 'subscriptions' element") - } - - if resourceId.ResourceGroup == "" { - return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") - } - - if resourceId.Name, err = id.PopSegment("virtualMachineScaleSets"); err != nil { - return nil, err - } - - if err := id.ValidateNoEmptySegments(input); err != nil { - return nil, err - } - - return &resourceId, nil -} - -// VirtualMachineScaleSetIDInsensitively parses an VirtualMachineScaleSet ID into an VirtualMachineScaleSetId struct, insensitively -// This should only be used to parse an ID for rewriting, the VirtualMachineScaleSetID -// method should be used instead for validation etc. -// -// Whilst this may seem strange, this enables Terraform have consistent casing -// which works around issues in Core, whilst handling broken API responses. -func VirtualMachineScaleSetIDInsensitively(input string) (*VirtualMachineScaleSetId, error) { - id, err := resourceids.ParseAzureResourceID(input) - if err != nil { - return nil, err - } - - resourceId := VirtualMachineScaleSetId{ - SubscriptionId: id.SubscriptionID, - ResourceGroup: id.ResourceGroup, - } - - if resourceId.SubscriptionId == "" { - return nil, fmt.Errorf("ID was missing the 'subscriptions' element") - } - - if resourceId.ResourceGroup == "" { - return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") - } - - // find the correct casing for the 'virtualMachineScaleSets' segment - virtualMachineScaleSetsKey := "virtualMachineScaleSets" - for key := range id.Path { - if strings.EqualFold(key, virtualMachineScaleSetsKey) { - virtualMachineScaleSetsKey = key - break - } - } - if resourceId.Name, err = id.PopSegment(virtualMachineScaleSetsKey); err != nil { - return nil, err - } - - if err := id.ValidateNoEmptySegments(input); err != nil { - return nil, err - } - - return &resourceId, nil -} diff --git a/internal/services/compute/parse/virtual_machine_test.go b/internal/services/compute/parse/virtual_machine_test.go deleted file mode 100644 index ab050a04a0603..0000000000000 --- a/internal/services/compute/parse/virtual_machine_test.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "testing" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -var _ resourceids.Id = VirtualMachineId{} - -func TestVirtualMachineIDFormatter(t *testing.T) { - actual := NewVirtualMachineID("12345678-1234-9876-4563-123456789012", "resGroup1", "machine1").ID() - expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachines/machine1" - if actual != expected { - t.Fatalf("Expected %q but got %q", expected, actual) - } -} - -func TestVirtualMachineID(t *testing.T) { - testData := []struct { - Input string - Error bool - Expected *VirtualMachineId - }{ - - { - // empty - Input: "", - Error: true, - }, - - { - // missing SubscriptionId - Input: "/", - Error: true, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Error: true, - }, - - { - // missing ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", - Error: true, - }, - - { - // missing value for ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", - Error: true, - }, - - { - // missing Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/", - Error: true, - }, - - { - // missing value for Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachines/", - Error: true, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachines/machine1", - Expected: &VirtualMachineId{ - SubscriptionId: "12345678-1234-9876-4563-123456789012", - ResourceGroup: "resGroup1", - Name: "machine1", - }, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.COMPUTE/VIRTUALMACHINES/MACHINE1", - Error: true, - }, - } - - for _, v := range testData { - t.Logf("[DEBUG] Testing %q", v.Input) - - actual, err := VirtualMachineID(v.Input) - if err != nil { - if v.Error { - continue - } - - t.Fatalf("Expect a value but got an error: %s", err) - } - if v.Error { - t.Fatal("Expect an error but didn't get one") - } - - if actual.SubscriptionId != v.Expected.SubscriptionId { - t.Fatalf("Expected %q but got %q for SubscriptionId", v.Expected.SubscriptionId, actual.SubscriptionId) - } - if actual.ResourceGroup != v.Expected.ResourceGroup { - t.Fatalf("Expected %q but got %q for ResourceGroup", v.Expected.ResourceGroup, actual.ResourceGroup) - } - if actual.Name != v.Expected.Name { - t.Fatalf("Expected %q but got %q for Name", v.Expected.Name, actual.Name) - } - } -} diff --git a/internal/services/compute/resourceids.go b/internal/services/compute/resourceids.go index 1430284d77033..0152250a52660 100644 --- a/internal/services/compute/resourceids.go +++ b/internal/services/compute/resourceids.go @@ -6,9 +6,7 @@ package compute //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=DiskEncryptionSet -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/diskEncryptionSets/set1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=SharedImage -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/galleries/gallery1/images/image1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=SharedImageVersion -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/galleries/gallery1/images/image1/versions/version1 -//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VirtualMachine -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachines/machine1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VirtualMachineExtension -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachines/machine1/extensions/extension1 -//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VirtualMachineScaleSet -rewrite=true -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleSet1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VirtualMachineScaleSetExtension -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleSet1/extensions/extension1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=SSHPublicKey -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/sshPublicKeys/sshpublickey1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=HybridMachine -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.HybridCompute/machines/machine1 diff --git a/internal/services/compute/shared_image_version_resource.go b/internal/services/compute/shared_image_version_resource.go index aba48fd63a717..74a050f1dabd1 100644 --- a/internal/services/compute/shared_image_version_resource.go +++ b/internal/services/compute/shared_image_version_resource.go @@ -10,6 +10,7 @@ import ( "time" "github.com/Azure/go-autorest/autorest/date" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" @@ -99,6 +100,12 @@ func resourceSharedImageVersion() *pluginsdk.Resource { ValidateFunc: validate.DiskEncryptionSetID, }, + "exclude_from_latest_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + // The Service API doesn't support to update `storage_account_type`. So it has to recreate the resource for updating `storage_account_type`. // However, `ForceNew` cannot be used since resource would be recreated while adding or removing `target_region`. // And `CustomizeDiff` also cannot be used since it doesn't support in a `Set`. @@ -155,7 +162,7 @@ func resourceSharedImageVersion() *pluginsdk.Resource { ForceNew: true, ValidateFunc: validation.Any( images.ValidateImageID, - validate.VirtualMachineID, + commonids.ValidateVirtualMachineID, ), ExactlyOneOf: []string{"blob_uri", "os_disk_snapshot_id", "managed_image_id"}, }, @@ -177,6 +184,13 @@ func resourceSharedImageVersion() *pluginsdk.Resource { Default: false, }, + "deletion_of_replicated_locations_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + ForceNew: true, + Default: false, + }, + "tags": tags.Schema(), }, @@ -222,6 +236,9 @@ func resourceSharedImageVersionCreateUpdate(d *pluginsdk.ResourceData, meta inte ReplicationMode: compute.ReplicationMode(d.Get("replication_mode").(string)), TargetRegions: targetRegions, }, + SafetyProfile: &compute.GalleryImageVersionSafetyProfile{ + AllowDeletionOfReplicatedLocations: utils.Bool(d.Get("deletion_of_replicated_locations_enabled").(bool)), + }, StorageProfile: &compute.GalleryImageVersionStorageProfile{}, }, Tags: tags.Expand(d.Get("tags").(map[string]interface{})), @@ -343,6 +360,10 @@ func resourceSharedImageVersionRead(d *pluginsdk.ResourceData, meta interface{}) d.Set("os_disk_snapshot_id", osDiskSnapShotID) d.Set("storage_account_id", storageAccountID) } + + if safetyProfile := props.SafetyProfile; safetyProfile != nil { + d.Set("deletion_of_replicated_locations_enabled", pointer.From(safetyProfile.AllowDeletionOfReplicatedLocations)) + } } return tags.FlattenAndSet(d, resp.Tags) @@ -415,9 +436,11 @@ func expandSharedImageVersionTargetRegions(d *pluginsdk.ResourceData) (*[]comput regionalReplicaCount := input["regional_replica_count"].(int) storageAccountType := input["storage_account_type"].(string) diskEncryptionSetId := input["disk_encryption_set_id"].(string) + excludeFromLatest := input["exclude_from_latest_enabled"].(bool) output := compute.TargetRegion{ Name: utils.String(name), + ExcludeFromLatest: utils.Bool(excludeFromLatest), RegionalReplicaCount: utils.Int32(int32(regionalReplicaCount)), StorageAccountType: compute.StorageAccountType(storageAccountType), } @@ -463,6 +486,8 @@ func flattenSharedImageVersionTargetRegions(input *[]compute.TargetRegion) []int } output["disk_encryption_set_id"] = diskEncryptionSetId + output["exclude_from_latest_enabled"] = pointer.From(v.ExcludeFromLatest) + results = append(results, output) } } diff --git a/internal/services/compute/shared_image_version_resource_test.go b/internal/services/compute/shared_image_version_resource_test.go index 14e44081c7b27..fee03ee1c86d7 100644 --- a/internal/services/compute/shared_image_version_resource_test.go +++ b/internal/services/compute/shared_image_version_resource_test.go @@ -234,6 +234,29 @@ func TestAccSharedImageVersion_replicationMode(t *testing.T) { }) } +func TestAccSharedImageVersion_replicatedRegionDeletion(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_shared_image_version", "test") + r := SharedImageVersionResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + // need to create a vm and then reference it in the image creation + Config: r.setup(data), + Check: acceptance.ComposeTestCheckFunc( + data.CheckWithClientForResource(ImageResource{}.virtualMachineExists, "azurerm_virtual_machine.testsource"), + data.CheckWithClientForResource(ImageResource{}.generalizeVirtualMachine(data), "azurerm_virtual_machine.testsource"), + ), + }, + { + Config: r.replicatedRegionDeletion(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccSharedImageVersion_requiresImport(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_shared_image_version", "test") r := SharedImageVersionResource{} @@ -697,3 +720,26 @@ resource "azurerm_shared_image_version" "test" { } `, template) } + +func (r SharedImageVersionResource) replicatedRegionDeletion(data acceptance.TestData) string { + template := r.provision(data) + return fmt.Sprintf(` +%s + +resource "azurerm_shared_image_version" "test" { + name = "0.0.1" + gallery_name = azurerm_shared_image_gallery.test.name + image_name = azurerm_shared_image.test.name + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + managed_image_id = azurerm_image.test.id + deletion_of_replicated_locations_enabled = true + + target_region { + name = azurerm_resource_group.test.location + regional_replica_count = 1 + exclude_from_latest_enabled = true + } +} +`, template) +} diff --git a/internal/services/compute/validate/linux_admin_password.go b/internal/services/compute/validate/linux_admin_password.go index f4219dd9f68e0..4fe4026c5d0cc 100644 --- a/internal/services/compute/validate/linux_admin_password.go +++ b/internal/services/compute/validate/linux_admin_password.go @@ -15,13 +15,13 @@ func LinuxAdminPassword(i interface{}, k string) (warnings []string, errors []er v, ok := i.(string) if !ok { errors = append(errors, fmt.Errorf("expected %q to be a string but it wasn't", k)) - return + return warnings, errors } // adminPassword must not be empty. if strings.TrimSpace(v) == "" { errors = append(errors, fmt.Errorf("%q must not be empty", k)) - return + return warnings, errors } // adminPassword Min-length is 6 characters and Max-length is 72 characters. diff --git a/internal/services/compute/validate/virtual_machine_id_test.go b/internal/services/compute/validate/virtual_machine_id_test.go deleted file mode 100644 index b2ec31da4168a..0000000000000 --- a/internal/services/compute/validate/virtual_machine_id_test.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import "testing" - -func TestVirtualMachineID(t *testing.T) { - cases := []struct { - Input string - Valid bool - }{ - - { - // empty - Input: "", - Valid: false, - }, - - { - // missing SubscriptionId - Input: "/", - Valid: false, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Valid: false, - }, - - { - // missing ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", - Valid: false, - }, - - { - // missing value for ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", - Valid: false, - }, - - { - // missing Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/", - Valid: false, - }, - - { - // missing value for Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachines/", - Valid: false, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachines/machine1", - Valid: true, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.COMPUTE/VIRTUALMACHINES/MACHINE1", - Valid: false, - }, - } - for _, tc := range cases { - t.Logf("[DEBUG] Testing Value %s", tc.Input) - _, errors := VirtualMachineID(tc.Input, "test") - valid := len(errors) == 0 - - if tc.Valid != valid { - t.Fatalf("Expected %t but got %t", tc.Valid, valid) - } - } -} diff --git a/internal/services/compute/validate/virtual_machine_scale_set_id.go b/internal/services/compute/validate/virtual_machine_scale_set_id.go deleted file mode 100644 index c876738e292d0..0000000000000 --- a/internal/services/compute/validate/virtual_machine_scale_set_id.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" -) - -func VirtualMachineScaleSetID(input interface{}, key string) (warnings []string, errors []error) { - v, ok := input.(string) - if !ok { - errors = append(errors, fmt.Errorf("expected %q to be a string", key)) - return - } - - if _, err := parse.VirtualMachineScaleSetID(v); err != nil { - errors = append(errors, err) - } - - return -} diff --git a/internal/services/compute/validate/virtual_machine_scale_set_id_test.go b/internal/services/compute/validate/virtual_machine_scale_set_id_test.go deleted file mode 100644 index a88a172705e1d..0000000000000 --- a/internal/services/compute/validate/virtual_machine_scale_set_id_test.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import "testing" - -func TestVirtualMachineScaleSetID(t *testing.T) { - cases := []struct { - Input string - Valid bool - }{ - - { - // empty - Input: "", - Valid: false, - }, - - { - // missing SubscriptionId - Input: "/", - Valid: false, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Valid: false, - }, - - { - // missing ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", - Valid: false, - }, - - { - // missing value for ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", - Valid: false, - }, - - { - // missing Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/", - Valid: false, - }, - - { - // missing value for Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/", - Valid: false, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleSet1", - Valid: true, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.COMPUTE/VIRTUALMACHINESCALESETS/SCALESET1", - Valid: false, - }, - } - for _, tc := range cases { - t.Logf("[DEBUG] Testing Value %s", tc.Input) - _, errors := VirtualMachineScaleSetID(tc.Input, "test") - valid := len(errors) == 0 - - if tc.Valid != valid { - t.Fatalf("Expected %t but got %t", tc.Valid, valid) - } - } -} diff --git a/internal/services/compute/validate/windows_admin_password.go b/internal/services/compute/validate/windows_admin_password.go index b773168a2683d..0024b7b98699c 100644 --- a/internal/services/compute/validate/windows_admin_password.go +++ b/internal/services/compute/validate/windows_admin_password.go @@ -15,13 +15,13 @@ func WindowsAdminPassword(i interface{}, k string) (warnings []string, errors [] v, ok := i.(string) if !ok { errors = append(errors, fmt.Errorf("expected %q to be a string but it wasn't", k)) - return + return warnings, errors } // adminPassword must not be empty. if strings.TrimSpace(v) == "" { errors = append(errors, fmt.Errorf("%q must not be empty", k)) - return + return warnings, errors } // adminPassword Min-length is 8 characters and Max-length is 123 characters. diff --git a/internal/services/compute/virtual_machine.go b/internal/services/compute/virtual_machine.go index c111f1d09e70c..64e935f6313b5 100644 --- a/internal/services/compute/virtual_machine.go +++ b/internal/services/compute/virtual_machine.go @@ -9,8 +9,8 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/identity" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/galleryapplicationversions" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" azValidate "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" diff --git a/internal/services/compute/virtual_machine_data_disk_attachment_resource.go b/internal/services/compute/virtual_machine_data_disk_attachment_resource.go index eebddfe24fd26..52c9190604146 100644 --- a/internal/services/compute/virtual_machine_data_disk_attachment_resource.go +++ b/internal/services/compute/virtual_machine_data_disk_attachment_resource.go @@ -9,12 +9,12 @@ import ( "time" "github.com/hashicorp/go-azure-helpers/lang/response" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/locks" "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/suppress" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -54,7 +54,7 @@ func resourceVirtualMachineDataDiskAttachment() *pluginsdk.Resource { Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: validate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, "lun": { @@ -99,15 +99,15 @@ func resourceVirtualMachineDataDiskAttachmentCreateUpdate(d *pluginsdk.ResourceD ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - parsedVirtualMachineId, err := parse.VirtualMachineID(d.Get("virtual_machine_id").(string)) + parsedVirtualMachineId, err := commonids.ParseVirtualMachineID(d.Get("virtual_machine_id").(string)) if err != nil { return fmt.Errorf("parsing Virtual Machine ID %q: %+v", parsedVirtualMachineId.ID(), err) } - locks.ByName(parsedVirtualMachineId.Name, VirtualMachineResourceName) - defer locks.UnlockByName(parsedVirtualMachineId.Name, VirtualMachineResourceName) + locks.ByName(parsedVirtualMachineId.VirtualMachineName, VirtualMachineResourceName) + defer locks.UnlockByName(parsedVirtualMachineId.VirtualMachineName, VirtualMachineResourceName) - virtualMachine, err := client.Get(ctx, parsedVirtualMachineId.ResourceGroup, parsedVirtualMachineId.Name, "") + virtualMachine, err := client.Get(ctx, parsedVirtualMachineId.ResourceGroupName, parsedVirtualMachineId.VirtualMachineName, "") if err != nil { if utils.ResponseWasNotFound(virtualMachine.Response) { return fmt.Errorf("Virtual Machine %q was not found", parsedVirtualMachineId.String()) @@ -179,7 +179,7 @@ func resourceVirtualMachineDataDiskAttachmentCreateUpdate(d *pluginsdk.ResourceD // if there's too many disks we get a 409 back with: // `The maximum number of data disks allowed to be attached to a VM of this size is 1.` // which we're intentionally not wrapping, since the errors good. - future, err := client.CreateOrUpdate(ctx, parsedVirtualMachineId.ResourceGroup, parsedVirtualMachineId.Name, virtualMachine) + future, err := client.CreateOrUpdate(ctx, parsedVirtualMachineId.ResourceGroupName, parsedVirtualMachineId.VirtualMachineName, virtualMachine) if err != nil { return fmt.Errorf("updating Virtual Machine %q with Disk %q: %+v", parsedVirtualMachineId.String(), name, err) } diff --git a/internal/services/compute/virtual_machine_data_source.go b/internal/services/compute/virtual_machine_data_source.go index 9b545a11f7510..0dcc3c81d483d 100644 --- a/internal/services/compute/virtual_machine_data_source.go +++ b/internal/services/compute/virtual_machine_data_source.go @@ -8,10 +8,10 @@ import ( "strings" "time" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" @@ -82,9 +82,9 @@ func dataSourceVirtualMachineRead(d *pluginsdk.ResourceData, meta interface{}) e ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id := parse.NewVirtualMachineID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + id := commonids.NewVirtualMachineID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, "InstanceView") + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "InstanceView") if err != nil { if utils.ResponseWasNotFound(resp.Response) { return fmt.Errorf("%s was not found", id) diff --git a/internal/services/compute/virtual_machine_extension_resource.go b/internal/services/compute/virtual_machine_extension_resource.go index 4d554827a8a97..42b02291707b1 100644 --- a/internal/services/compute/virtual_machine_extension_resource.go +++ b/internal/services/compute/virtual_machine_extension_resource.go @@ -7,10 +7,11 @@ import ( "fmt" "time" + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -53,7 +54,7 @@ func resourceVirtualMachineExtension() *pluginsdk.Resource { Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: validate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, "publisher": { @@ -107,6 +108,15 @@ func resourceVirtualMachineExtension() *pluginsdk.Resource { "protected_settings_from_key_vault": protectedSettingsFromKeyVaultSchema(true), + "provision_after_extensions": { + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Schema{ + Type: pluginsdk.TypeString, + ValidateFunc: validation.StringIsNotEmpty, + }, + }, + "tags": tags.Schema(), }, } @@ -118,11 +128,11 @@ func resourceVirtualMachineExtensionsCreateUpdate(d *pluginsdk.ResourceData, met ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - virtualMachineId, err := parse.VirtualMachineID(d.Get("virtual_machine_id").(string)) + virtualMachineId, err := commonids.ParseVirtualMachineID(d.Get("virtual_machine_id").(string)) if err != nil { return fmt.Errorf("parsing Virtual Machine ID %q: %+v", virtualMachineId, err) } - id := parse.NewVirtualMachineExtensionID(virtualMachineId.SubscriptionId, virtualMachineId.ResourceGroup, virtualMachineId.Name, d.Get("name").(string)) + id := parse.NewVirtualMachineExtensionID(virtualMachineId.SubscriptionId, virtualMachineId.ResourceGroupName, virtualMachineId.VirtualMachineName, d.Get("name").(string)) virtualMachine, err := vmClient.Get(ctx, id.ResourceGroup, id.VirtualMachineName, "") if err != nil { @@ -185,6 +195,10 @@ func resourceVirtualMachineExtensionsCreateUpdate(d *pluginsdk.ResourceData, met extension.VirtualMachineExtensionProperties.ProtectedSettings = &protectedSettings } + if provisionAfterExtensionsValue, exists := d.GetOk("provision_after_extensions"); exists { + extension.ProvisionAfterExtensions = utils.ExpandStringSlice(provisionAfterExtensionsValue.([]interface{})) + } + future, err := vmExtensionClient.CreateOrUpdate(ctx, id.ResourceGroup, id.VirtualMachineName, id.ExtensionName, extension) if err != nil { return err @@ -239,6 +253,7 @@ func resourceVirtualMachineExtensionsRead(d *pluginsdk.ResourceData, meta interf d.Set("auto_upgrade_minor_version", props.AutoUpgradeMinorVersion) d.Set("automatic_upgrade_enabled", props.EnableAutomaticUpgrade) d.Set("protected_settings_from_key_vault", flattenProtectedSettingsFromKeyVault(props.ProtectedSettingsFromKeyVault)) + d.Set("provision_after_extensions", pointer.From(props.ProvisionAfterExtensions)) suppressFailure := false if props.SuppressFailures != nil { diff --git a/internal/services/compute/virtual_machine_extension_resource_test.go b/internal/services/compute/virtual_machine_extension_resource_test.go index ac57477a77b97..9d06ad34d8714 100644 --- a/internal/services/compute/virtual_machine_extension_resource_test.go +++ b/internal/services/compute/virtual_machine_extension_resource_test.go @@ -101,6 +101,23 @@ func TestAccVirtualMachineExtension_concurrent(t *testing.T) { }) } +func TestAccVirtualMachineExtension_provisionAfterExtensions(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_virtual_machine_extension", "test") + r := VirtualMachineExtensionResource{} + secondResourceName := "azurerm_virtual_machine_extension.test2" + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.provisionAfterExtensions(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + acceptance.TestMatchResourceAttr(data.ResourceName, "settings", regexp.MustCompile("hostname")), + acceptance.TestMatchResourceAttr(secondResourceName, "settings", regexp.MustCompile("whoami")), + ), + }, + }) +} + func TestAccVirtualMachineExtension_linuxDiagnostics(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_virtual_machine_extension", "test") r := VirtualMachineExtensionResource{} @@ -503,6 +520,127 @@ SETTINGS `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger) } +func (VirtualMachineExtensionResource) provisionAfterExtensions(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_virtual_network" "test" { + name = "acctvn-%d" + address_space = ["10.0.0.0/16"] + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name +} + +resource "azurerm_subnet" "test" { + name = "acctsub-%d" + resource_group_name = azurerm_resource_group.test.name + virtual_network_name = azurerm_virtual_network.test.name + address_prefixes = ["10.0.2.0/24"] +} + +resource "azurerm_network_interface" "test" { + name = "acctni-%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + + ip_configuration { + name = "testconfiguration1" + subnet_id = azurerm_subnet.test.id + private_ip_address_allocation = "Dynamic" + } +} + +resource "azurerm_storage_account" "test" { + name = "accsa%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_tier = "Standard" + account_replication_type = "LRS" + + tags = { + environment = "staging" + } +} + +resource "azurerm_storage_container" "test" { + name = "vhds" + storage_account_name = azurerm_storage_account.test.name + container_access_type = "private" +} + +resource "azurerm_virtual_machine" "test" { + name = "acctvm-%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + network_interface_ids = [azurerm_network_interface.test.id] + vm_size = "Standard_F2" + + storage_image_reference { + publisher = "Canonical" + offer = "UbuntuServer" + sku = "16.04-LTS" + version = "latest" + } + + storage_os_disk { + name = "myosdisk1" + vhd_uri = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/myosdisk1.vhd" + caching = "ReadWrite" + create_option = "FromImage" + } + + os_profile { + computer_name = "hostname%d" + admin_username = "testadmin" + admin_password = "Password1234!" + } + + os_profile_linux_config { + disable_password_authentication = false + } +} + +resource "azurerm_virtual_machine_extension" "test" { + name = "acctvme-%d" + virtual_machine_id = azurerm_virtual_machine.test.id + publisher = "Microsoft.Azure.Extensions" + type = "CustomScript" + type_handler_version = "2.0" + + settings = < 0 { return fmt.Errorf("unable to assume default computer name %s. Please adjust the %q, or specify an explicit %q", errs[0], "name", "computer_name") } - computerName = id.Name + computerName = id.VirtualMachineName } enableAutomaticUpdates := d.Get("enable_automatic_updates").(bool) location := azure.NormalizeLocation(d.Get("location").(string)) @@ -510,7 +510,7 @@ func resourceWindowsVirtualMachineCreate(d *pluginsdk.ResourceData, meta interfa winRmListeners := expandWinRMListener(winRmListenersRaw) params := compute.VirtualMachine{ - Name: utils.String(id.Name), + Name: utils.String(id.VirtualMachineName), ExtendedLocation: expandEdgeZone(d.Get("edge_zone").(string)), Location: utils.String(location), Identity: identity, @@ -775,7 +775,7 @@ func resourceWindowsVirtualMachineCreate(d *pluginsdk.ResourceData, meta interfa } } - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, params) + future, err := client.CreateOrUpdate(ctx, id.ResourceGroupName, id.VirtualMachineName, params) if err != nil { return fmt.Errorf("creating Windows %s: %+v", id, err) } @@ -796,24 +796,24 @@ func resourceWindowsVirtualMachineRead(d *pluginsdk.ResourceData, meta interface ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineID(d.Id()) + id, err := commonids.ParseVirtualMachineID(d.Id()) if err != nil { return err } - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.InstanceViewTypesUserData) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, compute.InstanceViewTypesUserData) if err != nil { if utils.ResponseWasNotFound(resp.Response) { - log.Printf("[DEBUG] Windows Virtual Machine %q was not found in Resource Group %q - removing from state!", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Windows %s was not found - removing from state!", id) d.SetId("") return nil } - return fmt.Errorf("retrieving Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Windows %s: %+v", id, err) } - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) + d.Set("name", id.VirtualMachineName) + d.Set("resource_group_name", id.ResourceGroupName) d.Set("location", location.NormalizeNilable(resp.Location)) d.Set("edge_zone", flattenEdgeZone(resp.ExtendedLocation)) @@ -830,7 +830,7 @@ func resourceWindowsVirtualMachineRead(d *pluginsdk.ResourceData, meta interface } if resp.VirtualMachineProperties == nil { - return fmt.Errorf("retrieving Windows Virtual Machine %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Windows %s: `properties` was nil", id) } props := *resp.VirtualMachineProperties @@ -1047,24 +1047,24 @@ func resourceWindowsVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interfa ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineID(d.Id()) + id, err := commonids.ParseVirtualMachineID(d.Id()) if err != nil { return err } - locks.ByName(id.Name, VirtualMachineResourceName) - defer locks.UnlockByName(id.Name, VirtualMachineResourceName) + locks.ByName(id.VirtualMachineName, VirtualMachineResourceName) + defer locks.UnlockByName(id.VirtualMachineName, VirtualMachineResourceName) - log.Printf("[DEBUG] Retrieving Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.InstanceViewTypesUserData) + log.Printf("[DEBUG] Retrieving Windows %s", id) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, compute.InstanceViewTypesUserData) if err != nil { - return fmt.Errorf("retrieving Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Retrieving InstanceView for Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - instanceView, err := client.InstanceView(ctx, id.ResourceGroup, id.Name) + log.Printf("[DEBUG] Retrieving InstanceView for Windows %s", id) + instanceView, err := client.InstanceView(ctx, id.ResourceGroupName, id.VirtualMachineName) if err != nil { - return fmt.Errorf("retrieving InstanceView for Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving InstanceView for Windows %s: %+v", id, err) } shouldTurnBackOn := virtualMachineShouldBeStarted(instanceView) @@ -1385,9 +1385,9 @@ func resourceWindowsVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interfa // Azure will auto-reboot this for us, providing this machine will fit on this host // otherwise we need to shut down the VM to move it to another host to be able to use this size availableOnThisHost := false - sizes, err := client.ListAvailableSizes(ctx, id.ResourceGroup, id.Name) + sizes, err := client.ListAvailableSizes(ctx, id.ResourceGroupName, id.VirtualMachineName) if err != nil { - return fmt.Errorf("retrieving available sizes for Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving available sizes for Windows %s: %+v", id, err) } if sizes.Value != nil { @@ -1509,37 +1509,37 @@ func resourceWindowsVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interfa } if shouldShutDown { - log.Printf("[DEBUG] Shutting Down Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Shutting Down Windows %s", id) forceShutdown := false - future, err := client.PowerOff(ctx, id.ResourceGroup, id.Name, utils.Bool(forceShutdown)) + future, err := client.PowerOff(ctx, id.ResourceGroupName, id.VirtualMachineName, utils.Bool(forceShutdown)) if err != nil { - return fmt.Errorf("sending Power Off to Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("sending Power Off to Windows %s: %+v", id, err) } if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for Power Off of Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for Power Off of Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Shut Down Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Shut Down Windows %s", id) } if shouldDeallocate { if !hasEphemeralOSDisk { - log.Printf("[DEBUG] Deallocating Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deallocating Windows %s", id) // Upgrading to the 2021-07-01 exposed a new hibernate parameter in the Deallocate method - future, err := client.Deallocate(ctx, id.ResourceGroup, id.Name, utils.Bool(false)) + future, err := client.Deallocate(ctx, id.ResourceGroupName, id.VirtualMachineName, utils.Bool(false)) if err != nil { - return fmt.Errorf("deallocating Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("deallocating Windows %s: %+v", id, err) } if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for Deallocation of Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for Deallocation of Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Deallocated Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deallocated Windows %s", id) } else { // Code="OperationNotAllowed" Message="Operation 'deallocate' is not supported for VMs or VM Scale Set instances using an ephemeral OS disk." - log.Printf("[DEBUG] Skipping deallocation for Windows Virtual Machine %q (Resource Group %q) since cannot deallocate a Virtual Machine with an Ephemeral OS Disk", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Skipping deallocation for Windows %s since cannot deallocate a Virtual Machine with an Ephemeral OS Disk", id) } } @@ -1549,11 +1549,11 @@ func resourceWindowsVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interfa if d.HasChange("os_disk.0.disk_size_gb") { diskName := d.Get("os_disk.0.name").(string) newSize := d.Get("os_disk.0.disk_size_gb").(int) - log.Printf("[DEBUG] Resizing OS Disk %q for Windows Virtual Machine %q (Resource Group %q) to %dGB..", diskName, id.Name, id.ResourceGroup, newSize) + log.Printf("[DEBUG] Resizing OS Disk %q for Windows %s to %dGB..", diskName, id, newSize) disksClient := meta.(*clients.Client).Compute.DisksClient subscriptionId := meta.(*clients.Client).Account.SubscriptionId - id := disks.NewDiskID(subscriptionId, id.ResourceGroup, diskName) + id := disks.NewDiskID(subscriptionId, id.ResourceGroupName, diskName) update := disks.DiskUpdate{ Properties: &disks.DiskUpdateProperties{ @@ -1572,7 +1572,7 @@ func resourceWindowsVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interfa if d.HasChange("os_disk.0.disk_encryption_set_id") { if diskEncryptionSetId := d.Get("os_disk.0.disk_encryption_set_id").(string); diskEncryptionSetId != "" { diskName := d.Get("os_disk.0.name").(string) - log.Printf("[DEBUG] Updating encryption settings of OS Disk %q for Windows Virtual Machine %q (Resource Group %q) to %q..", diskName, id.Name, id.ResourceGroup, diskEncryptionSetId) + log.Printf("[DEBUG] Updating encryption settings of OS Disk %q for Windows %s to %q..", diskName, id, diskEncryptionSetId) encryptionType, err := retrieveDiskEncryptionSetEncryptionType(ctx, meta.(*clients.Client).Compute.DiskEncryptionSetsClient, diskEncryptionSetId) if err != nil { @@ -1581,7 +1581,7 @@ func resourceWindowsVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interfa disksClient := meta.(*clients.Client).Compute.DisksClient subscriptionId := meta.(*clients.Client).Account.SubscriptionId - id := disks.NewDiskID(subscriptionId, id.ResourceGroup, diskName) + id := disks.NewDiskID(subscriptionId, id.ResourceGroupName, diskName) update := disks.DiskUpdate{ Properties: &disks.DiskUpdateProperties{ @@ -1604,32 +1604,32 @@ func resourceWindowsVirtualMachineUpdate(d *pluginsdk.ResourceData, meta interfa } if shouldUpdate { - log.Printf("[DEBUG] Updating Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - future, err := client.Update(ctx, id.ResourceGroup, id.Name, update) + log.Printf("[DEBUG] Updating Windows %s", id) + future, err := client.Update(ctx, id.ResourceGroupName, id.VirtualMachineName, update) if err != nil { - return fmt.Errorf("updating Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("updating Windows %s: %+v", id, err) } if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for update of Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for update of Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Updated Windows Virtual Machine %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Updated Windows %s.", id) } // if we've shut it down and it was turned off, let's boot it back up if shouldTurnBackOn && (shouldShutDown || shouldDeallocate) { - log.Printf("[DEBUG] Starting Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - future, err := client.Start(ctx, id.ResourceGroup, id.Name) + log.Printf("[DEBUG] Starting Windows %s", id) + future, err := client.Start(ctx, id.ResourceGroupName, id.VirtualMachineName) if err != nil { - return fmt.Errorf("starting Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("starting Windows %s: %+v", id, err) } if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for start of Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for start of Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Started Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Started Windows %s", id) } return resourceWindowsVirtualMachineRead(d, meta) @@ -1640,47 +1640,47 @@ func resourceWindowsVirtualMachineDelete(d *pluginsdk.ResourceData, meta interfa ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineID(d.Id()) + id, err := commonids.ParseVirtualMachineID(d.Id()) if err != nil { return err } - locks.ByName(id.Name, VirtualMachineResourceName) - defer locks.UnlockByName(id.Name, VirtualMachineResourceName) + locks.ByName(id.VirtualMachineName, VirtualMachineResourceName) + defer locks.UnlockByName(id.VirtualMachineName, VirtualMachineResourceName) - log.Printf("[DEBUG] Retrieving Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + log.Printf("[DEBUG] Retrieving Windows %s", id) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { if utils.ResponseWasNotFound(existing.Response) { return nil } - return fmt.Errorf("retrieving Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Windows %s: %+v", id, err) } if !meta.(*clients.Client).Features.VirtualMachine.SkipShutdownAndForceDelete { // If the VM was in a Failed state we can skip powering off, since that'll fail if strings.EqualFold(*existing.ProvisioningState, "failed") { - log.Printf("[DEBUG] Powering Off Windows Virtual Machine was skipped because the VM was in %q state %q (Resource Group %q).", *existing.ProvisioningState, id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Powering Off Windows %s was skipped because the VM was in %q state", id, *existing.ProvisioningState) } else { // ISSUE: 4920 // shutting down the Virtual Machine prior to removing it means users are no longer charged for some Azure resources // thus this can be a large cost-saving when deleting larger instances // https://docs.microsoft.com/en-us/azure/virtual-machines/states-lifecycle - log.Printf("[DEBUG] Powering Off Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Powering Off Windows %s.", id) skipShutdown := !meta.(*clients.Client).Features.VirtualMachine.GracefulShutdown - powerOffFuture, err := client.PowerOff(ctx, id.ResourceGroup, id.Name, utils.Bool(skipShutdown)) + powerOffFuture, err := client.PowerOff(ctx, id.ResourceGroupName, id.VirtualMachineName, utils.Bool(skipShutdown)) if err != nil { - return fmt.Errorf("powering off Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("powering off Windows %s: %+v", id, err) } if err := powerOffFuture.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for power off of Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for power off of Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Powered Off Windows Virtual Machine %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Powered Off Windows %s", id) } } - log.Printf("[DEBUG] Deleting Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleting Windows %s", id) // Force Delete is in an opt-in Preview and can only be specified (true/false) if the feature is enabled // as such we default this to `nil` which matches the previous behaviour (where this isn't sent) and @@ -1689,18 +1689,18 @@ func resourceWindowsVirtualMachineDelete(d *pluginsdk.ResourceData, meta interfa if meta.(*clients.Client).Features.VirtualMachine.SkipShutdownAndForceDelete { forceDeletion = utils.Bool(true) } - deleteFuture, err := client.Delete(ctx, id.ResourceGroup, id.Name, forceDeletion) + deleteFuture, err := client.Delete(ctx, id.ResourceGroupName, id.VirtualMachineName, forceDeletion) if err != nil { - return fmt.Errorf("deleting Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("deleting Windows %s: %+v", id, err) } if err := deleteFuture.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for deletion of Windows Virtual Machine %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for deletion of Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Deleted Windows Virtual Machine %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleted Windows %s", id) deleteOSDisk := meta.(*clients.Client).Features.VirtualMachine.DeleteOSDiskOnDeletion if deleteOSDisk { - log.Printf("[DEBUG] Deleting OS Disk from Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleting OS Disk from Windows %s", id) disksClient := meta.(*clients.Client).Compute.DisksClient managedDiskId := "" if props := existing.VirtualMachineProperties; props != nil && props.StorageProfile != nil && props.StorageProfile.OsDisk != nil { @@ -1718,35 +1718,35 @@ func resourceWindowsVirtualMachineDelete(d *pluginsdk.ResourceData, meta interfa diskDeleteFuture, err := disksClient.Delete(ctx, *diskId) if err != nil { if !response.WasNotFound(diskDeleteFuture.HttpResponse) { - return fmt.Errorf("deleting OS Disk %q (Resource Group %q) for Windows Virtual Machine %q (Resource Group %q): %+v", diskId.DiskName, diskId.ResourceGroupName, id.Name, id.ResourceGroup, err) + return fmt.Errorf("deleting OS Disk %q (Resource Group %q) for Windows %s: %+v", diskId.DiskName, diskId.ResourceGroupName, id, err) } } if !response.WasNotFound(diskDeleteFuture.HttpResponse) { if err := diskDeleteFuture.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("OS Disk %q (Resource Group %q) for Windows Virtual Machine %q (Resource Group %q): %+v", diskId.DiskName, diskId.ResourceGroupName, id.Name, id.ResourceGroup, err) + return fmt.Errorf("OS Disk %s for Windows %s: %+v", diskId, id, err) } } - log.Printf("[DEBUG] Deleted OS Disk from Windows Virtual Machine %q (Resource Group %q).", diskId.DiskName, diskId.ResourceGroupName) + log.Printf("[DEBUG] Deleted OS Disk from Windows %s.", id) } else { - log.Printf("[DEBUG] Skipping Deleting OS Disk from Windows Virtual Machine %q (Resource Group %q) - cannot determine OS Disk ID.", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Skipping Deleting OS Disk from Windows %s - cannot determine OS Disk ID.", id) } } else { - log.Printf("[DEBUG] Skipping Deleting OS Disk from Windows Virtual Machine %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Skipping Deleting OS Disk from Windows %s", id) } // Need to add a get and a state wait to avoid bug in network API where the attached disk(s) are not actually deleted // Service team indicated that we need to do a get after VM delete call returns to verify that the VM and all attached // disks have actually been deleted. - log.Printf("[INFO] verifying Windows Virtual Machine %q has been deleted", id.Name) - virtualMachine, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + log.Printf("[INFO] verifying Windows %s has been deleted", id) + virtualMachine, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil && !utils.ResponseWasNotFound(virtualMachine.Response) { - return fmt.Errorf("verifying Windows Virtual Machine %q (Resource Group %q) has been deleted: %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("verifying Windows %s has been deleted: %+v", id, err) } if !utils.ResponseWasNotFound(virtualMachine.Response) { - log.Printf("[INFO] Windows Virtual Machine still exists, waiting on Windows Virtual Machine %q to be deleted", id.Name) + log.Printf("[INFO] Windows %s still exists, waiting on vm to be deleted", id) deleteWait := &pluginsdk.StateChangeConf{ Pending: []string{"200"}, @@ -1754,20 +1754,20 @@ func resourceWindowsVirtualMachineDelete(d *pluginsdk.ResourceData, meta interfa MinTimeout: 30 * time.Second, Timeout: d.Timeout(pluginsdk.TimeoutDelete), Refresh: func() (interface{}, string, error) { - log.Printf("[INFO] checking on state of Windows Virtual Machine %q", id.Name) - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + log.Printf("[INFO] checking on state of Windows %s", id) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { if utils.ResponseWasNotFound(resp.Response) { return resp, strconv.Itoa(resp.StatusCode), nil } - return nil, "nil", fmt.Errorf("polling for the status of Windows Virtual Machine %q (Resource Group %q): %v", id.Name, id.ResourceGroup, err) + return nil, "nil", fmt.Errorf("polling for the status of Windows %s: %v", id, err) } return resp, strconv.Itoa(resp.StatusCode), nil }, } if _, err := deleteWait.WaitForStateContext(ctx); err != nil { - return fmt.Errorf("waiting for the deletion of Windows Virtual Machine %q (Resource Group %q): %v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for the deletion of Windows %s: %v", id, err) } } diff --git a/internal/services/compute/windows_virtual_machine_scale_set_resource.go b/internal/services/compute/windows_virtual_machine_scale_set_resource.go index 9ed998dcdad34..bc8e32412aff1 100644 --- a/internal/services/compute/windows_virtual_machine_scale_set_resource.go +++ b/internal/services/compute/windows_virtual_machine_scale_set_resource.go @@ -8,6 +8,7 @@ import ( "log" "time" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/zones" @@ -20,7 +21,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/features" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/base64" @@ -40,7 +40,7 @@ func resourceWindowsVirtualMachineScaleSet() *pluginsdk.Resource { Delete: resourceWindowsVirtualMachineScaleSetDelete, Importer: pluginsdk.ImporterValidatingResourceIdThen(func(id string) error { - _, err := parse.VirtualMachineScaleSetID(id) + _, err := commonids.ParseVirtualMachineScaleSetID(id) return err }, importVirtualMachineScaleSet(compute.OperatingSystemTypesWindows, "azurerm_windows_virtual_machine_scale_set")), @@ -64,8 +64,8 @@ func resourceWindowsVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, meta ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() - id := parse.NewVirtualMachineScaleSetID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) - exists, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + id := commonids.NewVirtualMachineScaleSetID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + exists, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, "") if err != nil { if !utils.ResponseWasNotFound(exists.Response) { return fmt.Errorf("checking for existing Windows %s: %+v", id, err) @@ -160,7 +160,7 @@ func resourceWindowsVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, meta if len(errs) > 0 { return fmt.Errorf("unable to assume default computer name prefix %s. Please adjust the %q, or specify an explicit %q", errs[0], "name", "computer_name_prefix") } - computerNamePrefix = id.Name + computerNamePrefix = id.VirtualMachineScaleSetName } networkProfile := &compute.VirtualMachineScaleSetNetworkProfile{ @@ -451,7 +451,7 @@ func resourceWindowsVirtualMachineScaleSetCreate(d *pluginsdk.ResourceData, meta } log.Printf("[DEBUG] Creating Windows %s.", id) - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, props) + future, err := client.CreateOrUpdate(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, props) if err != nil { return fmt.Errorf("creating Windows %s: %+v", id, err) } @@ -472,7 +472,7 @@ func resourceWindowsVirtualMachineScaleSetUpdate(d *pluginsdk.ResourceData, meta ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } @@ -481,18 +481,18 @@ func resourceWindowsVirtualMachineScaleSetUpdate(d *pluginsdk.ResourceData, meta // retrieve // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { - return fmt.Errorf("retrieving Windows Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Windows %s: %+v", id, err) } if existing.VirtualMachineScaleSetProperties == nil { - return fmt.Errorf("retrieving Windows Virtual Machine Scale Set %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Windows %s: `properties` was nil", id) } if existing.VirtualMachineScaleSetProperties.VirtualMachineProfile == nil { - return fmt.Errorf("retrieving Windows Virtual Machine Scale Set %q (Resource Group %q): `properties.virtualMachineProfile` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Windows %s: `properties.virtualMachineProfile` was nil", id) } if existing.VirtualMachineScaleSetProperties.VirtualMachineProfile.StorageProfile == nil { - return fmt.Errorf("retrieving Windows Virtual Machine Scale Set %q (Resource Group %q): `properties.virtualMachineProfile,storageProfile` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Windows %s: `properties.virtualMachineProfile,storageProfile` was nil", id) } updateProps := compute.VirtualMachineScaleSetUpdateProperties{ @@ -827,24 +827,24 @@ func resourceWindowsVirtualMachineScaleSetRead(d *pluginsdk.ResourceData, meta i ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if utils.ResponseWasNotFound(resp.Response) { - log.Printf("[DEBUG] Windows Virtual Machine Scale Set %q was not found in Resource Group %q - removing from state!", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Windows %s was not found - removing from state!", id) d.SetId("") return nil } - return fmt.Errorf("retrieving Windows Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Windows %s: %+v", id, err) } - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) + d.Set("name", id.VirtualMachineScaleSetName) + d.Set("resource_group_name", id.ResourceGroupName) d.Set("location", location.NormalizeNilable(resp.Location)) d.Set("edge_zone", flattenEdgeZone(resp.ExtendedLocation)) d.Set("zones", zones.FlattenUntyped(resp.Zones)) @@ -873,7 +873,7 @@ func resourceWindowsVirtualMachineScaleSetRead(d *pluginsdk.ResourceData, meta i } if resp.VirtualMachineScaleSetProperties == nil { - return fmt.Errorf("retrieving Windows Virtual Machine Scale Set %q (Resource Group %q): `properties` was nil", id.Name, id.ResourceGroup) + return fmt.Errorf("retrieving Windows %s: `properties` was nil", id) } props := *resp.VirtualMachineScaleSetProperties @@ -1108,18 +1108,18 @@ func resourceWindowsVirtualMachineScaleSetDelete(d *pluginsdk.ResourceData, meta ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, "") if err != nil { if utils.ResponseWasNotFound(resp.Response) { return nil } - return fmt.Errorf("retrieving Windows Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving Windows %s: %+v", id, err) } // If rolling upgrades are configured and running we need to cancel them before trying to delete the VMSS @@ -1141,36 +1141,36 @@ func resourceWindowsVirtualMachineScaleSetDelete(d *pluginsdk.ResourceData, meta update := compute.VirtualMachineScaleSetUpdate{ Sku: resp.Sku, } - future, err := client.Update(ctx, id.ResourceGroup, id.Name, update) + future, err := client.Update(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, update) if err != nil { - return fmt.Errorf("updating number of instances in Windows Virtual Machine Scale Set %q (Resource Group %q) to scale to 0: %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("updating number of instances in Windows %s to scale to 0: %+v", id, err) } log.Printf("[DEBUG] Waiting for scaling of instances to 0 prior to deletion - this helps avoids networking issues within Azure") err = future.WaitForCompletionRef(ctx, client.Client) if err != nil { - return fmt.Errorf("waiting for number of instances in Windows Virtual Machine Scale Set %q (Resource Group %q) to scale to 0: %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for number of instances in Windows %s to scale to 0: %+v", id, err) } log.Printf("[DEBUG] Scaled instances to 0 prior to deletion - this helps avoids networking issues within Azure") } else { log.Printf("[DEBUG] Unable to scale instances to `0` since the `sku` block is nil - trying to delete anyway") } - log.Printf("[DEBUG] Deleting Windows Virtual Machine Scale Set %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleting Windows %s", id) // @ArcturusZhang (mimicking from windows_virtual_machine_pluginsdk.go): sending `nil` here omits this value from being sent // which matches the previous behaviour - we're only splitting this out so it's clear why // TODO: support force deletion once it's out of Preview, if applicable var forceDeletion *bool = nil - future, err := client.Delete(ctx, id.ResourceGroup, id.Name, forceDeletion) + future, err := client.Delete(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, forceDeletion) if err != nil { - return fmt.Errorf("deleting Windows Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("deleting Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Waiting for deletion of Windows Virtual Machine Scale Set %q (Resource Group %q)..", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Waiting for deletion of Windows %s.", id) if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for deletion of Windows Virtual Machine Scale Set %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("waiting for deletion of Windows %s: %+v", id, err) } - log.Printf("[DEBUG] Deleted Windows Virtual Machine Scale Set %q (Resource Group %q).", id.Name, id.ResourceGroup) + log.Printf("[DEBUG] Deleted Windows %s", id) return nil } diff --git a/internal/services/compute/windows_virtual_machine_scale_set_resource_other_test.go b/internal/services/compute/windows_virtual_machine_scale_set_resource_other_test.go index fc1957d606be5..67aa46def682b 100644 --- a/internal/services/compute/windows_virtual_machine_scale_set_resource_other_test.go +++ b/internal/services/compute/windows_virtual_machine_scale_set_resource_other_test.go @@ -10,11 +10,11 @@ import ( "testing" "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/tombuildsstuff/kermit/sdk/compute/2023-03-01/compute" ) @@ -943,12 +943,12 @@ func TestAccWindowsVirtualMachineScaleSet_otherCancelRollingUpgrades(t *testing. // and simulates the scenario where rolling upgrades are running when we try to delete a VMSS client := clients.Compute.VMScaleSetClient - id, err := parse.VirtualMachineScaleSetID(state.Attributes["id"]) + id, err := commonids.ParseVirtualMachineScaleSetID(state.Attributes["id"]) if err != nil { return err } - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { return fmt.Errorf("retrieving %s: %+v", *id, err) } @@ -974,7 +974,7 @@ func TestAccWindowsVirtualMachineScaleSet_otherCancelRollingUpgrades(t *testing. VirtualMachineScaleSetUpdateProperties: &updateProps, } - if _, err := client.Update(ctx, id.ResourceGroup, id.Name, update); err != nil { + if _, err := client.Update(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, update); err != nil { return fmt.Errorf("updating %s: %+v", *id, err) } diff --git a/internal/services/compute/windows_virtual_machine_scale_set_resource_test.go b/internal/services/compute/windows_virtual_machine_scale_set_resource_test.go index 99e91170c717e..9a9e32778a614 100644 --- a/internal/services/compute/windows_virtual_machine_scale_set_resource_test.go +++ b/internal/services/compute/windows_virtual_machine_scale_set_resource_test.go @@ -7,9 +7,9 @@ import ( "context" "fmt" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) @@ -17,14 +17,14 @@ import ( type WindowsVirtualMachineScaleSetResource struct{} func (r WindowsVirtualMachineScaleSetResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return nil, err } - resp, err := clients.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, "") + resp, err := clients.Compute.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, "") if err != nil { - return nil, fmt.Errorf("retrieving Compute Windows Virtual Machine Scale Set %q", id) + return nil, fmt.Errorf("retrieving Windows %s: %+v", id, err) } return utils.Bool(resp.ID != nil), nil diff --git a/internal/services/connections/managed_api_data_source.go b/internal/services/connections/managed_api_data_source.go index 930bb5c2e5615..b2f9806b4dc9a 100644 --- a/internal/services/connections/managed_api_data_source.go +++ b/internal/services/connections/managed_api_data_source.go @@ -49,7 +49,7 @@ func dataSourceManagedApiRead(d *schema.ResourceData, meta interface{}) error { location := location.Normalize(d.Get("location").(string)) id := managedapis.NewManagedApiID(subscriptionId, location, d.Get("name").(string)) - resp, err := client.ManagedApisGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("%s was not found", err) diff --git a/internal/services/containerapps/container_app_environment_data_source.go b/internal/services/containerapps/container_app_environment_data_source.go index 9f5281c38adfc..ebda8eb38d849 100644 --- a/internal/services/containerapps/container_app_environment_data_source.go +++ b/internal/services/containerapps/container_app_environment_data_source.go @@ -10,10 +10,12 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" "github.com/hashicorp/go-azure-sdk/resource-manager/containerapps/2023-05-01/managedenvironments" + "github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2020-08-01/workspaces" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -155,7 +157,12 @@ func (r ContainerAppEnvironmentDataSource) Read() sdk.ResourceFunc { } if appsLogs := props.AppLogsConfiguration; appsLogs != nil && appsLogs.LogAnalyticsConfiguration != nil { - environment.LogAnalyticsWorkspaceName = pointer.From(appsLogs.LogAnalyticsConfiguration.CustomerId) + lawClient := metadata.Client.LogAnalytics.SharedKeyWorkspacesClient + lawName, err := findLogAnalyticsWorkspaceName(ctx, lawClient, subscriptionId, pointer.From(appsLogs.LogAnalyticsConfiguration.CustomerId)) + if err != nil { + return fmt.Errorf("retrieving Log Analytics Workspace: %+v", err) + } + environment.LogAnalyticsWorkspaceName = lawName } environment.StaticIP = pointer.From(props.StaticIP) @@ -169,3 +176,28 @@ func (r ContainerAppEnvironmentDataSource) Read() sdk.ResourceFunc { }, } } + +func findLogAnalyticsWorkspaceName(ctx context.Context, client *workspaces.WorkspacesClient, subscriptionId, targetCustomerId string) (string, error) { + parsedSubscriptionId := commonids.NewSubscriptionID(subscriptionId) + + resp, err := client.List(ctx, parsedSubscriptionId) + if err != nil { + return "", err + } + + if resp.Model == nil { + return "", fmt.Errorf("model was nil") + } + + if resp.Model.Value == nil { + return "", fmt.Errorf("value was nil") + } + + for _, law := range *resp.Model.Value { + if law.Properties != nil && law.Properties.CustomerId != nil && *law.Properties.CustomerId == targetCustomerId && law.Name != nil { + return *law.Name, nil + } + } + + return "", fmt.Errorf("no matching workspace found") +} diff --git a/internal/services/containerapps/container_app_environment_data_source_test.go b/internal/services/containerapps/container_app_environment_data_source_test.go index 77ae2fe4237de..20eac4d9f338c 100644 --- a/internal/services/containerapps/container_app_environment_data_source_test.go +++ b/internal/services/containerapps/container_app_environment_data_source_test.go @@ -21,7 +21,7 @@ func TestAccContainerAppEnvironmentDataSource_basic(t *testing.T) { { Config: r.basic(data), Check: acceptance.ComposeTestCheckFunc( - check.That(data.ResourceName).Key("log_analytics_workspace_name").IsSet(), + check.That(data.ResourceName).Key("log_analytics_workspace_name").HasValue(fmt.Sprintf("acctestLAW-%d", data.RandomInteger)), check.That(data.ResourceName).Key("location").IsSet(), check.That(data.ResourceName).Key("internal_load_balancer_enabled").HasValue("true"), ), diff --git a/internal/services/containerapps/container_app_environment_resource.go b/internal/services/containerapps/container_app_environment_resource.go index 00252a5374ffe..d5c10f9269775 100644 --- a/internal/services/containerapps/container_app_environment_resource.go +++ b/internal/services/containerapps/container_app_environment_resource.go @@ -32,6 +32,7 @@ type ContainerAppEnvironmentModel struct { LogAnalyticsWorkspaceId string `tfschema:"log_analytics_workspace_id"` InfrastructureSubnetId string `tfschema:"infrastructure_subnet_id"` InternalLoadBalancerEnabled bool `tfschema:"internal_load_balancer_enabled"` + ZoneRedundant bool `tfschema:"zone_redundancy_enabled"` Tags map[string]interface{} `tfschema:"tags"` DefaultDomain string `tfschema:"default_domain"` @@ -95,11 +96,20 @@ func (r ContainerAppEnvironmentResource) Arguments() map[string]*pluginsdk.Schem }, "internal_load_balancer_enabled": { - Type: pluginsdk.TypeBool, - Optional: true, - ForceNew: true, - Default: false, - Description: "Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified.", + Type: pluginsdk.TypeBool, + Optional: true, + ForceNew: true, + Default: false, + RequiredWith: []string{"infrastructure_subnet_id"}, + Description: "Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified.", + }, + + "zone_redundancy_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + ForceNew: true, + Default: false, + RequiredWith: []string{"infrastructure_subnet_id"}, }, "tags": commonschema.Tags(), @@ -172,6 +182,7 @@ func (r ContainerAppEnvironmentResource) Create() sdk.ResourceFunc { Name: pointer.To(containerAppEnvironment.Name), Properties: &managedenvironments.ManagedEnvironmentProperties{ VnetConfiguration: &managedenvironments.VnetConfiguration{}, + ZoneRedundant: pointer.To(containerAppEnvironment.ZoneRedundant), }, Tags: tags.Expand(containerAppEnvironment.Tags), } @@ -265,6 +276,7 @@ func (r ContainerAppEnvironmentResource) Read() sdk.ResourceFunc { state.PlatformReservedDnsIP = pointer.From(vnet.PlatformReservedDnsIP) } + state.ZoneRedundant = pointer.From(props.ZoneRedundant) state.StaticIP = pointer.From(props.StaticIP) state.DefaultDomain = pointer.From(props.DefaultDomain) } diff --git a/internal/services/containerapps/container_app_environment_resource_test.go b/internal/services/containerapps/container_app_environment_resource_test.go index 8935cac5c6815..ecc8b8917fc0e 100644 --- a/internal/services/containerapps/container_app_environment_resource_test.go +++ b/internal/services/containerapps/container_app_environment_resource_test.go @@ -101,6 +101,21 @@ func TestAccContainerAppEnvironment_daprApplicationInsightsConnectionString(t *t }) } +func TestAccContainerAppEnvironment_zoneRedundant(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_container_app_environment", "test") + r := ContainerAppEnvironmentResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.completeZoneRedundant(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("log_analytics_workspace_id"), + }) +} + func (r ContainerAppEnvironmentResource) Exists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := managedenvironments.ParseManagedEnvironmentID(state.ID) if err != nil { @@ -199,6 +214,31 @@ resource "azurerm_container_app_environment" "test" { `, r.templateVNet(data), data.RandomInteger) } +func (r ContainerAppEnvironmentResource) completeZoneRedundant(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +%[1]s + +resource "azurerm_container_app_environment" "test" { + name = "acctest-CAEnv%[2]d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + log_analytics_workspace_id = azurerm_log_analytics_workspace.test.id + infrastructure_subnet_id = azurerm_subnet.control.id + zone_redundancy_enabled = true + internal_load_balancer_enabled = true + + tags = { + Foo = "Bar" + secret = "sauce" + } +} +`, r.templateVNet(data), data.RandomInteger) +} + func (r ContainerAppEnvironmentResource) daprApplicationInsightsConnectionString(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { diff --git a/internal/services/containerapps/container_app_resource_test.go b/internal/services/containerapps/container_app_resource_test.go index ade9bad6aac0f..e4a1e48a52667 100644 --- a/internal/services/containerapps/container_app_resource_test.go +++ b/internal/services/containerapps/container_app_resource_test.go @@ -303,6 +303,57 @@ func TestAccContainerAppResource_secretRemoveWithAddShouldFail(t *testing.T) { }) } +func TestAccContainerAppResource_scaleRules(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_container_app", "test") + r := ContainerAppResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.scaleRules(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccContainerAppResource_scaleRulesUpdate(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_container_app", "test") + r := ContainerAppResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.scaleRules(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.scaleRulesUpdate(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.basicWithRetainedSecret(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func (r ContainerAppResource) Exists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := containerapps.ParseContainerAppID(state.ID) if err != nil { @@ -342,6 +393,33 @@ resource "azurerm_container_app" "test" { `, r.template(data), data.RandomInteger) } +func (r ContainerAppResource) basicWithRetainedSecret(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_container_app" "test" { + name = "acctest-capp-%[2]d" + resource_group_name = azurerm_resource_group.test.name + container_app_environment_id = azurerm_container_app_environment.test.id + revision_mode = "Single" + + secret { + name = "queue-auth-secret" + value = "VGhpcyBJcyBOb3QgQSBHb29kIFBhc3N3b3JkCg==" + } + + template { + container { + name = "acctest-cont-%[2]d" + image = "jackofallops/azure-containerapps-python-acctest:v0.0.1" + cpu = 0.25 + memory = "0.5Gi" + } + } +} +`, r.template(data), data.RandomInteger) +} + func (r ContainerAppResource) withSystemIdentity(data acceptance.TestData) string { return fmt.Sprintf(` %s @@ -1325,6 +1403,145 @@ resource "azurerm_container_app" "test" { `, r.templatePlusExtras(data), data.RandomInteger, revisionSuffix) } +func (r ContainerAppResource) scaleRules(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_container_app" "test" { + name = "acctest-capp-%[2]d" + resource_group_name = azurerm_resource_group.test.name + container_app_environment_id = azurerm_container_app_environment.test.id + revision_mode = "Single" + + secret { + name = "queue-auth-secret" + value = "VGhpcyBJcyBOb3QgQSBHb29kIFBhc3N3b3JkCg==" + } + + template { + container { + name = "acctest-cont-%[2]d" + image = "jackofallops/azure-containerapps-python-acctest:v0.0.1" + cpu = 0.25 + memory = "0.5Gi" + } + + azure_queue_scale_rule { + name = "azq-1" + queue_name = "foo" + queue_length = 10 + + authentication { + secret_name = "queue-auth-secret" + trigger_parameter = "password" + } + } + + custom_scale_rule { + name = "csr-1" + custom_rule_type = "azure-monitor" + metadata = { + foo = "bar" + } + } + + http_scale_rule { + name = "http-1" + concurrent_requests = "100" + } + + tcp_scale_rule { + name = "tcp-1" + concurrent_requests = "1000" + } + } +} +`, r.template(data), data.RandomInteger) +} + +func (r ContainerAppResource) scaleRulesUpdate(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_container_app" "test" { + name = "acctest-capp-%[2]d" + resource_group_name = azurerm_resource_group.test.name + container_app_environment_id = azurerm_container_app_environment.test.id + revision_mode = "Single" + + secret { + name = "queue-auth-secret" + value = "VGhpcyBJcyBOb3QgQSBHb29kIFBhc3N3b3JkCg==" + } + + template { + container { + name = "acctest-cont-%[2]d" + image = "jackofallops/azure-containerapps-python-acctest:v0.0.1" + cpu = 0.25 + memory = "0.5Gi" + } + + azure_queue_scale_rule { + name = "azq-1" + queue_name = "foo" + queue_length = 10 + + authentication { + secret_name = "queue-auth-secret" + trigger_parameter = "password" + } + } + + azure_queue_scale_rule { + name = "azq-2" + queue_name = "bar" + queue_length = 20 + + authentication { + secret_name = "queue-auth-secret" + trigger_parameter = "another_password" + } + } + + custom_scale_rule { + name = "csr-1" + custom_rule_type = "rabbitmq" + + metadata = { + foo = "bar" + } + + authentication { + secret_name = "queue-auth-secret" + trigger_parameter = "password" + } + } + + http_scale_rule { + name = "http-1" + concurrent_requests = "200" + + authentication { + secret_name = "queue-auth-secret" + trigger_parameter = "password" + } + } + + tcp_scale_rule { + name = "tcp-1" + concurrent_requests = "1000" + + authentication { + secret_name = "queue-auth-secret" + trigger_parameter = "password" + } + } + } +} +`, r.template(data), data.RandomInteger) +} + func (ContainerAppResource) template(data acceptance.TestData) string { return ContainerAppEnvironmentResource{}.basic(data) } diff --git a/internal/services/containerapps/helpers/container_apps.go b/internal/services/containerapps/helpers/container_apps.go index f088b5508df84..8584503f08ff9 100644 --- a/internal/services/containerapps/helpers/container_apps.go +++ b/internal/services/containerapps/helpers/container_apps.go @@ -669,11 +669,15 @@ func ContainerAppEnvironmentDaprMetadataSchema() *pluginsdk.Schema { } type ContainerTemplate struct { - Containers []Container `tfschema:"container"` - Suffix string `tfschema:"revision_suffix"` - MinReplicas int `tfschema:"min_replicas"` - MaxReplicas int `tfschema:"max_replicas"` - Volumes []ContainerVolume `tfschema:"volume"` + Containers []Container `tfschema:"container"` + Suffix string `tfschema:"revision_suffix"` + MinReplicas int `tfschema:"min_replicas"` + MaxReplicas int `tfschema:"max_replicas"` + AzureQueueScaleRules []AzureQueueScaleRule `tfschema:"azure_queue_scale_rule"` + CustomScaleRules []CustomScaleRule `tfschema:"custom_scale_rule"` + HTTPScaleRules []HTTPScaleRule `tfschema:"http_scale_rule"` + TCPScaleRules []TCPScaleRule `tfschema:"tcp_scale_rule"` + Volumes []ContainerVolume `tfschema:"volume"` } func ContainerTemplateSchema() *pluginsdk.Schema { @@ -701,6 +705,14 @@ func ContainerTemplateSchema() *pluginsdk.Schema { Description: "The maximum number of replicas for this container.", }, + "azure_queue_scale_rule": AzureQueueScaleRuleSchema(), + + "custom_scale_rule": CustomScaleRuleSchema(), + + "http_scale_rule": HTTPScaleRuleSchema(), + + "tcp_scale_rule": TCPScaleRuleSchema(), + "volume": ContainerVolumeSchema(), "revision_suffix": { @@ -734,12 +746,19 @@ func ContainerTemplateSchemaComputed() *pluginsdk.Schema { Description: "The maximum number of replicas for this container.", }, - "volume": ContainerVolumeSchema(), + "azure_queue_scale_rule": AzureQueueScaleRuleSchemaComputed(), + + "custom_scale_rule": CustomScaleRuleSchemaComputed(), + + "http_scale_rule": HTTPScaleRuleSchemaComputed(), + + "tcp_scale_rule": TCPScaleRuleSchemaComputed(), + + "volume": ContainerVolumeSchemaComputed(), "revision_suffix": { - Type: pluginsdk.TypeString, - Computed: true, - Description: "The suffix for the revision. This value must be unique for the lifetime of the Resource. If omitted the service will use a hash function to create one.", + Type: pluginsdk.TypeString, + Computed: true, }, }, }, @@ -771,6 +790,14 @@ func ExpandContainerAppTemplate(input []ContainerTemplate, metadata sdk.Resource template.Scale.MinReplicas = pointer.To(int64(config.MinReplicas)) } + if rules := config.expandContainerAppScaleRules(); len(rules) != 0 { + if template.Scale == nil { + template.Scale = &containerapps.Scale{} + } + + template.Scale.Rules = pointer.To(rules) + } + if config.Suffix != "" { if metadata.ResourceData.HasChange("template.0.revision_suffix") { template.RevisionSuffix = pointer.To(config.Suffix) @@ -793,6 +820,7 @@ func FlattenContainerAppTemplate(input *containerapps.Template) []ContainerTempl if scale := input.Scale; scale != nil { result.MaxReplicas = int(pointer.From(scale.MaxReplicas)) result.MinReplicas = int(pointer.From(scale.MinReplicas)) + result.flattenContainerAppScaleRules(scale.Rules) } return []ContainerTemplate{result} @@ -1074,6 +1102,31 @@ func ContainerVolumeSchema() *pluginsdk.Schema { } } +func ContainerVolumeSchemaComputed() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "storage_type": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "storage_name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + }, + }, + } +} + func expandContainerAppVolumes(input []ContainerVolume) *[]containerapps.Volume { if input == nil { return nil @@ -2347,3 +2400,617 @@ func ContainerAppProbesRemoved(metadata sdk.ResourceMetaData) bool { return !(hasLiveness || hasReadiness || hasStartup) } + +type AzureQueueScaleRule struct { + Name string `tfschema:"name"` + QueueLength int `tfschema:"queue_length"` + QueueName string `tfschema:"queue_name"` + Authentications []ScaleRuleAuthentication `tfschema:"authentication"` +} + +func AzureQueueScaleRuleSchema() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "queue_length": { + Type: pluginsdk.TypeInt, + Required: true, + ValidateFunc: validation.IntAtLeast(1), + }, + + "queue_name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "authentication": { + Type: pluginsdk.TypeList, + Required: true, + MinItems: 1, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validate.SecretName, + }, + + "trigger_parameter": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + }, + }, + }, + }, + }, + } +} +func AzureQueueScaleRuleSchemaComputed() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "queue_length": { + Type: pluginsdk.TypeInt, + Computed: true, + }, + + "queue_name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "authentication": { + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "trigger_parameter": { + Type: pluginsdk.TypeString, + Computed: true, + }, + }, + }, + }, + }, + }, + } +} + +type CustomScaleRule struct { + Name string `tfschema:"name"` + Metadata map[string]string `tfschema:"metadata"` + CustomRuleType string `tfschema:"custom_rule_type"` + Authentications []ScaleRuleAuthentication `tfschema:"authentication"` +} + +func CustomScaleRuleSchema() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "metadata": { + Type: pluginsdk.TypeMap, + Required: true, + Elem: &pluginsdk.Schema{ + Type: pluginsdk.TypeString, + }, + }, + + "custom_rule_type": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringInSlice([]string{ + "activemq", "artemis-queue", "kafka", "pulsar", "aws-cloudwatch", + "aws-dynamodb", "aws-dynamodb-streams", "aws-kinesis-stream", "aws-sqs-queue", + "azure-app-insights", "azure-blob", "azure-data-explorer", "azure-eventhub", + "azure-log-analytics", "azure-monitor", "azure-pipelines", "azure-servicebus", + "azure-queue", "cassandra", "cpu", "cron", "datadog", "elasticsearch", "external", + "external-push", "gcp-stackdriver", "gcp-storage", "gcp-pubsub", "graphite", "http", + "huawei-cloudeye", "ibmmq", "influxdb", "kubernetes-workload", "liiklus", "memory", + "metrics-api", "mongodb", "mssql", "mysql", "nats-jetstream", "stan", "tcp", "new-relic", + "openstack-metric", "openstack-swift", "postgresql", "predictkube", "prometheus", + "rabbitmq", "redis", "redis-cluster", "redis-sentinel", "redis-streams", + "redis-cluster-streams", "redis-sentinel-streams", "selenium-grid", + "solace-event-queue", "github-runner", + }, false), // Note - this can be any KEDA compatible source in a user's environment + }, + + "authentication": { + Type: pluginsdk.TypeList, + Optional: true, + MinItems: 1, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validate.SecretName, + }, + + "trigger_parameter": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + }, + }, + }, + }, + }, + } +} + +func CustomScaleRuleSchemaComputed() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "metadata": { + Type: pluginsdk.TypeMap, + Computed: true, + Elem: &pluginsdk.Schema{ + Type: pluginsdk.TypeString, + }, + }, + + "custom_rule_type": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "authentication": { + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "trigger_parameter": { + Type: pluginsdk.TypeString, + Computed: true, + }, + }, + }, + }, + }, + }, + } +} + +type HTTPScaleRule struct { + Name string `tfschema:"name"` + ConcurrentRequests string `tfschema:"concurrent_requests"` + Authentications []ScaleRuleAuthentication `tfschema:"authentication"` +} + +func HTTPScaleRuleSchema() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "concurrent_requests": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validate.ContainerAppScaleRuleConcurrentRequests, + }, + + "authentication": { + Type: pluginsdk.TypeList, + Optional: true, + MinItems: 1, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validate.SecretName, + }, + + "trigger_parameter": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + }, + }, + }, + }, + }, + } +} + +func HTTPScaleRuleSchemaComputed() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "concurrent_requests": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "authentication": { + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "trigger_parameter": { + Type: pluginsdk.TypeString, + Computed: true, + }, + }, + }, + }, + }, + }, + } +} + +type TCPScaleRule struct { + Name string `tfschema:"name"` + ConcurrentRequests string `tfschema:"concurrent_requests"` + Authentications []ScaleRuleAuthentication `tfschema:"authentication"` +} + +func TCPScaleRuleSchema() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "concurrent_requests": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validate.ContainerAppScaleRuleConcurrentRequests, + }, + + "authentication": { + Type: pluginsdk.TypeList, + Optional: true, + MinItems: 1, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validate.SecretName, + }, + + "trigger_parameter": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + }, + }, + }, + }, + }, + } +} + +func TCPScaleRuleSchemaComputed() *pluginsdk.Schema { + return &pluginsdk.Schema{ + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "concurrent_requests": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "authentication": { + Type: pluginsdk.TypeList, + Computed: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "secret_name": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "trigger_parameter": { + Type: pluginsdk.TypeString, + Computed: true, + }, + }, + }, + }, + }, + }, + } +} + +type ScaleRuleAuthentication struct { + SecretRef string `tfschema:"secret_name"` + TriggerParam string `tfschema:"trigger_parameter"` +} + +func (c *ContainerTemplate) expandContainerAppScaleRules() []containerapps.ScaleRule { + if len(c.AzureQueueScaleRules) == 0 && len(c.CustomScaleRules) == 0 && len(c.HTTPScaleRules) == 0 && len(c.TCPScaleRules) == 0 { + return nil + } + result := make([]containerapps.ScaleRule, 0) + for _, v := range c.AzureQueueScaleRules { + r := containerapps.ScaleRule{ + Name: pointer.To(v.Name), + AzureQueue: &containerapps.QueueScaleRule{ + QueueLength: pointer.To(int64(v.QueueLength)), + QueueName: pointer.To(v.QueueName), + }, + } + + auths := make([]containerapps.ScaleRuleAuth, 0) + for _, a := range v.Authentications { + auth := containerapps.ScaleRuleAuth{ + TriggerParameter: pointer.To(a.TriggerParam), + SecretRef: pointer.To(a.SecretRef), + } + auths = append(auths, auth) + } + + r.AzureQueue.Auth = pointer.To(auths) + + result = append(result, r) + } + + for _, v := range c.CustomScaleRules { + r := containerapps.ScaleRule{ + Name: pointer.To(v.Name), + Custom: &containerapps.CustomScaleRule{ + Metadata: &v.Metadata, + Type: pointer.To(v.CustomRuleType), + }, + } + + auths := make([]containerapps.ScaleRuleAuth, 0) + for _, a := range v.Authentications { + auth := containerapps.ScaleRuleAuth{ + TriggerParameter: pointer.To(a.TriggerParam), + SecretRef: pointer.To(a.SecretRef), + } + auths = append(auths, auth) + } + + r.Custom.Auth = pointer.To(auths) + + result = append(result, r) + } + + for _, v := range c.HTTPScaleRules { + metaData := make(map[string]string, 0) + metaData["concurrentRequests"] = v.ConcurrentRequests + r := containerapps.ScaleRule{ + Name: pointer.To(v.Name), + HTTP: &containerapps.HTTPScaleRule{ + Metadata: pointer.To(metaData), + }, + } + + auths := make([]containerapps.ScaleRuleAuth, 0) + for _, a := range v.Authentications { + auth := containerapps.ScaleRuleAuth{ + TriggerParameter: pointer.To(a.TriggerParam), + SecretRef: pointer.To(a.SecretRef), + } + auths = append(auths, auth) + } + + r.HTTP.Auth = pointer.To(auths) + + result = append(result, r) + } + + for _, v := range c.TCPScaleRules { + metaData := make(map[string]string, 0) + metaData["concurrentRequests"] = v.ConcurrentRequests + r := containerapps.ScaleRule{ + Name: pointer.To(v.Name), + Tcp: &containerapps.TcpScaleRule{ + Metadata: pointer.To(metaData), + }, + } + + auths := make([]containerapps.ScaleRuleAuth, 0) + for _, a := range v.Authentications { + auth := containerapps.ScaleRuleAuth{ + TriggerParameter: pointer.To(a.TriggerParam), + SecretRef: pointer.To(a.SecretRef), + } + auths = append(auths, auth) + } + + r.Tcp.Auth = pointer.To(auths) + + result = append(result, r) + } + + return result +} + +func (c *ContainerTemplate) flattenContainerAppScaleRules(input *[]containerapps.ScaleRule) { + if input != nil && len(*input) != 0 { + rules := *input + azureQueueScaleRules := make([]AzureQueueScaleRule, 0) + customScaleRules := make([]CustomScaleRule, 0) + httpScaleRules := make([]HTTPScaleRule, 0) + tcpScaleRules := make([]TCPScaleRule, 0) + for _, v := range rules { + if q := v.AzureQueue; q != nil { + rule := AzureQueueScaleRule{ + Name: pointer.From(v.Name), + QueueLength: int(pointer.From(q.QueueLength)), + QueueName: pointer.From(q.QueueName), + } + + authentications := make([]ScaleRuleAuthentication, 0) + if auths := q.Auth; auths != nil { + for _, a := range *auths { + authentications = append(authentications, ScaleRuleAuthentication{ + SecretRef: pointer.From(a.SecretRef), + TriggerParam: pointer.From(a.TriggerParameter), + }) + } + } + + rule.Authentications = authentications + + azureQueueScaleRules = append(azureQueueScaleRules, rule) + continue + } + + if r := v.Custom; r != nil { + rule := CustomScaleRule{ + Name: pointer.From(v.Name), + Metadata: pointer.From(r.Metadata), + CustomRuleType: pointer.From(r.Type), + } + + authentications := make([]ScaleRuleAuthentication, 0) + if auths := r.Auth; auths != nil { + for _, a := range *auths { + authentications = append(authentications, ScaleRuleAuthentication{ + SecretRef: pointer.From(a.SecretRef), + TriggerParam: pointer.From(a.TriggerParameter), + }) + } + } + rule.Authentications = authentications + + customScaleRules = append(customScaleRules, rule) + continue + } + + if r := v.HTTP; r != nil { + metaData := pointer.From(r.Metadata) + concurrentReqs := "" + + if m, ok := metaData["concurrentRequests"]; ok { + concurrentReqs = m + } + + rule := HTTPScaleRule{ + Name: pointer.From(v.Name), + ConcurrentRequests: concurrentReqs, + } + + authentications := make([]ScaleRuleAuthentication, 0) + if auths := r.Auth; auths != nil { + for _, a := range *auths { + authentications = append(authentications, ScaleRuleAuthentication{ + SecretRef: pointer.From(a.SecretRef), + TriggerParam: pointer.From(a.TriggerParameter), + }) + } + } + + rule.Authentications = authentications + + httpScaleRules = append(httpScaleRules, rule) + continue + } + + if r := v.Tcp; r != nil { + metaData := pointer.From(r.Metadata) + concurrentReqs := "" + + if m, ok := metaData["concurrentRequests"]; ok { + concurrentReqs = m + } + + rule := TCPScaleRule{ + Name: pointer.From(v.Name), + ConcurrentRequests: concurrentReqs, + } + + authentications := make([]ScaleRuleAuthentication, 0) + if auths := r.Auth; auths != nil { + for _, a := range *auths { + authentications = append(authentications, ScaleRuleAuthentication{ + SecretRef: pointer.From(a.SecretRef), + TriggerParam: pointer.From(a.TriggerParameter), + }) + } + } + rule.Authentications = authentications + + tcpScaleRules = append(tcpScaleRules, rule) + continue + } + } + + c.AzureQueueScaleRules = azureQueueScaleRules + c.CustomScaleRules = customScaleRules + c.HTTPScaleRules = httpScaleRules + c.TCPScaleRules = tcpScaleRules + } +} diff --git a/internal/services/containerapps/validate/validate.go b/internal/services/containerapps/validate/validate.go index b6147f522772b..8c43ef0fac758 100644 --- a/internal/services/containerapps/validate/validate.go +++ b/internal/services/containerapps/validate/validate.go @@ -6,6 +6,7 @@ package validate import ( "fmt" "regexp" + "strconv" "strings" ) @@ -138,3 +139,23 @@ func ContainerAppContainerName(i interface{}, k string) (warnings []string, erro } return } + +func ContainerAppScaleRuleConcurrentRequests(i interface{}, k string) (warnings []string, errors []error) { + v, ok := i.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected type of %s to be string", k)) + return + } + + c, err := strconv.Atoi(v) + if err != nil { + errors = append(errors, fmt.Errorf("expected %s to be a string representation of an integer, got %+v", k, v)) + return + } + + if c <= 0 { + errors = append(errors, fmt.Errorf("value for %s must be at least `1`, got %d", k, c)) + } + + return +} diff --git a/internal/services/containerapps/validate/validate_test.go b/internal/services/containerapps/validate/validate_test.go index 183e2c93f8c2d..44203f9dc88fb 100644 --- a/internal/services/containerapps/validate/validate_test.go +++ b/internal/services/containerapps/validate/validate_test.go @@ -274,3 +274,49 @@ func TestValidateInitTimeout(t *testing.T) { } } } + +func TestContainerAppScaleRuleConcurrentRequests(t *testing.T) { + cases := []struct { + Input string + Valid bool + }{ + { + Input: "5", + Valid: true, + }, + { + Input: "m", + Valid: false, + }, + { + Input: "6d", + Valid: false, + }, + { + Input: "10s", + Valid: false, + }, + { + Input: "1h", + Valid: false, + }, + { + Input: "1200s", + Valid: false, + }, + { + Input: "-1", + Valid: false, + }, + } + + for _, tc := range cases { + t.Logf("[DEBUG] Testing Value %s", tc.Input) + _, errors := ContainerAppScaleRuleConcurrentRequests(tc.Input, "test") + valid := len(errors) == 0 + + if tc.Valid != valid { + t.Fatalf("Expected %t but got %t for %s", tc.Valid, valid, tc.Input) + } + } +} diff --git a/internal/services/containers/kubernetes_cluster_auth_resource_test.go b/internal/services/containers/kubernetes_cluster_auth_resource_test.go index b01b2633d5ba2..cf9fdc6f85c5c 100644 --- a/internal/services/containers/kubernetes_cluster_auth_resource_test.go +++ b/internal/services/containers/kubernetes_cluster_auth_resource_test.go @@ -815,26 +815,26 @@ resource "azurerm_kubernetes_cluster" "test" { `, tenantId, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger) } -func (KubernetesClusterResource) roleBasedAccessControlAADManagedConfigVOneDotTwoFourDotNine(data acceptance.TestData, tenantId string) string { +func (KubernetesClusterResource) roleBasedAccessControlAADManagedConfigOlderKubernetesVersion(data acceptance.TestData, tenantId string) string { return fmt.Sprintf(` variable "tenant_id" { - default = "%s" + default = "%[1]s" } resource "azurerm_resource_group" "test" { - name = "acctestRG-aks-%d" - location = "%s" + name = "acctestRG-aks-%[3]d" + location = "%[2]s" } resource "azurerm_kubernetes_cluster" "test" { - name = "acctestaks%d" + name = "acctestaks%[3]d" location = "${azurerm_resource_group.test.location}" resource_group_name = "${azurerm_resource_group.test.name}" - dns_prefix = "acctestaks%d" - kubernetes_version = "1.24.9" + dns_prefix = "acctestaks%[3]d" + kubernetes_version = "%[4]s" linux_profile { - admin_username = "acctestuser%d" + admin_username = "acctestuser%[3]d" ssh_key { key_data = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqaZoyiz1qbdOQ8xEf6uEu1cCwYowo5FHtsBhqLoDnnp7KUTEBN+L2NxRIfQ781rxV6Iq5jSav6b2Q8z5KiseOlvKA/RF2wqU0UPYqQviQhLmW6THTpmrv/YkUCuzxDpsH7DUDhZcwySLKVVe0Qm3+5N2Ta6UYH3lsDf9R9wTP2K/+vAnflKebuypNlmocIvakFWoZda18FOmsOoIVXQ8HWFNCuw9ZCunMSN62QGamCe3dL5cXlkgHYv7ekJE15IA9aOJcM7e90oeTqo+7HTcWfdu0qQqPWY5ujyMw/llas8tsXY85LFqRnr3gJ02bAscjc477+X+j/gkpFoN1QEmt terraform@demo.tld" @@ -857,7 +857,7 @@ resource "azurerm_kubernetes_cluster" "test" { azure_rbac_enabled = false } } -`, tenantId, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger) +`, tenantId, data.Locations.Primary, data.RandomInteger, olderKubernetesVersion) } func (KubernetesClusterResource) roleBasedAccessControlAADManagedConfigWithLocalAccountDisabled(data acceptance.TestData, tenantId string) string { diff --git a/internal/services/containers/kubernetes_cluster_data_source_test.go b/internal/services/containers/kubernetes_cluster_data_source_test.go index 3754e5e29a018..374cdff2297cc 100644 --- a/internal/services/containers/kubernetes_cluster_data_source_test.go +++ b/internal/services/containers/kubernetes_cluster_data_source_test.go @@ -73,13 +73,13 @@ func TestAccDataSourceKubernetesCluster_roleBasedAccessControl(t *testing.T) { }) } -func TestAccDataSourceKubernetesCluster_roleBasedAccessControlAAD_VOneDotTwoFourDotNine(t *testing.T) { +func TestAccDataSourceKubernetesCluster_roleBasedAccessControlAAD_OlderKubernetesVersion(t *testing.T) { data := acceptance.BuildTestData(t, "data.azurerm_kubernetes_cluster", "test") r := KubernetesClusterDataSource{} data.DataSourceTest(t, []acceptance.TestStep{ { - Config: r.roleBasedAccessControlAADManagedConfigVOneDotTwoFourDotNine(data), + Config: r.roleBasedAccessControlAADManagedConfigOlderKubernetesVersion(data), Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).Key("kube_config.#").HasValue("1"), check.That(data.ResourceName).Key("kube_config.0.host").IsSet(), @@ -613,7 +613,7 @@ data "azurerm_kubernetes_cluster" "test" { `, KubernetesClusterResource{}.roleBasedAccessControlConfig(data)) } -func (KubernetesClusterDataSource) roleBasedAccessControlAADManagedConfigVOneDotTwoFourDotNine(data acceptance.TestData) string { +func (KubernetesClusterDataSource) roleBasedAccessControlAADManagedConfigOlderKubernetesVersion(data acceptance.TestData) string { return fmt.Sprintf(` %s @@ -621,7 +621,7 @@ data "azurerm_kubernetes_cluster" "test" { name = azurerm_kubernetes_cluster.test.name resource_group_name = azurerm_kubernetes_cluster.test.resource_group_name } -`, KubernetesClusterResource{}.roleBasedAccessControlAADManagedConfigVOneDotTwoFourDotNine(data, "")) +`, KubernetesClusterResource{}.roleBasedAccessControlAADManagedConfigOlderKubernetesVersion(data, "")) } func (KubernetesClusterDataSource) localAccountDisabled(data acceptance.TestData, tenantId string) string { diff --git a/internal/services/containers/kubernetes_cluster_network_resource_test.go b/internal/services/containers/kubernetes_cluster_network_resource_test.go index fa322b52e7d18..0de5188920490 100644 --- a/internal/services/containers/kubernetes_cluster_network_resource_test.go +++ b/internal/services/containers/kubernetes_cluster_network_resource_test.go @@ -826,6 +826,28 @@ func TestAccKubernetesCluster_networkPluginMode(t *testing.T) { }) } +func TestAccKubernetesCluster_networkPluginModeUpdate(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_kubernetes_cluster", "test") + r := KubernetesClusterResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.networkPluginBase(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.networkPluginMode(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccKubernetesCluster_ebpfDataPlane(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_kubernetes_cluster", "test") r := KubernetesClusterResource{} @@ -3521,6 +3543,52 @@ resource "azurerm_kubernetes_cluster" "test" { `, data.Locations.Primary, data.RandomInteger, ebpfDataPlaneValue) } +func (KubernetesClusterResource) networkPluginBase(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} +resource "azurerm_resource_group" "test" { + name = "acctestRG-aks-%[2]d" + location = "%[1]s" +} + +resource "azurerm_virtual_network" "test" { + name = "acctestRG-vnet-%[2]d" + address_space = ["10.0.0.0/8"] + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name +} + +resource "azurerm_subnet" "test" { + name = "acctestRG-subnet-%[2]d" + resource_group_name = azurerm_resource_group.test.name + virtual_network_name = azurerm_virtual_network.test.name + address_prefixes = ["10.10.0.0/16"] + +} + +resource "azurerm_kubernetes_cluster" "test" { + name = "acctestaks%[2]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + dns_prefix = "acctestaks%[2]d" + default_node_pool { + name = "default" + node_count = 1 + vm_size = "Standard_DS2_v2" + vnet_subnet_id = azurerm_subnet.test.id + } + identity { + type = "SystemAssigned" + } + network_profile { + network_plugin = "azure" + } +} +`, "westcentralus", data.RandomInteger) +} + func (KubernetesClusterResource) networkPluginMode(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { diff --git a/internal/services/containers/kubernetes_cluster_resource.go b/internal/services/containers/kubernetes_cluster_resource.go index 7e904aea50482..067f87c652aee 100644 --- a/internal/services/containers/kubernetes_cluster_resource.go +++ b/internal/services/containers/kubernetes_cluster_resource.go @@ -53,10 +53,19 @@ func resourceKubernetesCluster() *pluginsdk.Resource { Update: resourceKubernetesClusterUpdate, Delete: resourceKubernetesClusterDelete, - Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { - _, err := commonids.ParseKubernetesClusterID(id) - return err - }), + Importer: pluginsdk.ImporterValidatingResourceIdThen( + func(id string) error { + _, err := commonids.ParseKubernetesClusterID(id) + return err + }, + // TODO 4.0: we're defaulting this at import time because the property is non-functional. + // In the lead up to 4.0 planning if the feature still isn't functional we should look at + // removing this entirely. + func(ctx context.Context, d *pluginsdk.ResourceData, meta interface{}) ([]*pluginsdk.ResourceData, error) { + d.Set("public_network_access_enabled", true) + return []*pluginsdk.ResourceData{d}, nil + }, + ), CustomizeDiff: pluginsdk.CustomDiffInSequence( // Migration of `identity` to `service_principal` is not allowed, the other way around is @@ -96,6 +105,9 @@ func resourceKubernetesCluster() *pluginsdk.Resource { } return nil }, + pluginsdk.ForceNewIfChange("network_profile.0.network_plugin_mode", func(ctx context.Context, _, new, meta interface{}) bool { + return !strings.EqualFold(new.(string), string(managedclusters.NetworkPluginModeOverlay)) + }), ), Timeouts: &pluginsdk.ResourceTimeout{ @@ -1063,7 +1075,6 @@ func resourceKubernetesCluster() *pluginsdk.Resource { "network_plugin_mode": { Type: pluginsdk.TypeString, Optional: true, - ForceNew: true, ValidateFunc: validation.StringInSlice([]string{ string(managedclusters.NetworkPluginModeOverlay), }, false), @@ -1537,7 +1548,6 @@ func resourceKubernetesCluster() *pluginsdk.Resource { resource.Schema["network_profile"].Elem.(*pluginsdk.Resource).Schema["network_plugin_mode"] = &pluginsdk.Schema{ Type: pluginsdk.TypeString, Optional: true, - ForceNew: true, ValidateFunc: validation.StringInSlice([]string{ string(managedclusters.NetworkPluginModeOverlay), "Overlay", diff --git a/internal/services/containers/kubernetes_cluster_resource_test.go b/internal/services/containers/kubernetes_cluster_resource_test.go index 8bc179ba33093..a80305c21403e 100644 --- a/internal/services/containers/kubernetes_cluster_resource_test.go +++ b/internal/services/containers/kubernetes_cluster_resource_test.go @@ -21,10 +21,10 @@ import ( type KubernetesClusterResource struct{} var ( - olderKubernetesVersion = "1.24.9" - currentKubernetesVersion = "1.25.5" - olderKubernetesVersionAlias = "1.24" - currentKubernetesVersionAlias = "1.25" + olderKubernetesVersion = "1.25.11" + currentKubernetesVersion = "1.26.6" + olderKubernetesVersionAlias = "1.25" + currentKubernetesVersionAlias = "1.26" ) func TestAccKubernetesCluster_hostEncryption(t *testing.T) { @@ -538,13 +538,13 @@ resource "azurerm_kubernetes_cluster" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, maxSurge) } -func TestAccResourceKubernetesCluster_roleBasedAccessControlAAD_VOneDotTwoFourDotNine(t *testing.T) { +func TestAccResourceKubernetesCluster_roleBasedAccessControlAAD_OlderKubernetesVersion(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_kubernetes_cluster", "test") r := KubernetesClusterResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { - Config: r.roleBasedAccessControlAADManagedConfigVOneDotTwoFourDotNine(data, ""), + Config: r.roleBasedAccessControlAADManagedConfigOlderKubernetesVersion(data, ""), Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).Key("kube_config.#").HasValue("1"), check.That(data.ResourceName).Key("kube_config.0.host").IsSet(), diff --git a/internal/services/cosmos/client/client.go b/internal/services/cosmos/client/client.go index 476227d8c0ff6..d900f944c9c81 100644 --- a/internal/services/cosmos/client/client.go +++ b/internal/services/cosmos/client/client.go @@ -7,10 +7,10 @@ import ( "fmt" "github.com/Azure/azure-sdk-for-go/services/cosmos-db/mgmt/2021-10-15/documentdb" // nolint: staticcheck - "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras" "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/sqldedicatedgateway" "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-11-15/mongorbacs" "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/cosmosdb" + "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras" "github.com/hashicorp/go-azure-sdk/resource-manager/postgresqlhsc/2022-11-08/clusters" "github.com/hashicorp/go-azure-sdk/resource-manager/postgresqlhsc/2022-11-08/configurations" "github.com/hashicorp/go-azure-sdk/resource-manager/postgresqlhsc/2022-11-08/firewallrules" @@ -20,14 +20,13 @@ import ( type Client struct { CassandraClient *documentdb.CassandraResourcesClient - CassandraClustersClient *managedcassandras.ManagedCassandrasClient - CassandraDatacentersClient *documentdb.CassandraDataCentersClient ClustersClient *clusters.ClustersClient ConfigurationsClient *configurations.ConfigurationsClient CosmosDBClient *cosmosdb.CosmosDBClient DatabaseClient *documentdb.DatabaseAccountsClient FirewallRulesClient *firewallrules.FirewallRulesClient GremlinClient *documentdb.GremlinResourcesClient + ManagedCassandraClient *managedcassandras.ManagedCassandrasClient MongoDbClient *documentdb.MongoDBResourcesClient MongoRBACClient *mongorbacs.MongorbacsClient NotebookWorkspaceClient *documentdb.NotebookWorkspacesClient @@ -43,11 +42,8 @@ func NewClient(o *common.ClientOptions) (*Client, error) { cassandraClient := documentdb.NewCassandraResourcesClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) o.ConfigureClient(&cassandraClient.Client, o.ResourceManagerAuthorizer) - cassandraClustersClient := managedcassandras.NewManagedCassandrasClientWithBaseURI(o.ResourceManagerEndpoint) - o.ConfigureClient(&cassandraClustersClient.Client, o.ResourceManagerAuthorizer) - - cassandraDatacentersClient := documentdb.NewCassandraDataCentersClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) - o.ConfigureClient(&cassandraDatacentersClient.Client, o.ResourceManagerAuthorizer) + managedCassandraClient := managedcassandras.NewManagedCassandrasClientWithBaseURI(o.ResourceManagerEndpoint) + o.ConfigureClient(&managedCassandraClient.Client, o.ResourceManagerAuthorizer) clustersClient, err := clusters.NewClustersClientWithBaseURI(o.Environment.ResourceManager) if err != nil { @@ -108,8 +104,7 @@ func NewClient(o *common.ClientOptions) (*Client, error) { return &Client{ CassandraClient: &cassandraClient, - CassandraClustersClient: &cassandraClustersClient, - CassandraDatacentersClient: &cassandraDatacentersClient, + ManagedCassandraClient: &managedCassandraClient, ClustersClient: clustersClient, ConfigurationsClient: configurationsClient, CosmosDBClient: &cosmosdbClient, diff --git a/internal/services/cosmos/cosmosdb_account_resource.go b/internal/services/cosmos/cosmosdb_account_resource.go index 0895e96c1e0b5..f24fbbd52b8fa 100644 --- a/internal/services/cosmos/cosmosdb_account_resource.go +++ b/internal/services/cosmos/cosmosdb_account_resource.go @@ -40,10 +40,14 @@ import ( var CosmosDbAccountResourceName = "azurerm_cosmosdb_account" var connStringPropertyMap = map[string]string{ - "Primary SQL Connection String": "primary_sql_connection_string", - "Secondary SQL Connection String": "secondary_sql_connection_string", - "Primary Read-Only SQL Connection String": "primary_readonly_sql_connection_string", - "Secondary Read-Only SQL Connection String": "secondary_readonly_sql_connection_string", + "Primary SQL Connection String": "primary_sql_connection_string", + "Secondary SQL Connection String": "secondary_sql_connection_string", + "Primary Read-Only SQL Connection String": "primary_readonly_sql_connection_string", + "Secondary Read-Only SQL Connection String": "secondary_readonly_sql_connection_string", + "Primary MongoDB Connection String": "primary_mongodb_connection_string", + "Secondary MongoDB Connection String": "secondary_mongodb_connection_string", + "Primary Read-Only MongoDB Connection String": "primary_readonly_mongodb_connection_string", + "Secondary Read-Only MongoDB Connection String": "secondary_readonly_mongodb_connection_string", } type databaseAccountCapabilities string @@ -677,6 +681,30 @@ func resourceCosmosDbAccount() *pluginsdk.Resource { Sensitive: true, }, + "primary_mongodb_connection_string": { + Type: pluginsdk.TypeString, + Computed: true, + Sensitive: true, + }, + + "secondary_mongodb_connection_string": { + Type: pluginsdk.TypeString, + Computed: true, + Sensitive: true, + }, + + "primary_readonly_mongodb_connection_string": { + Type: pluginsdk.TypeString, + Computed: true, + Sensitive: true, + }, + + "secondary_readonly_mongodb_connection_string": { + Type: pluginsdk.TypeString, + Computed: true, + Sensitive: true, + }, + "tags": tags.Schema(), }, } diff --git a/internal/services/cosmos/cosmosdb_cassandra_cluster_resource.go b/internal/services/cosmos/cosmosdb_cassandra_cluster_resource.go index 54a8a89f8c474..e6c56f9011b09 100644 --- a/internal/services/cosmos/cosmosdb_cassandra_cluster_resource.go +++ b/internal/services/cosmos/cosmosdb_cassandra_cluster_resource.go @@ -16,7 +16,7 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/identity" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" - "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras" + "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" @@ -142,7 +142,7 @@ func resourceCassandraCluster() *pluginsdk.Resource { } func resourceCassandraClusterCreate(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Cosmos.CassandraClustersClient + client := meta.(*clients.Client).Cosmos.ManagedCassandraClient subscriptionId := meta.(*clients.Client).Account.SubscriptionId ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() @@ -205,7 +205,7 @@ func resourceCassandraClusterCreate(d *pluginsdk.ResourceData, meta interface{}) } func resourceCassandraClusterRead(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Cosmos.CassandraClustersClient + client := meta.(*clients.Client).Cosmos.ManagedCassandraClient ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() @@ -269,7 +269,7 @@ func resourceCassandraClusterRead(d *pluginsdk.ResourceData, meta interface{}) e } func resourceCassandraClusterUpdate(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Cosmos.CassandraClustersClient + client := meta.(*clients.Client).Cosmos.ManagedCassandraClient subscriptionId := meta.(*clients.Client).Account.SubscriptionId ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() @@ -338,7 +338,7 @@ func resourceCassandraClusterUpdate(d *pluginsdk.ResourceData, meta interface{}) } func resourceCassandraClusterDelete(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Cosmos.CassandraClustersClient + client := meta.(*clients.Client).Cosmos.ManagedCassandraClient ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() diff --git a/internal/services/cosmos/cosmosdb_cassandra_cluster_resource_test.go b/internal/services/cosmos/cosmosdb_cassandra_cluster_resource_test.go index 1b81a69cd569e..e6a2b93e01610 100644 --- a/internal/services/cosmos/cosmosdb_cassandra_cluster_resource_test.go +++ b/internal/services/cosmos/cosmosdb_cassandra_cluster_resource_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras" + "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" @@ -95,7 +95,7 @@ func (t CassandraClusterResource) Exists(ctx context.Context, clients *clients.C return nil, err } - resp, err := clients.Cosmos.CassandraClustersClient.CassandraClustersGet(ctx, *id) + resp, err := clients.Cosmos.ManagedCassandraClient.CassandraClustersGet(ctx, *id) if err != nil { return nil, fmt.Errorf("reading %q: %+v", id, err) } diff --git a/internal/services/cosmos/cosmosdb_cassandra_datacenter_resource.go b/internal/services/cosmos/cosmosdb_cassandra_datacenter_resource.go index 94f46250fab11..9d84be0f23e3d 100644 --- a/internal/services/cosmos/cosmosdb_cassandra_datacenter_resource.go +++ b/internal/services/cosmos/cosmosdb_cassandra_datacenter_resource.go @@ -9,15 +9,14 @@ import ( "log" "time" - "github.com/Azure/azure-sdk-for-go/services/cosmos-db/mgmt/2021-10-15/documentdb" // nolint: staticcheck "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" + "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/cosmos/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/cosmos/validate" keyVaultValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/keyvault/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" @@ -34,7 +33,7 @@ func resourceCassandraDatacenter() *pluginsdk.Resource { Delete: resourceCassandraDatacenterDelete, Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { - _, err := parse.CassandraDatacenterID(id) + _, err := managedcassandras.ParseDataCenterID(id) return err }), @@ -120,37 +119,40 @@ func resourceCassandraDatacenter() *pluginsdk.Resource { } func resourceCassandraDatacenterCreate(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Cosmos.CassandraDatacentersClient + client := meta.(*clients.Client).Cosmos.ManagedCassandraClient ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() - clusterId, _ := parse.CassandraClusterID(d.Get("cassandra_cluster_id").(string)) - id := parse.NewCassandraDatacenterID(clusterId.SubscriptionId, clusterId.ResourceGroup, clusterId.Name, d.Get("name").(string)) + clusterId, err := managedcassandras.ParseCassandraClusterID(d.Get("cassandra_cluster_id").(string)) + if err != nil { + return err + } + id := managedcassandras.NewDataCenterID(clusterId.SubscriptionId, clusterId.ResourceGroupName, clusterId.CassandraClusterName, d.Get("name").(string)) - existing, err := client.Get(ctx, id.ResourceGroup, id.CassandraClusterName, id.DataCenterName) + existing, err := client.CassandraDataCentersGet(ctx, id) if err != nil { - if !utils.ResponseWasNotFound(existing.Response) { + if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } } - if !utils.ResponseWasNotFound(existing.Response) { + if !response.WasNotFound(existing.HttpResponse) { return tf.ImportAsExistsError("azurerm_cosmosdb_cassandra_datacenter", id.ID()) } - body := documentdb.DataCenterResource{ - Properties: &documentdb.DataCenterResourceProperties{ - DelegatedSubnetID: utils.String(d.Get("delegated_management_subnet_id").(string)), - NodeCount: utils.Int32(int32(d.Get("node_count").(int))), + body := managedcassandras.DataCenterResource{ + Properties: &managedcassandras.DataCenterResourceProperties{ + DelegatedSubnetId: utils.String(d.Get("delegated_management_subnet_id").(string)), + NodeCount: utils.Int64(int64(d.Get("node_count").(int))), Sku: utils.String(d.Get("sku_name").(string)), AvailabilityZone: utils.Bool(d.Get("availability_zones_enabled").(bool)), - DiskCapacity: utils.Int32(int32(d.Get("disk_count").(int))), + DiskCapacity: utils.Int64(int64(d.Get("disk_count").(int))), DiskSku: utils.String(d.Get("disk_sku").(string)), DataCenterLocation: utils.String(azure.NormalizeLocation(d.Get("location").(string))), }, } if v, ok := d.GetOk("backup_storage_customer_key_uri"); ok { - body.Properties.BackupStorageCustomerKeyURI = utils.String(v.(string)) + body.Properties.BackupStorageCustomerKeyUri = utils.String(v.(string)) } if v, ok := d.GetOk("base64_encoded_yaml_fragment"); ok { @@ -158,35 +160,30 @@ func resourceCassandraDatacenterCreate(d *pluginsdk.ResourceData, meta interface } if v, ok := d.GetOk("managed_disk_customer_key_uri"); ok { - body.Properties.ManagedDiskCustomerKeyURI = utils.String(v.(string)) + body.Properties.ManagedDiskCustomerKeyUri = utils.String(v.(string)) } - future, err := client.CreateUpdate(ctx, id.ResourceGroup, id.CassandraClusterName, id.DataCenterName, body) - if err != nil { + if err = client.CassandraDataCentersCreateUpdateThenPoll(ctx, id, body); err != nil { return fmt.Errorf("creating %q: %+v", id, err) } - if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting on creation for %q: %+v", id, err) - } - d.SetId(id.ID()) return resourceCassandraDatacenterRead(d, meta) } func resourceCassandraDatacenterRead(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Cosmos.CassandraDatacentersClient + client := meta.(*clients.Client).Cosmos.ManagedCassandraClient ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.CassandraDatacenterID(d.Id()) + id, err := managedcassandras.ParseDataCenterID(d.Id()) if err != nil { return err } - resp, err := client.Get(ctx, id.ResourceGroup, id.CassandraClusterName, id.DataCenterName) + resp, err := client.CassandraDataCentersGet(ctx, *id) if err != nil { - if utils.ResponseWasNotFound(resp.Response) { + if response.WasNotFound(resp.HttpResponse) { log.Printf("[INFO] Error reading %q - removing from state", id) d.SetId("") return nil @@ -195,16 +192,16 @@ func resourceCassandraDatacenterRead(d *pluginsdk.ResourceData, meta interface{} return fmt.Errorf("reading %q: %+v", id, err) } - clusterId := parse.NewCassandraClusterID(id.SubscriptionId, id.ResourceGroup, id.CassandraClusterName) + clusterId := managedcassandras.NewCassandraClusterID(id.SubscriptionId, id.ResourceGroupName, id.CassandraClusterName) d.Set("name", id.DataCenterName) d.Set("cassandra_cluster_id", clusterId.ID()) - if props := resp.Properties; props != nil { - if res := props; res != nil { - d.Set("delegated_management_subnet_id", props.DelegatedSubnetID) + if model := resp.Model; model != nil { + if props := model.Properties; props != nil { + d.Set("delegated_management_subnet_id", props.DelegatedSubnetId) d.Set("location", location.NormalizeNilable(props.DataCenterLocation)) - d.Set("backup_storage_customer_key_uri", props.BackupStorageCustomerKeyURI) + d.Set("backup_storage_customer_key_uri", props.BackupStorageCustomerKeyUri) d.Set("base64_encoded_yaml_fragment", props.Base64EncodedCassandraYamlFragment) - d.Set("managed_disk_customer_key_uri", props.ManagedDiskCustomerKeyURI) + d.Set("managed_disk_customer_key_uri", props.ManagedDiskCustomerKeyUri) d.Set("node_count", props.NodeCount) d.Set("disk_count", int(*props.DiskCapacity)) d.Set("disk_sku", props.DiskSku) @@ -216,26 +213,26 @@ func resourceCassandraDatacenterRead(d *pluginsdk.ResourceData, meta interface{} } func resourceCassandraDatacenterUpdate(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Cosmos.CassandraDatacentersClient + client := meta.(*clients.Client).Cosmos.ManagedCassandraClient ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.CassandraDatacenterID(d.Id()) + id, err := managedcassandras.ParseDataCenterID(d.Id()) if err != nil { return err } - body := documentdb.DataCenterResource{ - Properties: &documentdb.DataCenterResourceProperties{ - DelegatedSubnetID: utils.String(d.Get("delegated_management_subnet_id").(string)), - NodeCount: utils.Int32(int32(d.Get("node_count").(int))), + body := managedcassandras.DataCenterResource{ + Properties: &managedcassandras.DataCenterResourceProperties{ + DelegatedSubnetId: utils.String(d.Get("delegated_management_subnet_id").(string)), + NodeCount: utils.Int64(int64(d.Get("node_count").(int))), DataCenterLocation: utils.String(azure.NormalizeLocation(d.Get("location").(string))), DiskSku: utils.String(d.Get("disk_sku").(string)), }, } if v, ok := d.GetOk("backup_storage_customer_key_uri"); ok { - body.Properties.BackupStorageCustomerKeyURI = utils.String(v.(string)) + body.Properties.BackupStorageCustomerKeyUri = utils.String(v.(string)) } if v, ok := d.GetOk("base64_encoded_yaml_fragment"); ok { @@ -243,26 +240,21 @@ func resourceCassandraDatacenterUpdate(d *pluginsdk.ResourceData, meta interface } if v, ok := d.GetOk("managed_disk_customer_key_uri"); ok { - body.Properties.ManagedDiskCustomerKeyURI = utils.String(v.(string)) + body.Properties.ManagedDiskCustomerKeyUri = utils.String(v.(string)) } - future, err := client.CreateUpdate(ctx, id.ResourceGroup, id.CassandraClusterName, id.DataCenterName, body) - if err != nil { + if err := client.CassandraDataCentersCreateUpdateThenPoll(ctx, *id, body); err != nil { return fmt.Errorf("updating %q: %+v", id, err) } - if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting on update for %q: %+v", id, err) - } - // Issue: https://github.com/Azure/azure-rest-api-specs/issues/19078 // There is a long running issue on updating this resource. // The API cannot update the property after WaitForCompletionRef is returned. // It has to wait a while after that. Then the property can be updated successfully. stateConf := &pluginsdk.StateChangeConf{ Delay: 1 * time.Minute, - Pending: []string{string(documentdb.ManagedCassandraProvisioningStateUpdating)}, - Target: []string{string(documentdb.ManagedCassandraProvisioningStateSucceeded)}, + Pending: []string{string(managedcassandras.ManagedCassandraProvisioningStateUpdating)}, + Target: []string{string(managedcassandras.ManagedCassandraProvisioningStateSucceeded)}, Refresh: cassandraDatacenterStateRefreshFunc(ctx, client, *id), MinTimeout: 15 * time.Second, Timeout: d.Timeout(pluginsdk.TimeoutUpdate), @@ -276,39 +268,33 @@ func resourceCassandraDatacenterUpdate(d *pluginsdk.ResourceData, meta interface } func resourceCassandraDatacenterDelete(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Cosmos.CassandraDatacentersClient + client := meta.(*clients.Client).Cosmos.ManagedCassandraClient ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.CassandraDatacenterID(d.Id()) + id, err := managedcassandras.ParseDataCenterID(d.Id()) if err != nil { return err } - future, err := client.Delete(ctx, id.ResourceGroup, id.CassandraClusterName, id.DataCenterName) - if err != nil { - if !response.WasNotFound(future.Response()) { - return fmt.Errorf("deleting %q: %+v", id, err) - } - } - - err = future.WaitForCompletionRef(ctx, client.Client) - if err != nil { - return fmt.Errorf("waiting on deleting for %q: %+v", id, err) + if err := client.CassandraDataCentersDeleteThenPoll(ctx, *id); err != nil { + return fmt.Errorf("deleting %q: %+v", id, err) } return nil } -func cassandraDatacenterStateRefreshFunc(ctx context.Context, client *documentdb.CassandraDataCentersClient, id parse.CassandraDatacenterId) pluginsdk.StateRefreshFunc { +func cassandraDatacenterStateRefreshFunc(ctx context.Context, client *managedcassandras.ManagedCassandrasClient, id managedcassandras.DataCenterId) pluginsdk.StateRefreshFunc { return func() (interface{}, string, error) { - res, err := client.Get(ctx, id.ResourceGroup, id.CassandraClusterName, id.DataCenterName) + res, err := client.CassandraDataCentersGet(ctx, id) if err != nil { return nil, "", fmt.Errorf("polling for %s: %+v", id, err) } - if res.Properties != nil && res.Properties.ProvisioningState != "" { - return res, string(res.Properties.ProvisioningState), nil + if model := res.Model; model != nil { + if model.Properties != nil && model.Properties.ProvisioningState != nil { + return res, string(*model.Properties.ProvisioningState), nil + } } return nil, "", fmt.Errorf("unable to read provisioning state") } diff --git a/internal/services/cosmos/cosmosdb_cassandra_datacenter_resource_test.go b/internal/services/cosmos/cosmosdb_cassandra_datacenter_resource_test.go index c2df549bdd10a..4e1f10b31cb3d 100644 --- a/internal/services/cosmos/cosmosdb_cassandra_datacenter_resource_test.go +++ b/internal/services/cosmos/cosmosdb_cassandra_datacenter_resource_test.go @@ -8,10 +8,10 @@ import ( "fmt" "testing" + "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/cosmos/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) @@ -56,17 +56,17 @@ func testAccCassandraDatacenter_update(t *testing.T) { } func (t CassandraDatacenterResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.CassandraDatacenterID(state.ID) + id, err := managedcassandras.ParseDataCenterID(state.ID) if err != nil { return nil, err } - resp, err := clients.Cosmos.CassandraDatacentersClient.Get(ctx, id.ResourceGroup, id.CassandraClusterName, id.DataCenterName) + resp, err := clients.Cosmos.ManagedCassandraClient.CassandraDataCentersGet(ctx, *id) if err != nil { return nil, fmt.Errorf("reading %q: %+v", id, err) } - return utils.Bool(resp.ID != nil), nil + return utils.Bool(resp.Model != nil), nil } func (r CassandraDatacenterResource) basic(data acceptance.TestData, nodeCount int) string { diff --git a/internal/services/cosmos/cosmosdb_mongo_database_resource_test.go b/internal/services/cosmos/cosmosdb_mongo_database_resource_test.go index 8ecb42b9bb5b8..50b3d7a1055a9 100644 --- a/internal/services/cosmos/cosmosdb_mongo_database_resource_test.go +++ b/internal/services/cosmos/cosmosdb_mongo_database_resource_test.go @@ -28,6 +28,7 @@ func TestAccCosmosDbMongoDatabase_basic(t *testing.T) { Config: r.basic(data), Check: acceptance.ComposeAggregateTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), + checkAccCosmosDBAccount_mongodb("azurerm_cosmosdb_account.test"), ), }, data.ImportStep(), @@ -43,6 +44,7 @@ func TestAccCosmosDbMongoDatabase_complete(t *testing.T) { Config: r.complete(data), Check: acceptance.ComposeAggregateTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), + checkAccCosmosDBAccount_mongodb("azurerm_cosmosdb_account.test"), ), }, data.ImportStep(), @@ -90,6 +92,7 @@ func TestAccCosmosDbMongoDatabase_serverless(t *testing.T) { Config: r.serverless(data), Check: acceptance.ComposeAggregateTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), + checkAccCosmosDBAccount_mongodb("azurerm_cosmosdb_account.test"), ), }, data.ImportStep(), @@ -161,3 +164,12 @@ resource "azurerm_cosmosdb_mongo_database" "test" { } `, CosmosDBAccountResource{}.capabilities(data, documentdb.DatabaseAccountKindMongoDB, []string{"EnableServerless", "mongoEnableDocLevelTTL", "EnableMongo"}), data.RandomInteger) } + +func checkAccCosmosDBAccount_mongodb(resourceName string) acceptance.TestCheckFunc { + return acceptance.ComposeTestCheckFunc( + check.That(resourceName).Key("primary_mongodb_connection_string").Exists(), + check.That(resourceName).Key("secondary_mongodb_connection_string").Exists(), + check.That(resourceName).Key("primary_readonly_mongodb_connection_string").Exists(), + check.That(resourceName).Key("secondary_readonly_mongodb_connection_string").Exists(), + ) +} diff --git a/internal/services/cosmos/parse/cassandra_datacenter.go b/internal/services/cosmos/parse/cassandra_datacenter.go deleted file mode 100644 index 424bfd3c09cb8..0000000000000 --- a/internal/services/cosmos/parse/cassandra_datacenter.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - "strings" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -type CassandraDatacenterId struct { - SubscriptionId string - ResourceGroup string - CassandraClusterName string - DataCenterName string -} - -func NewCassandraDatacenterID(subscriptionId, resourceGroup, cassandraClusterName, dataCenterName string) CassandraDatacenterId { - return CassandraDatacenterId{ - SubscriptionId: subscriptionId, - ResourceGroup: resourceGroup, - CassandraClusterName: cassandraClusterName, - DataCenterName: dataCenterName, - } -} - -func (id CassandraDatacenterId) String() string { - segments := []string{ - fmt.Sprintf("Data Center Name %q", id.DataCenterName), - fmt.Sprintf("Cassandra Cluster Name %q", id.CassandraClusterName), - fmt.Sprintf("Resource Group %q", id.ResourceGroup), - } - segmentsStr := strings.Join(segments, " / ") - return fmt.Sprintf("%s: (%s)", "Cassandra Datacenter", segmentsStr) -} - -func (id CassandraDatacenterId) ID() string { - fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.DocumentDB/cassandraClusters/%s/dataCenters/%s" - return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.CassandraClusterName, id.DataCenterName) -} - -// CassandraDatacenterID parses a CassandraDatacenter ID into an CassandraDatacenterId struct -func CassandraDatacenterID(input string) (*CassandraDatacenterId, error) { - id, err := resourceids.ParseAzureResourceID(input) - if err != nil { - return nil, fmt.Errorf("parsing %q as an CassandraDatacenter ID: %+v", input, err) - } - - resourceId := CassandraDatacenterId{ - SubscriptionId: id.SubscriptionID, - ResourceGroup: id.ResourceGroup, - } - - if resourceId.SubscriptionId == "" { - return nil, fmt.Errorf("ID was missing the 'subscriptions' element") - } - - if resourceId.ResourceGroup == "" { - return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") - } - - if resourceId.CassandraClusterName, err = id.PopSegment("cassandraClusters"); err != nil { - return nil, err - } - if resourceId.DataCenterName, err = id.PopSegment("dataCenters"); err != nil { - return nil, err - } - - if err := id.ValidateNoEmptySegments(input); err != nil { - return nil, err - } - - return &resourceId, nil -} diff --git a/internal/services/cosmos/parse/cassandra_datacenter_test.go b/internal/services/cosmos/parse/cassandra_datacenter_test.go deleted file mode 100644 index 22fe38b0bfc55..0000000000000 --- a/internal/services/cosmos/parse/cassandra_datacenter_test.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "testing" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -var _ resourceids.Id = CassandraDatacenterId{} - -func TestCassandraDatacenterIDFormatter(t *testing.T) { - actual := NewCassandraDatacenterID("12345678-1234-9876-4563-123456789012", "resGroup1", "cluster1", "dc1").ID() - expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1/dataCenters/dc1" - if actual != expected { - t.Fatalf("Expected %q but got %q", expected, actual) - } -} - -func TestCassandraDatacenterID(t *testing.T) { - testData := []struct { - Input string - Error bool - Expected *CassandraDatacenterId - }{ - - { - // empty - Input: "", - Error: true, - }, - - { - // missing SubscriptionId - Input: "/", - Error: true, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Error: true, - }, - - { - // missing ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", - Error: true, - }, - - { - // missing value for ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", - Error: true, - }, - - { - // missing CassandraClusterName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/", - Error: true, - }, - - { - // missing value for CassandraClusterName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/", - Error: true, - }, - - { - // missing DataCenterName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1/", - Error: true, - }, - - { - // missing value for DataCenterName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1/dataCenters/", - Error: true, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1/dataCenters/dc1", - Expected: &CassandraDatacenterId{ - SubscriptionId: "12345678-1234-9876-4563-123456789012", - ResourceGroup: "resGroup1", - CassandraClusterName: "cluster1", - DataCenterName: "dc1", - }, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.DOCUMENTDB/CASSANDRACLUSTERS/CLUSTER1/DATACENTERS/DC1", - Error: true, - }, - } - - for _, v := range testData { - t.Logf("[DEBUG] Testing %q", v.Input) - - actual, err := CassandraDatacenterID(v.Input) - if err != nil { - if v.Error { - continue - } - - t.Fatalf("Expect a value but got an error: %s", err) - } - if v.Error { - t.Fatal("Expect an error but didn't get one") - } - - if actual.SubscriptionId != v.Expected.SubscriptionId { - t.Fatalf("Expected %q but got %q for SubscriptionId", v.Expected.SubscriptionId, actual.SubscriptionId) - } - if actual.ResourceGroup != v.Expected.ResourceGroup { - t.Fatalf("Expected %q but got %q for ResourceGroup", v.Expected.ResourceGroup, actual.ResourceGroup) - } - if actual.CassandraClusterName != v.Expected.CassandraClusterName { - t.Fatalf("Expected %q but got %q for CassandraClusterName", v.Expected.CassandraClusterName, actual.CassandraClusterName) - } - if actual.DataCenterName != v.Expected.DataCenterName { - t.Fatalf("Expected %q but got %q for DataCenterName", v.Expected.DataCenterName, actual.DataCenterName) - } - } -} diff --git a/internal/services/cosmos/resourceids.go b/internal/services/cosmos/resourceids.go index 560e68ca9dba9..a6df8e80ca55a 100644 --- a/internal/services/cosmos/resourceids.go +++ b/internal/services/cosmos/resourceids.go @@ -21,4 +21,3 @@ package cosmos //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=SqlTrigger -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resourceGroup1/providers/Microsoft.DocumentDB/databaseAccounts/account1/sqlDatabases/database1/containers/container1/triggers/trigger1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=Table -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/databaseAccounts/acc1/tables/table1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=CassandraCluster -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1 -//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=CassandraDatacenter -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1/dataCenters/dc1 diff --git a/internal/services/cosmos/validate/cassandra_datacenter_id.go b/internal/services/cosmos/validate/cassandra_datacenter_id.go deleted file mode 100644 index 06e08724e8b6a..0000000000000 --- a/internal/services/cosmos/validate/cassandra_datacenter_id.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - - "github.com/hashicorp/terraform-provider-azurerm/internal/services/cosmos/parse" -) - -func CassandraDatacenterID(input interface{}, key string) (warnings []string, errors []error) { - v, ok := input.(string) - if !ok { - errors = append(errors, fmt.Errorf("expected %q to be a string", key)) - return - } - - if _, err := parse.CassandraDatacenterID(v); err != nil { - errors = append(errors, err) - } - - return -} diff --git a/internal/services/datafactory/data_factory.go b/internal/services/datafactory/data_factory.go index eb1c95309be48..5f86c953ef538 100644 --- a/internal/services/datafactory/data_factory.go +++ b/internal/services/datafactory/data_factory.go @@ -145,9 +145,9 @@ func flattenDataFactoryVariables(input map[string]*datafactory.VariableSpecifica // DatasetColumn describes the attributes needed to specify a structure column for a dataset type DatasetColumn struct { - Name string `json:"name,omitempty"` - Description string `json:"description,omitempty"` - Type string `json:"type,omitempty"` + Name string `json:"name,omitempty" tfschema:"name"` + Description string `json:"description,omitempty" tfschema:"description"` + Type string `json:"type,omitempty" tfschema:"type"` } func expandDataFactoryDatasetStructure(input []interface{}) interface{} { @@ -197,6 +197,34 @@ func flattenDataFactoryStructureColumns(input interface{}) []interface{} { return output } +func flattenDataFactoryStructureColumnsToDatasetColumn(input interface{}) []DatasetColumn { + output := make([]DatasetColumn, 0) + + columns, ok := input.([]interface{}) + if !ok { + return output + } + + for _, v := range columns { + column, ok := v.(map[string]interface{}) + if !ok { + continue + } + var result DatasetColumn + if column["name"] != nil { + result.Name = column["name"].(string) + } + if column["type"] != nil { + result.Type = column["type"].(string) + } + if column["description"] != nil { + result.Description = column["description"].(string) + } + output = append(output, result) + } + return output +} + // DatasetSnowflakeSchemaColumn describes the attributes needed to specify a Snowflake schema column for a dataset type DatasetSnowflakeSchemaColumn struct { Name string `json:"name,omitempty"` @@ -424,18 +452,14 @@ func expandDataFactoryDatasetAzureBlobFSLocation(d *pluginsdk.ResourceData) data props := azureBlobFsLocations[0].(map[string]interface{}) - blobStorageLocation := datafactory.AzureBlobFSLocation{ - FileSystem: props["file_system"].(string), + blobFSLocation := datafactory.AzureBlobFSLocation{ Type: datafactory.TypeBasicDatasetLocationTypeAzureBlobFSLocation, - } - if path := props["path"].(string); len(path) > 0 { - blobStorageLocation.FolderPath = path - } - if filename := props["filename"].(string); len(filename) > 0 { - blobStorageLocation.FileName = filename + FileSystem: expandDataFactoryExpressionResultType(props["file_system"].(string), props["dynamic_file_system_enabled"].(bool)), + FolderPath: expandDataFactoryExpressionResultType(props["path"].(string), props["dynamic_path_enabled"].(bool)), + FileName: expandDataFactoryExpressionResultType(props["filename"].(string), props["dynamic_filename_enabled"].(bool)), } - return blobStorageLocation + return blobFSLocation } func flattenDataFactoryDatasetHTTPServerLocation(input *datafactory.HTTPServerLocation) []interface{} { @@ -490,31 +514,25 @@ func flattenDataFactoryDatasetAzureBlobFSLocation(input *datafactory.AzureBlobFS if input == nil { return []interface{}{} } + result := make(map[string]interface{}) - fileSystem, path, fileName := "", "", "" if input.FileSystem != nil { - if v, ok := input.FileSystem.(string); ok { - fileSystem = v - } + fileSystem, dynamicFileSystemEnabled := flattenDataFactoryExpressionResultType(input.FileSystem) + result["file_system"] = fileSystem + result["dynamic_file_system_enabled"] = dynamicFileSystemEnabled } if input.FolderPath != nil { - if v, ok := input.FolderPath.(string); ok { - path = v - } + path, dynamicPathEnabled := flattenDataFactoryExpressionResultType(input.FolderPath) + result["path"] = path + result["dynamic_path_enabled"] = dynamicPathEnabled } if input.FileName != nil { - if v, ok := input.FileName.(string); ok { - fileName = v - } + filename, dynamicFilenameEnabled := flattenDataFactoryExpressionResultType(input.FileName) + result["filename"] = filename + result["dynamic_filename_enabled"] = dynamicFilenameEnabled } - return []interface{}{ - map[string]interface{}{ - "file_system": fileSystem, - "path": path, - "filename": fileName, - }, - } + return []interface{}{result} } func flattenDataFactoryDatasetSFTPLocation(input *datafactory.SftpLocation) []interface{} { diff --git a/internal/services/datafactory/data_factory_dataset_azure_sql_table_resource.go b/internal/services/datafactory/data_factory_dataset_azure_sql_table_resource.go new file mode 100644 index 0000000000000..33ff7be45ecd5 --- /dev/null +++ b/internal/services/datafactory/data_factory_dataset_azure_sql_table_resource.go @@ -0,0 +1,459 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package datafactory + +import ( + "context" + "fmt" + "log" + "time" + + "github.com/Azure/azure-sdk-for-go/services/datafactory/mgmt/2018-06-01/datafactory" // nolint: staticcheck + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-sdk/resource-manager/datafactory/2018-06-01/factories" + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/datafactory/parse" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/datafactory/validate" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +var _ sdk.Resource = DataFactoryDatasetAzureSQLTableResource{} + +type DataFactoryDatasetAzureSQLTableResource struct{} + +type DataFactoryDatasetAzureSQLTableResourceSchema struct { + Name string `tfschema:"name"` + DataFactoryId string `tfschema:"data_factory_id"` + LinkedServiceId string `tfschema:"linked_service_id"` + Schema string `tfschema:"schema"` + Table string `tfschema:"table"` + Parameters map[string]interface{} `tfschema:"parameters"` + Description string `tfschema:"description"` + Annotations []string `tfschema:"annotations"` + Folder string `tfschema:"folder"` + AdditionalProperties map[string]interface{} `tfschema:"additional_properties"` + SchemaColumn []DatasetColumn `tfschema:"schema_column"` +} + +func (DataFactoryDatasetAzureSQLTableResource) Arguments() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.LinkedServiceDatasetName, + }, + + "data_factory_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: factories.ValidateFactoryID, + }, + + "linked_service_id": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validate.LinkedServiceID, + }, + + "schema": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "table": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "parameters": { + Type: pluginsdk.TypeMap, + Optional: true, + Elem: &pluginsdk.Schema{ + Type: pluginsdk.TypeString, + }, + }, + + "description": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "annotations": { + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Schema{ + Type: pluginsdk.TypeString, + }, + }, + + "folder": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "additional_properties": { + Type: pluginsdk.TypeMap, + Optional: true, + Elem: &pluginsdk.Schema{ + Type: pluginsdk.TypeString, + }, + }, + + "schema_column": { + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + "type": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice([]string{ + "Byte", + "Byte[]", + "Boolean", + "Date", + "DateTime", + "DateTimeOffset", + "Decimal", + "Double", + "Guid", + "Int16", + "Int32", + "Int64", + "Single", + "String", + "TimeSpan", + }, false), + }, + "description": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + }, + }, + }, + } +} + +func (DataFactoryDatasetAzureSQLTableResource) Attributes() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{} +} + +func (DataFactoryDatasetAzureSQLTableResource) ModelObject() interface{} { + return &DataFactoryDatasetAzureSQLTableResourceSchema{} +} + +func (DataFactoryDatasetAzureSQLTableResource) ResourceType() string { + return "azurerm_data_factory_dataset_azure_sql_table" +} + +func (r DataFactoryDatasetAzureSQLTableResource) Create() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.DataFactory.DatasetClient + subscriptionId := client.SubscriptionID + var data DataFactoryDatasetAzureSQLTableResourceSchema + if err := metadata.Decode(&data); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + dataFactoryId, err := factories.ParseFactoryID(data.DataFactoryId) + if err != nil { + return err + } + + id := parse.NewDataSetID(subscriptionId, dataFactoryId.ResourceGroupName, dataFactoryId.FactoryName, data.Name) + + existing, err := client.Get(ctx, id.ResourceGroup, id.FactoryName, id.Name, "") + if err != nil { + if !utils.ResponseWasNotFound(existing.Response) { + return fmt.Errorf("checking for presence of existing %s: %+v", id, err) + } + } + if !utils.ResponseWasNotFound(existing.Response) { + return metadata.ResourceRequiresImport(r.ResourceType(), id) + } + + azureSqlDatasetProperties := datafactory.AzureSQLTableDatasetTypeProperties{ + Schema: data.Schema, + Table: data.Table, + } + + linkedServiceId, err := parse.LinkedServiceID(data.LinkedServiceId) + if err != nil { + return err + } + if linkedServiceId.SubscriptionId != id.SubscriptionId || linkedServiceId.ResourceGroup != id.ResourceGroup || linkedServiceId.FactoryName != id.FactoryName { + return fmt.Errorf("checking the linked service %s: not within the same data factory as this dataset %s", data.LinkedServiceId, id.ID()) + } + linkedService := &datafactory.LinkedServiceReference{ + Type: pointer.To("LinkedServiceReference"), + ReferenceName: pointer.To(linkedServiceId.Name), + } + + description := data.Description + azureSqlTableset := datafactory.AzureSQLTableDataset{ + AzureSQLTableDatasetTypeProperties: &azureSqlDatasetProperties, + LinkedServiceName: linkedService, + Description: &description, + } + + if data.Folder != "" { + azureSqlTableset.Folder = &datafactory.DatasetFolder{ + Name: &data.Folder, + } + } + + if len(data.Parameters) > 0 { + azureSqlTableset.Parameters = expandDataSetParameters(data.Parameters) + } + + if len(data.Annotations) > 0 { + annotations := make([]interface{}, len(data.Annotations)) + for i, v := range data.Annotations { + annotations[i] = v + } + azureSqlTableset.Annotations = &annotations + } + + if len(data.AdditionalProperties) > 0 { + azureSqlTableset.AdditionalProperties = data.AdditionalProperties + } + + if len(data.SchemaColumn) > 0 { + azureSqlTableset.Structure = data.SchemaColumn + } + + datasetType := string(datafactory.TypeBasicDatasetTypeAzureSQLTable) + dataset := datafactory.DatasetResource{ + Properties: &azureSqlTableset, + Type: &datasetType, + } + + if _, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.FactoryName, id.Name, dataset, ""); err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } + + metadata.SetID(id) + return nil + }, + } +} + +func (r DataFactoryDatasetAzureSQLTableResource) Update() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.DataFactory.DatasetClient + id, err := parse.DataSetID(metadata.ResourceData.Id()) + if err != nil { + return err + } + var data DataFactoryDatasetAzureSQLTableResourceSchema + if err := metadata.Decode(&data); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + dataset, err := client.Get(ctx, id.ResourceGroup, id.FactoryName, id.Name, "") + if err != nil { + return fmt.Errorf("retrieving existing %s: %+v", id, err) + } + + azureSqlTable, ok := dataset.Properties.AsAzureSQLTableDataset() + if !ok { + return fmt.Errorf("classifying Data Factory Dataset Azure SQL Table %s: Expected: %q Received: %T", *id, datafactory.TypeBasicDatasetTypeAzureSQLTable, dataset.Properties) + } + + if metadata.ResourceData.HasChanges("schema", "table") { + if azureSqlTable.AzureSQLTableDatasetTypeProperties == nil { + azureSqlTable.AzureSQLTableDatasetTypeProperties = &datafactory.AzureSQLTableDatasetTypeProperties{} + } + + if metadata.ResourceData.HasChange("schema") { + azureSqlTable.AzureSQLTableDatasetTypeProperties.Schema = data.Schema + } + + if metadata.ResourceData.HasChange("table") { + azureSqlTable.AzureSQLTableDatasetTypeProperties.Table = data.Table + } + } + + if metadata.ResourceData.HasChange("linked_service_id") { + linkedServiceId, err := parse.LinkedServiceID(data.LinkedServiceId) + if err != nil { + return err + } + if linkedServiceId.SubscriptionId != id.SubscriptionId || linkedServiceId.ResourceGroup != id.ResourceGroup || linkedServiceId.FactoryName != id.FactoryName { + return fmt.Errorf("checking the linked service %s: not within the same data factory as this dataset %s", data.LinkedServiceId, id.ID()) + } + azureSqlTable.LinkedServiceName = &datafactory.LinkedServiceReference{ + Type: pointer.To("LinkedServiceReference"), + ReferenceName: pointer.To(linkedServiceId.Name), + } + } + + if metadata.ResourceData.HasChange("description") { + azureSqlTable.Description = pointer.To(data.Description) + } + + if metadata.ResourceData.HasChange("folder") { + if data.Folder != "" { + azureSqlTable.Folder = &datafactory.DatasetFolder{ + Name: &data.Folder, + } + } else { + azureSqlTable.Folder = nil + } + } + + if metadata.ResourceData.HasChange("parameters") { + azureSqlTable.Parameters = expandDataSetParameters(data.Parameters) + } + + if metadata.ResourceData.HasChange("annotations") { + if len(data.Annotations) > 0 { + annotations := make([]interface{}, len(data.Annotations)) + for i, v := range data.Annotations { + annotations[i] = v + } + azureSqlTable.Annotations = &annotations + } else { + azureSqlTable.Annotations = nil + } + } + + if metadata.ResourceData.HasChange("additional_properties") { + azureSqlTable.AdditionalProperties = data.AdditionalProperties + } + + if metadata.ResourceData.HasChange("schema_column") { + azureSqlTable.Structure = data.SchemaColumn + } + + dataset = datafactory.DatasetResource{ + Type: pointer.To(string(datafactory.TypeBasicDatasetTypeAzureSQLTable)), + Properties: azureSqlTable, + } + + if _, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.FactoryName, id.Name, dataset, ""); err != nil { + return fmt.Errorf("updating %s: %+v", id, err) + } + + metadata.SetID(id) + return nil + }, + } +} + +func (DataFactoryDatasetAzureSQLTableResource) Read() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 5 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + d := metadata.ResourceData + client := metadata.Client.DataFactory.DatasetClient + id, err := parse.DataSetID(d.Id()) + if err != nil { + return err + } + + dataFactoryId := factories.NewFactoryID(id.SubscriptionId, id.ResourceGroup, id.FactoryName) + var state DataFactoryDatasetAzureSQLTableResourceSchema + + resp, err := client.Get(ctx, id.ResourceGroup, id.FactoryName, id.Name, "") + if err != nil { + if utils.ResponseWasNotFound(resp.Response) { + return metadata.MarkAsGone(id) + } + + return fmt.Errorf("retrieving %s: %+v", id, err) + } + + state.Name = id.Name + state.DataFactoryId = dataFactoryId.ID() + + azureSqlTable, ok := resp.Properties.AsAzureSQLTableDataset() + if !ok { + return fmt.Errorf("classifying Data Factory Dataset Azure SQL Table %s: Expected: %q Received: %T", *id, datafactory.TypeBasicDatasetTypeAzureSQLTable, resp.Properties) + } + + state.Description = pointer.From(azureSqlTable.Description) + state.AdditionalProperties = azureSqlTable.AdditionalProperties + + state.Parameters = flattenDataSetParameters(azureSqlTable.Parameters) + state.Annotations = flattenDataFactoryAnnotations(azureSqlTable.Annotations) + + if linkedService := azureSqlTable.LinkedServiceName; linkedService != nil && linkedService.ReferenceName != nil { + state.LinkedServiceId = parse.NewLinkedServiceID(id.SubscriptionId, id.ResourceGroup, id.FactoryName, *linkedService.ReferenceName).ID() + } + + if properties := azureSqlTable.AzureSQLTableDatasetTypeProperties; properties != nil { + if val, ok := properties.Schema.(string); ok { + state.Schema = val + } else { + state.Schema = "" + log.Printf("[DEBUG] Skipping `schema` since it's not a string") + } + + if val, ok := properties.Table.(string); ok { + state.Table = val + } else { + state.Table = "" + log.Printf("[DEBUG] Skipping `table` since it's not a string") + } + } + + state.Folder = "" + if folder := azureSqlTable.Folder; folder != nil && folder.Name != nil { + state.Folder = pointer.From(folder.Name) + } + + state.SchemaColumn = flattenDataFactoryStructureColumnsToDatasetColumn(azureSqlTable.Structure) + + return metadata.Encode(&state) + }, + } +} + +func (DataFactoryDatasetAzureSQLTableResource) Delete() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + d := metadata.ResourceData + client := metadata.Client.DataFactory.DatasetClient + + id, err := parse.DataSetID(d.Id()) + if err != nil { + return err + } + + response, err := client.Delete(ctx, id.ResourceGroup, id.FactoryName, id.Name) + if err != nil { + if !utils.ResponseWasNotFound(response) { + return fmt.Errorf("deleting %s: %+v", *id, err) + } + } + + return nil + }, + } +} + +func (DataFactoryDatasetAzureSQLTableResource) IDValidationFunc() pluginsdk.SchemaValidateFunc { + return validate.DataSetID +} diff --git a/internal/services/datafactory/data_factory_dataset_azure_sql_table_resource_test.go b/internal/services/datafactory/data_factory_dataset_azure_sql_table_resource_test.go new file mode 100644 index 0000000000000..faa1b35261b6b --- /dev/null +++ b/internal/services/datafactory/data_factory_dataset_azure_sql_table_resource_test.go @@ -0,0 +1,254 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package datafactory_test + +import ( + "context" + "fmt" + "testing" + + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/datafactory/parse" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +type DatasetAzureSQLTableResource struct{} + +func TestAccDataFactoryDatasetAzureSQLTable_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_data_factory_dataset_azure_sql_table", "test") + r := DatasetAzureSQLTableResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccDataFactoryDatasetAzureSQLTable_update(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_data_factory_dataset_azure_sql_table", "test") + r := DatasetAzureSQLTableResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.update1(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("schema").HasValue("dbo"), + check.That(data.ResourceName).Key("table").HasValue("testTable"), + check.That(data.ResourceName).Key("folder").HasValue("testFolder"), + check.That(data.ResourceName).Key("parameters.%").HasValue("2"), + check.That(data.ResourceName).Key("annotations.#").HasValue("3"), + check.That(data.ResourceName).Key("schema_column.#").HasValue("1"), + check.That(data.ResourceName).Key("additional_properties.%").HasValue("2"), + check.That(data.ResourceName).Key("description").HasValue("test description"), + ), + }, + { + Config: r.update2(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("schema").IsEmpty(), + check.That(data.ResourceName).Key("table").IsEmpty(), + check.That(data.ResourceName).Key("folder").IsEmpty(), + check.That(data.ResourceName).Key("parameters.%").HasValue("3"), + check.That(data.ResourceName).Key("annotations.#").HasValue("0"), + check.That(data.ResourceName).Key("schema_column.#").HasValue("2"), + check.That(data.ResourceName).Key("additional_properties.%").HasValue("1"), + check.That(data.ResourceName).Key("description").HasValue("test description 2"), + ), + }, + data.ImportStep(), + }) +} + +func TestAccDataFactoryDatasetAzureSQLTable_requiresImport(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_data_factory_dataset_azure_sql_table", "test") + r := DatasetAzureSQLTableResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.RequiresImportErrorStep(r.requiresImport), + }) +} + +func (t DatasetAzureSQLTableResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { + id, err := parse.DataSetID(state.ID) + if err != nil { + return nil, err + } + + resp, err := clients.DataFactory.DatasetClient.Get(ctx, id.ResourceGroup, id.FactoryName, id.Name, "") + if err != nil { + return nil, fmt.Errorf("retrieving %s: %+v", *id, err) + } + + return utils.Bool(resp.ID != nil), nil +} + +func (DatasetAzureSQLTableResource) basic(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-df-%d" + location = "%s" +} + +resource "azurerm_data_factory" "test" { + name = "acctestdf%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name +} + +resource "azurerm_data_factory_linked_service_azure_sql_database" "test" { + name = "acctestlsazsql%d" + data_factory_id = azurerm_data_factory.test.id + use_managed_identity = true + connection_string = "Integrated Security=False;Data Source=test.database.windows.net;Initial Catalog=test" +} + +resource "azurerm_data_factory_dataset_azure_sql_table" "test" { + name = "acctestds%d" + data_factory_id = azurerm_data_factory.test.id + linked_service_id = azurerm_data_factory_linked_service_azure_sql_database.test.id +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger) +} + +func (DatasetAzureSQLTableResource) update1(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-df-%d" + location = "%s" +} + +resource "azurerm_data_factory" "test" { + name = "acctestdf%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name +} + +resource "azurerm_data_factory_linked_service_azure_sql_database" "test" { + name = "acctestlsazsql%d" + data_factory_id = azurerm_data_factory.test.id + use_managed_identity = true + connection_string = "Integrated Security=False;Data Source=test.database.windows.net;Initial Catalog=test" +} + +resource "azurerm_data_factory_dataset_azure_sql_table" "test" { + name = "acctestds%d" + data_factory_id = azurerm_data_factory.test.id + linked_service_id = azurerm_data_factory_linked_service_azure_sql_database.test.id + + description = "test description" + annotations = ["test1", "test2", "test3"] + schema = "dbo" + table = "testTable" + folder = "testFolder" + + parameters = { + foo = "test1" + bar = "test2" + } + + additional_properties = { + foo = "test1" + bar = "test2" + } + + schema_column { + name = "test1" + type = "Byte" + description = "description" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger) +} + +func (DatasetAzureSQLTableResource) update2(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-df-%d" + location = "%s" +} + +resource "azurerm_data_factory" "test" { + name = "acctestdf%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name +} + +resource "azurerm_data_factory_linked_service_azure_sql_database" "test" { + name = "acctestlsazsql%d" + data_factory_id = azurerm_data_factory.test.id + use_managed_identity = true + connection_string = "Integrated Security=False;Data Source=test.database.windows.net;Initial Catalog=test" +} + +resource "azurerm_data_factory_dataset_azure_sql_table" "test" { + name = "acctestds%d" + data_factory_id = azurerm_data_factory.test.id + linked_service_id = azurerm_data_factory_linked_service_azure_sql_database.test.id + + description = "test description 2" + + parameters = { + foo = "test1" + bar = "test2" + buzz = "test3" + } + + additional_properties = { + foo = "test1" + } + + schema_column { + name = "test1" + type = "Byte" + description = "description" + } + + schema_column { + name = "test2" + type = "Byte" + description = "description" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger) +} + +func (r DatasetAzureSQLTableResource) requiresImport(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_data_factory_dataset_azure_sql_table" "import" { + name = azurerm_data_factory_dataset_azure_sql_table.test.name + data_factory_id = azurerm_data_factory_dataset_azure_sql_table.test.data_factory_id + linked_service_id = azurerm_data_factory_dataset_azure_sql_table.test.linked_service_id +} +`, r.basic(data)) +} diff --git a/internal/services/datafactory/data_factory_dataset_delimited_text_resource.go b/internal/services/datafactory/data_factory_dataset_delimited_text_resource.go index cbcd77c4afa03..3f44a8dfb5807 100644 --- a/internal/services/datafactory/data_factory_dataset_delimited_text_resource.go +++ b/internal/services/datafactory/data_factory_dataset_delimited_text_resource.go @@ -147,19 +147,34 @@ func resourceDataFactoryDatasetDelimitedText() *pluginsdk.Resource { Schema: map[string]*pluginsdk.Schema{ "file_system": { Type: pluginsdk.TypeString, - Required: true, + Optional: true, ValidateFunc: validation.StringIsNotEmpty, }, + "dynamic_file_system_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, "path": { Type: pluginsdk.TypeString, Optional: true, ValidateFunc: validation.StringIsNotEmpty, }, + "dynamic_path_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, "filename": { Type: pluginsdk.TypeString, Optional: true, ValidateFunc: validation.StringIsNotEmpty, }, + "dynamic_filename_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, }, }, }, @@ -344,7 +359,7 @@ func resourceDataFactoryDatasetDelimitedTextCreateUpdate(d *pluginsdk.ResourceDa location := expandDataFactoryDatasetLocation(d) if location == nil { - return fmt.Errorf("one of `http_server_location`, `azure_blob_storage_location` must be specified to create a DataFactory Delimited Text Dataset") + return fmt.Errorf("one of `http_server_location`, `azure_blob_fs_location`, `azure_blob_storage_location` must be specified to create a DataFactory Delimited Text Dataset") } delimited_textDatasetProperties := datafactory.DelimitedTextDatasetTypeProperties{ diff --git a/internal/services/datafactory/data_factory_dataset_delimited_text_resource_test.go b/internal/services/datafactory/data_factory_dataset_delimited_text_resource_test.go index d37fc0b9b1a79..07512ce3f677f 100644 --- a/internal/services/datafactory/data_factory_dataset_delimited_text_resource_test.go +++ b/internal/services/datafactory/data_factory_dataset_delimited_text_resource_test.go @@ -134,6 +134,13 @@ func TestAccDataFactoryDatasetDelimitedText_blobFS(t *testing.T) { ), }, data.ImportStep(), + { + Config: r.blobFSDynamicPath(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), }) } @@ -623,6 +630,78 @@ resource "azurerm_data_factory_dataset_delimited_text" "test" { } `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger) } +func (DatasetDelimitedTextResource) blobFSDynamicPath(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-df-%d" + location = "%s" +} + +resource "azurerm_storage_account" "test" { + name = "acctestsa%s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_kind = "BlobStorage" + account_tier = "Standard" + account_replication_type = "LRS" + is_hns_enabled = true + allow_nested_items_to_be_public = true +} + +resource "azurerm_storage_data_lake_gen2_filesystem" "test" { + name = "acctest-datalake-%d" + storage_account_id = azurerm_storage_account.test.id +} + +resource "azurerm_data_factory" "test" { + name = "acctestdf%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + + identity { + type = "SystemAssigned" + } +} + +resource "azurerm_role_assignment" "test" { + scope = azurerm_storage_account.test.id + role_definition_name = "Storage Blob Data Owner" + principal_id = azurerm_data_factory.test.identity.0.principal_id +} + +resource "azurerm_data_factory_linked_service_data_lake_storage_gen2" "test" { + name = "acctestDataLakeStorage%d" + data_factory_id = azurerm_data_factory.test.id + use_managed_identity = true + url = azurerm_storage_account.test.primary_dfs_endpoint +} + +resource "azurerm_data_factory_dataset_delimited_text" "test" { + name = "acctestds%d" + data_factory_id = azurerm_data_factory.test.id + linked_service_name = azurerm_data_factory_linked_service_data_lake_storage_gen2.test.name + + azure_blob_fs_location { + file_system = azurerm_storage_data_lake_gen2_filesystem.test.name + dynamic_file_system_enabled = true + path = "@concat('foo/bar/',formatDateTime(convertTimeZone(utcnow(),'UTC','W. Europe Standard Time'),'yyyy-MM-dd'))" + dynamic_path_enabled = true + } + + column_delimiter = "," + row_delimiter = "NEW" + encoding = "UTF-8" + quote_character = "x" + escape_character = "f" + first_row_as_header = true + null_value = "NULL" +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger) +} func (DatasetDelimitedTextResource) blobDynamicContainer(data acceptance.TestData) string { return fmt.Sprintf(` diff --git a/internal/services/datafactory/data_factory_dataset_parquet_resource.go b/internal/services/datafactory/data_factory_dataset_parquet_resource.go index 5fd00318ddd33..f853bba929d7c 100644 --- a/internal/services/datafactory/data_factory_dataset_parquet_resource.go +++ b/internal/services/datafactory/data_factory_dataset_parquet_resource.go @@ -76,12 +76,54 @@ func resourceDataFactoryDatasetParquet() *pluginsdk.Resource { }, }, + // Parquet Specific Field, one option for 'location' + "azure_blob_fs_location": { + Type: pluginsdk.TypeList, + MaxItems: 1, + Optional: true, + ExactlyOneOf: []string{"azure_blob_fs_location", "azure_blob_storage_location", "http_server_location"}, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "file_system": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + "dynamic_file_system_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + "path": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + "dynamic_path_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + "filename": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + "dynamic_filename_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + }, + }, + }, + // Parquet Specific Field, one option for 'location' "azure_blob_storage_location": { - Type: pluginsdk.TypeList, - MaxItems: 1, - Optional: true, - ConflictsWith: []string{"http_server_location"}, + Type: pluginsdk.TypeList, + MaxItems: 1, + Optional: true, + ExactlyOneOf: []string{"azure_blob_fs_location", "azure_blob_storage_location", "http_server_location"}, Elem: &pluginsdk.Resource{ Schema: map[string]*pluginsdk.Schema{ "container": { @@ -156,10 +198,10 @@ func resourceDataFactoryDatasetParquet() *pluginsdk.Resource { // Parquet Specific Field, one option for 'location' "http_server_location": { - Type: pluginsdk.TypeList, - MaxItems: 1, - Optional: true, - ConflictsWith: []string{"azure_blob_storage_location"}, + Type: pluginsdk.TypeList, + MaxItems: 1, + Optional: true, + ExactlyOneOf: []string{"azure_blob_fs_location", "azure_blob_storage_location", "http_server_location"}, Elem: &pluginsdk.Resource{ Schema: map[string]*pluginsdk.Schema{ "relative_url": { @@ -270,7 +312,7 @@ func resourceDataFactoryDatasetParquetCreateUpdate(d *pluginsdk.ResourceData, me location := expandDataFactoryDatasetLocation(d) if location == nil { - return fmt.Errorf("One of `http_server_location`, `azure_blob_storage_location` must be specified to create a DataFactory Parquet Dataset") + return fmt.Errorf("One of `http_server_location`, `azure_blob_fs_location`, `azure_blob_storage_location` must be specified to create a DataFactory Parquet Dataset") } parquetDatasetProperties := datafactory.ParquetDatasetTypeProperties{ @@ -394,6 +436,11 @@ func resourceDataFactoryDatasetParquetRead(d *pluginsdk.ResourceData, meta inter return fmt.Errorf("setting `azure_blob_storage_location` for Data Factory Parquet Dataset %s", err) } } + if azureBlobFSLocation, ok := properties.Location.AsAzureBlobFSLocation(); ok { + if err := d.Set("azure_blob_fs_location", flattenDataFactoryDatasetAzureBlobFSLocation(azureBlobFSLocation)); err != nil { + return fmt.Errorf("setting `azure_blob_fs_location` for Data Factory Parquet Dataset %s", err) + } + } compressionCodec, ok := properties.CompressionCodec.(string) if !ok { diff --git a/internal/services/datafactory/data_factory_dataset_parquet_resource_test.go b/internal/services/datafactory/data_factory_dataset_parquet_resource_test.go index f78d42e1754f9..751b59628de54 100644 --- a/internal/services/datafactory/data_factory_dataset_parquet_resource_test.go +++ b/internal/services/datafactory/data_factory_dataset_parquet_resource_test.go @@ -111,6 +111,50 @@ func TestAccDataFactoryDatasetParquet_blobDynamicContainer(t *testing.T) { }) } +func TestAccDataFactoryDatasetParquet_blobFS(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_data_factory_dataset_parquet", "test") + r := DatasetParquetResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.blobFS(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccDataFactoryDatasetParquet_blobFSDynamicPath(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_data_factory_dataset_parquet", "test") + r := DatasetParquetResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.blobFS(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.blobFSDynamicPath(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.blobFS(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func (t DatasetParquetResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := parse.DataSetID(state.ID) if err != nil { @@ -395,3 +439,110 @@ resource "azurerm_data_factory_dataset_parquet" "test" { } `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger, data.RandomInteger, data.RandomInteger) } + +func (DatasetParquetResource) blobFS(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-df-%d" + location = "%s" +} + +resource "azurerm_storage_account" "test" { + name = "acctestdf%s" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + account_tier = "Standard" + account_replication_type = "GRS" + is_hns_enabled = true +} + +resource "azurerm_storage_container" "test" { + name = "content" + storage_account_name = azurerm_storage_account.test.name + container_access_type = "private" +} + +resource "azurerm_data_factory" "test" { + name = "acctestdf%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name +} + + +resource "azurerm_data_factory_linked_service_data_lake_storage_gen2" "test" { + name = "acctestlsdls%d" + data_factory_id = azurerm_data_factory.test.id + url = azurerm_storage_account.test.primary_dfs_endpoint + storage_account_key = azurerm_storage_account.test.primary_access_key +} + +resource "azurerm_data_factory_dataset_parquet" "test" { + name = "acctestds%d" + data_factory_id = azurerm_data_factory.test.id + linked_service_name = azurerm_data_factory_linked_service_data_lake_storage_gen2.test.name + + azure_blob_fs_location { + file_system = azurerm_storage_container.test.name + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger, data.RandomInteger, data.RandomInteger) +} + +func (DatasetParquetResource) blobFSDynamicPath(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-df-%d" + location = "%s" +} + +resource "azurerm_storage_account" "test" { + name = "acctestdf%s" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + account_tier = "Standard" + account_replication_type = "GRS" + is_hns_enabled = true +} + +resource "azurerm_storage_container" "test" { + name = "content" + storage_account_name = azurerm_storage_account.test.name + container_access_type = "private" +} + +resource "azurerm_data_factory" "test" { + name = "acctestdf%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name +} + + +resource "azurerm_data_factory_linked_service_data_lake_storage_gen2" "test" { + name = "acctestlsdls%d" + data_factory_id = azurerm_data_factory.test.id + url = azurerm_storage_account.test.primary_dfs_endpoint + storage_account_key = azurerm_storage_account.test.primary_access_key +} + +resource "azurerm_data_factory_dataset_parquet" "test" { + name = "acctestds%d" + data_factory_id = azurerm_data_factory.test.id + linked_service_name = azurerm_data_factory_linked_service_data_lake_storage_gen2.test.name + + azure_blob_fs_location { + file_system = azurerm_storage_container.test.name + dynamic_file_system_enabled = true + path = "@concat('foo/bar/',formatDateTime(convertTimeZone(utcnow(),'UTC','W. Europe Standard Time'),'yyyy-MM-dd'))" + dynamic_path_enabled = true + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomInteger, data.RandomInteger, data.RandomInteger) +} diff --git a/internal/services/datafactory/registration.go b/internal/services/datafactory/registration.go index 7e942121c8a38..f83da8a69c5a0 100644 --- a/internal/services/datafactory/registration.go +++ b/internal/services/datafactory/registration.go @@ -10,6 +10,7 @@ import ( type Registration struct{} +var _ sdk.TypedServiceRegistrationWithAGitHubLabel = Registration{} var _ sdk.UntypedServiceRegistrationWithAGitHubLabel = Registration{} func (r Registration) AssociatedGitHubLabel() string { @@ -28,6 +29,16 @@ func (r Registration) WebsiteCategories() []string { } } +func (Registration) DataSources() []sdk.DataSource { + return []sdk.DataSource{} +} + +func (Registration) Resources() []sdk.Resource { + return []sdk.Resource{ + DataFactoryDatasetAzureSQLTableResource{}, + } +} + // SupportedDataSources returns the supported Data Sources supported by this Service func (r Registration) SupportedDataSources() map[string]*pluginsdk.Resource { return map[string]*pluginsdk.Resource{ diff --git a/internal/services/dataprotection/data_protection_backup_instance_disk_resource.go b/internal/services/dataprotection/data_protection_backup_instance_disk_resource.go index ba1bdf68f060b..6bcab8333bba1 100644 --- a/internal/services/dataprotection/data_protection_backup_instance_disk_resource.go +++ b/internal/services/dataprotection/data_protection_backup_instance_disk_resource.go @@ -11,7 +11,7 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances" "github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" diff --git a/internal/services/devtestlabs/dev_test_global_vm_shutdown_schedule_resource.go b/internal/services/devtestlabs/dev_test_global_vm_shutdown_schedule_resource.go index 250153a906fb7..e1dc5ea3785f6 100644 --- a/internal/services/devtestlabs/dev_test_global_vm_shutdown_schedule_resource.go +++ b/internal/services/devtestlabs/dev_test_global_vm_shutdown_schedule_resource.go @@ -9,12 +9,12 @@ import ( "time" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-sdk/resource-manager/devtestlab/2018-09-15/globalschedules" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - computeParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" @@ -47,7 +47,7 @@ func resourceDevTestGlobalVMShutdownSchedule() *pluginsdk.Resource { Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: computeValidate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, "enabled": { @@ -110,15 +110,15 @@ func resourceDevTestGlobalVMShutdownScheduleCreateUpdate(d *pluginsdk.ResourceDa defer cancel() vmID := d.Get("virtual_machine_id").(string) - vmId, err := computeParse.VirtualMachineID(vmID) + vmId, err := commonids.ParseVirtualMachineID(vmID) if err != nil { return err } // Can't find any official documentation on this, but the API returns a 400 for any other name. // The best example I could find is here: https://social.msdn.microsoft.com/Forums/en-US/25a02403-dba9-4bcb-bdcc-1f4afcba5b65/powershell-script-to-autoshutdown-azure-virtual-machine?forum=WAVirtualMachinesforWindows - name := "shutdown-computevm-" + vmId.Name - id := globalschedules.NewScheduleID(vmId.SubscriptionId, vmId.ResourceGroup, name) + name := "shutdown-computevm-" + vmId.VirtualMachineName + id := globalschedules.NewScheduleID(vmId.SubscriptionId, vmId.ResourceGroupName, name) if d.IsNewResource() { existing, err := client.Get(ctx, id, globalschedules.GetOperationOptions{}) diff --git a/internal/services/disks/disk_pool_iscsi_target_lun_resource.go b/internal/services/disks/disk_pool_iscsi_target_lun_resource.go index 49369686fb37d..f1ca6045eec38 100644 --- a/internal/services/disks/disk_pool_iscsi_target_lun_resource.go +++ b/internal/services/disks/disk_pool_iscsi_target_lun_resource.go @@ -12,7 +12,7 @@ import ( "time" "github.com/hashicorp/go-azure-helpers/lang/response" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/storagepool/2021-08-01/diskpools" "github.com/hashicorp/go-azure-sdk/resource-manager/storagepool/2021-08-01/iscsitargets" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" diff --git a/internal/services/disks/disk_pool_managed_disk_attachment_resource.go b/internal/services/disks/disk_pool_managed_disk_attachment_resource.go index ce84d7e8e6701..4ac92c0c3b661 100644 --- a/internal/services/disks/disk_pool_managed_disk_attachment_resource.go +++ b/internal/services/disks/disk_pool_managed_disk_attachment_resource.go @@ -9,7 +9,7 @@ import ( "time" "github.com/hashicorp/go-azure-helpers/lang/response" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/storagepool/2021-08-01/diskpools" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-azurerm/internal/locks" diff --git a/internal/services/disks/parse/disk_pool_managed_disk_attachment.go b/internal/services/disks/parse/disk_pool_managed_disk_attachment.go index bc446c47a1d99..09b53334ad8ef 100644 --- a/internal/services/disks/parse/disk_pool_managed_disk_attachment.go +++ b/internal/services/disks/parse/disk_pool_managed_disk_attachment.go @@ -8,7 +8,7 @@ import ( "strings" "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/storagepool/2021-08-01/diskpools" ) diff --git a/internal/services/disks/parse/disk_pool_managed_disk_attachment_test.go b/internal/services/disks/parse/disk_pool_managed_disk_attachment_test.go index d397281f4177d..98626bb5a14f9 100644 --- a/internal/services/disks/parse/disk_pool_managed_disk_attachment_test.go +++ b/internal/services/disks/parse/disk_pool_managed_disk_attachment_test.go @@ -6,7 +6,7 @@ package parse import ( "testing" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/storagepool/2021-08-01/diskpools" ) diff --git a/internal/services/disks/parse/iscsitarget_lun.go b/internal/services/disks/parse/iscsitarget_lun.go index 0a3a254910471..97198db7e8b06 100644 --- a/internal/services/disks/parse/iscsitarget_lun.go +++ b/internal/services/disks/parse/iscsitarget_lun.go @@ -8,7 +8,7 @@ import ( "strings" "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/storagepool/2021-08-01/iscsitargets" ) diff --git a/internal/services/disks/parse/iscsitarget_lun_test.go b/internal/services/disks/parse/iscsitarget_lun_test.go index d2338ab801a45..508bd8db4354c 100644 --- a/internal/services/disks/parse/iscsitarget_lun_test.go +++ b/internal/services/disks/parse/iscsitarget_lun_test.go @@ -6,7 +6,7 @@ package parse import ( "testing" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/storagepool/2021-08-01/iscsitargets" ) diff --git a/internal/services/eventgrid/eventgrid_domain_data_source.go b/internal/services/eventgrid/eventgrid_domain_data_source.go index d84260a744546..59cf02d48121c 100644 --- a/internal/services/eventgrid/eventgrid_domain_data_source.go +++ b/internal/services/eventgrid/eventgrid_domain_data_source.go @@ -9,6 +9,7 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" + "github.com/hashicorp/go-azure-helpers/resourcemanager/identity" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" "github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/domains" @@ -138,6 +139,8 @@ func dataSourceEventGridDomain() *pluginsdk.Resource { }, "tags": commonschema.TagsDataSource(), + + "identity": commonschema.SystemOrUserAssignedIdentityComputed(), }, } } @@ -202,6 +205,14 @@ func dataSourceEventGridDomainRead(d *pluginsdk.ResourceData, meta interface{}) if err := d.Set("inbound_ip_rule", inboundIPRules); err != nil { return fmt.Errorf("setting `inbound_ip_rule` in %s: %+v", id, err) } + + flattenedIdentity, err := identity.FlattenSystemAndUserAssignedMap(model.Identity) + if err != nil { + return fmt.Errorf("flattening `identity`: %+v", err) + } + if err := d.Set("identity", flattenedIdentity); err != nil { + return fmt.Errorf("setting `identity`: %+v", err) + } } if err := tags.FlattenAndSet(d, model.Tags); err != nil { diff --git a/internal/services/eventgrid/eventgrid_domain_data_source_test.go b/internal/services/eventgrid/eventgrid_domain_data_source_test.go index 50923b8ae5ee3..9fc6dc2975040 100644 --- a/internal/services/eventgrid/eventgrid_domain_data_source_test.go +++ b/internal/services/eventgrid/eventgrid_domain_data_source_test.go @@ -35,6 +35,43 @@ func TestAccEventGridDomainDataSource_basic(t *testing.T) { check.That(data.ResourceName).Key("inbound_ip_rule.1.ip_mask").Exists(), check.That(data.ResourceName).Key("inbound_ip_rule.0.action").Exists(), check.That(data.ResourceName).Key("inbound_ip_rule.1.action").Exists(), + check.That(data.ResourceName).Key("identity.#").HasValue("0"), + ), + }, + }) +} + +func TestAccEventGridDomainDataSource_systemAssignedIdentity(t *testing.T) { + data := acceptance.BuildTestData(t, "data.azurerm_eventgrid_domain", "test") + r := EventGridDomainDataSource{} + + data.DataSourceTest(t, []acceptance.TestStep{ + { + Config: r.basicWithSystemManagedIdentity(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).Key("identity.#").HasValue("1"), + check.That(data.ResourceName).Key("identity.0.type").HasValue("SystemAssigned"), + check.That(data.ResourceName).Key("identity.0.identity_ids.#").HasValue("0"), + check.That(data.ResourceName).Key("identity.0.principal_id").Exists(), + check.That(data.ResourceName).Key("identity.0.tenant_id").Exists(), + ), + }, + }) +} + +func TestAccEventGridDomainDataSource_userAssignedIdentity(t *testing.T) { + data := acceptance.BuildTestData(t, "data.azurerm_eventgrid_domain", "test") + r := EventGridDomainDataSource{} + + data.DataSourceTest(t, []acceptance.TestStep{ + { + Config: r.basicWithUserAssignedManagedIdentity(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).Key("identity.#").HasValue("1"), + check.That(data.ResourceName).Key("identity.0.type").HasValue("UserAssigned"), + check.That(data.ResourceName).Key("identity.0.identity_ids.#").HasValue("1"), + check.That(data.ResourceName).Key("identity.0.principal_id").IsEmpty(), + check.That(data.ResourceName).Key("identity.0.tenant_id").IsEmpty(), ), }, }) @@ -50,3 +87,25 @@ data "azurerm_eventgrid_domain" "test" { } `, EventGridDomainResource{}.complete(data)) } + +func (EventGridDomainDataSource) basicWithSystemManagedIdentity(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +data "azurerm_eventgrid_domain" "test" { + name = azurerm_eventgrid_domain.test.name + resource_group_name = azurerm_resource_group.test.name +} +`, EventGridDomainResource{}.basicWithSystemManagedIdentity(data)) +} + +func (EventGridDomainDataSource) basicWithUserAssignedManagedIdentity(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +data "azurerm_eventgrid_domain" "test" { + name = azurerm_eventgrid_domain.test.name + resource_group_name = azurerm_resource_group.test.name +} +`, EventGridDomainResource{}.basicWithUserAssignedManagedIdentity(data)) +} diff --git a/internal/services/firewall/validate/port_or_port_range.go b/internal/services/firewall/validate/port_or_port_range.go index 5a7e5d447874a..5620c5bd51ea8 100644 --- a/internal/services/firewall/validate/port_or_port_range.go +++ b/internal/services/firewall/validate/port_or_port_range.go @@ -14,7 +14,7 @@ func PortOrPortRangeWithin(min int, max int) func(interface{}, string) ([]string v, ok := i.(string) if !ok { errors = append(errors, fmt.Errorf("expected type of %q to be string", k)) - return + return warnings, errors } assertWithinRange := func(n int) error { @@ -29,7 +29,7 @@ func PortOrPortRangeWithin(min int, max int) func(interface{}, string) ([]string groups := regexp.MustCompile(`^(\d+)((-)(\d+))?$`).FindStringSubmatch(v) if len(groups) != 5 { errors = append(errors, fmt.Errorf("expected `number` or `num1-num2` but got %q", v)) - return + return warnings, errors } if groups[2] == "" { @@ -37,7 +37,7 @@ func PortOrPortRangeWithin(min int, max int) func(interface{}, string) ([]string if err := assertWithinRange(p1); err != nil { errors = append(errors, err) - return + return warnings, errors } } else { p1, _ := strconv.Atoi(groups[1]) @@ -45,17 +45,17 @@ func PortOrPortRangeWithin(min int, max int) func(interface{}, string) ([]string if p1 >= p2 { errors = append(errors, fmt.Errorf("beginning port (%d) should be less than ending port (%d)", p1, p2)) - return + return warnings, errors } if err := assertWithinRange(p1); err != nil { errors = append(errors, err) - return + return warnings, errors } if err := assertWithinRange(p2); err != nil { errors = append(errors, err) - return + return warnings, errors } } diff --git a/internal/services/hybridcompute/arc_private_link_scope_resource.go b/internal/services/hybridcompute/arc_private_link_scope_resource.go index a035750a4522a..100eb75091d4b 100644 --- a/internal/services/hybridcompute/arc_private_link_scope_resource.go +++ b/internal/services/hybridcompute/arc_private_link_scope_resource.go @@ -75,7 +75,7 @@ func (a ArcPrivateLinkScopeResource) Create() sdk.ResourceFunc { client := metadata.Client.HybridCompute.PrivateLinkScopesClient subscriptionId := metadata.Client.Account.SubscriptionId id := privatelinkscopes.NewProviderPrivateLinkScopeID(subscriptionId, model.ResourceGroupName, model.Name) - existing, err := client.PrivateLinkScopesGet(ctx, id) + existing, err := client.Get(ctx, id) if err != nil && !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for existing %s: %+v", id, err) } @@ -99,7 +99,7 @@ func (a ArcPrivateLinkScopeResource) Create() sdk.ResourceFunc { properties.Properties.PublicNetworkAccess = &publicNetwork - if _, err := client.PrivateLinkScopesCreateOrUpdate(ctx, id, properties); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, properties); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } @@ -125,7 +125,7 @@ func (a ArcPrivateLinkScopeResource) Update() sdk.ResourceFunc { return fmt.Errorf("decoding: %+v", err) } - existing, err := client.PrivateLinkScopesGet(ctx, *id) + existing, err := client.Get(ctx, *id) if err != nil { return fmt.Errorf("retrieving %s: %+v", *id, err) } @@ -147,7 +147,7 @@ func (a ArcPrivateLinkScopeResource) Update() sdk.ResourceFunc { properties.Tags = &model.Tags } - if _, err := client.PrivateLinkScopesCreateOrUpdate(ctx, *id, *properties); err != nil { + if _, err := client.CreateOrUpdate(ctx, *id, *properties); err != nil { return fmt.Errorf("updating %s: %+v", id, err) } @@ -168,7 +168,7 @@ func (a ArcPrivateLinkScopeResource) Read() sdk.ResourceFunc { return err } - existing, err := client.PrivateLinkScopesGet(ctx, *id) + existing, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(existing.HttpResponse) { return metadata.MarkAsGone(id) @@ -208,7 +208,7 @@ func (a ArcPrivateLinkScopeResource) Delete() sdk.ResourceFunc { return err } - if err := client.PrivateLinkScopesDeleteThenPoll(ctx, *id); err != nil { + if err := client.DeleteThenPoll(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", *id, err) } diff --git a/internal/services/hybridcompute/arc_private_link_scope_resource_test.go b/internal/services/hybridcompute/arc_private_link_scope_resource_test.go index ff1f6bebda987..a3e2451a9b9a1 100644 --- a/internal/services/hybridcompute/arc_private_link_scope_resource_test.go +++ b/internal/services/hybridcompute/arc_private_link_scope_resource_test.go @@ -99,7 +99,7 @@ func (r ArcPrivateLinkScopeResource) Exists(ctx context.Context, clients *client client := clients.HybridCompute.PrivateLinkScopesClient - resp, err := client.PrivateLinkScopesGet(ctx, *id) + resp, err := client.Get(ctx, *id) exists := false if err != nil { if response.WasNotFound(resp.HttpResponse) { diff --git a/internal/services/iothub/iothub_endpoint_cosmosdb_account_resource.go b/internal/services/iothub/iothub_endpoint_cosmosdb_account_resource.go new file mode 100644 index 0000000000000..b329fc333da0c --- /dev/null +++ b/internal/services/iothub/iothub_endpoint_cosmosdb_account_resource.go @@ -0,0 +1,470 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package iothub + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" + "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" + "github.com/hashicorp/terraform-provider-azurerm/internal/locks" + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/iothub/parse" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/iothub/validate" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" + "github.com/hashicorp/terraform-provider-azurerm/utils" + devices "github.com/tombuildsstuff/kermit/sdk/iothub/2022-04-30-preview/iothub" +) + +type IotHubEndpointCosmosDBAccountResource struct{} + +var ( + _ sdk.ResourceWithUpdate = IotHubEndpointCosmosDBAccountResource{} +) + +type IotHubEndpointCosmosDBAccountModel struct { + Name string `tfschema:"name"` + ResourceGroupName string `tfschema:"resource_group_name"` + AuthenticationType string `tfschema:"authentication_type"` + ContainerName string `tfschema:"container_name"` + DatabaseName string `tfschema:"database_name"` + EndpointUri string `tfschema:"endpoint_uri"` + IdentityId string `tfschema:"identity_id"` + IothubId string `tfschema:"iothub_id"` + PartitionKeyName string `tfschema:"partition_key_name"` + PartitionKeyTemplate string `tfschema:"partition_key_template"` + PrimaryKey string `tfschema:"primary_key"` + SecondaryKey string `tfschema:"secondary_key"` +} + +func (r IotHubEndpointCosmosDBAccountResource) Arguments() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.IoTHubEndpointName, + }, + + "resource_group_name": commonschema.ResourceGroupName(), + + "iothub_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.IotHubID, + }, + + "container_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "database_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "endpoint_uri": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "authentication_type": { + Type: pluginsdk.TypeString, + Optional: true, + Default: string(devices.AuthenticationTypeKeyBased), + ValidateFunc: validation.StringInSlice([]string{ + string(devices.AuthenticationTypeKeyBased), + string(devices.AuthenticationTypeIdentityBased), + }, false), + }, + + "identity_id": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: commonids.ValidateUserAssignedIdentityID, + ConflictsWith: []string{"primary_key", "secondary_key"}, + }, + + "partition_key_name": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + RequiredWith: []string{"partition_key_template"}, + }, + + "partition_key_template": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + RequiredWith: []string{"partition_key_name"}, + }, + + "primary_key": { + Type: pluginsdk.TypeString, + Optional: true, + Sensitive: true, + ValidateFunc: validation.StringIsNotEmpty, + ConflictsWith: []string{"identity_id"}, + RequiredWith: []string{"secondary_key"}, + }, + + "secondary_key": { + Type: pluginsdk.TypeString, + Optional: true, + Sensitive: true, + ValidateFunc: validation.StringIsNotEmpty, + ConflictsWith: []string{"identity_id"}, + RequiredWith: []string{"primary_key"}, + }, + } +} + +func (r IotHubEndpointCosmosDBAccountResource) Attributes() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{} +} + +func (r IotHubEndpointCosmosDBAccountResource) ResourceType() string { + return "azurerm_iothub_endpoint_cosmosdb_account" +} + +func (r IotHubEndpointCosmosDBAccountResource) ModelObject() interface{} { + return &IotHubEndpointCosmosDBAccountResource{} +} + +func (r IotHubEndpointCosmosDBAccountResource) IDValidationFunc() pluginsdk.SchemaValidateFunc { + return validate.EndpointCosmosDBAccountID +} + +func (r IotHubEndpointCosmosDBAccountResource) Create() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + var state IotHubEndpointCosmosDBAccountModel + if err := metadata.Decode(&state); err != nil { + return err + } + + client := metadata.Client.IoTHub.ResourceClient + subscriptionId := metadata.Client.Account.SubscriptionId + + iotHubId, err := parse.IotHubID(state.IothubId) + if err != nil { + return err + } + + id := parse.NewEndpointCosmosDBAccountID(subscriptionId, iotHubId.ResourceGroup, iotHubId.Name, state.Name) + + locks.ByName(iotHubId.Name, IothubResourceName) + defer locks.UnlockByName(iotHubId.Name, IothubResourceName) + + iothub, err := client.Get(ctx, iotHubId.ResourceGroup, iotHubId.Name) + if err != nil { + if utils.ResponseWasNotFound(iothub.Response) { + return fmt.Errorf("%q was not found", iotHubId) + } + + return fmt.Errorf("retrieving %q: %+v", iotHubId, err) + } + + authenticationType := devices.AuthenticationType(state.AuthenticationType) + cosmosDBAccountEndpoint := devices.RoutingCosmosDBSQLAPIProperties{ + Name: pointer.To(id.EndpointName), + SubscriptionID: pointer.To(subscriptionId), + ResourceGroup: pointer.To(state.ResourceGroupName), + AuthenticationType: authenticationType, + CollectionName: pointer.To(state.ContainerName), + DatabaseName: pointer.To(state.DatabaseName), + EndpointURI: pointer.To(state.EndpointUri), + } + + if state.PartitionKeyName != "" { + cosmosDBAccountEndpoint.PartitionKeyName = pointer.To(state.PartitionKeyName) + } + + if state.PartitionKeyTemplate != "" { + cosmosDBAccountEndpoint.PartitionKeyTemplate = pointer.To(state.PartitionKeyTemplate) + } + + if authenticationType == devices.AuthenticationTypeKeyBased { + if state.PrimaryKey == "" || state.SecondaryKey == "" { + return fmt.Errorf("`primary_key` and `secondary_key` must be specified when `authentication_type` is `keyBased`") + } + cosmosDBAccountEndpoint.PrimaryKey = pointer.To(state.PrimaryKey) + cosmosDBAccountEndpoint.SecondaryKey = pointer.To(state.SecondaryKey) + } else { + if state.PrimaryKey != "" || state.SecondaryKey != "" { + return fmt.Errorf("`primary_key` or `secondary_key` cannot be specified when `authentication_type` is `identityBased`") + } + + if state.IdentityId != "" { + cosmosDBAccountEndpoint.Identity = &devices.ManagedIdentity{ + UserAssignedIdentity: pointer.To(state.IdentityId), + } + } + } + + routing := iothub.Properties.Routing + if routing == nil { + routing = &devices.RoutingProperties{} + } + + if routing.Endpoints == nil { + routing.Endpoints = &devices.RoutingEndpoints{} + } + + if routing.Endpoints.CosmosDBSQLCollections == nil { + cosmosDBAccounts := make([]devices.RoutingCosmosDBSQLAPIProperties, 0) + routing.Endpoints.CosmosDBSQLCollections = &cosmosDBAccounts + } + + endpoints := make([]devices.RoutingCosmosDBSQLAPIProperties, 0) + + for _, existingEndpoint := range pointer.From(routing.Endpoints.CosmosDBSQLCollections) { + if strings.EqualFold(pointer.From(existingEndpoint.Name), id.EndpointName) { + return tf.ImportAsExistsError(r.ResourceType(), id.ID()) + } + endpoints = append(endpoints, existingEndpoint) + } + + endpoints = append(endpoints, cosmosDBAccountEndpoint) + routing.Endpoints.CosmosDBSQLCollections = &endpoints + + future, err := client.CreateOrUpdate(ctx, iotHubId.ResourceGroup, iotHubId.Name, iothub, "") + if err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } + + if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for the completion of the creation of %s: %+v", id, err) + } + + metadata.SetID(id) + return nil + }, + Timeout: 30 * time.Minute, + } +} + +func (r IotHubEndpointCosmosDBAccountResource) Read() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.IoTHub.ResourceClient + id, err := parse.EndpointCosmosDBAccountID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + var oldState IotHubEndpointCosmosDBAccountModel + if err = metadata.Decode(&oldState); err != nil { + return err + } + + iothub, err := client.Get(ctx, id.ResourceGroup, id.IotHubName) + if err != nil { + if utils.ResponseWasNotFound(iothub.Response) { + return metadata.MarkAsGone(id) + } + return fmt.Errorf("retrieving %q: %+v", id, err) + } + + if iothub.Properties == nil || iothub.Properties.Routing == nil || iothub.Properties.Routing.Endpoints == nil || iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections == nil { + return metadata.MarkAsGone(id) + } + + for _, endpoint := range pointer.From(iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections) { + if strings.EqualFold(pointer.From(endpoint.Name), id.EndpointName) { + state := &IotHubEndpointCosmosDBAccountModel{ + Name: id.EndpointName, + ResourceGroupName: pointer.From(endpoint.ResourceGroup), + IothubId: parse.NewIotHubID(id.SubscriptionId, id.ResourceGroup, id.IotHubName).ID(), + ContainerName: pointer.From(endpoint.CollectionName), + DatabaseName: pointer.From(endpoint.DatabaseName), + EndpointUri: pointer.From(endpoint.EndpointURI), + PartitionKeyName: pointer.From(endpoint.PartitionKeyName), + PartitionKeyTemplate: pointer.From(endpoint.PartitionKeyTemplate), + PrimaryKey: oldState.PrimaryKey, + SecondaryKey: oldState.SecondaryKey, + } + + authenticationType := string(devices.AuthenticationTypeKeyBased) + if string(endpoint.AuthenticationType) != "" { + authenticationType = string(endpoint.AuthenticationType) + } + state.AuthenticationType = authenticationType + + identityId := "" + if endpoint.Identity != nil && endpoint.Identity.UserAssignedIdentity != nil { + identityId = pointer.From(endpoint.Identity.UserAssignedIdentity) + } + state.IdentityId = identityId + + return metadata.Encode(state) + } + } + + return metadata.MarkAsGone(id) + }, + Timeout: 5 * time.Minute, + } +} + +func (r IotHubEndpointCosmosDBAccountResource) Update() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.IoTHub.ResourceClient + + id, err := parse.EndpointCosmosDBAccountID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + locks.ByName(id.IotHubName, IothubResourceName) + defer locks.UnlockByName(id.IotHubName, IothubResourceName) + + var state IotHubEndpointCosmosDBAccountModel + if err = metadata.Decode(&state); err != nil { + return err + } + + iothub, err := client.Get(ctx, id.ResourceGroup, id.IotHubName) + if err != nil { + if utils.ResponseWasNotFound(iothub.Response) { + return fmt.Errorf("%q was not found", id) + } + + return fmt.Errorf("retrieving %q: %+v", id, err) + } + + if iothub.Properties == nil || iothub.Properties.Routing == nil || iothub.Properties.Routing.Endpoints == nil || iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections == nil { + return fmt.Errorf("%q was not found", id) + } + + for i, endpoint := range pointer.From(iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections) { + if strings.EqualFold(pointer.From(endpoint.Name), id.EndpointName) { + authenticationType := devices.AuthenticationType(state.AuthenticationType) + + if authenticationType == devices.AuthenticationTypeKeyBased { + if state.PrimaryKey == "" || state.SecondaryKey == "" { + return fmt.Errorf("`primary_key` and `secondary_key` must be specified when `authentication_type` is `keyBased`") + } + + endpoint.PrimaryKey = pointer.To(state.PrimaryKey) + endpoint.SecondaryKey = pointer.To(state.SecondaryKey) + endpoint.Identity = nil + } else { + if state.PrimaryKey != "" || state.SecondaryKey != "" { + return fmt.Errorf("`primary_key` or `secondary_key` cannot be specified when `authentication_type` is `identityBased`") + } + + endpoint.PrimaryKey = nil + endpoint.SecondaryKey = nil + if state.IdentityId != "" { + endpoint.Identity = &devices.ManagedIdentity{ + UserAssignedIdentity: pointer.To(state.IdentityId), + } + } else { + endpoint.Identity = nil + } + } + + if metadata.ResourceData.HasChange("authentication_type") { + endpoint.AuthenticationType = authenticationType + } + + if metadata.ResourceData.HasChange("partition_key_name") { + if state.PartitionKeyName == "" { + endpoint.PartitionKeyName = nil + } else { + endpoint.PartitionKeyName = pointer.To(state.PartitionKeyName) + } + } + + if metadata.ResourceData.HasChange("partition_key_template") { + if state.PartitionKeyTemplate == "" { + endpoint.PartitionKeyTemplate = nil + } else { + endpoint.PartitionKeyTemplate = pointer.To(state.PartitionKeyTemplate) + } + } + + (*iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections)[i] = endpoint + + future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.IotHubName, iothub, "") + if err != nil { + return fmt.Errorf("updating %s: %+v", id, err) + } + + if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for the completion of the update of %s: %+v", id, err) + } + + return nil + } + } + + return fmt.Errorf("%q was not found", id) + }, + Timeout: 30 * time.Minute, + } +} + +func (r IotHubEndpointCosmosDBAccountResource) Delete() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.IoTHub.ResourceClient + id, err := parse.EndpointCosmosDBAccountID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + locks.ByName(id.IotHubName, IothubResourceName) + defer locks.UnlockByName(id.IotHubName, IothubResourceName) + + iothub, err := client.Get(ctx, id.ResourceGroup, id.IotHubName) + if err != nil { + if utils.ResponseWasNotFound(iothub.Response) { + return fmt.Errorf("%q was not found", id) + } + return fmt.Errorf("retrieving %q: %+v", id, err) + } + + if iothub.Properties == nil || iothub.Properties.Routing == nil || iothub.Properties.Routing.Endpoints == nil || iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections == nil { + return nil + } + + updatedEndpoints := make([]devices.RoutingCosmosDBSQLAPIProperties, 0) + for _, endpoint := range pointer.From(iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections) { + if !strings.EqualFold(pointer.From(endpoint.Name), id.EndpointName) { + updatedEndpoints = append(updatedEndpoints, endpoint) + } + } + iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections = &updatedEndpoints + + future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.IotHubName, iothub, "") + if err != nil { + return fmt.Errorf("deleting %s: %+v", id, err) + } + + if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for the deletion of %s: %+v", id, err) + } + + return nil + }, + Timeout: 30 * time.Minute, + } +} diff --git a/internal/services/iothub/iothub_endpoint_cosmosdb_account_resource_test.go b/internal/services/iothub/iothub_endpoint_cosmosdb_account_resource_test.go new file mode 100644 index 0000000000000..31bc925c0f6ba --- /dev/null +++ b/internal/services/iothub/iothub_endpoint_cosmosdb_account_resource_test.go @@ -0,0 +1,412 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package iothub_test + +import ( + "context" + "fmt" + "strings" + "testing" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/iothub/parse" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" +) + +type IotHubEndpointCosmosDBAccountResource struct{} + +func TestAccIotHubEndpointCosmosDBAccount_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_iothub_endpoint_cosmosdb_account", "test") + r := IotHubEndpointCosmosDBAccountResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("primary_key", "secondary_key"), + }) +} + +func TestAccIotHubEndpointCosmosDBAccount_requiresImport(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_iothub_endpoint_cosmosdb_account", "test") + r := IotHubEndpointCosmosDBAccountResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + { + Config: r.requiresImport(data), + ExpectError: acceptance.RequiresImportError("azurerm_iothub_endpoint_cosmosdb_account"), + }, + }) +} + +func TestAccIotHubEndpointCosmosDBAccount_authenticationTypeSystemAssignedIdentity(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_iothub_endpoint_cosmosdb_account", "test") + r := IotHubEndpointCosmosDBAccountResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.authenticationTypeSystemAssignedIdentity(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccIotHubEndpointCosmosDBAccount_authenticationTypeUserAssignedIdentity(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_iothub_endpoint_cosmosdb_account", "test") + r := IotHubEndpointCosmosDBAccountResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.authenticationTypeUserAssignedIdentity(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccIotHubEndpointCosmosDBAccount_authenticationTypeUpdate(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_iothub_endpoint_cosmosdb_account", "test") + r := IotHubEndpointCosmosDBAccountResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.authenticationTypeDefault(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("primary_key", "secondary_key"), + { + Config: r.authenticationTypeUserAssignedIdentity(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.authenticationTypeSystemAssignedIdentity(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.authenticationTypeDefault(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("primary_key", "secondary_key"), + }) +} + +func TestAccIotHubEndpointCosmosDBAccount_partitionKey(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_iothub_endpoint_cosmosdb_account", "test") + r := IotHubEndpointCosmosDBAccountResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basicWithPartitionKey(data, "keyName1", "{deviceid}-{YYYY}-{MM}"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("primary_key", "secondary_key"), + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("primary_key", "secondary_key"), + { + Config: r.basicWithPartitionKey(data, "keyName2", "{deviceid}-{MM}-{YYYY}"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("primary_key", "secondary_key"), + }) +} + +func (r IotHubEndpointCosmosDBAccountResource) basic(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_iothub_endpoint_cosmosdb_account" "test" { + name = "acctest" + resource_group_name = azurerm_resource_group.endpoint.name + iothub_id = azurerm_iothub.test.id + container_name = azurerm_cosmosdb_sql_container.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + endpoint_uri = azurerm_cosmosdb_account.test.endpoint + primary_key = azurerm_cosmosdb_account.test.primary_key + secondary_key = azurerm_cosmosdb_account.test.secondary_key +} +`, r.template(data)) +} + +func (r IotHubEndpointCosmosDBAccountResource) requiresImport(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_iothub_endpoint_cosmosdb_account" "import" { + name = azurerm_iothub_endpoint_cosmosdb_account.test.name + resource_group_name = azurerm_iothub_endpoint_cosmosdb_account.test.resource_group_name + iothub_id = azurerm_iothub_endpoint_cosmosdb_account.test.iothub_id + container_name = azurerm_iothub_endpoint_cosmosdb_account.test.container_name + database_name = azurerm_iothub_endpoint_cosmosdb_account.test.database_name + endpoint_uri = azurerm_iothub_endpoint_cosmosdb_account.test.endpoint_uri + primary_key = azurerm_iothub_endpoint_cosmosdb_account.test.primary_key + secondary_key = azurerm_iothub_endpoint_cosmosdb_account.test.secondary_key +} +`, r.basic(data)) +} + +func (r IotHubEndpointCosmosDBAccountResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { + id, err := parse.EndpointCosmosDBAccountID(state.ID) + if err != nil { + return nil, err + } + + iothub, err := clients.IoTHub.ResourceClient.Get(ctx, id.ResourceGroup, id.IotHubName) + if err != nil || iothub.Properties == nil || iothub.Properties.Routing == nil || iothub.Properties.Routing.Endpoints == nil { + return nil, fmt.Errorf("reading %s: %+v", *id, err) + } + + if endpoints := iothub.Properties.Routing.Endpoints.CosmosDBSQLCollections; endpoints != nil { + for _, endpoint := range pointer.From(endpoints) { + if strings.EqualFold(pointer.From(endpoint.Name), id.EndpointName) { + return pointer.To(true), nil + } + } + } + + return pointer.To(false), nil +} + +func (r IotHubEndpointCosmosDBAccountResource) authenticationTypeDefault(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_iothub_endpoint_cosmosdb_account" "test" { + name = "acctest" + resource_group_name = azurerm_resource_group.endpoint.name + iothub_id = azurerm_iothub.test.id + container_name = azurerm_cosmosdb_sql_container.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + endpoint_uri = azurerm_cosmosdb_account.test.endpoint + + primary_key = azurerm_cosmosdb_account.test.primary_key + secondary_key = azurerm_cosmosdb_account.test.secondary_key +} +`, r.authenticationTemplate(data)) +} + +func (r IotHubEndpointCosmosDBAccountResource) authenticationTypeSystemAssignedIdentity(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_iothub_endpoint_cosmosdb_account" "test" { + name = "acctest" + resource_group_name = azurerm_resource_group.endpoint.name + iothub_id = azurerm_iothub.test.id + container_name = azurerm_cosmosdb_sql_container.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + endpoint_uri = azurerm_cosmosdb_account.test.endpoint + + authentication_type = "identityBased" + + depends_on = [ + azurerm_cosmosdb_sql_role_assignment.system, + ] +} +`, r.authenticationTemplate(data)) +} + +func (r IotHubEndpointCosmosDBAccountResource) authenticationTypeUserAssignedIdentity(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_iothub_endpoint_cosmosdb_account" "test" { + name = "acctest" + resource_group_name = azurerm_resource_group.endpoint.name + iothub_id = azurerm_iothub.test.id + container_name = azurerm_cosmosdb_sql_container.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + endpoint_uri = azurerm_cosmosdb_account.test.endpoint + + authentication_type = "identityBased" + identity_id = azurerm_user_assigned_identity.test.id + + depends_on = [ + azurerm_cosmosdb_sql_role_assignment.user, + ] +} +`, r.authenticationTemplate(data)) +} + +func (r IotHubEndpointCosmosDBAccountResource) authenticationTemplate(data acceptance.TestData) string { + return fmt.Sprintf(` +%[1]s + +resource "azurerm_user_assigned_identity" "test" { + name = "acctestuai-%[2]d" + resource_group_name = azurerm_resource_group.iothub.name + location = azurerm_resource_group.iothub.location +} + +resource "azurerm_iothub" "test" { + name = "acctestIoTHub-%[2]d" + resource_group_name = azurerm_resource_group.iothub.name + location = azurerm_resource_group.iothub.location + + sku { + name = "B1" + capacity = "1" + } + + identity { + type = "SystemAssigned, UserAssigned" + identity_ids = [ + azurerm_user_assigned_identity.test.id, + ] + } +} + +resource "azurerm_cosmosdb_sql_role_definition" "test" { + name = "acctestsqlrole%[3]s" + resource_group_name = azurerm_resource_group.endpoint.name + account_name = azurerm_cosmosdb_account.test.name + assignable_scopes = [ + azurerm_cosmosdb_account.test.id, + ] + + permissions { + data_actions = [ + "Microsoft.DocumentDB/databaseAccounts/readMetadata", + ] + } +} + +resource "azurerm_cosmosdb_sql_role_assignment" "system" { + resource_group_name = azurerm_resource_group.endpoint.name + account_name = azurerm_cosmosdb_account.test.name + role_definition_id = azurerm_cosmosdb_sql_role_definition.test.id + principal_id = azurerm_iothub.test.identity[0].principal_id + scope = azurerm_cosmosdb_account.test.id +} + +resource "azurerm_cosmosdb_sql_role_assignment" "user" { + resource_group_name = azurerm_resource_group.endpoint.name + account_name = azurerm_cosmosdb_account.test.name + role_definition_id = azurerm_cosmosdb_sql_role_definition.test.id + principal_id = azurerm_user_assigned_identity.test.principal_id + scope = azurerm_cosmosdb_account.test.id +} +`, r.dependencies(data), data.RandomInteger, data.RandomString) +} + +func (r IotHubEndpointCosmosDBAccountResource) basicWithPartitionKey(data acceptance.TestData, partitionKeyName string, partitionKeyTemplate string) string { + return fmt.Sprintf(` +%s + +resource "azurerm_iothub_endpoint_cosmosdb_account" "test" { + name = "acctest" + resource_group_name = azurerm_resource_group.endpoint.name + iothub_id = azurerm_iothub.test.id + container_name = azurerm_cosmosdb_sql_container.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + endpoint_uri = azurerm_cosmosdb_account.test.endpoint + primary_key = azurerm_cosmosdb_account.test.primary_key + secondary_key = azurerm_cosmosdb_account.test.secondary_key + + partition_key_name = "%s" + partition_key_template = "%s" +} +`, r.template(data), partitionKeyName, partitionKeyTemplate) +} + +func (r IotHubEndpointCosmosDBAccountResource) template(data acceptance.TestData) string { + return fmt.Sprintf(` +%[1]s + +resource "azurerm_iothub" "test" { + name = "acctestIoTHub-%[2]d" + resource_group_name = azurerm_resource_group.iothub.name + location = azurerm_resource_group.iothub.location + + sku { + name = "B1" + capacity = "1" + } +} +`, r.dependencies(data), data.RandomInteger) +} + +func (IotHubEndpointCosmosDBAccountResource) dependencies(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "iothub" { + name = "acctestRG-iothub-%[2]d" + location = "%[1]s" +} + +resource "azurerm_resource_group" "endpoint" { + name = "acctestRG-iothub-endpoint-%[2]d" + location = "%[1]s" +} + +resource "azurerm_cosmosdb_account" "test" { + name = "acctest-ca-%[2]d" + location = azurerm_resource_group.endpoint.location + resource_group_name = azurerm_resource_group.endpoint.name + offer_type = "Standard" + kind = "GlobalDocumentDB" + + consistency_policy { + consistency_level = "Strong" + } + + geo_location { + location = azurerm_resource_group.endpoint.location + failover_priority = 0 + } +} + +resource "azurerm_cosmosdb_sql_database" "test" { + name = "acctest-%[2]d" + resource_group_name = azurerm_cosmosdb_account.test.resource_group_name + account_name = azurerm_cosmosdb_account.test.name +} + +resource "azurerm_cosmosdb_sql_container" "test" { + name = "acctest-CSQLC-%[2]d" + resource_group_name = azurerm_cosmosdb_account.test.resource_group_name + account_name = azurerm_cosmosdb_account.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + partition_key_path = "/definition/id" +} +`, data.Locations.Primary, data.RandomInteger) +} diff --git a/internal/services/iothub/iothub_resource.go b/internal/services/iothub/iothub_resource.go index 7b6a855890631..fb8b7d1541e2f 100644 --- a/internal/services/iothub/iothub_resource.go +++ b/internal/services/iothub/iothub_resource.go @@ -602,6 +602,12 @@ func resourceIotHub() *pluginsdk.Resource { }, }, + "local_authentication_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: true, + }, + "min_tls_version": { Type: pluginsdk.TypeString, Optional: true, @@ -779,6 +785,8 @@ func resourceIotHubCreateUpdate(d *pluginsdk.ResourceData, meta interface{}) err } } + props.Properties.DisableLocalAuth = utils.Bool(!d.Get("local_authentication_enabled").(bool)) + if v, ok := d.GetOk("min_tls_version"); ok { props.Properties.MinTLSVersion = utils.String(v.(string)) } @@ -894,6 +902,12 @@ func resourceIotHubRead(d *pluginsdk.ResourceData, meta interface{}) error { } d.Set("min_tls_version", properties.MinTLSVersion) + + localAuthenticationEnabled := true + if properties.DisableLocalAuth != nil { + localAuthenticationEnabled = !*properties.DisableLocalAuth + } + d.Set("local_authentication_enabled", localAuthenticationEnabled) } identity, err := flattenIotHubIdentity(hub.Identity) diff --git a/internal/services/iothub/iothub_resource_test.go b/internal/services/iothub/iothub_resource_test.go index d1c8a5885c728..a93cdaf8cb7c8 100644 --- a/internal/services/iothub/iothub_resource_test.go +++ b/internal/services/iothub/iothub_resource_test.go @@ -314,6 +314,36 @@ func TestAccIotHub_minTLSVersion(t *testing.T) { }) } +func TestAccIotHub_LocalAuth(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_iothub", "test") + r := IotHubResource{} + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.disableLocalAuth(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("local_authentication_enabled").HasValue("false"), + ), + }, + data.ImportStep(), + { + Config: r.enableLocalAuth(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("local_authentication_enabled").HasValue("true"), + ), + }, + data.ImportStep(), + }) +} + func TestAccIotHub_cloudToDevice(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_iothub", "test") r := IotHubResource{} @@ -1404,6 +1434,72 @@ resource "azurerm_iothub" "test" { `, data.RandomInteger, "eastus", data.RandomInteger) } +func (IotHubResource) disableLocalAuth(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-iothub-%d" + location = "%s" + tags = { + purpose = "testing" + } +} + +resource "azurerm_iothub" "test" { + name = "acctestIoTHub-%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + + local_authentication_enabled = false + + sku { + name = "B1" + capacity = "1" + } + + tags = { + purpose = "testing" + } +} + `, data.RandomInteger, "eastus", data.RandomInteger) +} + +func (IotHubResource) enableLocalAuth(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-iothub-%d" + location = "%s" + tags = { + purpose = "testing" + } +} + +resource "azurerm_iothub" "test" { + name = "acctestIoTHub-%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + + local_authentication_enabled = true + + sku { + name = "B1" + capacity = "1" + } + + tags = { + purpose = "testing" + } +} + `, data.RandomInteger, "eastus", data.RandomInteger) +} + func (IotHubResource) cloudToDevice(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { diff --git a/internal/services/iothub/parse/endpoint_cosmos_db_account.go b/internal/services/iothub/parse/endpoint_cosmos_db_account.go new file mode 100644 index 0000000000000..fe7f715295e0c --- /dev/null +++ b/internal/services/iothub/parse/endpoint_cosmos_db_account.go @@ -0,0 +1,134 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package parse + +// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +type EndpointCosmosDBAccountId struct { + SubscriptionId string + ResourceGroup string + IotHubName string + EndpointName string +} + +func NewEndpointCosmosDBAccountID(subscriptionId, resourceGroup, iotHubName, endpointName string) EndpointCosmosDBAccountId { + return EndpointCosmosDBAccountId{ + SubscriptionId: subscriptionId, + ResourceGroup: resourceGroup, + IotHubName: iotHubName, + EndpointName: endpointName, + } +} + +func (id EndpointCosmosDBAccountId) String() string { + segments := []string{ + fmt.Sprintf("Endpoint Name %q", id.EndpointName), + fmt.Sprintf("Iot Hub Name %q", id.IotHubName), + fmt.Sprintf("Resource Group %q", id.ResourceGroup), + } + segmentsStr := strings.Join(segments, " / ") + return fmt.Sprintf("%s: (%s)", "Endpoint Cosmos D B Account", segmentsStr) +} + +func (id EndpointCosmosDBAccountId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Devices/iotHubs/%s/endpoints/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.IotHubName, id.EndpointName) +} + +// EndpointCosmosDBAccountID parses a EndpointCosmosDBAccount ID into an EndpointCosmosDBAccountId struct +func EndpointCosmosDBAccountID(input string) (*EndpointCosmosDBAccountId, error) { + id, err := resourceids.ParseAzureResourceID(input) + if err != nil { + return nil, fmt.Errorf("parsing %q as an EndpointCosmosDBAccount ID: %+v", input, err) + } + + resourceId := EndpointCosmosDBAccountId{ + SubscriptionId: id.SubscriptionID, + ResourceGroup: id.ResourceGroup, + } + + if resourceId.SubscriptionId == "" { + return nil, fmt.Errorf("ID was missing the 'subscriptions' element") + } + + if resourceId.ResourceGroup == "" { + return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") + } + + if resourceId.IotHubName, err = id.PopSegment("iotHubs"); err != nil { + return nil, err + } + if resourceId.EndpointName, err = id.PopSegment("endpoints"); err != nil { + return nil, err + } + + if err := id.ValidateNoEmptySegments(input); err != nil { + return nil, err + } + + return &resourceId, nil +} + +// EndpointCosmosDBAccountIDInsensitively parses an EndpointCosmosDBAccount ID into an EndpointCosmosDBAccountId struct, insensitively +// This should only be used to parse an ID for rewriting, the EndpointCosmosDBAccountID +// method should be used instead for validation etc. +// +// Whilst this may seem strange, this enables Terraform have consistent casing +// which works around issues in Core, whilst handling broken API responses. +func EndpointCosmosDBAccountIDInsensitively(input string) (*EndpointCosmosDBAccountId, error) { + id, err := resourceids.ParseAzureResourceID(input) + if err != nil { + return nil, err + } + + resourceId := EndpointCosmosDBAccountId{ + SubscriptionId: id.SubscriptionID, + ResourceGroup: id.ResourceGroup, + } + + if resourceId.SubscriptionId == "" { + return nil, fmt.Errorf("ID was missing the 'subscriptions' element") + } + + if resourceId.ResourceGroup == "" { + return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") + } + + // find the correct casing for the 'iotHubs' segment + iotHubsKey := "iotHubs" + for key := range id.Path { + if strings.EqualFold(key, iotHubsKey) { + iotHubsKey = key + break + } + } + if resourceId.IotHubName, err = id.PopSegment(iotHubsKey); err != nil { + return nil, err + } + + // find the correct casing for the 'endpoints' segment + endpointsKey := "endpoints" + for key := range id.Path { + if strings.EqualFold(key, endpointsKey) { + endpointsKey = key + break + } + } + if resourceId.EndpointName, err = id.PopSegment(endpointsKey); err != nil { + return nil, err + } + + if err := id.ValidateNoEmptySegments(input); err != nil { + return nil, err + } + + return &resourceId, nil +} diff --git a/internal/services/compute/parse/virtual_machine_scale_set_test.go b/internal/services/iothub/parse/endpoint_cosmos_db_account_test.go similarity index 53% rename from internal/services/compute/parse/virtual_machine_scale_set_test.go rename to internal/services/iothub/parse/endpoint_cosmos_db_account_test.go index 0e428925adcf9..3f20debf36754 100644 --- a/internal/services/compute/parse/virtual_machine_scale_set_test.go +++ b/internal/services/iothub/parse/endpoint_cosmos_db_account_test.go @@ -11,21 +11,21 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" ) -var _ resourceids.Id = VirtualMachineScaleSetId{} +var _ resourceids.Id = EndpointCosmosDBAccountId{} -func TestVirtualMachineScaleSetIDFormatter(t *testing.T) { - actual := NewVirtualMachineScaleSetID("12345678-1234-9876-4563-123456789012", "resGroup1", "scaleSet1").ID() - expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleSet1" +func TestEndpointCosmosDBAccountIDFormatter(t *testing.T) { + actual := NewEndpointCosmosDBAccountID("12345678-1234-9876-4563-123456789012", "resGroup1", "hub1", "cosmosDBAccountEndpoint1").ID() + expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/cosmosDBAccountEndpoint1" if actual != expected { t.Fatalf("Expected %q but got %q", expected, actual) } } -func TestVirtualMachineScaleSetID(t *testing.T) { +func TestEndpointCosmosDBAccountID(t *testing.T) { testData := []struct { Input string Error bool - Expected *VirtualMachineScaleSetId + Expected *EndpointCosmosDBAccountId }{ { @@ -59,30 +59,43 @@ func TestVirtualMachineScaleSetID(t *testing.T) { }, { - // missing Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/", + // missing IotHubName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/", Error: true, }, { - // missing value for Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/", + // missing value for IotHubName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/", + Error: true, + }, + + { + // missing EndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/", + Error: true, + }, + + { + // missing value for EndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/", Error: true, }, { // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleSet1", - Expected: &VirtualMachineScaleSetId{ + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/cosmosDBAccountEndpoint1", + Expected: &EndpointCosmosDBAccountId{ SubscriptionId: "12345678-1234-9876-4563-123456789012", ResourceGroup: "resGroup1", - Name: "scaleSet1", + IotHubName: "hub1", + EndpointName: "cosmosDBAccountEndpoint1", }, }, { // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.COMPUTE/VIRTUALMACHINESCALESETS/SCALESET1", + Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/HUB1/ENDPOINTS/COSMOSDBACCOUNTENDPOINT1", Error: true, }, } @@ -90,7 +103,7 @@ func TestVirtualMachineScaleSetID(t *testing.T) { for _, v := range testData { t.Logf("[DEBUG] Testing %q", v.Input) - actual, err := VirtualMachineScaleSetID(v.Input) + actual, err := EndpointCosmosDBAccountID(v.Input) if err != nil { if v.Error { continue @@ -108,17 +121,20 @@ func TestVirtualMachineScaleSetID(t *testing.T) { if actual.ResourceGroup != v.Expected.ResourceGroup { t.Fatalf("Expected %q but got %q for ResourceGroup", v.Expected.ResourceGroup, actual.ResourceGroup) } - if actual.Name != v.Expected.Name { - t.Fatalf("Expected %q but got %q for Name", v.Expected.Name, actual.Name) + if actual.IotHubName != v.Expected.IotHubName { + t.Fatalf("Expected %q but got %q for IotHubName", v.Expected.IotHubName, actual.IotHubName) + } + if actual.EndpointName != v.Expected.EndpointName { + t.Fatalf("Expected %q but got %q for EndpointName", v.Expected.EndpointName, actual.EndpointName) } } } -func TestVirtualMachineScaleSetIDInsensitively(t *testing.T) { +func TestEndpointCosmosDBAccountIDInsensitively(t *testing.T) { testData := []struct { Input string Error bool - Expected *VirtualMachineScaleSetId + Expected *EndpointCosmosDBAccountId }{ { @@ -152,54 +168,70 @@ func TestVirtualMachineScaleSetIDInsensitively(t *testing.T) { }, { - // missing Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/", + // missing IotHubName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/", Error: true, }, { - // missing value for Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/", + // missing value for IotHubName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/", + Error: true, + }, + + { + // missing EndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/", + Error: true, + }, + + { + // missing value for EndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/", Error: true, }, { // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleSet1", - Expected: &VirtualMachineScaleSetId{ + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/cosmosDBAccountEndpoint1", + Expected: &EndpointCosmosDBAccountId{ SubscriptionId: "12345678-1234-9876-4563-123456789012", ResourceGroup: "resGroup1", - Name: "scaleSet1", + IotHubName: "hub1", + EndpointName: "cosmosDBAccountEndpoint1", }, }, { // lower-cased segment names - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/virtualmachinescalesets/scaleSet1", - Expected: &VirtualMachineScaleSetId{ + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iothubs/hub1/endpoints/cosmosDBAccountEndpoint1", + Expected: &EndpointCosmosDBAccountId{ SubscriptionId: "12345678-1234-9876-4563-123456789012", ResourceGroup: "resGroup1", - Name: "scaleSet1", + IotHubName: "hub1", + EndpointName: "cosmosDBAccountEndpoint1", }, }, { // upper-cased segment names - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/VIRTUALMACHINESCALESETS/scaleSet1", - Expected: &VirtualMachineScaleSetId{ + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/IOTHUBS/hub1/ENDPOINTS/cosmosDBAccountEndpoint1", + Expected: &EndpointCosmosDBAccountId{ SubscriptionId: "12345678-1234-9876-4563-123456789012", ResourceGroup: "resGroup1", - Name: "scaleSet1", + IotHubName: "hub1", + EndpointName: "cosmosDBAccountEndpoint1", }, }, { // mixed-cased segment names - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Compute/ViRtUaLmAcHiNeScAlEsEtS/scaleSet1", - Expected: &VirtualMachineScaleSetId{ + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/IoThUbS/hub1/EnDpOiNtS/cosmosDBAccountEndpoint1", + Expected: &EndpointCosmosDBAccountId{ SubscriptionId: "12345678-1234-9876-4563-123456789012", ResourceGroup: "resGroup1", - Name: "scaleSet1", + IotHubName: "hub1", + EndpointName: "cosmosDBAccountEndpoint1", }, }, } @@ -207,7 +239,7 @@ func TestVirtualMachineScaleSetIDInsensitively(t *testing.T) { for _, v := range testData { t.Logf("[DEBUG] Testing %q", v.Input) - actual, err := VirtualMachineScaleSetIDInsensitively(v.Input) + actual, err := EndpointCosmosDBAccountIDInsensitively(v.Input) if err != nil { if v.Error { continue @@ -225,8 +257,11 @@ func TestVirtualMachineScaleSetIDInsensitively(t *testing.T) { if actual.ResourceGroup != v.Expected.ResourceGroup { t.Fatalf("Expected %q but got %q for ResourceGroup", v.Expected.ResourceGroup, actual.ResourceGroup) } - if actual.Name != v.Expected.Name { - t.Fatalf("Expected %q but got %q for Name", v.Expected.Name, actual.Name) + if actual.IotHubName != v.Expected.IotHubName { + t.Fatalf("Expected %q but got %q for IotHubName", v.Expected.IotHubName, actual.IotHubName) + } + if actual.EndpointName != v.Expected.EndpointName { + t.Fatalf("Expected %q but got %q for EndpointName", v.Expected.EndpointName, actual.EndpointName) } } } diff --git a/internal/services/iothub/registration.go b/internal/services/iothub/registration.go index e4173a175b14f..4cc375619b38e 100644 --- a/internal/services/iothub/registration.go +++ b/internal/services/iothub/registration.go @@ -67,5 +67,6 @@ func (r Registration) Resources() []sdk.Resource { IotHubDeviceUpdateAccountResource{}, IotHubDeviceUpdateInstanceResource{}, IotHubFileUploadResource{}, + IotHubEndpointCosmosDBAccountResource{}, } } diff --git a/internal/services/iothub/resourceids.go b/internal/services/iothub/resourceids.go index 86659b71f7e33..e0853d4d72c66 100644 --- a/internal/services/iothub/resourceids.go +++ b/internal/services/iothub/resourceids.go @@ -9,6 +9,7 @@ package iothub //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=FallbackRoute -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/fallbackRoute/default -rewrite=true //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=Route -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/routes/route1 -rewrite=true //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=SharedAccessPolicy -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/iotHubKeys/sharedAccessPolicy1 -rewrite=true +//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=EndpointCosmosDBAccount -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/cosmosDBAccountEndpoint1 -rewrite=true //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=EndpointStorageContainer -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/storageContainerEndpoint1 -rewrite=true //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=EndpointServiceBusTopic -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/serviceBusTopicEndpoint1 -rewrite=true //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=EndpointServiceBusQueue -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/serviceBusQueueEndpoint1 -rewrite=true diff --git a/internal/services/compute/validate/virtual_machine_id.go b/internal/services/iothub/validate/endpoint_cosmos_db_account_id.go similarity index 70% rename from internal/services/compute/validate/virtual_machine_id.go rename to internal/services/iothub/validate/endpoint_cosmos_db_account_id.go index f92760006f0fe..b3e4901a0a0b5 100644 --- a/internal/services/compute/validate/virtual_machine_id.go +++ b/internal/services/iothub/validate/endpoint_cosmos_db_account_id.go @@ -8,17 +8,17 @@ package validate import ( "fmt" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/iothub/parse" ) -func VirtualMachineID(input interface{}, key string) (warnings []string, errors []error) { +func EndpointCosmosDBAccountID(input interface{}, key string) (warnings []string, errors []error) { v, ok := input.(string) if !ok { errors = append(errors, fmt.Errorf("expected %q to be a string", key)) return } - if _, err := parse.VirtualMachineID(v); err != nil { + if _, err := parse.EndpointCosmosDBAccountID(v); err != nil { errors = append(errors, err) } diff --git a/internal/services/cosmos/validate/cassandra_datacenter_id_test.go b/internal/services/iothub/validate/endpoint_cosmos_db_account_id_test.go similarity index 66% rename from internal/services/cosmos/validate/cassandra_datacenter_id_test.go rename to internal/services/iothub/validate/endpoint_cosmos_db_account_id_test.go index ceda442dd502b..a48f5fbdd44bc 100644 --- a/internal/services/cosmos/validate/cassandra_datacenter_id_test.go +++ b/internal/services/iothub/validate/endpoint_cosmos_db_account_id_test.go @@ -7,7 +7,7 @@ package validate import "testing" -func TestCassandraDatacenterID(t *testing.T) { +func TestEndpointCosmosDBAccountID(t *testing.T) { cases := []struct { Input string Valid bool @@ -44,44 +44,44 @@ func TestCassandraDatacenterID(t *testing.T) { }, { - // missing CassandraClusterName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/", + // missing IotHubName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/", Valid: false, }, { - // missing value for CassandraClusterName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/", + // missing value for IotHubName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/", Valid: false, }, { - // missing DataCenterName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1/", + // missing EndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/", Valid: false, }, { - // missing value for DataCenterName - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1/dataCenters/", + // missing value for EndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/", Valid: false, }, { // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.DocumentDB/cassandraClusters/cluster1/dataCenters/dc1", + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/cosmosDBAccountEndpoint1", Valid: true, }, { // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.DOCUMENTDB/CASSANDRACLUSTERS/CLUSTER1/DATACENTERS/DC1", + Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/HUB1/ENDPOINTS/COSMOSDBACCOUNTENDPOINT1", Valid: false, }, } for _, tc := range cases { t.Logf("[DEBUG] Testing Value %s", tc.Input) - _, errors := CassandraDatacenterID(tc.Input, "test") + _, errors := EndpointCosmosDBAccountID(tc.Input, "test") valid := len(errors) == 0 if tc.Valid != valid { diff --git a/internal/services/keyvault/key_vault_certificate_resource.go b/internal/services/keyvault/key_vault_certificate_resource.go index 93e5e5939637c..ce9d02e06a02b 100644 --- a/internal/services/keyvault/key_vault_certificate_resource.go +++ b/internal/services/keyvault/key_vault_certificate_resource.go @@ -15,6 +15,7 @@ import ( "time" "github.com/Azure/go-autorest/autorest" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" @@ -605,9 +606,16 @@ func resourceKeyVaultCertificateUpdate(d *schema.ResourceData, meta interface{}) if err != nil { return err } - if resp.ID != nil { - d.SetId(id.ID()) + + if resp.ID == nil { + return fmt.Errorf("error: Certificate %q in Vault %q get nil ID from server", id.Name, id.KeyVaultBaseUrl) + } + + certificateId, err := parse.ParseNestedItemID(*resp.ID) + if err != nil { + return err } + d.SetId(certificateId.ID()) } } if d.HasChange("certificate_policy") { @@ -646,6 +654,12 @@ func keyVaultCertificateCreationRefreshFunc(ctx context.Context, client *keyvaul } if strings.EqualFold(*operation.Status, "inProgress") { + if issuer := operation.IssuerParameters; issuer != nil { + if strings.EqualFold(pointer.From(issuer.Name), "unknown") { + return operation, "Ready", nil + } + } + return operation, "Provisioning", nil } diff --git a/internal/services/keyvault/key_vault_key_resource.go b/internal/services/keyvault/key_vault_key_resource.go index 4eafbaba1e657..610ef37ecceee 100644 --- a/internal/services/keyvault/key_vault_key_resource.go +++ b/internal/services/keyvault/key_vault_key_resource.go @@ -256,6 +256,12 @@ func resourceKeyVaultKey() *pluginsdk.Resource { "tags": tags.Schema(), }, + + CustomizeDiff: pluginsdk.CustomDiffWithAll( + pluginsdk.ForceNewIfChange("expiration_date", func(ctx context.Context, old, new, meta interface{}) bool { + return old.(string) != "" && new.(string) == "" + }), + ), } } diff --git a/internal/services/keyvault/key_vault_managed_storage_account.go b/internal/services/keyvault/key_vault_managed_storage_account.go index 730e01e574ca2..cb63025dbdea3 100644 --- a/internal/services/keyvault/key_vault_managed_storage_account.go +++ b/internal/services/keyvault/key_vault_managed_storage_account.go @@ -169,7 +169,7 @@ func resourceKeyVaultManagedStorageAccountCreateUpdate(d *pluginsdk.ResourceData return fmt.Errorf("cannot read Managed Storage Account ID %q (Key Vault %q)", name, *keyVaultId) } - storageId, err := commonids.ParseStorageAccountID(*read.ID) + storageId, err := keyVaultParse.ParseOptionallyVersionedNestedItemID(*read.ID) if err != nil { return err } diff --git a/internal/services/keyvault/key_vault_managed_storage_account_sas_token_definition_resource.go b/internal/services/keyvault/key_vault_managed_storage_account_sas_token_definition_resource.go index ce7320c52c08f..d4e7f53574681 100644 --- a/internal/services/keyvault/key_vault_managed_storage_account_sas_token_definition_resource.go +++ b/internal/services/keyvault/key_vault_managed_storage_account_sas_token_definition_resource.go @@ -180,7 +180,12 @@ func resourceKeyVaultManagedStorageAccountSasTokenDefinitionCreateUpdate(d *plug return fmt.Errorf("cannot read Managed Storage Account Sas Definition %q (Storage Account %q, Key Vault %q)", name, storageAccount.Name, *keyVaultId) } - d.SetId(*read.ID) + sasId, err := parse.SasDefinitionID(*read.ID) + if err != nil { + return err + } + + d.SetId(sasId.ID()) return resourceKeyVaultManagedStorageAccountSasTokenDefinitionRead(d, meta) } diff --git a/internal/services/keyvault/parse/nested_item.go b/internal/services/keyvault/parse/nested_item.go index 0beed86564cba..baa588a2d63bb 100644 --- a/internal/services/keyvault/parse/nested_item.go +++ b/internal/services/keyvault/parse/nested_item.go @@ -152,7 +152,7 @@ func parseNestedItemId(id string) (*NestedItemId, error) { nestedItemObjectType := NestedItemObjectType(components[0]) childId := NestedItemId{ - KeyVaultBaseUrl: fmt.Sprintf("%s://%s/", idURL.Scheme, idURL.Host), + KeyVaultBaseUrl: fmt.Sprintf("https://%s/", idURL.Host), NestedItemType: nestedItemObjectType, Name: components[1], Version: version, diff --git a/internal/services/keyvault/parse/sas_definition.go b/internal/services/keyvault/parse/sas_definition.go index f6bb96fa519c6..4ce8d10a6ffba 100644 --- a/internal/services/keyvault/parse/sas_definition.go +++ b/internal/services/keyvault/parse/sas_definition.go @@ -15,6 +15,11 @@ type SasDefinitionId struct { Name string } +func (i SasDefinitionId) ID() string { + fmtString := "%s/storage/%s/sas/%s" + return fmt.Sprintf(fmtString, i.KeyVaultBaseUrl, i.StorageAccountName, i.Name) +} + func SasDefinitionID(id string) (*SasDefinitionId, error) { // example: https://example-keyvault.vault.azure.net/storage/exampleStorageAcc01/sas/exampleSasDefinition01 idURL, err := url.ParseRequestURI(id) @@ -38,7 +43,7 @@ func SasDefinitionID(id string) (*SasDefinitionId, error) { } sasDefinitionId := SasDefinitionId{ - KeyVaultBaseUrl: fmt.Sprintf("%s://%s/", idURL.Scheme, idURL.Host), + KeyVaultBaseUrl: fmt.Sprintf("https://%s", idURL.Host), StorageAccountName: components[1], Name: components[3], } diff --git a/internal/services/legacy/virtual_machine_resource.go b/internal/services/legacy/virtual_machine_resource.go index a61fc122fc173..526b1244f56ba 100644 --- a/internal/services/legacy/virtual_machine_resource.go +++ b/internal/services/legacy/virtual_machine_resource.go @@ -14,13 +14,12 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/locks" compute2 "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" networkParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse" intStor "github.com/hashicorp/terraform-provider-azurerm/internal/services/storage/client" @@ -62,7 +61,7 @@ func resourceVirtualMachine() *pluginsdk.Resource { Update: resourceVirtualMachineCreateUpdate, Delete: resourceVirtualMachineDelete, Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { - _, err := parse.VirtualMachineID(id) + _, err := commonids.ParseVirtualMachineID(id) return err }), @@ -645,10 +644,10 @@ func resourceVirtualMachineCreateUpdate(d *pluginsdk.ResourceData, meta interfac defer cancel() log.Printf("[INFO] preparing arguments for Azure ARM Virtual Machine creation.") - id := parse.NewVirtualMachineID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + id := commonids.NewVirtualMachineID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) if d.IsNewResource() { - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { if !utils.ResponseWasNotFound(existing.Response) { return fmt.Errorf("checking for presence of existing %s: %s", id, err) @@ -738,7 +737,7 @@ func resourceVirtualMachineCreateUpdate(d *pluginsdk.ResourceData, meta interfac } vm := compute.VirtualMachine{ - Name: &id.Name, + Name: &id.VirtualMachineName, Location: &location, VirtualMachineProperties: &properties, Tags: expandedTags, @@ -753,10 +752,10 @@ func resourceVirtualMachineCreateUpdate(d *pluginsdk.ResourceData, meta interfac vm.Plan = expandAzureRmVirtualMachinePlan(d) } - locks.ByName(id.Name, compute2.VirtualMachineResourceName) - defer locks.UnlockByName(id.Name, compute2.VirtualMachineResourceName) + locks.ByName(id.VirtualMachineName, compute2.VirtualMachineResourceName) + defer locks.UnlockByName(id.VirtualMachineName, compute2.VirtualMachineResourceName) - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, vm) + future, err := client.CreateOrUpdate(ctx, id.ResourceGroupName, id.VirtualMachineName, vm) if err != nil { return err } @@ -765,7 +764,7 @@ func resourceVirtualMachineCreateUpdate(d *pluginsdk.ResourceData, meta interfac return err } - read, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + read, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { return err } @@ -801,22 +800,22 @@ func resourceVirtualMachineRead(d *pluginsdk.ResourceData, meta interface{}) err ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineID(d.Id()) + id, err := commonids.ParseVirtualMachineID(d.Id()) if err != nil { return err } - resp, err := vmclient.Get(ctx, id.ResourceGroup, id.Name, "") + resp, err := vmclient.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { if utils.ResponseWasNotFound(resp.Response) { d.SetId("") return nil } - return fmt.Errorf("making Read request on Azure Virtual Machine %s: %+v", id.Name, err) + return fmt.Errorf("making Read request on %s: %+v", id, err) } - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) + d.Set("name", id.VirtualMachineName) + d.Set("resource_group_name", id.ResourceGroupName) d.Set("zones", resp.Zones) if location := resp.Location; location != nil { d.Set("location", azure.NormalizeLocation(*location)) @@ -933,15 +932,15 @@ func resourceVirtualMachineDelete(d *pluginsdk.ResourceData, meta interface{}) e ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineID(d.Id()) + id, err := commonids.ParseVirtualMachineID(d.Id()) if err != nil { return err } - locks.ByName(id.Name, compute2.VirtualMachineResourceName) - defer locks.UnlockByName(id.Name, compute2.VirtualMachineResourceName) + locks.ByName(id.VirtualMachineName, compute2.VirtualMachineResourceName) + defer locks.UnlockByName(id.VirtualMachineName, compute2.VirtualMachineResourceName) - virtualMachine, err := client.Get(ctx, id.ResourceGroup, id.Name, "") + virtualMachine, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { return fmt.Errorf("retrieving Virtual Machine %q : %s", id.String(), err) } @@ -949,7 +948,7 @@ func resourceVirtualMachineDelete(d *pluginsdk.ResourceData, meta interface{}) e // @tombuildsstuff: sending `nil` here omits this value from being sent - which matches // the previous behaviour - we're only splitting this out so it's clear why var forceDeletion *bool = nil - future, err := client.Delete(ctx, id.ResourceGroup, id.Name, forceDeletion) + future, err := client.Delete(ctx, id.ResourceGroupName, id.VirtualMachineName, forceDeletion) if err != nil { return fmt.Errorf("deleting Virtual Machine %q : %s", id.String(), err) } @@ -967,21 +966,21 @@ func resourceVirtualMachineDelete(d *pluginsdk.ResourceData, meta interface{}) e props := virtualMachine.VirtualMachineProperties if props == nil { - return fmt.Errorf("deleting Disks for Virtual Machine %q - `props` was nil", id.Name) + return fmt.Errorf("deleting Disks for %s - `props` was nil", id) } storageProfile := props.StorageProfile if storageProfile == nil { - return fmt.Errorf("deleting Disks for Virtual Machine %q - `storageProfile` was nil", id.Name) + return fmt.Errorf("deleting Disks for %s - `storageProfile` was nil", id) } if deleteOsDisk { - log.Printf("[INFO] delete_os_disk_on_termination is enabled, deleting disk from %s", id.Name) + log.Printf("[INFO] delete_os_disk_on_termination is enabled, deleting disk from %s", id) osDisk := storageProfile.OsDisk if osDisk == nil { - return fmt.Errorf("deleting OS Disk for Virtual Machine %q - `osDisk` was nil", id.Name) + return fmt.Errorf("deleting OS Disk for %s - `osDisk` was nil", id) } if osDisk.Vhd == nil && osDisk.ManagedDisk == nil { - return fmt.Errorf("Unable to determine OS Disk Type to Delete it for Virtual Machine %q", id.Name) + return fmt.Errorf("unable to determine OS Disk Type to Delete it for %s", id) } if osDisk.Vhd != nil { @@ -997,16 +996,16 @@ func resourceVirtualMachineDelete(d *pluginsdk.ResourceData, meta interface{}) e // delete Data disks if opted in if deleteDataDisks { - log.Printf("[INFO] delete_data_disks_on_termination is enabled, deleting each data disk from %q", id.Name) + log.Printf("[INFO] delete_data_disks_on_termination is enabled, deleting each data disk from %s", id) dataDisks := storageProfile.DataDisks if dataDisks == nil { - return fmt.Errorf("deleting Data Disks for Virtual Machine %q: `dataDisks` was nil", id.Name) + return fmt.Errorf("deleting Data Disks for %s: `dataDisks` was nil", id) } for _, disk := range *dataDisks { if disk.Vhd == nil && disk.ManagedDisk == nil { - return fmt.Errorf("Unable to determine Data Disk Type to Delete it for Virtual Machine %q / Disk %q", id.Name, *disk.Name) + return fmt.Errorf("unable to determine Data Disk Type to Delete it for %s / Disk %q", id, *disk.Name) } if disk.Vhd != nil { diff --git a/internal/services/legacy/virtual_machine_resource_test.go b/internal/services/legacy/virtual_machine_resource_test.go index 3f151eda08b81..7429e4d86f16a 100644 --- a/internal/services/legacy/virtual_machine_resource_test.go +++ b/internal/services/legacy/virtual_machine_resource_test.go @@ -8,11 +8,11 @@ import ( "fmt" "testing" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" "github.com/tombuildsstuff/giovanni/storage/2020-08-04/blob/blobs" @@ -101,12 +101,12 @@ func TestAccVirtualMachine_withPPG(t *testing.T) { } func (VirtualMachineResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.VirtualMachineID(state.ID) + id, err := commonids.ParseVirtualMachineID(state.ID) if err != nil { return nil, err } - resp, err := clients.Legacy.VMClient.Get(ctx, id.ResourceGroup, id.Name, "") + resp, err := clients.Legacy.VMClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { return nil, fmt.Errorf("retrieving Compute Virtual Machine %q", id) } @@ -171,12 +171,12 @@ func (VirtualMachineResource) managedDiskExists(diskId *string, shouldExist bool func (VirtualMachineResource) findManagedDiskID(field string, managedDiskID *string) acceptance.ClientCheckFunc { return func(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) error { - id, err := parse.VirtualMachineID(state.ID) + id, err := commonids.ParseVirtualMachineID(state.ID) if err != nil { return err } - virtualMachine, err := clients.Legacy.VMClient.Get(ctx, id.ResourceGroup, id.Name, "") + virtualMachine, err := clients.Legacy.VMClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineName, "") if err != nil { return err } @@ -216,13 +216,13 @@ func (VirtualMachineResource) findManagedDiskID(field string, managedDiskID *str } func (VirtualMachineResource) deallocate(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) error { - vmID, err := parse.VirtualMachineID(state.ID) + vmID, err := commonids.ParseVirtualMachineID(state.ID) if err != nil { return err } - name := vmID.Name - resourceGroup := vmID.ResourceGroup + name := vmID.VirtualMachineName + resourceGroup := vmID.ResourceGroupName // Upgrading to the 2021-07-01 exposed a new hibernate parameter in the GET method future, err := client.Legacy.VMClient.Deallocate(ctx, resourceGroup, name, utils.Bool(false)) diff --git a/internal/services/legacy/virtual_machine_scale_set_resource.go b/internal/services/legacy/virtual_machine_scale_set_resource.go index 6122a75d4d532..230110209321d 100644 --- a/internal/services/legacy/virtual_machine_scale_set_resource.go +++ b/internal/services/legacy/virtual_machine_scale_set_resource.go @@ -17,7 +17,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" validate2 "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/services/legacy/migration" "github.com/hashicorp/terraform-provider-azurerm/internal/tags" @@ -49,7 +48,7 @@ func resourceVirtualMachineScaleSet() *pluginsdk.Resource { DeprecationMessage: `The 'azurerm_virtual_machine_scale_set' resource has been superseded by the 'azurerm_linux_virtual_machine_scale_set' and 'azurerm_windows_virtual_machine_scale_set' resources. Whilst this resource will continue to be available in the 2.x and 3.x releases it is feature-frozen for compatibility purposes, will no longer receive any updates and will be removed in a future major release of the Azure Provider.`, Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { - _, err := parse.VirtualMachineScaleSetID(id) + _, err := commonids.ParseVirtualMachineScaleSetID(id) return err }), @@ -814,11 +813,11 @@ func resourceVirtualMachineScaleSetCreateUpdate(d *pluginsdk.ResourceData, meta log.Printf("[INFO] preparing arguments for Azure ARM Virtual Machine Scale Set creation.") - id := parse.NewVirtualMachineScaleSetID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + id := commonids.NewVirtualMachineScaleSetID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) if d.IsNewResource() { // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - existing, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + existing, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if !utils.ResponseWasNotFound(existing.Response) { return fmt.Errorf("checking for presence of existing %s: %s", id, err) @@ -917,7 +916,7 @@ func resourceVirtualMachineScaleSetCreateUpdate(d *pluginsdk.ResourceData, meta } properties := compute.VirtualMachineScaleSet{ - Name: &id.Name, + Name: &id.VirtualMachineScaleSetName, Location: &location, Tags: tags.Expand(t), Sku: sku, @@ -937,7 +936,7 @@ func resourceVirtualMachineScaleSetCreateUpdate(d *pluginsdk.ResourceData, meta properties.Plan = expandAzureRmVirtualMachineScaleSetPlan(d) } - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, properties) + future, err := client.CreateOrUpdate(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, properties) if err != nil { return err } @@ -956,24 +955,24 @@ func resourceVirtualMachineScaleSetRead(d *pluginsdk.ResourceData, meta interfac ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - resp, err := client.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + resp, err := client.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { if utils.ResponseWasNotFound(resp.Response) { - log.Printf("[INFO] AzureRM Virtual Machine Scale Set (%s) Not Found. Removing from State", id.Name) + log.Printf("[INFO] %s was not found. Removing from State", id) d.SetId("") return nil } - return fmt.Errorf("making Read request on Azure Virtual Machine Scale Set %s: %+v", id.Name, err) + return fmt.Errorf("making Read request on %s: %+v", id, err) } - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) + d.Set("name", id.VirtualMachineScaleSetName) + d.Set("resource_group_name", id.ResourceGroupName) if location := resp.Location; location != nil { d.Set("location", azure.NormalizeLocation(*location)) } @@ -1116,7 +1115,7 @@ func resourceVirtualMachineScaleSetDelete(d *pluginsdk.ResourceData, meta interf ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VirtualMachineScaleSetID(d.Id()) + id, err := commonids.ParseVirtualMachineScaleSetID(d.Id()) if err != nil { return err } @@ -1124,7 +1123,7 @@ func resourceVirtualMachineScaleSetDelete(d *pluginsdk.ResourceData, meta interf // @ArcturusZhang (mimicking from virtual_machine_pluginsdk.go): sending `nil` here omits this value from being sent // which matches the previous behaviour - we're only splitting this out so it's clear why var forceDeletion *bool = nil - future, err := client.Delete(ctx, id.ResourceGroup, id.Name, forceDeletion) + future, err := client.Delete(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, forceDeletion) if err != nil { return err } diff --git a/internal/services/legacy/virtual_machine_scale_set_resource_test.go b/internal/services/legacy/virtual_machine_scale_set_resource_test.go index 8cf810cd734f8..e50505ddd8815 100644 --- a/internal/services/legacy/virtual_machine_scale_set_resource_test.go +++ b/internal/services/legacy/virtual_machine_scale_set_resource_test.go @@ -10,10 +10,10 @@ import ( "testing" "time" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" "github.com/tombuildsstuff/kermit/sdk/compute/2023-03-01/compute" @@ -799,14 +799,14 @@ func TestAccVirtualMachineScaleSet_importBasic_managedDisk_withZones(t *testing. } func (VirtualMachineScaleSetResource) Destroy(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return nil, err } // this is a preview feature we don't want to use right now var forceDelete *bool = nil - future, err := client.Legacy.VMScaleSetClient.Delete(ctx, id.ResourceGroup, id.Name, forceDelete) + future, err := client.Legacy.VMScaleSetClient.Delete(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, forceDelete) if err != nil { return nil, fmt.Errorf("Bad: deleting %s: %+v", *id, err) } @@ -819,13 +819,13 @@ func (VirtualMachineScaleSetResource) Destroy(ctx context.Context, client *clien } func (VirtualMachineScaleSetResource) hasLoadBalancer(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) error { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - read, err := client.Legacy.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + read, err := client.Legacy.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { return err } @@ -858,13 +858,13 @@ func (VirtualMachineScaleSetResource) hasLoadBalancer(ctx context.Context, clien } func (VirtualMachineScaleSetResource) hasApplicationGateway(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) error { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - read, err := client.Legacy.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + read, err := client.Legacy.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { return err } @@ -897,15 +897,15 @@ func (VirtualMachineScaleSetResource) hasApplicationGateway(ctx context.Context, } func (t VirtualMachineScaleSetResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.VirtualMachineScaleSetID(state.ID) + id, err := commonids.ParseVirtualMachineScaleSetID(state.ID) if err != nil { return nil, err } // Upgrading to the 2021-07-01 exposed a new expand parameter in the GET method - resp, err := clients.Legacy.VMScaleSetClient.Get(ctx, id.ResourceGroup, id.Name, compute.ExpandTypesForGetVMScaleSetsUserData) + resp, err := clients.Legacy.VMScaleSetClient.Get(ctx, id.ResourceGroupName, id.VirtualMachineScaleSetName, compute.ExpandTypesForGetVMScaleSetsUserData) if err != nil { - return nil, fmt.Errorf("retrieving Compute Virtual Machine Scale Set %q", id) + return nil, fmt.Errorf("retrieving %s: %+v", id, err) } return utils.Bool(resp.ID != nil), nil diff --git a/internal/services/loganalytics/log_analytics_query_pack_resource.go b/internal/services/loganalytics/log_analytics_query_pack_resource.go index cfaed2f7233c8..770d90df703d8 100644 --- a/internal/services/loganalytics/log_analytics_query_pack_resource.go +++ b/internal/services/loganalytics/log_analytics_query_pack_resource.go @@ -77,7 +77,7 @@ func (r LogAnalyticsQueryPackResource) Create() sdk.ResourceFunc { id := querypacks.NewQueryPackID(subscriptionId, model.ResourceGroupName, model.Name) - existing, err := client.QueryPacksGet(ctx, id) + existing, err := client.Get(ctx, id) if err != nil && !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for existing %s: %+v", id, err) } @@ -92,7 +92,7 @@ func (r LogAnalyticsQueryPackResource) Create() sdk.ResourceFunc { Tags: &model.Tags, } - if resp, err := client.QueryPacksCreateOrUpdate(ctx, id, *properties); err != nil { + if resp, err := client.CreateOrUpdate(ctx, id, *properties); err != nil { // update check logic once the issue https://github.com/Azure/azure-rest-api-specs/issues/19603 is fixed if !response.WasStatusCode(resp.HttpResponse, http.StatusCreated) { return fmt.Errorf("creating %s: %+v", id, err) @@ -121,7 +121,7 @@ func (r LogAnalyticsQueryPackResource) Update() sdk.ResourceFunc { return fmt.Errorf("decoding: %+v", err) } - resp, err := client.QueryPacksGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { return fmt.Errorf("retrieving %s: %+v", *id, err) } @@ -135,7 +135,7 @@ func (r LogAnalyticsQueryPackResource) Update() sdk.ResourceFunc { properties.Tags = &model.Tags } - if resp, err := client.QueryPacksCreateOrUpdate(ctx, *id, *properties); err != nil { + if resp, err := client.CreateOrUpdate(ctx, *id, *properties); err != nil { // update check logic once the issue https://github.com/Azure/azure-rest-api-specs/issues/19603 is fixed if !response.WasStatusCode(resp.HttpResponse, http.StatusCreated) { return fmt.Errorf("updating %s: %+v", *id, err) @@ -158,7 +158,7 @@ func (r LogAnalyticsQueryPackResource) Read() sdk.ResourceFunc { return err } - resp, err := client.QueryPacksGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return metadata.MarkAsGone(id) @@ -198,7 +198,7 @@ func (r LogAnalyticsQueryPackResource) Delete() sdk.ResourceFunc { return err } - if _, err := client.QueryPacksDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", id, err) } diff --git a/internal/services/loganalytics/log_analytics_query_pack_resource_test.go b/internal/services/loganalytics/log_analytics_query_pack_resource_test.go index c44cf3134203d..4ca9e1ef941a3 100644 --- a/internal/services/loganalytics/log_analytics_query_pack_resource_test.go +++ b/internal/services/loganalytics/log_analytics_query_pack_resource_test.go @@ -25,7 +25,7 @@ func (r LogAnalyticsQueryPackResource) Exists(ctx context.Context, client *clien return nil, err } - resp, err := client.LogAnalytics.QueryPacksClient.QueryPacksGet(ctx, *id) + resp, err := client.LogAnalytics.QueryPacksClient.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil diff --git a/internal/services/machinelearning/machine_learning_datastore_blobstorage_resource.go b/internal/services/machinelearning/machine_learning_datastore_blobstorage_resource.go index 9dd8f17c3f44b..e64c2729071f9 100644 --- a/internal/services/machinelearning/machine_learning_datastore_blobstorage_resource.go +++ b/internal/services/machinelearning/machine_learning_datastore_blobstorage_resource.go @@ -282,6 +282,7 @@ func (r MachineLearningDataStoreBlobStorage) Read() sdk.ResourceFunc { Timeout: 5 * time.Minute, Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { client := metadata.Client.MachineLearning.Datastore + storageClient := metadata.Client.Storage subscriptionId := metadata.Client.Account.SubscriptionId id, err := datastore.ParseDataStoreID(metadata.ResourceData.Id()) @@ -310,8 +311,16 @@ func (r MachineLearningDataStoreBlobStorage) Read() sdk.ResourceFunc { } model.ServiceDataAuthIdentity = serviceDataAuth - containerId := commonids.NewStorageContainerID(subscriptionId, workspaceId.ResourceGroupName, *data.AccountName, *data.ContainerName) + storageAccount, err := storageClient.FindAccount(ctx, *data.AccountName) + if err != nil { + return fmt.Errorf("retrieving Account %q for Container %q: %s", *data.AccountName, *data.ContainerName, err) + } + if storageAccount == nil { + return fmt.Errorf("Unable to locate Storage Account %q!", *data.AccountName) + } + containerId := commonids.NewStorageContainerID(subscriptionId, storageAccount.ResourceGroup, *data.AccountName, *data.ContainerName) model.StorageContainerID = containerId.ID() + model.IsDefault = *data.IsDefault if v, ok := metadata.ResourceData.GetOk("account_key"); ok { diff --git a/internal/services/machinelearning/machine_learning_datastore_datalake_gen2_resource.go b/internal/services/machinelearning/machine_learning_datastore_datalake_gen2_resource.go index 365a7db046e34..eceb7ed3a240e 100644 --- a/internal/services/machinelearning/machine_learning_datastore_datalake_gen2_resource.go +++ b/internal/services/machinelearning/machine_learning_datastore_datalake_gen2_resource.go @@ -282,6 +282,7 @@ func (r MachineLearningDataStoreDataLakeGen2) Read() sdk.ResourceFunc { Timeout: 5 * time.Minute, Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { client := metadata.Client.MachineLearning.Datastore + storageClient := metadata.Client.Storage subscriptionId := metadata.Client.Account.SubscriptionId id, err := datastore.ParseDataStoreID(metadata.ResourceData.Id()) @@ -310,7 +311,14 @@ func (r MachineLearningDataStoreDataLakeGen2) Read() sdk.ResourceFunc { } model.ServiceDataIdentity = serviceDataIdentity - containerId := commonids.NewStorageContainerID(subscriptionId, workspaceId.ResourceGroupName, data.AccountName, data.Filesystem) + storageAccount, err := storageClient.FindAccount(ctx, data.AccountName) + if err != nil { + return fmt.Errorf("retrieving Account %q for Data Lake Gen2 File System %q: %s", data.AccountName, data.Filesystem, err) + } + if storageAccount == nil { + return fmt.Errorf("Unable to locate Storage Account %q!", data.AccountName) + } + containerId := commonids.NewStorageContainerID(subscriptionId, storageAccount.ResourceGroup, data.AccountName, data.Filesystem) model.StorageContainerID = containerId.ID() model.IsDefault = *data.IsDefault diff --git a/internal/services/machinelearning/machine_learning_datastore_fileshare_resource.go b/internal/services/machinelearning/machine_learning_datastore_fileshare_resource.go index 0dd3edd780589..f646f0b65b129 100644 --- a/internal/services/machinelearning/machine_learning_datastore_fileshare_resource.go +++ b/internal/services/machinelearning/machine_learning_datastore_fileshare_resource.go @@ -273,6 +273,7 @@ func (r MachineLearningDataStoreFileShare) Read() sdk.ResourceFunc { Timeout: 5 * time.Minute, Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { client := metadata.Client.MachineLearning.Datastore + storageClient := metadata.Client.Storage subscriptionId := metadata.Client.Account.SubscriptionId id, err := datastore.ParseDataStoreID(metadata.ResourceData.Id()) @@ -301,8 +302,16 @@ func (r MachineLearningDataStoreFileShare) Read() sdk.ResourceFunc { } model.ServiceDataIdentity = serviceDataIdentity - fileShareId := storageparse.NewStorageShareResourceManagerID(subscriptionId, workspaceId.ResourceGroupName, data.AccountName, "default", data.FileShareName) + storageAccount, err := storageClient.FindAccount(ctx, data.AccountName) + if err != nil { + return fmt.Errorf("retrieving Account %q for Share %q: %s", data.AccountName, data.FileShareName, err) + } + if storageAccount == nil { + return fmt.Errorf("Unable to locate Storage Account %q!", data.AccountName) + } + fileShareId := storageparse.NewStorageShareResourceManagerID(subscriptionId, storageAccount.ResourceGroup, data.AccountName, "default", data.FileShareName) model.StorageFileShareID = fileShareId.ID() + model.IsDefault = *data.IsDefault if v, ok := metadata.ResourceData.GetOk("account_key"); ok { diff --git a/internal/services/maintenance/maintenance_assignment_virtual_machine_scale_set_resource.go b/internal/services/maintenance/maintenance_assignment_virtual_machine_scale_set_resource.go index d819c70373278..930e28c06d061 100644 --- a/internal/services/maintenance/maintenance_assignment_virtual_machine_scale_set_resource.go +++ b/internal/services/maintenance/maintenance_assignment_virtual_machine_scale_set_resource.go @@ -8,14 +8,13 @@ import ( "time" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-sdk/resource-manager/maintenance/2022-07-01-preview/configurationassignments" "github.com/hashicorp/go-azure-sdk/resource-manager/maintenance/2022-07-01-preview/maintenanceconfigurations" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - parseCompute "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - validateCompute "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/services/maintenance/migration" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/suppress" @@ -41,7 +40,7 @@ func resourceArmMaintenanceAssignmentVirtualMachineScaleSet() *pluginsdk.Resourc return err } - if _, err := parseCompute.VirtualMachineScaleSetID(parsed.Scope); err != nil { + if _, err := commonids.ParseVirtualMachineScaleSetID(parsed.Scope); err != nil { return fmt.Errorf("parsing %q as a Virtual Machine Scale Set ID: %+v", parsed.Scope, err) } @@ -68,7 +67,7 @@ func resourceArmMaintenanceAssignmentVirtualMachineScaleSet() *pluginsdk.Resourc Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateCompute.VirtualMachineScaleSetID, + ValidateFunc: commonids.ValidateVirtualMachineScaleSetID, DiffSuppressFunc: suppress.CaseDifference, // TODO remove in 4.0 }, }, @@ -80,7 +79,7 @@ func resourceArmMaintenanceAssignmentVirtualMachineScaleSetCreate(d *pluginsdk.R ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() - virtualMachineScaleSetId, err := parseCompute.VirtualMachineScaleSetID(d.Get("virtual_machine_scale_set_id").(string)) + virtualMachineScaleSetId, err := commonids.ParseVirtualMachineScaleSetID(d.Get("virtual_machine_scale_set_id").(string)) if err != nil { return err } @@ -140,7 +139,7 @@ func resourceArmMaintenanceAssignmentVirtualMachineScaleSetRead(d *pluginsdk.Res return fmt.Errorf("checking for presence of existing %s: %+v", *id, err) } - virtualMachineScaleSetId, err := parseCompute.VirtualMachineScaleSetID(id.Scope) + virtualMachineScaleSetId, err := commonids.ParseVirtualMachineScaleSetID(id.Scope) if err != nil { return fmt.Errorf("parsing %q as a virtual machine scale set id: %+v", id.Scope, err) } diff --git a/internal/services/maintenance/migration/assignment_virtual_machine_scale_set_v0_to_v1.go b/internal/services/maintenance/migration/assignment_virtual_machine_scale_set_v0_to_v1.go index 053b3263730a6..5f86f161118b9 100644 --- a/internal/services/maintenance/migration/assignment_virtual_machine_scale_set_v0_to_v1.go +++ b/internal/services/maintenance/migration/assignment_virtual_machine_scale_set_v0_to_v1.go @@ -5,8 +5,8 @@ import ( "fmt" "log" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-sdk/resource-manager/maintenance/2022-07-01-preview/configurationassignments" - parseCompute "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" ) @@ -45,7 +45,7 @@ func (AssignmentVirtualMachineScaleSetV0ToV1) UpgradeFunc() pluginsdk.StateUpgra return nil, fmt.Errorf("parsing old id %q: %+v", oldIdRaw, err) } - virtualMachineScaleSetId, err := parseCompute.VirtualMachineScaleSetIDInsensitively(oldId.Scope) + virtualMachineScaleSetId, err := commonids.ParseVirtualMachineScaleSetIDInsensitively(oldId.Scope) if err != nil { return nil, fmt.Errorf("parsing %q as a virtual machine scale set id: %+v", oldId.Scope, err) } diff --git a/internal/services/maintenance/parse/maintenance_assignment_virtual_machine.go b/internal/services/maintenance/parse/maintenance_assignment_virtual_machine.go index 86d2cb52e3a3b..5050409e48ef9 100644 --- a/internal/services/maintenance/parse/maintenance_assignment_virtual_machine.go +++ b/internal/services/maintenance/parse/maintenance_assignment_virtual_machine.go @@ -7,11 +7,11 @@ import ( "fmt" "regexp" - parseCompute "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" ) type MaintenanceAssignmentVirtualMachineId struct { - VirtualMachineId *parseCompute.VirtualMachineId + VirtualMachineId *commonids.VirtualMachineId VirtualMachineIdRaw string Name string } @@ -23,7 +23,7 @@ func MaintenanceAssignmentVirtualMachineID(input string) (*MaintenanceAssignment } targetResourceId, name := groups[1], groups[2] - virtualMachineId, err := parseCompute.VirtualMachineID(targetResourceId) + virtualMachineId, err := commonids.ParseVirtualMachineIDInsensitively(targetResourceId) if err != nil { return nil, fmt.Errorf("parsing Maintenance Assignment Virtual Machine ID: %q: Expected valid virtual machine ID", input) } diff --git a/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_scale_set.go b/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_scale_set.go index ceaeec1a7d47d..aa5dea4302062 100644 --- a/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_scale_set.go +++ b/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_scale_set.go @@ -7,11 +7,11 @@ import ( "fmt" "regexp" - parseCompute "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" ) type MaintenanceAssignmentVirtualMachineScaleSetId struct { - VirtualMachineScaleSetId *parseCompute.VirtualMachineScaleSetId + VirtualMachineScaleSetId *commonids.VirtualMachineScaleSetId VirtualMachineScaleSetIdRaw string Name string } @@ -23,7 +23,7 @@ func MaintenanceAssignmentVirtualMachineScaleSetID(input string) (*MaintenanceAs } targetResourceId, name := groups[1], groups[2] - virtualMachineScaleSetId, err := parseCompute.VirtualMachineScaleSetID(targetResourceId) + virtualMachineScaleSetId, err := commonids.ParseVirtualMachineScaleSetIDInsensitively(targetResourceId) if err != nil { return nil, fmt.Errorf("parsing Maintenance Assignment Virtual Machine Scale Set ID: %q: Expected valid virtual machine scale set ID", input) } diff --git a/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_scale_set_test.go b/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_scale_set_test.go index 33155bb90d3f8..3245bc1e27f9b 100644 --- a/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_scale_set_test.go +++ b/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_scale_set_test.go @@ -7,7 +7,7 @@ import ( "reflect" "testing" - parseCompute "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" ) func TestMaintenanceAssignmentVirtualMachineScaleSetID(t *testing.T) { @@ -58,10 +58,10 @@ func TestMaintenanceAssignmentVirtualMachineScaleSetID(t *testing.T) { Error: false, Expect: &MaintenanceAssignmentVirtualMachineScaleSetId{ VirtualMachineScaleSetIdRaw: "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/resGroup1/providers/microsoft.compute/virtualMachineScaleSets/vmss1", - VirtualMachineScaleSetId: &parseCompute.VirtualMachineScaleSetId{ - SubscriptionId: "00000000-0000-0000-0000-000000000000", - ResourceGroup: "resGroup1", - Name: "vmss1", + VirtualMachineScaleSetId: &commonids.VirtualMachineScaleSetId{ + SubscriptionId: "00000000-0000-0000-0000-000000000000", + ResourceGroupName: "resGroup1", + VirtualMachineScaleSetName: "vmss1", }, Name: "assign1", }, diff --git a/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_test.go b/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_test.go index 6464e821c0d0c..3a9aec2abdc4f 100644 --- a/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_test.go +++ b/internal/services/maintenance/parse/maintenance_assignment_virtual_machine_test.go @@ -7,7 +7,7 @@ import ( "reflect" "testing" - parseCompute "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" ) func TestMaintenanceAssignmentVirtualMachineID(t *testing.T) { @@ -58,10 +58,10 @@ func TestMaintenanceAssignmentVirtualMachineID(t *testing.T) { Error: false, Expect: &MaintenanceAssignmentVirtualMachineId{ VirtualMachineIdRaw: "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/resGroup1/providers/microsoft.compute/virtualMachines/vm1", - VirtualMachineId: &parseCompute.VirtualMachineId{ - SubscriptionId: "00000000-0000-0000-0000-000000000000", - ResourceGroup: "resGroup1", - Name: "vm1", + VirtualMachineId: &commonids.VirtualMachineId{ + SubscriptionId: "00000000-0000-0000-0000-000000000000", + ResourceGroupName: "resGroup1", + VirtualMachineName: "vm1", }, Name: "assign1", }, diff --git a/internal/services/maps/maps_account_resource.go b/internal/services/maps/maps_account_resource.go index 9afdfa527e257..71e32f648e521 100644 --- a/internal/services/maps/maps_account_resource.go +++ b/internal/services/maps/maps_account_resource.go @@ -18,6 +18,7 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" + "github.com/hashicorp/terraform-provider-azurerm/utils" ) func resourceMapsAccount() *pluginsdk.Resource { @@ -78,6 +79,12 @@ func resourceMapsAccount() *pluginsdk.Resource { Computed: true, Sensitive: true, }, + + "local_authentication_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: true, + }, }, } } @@ -110,6 +117,9 @@ func resourceMapsAccountCreateUpdate(d *pluginsdk.ResourceData, meta interface{} Name: accounts.Name(d.Get("sku_name").(string)), }, Tags: tags.Expand(d.Get("tags").(map[string]interface{})), + Properties: &accounts.MapsAccountProperties{ + DisableLocalAuth: utils.Bool(!d.Get("local_authentication_enabled").(bool)), + }, } if _, err := client.CreateOrUpdate(ctx, id, parameters); err != nil { @@ -166,6 +176,14 @@ func resourceMapsAccountRead(d *pluginsdk.ResourceData, meta interface{}) error d.Set("secondary_access_key", model.SecondaryKey) } + localAuthenticationEnabled := true + if props := resp.Model.Properties; props != nil { + if props.DisableLocalAuth != nil { + localAuthenticationEnabled = !*props.DisableLocalAuth + } + } + d.Set("local_authentication_enabled", localAuthenticationEnabled) + return nil } diff --git a/internal/services/maps/maps_account_resource_test.go b/internal/services/maps/maps_account_resource_test.go index 1ad50aed3efbf..525efd3f5d134 100644 --- a/internal/services/maps/maps_account_resource_test.go +++ b/internal/services/maps/maps_account_resource_test.go @@ -100,6 +100,30 @@ func TestAccMapsAccount_tags(t *testing.T) { }) } +func TestAccMapsAccount_disableLocalAuth(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_maps_account", "test") + r := MapsAccountResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.disableLocalAuth(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("local_authentication_enabled").HasValue("false"), + ), + }, + data.ImportStep(), + { + Config: r.enableLocalAuth(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("local_authentication_enabled").HasValue("true"), + ), + }, + data.ImportStep(), + }) +} + func (MapsAccountResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := accounts.ParseAccountID(state.ID) if err != nil { @@ -174,3 +198,43 @@ resource "azurerm_maps_account" "test" { } `, data.RandomInteger, data.Locations.Primary, data.RandomInteger) } + +func (MapsAccountResource) disableLocalAuth(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_maps_account" "test" { + name = "accMapsAccount-%d" + resource_group_name = azurerm_resource_group.test.name + sku_name = "S0" + local_authentication_enabled = false +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger) +} + +func (MapsAccountResource) enableLocalAuth(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_maps_account" "test" { + name = "accMapsAccount-%d" + resource_group_name = azurerm_resource_group.test.name + sku_name = "S0" + local_authentication_enabled = true +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger) +} diff --git a/internal/services/media/media_content_key_policy_resource.go b/internal/services/media/media_content_key_policy_resource.go index fb8f7b5e092d8..46a45d48641e8 100644 --- a/internal/services/media/media_content_key_policy_resource.go +++ b/internal/services/media/media_content_key_policy_resource.go @@ -485,7 +485,7 @@ func resourceMediaContentKeyPolicyCreateUpdate(d *pluginsdk.ResourceData, meta i id := contentkeypolicies.NewContentKeyPolicyID(subscriptionID, d.Get("resource_group_name").(string), d.Get("media_services_account_name").(string), d.Get("name").(string)) if d.IsNewResource() { - existing, err := client.ContentKeyPoliciesGet(ctx, id) + existing, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of %s: %+v", id, err) @@ -512,7 +512,7 @@ func resourceMediaContentKeyPolicyCreateUpdate(d *pluginsdk.ResourceData, meta i payload.Properties.Options = *options } - if _, err := client.ContentKeyPoliciesCreateOrUpdate(ctx, id, payload); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, payload); err != nil { return fmt.Errorf("creating/updating %s: %+v", id, err) } @@ -531,7 +531,7 @@ func resourceMediaContentKeyPolicyRead(d *pluginsdk.ResourceData, meta interface return err } - resp, err := client.ContentKeyPoliciesGetPolicyPropertiesWithSecrets(ctx, *id) + resp, err := client.GetPolicyPropertiesWithSecrets(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[INFO] %s was not found - removing from state", id) @@ -570,7 +570,7 @@ func resourceMediaContentKeyPolicyDelete(d *pluginsdk.ResourceData, meta interfa return err } - if _, err = client.ContentKeyPoliciesDelete(ctx, *id); err != nil { + if _, err = client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", id, err) } diff --git a/internal/services/media/media_content_key_policy_resource_test.go b/internal/services/media/media_content_key_policy_resource_test.go index 1075b5c3d6fa8..65ec89f88c3e1 100644 --- a/internal/services/media/media_content_key_policy_resource_test.go +++ b/internal/services/media/media_content_key_policy_resource_test.go @@ -101,7 +101,7 @@ func (r MediaContentKeyPolicyResource) Exists(ctx context.Context, clients *clie return nil, err } - resp, err := clients.Media.V20220801Client.ContentKeyPolicies.ContentKeyPoliciesGet(ctx, *id) + resp, err := clients.Media.V20220801Client.ContentKeyPolicies.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving %s: %+v", *id, err) } diff --git a/internal/services/media/media_service_account_filter_resource.go b/internal/services/media/media_service_account_filter_resource.go index 7319b6636287e..b871fef1b386d 100644 --- a/internal/services/media/media_service_account_filter_resource.go +++ b/internal/services/media/media_service_account_filter_resource.go @@ -218,7 +218,7 @@ func (r AccountFilterResource) Create() sdk.ResourceFunc { id := accountfilters.NewAccountFilterID(subscriptionId, state.ResourceGroupName, state.MediaServicesAccountName, state.Name) metadata.Logger.Infof("creating %s", id) - existing, err := client.AccountFiltersGet(ctx, id) + existing, err := client.Get(ctx, id) if err != nil && !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for the presence of an existing %s: %+v", id, err) } @@ -239,7 +239,7 @@ func (r AccountFilterResource) Create() sdk.ResourceFunc { } } - if _, err = client.AccountFiltersCreateOrUpdate(ctx, id, input); err != nil { + if _, err = client.CreateOrUpdate(ctx, id, input); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } @@ -260,7 +260,7 @@ func (r AccountFilterResource) Read() sdk.ResourceFunc { } metadata.Logger.Infof("retrieving %s", *id) - resp, err := client.AccountFiltersGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { metadata.Logger.Infof("%s was not found - removing from state!", *id) @@ -307,7 +307,7 @@ func (r AccountFilterResource) Update() sdk.ResourceFunc { return err } - resp, err := client.AccountFiltersGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { return fmt.Errorf("retrieving %s: %+v", *id, err) } @@ -330,7 +330,7 @@ func (r AccountFilterResource) Update() sdk.ResourceFunc { existing.Properties.Tracks = expandAccountFilterTrackSelections(state.TrackSelection) } - if _, err := client.AccountFiltersCreateOrUpdate(ctx, *id, *existing); err != nil { + if _, err := client.CreateOrUpdate(ctx, *id, *existing); err != nil { return fmt.Errorf("updating %s: %+v", *id, err) } return nil @@ -349,7 +349,7 @@ func (r AccountFilterResource) Delete() sdk.ResourceFunc { } metadata.Logger.Infof("deleting %s..", *id) - resp, err := client.AccountFiltersDelete(ctx, *id) + resp, err := client.Delete(ctx, *id) if err != nil && !response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("deleting %s: %+v", *id, err) } diff --git a/internal/services/media/media_service_account_filter_resource_test.go b/internal/services/media/media_service_account_filter_resource_test.go index c192ecfea8604..fe8b2b969a4f6 100644 --- a/internal/services/media/media_service_account_filter_resource_test.go +++ b/internal/services/media/media_service_account_filter_resource_test.go @@ -98,7 +98,7 @@ func (AccountFilterResource) Exists(ctx context.Context, clients *clients.Client return nil, err } - resp, err := clients.Media.V20220801Client.AccountFilters.AccountFiltersGet(ctx, *id) + resp, err := clients.Media.V20220801Client.AccountFilters.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving %s: %+v", *id, err) } diff --git a/internal/services/monitor/monitor_action_group_data_source_test.go b/internal/services/monitor/monitor_action_group_data_source_test.go index a6281bdaa2736..6dfa80634c572 100644 --- a/internal/services/monitor/monitor_action_group_data_source_test.go +++ b/internal/services/monitor/monitor_action_group_data_source_test.go @@ -106,7 +106,7 @@ func TestAccDataSourceMonitorActionGroup_complete(t *testing.T) { check.That(data.ResourceName).Key("sms_receiver.1.phone_number").HasValue("3123456789"), check.That(data.ResourceName).Key("webhook_receiver.#").HasValue("2"), check.That(data.ResourceName).Key("webhook_receiver.0.service_uri").HasValue("http://example.com/alert"), - check.That(data.ResourceName).Key("webhook_receiver.1.service_uri").HasValue("https://backup.example.com/warning"), + check.That(data.ResourceName).Key("webhook_receiver.1.service_uri").HasValue("https://example.com/warning/backup"), check.That(data.ResourceName).Key("webhook_receiver.1.use_common_alert_schema").HasValue("false"), check.That(data.ResourceName).Key("webhook_receiver.1.aad_auth.#").HasValue("0"), check.That(data.ResourceName).Key("automation_runbook_receiver.#").HasValue("1"), @@ -250,7 +250,7 @@ resource "azurerm_monitor_action_group" "test" { webhook_receiver { name = "callmybackupapi" - service_uri = "https://backup.example.com/warning" + service_uri = "https://example.com/warning/backup" } automation_runbook_receiver { diff --git a/internal/services/monitor/monitor_action_group_resource_test.go b/internal/services/monitor/monitor_action_group_resource_test.go index 6dcda5be2ced3..a4b36ed3304dd 100644 --- a/internal/services/monitor/monitor_action_group_resource_test.go +++ b/internal/services/monitor/monitor_action_group_resource_test.go @@ -1006,7 +1006,7 @@ resource "azurerm_monitor_action_group" "test" { webhook_receiver { name = "callmybackupapi" - service_uri = "https://backup.example.com/warning" + service_uri = "https://example.com/warning/backup" use_common_alert_schema = true } diff --git a/internal/services/monitor/monitor_alert_processing_rule_action_group_resource.go b/internal/services/monitor/monitor_alert_processing_rule_action_group_resource.go index 3a73f374a3240..4ca23637ba7a7 100644 --- a/internal/services/monitor/monitor_alert_processing_rule_action_group_resource.go +++ b/internal/services/monitor/monitor_alert_processing_rule_action_group_resource.go @@ -73,7 +73,7 @@ func (r AlertProcessingRuleActionGroupResource) Create() sdk.ResourceFunc { subscriptionId := metadata.Client.Account.SubscriptionId id := alertprocessingrules.NewActionRuleID(subscriptionId, model.ResourceGroupName, model.Name) - existing, err := client.AlertProcessingRulesGetByName(ctx, id) + existing, err := client.GetByName(ctx, id) if err != nil && !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } @@ -98,7 +98,7 @@ func (r AlertProcessingRuleActionGroupResource) Create() sdk.ResourceFunc { Tags: &model.Tags, } - if _, err := client.AlertProcessingRulesCreateOrUpdate(ctx, id, alertProcessingRule); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, alertProcessingRule); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } @@ -124,7 +124,7 @@ func (r AlertProcessingRuleActionGroupResource) Update() sdk.ResourceFunc { return fmt.Errorf("decoding: %+v", err) } - resp, err := client.AlertProcessingRulesGetByName(ctx, *id) + resp, err := client.GetByName(ctx, *id) if err != nil { return fmt.Errorf("retrieving %s: %+v", *id, err) } @@ -168,7 +168,7 @@ func (r AlertProcessingRuleActionGroupResource) Update() sdk.ResourceFunc { model.Tags = &resourceModel.Tags } - if _, err := client.AlertProcessingRulesCreateOrUpdate(ctx, *id, *model); err != nil { + if _, err := client.CreateOrUpdate(ctx, *id, *model); err != nil { return fmt.Errorf("updating %s: %+v", *id, err) } return nil @@ -187,7 +187,7 @@ func (r AlertProcessingRuleActionGroupResource) Read() sdk.ResourceFunc { return err } - resp, err := client.AlertProcessingRulesGetByName(ctx, *id) + resp, err := client.GetByName(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return metadata.MarkAsGone(id) @@ -247,12 +247,12 @@ func (r AlertProcessingRuleActionGroupResource) Delete() sdk.ResourceFunc { Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { client := metadata.Client.Monitor.AlertProcessingRulesClient - id, err := alertprocessingrules.ParseActionRuleIDInsensitively(metadata.ResourceData.Id()) + id, err := alertprocessingrules.ParseActionRuleID(metadata.ResourceData.Id()) if err != nil { return err } - if _, err := client.AlertProcessingRulesDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", *id, err) } diff --git a/internal/services/monitor/monitor_alert_processing_rule_action_group_resource_test.go b/internal/services/monitor/monitor_alert_processing_rule_action_group_resource_test.go index 88a7c3d74ae34..d90500c864f71 100644 --- a/internal/services/monitor/monitor_alert_processing_rule_action_group_resource_test.go +++ b/internal/services/monitor/monitor_alert_processing_rule_action_group_resource_test.go @@ -99,12 +99,12 @@ func TestAccMonitorAlertProcessingRuleActionGroup_update(t *testing.T) { } func (r MonitorAlertProcessingRuleActionGroupResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := alertprocessingrules.ParseActionRuleIDInsensitively(state.ID) + id, err := alertprocessingrules.ParseActionRuleID(state.ID) if err != nil { return nil, err } - resp, err := clients.Monitor.AlertProcessingRulesClient.AlertProcessingRulesGetByName(ctx, *id) + resp, err := clients.Monitor.AlertProcessingRulesClient.GetByName(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving (%s): %+v", *id, err) } diff --git a/internal/services/monitor/monitor_alert_processing_rule_suppression_resource.go b/internal/services/monitor/monitor_alert_processing_rule_suppression_resource.go index 62eced3fe7ada..b856babed519e 100644 --- a/internal/services/monitor/monitor_alert_processing_rule_suppression_resource.go +++ b/internal/services/monitor/monitor_alert_processing_rule_suppression_resource.go @@ -63,7 +63,7 @@ func (r AlertProcessingRuleSuppressionResource) Create() sdk.ResourceFunc { subscriptionId := metadata.Client.Account.SubscriptionId id := alertprocessingrules.NewActionRuleID(subscriptionId, model.ResourceGroupName, model.Name) - existing, err := client.AlertProcessingRulesGetByName(ctx, id) + existing, err := client.GetByName(ctx, id) if err != nil && !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } @@ -87,7 +87,7 @@ func (r AlertProcessingRuleSuppressionResource) Create() sdk.ResourceFunc { Tags: &model.Tags, } - if _, err := client.AlertProcessingRulesCreateOrUpdate(ctx, id, alertProcessingRule); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, alertProcessingRule); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } @@ -113,7 +113,7 @@ func (r AlertProcessingRuleSuppressionResource) Update() sdk.ResourceFunc { return fmt.Errorf("decoding: %+v", err) } - resp, err := client.AlertProcessingRulesGetByName(ctx, *id) + resp, err := client.GetByName(ctx, *id) if err != nil { return fmt.Errorf("retrieving %s: %+v", *id, err) } @@ -155,7 +155,7 @@ func (r AlertProcessingRuleSuppressionResource) Update() sdk.ResourceFunc { model.Tags = &resourceModel.Tags } - if _, err := client.AlertProcessingRulesCreateOrUpdate(ctx, *id, *model); err != nil { + if _, err := client.CreateOrUpdate(ctx, *id, *model); err != nil { return fmt.Errorf("updating %s: %+v", *id, err) } return nil @@ -174,7 +174,7 @@ func (r AlertProcessingRuleSuppressionResource) Read() sdk.ResourceFunc { return err } - resp, err := client.AlertProcessingRulesGetByName(ctx, *id) + resp, err := client.GetByName(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return metadata.MarkAsGone(id) @@ -210,13 +210,8 @@ func (r AlertProcessingRuleSuppressionResource) Read() sdk.ResourceFunc { state.Scopes = properties.Scopes - if properties.Conditions != nil { - state.Condition = flattenAlertProcessingRuleConditions(properties.Conditions) - } - - if properties.Schedule != nil { - state.Schedule = flattenAlertProcessingRuleSchedule(properties.Schedule) - } + state.Condition = flattenAlertProcessingRuleConditions(properties.Conditions) + state.Schedule = flattenAlertProcessingRuleSchedule(properties.Schedule) return metadata.Encode(&state) }, @@ -233,7 +228,7 @@ func (r AlertProcessingRuleSuppressionResource) Delete() sdk.ResourceFunc { return err } - if _, err := client.AlertProcessingRulesDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", *id, err) } diff --git a/internal/services/monitor/monitor_alert_processing_rule_suppression_resource_test.go b/internal/services/monitor/monitor_alert_processing_rule_suppression_resource_test.go index ab3600653700b..bbaa87086ecfe 100644 --- a/internal/services/monitor/monitor_alert_processing_rule_suppression_resource_test.go +++ b/internal/services/monitor/monitor_alert_processing_rule_suppression_resource_test.go @@ -104,7 +104,7 @@ func (r MonitorAlertProcessingRuleSuppressionResource) Exists(ctx context.Contex return nil, err } - resp, err := clients.Monitor.AlertProcessingRulesClient.AlertProcessingRulesGetByName(ctx, *id) + resp, err := clients.Monitor.AlertProcessingRulesClient.GetByName(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving (%s): %+v", *id, err) } diff --git a/internal/services/monitor/monitor_diagnostic_setting_resource.go b/internal/services/monitor/monitor_diagnostic_setting_resource.go index 5be8bae6c9d8d..338ebcfe66d52 100644 --- a/internal/services/monitor/monitor_diagnostic_setting_resource.go +++ b/internal/services/monitor/monitor_diagnostic_setting_resource.go @@ -129,7 +129,7 @@ func resourceMonitorDiagnosticSetting() *pluginsdk.Resource { Type: pluginsdk.TypeList, Optional: true, MaxItems: 1, - Deprecated: "`retention_policy` has been deprecated - to learn more https://aka.ms/diagnostic_settings_log_retention", + Deprecated: "`retention_policy` has been deprecated in favor of `azurerm_storage_management_policy` resource - to learn more https://aka.ms/diagnostic_settings_log_retention", Elem: &pluginsdk.Resource{ Schema: map[string]*pluginsdk.Schema{ "enabled": { @@ -168,9 +168,10 @@ func resourceMonitorDiagnosticSetting() *pluginsdk.Resource { }, "retention_policy": { - Type: pluginsdk.TypeList, - Optional: true, - MaxItems: 1, + Type: pluginsdk.TypeList, + Optional: true, + MaxItems: 1, + Deprecated: "`retention_policy` has been deprecated in favor of `azurerm_storage_management_policy` resource - to learn more https://aka.ms/diagnostic_settings_log_retention", Elem: &pluginsdk.Resource{ Schema: map[string]*pluginsdk.Schema{ "enabled": { @@ -218,9 +219,10 @@ func resourceMonitorDiagnosticSetting() *pluginsdk.Resource { }, "retention_policy": { - Type: pluginsdk.TypeList, - Optional: true, - MaxItems: 1, + Type: pluginsdk.TypeList, + Optional: true, + MaxItems: 1, + Deprecated: "`retention_policy` has been deprecated in favor of `azurerm_storage_management_policy` resource - to learn more https://aka.ms/diagnostic_settings_log_retention", Elem: &pluginsdk.Resource{ Schema: map[string]*pluginsdk.Schema{ "enabled": { diff --git a/internal/services/monitor/monitor_log_profile_data_source.go b/internal/services/monitor/monitor_log_profile_data_source.go index d4d20778e77e7..fcc0a6f90fcd9 100644 --- a/internal/services/monitor/monitor_log_profile_data_source.go +++ b/internal/services/monitor/monitor_log_profile_data_source.go @@ -18,6 +18,8 @@ func dataSourceMonitorLogProfile() *pluginsdk.Resource { return &pluginsdk.Resource{ Read: dataSourceLogProfileRead, + DeprecationMessage: "Azure Log Profiles will be retired on 30th September 2026 and will be removed in v4.0 of the AzureRM Provider. More information on the deprecation can be found at https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/activity-log?tabs=powershell#legacy-collection-methods", + Timeouts: &pluginsdk.ResourceTimeout{ Read: pluginsdk.DefaultTimeout(5 * time.Minute), }, diff --git a/internal/services/monitor/monitor_log_profile_resource.go b/internal/services/monitor/monitor_log_profile_resource.go index d50155275f949..cc02836d953c8 100644 --- a/internal/services/monitor/monitor_log_profile_resource.go +++ b/internal/services/monitor/monitor_log_profile_resource.go @@ -32,6 +32,8 @@ func resourceMonitorLogProfile() *pluginsdk.Resource { Update: resourceLogProfileCreateUpdate, Delete: resourceLogProfileDelete, + DeprecationMessage: "Azure Log Profiles will be retired on 30th September 2026 and will be removed in v4.0 of the AzureRM Provider. More information on the deprecation can be found at https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/activity-log?tabs=powershell#legacy-collection-methods", + Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { _, err := logprofiles.ParseLogProfileID(id) return err diff --git a/internal/services/mssql/mssql_database_extended_auditing_policy_resource_test.go b/internal/services/mssql/mssql_database_extended_auditing_policy_resource_test.go index 1a7be17983e85..7002dc1c935ef 100644 --- a/internal/services/mssql/mssql_database_extended_auditing_policy_resource_test.go +++ b/internal/services/mssql/mssql_database_extended_auditing_policy_resource_test.go @@ -352,12 +352,20 @@ resource "azurerm_mssql_database" "test" { server_id = azurerm_mssql_server.test.id } +resource "azurerm_storage_account" "test" { + name = "unlikely23exst2acct%[3]s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_tier = "Standard" + account_replication_type = "LRS" +} + resource "azurerm_mssql_database_extended_auditing_policy" "test" { database_id = azurerm_mssql_database.test.id enabled = false } -`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString) +`, data.RandomInteger, data.Locations.Primary, data.RandomString) } func (r MsSqlDatabaseExtendedAuditingPolicyResource) update(data acceptance.TestData) string { diff --git a/internal/services/mssql/mssql_database_resource.go b/internal/services/mssql/mssql_database_resource.go index 85feed693dd5f..5f00d7466f6dc 100644 --- a/internal/services/mssql/mssql_database_resource.go +++ b/internal/services/mssql/mssql_database_resource.go @@ -12,6 +12,7 @@ import ( "github.com/Azure/azure-sdk-for-go/services/preview/sql/mgmt/v5.0/sql" // nolint: staticcheck "github.com/Azure/go-autorest/autorest/date" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-sdk/resource-manager/maintenance/2022-07-01-preview/publicmaintenanceconfigurations" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -32,9 +33,9 @@ import ( func resourceMsSqlDatabase() *pluginsdk.Resource { return &pluginsdk.Resource{ - Create: resourceMsSqlDatabaseCreateUpdate, + Create: resourceMsSqlDatabaseCreate, Read: resourceMsSqlDatabaseRead, - Update: resourceMsSqlDatabaseCreateUpdate, + Update: resourceMsSqlDatabaseUpdate, Delete: resourceMsSqlDatabaseDelete, Importer: pluginsdk.ImporterValidatingResourceIdThen(func(id string) error { @@ -107,7 +108,7 @@ func resourceMsSqlDatabaseImporter(ctx context.Context, d *pluginsdk.ResourceDat return []*pluginsdk.ResourceData{d}, nil } -func resourceMsSqlDatabaseCreateUpdate(d *pluginsdk.ResourceData, meta interface{}) error { +func resourceMsSqlDatabaseCreate(d *pluginsdk.ResourceData, meta interface{}) error { client := meta.(*clients.Client).MSSQL.DatabasesClient serversClient := meta.(*clients.Client).MSSQL.ServersClient securityAlertPoliciesClient := meta.(*clients.Client).MSSQL.DatabaseSecurityAlertPoliciesClient @@ -136,35 +137,24 @@ func resourceMsSqlDatabaseCreateUpdate(d *pluginsdk.ResourceData, meta interface id := parse.NewDatabaseID(serverId.SubscriptionId, serverId.ResourceGroup, serverId.Name, name) - if d.IsNewResource() { - if existing, err := client.Get(ctx, serverId.ResourceGroup, serverId.Name, name); err != nil { - if !utils.ResponseWasNotFound(existing.Response) { - return fmt.Errorf("checking for presence of existing %s: %+v", id, err) - } - } else { - return tf.ImportAsExistsError("azurerm_mssql_database", id.ID()) + if existing, err := client.Get(ctx, serverId.ResourceGroup, serverId.Name, name); err != nil { + if !utils.ResponseWasNotFound(existing.Response) { + return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } + } else { + return tf.ImportAsExistsError("azurerm_mssql_database", id.ID()) } server, err := serversClient.Get(ctx, serverId.ResourceGroup, serverId.Name, "") if err != nil { - return fmt.Errorf("making Read request on MsSql Server %q (Resource Group %q): %s", serverId.Name, serverId.ResourceGroup, err) + return fmt.Errorf("retrieving %s: %q", serverId, err) } if server.Location == nil || *server.Location == "" { - return fmt.Errorf("reading %s: Location was nil/empoty", serverId) + return fmt.Errorf("reading %s: Location was nil/empty", serverId) } location := *server.Location - // when disassociating mssql db from elastic pool, the sku_name must be specific - if d.HasChange("elastic_pool_id") { - if old, new := d.GetChange("elastic_pool_id"); old.(string) != "" && new.(string) == "" { - if v, ok := d.GetOk("sku_name"); !ok || (ok && v.(string) == "ElasticPool") { - return fmt.Errorf("`sku_name` must be assigned and not be %q when disassociating from Elastic Pool", "ElasticPool") - } - } - } - ledgerEnabled := d.Get("ledger_enabled").(bool) // When databases are replicating, the primary cannot have a SKU belonging to a higher service tier than any of its @@ -182,7 +172,7 @@ func resourceMsSqlDatabaseCreateUpdate(d *pluginsdk.ResourceData, meta interface locks.ByID(id.ID()) defer locks.UnlockByID(id.ID()) - if skuName := d.Get("sku_name"); !d.IsNewResource() && d.HasChange("sku_name") && skuName != "" { + if skuName := d.Get("sku_name"); skuName != "" { partnerDatabases, err := helper.FindDatabaseReplicationPartners(ctx, client, replicationLinksClient, resourcesClient, id, []sql.ReplicationRole{sql.ReplicationRoleSecondary, sql.ReplicationRoleNonReadableSecondary}) if err != nil { return err @@ -350,11 +340,8 @@ func resourceMsSqlDatabaseCreateUpdate(d *pluginsdk.ResourceData, meta interface MinTimeout: 1 * time.Minute, ContinuousTargetOccurence: 2, } - if d.IsNewResource() { - stateConf.Timeout = d.Timeout(pluginsdk.TimeoutCreate) - } else { - stateConf.Timeout = d.Timeout(pluginsdk.TimeoutUpdate) - } + + stateConf.Timeout = d.Timeout(pluginsdk.TimeoutCreate) if _, err = stateConf.WaitForStateContext(ctx); err != nil { return fmt.Errorf("waiting for %s to become ready: %+v", id, err) @@ -406,12 +393,12 @@ func resourceMsSqlDatabaseCreateUpdate(d *pluginsdk.ResourceData, meta interface d.SetId(id.ID()) // For datawarehouse SKUs only - if strings.HasPrefix(skuName.(string), "DW") && (d.HasChange("geo_backup_enabled") || d.IsNewResource()) { + if strings.HasPrefix(skuName.(string), "DW") { isEnabled := d.Get("geo_backup_enabled").(bool) var geoBackupPolicyState sql.GeoBackupPolicyState // The default geo backup policy configuration for a new resource is 'enabled', so we don't need to set it in that scenario - if !(d.IsNewResource() && isEnabled) { + if !isEnabled { if isEnabled { geoBackupPolicyState = sql.GeoBackupPolicyStateEnabled } else { @@ -446,49 +433,43 @@ func resourceMsSqlDatabaseCreateUpdate(d *pluginsdk.ResourceData, meta interface return nil } - if d.HasChange("long_term_retention_policy") { - v := d.Get("long_term_retention_policy") - longTermRetentionProps := helper.ExpandLongTermRetentionPolicy(v.([]interface{})) - if longTermRetentionProps != nil { - longTermRetentionPolicy := sql.LongTermRetentionPolicy{} + longTermRetentionProps := helper.ExpandLongTermRetentionPolicy(d.Get("long_term_retention_policy").([]interface{})) + if longTermRetentionProps != nil { + longTermRetentionPolicy := sql.LongTermRetentionPolicy{} - // DataWarehouse SKU's do not support LRP currently - if !strings.HasPrefix(skuName.(string), "DW") { - longTermRetentionPolicy.BaseLongTermRetentionPolicyProperties = longTermRetentionProps - } + // DataWarehouse SKU's do not support LRP currently + if !strings.HasPrefix(skuName.(string), "DW") { + longTermRetentionPolicy.BaseLongTermRetentionPolicyProperties = longTermRetentionProps + } - longTermRetentionfuture, err := longTermRetentionClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, longTermRetentionPolicy) - if err != nil { - return fmt.Errorf("setting Long Term Retention Policies for %s: %+v", id, err) - } + longTermRetentionfuture, err := longTermRetentionClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, longTermRetentionPolicy) + if err != nil { + return fmt.Errorf("setting Long Term Retention Policies for %s: %+v", id, err) + } - if err = longTermRetentionfuture.WaitForCompletionRef(ctx, longTermRetentionClient.Client); err != nil { - return fmt.Errorf("waiting for update of Long Term Retention Policies for %s: %+v", id, err) - } + if err = longTermRetentionfuture.WaitForCompletionRef(ctx, longTermRetentionClient.Client); err != nil { + return fmt.Errorf("waiting for update of Long Term Retention Policies for %s: %+v", id, err) } } - if d.HasChange("short_term_retention_policy") { - v := d.Get("short_term_retention_policy") - backupShortTermPolicyProps := helper.ExpandShortTermRetentionPolicy(v.([]interface{})) - if backupShortTermPolicyProps != nil { - backupShortTermPolicy := sql.BackupShortTermRetentionPolicy{} + backupShortTermPolicyProps := helper.ExpandShortTermRetentionPolicy(d.Get("short_term_retention_policy").([]interface{})) + if backupShortTermPolicyProps != nil { + backupShortTermPolicy := sql.BackupShortTermRetentionPolicy{} - if !strings.HasPrefix(skuName.(string), "DW") { - backupShortTermPolicy.BackupShortTermRetentionPolicyProperties = backupShortTermPolicyProps - } - if strings.HasPrefix(skuName.(string), "HS") { - backupShortTermPolicy.BackupShortTermRetentionPolicyProperties.DiffBackupIntervalInHours = nil - } + if !strings.HasPrefix(skuName.(string), "DW") { + backupShortTermPolicy.BackupShortTermRetentionPolicyProperties = backupShortTermPolicyProps + } + if strings.HasPrefix(skuName.(string), "HS") { + backupShortTermPolicy.BackupShortTermRetentionPolicyProperties.DiffBackupIntervalInHours = nil + } - shortTermRetentionFuture, err := shortTermRetentionClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, backupShortTermPolicy) - if err != nil { - return fmt.Errorf("setting Short Term Retention Policies for %s: %+v", id, err) - } + shortTermRetentionFuture, err := shortTermRetentionClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, backupShortTermPolicy) + if err != nil { + return fmt.Errorf("setting Short Term Retention Policies for %s: %+v", id, err) + } - if err = shortTermRetentionFuture.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for update of Short Term Retention Policies for %s: %+v", id, err) - } + if err = shortTermRetentionFuture.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for update of Short Term Retention Policies for %s: %+v", id, err) } } @@ -636,6 +617,390 @@ func resourceMsSqlDatabaseRead(d *pluginsdk.ResourceData, meta interface{}) erro return tags.FlattenAndSet(d, resp.Tags) } +func resourceMsSqlDatabaseUpdate(d *pluginsdk.ResourceData, meta interface{}) error { + client := meta.(*clients.Client).MSSQL.DatabasesClient + serversClient := meta.(*clients.Client).MSSQL.ServersClient + securityAlertPoliciesClient := meta.(*clients.Client).MSSQL.DatabaseSecurityAlertPoliciesClient + longTermRetentionClient := meta.(*clients.Client).MSSQL.LongTermRetentionPoliciesClient + shortTermRetentionClient := meta.(*clients.Client).MSSQL.BackupShortTermRetentionPoliciesClient + geoBackupPoliciesClient := meta.(*clients.Client).MSSQL.GeoBackupPoliciesClient + replicationLinksClient := meta.(*clients.Client).MSSQL.ReplicationLinksClient + resourcesClient := meta.(*clients.Client).Resource.ResourcesClient + transparentEncryptionClient := meta.(*clients.Client).MSSQL.TransparentDataEncryptionsClient + + ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + defer cancel() + + log.Printf("[INFO] preparing arguments for MsSql Database creation.") + + skuName := d.Get("sku_name").(string) + if strings.HasPrefix(skuName, "GP_S_") && d.Get("license_type").(string) != "" { + return fmt.Errorf("serverless databases do not support license type") + } + + name := d.Get("name").(string) + + serverId, err := parse.ServerID(d.Get("server_id").(string)) + if err != nil { + return fmt.Errorf("parsing server ID: %+v", err) + } + + id := parse.NewDatabaseID(serverId.SubscriptionId, serverId.ResourceGroup, serverId.Name, name) + + _, err = client.Get(ctx, id.ResourceGroup, id.ServerName, id.Name) + if err != nil { + return fmt.Errorf("retrieving %s: %+q", id, err) + } + + _, err = serversClient.Get(ctx, serverId.ResourceGroup, serverId.Name, "") + if err != nil { + return fmt.Errorf("retrieving %s: %q", serverId, err) + } + + // when disassociating mssql db from elastic pool, the sku_name must be specific + if d.HasChange("elastic_pool_id") { + if old, new := d.GetChange("elastic_pool_id"); old.(string) != "" && new.(string) == "" { + if v, ok := d.GetOk("sku_name"); !ok || (ok && v.(string) == "ElasticPool") { + return fmt.Errorf("`sku_name` must be assigned and not be %q when disassociating from Elastic Pool", "ElasticPool") + } + } + } + + // When databases are replicating, the primary cannot have a SKU belonging to a higher service tier than any of its + // partner databases. To work around this, we'll try to identify any partner databases that are secondary to this + // database, and where the new SKU tier for this database is going to be higher, first upgrade those databases to + // the same sku_name as we'll be changing this database to. If that sku is different to the one configured for any + // of the partner databases, that discrepancy will have to be corrected by the resource for that database. That + // might happen as part of the same apply, if a change was already planned for it, else it will only be picked up + // in a second plan/apply. + // + // TLDR: for the best experience, configs should use the same SKU for primary and partner databases and when + // upgrading those SKUs, we'll try to upgrade the partner databases first. + + // Place a lock for the current database so any partner resources can't bump its SKU out of band + locks.ByID(id.ID()) + defer locks.UnlockByID(id.ID()) + + if d.HasChange("sku_name") && skuName != "" { + partnerDatabases, err := helper.FindDatabaseReplicationPartners(ctx, client, replicationLinksClient, resourcesClient, id, []sql.ReplicationRole{sql.ReplicationRoleSecondary, sql.ReplicationRoleNonReadableSecondary}) + if err != nil { + return err + } + + // Place a lock for the partner databases, so they can't update themselves whilst we're poking their SKUs + for _, partnerDatabase := range partnerDatabases { + partnerDatabaseId, err := parse.DatabaseID(*partnerDatabase.ID) + if err != nil { + return fmt.Errorf("parsing ID for Replication Partner Database %q: %+v", *partnerDatabase.ID, err) + } + + locks.ByID(partnerDatabaseId.ID()) + defer locks.UnlockByID(partnerDatabaseId.ID()) + } + + // Update the SKUs of any partner databases where deemed necessary + for _, partnerDatabase := range partnerDatabases { + partnerDatabaseId, err := parse.DatabaseID(*partnerDatabase.ID) + if err != nil { + return fmt.Errorf("parsing ID for Replication Partner Database %q: %+v", *partnerDatabase.ID, err) + } + + // See: https://docs.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview#configuring-secondary-database + if partnerDatabase.Sku != nil && partnerDatabase.Sku.Name != nil && helper.CompareDatabaseSkuServiceTiers(skuName, *partnerDatabase.Sku.Name) { + future, err := client.Update(ctx, partnerDatabaseId.ResourceGroup, partnerDatabaseId.ServerName, partnerDatabaseId.Name, sql.DatabaseUpdate{ + Sku: &sql.Sku{ + Name: pointer.To(skuName), + }, + }) + if err != nil { + return fmt.Errorf("updating SKU of Replication Partner %s: %+v", partnerDatabaseId, err) + } + + if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for SKU update for Replication Partner %s: %+v", partnerDatabaseId, err) + } + } + } + } + + payload := sql.DatabaseUpdate{} + props := sql.DatabaseProperties{} + + if d.HasChange("auto_pause_delay_in_minutes") { + props.AutoPauseDelay = pointer.To(int32(d.Get("auto_pause_delay_in_minutes").(int))) + } + + if d.HasChange("elastic_pool_id") { + props.ElasticPoolID = pointer.To(d.Get("elastic_pool_id").(string)) + } + + if d.HasChange("license_type") { + props.LicenseType = sql.DatabaseLicenseType(d.Get("license_type").(string)) + } + + if d.HasChange("min_capacity") { + props.MinCapacity = pointer.To(d.Get("min_capacity").(float64)) + } + + if d.HasChange("read_replica_count") { + props.HighAvailabilityReplicaCount = pointer.To(int32(d.Get("read_replica_count").(int))) + } + + if d.HasChange("sample_name") { + props.SampleName = sql.SampleName(d.Get("sample_name").(string)) + } + + if d.HasChange("storage_account_type") { + props.RequestedBackupStorageRedundancy = sql.RequestedBackupStorageRedundancy(d.Get("storage_account_type").(string)) + } + + if d.HasChange("zone_redundant") { + props.ZoneRedundant = pointer.To(d.Get("zone_redundant").(bool)) + } + + if d.HasChange("tags") { + payload.Tags = tags.Expand(d.Get("tags").(map[string]interface{})) + } + + // we should not specify the value of `maintenance_configuration_name` when `elastic_pool_id` is set since its value depends on the elastic pool's `maintenance_configuration_name` value. + if _, ok := d.GetOk("elastic_pool_id"); !ok && d.HasChange("maintenance_configuration_name") { + // set default value here because `elastic_pool_id` is not specified, API returns default value `SQL_Default` for `maintenance_configuration_name` + maintenanceConfigId := publicmaintenanceconfigurations.NewPublicMaintenanceConfigurationID(serverId.SubscriptionId, "SQL_Default") + if v, ok := d.GetOk("maintenance_configuration_name"); ok { + maintenanceConfigId = publicmaintenanceconfigurations.NewPublicMaintenanceConfigurationID(serverId.SubscriptionId, v.(string)) + } + props.MaintenanceConfigurationID = pointer.To(maintenanceConfigId.ID()) + } + + createMode := d.Get("create_mode").(string) + if v, ok := d.GetOk("max_size_gb"); ok { + // `max_size_gb` is Computed, so has a value after the first run + if createMode != string(sql.CreateModeOnlineSecondary) && createMode != string(sql.CreateModeSecondary) { + props.MaxSizeBytes = utils.Int64(int64(v.(int)) * 1073741824) + } + // `max_size_gb` only has change if it is configured + if d.HasChange("max_size_gb") && (createMode == string(sql.CreateModeOnlineSecondary) || createMode == string(sql.CreateModeSecondary)) { + return fmt.Errorf("it is not possible to change maximum size nor advised to configure maximum size in secondary create mode for %s", id) + } + } + + if d.HasChanges("read_scale") { + readScale := sql.DatabaseReadScaleDisabled + if v := d.Get("read_scale").(bool); v { + readScale = sql.DatabaseReadScaleEnabled + } + props.ReadScale = readScale + } + + if d.HasChange("restore_point_in_time") { + if v, ok := d.GetOk("restore_point_in_time"); ok { + if createMode != string(sql.CreateModePointInTimeRestore) { + return fmt.Errorf("'restore_point_in_time' is supported only for create_mode %s", string(sql.CreateModePointInTimeRestore)) + } + restorePointInTime, err := time.Parse(time.RFC3339, v.(string)) + if err != nil { + return fmt.Errorf("parsing `restore_point_in_time` value %q for %s: %+v", v, id, err) + } + props.RestorePointInTime = &date.Time{Time: restorePointInTime} + } + } + + if d.HasChange("sku_name") { + payload.Sku = &sql.Sku{ + Name: pointer.To(skuName), + } + } + + if d.HasChange("recover_database_id") { + props.RecoverableDatabaseID = pointer.To(d.Get("recover_database_id").(string)) + } + + if d.HasChange("restore_dropped_database_id") { + props.RestorableDroppedDatabaseID = pointer.To(d.Get("restore_dropped_database_id").(string)) + } + + payload.DatabaseProperties = pointer.To(props) + + future, err := client.Update(ctx, id.ResourceGroup, id.ServerName, id.Name, payload) + if err != nil { + return fmt.Errorf("updating %s: %+v", id, err) + } + + if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for update of %s: %+v", id, err) + } + + // Wait for the ProvisioningState to become "Succeeded" + log.Printf("[DEBUG] Waiting for %s to become ready", id) + pendingStatuses := make([]string, 0) + for _, s := range sql.PossibleDatabaseStatusValues() { + if s != sql.DatabaseStatusOnline { + pendingStatuses = append(pendingStatuses, string(s)) + } + } + stateConf := &pluginsdk.StateChangeConf{ + Pending: pendingStatuses, + Target: []string{string(sql.DatabaseStatusOnline)}, + Refresh: func() (interface{}, string, error) { + log.Printf("[DEBUG] Checking to see if %s is online...", id) + + resp, err := client.Get(ctx, id.ResourceGroup, id.ServerName, id.Name) + if err != nil { + return nil, "", fmt.Errorf("polling for the status of %s: %+v", id, err) + } + + if props := resp.DatabaseProperties; props != nil { + return resp, string(props.Status), nil + } + + return resp, "", nil + }, + MinTimeout: 1 * time.Minute, + ContinuousTargetOccurence: 2, + } + stateConf.Timeout = d.Timeout(pluginsdk.TimeoutUpdate) + + if _, err = stateConf.WaitForStateContext(ctx); err != nil { + return fmt.Errorf("waiting for %s to become ready: %+v", id, err) + } + + // Cannot set transparent data encryption for secondary databases + if createMode != string(sql.CreateModeOnlineSecondary) && createMode != string(sql.CreateModeSecondary) { + statusProperty := sql.TransparentDataEncryptionStatusDisabled + if d.HasChange("transparent_data_encryption_enabled") { + encryptionStatus := d.Get("transparent_data_encryption_enabled").(bool) + if encryptionStatus { + statusProperty = sql.TransparentDataEncryptionStatusEnabled + } + _, err := transparentEncryptionClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, sql.TransparentDataEncryption{ + TransparentDataEncryptionProperties: &sql.TransparentDataEncryptionProperties{ + Status: statusProperty, + }, + }) + if err != nil { + return fmt.Errorf("while enabling Transparent Data Encryption for %q: %+v", id.String(), err) + } + + if err = pluginsdk.Retry(d.Timeout(pluginsdk.TimeoutCreate), func() *pluginsdk.RetryError { + c, err := client.Get(ctx, id.ResourceGroup, id.ServerName, id.Name) + if err != nil { + return pluginsdk.NonRetryableError(fmt.Errorf("while polling cluster %s for status: %+v", id.String(), err)) + } + if c.DatabaseProperties.Status == sql.DatabaseStatusScaling { + return pluginsdk.RetryableError(fmt.Errorf("database %s is still scaling", id.String())) + } + + return nil + }); err != nil { + return nil + } + } + + } + + if d.HasChange("import") { + if _, ok := d.GetOk("import"); ok { + importParameters := expandMsSqlServerImport(d) + importFuture, err := client.Import(ctx, id.ResourceGroup, id.ServerName, id.Name, importParameters) + if err != nil { + return fmt.Errorf("while import bacpac into the new database %s (Resource Group %s): %+v", id.Name, id.ResourceGroup, err) + } + + if err = importFuture.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("while import bacpac into the new database %s (Resource Group %s): %+v", id.Name, id.ResourceGroup, err) + } + } + } + + d.SetId(id.ID()) + + // For datawarehouse SKUs only + if strings.HasPrefix(skuName, "DW") && d.HasChange("geo_backup_enabled") { + isEnabled := d.Get("geo_backup_enabled").(bool) + var geoBackupPolicyState sql.GeoBackupPolicyState + + if isEnabled { + geoBackupPolicyState = sql.GeoBackupPolicyStateEnabled + } else { + geoBackupPolicyState = sql.GeoBackupPolicyStateDisabled + } + + geoBackupPolicy := sql.GeoBackupPolicy{ + GeoBackupPolicyProperties: &sql.GeoBackupPolicyProperties{ + State: geoBackupPolicyState, + }, + } + + if _, err := geoBackupPoliciesClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, geoBackupPolicy); err != nil { + return fmt.Errorf("setting Geo Backup Policies for %s: %+v", id, err) + } + } + + if err = pluginsdk.Retry(d.Timeout(pluginsdk.TimeoutCreate), func() *pluginsdk.RetryError { + result, err := securityAlertPoliciesClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, expandMsSqlServerSecurityAlertPolicy(d)) + + if utils.ResponseWasNotFound(result.Response) { + return pluginsdk.RetryableError(fmt.Errorf("database %s is still creating", id.String())) + } + + if err != nil { + return pluginsdk.NonRetryableError(fmt.Errorf("setting database threat detection policy for %s: %+v", id, err)) + } + + return nil + }); err != nil { + return nil + } + + if d.HasChange("long_term_retention_policy") { + v := d.Get("long_term_retention_policy") + longTermRetentionProps := helper.ExpandLongTermRetentionPolicy(v.([]interface{})) + if longTermRetentionProps != nil { + longTermRetentionPolicy := sql.LongTermRetentionPolicy{} + + // DataWarehouse SKU's do not support LRP currently + if !strings.HasPrefix(skuName, "DW") { + longTermRetentionPolicy.BaseLongTermRetentionPolicyProperties = longTermRetentionProps + } + + longTermRetentionfuture, err := longTermRetentionClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, longTermRetentionPolicy) + if err != nil { + return fmt.Errorf("setting Long Term Retention Policies for %s: %+v", id, err) + } + + if err = longTermRetentionfuture.WaitForCompletionRef(ctx, longTermRetentionClient.Client); err != nil { + return fmt.Errorf("waiting for update of Long Term Retention Policies for %s: %+v", id, err) + } + } + } + + if d.HasChange("short_term_retention_policy") { + v := d.Get("short_term_retention_policy") + backupShortTermPolicyProps := helper.ExpandShortTermRetentionPolicy(v.([]interface{})) + if backupShortTermPolicyProps != nil { + backupShortTermPolicy := sql.BackupShortTermRetentionPolicy{} + + if !strings.HasPrefix(skuName, "DW") { + backupShortTermPolicy.BackupShortTermRetentionPolicyProperties = backupShortTermPolicyProps + } + if strings.HasPrefix(skuName, "HS") { + backupShortTermPolicy.BackupShortTermRetentionPolicyProperties.DiffBackupIntervalInHours = nil + } + + shortTermRetentionFuture, err := shortTermRetentionClient.CreateOrUpdate(ctx, id.ResourceGroup, id.ServerName, id.Name, backupShortTermPolicy) + if err != nil { + return fmt.Errorf("setting Short Term Retention Policies for %s: %+v", id, err) + } + + if err = shortTermRetentionFuture.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for update of Short Term Retention Policies for %s: %+v", id, err) + } + } + } + + return resourceMsSqlDatabaseRead(d, meta) +} + func resourceMsSqlDatabaseDelete(d *pluginsdk.ResourceData, meta interface{}) error { client := meta.(*clients.Client).MSSQL.DatabasesClient ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) diff --git a/internal/services/mssql/mssql_elasticpool_resource.go b/internal/services/mssql/mssql_elasticpool_resource.go index af53bd21c9217..b91613028e949 100644 --- a/internal/services/mssql/mssql_elasticpool_resource.go +++ b/internal/services/mssql/mssql_elasticpool_resource.go @@ -234,14 +234,6 @@ func resourceMsSqlElasticPoolCreateUpdate(d *pluginsdk.ResourceData, meta interf }, } - if _, ok := d.GetOk("license_type"); ok { - if sku.Tier != nil && (*sku.Tier == "GeneralPurpose" || *sku.Tier == "BusinessCritical") { - elasticPool.ElasticPoolProperties.LicenseType = sql.ElasticPoolLicenseType(d.Get("license_type").(string)) - } else { - return fmt.Errorf("`license_type` can only be configured when `sku.0.tier` is set to `GeneralPurpose` or `BusinessCritical`") - } - } - if d.HasChange("max_size_gb") { if v, ok := d.GetOk("max_size_gb"); ok { maxSizeBytes := v.(float64) * 1073741824 @@ -307,7 +299,11 @@ func resourceMsSqlElasticPoolRead(d *pluginsdk.ResourceData, meta interface{}) e } } d.Set("zone_redundant", properties.ZoneRedundant) - d.Set("license_type", string(properties.LicenseType)) + licenseType := string(sql.DatabaseLicenseTypeLicenseIncluded) + if string(properties.LicenseType) != "" { + licenseType = string(properties.LicenseType) + } + d.Set("license_type", licenseType) if err := d.Set("per_database_settings", flattenMsSqlElasticPoolPerDatabaseSettings(properties.PerDatabaseSettings)); err != nil { return fmt.Errorf("setting `per_database_settings`: %+v", err) diff --git a/internal/services/mssql/mssql_elasticpool_resource_test.go b/internal/services/mssql/mssql_elasticpool_resource_test.go index 5b6c43bb51f52..5ed8e09c29ac9 100644 --- a/internal/services/mssql/mssql_elasticpool_resource_test.go +++ b/internal/services/mssql/mssql_elasticpool_resource_test.go @@ -258,6 +258,49 @@ func TestAccMsSqlElasticPool_hyperScale(t *testing.T) { ), }, data.ImportStep("max_size_gb"), + { + Config: r.hyperScaleUpdate(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("max_size_gb"), + }) +} + +func TestAccMsSqlElasticPool_vCoreToStandardDTU(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_mssql_elasticpool", "test") + r := MsSqlElasticPoolResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.noLicenseType(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.updateToStandardDTU(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.licenseType(data, "LicenseIncluded"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.updateToStandardDTU(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), }) } @@ -323,6 +366,10 @@ func (r MsSqlElasticPoolResource) basicVCore(data acceptance.TestData) string { return r.templateVCore(data, "GP_Gen5", "GeneralPurpose", 4, "Gen5", 0.25, 4) } +func (r MsSqlElasticPoolResource) updateToStandardDTU(data acceptance.TestData) string { + return r.templateUpdateToDTU(data, "StandardPool", "Standard", 50, 50, 10, 50, false) +} + func (r MsSqlElasticPoolResource) fsv2VCore(data acceptance.TestData) string { return r.templateVCore(data, "GP_Fsv2", "GeneralPurpose", 8, "Fsv2", 0, 8) } @@ -375,6 +422,61 @@ resource "azurerm_mssql_server" "test" { administrator_login_password = "4-v3ry-53cr37-p455w0rd" } +resource "azurerm_mssql_elasticpool" "test" { + name = "acctest-pool-dtu-%[1]d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + server_name = azurerm_mssql_server.test.name + max_size_gb = %.7[6]f + zone_redundant = %[9]t + maintenance_configuration_name = "%[10]s" + + sku { + name = "%[3]s" + tier = "%[4]s" + capacity = %[5]d + } + + per_database_settings { + min_capacity = %[7]d + max_capacity = %[8]d + } +} +`, data.RandomInteger, data.Locations.Primary, skuName, skuTier, skuCapacity, maxSizeGB, databaseSettingsMin, databaseSettingsMax, zoneRedundant, configName) +} + +func (MsSqlElasticPoolResource) templateUpdateToDTU(data acceptance.TestData, skuName string, skuTier string, skuCapacity int, maxSizeGB float64, databaseSettingsMin int, databaseSettingsMax int, zoneRedundant bool) string { + configName := "SQL_Default" + if skuTier != "Basic" { + switch data.Locations.Primary { + case "westeurope": + configName = "SQL_WestEurope_DB_2" + case "francecentral": + configName = "SQL_FranceCentral_DB_1" + default: + configName = "SQL_Default" + } + } + + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%[1]d" + location = "%[2]s" +} + +resource "azurerm_mssql_server" "test" { + name = "acctest%[1]d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + version = "12.0" + administrator_login = "4dm1n157r470r" + administrator_login_password = "4-v3ry-53cr37-p455w0rd" +} + resource "azurerm_mssql_elasticpool" "test" { name = "acctest-pool-dtu-%[1]d" resource_group_name = azurerm_resource_group.test.name @@ -425,7 +527,6 @@ resource "azurerm_mssql_elasticpool" "test" { location = azurerm_resource_group.test.location server_name = azurerm_mssql_server.test.name max_size_gb = 5 - sku { name = "%[3]s" tier = "%[4]s" @@ -508,7 +609,6 @@ resource "azurerm_mssql_elasticpool" "test" { resource_group_name = azurerm_resource_group.test.name location = azurerm_resource_group.test.location server_name = azurerm_mssql_server.test.name - sku { name = "%[3]s" tier = "%[4]s" @@ -524,6 +624,49 @@ resource "azurerm_mssql_elasticpool" "test" { `, data.RandomInteger, data.Locations.Primary, skuName, skuTier, skuCapacity, skuFamily, databaseSettingsMin, databaseSettingsMax) } +func (MsSqlElasticPoolResource) noLicenseType(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%[1]d" + location = "%[2]s" +} + +resource "azurerm_mssql_server" "test" { + name = "acctest%[1]d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + version = "12.0" + administrator_login = "4dm1n157r470r" + administrator_login_password = "4-v3ry-53cr37-p455w0rd" +} + +resource "azurerm_mssql_elasticpool" "test" { + name = "acctest-pool-dtu-%[1]d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + server_name = azurerm_mssql_server.test.name + max_size_gb = 50 + zone_redundant = false + + sku { + name = "GP_Gen5" + tier = "GeneralPurpose" + capacity = 4 + family = "Gen5" + } + + per_database_settings { + min_capacity = 0 + max_capacity = 4 + } +} +`, data.RandomInteger, data.Locations.Primary) +} + func (MsSqlElasticPoolResource) licenseType(data acceptance.TestData, licenseType string) string { return fmt.Sprintf(` provider "azurerm" { @@ -564,7 +707,6 @@ resource "azurerm_mssql_elasticpool" "test" { min_capacity = 0 max_capacity = 4 } - } `, data.RandomInteger, data.Locations.Primary, licenseType) } @@ -572,3 +714,7 @@ resource "azurerm_mssql_elasticpool" "test" { func (r MsSqlElasticPoolResource) hyperScale(data acceptance.TestData) string { return r.templateHyperScale(data, "HS_Gen5", "Hyperscale", 4, "Gen5", 0.25, 4) } + +func (r MsSqlElasticPoolResource) hyperScaleUpdate(data acceptance.TestData) string { + return r.templateHyperScale(data, "HS_Gen5", "Hyperscale", 4, "Gen5", 0, 4) +} diff --git a/internal/services/mssql/mssql_virtual_machine_resource.go b/internal/services/mssql/mssql_virtual_machine_resource.go index df3b9c7ba195c..777e2b5ecd3f2 100644 --- a/internal/services/mssql/mssql_virtual_machine_resource.go +++ b/internal/services/mssql/mssql_virtual_machine_resource.go @@ -13,14 +13,13 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" "github.com/hashicorp/go-azure-sdk/resource-manager/sqlvirtualmachine/2022-02-01/sqlvirtualmachinegroups" "github.com/hashicorp/go-azure-sdk/resource-manager/sqlvirtualmachine/2022-02-01/sqlvirtualmachines" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - parseCompute "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/services/mssql/helper" "github.com/hashicorp/terraform-provider-azurerm/internal/services/mssql/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" @@ -56,7 +55,7 @@ func resourceMsSqlVirtualMachine() *pluginsdk.Resource { Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: computeValidate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, "sql_license_type": { @@ -499,11 +498,11 @@ func resourceMsSqlVirtualMachineCreateUpdate(d *pluginsdk.ResourceData, meta int ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() - vmId, err := parseCompute.VirtualMachineID(d.Get("virtual_machine_id").(string)) + vmId, err := commonids.ParseVirtualMachineID(d.Get("virtual_machine_id").(string)) if err != nil { return err } - id := sqlvirtualmachines.NewSqlVirtualMachineID(vmId.SubscriptionId, vmId.ResourceGroup, vmId.Name) + id := sqlvirtualmachines.NewSqlVirtualMachineID(vmId.SubscriptionId, vmId.ResourceGroupName, vmId.VirtualMachineName) if d.IsNewResource() { existing, err := client.Get(ctx, id, sqlvirtualmachines.GetOperationOptions{Expand: utils.String("*")}) diff --git a/internal/services/mysql/client/client.go b/internal/services/mysql/client/client.go index e28342957d4ba..f89658780af16 100644 --- a/internal/services/mysql/client/client.go +++ b/internal/services/mysql/client/client.go @@ -8,14 +8,14 @@ import ( servers_v2017_12_01 "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2017-12-01" servers_v2020_01_01 "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2020-01-01" - flexibleServers_v2021_05_01 "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01" + flexibleServers_v2022_01_01 "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01" "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/azureadadministrators" "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" "github.com/hashicorp/terraform-provider-azurerm/internal/common" ) type Client struct { - FlexibleServers *flexibleServers_v2021_05_01.Client + FlexibleServers *flexibleServers_v2022_01_01.Client MySqlClient *servers_v2017_12_01.Client ServerKeysClient *servers_v2020_01_01.Client @@ -24,7 +24,7 @@ type Client struct { } func NewClient(o *common.ClientOptions) (*Client, error) { - flexibleServersMetaClient, err := flexibleServers_v2021_05_01.NewClientWithBaseURI(o.Environment.ResourceManager, func(c *resourcemanager.Client) { + flexibleServersMetaClient, err := flexibleServers_v2022_01_01.NewClientWithBaseURI(o.Environment.ResourceManager, func(c *resourcemanager.Client) { o.Configure(c, o.Authorizers.ResourceManager) }) if err != nil { diff --git a/internal/services/mysql/mysql_flexible_database_resource.go b/internal/services/mysql/mysql_flexible_database_resource.go index 752115170c731..ede689e044401 100644 --- a/internal/services/mysql/mysql_flexible_database_resource.go +++ b/internal/services/mysql/mysql_flexible_database_resource.go @@ -10,7 +10,7 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/services/mysql/validate" diff --git a/internal/services/mysql/mysql_flexible_database_resource_test.go b/internal/services/mysql/mysql_flexible_database_resource_test.go index f4d402e5fb590..03a8b3fd58615 100644 --- a/internal/services/mysql/mysql_flexible_database_resource_test.go +++ b/internal/services/mysql/mysql_flexible_database_resource_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" diff --git a/internal/services/mysql/mysql_flexible_server_configuration_resource.go b/internal/services/mysql/mysql_flexible_server_configuration_resource.go index 34d7bfae36acf..d8192065b7cf9 100644 --- a/internal/services/mysql/mysql_flexible_server_configuration_resource.go +++ b/internal/services/mysql/mysql_flexible_server_configuration_resource.go @@ -11,7 +11,7 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/services/mysql/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" diff --git a/internal/services/mysql/mysql_flexible_server_configuration_resource_test.go b/internal/services/mysql/mysql_flexible_server_configuration_resource_test.go index 5ba818d751067..5036a934896a6 100644 --- a/internal/services/mysql/mysql_flexible_server_configuration_resource_test.go +++ b/internal/services/mysql/mysql_flexible_server_configuration_resource_test.go @@ -10,8 +10,8 @@ import ( "time" "github.com/hashicorp/go-azure-helpers/lang/response" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" diff --git a/internal/services/mysql/mysql_flexible_server_data_source.go b/internal/services/mysql/mysql_flexible_server_data_source.go index b979156d43717..871b84757e2d5 100644 --- a/internal/services/mysql/mysql_flexible_server_data_source.go +++ b/internal/services/mysql/mysql_flexible_server_data_source.go @@ -13,7 +13,7 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/services/mysql/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" diff --git a/internal/services/mysql/mysql_flexible_server_firewall_rule_resource.go b/internal/services/mysql/mysql_flexible_server_firewall_rule_resource.go index f487771ddb25b..26f14891a88c0 100644 --- a/internal/services/mysql/mysql_flexible_server_firewall_rule_resource.go +++ b/internal/services/mysql/mysql_flexible_server_firewall_rule_resource.go @@ -9,7 +9,7 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" azValidate "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" diff --git a/internal/services/mysql/mysql_flexible_server_firewall_rule_resource_test.go b/internal/services/mysql/mysql_flexible_server_firewall_rule_resource_test.go index 4906036ea8a0c..afee7905c39b7 100644 --- a/internal/services/mysql/mysql_flexible_server_firewall_rule_resource_test.go +++ b/internal/services/mysql/mysql_flexible_server_firewall_rule_resource_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" diff --git a/internal/services/mysql/mysql_flexible_server_resource.go b/internal/services/mysql/mysql_flexible_server_resource.go index a17c670dc2043..99464198f07af 100644 --- a/internal/services/mysql/mysql_flexible_server_resource.go +++ b/internal/services/mysql/mysql_flexible_server_resource.go @@ -17,8 +17,8 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/identity" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers" "github.com/hashicorp/go-azure-sdk/resource-manager/privatedns/2020-06-01/privatezones" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" diff --git a/internal/services/mysql/mysql_flexible_server_resource_test.go b/internal/services/mysql/mysql_flexible_server_resource_test.go index 6bee6927b9645..a563427a95908 100644 --- a/internal/services/mysql/mysql_flexible_server_resource_test.go +++ b/internal/services/mysql/mysql_flexible_server_resource_test.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" diff --git a/internal/services/netapp/client/client.go b/internal/services/netapp/client/client.go index 44bf51af4b6aa..7aa9afe5740c0 100644 --- a/internal/services/netapp/client/client.go +++ b/internal/services/netapp/client/client.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/snapshotpolicy" "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/snapshots" "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumes" "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumesreplication" "github.com/hashicorp/terraform-provider-azurerm/internal/common" @@ -22,6 +23,7 @@ type Client struct { VolumeClient *volumes.VolumesClient VolumeGroupClient *volumegroups.VolumeGroupsClient VolumeReplicationClient *volumesreplication.VolumesReplicationClient + VolumeQuotaRules *volumequotarules.VolumeQuotaRulesClient SnapshotClient *snapshots.SnapshotsClient SnapshotPoliciesClient *snapshotpolicy.SnapshotPolicyClient } @@ -57,6 +59,12 @@ func NewClient(o *common.ClientOptions) (*Client, error) { return nil, fmt.Errorf("building VolumeReplicationClient client: %+v", err) } + volumeQuotaRuleClient, err := volumequotarules.NewVolumeQuotaRulesClientWithBaseURI(o.Environment.ResourceManager) + o.Configure(volumeQuotaRuleClient.Client, o.Authorizers.ResourceManager) + if err != nil { + return nil, fmt.Errorf("building VolumeQuotaRuleClient client: %+v", err) + } + snapshotClient, err := snapshots.NewSnapshotsClientWithBaseURI(o.Environment.ResourceManager) o.Configure(snapshotClient.Client, o.Authorizers.ResourceManager) if err != nil { @@ -75,6 +83,7 @@ func NewClient(o *common.ClientOptions) (*Client, error) { VolumeClient: volumeClient, VolumeGroupClient: volumeGroupClient, VolumeReplicationClient: volumeReplicationClient, + VolumeQuotaRules: volumeQuotaRuleClient, SnapshotClient: snapshotClient, SnapshotPoliciesClient: snapshotPoliciesClient, }, nil diff --git a/internal/services/netapp/models/models.go b/internal/services/netapp/models/models.go new file mode 100644 index 0000000000000..d233f9e84d616 --- /dev/null +++ b/internal/services/netapp/models/models.go @@ -0,0 +1,104 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package models + +const ( + MaxQuotaTargetIDSizeInKiB int64 = 4294967295 +) + +type NetAppVolumeGroupVolume struct { + Id string `tfschema:"id"` + Name string `tfschema:"name"` + VolumePath string `tfschema:"volume_path"` + ServiceLevel string `tfschema:"service_level"` + SubnetId string `tfschema:"subnet_id"` + Protocols []string `tfschema:"protocols"` + SecurityStyle string `tfschema:"security_style"` + StorageQuotaInGB int64 `tfschema:"storage_quota_in_gb"` + ThroughputInMibps float64 `tfschema:"throughput_in_mibps"` + Tags map[string]string `tfschema:"tags"` + SnapshotDirectoryVisible bool `tfschema:"snapshot_directory_visible"` + CapacityPoolId string `tfschema:"capacity_pool_id"` + ProximityPlacementGroupId string `tfschema:"proximity_placement_group_id"` + VolumeSpecName string `tfschema:"volume_spec_name"` + ExportPolicy []ExportPolicyRule `tfschema:"export_policy_rule"` + MountIpAddresses []string `tfschema:"mount_ip_addresses"` + DataProtectionReplication []DataProtectionReplication `tfschema:"data_protection_replication"` + DataProtectionSnapshotPolicy []DataProtectionSnapshotPolicy `tfschema:"data_protection_snapshot_policy"` +} + +type NetAppVolumeGroupSapHanaModel struct { + Name string `tfschema:"name"` + ResourceGroupName string `tfschema:"resource_group_name"` + Location string `tfschema:"location"` + AccountName string `tfschema:"account_name"` + GroupDescription string `tfschema:"group_description"` + ApplicationIdentifier string `tfschema:"application_identifier"` + Volumes []NetAppVolumeGroupVolume `tfschema:"volume"` +} + +type NetAppVolumeGroupSapHanaDataSourceModel struct { + Name string `tfschema:"name"` + ResourceGroupName string `tfschema:"resource_group_name"` + Location string `tfschema:"location"` + AccountName string `tfschema:"account_name"` + GroupDescription string `tfschema:"group_description"` + ApplicationIdentifier string `tfschema:"application_identifier"` + Volumes []NetAppVolumeGroupVolume `tfschema:"volume"` +} + +type ExportPolicyRule struct { + RuleIndex int `tfschema:"rule_index"` + AllowedClients string `tfschema:"allowed_clients"` + Nfsv3Enabled bool `tfschema:"nfsv3_enabled"` + Nfsv41Enabled bool `tfschema:"nfsv41_enabled"` + UnixReadOnly bool `tfschema:"unix_read_only"` + UnixReadWrite bool `tfschema:"unix_read_write"` + RootAccessEnabled bool `tfschema:"root_access_enabled"` +} + +type DataProtectionReplication struct { + EndpointType string `tfschema:"endpoint_type"` + RemoteVolumeLocation string `tfschema:"remote_volume_location"` + RemoteVolumeResourceId string `tfschema:"remote_volume_resource_id"` + ReplicationFrequency string `tfschema:"replication_frequency"` +} + +type DataProtectionSnapshotPolicy struct { + DataProtectionSnapshotPolicy string `tfschema:"snapshot_policy_id"` +} + +type ReplicationSchedule string + +const ( + ReplicationSchedule10Minutes ReplicationSchedule = "10minutes" + ReplicationScheduleDaily ReplicationSchedule = "daily" + ReplicationScheduleHourly ReplicationSchedule = "hourly" +) + +func PossibleValuesForReplicationSchedule() []string { + return []string{ + string(ReplicationSchedule10Minutes), + string(ReplicationScheduleDaily), + string(ReplicationScheduleHourly), + } +} + +type NetAppVolumeQuotaRuleModel struct { + Name string `tfschema:"name"` + Location string `tfschema:"location"` + VolumeID string `tfschema:"volume_id"` + QuotaTarget string `tfschema:"quota_target"` + QuotaSizeInKiB int64 `tfschema:"quota_size_in_kib"` + QuotaType string `tfschema:"quota_type"` +} + +type NetAppVolumeQuotaRuleDataSourceModel struct { + Name string `tfschema:"name"` + Location string `tfschema:"location"` + VolumeID string `tfschema:"volume_id"` + QuotaTarget string `tfschema:"quota_target"` + QuotaSizeInKiB int64 `tfschema:"quota_size_in_kib"` + QuotaType string `tfschema:"quota_type"` +} diff --git a/internal/services/netapp/netapp_volume_group_sap_hana_data_source.go b/internal/services/netapp/netapp_volume_group_sap_hana_data_source.go index 199e1a999de6a..f10a23959b36d 100644 --- a/internal/services/netapp/netapp_volume_group_sap_hana_data_source.go +++ b/internal/services/netapp/netapp_volume_group_sap_hana_data_source.go @@ -6,27 +6,18 @@ package netapp import ( "context" "fmt" - "net/http" "time" "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + netAppModels "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/models" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" ) -type NetAppVolumeGroupSapHanaDataSourceModel struct { - Name string `tfschema:"name"` - ResourceGroupName string `tfschema:"resource_group_name"` - Location string `tfschema:"location"` - AccountName string `tfschema:"account_name"` - GroupDescription string `tfschema:"group_description"` - ApplicationIdentifier string `tfschema:"application_identifier"` - Volumes []NetAppVolumeGroupVolume `tfschema:"volume"` -} - var _ sdk.DataSource = NetAppVolumeGroupSapHanaDataSource{} type NetAppVolumeGroupSapHanaDataSource struct{} @@ -36,7 +27,7 @@ func (r NetAppVolumeGroupSapHanaDataSource) ResourceType() string { } func (r NetAppVolumeGroupSapHanaDataSource) ModelObject() interface{} { - return &NetAppVolumeGroupSapHanaDataSourceModel{} + return &netAppModels.NetAppVolumeGroupSapHanaDataSourceModel{} } func (r NetAppVolumeGroupSapHanaDataSource) IDValidationFunc() pluginsdk.SchemaValidateFunc { @@ -249,38 +240,37 @@ func (r NetAppVolumeGroupSapHanaDataSource) Read() sdk.ResourceFunc { client := metadata.Client.NetApp.VolumeGroupClient - var state NetAppVolumeGroupSapHanaDataSourceModel + var state netAppModels.NetAppVolumeGroupSapHanaDataSourceModel if err := metadata.Decode(&state); err != nil { return fmt.Errorf("decoding: %+v", err) } id := volumegroups.NewVolumeGroupID(metadata.Client.Account.SubscriptionId, state.ResourceGroupName, state.AccountName, state.Name) - resp, err := client.VolumeGroupsGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { - if resp.HttpResponse.StatusCode == http.StatusNotFound { + if response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("%s was not found", id) } return fmt.Errorf("retrieving %s: %v", id, err) } - model := resp.Model - if model == nil { - return fmt.Errorf("retrieving %s: model was nil", id) - } - - state.Location = location.Normalize(pointer.From(model.Location)) - state.ApplicationIdentifier = pointer.From(model.Properties.GroupMetaData.ApplicationIdentifier) - state.GroupDescription = pointer.From(model.Properties.GroupMetaData.GroupDescription) - - volumes, err := flattenNetAppVolumeGroupVolumes(ctx, model.Properties.Volumes, metadata) - if err != nil { - return fmt.Errorf("setting `volume`: %+v", err) - } - - state.Volumes = volumes - metadata.SetID(id) + if model := resp.Model; model != nil { + state.Location = location.Normalize(pointer.From(model.Location)) + if props := model.Properties; props != nil { + if groupMetaData := props.GroupMetaData; groupMetaData != nil { + state.ApplicationIdentifier = pointer.From(groupMetaData.ApplicationIdentifier) + state.GroupDescription = pointer.From(groupMetaData.GroupDescription) + } + + volumes, err := flattenNetAppVolumeGroupVolumes(ctx, props.Volumes, metadata) + if err != nil { + return fmt.Errorf("setting `volume`: %+v", err) + } + state.Volumes = volumes + } + } return metadata.Encode(&state) }, diff --git a/internal/services/netapp/netapp_volume_group_sap_hana_resource.go b/internal/services/netapp/netapp_volume_group_sap_hana_resource.go index 4c245834cabb5..65a13ce040b36 100644 --- a/internal/services/netapp/netapp_volume_group_sap_hana_resource.go +++ b/internal/services/netapp/netapp_volume_group_sap_hana_resource.go @@ -7,11 +7,11 @@ import ( "context" "fmt" "log" - "net/http" "strings" "time" "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" @@ -21,6 +21,7 @@ import ( "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumesreplication" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + netAppModels "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/models" netAppValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -29,20 +30,10 @@ import ( type NetAppVolumeGroupSapHanaResource struct{} -type NetAppVolumeGroupSapHanaModel struct { - Name string `tfschema:"name"` - ResourceGroupName string `tfschema:"resource_group_name"` - Location string `tfschema:"location"` - AccountName string `tfschema:"account_name"` - GroupDescription string `tfschema:"group_description"` - ApplicationIdentifier string `tfschema:"application_identifier"` - Volumes []NetAppVolumeGroupVolume `tfschema:"volume"` -} - var _ sdk.Resource = NetAppVolumeGroupSapHanaResource{} func (r NetAppVolumeGroupSapHanaResource) ModelObject() interface{} { - return &NetAppVolumeGroupSapHanaModel{} + return &netAppModels.NetAppVolumeGroupSapHanaModel{} } func (r NetAppVolumeGroupSapHanaResource) ResourceType() string { @@ -274,7 +265,7 @@ func (r NetAppVolumeGroupSapHanaResource) Arguments() map[string]*pluginsdk.Sche "replication_frequency": { Type: pluginsdk.TypeString, Required: true, - ValidateFunc: validation.StringInSlice(PossibleValuesForReplicationSchedule(), false), + ValidateFunc: validation.StringInSlice(netAppModels.PossibleValuesForReplicationSchedule(), false), }, }, }, @@ -313,7 +304,7 @@ func (r NetAppVolumeGroupSapHanaResource) Create() sdk.ResourceFunc { subscriptionId := metadata.Client.Account.SubscriptionId - var model NetAppVolumeGroupSapHanaModel + var model netAppModels.NetAppVolumeGroupSapHanaModel if err := metadata.Decode(&model); err != nil { return fmt.Errorf("decoding: %+v", err) } @@ -321,8 +312,8 @@ func (r NetAppVolumeGroupSapHanaResource) Create() sdk.ResourceFunc { id := volumegroups.NewVolumeGroupID(subscriptionId, model.ResourceGroupName, model.AccountName, model.Name) metadata.Logger.Infof("Import check for %s", id) - existing, err := client.VolumeGroupsGet(ctx, id) - if err != nil && existing.HttpResponse.StatusCode != http.StatusNotFound { + existing, err := client.Get(ctx, id) + if err != nil && !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } @@ -369,7 +360,7 @@ func (r NetAppVolumeGroupSapHanaResource) Create() sdk.ResourceFunc { }, } - err = client.VolumeGroupsCreateThenPoll(ctx, id, parameters) + err = client.CreateThenPoll(ctx, id, parameters) if err != nil { return fmt.Errorf("creating %s: %+v", id, err) } @@ -439,7 +430,7 @@ func (r NetAppVolumeGroupSapHanaResource) Update() sdk.ResourceFunc { } metadata.Logger.Infof("Decoding state for %s", id) - var state NetAppVolumeGroupSapHanaModel + var state netAppModels.NetAppVolumeGroupSapHanaModel if err := metadata.Decode(&state); err != nil { return err } @@ -562,14 +553,14 @@ func (r NetAppVolumeGroupSapHanaResource) Read() sdk.ResourceFunc { } metadata.Logger.Infof("Decoding state for %s", id) - var state NetAppVolumeGroupSapHanaModel + var state netAppModels.NetAppVolumeGroupSapHanaModel if err := metadata.Decode(&state); err != nil { return err } - existing, err := client.VolumeGroupsGet(ctx, pointer.From(id)) + existing, err := client.Get(ctx, pointer.From(id)) if err != nil { - if existing.HttpResponse.StatusCode == http.StatusNotFound { + if response.WasNotFound(existing.HttpResponse) { return metadata.MarkAsGone(id) } return fmt.Errorf("retrieving %s: %v", id, err) @@ -577,7 +568,7 @@ func (r NetAppVolumeGroupSapHanaResource) Read() sdk.ResourceFunc { metadata.SetID(id) - model := NetAppVolumeGroupSapHanaModel{ + model := netAppModels.NetAppVolumeGroupSapHanaModel{ Name: id.VolumeGroupName, AccountName: id.NetAppAccountName, Location: location.NormalizeNilable(existing.Model.Location), @@ -613,9 +604,9 @@ func (r NetAppVolumeGroupSapHanaResource) Delete() sdk.ResourceFunc { return err } - existing, err := client.VolumeGroupsGet(ctx, pointer.From(id)) + existing, err := client.Get(ctx, pointer.From(id)) if err != nil { - if existing.HttpResponse.StatusCode == http.StatusNotFound { + if response.WasNotFound(existing.HttpResponse) { return metadata.MarkAsGone(id) } return fmt.Errorf("retrieving %s: %v", id, err) @@ -633,7 +624,7 @@ func (r NetAppVolumeGroupSapHanaResource) Delete() sdk.ResourceFunc { } // Removing Volume Group - if err = client.VolumeGroupsDeleteThenPoll(ctx, pointer.From(id)); err != nil { + if err = client.DeleteThenPoll(ctx, pointer.From(id)); err != nil { return fmt.Errorf("deleting %s: %+v", pointer.From(id), err) } diff --git a/internal/services/netapp/netapp_volume_group_sap_hana_resource_test.go b/internal/services/netapp/netapp_volume_group_sap_hana_resource_test.go index 43f9f7eaf767c..d8417d970fac2 100644 --- a/internal/services/netapp/netapp_volume_group_sap_hana_resource_test.go +++ b/internal/services/netapp/netapp_volume_group_sap_hana_resource_test.go @@ -6,9 +6,9 @@ package netapp_test import ( "context" "fmt" - "net/http" "testing" + "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" @@ -135,10 +135,10 @@ func (t NetAppVolumeGroupSapHanaResource) Exists(ctx context.Context, clients *c return nil, err } - resp, err := clients.NetApp.VolumeGroupClient.VolumeGroupsGet(ctx, *id) + resp, err := clients.NetApp.VolumeGroupClient.Get(ctx, *id) if err != nil { - if resp.HttpResponse.StatusCode == http.StatusNotFound { + if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil } return nil, fmt.Errorf("retrieving %s: %+v", id, err) diff --git a/internal/services/netapp/netapp_volume_helper.go b/internal/services/netapp/netapp_volume_helper.go index 095e54c43bedd..fb0f44953b9ea 100644 --- a/internal/services/netapp/netapp_volume_helper.go +++ b/internal/services/netapp/netapp_volume_helper.go @@ -17,69 +17,12 @@ import ( "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumes" "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumesreplication" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + netAppModels "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/models" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) -type NetAppVolumeGroupVolume struct { - Id string `tfschema:"id"` - Name string `tfschema:"name"` - VolumePath string `tfschema:"volume_path"` - ServiceLevel string `tfschema:"service_level"` - SubnetId string `tfschema:"subnet_id"` - Protocols []string `tfschema:"protocols"` - SecurityStyle string `tfschema:"security_style"` - StorageQuotaInGB int64 `tfschema:"storage_quota_in_gb"` - ThroughputInMibps float64 `tfschema:"throughput_in_mibps"` - Tags map[string]string `tfschema:"tags"` - SnapshotDirectoryVisible bool `tfschema:"snapshot_directory_visible"` - CapacityPoolId string `tfschema:"capacity_pool_id"` - ProximityPlacementGroupId string `tfschema:"proximity_placement_group_id"` - VolumeSpecName string `tfschema:"volume_spec_name"` - ExportPolicy []ExportPolicyRule `tfschema:"export_policy_rule"` - MountIpAddresses []string `tfschema:"mount_ip_addresses"` - DataProtectionReplication []DataProtectionReplication `tfschema:"data_protection_replication"` - DataProtectionSnapshotPolicy []DataProtectionSnapshotPolicy `tfschema:"data_protection_snapshot_policy"` -} - -type ExportPolicyRule struct { - RuleIndex int `tfschema:"rule_index"` - AllowedClients string `tfschema:"allowed_clients"` - Nfsv3Enabled bool `tfschema:"nfsv3_enabled"` - Nfsv41Enabled bool `tfschema:"nfsv41_enabled"` - UnixReadOnly bool `tfschema:"unix_read_only"` - UnixReadWrite bool `tfschema:"unix_read_write"` - RootAccessEnabled bool `tfschema:"root_access_enabled"` -} - -type DataProtectionReplication struct { - EndpointType string `tfschema:"endpoint_type"` - RemoteVolumeLocation string `tfschema:"remote_volume_location"` - RemoteVolumeResourceId string `tfschema:"remote_volume_resource_id"` - ReplicationFrequency string `tfschema:"replication_frequency"` -} - -type DataProtectionSnapshotPolicy struct { - DataProtectionSnapshotPolicy string `tfschema:"snapshot_policy_id"` -} - -type ReplicationSchedule string - -const ( - ReplicationSchedule10Minutes ReplicationSchedule = "10minutes" - ReplicationScheduleDaily ReplicationSchedule = "daily" - ReplicationScheduleHourly ReplicationSchedule = "hourly" -) - -func PossibleValuesForReplicationSchedule() []string { - return []string{ - string(ReplicationSchedule10Minutes), - string(ReplicationScheduleDaily), - string(ReplicationScheduleHourly), - } -} - -func expandNetAppVolumeGroupVolumeExportPolicyRule(input []ExportPolicyRule) *volumegroups.VolumePropertiesExportPolicy { +func expandNetAppVolumeGroupVolumeExportPolicyRule(input []netAppModels.ExportPolicyRule) *volumegroups.VolumePropertiesExportPolicy { if len(input) == 0 { return &volumegroups.VolumePropertiesExportPolicy{} @@ -125,7 +68,7 @@ func expandNetAppVolumeGroupVolumeExportPolicyRule(input []ExportPolicyRule) *vo } } -func expandNetAppVolumeGroupDataProtectionReplication(input []DataProtectionReplication) *volumegroups.VolumePropertiesDataProtection { +func expandNetAppVolumeGroupDataProtectionReplication(input []netAppModels.DataProtectionReplication) *volumegroups.VolumePropertiesDataProtection { if len(input) == 0 { return &volumegroups.VolumePropertiesDataProtection{} } @@ -146,7 +89,7 @@ func expandNetAppVolumeGroupDataProtectionReplication(input []DataProtectionRepl } } -func expandNetAppVolumeGroupDataProtectionSnapshotPolicy(input []DataProtectionSnapshotPolicy) *volumegroups.VolumePropertiesDataProtection { +func expandNetAppVolumeGroupDataProtectionSnapshotPolicy(input []netAppModels.DataProtectionSnapshotPolicy) *volumegroups.VolumePropertiesDataProtection { if len(input) == 0 { return &volumegroups.VolumePropertiesDataProtection{} } @@ -159,7 +102,7 @@ func expandNetAppVolumeGroupDataProtectionSnapshotPolicy(input []DataProtectionS } } -func expandNetAppVolumeGroupVolumes(input []NetAppVolumeGroupVolume) (*[]volumegroups.VolumeGroupVolumeProperties, error) { +func expandNetAppVolumeGroupVolumes(input []netAppModels.NetAppVolumeGroupVolume) (*[]volumegroups.VolumeGroupVolumeProperties, error) { if len(input) == 0 { return &[]volumegroups.VolumeGroupVolumeProperties{}, fmt.Errorf("received empty NetAppVolumeGroupVolume slice") } @@ -330,15 +273,15 @@ func expandNetAppVolumeDataProtectionSnapshotPolicyPatch(input []interface{}) *v } } -func flattenNetAppVolumeGroupVolumes(ctx context.Context, input *[]volumegroups.VolumeGroupVolumeProperties, metadata sdk.ResourceMetaData) ([]NetAppVolumeGroupVolume, error) { - results := make([]NetAppVolumeGroupVolume, 0) +func flattenNetAppVolumeGroupVolumes(ctx context.Context, input *[]volumegroups.VolumeGroupVolumeProperties, metadata sdk.ResourceMetaData) ([]netAppModels.NetAppVolumeGroupVolume, error) { + results := make([]netAppModels.NetAppVolumeGroupVolume, 0) if input == nil || len(pointer.From(input)) == 0 { return results, fmt.Errorf("received empty volumegroups.VolumeGroupVolumeProperties slice") } for _, item := range *input { - volumeGroupVolume := NetAppVolumeGroupVolume{} + volumeGroupVolume := netAppModels.NetAppVolumeGroupVolume{} props := item.Properties volumeGroupVolume.Name = getUserDefinedVolumeName(item.Name) @@ -372,12 +315,12 @@ func flattenNetAppVolumeGroupVolumes(ctx context.Context, input *[]volumegroups. volumeClient := metadata.Client.NetApp.VolumeClient id, err := volumes.ParseVolumeID(pointer.From(item.Id)) if err != nil { - return []NetAppVolumeGroupVolume{}, err + return []netAppModels.NetAppVolumeGroupVolume{}, err } standaloneVol, err := volumeClient.Get(ctx, pointer.From(id)) if err != nil { - return []NetAppVolumeGroupVolume{}, fmt.Errorf("retrieving %s: %v", id, err) + return []netAppModels.NetAppVolumeGroupVolume{}, fmt.Errorf("retrieving %s: %v", id, err) } if standaloneVol.Model.Properties.DataProtection != nil && standaloneVol.Model.Properties.DataProtection.Replication != nil { @@ -396,15 +339,15 @@ func flattenNetAppVolumeGroupVolumes(ctx context.Context, input *[]volumegroups. return results, nil } -func flattenNetAppVolumeGroupVolumesExportPolicies(input *[]volumegroups.ExportPolicyRule) []ExportPolicyRule { - results := make([]ExportPolicyRule, 0) +func flattenNetAppVolumeGroupVolumesExportPolicies(input *[]volumegroups.ExportPolicyRule) []netAppModels.ExportPolicyRule { + results := make([]netAppModels.ExportPolicyRule, 0) if input == nil || len(pointer.From(input)) == 0 { return results } for _, item := range pointer.From(input) { - rule := ExportPolicyRule{} + rule := netAppModels.ExportPolicyRule{} rule.RuleIndex = int(pointer.From(item.RuleIndex)) rule.AllowedClients = pointer.From(item.AllowedClients) @@ -436,12 +379,12 @@ func flattenNetAppVolumeGroupVolumesMountIpAddresses(input *[]volumegroups.Mount return results } -func flattenNetAppVolumeGroupVolumesDPReplication(input *volumes.ReplicationObject) []DataProtectionReplication { +func flattenNetAppVolumeGroupVolumesDPReplication(input *volumes.ReplicationObject) []netAppModels.DataProtectionReplication { if input == nil { - return []DataProtectionReplication{} + return []netAppModels.DataProtectionReplication{} } if string(pointer.From(input.EndpointType)) == "" || !strings.EqualFold(string(pointer.From(input.EndpointType)), string(volumes.EndpointTypeDst)) { - return []DataProtectionReplication{} + return []netAppModels.DataProtectionReplication{} } replicationFrequency := "" @@ -449,7 +392,7 @@ func flattenNetAppVolumeGroupVolumesDPReplication(input *volumes.ReplicationObje replicationFrequency = translateSDKSchedule(strings.ToLower(string(pointer.From(input.ReplicationSchedule)))) } - return []DataProtectionReplication{ + return []netAppModels.DataProtectionReplication{ { EndpointType: strings.ToLower(string(pointer.From(input.EndpointType))), RemoteVolumeLocation: pointer.From(input.RemoteVolumeRegion), @@ -459,12 +402,12 @@ func flattenNetAppVolumeGroupVolumesDPReplication(input *volumes.ReplicationObje } } -func flattenNetAppVolumeGroupVolumesDPSnapshotPolicy(input *volumes.VolumeSnapshotProperties) []DataProtectionSnapshotPolicy { +func flattenNetAppVolumeGroupVolumesDPSnapshotPolicy(input *volumes.VolumeSnapshotProperties) []netAppModels.DataProtectionSnapshotPolicy { if input == nil { - return []DataProtectionSnapshotPolicy{} + return []netAppModels.DataProtectionSnapshotPolicy{} } - return []DataProtectionSnapshotPolicy{ + return []netAppModels.DataProtectionSnapshotPolicy{ { DataProtectionSnapshotPolicy: pointer.From(input.SnapshotPolicyId), }, @@ -716,7 +659,7 @@ func netappVolumeStateRefreshFunc(ctx context.Context, client *volumes.VolumesCl func netappVolumeGroupStateRefreshFunc(ctx context.Context, client *volumegroups.VolumeGroupsClient, id volumegroups.VolumeGroupId) pluginsdk.StateRefreshFunc { return func() (interface{}, string, error) { - res, err := client.VolumeGroupsGet(ctx, id) + res, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(res.HttpResponse) { return nil, "", fmt.Errorf("retrieving %s: %s", id, err) @@ -780,7 +723,7 @@ func netappVolumeReplicationStateRefreshFunc(ctx context.Context, client *volume } func translateTFSchedule(scheduleName string) string { - if strings.EqualFold(scheduleName, string(ReplicationSchedule10Minutes)) { + if strings.EqualFold(scheduleName, string(netAppModels.ReplicationSchedule10Minutes)) { return string(volumegroups.ReplicationScheduleOneZerominutely) } @@ -789,7 +732,7 @@ func translateTFSchedule(scheduleName string) string { func translateSDKSchedule(scheduleName string) string { if strings.EqualFold(scheduleName, string(volumegroups.ReplicationScheduleOneZerominutely)) { - return string(ReplicationSchedule10Minutes) + return string(netAppModels.ReplicationSchedule10Minutes) } return scheduleName diff --git a/internal/services/netapp/netapp_volume_quota_rule_data_source.go b/internal/services/netapp/netapp_volume_quota_rule_data_source.go new file mode 100644 index 0000000000000..a9f0149767a0f --- /dev/null +++ b/internal/services/netapp/netapp_volume_quota_rule_data_source.go @@ -0,0 +1,117 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package netapp + +import ( + "context" + "fmt" + "net/http" + "time" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" + "github.com/hashicorp/go-azure-helpers/resourcemanager/location" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumes" + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + netAppModels "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/models" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" +) + +type NetAppVolumeQuotaRuleDataSource struct{} + +var _ sdk.DataSource = NetAppVolumeQuotaRuleDataSource{} + +func (r NetAppVolumeQuotaRuleDataSource) ResourceType() string { + return "azurerm_netapp_volume_quota_rule" +} + +func (r NetAppVolumeQuotaRuleDataSource) ModelObject() interface{} { + return &netAppModels.NetAppVolumeQuotaRuleDataSourceModel{} +} + +func (r NetAppVolumeQuotaRuleDataSource) IDValidationFunc() pluginsdk.SchemaValidateFunc { + return volumequotarules.ValidateVolumeQuotaRuleID +} + +func (r NetAppVolumeQuotaRuleDataSource) Arguments() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + }, + + "volume_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: volumequotarules.ValidateVolumeID, + }, + } +} + +func (r NetAppVolumeQuotaRuleDataSource) Attributes() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "location": commonschema.LocationComputed(), + + "quota_target": { + Type: pluginsdk.TypeString, + Computed: true, + }, + + "quota_size_in_kib": { + Type: pluginsdk.TypeInt, + Computed: true, + }, + + "quota_type": { + Type: pluginsdk.TypeString, + Computed: true, + }, + } +} + +func (r NetAppVolumeQuotaRuleDataSource) Read() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 5 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + + client := metadata.Client.NetApp.VolumeQuotaRules + + var state netAppModels.NetAppVolumeQuotaRuleDataSourceModel + if err := metadata.Decode(&state); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + volumeID, err := volumes.ParseVolumeID(state.VolumeID) + if err != nil { + return fmt.Errorf("error parsing volume id %s: %+v", state.VolumeID, err) + } + + id := volumequotarules.NewVolumeQuotaRuleID(metadata.Client.Account.SubscriptionId, volumeID.ResourceGroupName, volumeID.NetAppAccountName, volumeID.CapacityPoolName, volumeID.VolumeName, state.Name) + + resp, err := client.Get(ctx, id) + if err != nil { + if resp.HttpResponse.StatusCode == http.StatusNotFound { + return fmt.Errorf("%s was not found", id) + } + return fmt.Errorf("retrieving %s: %v", id, err) + } + + model := resp.Model + if model == nil || model.Properties == nil { + return fmt.Errorf("retrieving %s: model was nil", id) + } + + state.Location = location.Normalize(model.Location) + state.QuotaSizeInKiB = pointer.From(model.Properties.QuotaSizeInKiBs) + state.QuotaTarget = pointer.From(model.Properties.QuotaTarget) + state.QuotaType = string(pointer.From(model.Properties.QuotaType)) + + metadata.SetID(id) + + return metadata.Encode(&state) + }, + } +} diff --git a/internal/services/netapp/netapp_volume_quota_rule_data_source_test.go b/internal/services/netapp/netapp_volume_quota_rule_data_source_test.go new file mode 100644 index 0000000000000..abbde785a5722 --- /dev/null +++ b/internal/services/netapp/netapp_volume_quota_rule_data_source_test.go @@ -0,0 +1,40 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package netapp_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" +) + +type NetAppVolumeQuotaRuleDataSource struct{} + +func TestAccNetAppVolumeQuotaRuleDataSource_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "data.azurerm_netapp_volume_quota_rule", "test") + d := NetAppVolumeQuotaRuleDataSource{} + + data.DataSourceTest(t, []acceptance.TestStep{ + { + Config: d.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).Key("name").Exists(), + check.That(data.ResourceName).Key("quota_size_in_kib").Exists(), + ), + }, + }) +} + +func (d NetAppVolumeQuotaRuleDataSource) basic(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +data "azurerm_netapp_volume_quota_rule" "test" { + name = azurerm_netapp_volume_quota_rule.test.name + volume_id = azurerm_netapp_volume_quota_rule.test.volume_id +} +`, NetAppVolumeQuotaRuleResource{}.individualUserQuotaType(data)) +} diff --git a/internal/services/netapp/netapp_volume_quota_rule_resource.go b/internal/services/netapp/netapp_volume_quota_rule_resource.go new file mode 100644 index 0000000000000..a4b5ddad1f3e4 --- /dev/null +++ b/internal/services/netapp/netapp_volume_quota_rule_resource.go @@ -0,0 +1,250 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package netapp + +import ( + "context" + "fmt" + "net/http" + "time" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" + "github.com/hashicorp/go-azure-helpers/resourcemanager/location" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumes" + "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + netAppModels "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/models" + netAppValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/validate" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +type NetAppVolumeQuotaRuleResource struct{} + +var _ sdk.Resource = NetAppVolumeQuotaRuleResource{} + +func (r NetAppVolumeQuotaRuleResource) ModelObject() interface{} { + return &netAppModels.NetAppVolumeQuotaRuleModel{} +} + +func (r NetAppVolumeQuotaRuleResource) ResourceType() string { + return "azurerm_netapp_volume_quota_rule" +} + +func (r NetAppVolumeQuotaRuleResource) IDValidationFunc() pluginsdk.SchemaValidateFunc { + return volumequotarules.ValidateVolumeQuotaRuleID +} + +func (r NetAppVolumeQuotaRuleResource) Arguments() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: netAppValidate.VolumeQuotaRuleName, + }, + + "location": commonschema.Location(), + + "volume_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: volumequotarules.ValidateVolumeID, + }, + + "quota_type": { + Type: pluginsdk.TypeString, + ForceNew: true, + Required: true, + ValidateFunc: validation.StringInSlice(volumequotarules.PossibleValuesForType(), false), + }, + + "quota_size_in_kib": { + Type: pluginsdk.TypeInt, + Required: true, + ValidateFunc: validation.IntAtLeast(4), + }, + + "quota_target": { + Type: pluginsdk.TypeString, + ForceNew: true, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + } +} + +func (r NetAppVolumeQuotaRuleResource) Attributes() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{} +} + +func (r NetAppVolumeQuotaRuleResource) Create() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 90 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.NetApp.VolumeQuotaRules + subscriptionId := metadata.Client.Account.SubscriptionId + + var model netAppModels.NetAppVolumeQuotaRuleModel + if err := metadata.Decode(&model); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + volumeID, err := volumes.ParseVolumeID(model.VolumeID) + if err != nil { + return fmt.Errorf("error parsing volume id %s: %+v", model.VolumeID, err) + } + + id := volumequotarules.NewVolumeQuotaRuleID(subscriptionId, volumeID.ResourceGroupName, volumeID.NetAppAccountName, volumeID.CapacityPoolName, volumeID.VolumeName, model.Name) + + metadata.Logger.Infof("Import check for %s", id) + existing, err := client.Get(ctx, id) + if err != nil { + if !response.WasNotFound(existing.HttpResponse) { + return fmt.Errorf("checking for presence of existing %s: %s", id, err) + } + } + + if !response.WasNotFound(existing.HttpResponse) { + return tf.ImportAsExistsError(r.ResourceType(), id.ID()) + } + + // Performing some validations that are not possible in the schema + if errorList := netAppValidate.ValidateNetAppVolumeQuotaRule(ctx, pointer.From(volumeID), metadata.Client, pointer.To(model)); len(errorList) > 0 { + return fmt.Errorf("one or more issues found while performing deeper validations for %s:\n%+v", id, errorList) + } + + parameters := volumequotarules.VolumeQuotaRule{ + Location: location.Normalize(model.Location), + Properties: &volumequotarules.VolumeQuotaRulesProperties{ + QuotaSizeInKiBs: pointer.To(model.QuotaSizeInKiB), + QuotaType: pointer.To(volumequotarules.Type(model.QuotaType)), + QuotaTarget: utils.String(model.QuotaTarget), + }, + } + + err = client.CreateThenPoll(ctx, id, parameters) + if err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } + + metadata.SetID(id) + + return nil + }, + } +} + +func (r NetAppVolumeQuotaRuleResource) Update() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 120 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.NetApp.VolumeQuotaRules + + id, err := volumequotarules.ParseVolumeQuotaRuleID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + metadata.Logger.Infof("Decoding state for %s", id) + var state netAppModels.NetAppVolumeQuotaRuleModel + if err := metadata.Decode(&state); err != nil { + return err + } + + metadata.Logger.Infof("Updating %s", id) + + update := volumequotarules.VolumeQuotaRulePatch{ + Properties: &volumequotarules.VolumeQuotaRulesProperties{}, + } + + update.Properties.QuotaSizeInKiBs = utils.Int64(state.QuotaSizeInKiB) + if err := client.UpdateThenPoll(ctx, pointer.From(id), update); err != nil { + return fmt.Errorf("updating %s: %+v", id, err) + } + + metadata.SetID(id) + + return nil + }, + } +} + +func (r NetAppVolumeQuotaRuleResource) Read() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 5 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + + client := metadata.Client.NetApp.VolumeQuotaRules + + id, err := volumequotarules.ParseVolumeQuotaRuleID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + metadata.Logger.Infof("Decoding state for %s", id) + var state netAppModels.NetAppVolumeQuotaRuleModel + if err := metadata.Decode(&state); err != nil { + return err + } + + existing, err := client.Get(ctx, pointer.From(id)) + if err != nil { + if existing.HttpResponse.StatusCode == http.StatusNotFound { + return metadata.MarkAsGone(id) + } + return fmt.Errorf("retrieving %s: %v", id, err) + } + + volumeID := volumequotarules.NewVolumeID(id.SubscriptionId, id.ResourceGroupName, id.NetAppAccountName, id.CapacityPoolName, id.VolumeName) + + model := netAppModels.NetAppVolumeQuotaRuleModel{ + Name: id.VolumeQuotaRuleName, + VolumeID: volumeID.ID(), + Location: location.NormalizeNilable(pointer.To(existing.Model.Location)), + QuotaTarget: pointer.From(existing.Model.Properties.QuotaTarget), + QuotaSizeInKiB: pointer.From(existing.Model.Properties.QuotaSizeInKiBs), + QuotaType: string(pointer.From(existing.Model.Properties.QuotaType)), + } + + metadata.SetID(id) + + return metadata.Encode(&model) + }, + } +} + +func (r NetAppVolumeQuotaRuleResource) Delete() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 120 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + + client := metadata.Client.NetApp.VolumeQuotaRules + + id, err := volumequotarules.ParseVolumeQuotaRuleID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + existing, err := client.Get(ctx, pointer.From(id)) + if err != nil { + if existing.HttpResponse.StatusCode == http.StatusNotFound { + return metadata.MarkAsGone(id) + } + return fmt.Errorf("retrieving %s: %v", id, err) + } + + if err = client.DeleteThenPoll(ctx, pointer.From(id)); err != nil { + return fmt.Errorf("deleting %s: %+v", pointer.From(id), err) + } + + return nil + }, + } +} diff --git a/internal/services/netapp/netapp_volume_quota_rule_resource_test.go b/internal/services/netapp/netapp_volume_quota_rule_resource_test.go new file mode 100644 index 0000000000000..ced81d9ff7d06 --- /dev/null +++ b/internal/services/netapp/netapp_volume_quota_rule_resource_test.go @@ -0,0 +1,271 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package netapp_test + +import ( + "context" + "fmt" + "net/http" + "testing" + + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +type NetAppVolumeQuotaRuleResource struct{} + +func TestAccNetAppVolumeQuotaRule_individualGroupQuotaType(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_netapp_volume_quota_rule", "test") + r := NetAppVolumeQuotaRuleResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.individualGroupQuotaType(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccNetAppVolumeQuotaRule_individualUserQuotaType(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_netapp_volume_quota_rule", "test") + r := NetAppVolumeQuotaRuleResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.individualUserQuotaType(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccNetAppVolumeQuotaRule_defaultGroupQuotaType(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_netapp_volume_quota_rule", "test") + r := NetAppVolumeQuotaRuleResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.defaultGroupQuotaType(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccNetAppVolumeQuotaRule_defaultUserQuotaType(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_netapp_volume_quota_rule", "test") + r := NetAppVolumeQuotaRuleResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.defaultUserQuotaType(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func (t NetAppVolumeQuotaRuleResource) Exists(ctx context.Context, clients *clients.Client, state *terraform.InstanceState) (*bool, error) { + id, err := volumequotarules.ParseVolumeQuotaRuleID(state.ID) + if err != nil { + return nil, err + } + + resp, err := clients.NetApp.VolumeQuotaRules.Get(ctx, *id) + + if err != nil { + if resp.HttpResponse.StatusCode == http.StatusNotFound { + return utils.Bool(false), nil + } + return nil, fmt.Errorf("retrieving %s: %+v", id, err) + } + + return utils.Bool(true), nil +} + +func (NetAppVolumeQuotaRuleResource) individualGroupQuotaType(data acceptance.TestData) string { + template := NetAppVolumeQuotaRuleResource{}.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_netapp_volume_quota_rule" "test" { + name = "acctest-NetAppVolumeQuotaRule-%[2]d" + location = azurerm_resource_group.test.location + volume_id = azurerm_netapp_volume.test.id + quota_target = "3001" + quota_size_in_kib = 1024 + quota_type = "IndividualGroupQuota" +} +`, template, data.RandomInteger) +} + +func (NetAppVolumeQuotaRuleResource) individualUserQuotaType(data acceptance.TestData) string { + template := NetAppVolumeQuotaRuleResource{}.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_netapp_volume_quota_rule" "test" { + name = "acctest-NetAppVolumeQuotaRule-%[2]d" + location = azurerm_resource_group.test.location + volume_id = azurerm_netapp_volume.test.id + quota_target = "3001" + quota_size_in_kib = 1024 + quota_type = "IndividualUserQuota" +} +`, template, data.RandomInteger) +} + +func (NetAppVolumeQuotaRuleResource) defaultUserQuotaType(data acceptance.TestData) string { + template := NetAppVolumeQuotaRuleResource{}.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_netapp_volume_quota_rule" "test" { + name = "acctest-NetAppVolumeQuotaRule-Default-Usr-%[2]d" + location = azurerm_resource_group.test.location + volume_id = azurerm_netapp_volume.test.id + quota_size_in_kib = 2048 + quota_type = "DefaultUserQuota" +} +`, template, data.RandomInteger) +} + +func (NetAppVolumeQuotaRuleResource) defaultGroupQuotaType(data acceptance.TestData) string { + template := NetAppVolumeQuotaRuleResource{}.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_netapp_volume_quota_rule" "test" { + name = "acctest-NetAppVolumeQuotaRule-Default-Grp-%[2]d" + location = azurerm_resource_group.test.location + volume_id = azurerm_netapp_volume.test.id + quota_size_in_kib = 2048 + quota_type = "DefaultGroupQuota" +} +`, template, data.RandomInteger) +} + +func (NetAppVolumeQuotaRuleResource) template(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-netapp-%[1]d" + location = "%[2]s" + + tags = { + "CreatedOnDate" = "2023-08-17T08:01:00Z", + "SkipASMAzSecPack" = "true", + "SkipNRMSNSG" = "true" + } +} + +resource "azurerm_network_security_group" "test" { + name = "acctest-NSG-%[1]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + + tags = { + "CreatedOnDate" = "2023-08-17T08:01:00Z", + "SkipASMAzSecPack" = "true" + } +} + +resource "azurerm_virtual_network" "test" { + name = "acctest-VirtualNetwork-%[1]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + address_space = ["10.6.0.0/16"] + + tags = { + "CreatedOnDate" = "2023-08-17T08:01:00Z", + "SkipASMAzSecPack" = "true" + } +} + +resource "azurerm_subnet" "test" { + name = "acctest-DelegatedSubnet-%[1]d" + resource_group_name = azurerm_resource_group.test.name + virtual_network_name = azurerm_virtual_network.test.name + address_prefixes = ["10.6.2.0/24"] + + delegation { + name = "testdelegation" + + service_delegation { + name = "Microsoft.Netapp/volumes" + actions = ["Microsoft.Network/networkinterfaces/*", "Microsoft.Network/virtualNetworks/subnets/join/action"] + } + } +} + +resource "azurerm_subnet_network_security_group_association" "public" { + subnet_id = azurerm_subnet.test.id + network_security_group_id = azurerm_network_security_group.test.id +} + +resource "azurerm_netapp_account" "test" { + name = "acctest-NetAppAccount-%[1]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + + tags = { + "CreatedOnDate" = "2023-08-17T08:01:00Z", + "SkipASMAzSecPack" = "true" + } +} + +resource "azurerm_netapp_pool" "test" { + name = "acctest-NetAppPool-%[1]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + account_name = azurerm_netapp_account.test.name + service_level = "Standard" + size_in_tb = 4 + qos_type = "Auto" + + tags = { + "CreatedOnDate" = "2023-08-17T08:01:00Z", + "SkipASMAzSecPack" = "true" + } +} + +resource "azurerm_netapp_volume" "test" { + name = "acctest-NetAppVolume-%[1]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + account_name = azurerm_netapp_account.test.name + pool_name = azurerm_netapp_pool.test.name + volume_path = "my-unique-file-path-%[1]d" + service_level = "Standard" + subnet_id = azurerm_subnet.test.id + storage_quota_in_gb = 100 + protocols = ["NFSv3"] + + tags = { + "CreatedOnDate" = "2022-07-08T23:50:21Z", + "SkipASMAzSecPack" = "true" + } +} +`, data.RandomInteger, data.Locations.Primary) +} diff --git a/internal/services/netapp/registration.go b/internal/services/netapp/registration.go index a6b3942c0ddd5..426a611198aa6 100644 --- a/internal/services/netapp/registration.go +++ b/internal/services/netapp/registration.go @@ -53,6 +53,7 @@ func (r Registration) SupportedResources() map[string]*pluginsdk.Resource { func (r Registration) DataSources() []sdk.DataSource { return []sdk.DataSource{ NetAppVolumeGroupSapHanaDataSource{}, + NetAppVolumeQuotaRuleDataSource{}, } } @@ -60,5 +61,6 @@ func (r Registration) DataSources() []sdk.DataSource { func (r Registration) Resources() []sdk.Resource { return []sdk.Resource{ NetAppVolumeGroupSapHanaResource{}, + NetAppVolumeQuotaRuleResource{}, } } diff --git a/internal/services/netapp/validate/volume_quota_rule_name.go b/internal/services/netapp/validate/volume_quota_rule_name.go new file mode 100644 index 0000000000000..3a2454c3a6bb7 --- /dev/null +++ b/internal/services/netapp/validate/volume_quota_rule_name.go @@ -0,0 +1,19 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package validate + +import ( + "fmt" + "regexp" +) + +func VolumeQuotaRuleName(v interface{}, k string) (warnings []string, errors []error) { + value := v.(string) + + if !regexp.MustCompile(`^[a-zA-Z][-_\da-zA-Z]{0,63}$`).MatchString(value) { + errors = append(errors, fmt.Errorf("%q must be between 1 and 64 characters in length and start with letters and contains only letters, numbers, underscore or hyphens.", k)) + } + + return warnings, errors +} diff --git a/internal/services/netapp/validate/volume_quota_rule_name_test.go b/internal/services/netapp/validate/volume_quota_rule_name_test.go new file mode 100644 index 0000000000000..6484ca4d0a0e9 --- /dev/null +++ b/internal/services/netapp/validate/volume_quota_rule_name_test.go @@ -0,0 +1,74 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package validate + +import "testing" + +func TestNetAppVolumeQuotaRuleName(t *testing.T) { + testData := []struct { + input string + expected bool + }{ + { + // empty + input: "", + expected: false, + }, + { + // basic example + input: "hello", + expected: true, + }, + { + // can't start with an underscore + input: "_hello", + expected: false, + }, + { + // can't end with a dash + input: "hello-", + expected: true, + }, + { + // can't contain an exclamation mark + input: "hello!", + expected: false, + }, + { + // dash in the middle + input: "malcolm-in-the-middle", + expected: true, + }, + { + // can't end with a period + input: "hello.", + expected: false, + }, + { + // 63 chars + input: "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk", + expected: true, + }, + { + // 64 chars + input: "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkj", + expected: true, + }, + { + // 65 chars + input: "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkja", + expected: false, + }, + } + + for _, v := range testData { + t.Logf("[DEBUG] Testing %q..", v.input) + + _, errors := VolumeQuotaRuleName(v.input, "name") + actual := len(errors) == 0 + if v.expected != actual { + t.Fatalf("Expected %t but got %t", v.expected, actual) + } + } +} diff --git a/internal/services/netapp/validate/volume_quota_rule_quota_target_id_unix_validation_test.go b/internal/services/netapp/validate/volume_quota_rule_quota_target_id_unix_validation_test.go new file mode 100644 index 0000000000000..36009ce03e3f6 --- /dev/null +++ b/internal/services/netapp/validate/volume_quota_rule_quota_target_id_unix_validation_test.go @@ -0,0 +1,65 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package validate + +import ( + "testing" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" +) + +func TestValidateNetAppVolumeQuotaRulesUnix(t *testing.T) { + cases := []struct { + Name string + VolumeQuotaRulesData volumequotarules.VolumeQuotaRulesProperties + Errors int + }{ + { + Name: "ValidateCorrectUnixUserGroupID", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("1001"), + }, + Errors: 0, + }, + { + Name: "ValidateUnixUserGroupIDWithLettersFail", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("a1001"), + }, + Errors: 1, + }, + { + Name: "ValidateUnixUserGroupIDWithMoreThanMaxCharsFail", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("4294967296"), + }, + Errors: 1, + }, + { + Name: "ValidateUnixUserGroupIDWithEmptyStringFail", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To(""), + }, + Errors: 1, + }, + { + Name: "ValidateUnixUserGroupIDWithNegativeNumberFail", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("-1"), + }, + Errors: 1, + }, + } + + for _, tc := range cases { + t.Run(tc.Name, func(t *testing.T) { + _, errors := ValidateUnixUserIDOrGroupID(*tc.VolumeQuotaRulesData.QuotaTarget, pointer.From(tc.VolumeQuotaRulesData.QuotaTarget)) + + if len(errors) != tc.Errors { + t.Fatalf("expected ValidateUnixUserIDOrGroupID to return %d error(s) not %d\nError List: \n%v", tc.Errors, len(errors), errors) + } + }) + } +} diff --git a/internal/services/netapp/validate/volume_quota_rule_quota_target_id_validations.go b/internal/services/netapp/validate/volume_quota_rule_quota_target_id_validations.go new file mode 100644 index 0000000000000..f7b61a259df68 --- /dev/null +++ b/internal/services/netapp/validate/volume_quota_rule_quota_target_id_validations.go @@ -0,0 +1,61 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package validate + +import ( + "fmt" + "regexp" + "strconv" + + "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/models" +) + +func ValidateUnixUserIDOrGroupID(v interface{}, k string) (warnings []string, errors []error) { + var value int64 + var err error + + switch v := v.(type) { + case int: + value = int64(v) + case string: + if _, err := strconv.ParseInt(v, 10, 64); err != nil { + errors = append(errors, fmt.Errorf("%q must be an integer or a string that can be converted to an integer", k)) + return warnings, errors + } + if _, err := strconv.ParseInt(v, 10, 64); err == nil && !regexp.MustCompile(`^\d+$`).MatchString(v) { + errors = append(errors, fmt.Errorf("%q must be an integer or a string that contains only digits", k)) + return warnings, errors + } + value, err = strconv.ParseInt(v, 10, 64) + if err != nil { + errors = append(errors, fmt.Errorf("%q must be an integer or a string that can be converted to an integer", k)) + return warnings, errors + } + default: + errors = append(errors, fmt.Errorf("%q must be an integer or a string that can be converted to an integer", k)) + return warnings, errors + } + + if value < 1 || value > models.MaxQuotaTargetIDSizeInKiB { + errors = append(errors, fmt.Errorf("%q must be between 1 and 4294967295", k)) + return warnings, errors + } + + return warnings, errors +} + +func ValidateWindowsSID(v interface{}, k string) (warnings []string, errors []error) { + value, ok := v.(string) + if !ok { + errors = append(errors, fmt.Errorf("%q must be a string", k)) + return warnings, errors + } + + if !regexp.MustCompile(`^S-1-5-(0|18|\d{1,9})(-\d{1,10}){0,14}$`).MatchString(value) { + errors = append(errors, fmt.Errorf("%q must be a valid Windows security identifier (SID)", k)) + return warnings, errors + } + + return warnings, errors +} diff --git a/internal/services/netapp/validate/volume_quota_rule_quota_target_id_windows_validation_test.go b/internal/services/netapp/validate/volume_quota_rule_quota_target_id_windows_validation_test.go new file mode 100644 index 0000000000000..bf7a3fbb5dff9 --- /dev/null +++ b/internal/services/netapp/validate/volume_quota_rule_quota_target_id_windows_validation_test.go @@ -0,0 +1,86 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package validate + +import ( + "testing" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" +) + +func TestValidateNetAppVolumeQuotaRules(t *testing.T) { + cases := []struct { + Name string + VolumeQuotaRulesData volumequotarules.VolumeQuotaRulesProperties + Errors int + }{ + { + Name: "ValidateCorrectWindowsUserIDLong", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("S-1-5-21-4128827716-1023963696-1645503205-500"), + }, + Errors: 0, + }, + { + Name: "ValidateCorrectWindowsGroupIDLong", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("S-1-5-21-4128827716-1023963696-1645503205-1024"), + }, + Errors: 0, + }, + { + Name: "ValidateCorrectWindowsGroupIDShort", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("S-1-5-32-583"), + }, + Errors: 0, + }, + { + Name: "ValidateCorrectWindowsGroupIDExtraShort", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("S-1-5-18"), + }, + Errors: 0, + }, + { + Name: "ValidateIncorrectWindowsUserIDLongFails", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("S-1-5-21-4128827716-1023963696-1645503205-5007777777777777777"), + }, + Errors: 1, + }, + { + Name: "ValidateIncorrectWindowsGroupIDLongFails", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("AA1-5-21-4128827716-1023963696-1645503205-1024"), + }, + Errors: 1, + }, + { + Name: "ValidateIncorrectWindowsGroupIDShortFails", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("S-B-5-32-583"), + }, + Errors: 1, + }, + { + Name: "ValidateIncorrectWindowsGroupIDExtraShortFails", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("A-1-5-18"), + }, + Errors: 1, + }, + } + + for _, tc := range cases { + t.Run(tc.Name, func(t *testing.T) { + _, errors := ValidateWindowsSID(*tc.VolumeQuotaRulesData.QuotaTarget, pointer.From(tc.VolumeQuotaRulesData.QuotaTarget)) + + if len(errors) != tc.Errors { + t.Fatalf("expected ValidateWindowsSID to return %d error(s) not %d\nError List: \n%v", tc.Errors, len(errors), errors) + } + }) + } +} diff --git a/internal/services/netapp/validate/volume_quota_rule_quota_target_validation_test.go b/internal/services/netapp/validate/volume_quota_rule_quota_target_validation_test.go new file mode 100644 index 0000000000000..5ffb51e5ea667 --- /dev/null +++ b/internal/services/netapp/validate/volume_quota_rule_quota_target_validation_test.go @@ -0,0 +1,91 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package validate + +import ( + "testing" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" +) + +func TestValidateNetAppVolumeQuotaRulesQuotaType(t *testing.T) { + cases := []struct { + Name string + VolumeQuotaRulesData volumequotarules.VolumeQuotaRulesProperties + Errors int + }{ + { + Name: "ValidateIndividualUserQuotaTargetIsDefined", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("1001"), + QuotaType: pointer.To(volumequotarules.TypeIndividualUserQuota), + }, + Errors: 0, + }, + { + Name: "ValidateIndividualGroupQuotaTargetIsDefined", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("1001"), + QuotaType: pointer.To(volumequotarules.TypeIndividualGroupQuota), + }, + Errors: 0, + }, + { + Name: "ValidateDefaultUserQuotaTargetIsNotDefined", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaType: pointer.To(volumequotarules.TypeDefaultUserQuota), + }, + Errors: 0, + }, + { + Name: "ValidateIndividualGroupQuotaTargetIsNotDefined", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaType: pointer.To(volumequotarules.TypeDefaultGroupQuota), + }, + Errors: 0, + }, + + { + Name: "ValidateIndividualUserQuotaTargetIsDefinedFailsWhenMissingTarget", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaType: pointer.To(volumequotarules.TypeIndividualUserQuota), + }, + Errors: 1, + }, + { + Name: "ValidateIndividualGroupQuotaTargetIsDefinedFailsWhenMissingTarget", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaType: pointer.To(volumequotarules.TypeIndividualGroupQuota), + }, + Errors: 1, + }, + { + Name: "ValidateDefaultUserQuotaTargetFailsWhenDefiningTarget", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("1001"), + QuotaType: pointer.To(volumequotarules.TypeDefaultUserQuota), + }, + Errors: 1, + }, + { + Name: "ValidateIndividualGroupQuotaTargetFailsWhenDefiningTarget", + VolumeQuotaRulesData: volumequotarules.VolumeQuotaRulesProperties{ + QuotaTarget: pointer.To("1001"), + QuotaType: pointer.To(volumequotarules.TypeDefaultGroupQuota), + }, + Errors: 1, + }, + } + + for _, tc := range cases { + t.Run(tc.Name, func(t *testing.T) { + errors := ValidateNetAppVolumeQuotaRuleQuotaType(tc.VolumeQuotaRulesData.QuotaType, tc.VolumeQuotaRulesData.QuotaTarget) + + if len(errors) != tc.Errors { + t.Fatalf("expected ValidateNetAppVolumeQuotaRuleQuotaType to return %d error(s) not %d\nError List: \n%v", tc.Errors, len(errors), errors) + } + }) + } +} diff --git a/internal/services/netapp/validate/volume_quota_rule_quota_validations.go b/internal/services/netapp/validate/volume_quota_rule_quota_validations.go new file mode 100644 index 0000000000000..56780866194f6 --- /dev/null +++ b/internal/services/netapp/validate/volume_quota_rule_quota_validations.go @@ -0,0 +1,102 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package validate + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" + "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumes" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + netAppModels "github.com/hashicorp/terraform-provider-azurerm/internal/services/netapp/models" +) + +func ValidateNetAppVolumeQuotaRule(ctx context.Context, volumeID volumes.VolumeId, client *clients.Client, rule *netAppModels.NetAppVolumeQuotaRuleModel) []error { + errors := make([]error, 0) + + // Validating quota type matches volume type + volumeClient := client.NetApp.VolumeClient + + volume, err := volumeClient.Get(ctx, volumeID) + if err != nil { + errors = append(errors, fmt.Errorf("retrieving %s: %v", volumeID, err)) + return errors + } + + if volume.Model == nil || volume.HttpResponse.StatusCode == http.StatusNotFound { + errors = append(errors, fmt.Errorf("volume %s not found", volumeID)) + return errors + } + + // NFS Volume must not have Windows SIDs + if len(pointer.From(volume.Model.Properties.ProtocolTypes)) == 1 && + (findStringInSlice(pointer.From(volume.Model.Properties.ProtocolTypes), "nfsv3") || findStringInSlice(pointer.From(volume.Model.Properties.ProtocolTypes), "nfsv4.1")) { + + if pointer.To(rule.QuotaTarget) != nil && rule.QuotaTarget != "" { + _, errList := ValidateWindowsSID(&rule.QuotaTarget, rule.QuotaTarget) + if len(errList) == 0 { + errors = append(errors, fmt.Errorf("'nfs volume %v cannot have windows sid as quota targets, defined quota target is %v'", volumeID.VolumeName, rule.QuotaTarget)) + } + } + } + + // CIFS Volume must not have Windows SIDs + if len(pointer.From(volume.Model.Properties.ProtocolTypes)) == 1 && findStringInSlice(pointer.From(volume.Model.Properties.ProtocolTypes), "cifs") { + + if pointer.To(rule.QuotaTarget) != nil && rule.QuotaTarget != "" { + _, errList := ValidateUnixUserIDOrGroupID(&rule.QuotaTarget, rule.QuotaTarget) + if len(errList) == 0 { + errors = append(errors, fmt.Errorf("'cifs volume %v cannot have unix id as quota target, defined quota target is %v'", volumeID.VolumeName, rule.QuotaTarget)) + } + } + } + + // Dual protocol volumes does not support group quotas + if len(pointer.From(volume.Model.Properties.ProtocolTypes)) == 2 { + if pointer.To(rule.QuotaType) != nil && (volumequotarules.Type(rule.QuotaType) == volumequotarules.TypeIndividualGroupQuota || volumequotarules.Type(rule.QuotaType) == volumequotarules.TypeDefaultGroupQuota) { + errors = append(errors, fmt.Errorf("'dual protocol volume %v cannot have group quotas'", volumeID.VolumeName)) + } + } + + // CIFS protocol volumes does not support group quotas + if findStringInSlice(pointer.From(volume.Model.Properties.ProtocolTypes), "cifs") { + if pointer.To(rule.QuotaType) != nil && (volumequotarules.Type(rule.QuotaType) == volumequotarules.TypeIndividualGroupQuota || volumequotarules.Type(rule.QuotaType) == volumequotarules.TypeDefaultGroupQuota) { + errors = append(errors, fmt.Errorf("'cifs volume %v cannot have group quotas'", volumeID.VolumeName)) + } + } + + // Quota types and targets validations + errors = append(errors, ValidateNetAppVolumeQuotaRuleQuotaType(pointer.To(volumequotarules.Type(rule.QuotaType)), pointer.To(rule.QuotaTarget))...) + + return errors +} + +func ValidateNetAppVolumeQuotaRuleQuotaType(quotaType *volumequotarules.Type, quotaTarget *string) []error { + errors := make([]error, 0) + + // Quota Target must be defined for IndividualUserQuota + if quotaType != nil && pointer.From(quotaType) == volumequotarules.TypeIndividualUserQuota && (quotaTarget == nil || pointer.From(quotaTarget) == "") { + errors = append(errors, fmt.Errorf("'individualUserQuota must have quota target defined'")) + } + + // Quota Target must be defined for IndividualGroupQuota + if quotaType != nil && pointer.From(quotaType) == volumequotarules.TypeIndividualGroupQuota && (quotaTarget == nil || pointer.From(quotaTarget) == "") { + errors = append(errors, fmt.Errorf("'individualGroupQuota must have quota target defined'")) + } + + // DefaultUserQuota quota type cannot have quota target defined + if quotaType != nil && pointer.From(quotaType) == volumequotarules.TypeDefaultUserQuota && (quotaTarget != nil && pointer.From(quotaTarget) != "") { + errors = append(errors, fmt.Errorf("'defaultUserQuota cannot have quota target defined, defined quota target is %v'", pointer.From(quotaTarget))) + } + + // DefaultGroupQuota quota type cannot have quota target defined + if quotaType != nil && pointer.From(quotaType) == volumequotarules.TypeDefaultGroupQuota && (quotaTarget != nil && pointer.From(quotaTarget) != "") { + errors = append(errors, fmt.Errorf("'defaultGroupQuota cannot have quota target defined, defined quota target is %v'", pointer.From(quotaTarget))) + } + + return errors +} diff --git a/internal/services/network/application_gateway_resource.go b/internal/services/network/application_gateway_resource.go index 97a1cdb27473b..c48ec75b65db7 100644 --- a/internal/services/network/application_gateway_resource.go +++ b/internal/services/network/application_gateway_resource.go @@ -11,6 +11,7 @@ import ( "strings" "time" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/identity" @@ -1239,12 +1240,21 @@ func resourceApplicationGateway() *pluginsdk.Resource { }, }, + // TODO: replace cert by certificate in 4.0 "verify_client_cert_issuer_dn": { Type: pluginsdk.TypeBool, Optional: true, Default: false, }, + "verify_client_certificate_revocation": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice([]string{ + string(network.ApplicationGatewayClientRevocationOptionsOCSP), + }, false), + }, + // lintignore:XS003 "ssl_policy": sslProfileSchema(false), @@ -4218,11 +4228,18 @@ func expandApplicationGatewaySslProfiles(d *pluginsdk.ResourceData, gatewayID st name := v["name"].(string) verifyClientCertIssuerDn := v["verify_client_cert_issuer_dn"].(bool) + verifyClientCertificateRevocation := network.ApplicationGatewayClientRevocationOptionsNone + if v["verify_client_certificate_revocation"].(string) != "" { + verifyClientCertificateRevocation = network.ApplicationGatewayClientRevocationOptions(v["verify_client_certificate_revocation"].(string)) + } output := network.ApplicationGatewaySslProfile{ - Name: utils.String(name), + Name: pointer.To(name), ApplicationGatewaySslProfilePropertiesFormat: &network.ApplicationGatewaySslProfilePropertiesFormat{ - ClientAuthConfiguration: &network.ApplicationGatewayClientAuthConfiguration{VerifyClientCertIssuerDN: utils.Bool(verifyClientCertIssuerDn)}, + ClientAuthConfiguration: &network.ApplicationGatewayClientAuthConfiguration{ + VerifyClientCertIssuerDN: pointer.To(verifyClientCertIssuerDn), + VerifyClientRevocation: verifyClientCertificateRevocation, + }, }, } @@ -4272,7 +4289,17 @@ func flattenApplicationGatewaySslProfiles(input *[]network.ApplicationGatewaySsl } output["name"] = name - output["verify_client_cert_issuer_dn"] = *v.ClientAuthConfiguration.VerifyClientCertIssuerDN + + verifyClientCertIssuerDn := false + verifyClientCertificateRevocation := "" + if v.ClientAuthConfiguration != nil { + verifyClientCertIssuerDn = pointer.From(v.ClientAuthConfiguration.VerifyClientCertIssuerDN) + if v.ClientAuthConfiguration.VerifyClientRevocation != network.ApplicationGatewayClientRevocationOptionsNone { + verifyClientCertificateRevocation = string(v.ClientAuthConfiguration.VerifyClientRevocation) + } + } + output["verify_client_cert_issuer_dn"] = verifyClientCertIssuerDn + output["verify_client_certificate_revocation"] = verifyClientCertificateRevocation output["ssl_policy"] = flattenApplicationGatewaySslPolicy(v.SslPolicy) diff --git a/internal/services/network/application_gateway_resource_test.go b/internal/services/network/application_gateway_resource_test.go index 99adad3454d1e..b609df2ab02d3 100644 --- a/internal/services/network/application_gateway_resource_test.go +++ b/internal/services/network/application_gateway_resource_test.go @@ -7257,8 +7257,9 @@ resource "azurerm_application_gateway" "test" { } ssl_profile { - name = local.ssl_profile_name - verify_client_cert_issuer_dn = true + name = local.ssl_profile_name + verify_client_cert_issuer_dn = true + verify_client_certificate_revocation = "OCSP" ssl_policy { policy_type = "Predefined" policy_name = "AppGwSslPolicy20170401" diff --git a/internal/services/network/client/client.go b/internal/services/network/client/client.go index f9f6c300ef44c..16cc3141cdeb8 100644 --- a/internal/services/network/client/client.go +++ b/internal/services/network/client/client.go @@ -55,7 +55,6 @@ type Client struct { VnetPeeringsClient *network.VirtualNetworkPeeringsClient VirtualWanClient *network.VirtualWansClient VirtualHubClient *network.VirtualHubsClient - VpnGatewaysClient *network.VpnGatewaysClient } func NewClient(o *common.ClientOptions) (*Client, error) { @@ -173,9 +172,6 @@ func NewClient(o *common.ClientOptions) (*Client, error) { VirtualHubClient := network.NewVirtualHubsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) o.ConfigureClient(&VirtualHubClient.Client, o.ResourceManagerAuthorizer) - vpnGatewaysClient := network.NewVpnGatewaysClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) - o.ConfigureClient(&vpnGatewaysClient.Client, o.ResourceManagerAuthorizer) - ServiceAssociationLinkClient := network.NewServiceAssociationLinksClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) o.ConfigureClient(&ServiceAssociationLinkClient.Client, o.ResourceManagerAuthorizer) @@ -228,7 +224,6 @@ func NewClient(o *common.ClientOptions) (*Client, error) { VnetPeeringsClient: &VnetPeeringsClient, VirtualWanClient: &VirtualWanClient, VirtualHubClient: &VirtualHubClient, - VpnGatewaysClient: &vpnGatewaysClient, PrivateDnsZoneGroupClient: &PrivateDnsZoneGroupClient, PrivateLinkServiceClient: &PrivateLinkServiceClient, ServiceAssociationLinkClient: &ServiceAssociationLinkClient, diff --git a/internal/services/network/network_connection_monitor_resource.go b/internal/services/network/network_connection_monitor_resource.go index be5e7984b0898..f486d0afccf35 100644 --- a/internal/services/network/network_connection_monitor_resource.go +++ b/internal/services/network/network_connection_monitor_resource.go @@ -19,7 +19,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" networkValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -172,7 +171,7 @@ func resourceNetworkConnectionMonitorSchema() map[string]*pluginsdk.Schema { Optional: true, Computed: true, ValidateFunc: validation.Any( - computeValidate.VirtualMachineID, + commonids.ValidateVirtualMachineID, workspaces.ValidateWorkspaceID, commonids.ValidateSubnetID, commonids.ValidateVirtualNetworkID, diff --git a/internal/services/network/network_interface_resource.go b/internal/services/network/network_interface_resource.go index 51ee2b8925d26..4e1d0d22db4e2 100644 --- a/internal/services/network/network_interface_resource.go +++ b/internal/services/network/network_interface_resource.go @@ -126,6 +126,20 @@ func resourceNetworkInterface() *pluginsdk.Resource { }, // Optional + "auxiliary_mode": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice(networkinterfaces.PossibleValuesForNetworkInterfaceAuxiliaryMode(), false), + RequiredWith: []string{"auxiliary_sku"}, + }, + + "auxiliary_sku": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice(networkinterfaces.PossibleValuesForNetworkInterfaceAuxiliarySku(), false), + RequiredWith: []string{"auxiliary_mode"}, + }, + "dns_servers": { Type: pluginsdk.TypeList, Optional: true, @@ -232,6 +246,14 @@ func resourceNetworkInterfaceCreate(d *pluginsdk.ResourceData, meta interface{}) locks.ByName(id.NetworkInterfaceName, networkInterfaceResourceName) defer locks.UnlockByName(id.NetworkInterfaceName, networkInterfaceResourceName) + if auxiliaryMode, hasAuxiliaryMode := d.GetOk("auxiliary_mode"); hasAuxiliaryMode { + properties.AuxiliaryMode = pointer.To(networkinterfaces.NetworkInterfaceAuxiliaryMode(auxiliaryMode.(string))) + } + + if auxiliarySku, hasAuxiliarySku := d.GetOk("auxiliary_sku"); hasAuxiliarySku { + properties.AuxiliarySku = pointer.To(networkinterfaces.NetworkInterfaceAuxiliarySku(auxiliarySku.(string))) + } + dns, hasDns := d.GetOk("dns_servers") nameLabel, hasNameLabel := d.GetOk("internal_dns_name_label") if hasDns || hasNameLabel { @@ -325,6 +347,22 @@ func resourceNetworkInterfaceUpdate(d *pluginsdk.ResourceData, meta interface{}) }, } + if d.HasChange("auxiliary_mode") { + if auxiliaryMode, hasAuxiliaryMode := d.GetOk("auxiliary_mode"); hasAuxiliaryMode { + update.Properties.AuxiliaryMode = pointer.To(networkinterfaces.NetworkInterfaceAuxiliaryMode(auxiliaryMode.(string))) + } + } else { + update.Properties.AuxiliaryMode = existing.Model.Properties.AuxiliaryMode + } + + if d.HasChange("auxiliary_sku") { + if auxiliarySku, hasAuxiliarySku := d.GetOk("auxiliary_sku"); hasAuxiliarySku { + update.Properties.AuxiliarySku = pointer.To(networkinterfaces.NetworkInterfaceAuxiliarySku(auxiliarySku.(string))) + } + } else { + update.Properties.AuxiliarySku = existing.Model.Properties.AuxiliarySku + } + if d.HasChange("dns_servers") { dnsServersRaw := d.Get("dns_servers").([]interface{}) dnsServers := expandNetworkInterfaceDnsServers(dnsServersRaw) @@ -462,6 +500,19 @@ func resourceNetworkInterfaceRead(d *pluginsdk.ResourceData, meta interface{}) e return fmt.Errorf("setting `applied_dns_servers`: %+v", err) } + auxiliaryMode := "" + if props.AuxiliaryMode != nil && *props.AuxiliaryMode != networkinterfaces.NetworkInterfaceAuxiliaryModeNone { + auxiliaryMode = string(*props.AuxiliaryMode) + } + + d.Set("auxiliary_mode", auxiliaryMode) + + auxiliarySku := "" + if props.AuxiliarySku != nil && *props.AuxiliarySku != networkinterfaces.NetworkInterfaceAuxiliarySkuNone { + auxiliarySku = string(*props.AuxiliarySku) + } + + d.Set("auxiliary_sku", auxiliarySku) d.Set("enable_ip_forwarding", props.EnableIPForwarding) d.Set("enable_accelerated_networking", props.EnableAcceleratedNetworking) d.Set("internal_dns_name_label", internalDnsNameLabel) diff --git a/internal/services/network/network_interface_resource_test.go b/internal/services/network/network_interface_resource_test.go index d4b9b3dc1ba5c..510abc6e25e38 100644 --- a/internal/services/network/network_interface_resource_test.go +++ b/internal/services/network/network_interface_resource_test.go @@ -44,6 +44,34 @@ func TestAccNetworkInterface_disappears(t *testing.T) { }) } +func TestAccNetworkInterface_auxiliary(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_network_interface", "test") + r := NetworkInterfaceResource{} + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.auxiliaryNone(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.auxiliaryAcceleratedConnections(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.auxiliaryNone(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccNetworkInterface_dnsServers(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_network_interface", "test") r := NetworkInterfaceResource{} @@ -388,6 +416,62 @@ resource "azurerm_network_interface" "test" { `, r.template(data), data.RandomInteger) } +func (r NetworkInterfaceResource) auxiliaryNone(data acceptance.TestData) string { + // Auxiliary Mode Nic is enabled in specific regions (https://learn.microsoft.com/en-us/azure/networking/nva-accelerated-connections#supported-regions) for now + // To not affect other testcases of `Network`, hard-code to that for now + data.Locations.Primary = "westus" + + return fmt.Sprintf(` +%s + +resource "azurerm_network_interface" "test" { + name = "acctestni-%d" + location = "%s" + resource_group_name = azurerm_resource_group.test.name + enable_accelerated_networking = true + + ip_configuration { + name = "primary" + subnet_id = azurerm_subnet.test.id + private_ip_address_allocation = "Dynamic" + } + + tags = { + fastpathenabled = "true" + } +} +`, r.template(data), data.RandomInteger, data.Locations.Primary) +} + +func (r NetworkInterfaceResource) auxiliaryAcceleratedConnections(data acceptance.TestData) string { + // Auxiliary Mode Nic is enabled in specific regions (https://learn.microsoft.com/en-us/azure/networking/nva-accelerated-connections#supported-regions) for now + // To not affect other testcases of `Network`, hard-code to that for now + data.Locations.Primary = "westus" + + return fmt.Sprintf(` +%s + +resource "azurerm_network_interface" "test" { + name = "acctestni-%d" + location = "%s" + resource_group_name = azurerm_resource_group.test.name + auxiliary_mode = "AcceleratedConnections" + auxiliary_sku = "A2" + enable_accelerated_networking = true + + ip_configuration { + name = "primary" + subnet_id = azurerm_subnet.test.id + private_ip_address_allocation = "Dynamic" + } + + tags = { + fastpathenabled = "true" + } +} +`, r.template(data), data.RandomInteger, data.Locations.Primary) +} + func (r NetworkInterfaceResource) withMultipleParameters(data acceptance.TestData) string { return fmt.Sprintf(` %s diff --git a/internal/services/network/parse/vpn_gateway.go b/internal/services/network/parse/vpn_gateway.go deleted file mode 100644 index 612ef45675e7f..0000000000000 --- a/internal/services/network/parse/vpn_gateway.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - "strings" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -type VpnGatewayId struct { - SubscriptionId string - ResourceGroup string - Name string -} - -func NewVpnGatewayID(subscriptionId, resourceGroup, name string) VpnGatewayId { - return VpnGatewayId{ - SubscriptionId: subscriptionId, - ResourceGroup: resourceGroup, - Name: name, - } -} - -func (id VpnGatewayId) String() string { - segments := []string{ - fmt.Sprintf("Name %q", id.Name), - fmt.Sprintf("Resource Group %q", id.ResourceGroup), - } - segmentsStr := strings.Join(segments, " / ") - return fmt.Sprintf("%s: (%s)", "Vpn Gateway", segmentsStr) -} - -func (id VpnGatewayId) ID() string { - fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/vpnGateways/%s" - return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.Name) -} - -// VpnGatewayID parses a VpnGateway ID into an VpnGatewayId struct -func VpnGatewayID(input string) (*VpnGatewayId, error) { - id, err := resourceids.ParseAzureResourceID(input) - if err != nil { - return nil, fmt.Errorf("parsing %q as an VpnGateway ID: %+v", input, err) - } - - resourceId := VpnGatewayId{ - SubscriptionId: id.SubscriptionID, - ResourceGroup: id.ResourceGroup, - } - - if resourceId.SubscriptionId == "" { - return nil, fmt.Errorf("ID was missing the 'subscriptions' element") - } - - if resourceId.ResourceGroup == "" { - return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") - } - - if resourceId.Name, err = id.PopSegment("vpnGateways"); err != nil { - return nil, err - } - - if err := id.ValidateNoEmptySegments(input); err != nil { - return nil, err - } - - return &resourceId, nil -} diff --git a/internal/services/network/parse/vpn_gateway_test.go b/internal/services/network/parse/vpn_gateway_test.go deleted file mode 100644 index 11c088b979d6b..0000000000000 --- a/internal/services/network/parse/vpn_gateway_test.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package parse - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "testing" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" -) - -var _ resourceids.Id = VpnGatewayId{} - -func TestVpnGatewayIDFormatter(t *testing.T) { - actual := NewVpnGatewayID("12345678-1234-9876-4563-123456789012", "resGroup1", "vpnGateway1").ID() - expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/vpnGateways/vpnGateway1" - if actual != expected { - t.Fatalf("Expected %q but got %q", expected, actual) - } -} - -func TestVpnGatewayID(t *testing.T) { - testData := []struct { - Input string - Error bool - Expected *VpnGatewayId - }{ - - { - // empty - Input: "", - Error: true, - }, - - { - // missing SubscriptionId - Input: "/", - Error: true, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Error: true, - }, - - { - // missing ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", - Error: true, - }, - - { - // missing value for ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", - Error: true, - }, - - { - // missing Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/", - Error: true, - }, - - { - // missing value for Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/vpnGateways/", - Error: true, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/vpnGateways/vpnGateway1", - Expected: &VpnGatewayId{ - SubscriptionId: "12345678-1234-9876-4563-123456789012", - ResourceGroup: "resGroup1", - Name: "vpnGateway1", - }, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.NETWORK/VPNGATEWAYS/VPNGATEWAY1", - Error: true, - }, - } - - for _, v := range testData { - t.Logf("[DEBUG] Testing %q", v.Input) - - actual, err := VpnGatewayID(v.Input) - if err != nil { - if v.Error { - continue - } - - t.Fatalf("Expect a value but got an error: %s", err) - } - if v.Error { - t.Fatal("Expect an error but didn't get one") - } - - if actual.SubscriptionId != v.Expected.SubscriptionId { - t.Fatalf("Expected %q but got %q for SubscriptionId", v.Expected.SubscriptionId, actual.SubscriptionId) - } - if actual.ResourceGroup != v.Expected.ResourceGroup { - t.Fatalf("Expected %q but got %q for ResourceGroup", v.Expected.ResourceGroup, actual.ResourceGroup) - } - if actual.Name != v.Expected.Name { - t.Fatalf("Expected %q but got %q for Name", v.Expected.Name, actual.Name) - } - } -} diff --git a/internal/services/network/registration.go b/internal/services/network/registration.go index 5fba29983b944..003124143df0c 100644 --- a/internal/services/network/registration.go +++ b/internal/services/network/registration.go @@ -53,6 +53,7 @@ func (r Registration) Resources() []sdk.Resource { ManagerSubscriptionConnectionResource{}, PrivateEndpointApplicationSecurityGroupAssociationResource{}, RouteMapResource{}, + VirtualHubRoutingIntentResource{}, } } diff --git a/internal/services/network/resourceids.go b/internal/services/network/resourceids.go index 655ca5b838c2d..fb3b510e88879 100644 --- a/internal/services/network/resourceids.go +++ b/internal/services/network/resourceids.go @@ -54,7 +54,6 @@ package network //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VirtualHub -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VirtualHubIpConfiguration -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/ipConfigurations/ipConfiguration1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VirtualWan -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/virtualWans/virtualWan1 -//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VpnGateway -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/vpnGateways/vpnGateway1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=PointToSiteVpnGateway -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/p2sVpnGateways/pointToSite1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VpnConnection -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/vpnGateways/vpnGateway1/vpnConnections/vpnConnection1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=VpnGatewayNatRule -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/vpnGateways/vpnGateway1/natRules/natRule1 diff --git a/internal/services/network/validate/vpn_gateway_id.go b/internal/services/network/validate/vpn_gateway_id.go deleted file mode 100644 index 1f61200e9cb7e..0000000000000 --- a/internal/services/network/validate/vpn_gateway_id.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import ( - "fmt" - - "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse" -) - -func VpnGatewayID(input interface{}, key string) (warnings []string, errors []error) { - v, ok := input.(string) - if !ok { - errors = append(errors, fmt.Errorf("expected %q to be a string", key)) - return - } - - if _, err := parse.VpnGatewayID(v); err != nil { - errors = append(errors, err) - } - - return -} diff --git a/internal/services/network/validate/vpn_gateway_id_test.go b/internal/services/network/validate/vpn_gateway_id_test.go deleted file mode 100644 index 1aad6a16af13c..0000000000000 --- a/internal/services/network/validate/vpn_gateway_id_test.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package validate - -// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten - -import "testing" - -func TestVpnGatewayID(t *testing.T) { - cases := []struct { - Input string - Valid bool - }{ - - { - // empty - Input: "", - Valid: false, - }, - - { - // missing SubscriptionId - Input: "/", - Valid: false, - }, - - { - // missing value for SubscriptionId - Input: "/subscriptions/", - Valid: false, - }, - - { - // missing ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", - Valid: false, - }, - - { - // missing value for ResourceGroup - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", - Valid: false, - }, - - { - // missing Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/", - Valid: false, - }, - - { - // missing value for Name - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/vpnGateways/", - Valid: false, - }, - - { - // valid - Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Network/vpnGateways/vpnGateway1", - Valid: true, - }, - - { - // upper-cased - Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.NETWORK/VPNGATEWAYS/VPNGATEWAY1", - Valid: false, - }, - } - for _, tc := range cases { - t.Logf("[DEBUG] Testing Value %s", tc.Input) - _, errors := VpnGatewayID(tc.Input, "test") - valid := len(errors) == 0 - - if tc.Valid != valid { - t.Fatalf("Expected %t but got %t", tc.Valid, valid) - } - } -} diff --git a/internal/services/network/virtual_hub_routing_intent_resource.go b/internal/services/network/virtual_hub_routing_intent_resource.go new file mode 100644 index 0000000000000..169a00c40062d --- /dev/null +++ b/internal/services/network/virtual_hub_routing_intent_resource.go @@ -0,0 +1,270 @@ +package network + +import ( + "context" + "fmt" + "time" + + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/virtualwans" + "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" +) + +type VirtualHubRoutingIntentModel struct { + Name string `tfschema:"name"` + VirtualHubId string `tfschema:"virtual_hub_id"` + RoutingPolicies []RoutingPolicy `tfschema:"routing_policy"` +} + +type RoutingPolicy struct { + Destinations []string `tfschema:"destinations"` + Name string `tfschema:"name"` + NextHop string `tfschema:"next_hop"` +} + +type VirtualHubRoutingIntentResource struct{} + +var _ sdk.ResourceWithUpdate = VirtualHubRoutingIntentResource{} + +func (r VirtualHubRoutingIntentResource) ResourceType() string { + return "azurerm_virtual_hub_routing_intent" +} + +func (r VirtualHubRoutingIntentResource) ModelObject() interface{} { + return &VirtualHubRoutingIntentModel{} +} + +func (r VirtualHubRoutingIntentResource) IDValidationFunc() pluginsdk.SchemaValidateFunc { + return virtualwans.ValidateRoutingIntentID +} + +func (r VirtualHubRoutingIntentResource) Arguments() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "virtual_hub_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: virtualwans.ValidateVirtualHubID, + }, + + "routing_policy": { + Type: pluginsdk.TypeList, + Required: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "destinations": { + Type: pluginsdk.TypeList, + Required: true, + Elem: &pluginsdk.Schema{ + Type: pluginsdk.TypeString, + ValidateFunc: validation.StringInSlice([]string{ + "Internet", + "PrivateTraffic", + }, false), + }, + }, + + "next_hop": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: azure.ValidateResourceID, + }, + }, + }, + }, + } +} + +func (r VirtualHubRoutingIntentResource) Attributes() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{} +} + +func (r VirtualHubRoutingIntentResource) Create() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + var model VirtualHubRoutingIntentModel + if err := metadata.Decode(&model); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + client := metadata.Client.Network.VirtualWANs + virtualHubId, err := virtualwans.ParseVirtualHubID(model.VirtualHubId) + if err != nil { + return err + } + + id := virtualwans.NewRoutingIntentID(virtualHubId.SubscriptionId, virtualHubId.ResourceGroupName, virtualHubId.VirtualHubName, model.Name) + existing, err := client.RoutingIntentGet(ctx, id) + if err != nil && !response.WasNotFound(existing.HttpResponse) { + return fmt.Errorf("checking for existing %s: %+v", id, err) + } + + if !response.WasNotFound(existing.HttpResponse) { + return metadata.ResourceRequiresImport(r.ResourceType(), id) + } + + properties := &virtualwans.RoutingIntent{ + Properties: &virtualwans.RoutingIntentProperties{ + RoutingPolicies: expandRoutingPolicy(model.RoutingPolicies), + }, + } + + if err := client.RoutingIntentCreateOrUpdateThenPoll(ctx, id, *properties); err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } + + metadata.SetID(id) + return nil + }, + } +} + +func (r VirtualHubRoutingIntentResource) Update() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.Network.VirtualWANs + + id, err := virtualwans.ParseRoutingIntentID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + var model VirtualHubRoutingIntentModel + if err := metadata.Decode(&model); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + resp, err := client.RoutingIntentGet(ctx, *id) + if err != nil { + return fmt.Errorf("retrieving %s: %+v", *id, err) + } + + properties := resp.Model + if properties == nil { + return fmt.Errorf("retrieving %s: properties was nil", id) + } + + if metadata.ResourceData.HasChange("routing_policy") { + properties.Properties.RoutingPolicies = expandRoutingPolicy(model.RoutingPolicies) + } + + if err := client.RoutingIntentCreateOrUpdateThenPoll(ctx, *id, *properties); err != nil { + return fmt.Errorf("updating %s: %+v", *id, err) + } + + return nil + }, + } +} + +func (r VirtualHubRoutingIntentResource) Read() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 5 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.Network.VirtualWANs + + id, err := virtualwans.ParseRoutingIntentID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + resp, err := client.RoutingIntentGet(ctx, *id) + if err != nil { + if response.WasNotFound(resp.HttpResponse) { + return metadata.MarkAsGone(id) + } + + return fmt.Errorf("retrieving %s: %+v", *id, err) + } + + state := VirtualHubRoutingIntentModel{ + Name: id.RoutingIntentName, + VirtualHubId: virtualwans.NewVirtualHubID(id.SubscriptionId, id.ResourceGroupName, id.VirtualHubName).ID(), + } + + if model := resp.Model; model != nil { + if props := model.Properties; props != nil { + state.RoutingPolicies = flattenRoutingPolicy(props.RoutingPolicies) + } + } + + return metadata.Encode(&state) + }, + } +} + +func (r VirtualHubRoutingIntentResource) Delete() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.Network.VirtualWANs + + id, err := virtualwans.ParseRoutingIntentID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + if err := client.RoutingIntentDeleteThenPoll(ctx, *id); err != nil { + return fmt.Errorf("deleting %s: %+v", id, err) + } + + return nil + }, + } +} + +func expandRoutingPolicy(input []RoutingPolicy) *[]virtualwans.RoutingPolicy { + result := make([]virtualwans.RoutingPolicy, 0) + if len(input) == 0 { + return &result + } + + for _, v := range input { + routingPolicy := virtualwans.RoutingPolicy{ + Destinations: v.Destinations, + Name: v.Name, + NextHop: v.NextHop, + } + + result = append(result, routingPolicy) + } + + return &result +} + +func flattenRoutingPolicy(input *[]virtualwans.RoutingPolicy) []RoutingPolicy { + var result []RoutingPolicy + if input == nil { + return result + } + + for _, v := range *input { + routingPolicy := RoutingPolicy{ + Destinations: v.Destinations, + Name: v.Name, + NextHop: v.NextHop, + } + + result = append(result, routingPolicy) + } + + return result +} diff --git a/internal/services/network/virtual_hub_routing_intent_resource_test.go b/internal/services/network/virtual_hub_routing_intent_resource_test.go new file mode 100644 index 0000000000000..3c3e363df1be7 --- /dev/null +++ b/internal/services/network/virtual_hub_routing_intent_resource_test.go @@ -0,0 +1,207 @@ +package network_test + +import ( + "context" + "fmt" + "testing" + + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/virtualwans" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +type VirtualHubRoutingIntentResource struct{} + +func TestAccVirtualHubRoutingIntent_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_virtual_hub_routing_intent", "test") + r := VirtualHubRoutingIntentResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccVirtualHubRoutingIntent_requiresImport(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_virtual_hub_routing_intent", "test") + r := VirtualHubRoutingIntentResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.RequiresImportErrorStep(r.requiresImport), + }) +} + +func TestAccVirtualHubRoutingIntent_update(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_virtual_hub_routing_intent", "test") + r := VirtualHubRoutingIntentResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.updateRoutingPolicy(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.multipleRoutingPolicies(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func (r VirtualHubRoutingIntentResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { + id, err := virtualwans.ParseRoutingIntentID(state.ID) + if err != nil { + return nil, err + } + + client := clients.Network.VirtualWANs + resp, err := client.RoutingIntentGet(ctx, *id) + if err != nil { + if response.WasNotFound(resp.HttpResponse) { + return utils.Bool(false), nil + } + return nil, fmt.Errorf("retrieving %s: %+v", id, err) + } + return utils.Bool(resp.Model != nil), nil +} + +func (r VirtualHubRoutingIntentResource) template(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-routingintent-%d" + location = "%s" +} + +resource "azurerm_virtual_wan" "test" { + name = "acctestVWAN-%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location +} + +resource "azurerm_virtual_hub" "test" { + name = "acctestVHUB-%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + virtual_wan_id = azurerm_virtual_wan.test.id + address_prefix = "10.0.1.0/24" +} + +resource "azurerm_firewall" "test" { + name = "acctestFW-%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + sku_name = "AZFW_Hub" + sku_tier = "Standard" + + virtual_hub { + virtual_hub_id = azurerm_virtual_hub.test.id + public_ip_count = 1 + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger) +} + +func (r VirtualHubRoutingIntentResource) basic(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_virtual_hub_routing_intent" "test" { + name = "acctest-routingintent-%d" + virtual_hub_id = azurerm_virtual_hub.test.id + + routing_policy { + name = "InternetTrafficPolicy" + destinations = ["Internet"] + next_hop = azurerm_firewall.test.id + } +} +`, r.template(data), data.RandomInteger) +} + +func (r VirtualHubRoutingIntentResource) requiresImport(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_virtual_hub_routing_intent" "import" { + name = azurerm_virtual_hub_routing_intent.test.name + virtual_hub_id = azurerm_virtual_hub_routing_intent.test.virtual_hub_id + + routing_policy { + name = "InternetTrafficPolicy" + destinations = ["Internet"] + next_hop = azurerm_firewall.test.id + } +} +`, r.basic(data)) +} + +func (r VirtualHubRoutingIntentResource) updateRoutingPolicy(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_virtual_hub_routing_intent" "test" { + name = "acctest-routingintent-%d" + virtual_hub_id = azurerm_virtual_hub.test.id + + routing_policy { + name = "PrivateTrafficPolicy" + destinations = ["PrivateTraffic"] + next_hop = azurerm_firewall.test.id + } +} +`, r.template(data), data.RandomInteger) +} + +func (r VirtualHubRoutingIntentResource) multipleRoutingPolicies(data acceptance.TestData) string { + return fmt.Sprintf(` +%s + +resource "azurerm_virtual_hub_routing_intent" "test" { + name = "acctest-routingintent-%d" + virtual_hub_id = azurerm_virtual_hub.test.id + + routing_policy { + name = "InternetTrafficPolicy" + destinations = ["Internet"] + next_hop = azurerm_firewall.test.id + } + + routing_policy { + name = "PrivateTrafficPolicy" + destinations = ["PrivateTraffic"] + next_hop = azurerm_firewall.test.id + } +} +`, r.template(data), data.RandomInteger) +} diff --git a/internal/services/network/virtual_machine_packet_capture_resource.go b/internal/services/network/virtual_machine_packet_capture_resource.go index e036f131fe538..36f262b6930d4 100644 --- a/internal/services/network/virtual_machine_packet_capture_resource.go +++ b/internal/services/network/virtual_machine_packet_capture_resource.go @@ -15,7 +15,6 @@ import ( "github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/packetcaptures" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" networkValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -60,7 +59,7 @@ func resourceVirtualMachinePacketCapture() *pluginsdk.Resource { Required: true, ForceNew: true, ValidateFunc: validation.Any( - computeValidate.VirtualMachineID, + commonids.ValidateVirtualMachineID, ), }, diff --git a/internal/services/network/virtual_machine_scale_set_packet_capture_resource.go b/internal/services/network/virtual_machine_scale_set_packet_capture_resource.go index 57fefe207c899..f33ac7a58414b 100644 --- a/internal/services/network/virtual_machine_scale_set_packet_capture_resource.go +++ b/internal/services/network/virtual_machine_scale_set_packet_capture_resource.go @@ -16,7 +16,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" computeParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" networkValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -61,7 +60,7 @@ func resourceVirtualMachineScaleSetPacketCapture() *pluginsdk.Resource { Required: true, ForceNew: true, ValidateFunc: validation.Any( - computeValidate.VirtualMachineScaleSetID, + commonids.ValidateVirtualMachineScaleSetID, ), }, diff --git a/internal/services/network/vpn_gateway_connection_resource.go b/internal/services/network/vpn_gateway_connection_resource.go index 413c44a9386e1..d107375b097da 100644 --- a/internal/services/network/vpn_gateway_connection_resource.go +++ b/internal/services/network/vpn_gateway_connection_resource.go @@ -15,7 +15,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/locks" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" @@ -54,7 +53,7 @@ func resourceVPNGatewayConnection() *pluginsdk.Resource { Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: validate.VpnGatewayID, + ValidateFunc: virtualwans.ValidateVpnGatewayID, }, "remote_vpn_site_id": { @@ -336,12 +335,12 @@ func resourceVpnGatewayConnectionResourceCreateUpdate(d *pluginsdk.ResourceData, defer cancel() name := d.Get("name").(string) - gatewayId, err := parse.VpnGatewayID(d.Get("vpn_gateway_id").(string)) + gatewayId, err := virtualwans.ParseVpnGatewayID(d.Get("vpn_gateway_id").(string)) if err != nil { return err } - id := commonids.NewVPNConnectionID(gatewayId.SubscriptionId, gatewayId.ResourceGroup, gatewayId.Name, name) + id := commonids.NewVPNConnectionID(gatewayId.SubscriptionId, gatewayId.ResourceGroupName, gatewayId.VpnGatewayName, name) if d.IsNewResource() { resp, err := client.VpnConnectionsGet(ctx, id) if err != nil { @@ -355,8 +354,8 @@ func resourceVpnGatewayConnectionResourceCreateUpdate(d *pluginsdk.ResourceData, } } - locks.ByName(gatewayId.Name, VPNGatewayResourceName) - defer locks.UnlockByName(gatewayId.Name, VPNGatewayResourceName) + locks.ByName(gatewayId.VpnGatewayName, VPNGatewayResourceName) + defer locks.UnlockByName(gatewayId.VpnGatewayName, VPNGatewayResourceName) payload := virtualwans.VpnConnection{ Properties: &virtualwans.VpnConnectionProperties{ @@ -403,7 +402,7 @@ func resourceVpnGatewayConnectionResourceRead(d *pluginsdk.ResourceData, meta in } d.Set("name", id.ConnectionName) - d.Set("vpn_gateway_id", parse.NewVpnGatewayID(id.SubscriptionId, id.ResourceGroupName, id.GatewayName).ID()) + d.Set("vpn_gateway_id", virtualwans.NewVpnGatewayID(id.SubscriptionId, id.ResourceGroupName, id.GatewayName).ID()) if model := resp.Model; model != nil { if props := model.Properties; props != nil { diff --git a/internal/services/network/vpn_gateway_data_source.go b/internal/services/network/vpn_gateway_data_source.go index 67846b048b8f9..a68e684e5f383 100644 --- a/internal/services/network/vpn_gateway_data_source.go +++ b/internal/services/network/vpn_gateway_data_source.go @@ -7,15 +7,15 @@ import ( "fmt" "time" + "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" - "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" + "github.com/hashicorp/go-azure-helpers/resourcemanager/location" + "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" + "github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/virtualwans" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse" - "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" "github.com/hashicorp/terraform-provider-azurerm/utils" - "github.com/tombuildsstuff/kermit/sdk/network/2022-07-01/network" ) func dataSourceVPNGateway() *pluginsdk.Resource { @@ -143,58 +143,62 @@ func dataSourceVPNGateway() *pluginsdk.Resource { Computed: true, }, - "tags": tags.SchemaDataSource(), + "tags": commonschema.TagsDataSource(), }, } } func dataSourceVPNGatewayRead(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Network.VpnGatewaysClient + client := meta.(*clients.Client).Network.VirtualWANs ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() - name := d.Get("name").(string) - resourceGroup := d.Get("resource_group_name").(string) - id := parse.NewVpnGatewayID(subscriptionId, resourceGroup, name) - resp, err := client.Get(ctx, id.ResourceGroup, id.Name) + id := virtualwans.NewVpnGatewayID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + resp, err := client.VpnGatewaysGet(ctx, id) if err != nil { - if utils.ResponseWasNotFound(resp.Response) { + if response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("%s was not found", id) } - return fmt.Errorf("Error retrieving VPN Gateway %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err) + return fmt.Errorf("retrieving %s: %+v", id, err) } d.SetId(id.ID()) - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) - if location := resp.Location; location != nil { - d.Set("location", azure.NormalizeLocation(*location)) - } - if props := resp.VpnGatewayProperties; props != nil { - if err := d.Set("bgp_settings", dataSourceFlattenVPNGatewayBGPSettings(props.BgpSettings)); err != nil { - return fmt.Errorf("Error setting `bgp_settings`: %+v", err) - } + d.Set("name", id.VpnGatewayName) + d.Set("resource_group_name", id.ResourceGroupName) - scaleUnit := 0 - if props.VpnGatewayScaleUnit != nil { - scaleUnit = int(*props.VpnGatewayScaleUnit) - } - d.Set("scale_unit", scaleUnit) + if model := resp.Model; model != nil { + d.Set("location", location.Normalize(model.Location)) + + if props := model.Properties; props != nil { + if err := d.Set("bgp_settings", dataSourceFlattenVPNGatewayBGPSettings(props.BgpSettings)); err != nil { + return fmt.Errorf("Error setting `bgp_settings`: %+v", err) + } + + scaleUnit := 0 + if props.VpnGatewayScaleUnit != nil { + scaleUnit = int(*props.VpnGatewayScaleUnit) + } + d.Set("scale_unit", scaleUnit) + + virtualHubId := "" + if props.VirtualHub != nil && props.VirtualHub.Id != nil { + virtualHubId = *props.VirtualHub.Id + } + d.Set("virtual_hub_id", virtualHubId) - virtualHubId := "" - if props.VirtualHub != nil && props.VirtualHub.ID != nil { - virtualHubId = *props.VirtualHub.ID + if err := tags.FlattenAndSet(d, model.Tags); err != nil { + return err + } } - d.Set("virtual_hub_id", virtualHubId) } - return tags.FlattenAndSet(d, resp.Tags) + return nil } -func dataSourceFlattenVPNGatewayBGPSettings(input *network.BgpSettings) []interface{} { +func dataSourceFlattenVPNGatewayBGPSettings(input *virtualwans.BgpSettings) []interface{} { if input == nil { return []interface{}{} } @@ -233,10 +237,10 @@ func dataSourceFlattenVPNGatewayBGPSettings(input *network.BgpSettings) []interf } } -func dataSourceFlattenVPNGatewayIPConfigurationBgpPeeringAddress(input network.IPConfigurationBgpPeeringAddress) []interface{} { +func dataSourceFlattenVPNGatewayIPConfigurationBgpPeeringAddress(input virtualwans.IPConfigurationBgpPeeringAddress) []interface{} { ipConfigurationID := "" - if input.IpconfigurationID != nil { - ipConfigurationID = *input.IpconfigurationID + if input.IPconfigurationId != nil { + ipConfigurationID = *input.IPconfigurationId } return []interface{}{ diff --git a/internal/services/network/vpn_gateway_nat_rule_resource.go b/internal/services/network/vpn_gateway_nat_rule_resource.go index b110d0ef4ee4a..822a7c2a7f183 100644 --- a/internal/services/network/vpn_gateway_nat_rule_resource.go +++ b/internal/services/network/vpn_gateway_nat_rule_resource.go @@ -9,11 +9,11 @@ import ( "time" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" + "github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/virtualwans" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/features" "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" @@ -48,13 +48,14 @@ func resourceVPNGatewayNatRule() *pluginsdk.Resource { ValidateFunc: validation.StringIsNotEmpty, }, + // TODO: we should be able to remove this in 4.0 since it can be inferred from `vpn_gateway_id`? "resource_group_name": commonschema.ResourceGroupName(), "vpn_gateway_id": { Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: validate.VpnGatewayID, + ValidateFunc: virtualwans.ValidateVpnGatewayID, }, "external_mapping": { @@ -201,12 +202,12 @@ func resourceVPNGatewayNatRuleCreate(d *pluginsdk.ResourceData, meta interface{} ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() - vpnGatewayId, err := parse.VpnGatewayID(d.Get("vpn_gateway_id").(string)) + vpnGatewayId, err := virtualwans.ParseVpnGatewayID(d.Get("vpn_gateway_id").(string)) if err != nil { return err } - id := parse.NewVpnGatewayNatRuleID(subscriptionId, d.Get("resource_group_name").(string), vpnGatewayId.Name, d.Get("name").(string)) + id := parse.NewVpnGatewayNatRuleID(subscriptionId, d.Get("resource_group_name").(string), vpnGatewayId.VpnGatewayName, d.Get("name").(string)) existing, err := client.Get(ctx, id.ResourceGroup, id.VpnGatewayName, id.NatRuleName) if err != nil { @@ -284,7 +285,7 @@ func resourceVPNGatewayNatRuleRead(d *pluginsdk.ResourceData, meta interface{}) d.Set("name", id.NatRuleName) d.Set("resource_group_name", id.ResourceGroup) - gatewayId := parse.NewVpnGatewayID(id.SubscriptionId, id.ResourceGroup, id.VpnGatewayName) + gatewayId := virtualwans.NewVpnGatewayID(id.SubscriptionId, id.ResourceGroup, id.VpnGatewayName) d.Set("vpn_gateway_id", gatewayId.ID()) if props := resp.VpnGatewayNatRuleProperties; props != nil { @@ -320,12 +321,12 @@ func resourceVPNGatewayNatRuleUpdate(d *pluginsdk.ResourceData, meta interface{} ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - vpnGatewayId, err := parse.VpnGatewayID(d.Get("vpn_gateway_id").(string)) + vpnGatewayId, err := virtualwans.ParseVpnGatewayID(d.Get("vpn_gateway_id").(string)) if err != nil { return err } - id := parse.NewVpnGatewayNatRuleID(subscriptionId, d.Get("resource_group_name").(string), vpnGatewayId.Name, d.Get("name").(string)) + id := parse.NewVpnGatewayNatRuleID(subscriptionId, d.Get("resource_group_name").(string), vpnGatewayId.VpnGatewayName, d.Get("name").(string)) existing, err := client.Get(ctx, id.ResourceGroup, id.VpnGatewayName, id.NatRuleName) if err != nil { diff --git a/internal/services/network/vpn_gateway_resource.go b/internal/services/network/vpn_gateway_resource.go index bcd68d1d7b0d5..f14c7495b6c60 100644 --- a/internal/services/network/vpn_gateway_resource.go +++ b/internal/services/network/vpn_gateway_resource.go @@ -4,26 +4,25 @@ package network import ( - "context" "fmt" "log" "time" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" - "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" + "github.com/hashicorp/go-azure-helpers/resourcemanager/location" + "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" + "github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/virtualwans" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" commonValidate "github.com/hashicorp/terraform-provider-azurerm/helpers/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/locks" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/validate" - "github.com/hashicorp/terraform-provider-azurerm/internal/tags" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" "github.com/hashicorp/terraform-provider-azurerm/utils" - "github.com/tombuildsstuff/kermit/sdk/network/2022-07-01/network" ) var VPNGatewayResourceName = "azurerm_vpn_gateway" @@ -35,7 +34,7 @@ func resourceVPNGateway() *pluginsdk.Resource { Update: resourceVPNGatewayUpdate, Delete: resourceVPNGatewayDelete, Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { - _, err := parse.VpnGatewayID(id) + _, err := virtualwans.ParseVpnGatewayID(id) return err }), @@ -196,130 +195,120 @@ func resourceVPNGateway() *pluginsdk.Resource { ValidateFunc: validation.IntAtLeast(0), }, - "tags": tags.Schema(), + "tags": commonschema.Tags(), }, } } func resourceVPNGatewayCreate(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Network.VpnGatewaysClient + client := meta.(*clients.Client).Network.VirtualWANs subscriptionId := meta.(*clients.Client).Account.SubscriptionId ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) defer cancel() - id := parse.NewVpnGatewayID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) - - existing, err := client.Get(ctx, id.ResourceGroup, id.Name) + id := virtualwans.NewVpnGatewayID(subscriptionId, d.Get("resource_group_name").(string), d.Get("name").(string)) + existing, err := client.VpnGatewaysGet(ctx, id) if err != nil { - if !utils.ResponseWasNotFound(existing.Response) { + if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } } - if !utils.ResponseWasNotFound(existing.Response) { + if !response.WasNotFound(existing.HttpResponse) { return tf.ImportAsExistsError("azurerm_vpn_gateway", id.ID()) } bgpSettingsRaw := d.Get("bgp_settings").([]interface{}) bgpSettings := expandVPNGatewayBGPSettings(bgpSettingsRaw) - - location := azure.NormalizeLocation(d.Get("location").(string)) - scaleUnit := d.Get("scale_unit").(int) - virtualHubId := d.Get("virtual_hub_id").(string) - t := d.Get("tags").(map[string]interface{}) - - parameters := network.VpnGateway{ - Location: utils.String(location), - VpnGatewayProperties: &network.VpnGatewayProperties{ - EnableBgpRouteTranslationForNat: utils.Bool(d.Get("bgp_route_translation_for_nat_enabled").(bool)), + payload := virtualwans.VpnGateway{ + Location: location.Normalize(d.Get("location").(string)), + Properties: &virtualwans.VpnGatewayProperties{ + EnableBgpRouteTranslationForNat: pointer.To(d.Get("bgp_route_translation_for_nat_enabled").(bool)), BgpSettings: bgpSettings, - VirtualHub: &network.SubResource{ - ID: utils.String(virtualHubId), + VirtualHub: &virtualwans.SubResource{ + Id: utils.String(d.Get("virtual_hub_id").(string)), }, - VpnGatewayScaleUnit: utils.Int32(int32(scaleUnit)), - IsRoutingPreferenceInternet: utils.Bool(d.Get("routing_preference").(string) == "Internet"), + VpnGatewayScaleUnit: pointer.To(int64(d.Get("scale_unit").(int))), + IsRoutingPreferenceInternet: pointer.To(d.Get("routing_preference").(string) == "Internet"), }, - Tags: tags.Expand(t), + Tags: tags.Expand(d.Get("tags").(map[string]interface{})), } - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, parameters) - if err != nil { + if err := client.VpnGatewaysCreateOrUpdateThenPoll(ctx, id, payload); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } - - if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for creation/update of %q: %+v", id, err) - } - if err := waitForCompletion(d, ctx, client, id.ResourceGroup, id.Name); err != nil { - return err - } - resp, err := client.Get(ctx, id.ResourceGroup, id.Name) - if err != nil { - return fmt.Errorf("retrieving %s: %+v", id, err) - } + d.SetId(id.ID()) // `vpnGatewayParameters.Properties.bgpSettings.bgpPeeringAddress` customer cannot provide this field during create. This will be set with default value once gateway is created. // it could only be updated - if len(bgpSettingsRaw) > 0 && resp.VpnGatewayProperties != nil && resp.VpnGatewayProperties.BgpSettings != nil && resp.VpnGatewayProperties.BgpSettings.BgpPeeringAddresses != nil { - val := bgpSettingsRaw[0].(map[string]interface{}) - input0 := val["instance_0_bgp_peering_address"].([]interface{}) - input1 := val["instance_1_bgp_peering_address"].([]interface{}) + if len(bgpSettingsRaw) > 0 { + resp, err := client.VpnGatewaysGet(ctx, id) + if err != nil { + return fmt.Errorf("retrieving %s: %+v", id, err) + } + if resp.Model == nil || resp.Model.Properties == nil { + return fmt.Errorf("retrieving %s: `model.Properties` was nil", id) + } + props := resp.Model.Properties - if len(input0) > 0 || len(input1) > 0 { - if len(input0) > 0 { - val := input0[0].(map[string]interface{}) - (*resp.VpnGatewayProperties.BgpSettings.BgpPeeringAddresses)[0].CustomBgpIPAddresses = utils.ExpandStringSlice(val["custom_ips"].(*pluginsdk.Set).List()) - } - if len(input1) > 0 { - val := input1[0].(map[string]interface{}) - (*resp.VpnGatewayProperties.BgpSettings.BgpPeeringAddresses)[1].CustomBgpIPAddresses = utils.ExpandStringSlice(val["custom_ips"].(*pluginsdk.Set).List()) - } + if props.BgpSettings != nil && props.BgpSettings.BgpPeeringAddresses != nil { - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, resp) - if err != nil { - return fmt.Errorf("creating %s: %+v", id, err) - } + val := bgpSettingsRaw[0].(map[string]interface{}) + input0 := val["instance_0_bgp_peering_address"].([]interface{}) + input1 := val["instance_1_bgp_peering_address"].([]interface{}) - if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for creation/update of %q: %+v", id, err) - } - if err := waitForCompletion(d, ctx, client, id.ResourceGroup, id.Name); err != nil { - return err + if len(input0) > 0 || len(input1) > 0 { + if len(input0) > 0 && input0[0] != nil { + val := input0[0].(map[string]interface{}) + (*props.BgpSettings.BgpPeeringAddresses)[0].CustomBgpIPAddresses = utils.ExpandStringSlice(val["custom_ips"].(*pluginsdk.Set).List()) + } + if len(input1) > 0 && input1[0] != nil { + val := input1[0].(map[string]interface{}) + (*props.BgpSettings.BgpPeeringAddresses)[1].CustomBgpIPAddresses = utils.ExpandStringSlice(val["custom_ips"].(*pluginsdk.Set).List()) + } + + resp.Model.Properties = props + + if err := client.VpnGatewaysCreateOrUpdateThenPoll(ctx, id, *resp.Model); err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } } } } - d.SetId(id.ID()) - return resourceVPNGatewayRead(d, meta) } func resourceVPNGatewayUpdate(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Network.VpnGatewaysClient + client := meta.(*clients.Client).Network.VirtualWANs ctx, cancel := timeouts.ForUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VpnGatewayID(d.Id()) + id, err := virtualwans.ParseVpnGatewayID(d.Id()) if err != nil { return err } - locks.ByName(id.Name, VPNGatewayResourceName) - defer locks.UnlockByName(id.Name, VPNGatewayResourceName) + locks.ByName(id.VpnGatewayName, VPNGatewayResourceName) + defer locks.UnlockByName(id.VpnGatewayName, VPNGatewayResourceName) - existing, err := client.Get(ctx, id.ResourceGroup, id.Name) + existing, err := client.VpnGatewaysGet(ctx, *id) if err != nil { - return fmt.Errorf("retrieving for presence of existing %s: %+v", id, err) + return fmt.Errorf("retrieving %s: %+v", *id, err) + } + if existing.Model == nil || existing.Model.Properties == nil { + return fmt.Errorf("retrieving %s: `model.Properties` was nil", *id) } + model := *existing.Model if d.HasChange("scale_unit") { - existing.VpnGatewayScaleUnit = utils.Int32(int32(d.Get("scale_unit").(int))) + model.Properties.VpnGatewayScaleUnit = pointer.To(int64(d.Get("scale_unit").(int))) } if d.HasChange("tags") { - existing.Tags = tags.Expand(d.Get("tags").(map[string]interface{})) + model.Tags = tags.Expand(d.Get("tags").(map[string]interface{})) } if d.HasChange("bgp_route_translation_for_nat_enabled") { - existing.EnableBgpRouteTranslationForNat = utils.Bool(d.Get("bgp_route_translation_for_nat_enabled").(bool)) + model.Properties.EnableBgpRouteTranslationForNat = utils.Bool(d.Get("bgp_route_translation_for_nat_enabled").(bool)) } bgpSettingsRaw := d.Get("bgp_settings").([]interface{}) @@ -329,45 +318,37 @@ func resourceVPNGatewayUpdate(d *pluginsdk.ResourceData, meta interface{}) error if d.HasChange("bgp_settings.0.instance_0_bgp_peering_address") { if input := val["instance_0_bgp_peering_address"].([]interface{}); len(input) > 0 { val := input[0].(map[string]interface{}) - (*existing.VpnGatewayProperties.BgpSettings.BgpPeeringAddresses)[0].CustomBgpIPAddresses = utils.ExpandStringSlice(val["custom_ips"].(*pluginsdk.Set).List()) + (*model.Properties.BgpSettings.BgpPeeringAddresses)[0].CustomBgpIPAddresses = utils.ExpandStringSlice(val["custom_ips"].(*pluginsdk.Set).List()) } } if d.HasChange("bgp_settings.0.instance_1_bgp_peering_address") { if input := val["instance_1_bgp_peering_address"].([]interface{}); len(input) > 0 { val := input[0].(map[string]interface{}) - (*existing.VpnGatewayProperties.BgpSettings.BgpPeeringAddresses)[1].CustomBgpIPAddresses = utils.ExpandStringSlice(val["custom_ips"].(*pluginsdk.Set).List()) + (*model.Properties.BgpSettings.BgpPeeringAddresses)[1].CustomBgpIPAddresses = utils.ExpandStringSlice(val["custom_ips"].(*pluginsdk.Set).List()) } } } - future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.Name, existing) - if err != nil { - return fmt.Errorf("creating %s: %+v", id, err) - } - - if err := future.WaitForCompletionRef(ctx, client.Client); err != nil { - return fmt.Errorf("waiting for creation/update of %q: %+v", id, err) - } - if err := waitForCompletion(d, ctx, client, id.ResourceGroup, id.Name); err != nil { - return err + if err := client.VpnGatewaysCreateOrUpdateThenPoll(ctx, *id, model); err != nil { + return fmt.Errorf("updating %s: %+v", id, err) } return resourceVPNGatewayRead(d, meta) } func resourceVPNGatewayRead(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Network.VpnGatewaysClient + client := meta.(*clients.Client).Network.VirtualWANs ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VpnGatewayID(d.Id()) + id, err := virtualwans.ParseVpnGatewayID(d.Id()) if err != nil { return err } - resp, err := client.Get(ctx, id.ResourceGroup, id.Name) + resp, err := client.VpnGatewaysGet(ctx, *id) if err != nil { - if utils.ResponseWasNotFound(resp.Response) { + if response.WasNotFound(resp.HttpResponse) { log.Printf("[DEBUG] %s was not found - removing from state", *id) d.SetId("") return nil @@ -376,113 +357,80 @@ func resourceVPNGatewayRead(d *pluginsdk.ResourceData, meta interface{}) error { return fmt.Errorf("retrieving %s: %+v", *id, err) } - d.Set("name", id.Name) - d.Set("resource_group_name", id.ResourceGroup) - if location := resp.Location; location != nil { - d.Set("location", azure.NormalizeLocation(*location)) - } + d.Set("name", id.VpnGatewayName) + d.Set("resource_group_name", id.ResourceGroupName) - if props := resp.VpnGatewayProperties; props != nil { - if err := d.Set("bgp_settings", flattenVPNGatewayBGPSettings(props.BgpSettings)); err != nil { - return fmt.Errorf("setting `bgp_settings`: %+v", err) - } + if model := resp.Model; model != nil { + d.Set("location", location.Normalize(model.Location)) - bgpRouteTranslationForNatEnabled := false - if props.EnableBgpRouteTranslationForNat != nil { - bgpRouteTranslationForNatEnabled = *props.EnableBgpRouteTranslationForNat - } - d.Set("bgp_route_translation_for_nat_enabled", bgpRouteTranslationForNatEnabled) + if props := model.Properties; props != nil { + if err := d.Set("bgp_settings", flattenVPNGatewayBGPSettings(props.BgpSettings)); err != nil { + return fmt.Errorf("setting `bgp_settings`: %+v", err) + } - scaleUnit := 0 - if props.VpnGatewayScaleUnit != nil { - scaleUnit = int(*props.VpnGatewayScaleUnit) - } - d.Set("scale_unit", scaleUnit) + bgpRouteTranslationForNatEnabled := false + if props.EnableBgpRouteTranslationForNat != nil { + bgpRouteTranslationForNatEnabled = *props.EnableBgpRouteTranslationForNat + } + d.Set("bgp_route_translation_for_nat_enabled", bgpRouteTranslationForNatEnabled) - virtualHubId := "" - if props.VirtualHub != nil && props.VirtualHub.ID != nil { - virtualHubId = *props.VirtualHub.ID + scaleUnit := 0 + if props.VpnGatewayScaleUnit != nil { + scaleUnit = int(*props.VpnGatewayScaleUnit) + } + d.Set("scale_unit", scaleUnit) + + virtualHubId := "" + if props.VirtualHub != nil && props.VirtualHub.Id != nil { + virtualHubId = *props.VirtualHub.Id + } + d.Set("virtual_hub_id", virtualHubId) + + isRoutingPreferenceInternet := "Microsoft Network" + if props.IsRoutingPreferenceInternet != nil && *props.IsRoutingPreferenceInternet { + isRoutingPreferenceInternet = "Internet" + } + d.Set("routing_preference", isRoutingPreferenceInternet) } - d.Set("virtual_hub_id", virtualHubId) - isRoutingPreferenceInternet := "Microsoft Network" - if props.IsRoutingPreferenceInternet != nil && *props.IsRoutingPreferenceInternet { - isRoutingPreferenceInternet = "Internet" + if err := tags.FlattenAndSet(d, model.Tags); err != nil { + return err } - d.Set("routing_preference", isRoutingPreferenceInternet) } - return tags.FlattenAndSet(d, resp.Tags) + return nil } func resourceVPNGatewayDelete(d *pluginsdk.ResourceData, meta interface{}) error { - client := meta.(*clients.Client).Network.VpnGatewaysClient + client := meta.(*clients.Client).Network.VirtualWANs ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.VpnGatewayID(d.Id()) + id, err := virtualwans.ParseVpnGatewayID(d.Id()) if err != nil { return err } - deleteFuture, err := client.Delete(ctx, id.ResourceGroup, id.Name) - if err != nil { - if response.WasNotFound(deleteFuture.Response()) { - return nil - } - + if err := client.VpnGatewaysDeleteThenPoll(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", *id, err) } - err = deleteFuture.WaitForCompletionRef(ctx, client.Client) - if err != nil { - if response.WasNotFound(deleteFuture.Response()) { - return nil - } - - return fmt.Errorf("waiting for deletion of %s: %+v", *id, err) - } - - return nil -} - -func waitForCompletion(d *pluginsdk.ResourceData, ctx context.Context, client *network.VpnGatewaysClient, resourceGroup, name string) error { - log.Printf("[DEBUG] Waiting for Virtual Hub %q (Resource Group %q) to become available", name, resourceGroup) - stateConf := &pluginsdk.StateChangeConf{ - Pending: []string{"pending"}, - Target: []string{"available"}, - Refresh: vpnGatewayWaitForCreatedRefreshFunc(ctx, client, resourceGroup, name), - Delay: 30 * time.Second, - PollInterval: 10 * time.Second, - ContinuousTargetOccurence: 3, - } - - if d.IsNewResource() { - stateConf.Timeout = d.Timeout(pluginsdk.TimeoutCreate) - } else { - stateConf.Timeout = d.Timeout(pluginsdk.TimeoutUpdate) - } - - if _, err := stateConf.WaitForStateContext(ctx); err != nil { - return fmt.Errorf("waiting for creation of Virtual Hub %q (Resource Group %q): %+v", name, resourceGroup, err) - } - return nil } -func expandVPNGatewayBGPSettings(input []interface{}) *network.BgpSettings { +func expandVPNGatewayBGPSettings(input []interface{}) *virtualwans.BgpSettings { if len(input) == 0 { return nil } val := input[0].(map[string]interface{}) - return &network.BgpSettings{ - Asn: utils.Int64(int64(val["asn"].(int))), - PeerWeight: utils.Int32(int32(val["peer_weight"].(int))), + return &virtualwans.BgpSettings{ + Asn: pointer.To(int64(val["asn"].(int))), + PeerWeight: pointer.To(int64(val["peer_weight"].(int))), } } -func flattenVPNGatewayBGPSettings(input *network.BgpSettings) []interface{} { +func flattenVPNGatewayBGPSettings(input *virtualwans.BgpSettings) []interface{} { if input == nil { return []interface{}{} } @@ -521,10 +469,10 @@ func flattenVPNGatewayBGPSettings(input *network.BgpSettings) []interface{} { } } -func flattenVPNGatewayIPConfigurationBgpPeeringAddress(input network.IPConfigurationBgpPeeringAddress) []interface{} { +func flattenVPNGatewayIPConfigurationBgpPeeringAddress(input virtualwans.IPConfigurationBgpPeeringAddress) []interface{} { ipConfigurationID := "" - if input.IpconfigurationID != nil { - ipConfigurationID = *input.IpconfigurationID + if input.IPconfigurationId != nil { + ipConfigurationID = *input.IPconfigurationId } return []interface{}{ @@ -536,32 +484,3 @@ func flattenVPNGatewayIPConfigurationBgpPeeringAddress(input network.IPConfigura }, } } - -func vpnGatewayWaitForCreatedRefreshFunc(ctx context.Context, client *network.VpnGatewaysClient, resourceGroup, name string) pluginsdk.StateRefreshFunc { - return func() (interface{}, string, error) { - log.Printf("[DEBUG] Checking to see if VPN Gateway %q (Resource Group %q) has finished provisioning..", name, resourceGroup) - - resp, err := client.Get(ctx, resourceGroup, name) - if err != nil { - log.Printf("[DEBUG] Error retrieving VPN Gateway %q (Resource Group %q): %+v", name, resourceGroup, err) - return nil, "error", fmt.Errorf("retrieving VPN Gateway %q (Resource Group %q): %+v", name, resourceGroup, err) - } - - if resp.VpnGatewayProperties == nil { - log.Printf("[DEBUG] Error retrieving VPN Gateway %q (Resource Group %q): `properties` was nil", name, resourceGroup) - return nil, "error", fmt.Errorf("retrieving VPN Gateway %q (Resource Group %q): `properties` was nil", name, resourceGroup) - } - - log.Printf("[DEBUG] VPN Gateway %q (Resource Group %q) is %q..", name, resourceGroup, string(resp.VpnGatewayProperties.ProvisioningState)) - switch resp.VpnGatewayProperties.ProvisioningState { - case network.ProvisioningStateSucceeded: - return "available", "available", nil - - case network.ProvisioningStateFailed: - return "error", "error", fmt.Errorf("VPN Gateway %q (Resource Group %q) is in provisioningState `Failed`", name, resourceGroup) - - default: - return "pending", "pending", nil - } - } -} diff --git a/internal/services/network/vpn_gateway_resource_test.go b/internal/services/network/vpn_gateway_resource_test.go index 52d6a6ae9ad84..a688d61355eba 100644 --- a/internal/services/network/vpn_gateway_resource_test.go +++ b/internal/services/network/vpn_gateway_resource_test.go @@ -8,10 +8,10 @@ import ( "fmt" "testing" + "github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/virtualwans" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/network/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) @@ -170,17 +170,17 @@ func TestAccVPNGateway_bgpRouteTranslationForNatEnabled(t *testing.T) { } func (t VPNGatewayResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { - id, err := parse.VpnGatewayID(state.ID) + id, err := virtualwans.ParseVpnGatewayID(state.ID) if err != nil { return nil, err } - resp, err := clients.Network.VpnGatewaysClient.Get(ctx, id.ResourceGroup, id.Name) + resp, err := clients.Network.VirtualWANs.VpnGatewaysGet(ctx, *id) if err != nil { - return nil, fmt.Errorf("reading VPN Gateway (%s): %+v", id, err) + return nil, fmt.Errorf("retrieving %s: %+v", id, err) } - return utils.Bool(resp.ID != nil), nil + return utils.Bool(resp.Model != nil), nil } func (r VPNGatewayResource) basic(data acceptance.TestData) string { diff --git a/internal/services/network/web_application_firewall_policy_resource.go b/internal/services/network/web_application_firewall_policy_resource.go index 9f0ada606ccd1..16e2e0ce25b5f 100644 --- a/internal/services/network/web_application_firewall_policy_resource.go +++ b/internal/services/network/web_application_firewall_policy_resource.go @@ -76,6 +76,11 @@ func resourceWebApplicationFirewallPolicy() *pluginsdk.Resource { string(webapplicationfirewallpolicies.WebApplicationFirewallActionLog), }, false), }, + "enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: true, + }, "match_conditions": { Type: pluginsdk.TypeList, Required: true, @@ -163,6 +168,7 @@ func resourceWebApplicationFirewallPolicy() *pluginsdk.Resource { Required: true, ValidateFunc: validation.StringInSlice([]string{ string(webapplicationfirewallpolicies.WebApplicationFirewallRuleTypeMatchRule), + string(webapplicationfirewallpolicies.WebApplicationFirewallRuleTypeRateLimitRule), string(webapplicationfirewallpolicies.WebApplicationFirewallRuleTypeInvalid), }, false), }, @@ -170,6 +176,22 @@ func resourceWebApplicationFirewallPolicy() *pluginsdk.Resource { Type: pluginsdk.TypeString, Optional: true, }, + "rate_limit_duration": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice(webapplicationfirewallpolicies.PossibleValuesForApplicationGatewayFirewallRateLimitDuration(), false), + }, + "rate_limit_threshold": { + Type: pluginsdk.TypeInt, + Optional: true, + ValidateFunc: validation.IntAtLeast(1), + }, + "group_rate_limit_by": { + // group variables combination not supported yet, use a single variable name + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice(webapplicationfirewallpolicies.PossibleValuesForApplicationGatewayFirewallUserSessionVariable(), false), + }, }, }, }, @@ -344,6 +366,7 @@ func resourceWebApplicationFirewallPolicy() *pluginsdk.Resource { Optional: true, Default: true, }, + "mode": { Type: pluginsdk.TypeString, Optional: true, @@ -353,23 +376,34 @@ func resourceWebApplicationFirewallPolicy() *pluginsdk.Resource { }, false), Default: string(webapplicationfirewallpolicies.WebApplicationFirewallModePrevention), }, + "request_body_check": { Type: pluginsdk.TypeBool, Optional: true, Default: true, }, + "file_upload_limit_in_mb": { Type: pluginsdk.TypeInt, Optional: true, ValidateFunc: validation.IntBetween(1, 4000), Default: 100, }, + "max_request_body_size_in_kb": { Type: pluginsdk.TypeInt, Optional: true, ValidateFunc: validation.IntBetween(8, 2000), Default: 128, }, + + "request_body_inspect_limit_in_kb": { + Type: pluginsdk.TypeInt, + Optional: true, + Default: 128, + ValidateFunc: validation.IntAtLeast(0), + }, + "log_scrubbing": { Type: pluginsdk.TypeList, MaxItems: 1, @@ -599,7 +633,13 @@ func expandWebApplicationFirewallPolicyWebApplicationFirewallCustomRule(input [] matchConditions := v["match_conditions"].([]interface{}) action := v["action"].(string) + enabled := webapplicationfirewallpolicies.WebApplicationFirewallStateEnabled + if value, ok := v["enabled"].(bool); ok && !value { + enabled = webapplicationfirewallpolicies.WebApplicationFirewallStateDisabled + } + result := webapplicationfirewallpolicies.WebApplicationFirewallCustomRule{ + State: pointer.To(enabled), Action: webapplicationfirewallpolicies.WebApplicationFirewallAction(action), MatchConditions: expandWebApplicationFirewallPolicyMatchCondition(matchConditions), Name: pointer.To(name), @@ -607,6 +647,27 @@ func expandWebApplicationFirewallPolicyWebApplicationFirewallCustomRule(input [] RuleType: webapplicationfirewallpolicies.WebApplicationFirewallRuleType(ruleType), } + if rateLimitDuration, ok := v["rate_limit_duration"]; ok && rateLimitDuration.(string) != "" { + result.RateLimitDuration = pointer.To(webapplicationfirewallpolicies.ApplicationGatewayFirewallRateLimitDuration(rateLimitDuration.(string))) + } + + if rateLimitThreshHold, ok := v["rate_limit_threshold"]; ok && rateLimitThreshHold.(int) > 0 { + result.RateLimitThreshold = pointer.To(int64(rateLimitThreshHold.(int))) + } + + if groupBy, ok := v["group_rate_limit_by"]; ok && groupBy.(string) != "" { + groups := []webapplicationfirewallpolicies.GroupByUserSession{ + { + GroupByVariables: []webapplicationfirewallpolicies.GroupByVariable{ + { + VariableName: webapplicationfirewallpolicies.ApplicationGatewayFirewallUserSessionVariable(groupBy.(string)), + }, + }, + }, + } + result.GroupByUserSession = &groups + } + results = append(results, result) } return &results @@ -628,13 +689,15 @@ func expandWebApplicationFirewallPolicyPolicySettings(input []interface{}) *weba fileUploadLimitInMb := v["file_upload_limit_in_mb"].(int) result := webapplicationfirewallpolicies.PolicySettings{ - State: pointer.To(enabled), - Mode: pointer.To(webapplicationfirewallpolicies.WebApplicationFirewallMode(mode)), - RequestBodyCheck: pointer.To(requestBodyCheck), - MaxRequestBodySizeInKb: pointer.To(int64(maxRequestBodySizeInKb)), - FileUploadLimitInMb: pointer.To(int64(fileUploadLimitInMb)), - LogScrubbing: expandWebApplicationFirewallPolicyLogScrubbing(v["log_scrubbing"].([]interface{})), + State: pointer.To(enabled), + Mode: pointer.To(webapplicationfirewallpolicies.WebApplicationFirewallMode(mode)), + RequestBodyCheck: pointer.To(requestBodyCheck), + MaxRequestBodySizeInKb: pointer.To(int64(maxRequestBodySizeInKb)), + FileUploadLimitInMb: pointer.To(int64(fileUploadLimitInMb)), + LogScrubbing: expandWebApplicationFirewallPolicyLogScrubbing(v["log_scrubbing"].([]interface{})), + RequestBodyInspectLimitInKB: pointer.To(int64(v["request_body_inspect_limit_in_kb"].(int))), } + return &result } @@ -946,9 +1009,18 @@ func flattenWebApplicationFirewallPolicyWebApplicationFirewallCustomRule(input * v["name"] = *name } v["action"] = string(item.Action) + v["enabled"] = pointer.From(item.State) == webapplicationfirewallpolicies.WebApplicationFirewallStateEnabled v["match_conditions"] = flattenWebApplicationFirewallPolicyMatchCondition(item.MatchConditions) v["priority"] = int(item.Priority) v["rule_type"] = string(item.RuleType) + v["rate_limit_duration"] = pointer.From(item.RateLimitDuration) + v["rate_limit_threshold"] = pointer.From(item.RateLimitThreshold) + + if item.GroupByUserSession != nil && len(*item.GroupByUserSession) > 0 { + if groupVariable := (*item.GroupByUserSession)[0].GroupByVariables; len(groupVariable) > 0 { + v["group_rate_limit_by"] = groupVariable[0].VariableName + } + } results = append(results, v) } @@ -969,6 +1041,7 @@ func flattenWebApplicationFirewallPolicyPolicySettings(input *webapplicationfire result["max_request_body_size_in_kb"] = int(pointer.From(input.MaxRequestBodySizeInKb)) result["file_upload_limit_in_mb"] = int(pointer.From(input.FileUploadLimitInMb)) result["log_scrubbing"] = flattenWebApplicationFirewallPolicyLogScrubbing(input.LogScrubbing) + result["request_body_inspect_limit_in_kb"] = pointer.From(input.RequestBodyInspectLimitInKB) return []interface{}{result} } diff --git a/internal/services/network/web_application_firewall_policy_resource_test.go b/internal/services/network/web_application_firewall_policy_resource_test.go index f574e73b35496..d93ccd47433da 100644 --- a/internal/services/network/web_application_firewall_policy_resource_test.go +++ b/internal/services/network/web_application_firewall_policy_resource_test.go @@ -42,7 +42,8 @@ func TestAccWebApplicationFirewallPolicy_complete(t *testing.T) { Config: r.complete(data), Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), - check.That(data.ResourceName).Key("custom_rules.#").HasValue("2"), + check.That(data.ResourceName).Key("custom_rules.#").HasValue("3"), + check.That(data.ResourceName).Key("custom_rules.0.enabled").HasValue("true"), check.That(data.ResourceName).Key("custom_rules.0.name").HasValue("Rule1"), check.That(data.ResourceName).Key("custom_rules.0.priority").HasValue("1"), check.That(data.ResourceName).Key("custom_rules.0.rule_type").HasValue("MatchRule"), @@ -73,6 +74,19 @@ func TestAccWebApplicationFirewallPolicy_complete(t *testing.T) { check.That(data.ResourceName).Key("custom_rules.1.match_conditions.1.match_values.#").HasValue("1"), check.That(data.ResourceName).Key("custom_rules.1.match_conditions.1.match_values.0").HasValue("windows"), check.That(data.ResourceName).Key("custom_rules.1.action").HasValue("Block"), + check.That(data.ResourceName).Key("custom_rules.2.enabled").HasValue("false"), + check.That(data.ResourceName).Key("custom_rules.2.name").HasValue("Rule3"), + check.That(data.ResourceName).Key("custom_rules.2.priority").HasValue("3"), + check.That(data.ResourceName).Key("custom_rules.2.rule_type").HasValue("MatchRule"), + check.That(data.ResourceName).Key("custom_rules.2.match_conditions.#").HasValue("1"), + check.That(data.ResourceName).Key("custom_rules.2.match_conditions.0.match_variables.#").HasValue("1"), + check.That(data.ResourceName).Key("custom_rules.2.match_conditions.0.match_variables.0.variable_name").HasValue("RemoteAddr"), + check.That(data.ResourceName).Key("custom_rules.2.match_conditions.0.operator").HasValue("IPMatch"), + check.That(data.ResourceName).Key("custom_rules.2.match_conditions.0.negation_condition").HasValue("false"), + check.That(data.ResourceName).Key("custom_rules.2.match_conditions.0.match_values.#").HasValue("2"), + check.That(data.ResourceName).Key("custom_rules.2.match_conditions.0.match_values.0").HasValue("192.168.1.0/24"), + check.That(data.ResourceName).Key("custom_rules.2.match_conditions.0.match_values.1").HasValue("10.0.0.0/24"), + check.That(data.ResourceName).Key("custom_rules.2.action").HasValue("Block"), check.That(data.ResourceName).Key("managed_rules.#").HasValue("1"), check.That(data.ResourceName).Key("managed_rules.0.exclusion.#").HasValue("2"), check.That(data.ResourceName).Key("managed_rules.0.exclusion.0.match_variable").HasValue("RequestHeaderNames"), @@ -120,7 +134,7 @@ func TestAccWebApplicationFirewallPolicy_update(t *testing.T) { Config: r.complete(data), Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), - check.That(data.ResourceName).Key("custom_rules.#").HasValue("2"), + check.That(data.ResourceName).Key("custom_rules.#").HasValue("3"), check.That(data.ResourceName).Key("custom_rules.0.name").HasValue("Rule1"), check.That(data.ResourceName).Key("custom_rules.0.priority").HasValue("1"), check.That(data.ResourceName).Key("custom_rules.0.rule_type").HasValue("MatchRule"), @@ -212,6 +226,35 @@ func TestAccWebApplicationFirewallPolicy_updateOverrideRules(t *testing.T) { }) } +func TestAccWebApplicationFirewallPolicy_rateLimit(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_web_application_firewall_policy", "test") + r := WebApplicationFirewallResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.rateLimit(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.rateLimitUpdate(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.rateLimit(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccWebApplicationFirewallPolicy_knownCVEs(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_web_application_firewall_policy", "test") r := WebApplicationFirewallResource{} @@ -301,6 +344,28 @@ func TestAccWebApplicationFirewallPolicy_LogScrubbing(t *testing.T) { }) } +func TestAccWebApplicationFirewallPolicy_updateCustomRules(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_web_application_firewall_policy", "test") + r := WebApplicationFirewallResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.customRules(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.updateCustomRules(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func (t WebApplicationFirewallResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := webapplicationfirewallpolicies.ParseApplicationGatewayWebApplicationFirewallPolicyID(state.ID) if err != nil { @@ -368,6 +433,7 @@ resource "azurerm_web_application_firewall_policy" "test" { } custom_rules { + enabled = true name = "Rule1" priority = 1 rule_type = "MatchRule" @@ -415,6 +481,25 @@ resource "azurerm_web_application_firewall_policy" "test" { action = "Block" } + custom_rules { + enabled = false + name = "Rule3" + priority = 3 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + managed_rules { exclusion { match_variable = "RequestHeaderNames" @@ -457,6 +542,174 @@ resource "azurerm_web_application_firewall_policy" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomInteger) } +func (WebApplicationFirewallResource) rateLimit(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_web_application_firewall_policy" "test" { + name = "acctestwafpolicy-%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + + tags = { + env = "test" + } + + custom_rules { + name = "Rule1" + priority = 1 + rule_type = "RateLimitRule" + rate_limit_duration = "FiveMins" + rate_limit_threshold = 100 + group_rate_limit_by = "ClientAddr" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + managed_rules { + exclusion { + match_variable = "RequestHeaderNames" + selector = "x-shared-secret" + selector_match_operator = "Equals" + } + + exclusion { + match_variable = "RequestCookieNames" + selector = "too-much-fun" + selector_match_operator = "EndsWith" + } + + managed_rule_set { + type = "OWASP" + version = "3.2" + + rule_group_override { + rule_group_name = "REQUEST-920-PROTOCOL-ENFORCEMENT" + rule { + id = "920300" + enabled = true + action = "Log" + } + + rule { + id = "920440" + enabled = true + action = "Block" + } + } + } + } + + policy_settings { + enabled = true + mode = "Prevention" + request_body_inspect_limit_in_kb = 1000 + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger) +} + +func (WebApplicationFirewallResource) rateLimitUpdate(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_web_application_firewall_policy" "test" { + name = "acctestwafpolicy-%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + + tags = { + env = "test" + } + + custom_rules { + name = "Rule1" + priority = 1 + rule_type = "RateLimitRule" + rate_limit_duration = "OneMin" + rate_limit_threshold = 123 + group_rate_limit_by = "GeoLocation" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + managed_rules { + exclusion { + match_variable = "RequestHeaderNames" + selector = "x-shared-secret" + selector_match_operator = "Equals" + } + + exclusion { + match_variable = "RequestCookieNames" + selector = "too-much-fun" + selector_match_operator = "EndsWith" + } + + managed_rule_set { + type = "OWASP" + version = "3.2" + + rule_group_override { + rule_group_name = "REQUEST-920-PROTOCOL-ENFORCEMENT" + rule { + id = "920300" + enabled = true + action = "Log" + } + + rule { + id = "920440" + enabled = true + action = "Block" + } + } + } + } + + policy_settings { + enabled = true + mode = "Prevention" + request_body_inspect_limit_in_kb = 1234 + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger) +} + func (WebApplicationFirewallResource) updateOverrideRules(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { @@ -1100,3 +1353,311 @@ resource "azurerm_web_application_firewall_policy" "test" { } `, data.RandomInteger, data.Locations.Primary) } + +func (WebApplicationFirewallResource) customRules(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_web_application_firewall_policy" "test" { + name = "acctestwafpolicy-%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + + custom_rules { + name = "Rule1" + priority = 1 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + custom_rules { + name = "Rule2" + priority = 2 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24"] + } + + match_conditions { + match_variables { + variable_name = "RequestHeaders" + selector = "UserAgent" + } + + operator = "Contains" + negation_condition = false + match_values = ["Windows"] + } + + action = "Block" + } + + custom_rules { + enabled = true + name = "Rule3" + priority = 3 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + custom_rules { + enabled = false + name = "Rule4" + priority = 4 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + custom_rules { + enabled = true + name = "Rule5" + priority = 5 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + custom_rules { + enabled = false + name = "Rule6" + priority = 6 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + managed_rules { + managed_rule_set { + type = "OWASP" + version = "3.2" + } + } + + policy_settings { + enabled = true + mode = "Detection" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger) +} + +func (WebApplicationFirewallResource) updateCustomRules(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_web_application_firewall_policy" "test" { + name = "acctestwafpolicy-%d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + + custom_rules { + enabled = true + name = "Rule1" + priority = 1 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + custom_rules { + enabled = false + name = "Rule2" + priority = 2 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24"] + } + + match_conditions { + match_variables { + variable_name = "RequestHeaders" + selector = "UserAgent" + } + + operator = "Contains" + negation_condition = false + match_values = ["Windows"] + } + + action = "Block" + } + + custom_rules { + name = "Rule3" + priority = 3 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + custom_rules { + name = "Rule4" + priority = 4 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + custom_rules { + enabled = false + name = "Rule5" + priority = 5 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + custom_rules { + enabled = true + name = "Rule6" + priority = 6 + rule_type = "MatchRule" + + match_conditions { + match_variables { + variable_name = "RemoteAddr" + } + + operator = "IPMatch" + negation_condition = false + match_values = ["192.168.1.0/24", "10.0.0.0/24"] + } + + action = "Block" + } + + managed_rules { + managed_rule_set { + type = "OWASP" + version = "3.2" + } + } + + policy_settings { + enabled = true + mode = "Detection" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger) +} diff --git a/internal/services/newrelic/client/client.go b/internal/services/newrelic/client/client.go index b2fbe97f90a15..bf85de87d9e05 100644 --- a/internal/services/newrelic/client/client.go +++ b/internal/services/newrelic/client/client.go @@ -4,23 +4,35 @@ package client import ( + "fmt" + "github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/monitors" + "github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules" "github.com/hashicorp/terraform-provider-azurerm/internal/common" ) type Client struct { MonitorsClient *monitors.MonitorsClient + TagRulesClient *tagrules.TagRulesClient } func NewClient(o *common.ClientOptions) (*Client, error) { - monitorsClient, err := monitors.NewMonitorsClientWithBaseURI(o.Environment.ResourceManager) if err != nil { - return nil, err + return nil, fmt.Errorf("building Monitors client: %+v", err) } + o.Configure(monitorsClient.Client, o.Authorizers.ResourceManager) + tagRulesClient, err := tagrules.NewTagRulesClientWithBaseURI(o.Environment.ResourceManager) + if err != nil { + return nil, fmt.Errorf("building TagRules client: %+v", err) + } + + o.Configure(tagRulesClient.Client, o.Authorizers.ResourceManager) + return &Client{ MonitorsClient: monitorsClient, + TagRulesClient: tagRulesClient, }, nil } diff --git a/internal/services/newrelic/new_relic_tag_rule_resource.go b/internal/services/newrelic/new_relic_tag_rule_resource.go new file mode 100644 index 0000000000000..e106d6416fee4 --- /dev/null +++ b/internal/services/newrelic/new_relic_tag_rule_resource.go @@ -0,0 +1,427 @@ +package newrelic + +import ( + "context" + "fmt" + "time" + + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/monitors" + "github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules" + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" +) + +type NewRelicTagRuleModel struct { + NewRelicMonitorId string `tfschema:"monitor_id"` + AadLogEnabled bool `tfschema:"azure_active_directory_log_enabled"` + ActivityLogEnabled bool `tfschema:"activity_log_enabled"` + LogTagFilter []FilteringTagModel `tfschema:"log_tag_filter"` + MetricEnabled bool `tfschema:"metric_enabled"` + MetricTagFilter []FilteringTagModel `tfschema:"metric_tag_filter"` + SubscriptionLogEnabled bool `tfschema:"subscription_log_enabled"` +} + +type FilteringTagModel struct { + Action tagrules.TagAction `tfschema:"action"` + Name string `tfschema:"name"` + Value string `tfschema:"value"` +} + +type NewRelicTagRuleResource struct{} + +var _ sdk.ResourceWithUpdate = NewRelicTagRuleResource{} + +func (r NewRelicTagRuleResource) ResourceType() string { + return "azurerm_new_relic_tag_rule" +} + +func (r NewRelicTagRuleResource) ModelObject() interface{} { + return &NewRelicTagRuleModel{} +} + +func (r NewRelicTagRuleResource) IDValidationFunc() pluginsdk.SchemaValidateFunc { + return tagrules.ValidateTagRuleID +} + +func (r NewRelicTagRuleResource) Arguments() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{ + "monitor_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: monitors.ValidateMonitorID, + }, + + "azure_active_directory_log_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + + "activity_log_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + + "log_tag_filter": { + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "action": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringInSlice([]string{ + string(tagrules.TagActionExclude), + string(tagrules.TagActionInclude), + }, false), + }, + + "value": { + Type: pluginsdk.TypeString, + Required: true, + }, + }, + }, + }, + + "metric_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + + "metric_tag_filter": { + Type: pluginsdk.TypeList, + Optional: true, + Elem: &pluginsdk.Resource{ + Schema: map[string]*pluginsdk.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "action": { + Type: pluginsdk.TypeString, + Required: true, + ValidateFunc: validation.StringInSlice([]string{ + string(tagrules.TagActionExclude), + string(tagrules.TagActionInclude), + }, false), + }, + + "value": { + Type: pluginsdk.TypeString, + Required: true, + }, + }, + }, + }, + + "subscription_log_enabled": { + Type: pluginsdk.TypeBool, + Optional: true, + Default: false, + }, + } +} + +func (r NewRelicTagRuleResource) Attributes() map[string]*pluginsdk.Schema { + return map[string]*pluginsdk.Schema{} +} + +func (r NewRelicTagRuleResource) Create() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + var model NewRelicTagRuleModel + if err := metadata.Decode(&model); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + client := metadata.Client.NewRelic.TagRulesClient + monitorId, err := monitors.ParseMonitorID(model.NewRelicMonitorId) + if err != nil { + return err + } + + id := tagrules.NewTagRuleID(monitorId.SubscriptionId, monitorId.ResourceGroupName, monitorId.MonitorName, "default") + existing, err := client.Get(ctx, id) + if err != nil && !response.WasNotFound(existing.HttpResponse) { + return fmt.Errorf("checking for existing %s: %+v", id, err) + } + + if !response.WasNotFound(existing.HttpResponse) { + return metadata.ResourceRequiresImport(r.ResourceType(), id) + } + + logRules := tagrules.LogRules{ + FilteringTags: expandFilteringTagModelArray(model.LogTagFilter), + SendAadLogs: pointer.To(tagrules.SendAadLogsStatusDisabled), + SendActivityLogs: pointer.To(tagrules.SendActivityLogsStatusDisabled), + SendSubscriptionLogs: pointer.To(tagrules.SendSubscriptionLogsStatusDisabled), + } + + email, err := r.getEmail(ctx, metadata.Client.NewRelic.MonitorsClient, monitorId) + if err != nil { + return err + } + + metricRules := tagrules.MetricRules{ + FilteringTags: expandFilteringTagModelArray(model.MetricTagFilter), + SendMetrics: pointer.To(tagrules.SendMetricsStatusDisabled), + UserEmail: &email, + } + + if model.AadLogEnabled { + logRules.SendAadLogs = pointer.To(tagrules.SendAadLogsStatusEnabled) + } + + if model.ActivityLogEnabled { + logRules.SendActivityLogs = pointer.To(tagrules.SendActivityLogsStatusEnabled) + } + + if model.SubscriptionLogEnabled { + logRules.SendSubscriptionLogs = pointer.To(tagrules.SendSubscriptionLogsStatusEnabled) + } + + if model.MetricEnabled { + metricRules.SendMetrics = pointer.To(tagrules.SendMetricsStatusEnabled) + } + + properties := &tagrules.TagRule{ + Properties: tagrules.MonitoringTagRulesProperties{ + LogRules: &logRules, + MetricRules: &metricRules, + }, + } + + if err := client.CreateOrUpdateThenPoll(ctx, id, *properties); err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } + + metadata.SetID(id) + return nil + }, + } +} + +func (r NewRelicTagRuleResource) Update() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.NewRelic.TagRulesClient + + id, err := tagrules.ParseTagRuleID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + resp, err := client.Get(ctx, *id) + if err != nil { + return fmt.Errorf("retrieving %s: %+v", *id, err) + } + + properties := resp.Model + if properties == nil { + return fmt.Errorf("retrieving %s: properties was nil", id) + } + + if properties.Properties.LogRules == nil { + return fmt.Errorf("retrieving %s: log rules was nil", id) + } + + if properties.Properties.MetricRules == nil { + return fmt.Errorf("retrieving %s: metric rules was nil", id) + } + + var model NewRelicTagRuleModel + if err := metadata.Decode(&model); err != nil { + return fmt.Errorf("decoding: %+v", err) + } + + monitorId, err := monitors.ParseMonitorID(model.NewRelicMonitorId) + if err != nil { + return err + } + + email, err := r.getEmail(ctx, metadata.Client.NewRelic.MonitorsClient, monitorId) + if err != nil { + return err + } + + properties.Properties.MetricRules.UserEmail = &email + + if metadata.ResourceData.HasChange("azure_active_directory_log_enabled") { + if model.AadLogEnabled { + properties.Properties.LogRules.SendAadLogs = pointer.To(tagrules.SendAadLogsStatusEnabled) + } else { + properties.Properties.LogRules.SendAadLogs = pointer.To(tagrules.SendAadLogsStatusDisabled) + } + } + + if metadata.ResourceData.HasChange("activity_log_enabled") { + if model.ActivityLogEnabled { + properties.Properties.LogRules.SendActivityLogs = pointer.To(tagrules.SendActivityLogsStatusEnabled) + } else { + properties.Properties.LogRules.SendActivityLogs = pointer.To(tagrules.SendActivityLogsStatusDisabled) + } + } + + if metadata.ResourceData.HasChange("log_tag_filter") { + properties.Properties.LogRules.FilteringTags = expandFilteringTagModelArray(model.LogTagFilter) + } + + if metadata.ResourceData.HasChange("metric_enabled") { + if model.MetricEnabled { + properties.Properties.MetricRules.SendMetrics = pointer.To(tagrules.SendMetricsStatusEnabled) + } else { + properties.Properties.MetricRules.SendMetrics = pointer.To(tagrules.SendMetricsStatusDisabled) + } + } + + if metadata.ResourceData.HasChange("metric_tag_filter") { + properties.Properties.MetricRules.FilteringTags = expandFilteringTagModelArray(model.MetricTagFilter) + } + + if metadata.ResourceData.HasChange("subscription_log_enabled") { + if model.SubscriptionLogEnabled { + properties.Properties.LogRules.SendSubscriptionLogs = pointer.To(tagrules.SendSubscriptionLogsStatusEnabled) + } else { + properties.Properties.LogRules.SendSubscriptionLogs = pointer.To(tagrules.SendSubscriptionLogsStatusDisabled) + } + } + + if err := client.CreateOrUpdateThenPoll(ctx, *id, *properties); err != nil { + return fmt.Errorf("updating %s: %+v", *id, err) + } + + return nil + }, + } +} + +func (r NewRelicTagRuleResource) Read() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 5 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.NewRelic.TagRulesClient + + id, err := tagrules.ParseTagRuleID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + resp, err := client.Get(ctx, *id) + if err != nil { + if response.WasNotFound(resp.HttpResponse) { + return metadata.MarkAsGone(id) + } + + return fmt.Errorf("retrieving %s: %+v", *id, err) + } + + state := NewRelicTagRuleModel{ + NewRelicMonitorId: monitors.NewMonitorID(id.SubscriptionId, id.ResourceGroupName, id.MonitorName).ID(), + } + + if model := resp.Model; model != nil { + properties := &model.Properties + if properties.LogRules != nil { + state.AadLogEnabled = properties.LogRules.SendAadLogs != nil && *properties.LogRules.SendAadLogs == tagrules.SendAadLogsStatusEnabled + state.ActivityLogEnabled = properties.LogRules.SendActivityLogs != nil && *properties.LogRules.SendActivityLogs == tagrules.SendActivityLogsStatusEnabled + state.LogTagFilter = flattenFilteringTagModelArray(properties.LogRules.FilteringTags) + state.SubscriptionLogEnabled = properties.LogRules.SendSubscriptionLogs != nil && *properties.LogRules.SendSubscriptionLogs == tagrules.SendSubscriptionLogsStatusEnabled + } + + if properties.MetricRules != nil { + state.MetricEnabled = properties.MetricRules.SendMetrics != nil && *properties.MetricRules.SendMetrics == tagrules.SendMetricsStatusEnabled + state.MetricTagFilter = flattenFilteringTagModelArray(properties.MetricRules.FilteringTags) + } + } + + return metadata.Encode(&state) + }, + } +} + +func (r NewRelicTagRuleResource) Delete() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.NewRelic.TagRulesClient + + id, err := tagrules.ParseTagRuleID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + if err := client.DeleteThenPoll(ctx, *id); err != nil { + return fmt.Errorf("deleting %s: %+v", id, err) + } + + return nil + }, + } +} + +func (r NewRelicTagRuleResource) getEmail(ctx context.Context, monitorClient *monitors.MonitorsClient, monitorId *monitors.MonitorId) (string, error) { + monitor, err := monitorClient.Get(ctx, *monitorId) + if err != nil { + return "", fmt.Errorf("getting monitor: %+v", err) + } + + if monitor.Model == nil || monitor.Model.Properties.UserInfo == nil || monitor.Model.Properties.UserInfo.EmailAddress == nil || *monitor.Model.Properties.UserInfo.EmailAddress == "" { + return "", fmt.Errorf("failed to get user email address from monitor") + } + + return *monitor.Model.Properties.UserInfo.EmailAddress, nil +} + +func expandFilteringTagModelArray(inputList []FilteringTagModel) *[]tagrules.FilteringTag { + var outputList []tagrules.FilteringTag + for _, v := range inputList { + input := v + output := tagrules.FilteringTag{ + Action: &input.Action, + } + + if input.Name != "" { + output.Name = &input.Name + } + + if input.Value != "" { + output.Value = &input.Value + } + outputList = append(outputList, output) + } + return &outputList +} + +func flattenFilteringTagModelArray(inputList *[]tagrules.FilteringTag) []FilteringTagModel { + outputList := make([]FilteringTagModel, 0) + if inputList == nil { + return outputList + } + + for _, input := range *inputList { + outputList = append(outputList, FilteringTagModel{ + Action: pointer.From(input.Action), + Name: pointer.From(input.Name), + Value: pointer.From(input.Value), + }) + } + + return outputList +} diff --git a/internal/services/newrelic/new_relic_tag_rule_resource_test.go b/internal/services/newrelic/new_relic_tag_rule_resource_test.go new file mode 100644 index 0000000000000..84911ca81f953 --- /dev/null +++ b/internal/services/newrelic/new_relic_tag_rule_resource_test.go @@ -0,0 +1,243 @@ +package newrelic_test + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +type NewRelicTagRuleResource struct{} + +func TestAccNewRelicTagRule_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_new_relic_tag_rule", "test") + r := NewRelicTagRuleResource{} + email := "27362230-e2d8-4c73-9ee3-fdef83459ca3@example.com" + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data, email), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccNewRelicTagRule_requiresImport(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_new_relic_tag_rule", "test") + r := NewRelicTagRuleResource{} + email := "85b5febd-127d-4633-9c25-bcfea555af46@example.com" + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data, email), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + { + Config: r.requiresImport(data, email), + ExpectError: acceptance.RequiresImportError(data.ResourceType), + }, + }) +} + +func TestAccNewRelicTagRule_complete(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_new_relic_tag_rule", "test") + r := NewRelicTagRuleResource{} + email := "672d9312-65a7-484c-870d-94584850a423@example.com" + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.complete(data, email), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccNewRelicTagRule_update(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_new_relic_tag_rule", "test") + r := NewRelicTagRuleResource{} + email := "f0ff47c3-3aed-45b0-b239-260d9625045a@example.com" + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.complete(data, email), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + { + Config: r.update(data, email), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func (r NewRelicTagRuleResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { + id, err := tagrules.ParseTagRuleID(state.ID) + if err != nil { + return nil, err + } + + client := clients.NewRelic.TagRulesClient + resp, err := client.Get(ctx, *id) + if err != nil { + if response.WasNotFound(resp.HttpResponse) { + return utils.Bool(false), nil + } + return nil, fmt.Errorf("retrieving %s: %+v", id, err) + } + return utils.Bool(resp.Model != nil), nil +} + +func (r NewRelicTagRuleResource) template(data acceptance.TestData, email string) string { + year, month, day := time.Now().Add(time.Hour * 72).Date() + effectiveDate := time.Date(year, month, day, 0, 0, 0, 0, time.UTC).Format(time.RFC3339) + + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctest-rg-%[1]d" + location = "%[2]s" +} + +resource "azurerm_new_relic_monitor" "test" { + name = "acctest-nrm-%[1]d" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + + plan { + effective_date = "%[3]s" + } + + user { + email = "%[4]s" + first_name = "first" + last_name = "last" + phone_number = "123456" + } +} +`, data.RandomInteger, data.Locations.Primary, effectiveDate, email) +} + +func (r NewRelicTagRuleResource) basic(data acceptance.TestData, email string) string { + template := r.template(data, email) + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + %s + +resource "azurerm_new_relic_tag_rule" "test" { + monitor_id = azurerm_new_relic_monitor.test.id +} +`, template) +} + +func (r NewRelicTagRuleResource) requiresImport(data acceptance.TestData, email string) string { + config := r.basic(data, email) + return fmt.Sprintf(` + %s + +resource "azurerm_new_relic_tag_rule" "import" { + monitor_id = azurerm_new_relic_tag_rule.test.monitor_id +} +`, config) +} + +func (r NewRelicTagRuleResource) complete(data acceptance.TestData, email string) string { + template := r.template(data, email) + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + %s + +resource "azurerm_new_relic_tag_rule" "test" { + monitor_id = azurerm_new_relic_monitor.test.id + azure_active_directory_log_enabled = true + activity_log_enabled = true + metric_enabled = true + subscription_log_enabled = true + + log_tag_filter { + name = "log1" + action = "Include" + value = "log1" + } + + log_tag_filter { + name = "log2" + action = "Exclude" + value = "" + } + + metric_tag_filter { + name = "metric1" + action = "Include" + value = "metric1" + } + + metric_tag_filter { + name = "metric2" + action = "Exclude" + value = "" + } +} +`, template) +} + +func (r NewRelicTagRuleResource) update(data acceptance.TestData, email string) string { + template := r.template(data, email) + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + %s + +resource "azurerm_new_relic_tag_rule" "test" { + monitor_id = azurerm_new_relic_monitor.test.id + azure_active_directory_log_enabled = false + activity_log_enabled = false + metric_enabled = false + subscription_log_enabled = false + + log_tag_filter { + name = "log2" + action = "Exclude" + value = "" + } + + log_tag_filter { + name = "log1" + action = "Include" + value = "log1" + } + + metric_tag_filter { + name = "metric1" + action = "Exclude" + value = "" + } + + metric_tag_filter { + name = "metric2" + action = "Include" + value = "metric1" + } +} +`, template) +} diff --git a/internal/services/newrelic/registration.go b/internal/services/newrelic/registration.go index 46b5bb9cd8d67..824a2f9f343a5 100644 --- a/internal/services/newrelic/registration.go +++ b/internal/services/newrelic/registration.go @@ -27,6 +27,7 @@ func (r Registration) DataSources() []sdk.DataSource { func (r Registration) Resources() []sdk.Resource { return []sdk.Resource{ NewRelicMonitorResource{}, + NewRelicTagRuleResource{}, } } diff --git a/internal/services/orbital/contact_profile_resource.go b/internal/services/orbital/contact_profile_resource.go index 6c079a15059db..710919f3f14f9 100644 --- a/internal/services/orbital/contact_profile_resource.go +++ b/internal/services/orbital/contact_profile_resource.go @@ -115,7 +115,7 @@ func (r ContactProfileResource) Create() sdk.ResourceFunc { subscriptionId := metadata.Client.Account.SubscriptionId id := contactprofile.NewContactProfileID(subscriptionId, model.ResourceGroup, model.Name) - existing, err := client.ContactProfilesGet(ctx, id) + existing, err := client.Get(ctx, id) if err != nil && !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } @@ -152,7 +152,7 @@ func (r ContactProfileResource) Create() sdk.ResourceFunc { Tags: &model.Tags, } - if err := client.ContactProfilesCreateOrUpdateThenPoll(ctx, id, contactProfile); err != nil { + if err := client.CreateOrUpdateThenPoll(ctx, id, contactProfile); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } @@ -172,7 +172,7 @@ func (r ContactProfileResource) Read() sdk.ResourceFunc { return err } - resp, err := client.ContactProfilesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return metadata.MarkAsGone(id) @@ -220,7 +220,7 @@ func (r ContactProfileResource) Delete() sdk.ResourceFunc { metadata.Logger.Infof("deleting %s", *id) - if err := client.ContactProfilesDeleteThenPoll(ctx, *id); err != nil { + if err := client.DeleteThenPoll(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", *id, err) } @@ -273,7 +273,7 @@ func (r ContactProfileResource) Update() sdk.ResourceFunc { Tags: &state.Tags, } - if err := client.ContactProfilesCreateOrUpdateThenPoll(ctx, *id, contactProfile); err != nil { + if err := client.CreateOrUpdateThenPoll(ctx, *id, contactProfile); err != nil { return fmt.Errorf("updating %s: %+v", *id, err) } } diff --git a/internal/services/orbital/contact_profile_resource_test.go b/internal/services/orbital/contact_profile_resource_test.go index 0fc679b137721..e717adf3f711f 100644 --- a/internal/services/orbital/contact_profile_resource_test.go +++ b/internal/services/orbital/contact_profile_resource_test.go @@ -76,7 +76,7 @@ func (r ContactProfileResource) Exists(ctx context.Context, client *clients.Clie return nil, err } - resp, err := client.Orbital.ContactProfileClient.ContactProfilesGet(ctx, *id) + resp, err := client.Orbital.ContactProfileClient.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil diff --git a/internal/services/policy/policy_set_definition_resource.go b/internal/services/policy/policy_set_definition_resource.go index a632b9635cd49..748ceba5f7027 100644 --- a/internal/services/policy/policy_set_definition_resource.go +++ b/internal/services/policy/policy_set_definition_resource.go @@ -587,8 +587,9 @@ func expandAzureRMPolicySetDefinitionPolicyDefinitions(input []interface{}) (*[] for _, item := range input { v := item.(map[string]interface{}) - parameters := make(map[string]*policy.ParameterValuesValue) + var parameters map[string]*policy.ParameterValuesValue if p, ok := v["parameter_values"].(string); ok && p != "" { + parameters = make(map[string]*policy.ParameterValuesValue) if err := json.Unmarshal([]byte(p), ¶meters); err != nil { return nil, fmt.Errorf("unmarshalling `parameter_values`: %+v", err) } @@ -597,6 +598,7 @@ func expandAzureRMPolicySetDefinitionPolicyDefinitions(input []interface{}) (*[] if len(parameters) > 0 && len(p) > 0 { return nil, fmt.Errorf("cannot set both `parameters` and `parameter_values`") } + parameters = make(map[string]*policy.ParameterValuesValue) for k, value := range p { parameters[k] = &policy.ParameterValuesValue{ Value: value, diff --git a/internal/services/policy/policy_set_definition_resource_test.go b/internal/services/policy/policy_set_definition_resource_test.go index a42dddb995cf5..74634ccf5d34b 100644 --- a/internal/services/policy/policy_set_definition_resource_test.go +++ b/internal/services/policy/policy_set_definition_resource_test.go @@ -76,6 +76,13 @@ func TestAccAzureRMPolicySetDefinition_customNoParameter(t *testing.T) { ), }, data.ImportStep(), + { + Config: r.customNoParameterUpdate(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), }) } @@ -482,6 +489,24 @@ resource "azurerm_policy_set_definition" "test" { `, template, data.RandomInteger, data.RandomInteger) } +func (r PolicySetDefinitionResource) customNoParameterUpdate(data acceptance.TestData) string { + template := r.templateNoParameter(data) + return fmt.Sprintf(` +%s + +resource "azurerm_policy_set_definition" "test" { + name = "acctestPolSet-%d" + policy_type = "Custom" + display_name = "acctestPolSet-display-%d" + + policy_definition_reference { + policy_definition_id = azurerm_policy_definition.test.id + parameter_values = "{}" + } +} +`, template, data.RandomInteger, data.RandomInteger) +} + func (r PolicySetDefinitionResource) managementGroup(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { diff --git a/internal/services/policy/policy_virtual_machine_configuration_assignment_resource.go b/internal/services/policy/policy_virtual_machine_configuration_assignment_resource.go index fe26e4975a8d0..4c67a2a9eb88c 100644 --- a/internal/services/policy/policy_virtual_machine_configuration_assignment_resource.go +++ b/internal/services/policy/policy_virtual_machine_configuration_assignment_resource.go @@ -11,13 +11,12 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-sdk/resource-manager/guestconfiguration/2020-06-25/guestconfigurationassignments" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - computeParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" @@ -62,7 +61,7 @@ func resourcePolicyVirtualMachineConfigurationAssignmentSchema() map[string]*plu Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: computeValidate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, "configuration": { @@ -131,12 +130,12 @@ func resourcePolicyVirtualMachineConfigurationAssignmentCreateUpdate(d *pluginsd ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - vmId, err := computeParse.VirtualMachineID(d.Get("virtual_machine_id").(string)) + vmId, err := commonids.ParseVirtualMachineID(d.Get("virtual_machine_id").(string)) if err != nil { return err } - id := guestconfigurationassignments.NewProviders2GuestConfigurationAssignmentID(subscriptionId, vmId.ResourceGroup, vmId.Name, d.Get("name").(string)) + id := guestconfigurationassignments.NewProviders2GuestConfigurationAssignmentID(subscriptionId, vmId.ResourceGroupName, vmId.VirtualMachineName, d.Get("name").(string)) if d.IsNewResource() { existing, err := client.Get(ctx, id) @@ -200,7 +199,7 @@ func resourcePolicyVirtualMachineConfigurationAssignmentRead(d *pluginsdk.Resour return fmt.Errorf("retrieving %s: %+v", id, err) } - vmId := computeParse.NewVirtualMachineID(subscriptionId, id.ResourceGroupName, id.VirtualMachineName) + vmId := commonids.NewVirtualMachineID(subscriptionId, id.ResourceGroupName, id.VirtualMachineName) d.Set("name", id.GuestConfigurationAssignmentName) d.Set("virtual_machine_id", vmId.ID()) diff --git a/internal/services/policy/remediation_management_group.go b/internal/services/policy/remediation_management_group.go index dd28c7ed51efc..836ed9281fe0f 100644 --- a/internal/services/policy/remediation_management_group.go +++ b/internal/services/policy/remediation_management_group.go @@ -139,14 +139,14 @@ func resourceArmManagementGroupPolicyRemediationCreateUpdate(d *pluginsdk.Resour id := remediations.NewProviders2RemediationID(managementID.Name, d.Get("name").(string)) if d.IsNewResource() { - existing, err := client.RemediationsGetAtManagementGroup(ctx, id) + existing, err := client.GetAtManagementGroup(ctx, id) if err != nil { if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id.ID(), err) } } - if existing.Model != nil && existing.Model.Id != nil && *existing.Model.Id != "" { - return tf.ImportAsExistsError("azurerm_management_group_policy_remediation", *existing.Model.Id) + if existing.Model != nil { + return tf.ImportAsExistsError("azurerm_management_group_policy_remediation", id.ID()) } } @@ -154,7 +154,7 @@ func resourceArmManagementGroupPolicyRemediationCreateUpdate(d *pluginsdk.Resour Properties: readRemediationProperties(d), } - if _, err := client.RemediationsCreateOrUpdateAtManagementGroup(ctx, id, parameters); err != nil { + if _, err := client.CreateOrUpdateAtManagementGroup(ctx, id, parameters); err != nil { return fmt.Errorf("creating/updating %s: %+v", id.ID(), err) } @@ -173,7 +173,7 @@ func resourceArmManagementGroupPolicyRemediationRead(d *pluginsdk.ResourceData, return fmt.Errorf("reading Policy Remediation: %+v", err) } - resp, err := client.RemediationsGetAtManagementGroup(ctx, *id) + resp, err := client.GetAtManagementGroup(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[INFO] %s does not exist - removing from state", id.ID()) @@ -202,7 +202,7 @@ func resourceArmManagementGroupPolicyRemediationDelete(d *pluginsdk.ResourceData // we have to cancel the remediation first before deleting it when the resource_discovery_mode is set to ReEvaluateCompliance // therefore we first retrieve the remediation to see if the resource_discovery_mode is switched to ReEvaluateCompliance - existing, err := client.RemediationsGetAtManagementGroup(ctx, *id) + existing, err := client.GetAtManagementGroup(ctx, *id) if err != nil { if response.WasNotFound(existing.HttpResponse) { return nil @@ -212,7 +212,7 @@ func resourceArmManagementGroupPolicyRemediationDelete(d *pluginsdk.ResourceData if err := waitForRemediationToDelete(ctx, existing.Model.Properties, id.ID(), d.Timeout(pluginsdk.TimeoutDelete), func() error { - _, err := client.RemediationsCancelAtManagementGroup(ctx, *id) + _, err := client.CancelAtManagementGroup(ctx, *id) return err }, managementGroupPolicyRemediationCancellationRefreshFunc(ctx, client, *id), @@ -220,7 +220,7 @@ func resourceArmManagementGroupPolicyRemediationDelete(d *pluginsdk.ResourceData return err } - _, err = client.RemediationsDeleteAtManagementGroup(ctx, *id) + _, err = client.DeleteAtManagementGroup(ctx, *id) return err } @@ -228,7 +228,7 @@ func resourceArmManagementGroupPolicyRemediationDelete(d *pluginsdk.ResourceData func managementGroupPolicyRemediationCancellationRefreshFunc(ctx context.Context, client *remediations.RemediationsClient, id remediations.Providers2RemediationId) pluginsdk.StateRefreshFunc { return func() (interface{}, string, error) { - resp, err := client.RemediationsGetAtManagementGroup(ctx, id) + resp, err := client.GetAtManagementGroup(ctx, id) if err != nil { return nil, "", fmt.Errorf("issuing read request for %s: %+v", id.ID(), err) } diff --git a/internal/services/policy/remediation_management_group_test.go b/internal/services/policy/remediation_management_group_test.go index 671d658149ffc..96175e80f5d03 100644 --- a/internal/services/policy/remediation_management_group_test.go +++ b/internal/services/policy/remediation_management_group_test.go @@ -55,7 +55,7 @@ func (r ManagementGroupPolicyRemediationResource) Exists(ctx context.Context, cl return nil, err } - resp, err := client.Policy.RemediationsClient.RemediationsGetAtManagementGroup(ctx, *id) + resp, err := client.Policy.RemediationsClient.GetAtManagementGroup(ctx, *id) if err != nil || resp.Model == nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil diff --git a/internal/services/policy/remediation_resource.go b/internal/services/policy/remediation_resource.go index 15ebe62b8d181..10cd04558af63 100644 --- a/internal/services/policy/remediation_resource.go +++ b/internal/services/policy/remediation_resource.go @@ -134,14 +134,14 @@ func resourceArmResourcePolicyRemediationCreateUpdate(d *pluginsdk.ResourceData, id := remediations.NewScopedRemediationID(resourceId, d.Get("name").(string)) if d.IsNewResource() { - existing, err := client.RemediationsGetAtResource(ctx, id) + existing, err := client.GetAtResource(ctx, id) if err != nil { if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id.ID(), err) } } - if existing.Model != nil && existing.Model.Id != nil && *existing.Model.Id != "" { - return tf.ImportAsExistsError("azurerm_resource_policy_remediation", *existing.Model.Id) + if existing.Model != nil { + return tf.ImportAsExistsError("azurerm_resource_policy_remediation", id.ID()) } } @@ -149,7 +149,7 @@ func resourceArmResourcePolicyRemediationCreateUpdate(d *pluginsdk.ResourceData, Properties: readRemediationProperties(d), } - if _, err := client.RemediationsCreateOrUpdateAtResource(ctx, id, parameters); err != nil { + if _, err := client.CreateOrUpdateAtResource(ctx, id, parameters); err != nil { return fmt.Errorf("creating/updating %s: %+v", id.ID(), err) } @@ -167,7 +167,7 @@ func resourceArmResourcePolicyRemediationRead(d *pluginsdk.ResourceData, meta in if err != nil { return fmt.Errorf("parsing Policy Scoped Remediation ID: %+v", err) } - resp, err := client.RemediationsGetAtResource(ctx, *id) + resp, err := client.GetAtResource(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[INFO] %s does not exist - removing from state", id.ID()) @@ -195,7 +195,7 @@ func resourceArmResourcePolicyRemediationDelete(d *pluginsdk.ResourceData, meta // we have to cancel the remediation first before deleting it when the resource_discovery_mode is set to ReEvaluateCompliance // therefore we first retrieve the remediation to see if the resource_discovery_mode is switched to ReEvaluateCompliance - existing, err := client.RemediationsGetAtResource(ctx, *id) + existing, err := client.GetAtResource(ctx, *id) if err != nil { if response.WasNotFound(existing.HttpResponse) { return nil @@ -208,7 +208,7 @@ func resourceArmResourcePolicyRemediationDelete(d *pluginsdk.ResourceData, meta id.ID(), d.Timeout(pluginsdk.TimeoutDelete), func() error { - _, err := client.RemediationsCancelAtResource(ctx, *id) + _, err := client.CancelAtResource(ctx, *id) return err }, resourcePolicyRemediationCancellationRefreshFunc(ctx, client, *id), @@ -216,14 +216,14 @@ func resourceArmResourcePolicyRemediationDelete(d *pluginsdk.ResourceData, meta return err } - _, err = client.RemediationsDeleteAtResource(ctx, *id) + _, err = client.DeleteAtResource(ctx, *id) return err } func resourcePolicyRemediationCancellationRefreshFunc(ctx context.Context, client *remediations.RemediationsClient, id remediations.ScopedRemediationId) pluginsdk.StateRefreshFunc { return func() (interface{}, string, error) { - resp, err := client.RemediationsGetAtResource(ctx, id) + resp, err := client.GetAtResource(ctx, id) if err != nil { return nil, "", fmt.Errorf("issuing read request for %s: %+v", id.ID(), err) } diff --git a/internal/services/policy/remediation_resource_group.go b/internal/services/policy/remediation_resource_group.go index 34f3a6acd796c..68c6e9bc685ac 100644 --- a/internal/services/policy/remediation_resource_group.go +++ b/internal/services/policy/remediation_resource_group.go @@ -137,14 +137,14 @@ func resourceArmResourceGroupPolicyRemediationCreateUpdate(d *pluginsdk.Resource id := remediations.NewProviderRemediationID(resourceGroupId.SubscriptionId, resourceGroupId.ResourceGroup, d.Get("name").(string)) if d.IsNewResource() { - existing, err := client.RemediationsGetAtResourceGroup(ctx, id) + existing, err := client.GetAtResourceGroup(ctx, id) if err != nil { if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id.ID(), err) } } - if existing.Model != nil && existing.Model.Id != nil && *existing.Model.Id != "" { - return tf.ImportAsExistsError("azurerm_resource_group_policy_remediation", *existing.Model.Id) + if existing.Model != nil { + return tf.ImportAsExistsError("azurerm_resource_group_policy_remediation", id.ID()) } } @@ -152,7 +152,7 @@ func resourceArmResourceGroupPolicyRemediationCreateUpdate(d *pluginsdk.Resource Properties: readRemediationProperties(d), } - if _, err = client.RemediationsCreateOrUpdateAtResourceGroup(ctx, id, parameters); err != nil { + if _, err = client.CreateOrUpdateAtResourceGroup(ctx, id, parameters); err != nil { return fmt.Errorf("creating/updating %s: %+v", id.ID(), err) } @@ -173,7 +173,7 @@ func resourceArmResourceGroupPolicyRemediationRead(d *pluginsdk.ResourceData, me resourceGroupId := resourceParse.NewResourceGroupID(id.SubscriptionId, id.ResourceGroupName) - resp, err := client.RemediationsGetAtResourceGroup(ctx, *id) + resp, err := client.GetAtResourceGroup(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[INFO] %s does not exist - removing from state", id.ID()) @@ -201,7 +201,7 @@ func resourceArmResourceGroupPolicyRemediationDelete(d *pluginsdk.ResourceData, // we have to cancel the remediation first before deleting it when the resource_discovery_mode is set to ReEvaluateCompliance // therefore we first retrieve the remediation to see if the resource_discovery_mode is switched to ReEvaluateCompliance - existing, err := client.RemediationsGetAtResourceGroup(ctx, *id) + existing, err := client.GetAtResourceGroup(ctx, *id) if err != nil { if response.WasNotFound(existing.HttpResponse) { return nil @@ -211,7 +211,7 @@ func resourceArmResourceGroupPolicyRemediationDelete(d *pluginsdk.ResourceData, if err := waitForRemediationToDelete(ctx, existing.Model.Properties, id.ID(), d.Timeout(pluginsdk.TimeoutDelete), func() error { - _, err := client.RemediationsCancelAtResourceGroup(ctx, *id) + _, err := client.CancelAtResourceGroup(ctx, *id) return err }, resourceGroupPolicyRemediationCancellationRefreshFunc(ctx, client, *id), @@ -219,14 +219,14 @@ func resourceArmResourceGroupPolicyRemediationDelete(d *pluginsdk.ResourceData, return fmt.Errorf("waiting for remediation to delete %s: %+v", id, err) } - _, err = client.RemediationsDeleteAtResourceGroup(ctx, *id) + _, err = client.DeleteAtResourceGroup(ctx, *id) return err } func resourceGroupPolicyRemediationCancellationRefreshFunc(ctx context.Context, client *remediations.RemediationsClient, id remediations.ProviderRemediationId) pluginsdk.StateRefreshFunc { return func() (interface{}, string, error) { - resp, err := client.RemediationsGetAtResourceGroup(ctx, id) + resp, err := client.GetAtResourceGroup(ctx, id) if err != nil { return nil, "", fmt.Errorf("issuing read request for %s: %+v", id.ID(), err) } diff --git a/internal/services/policy/remediation_resource_group_test.go b/internal/services/policy/remediation_resource_group_test.go index da396062a2465..e2b3fe859e952 100644 --- a/internal/services/policy/remediation_resource_group_test.go +++ b/internal/services/policy/remediation_resource_group_test.go @@ -55,7 +55,7 @@ func (r ResourceGroupPolicyRemediationResource) Exists(ctx context.Context, clie return nil, err } - resp, err := client.Policy.RemediationsClient.RemediationsGetAtResourceGroup(ctx, *id) + resp, err := client.Policy.RemediationsClient.GetAtResourceGroup(ctx, *id) if err != nil || resp.Model == nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil diff --git a/internal/services/policy/remediation_resource_test.go b/internal/services/policy/remediation_resource_test.go index c46f506ef4373..81c79e9146776 100644 --- a/internal/services/policy/remediation_resource_test.go +++ b/internal/services/policy/remediation_resource_test.go @@ -55,15 +55,15 @@ func (r ResourcePolicyRemediationResource) Exists(ctx context.Context, client *c return nil, err } - resp, err := client.Policy.RemediationsClient.RemediationsGetAtResource(ctx, *id) - if err != nil || resp.Model == nil { + resp, err := client.Policy.RemediationsClient.GetAtResource(ctx, *id) + if err != nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil } return nil, fmt.Errorf("retrieving Policy Remediation %q: %+v", state.ID, err) } - return utils.Bool(resp.Model.Properties != nil), nil + return utils.Bool(resp.Model != nil), nil } func (r ResourcePolicyRemediationResource) template(data acceptance.TestData) string { diff --git a/internal/services/policy/remediation_subscription.go b/internal/services/policy/remediation_subscription.go index ba81212fc074a..86132bda7a94c 100644 --- a/internal/services/policy/remediation_subscription.go +++ b/internal/services/policy/remediation_subscription.go @@ -136,14 +136,14 @@ func resourceArmSubscriptionPolicyRemediationCreateUpdate(d *pluginsdk.ResourceD id := remediations.NewRemediationID(subscriptionId.SubscriptionId, d.Get("name").(string)) if d.IsNewResource() { - existing, err := client.RemediationsGetAtSubscription(ctx, id) + existing, err := client.GetAtSubscription(ctx, id) if err != nil { if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id.ID(), err) } } - if existing.Model != nil && existing.Model.Id != nil && *existing.Model.Id != "" { - return tf.ImportAsExistsError("azurerm_subscription_policy_remediation", *existing.Model.Id) + if existing.Model != nil { + return tf.ImportAsExistsError("azurerm_subscription_policy_remediation", id.ID()) } } @@ -151,7 +151,7 @@ func resourceArmSubscriptionPolicyRemediationCreateUpdate(d *pluginsdk.ResourceD Properties: readRemediationProperties(d), } - if _, err = client.RemediationsCreateOrUpdateAtSubscription(ctx, id, parameters); err != nil { + if _, err = client.CreateOrUpdateAtSubscription(ctx, id, parameters); err != nil { return fmt.Errorf("creating/updating %s: %+v", id.ID(), err) } @@ -172,7 +172,7 @@ func resourceArmSubscriptionPolicyRemediationRead(d *pluginsdk.ResourceData, met subscriptionId := commonids.NewSubscriptionID(id.SubscriptionId) - resp, err := client.RemediationsGetAtSubscription(ctx, *id) + resp, err := client.GetAtSubscription(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[INFO] %s does not exist - removing from state", id.ID()) @@ -200,7 +200,7 @@ func resourceArmSubscriptionPolicyRemediationDelete(d *pluginsdk.ResourceData, m // we have to cancel the remediation first before deleting it when the resource_discovery_mode is set to ReEvaluateCompliance // therefore we first retrieve the remediation to see if the resource_discovery_mode is switched to ReEvaluateCompliance - existing, err := client.RemediationsGetAtSubscription(ctx, *id) + existing, err := client.GetAtSubscription(ctx, *id) if err != nil { if response.WasNotFound(existing.HttpResponse) { return nil @@ -210,7 +210,7 @@ func resourceArmSubscriptionPolicyRemediationDelete(d *pluginsdk.ResourceData, m if err := waitForRemediationToDelete(ctx, existing.Model.Properties, id.ID(), d.Timeout(pluginsdk.TimeoutDelete), func() error { - _, err := client.RemediationsCancelAtSubscription(ctx, *id) + _, err := client.CancelAtSubscription(ctx, *id) return err }, subscriptionPolicyRemediationCancellationRefreshFunc(ctx, client, *id), @@ -218,14 +218,14 @@ func resourceArmSubscriptionPolicyRemediationDelete(d *pluginsdk.ResourceData, m return err } - _, err = client.RemediationsDeleteAtSubscription(ctx, *id) + _, err = client.DeleteAtSubscription(ctx, *id) return err } func subscriptionPolicyRemediationCancellationRefreshFunc(ctx context.Context, client *remediations.RemediationsClient, id remediations.RemediationId) pluginsdk.StateRefreshFunc { return func() (interface{}, string, error) { - resp, err := client.RemediationsGetAtSubscription(ctx, id) + resp, err := client.GetAtSubscription(ctx, id) if err != nil { return nil, "", fmt.Errorf("issuing read request for %s: %+v", id.ID(), err) } diff --git a/internal/services/policy/remediation_subscription_test.go b/internal/services/policy/remediation_subscription_test.go index 00a7aff49362c..1d8d7f572eaf0 100644 --- a/internal/services/policy/remediation_subscription_test.go +++ b/internal/services/policy/remediation_subscription_test.go @@ -55,7 +55,7 @@ func (r SubscriptionPolicyRemediationResource) Exists(ctx context.Context, clien return nil, err } - resp, err := client.Policy.RemediationsClient.RemediationsGetAtSubscription(ctx, *id) + resp, err := client.Policy.RemediationsClient.GetAtSubscription(ctx, *id) if err != nil || resp.Model == nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil diff --git a/internal/services/postgres/postgresql_flexible_server_resource.go b/internal/services/postgres/postgresql_flexible_server_resource.go index fc345581f7ec5..28f6be42abcdb 100644 --- a/internal/services/postgres/postgresql_flexible_server_resource.go +++ b/internal/services/postgres/postgresql_flexible_server_resource.go @@ -129,7 +129,7 @@ func resourcePostgresqlFlexibleServer() *pluginsdk.Resource { Type: pluginsdk.TypeInt, Optional: true, Computed: true, - ValidateFunc: validation.IntInSlice([]int{32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33553408}), + ValidateFunc: validation.IntInSlice([]int{32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4193280, 4194304, 8388608, 16777216, 33553408}), }, "version": { diff --git a/internal/services/postgres/validate/database_charset.go b/internal/services/postgres/validate/database_charset.go index 14dc69ecfc4b8..c249c9e2db1c2 100644 --- a/internal/services/postgres/validate/database_charset.go +++ b/internal/services/postgres/validate/database_charset.go @@ -12,7 +12,7 @@ func DatabaseCharset(v interface{}, k string) (warnings []string, errors []error value, ok := v.(string) if !ok { errors = append(errors, fmt.Errorf("expected type of %s to be string", k)) - return + return warnings, errors } // https://www.postgresql.org/docs/13/multibyte.html#CHARSET-TABLE diff --git a/internal/services/postgres/validate/postgresql_database_collation.go b/internal/services/postgres/validate/postgresql_database_collation.go index 280612a7d05c6..29f60928f1780 100644 --- a/internal/services/postgres/validate/postgresql_database_collation.go +++ b/internal/services/postgres/validate/postgresql_database_collation.go @@ -13,11 +13,11 @@ func PostgresqlDatabaseCollation(v interface{}, k string) (warnings []string, er originalValue, ok := v.(string) if !ok { errors = append(errors, fmt.Errorf("expected type of %s to be string", k)) - return + return warnings, errors } if _, isSpecialCase := specialCases[originalValue]; isSpecialCase { - return + return warnings, errors } value := strings.ToLower(originalValue) @@ -25,7 +25,7 @@ func PostgresqlDatabaseCollation(v interface{}, k string) (warnings []string, er // based on the string format, determine what we're validating if _, isLanguageCode := languageCodes[value]; isLanguageCode { - return + return warnings, errors } // either `en-GB`, `en_GB`, ja_001` or `jv_java_id` @@ -38,7 +38,7 @@ func PostgresqlDatabaseCollation(v interface{}, k string) (warnings []string, er containsUnderscore := strings.Contains(value, "_") if containsDash && containsUnderscore { errors = append(errors, databaseCollationDidNotMatchError(k, originalValue)) - return + return warnings, errors } var split []string @@ -49,14 +49,14 @@ func PostgresqlDatabaseCollation(v interface{}, k string) (warnings []string, er } if len(split) == 0 { errors = append(errors, databaseCollationDidNotMatchError(k, originalValue)) - return + return warnings, errors } // validate the language code is valid languageCode := split[0] if _, languageCodeIsValid := languageCodes[languageCode]; !languageCodeIsValid { errors = append(errors, databaseCollationDidNotMatchError(k, originalValue)) - return + return warnings, errors } // we can't do much about the locale, so we'll assume that's fine for now @@ -271,12 +271,13 @@ var languageCodes = map[string]struct{}{ } var specialCases = map[string]struct{}{ - ".utf8": {}, - "C": {}, - "POSIX": {}, - "English_United States.1252": {}, - "ucs_basic": {}, - "default": {}, + ".utf8": {}, + "C": {}, + "POSIX": {}, + "English_United Kingdom.1252": {}, + "English_United States.1252": {}, + "ucs_basic": {}, + "default": {}, } var databaseCollationDidNotMatchError = func(fieldName, value string) error { diff --git a/internal/services/postgres/validate/postgresql_database_collation_test.go b/internal/services/postgres/validate/postgresql_database_collation_test.go index e40362dfeca70..2c776a0287a16 100644 --- a/internal/services/postgres/validate/postgresql_database_collation_test.go +++ b/internal/services/postgres/validate/postgresql_database_collation_test.go @@ -136,13 +136,14 @@ func TestPostgresqlDatabaseCollation_LocalesThirdComponent(t *testing.T) { func TestPostgresqlDatabaseCollation_SpecialCases(t *testing.T) { cases := map[string]struct{}{ // these are special-cases - ".utf8": {}, - "C": {}, - "POSIX": {}, - "English_United States.1252": {}, - "En-US": {}, - "ucs_basic": {}, - "default": {}, + ".utf8": {}, + "C": {}, + "POSIX": {}, + "English_United Kingdom.1252": {}, + "English_United States.1252": {}, + "En-US": {}, + "ucs_basic": {}, + "default": {}, } for value := range cases { t.Run(fmt.Sprintf("Value %q", value), func(t *testing.T) { diff --git a/internal/services/postgres/validate/postgresql_flexible_server_database_collation.go b/internal/services/postgres/validate/postgresql_flexible_server_database_collation.go index 8f12a03b19507..817339cff537e 100644 --- a/internal/services/postgres/validate/postgresql_flexible_server_database_collation.go +++ b/internal/services/postgres/validate/postgresql_flexible_server_database_collation.go @@ -11,7 +11,7 @@ func PostgresqlFlexibleServerDatabaseCollation(v interface{}, k string) (warning value, ok := v.(string) if !ok { errors = append(errors, fmt.Errorf("expected type of %s to be string", k)) - return + return warnings, errors } collations := map[string]bool{ diff --git a/internal/services/recoveryservices/backup_protected_vm_resource.go b/internal/services/recoveryservices/backup_protected_vm_resource.go index df1f06b386551..912bfd31d41d1 100644 --- a/internal/services/recoveryservices/backup_protected_vm_resource.go +++ b/internal/services/recoveryservices/backup_protected_vm_resource.go @@ -15,13 +15,13 @@ import ( "github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2021-12-01/backup" // nolint: staticcheck "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protecteditems" "github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - vmParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/recoveryservices/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/suppress" @@ -85,13 +85,13 @@ func resourceRecoveryServicesBackupProtectedVMCreateUpdate(d *pluginsdk.Resource } // get VM name from id - parsedVmId, err := vmParse.VirtualMachineID(vmId) + parsedVmId, err := commonids.ParseVirtualMachineID(vmId) if err != nil { return fmt.Errorf("[ERROR] Unable to parse source_vm_id '%s': %+v", vmId, err) } - protectedItemName := fmt.Sprintf("VM;iaasvmcontainerv2;%s;%s", parsedVmId.ResourceGroup, parsedVmId.Name) - containerName := fmt.Sprintf("iaasvmcontainer;iaasvmcontainerv2;%s;%s", parsedVmId.ResourceGroup, parsedVmId.Name) + protectedItemName := fmt.Sprintf("VM;iaasvmcontainerv2;%s;%s", parsedVmId.ResourceGroupName, parsedVmId.VirtualMachineName) + containerName := fmt.Sprintf("iaasvmcontainer;iaasvmcontainerv2;%s;%s", parsedVmId.ResourceGroupName, parsedVmId.VirtualMachineName) log.Printf("[DEBUG] Creating/updating Azure Backup Protected VM %s (resource group %q)", protectedItemName, resourceGroup) @@ -114,7 +114,7 @@ func resourceRecoveryServicesBackupProtectedVMCreateUpdate(d *pluginsdk.Resource PolicyId: &policyId, WorkloadType: pointer.To(protecteditems.DataSourceTypeVM), SourceResourceId: pointer.To(vmId), - FriendlyName: pointer.To(parsedVmId.Name), + FriendlyName: pointer.To(parsedVmId.VirtualMachineName), ExtendedProperties: expandDiskExclusion(d), VirtualMachineId: pointer.To(vmId), }, diff --git a/internal/services/recoveryservices/recovery_services_vault_resource_guard_association_resource.go b/internal/services/recoveryservices/recovery_services_vault_resource_guard_association_resource.go index 0f50751c208f0..422abd6e572ab 100644 --- a/internal/services/recoveryservices/recovery_services_vault_resource_guard_association_resource.go +++ b/internal/services/recoveryservices/recovery_services_vault_resource_guard_association_resource.go @@ -48,10 +48,13 @@ func (r VaultGuardProxyResource) ResourceType() string { func (r VaultGuardProxyResource) Arguments() map[string]*schema.Schema { return map[string]*schema.Schema{ + // todo 4.0: remove the `name` field as the service only allow create `VaultProxy` "name": { + Deprecated: "The `name` field will be removed in v4.0 of the AzureRM Provider.", Type: pluginsdk.TypeString, - Required: true, + Optional: true, ForceNew: true, + Default: "VaultProxy", ValidateFunc: validation.StringIsNotEmpty, }, diff --git a/internal/services/recoveryservices/recovery_services_vault_resource_guard_association_resource_test.go b/internal/services/recoveryservices/recovery_services_vault_resource_guard_association_resource_test.go index dd396a8c3be57..e642fbbbca6bb 100644 --- a/internal/services/recoveryservices/recovery_services_vault_resource_guard_association_resource_test.go +++ b/internal/services/recoveryservices/recovery_services_vault_resource_guard_association_resource_test.go @@ -60,7 +60,7 @@ resource "azurerm_data_protection_resource_guard" "test" { } resource "azurerm_recovery_services_vault_resource_guard_association" "test" { - name = "tftest" + name = "VaultProxy" vault_id = azurerm_recovery_services_vault.test.id resource_guard_id = azurerm_data_protection_resource_guard.test.id } diff --git a/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go b/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go index acbe3078571e8..531538f052bb6 100644 --- a/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go +++ b/internal/services/recoveryservices/site_recovery_replicated_vm_resource.go @@ -22,7 +22,7 @@ import ( "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/capacityreservationgroups" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/proximityplacementgroups" "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/diskencryptionsets" - "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" + "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" "github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics" "github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies" "github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems" @@ -31,8 +31,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/features" - computeParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" keyVaultValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/keyvault/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/services/recoveryservices/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/services/recoveryservices/validate" @@ -287,12 +285,11 @@ func resourceSiteRecoveryReplicatedVM() *pluginsdk.Resource { "target_virtual_machine_scale_set_id": { Type: pluginsdk.TypeString, Optional: true, - ValidateFunc: computeValidate.VirtualMachineScaleSetID, + ValidateFunc: commonids.ValidateVirtualMachineScaleSetID, }, "network_interface": { Type: pluginsdk.TypeSet, // use set to avoid diff caused by different orders. - Set: resourceSiteRecoveryReplicatedVMNicHash, ConfigMode: pluginsdk.SchemaConfigModeAttr, Computed: true, Optional: true, @@ -817,7 +814,7 @@ func resourceSiteRecoveryReplicatedItemRead(d *pluginsdk.ResourceData, meta inte vmssId := "" if respVmssId := pointer.From(a2aDetails.RecoveryVirtualMachineScaleSetId); respVmssId != "" { - parsedVmssId, err := computeParse.VirtualMachineScaleSetIDInsensitively(respVmssId) + parsedVmssId, err := commonids.ParseVirtualMachineScaleSetIDInsensitively(respVmssId) if err != nil { return err } @@ -984,19 +981,6 @@ func resourceSiteRecoveryReplicatedVMDiskHash(v interface{}) int { return pluginsdk.HashString(buf.String()) } -// the default hash function will not ignore Option + Computed properties, which will cause diff. -func resourceSiteRecoveryReplicatedVMNicHash(v interface{}) int { - var buf bytes.Buffer - - if m, ok := v.(map[string]interface{}); ok { - if v, ok := m["source_network_interface_id"]; ok { - buf.WriteString(strings.ToLower(v.(string))) - } - } - - return pluginsdk.HashString(buf.String()) -} - func waitForReplicationToBeHealthy(ctx context.Context, d *pluginsdk.ResourceData, meta interface{}) (*replicationprotecteditems.ReplicationProtectedItem, error) { log.Printf("Waiting for Site Recover to replicate VM.") stateConf := &pluginsdk.StateChangeConf{ diff --git a/internal/services/redis/redis_cache_resource.go b/internal/services/redis/redis_cache_resource.go index ad1cb7445c130..ca6538e790eba 100644 --- a/internal/services/redis/redis_cache_resource.go +++ b/internal/services/redis/redis_cache_resource.go @@ -798,6 +798,7 @@ func expandRedisConfiguration(d *pluginsdk.ResourceData) (*redis.RedisCommonProp return output, nil } raw := input[0].(map[string]interface{}) + skuName := d.Get("sku_name").(string) if v := raw["maxclients"].(int); v > 0 { output.Maxclients = utils.String(strconv.Itoa(v)) @@ -825,8 +826,7 @@ func expandRedisConfiguration(d *pluginsdk.ResourceData) (*redis.RedisCommonProp // nolint : staticcheck v, valExists := d.GetOkExists("redis_configuration.0.rdb_backup_enabled") if valExists { - skuName := d.Get("sku_name").(string) - rdbBackupEnabled := raw["rdb_backup_enabled"].(bool) + rdbBackupEnabled := v.(bool) // rdb_backup_enabled is available when SKU is Premium if strings.EqualFold(skuName, string(redis.SkuNamePremium)) { @@ -861,7 +861,10 @@ func expandRedisConfiguration(d *pluginsdk.ResourceData) (*redis.RedisCommonProp // nolint : staticcheck v, valExists = d.GetOkExists("redis_configuration.0.aof_backup_enabled") if valExists { - output.AofBackupEnabled = utils.String(strconv.FormatBool(v.(bool))) + // aof_backup_enabled is available when SKU is Premium + if strings.EqualFold(skuName, string(redis.SkuNamePremium)) { + output.AofBackupEnabled = utils.String(strconv.FormatBool(v.(bool))) + } } if v := raw["aof_storage_connection_string_0"].(string); v != "" { diff --git a/internal/services/redis/redis_cache_resource_test.go b/internal/services/redis/redis_cache_resource_test.go index 082c8500e2297..fc3ca9daa6d3b 100644 --- a/internal/services/redis/redis_cache_resource_test.go +++ b/internal/services/redis/redis_cache_resource_test.go @@ -250,6 +250,27 @@ func TestAccRedisCache_AOFBackupEnabledDisabled(t *testing.T) { }) } +// ignore `aof_backup_enabled` if SKU is not `Premium` +func TestAccRedisCache_IgnoreAOFBackupWhenSKUNotPremium(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_redis_cache", "test") + r := RedisCacheResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.ignoreAOFBackupEnableWhenSKUNotPremium(data, "volatile-lru"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + { + Config: r.ignoreAOFBackupEnableWhenSKUNotPremium(data, "allkeys-lru"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + }) +} + func TestAccRedisCache_PatchSchedule(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_cache", "test") r := RedisCacheResource{} @@ -921,6 +942,60 @@ resource "azurerm_redis_cache" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString, data.RandomInteger) } +func (RedisCacheResource) ignoreAOFBackupEnableWhenSKUNotPremium(data acceptance.TestData, maxMemoryPolicy string) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_storage_account" "test" { + name = "acctestsa%s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_tier = "Standard" + account_replication_type = "GRS" + + tags = { + environment = "staging" + } +} + +resource "azurerm_storage_account" "test2" { + name = "acctestsa2%s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_tier = "Standard" + account_replication_type = "GRS" + + tags = { + environment = "staging" + } +} + +resource "azurerm_redis_cache" "test" { + name = "acctestRedis-%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + capacity = 1 + family = "C" + sku_name = "Basic" + enable_non_ssl_port = false + + redis_configuration { + aof_backup_enabled = false + maxmemory_reserved = 125 + maxmemory_delta = 125 + maxmemory_policy = "%s" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString, data.RandomInteger, maxMemoryPolicy) +} + func (RedisCacheResource) patchSchedule(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { diff --git a/internal/services/redisenterprise/client/client.go b/internal/services/redisenterprise/client/client.go index 86b6a5beca96f..a0c6baca068e4 100644 --- a/internal/services/redisenterprise/client/client.go +++ b/internal/services/redisenterprise/client/client.go @@ -6,8 +6,8 @@ package client import ( "fmt" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise" "github.com/hashicorp/terraform-provider-azurerm/internal/common" ) diff --git a/internal/services/redisenterprise/redis_enterprise_cluster_resource.go b/internal/services/redisenterprise/redis_enterprise_cluster_resource.go index fdec6a7da7ad6..60e51327d5cb0 100644 --- a/internal/services/redisenterprise/redis_enterprise_cluster_resource.go +++ b/internal/services/redisenterprise/redis_enterprise_cluster_resource.go @@ -16,7 +16,7 @@ import ( "github.com/hashicorp/go-azure-helpers/resourcemanager/location" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" "github.com/hashicorp/go-azure-helpers/resourcemanager/zones" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" diff --git a/internal/services/redisenterprise/redis_enterprise_cluster_resource_test.go b/internal/services/redisenterprise/redis_enterprise_cluster_resource_test.go index af000b59b835f..49e1ed83f42ea 100644 --- a/internal/services/redisenterprise/redis_enterprise_cluster_resource_test.go +++ b/internal/services/redisenterprise/redis_enterprise_cluster_resource_test.go @@ -9,7 +9,7 @@ import ( "testing" "github.com/hashicorp/go-azure-helpers/lang/response" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" @@ -91,34 +91,6 @@ func TestAccRedisEnterpriseCluster_update(t *testing.T) { }) } -func TestAccRedisEnterpriseCluster_support_westus3(t *testing.T) { - data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_cluster", "test") - r := RedisEnterpriseClusterResource{} - data.ResourceTest(t, r, []acceptance.TestStep{ - { - Config: r.supportNewRegions(data, "westus3"), - Check: acceptance.ComposeTestCheckFunc( - check.That(data.ResourceName).ExistsInAzure(r), - ), - }, - data.ImportStep(), - }) -} - -func TestAccRedisEnterpriseCluster_support_northcentralus(t *testing.T) { - data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_cluster", "test") - r := RedisEnterpriseClusterResource{} - data.ResourceTest(t, r, []acceptance.TestStep{ - { - Config: r.supportNewRegions(data, "northcentralus"), - Check: acceptance.ComposeTestCheckFunc( - check.That(data.ResourceName).ExistsInAzure(r), - ), - }, - data.ImportStep(), - }) -} - func (r RedisEnterpriseClusterResource) Exists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := redisenterprise.ParseRedisEnterpriseID(state.ID) if err != nil { @@ -218,24 +190,3 @@ resource "azurerm_redis_enterprise_cluster" "test" { } `, template, data.RandomInteger) } - -func (r RedisEnterpriseClusterResource) supportNewRegions(data acceptance.TestData, region string) string { - return fmt.Sprintf(` -provider "azurerm" { - features {} -} - -resource "azurerm_resource_group" "test" { - name = "acctestRG-redisEnterprise-%[1]d" - location = "%[2]s" -} - -resource "azurerm_redis_enterprise_cluster" "test" { - name = "acctest-rec-%[1]d" - resource_group_name = azurerm_resource_group.test.name - location = azurerm_resource_group.test.location - - sku_name = "Enterprise_E100-2" -} -`, data.RandomInteger, region) -} diff --git a/internal/services/redisenterprise/redis_enterprise_database_data_source.go b/internal/services/redisenterprise/redis_enterprise_database_data_source.go index 16fe64f1522f9..e1c6bda049895 100644 --- a/internal/services/redisenterprise/redis_enterprise_database_data_source.go +++ b/internal/services/redisenterprise/redis_enterprise_database_data_source.go @@ -9,8 +9,8 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/features" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" diff --git a/internal/services/redisenterprise/redis_enterprise_database_data_source_test.go b/internal/services/redisenterprise/redis_enterprise_database_data_source_test.go index 4399db34513fc..3873408ee6008 100644 --- a/internal/services/redisenterprise/redis_enterprise_database_data_source_test.go +++ b/internal/services/redisenterprise/redis_enterprise_database_data_source_test.go @@ -66,7 +66,7 @@ data "azurerm_redis_enterprise_database" "test" { resource_group_name = azurerm_resource_group.test.name cluster_id = azurerm_redis_enterprise_cluster.test.id } -`, RedisenterpriseDatabaseResource{}.basic(data)) +`, RedisEnterpriseDatabaseResource{}.basic(data)) } func (r RedisEnterpriseDatabaseDataSource) dataSourceGeoDatabase(data acceptance.TestData) string { @@ -80,5 +80,5 @@ data "azurerm_redis_enterprise_database" "test" { resource_group_name = azurerm_resource_group.test.name cluster_id = azurerm_redis_enterprise_cluster.test.id } -`, RedisenterpriseDatabaseResource{}.geoDatabase(data)) +`, RedisEnterpriseDatabaseResource{}.geoDatabase(data)) } diff --git a/internal/services/redisenterprise/redis_enterprise_database_resource.go b/internal/services/redisenterprise/redis_enterprise_database_resource.go index 9e79d531b37e4..123a4dc3533ea 100644 --- a/internal/services/redisenterprise/redis_enterprise_database_resource.go +++ b/internal/services/redisenterprise/redis_enterprise_database_resource.go @@ -12,8 +12,8 @@ import ( "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" "github.com/hashicorp/terraform-provider-azurerm/internal/features" diff --git a/internal/services/redisenterprise/redis_enterprise_database_resource_test.go b/internal/services/redisenterprise/redis_enterprise_database_resource_test.go index b1eade598c46c..c0e175104c917 100644 --- a/internal/services/redisenterprise/redis_enterprise_database_resource_test.go +++ b/internal/services/redisenterprise/redis_enterprise_database_resource_test.go @@ -9,7 +9,7 @@ import ( "testing" "github.com/hashicorp/go-azure-helpers/lang/response" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" @@ -17,11 +17,11 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/utils" ) -type RedisenterpriseDatabaseResource struct{} +type RedisEnterpriseDatabaseResource struct{} -func TestRedisEnterpriseDatabase_basic(t *testing.T) { +func TestAccRedisEnterpriseDatabase_basic(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_database", "test") - r := RedisenterpriseDatabaseResource{} + r := RedisEnterpriseDatabaseResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.basic(data), @@ -33,9 +33,9 @@ func TestRedisEnterpriseDatabase_basic(t *testing.T) { }) } -func TestRedisEnterpriseDatabase_requiresImport(t *testing.T) { +func TestAccRedisEnterpriseDatabase_requiresImport(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_database", "test") - r := RedisenterpriseDatabaseResource{} + r := RedisEnterpriseDatabaseResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.basic(data), @@ -47,9 +47,9 @@ func TestRedisEnterpriseDatabase_requiresImport(t *testing.T) { }) } -func TestRedisEnterpriseDatabase_complete(t *testing.T) { +func TestAccRedisEnterpriseDatabase_complete(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_database", "test") - r := RedisenterpriseDatabaseResource{} + r := RedisEnterpriseDatabaseResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.complete(data), @@ -61,9 +61,9 @@ func TestRedisEnterpriseDatabase_complete(t *testing.T) { }) } -func TestRedisEnterpriseDatabase_geoDatabase(t *testing.T) { +func TestAccRedisEnterpriseDatabase_geoDatabase(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_database", "test") - r := RedisenterpriseDatabaseResource{} + r := RedisEnterpriseDatabaseResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.geoDatabase(data), @@ -75,9 +75,9 @@ func TestRedisEnterpriseDatabase_geoDatabase(t *testing.T) { }) } -func TestRedisEnterpriseDatabase_geoDatabaseOtherEvictionPolicy(t *testing.T) { +func TestAccRedisEnterpriseDatabase_geoDatabaseOtherEvictionPolicy(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_database", "test") - r := RedisenterpriseDatabaseResource{} + r := RedisEnterpriseDatabaseResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.geoDatabaseOtherEvictionPolicy(data), @@ -89,9 +89,9 @@ func TestRedisEnterpriseDatabase_geoDatabaseOtherEvictionPolicy(t *testing.T) { }) } -func TestRedisEnterpriseDatabase_geoDatabaseModule(t *testing.T) { +func TestAccRedisEnterpriseDatabase_geoDatabaseModule(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_database", "test") - r := RedisenterpriseDatabaseResource{} + r := RedisEnterpriseDatabaseResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.geoDatabasewithModuleEnabled(data), @@ -103,9 +103,9 @@ func TestRedisEnterpriseDatabase_geoDatabaseModule(t *testing.T) { }) } -func TestRedisEnterpriseDatabase_geoDatabaseWithRedisJsonModule(t *testing.T) { +func TestAccRedisEnterpriseDatabase_geoDatabaseWithRedisJsonModule(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_database", "test") - r := RedisenterpriseDatabaseResource{} + r := RedisEnterpriseDatabaseResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.geoDatabasewithRedisJsonModuleEnabled(data), @@ -117,9 +117,9 @@ func TestRedisEnterpriseDatabase_geoDatabaseWithRedisJsonModule(t *testing.T) { }) } -func TestRedisEnterpriseDatabase_unlinkDatabase(t *testing.T) { +func TestAccRedisEnterpriseDatabase_unlinkDatabase(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_redis_enterprise_database", "test") - r := RedisenterpriseDatabaseResource{} + r := RedisEnterpriseDatabaseResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.geoDatabase(data), @@ -138,7 +138,7 @@ func TestRedisEnterpriseDatabase_unlinkDatabase(t *testing.T) { }) } -func (r RedisenterpriseDatabaseResource) Exists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { +func (r RedisEnterpriseDatabaseResource) Exists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := databases.ParseDatabaseID(state.ID) if err != nil { return nil, err @@ -156,7 +156,7 @@ func (r RedisenterpriseDatabaseResource) Exists(ctx context.Context, client *cli return utils.Bool(true), nil } -func (r RedisenterpriseDatabaseResource) template(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) template(data acceptance.TestData) string { // I have to hardcode the location because some features are not currently available in all regions return fmt.Sprintf(` provider "azurerm" { @@ -192,7 +192,7 @@ resource "azurerm_redis_enterprise_cluster" "test2" { `, data.RandomInteger, "eastus", data.RandomInteger, data.RandomInteger, data.RandomInteger) } -func (r RedisenterpriseDatabaseResource) basic(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) basic(data acceptance.TestData) string { template := r.template(data) return fmt.Sprintf(` %s @@ -205,7 +205,7 @@ resource "azurerm_redis_enterprise_database" "test" { `, template) } -func (r RedisenterpriseDatabaseResource) requiresImport(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) requiresImport(data acceptance.TestData) string { config := r.basic(data) return fmt.Sprintf(` %s @@ -218,7 +218,7 @@ resource "azurerm_redis_enterprise_database" "import" { `, config) } -func (r RedisenterpriseDatabaseResource) complete(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) complete(data acceptance.TestData) string { template := r.template(data) return fmt.Sprintf(` %s @@ -256,7 +256,7 @@ resource "azurerm_redis_enterprise_database" "test" { `, template) } -func (r RedisenterpriseDatabaseResource) geoDatabase(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) geoDatabase(data acceptance.TestData) string { return fmt.Sprintf(` %s resource "azurerm_redis_enterprise_database" "test" { @@ -278,7 +278,7 @@ resource "azurerm_redis_enterprise_database" "test" { `, r.template(data)) } -func (r RedisenterpriseDatabaseResource) geoDatabaseOtherEvictionPolicy(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) geoDatabaseOtherEvictionPolicy(data acceptance.TestData) string { return fmt.Sprintf(` %s resource "azurerm_redis_enterprise_database" "test" { @@ -300,7 +300,7 @@ resource "azurerm_redis_enterprise_database" "test" { `, r.template(data)) } -func (r RedisenterpriseDatabaseResource) unlinkDatabase(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) unlinkDatabase(data acceptance.TestData) string { return fmt.Sprintf(` %s resource "azurerm_redis_enterprise_database" "test" { @@ -321,7 +321,7 @@ resource "azurerm_redis_enterprise_database" "test" { `, r.template(data)) } -func (r RedisenterpriseDatabaseResource) geoDatabasewithModuleEnabled(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) geoDatabasewithModuleEnabled(data acceptance.TestData) string { return fmt.Sprintf(` %s resource "azurerm_redis_enterprise_database" "test" { @@ -346,7 +346,7 @@ resource "azurerm_redis_enterprise_database" "test" { `, r.template(data)) } -func (r RedisenterpriseDatabaseResource) geoDatabasewithRedisJsonModuleEnabled(data acceptance.TestData) string { +func (r RedisEnterpriseDatabaseResource) geoDatabasewithRedisJsonModuleEnabled(data acceptance.TestData) string { return fmt.Sprintf(` %s resource "azurerm_redis_enterprise_database" "test" { diff --git a/internal/services/redisenterprise/validate/redis_enterprise_cluster_location_flash_sku_support.go b/internal/services/redisenterprise/validate/redis_enterprise_cluster_location_flash_sku_support.go index 79f449c2e2e49..4eac0f8ba33a9 100644 --- a/internal/services/redisenterprise/validate/redis_enterprise_cluster_location_flash_sku_support.go +++ b/internal/services/redisenterprise/validate/redis_enterprise_cluster_location_flash_sku_support.go @@ -37,7 +37,6 @@ func invalidRedisEnterpriseClusterFlashLocations() []string { func friendlyInvalidRedisEnterpriseClusterFlashLocations() []string { return []string{ "Australia Southeast", - "Brazil South", "Central US", "Central US EUAP", "East Asia", diff --git a/internal/services/redisenterprise/validate/redis_enterprise_cluster_sku_name.go b/internal/services/redisenterprise/validate/redis_enterprise_cluster_sku_name.go index dd052671f12f0..cd694156d26a5 100644 --- a/internal/services/redisenterprise/validate/redis_enterprise_cluster_sku_name.go +++ b/internal/services/redisenterprise/validate/redis_enterprise_cluster_sku_name.go @@ -8,7 +8,7 @@ import ( "strconv" "strings" - "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise" + "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" ) diff --git a/internal/services/securitycenter/advanced_threat_protection_resource.go b/internal/services/securitycenter/advanced_threat_protection_resource.go index 011f643787a95..e244afc39dc3a 100644 --- a/internal/services/securitycenter/advanced_threat_protection_resource.go +++ b/internal/services/securitycenter/advanced_threat_protection_resource.go @@ -88,6 +88,39 @@ func resourceAdvancedThreatProtectionCreateUpdate(d *pluginsdk.ResourceData, met return fmt.Errorf("updating Advanced Threat protection for %q: %+v", id.TargetResourceID, err) } + deadline, ok := ctx.Deadline() + if !ok { + return fmt.Errorf("internal-error: context had no deadline") + } + + // the API appears to be eventually consistent, tracked on https://github.com/Azure/azure-rest-api-specs/issues/25232 + stateConf := &pluginsdk.StateChangeConf{ + Pending: []string{"diff"}, + Target: []string{"consistent"}, + Refresh: func() (result interface{}, state string, err error) { + resp, err := client.Get(ctx, id.TargetResourceID) + if err != nil { + return resp, "error", err + } + if atpp := resp.AdvancedThreatProtectionProperties; atpp != nil { + respEnabled := atpp.IsEnabled != nil && *atpp.IsEnabled + if respEnabled == d.Get("enabled").(bool) { + return resp, "consistent", nil + } else { + return resp, "diff", nil + } + } + return resp, "error", fmt.Errorf("Properties was nil") + }, + MinTimeout: 1 * time.Minute, + ContinuousTargetOccurence: 3, + Timeout: time.Until(deadline), + } + + if _, err := stateConf.WaitForStateContext(ctx); err != nil { + return fmt.Errorf("waiting for provisioning state of advanced threat protection: %+v", err) + } + d.SetId(id.ID()) return resourceAdvancedThreatProtectionRead(d, meta) } diff --git a/internal/services/securitycenter/client/client.go b/internal/services/securitycenter/client/client.go index 4f02c279e4a44..938e0365b3798 100644 --- a/internal/services/securitycenter/client/client.go +++ b/internal/services/securitycenter/client/client.go @@ -5,13 +5,14 @@ package client import ( "github.com/Azure/azure-sdk-for-go/services/preview/security/mgmt/v3.0/security" // nolint: staticcheck + "github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata" pricings_v2023_01_01 "github.com/hashicorp/go-azure-sdk/resource-manager/security/2023-01-01/pricings" "github.com/hashicorp/terraform-provider-azurerm/internal/common" ) type Client struct { AssessmentsClient *security.AssessmentsClient - AssessmentsMetadataClient *security.AssessmentsMetadataClient + AssessmentsMetadataClient *assessmentsmetadata.AssessmentsMetadataClient ContactsClient *security.ContactsClient DeviceSecurityGroupsClient *security.DeviceSecurityGroupsClient IotSecuritySolutionClient *security.IotSecuritySolutionClient @@ -30,7 +31,7 @@ func NewClient(o *common.ClientOptions) *Client { AssessmentsClient := security.NewAssessmentsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId, ascLocation) o.ConfigureClient(&AssessmentsClient.Client, o.ResourceManagerAuthorizer) - AssessmentsMetadataClient := security.NewAssessmentsMetadataClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId, ascLocation) + AssessmentsMetadataClient := assessmentsmetadata.NewAssessmentsMetadataClientWithBaseURI(o.ResourceManagerEndpoint) o.ConfigureClient(&AssessmentsMetadataClient.Client, o.ResourceManagerAuthorizer) ContactsClient := security.NewContactsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId, ascLocation) diff --git a/internal/services/securitycenter/security_center_assessment_policy_resource.go b/internal/services/securitycenter/security_center_assessment_policy_resource.go index 8a655a2f0772c..4b72127d4ac0a 100644 --- a/internal/services/securitycenter/security_center_assessment_policy_resource.go +++ b/internal/services/securitycenter/security_center_assessment_policy_resource.go @@ -10,9 +10,11 @@ import ( "github.com/Azure/azure-sdk-for-go/services/preview/security/mgmt/v3.0/security" // nolint: staticcheck "github.com/google/uuid" + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/securitycenter/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" @@ -34,7 +36,7 @@ func resourceArmSecurityCenterAssessmentPolicy() *pluginsdk.Resource { }, Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { - _, err := parse.AssessmentMetadataID(id) + _, err := assessmentsmetadata.ParseProviderAssessmentMetadataID(id) return err }), @@ -142,57 +144,57 @@ func resourceArmSecurityCenterAssessmentPolicyCreate(d *pluginsdk.ResourceData, name := uuid.New().String() - id := parse.NewAssessmentMetadataID(subscriptionId, name) + id := assessmentsmetadata.NewProviderAssessmentMetadataID(subscriptionId, name) - existing, err := client.GetInSubscription(ctx, name) + existing, err := client.GetInSubscription(ctx, id) if err != nil { - if !utils.ResponseWasNotFound(existing.Response) { + if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for presence of existing %s: %+v", id, err) } } - if !utils.ResponseWasNotFound(existing.Response) { + if !response.WasNotFound(existing.HttpResponse) { return tf.ImportAsExistsError("azurerm_security_center_assessment_policy", id.ID()) } - params := security.AssessmentMetadata{ - AssessmentMetadataProperties: &security.AssessmentMetadataProperties{ - AssessmentType: security.CustomerManaged, - Description: utils.String(d.Get("description").(string)), - DisplayName: utils.String(d.Get("display_name").(string)), - Severity: security.Severity(d.Get("severity").(string)), + params := assessmentsmetadata.SecurityAssessmentMetadataResponse{ + Properties: &assessmentsmetadata.SecurityAssessmentMetadataPropertiesResponse{ + AssessmentType: assessmentsmetadata.AssessmentTypeCustomerManaged, + Description: pointer.To(d.Get("description").(string)), + DisplayName: d.Get("display_name").(string), + Severity: assessmentsmetadata.Severity(d.Get("severity").(string)), }, } if v, ok := d.GetOk("categories"); ok { - categories := make([]security.Categories, 0) + categories := make([]assessmentsmetadata.Categories, 0) for _, item := range v.(*pluginsdk.Set).List() { - categories = append(categories, (security.Categories)(item.(string))) + categories = append(categories, (assessmentsmetadata.Categories)(item.(string))) } - params.AssessmentMetadataProperties.Categories = &categories + params.Properties.Categories = &categories } if v, ok := d.GetOk("threats"); ok { - threats := make([]security.Threats, 0) + threats := make([]assessmentsmetadata.Threats, 0) for _, item := range v.(*pluginsdk.Set).List() { - threats = append(threats, (security.Threats)(item.(string))) + threats = append(threats, assessmentsmetadata.Threats(item.(string))) } - params.AssessmentMetadataProperties.Threats = &threats + params.Properties.Threats = &threats } if v, ok := d.GetOk("implementation_effort"); ok { - params.AssessmentMetadataProperties.ImplementationEffort = security.ImplementationEffort(v.(string)) + params.Properties.ImplementationEffort = pointer.To(assessmentsmetadata.ImplementationEffort(v.(string))) } if v, ok := d.GetOk("remediation_description"); ok { - params.AssessmentMetadataProperties.RemediationDescription = utils.String(v.(string)) + params.Properties.RemediationDescription = pointer.To(v.(string)) } if v, ok := d.GetOk("user_impact"); ok { - params.AssessmentMetadataProperties.UserImpact = security.UserImpact(v.(string)) + params.Properties.UserImpact = pointer.To(assessmentsmetadata.UserImpact(v.(string))) } - if _, err := client.CreateInSubscription(ctx, name, params); err != nil { + if _, err := client.CreateInSubscription(ctx, id, params); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } @@ -206,46 +208,48 @@ func resourceArmSecurityCenterAssessmentPolicyRead(d *pluginsdk.ResourceData, me ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.AssessmentMetadataID(d.Id()) + id, err := assessmentsmetadata.ParseProviderAssessmentMetadataID(d.Id()) if err != nil { return err } - resp, err := client.GetInSubscription(ctx, id.AssessmentMetadataName) + resp, err := client.GetInSubscription(ctx, *id) if err != nil { - if utils.ResponseWasNotFound(resp.Response) { - log.Printf("[INFO] %s does not exist - removing from state", id) + if response.WasNotFound(resp.HttpResponse) { + log.Printf("[INFO] %s does not exist - removing from state", *id) d.SetId("") return nil } - return fmt.Errorf("retrieving %s: %+v", id, err) + return fmt.Errorf("retrieving %s: %+v", *id, err) } d.Set("name", id.AssessmentMetadataName) - if props := resp.AssessmentMetadataProperties; props != nil { - d.Set("description", props.Description) - d.Set("display_name", props.DisplayName) - d.Set("severity", string(props.Severity)) - d.Set("implementation_effort", string(props.ImplementationEffort)) - d.Set("remediation_description", props.RemediationDescription) - d.Set("user_impact", string(props.UserImpact)) - - categories := make([]string, 0) - if props.Categories != nil { - for _, item := range *props.Categories { - categories = append(categories, string(item)) + if model := resp.Model; model != nil { + if props := model.Properties; props != nil { + d.Set("description", pointer.From(props.Description)) + d.Set("display_name", props.DisplayName) + d.Set("severity", string(props.Severity)) + d.Set("implementation_effort", string(pointer.From(props.ImplementationEffort))) + d.Set("remediation_description", pointer.From(props.RemediationDescription)) + d.Set("user_impact", string(pointer.From(props.UserImpact))) + + categories := make([]string, 0) + if props.Categories != nil { + for _, item := range *props.Categories { + categories = append(categories, string(item)) + } } - } - d.Set("categories", utils.FlattenStringSlice(&categories)) + d.Set("categories", utils.FlattenStringSlice(&categories)) - threats := make([]string, 0) - if props.Threats != nil { - for _, item := range *props.Threats { - threats = append(threats, string(item)) + threats := make([]string, 0) + if props.Threats != nil { + for _, item := range *props.Threats { + threats = append(threats, string(item)) + } } + d.Set("threats", utils.FlattenStringSlice(&threats)) } - d.Set("threats", utils.FlattenStringSlice(&threats)) } return nil @@ -256,61 +260,61 @@ func resourceArmSecurityCenterAssessmentPolicyUpdate(d *pluginsdk.ResourceData, ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.AssessmentMetadataID(d.Id()) + id, err := assessmentsmetadata.ParseProviderAssessmentMetadataID(d.Id()) if err != nil { return err } - existing, err := client.GetInSubscription(ctx, id.AssessmentMetadataName) + existing, err := client.GetInSubscription(ctx, *id) if err != nil { - return fmt.Errorf("retrieving %s: %+v", id, err) + return fmt.Errorf("retrieving %s: %+v", *id, err) } - if existing.AssessmentMetadataProperties == nil { - return fmt.Errorf("retrieving %s: `assessmentMetadataProperties` was nil", id) + if existing.Model == nil || existing.Model.Properties == nil { + return fmt.Errorf("retrieving %s: `properties` was nil", *id) } if d.HasChange("description") { - existing.AssessmentMetadataProperties.Description = utils.String(d.Get("description").(string)) + existing.Model.Properties.Description = pointer.To(d.Get("description").(string)) } if d.HasChange("display_name") { - existing.AssessmentMetadataProperties.DisplayName = utils.String(d.Get("display_name").(string)) + existing.Model.Properties.DisplayName = d.Get("display_name").(string) } if d.HasChange("severity") { - existing.AssessmentMetadataProperties.Severity = security.Severity(d.Get("severity").(string)) + existing.Model.Properties.Severity = assessmentsmetadata.Severity(d.Get("severity").(string)) } if d.HasChange("categories") { - categories := make([]security.Categories, 0) + categories := make([]assessmentsmetadata.Categories, 0) for _, item := range d.Get("categories").(*pluginsdk.Set).List() { - categories = append(categories, (security.Categories)(item.(string))) + categories = append(categories, assessmentsmetadata.Categories(item.(string))) } - existing.AssessmentMetadataProperties.Categories = &categories + existing.Model.Properties.Categories = &categories } if d.HasChange("threats") { - threats := make([]security.Threats, 0) + threats := make([]assessmentsmetadata.Threats, 0) for _, item := range d.Get("threats").(*pluginsdk.Set).List() { - threats = append(threats, (security.Threats)(item.(string))) + threats = append(threats, (assessmentsmetadata.Threats)(item.(string))) } - existing.AssessmentMetadataProperties.Threats = &threats + existing.Model.Properties.Threats = &threats } if d.HasChange("implementation_effort") { - existing.AssessmentMetadataProperties.ImplementationEffort = security.ImplementationEffort(d.Get("implementation_effort").(string)) + existing.Model.Properties.ImplementationEffort = pointer.To(assessmentsmetadata.ImplementationEffort(d.Get("implementation_effort").(string))) } if d.HasChange("remediation_description") { - existing.AssessmentMetadataProperties.RemediationDescription = utils.String(d.Get("remediation_description").(string)) + existing.Model.Properties.RemediationDescription = utils.String(d.Get("remediation_description").(string)) } if d.HasChange("user_impact") { - existing.AssessmentMetadataProperties.UserImpact = security.UserImpact(d.Get("user_impact").(string)) + existing.Model.Properties.UserImpact = pointer.To(assessmentsmetadata.UserImpact(d.Get("user_impact").(string))) } - if _, err := client.CreateInSubscription(ctx, id.AssessmentMetadataName, existing); err != nil { - return fmt.Errorf("updating %s: %+v", id, err) + if _, err := client.CreateInSubscription(ctx, *id, *existing.Model); err != nil { + return fmt.Errorf("updating %s: %+v", *id, err) } return resourceArmSecurityCenterAssessmentPolicyRead(d, meta) @@ -321,13 +325,13 @@ func resourceArmSecurityCenterAssessmentPolicyDelete(d *pluginsdk.ResourceData, ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d) defer cancel() - id, err := parse.AssessmentMetadataID(d.Id()) + id, err := assessmentsmetadata.ParseProviderAssessmentMetadataID(d.Id()) if err != nil { return err } - if _, err := client.DeleteInSubscription(ctx, id.AssessmentMetadataName); err != nil { - return fmt.Errorf("deleting %s: %+v", id, err) + if _, err := client.DeleteInSubscription(ctx, *id); err != nil { + return fmt.Errorf("deleting %s: %+v", *id, err) } return nil diff --git a/internal/services/securitycenter/security_center_assessment_policy_resource_test.go b/internal/services/securitycenter/security_center_assessment_policy_resource_test.go index b82dcf21073bf..fc93daeccb89b 100644 --- a/internal/services/securitycenter/security_center_assessment_policy_resource_test.go +++ b/internal/services/securitycenter/security_center_assessment_policy_resource_test.go @@ -8,10 +8,12 @@ import ( "fmt" "testing" + "github.com/hashicorp/go-azure-helpers/lang/pointer" + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/securitycenter/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/utils" ) @@ -72,21 +74,21 @@ func testAccSecurityCenterAssessmentPolicy_update(t *testing.T) { func (r SecurityCenterAssessmentPolicyResource) Exists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { assessmentMetadataClient := client.SecurityCenter.AssessmentsMetadataClient - id, err := parse.AssessmentMetadataID(state.ID) + id, err := assessmentsmetadata.ParseProviderAssessmentMetadataID(state.ID) if err != nil { return nil, err } - resp, err := assessmentMetadataClient.GetInSubscription(ctx, id.AssessmentMetadataName) + resp, err := assessmentMetadataClient.GetInSubscription(ctx, *id) if err != nil { - if utils.ResponseWasNotFound(resp.Response) { + if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil } - return nil, fmt.Errorf("retrieving Azure Security Center Assessment Metadata %q: %+v", state.ID, err) + return nil, fmt.Errorf("retrieving %q: %+v", *id, err) } - return utils.Bool(resp.AssessmentMetadataProperties != nil), nil + return pointer.To(resp.Model != nil), nil } func (r SecurityCenterAssessmentPolicyResource) basic() string { diff --git a/internal/services/securitycenter/security_center_server_vulnerability_assessment_resource.go b/internal/services/securitycenter/security_center_server_vulnerability_assessment_resource.go index e34ddb58f6c38..693259db60265 100644 --- a/internal/services/securitycenter/security_center_server_vulnerability_assessment_resource.go +++ b/internal/services/securitycenter/security_center_server_vulnerability_assessment_resource.go @@ -10,12 +10,12 @@ import ( "time" "github.com/Azure/azure-sdk-for-go/services/preview/security/mgmt/v3.0/security" // nolint: staticcheck + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" computeParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" "github.com/hashicorp/terraform-provider-azurerm/utils" @@ -50,7 +50,7 @@ func resourceServerVulnerabilityAssessment() *pluginsdk.Resource { Type: pluginsdk.TypeString, Optional: true, ForceNew: true, - ValidateFunc: computeValidate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, "hybrid_machine_id": { Type: pluginsdk.TypeString, @@ -206,17 +206,17 @@ func parseTargetId(d *pluginsdk.ResourceData) (*TargetId, error) { } func parseVirtualMachineId(rawVirtualMachineId string) (*TargetId, error) { - virtualMachineId, err := computeParse.VirtualMachineID(rawVirtualMachineId) + virtualMachineId, err := commonids.ParseVirtualMachineID(rawVirtualMachineId) if err != nil { return nil, err } return &TargetId{ Id: rawVirtualMachineId, SubscriptionId: virtualMachineId.SubscriptionId, - ResourceGroup: virtualMachineId.ResourceGroup, + ResourceGroup: virtualMachineId.ResourceGroupName, Provider: virtualMachineProvider, ResourceType: "virtualMachines", - Name: virtualMachineId.Name, + Name: virtualMachineId.VirtualMachineName, }, nil } diff --git a/internal/services/securitycenter/security_center_server_vulnerability_assessment_virtual_machine_resource.go b/internal/services/securitycenter/security_center_server_vulnerability_assessment_virtual_machine_resource.go index 59c7bd9326190..4898d0236a9be 100644 --- a/internal/services/securitycenter/security_center_server_vulnerability_assessment_virtual_machine_resource.go +++ b/internal/services/securitycenter/security_center_server_vulnerability_assessment_virtual_machine_resource.go @@ -10,10 +10,9 @@ import ( "time" "github.com/Azure/azure-sdk-for-go/services/preview/security/mgmt/v3.0/security" // nolint: staticcheck + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" "github.com/hashicorp/terraform-provider-azurerm/internal/clients" - computeParse "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/parse" - computeValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/compute/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/services/securitycenter/parse" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" @@ -47,7 +46,7 @@ func resourceServerVulnerabilityAssessmentVirtualMachine() *pluginsdk.Resource { Type: pluginsdk.TypeString, Required: true, ForceNew: true, - ValidateFunc: computeValidate.VirtualMachineID, + ValidateFunc: commonids.ValidateVirtualMachineID, }, }, } @@ -58,13 +57,13 @@ func resourceServerVulnerabilityAssessmentVirtualMachineCreate(d *pluginsdk.Reso ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) defer cancel() - virtualMachineId, err := computeParse.VirtualMachineID(d.Get("virtual_machine_id").(string)) + virtualMachineId, err := commonids.ParseVirtualMachineID(d.Get("virtual_machine_id").(string)) if err != nil { return err } - id := parse.NewVulnerabilityAssessmentVmID(virtualMachineId.SubscriptionId, virtualMachineId.ResourceGroup, virtualMachineId.Name, "Default") + id := parse.NewVulnerabilityAssessmentVmID(virtualMachineId.SubscriptionId, virtualMachineId.ResourceGroupName, virtualMachineId.VirtualMachineName, "Default") - vulnerabilityAssessment, err := client.Get(ctx, virtualMachineId.ResourceGroup, computeProvider, vmType, virtualMachineId.Name) + vulnerabilityAssessment, err := client.Get(ctx, virtualMachineId.ResourceGroupName, computeProvider, vmType, virtualMachineId.VirtualMachineName) if err != nil { if !utils.ResponseWasNotFound(vulnerabilityAssessment.Response) { return fmt.Errorf("checking for presence of existing Advanced Threat Protection for %s: %+v", *virtualMachineId, err) @@ -75,7 +74,7 @@ func resourceServerVulnerabilityAssessmentVirtualMachineCreate(d *pluginsdk.Reso return tf.ImportAsExistsError("azurerm_security_center_server_vulnerability_assessment_virtual_machine", *vulnerabilityAssessment.ID) } - vulnerabilityAssessment, err = client.CreateOrUpdate(ctx, virtualMachineId.ResourceGroup, computeProvider, vmType, virtualMachineId.Name) + vulnerabilityAssessment, err = client.CreateOrUpdate(ctx, virtualMachineId.ResourceGroupName, computeProvider, vmType, virtualMachineId.VirtualMachineName) if err != nil { return fmt.Errorf("create Server Vulnerability Assessment for %s: %+v", *virtualMachineId, err) } @@ -107,8 +106,8 @@ func resourceServerVulnerabilityAssessmentVirtualMachineRead(d *pluginsdk.Resour return err } - virtualMachineId := computeParse.NewVirtualMachineID(id.SubscriptionId, id.ResourceGroup, id.VirtualMachineName) - resp, err := client.Get(ctx, virtualMachineId.ResourceGroup, computeProvider, vmType, virtualMachineId.Name) + virtualMachineId := commonids.NewVirtualMachineID(id.SubscriptionId, id.ResourceGroup, id.VirtualMachineName) + resp, err := client.Get(ctx, virtualMachineId.ResourceGroupName, computeProvider, vmType, virtualMachineId.VirtualMachineName) if err != nil { if utils.ResponseWasNotFound(resp.Response) { log.Printf("Server Vulnerability Assessment was not found for %s: %+v", virtualMachineId, err) diff --git a/internal/services/sentinel/sentinel_alert_rule.go b/internal/services/sentinel/sentinel_alert_rule.go index eadcb62c86a88..34ec454356283 100644 --- a/internal/services/sentinel/sentinel_alert_rule.go +++ b/internal/services/sentinel/sentinel_alert_rule.go @@ -22,7 +22,7 @@ func importSentinelAlertRule(expectKind alertrules.AlertRuleKind) pluginsdk.Impo } client := meta.(*clients.Client).Sentinel.AlertRulesClient - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving Sentinel Alert Rule %q: %+v", id, err) } @@ -42,7 +42,7 @@ func importSentinelAlertRuleForTypedSdk(expectKind alertrules.AlertRuleKind) sdk } client := metadata.Client.Sentinel.AlertRulesClient - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { return fmt.Errorf("retrieving Sentinel Alert Rule %q: %+v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_data_source.go b/internal/services/sentinel/sentinel_alert_rule_data_source.go index a2f1502661ccc..448beaa797894 100644 --- a/internal/services/sentinel/sentinel_alert_rule_data_source.go +++ b/internal/services/sentinel/sentinel_alert_rule_data_source.go @@ -51,7 +51,7 @@ func dataSourceSentinelAlertRuleRead(d *pluginsdk.ResourceData, meta interface{} } id := alertrules.NewAlertRuleID(workspaceID.SubscriptionId, workspaceID.ResourceGroupName, workspaceID.WorkspaceName, name) - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("%q was not found", id) diff --git a/internal/services/sentinel/sentinel_alert_rule_fusion_resource.go b/internal/services/sentinel/sentinel_alert_rule_fusion_resource.go index bc80a581d9797..82848170793d3 100644 --- a/internal/services/sentinel/sentinel_alert_rule_fusion_resource.go +++ b/internal/services/sentinel/sentinel_alert_rule_fusion_resource.go @@ -137,7 +137,7 @@ func resourceSentinelAlertRuleFusionCreateUpdate(d *pluginsdk.ResourceData, meta id := alertrules.NewAlertRuleID(workspaceID.SubscriptionId, workspaceID.ResourceGroupName, workspaceID.WorkspaceName, name) if d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("checking for existing %q: %+v", id, err) @@ -158,7 +158,7 @@ func resourceSentinelAlertRuleFusionCreateUpdate(d *pluginsdk.ResourceData, meta } if !d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { return fmt.Errorf("retrieving %q: %+v", id, err) } @@ -171,7 +171,7 @@ func resourceSentinelAlertRuleFusionCreateUpdate(d *pluginsdk.ResourceData, meta } } - if _, err := client.AlertRulesCreateOrUpdate(ctx, id, params); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, params); err != nil { return fmt.Errorf("creating Sentinel Alert Rule Fusion %q: %+v", id, err) } @@ -190,7 +190,7 @@ func resourceSentinelAlertRuleFusionRead(d *pluginsdk.ResourceData, meta interfa return err } - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[DEBUG] %q was not found - removing from state!", id) @@ -235,7 +235,7 @@ func resourceSentinelAlertRuleFusionDelete(d *pluginsdk.ResourceData, meta inter return err } - if _, err := client.AlertRulesDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting Sentinel Alert Rule Fusion %q: %+v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_fusion_resource_test.go b/internal/services/sentinel/sentinel_alert_rule_fusion_resource_test.go index 8bbe8532888a2..e1e7bdfa0d106 100644 --- a/internal/services/sentinel/sentinel_alert_rule_fusion_resource_test.go +++ b/internal/services/sentinel/sentinel_alert_rule_fusion_resource_test.go @@ -106,7 +106,7 @@ func (r SentinelAlertRuleFusionResource) Exists(ctx context.Context, client *cli return nil, err } - resp, err := alertRuleClient.AlertRulesGet(ctx, *id) + resp, err := alertRuleClient.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil diff --git a/internal/services/sentinel/sentinel_alert_rule_machine_learning_behavior_analytics.go b/internal/services/sentinel/sentinel_alert_rule_machine_learning_behavior_analytics.go index 2b929ec5cc0e6..c1054ce4817d5 100644 --- a/internal/services/sentinel/sentinel_alert_rule_machine_learning_behavior_analytics.go +++ b/internal/services/sentinel/sentinel_alert_rule_machine_learning_behavior_analytics.go @@ -81,7 +81,7 @@ func resourceSentinelAlertRuleMLBehaviorAnalyticsCreateUpdate(d *pluginsdk.Resou id := alertrules.NewAlertRuleID(workspaceID.SubscriptionId, workspaceID.ResourceGroupName, workspaceID.WorkspaceName, name) if d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("checking for existing Sentinel Alert Rule MLBehaviorAnalytics %q: %+v", id, err) @@ -101,7 +101,7 @@ func resourceSentinelAlertRuleMLBehaviorAnalyticsCreateUpdate(d *pluginsdk.Resou } if !d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { return fmt.Errorf("retrieving Sentinel Alert Rule MLBehaviorAnalytics %q: %+v", id, err) } @@ -111,7 +111,7 @@ func resourceSentinelAlertRuleMLBehaviorAnalyticsCreateUpdate(d *pluginsdk.Resou } } - if _, err := client.AlertRulesCreateOrUpdate(ctx, id, params); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, params); err != nil { return fmt.Errorf("creating Sentinel Alert Rule MLBehaviorAnalytics %q: %+v", id, err) } @@ -130,7 +130,7 @@ func resourceSentinelAlertRuleMLBehaviorAnalyticsRead(d *pluginsdk.ResourceData, return err } - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[DEBUG] Sentinel Alert Rule MLBehaviorAnalytics %q was not found - removing from state!", id) @@ -172,7 +172,7 @@ func resourceSentinelAlertRuleMLBehaviorAnalyticsDelete(d *pluginsdk.ResourceDat return err } - if _, err := client.AlertRulesDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting Sentinel Alert Rule MLBehaviorAnalytics %q: %+v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_machine_learning_behavior_analytics_test.go b/internal/services/sentinel/sentinel_alert_rule_machine_learning_behavior_analytics_test.go index 89db04bf8bd93..ffdf93b656e88 100644 --- a/internal/services/sentinel/sentinel_alert_rule_machine_learning_behavior_analytics_test.go +++ b/internal/services/sentinel/sentinel_alert_rule_machine_learning_behavior_analytics_test.go @@ -100,7 +100,7 @@ func (r SentinelAlertRuleMLBehaviorAnalyticsResource) Exists(ctx context.Context return nil, err } - resp, err := alertRuleClient.AlertRulesGet(ctx, *id) + resp, err := alertRuleClient.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil diff --git a/internal/services/sentinel/sentinel_alert_rule_ms_security_incident_resource.go b/internal/services/sentinel/sentinel_alert_rule_ms_security_incident_resource.go index 3ae4b612e4b79..8e80e17f30a74 100644 --- a/internal/services/sentinel/sentinel_alert_rule_ms_security_incident_resource.go +++ b/internal/services/sentinel/sentinel_alert_rule_ms_security_incident_resource.go @@ -143,7 +143,7 @@ func resourceSentinelAlertRuleMsSecurityIncidentCreateUpdate(d *pluginsdk.Resour id := alertrules.NewAlertRuleID(workspaceID.SubscriptionId, workspaceID.ResourceGroupName, workspaceID.WorkspaceName, name) if d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("checking for existing Sentinel Alert Rule Ms Security Incident %q: %+v", id, err) @@ -178,7 +178,7 @@ func resourceSentinelAlertRuleMsSecurityIncidentCreateUpdate(d *pluginsdk.Resour } if !d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { return fmt.Errorf("retrieving Sentinel Alert Rule Ms Security Incident %q: %+v", id, err) } @@ -188,7 +188,7 @@ func resourceSentinelAlertRuleMsSecurityIncidentCreateUpdate(d *pluginsdk.Resour } } - if _, err := client.AlertRulesCreateOrUpdate(ctx, id, param); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, param); err != nil { return fmt.Errorf("creating Sentinel Alert Rule Ms Security Incident %q: %+v", id, err) } @@ -207,7 +207,7 @@ func resourceSentinelAlertRuleMsSecurityIncidentRead(d *pluginsdk.ResourceData, return err } - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[DEBUG] Sentinel Alert Rule Ms Security Incident %q was not found - removing from state!", id) @@ -262,7 +262,7 @@ func resourceSentinelAlertRuleMsSecurityIncidentDelete(d *pluginsdk.ResourceData return err } - if _, err := client.AlertRulesDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting Sentinel Alert Rule Ms Security Incident %q: %+v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_ms_security_incident_resource_test.go b/internal/services/sentinel/sentinel_alert_rule_ms_security_incident_resource_test.go index cca53b0106cc8..bae1977ec560f 100644 --- a/internal/services/sentinel/sentinel_alert_rule_ms_security_incident_resource_test.go +++ b/internal/services/sentinel/sentinel_alert_rule_ms_security_incident_resource_test.go @@ -142,7 +142,7 @@ func (t SentinelAlertRuleMsSecurityIncidentResource) Exists(ctx context.Context, return nil, err } - resp, err := clients.Sentinel.AlertRulesClient.AlertRulesGet(ctx, *id) + resp, err := clients.Sentinel.AlertRulesClient.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("reading Sentinel Alert Rule Ms Security Incident %q: %v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_nrt_resource.go b/internal/services/sentinel/sentinel_alert_rule_nrt_resource.go index e1afb63ab0d1f..fc4beb9508f92 100644 --- a/internal/services/sentinel/sentinel_alert_rule_nrt_resource.go +++ b/internal/services/sentinel/sentinel_alert_rule_nrt_resource.go @@ -335,7 +335,7 @@ func resourceSentinelAlertRuleNrtCreateUpdate(d *pluginsdk.ResourceData, meta in id := alertrules.NewAlertRuleID(workspaceID.SubscriptionId, workspaceID.ResourceGroupName, workspaceID.WorkspaceName, name) if d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("checking for existing %q: %+v", id, err) @@ -396,7 +396,7 @@ func resourceSentinelAlertRuleNrtCreateUpdate(d *pluginsdk.ResourceData, meta in // Service avoid concurrent update of this resource via checking the "etag" to guarantee it is the same value as last Read. if !d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { return fmt.Errorf("retrieving %q: %+v", id, err) } @@ -410,7 +410,7 @@ func resourceSentinelAlertRuleNrtCreateUpdate(d *pluginsdk.ResourceData, meta in } } - if _, err := client.AlertRulesCreateOrUpdate(ctx, id, param); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, param); err != nil { return fmt.Errorf("creating %q: %+v", id, err) } @@ -429,7 +429,7 @@ func resourceSentinelAlertRuleNrtRead(d *pluginsdk.ResourceData, meta interface{ return err } - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[DEBUG] %q was not found - removing from state!", id) @@ -505,7 +505,7 @@ func resourceSentinelAlertRuleNrtDelete(d *pluginsdk.ResourceData, meta interfac return err } - if _, err := client.AlertRulesDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting Sentinel Alert Rule Nrt %q: %+v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_nrt_resource_test.go b/internal/services/sentinel/sentinel_alert_rule_nrt_resource_test.go index 113a5944ff67c..71bfaed166a6e 100644 --- a/internal/services/sentinel/sentinel_alert_rule_nrt_resource_test.go +++ b/internal/services/sentinel/sentinel_alert_rule_nrt_resource_test.go @@ -135,7 +135,7 @@ func (t SentinelAlertRuleNrtResource) Exists(ctx context.Context, clients *clien return nil, err } - resp, err := clients.Sentinel.AlertRulesClient.AlertRulesGet(ctx, *id) + resp, err := clients.Sentinel.AlertRulesClient.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("reading %q: %v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_scheduled_resource.go b/internal/services/sentinel/sentinel_alert_rule_scheduled_resource.go index bb64bca2e76f0..f0dea0bc6b755 100644 --- a/internal/services/sentinel/sentinel_alert_rule_scheduled_resource.go +++ b/internal/services/sentinel/sentinel_alert_rule_scheduled_resource.go @@ -366,7 +366,7 @@ func resourceSentinelAlertRuleScheduledCreateUpdate(d *pluginsdk.ResourceData, m id := alertrules.NewAlertRuleID(workspaceID.SubscriptionId, workspaceID.ResourceGroupName, workspaceID.WorkspaceName, name) if d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("checking for existing Sentinel Alert Rule Scheduled %q: %+v", id, err) @@ -452,7 +452,7 @@ func resourceSentinelAlertRuleScheduledCreateUpdate(d *pluginsdk.ResourceData, m } if !d.IsNewResource() { - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { return fmt.Errorf("retrieving Sentinel Alert Rule Scheduled %q: %+v", id, err) } @@ -462,7 +462,7 @@ func resourceSentinelAlertRuleScheduledCreateUpdate(d *pluginsdk.ResourceData, m } } - if _, err := client.AlertRulesCreateOrUpdate(ctx, id, param); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, param); err != nil { return fmt.Errorf("creating Sentinel Alert Rule Scheduled %q: %+v", id, err) } @@ -481,7 +481,7 @@ func resourceSentinelAlertRuleScheduledRead(d *pluginsdk.ResourceData, meta inte return err } - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[DEBUG] Sentinel Alert Rule Scheduled %q was not found - removing from state!", id) @@ -560,7 +560,7 @@ func resourceSentinelAlertRuleScheduledDelete(d *pluginsdk.ResourceData, meta in return err } - if _, err := client.AlertRulesDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting Sentinel Alert Rule Scheduled %q: %+v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_scheduled_resource_test.go b/internal/services/sentinel/sentinel_alert_rule_scheduled_resource_test.go index d905a5058a1fa..5dd9eb58c3b2f 100644 --- a/internal/services/sentinel/sentinel_alert_rule_scheduled_resource_test.go +++ b/internal/services/sentinel/sentinel_alert_rule_scheduled_resource_test.go @@ -135,7 +135,7 @@ func (t SentinelAlertRuleScheduledResource) Exists(ctx context.Context, clients return nil, err } - resp, err := clients.Sentinel.AlertRulesClient.AlertRulesGet(ctx, *id) + resp, err := clients.Sentinel.AlertRulesClient.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("reading Sentinel Alert Rule Scheduled %q: %v", id, err) } diff --git a/internal/services/sentinel/sentinel_alert_rule_threat_intelligence_resouce_test.go b/internal/services/sentinel/sentinel_alert_rule_threat_intelligence_resouce_test.go index 1d148fb24d67a..67cffef7f9880 100644 --- a/internal/services/sentinel/sentinel_alert_rule_threat_intelligence_resouce_test.go +++ b/internal/services/sentinel/sentinel_alert_rule_threat_intelligence_resouce_test.go @@ -100,7 +100,7 @@ func (r SentinelAlertRuleThreatIntelligenceResource) Exists(ctx context.Context, return nil, err } - resp, err := alertRuleClient.AlertRulesGet(ctx, *id) + resp, err := alertRuleClient.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return utils.Bool(false), nil diff --git a/internal/services/sentinel/sentinel_alert_rule_threat_intelligence_resource.go b/internal/services/sentinel/sentinel_alert_rule_threat_intelligence_resource.go index f6c518c41115c..b9c60da2c3c91 100644 --- a/internal/services/sentinel/sentinel_alert_rule_threat_intelligence_resource.go +++ b/internal/services/sentinel/sentinel_alert_rule_threat_intelligence_resource.go @@ -101,7 +101,7 @@ func (a AlertRuleThreatIntelligenceResource) Create() sdk.ResourceFunc { id := alertrules.NewAlertRuleID(workspaceID.SubscriptionId, workspaceID.ResourceGroupName, workspaceID.WorkspaceName, metaModel.Name) - resp, err := client.AlertRulesGet(ctx, id) + resp, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(resp.HttpResponse) { return fmt.Errorf("checking for existing %q: %+v", id, err) @@ -136,7 +136,7 @@ func (a AlertRuleThreatIntelligenceResource) Create() sdk.ResourceFunc { }, } - if _, err := client.AlertRulesCreateOrUpdate(ctx, id, param); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, param); err != nil { return fmt.Errorf("creating %q: %+v", id, err) } @@ -157,7 +157,7 @@ func (a AlertRuleThreatIntelligenceResource) Read() sdk.ResourceFunc { return fmt.Errorf("parsing %+v", err) } - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { return metadata.MarkAsGone(id) @@ -198,7 +198,7 @@ func (a AlertRuleThreatIntelligenceResource) Delete() sdk.ResourceFunc { return fmt.Errorf("parsing %+v", err) } - if _, err := client.AlertRulesDelete(ctx, *id); err != nil { + if _, err := client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting %+v", err) } @@ -222,7 +222,7 @@ func (a AlertRuleThreatIntelligenceResource) Update() sdk.ResourceFunc { if err != nil { return fmt.Errorf("parsing %+v", err) } - resp, err := client.AlertRulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { return fmt.Errorf("reading %+v", err) } @@ -249,7 +249,7 @@ func (a AlertRuleThreatIntelligenceResource) Update() sdk.ResourceFunc { }, } - if _, err := client.AlertRulesCreateOrUpdate(ctx, *id, param); err != nil { + if _, err := client.CreateOrUpdate(ctx, *id, param); err != nil { return fmt.Errorf("updating %q: %+v", id, err) } diff --git a/internal/services/serviceconnector/registration.go b/internal/services/serviceconnector/registration.go index 30e9505e2fff3..c4d258c34e4cd 100644 --- a/internal/services/serviceconnector/registration.go +++ b/internal/services/serviceconnector/registration.go @@ -27,6 +27,7 @@ func (r Registration) Resources() []sdk.Resource { return []sdk.Resource{ AppServiceConnectorResource{}, SpringCloudConnectorResource{}, + FunctionAppConnectorResource{}, } } diff --git a/internal/services/serviceconnector/service_connector_function_app_resource.go b/internal/services/serviceconnector/service_connector_function_app_resource.go new file mode 100644 index 0000000000000..ddc4328be08fc --- /dev/null +++ b/internal/services/serviceconnector/service_connector_function_app_resource.go @@ -0,0 +1,301 @@ +package serviceconnector + +import ( + "context" + "fmt" + "time" + + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links" + "github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" + "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/web/validate" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +type FunctionAppConnectorResource struct{} + +type FunctionAppConnectorResourceModel struct { + Name string `tfschema:"name"` + FunctionAppId string `tfschema:"function_app_id"` + TargetResourceId string `tfschema:"target_resource_id"` + ClientType string `tfschema:"client_type"` + AuthInfo []AuthInfoModel `tfschema:"authentication"` + VnetSolution string `tfschema:"vnet_solution"` + SecretStore []SecretStoreModel `tfschema:"secret_store"` +} + +func (r FunctionAppConnectorResource) Arguments() map[string]*schema.Schema { + return map[string]*schema.Schema{ + "name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "function_app_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.FunctionAppID, + }, + + "target_resource_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: azure.ValidateResourceID, + }, + + "client_type": { + Type: pluginsdk.TypeString, + Optional: true, + Default: string(servicelinker.ClientTypeNone), + ValidateFunc: validation.StringInSlice([]string{ + string(servicelinker.ClientTypeDotnet), + string(servicelinker.ClientTypeJava), + string(servicelinker.ClientTypePython), + string(servicelinker.ClientTypeGo), + string(servicelinker.ClientTypePhp), + string(servicelinker.ClientTypeRuby), + string(servicelinker.ClientTypeDjango), + string(servicelinker.ClientTypeNodejs), + string(servicelinker.ClientTypeSpringBoot), + }, false), + }, + + "secret_store": secretStoreSchema(), + + "vnet_solution": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice([]string{ + string(servicelinker.VNetSolutionTypeServiceEndpoint), + string(servicelinker.VNetSolutionTypePrivateLink), + }, false), + }, + + "authentication": authInfoSchema(), + } +} + +func (r FunctionAppConnectorResource) Attributes() map[string]*schema.Schema { + return map[string]*schema.Schema{} +} + +func (r FunctionAppConnectorResource) ModelObject() interface{} { + return &FunctionAppConnectorResourceModel{} +} + +func (r FunctionAppConnectorResource) ResourceType() string { + return "azurerm_function_app_connection" +} + +func (r FunctionAppConnectorResource) Create() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + var model FunctionAppConnectorResourceModel + if err := metadata.Decode(&model); err != nil { + return err + } + + client := metadata.Client.ServiceConnector.ServiceLinkerClient + + id := servicelinker.NewScopedLinkerID(model.FunctionAppId, model.Name) + existing, err := client.LinkerGet(ctx, id) + if err != nil && !response.WasNotFound(existing.HttpResponse) { + return fmt.Errorf("checking for presence of existing %s: %+v", id, err) + } + + if !response.WasNotFound(existing.HttpResponse) { + return metadata.ResourceRequiresImport(r.ResourceType(), id) + } + + authInfo, err := expandServiceConnectorAuthInfo(model.AuthInfo) + if err != nil { + return fmt.Errorf("expanding `authentication`: %+v", err) + } + + serviceConnectorProperties := servicelinker.LinkerProperties{ + AuthInfo: authInfo, + } + + if _, err := commonids.ParseStorageAccountID(model.TargetResourceId); err == nil { + targetResourceId := model.TargetResourceId + "/blobServices/default" + serviceConnectorProperties.TargetService = servicelinker.AzureResource{ + Id: &targetResourceId, + } + } else { + serviceConnectorProperties.TargetService = servicelinker.AzureResource{ + Id: &model.TargetResourceId, + } + } + + if model.SecretStore != nil { + secretStore := expandSecretStore(model.SecretStore) + serviceConnectorProperties.SecretStore = secretStore + } + + if model.ClientType != "" { + clientType := servicelinker.ClientType(model.ClientType) + serviceConnectorProperties.ClientType = &clientType + } + + if model.VnetSolution != "" { + vNetSolutionType := servicelinker.VNetSolutionType(model.VnetSolution) + vNetSolution := servicelinker.VNetSolution{ + Type: &vNetSolutionType, + } + serviceConnectorProperties.VNetSolution = &vNetSolution + } + + props := servicelinker.LinkerResource{ + Id: utils.String(id.ID()), + Name: utils.String(model.Name), + Properties: serviceConnectorProperties, + } + + if err := client.LinkerCreateOrUpdateThenPoll(ctx, id, props); err != nil { + return fmt.Errorf("creating %s: %+v", id, err) + } + + metadata.SetID(id) + return nil + }, + } +} + +func (r FunctionAppConnectorResource) Read() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 5 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.ServiceConnector.ServiceLinkerClient + id, err := servicelinker.ParseScopedLinkerID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + resp, err := client.LinkerGet(ctx, *id) + if err != nil { + if response.WasNotFound(resp.HttpResponse) { + return metadata.MarkAsGone(id) + } + return fmt.Errorf("reading %s: %+v", id, err) + } + + pwd := metadata.ResourceData.Get("authentication.0.secret").(string) + + if model := resp.Model; model != nil { + props := model.Properties + if props.AuthInfo == nil || props.TargetService == nil { + return nil + } + + state := FunctionAppConnectorResourceModel{ + Name: id.LinkerName, + FunctionAppId: id.ResourceUri, + TargetResourceId: flattenTargetService(props.TargetService), + AuthInfo: flattenServiceConnectorAuthInfo(props.AuthInfo, pwd), + } + + if props.ClientType != nil { + state.ClientType = string(*props.ClientType) + } + + if props.VNetSolution != nil && props.VNetSolution.Type != nil { + state.VnetSolution = string(*props.VNetSolution.Type) + } + + if props.SecretStore != nil { + state.SecretStore = flattenSecretStore(*props.SecretStore) + } + + return metadata.Encode(&state) + } + return nil + }, + } +} + +func (r FunctionAppConnectorResource) Delete() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.ServiceConnector.LinksClient + id, err := links.ParseScopedLinkerID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + metadata.Logger.Infof("deleting %s", *id) + + if err := client.LinkerDeleteThenPoll(ctx, *id); err != nil { + return fmt.Errorf("deleting %s: %+v", *id, err) + } + return nil + }, + } +} + +func (r FunctionAppConnectorResource) Update() sdk.ResourceFunc { + return sdk.ResourceFunc{ + Timeout: 30 * time.Minute, + Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error { + client := metadata.Client.ServiceConnector.LinksClient + id, err := links.ParseScopedLinkerID(metadata.ResourceData.Id()) + if err != nil { + return err + } + + var state FunctionAppConnectorResourceModel + if err := metadata.Decode(&state); err != nil { + return fmt.Errorf("decoding state: %+v", err) + } + + linkerProps := links.LinkerProperties{} + d := metadata.ResourceData + + if d.HasChange("client_type") { + clientType := links.ClientType(state.ClientType) + linkerProps.ClientType = &clientType + } + + if d.HasChange("vnet_solution") { + vnetSolutionType := links.VNetSolutionType(state.VnetSolution) + vnetSolution := links.VNetSolution{ + Type: &vnetSolutionType, + } + linkerProps.VNetSolution = &vnetSolution + } + + if d.HasChange("secret_store") { + linkerProps.SecretStore = (*links.SecretStore)(expandSecretStore(state.SecretStore)) + } + + if d.HasChange("authentication") { + linkerProps.AuthInfo = state.AuthInfo + } + + props := links.LinkerPatch{ + Properties: &linkerProps, + } + + if err := client.LinkerUpdateThenPoll(ctx, *id, props); err != nil { + return fmt.Errorf("updating %s: %+v", id, err) + } + + return nil + }, + } +} + +func (r FunctionAppConnectorResource) IDValidationFunc() pluginsdk.SchemaValidateFunc { + return servicelinker.ValidateScopedLinkerID +} diff --git a/internal/services/serviceconnector/service_connector_function_app_resource_test.go b/internal/services/serviceconnector/service_connector_function_app_resource_test.go new file mode 100644 index 0000000000000..2f3e4821015ca --- /dev/null +++ b/internal/services/serviceconnector/service_connector_function_app_resource_test.go @@ -0,0 +1,514 @@ +package serviceconnector_test + +import ( + "context" + "fmt" + "testing" + + "github.com/hashicorp/go-azure-helpers/lang/response" + "github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +type FunctionAppConnectorResource struct{} + +func (r FunctionAppConnectorResource) Exists(ctx context.Context, client *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { + id, err := servicelinker.ParseScopedLinkerID(state.ID) + if err != nil { + return nil, err + } + + resp, err := client.ServiceConnector.ServiceLinkerClient.LinkerGet(ctx, *id) + if err != nil { + if response.WasNotFound(resp.HttpResponse) { + return utils.Bool(false), nil + } + return nil, fmt.Errorf("retrieving %s: %+v", *id, err) + } + return utils.Bool(true), nil +} + +func TestAccServiceConnectorFunctionAppCosmosdb_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_function_app_connection", "test") + r := FunctionAppConnectorResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.cosmosdbBasic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccServiceConnectorFunctionAppCosmosdb_secretAuth(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_function_app_connection", "test") + r := FunctionAppConnectorResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.cosmosdbSecretAuth(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("authentication"), + }) +} + +func TestAccServiceConnectorFunctionAppCosmosdb_servicePrincipalSecretAuth(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_function_app_connection", "test") + r := FunctionAppConnectorResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.cosmosdbServicePrincipalSecretAuth(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("authentication"), + }) +} + +func TestAccServiceConnectorFunctionAppCosmosdb_userAssignedIdentity(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_function_app_connection", "test") + r := FunctionAppConnectorResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.cosmosdbWithUserAssignedIdentity(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep("authentication"), + }) +} + +func TestAccServiceConnectorFunctionAppStorageBlob_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_function_app_connection", "test") + r := FunctionAppConnectorResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.storageBlob(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccServiceConnectorFunctionAppStorageBlob_secretStore(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_function_app_connection", "test") + r := FunctionAppConnectorResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.secretStore(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccServiceConnectorFunctionAppCosmosdb_update(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_function_app_connection", "test") + r := FunctionAppConnectorResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.cosmosdbBasic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + { + Config: r.cosmosdbUpdate(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func TestAccServiceConnectorFunctionApp_complete(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_function_app_connection", "test") + r := FunctionAppConnectorResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.complete(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + +func (r FunctionAppConnectorResource) storageBlob(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%[3]d" + location = "%[1]s" +} + +resource "azurerm_storage_account" "test" { + name = "acctestacc%[2]s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_tier = "Standard" + account_replication_type = "LRS" +} + +resource "azurerm_app_service_plan" "test" { + name = "acctestASP-%[3]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + + sku { + tier = "Standard" + size = "S1" + } +} + +resource "azurerm_function_app" "test" { + name = "acctest-%[3]d-func" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + app_service_plan_id = azurerm_app_service_plan.test.id + storage_account_name = azurerm_storage_account.test.name + storage_account_access_key = azurerm_storage_account.test.primary_access_key + + lifecycle { + ignore_changes = [ + identity, + ] + } +} + +resource "azurerm_function_app_connection" "test" { + name = "acctestserviceconnector%[3]d" + function_app_id = azurerm_function_app.test.id + target_resource_id = azurerm_storage_account.test.id + authentication { + type = "systemAssignedIdentity" + } +} +`, data.Locations.Primary, data.RandomString, data.RandomInteger) +} + +func (r FunctionAppConnectorResource) secretStore(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features { + key_vault { + recover_soft_deleted_key_vaults = false + purge_soft_delete_on_destroy = false + purge_soft_deleted_keys_on_destroy = false + } + } +} + +data "azurerm_client_config" "current" {} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%[2]d" + location = "%[1]s" +} + +resource "azurerm_storage_account" "test" { + name = "acctestacc%[3]s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_tier = "Standard" + account_replication_type = "LRS" +} + +resource "azurerm_key_vault" "test" { + name = "accAKV-%[3]s" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + tenant_id = data.azurerm_client_config.current.tenant_id + sku_name = "standard" + purge_protection_enabled = true +} + +resource "azurerm_app_service_plan" "test" { + name = "acctestASP-%[2]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + + sku { + tier = "Standard" + size = "S1" + } +} + +resource "azurerm_function_app" "test" { + name = "acctest-%[2]d-func" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + app_service_plan_id = azurerm_app_service_plan.test.id + storage_account_name = azurerm_storage_account.test.name + storage_account_access_key = azurerm_storage_account.test.primary_access_key + + lifecycle { + ignore_changes = [ + identity, + ] + } +} + +resource "azurerm_function_app_connection" "test" { + name = "acctestserviceconnector%[2]d" + function_app_id = azurerm_function_app.test.id + target_resource_id = azurerm_storage_account.test.id + + secret_store { + key_vault_id = azurerm_key_vault.test.id + } + authentication { + type = "systemAssignedIdentity" + } +} +`, data.Locations.Primary, data.RandomInteger, data.RandomString) +} + +func (r FunctionAppConnectorResource) complete(data acceptance.TestData) string { + template := r.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_function_app_connection" "test" { + name = "acctestserviceconnector%[2]d" + function_app_id = azurerm_function_app.test.id + target_resource_id = azurerm_cosmosdb_account.test.id + client_type = "java" + authentication { + type = "systemAssignedIdentity" + } +} +`, template, data.RandomInteger) +} + +func (r FunctionAppConnectorResource) cosmosdbBasic(data acceptance.TestData) string { + template := r.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_function_app_connection" "test" { + name = "acctestserviceconnector%[2]d" + function_app_id = azurerm_function_app.test.id + target_resource_id = azurerm_cosmosdb_account.test.id + authentication { + type = "systemAssignedIdentity" + } +} +`, template, data.RandomInteger) +} + +func (r FunctionAppConnectorResource) cosmosdbSecretAuth(data acceptance.TestData) string { + template := r.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_function_app_connection" "test" { + name = "acctestserviceconnector%[2]d" + function_app_id = azurerm_function_app.test.id + target_resource_id = azurerm_cosmosdb_account.test.id + authentication { + type = "secret" + name = "foo" + secret = "bar" + } +} +`, template, data.RandomInteger) +} + +func (r FunctionAppConnectorResource) cosmosdbServicePrincipalSecretAuth(data acceptance.TestData) string { + template := r.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_user_assigned_identity" "test" { + name = "acctest%[2]s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location +} + +resource "azurerm_function_app_connection" "test" { + name = "acctestserviceconnector%[3]d" + function_app_id = azurerm_function_app.test.id + target_resource_id = azurerm_cosmosdb_account.test.id + authentication { + type = "servicePrincipalSecret" + client_id = "someclientid" + principal_id = azurerm_user_assigned_identity.test.principal_id + secret = "bar" + } +} +`, template, data.RandomString, data.RandomInteger) +} + +func (r FunctionAppConnectorResource) cosmosdbWithUserAssignedIdentity(data acceptance.TestData) string { + template := r.template(data) + return fmt.Sprintf(` +%[1]s + +data "azurerm_subscription" "test" {} + +resource "azurerm_user_assigned_identity" "test" { + name = "acctest%[2]s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location +} + +resource "azurerm_function_app_connection" "test" { + name = "acctestserviceconnector%[3]d" + function_app_id = azurerm_function_app.test.id + target_resource_id = azurerm_cosmosdb_account.test.id + authentication { + type = "userAssignedIdentity" + subscription_id = data.azurerm_subscription.test.subscription_id + client_id = azurerm_user_assigned_identity.test.client_id + } +} +`, template, data.RandomString, data.RandomInteger) +} + +func (r FunctionAppConnectorResource) cosmosdbUpdate(data acceptance.TestData) string { + template := r.template(data) + return fmt.Sprintf(` +%[1]s + +resource "azurerm_cosmosdb_sql_database" "update" { + name = "cosmos-sql-db-update" + resource_group_name = azurerm_resource_group.test.name + account_name = azurerm_cosmosdb_account.test.name + throughput = 400 +} + +resource "azurerm_cosmosdb_sql_container" "update" { + name = "test-containerupdate%[3]s" + resource_group_name = azurerm_resource_group.test.name + account_name = azurerm_cosmosdb_account.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + partition_key_path = "/definitionupdate" +} + +resource "azurerm_service_plan" "update" { + location = azurerm_resource_group.test.location + name = "testserviceplanupdate%[3]s" + resource_group_name = azurerm_resource_group.test.name + sku_name = "P1v2" + os_type = "Linux" +} + +resource "azurerm_function_app_connection" "test" { + name = "acctestserviceconnector%[2]d" + function_app_id = azurerm_function_app.test.id + target_resource_id = azurerm_cosmosdb_account.test.id + authentication { + type = "systemAssignedIdentity" + } +} +`, template, data.RandomInteger, data.RandomString) +} + +func (r FunctionAppConnectorResource) template(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%[1]d" + location = "%[2]s" +} + +resource "azurerm_cosmosdb_account" "test" { + name = "acctestcosmosdb%[1]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + offer_type = "Standard" + kind = "GlobalDocumentDB" + + consistency_policy { + consistency_level = "BoundedStaleness" + max_interval_in_seconds = 10 + max_staleness_prefix = 200 + } + + geo_location { + location = azurerm_resource_group.test.location + failover_priority = 0 + } +} + +resource "azurerm_cosmosdb_sql_database" "test" { + name = "cosmos-sql-db" + resource_group_name = azurerm_resource_group.test.name + account_name = azurerm_cosmosdb_account.test.name + throughput = 400 +} + +resource "azurerm_cosmosdb_sql_container" "test" { + name = "test-container%[3]s" + resource_group_name = azurerm_resource_group.test.name + account_name = azurerm_cosmosdb_account.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + partition_key_path = "/definition" +} + +resource "azurerm_storage_account" "test" { + name = "acctestsa%[3]s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_tier = "Standard" + account_replication_type = "LRS" +} + +resource "azurerm_app_service_plan" "test" { + name = "acctestASP-%[1]d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + + sku { + tier = "Standard" + size = "S1" + } +} + +resource "azurerm_function_app" "test" { + name = "acctest-%[1]d-func" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + app_service_plan_id = azurerm_app_service_plan.test.id + storage_account_name = azurerm_storage_account.test.name + storage_account_access_key = azurerm_storage_account.test.primary_access_key + + lifecycle { + ignore_changes = [ + identity, + ] + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString) +} diff --git a/internal/services/storage/storage_account_resource.go b/internal/services/storage/storage_account_resource.go index 6c2052d63a061..0927a1e08c5e4 100644 --- a/internal/services/storage/storage_account_resource.go +++ b/internal/services/storage/storage_account_resource.go @@ -189,12 +189,6 @@ func resourceStorageAccount() *pluginsdk.Resource { MaxItems: 1, Elem: &pluginsdk.Resource{ Schema: map[string]*pluginsdk.Schema{ - "storage_sid": { - Type: pluginsdk.TypeString, - Required: true, - ValidateFunc: validation.StringIsNotEmpty, - }, - "domain_guid": { Type: pluginsdk.TypeString, Required: true, @@ -207,21 +201,27 @@ func resourceStorageAccount() *pluginsdk.Resource { ValidateFunc: validation.StringIsNotEmpty, }, + "storage_sid": { + Type: pluginsdk.TypeString, + Optional: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + "domain_sid": { Type: pluginsdk.TypeString, - Required: true, + Optional: true, ValidateFunc: validation.StringIsNotEmpty, }, "forest_name": { Type: pluginsdk.TypeString, - Required: true, + Optional: true, ValidateFunc: validation.StringIsNotEmpty, }, "netbios_domain_name": { Type: pluginsdk.TypeString, - Required: true, + Optional: true, ValidateFunc: validation.StringIsNotEmpty, }, }, @@ -1324,7 +1324,7 @@ func resourceStorageAccountCreate(d *pluginsdk.ResourceData, meta interface{}) e } blobClient := meta.(*clients.Client).Storage.BlobServicesClient - blobProperties, err := expandBlobProperties(val.([]interface{})) + blobProperties, err := expandBlobProperties(storage.Kind(accountKind), val.([]interface{})) if err != nil { return err } @@ -1794,7 +1794,7 @@ func resourceStorageAccountUpdate(d *pluginsdk.ResourceData, meta interface{}) e } blobClient := meta.(*clients.Client).Storage.BlobServicesClient - blobProperties, err := expandBlobProperties(d.Get("blob_properties").([]interface{})) + blobProperties, err := expandBlobProperties(storage.Kind(accountKind), d.Get("blob_properties").([]interface{})) if err != nil { return err } @@ -2198,7 +2198,7 @@ func resourceStorageAccountRead(d *pluginsdk.ResourceData, meta interface{}) err staticWebsiteProps, err := accountsClient.GetServiceProperties(ctx, id.StorageAccountName) if err != nil { - return fmt.Errorf("retrieving static website for %s: %+v", *id, err) + return fmt.Errorf("retrieving static website properties for %s: %+v", *id, err) } staticWebsite := flattenStaticWebsiteProperties(staticWebsiteProps) if err := d.Set("static_website", staticWebsite); err != nil { @@ -2462,14 +2462,31 @@ func expandArmStorageAccountAzureFilesAuthentication(input []interface{}) (*stor v := input[0].(map[string]interface{}) + ad := expandArmStorageAccountActiveDirectoryProperties(v["active_directory"].([]interface{})) + directoryOption := storage.DirectoryServiceOptions(v["directory_type"].(string)) - if _, ok := v["active_directory"]; directoryOption == storage.DirectoryServiceOptionsAD && !ok { - return nil, fmt.Errorf("`active_directory` is required when `directory_type` is `AD`") + + if directoryOption == storage.DirectoryServiceOptionsAD { + if ad == nil { + return nil, fmt.Errorf("`active_directory` is required when `directory_type` is `AD`") + } + if ad.AzureStorageSid == nil { + return nil, fmt.Errorf("`active_directory.0.storage_sid` is required when `directory_type` is `AD`") + } + if ad.DomainSid == nil { + return nil, fmt.Errorf("`active_directory.0.domain_sid` is required when `directory_type` is `AD`") + } + if ad.ForestName == nil { + return nil, fmt.Errorf("`active_directory.0.forest_name` is required when `directory_type` is `AD`") + } + if ad.NetBiosDomainName == nil { + return nil, fmt.Errorf("`active_directory.0.netbios_domain_name` is required when `directory_type` is `AD`") + } } return &storage.AzureFilesIdentityBasedAuthentication{ DirectoryServiceOptions: directoryOption, - ActiveDirectoryProperties: expandArmStorageAccountActiveDirectoryProperties(v["active_directory"].([]interface{})), + ActiveDirectoryProperties: ad, }, nil } @@ -2477,15 +2494,25 @@ func expandArmStorageAccountActiveDirectoryProperties(input []interface{}) *stor if len(input) == 0 { return nil } - v := input[0].(map[string]interface{}) - return &storage.ActiveDirectoryProperties{ - AzureStorageSid: utils.String(v["storage_sid"].(string)), - DomainGUID: utils.String(v["domain_guid"].(string)), - DomainName: utils.String(v["domain_name"].(string)), - DomainSid: utils.String(v["domain_sid"].(string)), - ForestName: utils.String(v["forest_name"].(string)), - NetBiosDomainName: utils.String(v["netbios_domain_name"].(string)), + m := input[0].(map[string]interface{}) + + output := &storage.ActiveDirectoryProperties{ + DomainGUID: utils.String(m["domain_guid"].(string)), + DomainName: utils.String(m["domain_name"].(string)), } + if v := m["storage_sid"]; v != "" { + output.AzureStorageSid = utils.String(v.(string)) + } + if v := m["domain_sid"]; v != "" { + output.DomainSid = utils.String(v.(string)) + } + if v := m["forest_name"]; v != "" { + output.ForestName = utils.String(v.(string)) + } + if v := m["netbios_domain_name"]; v != "" { + output.NetBiosDomainName = utils.String(v.(string)) + } + return output } func expandArmStorageAccountRouting(input []interface{}) *storage.RoutingPreference { @@ -2584,25 +2611,33 @@ func expandStorageAccountPrivateLinkAccess(inputs []interface{}, tenantId string return &privateLinkAccess } -func expandBlobProperties(input []interface{}) (*storage.BlobServiceProperties, error) { +func expandBlobProperties(kind storage.Kind, input []interface{}) (*storage.BlobServiceProperties, error) { props := storage.BlobServiceProperties{ BlobServicePropertiesProperties: &storage.BlobServicePropertiesProperties{ Cors: &storage.CorsRules{ CorsRules: &[]storage.CorsRule{}, }, - IsVersioningEnabled: utils.Bool(false), - ChangeFeed: &storage.ChangeFeed{ - Enabled: utils.Bool(false), - }, DeleteRetentionPolicy: &storage.DeleteRetentionPolicy{ Enabled: utils.Bool(false), }, - LastAccessTimeTrackingPolicy: &storage.LastAccessTimeTrackingPolicy{ - Enable: utils.Bool(false), - }, }, } + // `Storage` (v1) kind doesn't support: + // - LastAccessTimeTrackingPolicy: Confirmed by SRP. + // - ChangeFeed: See https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-change-feed?tabs=azure-portal#enable-and-disable-the-change-feed. + // - Versioning: See https://learn.microsoft.com/en-us/azure/storage/blobs/versioning-overview#how-blob-versioning-works + // - Restore Policy: See https://learn.microsoft.com/en-us/azure/storage/blobs/point-in-time-restore-overview#prerequisites-for-point-in-time-restore + if kind != storage.KindStorage { + props.LastAccessTimeTrackingPolicy = &storage.LastAccessTimeTrackingPolicy{ + Enable: utils.Bool(false), + } + props.ChangeFeed = &storage.ChangeFeed{ + Enabled: utils.Bool(false), + } + props.IsVersioningEnabled = utils.Bool(false) + } + if len(input) == 0 || input[0] == nil { return &props, nil } @@ -2615,28 +2650,53 @@ func expandBlobProperties(input []interface{}) (*storage.BlobServiceProperties, containerDeletePolicyRaw := v["container_delete_retention_policy"].([]interface{}) props.BlobServicePropertiesProperties.ContainerDeleteRetentionPolicy = expandBlobPropertiesDeleteRetentionPolicy(containerDeletePolicyRaw) - restorePolicyRaw := v["restore_policy"].([]interface{}) - props.BlobServicePropertiesProperties.RestorePolicy = expandBlobPropertiesRestorePolicy(restorePolicyRaw) - corsRaw := v["cors_rule"].([]interface{}) props.BlobServicePropertiesProperties.Cors = expandBlobPropertiesCors(corsRaw) props.IsVersioningEnabled = utils.Bool(v["versioning_enabled"].(bool)) - props.ChangeFeed = &storage.ChangeFeed{ - Enabled: utils.Bool(v["change_feed_enabled"].(bool)), - } - - if v := v["change_feed_retention_in_days"].(int); v != 0 { - props.ChangeFeed.RetentionInDays = utils.Int32((int32)(v)) - } - if version, ok := v["default_service_version"].(string); ok && version != "" { props.DefaultServiceVersion = utils.String(version) } - props.LastAccessTimeTrackingPolicy = &storage.LastAccessTimeTrackingPolicy{ - Enable: utils.Bool(v["last_access_time_enabled"].(bool)), + // `Storage` (v1) kind doesn't support: + // - LastAccessTimeTrackingPolicy + // - ChangeFeed + // - Versioning + // - RestorePolicy + lastAccessTimeEnabled := v["last_access_time_enabled"].(bool) + changeFeedEnabled := v["change_feed_enabled"].(bool) + changeFeedRetentionInDays := v["change_feed_retention_in_days"].(int) + restorePolicyRaw := v["restore_policy"].([]interface{}) + versioningEnabled := v["versioning_enabled"].(bool) + if kind != storage.KindStorage { + props.BlobServicePropertiesProperties.LastAccessTimeTrackingPolicy = &storage.LastAccessTimeTrackingPolicy{ + Enable: utils.Bool(lastAccessTimeEnabled), + } + props.BlobServicePropertiesProperties.ChangeFeed = &storage.ChangeFeed{ + Enabled: utils.Bool(changeFeedEnabled), + } + if changeFeedRetentionInDays != 0 { + props.BlobServicePropertiesProperties.ChangeFeed.RetentionInDays = utils.Int32(int32(changeFeedRetentionInDays)) + } + props.BlobServicePropertiesProperties.RestorePolicy = expandBlobPropertiesRestorePolicy(restorePolicyRaw) + props.BlobServicePropertiesProperties.IsVersioningEnabled = &versioningEnabled + } else { + if lastAccessTimeEnabled { + return nil, fmt.Errorf("`last_access_time_enabled` can not be configured when `kind` is set to `Storage` (v1)") + } + if changeFeedEnabled { + return nil, fmt.Errorf("`change_feed_enabled` can not be configured when `kind` is set to `Storage` (v1)") + } + if changeFeedRetentionInDays != 0 { + return nil, fmt.Errorf("`change_feed_retention_in_days` can not be configured when `kind` is set to `Storage` (v1)") + } + if len(restorePolicyRaw) != 0 { + return nil, fmt.Errorf("`restore_policy` can not be configured when `kind` is set to `Storage` (v1)") + } + if versioningEnabled { + return nil, fmt.Errorf("`versioning_enabled` can not be configured when `kind` is set to `Storage` (v1)") + } } // Sanity check for the prerequisites of restore_policy diff --git a/internal/services/storage/storage_account_resource_test.go b/internal/services/storage/storage_account_resource_test.go index 474b95a0d4da4..75e1b987bd0ca 100644 --- a/internal/services/storage/storage_account_resource_test.go +++ b/internal/services/storage/storage_account_resource_test.go @@ -695,6 +695,21 @@ func TestAccStorageAccount_blobPropertiesEmptyAllowedExposedHeaders(t *testing.T }) } +func TestAccStorageAccount_blobProperties_kindStorageNotSupportLastAccessTimeEnabled(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_storage_account", "test") + r := StorageAccountResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.blobPropertiesStorageKindNotSupportLastAccessTimeEnabled(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccStorageAccount_queueProperties(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_storage_account", "test") r := StorageAccountResource{} @@ -909,6 +924,18 @@ func TestAccAzureRMStorageAccount_azureFilesAuthentication(t *testing.T) { ), }, data.ImportStep(), + { + Config: r.azureFilesAuthenticationAADKERBUpdate(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep( + "azure_files_authentication.0.active_directory.0.storage_sid", + "azure_files_authentication.0.active_directory.0.domain_sid", + "azure_files_authentication.0.active_directory.0.forest_name", + "azure_files_authentication.0.active_directory.0.netbios_domain_name", + ), { Config: r.basic(data), Check: acceptance.ComposeTestCheckFunc( @@ -3287,6 +3314,48 @@ resource "azurerm_storage_account" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomString) } +func (r StorageAccountResource) azureFilesAuthenticationAADKERBUpdate(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-storage-%d" + location = "%s" +} + +resource "azurerm_storage_account" "test" { + name = "unlikely23exst2acct%s" + resource_group_name = azurerm_resource_group.test.name + location = azurerm_resource_group.test.location + account_tier = "Standard" + account_replication_type = "LRS" + + azure_files_authentication { + directory_type = "AADKERB" + active_directory { + domain_name = "adtest2.com" + domain_guid = "13a20c9a-d491-47e6-8a39-299e7a32ea27" + } + } + + tags = { + environment = "production" + } + + lifecycle { + ignore_changes = [ + azure_files_authentication.0.active_directory.0.storage_sid, + azure_files_authentication.0.active_directory.0.domain_sid, + azure_files_authentication.0.active_directory.0.forest_name, + azure_files_authentication.0.active_directory.0.netbios_domain_name, + ] + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString) +} + func (r StorageAccountResource) routing(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { @@ -4409,3 +4478,52 @@ resource "azurerm_storage_account" "test" { } `, data.RandomInteger, data.Locations.Primary, data.RandomString) } + +func (r StorageAccountResource) blobPropertiesStorageKindNotSupportLastAccessTimeEnabled(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestAzureRMSA-%d" + location = "%s" +} + +resource "azurerm_storage_account" "test" { + name = "unlikely23exst2acct%s" + resource_group_name = azurerm_resource_group.test.name + + location = azurerm_resource_group.test.location + account_kind = "Storage" + account_tier = "Standard" + account_replication_type = "LRS" + + blob_properties { + cors_rule { + allowed_origins = ["http://www.example.com"] + exposed_headers = ["x-tempo-*"] + allowed_headers = ["x-tempo-*"] + allowed_methods = ["GET", "PUT", "PATCH"] + max_age_in_seconds = "500" + } + + delete_retention_policy { + days = 300 + } + + default_service_version = "2019-07-07" + container_delete_retention_policy { + days = 7 + } + + # Following properties are not supported for "Storage" (v1) kind + last_access_time_enabled = false + change_feed_enabled = false + versioning_enabled = false + # change_feed_retention_in_days + # restore_policy + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString) +} diff --git a/internal/services/subscription/subscription_resource.go b/internal/services/subscription/subscription_resource.go index a7238e6108077..96ae76b8b98b2 100644 --- a/internal/services/subscription/subscription_resource.go +++ b/internal/services/subscription/subscription_resource.go @@ -411,15 +411,21 @@ func resourceSubscriptionDelete(d *pluginsdk.ResourceData, meta interface{}) err } // Cancel the Subscription - if _, err := subscriptionClient.Cancel(ctx, subscriptionId); err != nil { - return fmt.Errorf("failed to cancel Subscription: %+v", err) - } + if !meta.(*clients.Client).Features.Subscription.PreventCancellationOnDestroy { + log.Printf("[DEBUG] Cancelling subscription %s", subscriptionId) - deadline, _ := ctx.Deadline() - deleteDeadline := time.Until(deadline) + if _, err := subscriptionClient.Cancel(ctx, subscriptionId); err != nil { + return fmt.Errorf("failed to cancel Subscription: %+v", err) + } - if err := waitForSubscriptionStateToSettle(ctx, meta.(*clients.Client), subscriptionId, "Cancelled", deleteDeadline); err != nil { - return fmt.Errorf("failed to cancel Subscription %q (Alias %q): %+v", subscriptionId, id.AliasName, err) + deadline, _ := ctx.Deadline() + deleteDeadline := time.Until(deadline) + + if err := waitForSubscriptionStateToSettle(ctx, meta.(*clients.Client), subscriptionId, "Cancelled", deleteDeadline); err != nil { + return fmt.Errorf("failed to cancel Subscription %q (Alias %q): %+v", subscriptionId, id.AliasName, err) + } + } else { + log.Printf("[DEBUG] Skipping subscription %s cancellation due to feature flag.", *id) } return nil diff --git a/internal/services/videoanalyzer/video_analyzer_edge_module_resource.go b/internal/services/videoanalyzer/video_analyzer_edge_module_resource.go index fc3706359c458..19e520fa12d25 100644 --- a/internal/services/videoanalyzer/video_analyzer_edge_module_resource.go +++ b/internal/services/videoanalyzer/video_analyzer_edge_module_resource.go @@ -69,7 +69,7 @@ func resourceVideoAnalyzerEdgeModuleCreateUpdate(d *pluginsdk.ResourceData, meta defer cancel() id := edgemodules.NewEdgeModuleID(subscriptionId, d.Get("resource_group_name").(string), d.Get("video_analyzer_name").(string), d.Get("name").(string)) if d.IsNewResource() { - existing, err := client.EdgeModulesGet(ctx, id) + existing, err := client.Get(ctx, id) if err != nil { if !response.WasNotFound(existing.HttpResponse) { return fmt.Errorf("checking for existing %s: %+v", id, err) @@ -81,7 +81,7 @@ func resourceVideoAnalyzerEdgeModuleCreateUpdate(d *pluginsdk.ResourceData, meta } } - if _, err := client.EdgeModulesCreateOrUpdate(ctx, id, edgemodules.EdgeModuleEntity{}); err != nil { + if _, err := client.CreateOrUpdate(ctx, id, edgemodules.EdgeModuleEntity{}); err != nil { return fmt.Errorf("creating %s: %+v", id, err) } @@ -99,7 +99,7 @@ func resourceVideoAnalyzerEdgeModuleRead(d *pluginsdk.ResourceData, meta interfa return err } - resp, err := client.EdgeModulesGet(ctx, *id) + resp, err := client.Get(ctx, *id) if err != nil { if response.WasNotFound(resp.HttpResponse) { log.Printf("[INFO] %s was not found - removing from state", *id) @@ -127,7 +127,7 @@ func resourceVideoAnalyzerEdgeModuleDelete(d *pluginsdk.ResourceData, meta inter return err } - if _, err = client.EdgeModulesDelete(ctx, *id); err != nil { + if _, err = client.Delete(ctx, *id); err != nil { return fmt.Errorf("deleting %s: %+v", *id, err) } diff --git a/internal/services/videoanalyzer/video_analyzer_edge_module_resource_test.go b/internal/services/videoanalyzer/video_analyzer_edge_module_resource_test.go index f6faadcacd2d9..209981713166d 100644 --- a/internal/services/videoanalyzer/video_analyzer_edge_module_resource_test.go +++ b/internal/services/videoanalyzer/video_analyzer_edge_module_resource_test.go @@ -56,7 +56,7 @@ func (VideoAnalyzerEdgeModuleResource) Exists(ctx context.Context, clients *clie return nil, err } - resp, err := clients.VideoAnalyzer.EdgeModuleClient.EdgeModulesGet(ctx, *id) + resp, err := clients.VideoAnalyzer.EdgeModuleClient.Get(ctx, *id) if err != nil { return nil, fmt.Errorf("retrieving %s: %v", *id, err) } diff --git a/internal/tf/pluginsdk/resource.go b/internal/tf/pluginsdk/resource.go index 9d672f9843470..93e432e1f64dd 100644 --- a/internal/tf/pluginsdk/resource.go +++ b/internal/tf/pluginsdk/resource.go @@ -4,8 +4,8 @@ package pluginsdk import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // This file is intended to provide a transition from Plugin SDKv1 to Plugin SDKv2 @@ -25,8 +25,8 @@ type ( ) type ( - StateChangeConf = resource.StateChangeConf - StateRefreshFunc = resource.StateRefreshFunc + StateChangeConf = retry.StateChangeConf + StateRefreshFunc = retry.StateRefreshFunc ) type ( diff --git a/internal/tf/pluginsdk/retries.go b/internal/tf/pluginsdk/retries.go index 37ab67093f67d..537a5d8cf3e71 100644 --- a/internal/tf/pluginsdk/retries.go +++ b/internal/tf/pluginsdk/retries.go @@ -6,37 +6,37 @@ package pluginsdk import ( "time" - "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" ) // TODO: work through and switch these out for WaitForState funcs // RetryFunc is the function retried until it succeeds. -type RetryFunc = resource.RetryFunc +type RetryFunc = retry.RetryFunc // RetryError is the required return type of RetryFunc. It forces client code // to choose whether or not a given error is retryable. // TODO: deprecate this in the future -type RetryError = resource.RetryError +type RetryError = retry.RetryError // Retry is a basic wrapper around StateChangeConf that will just retry // a function until it no longer returns an error. func Retry(timeout time.Duration, f RetryFunc) error { // TODO: deprecate this // lint:ignore SA1019 SDKv2 migration - staticcheck's own linter directives are currently being ignored under golanci-lint - return resource.Retry(timeout, f) //nolint:staticcheck + return retry.Retry(timeout, f) //nolint:staticcheck } // RetryableError is a helper to create a RetryError that's retryable from a // given error. func RetryableError(err error) *RetryError { // TODO: deprecate this in the future - return resource.RetryableError(err) + return retry.RetryableError(err) } // NonRetryableError is a helper to create a RetryError that's _not_ retryable // from a given error. func NonRetryableError(err error) *RetryError { // TODO: deprecate this in the future - return resource.NonRetryableError(err) + return retry.NonRetryableError(err) } diff --git a/internal/tools/website-scaffold/main.go b/internal/tools/website-scaffold/main.go index 681083da9ad5d..def890a18ae96 100644 --- a/internal/tools/website-scaffold/main.go +++ b/internal/tools/website-scaffold/main.go @@ -10,18 +10,14 @@ import ( "math" "os" "path/filepath" - "reflect" - "runtime" "sort" "strconv" "strings" "time" - gomonkey "github.com/agiledragon/gomonkey/v2" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-azurerm/internal/provider" "github.com/hashicorp/terraform-provider-azurerm/internal/sdk" - "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/magodo/terraform-provider-azurerm-example-gen/examplegen" ) @@ -296,12 +292,6 @@ func (gen documentationGenerator) argumentsBlock() string { value += fmt.Sprintf("Conflicts with %s.", strings.Join(conflictingValues, ",")) } - if possibleValues := getSchemaPossibleValues(field); len(possibleValues) == 1 { - value += fmt.Sprintf(" The only possible value is `%s`.", possibleValues[0]) - } else if size := len(possibleValues); size > 1 { - value += fmt.Sprintf(" Possible values are `%s` and `%s`.", strings.Join(possibleValues[:size-1], "`, `"), possibleValues[size-1]) - } - if field.Default != nil { value += fmt.Sprintf(" Defaults to `%v`.", field.Default) } @@ -965,34 +955,3 @@ func (gen documentationGenerator) uniqueBlockNamesForAttribute(fields map[string return blockNames, blocks } - -func patchPossibleValuesFn() { - gomonkey.ApplyFunc(validation.StringInSlice, - func(valid []string, ignoreCase bool) schema.SchemaValidateFunc { //nolint:staticcheck - return func(i interface{}, k string) (warnings []string, errors []error) { - var res []string // must have a copy - res = append(res, valid...) - return res, nil - } - }, - ) -} - -func init() { - patchPossibleValuesFn() -} - -func getSchemaPossibleValues(item *schema.Schema) []string { - if item.ValidateFunc != nil { - // check if it is StringsInSlice - pc := reflect.ValueOf(item.ValidateFunc).Pointer() - fn := runtime.FuncForPC(pc) - fnName := fn.Name() - // seems different go version behaviors different - if strings.Contains(fnName, "StringInSlice") || strings.Contains(fnName, "patchPossibleValuesFn") { - values, _ := item.ValidateFunc(nil, "") - return values - } - } - return nil -} diff --git a/internal/tools/website-scaffold/main_test.go b/internal/tools/website-scaffold/main_test.go index 016651a05d0dd..eb261b4a63bb2 100644 --- a/internal/tools/website-scaffold/main_test.go +++ b/internal/tools/website-scaffold/main_test.go @@ -8,7 +8,6 @@ import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/sergi/go-diff/diffmatchpatch" ) @@ -28,7 +27,7 @@ The following arguments are supported: * 'foo_enabled' - (Required) Should the TODO be enabled? -* 'foo_id' - (Required) The ID of the TODO. The only possible value is 'Foo'. +* 'foo_id' - (Required) The ID of the TODO. * 'list' - (Required) Specifies a list of TODO. @@ -50,7 +49,7 @@ The following arguments are supported: A 'block1' block supports the following: -* 'nest_attr1' - (Optional) TODO. Possible values are 'Foo', 'Bar' and 'Bar2'. +* 'nest_attr1' - (Optional) TODO. --- @@ -60,7 +59,7 @@ A 'block2' block supports the following: * 'block3' - (Required) One or more 'block3' blocks as defined below. -* 'nest_attr2' - (Optional) TODO. Possible values are 'Foo' and 'Bar'. +* 'nest_attr2' - (Optional) TODO. --- @@ -90,9 +89,8 @@ A 'block3' block supports the following: Required: true, }, "foo_id": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringInSlice([]string{"Foo"}, false), + Type: schema.TypeString, + Required: true, }, "block2": { Type: schema.TypeList, @@ -100,9 +98,8 @@ A 'block3' block supports the following: Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "nest_attr2": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringInSlice([]string{"Foo", "Bar"}, false), + Type: schema.TypeString, + Optional: true, }, //lintignore:XS003 "block1": { @@ -112,9 +109,8 @@ A 'block3' block supports the following: Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "nest_attr1": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringInSlice([]string{"Foo", "Bar", "Bar2"}, false), + Type: schema.TypeString, + Optional: true, }, }, }, diff --git a/vendor/github.com/ProtonMail/go-crypto/AUTHORS b/vendor/github.com/ProtonMail/go-crypto/AUTHORS new file mode 100644 index 0000000000000..2b00ddba0dfee --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at https://tip.golang.org/AUTHORS. diff --git a/vendor/github.com/ProtonMail/go-crypto/CONTRIBUTORS b/vendor/github.com/ProtonMail/go-crypto/CONTRIBUTORS new file mode 100644 index 0000000000000..1fbd3e976faf5 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/github.com/ProtonMail/go-crypto/LICENSE b/vendor/github.com/ProtonMail/go-crypto/LICENSE new file mode 100644 index 0000000000000..6a66aea5eafe0 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/ProtonMail/go-crypto/PATENTS b/vendor/github.com/ProtonMail/go-crypto/PATENTS new file mode 100644 index 0000000000000..733099041f84f --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/ProtonMail/go-crypto/bitcurves/bitcurve.go b/vendor/github.com/ProtonMail/go-crypto/bitcurves/bitcurve.go new file mode 100644 index 0000000000000..c85e6befecabd --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/bitcurves/bitcurve.go @@ -0,0 +1,381 @@ +package bitcurves + +// Copyright 2010 The Go Authors. All rights reserved. +// Copyright 2011 ThePiachu. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package bitelliptic implements several Koblitz elliptic curves over prime +// fields. + +// This package operates, internally, on Jacobian coordinates. For a given +// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1) +// where x = x1/z1² and y = y1/z1³. The greatest speedups come when the whole +// calculation can be performed within the transform (as in ScalarMult and +// ScalarBaseMult). But even for Add and Double, it's faster to apply and +// reverse the transform than to operate in affine coordinates. + +import ( + "crypto/elliptic" + "io" + "math/big" + "sync" +) + +// A BitCurve represents a Koblitz Curve with a=0. +// See http://www.hyperelliptic.org/EFD/g1p/auto-shortw.html +type BitCurve struct { + Name string + P *big.Int // the order of the underlying field + N *big.Int // the order of the base point + B *big.Int // the constant of the BitCurve equation + Gx, Gy *big.Int // (x,y) of the base point + BitSize int // the size of the underlying field +} + +// Params returns the parameters of the given BitCurve (see BitCurve struct) +func (bitCurve *BitCurve) Params() (cp *elliptic.CurveParams) { + cp = new(elliptic.CurveParams) + cp.Name = bitCurve.Name + cp.P = bitCurve.P + cp.N = bitCurve.N + cp.Gx = bitCurve.Gx + cp.Gy = bitCurve.Gy + cp.BitSize = bitCurve.BitSize + return cp +} + +// IsOnCurve returns true if the given (x,y) lies on the BitCurve. +func (bitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool { + // y² = x³ + b + y2 := new(big.Int).Mul(y, y) //y² + y2.Mod(y2, bitCurve.P) //y²%P + + x3 := new(big.Int).Mul(x, x) //x² + x3.Mul(x3, x) //x³ + + x3.Add(x3, bitCurve.B) //x³+B + x3.Mod(x3, bitCurve.P) //(x³+B)%P + + return x3.Cmp(y2) == 0 +} + +// affineFromJacobian reverses the Jacobian transform. See the comment at the +// top of the file. +func (bitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big.Int) { + if z.Cmp(big.NewInt(0)) == 0 { + panic("bitcurve: Can't convert to affine with Jacobian Z = 0") + } + // x = YZ^2 mod P + zinv := new(big.Int).ModInverse(z, bitCurve.P) + zinvsq := new(big.Int).Mul(zinv, zinv) + + xOut = new(big.Int).Mul(x, zinvsq) + xOut.Mod(xOut, bitCurve.P) + // y = YZ^3 mod P + zinvsq.Mul(zinvsq, zinv) + yOut = new(big.Int).Mul(y, zinvsq) + yOut.Mod(yOut, bitCurve.P) + return xOut, yOut +} + +// Add returns the sum of (x1,y1) and (x2,y2) +func (bitCurve *BitCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) { + z := new(big.Int).SetInt64(1) + x, y, z := bitCurve.addJacobian(x1, y1, z, x2, y2, z) + return bitCurve.affineFromJacobian(x, y, z) +} + +// addJacobian takes two points in Jacobian coordinates, (x1, y1, z1) and +// (x2, y2, z2) and returns their sum, also in Jacobian form. +func (bitCurve *BitCurve) addJacobian(x1, y1, z1, x2, y2, z2 *big.Int) (*big.Int, *big.Int, *big.Int) { + // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl + z1z1 := new(big.Int).Mul(z1, z1) + z1z1.Mod(z1z1, bitCurve.P) + z2z2 := new(big.Int).Mul(z2, z2) + z2z2.Mod(z2z2, bitCurve.P) + + u1 := new(big.Int).Mul(x1, z2z2) + u1.Mod(u1, bitCurve.P) + u2 := new(big.Int).Mul(x2, z1z1) + u2.Mod(u2, bitCurve.P) + h := new(big.Int).Sub(u2, u1) + if h.Sign() == -1 { + h.Add(h, bitCurve.P) + } + i := new(big.Int).Lsh(h, 1) + i.Mul(i, i) + j := new(big.Int).Mul(h, i) + + s1 := new(big.Int).Mul(y1, z2) + s1.Mul(s1, z2z2) + s1.Mod(s1, bitCurve.P) + s2 := new(big.Int).Mul(y2, z1) + s2.Mul(s2, z1z1) + s2.Mod(s2, bitCurve.P) + r := new(big.Int).Sub(s2, s1) + if r.Sign() == -1 { + r.Add(r, bitCurve.P) + } + r.Lsh(r, 1) + v := new(big.Int).Mul(u1, i) + + x3 := new(big.Int).Set(r) + x3.Mul(x3, x3) + x3.Sub(x3, j) + x3.Sub(x3, v) + x3.Sub(x3, v) + x3.Mod(x3, bitCurve.P) + + y3 := new(big.Int).Set(r) + v.Sub(v, x3) + y3.Mul(y3, v) + s1.Mul(s1, j) + s1.Lsh(s1, 1) + y3.Sub(y3, s1) + y3.Mod(y3, bitCurve.P) + + z3 := new(big.Int).Add(z1, z2) + z3.Mul(z3, z3) + z3.Sub(z3, z1z1) + if z3.Sign() == -1 { + z3.Add(z3, bitCurve.P) + } + z3.Sub(z3, z2z2) + if z3.Sign() == -1 { + z3.Add(z3, bitCurve.P) + } + z3.Mul(z3, h) + z3.Mod(z3, bitCurve.P) + + return x3, y3, z3 +} + +// Double returns 2*(x,y) +func (bitCurve *BitCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) { + z1 := new(big.Int).SetInt64(1) + return bitCurve.affineFromJacobian(bitCurve.doubleJacobian(x1, y1, z1)) +} + +// doubleJacobian takes a point in Jacobian coordinates, (x, y, z), and +// returns its double, also in Jacobian form. +func (bitCurve *BitCurve) doubleJacobian(x, y, z *big.Int) (*big.Int, *big.Int, *big.Int) { + // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l + + a := new(big.Int).Mul(x, x) //X1² + b := new(big.Int).Mul(y, y) //Y1² + c := new(big.Int).Mul(b, b) //B² + + d := new(big.Int).Add(x, b) //X1+B + d.Mul(d, d) //(X1+B)² + d.Sub(d, a) //(X1+B)²-A + d.Sub(d, c) //(X1+B)²-A-C + d.Mul(d, big.NewInt(2)) //2*((X1+B)²-A-C) + + e := new(big.Int).Mul(big.NewInt(3), a) //3*A + f := new(big.Int).Mul(e, e) //E² + + x3 := new(big.Int).Mul(big.NewInt(2), d) //2*D + x3.Sub(f, x3) //F-2*D + x3.Mod(x3, bitCurve.P) + + y3 := new(big.Int).Sub(d, x3) //D-X3 + y3.Mul(e, y3) //E*(D-X3) + y3.Sub(y3, new(big.Int).Mul(big.NewInt(8), c)) //E*(D-X3)-8*C + y3.Mod(y3, bitCurve.P) + + z3 := new(big.Int).Mul(y, z) //Y1*Z1 + z3.Mul(big.NewInt(2), z3) //3*Y1*Z1 + z3.Mod(z3, bitCurve.P) + + return x3, y3, z3 +} + +// TODO: double check if it is okay +// ScalarMult returns k*(Bx,By) where k is a number in big-endian form. +func (bitCurve *BitCurve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int) { + // We have a slight problem in that the identity of the group (the + // point at infinity) cannot be represented in (x, y) form on a finite + // machine. Thus the standard add/double algorithm has to be tweaked + // slightly: our initial state is not the identity, but x, and we + // ignore the first true bit in |k|. If we don't find any true bits in + // |k|, then we return nil, nil, because we cannot return the identity + // element. + + Bz := new(big.Int).SetInt64(1) + x := Bx + y := By + z := Bz + + seenFirstTrue := false + for _, byte := range k { + for bitNum := 0; bitNum < 8; bitNum++ { + if seenFirstTrue { + x, y, z = bitCurve.doubleJacobian(x, y, z) + } + if byte&0x80 == 0x80 { + if !seenFirstTrue { + seenFirstTrue = true + } else { + x, y, z = bitCurve.addJacobian(Bx, By, Bz, x, y, z) + } + } + byte <<= 1 + } + } + + if !seenFirstTrue { + return nil, nil + } + + return bitCurve.affineFromJacobian(x, y, z) +} + +// ScalarBaseMult returns k*G, where G is the base point of the group and k is +// an integer in big-endian form. +func (bitCurve *BitCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) { + return bitCurve.ScalarMult(bitCurve.Gx, bitCurve.Gy, k) +} + +var mask = []byte{0xff, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f} + +// TODO: double check if it is okay +// GenerateKey returns a public/private key pair. The private key is generated +// using the given reader, which must return random data. +func (bitCurve *BitCurve) GenerateKey(rand io.Reader) (priv []byte, x, y *big.Int, err error) { + byteLen := (bitCurve.BitSize + 7) >> 3 + priv = make([]byte, byteLen) + + for x == nil { + _, err = io.ReadFull(rand, priv) + if err != nil { + return + } + // We have to mask off any excess bits in the case that the size of the + // underlying field is not a whole number of bytes. + priv[0] &= mask[bitCurve.BitSize%8] + // This is because, in tests, rand will return all zeros and we don't + // want to get the point at infinity and loop forever. + priv[1] ^= 0x42 + x, y = bitCurve.ScalarBaseMult(priv) + } + return +} + +// Marshal converts a point into the form specified in section 4.3.6 of ANSI +// X9.62. +func (bitCurve *BitCurve) Marshal(x, y *big.Int) []byte { + byteLen := (bitCurve.BitSize + 7) >> 3 + + ret := make([]byte, 1+2*byteLen) + ret[0] = 4 // uncompressed point + + xBytes := x.Bytes() + copy(ret[1+byteLen-len(xBytes):], xBytes) + yBytes := y.Bytes() + copy(ret[1+2*byteLen-len(yBytes):], yBytes) + return ret +} + +// Unmarshal converts a point, serialised by Marshal, into an x, y pair. On +// error, x = nil. +func (bitCurve *BitCurve) Unmarshal(data []byte) (x, y *big.Int) { + byteLen := (bitCurve.BitSize + 7) >> 3 + if len(data) != 1+2*byteLen { + return + } + if data[0] != 4 { // uncompressed form + return + } + x = new(big.Int).SetBytes(data[1 : 1+byteLen]) + y = new(big.Int).SetBytes(data[1+byteLen:]) + return +} + +//curve parameters taken from: +//http://www.secg.org/collateral/sec2_final.pdf + +var initonce sync.Once +var secp160k1 *BitCurve +var secp192k1 *BitCurve +var secp224k1 *BitCurve +var secp256k1 *BitCurve + +func initAll() { + initS160() + initS192() + initS224() + initS256() +} + +func initS160() { + // See SEC 2 section 2.4.1 + secp160k1 = new(BitCurve) + secp160k1.Name = "secp160k1" + secp160k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", 16) + secp160k1.N, _ = new(big.Int).SetString("0100000000000000000001B8FA16DFAB9ACA16B6B3", 16) + secp160k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000007", 16) + secp160k1.Gx, _ = new(big.Int).SetString("3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", 16) + secp160k1.Gy, _ = new(big.Int).SetString("938CF935318FDCED6BC28286531733C3F03C4FEE", 16) + secp160k1.BitSize = 160 +} + +func initS192() { + // See SEC 2 section 2.5.1 + secp192k1 = new(BitCurve) + secp192k1.Name = "secp192k1" + secp192k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", 16) + secp192k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", 16) + secp192k1.B, _ = new(big.Int).SetString("000000000000000000000000000000000000000000000003", 16) + secp192k1.Gx, _ = new(big.Int).SetString("DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", 16) + secp192k1.Gy, _ = new(big.Int).SetString("9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", 16) + secp192k1.BitSize = 192 +} + +func initS224() { + // See SEC 2 section 2.6.1 + secp224k1 = new(BitCurve) + secp224k1.Name = "secp224k1" + secp224k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", 16) + secp224k1.N, _ = new(big.Int).SetString("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", 16) + secp224k1.B, _ = new(big.Int).SetString("00000000000000000000000000000000000000000000000000000005", 16) + secp224k1.Gx, _ = new(big.Int).SetString("A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C", 16) + secp224k1.Gy, _ = new(big.Int).SetString("7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5", 16) + secp224k1.BitSize = 224 +} + +func initS256() { + // See SEC 2 section 2.7.1 + secp256k1 = new(BitCurve) + secp256k1.Name = "secp256k1" + secp256k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16) + secp256k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16) + secp256k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000000000000000000000000000007", 16) + secp256k1.Gx, _ = new(big.Int).SetString("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16) + secp256k1.Gy, _ = new(big.Int).SetString("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16) + secp256k1.BitSize = 256 +} + +// S160 returns a BitCurve which implements secp160k1 (see SEC 2 section 2.4.1) +func S160() *BitCurve { + initonce.Do(initAll) + return secp160k1 +} + +// S192 returns a BitCurve which implements secp192k1 (see SEC 2 section 2.5.1) +func S192() *BitCurve { + initonce.Do(initAll) + return secp192k1 +} + +// S224 returns a BitCurve which implements secp224k1 (see SEC 2 section 2.6.1) +func S224() *BitCurve { + initonce.Do(initAll) + return secp224k1 +} + +// S256 returns a BitCurve which implements bitcurves (see SEC 2 section 2.7.1) +func S256() *BitCurve { + initonce.Do(initAll) + return secp256k1 +} diff --git a/vendor/github.com/ProtonMail/go-crypto/brainpool/brainpool.go b/vendor/github.com/ProtonMail/go-crypto/brainpool/brainpool.go new file mode 100644 index 0000000000000..cb6676de24b1c --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/brainpool/brainpool.go @@ -0,0 +1,134 @@ +// Package brainpool implements Brainpool elliptic curves. +// Implementation of rcurves is from github.com/ebfe/brainpool +// Note that these curves are implemented with naive, non-constant time operations +// and are likely not suitable for environments where timing attacks are a concern. +package brainpool + +import ( + "crypto/elliptic" + "math/big" + "sync" +) + +var ( + once sync.Once + p256t1, p384t1, p512t1 *elliptic.CurveParams + p256r1, p384r1, p512r1 *rcurve +) + +func initAll() { + initP256t1() + initP384t1() + initP512t1() + initP256r1() + initP384r1() + initP512r1() +} + +func initP256t1() { + p256t1 = &elliptic.CurveParams{Name: "brainpoolP256t1"} + p256t1.P, _ = new(big.Int).SetString("A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", 16) + p256t1.N, _ = new(big.Int).SetString("A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7", 16) + p256t1.B, _ = new(big.Int).SetString("662C61C430D84EA4FE66A7733D0B76B7BF93EBC4AF2F49256AE58101FEE92B04", 16) + p256t1.Gx, _ = new(big.Int).SetString("A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F4", 16) + p256t1.Gy, _ = new(big.Int).SetString("2D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE", 16) + p256t1.BitSize = 256 +} + +func initP256r1() { + twisted := p256t1 + params := &elliptic.CurveParams{ + Name: "brainpoolP256r1", + P: twisted.P, + N: twisted.N, + BitSize: twisted.BitSize, + } + params.Gx, _ = new(big.Int).SetString("8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262", 16) + params.Gy, _ = new(big.Int).SetString("547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", 16) + z, _ := new(big.Int).SetString("3E2D4BD9597B58639AE7AA669CAB9837CF5CF20A2C852D10F655668DFC150EF0", 16) + p256r1 = newrcurve(twisted, params, z) +} + +func initP384t1() { + p384t1 = &elliptic.CurveParams{Name: "brainpoolP384t1"} + p384t1.P, _ = new(big.Int).SetString("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53", 16) + p384t1.N, _ = new(big.Int).SetString("8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565", 16) + p384t1.B, _ = new(big.Int).SetString("7F519EADA7BDA81BD826DBA647910F8C4B9346ED8CCDC64E4B1ABD11756DCE1D2074AA263B88805CED70355A33B471EE", 16) + p384t1.Gx, _ = new(big.Int).SetString("18DE98B02DB9A306F2AFCD7235F72A819B80AB12EBD653172476FECD462AABFFC4FF191B946A5F54D8D0AA2F418808CC", 16) + p384t1.Gy, _ = new(big.Int).SetString("25AB056962D30651A114AFD2755AD336747F93475B7A1FCA3B88F2B6A208CCFE469408584DC2B2912675BF5B9E582928", 16) + p384t1.BitSize = 384 +} + +func initP384r1() { + twisted := p384t1 + params := &elliptic.CurveParams{ + Name: "brainpoolP384r1", + P: twisted.P, + N: twisted.N, + BitSize: twisted.BitSize, + } + params.Gx, _ = new(big.Int).SetString("1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E", 16) + params.Gy, _ = new(big.Int).SetString("8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315", 16) + z, _ := new(big.Int).SetString("41DFE8DD399331F7166A66076734A89CD0D2BCDB7D068E44E1F378F41ECBAE97D2D63DBC87BCCDDCCC5DA39E8589291C", 16) + p384r1 = newrcurve(twisted, params, z) +} + +func initP512t1() { + p512t1 = &elliptic.CurveParams{Name: "brainpoolP512t1"} + p512t1.P, _ = new(big.Int).SetString("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3", 16) + p512t1.N, _ = new(big.Int).SetString("AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069", 16) + p512t1.B, _ = new(big.Int).SetString("7CBBBCF9441CFAB76E1890E46884EAE321F70C0BCB4981527897504BEC3E36A62BCDFA2304976540F6450085F2DAE145C22553B465763689180EA2571867423E", 16) + p512t1.Gx, _ = new(big.Int).SetString("640ECE5C12788717B9C1BA06CBC2A6FEBA85842458C56DDE9DB1758D39C0313D82BA51735CDB3EA499AA77A7D6943A64F7A3F25FE26F06B51BAA2696FA9035DA", 16) + p512t1.Gy, _ = new(big.Int).SetString("5B534BD595F5AF0FA2C892376C84ACE1BB4E3019B71634C01131159CAE03CEE9D9932184BEEF216BD71DF2DADF86A627306ECFF96DBB8BACE198B61E00F8B332", 16) + p512t1.BitSize = 512 +} + +func initP512r1() { + twisted := p512t1 + params := &elliptic.CurveParams{ + Name: "brainpoolP512r1", + P: twisted.P, + N: twisted.N, + BitSize: twisted.BitSize, + } + params.Gx, _ = new(big.Int).SetString("81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822", 16) + params.Gy, _ = new(big.Int).SetString("7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892", 16) + z, _ := new(big.Int).SetString("12EE58E6764838B69782136F0F2D3BA06E27695716054092E60A80BEDB212B64E585D90BCE13761F85C3F1D2A64E3BE8FEA2220F01EBA5EEB0F35DBD29D922AB", 16) + p512r1 = newrcurve(twisted, params, z) +} + +// P256t1 returns a Curve which implements Brainpool P256t1 (see RFC 5639, section 3.4) +func P256t1() elliptic.Curve { + once.Do(initAll) + return p256t1 +} + +// P256r1 returns a Curve which implements Brainpool P256r1 (see RFC 5639, section 3.4) +func P256r1() elliptic.Curve { + once.Do(initAll) + return p256r1 +} + +// P384t1 returns a Curve which implements Brainpool P384t1 (see RFC 5639, section 3.6) +func P384t1() elliptic.Curve { + once.Do(initAll) + return p384t1 +} + +// P384r1 returns a Curve which implements Brainpool P384r1 (see RFC 5639, section 3.6) +func P384r1() elliptic.Curve { + once.Do(initAll) + return p384r1 +} + +// P512t1 returns a Curve which implements Brainpool P512t1 (see RFC 5639, section 3.7) +func P512t1() elliptic.Curve { + once.Do(initAll) + return p512t1 +} + +// P512r1 returns a Curve which implements Brainpool P512r1 (see RFC 5639, section 3.7) +func P512r1() elliptic.Curve { + once.Do(initAll) + return p512r1 +} diff --git a/vendor/github.com/ProtonMail/go-crypto/brainpool/rcurve.go b/vendor/github.com/ProtonMail/go-crypto/brainpool/rcurve.go new file mode 100644 index 0000000000000..7e291d6aa4e3d --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/brainpool/rcurve.go @@ -0,0 +1,83 @@ +package brainpool + +import ( + "crypto/elliptic" + "math/big" +) + +var _ elliptic.Curve = (*rcurve)(nil) + +type rcurve struct { + twisted elliptic.Curve + params *elliptic.CurveParams + z *big.Int + zinv *big.Int + z2 *big.Int + z3 *big.Int + zinv2 *big.Int + zinv3 *big.Int +} + +var ( + two = big.NewInt(2) + three = big.NewInt(3) +) + +func newrcurve(twisted elliptic.Curve, params *elliptic.CurveParams, z *big.Int) *rcurve { + zinv := new(big.Int).ModInverse(z, params.P) + return &rcurve{ + twisted: twisted, + params: params, + z: z, + zinv: zinv, + z2: new(big.Int).Exp(z, two, params.P), + z3: new(big.Int).Exp(z, three, params.P), + zinv2: new(big.Int).Exp(zinv, two, params.P), + zinv3: new(big.Int).Exp(zinv, three, params.P), + } +} + +func (curve *rcurve) toTwisted(x, y *big.Int) (*big.Int, *big.Int) { + var tx, ty big.Int + tx.Mul(x, curve.z2) + tx.Mod(&tx, curve.params.P) + ty.Mul(y, curve.z3) + ty.Mod(&ty, curve.params.P) + return &tx, &ty +} + +func (curve *rcurve) fromTwisted(tx, ty *big.Int) (*big.Int, *big.Int) { + var x, y big.Int + x.Mul(tx, curve.zinv2) + x.Mod(&x, curve.params.P) + y.Mul(ty, curve.zinv3) + y.Mod(&y, curve.params.P) + return &x, &y +} + +func (curve *rcurve) Params() *elliptic.CurveParams { + return curve.params +} + +func (curve *rcurve) IsOnCurve(x, y *big.Int) bool { + return curve.twisted.IsOnCurve(curve.toTwisted(x, y)) +} + +func (curve *rcurve) Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int) { + tx1, ty1 := curve.toTwisted(x1, y1) + tx2, ty2 := curve.toTwisted(x2, y2) + return curve.fromTwisted(curve.twisted.Add(tx1, ty1, tx2, ty2)) +} + +func (curve *rcurve) Double(x1, y1 *big.Int) (x, y *big.Int) { + return curve.fromTwisted(curve.twisted.Double(curve.toTwisted(x1, y1))) +} + +func (curve *rcurve) ScalarMult(x1, y1 *big.Int, scalar []byte) (x, y *big.Int) { + tx1, ty1 := curve.toTwisted(x1, y1) + return curve.fromTwisted(curve.twisted.ScalarMult(tx1, ty1, scalar)) +} + +func (curve *rcurve) ScalarBaseMult(scalar []byte) (x, y *big.Int) { + return curve.fromTwisted(curve.twisted.ScalarBaseMult(scalar)) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/eax/eax.go b/vendor/github.com/ProtonMail/go-crypto/eax/eax.go new file mode 100644 index 0000000000000..3ae91d594cd7e --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/eax/eax.go @@ -0,0 +1,162 @@ +// Copyright (C) 2019 ProtonTech AG + +// Package eax provides an implementation of the EAX +// (encrypt-authenticate-translate) mode of operation, as described in +// Bellare, Rogaway, and Wagner "THE EAX MODE OF OPERATION: A TWO-PASS +// AUTHENTICATED-ENCRYPTION SCHEME OPTIMIZED FOR SIMPLICITY AND EFFICIENCY." +// In FSE'04, volume 3017 of LNCS, 2004 +package eax + +import ( + "crypto/cipher" + "crypto/subtle" + "errors" + "github.com/ProtonMail/go-crypto/internal/byteutil" +) + +const ( + defaultTagSize = 16 + defaultNonceSize = 16 +) + +type eax struct { + block cipher.Block // Only AES-{128, 192, 256} supported + tagSize int // At least 12 bytes recommended + nonceSize int +} + +func (e *eax) NonceSize() int { + return e.nonceSize +} + +func (e *eax) Overhead() int { + return e.tagSize +} + +// NewEAX returns an EAX instance with AES-{KEYLENGTH} and default nonce and +// tag lengths. Supports {128, 192, 256}- bit key length. +func NewEAX(block cipher.Block) (cipher.AEAD, error) { + return NewEAXWithNonceAndTagSize(block, defaultNonceSize, defaultTagSize) +} + +// NewEAXWithNonceAndTagSize returns an EAX instance with AES-{keyLength} and +// given nonce and tag lengths in bytes. Panics on zero nonceSize and +// exceedingly long tags. +// +// It is recommended to use at least 12 bytes as tag length (see, for instance, +// NIST SP 800-38D). +// +// Only to be used for compatibility with existing cryptosystems with +// non-standard parameters. For all other cases, prefer NewEAX. +func NewEAXWithNonceAndTagSize( + block cipher.Block, nonceSize, tagSize int) (cipher.AEAD, error) { + if nonceSize < 1 { + return nil, eaxError("Cannot initialize EAX with nonceSize = 0") + } + if tagSize > block.BlockSize() { + return nil, eaxError("Custom tag length exceeds blocksize") + } + return &eax{ + block: block, + tagSize: tagSize, + nonceSize: nonceSize, + }, nil +} + +func (e *eax) Seal(dst, nonce, plaintext, adata []byte) []byte { + if len(nonce) > e.nonceSize { + panic("crypto/eax: Nonce too long for this instance") + } + ret, out := byteutil.SliceForAppend(dst, len(plaintext)+e.tagSize) + omacNonce := e.omacT(0, nonce) + omacAdata := e.omacT(1, adata) + + // Encrypt message using CTR mode and omacNonce as IV + ctr := cipher.NewCTR(e.block, omacNonce) + ciphertextData := out[:len(plaintext)] + ctr.XORKeyStream(ciphertextData, plaintext) + + omacCiphertext := e.omacT(2, ciphertextData) + + tag := out[len(plaintext):] + for i := 0; i < e.tagSize; i++ { + tag[i] = omacCiphertext[i] ^ omacNonce[i] ^ omacAdata[i] + } + return ret +} + +func (e *eax) Open(dst, nonce, ciphertext, adata []byte) ([]byte, error) { + if len(nonce) > e.nonceSize { + panic("crypto/eax: Nonce too long for this instance") + } + if len(ciphertext) < e.tagSize { + return nil, eaxError("Ciphertext shorter than tag length") + } + sep := len(ciphertext) - e.tagSize + + // Compute tag + omacNonce := e.omacT(0, nonce) + omacAdata := e.omacT(1, adata) + omacCiphertext := e.omacT(2, ciphertext[:sep]) + + tag := make([]byte, e.tagSize) + for i := 0; i < e.tagSize; i++ { + tag[i] = omacCiphertext[i] ^ omacNonce[i] ^ omacAdata[i] + } + + // Compare tags + if subtle.ConstantTimeCompare(ciphertext[sep:], tag) != 1 { + return nil, eaxError("Tag authentication failed") + } + + // Decrypt ciphertext + ret, out := byteutil.SliceForAppend(dst, len(ciphertext)) + ctr := cipher.NewCTR(e.block, omacNonce) + ctr.XORKeyStream(out, ciphertext[:sep]) + + return ret[:sep], nil +} + +// Tweakable OMAC - Calls OMAC_K([t]_n || plaintext) +func (e *eax) omacT(t byte, plaintext []byte) []byte { + blockSize := e.block.BlockSize() + byteT := make([]byte, blockSize) + byteT[blockSize-1] = t + concat := append(byteT, plaintext...) + return e.omac(concat) +} + +func (e *eax) omac(plaintext []byte) []byte { + blockSize := e.block.BlockSize() + // L ← E_K(0^n); B ← 2L; P ← 4L + L := make([]byte, blockSize) + e.block.Encrypt(L, L) + B := byteutil.GfnDouble(L) + P := byteutil.GfnDouble(B) + + // CBC with IV = 0 + cbc := cipher.NewCBCEncrypter(e.block, make([]byte, blockSize)) + padded := e.pad(plaintext, B, P) + cbcCiphertext := make([]byte, len(padded)) + cbc.CryptBlocks(cbcCiphertext, padded) + + return cbcCiphertext[len(cbcCiphertext)-blockSize:] +} + +func (e *eax) pad(plaintext, B, P []byte) []byte { + // if |M| in {n, 2n, 3n, ...} + blockSize := e.block.BlockSize() + if len(plaintext) != 0 && len(plaintext)%blockSize == 0 { + return byteutil.RightXor(plaintext, B) + } + + // else return (M || 1 || 0^(n−1−(|M| % n))) xor→ P + ending := make([]byte, blockSize-len(plaintext)%blockSize) + ending[0] = 0x80 + padded := append(plaintext, ending...) + return byteutil.RightXor(padded, P) +} + +func eaxError(err string) error { + return errors.New("crypto/eax: " + err) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/eax/eax_test_vectors.go b/vendor/github.com/ProtonMail/go-crypto/eax/eax_test_vectors.go new file mode 100644 index 0000000000000..ddb53d07905cf --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/eax/eax_test_vectors.go @@ -0,0 +1,58 @@ +package eax + +// Test vectors from +// https://web.cs.ucdavis.edu/~rogaway/papers/eax.pdf +var testVectors = []struct { + msg, key, nonce, header, ciphertext string +}{ + {"", + "233952DEE4D5ED5F9B9C6D6FF80FF478", + "62EC67F9C3A4A407FCB2A8C49031A8B3", + "6BFB914FD07EAE6B", + "E037830E8389F27B025A2D6527E79D01"}, + {"F7FB", + "91945D3F4DCBEE0BF45EF52255F095A4", + "BECAF043B0A23D843194BA972C66DEBD", + "FA3BFD4806EB53FA", + "19DD5C4C9331049D0BDAB0277408F67967E5"}, + {"1A47CB4933", + "01F74AD64077F2E704C0F60ADA3DD523", + "70C3DB4F0D26368400A10ED05D2BFF5E", + "234A3463C1264AC6", + "D851D5BAE03A59F238A23E39199DC9266626C40F80"}, + {"481C9E39B1", + "D07CF6CBB7F313BDDE66B727AFD3C5E8", + "8408DFFF3C1A2B1292DC199E46B7D617", + "33CCE2EABFF5A79D", + "632A9D131AD4C168A4225D8E1FF755939974A7BEDE"}, + {"40D0C07DA5E4", + "35B6D0580005BBC12B0587124557D2C2", + "FDB6B06676EEDC5C61D74276E1F8E816", + "AEB96EAEBE2970E9", + "071DFE16C675CB0677E536F73AFE6A14B74EE49844DD"}, + {"4DE3B35C3FC039245BD1FB7D", + "BD8E6E11475E60B268784C38C62FEB22", + "6EAC5C93072D8E8513F750935E46DA1B", + "D4482D1CA78DCE0F", + "835BB4F15D743E350E728414ABB8644FD6CCB86947C5E10590210A4F"}, + {"8B0A79306C9CE7ED99DAE4F87F8DD61636", + "7C77D6E813BED5AC98BAA417477A2E7D", + "1A8C98DCD73D38393B2BF1569DEEFC19", + "65D2017990D62528", + "02083E3979DA014812F59F11D52630DA30137327D10649B0AA6E1C181DB617D7F2"}, + {"1BDA122BCE8A8DBAF1877D962B8592DD2D56", + "5FFF20CAFAB119CA2FC73549E20F5B0D", + "DDE59B97D722156D4D9AFF2BC7559826", + "54B9F04E6A09189A", + "2EC47B2C4954A489AFC7BA4897EDCDAE8CC33B60450599BD02C96382902AEF7F832A"}, + {"6CF36720872B8513F6EAB1A8A44438D5EF11", + "A4A4782BCFFD3EC5E7EF6D8C34A56123", + "B781FCF2F75FA5A8DE97A9CA48E522EC", + "899A175897561D7E", + "0DE18FD0FDD91E7AF19F1D8EE8733938B1E8E7F6D2231618102FDB7FE55FF1991700"}, + {"CA40D7446E545FFAED3BD12A740A659FFBBB3CEAB7", + "8395FCF1E95BEBD697BD010BC766AAC3", + "22E7ADD93CFC6393C57EC0B3C17D6B44", + "126735FCC320D25A", + "CB8920F87A6C75CFF39627B56E3ED197C552D295A7CFC46AFC253B4652B1AF3795B124AB6E"}, +} diff --git a/vendor/github.com/ProtonMail/go-crypto/eax/random_vectors.go b/vendor/github.com/ProtonMail/go-crypto/eax/random_vectors.go new file mode 100644 index 0000000000000..4eb19f28d9c44 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/eax/random_vectors.go @@ -0,0 +1,131 @@ +// These vectors include key length in {128, 192, 256}, tag size 128, and +// random nonce, header, and plaintext lengths. + +// This file was automatically generated. + +package eax + +var randomVectors = []struct { + key, nonce, header, plaintext, ciphertext string +}{ + {"DFDE093F36B0356E5A81F609786982E3", + "1D8AC604419001816905BA72B14CED7E", + "152A1517A998D7A24163FCDD146DE81AC347C8B97088F502093C1ABB8F6E33D9A219C34D7603A18B1F5ABE02E56661B7D7F67E81EC08C1302EF38D80A859486D450E94A4F26AD9E68EEBBC0C857A0FC5CF9E641D63D565A7E361BC8908F5A8DC8FD6", + "1C8EAAB71077FE18B39730A3156ADE29C5EE824C7EE86ED2A253B775603FB237116E654F6FEC588DD27F523A0E01246FE73FE348491F2A8E9ABC6CA58D663F71CDBCF4AD798BE46C42AE6EE8B599DB44A1A48D7BBBBA0F7D2750181E1C5E66967F7D57CBD30AFBDA5727", + "79E7E150934BBEBF7013F61C60462A14D8B15AF7A248AFB8A344EF021C1500E16666891D6E973D8BB56B71A371F12CA34660C4410C016982B20F547E3762A58B7BF4F20236CADCF559E2BE7D783B13723B2741FC7CDC8997D839E39A3DDD2BADB96743DD7049F1BDB0516A262869915B3F70498AFB7B191BF960"}, + {"F10619EF02E5D94D7550EB84ED364A21", + "8DC0D4F2F745BBAE835CC5574B942D20", + "FE561358F2E8DF7E1024FF1AE9A8D36EBD01352214505CB99D644777A8A1F6027FA2BDBFC529A9B91136D5F2416CFC5F0F4EC3A1AFD32BDDA23CA504C5A5CB451785FABF4DFE4CD50D817491991A60615B30286361C100A95D1712F2A45F8E374461F4CA2B", + "D7B5A971FC219631D30EFC3664AE3127D9CF3097DAD9C24AC7905D15E8D9B25B026B31D68CAE00975CDB81EB1FD96FD5E1A12E2BB83FA25F1B1D91363457657FC03875C27F2946C5", + "2F336ED42D3CC38FC61660C4CD60BA4BD438B05F5965D8B7B399D2E7167F5D34F792D318F94DB15D67463AC449E13D568CC09BFCE32A35EE3EE96A041927680AE329811811E27F2D1E8E657707AF99BA96D13A478D695D59"}, + {"429F514EFC64D98A698A9247274CFF45", + "976AA5EB072F912D126ACEBC954FEC38", + "A71D89DC5B6CEDBB7451A27C3C2CAE09126DB4C421", + "5632FE62AB1DC549D54D3BC3FC868ACCEDEFD9ECF5E9F8", + "848AE4306CA8C7F416F8707625B7F55881C0AB430353A5C967CDA2DA787F581A70E34DBEBB2385"}, + {"398138F309085F47F8457CDF53895A63", + "F8A8A7F2D28E5FFF7BBC2F24353F7A36", + "5D633C21BA7764B8855CAB586F3746E236AD486039C83C6B56EFA9C651D38A41D6B20DAEE3418BFEA44B8BD6", + "A3BBAA91920AF5E10659818B1B3B300AC79BFC129C8329E75251F73A66D3AE0128EB91D5031E0A65C329DB7D1E9C0493E268", + "D078097267606E5FB07CFB7E2B4B718172A82C6A4CEE65D549A4DFB9838003BD2FBF64A7A66988AC1A632FD88F9E9FBB57C5A78AD2E086EACBA3DB68511D81C2970A"}, + {"7A4151EBD3901B42CBA45DAFB2E931BA", + "0FC88ACEE74DD538040321C330974EB8", + "250464FB04733BAB934C59E6AD2D6AE8D662CBCFEFBE61E5A308D4211E58C4C25935B72C69107722E946BFCBF416796600542D76AEB73F2B25BF53BAF97BDEB36ED3A7A51C31E7F170EB897457E7C17571D1BA0A908954E9", + "88C41F3EBEC23FAB8A362D969CAC810FAD4F7CA6A7F7D0D44F060F92E37E1183768DD4A8C733F71C96058D362A39876D183B86C103DE", + "74A25B2182C51096D48A870D80F18E1CE15867778E34FCBA6BD7BFB3739FDCD42AD0F2D9F4EBA29085285C6048C15BCE5E5166F1F962D3337AA88E6062F05523029D0A7F0BF9"}, + {"BFB147E1CD5459424F8C0271FC0E0DC5", + "EABCC126442BF373969EA3015988CC45", + "4C0880E1D71AA2C7", + "BE1B5EC78FBF73E7A6682B21BA7E0E5D2D1C7ABE", + "5660D7C1380E2F306895B1402CB2D6C37876504276B414D120F4CF92FDDDBB293A238EA0"}, + {"595DD6F52D18BC2CA8EB4EDAA18D9FA3", + "0F84B5D36CF4BC3B863313AF3B4D2E97", + "30AE6CC5F99580F12A779D98BD379A60948020C0B6FBD5746B30BA3A15C6CD33DAF376C70A9F15B6C0EB410A93161F7958AE23", + "8EF3687A1642B070970B0B91462229D1D76ABC154D18211F7152AA9FF368", + "317C1DDB11417E5A9CC4DDE7FDFF6659A5AC4B31DE025212580A05CDAC6024D3E4AE7C2966E52B9129E9ECDBED86"}, + {"44E6F2DC8FDC778AD007137D11410F50", + "270A237AD977F7187AA6C158A0BAB24F", + "509B0F0EB12E2AA5C5BA2DE553C07FAF4CE0C9E926531AA709A3D6224FCB783ACCF1559E10B1123EBB7D52E8AB54E6B5352A9ED0D04124BF0E9D9BACFD7E32B817B2E625F5EE94A64EDE9E470DE7FE6886C19B294F9F828209FE257A78", + "8B3D7815DF25618A5D0C55A601711881483878F113A12EC36CF64900549A3199555528559DC118F789788A55FAFD944E6E99A9CA3F72F238CD3F4D88223F7A745992B3FAED1848", + "1CC00D79F7AD82FDA71B58D286E5F34D0CC4CEF30704E771CC1E50746BDF83E182B078DB27149A42BAE619DF0F85B0B1090AD55D3B4471B0D6F6ECCD09C8F876B30081F0E7537A9624F8AAF29DA85E324122EFB4D68A56"}, + {"BB7BC352A03044B4428D8DBB4B0701FDEC4649FD17B81452", + "8B4BBE26CCD9859DCD84884159D6B0A4", + "2212BEB0E78E0F044A86944CF33C8D5C80D9DBE1034BF3BCF73611835C7D3A52F5BD2D81B68FD681B68540A496EE5DA16FD8AC8824E60E1EC2042BE28FB0BFAD4E4B03596446BDD8C37D936D9B3D5295BE19F19CF5ACE1D33A46C952CE4DE5C12F92C1DD051E04AEED", + "9037234CC44FFF828FABED3A7084AF40FA7ABFF8E0C0EFB57A1CC361E18FC4FAC1AB54F3ABFE9FF77263ACE16C3A", + "A9391B805CCD956081E0B63D282BEA46E7025126F1C1631239C33E92AA6F92CD56E5A4C56F00FF9658E93D48AF4EF0EF81628E34AD4DB0CDAEDCD2A17EE7"}, + {"99C0AD703196D2F60A74E6B378B838B31F82EA861F06FC4E", + "92745C018AA708ECFEB1667E9F3F1B01", + "828C69F376C0C0EC651C67749C69577D589EE39E51404D80EBF70C8660A8F5FD375473F4A7C611D59CB546A605D67446CE2AA844135FCD78BB5FBC90222A00D42920BB1D7EEDFB0C4672554F583EF23184F89063CDECBE482367B5F9AF3ACBC3AF61392BD94CBCD9B64677", + "A879214658FD0A5B0E09836639BF82E05EC7A5EF71D4701934BDA228435C68AC3D5CEB54997878B06A655EEACEFB1345C15867E7FE6C6423660C8B88DF128EBD6BCD85118DBAE16E9252FFB204324E5C8F38CA97759BDBF3CB0083", + "51FE87996F194A2585E438B023B345439EA60D1AEBED4650CDAF48A4D4EEC4FC77DC71CC4B09D3BEEF8B7B7AF716CE2B4EFFB3AC9E6323C18AC35E0AA6E2BBBC8889490EB6226C896B0D105EAB42BFE7053CCF00ED66BA94C1BA09A792AA873F0C3B26C5C5F9A936E57B25"}, + {"7086816D00D648FB8304AA8C9E552E1B69A9955FB59B25D1", + "0F45CF7F0BF31CCEB85D9DA10F4D749F", + "93F27C60A417D9F0669E86ACC784FC8917B502DAF30A6338F11B30B94D74FEFE2F8BE1BBE2EAD10FAB7EED3C6F72B7C3ECEE1937C32ED4970A6404E139209C05", + "877F046601F3CBE4FB1491943FA29487E738F94B99AF206262A1D6FF856C9AA0B8D4D08A54370C98F8E88FA3DCC2B14C1F76D71B2A4C7963AEE8AF960464C5BEC8357AD00DC8", + "FE96906B895CE6A8E72BC72344E2C8BB3C63113D70EAFA26C299BAFE77A8A6568172EB447FB3E86648A0AF3512DEB1AAC0819F3EC553903BF28A9FB0F43411237A774BF9EE03E445D280FBB9CD12B9BAAB6EF5E52691"}, + {"062F65A896D5BF1401BADFF70E91B458E1F9BD4888CB2E4D", + "5B11EA1D6008EBB41CF892FCA5B943D1", + "BAF4FF5C8242", + "A8870E091238355984EB2F7D61A865B9170F440BFF999A5993DD41A10F4440D21FF948DDA2BF663B2E03AC3324492DC5E40262ECC6A65C07672353BE23E7FB3A9D79FF6AA38D97960905A38DECC312CB6A59E5467ECF06C311CD43ADC0B543EDF34FE8BE611F176460D5627CA51F8F8D9FED71F55C", + "B10E127A632172CF8AA7539B140D2C9C2590E6F28C3CB892FC498FCE56A34F732FBFF32E79C7B9747D9094E8635A0C084D6F0247F9768FB5FF83493799A9BEC6C39572120C40E9292C8C947AE8573462A9108C36D9D7112E6995AE5867E6C8BB387D1C5D4BEF524F391B9FD9F0A3B4BFA079E915BCD920185CFD38D114C558928BD7D47877"}, + {"38A8E45D6D705A11AF58AED5A1344896998EACF359F2E26A", + "FD82B5B31804FF47D44199B533D0CF84", + "DE454D4E62FE879F2050EE3E25853623D3E9AC52EEC1A1779A48CFAF5ECA0BFDE44749391866D1", + "B804", + "164BB965C05EBE0931A1A63293EDF9C38C27"}, + {"34C33C97C6D7A0850DA94D78A58DC61EC717CD7574833068", + "343BE00DA9483F05C14F2E9EB8EA6AE8", + "78312A43EFDE3CAE34A65796FF059A3FE15304EEA5CF1D9306949FE5BF3349D4977D4EBE76C040FE894C5949E4E4D6681153DA87FB9AC5062063CA2EA183566343362370944CE0362D25FC195E124FD60E8682E665D13F2229DDA3E4B2CB1DCA", + "CC11BB284B1153578E4A5ED9D937B869DAF00F5B1960C23455CA9CC43F486A3BE0B66254F1041F04FDF459C8640465B6E1D2CF899A381451E8E7FCB50CF87823BE77E24B132BBEEDC72E53369B275E1D8F49ECE59F4F215230AC4FE133FC80E4F634EE80BA4682B62C86", + "E7F703DC31A95E3A4919FF957836CB76C063D81702AEA4703E1C2BF30831E58C4609D626EC6810E12EAA5B930F049FF9EFC22C3E3F1EBD4A1FB285CB02A1AC5AD46B425199FC0A85670A5C4E3DAA9636C8F64C199F42F18AAC8EA7457FD377F322DD7752D7D01B946C8F0A97E6113F0D50106F319AFD291AAACE"}, + {"C6ECF7F053573E403E61B83052A343D93CBCC179D1E835BE", + "E280E13D7367042E3AA09A80111B6184", + "21486C9D7A9647", + "5F2639AFA6F17931853791CD8C92382BBB677FD72D0AB1A080D0E49BFAA21810E963E4FACD422E92F65CBFAD5884A60CD94740DF31AF02F95AA57DA0C4401B0ED906", + "5C51DB20755302070C45F52E50128A67C8B2E4ED0EACB7E29998CCE2E8C289DD5655913EC1A51CC3AABE5CDC2402B2BE7D6D4BF6945F266FBD70BA9F37109067157AE7530678B45F64475D4EBFCB5FFF46A5"}, + {"5EC6CF7401BC57B18EF154E8C38ACCA8959E57D2F3975FF5", + "656B41CB3F9CF8C08BAD7EBFC80BD225", + "6B817C2906E2AF425861A7EF59BA5801F143EE2A139EE72697CDE168B4", + "2C0E1DDC9B1E5389BA63845B18B1F8A1DB062037151BCC56EF7C21C0BB4DAE366636BBA975685D7CC5A94AFBE89C769016388C56FB7B57CE750A12B718A8BDCF70E80E8659A8330EFC8F86640F21735E8C80E23FE43ABF23507CE3F964AE4EC99D", + "ED780CF911E6D1AA8C979B889B0B9DC1ABE261832980BDBFB576901D9EF5AB8048998E31A15BE54B3E5845A4D136AD24D0BDA1C3006168DF2F8AC06729CB0818867398150020131D8F04EDF1923758C9EABB5F735DE5EA1758D4BC0ACFCA98AFD202E9839B8720253693B874C65586C6F0"}, + {"C92F678EB2208662F5BCF3403EC05F5961E957908A3E79421E1D25FC19054153", + "DA0F3A40983D92F2D4C01FED33C7A192", + "2B6E9D26DB406A0FAB47608657AA10EFC2B4AA5F459B29FF85AC9A40BFFE7AEB04F77E9A11FAAA116D7F6D4DA417671A9AB02C588E0EF59CB1BFB4B1CC931B63A3B3A159FCEC97A04D1E6F0C7E6A9CEF6B0ABB04758A69F1FE754DF4C2610E8C46B6CF413BDB31351D55BEDCB7B4A13A1C98E10984475E0F2F957853", + "F37326A80E08", + "83519E53E321D334F7C10B568183775C0E9AAE55F806"}, + {"6847E0491BE57E72995D186D50094B0B3593957A5146798FCE68B287B2FB37B5", + "3EE1182AEBB19A02B128F28E1D5F7F99", + "D9F35ABB16D776CE", + "DB7566ED8EA95BDF837F23DB277BAFBC5E70D1105ADFD0D9EF15475051B1EF94709C67DCA9F8D5", + "2CDCED0C9EBD6E2A508822A685F7DCD1CDD99E7A5FCA786C234E7F7F1D27EC49751AD5DCFA30C5EDA87C43CAE3B919B6BBCFE34C8EDA59"}, + {"82B019673642C08388D3E42075A4D5D587558C229E4AB8F660E37650C4C41A0A", + "336F5D681E0410FAE7B607246092C6DC", + "D430CBD8FE435B64214E9E9CDC5DE99D31CFCFB8C10AA0587A49DF276611", + "998404153AD77003E1737EDE93ED79859EE6DCCA93CB40C4363AA817ABF2DBBD46E42A14A7183B6CC01E12A577888141363D0AE011EB6E8D28C0B235", + "9BEF69EEB60BD3D6065707B7557F25292A8872857CFBD24F2F3C088E4450995333088DA50FD9121221C504DF1D0CD5EFE6A12666C5D5BB12282CF4C19906E9CFAB97E9BDF7F49DC17CFC384B"}, + {"747B2E269B1859F0622C15C8BAD6A725028B1F94B8DB7326948D1E6ED663A8BC", + "AB91F7245DDCE3F1C747872D47BE0A8A", + "3B03F786EF1DDD76E1D42646DA4CD2A5165DC5383CE86D1A0B5F13F910DC278A4E451EE0192CBA178E13B3BA27FDC7840DF73D2E104B", + "6B803F4701114F3E5FE21718845F8416F70F626303F545BE197189E0A2BA396F37CE06D389EB2658BC7D56D67868708F6D0D32", + "1570DDB0BCE75AA25D1957A287A2C36B1A5F2270186DA81BA6112B7F43B0F3D1D0ED072591DCF1F1C99BBB25621FC39B896FF9BD9413A2845363A9DCD310C32CF98E57"}, + {"02E59853FB29AEDA0FE1C5F19180AD99A12FF2F144670BB2B8BADF09AD812E0A", + "C691294EF67CD04D1B9242AF83DD1421", + "879334DAE3", + "1E17F46A98FEF5CBB40759D95354", + "FED8C3FF27DDF6313AED444A2985B36CBA268AAD6AAC563C0BA28F6DB5DB"}, + {"F6C1FB9B4188F2288FF03BD716023198C3582CF2A037FC2F29760916C2B7FCDB", + "4228DA0678CA3534588859E77DFF014C", + "D8153CAF35539A61DD8D05B3C9B44F01E564FB9348BCD09A1C23B84195171308861058F0A3CD2A55B912A3AAEE06FF4D356C77275828F2157C2FC7C115DA39E443210CCC56BEDB0CC99BBFB227ABD5CC454F4E7F547C7378A659EEB6A7E809101A84F866503CB18D4484E1FA09B3EC7FC75EB2E35270800AA7", + "23B660A779AD285704B12EC1C580387A47BEC7B00D452C6570", + "5AA642BBABA8E49849002A2FAF31DB8FC7773EFDD656E469CEC19B3206D4174C9A263D0A05484261F6"}, + {"8FF6086F1FADB9A3FBE245EAC52640C43B39D43F89526BB5A6EBA47710931446", + "943188480C99437495958B0AE4831AA9", + "AD5CD0BDA426F6EBA23C8EB23DC73FF9FEC173355EDBD6C9344C4C4383F211888F7CE6B29899A6801DF6B38651A7C77150941A", + "80CD5EA8D7F81DDF5070B934937912E8F541A5301877528EB41AB60C020968D459960ED8FB73083329841A", + "ABAE8EB7F36FCA2362551E72DAC890BA1BB6794797E0FC3B67426EC9372726ED4725D379EA0AC9147E48DCD0005C502863C2C5358A38817C8264B5"}, + {"A083B54E6B1FE01B65D42FCD248F97BB477A41462BBFE6FD591006C022C8FD84", + "B0490F5BD68A52459556B3749ACDF40E", + "8892E047DA5CFBBDF7F3CFCBD1BD21C6D4C80774B1826999234394BD3E513CC7C222BB40E1E3140A152F19B3802F0D036C24A590512AD0E8", + "D7B15752789DC94ED0F36778A5C7BBB207BEC32BAC66E702B39966F06E381E090C6757653C3D26A81EC6AD6C364D66867A334C91BB0B8A8A4B6EACDF0783D09010AEBA2DD2062308FE99CC1F", + "C071280A732ADC93DF272BF1E613B2BB7D46FC6665EF2DC1671F3E211D6BDE1D6ADDD28DF3AA2E47053FC8BB8AE9271EC8BC8B2CFFA320D225B451685B6D23ACEFDD241FE284F8ADC8DB07F456985B14330BBB66E0FB212213E05B3E"}, +} diff --git a/vendor/github.com/ProtonMail/go-crypto/internal/byteutil/byteutil.go b/vendor/github.com/ProtonMail/go-crypto/internal/byteutil/byteutil.go new file mode 100644 index 0000000000000..affb74a764d90 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/internal/byteutil/byteutil.go @@ -0,0 +1,90 @@ +// Copyright (C) 2019 ProtonTech AG +// This file contains necessary tools for the aex and ocb packages. +// +// These functions SHOULD NOT be used elsewhere, since they are optimized for +// specific input nature in the EAX and OCB modes of operation. + +package byteutil + +// GfnDouble computes 2 * input in the field of 2^n elements. +// The irreducible polynomial in the finite field for n=128 is +// x^128 + x^7 + x^2 + x + 1 (equals 0x87) +// Constant-time execution in order to avoid side-channel attacks +func GfnDouble(input []byte) []byte { + if len(input) != 16 { + panic("Doubling in GFn only implemented for n = 128") + } + // If the first bit is zero, return 2L = L << 1 + // Else return (L << 1) xor 0^120 10000111 + shifted := ShiftBytesLeft(input) + shifted[15] ^= ((input[0] >> 7) * 0x87) + return shifted +} + +// ShiftBytesLeft outputs the byte array corresponding to x << 1 in binary. +func ShiftBytesLeft(x []byte) []byte { + l := len(x) + dst := make([]byte, l) + for i := 0; i < l-1; i++ { + dst[i] = (x[i] << 1) | (x[i+1] >> 7) + } + dst[l-1] = x[l-1] << 1 + return dst +} + +// ShiftNBytesLeft puts in dst the byte array corresponding to x << n in binary. +func ShiftNBytesLeft(dst, x []byte, n int) { + // Erase first n / 8 bytes + copy(dst, x[n/8:]) + + // Shift the remaining n % 8 bits + bits := uint(n % 8) + l := len(dst) + for i := 0; i < l-1; i++ { + dst[i] = (dst[i] << bits) | (dst[i+1] >> uint(8-bits)) + } + dst[l-1] = dst[l-1] << bits + + // Append trailing zeroes + dst = append(dst, make([]byte, n/8)...) +} + +// XorBytesMut assumes equal input length, replaces X with X XOR Y +func XorBytesMut(X, Y []byte) { + for i := 0; i < len(X); i++ { + X[i] ^= Y[i] + } +} + +// XorBytes assumes equal input length, puts X XOR Y into Z +func XorBytes(Z, X, Y []byte) { + for i := 0; i < len(X); i++ { + Z[i] = X[i] ^ Y[i] + } +} + +// RightXor XORs smaller input (assumed Y) at the right of the larger input (assumed X) +func RightXor(X, Y []byte) []byte { + offset := len(X) - len(Y) + xored := make([]byte, len(X)) + copy(xored, X) + for i := 0; i < len(Y); i++ { + xored[offset+i] ^= Y[i] + } + return xored +} + +// SliceForAppend takes a slice and a requested number of bytes. It returns a +// slice with the contents of the given slice followed by that many bytes and a +// second slice that aliases into it and contains only the extra bytes. If the +// original slice has sufficient capacity then no allocation is performed. +func SliceForAppend(in []byte, n int) (head, tail []byte) { + if total := len(in) + n; cap(in) >= total { + head = in[:total] + } else { + head = make([]byte, total) + copy(head, in) + } + tail = head[len(in):] + return +} diff --git a/vendor/github.com/ProtonMail/go-crypto/ocb/ocb.go b/vendor/github.com/ProtonMail/go-crypto/ocb/ocb.go new file mode 100644 index 0000000000000..1a6f73502e6a4 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/ocb/ocb.go @@ -0,0 +1,317 @@ +// Copyright (C) 2019 ProtonTech AG + +// Package ocb provides an implementation of the OCB (offset codebook) mode of +// operation, as described in RFC-7253 of the IRTF and in Rogaway, Bellare, +// Black and Krovetz - OCB: A BLOCK-CIPHER MODE OF OPERATION FOR EFFICIENT +// AUTHENTICATED ENCRYPTION (2003). +// Security considerations (from RFC-7253): A private key MUST NOT be used to +// encrypt more than 2^48 blocks. Tag length should be at least 12 bytes (a +// brute-force forging adversary succeeds after 2^{tag length} attempts). A +// single key SHOULD NOT be used to decrypt ciphertext with different tag +// lengths. Nonces need not be secret, but MUST NOT be reused. +// This package only supports underlying block ciphers with 128-bit blocks, +// such as AES-{128, 192, 256}, but may be extended to other sizes. +package ocb + +import ( + "bytes" + "crypto/cipher" + "crypto/subtle" + "errors" + "github.com/ProtonMail/go-crypto/internal/byteutil" + "math/bits" +) + +type ocb struct { + block cipher.Block + tagSize int + nonceSize int + mask mask + // Optimized en/decrypt: For each nonce N used to en/decrypt, the 'Ktop' + // internal variable can be reused for en/decrypting with nonces sharing + // all but the last 6 bits with N. The prefix of the first nonce used to + // compute the new Ktop, and the Ktop value itself, are stored in + // reusableKtop. If using incremental nonces, this saves one block cipher + // call every 63 out of 64 OCB encryptions, and stores one nonce and one + // output of the block cipher in memory only. + reusableKtop reusableKtop +} + +type mask struct { + // L_*, L_$, (L_i)_{i ∈ N} + lAst []byte + lDol []byte + L [][]byte +} + +type reusableKtop struct { + noncePrefix []byte + Ktop []byte +} + +const ( + defaultTagSize = 16 + defaultNonceSize = 15 +) + +const ( + enc = iota + dec +) + +func (o *ocb) NonceSize() int { + return o.nonceSize +} + +func (o *ocb) Overhead() int { + return o.tagSize +} + +// NewOCB returns an OCB instance with the given block cipher and default +// tag and nonce sizes. +func NewOCB(block cipher.Block) (cipher.AEAD, error) { + return NewOCBWithNonceAndTagSize(block, defaultNonceSize, defaultTagSize) +} + +// NewOCBWithNonceAndTagSize returns an OCB instance with the given block +// cipher, nonce length, and tag length. Panics on zero nonceSize and +// exceedingly long tag size. +// +// It is recommended to use at least 12 bytes as tag length. +func NewOCBWithNonceAndTagSize( + block cipher.Block, nonceSize, tagSize int) (cipher.AEAD, error) { + if block.BlockSize() != 16 { + return nil, ocbError("Block cipher must have 128-bit blocks") + } + if nonceSize < 1 { + return nil, ocbError("Incorrect nonce length") + } + if nonceSize >= block.BlockSize() { + return nil, ocbError("Nonce length exceeds blocksize - 1") + } + if tagSize > block.BlockSize() { + return nil, ocbError("Custom tag length exceeds blocksize") + } + return &ocb{ + block: block, + tagSize: tagSize, + nonceSize: nonceSize, + mask: initializeMaskTable(block), + reusableKtop: reusableKtop{ + noncePrefix: nil, + Ktop: nil, + }, + }, nil +} + +func (o *ocb) Seal(dst, nonce, plaintext, adata []byte) []byte { + if len(nonce) > o.nonceSize { + panic("crypto/ocb: Incorrect nonce length given to OCB") + } + ret, out := byteutil.SliceForAppend(dst, len(plaintext)+o.tagSize) + o.crypt(enc, out, nonce, adata, plaintext) + return ret +} + +func (o *ocb) Open(dst, nonce, ciphertext, adata []byte) ([]byte, error) { + if len(nonce) > o.nonceSize { + panic("Nonce too long for this instance") + } + if len(ciphertext) < o.tagSize { + return nil, ocbError("Ciphertext shorter than tag length") + } + sep := len(ciphertext) - o.tagSize + ret, out := byteutil.SliceForAppend(dst, len(ciphertext)) + ciphertextData := ciphertext[:sep] + tag := ciphertext[sep:] + o.crypt(dec, out, nonce, adata, ciphertextData) + if subtle.ConstantTimeCompare(ret[sep:], tag) == 1 { + ret = ret[:sep] + return ret, nil + } + for i := range out { + out[i] = 0 + } + return nil, ocbError("Tag authentication failed") +} + +// On instruction enc (resp. dec), crypt is the encrypt (resp. decrypt) +// function. It returns the resulting plain/ciphertext with the tag appended. +func (o *ocb) crypt(instruction int, Y, nonce, adata, X []byte) []byte { + // + // Consider X as a sequence of 128-bit blocks + // + // Note: For encryption (resp. decryption), X is the plaintext (resp., the + // ciphertext without the tag). + blockSize := o.block.BlockSize() + + // + // Nonce-dependent and per-encryption variables + // + // Zero out the last 6 bits of the nonce into truncatedNonce to see if Ktop + // is already computed. + truncatedNonce := make([]byte, len(nonce)) + copy(truncatedNonce, nonce) + truncatedNonce[len(truncatedNonce)-1] &= 192 + Ktop := make([]byte, blockSize) + if bytes.Equal(truncatedNonce, o.reusableKtop.noncePrefix) { + Ktop = o.reusableKtop.Ktop + } else { + // Nonce = num2str(TAGLEN mod 128, 7) || zeros(120 - bitlen(N)) || 1 || N + paddedNonce := append(make([]byte, blockSize-1-len(nonce)), 1) + paddedNonce = append(paddedNonce, truncatedNonce...) + paddedNonce[0] |= byte(((8 * o.tagSize) % (8 * blockSize)) << 1) + // Last 6 bits of paddedNonce are already zero. Encrypt into Ktop + paddedNonce[blockSize-1] &= 192 + Ktop = paddedNonce + o.block.Encrypt(Ktop, Ktop) + o.reusableKtop.noncePrefix = truncatedNonce + o.reusableKtop.Ktop = Ktop + } + + // Stretch = Ktop || ((lower half of Ktop) XOR (lower half of Ktop << 8)) + xorHalves := make([]byte, blockSize/2) + byteutil.XorBytes(xorHalves, Ktop[:blockSize/2], Ktop[1:1+blockSize/2]) + stretch := append(Ktop, xorHalves...) + bottom := int(nonce[len(nonce)-1] & 63) + offset := make([]byte, len(stretch)) + byteutil.ShiftNBytesLeft(offset, stretch, bottom) + offset = offset[:blockSize] + + // + // Process any whole blocks + // + // Note: For encryption Y is ciphertext || tag, for decryption Y is + // plaintext || tag. + checksum := make([]byte, blockSize) + m := len(X) / blockSize + for i := 0; i < m; i++ { + index := bits.TrailingZeros(uint(i + 1)) + if len(o.mask.L)-1 < index { + o.mask.extendTable(index) + } + byteutil.XorBytesMut(offset, o.mask.L[bits.TrailingZeros(uint(i+1))]) + blockX := X[i*blockSize : (i+1)*blockSize] + blockY := Y[i*blockSize : (i+1)*blockSize] + byteutil.XorBytes(blockY, blockX, offset) + switch instruction { + case enc: + o.block.Encrypt(blockY, blockY) + byteutil.XorBytesMut(blockY, offset) + byteutil.XorBytesMut(checksum, blockX) + case dec: + o.block.Decrypt(blockY, blockY) + byteutil.XorBytesMut(blockY, offset) + byteutil.XorBytesMut(checksum, blockY) + } + } + // + // Process any final partial block and compute raw tag + // + tag := make([]byte, blockSize) + if len(X)%blockSize != 0 { + byteutil.XorBytesMut(offset, o.mask.lAst) + pad := make([]byte, blockSize) + o.block.Encrypt(pad, offset) + chunkX := X[blockSize*m:] + chunkY := Y[blockSize*m : len(X)] + byteutil.XorBytes(chunkY, chunkX, pad[:len(chunkX)]) + // P_* || bit(1) || zeroes(127) - len(P_*) + switch instruction { + case enc: + paddedY := append(chunkX, byte(128)) + paddedY = append(paddedY, make([]byte, blockSize-len(chunkX)-1)...) + byteutil.XorBytesMut(checksum, paddedY) + case dec: + paddedX := append(chunkY, byte(128)) + paddedX = append(paddedX, make([]byte, blockSize-len(chunkY)-1)...) + byteutil.XorBytesMut(checksum, paddedX) + } + byteutil.XorBytes(tag, checksum, offset) + byteutil.XorBytesMut(tag, o.mask.lDol) + o.block.Encrypt(tag, tag) + byteutil.XorBytesMut(tag, o.hash(adata)) + copy(Y[blockSize*m+len(chunkY):], tag[:o.tagSize]) + } else { + byteutil.XorBytes(tag, checksum, offset) + byteutil.XorBytesMut(tag, o.mask.lDol) + o.block.Encrypt(tag, tag) + byteutil.XorBytesMut(tag, o.hash(adata)) + copy(Y[blockSize*m:], tag[:o.tagSize]) + } + return Y +} + +// This hash function is used to compute the tag. Per design, on empty input it +// returns a slice of zeros, of the same length as the underlying block cipher +// block size. +func (o *ocb) hash(adata []byte) []byte { + // + // Consider A as a sequence of 128-bit blocks + // + A := make([]byte, len(adata)) + copy(A, adata) + blockSize := o.block.BlockSize() + + // + // Process any whole blocks + // + sum := make([]byte, blockSize) + offset := make([]byte, blockSize) + m := len(A) / blockSize + for i := 0; i < m; i++ { + chunk := A[blockSize*i : blockSize*(i+1)] + index := bits.TrailingZeros(uint(i + 1)) + // If the mask table is too short + if len(o.mask.L)-1 < index { + o.mask.extendTable(index) + } + byteutil.XorBytesMut(offset, o.mask.L[index]) + byteutil.XorBytesMut(chunk, offset) + o.block.Encrypt(chunk, chunk) + byteutil.XorBytesMut(sum, chunk) + } + + // + // Process any final partial block; compute final hash value + // + if len(A)%blockSize != 0 { + byteutil.XorBytesMut(offset, o.mask.lAst) + // Pad block with 1 || 0 ^ 127 - bitlength(a) + ending := make([]byte, blockSize-len(A)%blockSize) + ending[0] = 0x80 + encrypted := append(A[blockSize*m:], ending...) + byteutil.XorBytesMut(encrypted, offset) + o.block.Encrypt(encrypted, encrypted) + byteutil.XorBytesMut(sum, encrypted) + } + return sum +} + +func initializeMaskTable(block cipher.Block) mask { + // + // Key-dependent variables + // + lAst := make([]byte, block.BlockSize()) + block.Encrypt(lAst, lAst) + lDol := byteutil.GfnDouble(lAst) + L := make([][]byte, 1) + L[0] = byteutil.GfnDouble(lDol) + + return mask{ + lAst: lAst, + lDol: lDol, + L: L, + } +} + +// Extends the L array of mask m up to L[limit], with L[i] = GfnDouble(L[i-1]) +func (m *mask) extendTable(limit int) { + for i := len(m.L); i <= limit; i++ { + m.L = append(m.L, byteutil.GfnDouble(m.L[i-1])) + } +} + +func ocbError(err string) error { + return errors.New("crypto/ocb: " + err) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/ocb/random_vectors.go b/vendor/github.com/ProtonMail/go-crypto/ocb/random_vectors.go new file mode 100644 index 0000000000000..0efaf344fd592 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/ocb/random_vectors.go @@ -0,0 +1,136 @@ +// In the test vectors provided by RFC 7253, the "bottom" +// internal variable, which defines "offset" for the first time, does not +// exceed 15. However, it can attain values up to 63. + +// These vectors include key length in {128, 192, 256}, tag size 128, and +// random nonce, header, and plaintext lengths. + +// This file was automatically generated. + +package ocb + +var randomVectors = []struct { + key, nonce, header, plaintext, ciphertext string +}{ + + {"9438C5D599308EAF13F800D2D31EA7F0", + "C38EE4801BEBFFA1CD8635BE", + "0E507B7DADD8A98CDFE272D3CB6B3E8332B56AE583FB049C0874D4200BED16BD1A044182434E9DA0E841F182DFD5B3016B34641CED0784F1745F63AB3D0DA22D3351C9EF9A658B8081E24498EBF61FCE40DA6D8E184536", + "962D227786FB8913A8BAD5DC3250", + "EEDEF5FFA5986D1E3BF86DDD33EF9ADC79DCA06E215FA772CCBA814F63AD"}, + {"BA7DE631C7D6712167C6724F5B9A2B1D", + "35263EBDA05765DC0E71F1F5", + "0103257B4224507C0242FEFE821EA7FA42E0A82863E5F8B68F7D881B4B44FA428A2B6B21D2F591260802D8AB6D83", + "9D6D1FC93AE8A64E7889B7B2E3521EFA9B920A8DDB692E6F833DDC4A38AFA535E5E2A3ED82CB7E26404AB86C54D01C4668F28398C2DF33D5D561CBA1C8DCFA7A912F5048E545B59483C0E3221F54B14DAA2E4EB657B3BEF9554F34CAD69B2724AE962D3D8A", + "E93852D1985C5E775655E937FA79CE5BF28A585F2AF53A5018853B9634BE3C84499AC0081918FDCE0624494D60E25F76ACD6853AC7576E3C350F332249BFCABD4E73CEABC36BE4EDDA40914E598AE74174A0D7442149B26990899491BDDFE8FC54D6C18E83AE9E9A6FFBF5D376565633862EEAD88D"}, + {"2E74B25289F6FD3E578C24866E9C72A5", + "FD912F15025AF8414642BA1D1D", + "FB5FB8C26F365EEDAB5FE260C6E3CCD27806729C8335F146063A7F9EA93290E56CF84576EB446350D22AD730547C267B1F0BBB97EB34E1E2C41A", + "6C092EBF78F76EE8C1C6E592277D9545BA16EDB67BC7D8480B9827702DC2F8A129E2B08A2CE710CA7E1DA45CE162BB6CD4B512E632116E2211D3C90871EFB06B8D4B902681C7FB", + "6AC0A77F26531BF4F354A1737F99E49BE32ECD909A7A71AD69352906F54B08A9CE9B8CA5D724CBFFC5673437F23F630697F3B84117A1431D6FA8CC13A974FB4AD360300522E09511B99E71065D5AC4BBCB1D791E864EF4"}, + {"E7EC507C802528F790AFF5303A017B17", + "4B97A7A568940A9E3CE7A99E93031E", + "28349BDC5A09390C480F9B8AA3EDEA3DDB8B9D64BCA322C570B8225DF0E31190DAB25A4014BA39519E02ABFB12B89AA28BBFD29E486E7FB28734258C817B63CED9912DBAFEBB93E2798AB2890DE3B0ACFCFF906AB15563EF7823CE83D27CDB251195E22BD1337BCBDE65E7C2C427321C463C2777BFE5AEAA", + "9455B3EA706B74", + "7F33BA3EA848D48A96B9530E26888F43EBD4463C9399B6"}, + {"6C928AA3224736F28EE7378DE0090191", + "8936138E2E4C6A13280017A1622D", + "6202717F2631565BDCDC57C6584543E72A7C8BD444D0D108ED35069819633C", + "DA0691439E5F035F3E455269D14FE5C201C8C9B0A3FE2D3F86BCC59387C868FE65733D388360B31E3CE28B4BF6A8BE636706B536D5720DB66B47CF1C7A5AFD6F61E0EF90F1726D6B0E169F9A768B2B7AE4EE00A17F630AC905FCAAA1B707FFF25B3A1AAE83B504837C64A5639B2A34002B300EC035C9B43654DA55", + "B8804D182AB0F0EEB464FA7BD1329AD6154F982013F3765FEDFE09E26DAC078C9C1439BFC1159D6C02A25E3FF83EF852570117B315852AD5EE20E0FA3AA0A626B0E43BC0CEA38B44579DD36803455FB46989B90E6D229F513FD727AF8372517E9488384C515D6067704119C931299A0982EDDFB9C2E86A90C450C077EB222511EC9CCABC9FCFDB19F70088"}, + {"ECEA315CA4B3F425B0C9957A17805EA4", + "664CDAE18403F4F9BA13015A44FC", + "642AFB090D6C6DB46783F08B01A3EF2A8FEB5736B531EAC226E7888FCC8505F396818F83105065FACB3267485B9E5E4A0261F621041C08FCCB2A809A49AB5252A91D0971BCC620B9D614BD77E57A0EED2FA5", + "6852C31F8083E20E364CEA21BB7854D67CEE812FE1C9ED2425C0932A90D3780728D1BB", + "2ECEF962A9695A463ADABB275BDA9FF8B2BA57AEC2F52EFFB700CD9271A74D2A011C24AEA946051BD6291776429B7E681BA33E"}, + {"4EE616C4A58AAA380878F71A373461F6", + "91B8C9C176D9C385E9C47E52", + "CDA440B7F9762C572A718AC754EDEECC119E5EE0CCB9FEA4FFB22EEE75087C032EBF3DA9CDD8A28CC010B99ED45143B41A4BA50EA2A005473F89639237838867A57F23B0F0ED3BF22490E4501DAC9C658A9B9F", + "D6E645FA9AE410D15B8123FD757FA356A8DBE9258DDB5BE88832E615910993F497EC", + "B70ED7BF959FB2AAED4F36174A2A99BFB16992C8CDF369C782C4DB9C73DE78C5DB8E0615F647243B97ACDB24503BC9CADC48"}, + {"DCD475773136C830D5E3D0C5FE05B7FF", + "BB8E1FBB483BE7616A922C4A", + "36FEF2E1CB29E76A6EA663FC3AF66ECD7404F466382F7B040AABED62293302B56E8783EF7EBC21B4A16C3E78A7483A0A403F253A2CDC5BBF79DC3DAE6C73F39A961D8FBBE8D41B", + "441E886EA38322B2437ECA7DEB5282518865A66780A454E510878E61BFEC3106A3CD93D2A02052E6F9E1832F9791053E3B76BF4C07EFDD6D4106E3027FABB752E60C1AA425416A87D53938163817A1051EBA1D1DEEB4B9B25C7E97368B52E5911A31810B0EC5AF547559B6142D9F4C4A6EF24A4CF75271BF9D48F62B", + "1BE4DD2F4E25A6512C2CC71D24BBB07368589A94C2714962CD0ACE5605688F06342587521E75F0ACAFFD86212FB5C34327D238DB36CF2B787794B9A4412E7CD1410EA5DDD2450C265F29CF96013CD213FD2880657694D718558964BC189B4A84AFCF47EB012935483052399DBA5B088B0A0477F20DFE0E85DCB735E21F22A439FB837DD365A93116D063E607"}, + {"3FBA2B3D30177FFE15C1C59ED2148BB2C091F5615FBA7C07", + "FACF804A4BEBF998505FF9DE", + "8213B9263B2971A5BDA18DBD02208EE1", + "15B323926993B326EA19F892D704439FC478828322AF72118748284A1FD8A6D814E641F70512FD706980337379F31DC63355974738D7FEA87AD2858C0C2EBBFBE74371C21450072373C7B651B334D7C4D43260B9D7CCD3AF9EDB", + "6D35DC1469B26E6AAB26272A41B46916397C24C485B61162E640A062D9275BC33DDCFD3D9E1A53B6C8F51AC89B66A41D59B3574197A40D9B6DCF8A4E2A001409C8112F16B9C389E0096179DB914E05D6D11ED0005AD17E1CE105A2F0BAB8F6B1540DEB968B7A5428FF44"}, + {"53B52B8D4D748BCDF1DDE68857832FA46227FA6E2F32EFA1", + "0B0EF53D4606B28D1398355F", + "F23882436349094AF98BCACA8218E81581A043B19009E28EFBF2DE37883E04864148CC01D240552CA8844EC1456F42034653067DA67E80F87105FD06E14FF771246C9612867BE4D215F6D761", + "F15030679BD4088D42CAC9BF2E9606EAD4798782FA3ED8C57EBE7F84A53236F51B25967C6489D0CD20C9EEA752F9BC", + "67B96E2D67C3729C96DAEAEDF821D61C17E648643A2134C5621FEC621186915AD80864BFD1EB5B238BF526A679385E012A457F583AFA78134242E9D9C1B4E4"}, + {"0272DD80F23399F49BFC320381A5CD8225867245A49A7D41", + "5C83F4896D0738E1366B1836", + "69B0337289B19F73A12BAEEA857CCAF396C11113715D9500CCCF48BA08CFF12BC8B4BADB3084E63B85719DB5058FA7C2C11DEB096D7943CFA7CAF5", + "C01AD10FC8B562CD17C7BC2FAB3E26CBDFF8D7F4DEA816794BBCC12336991712972F52816AABAB244EB43B0137E2BAC1DD413CE79531E78BEF782E6B439612BB3AEF154DE3502784F287958EBC159419F9EBA27916A28D6307324129F506B1DE80C1755A929F87", + "FEFE52DD7159C8DD6E8EC2D3D3C0F37AB6CB471A75A071D17EC4ACDD8F3AA4D7D4F7BB559F3C09099E3D9003E5E8AA1F556B79CECDE66F85B08FA5955E6976BF2695EA076388A62D2AD5BAB7CBF1A7F3F4C8D5CDF37CDE99BD3E30B685D9E5EEE48C7C89118EF4878EB89747F28271FA2CC45F8E9E7601"}, + {"3EEAED04A455D6E5E5AB53CFD5AFD2F2BC625C7BF4BE49A5", + "36B88F63ADBB5668588181D774", + "D367E3CB3703E762D23C6533188EF7028EFF9D935A3977150361997EC9DEAF1E4794BDE26AA8B53C124980B1362EC86FCDDFC7A90073171C1BAEE351A53234B86C66E8AB92FAE99EC6967A6D3428892D80", + "573454C719A9A55E04437BF7CBAAF27563CCCD92ADD5E515CD63305DFF0687E5EEF790C5DCA5C0033E9AB129505E2775438D92B38F08F3B0356BA142C6F694", + "E9F79A5B432D9E682C9AAA5661CFC2E49A0FCB81A431E54B42EB73DD3BED3F377FEC556ABA81624BA64A5D739AD41467460088F8D4F442180A9382CA635745473794C382FCDDC49BA4EB6D8A44AE3C"}, + {"B695C691538F8CBD60F039D0E28894E3693CC7C36D92D79D", + "BC099AEB637361BAC536B57618", + "BFFF1A65AE38D1DC142C71637319F5F6508E2CB33C9DCB94202B359ED5A5ED8042E7F4F09231D32A7242976677E6F4C549BF65FADC99E5AF43F7A46FD95E16C2", + "081DF3FD85B415D803F0BE5AC58CFF0023FDDED99788296C3731D8", + "E50C64E3614D94FE69C47092E46ACC9957C6FEA2CCBF96BC62FBABE7424753C75F9C147C42AE26FE171531"}, + {"C9ACBD2718F0689A1BE9802A551B6B8D9CF5614DAF5E65ED", + "B1B0AAF373B8B026EB80422051D8", + "6648C0E61AC733C76119D23FB24548D637751387AA2EAE9D80E912B7BD486CAAD9EAF4D7A5FE2B54AAD481E8EC94BB4D558000896E2010462B70C9FED1E7273080D1", + "189F591F6CB6D59AFEDD14C341741A8F1037DC0DF00FC57CE65C30F49E860255CEA5DC6019380CC0FE8880BC1A9E685F41C239C38F36E3F2A1388865C5C311059C0A", + "922A5E949B61D03BE34AB5F4E58607D4504EA14017BB363DAE3C873059EA7A1C77A746FB78981671D26C2CF6D9F24952D510044CE02A10177E9DB42D0145211DFE6E84369C5E3BC2669EAB4147B2822895F9"}, + {"7A832BD2CF5BF4919F353CE2A8C86A5E406DA2D52BE16A72", + "2F2F17CECF7E5A756D10785A3CB9DB", + "61DA05E3788CC2D8405DBA70C7A28E5AF699863C9F72E6C6770126929F5D6FA267F005EBCF49495CB46400958A3AE80D1289D1C671", + "44E91121195A41AF14E8CFDBD39A4B517BE0DF1A72977ED8A3EEF8EEDA1166B2EB6DB2C4AE2E74FA0F0C74537F659BFBD141E5DDEC67E64EDA85AABD3F52C85A785B9FB3CECD70E7DF", + "BEDF596EA21288D2B84901E188F6EE1468B14D5161D3802DBFE00D60203A24E2AB62714BF272A45551489838C3A7FEAADC177B591836E73684867CCF4E12901DCF2064058726BBA554E84ADC5136F507E961188D4AF06943D3"}, + {"1508E8AE9079AA15F1CEC4F776B4D11BCCB061B58AA56C18", + "BCA625674F41D1E3AB47672DC0C3", + "8B12CF84F16360F0EAD2A41BC021530FFCEC7F3579CAE658E10E2D3D81870F65AFCED0C77C6C4C6E6BA424FF23088C796BA6195ABA35094BF1829E089662E7A95FC90750AE16D0C8AFA55DAC789D7735B970B58D4BE7CEC7341DA82A0179A01929C27A59C5063215B859EA43", + "E525422519ECE070E82C", + "B47BC07C3ED1C0A43BA52C43CBACBCDBB29CAF1001E09FDF7107"}, + {"7550C2761644E911FE9ADD119BAC07376BEA442845FEAD876D7E7AC1B713E464", + "36D2EC25ADD33CDEDF495205BBC923", + "7FCFE81A3790DE97FFC3DE160C470847EA7E841177C2F759571CBD837EA004A6CA8C6F4AEBFF2E9FD552D73EB8A30705D58D70C0B67AEEA280CBBF0A477358ACEF1E7508F2735CD9A0E4F9AC92B8C008F575D3B6278F1C18BD01227E3502E5255F3AB1893632AD00C717C588EF652A51A43209E7EE90", + "2B1A62F8FDFAA3C16470A21AD307C9A7D03ADE8EF72C69B06F8D738CDE578D7AEFD0D40BD9C022FB9F580DF5394C998ACCCEFC5471A3996FB8F1045A81FDC6F32D13502EA65A211390C8D882B8E0BEFD8DD8CBEF51D1597B124E9F7F", + "C873E02A22DB89EB0787DB6A60B99F7E4A0A085D5C4232A81ADCE2D60AA36F92DDC33F93DD8640AC0E08416B187FB382B3EC3EE85A64B0E6EE41C1366A5AD2A282F66605E87031CCBA2FA7B2DA201D975994AADE3DD1EE122AE09604AD489B84BF0C1AB7129EE16C6934850E"}, + {"A51300285E554FDBDE7F771A9A9A80955639DD87129FAEF74987C91FB9687C71", + "81691D5D20EC818FCFF24B33DECC", + "C948093218AA9EB2A8E44A87EEA73FC8B6B75A196819A14BD83709EA323E8DF8B491045220E1D88729A38DBCFFB60D3056DAD4564498FD6574F74512945DEB34B69329ACED9FFC05D5D59DFCD5B973E2ACAFE6AD1EF8BBBC49351A2DD12508ED89ED", + "EB861165DAF7625F827C6B574ED703F03215", + "C6CD1CE76D2B3679C1B5AA1CFD67CCB55444B6BFD3E22C81CBC9BB738796B83E54E3"}, + {"8CE0156D26FAEB7E0B9B800BBB2E9D4075B5EAC5C62358B0E7F6FCE610223282", + "D2A7B94DD12CDACA909D3AD7", + "E021A78F374FC271389AB9A3E97077D755", + "7C26000B58929F5095E1CEE154F76C2A299248E299F9B5ADE6C403AA1FD4A67FD4E0232F214CE7B919EE7A1027D2B76C57475715CD078461", + "C556FB38DF069B56F337B5FF5775CE6EAA16824DFA754F20B78819028EA635C3BB7AA731DE8776B2DCB67DCA2D33EEDF3C7E52EA450013722A41755A0752433ED17BDD5991AAE77A"}, + {"1E8000A2CE00A561C9920A30BF0D7B983FEF8A1014C8F04C35CA6970E6BA02BD", + "65ED3D63F79F90BBFD19775E", + "336A8C0B7243582A46B221AA677647FCAE91", + "134A8B34824A290E7B", + "914FBEF80D0E6E17F8BDBB6097EBF5FBB0554952DC2B9E5151"}, + {"53D5607BBE690B6E8D8F6D97F3DF2BA853B682597A214B8AA0EA6E598650AF15", + "C391A856B9FE234E14BA1AC7BB40FF", + "479682BC21349C4BE1641D5E78FE2C79EC1B9CF5470936DCAD9967A4DCD7C4EFADA593BC9EDE71E6A08829B8580901B61E274227E9D918502DE3", + "EAD154DC09C5E26C5D26FF33ED148B27120C7F2C23225CC0D0631B03E1F6C6D96FEB88C1A4052ACB4CE746B884B6502931F407021126C6AAB8C514C077A5A38438AE88EE", + "938821286EBB671D999B87C032E1D6055392EB564E57970D55E545FC5E8BAB90E6E3E3C0913F6320995FC636D72CD9919657CC38BD51552F4A502D8D1FE56DB33EBAC5092630E69EBB986F0E15CEE9FC8C052501"}, + {"294362FCC984F440CEA3E9F7D2C06AF20C53AAC1B3738CA2186C914A6E193ABB", + "B15B61C8BB39261A8F55AB178EC3", + "D0729B6B75BB", + "2BD089ADCE9F334BAE3B065996C7D616DD0C27DF4218DCEEA0FBCA0F968837CE26B0876083327E25681FDDD620A32EC0DA12F73FAE826CC94BFF2B90A54D2651", + "AC94B25E4E21DE2437B806966CCD5D9385EF0CD4A51AB9FA6DE675C7B8952D67802E9FEC1FDE9F5D1EAB06057498BC0EEA454804FC9D2068982A3E24182D9AC2E7AB9994DDC899A604264583F63D066B"}, + {"959DBFEB039B1A5B8CE6A44649B602AAA5F98A906DB96143D202CD2024F749D9", + "01D7BDB1133E9C347486C1EFA6", + "F3843955BD741F379DD750585EDC55E2CDA05CCBA8C1F4622AC2FE35214BC3A019B8BD12C4CC42D9213D1E1556941E8D8450830287FFB3B763A13722DD4140ED9846FB5FFF745D7B0B967D810A068222E10B259AF1D392035B0D83DC1498A6830B11B2418A840212599171E0258A1C203B05362978", + "A21811232C950FA8B12237C2EBD6A7CD2C3A155905E9E0C7C120", + "63C1CE397B22F1A03F1FA549B43178BC405B152D3C95E977426D519B3DFCA28498823240592B6EEE7A14"}, + {"096AE499F5294173F34FF2B375F0E5D5AB79D0D03B33B1A74D7D576826345DF4", + "0C52B3D11D636E5910A4DD76D32C", + "229E9ECA3053789E937447BC719467075B6138A142DA528DA8F0CF8DDF022FD9AF8E74779BA3AC306609", + "8B7A00038783E8BAF6EDEAE0C4EAB48FC8FD501A588C7E4A4DB71E3604F2155A97687D3D2FFF8569261375A513CF4398CE0F87CA1658A1050F6EF6C4EA3E25", + "C20B6CF8D3C8241825FD90B2EDAC7593600646E579A8D8DAAE9E2E40C3835FE801B2BE4379131452BC5182C90307B176DFBE2049544222FE7783147B690774F6D9D7CEF52A91E61E298E9AA15464AC"}, +} diff --git a/vendor/github.com/ProtonMail/go-crypto/ocb/rfc7253_test_vectors_suite_a.go b/vendor/github.com/ProtonMail/go-crypto/ocb/rfc7253_test_vectors_suite_a.go new file mode 100644 index 0000000000000..330309ff5f8ee --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/ocb/rfc7253_test_vectors_suite_a.go @@ -0,0 +1,78 @@ +package ocb + +import ( + "encoding/hex" +) + +// Test vectors from https://tools.ietf.org/html/rfc7253. Note that key is +// shared across tests. +var testKey, _ = hex.DecodeString("000102030405060708090A0B0C0D0E0F") + +var rfc7253testVectors = []struct { + nonce, header, plaintext, ciphertext string +}{ + {"BBAA99887766554433221100", + "", + "", + "785407BFFFC8AD9EDCC5520AC9111EE6"}, + {"BBAA99887766554433221101", + "0001020304050607", + "0001020304050607", + "6820B3657B6F615A5725BDA0D3B4EB3A257C9AF1F8F03009"}, + {"BBAA99887766554433221102", + "0001020304050607", + "", + "81017F8203F081277152FADE694A0A00"}, + {"BBAA99887766554433221103", + "", + "0001020304050607", + "45DD69F8F5AAE72414054CD1F35D82760B2CD00D2F99BFA9"}, + {"BBAA99887766554433221104", + "000102030405060708090A0B0C0D0E0F", + "000102030405060708090A0B0C0D0E0F", + "571D535B60B277188BE5147170A9A22C3AD7A4FF3835B8C5701C1CCEC8FC3358"}, + {"BBAA99887766554433221105", + "000102030405060708090A0B0C0D0E0F", + "", + "8CF761B6902EF764462AD86498CA6B97"}, + {"BBAA99887766554433221106", + "", + "000102030405060708090A0B0C0D0E0F", + "5CE88EC2E0692706A915C00AEB8B2396F40E1C743F52436BDF06D8FA1ECA343D"}, + {"BBAA99887766554433221107", + "000102030405060708090A0B0C0D0E0F1011121314151617", + "000102030405060708090A0B0C0D0E0F1011121314151617", + "1CA2207308C87C010756104D8840CE1952F09673A448A122C92C62241051F57356D7F3C90BB0E07F"}, + {"BBAA99887766554433221108", + "000102030405060708090A0B0C0D0E0F1011121314151617", + "", + "6DC225A071FC1B9F7C69F93B0F1E10DE"}, + {"BBAA99887766554433221109", + "", + "000102030405060708090A0B0C0D0E0F1011121314151617", + "221BD0DE7FA6FE993ECCD769460A0AF2D6CDED0C395B1C3CE725F32494B9F914D85C0B1EB38357FF"}, + {"BBAA9988776655443322110A", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F", + "BD6F6C496201C69296C11EFD138A467ABD3C707924B964DEAFFC40319AF5A48540FBBA186C5553C68AD9F592A79A4240"}, + {"BBAA9988776655443322110B", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F", + "", + "FE80690BEE8A485D11F32965BC9D2A32"}, + {"BBAA9988776655443322110C", + "", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F", + "2942BFC773BDA23CABC6ACFD9BFD5835BD300F0973792EF46040C53F1432BCDFB5E1DDE3BC18A5F840B52E653444D5DF"}, + {"BBAA9988776655443322110D", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627", + "D5CA91748410C1751FF8A2F618255B68A0A12E093FF454606E59F9C1D0DDC54B65E8628E568BAD7AED07BA06A4A69483A7035490C5769E60"}, + {"BBAA9988776655443322110E", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627", + "", + "C5CD9D1850C141E358649994EE701B68"}, + {"BBAA9988776655443322110F", + "", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627", + "4412923493C57D5DE0D700F753CCE0D1D2D95060122E9F15A5DDBFC5787E50B5CC55EE507BCB084E479AD363AC366B95A98CA5F3000B1479"}, +} diff --git a/vendor/github.com/ProtonMail/go-crypto/ocb/rfc7253_test_vectors_suite_b.go b/vendor/github.com/ProtonMail/go-crypto/ocb/rfc7253_test_vectors_suite_b.go new file mode 100644 index 0000000000000..14a3c336fbc2d --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/ocb/rfc7253_test_vectors_suite_b.go @@ -0,0 +1,25 @@ +package ocb + +// Second set of test vectors from https://tools.ietf.org/html/rfc7253 +var rfc7253TestVectorTaglen96 = struct { + key, nonce, header, plaintext, ciphertext string +}{"0F0E0D0C0B0A09080706050403020100", + "BBAA9988776655443322110D", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627", + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627", + "1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FDAC4F02AA"} + +var rfc7253AlgorithmTest = []struct { + KEYLEN, TAGLEN int + OUTPUT string +}{ + {128, 128, "67E944D23256C5E0B6C61FA22FDF1EA2"}, + {192, 128, "F673F2C3E7174AAE7BAE986CA9F29E17"}, + {256, 128, "D90EB8E9C977C88B79DD793D7FFA161C"}, + {128, 96, "77A3D8E73589158D25D01209"}, + {192, 96, "05D56EAD2752C86BE6932C5E"}, + {256, 96, "5458359AC23B0CBA9E6330DD"}, + {128, 64, "192C9B7BD90BA06A"}, + {192, 64, "0066BC6E0EF34E24"}, + {256, 64, "7D4EA5D445501CBE"}, +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap/keywrap.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap/keywrap.go new file mode 100644 index 0000000000000..3c6251d1ce67a --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/aes/keywrap/keywrap.go @@ -0,0 +1,153 @@ +// Copyright 2014 Matthew Endsley +// All rights reserved +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted providing that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +// IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +// Package keywrap is an implementation of the RFC 3394 AES key wrapping +// algorithm. This is used in OpenPGP with elliptic curve keys. +package keywrap + +import ( + "crypto/aes" + "encoding/binary" + "errors" +) + +var ( + // ErrWrapPlaintext is returned if the plaintext is not a multiple + // of 64 bits. + ErrWrapPlaintext = errors.New("keywrap: plainText must be a multiple of 64 bits") + + // ErrUnwrapCiphertext is returned if the ciphertext is not a + // multiple of 64 bits. + ErrUnwrapCiphertext = errors.New("keywrap: cipherText must by a multiple of 64 bits") + + // ErrUnwrapFailed is returned if unwrapping a key fails. + ErrUnwrapFailed = errors.New("keywrap: failed to unwrap key") + + // NB: the AES NewCipher call only fails if the key is an invalid length. + + // ErrInvalidKey is returned when the AES key is invalid. + ErrInvalidKey = errors.New("keywrap: invalid AES key") +) + +// Wrap a key using the RFC 3394 AES Key Wrap Algorithm. +func Wrap(key, plainText []byte) ([]byte, error) { + if len(plainText)%8 != 0 { + return nil, ErrWrapPlaintext + } + + c, err := aes.NewCipher(key) + if err != nil { + return nil, ErrInvalidKey + } + + nblocks := len(plainText) / 8 + + // 1) Initialize variables. + var block [aes.BlockSize]byte + // - Set A = IV, an initial value (see 2.2.3) + for ii := 0; ii < 8; ii++ { + block[ii] = 0xA6 + } + + // - For i = 1 to n + // - Set R[i] = P[i] + intermediate := make([]byte, len(plainText)) + copy(intermediate, plainText) + + // 2) Calculate intermediate values. + for ii := 0; ii < 6; ii++ { + for jj := 0; jj < nblocks; jj++ { + // - B = AES(K, A | R[i]) + copy(block[8:], intermediate[jj*8:jj*8+8]) + c.Encrypt(block[:], block[:]) + + // - A = MSB(64, B) ^ t where t = (n*j)+1 + t := uint64(ii*nblocks + jj + 1) + val := binary.BigEndian.Uint64(block[:8]) ^ t + binary.BigEndian.PutUint64(block[:8], val) + + // - R[i] = LSB(64, B) + copy(intermediate[jj*8:jj*8+8], block[8:]) + } + } + + // 3) Output results. + // - Set C[0] = A + // - For i = 1 to n + // - C[i] = R[i] + return append(block[:8], intermediate...), nil +} + +// Unwrap a key using the RFC 3394 AES Key Wrap Algorithm. +func Unwrap(key, cipherText []byte) ([]byte, error) { + if len(cipherText)%8 != 0 { + return nil, ErrUnwrapCiphertext + } + + c, err := aes.NewCipher(key) + if err != nil { + return nil, ErrInvalidKey + } + + nblocks := len(cipherText)/8 - 1 + + // 1) Initialize variables. + var block [aes.BlockSize]byte + // - Set A = C[0] + copy(block[:8], cipherText[:8]) + + // - For i = 1 to n + // - Set R[i] = C[i] + intermediate := make([]byte, len(cipherText)-8) + copy(intermediate, cipherText[8:]) + + // 2) Compute intermediate values. + for jj := 5; jj >= 0; jj-- { + for ii := nblocks - 1; ii >= 0; ii-- { + // - B = AES-1(K, (A ^ t) | R[i]) where t = n*j+1 + // - A = MSB(64, B) + t := uint64(jj*nblocks + ii + 1) + val := binary.BigEndian.Uint64(block[:8]) ^ t + binary.BigEndian.PutUint64(block[:8], val) + + copy(block[8:], intermediate[ii*8:ii*8+8]) + c.Decrypt(block[:], block[:]) + + // - R[i] = LSB(B, 64) + copy(intermediate[ii*8:ii*8+8], block[8:]) + } + } + + // 3) Output results. + // - If A is an appropriate initial value (see 2.2.3), + for ii := 0; ii < 8; ii++ { + if block[ii] != 0xA6 { + return nil, ErrUnwrapFailed + } + } + + // - For i = 1 to n + // - P[i] = R[i] + return intermediate, nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/armor/armor.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/armor.go similarity index 89% rename from vendor/golang.org/x/crypto/openpgp/armor/armor.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/armor/armor.go index 8907183ec0ab9..d7af9141e36da 100644 --- a/vendor/golang.org/x/crypto/openpgp/armor/armor.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/armor.go @@ -4,20 +4,15 @@ // Package armor implements OpenPGP ASCII Armor, see RFC 4880. OpenPGP Armor is // very similar to PEM except that it has an additional CRC checksum. -// -// Deprecated: this package is unmaintained except for security fixes. New -// applications should consider a more focused, modern alternative to OpenPGP -// for their specific task. If you are required to interoperate with OpenPGP -// systems and need a maintained package, consider a community fork. -// See https://golang.org/issue/44226. -package armor // import "golang.org/x/crypto/openpgp/armor" +package armor // import "github.com/ProtonMail/go-crypto/openpgp/armor" import ( "bufio" "bytes" "encoding/base64" - "golang.org/x/crypto/openpgp/errors" "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" ) // A Block represents an OpenPGP armored structure. @@ -156,7 +151,7 @@ func (r *openpgpReader) Read(p []byte) (n int, err error) { n, err = r.b64Reader.Read(p) r.currentCRC = crc24(r.currentCRC, p[:n]) - if err == io.EOF && r.lReader.crcSet && r.lReader.crc != r.currentCRC&crc24Mask { + if err == io.EOF && r.lReader.crcSet && r.lReader.crc != uint32(r.currentCRC&crc24Mask) { return 0, ArmorCorrupt } @@ -214,12 +209,16 @@ TryNextBlock: break } - i := bytes.Index(line, []byte(": ")) + i := bytes.Index(line, []byte(":")) if i == -1 { goto TryNextBlock } lastKey = string(line[:i]) - p.Header[lastKey] = string(line[i+2:]) + var value string + if len(line) > i+2 { + value = string(line[i+2:]) + } + p.Header[lastKey] = value } p.lReader.in = r diff --git a/vendor/golang.org/x/crypto/openpgp/armor/encode.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/armor/encode.go similarity index 100% rename from vendor/golang.org/x/crypto/openpgp/armor/encode.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/armor/encode.go diff --git a/vendor/golang.org/x/crypto/openpgp/canonical_text.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/canonical_text.go similarity index 80% rename from vendor/golang.org/x/crypto/openpgp/canonical_text.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/canonical_text.go index e601e389f1299..a94f6150c4b23 100644 --- a/vendor/golang.org/x/crypto/openpgp/canonical_text.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/canonical_text.go @@ -4,7 +4,10 @@ package openpgp -import "hash" +import ( + "hash" + "io" +) // NewCanonicalTextHash reformats text written to it into the canonical // form and then applies the hash h. See RFC 4880, section 5.2.1. @@ -19,28 +22,31 @@ type canonicalTextHash struct { var newline = []byte{'\r', '\n'} -func (cth *canonicalTextHash) Write(buf []byte) (int, error) { +func writeCanonical(cw io.Writer, buf []byte, s *int) (int, error) { start := 0 - for i, c := range buf { - switch cth.s { + switch *s { case 0: if c == '\r' { - cth.s = 1 + *s = 1 } else if c == '\n' { - cth.h.Write(buf[start:i]) - cth.h.Write(newline) + cw.Write(buf[start:i]) + cw.Write(newline) start = i + 1 } case 1: - cth.s = 0 + *s = 0 } } - cth.h.Write(buf[start:]) + cw.Write(buf[start:]) return len(buf), nil } +func (cth *canonicalTextHash) Write(buf []byte) (int, error) { + return writeCanonical(cth.h, buf, &cth.s) +} + func (cth *canonicalTextHash) Sum(in []byte) []byte { return cth.h.Sum(in) } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/ecdh.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/ecdh.go new file mode 100644 index 0000000000000..c895bad6bbc48 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdh/ecdh.go @@ -0,0 +1,210 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ecdh implements ECDH encryption, suitable for OpenPGP, +// as specified in RFC 6637, section 8. +package ecdh + +import ( + "bytes" + "errors" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/aes/keywrap" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" + "github.com/ProtonMail/go-crypto/openpgp/internal/ecc" +) + +type KDF struct { + Hash algorithm.Hash + Cipher algorithm.Cipher +} + +type PublicKey struct { + curve ecc.ECDHCurve + Point []byte + KDF +} + +type PrivateKey struct { + PublicKey + D []byte +} + +func NewPublicKey(curve ecc.ECDHCurve, kdfHash algorithm.Hash, kdfCipher algorithm.Cipher) *PublicKey { + return &PublicKey{ + curve: curve, + KDF: KDF{ + Hash: kdfHash, + Cipher: kdfCipher, + }, + } +} + +func NewPrivateKey(key PublicKey) *PrivateKey { + return &PrivateKey{ + PublicKey: key, + } +} + +func (pk *PublicKey) GetCurve() ecc.ECDHCurve { + return pk.curve +} + +func (pk *PublicKey) MarshalPoint() []byte { + return pk.curve.MarshalBytePoint(pk.Point) +} + +func (pk *PublicKey) UnmarshalPoint(p []byte) error { + pk.Point = pk.curve.UnmarshalBytePoint(p) + if pk.Point == nil { + return errors.New("ecdh: failed to parse EC point") + } + return nil +} + +func (sk *PrivateKey) MarshalByteSecret() []byte { + return sk.curve.MarshalByteSecret(sk.D) +} + +func (sk *PrivateKey) UnmarshalByteSecret(d []byte) error { + sk.D = sk.curve.UnmarshalByteSecret(d) + + if sk.D == nil { + return errors.New("ecdh: failed to parse scalar") + } + return nil +} + +func GenerateKey(rand io.Reader, c ecc.ECDHCurve, kdf KDF) (priv *PrivateKey, err error) { + priv = new(PrivateKey) + priv.PublicKey.curve = c + priv.PublicKey.KDF = kdf + priv.PublicKey.Point, priv.D, err = c.GenerateECDH(rand) + return +} + +func Encrypt(random io.Reader, pub *PublicKey, msg, curveOID, fingerprint []byte) (vsG, c []byte, err error) { + if len(msg) > 40 { + return nil, nil, errors.New("ecdh: message too long") + } + // the sender MAY use 21, 13, and 5 bytes of padding for AES-128, + // AES-192, and AES-256, respectively, to provide the same number of + // octets, 40 total, as an input to the key wrapping method. + padding := make([]byte, 40-len(msg)) + for i := range padding { + padding[i] = byte(40 - len(msg)) + } + m := append(msg, padding...) + + ephemeral, zb, err := pub.curve.Encaps(random, pub.Point) + if err != nil { + return nil, nil, err + } + + vsG = pub.curve.MarshalBytePoint(ephemeral) + + z, err := buildKey(pub, zb, curveOID, fingerprint, false, false) + if err != nil { + return nil, nil, err + } + + if c, err = keywrap.Wrap(z, m); err != nil { + return nil, nil, err + } + + return vsG, c, nil + +} + +func Decrypt(priv *PrivateKey, vsG, c, curveOID, fingerprint []byte) (msg []byte, err error) { + var m []byte + zb, err := priv.PublicKey.curve.Decaps(priv.curve.UnmarshalBytePoint(vsG), priv.D) + + // Try buildKey three times to workaround an old bug, see comments in buildKey. + for i := 0; i < 3; i++ { + var z []byte + // RFC6637 §8: "Compute Z = KDF( S, Z_len, Param );" + z, err = buildKey(&priv.PublicKey, zb, curveOID, fingerprint, i == 1, i == 2) + if err != nil { + return nil, err + } + + // RFC6637 §8: "Compute C = AESKeyWrap( Z, c ) as per [RFC3394]" + m, err = keywrap.Unwrap(z, c) + if err == nil { + break + } + } + + // Only return an error after we've tried all (required) variants of buildKey. + if err != nil { + return nil, err + } + + // RFC6637 §8: "m = symm_alg_ID || session key || checksum || pkcs5_padding" + // The last byte should be the length of the padding, as per PKCS5; strip it off. + return m[:len(m)-int(m[len(m)-1])], nil +} + +func buildKey(pub *PublicKey, zb []byte, curveOID, fingerprint []byte, stripLeading, stripTrailing bool) ([]byte, error) { + // Param = curve_OID_len || curve_OID || public_key_alg_ID || 03 + // || 01 || KDF_hash_ID || KEK_alg_ID for AESKeyWrap + // || "Anonymous Sender " || recipient_fingerprint; + param := new(bytes.Buffer) + if _, err := param.Write(curveOID); err != nil { + return nil, err + } + algKDF := []byte{18, 3, 1, pub.KDF.Hash.Id(), pub.KDF.Cipher.Id()} + if _, err := param.Write(algKDF); err != nil { + return nil, err + } + if _, err := param.Write([]byte("Anonymous Sender ")); err != nil { + return nil, err + } + // For v5 keys, the 20 leftmost octets of the fingerprint are used. + if _, err := param.Write(fingerprint[:20]); err != nil { + return nil, err + } + if param.Len()-len(curveOID) != 45 { + return nil, errors.New("ecdh: malformed KDF Param") + } + + // MB = Hash ( 00 || 00 || 00 || 01 || ZB || Param ); + h := pub.KDF.Hash.New() + if _, err := h.Write([]byte{0x0, 0x0, 0x0, 0x1}); err != nil { + return nil, err + } + zbLen := len(zb) + i := 0 + j := zbLen - 1 + if stripLeading { + // Work around old go crypto bug where the leading zeros are missing. + for i < zbLen && zb[i] == 0 { + i++ + } + } + if stripTrailing { + // Work around old OpenPGP.js bug where insignificant trailing zeros in + // this little-endian number are missing. + // (See https://github.com/openpgpjs/openpgpjs/pull/853.) + for j >= 0 && zb[j] == 0 { + j-- + } + } + if _, err := h.Write(zb[i : j+1]); err != nil { + return nil, err + } + if _, err := h.Write(param.Bytes()); err != nil { + return nil, err + } + mb := h.Sum(nil) + + return mb[:pub.KDF.Cipher.KeySize()], nil // return oBits leftmost bits of MB. + +} + +func Validate(priv *PrivateKey) error { + return priv.curve.ValidateECDH(priv.Point, priv.D) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdsa/ecdsa.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdsa/ecdsa.go new file mode 100644 index 0000000000000..f94ae1b2f5057 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/ecdsa/ecdsa.go @@ -0,0 +1,80 @@ +// Package ecdsa implements ECDSA signature, suitable for OpenPGP, +// as specified in RFC 6637, section 5. +package ecdsa + +import ( + "errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/ecc" + "io" + "math/big" +) + +type PublicKey struct { + X, Y *big.Int + curve ecc.ECDSACurve +} + +type PrivateKey struct { + PublicKey + D *big.Int +} + +func NewPublicKey(curve ecc.ECDSACurve) *PublicKey { + return &PublicKey{ + curve: curve, + } +} + +func NewPrivateKey(key PublicKey) *PrivateKey { + return &PrivateKey{ + PublicKey: key, + } +} + +func (pk *PublicKey) GetCurve() ecc.ECDSACurve { + return pk.curve +} + +func (pk *PublicKey) MarshalPoint() []byte { + return pk.curve.MarshalIntegerPoint(pk.X, pk.Y) +} + +func (pk *PublicKey) UnmarshalPoint(p []byte) error { + pk.X, pk.Y = pk.curve.UnmarshalIntegerPoint(p) + if pk.X == nil { + return errors.New("ecdsa: failed to parse EC point") + } + return nil +} + +func (sk *PrivateKey) MarshalIntegerSecret() []byte { + return sk.curve.MarshalIntegerSecret(sk.D) +} + +func (sk *PrivateKey) UnmarshalIntegerSecret(d []byte) error { + sk.D = sk.curve.UnmarshalIntegerSecret(d) + + if sk.D == nil { + return errors.New("ecdsa: failed to parse scalar") + } + return nil +} + +func GenerateKey(rand io.Reader, c ecc.ECDSACurve) (priv *PrivateKey, err error) { + priv = new(PrivateKey) + priv.PublicKey.curve = c + priv.PublicKey.X, priv.PublicKey.Y, priv.D, err = c.GenerateECDSA(rand) + return +} + +func Sign(rand io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err error) { + return priv.PublicKey.curve.Sign(rand, priv.X, priv.Y, priv.D, hash) +} + +func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool { + return pub.curve.Verify(pub.X, pub.Y, hash, r, s) +} + +func Validate(priv *PrivateKey) error { + return priv.curve.ValidateECDSA(priv.X, priv.Y, priv.D.Bytes()) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/eddsa/eddsa.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/eddsa/eddsa.go new file mode 100644 index 0000000000000..99ecfc7f12d0b --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/eddsa/eddsa.go @@ -0,0 +1,91 @@ +// Package eddsa implements EdDSA signature, suitable for OpenPGP, as specified in +// https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-13.7 +package eddsa + +import ( + "errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/ecc" + "io" +) + +type PublicKey struct { + X []byte + curve ecc.EdDSACurve +} + +type PrivateKey struct { + PublicKey + D []byte +} + +func NewPublicKey(curve ecc.EdDSACurve) *PublicKey { + return &PublicKey{ + curve: curve, + } +} + +func NewPrivateKey(key PublicKey) *PrivateKey { + return &PrivateKey{ + PublicKey: key, + } +} + +func (pk *PublicKey) GetCurve() ecc.EdDSACurve { + return pk.curve +} + +func (pk *PublicKey) MarshalPoint() []byte { + return pk.curve.MarshalBytePoint(pk.X) +} + +func (pk *PublicKey) UnmarshalPoint(x []byte) error { + pk.X = pk.curve.UnmarshalBytePoint(x) + + if pk.X == nil { + return errors.New("eddsa: failed to parse EC point") + } + return nil +} + +func (sk *PrivateKey) MarshalByteSecret() []byte { + return sk.curve.MarshalByteSecret(sk.D) +} + +func (sk *PrivateKey) UnmarshalByteSecret(d []byte) error { + sk.D = sk.curve.UnmarshalByteSecret(d) + + if sk.D == nil { + return errors.New("eddsa: failed to parse scalar") + } + return nil +} + +func GenerateKey(rand io.Reader, c ecc.EdDSACurve) (priv *PrivateKey, err error) { + priv = new(PrivateKey) + priv.PublicKey.curve = c + priv.PublicKey.X, priv.D, err = c.GenerateEdDSA(rand) + return +} + +func Sign(priv *PrivateKey, message []byte) (r, s []byte, err error) { + sig, err := priv.PublicKey.curve.Sign(priv.PublicKey.X, priv.D, message) + if err != nil { + return nil, nil, err + } + + r, s = priv.PublicKey.curve.MarshalSignature(sig) + return +} + +func Verify(pub *PublicKey, message, r, s []byte) bool { + sig := pub.curve.UnmarshalSignature(r, s) + if sig == nil { + return false + } + + return pub.curve.Verify(pub.X, message, sig) +} + +func Validate(priv *PrivateKey) error { + return priv.curve.ValidateEdDSA(priv.PublicKey.X, priv.D) +} diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/elgamal/elgamal.go similarity index 88% rename from vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/elgamal/elgamal.go index 743b35a1204f5..bad27743445fd 100644 --- a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/elgamal/elgamal.go @@ -10,13 +10,7 @@ // This form of ElGamal embeds PKCS#1 v1.5 padding, which may make it // unsuitable for other protocols. RSA should be used in preference in any // case. -// -// Deprecated: this package was only provided to support ElGamal encryption in -// OpenPGP. The golang.org/x/crypto/openpgp package is now deprecated (see -// https://golang.org/issue/44226), and ElGamal in the OpenPGP ecosystem has -// compatibility and security issues (see https://eprint.iacr.org/2021/923). -// Moreover, this package doesn't protect against side-channel attacks. -package elgamal // import "golang.org/x/crypto/openpgp/elgamal" +package elgamal // import "github.com/ProtonMail/go-crypto/openpgp/elgamal" import ( "crypto/rand" diff --git a/vendor/golang.org/x/crypto/openpgp/errors/errors.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/errors/errors.go similarity index 56% rename from vendor/golang.org/x/crypto/openpgp/errors/errors.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/errors/errors.go index 1d7a0ea05adf1..17e2bcfed20a0 100644 --- a/vendor/golang.org/x/crypto/openpgp/errors/errors.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/errors/errors.go @@ -3,13 +3,7 @@ // license that can be found in the LICENSE file. // Package errors contains common error types for the OpenPGP packages. -// -// Deprecated: this package is unmaintained except for security fixes. New -// applications should consider a more focused, modern alternative to OpenPGP -// for their specific task. If you are required to interoperate with OpenPGP -// systems and need a maintained package, consider a community fork. -// See https://golang.org/issue/44226. -package errors // import "golang.org/x/crypto/openpgp/errors" +package errors // import "github.com/ProtonMail/go-crypto/openpgp/errors" import ( "strconv" @@ -47,6 +41,25 @@ func (b SignatureError) Error() string { return "openpgp: invalid signature: " + string(b) } +var ErrMDCHashMismatch error = SignatureError("MDC hash mismatch") +var ErrMDCMissing error = SignatureError("MDC packet not found") + +type signatureExpiredError int + +func (se signatureExpiredError) Error() string { + return "openpgp: signature expired" +} + +var ErrSignatureExpired error = signatureExpiredError(0) + +type keyExpiredError int + +func (ke keyExpiredError) Error() string { + return "openpgp: key expired" +} + +var ErrKeyExpired error = keyExpiredError(0) + type keyIncorrectError int func (ki keyIncorrectError) Error() string { @@ -55,6 +68,14 @@ func (ki keyIncorrectError) Error() string { var ErrKeyIncorrect error = keyIncorrectError(0) +// KeyInvalidError indicates that the public key parameters are invalid +// as they do not match the private ones +type KeyInvalidError string + +func (e KeyInvalidError) Error() string { + return "openpgp: invalid key: " + string(e) +} + type unknownIssuerError int func (unknownIssuerError) Error() string { @@ -76,3 +97,20 @@ type UnknownPacketTypeError uint8 func (upte UnknownPacketTypeError) Error() string { return "openpgp: unknown packet type: " + strconv.Itoa(int(upte)) } + +// AEADError indicates that there is a problem when initializing or using a +// AEAD instance, configuration struct, nonces or index values. +type AEADError string + +func (ae AEADError) Error() string { + return "openpgp: aead error: " + string(ae) +} + +// ErrDummyPrivateKey results when operations are attempted on a private key +// that is just a dummy key. See +// https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=doc/DETAILS;h=fe55ae16ab4e26d8356dc574c9e8bc935e71aef1;hb=23191d7851eae2217ecdac6484349849a24fd94a#l1109 +type ErrDummyPrivateKey string + +func (dke ErrDummyPrivateKey) Error() string { + return "openpgp: s2k GNU dummy key: " + string(dke) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/hash.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/hash.go new file mode 100644 index 0000000000000..526bd7777f868 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/hash.go @@ -0,0 +1,24 @@ +package openpgp + +import ( + "crypto" + + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" +) + +// HashIdToHash returns a crypto.Hash which corresponds to the given OpenPGP +// hash id. +func HashIdToHash(id byte) (h crypto.Hash, ok bool) { + return algorithm.HashIdToHash(id) +} + +// HashIdToString returns the name of the hash function corresponding to the +// given OpenPGP hash id. +func HashIdToString(id byte) (name string, ok bool) { + return algorithm.HashIdToString(id) +} + +// HashToHashId returns an OpenPGP hash id which corresponds the given Hash. +func HashToHashId(h crypto.Hash) (id byte, ok bool) { + return algorithm.HashToHashId(h) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/aead.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/aead.go new file mode 100644 index 0000000000000..d067065186645 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/aead.go @@ -0,0 +1,65 @@ +// Copyright (C) 2019 ProtonTech AG + +package algorithm + +import ( + "crypto/cipher" + "github.com/ProtonMail/go-crypto/eax" + "github.com/ProtonMail/go-crypto/ocb" +) + +// AEADMode defines the Authenticated Encryption with Associated Data mode of +// operation. +type AEADMode uint8 + +// Supported modes of operation (see RFC4880bis [EAX] and RFC7253) +const ( + AEADModeEAX = AEADMode(1) + AEADModeOCB = AEADMode(2) + AEADModeGCM = AEADMode(3) +) + +// TagLength returns the length in bytes of authentication tags. +func (mode AEADMode) TagLength() int { + switch mode { + case AEADModeEAX: + return 16 + case AEADModeOCB: + return 16 + case AEADModeGCM: + return 16 + default: + return 0 + } +} + +// NonceLength returns the length in bytes of nonces. +func (mode AEADMode) NonceLength() int { + switch mode { + case AEADModeEAX: + return 16 + case AEADModeOCB: + return 15 + case AEADModeGCM: + return 12 + default: + return 0 + } +} + +// New returns a fresh instance of the given mode +func (mode AEADMode) New(block cipher.Block) (alg cipher.AEAD) { + var err error + switch mode { + case AEADModeEAX: + alg, err = eax.NewEAX(block) + case AEADModeOCB: + alg, err = ocb.NewOCB(block) + case AEADModeGCM: + alg, err = cipher.NewGCM(block) + } + if err != nil { + panic(err.Error()) + } + return alg +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/cipher.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/cipher.go new file mode 100644 index 0000000000000..5760cff80ea3f --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/cipher.go @@ -0,0 +1,107 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package algorithm + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/des" + + "golang.org/x/crypto/cast5" +) + +// Cipher is an official symmetric key cipher algorithm. See RFC 4880, +// section 9.2. +type Cipher interface { + // Id returns the algorithm ID, as a byte, of the cipher. + Id() uint8 + // KeySize returns the key size, in bytes, of the cipher. + KeySize() int + // BlockSize returns the block size, in bytes, of the cipher. + BlockSize() int + // New returns a fresh instance of the given cipher. + New(key []byte) cipher.Block +} + +// The following constants mirror the OpenPGP standard (RFC 4880). +const ( + TripleDES = CipherFunction(2) + CAST5 = CipherFunction(3) + AES128 = CipherFunction(7) + AES192 = CipherFunction(8) + AES256 = CipherFunction(9) +) + +// CipherById represents the different block ciphers specified for OpenPGP. See +// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-13 +var CipherById = map[uint8]Cipher{ + TripleDES.Id(): TripleDES, + CAST5.Id(): CAST5, + AES128.Id(): AES128, + AES192.Id(): AES192, + AES256.Id(): AES256, +} + +type CipherFunction uint8 + +// ID returns the algorithm Id, as a byte, of cipher. +func (sk CipherFunction) Id() uint8 { + return uint8(sk) +} + +var keySizeByID = map[uint8]int{ + TripleDES.Id(): 24, + CAST5.Id(): cast5.KeySize, + AES128.Id(): 16, + AES192.Id(): 24, + AES256.Id(): 32, +} + +// KeySize returns the key size, in bytes, of cipher. +func (cipher CipherFunction) KeySize() int { + switch cipher { + case TripleDES: + return 24 + case CAST5: + return cast5.KeySize + case AES128: + return 16 + case AES192: + return 24 + case AES256: + return 32 + } + return 0 +} + +// BlockSize returns the block size, in bytes, of cipher. +func (cipher CipherFunction) BlockSize() int { + switch cipher { + case TripleDES: + return des.BlockSize + case CAST5: + return 8 + case AES128, AES192, AES256: + return 16 + } + return 0 +} + +// New returns a fresh instance of the given cipher. +func (cipher CipherFunction) New(key []byte) (block cipher.Block) { + var err error + switch cipher { + case TripleDES: + block, err = des.NewTripleDESCipher(key) + case CAST5: + block, err = cast5.NewCipher(key) + case AES128, AES192, AES256: + block, err = aes.NewCipher(key) + } + if err != nil { + panic(err.Error()) + } + return +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/hash.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/hash.go new file mode 100644 index 0000000000000..d1a00fc749504 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/algorithm/hash.go @@ -0,0 +1,143 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package algorithm + +import ( + "crypto" + "fmt" + "hash" +) + +// Hash is an official hash function algorithm. See RFC 4880, section 9.4. +type Hash interface { + // Id returns the algorithm ID, as a byte, of Hash. + Id() uint8 + // Available reports whether the given hash function is linked into the binary. + Available() bool + // HashFunc simply returns the value of h so that Hash implements SignerOpts. + HashFunc() crypto.Hash + // New returns a new hash.Hash calculating the given hash function. New + // panics if the hash function is not linked into the binary. + New() hash.Hash + // Size returns the length, in bytes, of a digest resulting from the given + // hash function. It doesn't require that the hash function in question be + // linked into the program. + Size() int + // String is the name of the hash function corresponding to the given + // OpenPGP hash id. + String() string +} + +// The following vars mirror the crypto/Hash supported hash functions. +var ( + SHA1 Hash = cryptoHash{2, crypto.SHA1} + SHA256 Hash = cryptoHash{8, crypto.SHA256} + SHA384 Hash = cryptoHash{9, crypto.SHA384} + SHA512 Hash = cryptoHash{10, crypto.SHA512} + SHA224 Hash = cryptoHash{11, crypto.SHA224} + SHA3_256 Hash = cryptoHash{12, crypto.SHA3_256} + SHA3_512 Hash = cryptoHash{14, crypto.SHA3_512} +) + +// HashById represents the different hash functions specified for OpenPGP. See +// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-14 +var ( + HashById = map[uint8]Hash{ + SHA256.Id(): SHA256, + SHA384.Id(): SHA384, + SHA512.Id(): SHA512, + SHA224.Id(): SHA224, + SHA3_256.Id(): SHA3_256, + SHA3_512.Id(): SHA3_512, + } +) + +// cryptoHash contains pairs relating OpenPGP's hash identifier with +// Go's crypto.Hash type. See RFC 4880, section 9.4. +type cryptoHash struct { + id uint8 + crypto.Hash +} + +// Id returns the algorithm ID, as a byte, of cryptoHash. +func (h cryptoHash) Id() uint8 { + return h.id +} + +var hashNames = map[uint8]string{ + SHA256.Id(): "SHA256", + SHA384.Id(): "SHA384", + SHA512.Id(): "SHA512", + SHA224.Id(): "SHA224", + SHA3_256.Id(): "SHA3-256", + SHA3_512.Id(): "SHA3-512", +} + +func (h cryptoHash) String() string { + s, ok := hashNames[h.id] + if !ok { + panic(fmt.Sprintf("Unsupported hash function %d", h.id)) + } + return s +} + +// HashIdToHash returns a crypto.Hash which corresponds to the given OpenPGP +// hash id. +func HashIdToHash(id byte) (h crypto.Hash, ok bool) { + if hash, ok := HashById[id]; ok { + return hash.HashFunc(), true + } + return 0, false +} + +// HashIdToHashWithSha1 returns a crypto.Hash which corresponds to the given OpenPGP +// hash id, allowing sha1. +func HashIdToHashWithSha1(id byte) (h crypto.Hash, ok bool) { + if hash, ok := HashById[id]; ok { + return hash.HashFunc(), true + } + + if id == SHA1.Id() { + return SHA1.HashFunc(), true + } + + return 0, false +} + +// HashIdToString returns the name of the hash function corresponding to the +// given OpenPGP hash id. +func HashIdToString(id byte) (name string, ok bool) { + if hash, ok := HashById[id]; ok { + return hash.String(), true + } + return "", false +} + +// HashToHashId returns an OpenPGP hash id which corresponds the given Hash. +func HashToHashId(h crypto.Hash) (id byte, ok bool) { + for id, hash := range HashById { + if hash.HashFunc() == h { + return id, true + } + } + + return 0, false +} + +// HashToHashIdWithSha1 returns an OpenPGP hash id which corresponds the given Hash, +// allowing instances of SHA1 +func HashToHashIdWithSha1(h crypto.Hash) (id byte, ok bool) { + for id, hash := range HashById { + if hash.HashFunc() == h { + return id, true + } + } + + if h == SHA1.HashFunc() { + return SHA1.Id(), true + } + + return 0, false +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve25519.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve25519.go new file mode 100644 index 0000000000000..888767c4e4383 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve25519.go @@ -0,0 +1,171 @@ +// Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. +package ecc + +import ( + "crypto/subtle" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + x25519lib "github.com/cloudflare/circl/dh/x25519" +) + +type curve25519 struct{} + +func NewCurve25519() *curve25519 { + return &curve25519{} +} + +func (c *curve25519) GetCurveName() string { + return "curve25519" +} + +// MarshalBytePoint encodes the public point from native format, adding the prefix. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.6 +func (c *curve25519) MarshalBytePoint(point []byte) []byte { + return append([]byte{0x40}, point...) +} + +// UnmarshalBytePoint decodes the public point to native format, removing the prefix. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.6 +func (c *curve25519) UnmarshalBytePoint(point []byte) []byte { + if len(point) != x25519lib.Size+1 { + return nil + } + + // Remove prefix + return point[1:] +} + +// MarshalByteSecret encodes the secret scalar from native format. +// Note that the EC secret scalar differs from the definition of public keys in +// [Curve25519] in two ways: (1) the byte-ordering is big-endian, which is +// more uniform with how big integers are represented in OpenPGP, and (2) the +// leading zeros are truncated. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.6.1.1 +// Note that leading zero bytes are stripped later when encoding as an MPI. +func (c *curve25519) MarshalByteSecret(secret []byte) []byte { + d := make([]byte, x25519lib.Size) + copyReversed(d, secret) + + // The following ensures that the private key is a number of the form + // 2^{254} + 8 * [0, 2^{251}), in order to avoid the small subgroup of + // the curve. + // + // This masking is done internally in the underlying lib and so is unnecessary + // for security, but OpenPGP implementations require that private keys be + // pre-masked. + d[0] &= 127 + d[0] |= 64 + d[31] &= 248 + + return d +} + +// UnmarshalByteSecret decodes the secret scalar from native format. +// Note that the EC secret scalar differs from the definition of public keys in +// [Curve25519] in two ways: (1) the byte-ordering is big-endian, which is +// more uniform with how big integers are represented in OpenPGP, and (2) the +// leading zeros are truncated. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.6.1.1 +func (c *curve25519) UnmarshalByteSecret(d []byte) []byte { + if len(d) > x25519lib.Size { + return nil + } + + // Ensure truncated leading bytes are re-added + secret := make([]byte, x25519lib.Size) + copyReversed(secret, d) + + return secret +} + +// generateKeyPairBytes Generates a private-public key-pair. +// 'priv' is a private key; a little-endian scalar belonging to the set +// 2^{254} + 8 * [0, 2^{251}), in order to avoid the small subgroup of the +// curve. 'pub' is simply 'priv' * G where G is the base point. +// See https://cr.yp.to/ecdh.html and RFC7748, sec 5. +func (c *curve25519) generateKeyPairBytes(rand io.Reader) (priv, pub x25519lib.Key, err error) { + _, err = io.ReadFull(rand, priv[:]) + if err != nil { + return + } + + x25519lib.KeyGen(&pub, &priv) + return +} + +func (c *curve25519) GenerateECDH(rand io.Reader) (point []byte, secret []byte, err error) { + priv, pub, err := c.generateKeyPairBytes(rand) + if err != nil { + return + } + + return pub[:], priv[:], nil +} + +func (c *genericCurve) MaskSecret(secret []byte) []byte { + return secret +} + +func (c *curve25519) Encaps(rand io.Reader, point []byte) (ephemeral, sharedSecret []byte, err error) { + // RFC6637 §8: "Generate an ephemeral key pair {v, V=vG}" + // ephemeralPrivate corresponds to `v`. + // ephemeralPublic corresponds to `V`. + ephemeralPrivate, ephemeralPublic, err := c.generateKeyPairBytes(rand) + if err != nil { + return nil, nil, err + } + + // RFC6637 §8: "Obtain the authenticated recipient public key R" + // pubKey corresponds to `R`. + var pubKey x25519lib.Key + copy(pubKey[:], point) + + // RFC6637 §8: "Compute the shared point S = vR" + // "VB = convert point V to the octet string" + // sharedPoint corresponds to `VB`. + var sharedPoint x25519lib.Key + x25519lib.Shared(&sharedPoint, &ephemeralPrivate, &pubKey) + + return ephemeralPublic[:], sharedPoint[:], nil +} + +func (c *curve25519) Decaps(vsG, secret []byte) (sharedSecret []byte, err error) { + var ephemeralPublic, decodedPrivate, sharedPoint x25519lib.Key + // RFC6637 §8: "The decryption is the inverse of the method given." + // All quoted descriptions in comments below describe encryption, and + // the reverse is performed. + // vsG corresponds to `VB` in RFC6637 §8 . + + // RFC6637 §8: "VB = convert point V to the octet string" + copy(ephemeralPublic[:], vsG) + + // decodedPrivate corresponds to `r` in RFC6637 §8 . + copy(decodedPrivate[:], secret) + + // RFC6637 §8: "Note that the recipient obtains the shared secret by calculating + // S = rV = rvG, where (r,R) is the recipient's key pair." + // sharedPoint corresponds to `S`. + x25519lib.Shared(&sharedPoint, &decodedPrivate, &ephemeralPublic) + + return sharedPoint[:], nil +} + +func (c *curve25519) ValidateECDH(point []byte, secret []byte) (err error) { + var pk, sk x25519lib.Key + copy(sk[:], secret) + x25519lib.KeyGen(&pk, &sk) + + if subtle.ConstantTimeCompare(point, pk[:]) == 0 { + return errors.KeyInvalidError("ecc: invalid curve25519 public point") + } + + return nil +} + +func copyReversed(out []byte, in []byte) { + l := len(in) + for i := 0; i < l; i++ { + out[i] = in[l-i-1] + } +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve_info.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve_info.go new file mode 100644 index 0000000000000..35751034ddab6 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curve_info.go @@ -0,0 +1,140 @@ +// Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. +package ecc + +import ( + "bytes" + "crypto/elliptic" + "github.com/ProtonMail/go-crypto/bitcurves" + "github.com/ProtonMail/go-crypto/brainpool" + "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" +) + +type CurveInfo struct { + GenName string + Oid *encoding.OID + Curve Curve +} + +var Curves = []CurveInfo{ + { + // NIST P-256 + GenName: "P256", + Oid: encoding.NewOID([]byte{0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07}), + Curve: NewGenericCurve(elliptic.P256()), + }, + { + // NIST P-384 + GenName: "P384", + Oid: encoding.NewOID([]byte{0x2B, 0x81, 0x04, 0x00, 0x22}), + Curve: NewGenericCurve(elliptic.P384()), + }, + { + // NIST P-521 + GenName: "P521", + Oid: encoding.NewOID([]byte{0x2B, 0x81, 0x04, 0x00, 0x23}), + Curve: NewGenericCurve(elliptic.P521()), + }, + { + // SecP256k1 + GenName: "SecP256k1", + Oid: encoding.NewOID([]byte{0x2B, 0x81, 0x04, 0x00, 0x0A}), + Curve: NewGenericCurve(bitcurves.S256()), + }, + { + // Curve25519 + GenName: "Curve25519", + Oid: encoding.NewOID([]byte{0x2B, 0x06, 0x01, 0x04, 0x01, 0x97, 0x55, 0x01, 0x05, 0x01}), + Curve: NewCurve25519(), + }, + { + // X448 + GenName: "Curve448", + Oid: encoding.NewOID([]byte{0x2B, 0x65, 0x6F}), + Curve: NewX448(), + }, + { + // Ed25519 + GenName: "Curve25519", + Oid: encoding.NewOID([]byte{0x2B, 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0F, 0x01}), + Curve: NewEd25519(), + }, + { + // Ed448 + GenName: "Curve448", + Oid: encoding.NewOID([]byte{0x2B, 0x65, 0x71}), + Curve: NewEd448(), + }, + { + // BrainpoolP256r1 + GenName: "BrainpoolP256", + Oid: encoding.NewOID([]byte{0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x07}), + Curve: NewGenericCurve(brainpool.P256r1()), + }, + { + // BrainpoolP384r1 + GenName: "BrainpoolP384", + Oid: encoding.NewOID([]byte{0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0B}), + Curve: NewGenericCurve(brainpool.P384r1()), + }, + { + // BrainpoolP512r1 + GenName: "BrainpoolP512", + Oid: encoding.NewOID([]byte{0x2B, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x0D}), + Curve: NewGenericCurve(brainpool.P512r1()), + }, +} + +func FindByCurve(curve Curve) *CurveInfo { + for _, curveInfo := range Curves { + if curveInfo.Curve.GetCurveName() == curve.GetCurveName() { + return &curveInfo + } + } + return nil +} + +func FindByOid(oid encoding.Field) *CurveInfo { + var rawBytes = oid.Bytes() + for _, curveInfo := range Curves { + if bytes.Equal(curveInfo.Oid.Bytes(), rawBytes) { + return &curveInfo + } + } + return nil +} + +func FindEdDSAByGenName(curveGenName string) EdDSACurve { + for _, curveInfo := range Curves { + if curveInfo.GenName == curveGenName { + curve, ok := curveInfo.Curve.(EdDSACurve) + if ok { + return curve + } + } + } + return nil +} + +func FindECDSAByGenName(curveGenName string) ECDSACurve { + for _, curveInfo := range Curves { + if curveInfo.GenName == curveGenName { + curve, ok := curveInfo.Curve.(ECDSACurve) + if ok { + return curve + } + } + } + return nil +} + +func FindECDHByGenName(curveGenName string) ECDHCurve { + for _, curveInfo := range Curves { + if curveInfo.GenName == curveGenName { + curve, ok := curveInfo.Curve.(ECDHCurve) + if ok { + return curve + } + } + } + return nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curves.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curves.go new file mode 100644 index 0000000000000..5ed9c93b3d606 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/curves.go @@ -0,0 +1,48 @@ +// Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. +package ecc + +import ( + "io" + "math/big" +) + +type Curve interface { + GetCurveName() string +} + +type ECDSACurve interface { + Curve + MarshalIntegerPoint(x, y *big.Int) []byte + UnmarshalIntegerPoint([]byte) (x, y *big.Int) + MarshalIntegerSecret(d *big.Int) []byte + UnmarshalIntegerSecret(d []byte) *big.Int + GenerateECDSA(rand io.Reader) (x, y, secret *big.Int, err error) + Sign(rand io.Reader, x, y, d *big.Int, hash []byte) (r, s *big.Int, err error) + Verify(x, y *big.Int, hash []byte, r, s *big.Int) bool + ValidateECDSA(x, y *big.Int, secret []byte) error +} + +type EdDSACurve interface { + Curve + MarshalBytePoint(x []byte) []byte + UnmarshalBytePoint([]byte) (x []byte) + MarshalByteSecret(d []byte) []byte + UnmarshalByteSecret(d []byte) []byte + MarshalSignature(sig []byte) (r, s []byte) + UnmarshalSignature(r, s []byte) (sig []byte) + GenerateEdDSA(rand io.Reader) (pub, priv []byte, err error) + Sign(publicKey, privateKey, message []byte) (sig []byte, err error) + Verify(publicKey, message, sig []byte) bool + ValidateEdDSA(publicKey, privateKey []byte) (err error) +} +type ECDHCurve interface { + Curve + MarshalBytePoint([]byte) (encoded []byte) + UnmarshalBytePoint(encoded []byte) []byte + MarshalByteSecret(d []byte) []byte + UnmarshalByteSecret(d []byte) []byte + GenerateECDH(rand io.Reader) (point []byte, secret []byte, err error) + Encaps(rand io.Reader, point []byte) (ephemeral, sharedSecret []byte, err error) + Decaps(ephemeral, secret []byte) (sharedSecret []byte, err error) + ValidateECDH(public []byte, secret []byte) error +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed25519.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed25519.go new file mode 100644 index 0000000000000..54a08a8a38f2e --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed25519.go @@ -0,0 +1,112 @@ +// Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. +package ecc + +import ( + "crypto/subtle" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + ed25519lib "github.com/cloudflare/circl/sign/ed25519" +) + +const ed25519Size = 32 + +type ed25519 struct{} + +func NewEd25519() *ed25519 { + return &ed25519{} +} + +func (c *ed25519) GetCurveName() string { + return "ed25519" +} + +// MarshalBytePoint encodes the public point from native format, adding the prefix. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.5 +func (c *ed25519) MarshalBytePoint(x []byte) []byte { + return append([]byte{0x40}, x...) +} + +// UnmarshalBytePoint decodes a point from prefixed format to native. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.5 +func (c *ed25519) UnmarshalBytePoint(point []byte) (x []byte) { + if len(point) != ed25519lib.PublicKeySize+1 { + return nil + } + + // Return unprefixed + return point[1:] +} + +// MarshalByteSecret encodes a scalar in native format. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.5 +func (c *ed25519) MarshalByteSecret(d []byte) []byte { + return d +} + +// UnmarshalByteSecret decodes a scalar in native format and re-adds the stripped leading zeroes +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.5 +func (c *ed25519) UnmarshalByteSecret(s []byte) (d []byte) { + if len(s) > ed25519lib.SeedSize { + return nil + } + + // Handle stripped leading zeroes + d = make([]byte, ed25519lib.SeedSize) + copy(d[ed25519lib.SeedSize-len(s):], s) + return +} + +// MarshalSignature splits a signature in R and S. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.2.3.3.1 +func (c *ed25519) MarshalSignature(sig []byte) (r, s []byte) { + return sig[:ed25519Size], sig[ed25519Size:] +} + +// UnmarshalSignature decodes R and S in the native format, re-adding the stripped leading zeroes +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.2.3.3.1 +func (c *ed25519) UnmarshalSignature(r, s []byte) (sig []byte) { + // Check size + if len(r) > 32 || len(s) > 32 { + return nil + } + + sig = make([]byte, ed25519lib.SignatureSize) + + // Handle stripped leading zeroes + copy(sig[ed25519Size-len(r):ed25519Size], r) + copy(sig[ed25519lib.SignatureSize-len(s):], s) + return sig +} + +func (c *ed25519) GenerateEdDSA(rand io.Reader) (pub, priv []byte, err error) { + pk, sk, err := ed25519lib.GenerateKey(rand) + + if err != nil { + return nil, nil, err + } + + return pk, sk[:ed25519lib.SeedSize], nil +} + +func getEd25519Sk(publicKey, privateKey []byte) ed25519lib.PrivateKey { + return append(privateKey, publicKey...) +} + +func (c *ed25519) Sign(publicKey, privateKey, message []byte) (sig []byte, err error) { + sig = ed25519lib.Sign(getEd25519Sk(publicKey, privateKey), message) + return sig, nil +} + +func (c *ed25519) Verify(publicKey, message, sig []byte) bool { + return ed25519lib.Verify(publicKey, message, sig) +} + +func (c *ed25519) ValidateEdDSA(publicKey, privateKey []byte) (err error) { + priv := getEd25519Sk(publicKey, privateKey) + expectedPriv := ed25519lib.NewKeyFromSeed(priv.Seed()) + if subtle.ConstantTimeCompare(priv, expectedPriv) == 0 { + return errors.KeyInvalidError("ecc: invalid ed25519 secret") + } + return nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed448.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed448.go new file mode 100644 index 0000000000000..18cd80434b67f --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/ed448.go @@ -0,0 +1,111 @@ +// Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. +package ecc + +import ( + "crypto/subtle" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + ed448lib "github.com/cloudflare/circl/sign/ed448" +) + +type ed448 struct{} + +func NewEd448() *ed448 { + return &ed448{} +} + +func (c *ed448) GetCurveName() string { + return "ed448" +} + +// MarshalBytePoint encodes the public point from native format, adding the prefix. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.5 +func (c *ed448) MarshalBytePoint(x []byte) []byte { + // Return prefixed + return append([]byte{0x40}, x...) +} + +// UnmarshalBytePoint decodes a point from prefixed format to native. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.5 +func (c *ed448) UnmarshalBytePoint(point []byte) (x []byte) { + if len(point) != ed448lib.PublicKeySize+1 { + return nil + } + + // Strip prefix + return point[1:] +} + +// MarshalByteSecret encoded a scalar from native format to prefixed. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.5 +func (c *ed448) MarshalByteSecret(d []byte) []byte { + // Return prefixed + return append([]byte{0x40}, d...) +} + +// UnmarshalByteSecret decodes a scalar from prefixed format to native. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.5 +func (c *ed448) UnmarshalByteSecret(s []byte) (d []byte) { + // Check prefixed size + if len(s) != ed448lib.SeedSize+1 { + return nil + } + + // Strip prefix + return s[1:] +} + +// MarshalSignature splits a signature in R and S, where R is in prefixed native format and +// S is an MPI with value zero. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.2.3.3.2 +func (c *ed448) MarshalSignature(sig []byte) (r, s []byte) { + return append([]byte{0x40}, sig...), []byte{} +} + +// UnmarshalSignature decodes R and S in the native format. Only R is used, in prefixed native format. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.2.3.3.2 +func (c *ed448) UnmarshalSignature(r, s []byte) (sig []byte) { + if len(r) != ed448lib.SignatureSize+1 { + return nil + } + + return r[1:] +} + +func (c *ed448) GenerateEdDSA(rand io.Reader) (pub, priv []byte, err error) { + pk, sk, err := ed448lib.GenerateKey(rand) + + if err != nil { + return nil, nil, err + } + + return pk, sk[:ed448lib.SeedSize], nil +} + +func getEd448Sk(publicKey, privateKey []byte) ed448lib.PrivateKey { + return append(privateKey, publicKey...) +} + +func (c *ed448) Sign(publicKey, privateKey, message []byte) (sig []byte, err error) { + // Ed448 is used with the empty string as a context string. + // See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-13.7 + sig = ed448lib.Sign(getEd448Sk(publicKey, privateKey), message, "") + + return sig, nil +} + +func (c *ed448) Verify(publicKey, message, sig []byte) bool { + // Ed448 is used with the empty string as a context string. + // See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-13.7 + return ed448lib.Verify(publicKey, message, sig, "") +} + +func (c *ed448) ValidateEdDSA(publicKey, privateKey []byte) (err error) { + priv := getEd448Sk(publicKey, privateKey) + expectedPriv := ed448lib.NewKeyFromSeed(priv.Seed()) + if subtle.ConstantTimeCompare(priv, expectedPriv) == 0 { + return errors.KeyInvalidError("ecc: invalid ed448 secret") + } + return nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/generic.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/generic.go new file mode 100644 index 0000000000000..e28d7c7106a33 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/generic.go @@ -0,0 +1,149 @@ +// Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. +package ecc + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "fmt" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "io" + "math/big" +) + +type genericCurve struct { + Curve elliptic.Curve +} + +func NewGenericCurve(c elliptic.Curve) *genericCurve { + return &genericCurve{ + Curve: c, + } +} + +func (c *genericCurve) GetCurveName() string { + return c.Curve.Params().Name +} + +func (c *genericCurve) MarshalBytePoint(point []byte) []byte { + return point +} + +func (c *genericCurve) UnmarshalBytePoint(point []byte) []byte { + return point +} + +func (c *genericCurve) MarshalIntegerPoint(x, y *big.Int) []byte { + return elliptic.Marshal(c.Curve, x, y) +} + +func (c *genericCurve) UnmarshalIntegerPoint(point []byte) (x, y *big.Int) { + return elliptic.Unmarshal(c.Curve, point) +} + +func (c *genericCurve) MarshalByteSecret(d []byte) []byte { + return d +} + +func (c *genericCurve) UnmarshalByteSecret(d []byte) []byte { + return d +} + +func (c *genericCurve) MarshalIntegerSecret(d *big.Int) []byte { + return d.Bytes() +} + +func (c *genericCurve) UnmarshalIntegerSecret(d []byte) *big.Int { + return new(big.Int).SetBytes(d) +} + +func (c *genericCurve) GenerateECDH(rand io.Reader) (point, secret []byte, err error) { + secret, x, y, err := elliptic.GenerateKey(c.Curve, rand) + if err != nil { + return nil, nil, err + } + + point = elliptic.Marshal(c.Curve, x, y) + return point, secret, nil +} + +func (c *genericCurve) GenerateECDSA(rand io.Reader) (x, y, secret *big.Int, err error) { + priv, err := ecdsa.GenerateKey(c.Curve, rand) + if err != nil { + return + } + + return priv.X, priv.Y, priv.D, nil +} + +func (c *genericCurve) Encaps(rand io.Reader, point []byte) (ephemeral, sharedSecret []byte, err error) { + xP, yP := elliptic.Unmarshal(c.Curve, point) + if xP == nil { + panic("invalid point") + } + + d, x, y, err := elliptic.GenerateKey(c.Curve, rand) + if err != nil { + return nil, nil, err + } + + vsG := elliptic.Marshal(c.Curve, x, y) + zbBig, _ := c.Curve.ScalarMult(xP, yP, d) + + byteLen := (c.Curve.Params().BitSize + 7) >> 3 + zb := make([]byte, byteLen) + zbBytes := zbBig.Bytes() + copy(zb[byteLen-len(zbBytes):], zbBytes) + + return vsG, zb, nil +} + +func (c *genericCurve) Decaps(ephemeral, secret []byte) (sharedSecret []byte, err error) { + x, y := elliptic.Unmarshal(c.Curve, ephemeral) + zbBig, _ := c.Curve.ScalarMult(x, y, secret) + byteLen := (c.Curve.Params().BitSize + 7) >> 3 + zb := make([]byte, byteLen) + zbBytes := zbBig.Bytes() + copy(zb[byteLen-len(zbBytes):], zbBytes) + + return zb, nil +} + +func (c *genericCurve) Sign(rand io.Reader, x, y, d *big.Int, hash []byte) (r, s *big.Int, err error) { + priv := &ecdsa.PrivateKey{D: d, PublicKey: ecdsa.PublicKey{X: x, Y: y, Curve: c.Curve}} + return ecdsa.Sign(rand, priv, hash) +} + +func (c *genericCurve) Verify(x, y *big.Int, hash []byte, r, s *big.Int) bool { + pub := &ecdsa.PublicKey{X: x, Y: y, Curve: c.Curve} + return ecdsa.Verify(pub, hash, r, s) +} + +func (c *genericCurve) validate(xP, yP *big.Int, secret []byte) error { + // the public point should not be at infinity (0,0) + zero := new(big.Int) + if xP.Cmp(zero) == 0 && yP.Cmp(zero) == 0 { + return errors.KeyInvalidError(fmt.Sprintf("ecc (%s): infinity point", c.Curve.Params().Name)) + } + + // re-derive the public point Q' = (X,Y) = dG + // to compare to declared Q in public key + expectedX, expectedY := c.Curve.ScalarBaseMult(secret) + if xP.Cmp(expectedX) != 0 || yP.Cmp(expectedY) != 0 { + return errors.KeyInvalidError(fmt.Sprintf("ecc (%s): invalid point", c.Curve.Params().Name)) + } + + return nil +} + +func (c *genericCurve) ValidateECDSA(xP, yP *big.Int, secret []byte) error { + return c.validate(xP, yP, secret) +} + +func (c *genericCurve) ValidateECDH(point []byte, secret []byte) error { + xP, yP := elliptic.Unmarshal(c.Curve, point) + if xP == nil { + return errors.KeyInvalidError(fmt.Sprintf("ecc (%s): invalid point", c.Curve.Params().Name)) + } + + return c.validate(xP, yP, secret) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/x448.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/x448.go new file mode 100644 index 0000000000000..ffdd51513b48a --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/ecc/x448.go @@ -0,0 +1,105 @@ +// Package ecc implements a generic interface for ECDH, ECDSA, and EdDSA. +package ecc + +import ( + "crypto/subtle" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + x448lib "github.com/cloudflare/circl/dh/x448" +) + +type x448 struct{} + +func NewX448() *x448 { + return &x448{} +} + +func (c *x448) GetCurveName() string { + return "x448" +} + +// MarshalBytePoint encodes the public point from native format, adding the prefix. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.6 +func (c *x448) MarshalBytePoint(point []byte) []byte { + return append([]byte{0x40}, point...) +} + +// UnmarshalBytePoint decodes a point from prefixed format to native. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.6 +func (c *x448) UnmarshalBytePoint(point []byte) []byte { + if len(point) != x448lib.Size+1 { + return nil + } + + return point[1:] +} + +// MarshalByteSecret encoded a scalar from native format to prefixed. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.6.1.2 +func (c *x448) MarshalByteSecret(d []byte) []byte { + return append([]byte{0x40}, d...) +} + +// UnmarshalByteSecret decodes a scalar from prefixed format to native. +// See https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh-06#section-5.5.5.6.1.2 +func (c *x448) UnmarshalByteSecret(d []byte) []byte { + if len(d) != x448lib.Size+1 { + return nil + } + + // Store without prefix + return d[1:] +} + +func (c *x448) generateKeyPairBytes(rand io.Reader) (sk, pk x448lib.Key, err error) { + if _, err = rand.Read(sk[:]); err != nil { + return + } + + x448lib.KeyGen(&pk, &sk) + return +} + +func (c *x448) GenerateECDH(rand io.Reader) (point []byte, secret []byte, err error) { + priv, pub, err := c.generateKeyPairBytes(rand) + if err != nil { + return + } + + return pub[:], priv[:], nil +} + +func (c *x448) Encaps(rand io.Reader, point []byte) (ephemeral, sharedSecret []byte, err error) { + var pk, ss x448lib.Key + seed, e, err := c.generateKeyPairBytes(rand) + + copy(pk[:], point) + x448lib.Shared(&ss, &seed, &pk) + + return e[:], ss[:], nil +} + +func (c *x448) Decaps(ephemeral, secret []byte) (sharedSecret []byte, err error) { + var ss, sk, e x448lib.Key + + copy(sk[:], secret) + copy(e[:], ephemeral) + x448lib.Shared(&ss, &sk, &e) + + return ss[:], nil +} + +func (c *x448) ValidateECDH(point []byte, secret []byte) error { + var sk, pk, expectedPk x448lib.Key + + copy(pk[:], point) + copy(sk[:], secret) + x448lib.KeyGen(&expectedPk, &sk) + + if subtle.ConstantTimeCompare(expectedPk[:], pk[:]) == 0 { + return errors.KeyInvalidError("ecc: invalid curve25519 public point") + } + + return nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/encoding.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/encoding.go new file mode 100644 index 0000000000000..6c921481b7b24 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/encoding.go @@ -0,0 +1,27 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package encoding implements openpgp packet field encodings as specified in +// RFC 4880 and 6637. +package encoding + +import "io" + +// Field is an encoded field of an openpgp packet. +type Field interface { + // Bytes returns the decoded data. + Bytes() []byte + + // BitLength is the size in bits of the decoded data. + BitLength() uint16 + + // EncodedBytes returns the encoded data. + EncodedBytes() []byte + + // EncodedLength is the size in bytes of the encoded data. + EncodedLength() uint16 + + // ReadFrom reads the next Field from r. + ReadFrom(r io.Reader) (int64, error) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/mpi.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/mpi.go new file mode 100644 index 0000000000000..02e5e695c38ce --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/mpi.go @@ -0,0 +1,91 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package encoding + +import ( + "io" + "math/big" + "math/bits" +) + +// An MPI is used to store the contents of a big integer, along with the bit +// length that was specified in the original input. This allows the MPI to be +// reserialized exactly. +type MPI struct { + bytes []byte + bitLength uint16 +} + +// NewMPI returns a MPI initialized with bytes. +func NewMPI(bytes []byte) *MPI { + for len(bytes) != 0 && bytes[0] == 0 { + bytes = bytes[1:] + } + if len(bytes) == 0 { + bitLength := uint16(0) + return &MPI{bytes, bitLength} + } + bitLength := 8*uint16(len(bytes)-1) + uint16(bits.Len8(bytes[0])) + return &MPI{bytes, bitLength} +} + +// Bytes returns the decoded data. +func (m *MPI) Bytes() []byte { + return m.bytes +} + +// BitLength is the size in bits of the decoded data. +func (m *MPI) BitLength() uint16 { + return m.bitLength +} + +// EncodedBytes returns the encoded data. +func (m *MPI) EncodedBytes() []byte { + return append([]byte{byte(m.bitLength >> 8), byte(m.bitLength)}, m.bytes...) +} + +// EncodedLength is the size in bytes of the encoded data. +func (m *MPI) EncodedLength() uint16 { + return uint16(2 + len(m.bytes)) +} + +// ReadFrom reads into m the next MPI from r. +func (m *MPI) ReadFrom(r io.Reader) (int64, error) { + var buf [2]byte + n, err := io.ReadFull(r, buf[0:]) + if err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return int64(n), err + } + + m.bitLength = uint16(buf[0])<<8 | uint16(buf[1]) + m.bytes = make([]byte, (int(m.bitLength)+7)/8) + + nn, err := io.ReadFull(r, m.bytes) + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + + // remove leading zero bytes from malformed GnuPG encoded MPIs: + // https://bugs.gnupg.org/gnupg/issue1853 + // for _, b := range m.bytes { + // if b != 0 { + // break + // } + // m.bytes = m.bytes[1:] + // m.bitLength -= 8 + // } + + return int64(n) + int64(nn), err +} + +// SetBig initializes m with the bits from n. +func (m *MPI) SetBig(n *big.Int) *MPI { + m.bytes = n.Bytes() + m.bitLength = uint16(n.BitLen()) + return m +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/oid.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/oid.go new file mode 100644 index 0000000000000..c9df9fe232203 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/internal/encoding/oid.go @@ -0,0 +1,88 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package encoding + +import ( + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" +) + +// OID is used to store a variable-length field with a one-octet size +// prefix. See https://tools.ietf.org/html/rfc6637#section-9. +type OID struct { + bytes []byte +} + +const ( + // maxOID is the maximum number of bytes in a OID. + maxOID = 254 + // reservedOIDLength1 and reservedOIDLength2 are OID lengths that the RFC + // specifies are reserved. + reservedOIDLength1 = 0 + reservedOIDLength2 = 0xff +) + +// NewOID returns a OID initialized with bytes. +func NewOID(bytes []byte) *OID { + switch len(bytes) { + case reservedOIDLength1, reservedOIDLength2: + panic("encoding: NewOID argument length is reserved") + default: + if len(bytes) > maxOID { + panic("encoding: NewOID argument too large") + } + } + + return &OID{ + bytes: bytes, + } +} + +// Bytes returns the decoded data. +func (o *OID) Bytes() []byte { + return o.bytes +} + +// BitLength is the size in bits of the decoded data. +func (o *OID) BitLength() uint16 { + return uint16(len(o.bytes) * 8) +} + +// EncodedBytes returns the encoded data. +func (o *OID) EncodedBytes() []byte { + return append([]byte{byte(len(o.bytes))}, o.bytes...) +} + +// EncodedLength is the size in bytes of the encoded data. +func (o *OID) EncodedLength() uint16 { + return uint16(1 + len(o.bytes)) +} + +// ReadFrom reads into b the next OID from r. +func (o *OID) ReadFrom(r io.Reader) (int64, error) { + var buf [1]byte + n, err := io.ReadFull(r, buf[:]) + if err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return int64(n), err + } + + switch buf[0] { + case reservedOIDLength1, reservedOIDLength2: + return int64(n), errors.UnsupportedError("reserved for future extensions") + } + + o.bytes = make([]byte, buf[0]) + + nn, err := io.ReadFull(r, o.bytes) + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + + return int64(n) + int64(nn), err +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/key_generation.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/key_generation.go new file mode 100644 index 0000000000000..0e71934cd90f5 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/key_generation.go @@ -0,0 +1,389 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "crypto" + "crypto/rand" + "crypto/rsa" + goerrors "errors" + "io" + "math/big" + "time" + + "github.com/ProtonMail/go-crypto/openpgp/ecdh" + "github.com/ProtonMail/go-crypto/openpgp/ecdsa" + "github.com/ProtonMail/go-crypto/openpgp/eddsa" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" + "github.com/ProtonMail/go-crypto/openpgp/internal/ecc" + "github.com/ProtonMail/go-crypto/openpgp/packet" +) + +// NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a +// single identity composed of the given full name, comment and email, any of +// which may be empty but must not contain any of "()<>\x00". +// If config is nil, sensible defaults will be used. +func NewEntity(name, comment, email string, config *packet.Config) (*Entity, error) { + creationTime := config.Now() + keyLifetimeSecs := config.KeyLifetime() + + // Generate a primary signing key + primaryPrivRaw, err := newSigner(config) + if err != nil { + return nil, err + } + primary := packet.NewSignerPrivateKey(creationTime, primaryPrivRaw) + if config != nil && config.V5Keys { + primary.UpgradeToV5() + } + + e := &Entity{ + PrimaryKey: &primary.PublicKey, + PrivateKey: primary, + Identities: make(map[string]*Identity), + Subkeys: []Subkey{}, + } + + err = e.addUserId(name, comment, email, config, creationTime, keyLifetimeSecs) + if err != nil { + return nil, err + } + + // NOTE: No key expiry here, but we will not return this subkey in EncryptionKey() + // if the primary/master key has expired. + err = e.addEncryptionSubkey(config, creationTime, 0) + if err != nil { + return nil, err + } + + return e, nil +} + +func (t *Entity) AddUserId(name, comment, email string, config *packet.Config) error { + creationTime := config.Now() + keyLifetimeSecs := config.KeyLifetime() + return t.addUserId(name, comment, email, config, creationTime, keyLifetimeSecs) +} + +func (t *Entity) addUserId(name, comment, email string, config *packet.Config, creationTime time.Time, keyLifetimeSecs uint32) error { + uid := packet.NewUserId(name, comment, email) + if uid == nil { + return errors.InvalidArgumentError("user id field contained invalid characters") + } + + if _, ok := t.Identities[uid.Id]; ok { + return errors.InvalidArgumentError("user id exist") + } + + primary := t.PrivateKey + + isPrimaryId := len(t.Identities) == 0 + + selfSignature := createSignaturePacket(&primary.PublicKey, packet.SigTypePositiveCert, config) + selfSignature.CreationTime = creationTime + selfSignature.KeyLifetimeSecs = &keyLifetimeSecs + selfSignature.IsPrimaryId = &isPrimaryId + selfSignature.FlagsValid = true + selfSignature.FlagSign = true + selfSignature.FlagCertify = true + selfSignature.SEIPDv1 = true // true by default, see 5.8 vs. 5.14 + selfSignature.SEIPDv2 = config.AEAD() != nil + + // Set the PreferredHash for the SelfSignature from the packet.Config. + // If it is not the must-implement algorithm from rfc4880bis, append that. + hash, ok := algorithm.HashToHashId(config.Hash()) + if !ok { + return errors.UnsupportedError("unsupported preferred hash function") + } + + selfSignature.PreferredHash = []uint8{hash} + if config.Hash() != crypto.SHA256 { + selfSignature.PreferredHash = append(selfSignature.PreferredHash, hashToHashId(crypto.SHA256)) + } + + // Likewise for DefaultCipher. + selfSignature.PreferredSymmetric = []uint8{uint8(config.Cipher())} + if config.Cipher() != packet.CipherAES128 { + selfSignature.PreferredSymmetric = append(selfSignature.PreferredSymmetric, uint8(packet.CipherAES128)) + } + + // We set CompressionNone as the preferred compression algorithm because + // of compression side channel attacks, then append the configured + // DefaultCompressionAlgo if any is set (to signal support for cases + // where the application knows that using compression is safe). + selfSignature.PreferredCompression = []uint8{uint8(packet.CompressionNone)} + if config.Compression() != packet.CompressionNone { + selfSignature.PreferredCompression = append(selfSignature.PreferredCompression, uint8(config.Compression())) + } + + // And for DefaultMode. + modes := []uint8{uint8(config.AEAD().Mode())} + if config.AEAD().Mode() != packet.AEADModeOCB { + modes = append(modes, uint8(packet.AEADModeOCB)) + } + + // For preferred (AES256, GCM), we'll generate (AES256, GCM), (AES256, OCB), (AES128, GCM), (AES128, OCB) + for _, cipher := range selfSignature.PreferredSymmetric { + for _, mode := range modes { + selfSignature.PreferredCipherSuites = append(selfSignature.PreferredCipherSuites, [2]uint8{cipher, mode}) + } + } + + // User ID binding signature + err := selfSignature.SignUserId(uid.Id, &primary.PublicKey, primary, config) + if err != nil { + return err + } + t.Identities[uid.Id] = &Identity{ + Name: uid.Id, + UserId: uid, + SelfSignature: selfSignature, + Signatures: []*packet.Signature{selfSignature}, + } + return nil +} + +// AddSigningSubkey adds a signing keypair as a subkey to the Entity. +// If config is nil, sensible defaults will be used. +func (e *Entity) AddSigningSubkey(config *packet.Config) error { + creationTime := config.Now() + keyLifetimeSecs := config.KeyLifetime() + + subPrivRaw, err := newSigner(config) + if err != nil { + return err + } + sub := packet.NewSignerPrivateKey(creationTime, subPrivRaw) + sub.IsSubkey = true + if config != nil && config.V5Keys { + sub.UpgradeToV5() + } + + subkey := Subkey{ + PublicKey: &sub.PublicKey, + PrivateKey: sub, + } + subkey.Sig = createSignaturePacket(e.PrimaryKey, packet.SigTypeSubkeyBinding, config) + subkey.Sig.CreationTime = creationTime + subkey.Sig.KeyLifetimeSecs = &keyLifetimeSecs + subkey.Sig.FlagsValid = true + subkey.Sig.FlagSign = true + subkey.Sig.EmbeddedSignature = createSignaturePacket(subkey.PublicKey, packet.SigTypePrimaryKeyBinding, config) + subkey.Sig.EmbeddedSignature.CreationTime = creationTime + + err = subkey.Sig.EmbeddedSignature.CrossSignKey(subkey.PublicKey, e.PrimaryKey, subkey.PrivateKey, config) + if err != nil { + return err + } + + err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config) + if err != nil { + return err + } + + e.Subkeys = append(e.Subkeys, subkey) + return nil +} + +// AddEncryptionSubkey adds an encryption keypair as a subkey to the Entity. +// If config is nil, sensible defaults will be used. +func (e *Entity) AddEncryptionSubkey(config *packet.Config) error { + creationTime := config.Now() + keyLifetimeSecs := config.KeyLifetime() + return e.addEncryptionSubkey(config, creationTime, keyLifetimeSecs) +} + +func (e *Entity) addEncryptionSubkey(config *packet.Config, creationTime time.Time, keyLifetimeSecs uint32) error { + subPrivRaw, err := newDecrypter(config) + if err != nil { + return err + } + sub := packet.NewDecrypterPrivateKey(creationTime, subPrivRaw) + sub.IsSubkey = true + if config != nil && config.V5Keys { + sub.UpgradeToV5() + } + + subkey := Subkey{ + PublicKey: &sub.PublicKey, + PrivateKey: sub, + } + subkey.Sig = createSignaturePacket(e.PrimaryKey, packet.SigTypeSubkeyBinding, config) + subkey.Sig.CreationTime = creationTime + subkey.Sig.KeyLifetimeSecs = &keyLifetimeSecs + subkey.Sig.FlagsValid = true + subkey.Sig.FlagEncryptStorage = true + subkey.Sig.FlagEncryptCommunications = true + + err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config) + if err != nil { + return err + } + + e.Subkeys = append(e.Subkeys, subkey) + return nil +} + +// Generates a signing key +func newSigner(config *packet.Config) (signer interface{}, err error) { + switch config.PublicKeyAlgorithm() { + case packet.PubKeyAlgoRSA: + bits := config.RSAModulusBits() + if bits < 1024 { + return nil, errors.InvalidArgumentError("bits must be >= 1024") + } + if config != nil && len(config.RSAPrimes) >= 2 { + primes := config.RSAPrimes[0:2] + config.RSAPrimes = config.RSAPrimes[2:] + return generateRSAKeyWithPrimes(config.Random(), 2, bits, primes) + } + return rsa.GenerateKey(config.Random(), bits) + case packet.PubKeyAlgoEdDSA: + curve := ecc.FindEdDSAByGenName(string(config.CurveName())) + if curve == nil { + return nil, errors.InvalidArgumentError("unsupported curve") + } + + priv, err := eddsa.GenerateKey(config.Random(), curve) + if err != nil { + return nil, err + } + return priv, nil + case packet.PubKeyAlgoECDSA: + curve := ecc.FindECDSAByGenName(string(config.CurveName())) + if curve == nil { + return nil, errors.InvalidArgumentError("unsupported curve") + } + + priv, err := ecdsa.GenerateKey(config.Random(), curve) + if err != nil { + return nil, err + } + return priv, nil + default: + return nil, errors.InvalidArgumentError("unsupported public key algorithm") + } +} + +// Generates an encryption/decryption key +func newDecrypter(config *packet.Config) (decrypter interface{}, err error) { + switch config.PublicKeyAlgorithm() { + case packet.PubKeyAlgoRSA: + bits := config.RSAModulusBits() + if bits < 1024 { + return nil, errors.InvalidArgumentError("bits must be >= 1024") + } + if config != nil && len(config.RSAPrimes) >= 2 { + primes := config.RSAPrimes[0:2] + config.RSAPrimes = config.RSAPrimes[2:] + return generateRSAKeyWithPrimes(config.Random(), 2, bits, primes) + } + return rsa.GenerateKey(config.Random(), bits) + case packet.PubKeyAlgoEdDSA, packet.PubKeyAlgoECDSA: + fallthrough // When passing EdDSA or ECDSA, we generate an ECDH subkey + case packet.PubKeyAlgoECDH: + var kdf = ecdh.KDF{ + Hash: algorithm.SHA512, + Cipher: algorithm.AES256, + } + curve := ecc.FindECDHByGenName(string(config.CurveName())) + if curve == nil { + return nil, errors.InvalidArgumentError("unsupported curve") + } + return ecdh.GenerateKey(config.Random(), curve, kdf) + default: + return nil, errors.InvalidArgumentError("unsupported public key algorithm") + } +} + +var bigOne = big.NewInt(1) + +// generateRSAKeyWithPrimes generates a multi-prime RSA keypair of the +// given bit size, using the given random source and prepopulated primes. +func generateRSAKeyWithPrimes(random io.Reader, nprimes int, bits int, prepopulatedPrimes []*big.Int) (*rsa.PrivateKey, error) { + priv := new(rsa.PrivateKey) + priv.E = 65537 + + if nprimes < 2 { + return nil, goerrors.New("generateRSAKeyWithPrimes: nprimes must be >= 2") + } + + if bits < 1024 { + return nil, goerrors.New("generateRSAKeyWithPrimes: bits must be >= 1024") + } + + primes := make([]*big.Int, nprimes) + +NextSetOfPrimes: + for { + todo := bits + // crypto/rand should set the top two bits in each prime. + // Thus each prime has the form + // p_i = 2^bitlen(p_i) × 0.11... (in base 2). + // And the product is: + // P = 2^todo × α + // where α is the product of nprimes numbers of the form 0.11... + // + // If α < 1/2 (which can happen for nprimes > 2), we need to + // shift todo to compensate for lost bits: the mean value of 0.11... + // is 7/8, so todo + shift - nprimes * log2(7/8) ~= bits - 1/2 + // will give good results. + if nprimes >= 7 { + todo += (nprimes - 2) / 5 + } + for i := 0; i < nprimes; i++ { + var err error + if len(prepopulatedPrimes) == 0 { + primes[i], err = rand.Prime(random, todo/(nprimes-i)) + if err != nil { + return nil, err + } + } else { + primes[i] = prepopulatedPrimes[0] + prepopulatedPrimes = prepopulatedPrimes[1:] + } + + todo -= primes[i].BitLen() + } + + // Make sure that primes is pairwise unequal. + for i, prime := range primes { + for j := 0; j < i; j++ { + if prime.Cmp(primes[j]) == 0 { + continue NextSetOfPrimes + } + } + } + + n := new(big.Int).Set(bigOne) + totient := new(big.Int).Set(bigOne) + pminus1 := new(big.Int) + for _, prime := range primes { + n.Mul(n, prime) + pminus1.Sub(prime, bigOne) + totient.Mul(totient, pminus1) + } + if n.BitLen() != bits { + // This should never happen for nprimes == 2 because + // crypto/rand should set the top two bits in each prime. + // For nprimes > 2 we hope it does not happen often. + continue NextSetOfPrimes + } + + priv.D = new(big.Int) + e := big.NewInt(int64(priv.E)) + ok := priv.D.ModInverse(e, totient) + + if ok != nil { + priv.Primes = primes + priv.N = n + break + } + } + + priv.Precompute() + return priv, nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/keys.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/keys.go new file mode 100644 index 0000000000000..2d7b0cf373722 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/keys.go @@ -0,0 +1,842 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + goerrors "errors" + "io" + "time" + + "github.com/ProtonMail/go-crypto/openpgp/armor" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/packet" +) + +// PublicKeyType is the armor type for a PGP public key. +var PublicKeyType = "PGP PUBLIC KEY BLOCK" + +// PrivateKeyType is the armor type for a PGP private key. +var PrivateKeyType = "PGP PRIVATE KEY BLOCK" + +// An Entity represents the components of an OpenPGP key: a primary public key +// (which must be a signing key), one or more identities claimed by that key, +// and zero or more subkeys, which may be encryption keys. +type Entity struct { + PrimaryKey *packet.PublicKey + PrivateKey *packet.PrivateKey + Identities map[string]*Identity // indexed by Identity.Name + Revocations []*packet.Signature + Subkeys []Subkey +} + +// An Identity represents an identity claimed by an Entity and zero or more +// assertions by other entities about that claim. +type Identity struct { + Name string // by convention, has the form "Full Name (comment) " + UserId *packet.UserId + SelfSignature *packet.Signature + Revocations []*packet.Signature + Signatures []*packet.Signature // all (potentially unverified) self-signatures, revocations, and third-party signatures +} + +// A Subkey is an additional public key in an Entity. Subkeys can be used for +// encryption. +type Subkey struct { + PublicKey *packet.PublicKey + PrivateKey *packet.PrivateKey + Sig *packet.Signature + Revocations []*packet.Signature +} + +// A Key identifies a specific public key in an Entity. This is either the +// Entity's primary key or a subkey. +type Key struct { + Entity *Entity + PublicKey *packet.PublicKey + PrivateKey *packet.PrivateKey + SelfSignature *packet.Signature + Revocations []*packet.Signature +} + +// A KeyRing provides access to public and private keys. +type KeyRing interface { + // KeysById returns the set of keys that have the given key id. + KeysById(id uint64) []Key + // KeysByIdAndUsage returns the set of keys with the given id + // that also meet the key usage given by requiredUsage. + // The requiredUsage is expressed as the bitwise-OR of + // packet.KeyFlag* values. + KeysByIdUsage(id uint64, requiredUsage byte) []Key + // DecryptionKeys returns all private keys that are valid for + // decryption. + DecryptionKeys() []Key +} + +// PrimaryIdentity returns an Identity, preferring non-revoked identities, +// identities marked as primary, or the latest-created identity, in that order. +func (e *Entity) PrimaryIdentity() *Identity { + var primaryIdentity *Identity + for _, ident := range e.Identities { + if shouldPreferIdentity(primaryIdentity, ident) { + primaryIdentity = ident + } + } + return primaryIdentity +} + +func shouldPreferIdentity(existingId, potentialNewId *Identity) bool { + if existingId == nil { + return true + } + + if len(existingId.Revocations) > len(potentialNewId.Revocations) { + return true + } + + if len(existingId.Revocations) < len(potentialNewId.Revocations) { + return false + } + + if existingId.SelfSignature == nil { + return true + } + + if existingId.SelfSignature.IsPrimaryId != nil && *existingId.SelfSignature.IsPrimaryId && + !(potentialNewId.SelfSignature.IsPrimaryId != nil && *potentialNewId.SelfSignature.IsPrimaryId) { + return false + } + + if !(existingId.SelfSignature.IsPrimaryId != nil && *existingId.SelfSignature.IsPrimaryId) && + potentialNewId.SelfSignature.IsPrimaryId != nil && *potentialNewId.SelfSignature.IsPrimaryId { + return true + } + + return potentialNewId.SelfSignature.CreationTime.After(existingId.SelfSignature.CreationTime) +} + +// EncryptionKey returns the best candidate Key for encrypting a message to the +// given Entity. +func (e *Entity) EncryptionKey(now time.Time) (Key, bool) { + // Fail to find any encryption key if the... + i := e.PrimaryIdentity() + if e.PrimaryKey.KeyExpired(i.SelfSignature, now) || // primary key has expired + i.SelfSignature == nil || // user ID has no self-signature + i.SelfSignature.SigExpired(now) || // user ID self-signature has expired + e.Revoked(now) || // primary key has been revoked + i.Revoked(now) { // user ID has been revoked + return Key{}, false + } + + // Iterate the keys to find the newest, unexpired one + candidateSubkey := -1 + var maxTime time.Time + for i, subkey := range e.Subkeys { + if subkey.Sig.FlagsValid && + subkey.Sig.FlagEncryptCommunications && + subkey.PublicKey.PubKeyAlgo.CanEncrypt() && + !subkey.PublicKey.KeyExpired(subkey.Sig, now) && + !subkey.Sig.SigExpired(now) && + !subkey.Revoked(now) && + (maxTime.IsZero() || subkey.Sig.CreationTime.After(maxTime)) { + candidateSubkey = i + maxTime = subkey.Sig.CreationTime + } + } + + if candidateSubkey != -1 { + subkey := e.Subkeys[candidateSubkey] + return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig, subkey.Revocations}, true + } + + // If we don't have any subkeys for encryption and the primary key + // is marked as OK to encrypt with, then we can use it. + if i.SelfSignature.FlagsValid && i.SelfSignature.FlagEncryptCommunications && + e.PrimaryKey.PubKeyAlgo.CanEncrypt() { + return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature, e.Revocations}, true + } + + return Key{}, false +} + +// CertificationKey return the best candidate Key for certifying a key with this +// Entity. +func (e *Entity) CertificationKey(now time.Time) (Key, bool) { + return e.CertificationKeyById(now, 0) +} + +// CertificationKeyById return the Key for key certification with this +// Entity and keyID. +func (e *Entity) CertificationKeyById(now time.Time, id uint64) (Key, bool) { + return e.signingKeyByIdUsage(now, id, packet.KeyFlagCertify) +} + +// SigningKey return the best candidate Key for signing a message with this +// Entity. +func (e *Entity) SigningKey(now time.Time) (Key, bool) { + return e.SigningKeyById(now, 0) +} + +// SigningKeyById return the Key for signing a message with this +// Entity and keyID. +func (e *Entity) SigningKeyById(now time.Time, id uint64) (Key, bool) { + return e.signingKeyByIdUsage(now, id, packet.KeyFlagSign) +} + +func (e *Entity) signingKeyByIdUsage(now time.Time, id uint64, flags int) (Key, bool) { + // Fail to find any signing key if the... + i := e.PrimaryIdentity() + if e.PrimaryKey.KeyExpired(i.SelfSignature, now) || // primary key has expired + i.SelfSignature == nil || // user ID has no self-signature + i.SelfSignature.SigExpired(now) || // user ID self-signature has expired + e.Revoked(now) || // primary key has been revoked + i.Revoked(now) { // user ID has been revoked + return Key{}, false + } + + // Iterate the keys to find the newest, unexpired one + candidateSubkey := -1 + var maxTime time.Time + for idx, subkey := range e.Subkeys { + if subkey.Sig.FlagsValid && + (flags&packet.KeyFlagCertify == 0 || subkey.Sig.FlagCertify) && + (flags&packet.KeyFlagSign == 0 || subkey.Sig.FlagSign) && + subkey.PublicKey.PubKeyAlgo.CanSign() && + !subkey.PublicKey.KeyExpired(subkey.Sig, now) && + !subkey.Sig.SigExpired(now) && + !subkey.Revoked(now) && + (maxTime.IsZero() || subkey.Sig.CreationTime.After(maxTime)) && + (id == 0 || subkey.PublicKey.KeyId == id) { + candidateSubkey = idx + maxTime = subkey.Sig.CreationTime + } + } + + if candidateSubkey != -1 { + subkey := e.Subkeys[candidateSubkey] + return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig, subkey.Revocations}, true + } + + // If we don't have any subkeys for signing and the primary key + // is marked as OK to sign with, then we can use it. + if i.SelfSignature.FlagsValid && + (flags&packet.KeyFlagCertify == 0 || i.SelfSignature.FlagCertify) && + (flags&packet.KeyFlagSign == 0 || i.SelfSignature.FlagSign) && + e.PrimaryKey.PubKeyAlgo.CanSign() && + (id == 0 || e.PrimaryKey.KeyId == id) { + return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature, e.Revocations}, true + } + + // No keys with a valid Signing Flag or no keys matched the id passed in + return Key{}, false +} + +func revoked(revocations []*packet.Signature, now time.Time) bool { + for _, revocation := range revocations { + if revocation.RevocationReason != nil && *revocation.RevocationReason == packet.KeyCompromised { + // If the key is compromised, the key is considered revoked even before the revocation date. + return true + } + if !revocation.SigExpired(now) { + return true + } + } + return false +} + +// Revoked returns whether the entity has any direct key revocation signatures. +// Note that third-party revocation signatures are not supported. +// Note also that Identity and Subkey revocation should be checked separately. +func (e *Entity) Revoked(now time.Time) bool { + return revoked(e.Revocations, now) +} + +// EncryptPrivateKeys encrypts all non-encrypted keys in the entity with the same key +// derived from the provided passphrase. Public keys and dummy keys are ignored, +// and don't cause an error to be returned. +func (e *Entity) EncryptPrivateKeys(passphrase []byte, config *packet.Config) error { + var keysToEncrypt []*packet.PrivateKey + // Add entity private key to encrypt. + if e.PrivateKey != nil && !e.PrivateKey.Dummy() && !e.PrivateKey.Encrypted { + keysToEncrypt = append(keysToEncrypt, e.PrivateKey) + } + + // Add subkeys to encrypt. + for _, sub := range e.Subkeys { + if sub.PrivateKey != nil && !sub.PrivateKey.Dummy() && !sub.PrivateKey.Encrypted { + keysToEncrypt = append(keysToEncrypt, sub.PrivateKey) + } + } + return packet.EncryptPrivateKeys(keysToEncrypt, passphrase, config) +} + +// DecryptPrivateKeys decrypts all encrypted keys in the entitiy with the given passphrase. +// Avoids recomputation of similar s2k key derivations. Public keys and dummy keys are ignored, +// and don't cause an error to be returned. +func (e *Entity) DecryptPrivateKeys(passphrase []byte) error { + var keysToDecrypt []*packet.PrivateKey + // Add entity private key to decrypt. + if e.PrivateKey != nil && !e.PrivateKey.Dummy() && e.PrivateKey.Encrypted { + keysToDecrypt = append(keysToDecrypt, e.PrivateKey) + } + + // Add subkeys to decrypt. + for _, sub := range e.Subkeys { + if sub.PrivateKey != nil && !sub.PrivateKey.Dummy() && sub.PrivateKey.Encrypted { + keysToDecrypt = append(keysToDecrypt, sub.PrivateKey) + } + } + return packet.DecryptPrivateKeys(keysToDecrypt, passphrase) +} + +// Revoked returns whether the identity has been revoked by a self-signature. +// Note that third-party revocation signatures are not supported. +func (i *Identity) Revoked(now time.Time) bool { + return revoked(i.Revocations, now) +} + +// Revoked returns whether the subkey has been revoked by a self-signature. +// Note that third-party revocation signatures are not supported. +func (s *Subkey) Revoked(now time.Time) bool { + return revoked(s.Revocations, now) +} + +// Revoked returns whether the key or subkey has been revoked by a self-signature. +// Note that third-party revocation signatures are not supported. +// Note also that Identity revocation should be checked separately. +// Normally, it's not necessary to call this function, except on keys returned by +// KeysById or KeysByIdUsage. +func (key *Key) Revoked(now time.Time) bool { + return revoked(key.Revocations, now) +} + +// An EntityList contains one or more Entities. +type EntityList []*Entity + +// KeysById returns the set of keys that have the given key id. +func (el EntityList) KeysById(id uint64) (keys []Key) { + for _, e := range el { + if e.PrimaryKey.KeyId == id { + ident := e.PrimaryIdentity() + selfSig := ident.SelfSignature + keys = append(keys, Key{e, e.PrimaryKey, e.PrivateKey, selfSig, e.Revocations}) + } + + for _, subKey := range e.Subkeys { + if subKey.PublicKey.KeyId == id { + keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig, subKey.Revocations}) + } + } + } + return +} + +// KeysByIdAndUsage returns the set of keys with the given id that also meet +// the key usage given by requiredUsage. The requiredUsage is expressed as +// the bitwise-OR of packet.KeyFlag* values. +func (el EntityList) KeysByIdUsage(id uint64, requiredUsage byte) (keys []Key) { + for _, key := range el.KeysById(id) { + if requiredUsage != 0 { + if key.SelfSignature == nil || !key.SelfSignature.FlagsValid { + continue + } + + var usage byte + if key.SelfSignature.FlagCertify { + usage |= packet.KeyFlagCertify + } + if key.SelfSignature.FlagSign { + usage |= packet.KeyFlagSign + } + if key.SelfSignature.FlagEncryptCommunications { + usage |= packet.KeyFlagEncryptCommunications + } + if key.SelfSignature.FlagEncryptStorage { + usage |= packet.KeyFlagEncryptStorage + } + if usage&requiredUsage != requiredUsage { + continue + } + } + + keys = append(keys, key) + } + return +} + +// DecryptionKeys returns all private keys that are valid for decryption. +func (el EntityList) DecryptionKeys() (keys []Key) { + for _, e := range el { + for _, subKey := range e.Subkeys { + if subKey.PrivateKey != nil && subKey.Sig.FlagsValid && (subKey.Sig.FlagEncryptStorage || subKey.Sig.FlagEncryptCommunications) { + keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig, subKey.Revocations}) + } + } + } + return +} + +// ReadArmoredKeyRing reads one or more public/private keys from an armor keyring file. +func ReadArmoredKeyRing(r io.Reader) (EntityList, error) { + block, err := armor.Decode(r) + if err == io.EOF { + return nil, errors.InvalidArgumentError("no armored data found") + } + if err != nil { + return nil, err + } + if block.Type != PublicKeyType && block.Type != PrivateKeyType { + return nil, errors.InvalidArgumentError("expected public or private key block, got: " + block.Type) + } + + return ReadKeyRing(block.Body) +} + +// ReadKeyRing reads one or more public/private keys. Unsupported keys are +// ignored as long as at least a single valid key is found. +func ReadKeyRing(r io.Reader) (el EntityList, err error) { + packets := packet.NewReader(r) + var lastUnsupportedError error + + for { + var e *Entity + e, err = ReadEntity(packets) + if err != nil { + // TODO: warn about skipped unsupported/unreadable keys + if _, ok := err.(errors.UnsupportedError); ok { + lastUnsupportedError = err + err = readToNextPublicKey(packets) + } else if _, ok := err.(errors.StructuralError); ok { + // Skip unreadable, badly-formatted keys + lastUnsupportedError = err + err = readToNextPublicKey(packets) + } + if err == io.EOF { + err = nil + break + } + if err != nil { + el = nil + break + } + } else { + el = append(el, e) + } + } + + if len(el) == 0 && err == nil { + err = lastUnsupportedError + } + return +} + +// readToNextPublicKey reads packets until the start of the entity and leaves +// the first packet of the new entity in the Reader. +func readToNextPublicKey(packets *packet.Reader) (err error) { + var p packet.Packet + for { + p, err = packets.Next() + if err == io.EOF { + return + } else if err != nil { + if _, ok := err.(errors.UnsupportedError); ok { + err = nil + continue + } + return + } + + if pk, ok := p.(*packet.PublicKey); ok && !pk.IsSubkey { + packets.Unread(p) + return + } + } +} + +// ReadEntity reads an entity (public key, identities, subkeys etc) from the +// given Reader. +func ReadEntity(packets *packet.Reader) (*Entity, error) { + e := new(Entity) + e.Identities = make(map[string]*Identity) + + p, err := packets.Next() + if err != nil { + return nil, err + } + + var ok bool + if e.PrimaryKey, ok = p.(*packet.PublicKey); !ok { + if e.PrivateKey, ok = p.(*packet.PrivateKey); !ok { + packets.Unread(p) + return nil, errors.StructuralError("first packet was not a public/private key") + } + e.PrimaryKey = &e.PrivateKey.PublicKey + } + + if !e.PrimaryKey.PubKeyAlgo.CanSign() { + return nil, errors.StructuralError("primary key cannot be used for signatures") + } + + var revocations []*packet.Signature +EachPacket: + for { + p, err := packets.Next() + if err == io.EOF { + break + } else if err != nil { + return nil, err + } + + switch pkt := p.(type) { + case *packet.UserId: + if err := addUserID(e, packets, pkt); err != nil { + return nil, err + } + case *packet.Signature: + if pkt.SigType == packet.SigTypeKeyRevocation { + revocations = append(revocations, pkt) + } else if pkt.SigType == packet.SigTypeDirectSignature { + // TODO: RFC4880 5.2.1 permits signatures + // directly on keys (eg. to bind additional + // revocation keys). + } + // Else, ignoring the signature as it does not follow anything + // we would know to attach it to. + case *packet.PrivateKey: + if !pkt.IsSubkey { + packets.Unread(p) + break EachPacket + } + err = addSubkey(e, packets, &pkt.PublicKey, pkt) + if err != nil { + return nil, err + } + case *packet.PublicKey: + if !pkt.IsSubkey { + packets.Unread(p) + break EachPacket + } + err = addSubkey(e, packets, pkt, nil) + if err != nil { + return nil, err + } + default: + // we ignore unknown packets + } + } + + if len(e.Identities) == 0 { + return nil, errors.StructuralError("entity without any identities") + } + + for _, revocation := range revocations { + err = e.PrimaryKey.VerifyRevocationSignature(revocation) + if err == nil { + e.Revocations = append(e.Revocations, revocation) + } else { + // TODO: RFC 4880 5.2.3.15 defines revocation keys. + return nil, errors.StructuralError("revocation signature signed by alternate key") + } + } + + return e, nil +} + +func addUserID(e *Entity, packets *packet.Reader, pkt *packet.UserId) error { + // Make a new Identity object, that we might wind up throwing away. + // We'll only add it if we get a valid self-signature over this + // userID. + identity := new(Identity) + identity.Name = pkt.Id + identity.UserId = pkt + + for { + p, err := packets.Next() + if err == io.EOF { + break + } else if err != nil { + return err + } + + sig, ok := p.(*packet.Signature) + if !ok { + packets.Unread(p) + break + } + + if sig.SigType != packet.SigTypeGenericCert && + sig.SigType != packet.SigTypePersonaCert && + sig.SigType != packet.SigTypeCasualCert && + sig.SigType != packet.SigTypePositiveCert && + sig.SigType != packet.SigTypeCertificationRevocation { + return errors.StructuralError("user ID signature with wrong type") + } + + if sig.CheckKeyIdOrFingerprint(e.PrimaryKey) { + if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil { + return errors.StructuralError("user ID self-signature invalid: " + err.Error()) + } + if sig.SigType == packet.SigTypeCertificationRevocation { + identity.Revocations = append(identity.Revocations, sig) + } else if identity.SelfSignature == nil || sig.CreationTime.After(identity.SelfSignature.CreationTime) { + identity.SelfSignature = sig + } + identity.Signatures = append(identity.Signatures, sig) + e.Identities[pkt.Id] = identity + } else { + identity.Signatures = append(identity.Signatures, sig) + } + } + + return nil +} + +func addSubkey(e *Entity, packets *packet.Reader, pub *packet.PublicKey, priv *packet.PrivateKey) error { + var subKey Subkey + subKey.PublicKey = pub + subKey.PrivateKey = priv + + for { + p, err := packets.Next() + if err == io.EOF { + break + } else if err != nil { + return errors.StructuralError("subkey signature invalid: " + err.Error()) + } + + sig, ok := p.(*packet.Signature) + if !ok { + packets.Unread(p) + break + } + + if sig.SigType != packet.SigTypeSubkeyBinding && sig.SigType != packet.SigTypeSubkeyRevocation { + return errors.StructuralError("subkey signature with wrong type") + } + + if err := e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, sig); err != nil { + return errors.StructuralError("subkey signature invalid: " + err.Error()) + } + + switch sig.SigType { + case packet.SigTypeSubkeyRevocation: + subKey.Revocations = append(subKey.Revocations, sig) + case packet.SigTypeSubkeyBinding: + if subKey.Sig == nil || sig.CreationTime.After(subKey.Sig.CreationTime) { + subKey.Sig = sig + } + } + } + + if subKey.Sig == nil { + return errors.StructuralError("subkey packet not followed by signature") + } + + e.Subkeys = append(e.Subkeys, subKey) + + return nil +} + +// SerializePrivate serializes an Entity, including private key material, but +// excluding signatures from other entities, to the given Writer. +// Identities and subkeys are re-signed in case they changed since NewEntry. +// If config is nil, sensible defaults will be used. +func (e *Entity) SerializePrivate(w io.Writer, config *packet.Config) (err error) { + if e.PrivateKey.Dummy() { + return errors.ErrDummyPrivateKey("dummy private key cannot re-sign identities") + } + return e.serializePrivate(w, config, true) +} + +// SerializePrivateWithoutSigning serializes an Entity, including private key +// material, but excluding signatures from other entities, to the given Writer. +// Self-signatures of identities and subkeys are not re-signed. This is useful +// when serializing GNU dummy keys, among other things. +// If config is nil, sensible defaults will be used. +func (e *Entity) SerializePrivateWithoutSigning(w io.Writer, config *packet.Config) (err error) { + return e.serializePrivate(w, config, false) +} + +func (e *Entity) serializePrivate(w io.Writer, config *packet.Config, reSign bool) (err error) { + if e.PrivateKey == nil { + return goerrors.New("openpgp: private key is missing") + } + err = e.PrivateKey.Serialize(w) + if err != nil { + return + } + for _, revocation := range e.Revocations { + err := revocation.Serialize(w) + if err != nil { + return err + } + } + for _, ident := range e.Identities { + err = ident.UserId.Serialize(w) + if err != nil { + return + } + if reSign { + if ident.SelfSignature == nil { + return goerrors.New("openpgp: can't re-sign identity without valid self-signature") + } + err = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey, config) + if err != nil { + return + } + } + for _, sig := range ident.Signatures { + err = sig.Serialize(w) + if err != nil { + return err + } + } + } + for _, subkey := range e.Subkeys { + err = subkey.PrivateKey.Serialize(w) + if err != nil { + return + } + if reSign { + err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config) + if err != nil { + return + } + if subkey.Sig.EmbeddedSignature != nil { + err = subkey.Sig.EmbeddedSignature.CrossSignKey(subkey.PublicKey, e.PrimaryKey, + subkey.PrivateKey, config) + if err != nil { + return + } + } + } + for _, revocation := range subkey.Revocations { + err := revocation.Serialize(w) + if err != nil { + return err + } + } + err = subkey.Sig.Serialize(w) + if err != nil { + return + } + } + return nil +} + +// Serialize writes the public part of the given Entity to w, including +// signatures from other entities. No private key material will be output. +func (e *Entity) Serialize(w io.Writer) error { + err := e.PrimaryKey.Serialize(w) + if err != nil { + return err + } + for _, revocation := range e.Revocations { + err := revocation.Serialize(w) + if err != nil { + return err + } + } + for _, ident := range e.Identities { + err = ident.UserId.Serialize(w) + if err != nil { + return err + } + for _, sig := range ident.Signatures { + err = sig.Serialize(w) + if err != nil { + return err + } + } + } + for _, subkey := range e.Subkeys { + err = subkey.PublicKey.Serialize(w) + if err != nil { + return err + } + for _, revocation := range subkey.Revocations { + err := revocation.Serialize(w) + if err != nil { + return err + } + } + err = subkey.Sig.Serialize(w) + if err != nil { + return err + } + } + return nil +} + +// SignIdentity adds a signature to e, from signer, attesting that identity is +// associated with e. The provided identity must already be an element of +// e.Identities and the private key of signer must have been decrypted if +// necessary. +// If config is nil, sensible defaults will be used. +func (e *Entity) SignIdentity(identity string, signer *Entity, config *packet.Config) error { + certificationKey, ok := signer.CertificationKey(config.Now()) + if !ok { + return errors.InvalidArgumentError("no valid certification key found") + } + + if certificationKey.PrivateKey.Encrypted { + return errors.InvalidArgumentError("signing Entity's private key must be decrypted") + } + + ident, ok := e.Identities[identity] + if !ok { + return errors.InvalidArgumentError("given identity string not found in Entity") + } + + sig := createSignaturePacket(certificationKey.PublicKey, packet.SigTypeGenericCert, config) + + signingUserID := config.SigningUserId() + if signingUserID != "" { + if _, ok := signer.Identities[signingUserID]; !ok { + return errors.InvalidArgumentError("signer identity string not found in signer Entity") + } + sig.SignerUserId = &signingUserID + } + + if err := sig.SignUserId(identity, e.PrimaryKey, certificationKey.PrivateKey, config); err != nil { + return err + } + ident.Signatures = append(ident.Signatures, sig) + return nil +} + +// RevokeKey generates a key revocation signature (packet.SigTypeKeyRevocation) with the +// specified reason code and text (RFC4880 section-5.2.3.23). +// If config is nil, sensible defaults will be used. +func (e *Entity) RevokeKey(reason packet.ReasonForRevocation, reasonText string, config *packet.Config) error { + revSig := createSignaturePacket(e.PrimaryKey, packet.SigTypeKeyRevocation, config) + revSig.RevocationReason = &reason + revSig.RevocationReasonText = reasonText + + if err := revSig.RevokeKey(e.PrimaryKey, e.PrivateKey, config); err != nil { + return err + } + e.Revocations = append(e.Revocations, revSig) + return nil +} + +// RevokeSubkey generates a subkey revocation signature (packet.SigTypeSubkeyRevocation) for +// a subkey with the specified reason code and text (RFC4880 section-5.2.3.23). +// If config is nil, sensible defaults will be used. +func (e *Entity) RevokeSubkey(sk *Subkey, reason packet.ReasonForRevocation, reasonText string, config *packet.Config) error { + if err := e.PrimaryKey.VerifyKeySignature(sk.PublicKey, sk.Sig); err != nil { + return errors.InvalidArgumentError("given subkey is not associated with this key") + } + + revSig := createSignaturePacket(e.PrimaryKey, packet.SigTypeSubkeyRevocation, config) + revSig.RevocationReason = &reason + revSig.RevocationReasonText = reasonText + + if err := revSig.RevokeSubkey(sk.PublicKey, e.PrivateKey, config); err != nil { + return err + } + + sk.Revocations = append(sk.Revocations, revSig) + return nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/keys_test_data.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/keys_test_data.go new file mode 100644 index 0000000000000..108fd096f3c79 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/keys_test_data.go @@ -0,0 +1,538 @@ +package openpgp + +const expiringKeyHex = "c6c04d0451d0c680010800abbb021fd03ffc4e96618901180c3fdcb060ee69eeead97b91256d11420d80b5f1b51930248044130bd300605cf8a05b7a40d3d8cfb0a910be2e3db50dcd50a9c54064c2a5550801daa834ff4480b33d3d3ca495ff8a4e84a886977d17d998f881241a874083d8b995beab555b6d22b8a4817ab17ac3e7304f7d4d2c05c495fb2218348d3bc13651db1d92732e368a9dd7dcefa6eddff30b94706a9aaee47e9d39321460b740c59c6fc3c2fd8ab6c0fb868cb87c0051f0321301fe0f0e1820b15e7fb7063395769b525005c7e30a7ce85984f5cac00504e7b4fdc45d74958de8388436fd5c7ba9ea121f1c851b5911dd1b47a14d81a09e92ef37721e2325b6790011010001cd00c2c07b041001080025050251d0c680050900278d00060b09070803020415080a0203160201021901021b03021e01000a0910e7b484133a890a35ae4b0800a1beb82e7f28eaf5273d6af9d3391314f6280b2b624eaca2851f89a9ebcaf80ac589ebd509f168bc4322106ca2e2ce77a76e071a3c7444787d65216b5f05e82c77928860b92aace3b7d0327db59492f422eb9dfab7249266d37429870b091a98aba8724c2259ebf8f85093f21255eafa75aa841e31d94f2ac891b9755fed455e539044ee69fc47950b80e003fc9f298d695660f28329eaa38037c367efde1727458e514faf990d439a21461b719edaddf9296d3d0647b43ca56cb8dbf63b4fcf8b9968e7928c463470fab3b98e44d0d95645062f94b2d04fe56bd52822b71934db8ce845622c40b92fcbe765a142e7f38b61a6aa9606c8e8858dcd3b6eb1894acec04d0451d1f06b01080088bea67444e1789390e7c0335c86775502d58ec783d99c8ef4e06de235ed3dd4b0467f6f358d818c7d8989d43ec6d69fcbc8c32632d5a1b605e3fa8e41d695fcdcaa535936cd0157f9040dce362519803b908eafe838bb13216c885c6f93e9e8d5745607f0d062322085d6bdc760969149a8ff8dd9f5c18d9bfe2e6f63a06e17694cf1f67587c6fb70e9aebf90ffc528ca3b615ac7c9d4a21ea4f7c06f2e98fbbd90a859b8608bf9ea638e3a54289ce44c283110d0c45fa458de6251cd6e7baf71f80f12c8978340490fd90c92b81736ae902ed958e478dceae2835953d189c45d182aff02ea2be61b81d8e94430f041d638647b43e2fcb45fd512fbf5068b810011010001c2c06504180108000f050251d1f06b050900081095021b0c000a0910e7b484133a890a35e63407fe2ec88d6d1e6c9ce7553ece0cb2524747217bad29f251d33df84599ffcc900141a355abd62126800744068a5e05dc167056aa9205273dc7765a2ed49db15c2a83b8d6e6429c902136f1e12229086c1c10c0053242c2a4ae1930db58163387a48cad64607ff2153c320e42843dec28e3fce90e7399d63ac0affa2fee1f0adc0953c89eb3f46ef1d6c04328ed13b491669d5120a3782e3ffb7c69575fb77eebd108794f4dda9d34be2bae57e8e59ec8ebfda2f6f06104b2321be408ea146e2db482b00c5055c8618de36ac9716f80da2617e225556d0fce61b01c8cea2d1e0ea982c31711060ca370f2739366e1e708f38405d784b49d16a26cf62d152eae734327cec04d0451d1f07b010800d5af91c5e7c2fd8951c8d254eab0c97cdcb66822f868b79b78c366255059a68fd74ebca9adb9b970cd9e586690e6e0756705432306878c897b10a4b4ca0005966f99ac8fa4e6f9caf54bf8e53844544beee9872a7ac64c119cf1393d96e674254b661f61ee975633d0e8a8672531edb6bb8e211204e7754a9efa802342118eee850beea742bac95a3f706cc2024cf6037a308bb68162b2f53b9a6346a96e6d31871a2456186e24a1c7a82b82ac04afdfd57cd7fb9ba77a9c760d40b76a170f7be525e5fb6a9848cc726e806187710d9b190387df28700f321f988a392899f93815cc937f309129eb94d5299c5547cb2c085898e6639496e70d746c9d3fb9881d0011010001c2c06504180108000f050251d1f07b050900266305021b0c000a0910e7b484133a890a35bff207fd10dfe8c4a6ea1dd30568012b6fd6891a763c87ad0f7a1d112aad9e8e3239378a3b85588c235865bac2e614348cb4f216d7217f53b3ef48c192e0a4d31d64d7bfa5faccf21155965fa156e887056db644a05ad08a85cc6152d1377d9e37b46f4ff462bbe68ace2dc586ef90070314576c985d8037c2ba63f0a7dc17a62e15bd77e88bc61d9d00858979709f12304264a4cf4225c5cf86f12c8e19486cb9cdcc69f18f027e5f16f4ca8b50e28b3115eaff3a345acd21f624aef81f6ede515c1b55b26b84c1e32264754eab672d5489b287e7277ea855e0a5ff2aa9e8b8c76d579a964ec225255f4d57bf66639ccb34b64798846943e162a41096a7002ca21c7f56" +const subkeyUsageHex = "988d04533a52bc010400d26af43085558f65b9e7dbc90cb9238015259aed5e954637adcfa2181548b2d0b60c65f1f42ec5081cbf1bc0a8aa4900acfb77070837c58f26012fbce297d70afe96e759ad63531f0037538e70dbf8e384569b9720d99d8eb39d8d0a2947233ed242436cb6ac7dfe74123354b3d0119b5c235d3dd9c9d6c004f8ffaf67ad8583001101000188b7041f010200210502533b8552170c8001ce094aa433f7040bb2ddf0be3893cb843d0fe70c020700000a0910a42704b92866382aa98404009d63d916a27543da4221c60087c33f1c44bec9998c5438018ed370cca4962876c748e94b73eb39c58eb698063f3fd6346d58dd2a11c0247934c4a9d71f24754f7468f96fb24c3e791dd2392b62f626148ad724189498cbf993db2df7c0cdc2d677c35da0f16cb16c9ce7c33b4de65a4a91b1d21a130ae9cc26067718910ef8e2b417556d627261203c756d627261407379642e65642e61753e88b80413010200220502533a52bc021b03060b090807030206150802090a0b0416020301021e01021780000a0910a42704b92866382a47840400c0c2bd04f5fca586de408b395b3c280a278259c93eaaa8b79a53b97003f8ed502a8a00446dd9947fb462677e4fcac0dac2f0701847d15130aadb6cd9e0705ea0cf5f92f129136c7be21a718d46c8e641eb7f044f2adae573e11ae423a0a9ca51324f03a8a2f34b91fa40c3cc764bee4dccadedb54c768ba0469b683ea53f1c29b88d04533a52bc01040099c92a5d6f8b744224da27bc2369127c35269b58bec179de6bbc038f749344222f85a31933224f26b70243c4e4b2d242f0c4777eaef7b5502f9dad6d8bf3aaeb471210674b74de2d7078af497d55f5cdad97c7bedfbc1b41e8065a97c9c3d344b21fc81d27723af8e374bc595da26ea242dccb6ae497be26eea57e563ed517e90011010001889f0418010200090502533a52bc021b0c000a0910a42704b92866382afa1403ff70284c2de8a043ff51d8d29772602fa98009b7861c540535f874f2c230af8caf5638151a636b21f8255003997ccd29747fdd06777bb24f9593bd7d98a3e887689bf902f999915fcc94625ae487e5d13e6616f89090ebc4fdc7eb5cad8943e4056995bb61c6af37f8043016876a958ec7ebf39c43d20d53b7f546cfa83e8d2604b88d04533b8283010400c0b529316dbdf58b4c54461e7e669dc11c09eb7f73819f178ccd4177b9182b91d138605fcf1e463262fabefa73f94a52b5e15d1904635541c7ea540f07050ce0fb51b73e6f88644cec86e91107c957a114f69554548a85295d2b70bd0b203992f76eb5d493d86d9eabcaa7ef3fc7db7e458438db3fcdb0ca1cc97c638439a9170011010001889f0418010200090502533b8283021b0c000a0910a42704b92866382adc6d0400cfff6258485a21675adb7a811c3e19ebca18851533f75a7ba317950b9997fda8d1a4c8c76505c08c04b6c2cc31dc704d33da36a21273f2b388a1a706f7c3378b66d887197a525936ed9a69acb57fe7f718133da85ec742001c5d1864e9c6c8ea1b94f1c3759cebfd93b18606066c063a63be86085b7e37bdbc65f9a915bf084bb901a204533b85cd110400aed3d2c52af2b38b5b67904b0ef73d6dd7aef86adb770e2b153cd22489654dcc91730892087bb9856ae2d9f7ed1eb48f214243fe86bfe87b349ebd7c30e630e49c07b21fdabf78b7a95c8b7f969e97e3d33f2e074c63552ba64a2ded7badc05ce0ea2be6d53485f6900c7860c7aa76560376ce963d7271b9b54638a4028b573f00a0d8854bfcdb04986141568046202192263b9b67350400aaa1049dbc7943141ef590a70dcb028d730371d92ea4863de715f7f0f16d168bd3dc266c2450457d46dcbbf0b071547e5fbee7700a820c3750b236335d8d5848adb3c0da010e998908dfd93d961480084f3aea20b247034f8988eccb5546efaa35a92d0451df3aaf1aee5aa36a4c4d462c760ecd9cebcabfbe1412b1f21450f203fd126687cd486496e971a87fd9e1a8a765fe654baa219a6871ab97768596ab05c26c1aeea8f1a2c72395a58dbc12ef9640d2b95784e974a4d2d5a9b17c25fedacfe551bda52602de8f6d2e48443f5dd1a2a2a8e6a5e70ecdb88cd6e766ad9745c7ee91d78cc55c3d06536b49c3fee6c3d0b6ff0fb2bf13a314f57c953b8f4d93bf88e70418010200090502533b85cd021b0200520910a42704b92866382a47200419110200060502533b85cd000a091042ce2c64bc0ba99214b2009e26b26852c8b13b10c35768e40e78fbbb48bd084100a0c79d9ea0844fa5853dd3c85ff3ecae6f2c9dd6c557aa04008bbbc964cd65b9b8299d4ebf31f41cc7264b8cf33a00e82c5af022331fac79efc9563a822497ba012953cefe2629f1242fcdcb911dbb2315985bab060bfd58261ace3c654bdbbe2e8ed27a46e836490145c86dc7bae15c011f7e1ffc33730109b9338cd9f483e7cef3d2f396aab5bd80efb6646d7e778270ee99d934d187dd98" +const revokedKeyHex = "988d045331ce82010400c4fdf7b40a5477f206e6ee278eaef888ca73bf9128a9eef9f2f1ddb8b7b71a4c07cfa241f028a04edb405e4d916c61d6beabc333813dc7b484d2b3c52ee233c6a79b1eea4e9cc51596ba9cd5ac5aeb9df62d86ea051055b79d03f8a4fa9f38386f5bd17529138f3325d46801514ea9047977e0829ed728e68636802796801be10011010001889f04200102000905025331d0e3021d03000a0910a401d9f09a34f7c042aa040086631196405b7e6af71026b88e98012eab44aa9849f6ef3fa930c7c9f23deaedba9db1538830f8652fb7648ec3fcade8dbcbf9eaf428e83c6cbcc272201bfe2fbb90d41963397a7c0637a1a9d9448ce695d9790db2dc95433ad7be19eb3de72dacf1d6db82c3644c13eae2a3d072b99bb341debba012c5ce4006a7d34a1f4b94b444526567205265766f6b657220283c52656727732022424d204261726973746122204b657920262530305c303e5c29203c72656740626d626172697374612e636f2e61753e88b704130102002205025331ce82021b03060b090807030206150802090a0b0416020301021e01021780000a0910a401d9f09a34f7c0019c03f75edfbeb6a73e7225ad3cc52724e2872e04260d7daf0d693c170d8c4b243b8767bc7785763533febc62ec2600c30603c433c095453ede59ff2fcabeb84ce32e0ed9d5cf15ffcbc816202b64370d4d77c1e9077d74e94a16fb4fa2e5bec23a56d7a73cf275f91691ae1801a976fcde09e981a2f6327ac27ea1fecf3185df0d56889c04100102000605025331cfb5000a0910fe9645554e8266b64b4303fc084075396674fb6f778d302ac07cef6bc0b5d07b66b2004c44aef711cbac79617ef06d836b4957522d8772dd94bf41a2f4ac8b1ee6d70c57503f837445a74765a076d07b829b8111fc2a918423ddb817ead7ca2a613ef0bfb9c6b3562aec6c3cf3c75ef3031d81d95f6563e4cdcc9960bcb386c5d757b104fcca5fe11fc709df884604101102000605025331cfe7000a09107b15a67f0b3ddc0317f6009e360beea58f29c1d963a22b962b80788c3fa6c84e009d148cfde6b351469b8eae91187eff07ad9d08fcaab88d045331ce820104009f25e20a42b904f3fa555530fe5c46737cf7bd076c35a2a0d22b11f7e0b61a69320b768f4a80fe13980ce380d1cfc4a0cd8fbe2d2e2ef85416668b77208baa65bf973fe8e500e78cc310d7c8705cdb34328bf80e24f0385fce5845c33bc7943cf6b11b02348a23da0bf6428e57c05135f2dc6bd7c1ce325d666d5a5fd2fd5e410011010001889f04180102000905025331ce82021b0c000a0910a401d9f09a34f7c0418003fe34feafcbeaef348a800a0d908a7a6809cc7304017d820f70f0474d5e23cb17e38b67dc6dca282c6ca00961f4ec9edf2738d0f087b1d81e4871ef08e1798010863afb4eac4c44a376cb343be929c5be66a78cfd4456ae9ec6a99d97f4e1c3ff3583351db2147a65c0acef5c003fb544ab3a2e2dc4d43646f58b811a6c3a369d1f" +const revokedSubkeyHex = "988d04533121f6010400aefc803a3e4bb1a61c86e8a86d2726c6a43e0079e9f2713f1fa017e9854c83877f4aced8e331d675c67ea83ddab80aacbfa0b9040bb12d96f5a3d6be09455e2a76546cbd21677537db941cab710216b6d24ec277ee0bd65b910f416737ed120f6b93a9d3b306245c8cfd8394606fdb462e5cf43c551438d2864506c63367fc890011010001b41d416c696365203c616c69636540626d626172697374612e636f2e61753e88bb041301020025021b03060b090807030206150802090a0b0416020301021e01021780050253312798021901000a09104ef7e4beccde97f015a803ff5448437780f63263b0df8442a995e7f76c221351a51edd06f2063d8166cf3157aada4923dfc44aa0f2a6a4da5cf83b7fe722ba8ab416c976e77c6b5682e7f1069026673bd0de56ba06fd5d7a9f177607f277d9b55ff940a638c3e68525c67517e2b3d976899b93ca267f705b3e5efad7d61220e96b618a4497eab8d04403d23f8846041011020006050253312910000a09107b15a67f0b3ddc03d96e009f50b6365d86c4be5d5e9d0ea42d5e56f5794c617700a0ab274e19c2827780016d23417ce89e0a2c0d987d889c04100102000605025331cf7a000a0910a401d9f09a34f7c0ee970400aca292f213041c9f3b3fc49148cbda9d84afee6183c8dd6c5ff2600b29482db5fecd4303797be1ee6d544a20a858080fec43412061c9a71fae4039fd58013b4ae341273e6c66ad4c7cdd9e68245bedb260562e7b166f2461a1032f2b38c0e0e5715fb3d1656979e052b55ca827a76f872b78a9fdae64bc298170bfcebedc1271b41a416c696365203c616c696365407379646973702e6f722e61753e88b804130102002205025331278b021b03060b090807030206150802090a0b0416020301021e01021780000a09104ef7e4beccde97f06a7003fa03c3af68d272ebc1fa08aa72a03b02189c26496a2833d90450801c4e42c5b5f51ad96ce2d2c9cef4b7c02a6a2fcf1412d6a2d486098eb762f5010a201819c17fd2888aec8eda20c65a3b75744de7ee5cc8ac7bfc470cbe3cb982720405a27a3c6a8c229cfe36905f881b02ed5680f6a8f05866efb9d6c5844897e631deb949ca8846041011020006050253312910000a09107b15a67f0b3ddc0347bc009f7fa35db59147469eb6f2c5aaf6428accb138b22800a0caa2f5f0874bacc5909c652a57a31beda65eddd5889c04100102000605025331cf7a000a0910a401d9f09a34f7c0316403ff46f2a5c101256627f16384d34a38fb47a6c88ba60506843e532d91614339fccae5f884a5741e7582ffaf292ba38ee10a270a05f139bde3814b6a077e8cd2db0f105ebea2a83af70d385f13b507fac2ad93ff79d84950328bb86f3074745a8b7f9b64990fb142e2a12976e27e8d09a28dc5621f957ac49091116da410ac3cbde1b88d04533121f6010400cbd785b56905e4192e2fb62a720727d43c4fa487821203cf72138b884b78b701093243e1d8c92a0248a6c0203a5a88693da34af357499abacaf4b3309c640797d03093870a323b4b6f37865f6eaa2838148a67df4735d43a90ca87942554cdf1c4a751b1e75f9fd4ce4e97e278d6c1c7ed59d33441df7d084f3f02beb68896c70011010001889f0418010200090502533121f6021b0c000a09104ef7e4beccde97f0b98b03fc0a5ccf6a372995835a2f5da33b282a7d612c0ab2a97f59cf9fff73e9110981aac2858c41399afa29624a7fd8a0add11654e3d882c0fd199e161bdad65e5e2548f7b68a437ea64293db1246e3011cbb94dc1bcdeaf0f2539bd88ff16d95547144d97cead6a8c5927660a91e6db0d16eb36b7b49a3525b54d1644e65599b032b7eb901a204533127a0110400bd3edaa09eff9809c4edc2c2a0ebe52e53c50a19c1e49ab78e6167bf61473bb08f2050d78a5cbbc6ed66aff7b42cd503f16b4a0b99fa1609681fca9b7ce2bbb1a5b3864d6cdda4d7ef7849d156d534dea30fb0efb9e4cf8959a2b2ce623905882d5430b995a15c3b9fe92906086788b891002924f94abe139b42cbbfaaabe42f00a0b65dc1a1ad27d798adbcb5b5ad02d2688c89477b03ff4eebb6f7b15a73b96a96bed201c0e5e4ea27e4c6e2dd1005b94d4b90137a5b1cf5e01c6226c070c4cc999938101578877ee76d296b9aab8246d57049caacf489e80a3f40589cade790a020b1ac146d6f7a6241184b8c7fcde680eae3188f5dcbe846d7f7bdad34f6fcfca08413e19c1d5df83fc7c7c627d493492e009c2f52a80400a2fe82de87136fd2e8845888c4431b032ba29d9a29a804277e31002a8201fb8591a3e55c7a0d0881496caf8b9fb07544a5a4879291d0dc026a0ea9e5bd88eb4aa4947bbd694b25012e208a250d65ddc6f1eea59d3aed3b4ec15fcab85e2afaa23a40ab1ef9ce3e11e1bc1c34a0e758e7aa64deb8739276df0af7d4121f834a9b88e70418010200090502533127a0021b02005209104ef7e4beccde97f047200419110200060502533127a0000a0910dbce4ee19529437fe045009c0b32f5ead48ee8a7e98fac0dea3d3e6c0e2c552500a0ad71fadc5007cfaf842d9b7db3335a8cdad15d3d1a6404009b08e2c68fe8f3b45c1bb72a4b3278cdf3012aa0f229883ad74aa1f6000bb90b18301b2f85372ca5d6b9bf478d235b733b1b197d19ccca48e9daf8e890cb64546b4ce1b178faccfff07003c172a2d4f5ebaba9f57153955f3f61a9b80a4f5cb959908f8b211b03b7026a8a82fc612bfedd3794969bcf458c4ce92be215a1176ab88d045331d144010400a5063000c5aaf34953c1aa3bfc95045b3aab9882b9a8027fecfe2142dc6b47ba8aca667399990244d513dd0504716908c17d92c65e74219e004f7b83fc125e575dd58efec3ab6dd22e3580106998523dea42ec75bf9aa111734c82df54630bebdff20fe981cfc36c76f865eb1c2fb62c9e85bc3a6e5015a361a2eb1c8431578d0011010001889f04280102000905025331d433021d03000a09104ef7e4beccde97f02e5503ff5e0630d1b65291f4882b6d40a29da4616bb5088717d469fbcc3648b8276de04a04988b1f1b9f3e18f52265c1f8b6c85861691c1a6b8a3a25a1809a0b32ad330aec5667cb4262f4450649184e8113849b05e5ad06a316ea80c001e8e71838190339a6e48bbde30647bcf245134b9a97fa875c1d83a9862cae87ffd7e2c4ce3a1b89013d04180102000905025331d144021b0200a809104ef7e4beccde97f09d2004190102000605025331d144000a0910677815e371c2fd23522203fe22ab62b8e7a151383cea3edd3a12995693911426f8ccf125e1f6426388c0010f88d9ca7da2224aee8d1c12135998640c5e1813d55a93df472faae75bef858457248db41b4505827590aeccf6f9eb646da7f980655dd3050c6897feddddaca90676dee856d66db8923477d251712bb9b3186b4d0114daf7d6b59272b53218dd1da94a03ff64006fcbe71211e5daecd9961fba66cdb6de3f914882c58ba5beddeba7dcb950c1156d7fba18c19ea880dccc800eae335deec34e3b84ac75ffa24864f782f87815cda1c0f634b3dd2fa67cea30811d21723d21d9551fa12ccbcfa62b6d3a15d01307b99925707992556d50065505b090aadb8579083a20fe65bd2a270da9b011" + +const missingCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Charset: UTF-8 + +mQENBFMYynYBCACVOZ3/e8Bm2b9KH9QyIlHGo/i1bnkpqsgXj8tpJ2MIUOnXMMAY +ztW7kKFLCmgVdLIC0vSoLA4yhaLcMojznh/2CcUglZeb6Ao8Gtelr//Rd5DRfPpG +zqcfUo+m+eO1co2Orabw0tZDfGpg5p3AYl0hmxhUyYSc/xUq93xL1UJzBFgYXY54 +QsM8dgeQgFseSk/YvdP5SMx1ev+eraUyiiUtWzWrWC1TdyRa5p4UZg6Rkoppf+WJ +QrW6BWrhAtqATHc8ozV7uJjeONjUEq24roRc/OFZdmQQGK6yrzKnnbA6MdHhqpdo +9kWDcXYb7pSE63Lc+OBa5X2GUVvXJLS/3nrtABEBAAG0F2ludmFsaWQtc2lnbmlu +Zy1zdWJrZXlziQEoBBMBAgASBQJTnKB5AhsBAgsHAhUIAh4BAAoJEO3UDQUIHpI/ +dN4H/idX4FQ1LIZCnpHS/oxoWQWfpRgdKAEM0qCqjMgiipJeEwSQbqjTCynuh5/R +JlODDz85ABR06aoF4l5ebGLQWFCYifPnJZ/Yf5OYcMGtb7dIbqxWVFL9iLMO/oDL +ioI3dotjPui5e+2hI9pVH1UHB/bZ/GvMGo6Zg0XxLPolKQODMVjpjLAQ0YJ3spew +RAmOGre6tIvbDsMBnm8qREt7a07cBJ6XK7xjxYaZHQBiHVxyEWDa6gyANONx8duW +/fhQ/zDTnyVM/ik6VO0Ty9BhPpcEYLFwh5c1ilFari1ta3e6qKo6ZGa9YMk/REhu +yBHd9nTkI+0CiQUmbckUiVjDKKe5AQ0EUxjKdgEIAJcXQeP+NmuciE99YcJoffxv +2gVLU4ZXBNHEaP0mgaJ1+tmMD089vUQAcyGRvw8jfsNsVZQIOAuRxY94aHQhIRHR +bUzBN28ofo/AJJtfx62C15xt6fDKRV6HXYqAiygrHIpEoRLyiN69iScUsjIJeyFL +C8wa72e8pSL6dkHoaV1N9ZH/xmrJ+k0vsgkQaAh9CzYufncDxcwkoP+aOlGtX1gP +WwWoIbz0JwLEMPHBWvDDXQcQPQTYQyj+LGC9U6f9VZHN25E94subM1MjuT9OhN9Y +MLfWaaIc5WyhLFyQKW2Upofn9wSFi8ubyBnv640Dfd0rVmaWv7LNTZpoZ/GbJAMA +EQEAAYkBHwQYAQIACQUCU5ygeQIbAgAKCRDt1A0FCB6SP0zCB/sEzaVR38vpx+OQ +MMynCBJrakiqDmUZv9xtplY7zsHSQjpd6xGflbU2n+iX99Q+nav0ETQZifNUEd4N +1ljDGQejcTyKD6Pkg6wBL3x9/RJye7Zszazm4+toJXZ8xJ3800+BtaPoI39akYJm ++ijzbskvN0v/j5GOFJwQO0pPRAFtdHqRs9Kf4YanxhedB4dIUblzlIJuKsxFit6N +lgGRblagG3Vv2eBszbxzPbJjHCgVLR3RmrVezKOsZjr/2i7X+xLWIR0uD3IN1qOW +CXQxLBizEEmSNVNxsp7KPGTLnqO3bPtqFirxS9PJLIMPTPLNBY7ZYuPNTMqVIUWF +4artDmrG +=7FfJ +-----END PGP PUBLIC KEY BLOCK-----` + +const invalidCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFMYynYBCACVOZ3/e8Bm2b9KH9QyIlHGo/i1bnkpqsgXj8tpJ2MIUOnXMMAY +ztW7kKFLCmgVdLIC0vSoLA4yhaLcMojznh/2CcUglZeb6Ao8Gtelr//Rd5DRfPpG +zqcfUo+m+eO1co2Orabw0tZDfGpg5p3AYl0hmxhUyYSc/xUq93xL1UJzBFgYXY54 +QsM8dgeQgFseSk/YvdP5SMx1ev+eraUyiiUtWzWrWC1TdyRa5p4UZg6Rkoppf+WJ +QrW6BWrhAtqATHc8ozV7uJjeONjUEq24roRc/OFZdmQQGK6yrzKnnbA6MdHhqpdo +9kWDcXYb7pSE63Lc+OBa5X2GUVvXJLS/3nrtABEBAAG0F2ludmFsaWQtc2lnbmlu +Zy1zdWJrZXlziQEoBBMBAgASBQJTnKB5AhsBAgsHAhUIAh4BAAoJEO3UDQUIHpI/ +dN4H/idX4FQ1LIZCnpHS/oxoWQWfpRgdKAEM0qCqjMgiipJeEwSQbqjTCynuh5/R +JlODDz85ABR06aoF4l5ebGLQWFCYifPnJZ/Yf5OYcMGtb7dIbqxWVFL9iLMO/oDL +ioI3dotjPui5e+2hI9pVH1UHB/bZ/GvMGo6Zg0XxLPolKQODMVjpjLAQ0YJ3spew +RAmOGre6tIvbDsMBnm8qREt7a07cBJ6XK7xjxYaZHQBiHVxyEWDa6gyANONx8duW +/fhQ/zDTnyVM/ik6VO0Ty9BhPpcEYLFwh5c1ilFari1ta3e6qKo6ZGa9YMk/REhu +yBHd9nTkI+0CiQUmbckUiVjDKKe5AQ0EUxjKdgEIAIINDqlj7X6jYKc6DjwrOkjQ +UIRWbQQar0LwmNilehmt70g5DCL1SYm9q4LcgJJ2Nhxj0/5qqsYib50OSWMcKeEe +iRXpXzv1ObpcQtI5ithp0gR53YPXBib80t3bUzomQ5UyZqAAHzMp3BKC54/vUrSK +FeRaxDzNLrCeyI00+LHNUtwghAqHvdNcsIf8VRumK8oTm3RmDh0TyjASWYbrt9c8 +R1Um3zuoACOVy+mEIgIzsfHq0u7dwYwJB5+KeM7ZLx+HGIYdUYzHuUE1sLwVoELh ++SHIGHI1HDicOjzqgajShuIjj5hZTyQySVprrsLKiXS6NEwHAP20+XjayJ/R3tEA +EQEAAYkCPgQYAQIBKAUCU5ygeQIbAsBdIAQZAQIABgUCU5ygeQAKCRCpVlnFZmhO +52RJB/9uD1MSa0wjY6tHOIgquZcP3bHBvHmrHNMw9HR2wRCMO91ZkhrpdS3ZHtgb +u3/55etj0FdvDo1tb8P8FGSVtO5Vcwf5APM8sbbqoi8L951Q3i7qt847lfhu6sMl +w0LWFvPTOLHrliZHItPRjOltS1WAWfr2jUYhsU9ytaDAJmvf9DujxEOsN5G1YJep +54JCKVCkM/y585Zcnn+yxk/XwqoNQ0/iJUT9qRrZWvoeasxhl1PQcwihCwss44A+ +YXaAt3hbk+6LEQuZoYS73yR3WHj+42tfm7YxRGeubXfgCEz/brETEWXMh4pe0vCL +bfWrmfSPq2rDegYcAybxRQz0lF8PAAoJEO3UDQUIHpI/exkH/0vQfdHA8g/N4T6E +i6b1CUVBAkvtdJpCATZjWPhXmShOw62gkDw306vHPilL4SCvEEi4KzG72zkp6VsB +DSRcpxCwT4mHue+duiy53/aRMtSJ+vDfiV1Vhq+3sWAck/yUtfDU9/u4eFaiNok1 +8/Gd7reyuZt5CiJnpdPpjCwelK21l2w7sHAnJF55ITXdOxI8oG3BRKufz0z5lyDY +s2tXYmhhQIggdgelN8LbcMhWs/PBbtUr6uZlNJG2lW1yscD4aI529VjwJlCeo745 +U7pO4eF05VViUJ2mmfoivL3tkhoTUWhx8xs8xCUcCg8DoEoSIhxtOmoTPR22Z9BL +6LCg2mg= +=Dhm4 +-----END PGP PUBLIC KEY BLOCK-----` + +const goodCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mI0EVUqeVwEEAMufHRrMPWK3gyvi0O0tABCs/oON9zV9KDZlr1a1M91ShCSFwCPo +7r80PxdWVWcj0V5h50/CJYtpN3eE/mUIgW2z1uDYQF1OzrQ8ubrksfsJvpAhENom +lTQEppv9mV8qhcM278teb7TX0pgrUHLYF5CfPdp1L957JLLXoQR/lwLVABEBAAG0 +E2dvb2Qtc2lnbmluZy1zdWJrZXmIuAQTAQIAIgUCVUqeVwIbAwYLCQgHAwIGFQgC +CQoLBBYCAwECHgECF4AACgkQNRjL95IRWP69XQQAlH6+eyXJN4DZTLX78KGjHrsw +6FCvxxClEPtPUjcJy/1KCRQmtLAt9PbbA78dvgzjDeZMZqRAwdjyJhjyg/fkU2OH +7wq4ktjUu+dLcOBb+BFMEY+YjKZhf6EJuVfxoTVr5f82XNPbYHfTho9/OABKH6kv +X70PaKZhbwnwij8Nts65AaIEVUqftREEAJ3WxZfqAX0bTDbQPf2CMT2IVMGDfhK7 +GyubOZgDFFjwUJQvHNvsrbeGLZ0xOBumLINyPO1amIfTgJNm1iiWFWfmnHReGcDl +y5mpYG60Mb79Whdcer7CMm3AqYh/dW4g6IB02NwZMKoUHo3PXmFLxMKXnWyJ0clw +R0LI/Qn509yXAKDh1SO20rqrBM+EAP2c5bfI98kyNwQAi3buu94qo3RR1ZbvfxgW +CKXDVm6N99jdZGNK7FbRifXqzJJDLcXZKLnstnC4Sd3uyfyf1uFhmDLIQRryn5m+ +LBYHfDBPN3kdm7bsZDDq9GbTHiFZUfm/tChVKXWxkhpAmHhU/tH6GGzNSMXuIWSO +aOz3Rqq0ED4NXyNKjdF9MiwD/i83S0ZBc0LmJYt4Z10jtH2B6tYdqnAK29uQaadx +yZCX2scE09UIm32/w7pV77CKr1Cp/4OzAXS1tmFzQ+bX7DR+Gl8t4wxr57VeEMvl +BGw4Vjh3X8//m3xynxycQU18Q1zJ6PkiMyPw2owZ/nss3hpSRKFJsxMLhW3fKmKr +Ey2KiOcEGAECAAkFAlVKn7UCGwIAUgkQNRjL95IRWP5HIAQZEQIABgUCVUqftQAK +CRD98VjDN10SqkWrAKDTpEY8D8HC02E/KVC5YUI01B30wgCgurpILm20kXEDCeHp +C5pygfXw1DJrhAP+NyPJ4um/bU1I+rXaHHJYroYJs8YSweiNcwiHDQn0Engh/mVZ +SqLHvbKh2dL/RXymC3+rjPvQf5cup9bPxNMa6WagdYBNAfzWGtkVISeaQW+cTEp/ +MtgVijRGXR/lGLGETPg2X3Afwn9N9bLMBkBprKgbBqU7lpaoPupxT61bL70= +=vtbN +-----END PGP PUBLIC KEY BLOCK-----` + +const revokedUserIDKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFsgO5EBCADhREPmcjsPkXe1z7ctvyWL0S7oa9JaoGZ9oPDHFDlQxd0qlX2e +DZJZDg0qYvVixmaULIulApq1puEsaJCn3lHUbHlb4PYKwLEywYXM28JN91KtLsz/ +uaEX2KC5WqeP40utmzkNLq+oRX/xnRMgwbO7yUNVG2UlEa6eI+xOXO3YtLdmJMBW +ClQ066ZnOIzEo1JxnIwha1CDBMWLLfOLrg6l8InUqaXbtEBbnaIYO6fXVXELUjkx +nmk7t/QOk0tXCy8muH9UDqJkwDUESY2l79XwBAcx9riX8vY7vwC34pm22fAUVLCJ +x1SJx0J8bkeNp38jKM2Zd9SUQqSbfBopQ4pPABEBAAG0I0dvbGFuZyBHb3BoZXIg +PG5vLXJlcGx5QGdvbGFuZy5jb20+iQFUBBMBCgA+FiEE5Ik5JLcNx6l6rZfw1oFy +9I6cUoMFAlsgO5ECGwMFCQPCZwAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQ +1oFy9I6cUoMIkwf8DNPeD23i4jRwd/pylbvxwZintZl1fSwTJW1xcOa1emXaEtX2 +depuqhP04fjlRQGfsYAQh7X9jOJxAHjTmhqFBi5sD7QvKU00cPFYbJ/JTx0B41bl +aXnSbGhRPh63QtEZL7ACAs+shwvvojJqysx7kyVRu0EW2wqjXdHwR/SJO6nhNBa2 +DXzSiOU/SUA42mmG+5kjF8Aabq9wPwT9wjraHShEweNerNMmOqJExBOy3yFeyDpa +XwEZFzBfOKoxFNkIaVf5GSdIUGhFECkGvBMB935khftmgR8APxdU4BE7XrXexFJU +8RCuPXonm4WQOwTWR0vQg64pb2WKAzZ8HhwTGbQiR29sYW5nIEdvcGhlciA8cmV2 +b2tlZEBnb2xhbmcuY29tPokBNgQwAQoAIBYhBOSJOSS3Dcepeq2X8NaBcvSOnFKD +BQJbIDv3Ah0AAAoJENaBcvSOnFKDfWMIAKhI/Tvu3h8fSUxp/gSAcduT6bC1JttG +0lYQ5ilKB/58lBUA5CO3ZrKDKlzW3M8VEcvohVaqeTMKeoQd5rCZq8KxHn/KvN6N +s85REfXfniCKfAbnGgVXX3kDmZ1g63pkxrFu0fDZjVDXC6vy+I0sGyI/Inro0Pzb +tvn0QCsxjapKK15BtmSrpgHgzVqVg0cUp8vqZeKFxarYbYB2idtGRci4b9tObOK0 +BSTVFy26+I/mrFGaPrySYiy2Kz5NMEcRhjmTxJ8jSwEr2O2sUR0yjbgUAXbTxDVE +/jg5fQZ1ACvBRQnB7LvMHcInbzjyeTM3FazkkSYQD6b97+dkWwb1iWG5AQ0EWyA7 +kQEIALkg04REDZo1JgdYV4x8HJKFS4xAYWbIva1ZPqvDNmZRUbQZR2+gpJGEwn7z +VofGvnOYiGW56AS5j31SFf5kro1+1bZQ5iOONBng08OOo58/l1hRseIIVGB5TGSa +PCdChKKHreJI6hS3mShxH6hdfFtiZuB45rwoaArMMsYcjaezLwKeLc396cpUwwcZ +snLUNd1Xu5EWEF2OdFkZ2a1qYdxBvAYdQf4+1Nr+NRIx1u1NS9c8jp3PuMOkrQEi +bNtc1v6v0Jy52mKLG4y7mC/erIkvkQBYJdxPaP7LZVaPYc3/xskcyijrJ/5ufoD8 +K71/ShtsZUXSQn9jlRaYR0EbojMAEQEAAYkBPAQYAQoAJhYhBOSJOSS3Dcepeq2X +8NaBcvSOnFKDBQJbIDuRAhsMBQkDwmcAAAoJENaBcvSOnFKDkFMIAIt64bVZ8x7+ +TitH1bR4pgcNkaKmgKoZz6FXu80+SnbuEt2NnDyf1cLOSimSTILpwLIuv9Uft5Pb +OraQbYt3xi9yrqdKqGLv80bxqK0NuryNkvh9yyx5WoG1iKqMj9/FjGghuPrRaT4l +QinNAghGVkEy1+aXGFrG2DsOC1FFI51CC2WVTzZ5RwR2GpiNRfESsU1rZAUqf/2V +yJl9bD5R4SUNy8oQmhOxi+gbhD4Ao34e4W0ilibslI/uawvCiOwlu5NGd8zv5n+U +heiQvzkApQup5c+BhH5zFDFdKJ2CBByxw9+7QjMFI/wgLixKuE0Ob2kAokXf7RlB +7qTZOahrETw= +=IKnw +-----END PGP PUBLIC KEY BLOCK-----` + +const keyWithFirstUserIDRevoked = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: OpenPGP.js v4.10.10 +Comment: https://openpgpjs.org + +xsBNBFsgO5EBCADhREPmcjsPkXe1z7ctvyWL0S7oa9JaoGZ9oPDHFDlQxd0q +lX2eDZJZDg0qYvVixmaULIulApq1puEsaJCn3lHUbHlb4PYKwLEywYXM28JN +91KtLsz/uaEX2KC5WqeP40utmzkNLq+oRX/xnRMgwbO7yUNVG2UlEa6eI+xO +XO3YtLdmJMBWClQ066ZnOIzEo1JxnIwha1CDBMWLLfOLrg6l8InUqaXbtEBb +naIYO6fXVXELUjkxnmk7t/QOk0tXCy8muH9UDqJkwDUESY2l79XwBAcx9riX +8vY7vwC34pm22fAUVLCJx1SJx0J8bkeNp38jKM2Zd9SUQqSbfBopQ4pPABEB +AAHNIkdvbGFuZyBHb3BoZXIgPHJldm9rZWRAZ29sYW5nLmNvbT7CwI0EMAEK +ACAWIQTkiTkktw3HqXqtl/DWgXL0jpxSgwUCWyA79wIdAAAhCRDWgXL0jpxS +gxYhBOSJOSS3Dcepeq2X8NaBcvSOnFKDfWMIAKhI/Tvu3h8fSUxp/gSAcduT +6bC1JttG0lYQ5ilKB/58lBUA5CO3ZrKDKlzW3M8VEcvohVaqeTMKeoQd5rCZ +q8KxHn/KvN6Ns85REfXfniCKfAbnGgVXX3kDmZ1g63pkxrFu0fDZjVDXC6vy ++I0sGyI/Inro0Pzbtvn0QCsxjapKK15BtmSrpgHgzVqVg0cUp8vqZeKFxarY +bYB2idtGRci4b9tObOK0BSTVFy26+I/mrFGaPrySYiy2Kz5NMEcRhjmTxJ8j +SwEr2O2sUR0yjbgUAXbTxDVE/jg5fQZ1ACvBRQnB7LvMHcInbzjyeTM3Fazk +kSYQD6b97+dkWwb1iWHNI0dvbGFuZyBHb3BoZXIgPG5vLXJlcGx5QGdvbGFu +Zy5jb20+wsCrBBMBCgA+FiEE5Ik5JLcNx6l6rZfw1oFy9I6cUoMFAlsgO5EC +GwMFCQPCZwAFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AAIQkQ1oFy9I6cUoMW +IQTkiTkktw3HqXqtl/DWgXL0jpxSgwiTB/wM094PbeLiNHB3+nKVu/HBmKe1 +mXV9LBMlbXFw5rV6ZdoS1fZ16m6qE/Th+OVFAZ+xgBCHtf2M4nEAeNOaGoUG +LmwPtC8pTTRw8Vhsn8lPHQHjVuVpedJsaFE+HrdC0RkvsAICz6yHC++iMmrK +zHuTJVG7QRbbCqNd0fBH9Ik7qeE0FrYNfNKI5T9JQDjaaYb7mSMXwBpur3A/ +BP3COtodKETB416s0yY6okTEE7LfIV7IOlpfARkXMF84qjEU2QhpV/kZJ0hQ +aEUQKQa8EwH3fmSF+2aBHwA/F1TgETtetd7EUlTxEK49eiebhZA7BNZHS9CD +rilvZYoDNnweHBMZzsBNBFsgO5EBCAC5INOERA2aNSYHWFeMfByShUuMQGFm +yL2tWT6rwzZmUVG0GUdvoKSRhMJ+81aHxr5zmIhluegEuY99UhX+ZK6NftW2 +UOYjjjQZ4NPDjqOfP5dYUbHiCFRgeUxkmjwnQoSih63iSOoUt5kocR+oXXxb +YmbgeOa8KGgKzDLGHI2nsy8Cni3N/enKVMMHGbJy1DXdV7uRFhBdjnRZGdmt +amHcQbwGHUH+PtTa/jUSMdbtTUvXPI6dz7jDpK0BImzbXNb+r9CcudpiixuM +u5gv3qyJL5EAWCXcT2j+y2VWj2HN/8bJHMoo6yf+bn6A/Cu9f0obbGVF0kJ/ +Y5UWmEdBG6IzABEBAAHCwJMEGAEKACYWIQTkiTkktw3HqXqtl/DWgXL0jpxS +gwUCWyA7kQIbDAUJA8JnAAAhCRDWgXL0jpxSgxYhBOSJOSS3Dcepeq2X8NaB +cvSOnFKDkFMIAIt64bVZ8x7+TitH1bR4pgcNkaKmgKoZz6FXu80+SnbuEt2N +nDyf1cLOSimSTILpwLIuv9Uft5PbOraQbYt3xi9yrqdKqGLv80bxqK0NuryN +kvh9yyx5WoG1iKqMj9/FjGghuPrRaT4lQinNAghGVkEy1+aXGFrG2DsOC1FF +I51CC2WVTzZ5RwR2GpiNRfESsU1rZAUqf/2VyJl9bD5R4SUNy8oQmhOxi+gb +hD4Ao34e4W0ilibslI/uawvCiOwlu5NGd8zv5n+UheiQvzkApQup5c+BhH5z +FDFdKJ2CBByxw9+7QjMFI/wgLixKuE0Ob2kAokXf7RlB7qTZOahrETw= +=+2T8 +-----END PGP PUBLIC KEY BLOCK----- +` + +const keyWithOnlyUserIDRevoked = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEYYwB7RYJKwYBBAHaRw8BAQdARimqhPPzyGAXmfQJjcqM1QVPzLtURJSzNVll +JV4tEaW0KVJldm9rZWQgUHJpbWFyeSBVc2VyIElEIDxyZXZva2VkQGtleS5jb20+ +iHgEMBYIACAWIQSpyJZAXYqVEFkjyKutFcS0yeB0LQUCYYwCtgIdAAAKCRCtFcS0 +yeB0LbSsAQD8OYMaaBjrdzzpwIkP1stgmPd4/kzN/ZG28Ywl6a5F5QEA5Xg7aq4e +/t6Fsb4F5iqB956kSPe6YJrikobD/tBbMwSIkAQTFggAOBYhBKnIlkBdipUQWSPI +q60VxLTJ4HQtBQJhjAHtAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEK0V +xLTJ4HQtBaoBAPZL7luTCji+Tqhn7XNfFE/0QIahCt8k9wfO1cGlB3inAQDf8Tzw +ZGR5fNluUcNoVxQT7bUSFStbaGo3k0BaOYPbCLg4BGGMAe0SCisGAQQBl1UBBQEB +B0DLwSpveSrbIO/IVZD13yrs1XuB3FURZUnafGrRq7+jUAMBCAeIeAQYFggAIBYh +BKnIlkBdipUQWSPIq60VxLTJ4HQtBQJhjAHtAhsMAAoJEK0VxLTJ4HQtZ1oA/j9u +8+p3xTNzsmabTL6BkNbMeB/RUKCrlm6woM6AV+vxAQCcXTn3JC2sNoNrLoXuVzaA +mcG3/TwG5GSQUUPkrDsGDA== +=mFWy +-----END PGP PUBLIC KEY BLOCK----- +` + +const keyWithSubKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +mI0EWyKwKQEEALwXhKBnyaaNFeK3ljfc/qn9X/QFw+28EUfgZPHjRmHubuXLE2uR +s3ZoSXY2z7Dkv+NyHYMt8p+X8q5fR7JvUjK2XbPyKoiJVnHINll83yl67DaWfKNL +EjNoO0kIfbXfCkZ7EG6DL+iKtuxniGTcnGT47e+HJSqb/STpLMnWwXjBABEBAAG0 +I0dvbGFuZyBHb3BoZXIgPG5vLXJlcGx5QGdvbGFuZy5jb20+iM4EEwEKADgWIQQ/ +lRafP/p9PytHbwxMvYJsOQdOOAUCWyKwKQIbAwULCQgHAwUVCgkICwUWAgMBAAIe +AQIXgAAKCRBMvYJsOQdOOOsFBAC62mXww8XuqvYLcVOvHkWLT6mhxrQOJXnlfpn7 +2uBV9CMhoG/Ycd43NONsJrB95Apr9TDIqWnVszNbqPCuBhZQSGLdbiDKjxnCWBk0 +69qv4RNtkpOhYB7jK4s8F5oQZqId6JasT/PmJTH92mhBYhhTQr0GYFuPX2UJdkw9 +Sn9C67iNBFsisDUBBAC3A+Yo9lgCnxi/pfskyLrweYif6kIXWLAtLTsM6g/6jt7b +wTrknuCPyTv0QKGXsAEe/cK/Xq3HvX9WfXPGIHc/X56ZIsHQ+RLowbZV/Lhok1IW +FAuQm8axr/by80cRwFnzhfPc/ukkAq2Qyj4hLsGblu6mxeAhzcp8aqmWOO2H9QAR +AQABiLYEKAEKACAWIQQ/lRafP/p9PytHbwxMvYJsOQdOOAUCWyK16gIdAAAKCRBM +vYJsOQdOOB1vA/4u4uLONsE+2GVOyBsHyy7uTdkuxaR9b54A/cz6jT/tzUbeIzgx +22neWhgvIEghnUZd0vEyK9k1wy5vbDlEo6nKzHso32N1QExGr5upRERAxweDxGOj +7luDwNypI7QcifE64lS/JmlnunwRCdRWMKc0Fp+7jtRc5mpwyHN/Suf5RokBagQY +AQoAIBYhBD+VFp8/+n0/K0dvDEy9gmw5B044BQJbIrA1AhsCAL8JEEy9gmw5B044 +tCAEGQEKAB0WIQSNdnkaWY6t62iX336UXbGvYdhXJwUCWyKwNQAKCRCUXbGvYdhX +JxJSA/9fCPHP6sUtGF1o3G1a3yvOUDGr1JWcct9U+QpbCt1mZoNopCNDDQAJvDWl +mvDgHfuogmgNJRjOMznvahbF+wpTXmB7LS0SK412gJzl1fFIpK4bgnhu0TwxNsO1 +8UkCZWqxRMgcNUn9z6XWONK8dgt5JNvHSHrwF4CxxwjL23AAtK+FA/UUoi3U4kbC +0XnSr1Sl+mrzQi1+H7xyMe7zjqe+gGANtskqexHzwWPUJCPZ5qpIa2l8ghiUim6b +4ymJ+N8/T8Yva1FaPEqfMzzqJr8McYFm0URioXJPvOAlRxdHPteZ0qUopt/Jawxl +Xt6B9h1YpeLoJwjwsvbi98UTRs0jXwoY +=3fWu +-----END PGP PUBLIC KEY BLOCK-----` + +const keyWithSubKeyAndBadSelfSigOrder = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +mI0EWyLLDQEEAOqIOpJ/ha1OYAGduu9tS3rBz5vyjbNgJO4sFveEM0mgsHQ0X9/L +plonW+d0gRoO1dhJ8QICjDAc6+cna1DE3tEb5m6JtQ30teLZuqrR398Cf6w7NNVz +r3lrlmnH9JaKRuXl7tZciwyovneBfZVCdtsRZjaLI1uMQCz/BToiYe3DABEBAAG0 +I0dvbGFuZyBHb3BoZXIgPG5vLXJlcGx5QGdvbGFuZy5jb20+iM4EEwEKADgWIQRZ +sixZOfQcZdW0wUqmgmdsv1O9xgUCWyLLDQIbAwULCQgHAwUVCgkICwUWAgMBAAIe +AQIXgAAKCRCmgmdsv1O9xql2A/4pix98NxjhdsXtazA9agpAKeADf9tG4Za27Gj+ +3DCww/E4iP2X35jZimSm/30QRB6j08uGCqd9vXkkJxtOt63y/IpVOtWX6vMWSTUm +k8xKkaYMP0/IzKNJ1qC/qYEUYpwERBKg9Z+k99E2Ql4kRHdxXUHq6OzY79H18Y+s +GdeM/riNBFsiyxsBBAC54Pxg/8ZWaZX1phGdwfe5mek27SOYpC0AxIDCSOdMeQ6G +HPk38pywl1d+S+KmF/F4Tdi+kWro62O4eG2uc/T8JQuRDUhSjX0Qa51gPzJrUOVT +CFyUkiZ/3ZDhtXkgfuso8ua2ChBgR9Ngr4v43tSqa9y6AK7v0qjxD1x+xMrjXQAR +AQABiQFxBBgBCgAmAhsCFiEEWbIsWTn0HGXVtMFKpoJnbL9TvcYFAlsizTIFCQAN +MRcAv7QgBBkBCgAdFiEEJcoVUVJIk5RWj1c/o62jUpRPICQFAlsiyxsACgkQo62j +UpRPICQq5gQApoWIigZxXFoM0uw4uJBS5JFZtirTANvirZV5RhndwHeMN6JttaBS +YnjyA4+n1D+zB2VqliD2QrsX12KJN6rGOehCtEIClQ1Hodo9nC6kMzzAwW1O8bZs +nRJmXV+bsvD4sidLZLjdwOVa3Cxh6pvq4Uur6a7/UYx121hEY0Qx0s8JEKaCZ2y/ +U73GGi0D/i20VW8AWYAPACm2zMlzExKTOAV01YTQH/3vW0WLrOse53WcIVZga6es +HuO4So0SOEAvxKMe5HpRIu2dJxTvd99Bo9xk9xJU0AoFrO0vNCRnL+5y68xMlODK +lEw5/kl0jeaTBp6xX0HDQOEVOpPGUwWV4Ij2EnvfNDXaE1vK1kffiQFrBBgBCgAg +AhsCFiEEWbIsWTn0HGXVtMFKpoJnbL9TvcYFAlsi0AYAv7QgBBkBCgAdFiEEJcoV +UVJIk5RWj1c/o62jUpRPICQFAlsiyxsACgkQo62jUpRPICQq5gQApoWIigZxXFoM +0uw4uJBS5JFZtirTANvirZV5RhndwHeMN6JttaBSYnjyA4+n1D+zB2VqliD2QrsX +12KJN6rGOehCtEIClQ1Hodo9nC6kMzzAwW1O8bZsnRJmXV+bsvD4sidLZLjdwOVa +3Cxh6pvq4Uur6a7/UYx121hEY0Qx0s8JEKaCZ2y/U73GRl0EAJokkXmy4zKDHWWi +wvK9gi2gQgRkVnu2AiONxJb5vjeLhM/07BRmH6K1o+w3fOeEQp4FjXj1eQ5fPSM6 +Hhwx2CTl9SDnPSBMiKXsEFRkmwQ2AAsQZLmQZvKBkLZYeBiwf+IY621eYDhZfo+G +1dh1WoUCyREZsJQg2YoIpWIcvw+a +=bNRo +-----END PGP PUBLIC KEY BLOCK----- +` + +const onlySubkeyNoPrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1 + +lQCVBFggvocBBAC7vBsHn7MKmS6IiiZNTXdciplVgS9cqVd+RTdIAoyNTcsiV1H0 +GQ3QtodOPeDlQDNoqinqaobd7R9g3m3hS53Nor7yBZkCWQ5x9v9JxRtoAq0sklh1 +I1X2zEqZk2l6YrfBF/64zWrhjnW3j23szkrAIVu0faQXbQ4z56tmZrw11wARAQAB +/gdlAkdOVQG0CUdOVSBEdW1teYi4BBMBAgAiBQJYIL6HAhsDBgsJCAcDAgYVCAIJ +CgsEFgIDAQIeAQIXgAAKCRCd1xxWp1CYAnjGA/9synn6ZXJUKAXQzySgmCZvCIbl +rqBfEpxwLG4Q/lONhm5vthAE0z49I8hj5Gc5e2tLYUtq0o0OCRdCrYHa/efOYWpJ +6RsK99bePOisVzmOABLIgZkcr022kHoMCmkPgv9CUGKP1yqbGl+zzAwQfUjRUmvD +ZIcWLHi2ge4GzPMPi50B2ARYIL6cAQQAxWHnicKejAFcFcF1/3gUSgSH7eiwuBPX +M7vDdgGzlve1o1jbV4tzrjN9jsCl6r0nJPDMfBSzgLr1auNTRG6HpJ4abcOx86ED +Ad+avDcQPZb7z3dPhH/gb2lQejZsHh7bbeOS8WMSzHV3RqCLd8J/xwWPNR5zKn1f +yp4IGfopidMAEQEAAQAD+wQOelnR82+dxyM2IFmZdOB9wSXQeCVOvxSaNMh6Y3lk +UOOkO8Nlic4x0ungQRvjoRs4wBmCuwFK/MII6jKui0B7dn/NDf51i7rGdNGuJXDH +e676By1sEY/NGkc74jr74T+5GWNU64W0vkpfgVmjSAzsUtpmhJMXsc7beBhJdnVl +AgDKCb8hZqj1alcdmLoNvb7ibA3K/V8J462CPD7bMySPBa/uayoFhNxibpoXml2r +oOtHa5izF3b0/9JY97F6rqkdAgD6GdTJ+xmlCoz1Sewoif1I6krq6xoa7gOYpIXo +UL1Afr+LiJeyAnF/M34j/kjIVmPanZJjry0kkjHE5ILjH3uvAf4/6n9np+Th8ujS +YDCIzKwR7639+H+qccOaddCep8Y6KGUMVdD/vTKEx1rMtK+hK/CDkkkxnFslifMJ +kqoqv3WUqCWJAT0EGAECAAkFAlggvpwCGwIAqAkQndccVqdQmAKdIAQZAQIABgUC +WCC+nAAKCRDmGUholQPwvQk+A/9latnSsR5s5/1A9TFki11GzSEnfLbx46FYOdkW +n3YBxZoPQGxNA1vIn8GmouxZInw9CF4jdOJxEdzLlYQJ9YLTLtN5tQEMl/19/bR8 +/qLacAZ9IOezYRWxxZsyn6//jfl7A0Y+FV59d4YajKkEfItcIIlgVBSW6T+TNQT3 +R+EH5HJ/A/4/AN0CmBhhE2vGzTnVU0VPrE4V64pjn1rufFdclgpixNZCuuqpKpoE +VVHn6mnBf4njKjZrAGPs5kfQ+H4NsM7v3Zz4yV6deu9FZc4O6E+V1WJ38rO8eBix +7G2jko106CC6vtxsCPVIzY7aaG3H5pjRtomw+pX7SzrQ7FUg2PGumg== +=F/T0 +-----END PGP PRIVATE KEY BLOCK-----` + +const ecdsaPrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- + +xaUEX1KsSRMIKoZIzj0DAQcCAwTpYqJsnJiFhKKh+8TulWD+lVmerBFNS+Ii +B+nlG3T0xQQ4Sy5eIjJ0CExIQQzi3EElF/Z2l4F3WC5taFA11NgA/gkDCHSS +PThf1M2K4LN8F1MRcvR+sb7i0nH55ojkwuVB1DE6jqIT9m9i+mX1tzjSAS+6 +lPQiweCJvG7xTC7Hs3AzRapf/r1At4TB+v+5G2/CKynNFEJpbGwgPGJpbGxA +aG9tZS5jb20+wncEEBMIAB8FAl9SrEkGCwkHCAMCBBUICgIDFgIBAhkBAhsD +Ah4BAAoJEMpwT3+q3+xqw5UBAMebZN9isEZ1ML+R/jWAAWMwa/knMugrEZ1v +Bl9+ZwM0AQCZdf80/wYY4Nve01qSRFv8OmKswLli3TvDv6FKc4cLz8epBF9S +rEkSCCqGSM49AwEHAgMEAjKnT9b5wY2bf9TpAV3d7OUfPOxKj9c4VzeVzSrH +AtQgo/MuI1cdYVURicV4i76DNjFhQHQFTk7BrC+C2u1yqQMBCAf+CQMIHImA +iYfzQtjgQWSFZYUkCFpbbwhNF0ch+3HNaZkaHCnZRIsWsRnc6FCb6lRQyK9+ +Dq59kHlduE5QgY40894jfmP2JdJHU6nBdYrivbEdbMJhBBgTCAAJBQJfUqxJ +AhsMAAoJEMpwT3+q3+xqUI0BAMykhV08kQ4Ip9Qlbss6Jdufv7YrU0Vd5hou +b5TmiPd0APoDBh3qIic+aLLUcAuG3+Gt1P1AbUlmqV61ozn1WfHxfw== +=KLN8 +-----END PGP PRIVATE KEY BLOCK-----` + +const dsaPrivateKeyWithElGamalSubkey = `-----BEGIN PGP PRIVATE KEY BLOCK----- + +lQOBBF9/MLsRCACeaF6BI0jTgDAs86t8/kXPfwlPvR2MCYzB0BCqAdcq1hV/GTYd +oNmJRna/ZJfsI/vf+d8Nv+EYOQkPheFS1MJVBitkAXjQPgm8i1tQWen1FCWZxqGk +/vwZYF4yo8GhZ+Wxi3w09W9Cp9QM/CTmyE1Xe7wpPBGe+oD+me8Zxjyt8JBS4Qx+ +gvWbfHxfHnggh4pz7U8QkItlLsBNQEdX4R5+zwRN66g2ZSX/shaa/EkVnihUhD7r +njP9I51ORWucTQD6OvgooaNQZCkQ/Se9TzdakwWKS2XSIFXiY/e2E5ZgKI/pfKDU +iA/KessxddPb7nP/05OIJqg9AoDrD4vmehLzAQD+zsUS3LDU1m9/cG4LMsQbT2VK +Te4HqbGIAle+eu/asQf8DDJMrbZpiJZvADum9j0TJ0oep6VdMbzo9RSDKvlLKT9m +kG63H8oDWnCZm1a+HmGq9YIX+JHWmsLXXsFLeEouLzHO+mZo0X28eji3V2T87hyR +MmUM0wFo4k7jK8uVmkDXv3XwNp2uByWxUKZd7EnWmcEZWqIiexJ7XpCS0Pg3tRaI +zxve0SRe/dxfUPnTk/9KQ9hS6DWroBKquL182zx1Fggh4LIWWE2zq+UYn8BI0E8A +rmIDFJdF8ymFQGRrEy6g79NnkPmkrZWsgMRYY65P6v4zLVmqohJKkpm3/Uxa6QAP +CCoPh/JTOvPeCP2bOJH8z4Z9Py3ouMIjofQW8sXqRgf/RIHbh0KsINHrwwZ4gVIr +MK3RofpaYxw1ztPIWb4cMWoWZHH1Pxh7ggTGSBpAhKXkiWw2Rxat8QF5aA7e962c +bLvVv8dqsPrD/RnVJHag89cbPTzjn7gY9elE8EM8ithV3oQkwHTr4avYlpDZsgNd +hUW3YgRwGo31tdzxoG04AcpV2t+07P8XMPr9hsfWs4rHohXPi38Hseu1Ji+dBoWQ +3+1w/HH3o55s+jy4Ruaz78AIrjbmAJq+6rA2mIcCgrhw3DnzuwQAKeBvSeqn9zfS +ZC812osMBVmkycwelpaIh64WZ0vWL3GvdXDctV2kXM+qVpDTLEny0LuiXxrwCKQL +Ev4HAwK9uQBcreDEEud7pfRb8EYP5lzO2ZA7RaIvje6EWAGBvJGMRT0QQE5SGqc7 +Fw5geigBdt+vVyRuNNhg3c2fdn/OBQaYu0J/8AiOogG8EaM8tCFlbGdhbWFsQGRz +YS5jb20gPGVsZ2FtYWxAZHNhLmNvbT6IkAQTEQgAOBYhBI+gnfiHQxB35/Dp0XAQ +aE/rsWC5BQJffzC7AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEHAQaE/r +sWC5A4EA/0GcJmyPtN+Klc7b9sVT3JgKTRnB/URxOJfYJofP0hZLAQCkqyMO+adV +JvbgDH0zaITQWZSSXPqpgMpCA6juTrDsd50CawRffzC7EAgAxFFFSAAEQzWTgKU5 +EBtpxxoPzHqcChawTHRxHxjcELXzmUBS5PzfA1HXSPnNqK/x3Ut5ycC3CsW41Fnt +Gm3706Wu9VFbFZVn55F9lPiplUo61n5pqMvOr1gmuQsdXiTa0t5FRa4TZ2VSiHFw +vdAVSPTUsT4ZxJ1rPyFYRtq1n3pQcvdZowd07r0JnzTMjLLMFYCKhwIowoOC4zqJ +iB8enjwOlpaqBATRm9xpVF7SJkroPF6/B1vdhj7E3c1aJyHlo0PYBAg756sSHWHg +UuLyUQ4TA0hcCVenn/L/aSY2LnbdZB1EBhlYjA7dTCgwIqsQhfQmPkjz6g64A7+Y +HbbrLwADBQgAk14QIEQ+J/VHetpQV/jt2pNsFK1kVK7mXK0spTExaC2yj2sXlHjL +Ie3bO5T/KqmIaBEB5db5fA5xK9cZt79qrQHDKsEqUetUeMUWLBx77zBsus3grIgy +bwDZKseRzQ715pwxquxQlScGoDIBKEh08HpwHkq140eIj3w+MAIfndaZaSCNaxaP +Snky7BQmJ7Wc7qrIwoQP6yrnUqyW2yNi81nJYUhxjChqaFSlwzLs/iNGryBKo0ic +BqVIRjikKHBlwBng6WyrltQo/Vt9GG8w+lqaAVXbJRlaBZJUR+2NKi/YhP3qQse3 +v8fi4kns0gh5LK+2C01RvdX4T49QSExuIf4HAwLJqYIGwadA2uem5v7/765ZtFWV +oL0iZ0ueTJDby4wTFDpLVzzDi/uVcB0ZRFrGOp7w6OYcNYTtV8n3xmli2Q5Trw0c +wZVzvg+ABKWiv7faBjMczIFF8y6WZKOIeAQYEQgAIBYhBI+gnfiHQxB35/Dp0XAQ +aE/rsWC5BQJffzC7AhsMAAoJEHAQaE/rsWC5ZmIA/jhS4r4lClbvjuPWt0Yqdn7R +fss2SPMYvMrrDh42aE0OAQD8xn4G6CN8UtW9xihXOY6FpxiJ/sMc2VaneeUd34oa +4g== +=XZm8 +-----END PGP PRIVATE KEY BLOCK-----` + +// https://tests.sequoia-pgp.org/#Certificate_expiration +// P _ U p +const expiringPrimaryUIDKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +xsDNBF2lnPIBDAC5cL9PQoQLTMuhjbYvb4Ncuuo0bfmgPRFywX53jPhoFf4Zg6mv +/seOXpgecTdOcVttfzC8ycIKrt3aQTiwOG/ctaR4Bk/t6ayNFfdUNxHWk4WCKzdz +/56fW2O0F23qIRd8UUJp5IIlN4RDdRCtdhVQIAuzvp2oVy/LaS2kxQoKvph/5pQ/ +5whqsyroEWDJoSV0yOb25B/iwk/pLUFoyhDG9bj0kIzDxrEqW+7Ba8nocQlecMF3 +X5KMN5kp2zraLv9dlBBpWW43XktjcCZgMy20SouraVma8Je/ECwUWYUiAZxLIlMv +9CurEOtxUw6N3RdOtLmYZS9uEnn5y1UkF88o8Nku890uk6BrewFzJyLAx5wRZ4F0 +qV/yq36UWQ0JB/AUGhHVPdFf6pl6eaxBwT5GXvbBUibtf8YI2og5RsgTWtXfU7eb +SGXrl5ZMpbA6mbfhd0R8aPxWfmDWiIOhBufhMCvUHh1sApMKVZnvIff9/0Dca3wb +vLIwa3T4CyshfT0AEQEAAc0hQm9iIEJhYmJhZ2UgPGJvYkBvcGVucGdwLmV4YW1w +bGU+wsFcBBMBCgCQBYJhesp/BYkEWQPJBQsJCAcCCRD7/MgqAV5zMEcUAAAAAAAe +ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeEOQlNyTLFkc9I/elp+BpY +495V7KatqtDmsyDr+zDAdwYVCgkICwIEFgIDAQIXgAIbAwIeARYhBNGmbhojsYLJ +mA94jPv8yCoBXnMwAABSCQv/av8hKyynMtXVKFuWOGJw0mR8auDm84WdhMFRZg8t +yTJ1L88+Ny4WUAFeqo2j7DU2yPGrm5rmuvzlEedFYFeOWt+A4adz+oumgRd0nsgG +Lf3QYUWQhLWVlz+H7zubgKqSB2A2RqV65S7mTTVro42nb2Mng6rvGWiqeKG5nrXN +/01p1mIBQGR/KnZSqYLzA2Pw2PiJoSkXT26PDz/kiEMXpjKMR6sicV4bKVlEdUvm +pIImIPBHZq1EsKXEyWtWC41w/pc+FofGE+uSFs2aef1vvEHFkj3BHSK8gRcH3kfR +eFroTET8C2q9V1AOELWm+Ys6PzGzF72URK1MKXlThuL4t4LjvXWGNA78IKW+/RQH +DzK4U0jqSO0mL6qxqVS5Ij6jjL6OTrVEGdtDf5n0vI8tcUTBKtVqYAYk+t2YGT05 +ayxALtb7viVKo8f10WEcCuKshn0gdsEFMRZQzJ89uQIY3R3FbsdRCaE6OEaDgKMQ +UTFROyfhthgzRKbRxfcplMUCzsDNBF2lnPIBDADWML9cbGMrp12CtF9b2P6z9TTT +74S8iyBOzaSvdGDQY/sUtZXRg21HWamXnn9sSXvIDEINOQ6A9QxdxoqWdCHrOuW3 +ofneYXoG+zeKc4dC86wa1TR2q9vW+RMXSO4uImA+Uzula/6k1DogDf28qhCxMwG/ +i/m9g1c/0aApuDyKdQ1PXsHHNlgd/Dn6rrd5y2AObaifV7wIhEJnvqgFXDN2RXGj +LeCOHV4Q2WTYPg/S4k1nMXVDwZXrvIsA0YwIMgIT86Rafp1qKlgPNbiIlC1g9RY/ +iFaGN2b4Ir6GDohBQSfZW2+LXoPZuVE/wGlQ01rh827KVZW4lXvqsge+wtnWlszc +selGATyzqOK9LdHPdZGzROZYI2e8c+paLNDdVPL6vdRBUnkCaEkOtl1mr2JpQi5n +TU+gTX4IeInC7E+1a9UDF/Y85ybUz8XV8rUnR76UqVC7KidNepdHbZjjXCt8/Zo+ +Tec9JNbYNQB/e9ExmDntmlHEsSEQzFwzj8sxH48AEQEAAcLA9gQYAQoAIBYhBNGm +bhojsYLJmA94jPv8yCoBXnMwBQJdpZzyAhsMAAoJEPv8yCoBXnMw6f8L/26C34dk +jBffTzMj5Bdzm8MtF67OYneJ4TQMw7+41IL4rVcSKhIhk/3Ud5knaRtP2ef1+5F6 +6h9/RPQOJ5+tvBwhBAcUWSupKnUrdVaZQanYmtSxcVV2PL9+QEiNN3tzluhaWO// +rACxJ+K/ZXQlIzwQVTpNhfGzAaMVV9zpf3u0k14itcv6alKY8+rLZvO1wIIeRZLm +U0tZDD5HtWDvUV7rIFI1WuoLb+KZgbYn3OWjCPHVdTrdZ2CqnZbG3SXw6awH9bzR +LV9EXkbhIMez0deCVdeo+wFFklh8/5VK2b0vk/+wqMJxfpa1lHvJLobzOP9fvrsw +sr92MA2+k901WeISR7qEzcI0Fdg8AyFAExaEK6VyjP7SXGLwvfisw34OxuZr3qmx +1Sufu4toH3XrB7QJN8XyqqbsGxUCBqWif9RSK4xjzRTe56iPeiSJJOIciMP9i2ld +I+KgLycyeDvGoBj0HCLO3gVaBe4ubVrj5KjhX2PVNEJd3XZRzaXZE2aAMQ== +=AmgT +-----END PGP PUBLIC KEY BLOCK-----` + +const rsa2048PrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Comment: gpg (GnuPG) 2.2.27 with libgcrypt 1.9.4 + +lQPGBGL07P0BCADL0etN8efyAXA6sL2WfQvHe5wEKYXPWeN2+jiqSppfeRZAOlzP +kZ3U+cloeJriplYvVJwI3ID2aw52Z/TRn8iKRP5eOUFrEgcgl06lazLtOndK7o7p +oBV5mLtHEirFHm6W61fNt10jzM0jx0PV6nseLhFB2J42F1cmU/aBgFo41wjLSZYr +owR+v+O9S5sUXblQF6sEDcY01sBEu09zrIgT49VFwQ1Cvdh9XZEOTQBfdiugoj5a +DS3fAqAka3r1VoQK4eR7/upnYSgSACGeaQ4pUelKku5rpm50gdWTY8ppq0k9e1eT +y2x0OQcW3hWE+j4os1ca0ZEADMdqr/99MOxrABEBAAH+BwMCJWxU4VOZOJ7/I6vX +FxdfBhIBEXlJ52FM3S/oYtXqLhkGyrtmZOeEazVvUtuCe3M3ScHI8xCthcmE8E0j +bi+ZEHPS2NiBZtgHFF27BLn7zZuTc+oD5WKduZdK3463egnyThTqIIMl25WZBuab +k5ycwYrWwBH0jfA4gwJ13ai4pufKC2RM8qIu6YAVPglYBKFLKGvvJHa5vI+LuA0E +K+k35hIic7yVUcQneNnAF2598X5yWiieYnOZpmHlRw1zfbMwOJr3ZNj2v94u7b+L +sTa/1Uv9887Vb6sJp0c2Sh4cwEccoPYkvMqFn3ZrJUr3UdDu1K2vWohPtswzhrYV ++RdPZE5RLoCQufKvlPezk0Pzhzb3bBU7XjUbdGY1nH/EyQeBNp+Gw6qldKvzcBaB +cyOK1c6hPSszpJX93m5UxCN55IeifmcNjmbDh8vGCCdajy6d56qV2n4F3k7vt1J1 +0UlxIGhqijJoaTCX66xjLMC6VXkSz6aHQ35rnXosm/cqPcQshsZTdlfSyWkorfdr +4Hj8viBER26mjYurTMLBKDtUN724ZrR0Ev5jorX9uoKlgl87bDZHty2Ku2S+vR68 +VAvnj6Fi1BYNclnDoqxdRB2z5T9JbWE52HuG83/QsplhEqXxESDxriTyTHMbNxEe +88soVCDh4tgflZFa2ucUr6gEKJKij7jgahARnyaXfPZlQBUAS1YUeILYmN+VR+M/ +sHENpwDWc7TInn8VN638nJV+ScZGMih3AwWZTIoiLju3MMt1K0YZ3NuiqwGH4Jwg +/BbEdTWeCci9y3NEQHQ3uZZ5p6j2CwFVlK11idemCMvAiTVxF+gKdaLMkeCwKxru +J3YzhKEo+iDVYbPYBYizx/EHBn2U5kITQ5SBXzjTaaFMNZJEf9JYsL1ybPB6HOFY +VNVB2KT8CGVwtCJHb2xhbmcgR29waGVyIDxnb2xhbmdAZXhhbXBsZS5vcmc+iQFO +BBMBCgA4FiEEC6K7U7f4qesybTnqSkra7gHusm0FAmL07P0CGwMFCwkIBwIGFQoJ +CAsCBBYCAwECHgECF4AACgkQSkra7gHusm1MvwgAxpClWkeSqIhMQfbiuz0+lOkE +89y1DCFw8bHjZoUf4/4K8hFA3dGkk+q72XFgiyaCpfXxMt6Gi+dN47t+tTv9NIqC +sukbaoJBmJDhN6+djmJOgOYy+FWsW2LAk2LOwKYulpnBZdcA5rlMAhBg7gevQpF+ +ruSU69P7UUaFJl/DC7hDmaIcj+4cjBE/HO26SnVQjoTfjZT82rDh1Wsuf8LnkJUk +b3wezBLpXKjDvdHikdv4gdlR4AputVM38aZntYYglh/EASo5TneyZ7ZscdLNRdcF +r5O2fKqrOJLOdaoYRFZZWOvP5GtEVFDU7WGivOSVfiszBE0wZR3dgZRJipHCXJ0D +xgRi9Oz9AQgAtMJcJqLLVANJHl90tWuoizDkm+Imcwq2ubQAjpclnNrODnDK+7o4 +pBsWmXbZSdkC4gY+LhOQA6bPDD0JEHM58DOnrm49BddxXAyK0HPsk4sGGt2SS86B +OawWNdfJVyqw4bAiHWDmQg4PcjBbt3ocOIxAR6I5kBSiQVxuGQs9T+Zvg3G1r3Or +fS6DzlgY3HFUML5YsGH4lOxNSOoKAP68GIH/WNdUZ+feiRg9knIib6I3Hgtf5eO8 +JRH7aWE/TD7eNu36bLLjT5TZPq5r6xaD2plbtPOyXbNPWs9qI1yG+VnErfaLY0w8 +Qo0aqzbgID+CTZVomXSOpOcQseaFKw8ZfQARAQAB/gcDArha6+/+d4OY/w9N32K9 +hFNYt4LufTETMQ+k/sBeaMuAVzmT47DlAXzkrZhGW4dZOtXMu1rXaUwHlqkhEyzL +L4MYEWVXfD+LbZNEK3MEFss6RK+UAMeT/PTV9aA8cXQVPcSJYzfBXHQ1U1hnOgrO +apn92MN8RmkhX8wJLyeWTMMuP4lXByJMmmGo8WvifeRD2kFY4y0WVBDAXJAV4Ljf +Di/bBiwoc5a+gxHuZT2W9ZSxBQJNXdt4Un2IlyZuo58s5MLx2N0EaNJ8PwRUE6fM +RZYO8aZCEPUtINE4njbvsWOMCtrblsMPwZ1B0SiIaWmLaNyGdCNKea+fCIW7kasC +JYMhnLumpUTXg5HNexkCsl7ABWj0PYBflOE61h8EjWpnQ7JBBVKS2ua4lMjwHRX7 +5o5yxym9k5UZNFdGoXVL7xpizCcdGawxTJvwhs3vBqu1ZWYCegOAZWDrOkCyhUpq +8uKMROZFbn+FwE+7tjt+v2ed62FVEvD6g4V3ThCA6mQqeOARfJWN8GZY8BDm8lht +crOXriUkrx+FlrgGtm2CkwjW5/9Xd7AhFpHnQdFeozOHyq1asNSgJF9sNi9Lz94W +skQSVRi0IExxSXYGI3Y0nnAZUe2BAQflYPJdEveSr3sKlUqXiETTA1VXsTPK3kOC +92CbLzj/Hz199jZvywwyu53I+GKMpF42rMq7zxr2oa61YWY4YE/GDezwwys/wLx/ +QpCW4X3ppI7wJjCSSqEV0baYZSSli1ayheS6dxi8QnSpX1Bmpz6gU7m/M9Sns+hl +J7ZvgpjCAiV7KJTjtclr5/S02zP78LTVkoTWoz/6MOTROwaP63VBUXX8pbJhf/vu +DLmNnDk8joMJxoDXWeNU0EnNl4hP7Z/jExRBOEO4oAnUf/Sf6gCWQhL5qcajtg6w +tGv7vx3f2IkBNgQYAQoAIBYhBAuiu1O3+KnrMm056kpK2u4B7rJtBQJi9Oz9AhsM +AAoJEEpK2u4B7rJt6lgIAMBWqP4BCOGnQXBbgJ0+ACVghpkFUXZTb/tXJc8UUvTM +8uov6k/RsqDGZrvhhufD7Wwt7j9v7dD7VPp7bPyjVWyimglQzWguTUUqLDGlstYH +5uYv1pzma0ZsAGNqFeGlTLsKOSGKFMH4rB2KfN2n51L8POvtp1y7GKZQbWIWneaB +cZr3BINU5GMvYYU7pAYcoR+mJPdJx5Up3Ocn+bn8Tu1sy9C/ArtCQucazGnoE9u1 +HhNLrh0CdzzX7TNH6TQ8LwPOvq0K5l/WqbN9lE0WBBhMv2HydxhluO8AhU+A5GqC +C+wET7nVDnhoOm/fstIeb7/LN7OYejKPeHdFBJEL9GA= +=u442 +-----END PGP PRIVATE KEY BLOCK-----` + +const curve25519PrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Comment: gpg (GnuPG) 2.2.27 with libgcrypt 1.9.4 + +lFgEYvTtQBYJKwYBBAHaRw8BAQdAxsNXLbrk5xOjpO24VhOMvQ0/F+JcyIkckMDH +X3FIGxcAAQDFOlunZWYuPsCx5JLp78vKqUTfgef9TGG4oD6I/Sa0zBMstCJHb2xh +bmcgR29waGVyIDxnb2xhbmdAZXhhbXBsZS5vcmc+iJAEExYIADgWIQSFQHEOazmo +h1ldII4MvfnLQ4JBNwUCYvTtQAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK +CRAMvfnLQ4JBN5yeAQCKdry8B5ScCPrev2+UByMCss7Sdu5RhomCFsHdNPLcKAEA +8ugei+1owHsV+3cGwWWzKk6sLa8ZN87i3SKuOGp9DQycXQRi9O1AEgorBgEEAZdV +AQUBAQdA5CubPp8l7lrVQ25h7Hx5XN2C8xanRnnpcjzEooCaEA0DAQgHAAD/Rpc+ +sOZUXrFk9HOWB1XU41LoWbDBoG8sP8RWAVYwD5AQRYh4BBgWCAAgFiEEhUBxDms5 +qIdZXSCODL35y0OCQTcFAmL07UACGwwACgkQDL35y0OCQTcvdwEA7lb5g/YisrEf +iq660uwMGoepLUfvtqKzuQ6heYe83y0BAN65Ffg5HYOJzUEi0kZQRf7OhdtuL2kJ +SRXn8DmCTfEB +=cELM +-----END PGP PRIVATE KEY BLOCK-----` + +const curve448PrivateKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Comment: C1DB 65D5 80D7 B922 7254 4B1E A699 9895 FABA CE52 + +xYUEYV2UmRYDK2VxAc9AFyxgh5xnSbyt50TWl558mw9xdMN+/UBLr5+UMP8IsrvV +MdXuTIE8CyaUQKSotHtH2RkYEXj5nsMAAAHPQIbTMSzjIWug8UFECzAex5FHgAgH +gYF3RK+TS8D24wX8kOu2C/NoVxwGY+p+i0JHaB+7yljriSKAGxs6wsBEBB8WCgCD +BYJhXZSZBYkFpI+9AwsJBwkQppmYlfq6zlJHFAAAAAAAHgAgc2FsdEBub3RhdGlv +bnMuc2VxdW9pYS1wZ3Aub3Jn5wSpIutJ5HncJWk4ruUV8GzQF390rR5+qWEAnAoY +akcDFQoIApsBAh4BFiEEwdtl1YDXuSJyVEseppmYlfq6zlIAALzdA5dA/fsgYg/J +qaQriYKaPUkyHL7EB3BXhV2d1h/gk+qJLvXQuU2WEJ/XSs3GrsBRiiZwvPH4o+7b +mleAxjy5wpS523vqrrBR2YZ5FwIku7WS4litSdn4AtVam/TlLdMNIf41CtFeZKBe +c5R5VNdQy8y7qy8AAADNEUN1cnZlNDQ4IE9wdGlvbiA4wsBHBBMWCgCGBYJhXZSZ +BYkFpI+9AwsJBwkQppmYlfq6zlJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx +dW9pYS1wZ3Aub3JnD55UsYMzE6OACP+mgw5zvT+BBgol8/uFQjHg4krjUCMDFQoI +ApkBApsBAh4BFiEEwdtl1YDXuSJyVEseppmYlfq6zlIAAPQJA5dA0Xqwzn/0uwCq +RlsOVCB3f5NOj1exKnlBvRw0xT1VBee1yxvlUt5eIAoCxWoRlWBJob3TTkhm9AEA +8dyhwPmyGfWHzPw5NFG3xsXrZdNXNvit9WMVAPcmsyR7teXuDlJItxRAdJJc/qfJ +YVbBFoaNrhYAAADHhQRhXZSZFgMrZXEBz0BL7THZ9MnCLfSPJ1FMLim9eGkQ3Bfn +M3he5rOwO3t14QI1LjI96OjkeJipMgcFAmEP1Bq/ZHGO7oAAAc9AFnE8iNBaT3OU +EFtxkmWHXtdaYMmGGRdopw9JPXr/UxuunDln5o9dxPxf7q7z26zXrZen+qed/Isa +HsDCwSwEGBYKAWsFgmFdlJkFiQWkj70JEKaZmJX6us5SRxQAAAAAAB4AIHNhbHRA +bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxREUizdTcepBzgSMOv2VWQCWbl++3CZ +EbgAWDryvSsyApsCwDGgBBkWCgBvBYJhXZSZCRBKo3SL4S5djkcUAAAAAAAeACBz +YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmemoGTDjmNQiIzw6HOEddvS0OB7 +UZ/P07jM/EVmnYxTlBYhBAxsnkGpx1UCiH6gUUqjdIvhLl2OAAALYQOXQAMB1oKq +OWxSFmvmgCKNcbAAyA3piF5ERIqs4z07oJvqDYrOWt75UsEIH/04gU/vHc4EmfG2 +JDLJgOLlyTUPkL/08f0ydGZPofFQBhn8HkuFFjnNtJ5oz3GIP4cdWMQFaUw0uvjb +PM9Tm3ptENGd6Ts1AAAAFiEEwdtl1YDXuSJyVEseppmYlfq6zlIAAGpTA5dATR6i +U2GrpUcQgpG+JqfAsGmF4yAOhgFxc1UfidFk3nTup3fLgjipkYY170WLRNbyKkVO +Sodx93GAs58rizO1acDAWiLq3cyEPBFXbyFThbcNPcLl+/77Uk/mgkYrPQFAQWdK +1kSRm4SizDBK37K8ChAAAADHhwRhXZSZEgMrZW8Bx0DMhzvhQo+OsXeqQ6QVw4sF +CaexHh6rLohh7TzL3hQSjoJ27fV6JBkIWdn0LfrMlJIDbSv2SLdlgQMBCgkAAcdA +MO7Dc1myF6Co1fAH+EuP+OxhxP/7V6ljuSCZENDfA49tQkzTta+PniG+pOVB2LHb +huyaKBkqiaogo8LAOQQYFgoAeAWCYV2UmQWJBaSPvQkQppmYlfq6zlJHFAAAAAAA +HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEjBMQAmc/2u45u5FQGmB +QAytjSG2LM3JQN+PPVl5vEkCmwwWIQTB22XVgNe5InJUSx6mmZiV+rrOUgAASdYD +l0DXEHQ9ykNP2rZP35ET1dmiFagFtTj/hLQcWlg16LqvJNGqOgYXuqTerbiOOt02 +XLCBln+wdewpU4ChEffMUDRBfqfQco/YsMqWV7bHJHAO0eC/DMKCjyU90xdH7R/d +QgqsfguR1PqPuJxpXV4bSr6CGAAAAA== +=MSvh +-----END PGP PRIVATE KEY BLOCK-----` + +const keyWithNotation = `-----BEGIN PGP PRIVATE KEY BLOCK----- + +xVgEY9gIshYJKwYBBAHaRw8BAQdAF25fSM8OpFlXZhop4Qpqo5ywGZ4jgWlR +ppjhIKDthREAAQC+LFpzFcMJYcjxGKzBGHN0Px2jU4d04YSRnFAik+lVVQ6u +zRdUZXN0IDx0ZXN0QGV4YW1wbGUuY29tPsLACgQQFgoAfAUCY9gIsgQLCQcI +CRD/utJOCym8pR0UgAAAAAAQAAR0ZXh0QGV4YW1wbGUuY29tdGVzdB8UAAAA +AAASAARiaW5hcnlAZXhhbXBsZS5jb20AAQIDAxUICgQWAAIBAhkBAhsDAh4B +FiEEEMCQTUVGKgCX5rDQ/7rSTgspvKUAAPl5AP9Npz90LxzrB97Qr2DrGwfG +wuYn4FSYwtuPfZHHeoIabwD/QEbvpQJ/NBb9EAZuow4Rirlt1yv19mmnF+j5 +8yUzhQjHXQRj2AiyEgorBgEEAZdVAQUBAQdARXAo30DmKcyUg6co7OUm0RNT +z9iqFbDBzA8A47JEt1MDAQgHAAD/XKK3lBm0SqMR558HLWdBrNG6NqKuqb5X +joCML987ZNgRD8J4BBgWCAAqBQJj2AiyCRD/utJOCym8pQIbDBYhBBDAkE1F +RioAl+aw0P+60k4LKbylAADRxgEAg7UfBDiDPp5LHcW9D+SgFHk6+GyEU4ev +VppQxdtxPvAA/34snHBX7Twnip1nMt7P4e2hDiw/hwQ7oqioOvc6jMkP +=Z8YJ +-----END PGP PRIVATE KEY BLOCK----- +` diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_config.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_config.go new file mode 100644 index 0000000000000..fec41a0e73f7c --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_config.go @@ -0,0 +1,67 @@ +// Copyright (C) 2019 ProtonTech AG + +package packet + +import "math/bits" + +// CipherSuite contains a combination of Cipher and Mode +type CipherSuite struct { + // The cipher function + Cipher CipherFunction + // The AEAD mode of operation. + Mode AEADMode +} + +// AEADConfig collects a number of AEAD parameters along with sensible defaults. +// A nil AEADConfig is valid and results in all default values. +type AEADConfig struct { + // The AEAD mode of operation. + DefaultMode AEADMode + // Amount of octets in each chunk of data + ChunkSize uint64 +} + +// Mode returns the AEAD mode of operation. +func (conf *AEADConfig) Mode() AEADMode { + // If no preference is specified, OCB is used (which is mandatory to implement). + if conf == nil || conf.DefaultMode == 0 { + return AEADModeOCB + } + + mode := conf.DefaultMode + if mode != AEADModeEAX && mode != AEADModeOCB && mode != AEADModeGCM { + panic("AEAD mode unsupported") + } + return mode +} + +// ChunkSizeByte returns the byte indicating the chunk size. The effective +// chunk size is computed with the formula uint64(1) << (chunkSizeByte + 6) +// limit to 16 = 4 MiB +// https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-5.13.2 +func (conf *AEADConfig) ChunkSizeByte() byte { + if conf == nil || conf.ChunkSize == 0 { + return 12 // 1 << (12 + 6) == 262144 bytes + } + + chunkSize := conf.ChunkSize + exponent := bits.Len64(chunkSize) - 1 + switch { + case exponent < 6: + exponent = 6 + case exponent > 16: + exponent = 16 + } + + return byte(exponent - 6) +} + +// decodeAEADChunkSize returns the effective chunk size. In 32-bit systems, the +// maximum returned value is 1 << 30. +func decodeAEADChunkSize(c byte) int { + size := uint64(1 << (c + 6)) + if size != uint64(int(size)) { + return 1 << 30 + } + return int(size) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_crypter.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_crypter.go new file mode 100644 index 0000000000000..cee83bdc7a175 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_crypter.go @@ -0,0 +1,264 @@ +// Copyright (C) 2019 ProtonTech AG + +package packet + +import ( + "bytes" + "crypto/cipher" + "encoding/binary" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" +) + +// aeadCrypter is an AEAD opener/sealer, its configuration, and data for en/decryption. +type aeadCrypter struct { + aead cipher.AEAD + chunkSize int + initialNonce []byte + associatedData []byte // Chunk-independent associated data + chunkIndex []byte // Chunk counter + packetTag packetType // SEIP packet (v2) or AEAD Encrypted Data packet + bytesProcessed int // Amount of plaintext bytes encrypted/decrypted + buffer bytes.Buffer // Buffered bytes across chunks +} + +// computeNonce takes the incremental index and computes an eXclusive OR with +// the least significant 8 bytes of the receivers' initial nonce (see sec. +// 5.16.1 and 5.16.2). It returns the resulting nonce. +func (wo *aeadCrypter) computeNextNonce() (nonce []byte) { + if wo.packetTag == packetTypeSymmetricallyEncryptedIntegrityProtected { + return append(wo.initialNonce, wo.chunkIndex...) + } + + nonce = make([]byte, len(wo.initialNonce)) + copy(nonce, wo.initialNonce) + offset := len(wo.initialNonce) - 8 + for i := 0; i < 8; i++ { + nonce[i+offset] ^= wo.chunkIndex[i] + } + return +} + +// incrementIndex performs an integer increment by 1 of the integer represented by the +// slice, modifying it accordingly. +func (wo *aeadCrypter) incrementIndex() error { + index := wo.chunkIndex + if len(index) == 0 { + return errors.AEADError("Index has length 0") + } + for i := len(index) - 1; i >= 0; i-- { + if index[i] < 255 { + index[i]++ + return nil + } + index[i] = 0 + } + return errors.AEADError("cannot further increment index") +} + +// aeadDecrypter reads and decrypts bytes. It buffers extra decrypted bytes when +// necessary, similar to aeadEncrypter. +type aeadDecrypter struct { + aeadCrypter // Embedded ciphertext opener + reader io.Reader // 'reader' is a partialLengthReader + peekedBytes []byte // Used to detect last chunk + eof bool +} + +// Read decrypts bytes and reads them into dst. It decrypts when necessary and +// buffers extra decrypted bytes. It returns the number of bytes copied into dst +// and an error. +func (ar *aeadDecrypter) Read(dst []byte) (n int, err error) { + // Return buffered plaintext bytes from previous calls + if ar.buffer.Len() > 0 { + return ar.buffer.Read(dst) + } + + // Return EOF if we've previously validated the final tag + if ar.eof { + return 0, io.EOF + } + + // Read a chunk + tagLen := ar.aead.Overhead() + cipherChunkBuf := new(bytes.Buffer) + _, errRead := io.CopyN(cipherChunkBuf, ar.reader, int64(ar.chunkSize+tagLen)) + cipherChunk := cipherChunkBuf.Bytes() + if errRead != nil && errRead != io.EOF { + return 0, errRead + } + decrypted, errChunk := ar.openChunk(cipherChunk) + if errChunk != nil { + return 0, errChunk + } + + // Return decrypted bytes, buffering if necessary + if len(dst) < len(decrypted) { + n = copy(dst, decrypted[:len(dst)]) + ar.buffer.Write(decrypted[len(dst):]) + } else { + n = copy(dst, decrypted) + } + + // Check final authentication tag + if errRead == io.EOF { + errChunk := ar.validateFinalTag(ar.peekedBytes) + if errChunk != nil { + return n, errChunk + } + ar.eof = true // Mark EOF for when we've returned all buffered data + } + return +} + +// Close is noOp. The final authentication tag of the stream was already +// checked in the last Read call. In the future, this function could be used to +// wipe the reader and peeked, decrypted bytes, if necessary. +func (ar *aeadDecrypter) Close() (err error) { + return nil +} + +// openChunk decrypts and checks integrity of an encrypted chunk, returning +// the underlying plaintext and an error. It accesses peeked bytes from next +// chunk, to identify the last chunk and decrypt/validate accordingly. +func (ar *aeadDecrypter) openChunk(data []byte) ([]byte, error) { + tagLen := ar.aead.Overhead() + // Restore carried bytes from last call + chunkExtra := append(ar.peekedBytes, data...) + // 'chunk' contains encrypted bytes, followed by an authentication tag. + chunk := chunkExtra[:len(chunkExtra)-tagLen] + ar.peekedBytes = chunkExtra[len(chunkExtra)-tagLen:] + + adata := ar.associatedData + if ar.aeadCrypter.packetTag == packetTypeAEADEncrypted { + adata = append(ar.associatedData, ar.chunkIndex...) + } + + nonce := ar.computeNextNonce() + plainChunk, err := ar.aead.Open(nil, nonce, chunk, adata) + if err != nil { + return nil, err + } + ar.bytesProcessed += len(plainChunk) + if err = ar.aeadCrypter.incrementIndex(); err != nil { + return nil, err + } + return plainChunk, nil +} + +// Checks the summary tag. It takes into account the total decrypted bytes into +// the associated data. It returns an error, or nil if the tag is valid. +func (ar *aeadDecrypter) validateFinalTag(tag []byte) error { + // Associated: tag, version, cipher, aead, chunk size, ... + amountBytes := make([]byte, 8) + binary.BigEndian.PutUint64(amountBytes, uint64(ar.bytesProcessed)) + + adata := ar.associatedData + if ar.aeadCrypter.packetTag == packetTypeAEADEncrypted { + // ... index ... + adata = append(ar.associatedData, ar.chunkIndex...) + } + + // ... and total number of encrypted octets + adata = append(adata, amountBytes...) + nonce := ar.computeNextNonce() + _, err := ar.aead.Open(nil, nonce, tag, adata) + if err != nil { + return err + } + return nil +} + +// aeadEncrypter encrypts and writes bytes. It encrypts when necessary according +// to the AEAD block size, and buffers the extra encrypted bytes for next write. +type aeadEncrypter struct { + aeadCrypter // Embedded plaintext sealer + writer io.WriteCloser // 'writer' is a partialLengthWriter +} + +// Write encrypts and writes bytes. It encrypts when necessary and buffers extra +// plaintext bytes for next call. When the stream is finished, Close() MUST be +// called to append the final tag. +func (aw *aeadEncrypter) Write(plaintextBytes []byte) (n int, err error) { + // Append plaintextBytes to existing buffered bytes + n, err = aw.buffer.Write(plaintextBytes) + if err != nil { + return n, err + } + // Encrypt and write chunks + for aw.buffer.Len() >= aw.chunkSize { + plainChunk := aw.buffer.Next(aw.chunkSize) + encryptedChunk, err := aw.sealChunk(plainChunk) + if err != nil { + return n, err + } + _, err = aw.writer.Write(encryptedChunk) + if err != nil { + return n, err + } + } + return +} + +// Close encrypts and writes the remaining buffered plaintext if any, appends +// the final authentication tag, and closes the embedded writer. This function +// MUST be called at the end of a stream. +func (aw *aeadEncrypter) Close() (err error) { + // Encrypt and write a chunk if there's buffered data left, or if we haven't + // written any chunks yet. + if aw.buffer.Len() > 0 || aw.bytesProcessed == 0 { + plainChunk := aw.buffer.Bytes() + lastEncryptedChunk, err := aw.sealChunk(plainChunk) + if err != nil { + return err + } + _, err = aw.writer.Write(lastEncryptedChunk) + if err != nil { + return err + } + } + // Compute final tag (associated data: packet tag, version, cipher, aead, + // chunk size... + adata := aw.associatedData + + if aw.aeadCrypter.packetTag == packetTypeAEADEncrypted { + // ... index ... + adata = append(aw.associatedData, aw.chunkIndex...) + } + + // ... and total number of encrypted octets + amountBytes := make([]byte, 8) + binary.BigEndian.PutUint64(amountBytes, uint64(aw.bytesProcessed)) + adata = append(adata, amountBytes...) + + nonce := aw.computeNextNonce() + finalTag := aw.aead.Seal(nil, nonce, nil, adata) + _, err = aw.writer.Write(finalTag) + if err != nil { + return err + } + return aw.writer.Close() +} + +// sealChunk Encrypts and authenticates the given chunk. +func (aw *aeadEncrypter) sealChunk(data []byte) ([]byte, error) { + if len(data) > aw.chunkSize { + return nil, errors.AEADError("chunk exceeds maximum length") + } + if aw.associatedData == nil { + return nil, errors.AEADError("can't seal without headers") + } + adata := aw.associatedData + if aw.aeadCrypter.packetTag == packetTypeAEADEncrypted { + adata = append(aw.associatedData, aw.chunkIndex...) + } + + nonce := aw.computeNextNonce() + encrypted := aw.aead.Seal(nil, nonce, data, adata) + aw.bytesProcessed += len(data) + if err := aw.aeadCrypter.incrementIndex(); err != nil { + return nil, err + } + return encrypted, nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_encrypted.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_encrypted.go new file mode 100644 index 0000000000000..98bd876bf29ba --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/aead_encrypted.go @@ -0,0 +1,96 @@ +// Copyright (C) 2019 ProtonTech AG + +package packet + +import ( + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" +) + +// AEADEncrypted represents an AEAD Encrypted Packet. +// See https://www.ietf.org/archive/id/draft-koch-openpgp-2015-rfc4880bis-00.html#name-aead-encrypted-data-packet-t +type AEADEncrypted struct { + cipher CipherFunction + mode AEADMode + chunkSizeByte byte + Contents io.Reader // Encrypted chunks and tags + initialNonce []byte // Referred to as IV in RFC4880-bis +} + +// Only currently defined version +const aeadEncryptedVersion = 1 + +func (ae *AEADEncrypted) parse(buf io.Reader) error { + headerData := make([]byte, 4) + if n, err := io.ReadFull(buf, headerData); n < 4 { + return errors.AEADError("could not read aead header:" + err.Error()) + } + // Read initial nonce + mode := AEADMode(headerData[2]) + nonceLen := mode.IvLength() + + // This packet supports only EAX and OCB + // https://www.ietf.org/archive/id/draft-koch-openpgp-2015-rfc4880bis-00.html#name-aead-encrypted-data-packet-t + if nonceLen == 0 || mode > AEADModeOCB { + return errors.AEADError("unknown mode") + } + + initialNonce := make([]byte, nonceLen) + if n, err := io.ReadFull(buf, initialNonce); n < nonceLen { + return errors.AEADError("could not read aead nonce:" + err.Error()) + } + ae.Contents = buf + ae.initialNonce = initialNonce + c := headerData[1] + if _, ok := algorithm.CipherById[c]; !ok { + return errors.UnsupportedError("unknown cipher: " + string(c)) + } + ae.cipher = CipherFunction(c) + ae.mode = mode + ae.chunkSizeByte = headerData[3] + return nil +} + +// Decrypt returns a io.ReadCloser from which decrypted bytes can be read, or +// an error. +func (ae *AEADEncrypted) Decrypt(ciph CipherFunction, key []byte) (io.ReadCloser, error) { + return ae.decrypt(key) +} + +// decrypt prepares an aeadCrypter and returns a ReadCloser from which +// decrypted bytes can be read (see aeadDecrypter.Read()). +func (ae *AEADEncrypted) decrypt(key []byte) (io.ReadCloser, error) { + blockCipher := ae.cipher.new(key) + aead := ae.mode.new(blockCipher) + // Carry the first tagLen bytes + tagLen := ae.mode.TagLength() + peekedBytes := make([]byte, tagLen) + n, err := io.ReadFull(ae.Contents, peekedBytes) + if n < tagLen || (err != nil && err != io.EOF) { + return nil, errors.AEADError("Not enough data to decrypt:" + err.Error()) + } + chunkSize := decodeAEADChunkSize(ae.chunkSizeByte) + return &aeadDecrypter{ + aeadCrypter: aeadCrypter{ + aead: aead, + chunkSize: chunkSize, + initialNonce: ae.initialNonce, + associatedData: ae.associatedData(), + chunkIndex: make([]byte, 8), + packetTag: packetTypeAEADEncrypted, + }, + reader: ae.Contents, + peekedBytes: peekedBytes}, nil +} + +// associatedData for chunks: tag, version, cipher, mode, chunk size byte +func (ae *AEADEncrypted) associatedData() []byte { + return []byte{ + 0xD4, + aeadEncryptedVersion, + byte(ae.cipher), + byte(ae.mode), + ae.chunkSizeByte} +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/compressed.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/compressed.go similarity index 95% rename from vendor/golang.org/x/crypto/openpgp/packet/compressed.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/compressed.go index 353f945247cfd..2f5cad71dab7b 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/compressed.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/compressed.go @@ -8,7 +8,7 @@ import ( "compress/bzip2" "compress/flate" "compress/zlib" - "golang.org/x/crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/errors" "io" "strconv" ) @@ -47,6 +47,8 @@ func (c *Compressed) parse(r io.Reader) error { } switch buf[0] { + case 0: + c.Body = r case 1: c.Body = flate.NewReader(r) case 2: @@ -60,7 +62,7 @@ func (c *Compressed) parse(r io.Reader) error { return err } -// compressedWriteCloser represents the serialized compression stream +// compressedWriterCloser represents the serialized compression stream // header and the compressor. Its Close() method ensures that both the // compressor and serialized stream header are closed. Its Write() // method writes to the compressor. diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config.go new file mode 100644 index 0000000000000..04994bec97ba3 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/config.go @@ -0,0 +1,248 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "crypto/rand" + "io" + "math/big" + "time" + + "github.com/ProtonMail/go-crypto/openpgp/s2k" +) + +// Config collects a number of parameters along with sensible defaults. +// A nil *Config is valid and results in all default values. +type Config struct { + // Rand provides the source of entropy. + // If nil, the crypto/rand Reader is used. + Rand io.Reader + // DefaultHash is the default hash function to be used. + // If zero, SHA-256 is used. + DefaultHash crypto.Hash + // DefaultCipher is the cipher to be used. + // If zero, AES-128 is used. + DefaultCipher CipherFunction + // Time returns the current time as the number of seconds since the + // epoch. If Time is nil, time.Now is used. + Time func() time.Time + // DefaultCompressionAlgo is the compression algorithm to be + // applied to the plaintext before encryption. If zero, no + // compression is done. + DefaultCompressionAlgo CompressionAlgo + // CompressionConfig configures the compression settings. + CompressionConfig *CompressionConfig + // S2K (String to Key) config, used for key derivation in the context of secret key encryption + // and password-encrypted data. + // If nil, the default configuration is used + S2KConfig *s2k.Config + // Iteration count for Iterated S2K (String to Key). + // Only used if sk2.Mode is nil. + // This value is duplicated here from s2k.Config for backwards compatibility. + // It determines the strength of the passphrase stretching when + // the said passphrase is hashed to produce a key. S2KCount + // should be between 65536 and 65011712, inclusive. If Config + // is nil or S2KCount is 0, the value 16777216 used. Not all + // values in the above range can be represented. S2KCount will + // be rounded up to the next representable value if it cannot + // be encoded exactly. When set, it is strongly encrouraged to + // use a value that is at least 65536. See RFC 4880 Section + // 3.7.1.3. + // + // Deprecated: SK2Count should be configured in S2KConfig instead. + S2KCount int + // RSABits is the number of bits in new RSA keys made with NewEntity. + // If zero, then 2048 bit keys are created. + RSABits int + // The public key algorithm to use - will always create a signing primary + // key and encryption subkey. + Algorithm PublicKeyAlgorithm + // Some known primes that are optionally prepopulated by the caller + RSAPrimes []*big.Int + // Curve configures the desired packet.Curve if the Algorithm is PubKeyAlgoECDSA, + // PubKeyAlgoEdDSA, or PubKeyAlgoECDH. If empty Curve25519 is used. + Curve Curve + // AEADConfig configures the use of the new AEAD Encrypted Data Packet, + // defined in the draft of the next version of the OpenPGP specification. + // If a non-nil AEADConfig is passed, usage of this packet is enabled. By + // default, it is disabled. See the documentation of AEADConfig for more + // configuration options related to AEAD. + // **Note: using this option may break compatibility with other OpenPGP + // implementations, as well as future versions of this library.** + AEADConfig *AEADConfig + // V5Keys configures version 5 key generation. If false, this package still + // supports version 5 keys, but produces version 4 keys. + V5Keys bool + // "The validity period of the key. This is the number of seconds after + // the key creation time that the key expires. If this is not present + // or has a value of zero, the key never expires. This is found only on + // a self-signature."" + // https://tools.ietf.org/html/rfc4880#section-5.2.3.6 + KeyLifetimeSecs uint32 + // "The validity period of the signature. This is the number of seconds + // after the signature creation time that the signature expires. If + // this is not present or has a value of zero, it never expires." + // https://tools.ietf.org/html/rfc4880#section-5.2.3.10 + SigLifetimeSecs uint32 + // SigningKeyId is used to specify the signing key to use (by Key ID). + // By default, the signing key is selected automatically, preferring + // signing subkeys if available. + SigningKeyId uint64 + // SigningIdentity is used to specify a user ID (packet Signer's User ID, type 28) + // when producing a generic certification signature onto an existing user ID. + // The identity must be present in the signer Entity. + SigningIdentity string + // InsecureAllowUnauthenticatedMessages controls, whether it is tolerated to read + // encrypted messages without Modification Detection Code (MDC). + // MDC is mandated by the IETF OpenPGP Crypto Refresh draft and has long been implemented + // in most OpenPGP implementations. Messages without MDC are considered unnecessarily + // insecure and should be prevented whenever possible. + // In case one needs to deal with messages from very old OpenPGP implementations, there + // might be no other way than to tolerate the missing MDC. Setting this flag, allows this + // mode of operation. It should be considered a measure of last resort. + InsecureAllowUnauthenticatedMessages bool + // KnownNotations is a map of Notation Data names to bools, which controls + // the notation names that are allowed to be present in critical Notation Data + // signature subpackets. + KnownNotations map[string]bool + // SignatureNotations is a list of Notations to be added to any signatures. + SignatureNotations []*Notation +} + +func (c *Config) Random() io.Reader { + if c == nil || c.Rand == nil { + return rand.Reader + } + return c.Rand +} + +func (c *Config) Hash() crypto.Hash { + if c == nil || uint(c.DefaultHash) == 0 { + return crypto.SHA256 + } + return c.DefaultHash +} + +func (c *Config) Cipher() CipherFunction { + if c == nil || uint8(c.DefaultCipher) == 0 { + return CipherAES128 + } + return c.DefaultCipher +} + +func (c *Config) Now() time.Time { + if c == nil || c.Time == nil { + return time.Now().Truncate(time.Second) + } + return c.Time().Truncate(time.Second) +} + +// KeyLifetime returns the validity period of the key. +func (c *Config) KeyLifetime() uint32 { + if c == nil { + return 0 + } + return c.KeyLifetimeSecs +} + +// SigLifetime returns the validity period of the signature. +func (c *Config) SigLifetime() uint32 { + if c == nil { + return 0 + } + return c.SigLifetimeSecs +} + +func (c *Config) Compression() CompressionAlgo { + if c == nil { + return CompressionNone + } + return c.DefaultCompressionAlgo +} + +func (c *Config) RSAModulusBits() int { + if c == nil || c.RSABits == 0 { + return 2048 + } + return c.RSABits +} + +func (c *Config) PublicKeyAlgorithm() PublicKeyAlgorithm { + if c == nil || c.Algorithm == 0 { + return PubKeyAlgoRSA + } + return c.Algorithm +} + +func (c *Config) CurveName() Curve { + if c == nil || c.Curve == "" { + return Curve25519 + } + return c.Curve +} + +// Deprecated: The hash iterations should now be queried via the S2K() method. +func (c *Config) PasswordHashIterations() int { + if c == nil || c.S2KCount == 0 { + return 0 + } + return c.S2KCount +} + +func (c *Config) S2K() *s2k.Config { + if c == nil { + return nil + } + // for backwards compatibility + if c != nil && c.S2KCount > 0 && c.S2KConfig == nil { + return &s2k.Config{ + S2KCount: c.S2KCount, + } + } + return c.S2KConfig +} + +func (c *Config) AEAD() *AEADConfig { + if c == nil { + return nil + } + return c.AEADConfig +} + +func (c *Config) SigningKey() uint64 { + if c == nil { + return 0 + } + return c.SigningKeyId +} + +func (c *Config) SigningUserId() string { + if c == nil { + return "" + } + return c.SigningIdentity +} + +func (c *Config) AllowUnauthenticatedMessages() bool { + if c == nil { + return false + } + return c.InsecureAllowUnauthenticatedMessages +} + +func (c *Config) KnownNotation(notationName string) bool { + if c == nil { + return false + } + return c.KnownNotations[notationName] +} + +func (c *Config) Notations() []*Notation { + if c == nil { + return nil + } + return c.SignatureNotations +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/encrypted_key.go similarity index 57% rename from vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/encrypted_key.go index 6d7639722c906..eeff2902c12c2 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/encrypted_key.go @@ -12,8 +12,10 @@ import ( "math/big" "strconv" - "golang.org/x/crypto/openpgp/elgamal" - "golang.org/x/crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/ecdh" + "github.com/ProtonMail/go-crypto/openpgp/elgamal" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" ) const encryptedKeyVersion = 3 @@ -23,10 +25,10 @@ const encryptedKeyVersion = 3 type EncryptedKey struct { KeyId uint64 Algo PublicKeyAlgorithm - CipherFunc CipherFunction // only valid after a successful Decrypt + CipherFunc CipherFunction // only valid after a successful Decrypt for a v3 packet Key []byte // only valid after a successful Decrypt - encryptedMPI1, encryptedMPI2 parsedMPI + encryptedMPI1, encryptedMPI2 encoding.Field } func (e *EncryptedKey) parse(r io.Reader) (err error) { @@ -42,17 +44,28 @@ func (e *EncryptedKey) parse(r io.Reader) (err error) { e.Algo = PublicKeyAlgorithm(buf[9]) switch e.Algo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: - e.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r) - if err != nil { + e.encryptedMPI1 = new(encoding.MPI) + if _, err = e.encryptedMPI1.ReadFrom(r); err != nil { return } case PubKeyAlgoElGamal: - e.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r) - if err != nil { + e.encryptedMPI1 = new(encoding.MPI) + if _, err = e.encryptedMPI1.ReadFrom(r); err != nil { return } - e.encryptedMPI2.bytes, e.encryptedMPI2.bitLength, err = readMPI(r) - if err != nil { + + e.encryptedMPI2 = new(encoding.MPI) + if _, err = e.encryptedMPI2.ReadFrom(r); err != nil { + return + } + case PubKeyAlgoECDH: + e.encryptedMPI1 = new(encoding.MPI) + if _, err = e.encryptedMPI1.ReadFrom(r); err != nil { + return + } + + e.encryptedMPI2 = new(encoding.OID) + if _, err = e.encryptedMPI2.ReadFrom(r); err != nil { return } } @@ -72,6 +85,16 @@ func checksumKeyMaterial(key []byte) uint16 { // private key must have been decrypted first. // If config is nil, sensible defaults will be used. func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error { + if e.KeyId != 0 && e.KeyId != priv.KeyId { + return errors.InvalidArgumentError("cannot decrypt encrypted session key for key id " + strconv.FormatUint(e.KeyId, 16) + " with private key id " + strconv.FormatUint(priv.KeyId, 16)) + } + if e.Algo != priv.PubKeyAlgo { + return errors.InvalidArgumentError("cannot decrypt encrypted session key of type " + strconv.Itoa(int(e.Algo)) + " with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo))) + } + if priv.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } + var err error var b []byte @@ -81,13 +104,18 @@ func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: // Supports both *rsa.PrivateKey and crypto.Decrypter k := priv.PrivateKey.(crypto.Decrypter) - b, err = k.Decrypt(config.Random(), padToKeySize(k.Public().(*rsa.PublicKey), e.encryptedMPI1.bytes), nil) + b, err = k.Decrypt(config.Random(), padToKeySize(k.Public().(*rsa.PublicKey), e.encryptedMPI1.Bytes()), nil) case PubKeyAlgoElGamal: - c1 := new(big.Int).SetBytes(e.encryptedMPI1.bytes) - c2 := new(big.Int).SetBytes(e.encryptedMPI2.bytes) + c1 := new(big.Int).SetBytes(e.encryptedMPI1.Bytes()) + c2 := new(big.Int).SetBytes(e.encryptedMPI2.Bytes()) b, err = elgamal.Decrypt(priv.PrivateKey.(*elgamal.PrivateKey), c1, c2) + case PubKeyAlgoECDH: + vsG := e.encryptedMPI1.Bytes() + m := e.encryptedMPI2.Bytes() + oid := priv.PublicKey.oid.EncodedBytes() + b, err = ecdh.Decrypt(priv.PrivateKey.(*ecdh.PrivateKey), vsG, m, oid, priv.PublicKey.Fingerprint[:]) default: - err = errors.InvalidArgumentError("cannot decrypted encrypted session key with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo))) + err = errors.InvalidArgumentError("cannot decrypt encrypted session key with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo))) } if err != nil { @@ -95,6 +123,10 @@ func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error { } e.CipherFunc = CipherFunction(b[0]) + if !e.CipherFunc.IsSupported() { + return errors.UnsupportedError("unsupported encryption function") + } + e.Key = b[1 : len(b)-2] expectedChecksum := uint16(b[len(b)-2])<<8 | uint16(b[len(b)-1]) checksum := checksumKeyMaterial(e.Key) @@ -110,14 +142,19 @@ func (e *EncryptedKey) Serialize(w io.Writer) error { var mpiLen int switch e.Algo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: - mpiLen = 2 + len(e.encryptedMPI1.bytes) + mpiLen = int(e.encryptedMPI1.EncodedLength()) case PubKeyAlgoElGamal: - mpiLen = 2 + len(e.encryptedMPI1.bytes) + 2 + len(e.encryptedMPI2.bytes) + mpiLen = int(e.encryptedMPI1.EncodedLength()) + int(e.encryptedMPI2.EncodedLength()) + case PubKeyAlgoECDH: + mpiLen = int(e.encryptedMPI1.EncodedLength()) + int(e.encryptedMPI2.EncodedLength()) default: return errors.InvalidArgumentError("don't know how to serialize encrypted key type " + strconv.Itoa(int(e.Algo))) } - serializeHeader(w, packetTypeEncryptedKey, 1 /* version */ +8 /* key id */ +1 /* algo */ +mpiLen) + err := serializeHeader(w, packetTypeEncryptedKey, 1 /* version */ +8 /* key id */ +1 /* algo */ +mpiLen) + if err != nil { + return err + } w.Write([]byte{encryptedKeyVersion}) binary.Write(w, binary.BigEndian, e.KeyId) @@ -125,14 +162,23 @@ func (e *EncryptedKey) Serialize(w io.Writer) error { switch e.Algo { case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: - writeMPIs(w, e.encryptedMPI1) + _, err := w.Write(e.encryptedMPI1.EncodedBytes()) + return err case PubKeyAlgoElGamal: - writeMPIs(w, e.encryptedMPI1, e.encryptedMPI2) + if _, err := w.Write(e.encryptedMPI1.EncodedBytes()); err != nil { + return err + } + _, err := w.Write(e.encryptedMPI2.EncodedBytes()) + return err + case PubKeyAlgoECDH: + if _, err := w.Write(e.encryptedMPI1.EncodedBytes()); err != nil { + return err + } + _, err := w.Write(e.encryptedMPI2.EncodedBytes()) + return err default: panic("internal error") } - - return nil } // SerializeEncryptedKey serializes an encrypted key packet to w that contains @@ -156,6 +202,8 @@ func SerializeEncryptedKey(w io.Writer, pub *PublicKey, cipherFunc CipherFunctio return serializeEncryptedKeyRSA(w, config.Random(), buf, pub.PublicKey.(*rsa.PublicKey), keyBlock) case PubKeyAlgoElGamal: return serializeEncryptedKeyElGamal(w, config.Random(), buf, pub.PublicKey.(*elgamal.PublicKey), keyBlock) + case PubKeyAlgoECDH: + return serializeEncryptedKeyECDH(w, config.Random(), buf, pub.PublicKey.(*ecdh.PublicKey), keyBlock, pub.oid, pub.Fingerprint) case PubKeyAlgoDSA, PubKeyAlgoRSASignOnly: return errors.InvalidArgumentError("cannot encrypt to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo))) } @@ -169,7 +217,8 @@ func serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header [10]byte, pub return errors.InvalidArgumentError("RSA encryption failed: " + err.Error()) } - packetLen := 10 /* header length */ + 2 /* mpi size */ + len(cipherText) + cipherMPI := encoding.NewMPI(cipherText) + packetLen := 10 /* header length */ + int(cipherMPI.EncodedLength()) err = serializeHeader(w, packetTypeEncryptedKey, packetLen) if err != nil { @@ -179,7 +228,8 @@ func serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header [10]byte, pub if err != nil { return err } - return writeMPI(w, 8*uint16(len(cipherText)), cipherText) + _, err = w.Write(cipherMPI.EncodedBytes()) + return err } func serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header [10]byte, pub *elgamal.PublicKey, keyBlock []byte) error { @@ -200,9 +250,37 @@ func serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header [10]byte, if err != nil { return err } - err = writeBig(w, c1) + if _, err = w.Write(new(encoding.MPI).SetBig(c1).EncodedBytes()); err != nil { + return err + } + _, err = w.Write(new(encoding.MPI).SetBig(c2).EncodedBytes()) + return err +} + +func serializeEncryptedKeyECDH(w io.Writer, rand io.Reader, header [10]byte, pub *ecdh.PublicKey, keyBlock []byte, oid encoding.Field, fingerprint []byte) error { + vsG, c, err := ecdh.Encrypt(rand, pub, keyBlock, oid.EncodedBytes(), fingerprint) + if err != nil { + return errors.InvalidArgumentError("ECDH encryption failed: " + err.Error()) + } + + g := encoding.NewMPI(vsG) + m := encoding.NewOID(c) + + packetLen := 10 /* header length */ + packetLen += int(g.EncodedLength()) + int(m.EncodedLength()) + + err = serializeHeader(w, packetTypeEncryptedKey, packetLen) + if err != nil { + return err + } + + _, err = w.Write(header[:]) if err != nil { return err } - return writeBig(w, c2) + if _, err = w.Write(g.EncodedBytes()); err != nil { + return err + } + _, err = w.Write(m.EncodedBytes()) + return err } diff --git a/vendor/golang.org/x/crypto/openpgp/packet/literal.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/literal.go similarity index 96% rename from vendor/golang.org/x/crypto/openpgp/packet/literal.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/literal.go index 1a9ec6e51e81d..4be987609be56 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/literal.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/literal.go @@ -11,6 +11,7 @@ import ( // LiteralData represents an encrypted file. See RFC 4880, section 5.9. type LiteralData struct { + Format uint8 IsBinary bool FileName string Time uint32 // Unix epoch time. Either creation time or modification time. 0 means undefined. @@ -31,7 +32,8 @@ func (l *LiteralData) parse(r io.Reader) (err error) { return } - l.IsBinary = buf[0] == 'b' + l.Format = buf[0] + l.IsBinary = l.Format == 'b' fileNameLen := int(buf[1]) _, err = readFull(r, buf[:fileNameLen]) diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/notation.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/notation.go new file mode 100644 index 0000000000000..2c3e3f50b253f --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/notation.go @@ -0,0 +1,29 @@ +package packet + +// Notation type represents a Notation Data subpacket +// see https://tools.ietf.org/html/rfc4880#section-5.2.3.16 +type Notation struct { + Name string + Value []byte + IsCritical bool + IsHumanReadable bool +} + +func (notation *Notation) getData() []byte { + nameData := []byte(notation.Name) + nameLen := len(nameData) + valueLen := len(notation.Value) + + data := make([]byte, 8+nameLen+valueLen) + if notation.IsHumanReadable { + data[0] = 0x80 + } + + data[4] = byte(nameLen >> 8) + data[5] = byte(nameLen) + data[6] = byte(valueLen >> 8) + data[7] = byte(valueLen) + copy(data[8:8+nameLen], nameData) + copy(data[8+nameLen:], notation.Value) + return data +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/ocfb.go similarity index 92% rename from vendor/golang.org/x/crypto/openpgp/packet/ocfb.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/ocfb.go index ce2a33a547cef..4f26d0a00b7a4 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/ocfb.go @@ -85,8 +85,7 @@ type ocfbDecrypter struct { // NewOCFBDecrypter returns a cipher.Stream which decrypts data with OpenPGP's // cipher feedback mode using the given cipher.Block. Prefix must be the first // blockSize + 2 bytes of the ciphertext, where blockSize is the cipher.Block's -// block size. If an incorrect key is detected then nil is returned. On -// successful exit, blockSize+2 bytes of decrypted data are written into +// block size. On successful exit, blockSize+2 bytes of decrypted data are written into // prefix. Resync determines if the "resynchronization step" from RFC 4880, // 13.9 step 7 is performed. Different parts of OpenPGP vary on this point. func NewOCFBDecrypter(block cipher.Block, prefix []byte, resync OCFBResyncOption) cipher.Stream { @@ -112,11 +111,6 @@ func NewOCFBDecrypter(block cipher.Block, prefix []byte, resync OCFBResyncOption prefixCopy[blockSize] ^= x.fre[0] prefixCopy[blockSize+1] ^= x.fre[1] - if prefixCopy[blockSize-2] != prefixCopy[blockSize] || - prefixCopy[blockSize-1] != prefixCopy[blockSize+1] { - return nil - } - if resync { block.Encrypt(x.fre, prefix[2:]) } else { diff --git a/vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/one_pass_signature.go similarity index 87% rename from vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/one_pass_signature.go index 1713503395e3c..033fb2d7e8cb9 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/one_pass_signature.go @@ -7,8 +7,8 @@ package packet import ( "crypto" "encoding/binary" - "golang.org/x/crypto/openpgp/errors" - "golang.org/x/crypto/openpgp/s2k" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" "io" "strconv" ) @@ -37,7 +37,7 @@ func (ops *OnePassSignature) parse(r io.Reader) (err error) { } var ok bool - ops.Hash, ok = s2k.HashIdToHash(buf[2]) + ops.Hash, ok = algorithm.HashIdToHashWithSha1(buf[2]) if !ok { return errors.UnsupportedError("hash function: " + strconv.Itoa(int(buf[2]))) } @@ -55,7 +55,7 @@ func (ops *OnePassSignature) Serialize(w io.Writer) error { buf[0] = onePassSignatureVersion buf[1] = uint8(ops.SigType) var ok bool - buf[2], ok = s2k.HashToHashId(ops.Hash) + buf[2], ok = algorithm.HashToHashIdWithSha1(ops.Hash) if !ok { return errors.UnsupportedError("hash type: " + strconv.Itoa(int(ops.Hash))) } diff --git a/vendor/golang.org/x/crypto/openpgp/packet/opaque.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/opaque.go similarity index 89% rename from vendor/golang.org/x/crypto/openpgp/packet/opaque.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/opaque.go index 3984477310fe7..4f8204079f293 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/opaque.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/opaque.go @@ -7,8 +7,9 @@ package packet import ( "bytes" "io" + "io/ioutil" - "golang.org/x/crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/errors" ) // OpaquePacket represents an OpenPGP packet as raw, unparsed data. This is @@ -25,7 +26,7 @@ type OpaquePacket struct { } func (op *OpaquePacket) parse(r io.Reader) (err error) { - op.Contents, err = io.ReadAll(r) + op.Contents, err = ioutil.ReadAll(r) return } @@ -83,8 +84,9 @@ func (or *OpaqueReader) Next() (op *OpaquePacket, err error) { // OpaqueSubpacket represents an unparsed OpenPGP subpacket, // as found in signature and user attribute packets. type OpaqueSubpacket struct { - SubType uint8 - Contents []byte + SubType uint8 + EncodedLength []byte // Store the original encoded length for signature verifications. + Contents []byte } // OpaqueSubpackets extracts opaque, unparsed OpenPGP subpackets from @@ -108,6 +110,7 @@ func OpaqueSubpackets(contents []byte) (result []*OpaqueSubpacket, err error) { func nextSubpacket(contents []byte) (subHeaderLen int, subPacket *OpaqueSubpacket, err error) { // RFC 4880, section 5.2.3.1 var subLen uint32 + var encodedLength []byte if len(contents) < 1 { goto Truncated } @@ -118,6 +121,7 @@ func nextSubpacket(contents []byte) (subHeaderLen int, subPacket *OpaqueSubpacke if len(contents) < subHeaderLen { goto Truncated } + encodedLength = contents[0:1] subLen = uint32(contents[0]) contents = contents[1:] case contents[0] < 255: @@ -125,6 +129,7 @@ func nextSubpacket(contents []byte) (subHeaderLen int, subPacket *OpaqueSubpacke if len(contents) < subHeaderLen { goto Truncated } + encodedLength = contents[0:2] subLen = uint32(contents[0]-192)<<8 + uint32(contents[1]) + 192 contents = contents[2:] default: @@ -132,16 +137,19 @@ func nextSubpacket(contents []byte) (subHeaderLen int, subPacket *OpaqueSubpacke if len(contents) < subHeaderLen { goto Truncated } + encodedLength = contents[0:5] subLen = uint32(contents[1])<<24 | uint32(contents[2])<<16 | uint32(contents[3])<<8 | uint32(contents[4]) contents = contents[5:] + } if subLen > uint32(len(contents)) || subLen == 0 { goto Truncated } subPacket.SubType = contents[0] + subPacket.EncodedLength = encodedLength subPacket.Contents = contents[1:subLen] return Truncated: @@ -151,7 +159,9 @@ Truncated: func (osp *OpaqueSubpacket) Serialize(w io.Writer) (err error) { buf := make([]byte, 6) - n := serializeSubpacketLength(buf, len(osp.Contents)+1) + copy(buf, osp.EncodedLength) + n := len(osp.EncodedLength) + buf[n] = osp.SubType if _, err = w.Write(buf[:n+1]); err != nil { return diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet.go similarity index 61% rename from vendor/golang.org/x/crypto/openpgp/packet/packet.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet.go index 0a19794a8e49c..4d86a7da82639 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/packet.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/packet.go @@ -4,26 +4,16 @@ // Package packet implements parsing and serialization of OpenPGP packets, as // specified in RFC 4880. -// -// Deprecated: this package is unmaintained except for security fixes. New -// applications should consider a more focused, modern alternative to OpenPGP -// for their specific task. If you are required to interoperate with OpenPGP -// systems and need a maintained package, consider a community fork. -// See https://golang.org/issue/44226. -package packet // import "golang.org/x/crypto/openpgp/packet" +package packet // import "github.com/ProtonMail/go-crypto/openpgp/packet" import ( - "bufio" - "crypto/aes" + "bytes" "crypto/cipher" - "crypto/des" "crypto/rsa" "io" - "math/big" - "math/bits" - "golang.org/x/crypto/cast5" - "golang.org/x/crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" ) // readFull is the same as io.ReadFull except that reading zero bytes returns @@ -106,68 +96,43 @@ func (r *partialLengthReader) Read(p []byte) (n int, err error) { // See RFC 4880, section 4.2.2.4. type partialLengthWriter struct { w io.WriteCloser + buf bytes.Buffer lengthByte [1]byte - sentFirst bool - buf []byte } -// RFC 4880 4.2.2.4: the first partial length MUST be at least 512 octets long. -const minFirstPartialWrite = 512 - func (w *partialLengthWriter) Write(p []byte) (n int, err error) { - off := 0 - if !w.sentFirst { - if len(w.buf) > 0 || len(p) < minFirstPartialWrite { - off = len(w.buf) - w.buf = append(w.buf, p...) - if len(w.buf) < minFirstPartialWrite { - return len(p), nil - } - p = w.buf - w.buf = nil - } - w.sentFirst = true - } - - power := uint8(30) - for len(p) > 0 { - l := 1 << power - if len(p) < l { - power = uint8(bits.Len32(uint32(len(p)))) - 1 - l = 1 << power - } - w.lengthByte[0] = 224 + power - _, err = w.w.Write(w.lengthByte[:]) - if err == nil { - var m int - m, err = w.w.Write(p[:l]) - n += m - } - if err != nil { - if n < off { - return 0, err + bufLen := w.buf.Len() + if bufLen > 512 { + for power := uint(30); ; power-- { + l := 1 << power + if bufLen >= l { + w.lengthByte[0] = 224 + uint8(power) + _, err = w.w.Write(w.lengthByte[:]) + if err != nil { + return + } + var m int + m, err = w.w.Write(w.buf.Next(l)) + if err != nil { + return + } + if m != l { + return 0, io.ErrShortWrite + } + break } - return n - off, err } - p = p[l:] } - return n - off, nil + return w.buf.Write(p) } -func (w *partialLengthWriter) Close() error { - if len(w.buf) > 0 { - // In this case we can't send a 512 byte packet. - // Just send what we have. - p := w.buf - w.sentFirst = true - w.buf = nil - if _, err := w.Write(p); err != nil { - return err - } +func (w *partialLengthWriter) Close() (err error) { + len := w.buf.Len() + err = serializeLength(w.w, len) + if err != nil { + return err } - - w.lengthByte[0] = 0 - _, err := w.w.Write(w.lengthByte[:]) + _, err = w.buf.WriteTo(w.w) if err != nil { return err } @@ -252,25 +217,43 @@ func readHeader(r io.Reader) (tag packetType, length int64, contents io.Reader, // serializeHeader writes an OpenPGP packet header to w. See RFC 4880, section // 4.2. func serializeHeader(w io.Writer, ptype packetType, length int) (err error) { - var buf [6]byte - var n int + err = serializeType(w, ptype) + if err != nil { + return + } + return serializeLength(w, length) +} +// serializeType writes an OpenPGP packet type to w. See RFC 4880, section +// 4.2. +func serializeType(w io.Writer, ptype packetType) (err error) { + var buf [1]byte buf[0] = 0x80 | 0x40 | byte(ptype) + _, err = w.Write(buf[:]) + return +} + +// serializeLength writes an OpenPGP packet length to w. See RFC 4880, section +// 4.2.2. +func serializeLength(w io.Writer, length int) (err error) { + var buf [5]byte + var n int + if length < 192 { - buf[1] = byte(length) - n = 2 + buf[0] = byte(length) + n = 1 } else if length < 8384 { length -= 192 - buf[1] = 192 + byte(length>>8) - buf[2] = byte(length) - n = 3 + buf[0] = 192 + byte(length>>8) + buf[1] = byte(length) + n = 2 } else { - buf[1] = 255 - buf[2] = byte(length >> 24) - buf[3] = byte(length >> 16) - buf[4] = byte(length >> 8) - buf[5] = byte(length) - n = 6 + buf[0] = 255 + buf[1] = byte(length >> 24) + buf[2] = byte(length >> 16) + buf[3] = byte(length >> 8) + buf[4] = byte(length) + n = 5 } _, err = w.Write(buf[:n]) @@ -281,9 +264,7 @@ func serializeHeader(w io.Writer, ptype packetType, length int) (err error) { // length of the packet is unknown. It returns a io.WriteCloser which can be // used to write the contents of the packet. See RFC 4880, section 4.2. func serializeStreamHeader(w io.WriteCloser, ptype packetType) (out io.WriteCloser, err error) { - var buf [1]byte - buf[0] = 0x80 | 0x40 | byte(ptype) - _, err = w.Write(buf[:]) + err = serializeType(w, ptype) if err != nil { return } @@ -321,33 +302,27 @@ func consumeAll(r io.Reader) (n int64, err error) { type packetType uint8 const ( - packetTypeEncryptedKey packetType = 1 - packetTypeSignature packetType = 2 - packetTypeSymmetricKeyEncrypted packetType = 3 - packetTypeOnePassSignature packetType = 4 - packetTypePrivateKey packetType = 5 - packetTypePublicKey packetType = 6 - packetTypePrivateSubkey packetType = 7 - packetTypeCompressed packetType = 8 - packetTypeSymmetricallyEncrypted packetType = 9 - packetTypeLiteralData packetType = 11 - packetTypeUserId packetType = 13 - packetTypePublicSubkey packetType = 14 - packetTypeUserAttribute packetType = 17 - packetTypeSymmetricallyEncryptedMDC packetType = 18 + packetTypeEncryptedKey packetType = 1 + packetTypeSignature packetType = 2 + packetTypeSymmetricKeyEncrypted packetType = 3 + packetTypeOnePassSignature packetType = 4 + packetTypePrivateKey packetType = 5 + packetTypePublicKey packetType = 6 + packetTypePrivateSubkey packetType = 7 + packetTypeCompressed packetType = 8 + packetTypeSymmetricallyEncrypted packetType = 9 + packetTypeLiteralData packetType = 11 + packetTypeUserId packetType = 13 + packetTypePublicSubkey packetType = 14 + packetTypeUserAttribute packetType = 17 + packetTypeSymmetricallyEncryptedIntegrityProtected packetType = 18 + packetTypeAEADEncrypted packetType = 20 ) -// peekVersion detects the version of a public key packet about to -// be read. A bufio.Reader at the original position of the io.Reader -// is returned. -func peekVersion(r io.Reader) (bufr *bufio.Reader, ver byte, err error) { - bufr = bufio.NewReader(r) - var verBuf []byte - if verBuf, err = bufr.Peek(1); err != nil { - return - } - ver = verBuf[0] - return +// EncryptedDataPacket holds encrypted data. It is currently implemented by +// SymmetricallyEncrypted and AEADEncrypted. +type EncryptedDataPacket interface { + Decrypt(CipherFunction, []byte) (io.ReadCloser, error) } // Read reads a single OpenPGP packet from the given io.Reader. If there is an @@ -362,16 +337,7 @@ func Read(r io.Reader) (p Packet, err error) { case packetTypeEncryptedKey: p = new(EncryptedKey) case packetTypeSignature: - var version byte - // Detect signature version - if contents, version, err = peekVersion(contents); err != nil { - return - } - if version < 4 { - p = new(SignatureV3) - } else { - p = new(Signature) - } + p = new(Signature) case packetTypeSymmetricKeyEncrypted: p = new(SymmetricKeyEncrypted) case packetTypeOnePassSignature: @@ -383,16 +349,8 @@ func Read(r io.Reader) (p Packet, err error) { } p = pk case packetTypePublicKey, packetTypePublicSubkey: - var version byte - if contents, version, err = peekVersion(contents); err != nil { - return - } isSubkey := tag == packetTypePublicSubkey - if version < 4 { - p = &PublicKeyV3{IsSubkey: isSubkey} - } else { - p = &PublicKey{IsSubkey: isSubkey} - } + p = &PublicKey{IsSubkey: isSubkey} case packetTypeCompressed: p = new(Compressed) case packetTypeSymmetricallyEncrypted: @@ -403,10 +361,12 @@ func Read(r io.Reader) (p Packet, err error) { p = new(UserId) case packetTypeUserAttribute: p = new(UserAttribute) - case packetTypeSymmetricallyEncryptedMDC: + case packetTypeSymmetricallyEncryptedIntegrityProtected: se := new(SymmetricallyEncrypted) - se.MDC = true + se.IntegrityProtected = true p = se + case packetTypeAEADEncrypted: + p = new(AEADEncrypted) default: err = errors.UnknownPacketTypeError(tag) } @@ -424,17 +384,18 @@ func Read(r io.Reader) (p Packet, err error) { type SignatureType uint8 const ( - SigTypeBinary SignatureType = 0 - SigTypeText = 1 - SigTypeGenericCert = 0x10 - SigTypePersonaCert = 0x11 - SigTypeCasualCert = 0x12 - SigTypePositiveCert = 0x13 - SigTypeSubkeyBinding = 0x18 - SigTypePrimaryKeyBinding = 0x19 - SigTypeDirectSignature = 0x1F - SigTypeKeyRevocation = 0x20 - SigTypeSubkeyRevocation = 0x28 + SigTypeBinary SignatureType = 0x00 + SigTypeText = 0x01 + SigTypeGenericCert = 0x10 + SigTypePersonaCert = 0x11 + SigTypeCasualCert = 0x12 + SigTypePositiveCert = 0x13 + SigTypeSubkeyBinding = 0x18 + SigTypePrimaryKeyBinding = 0x19 + SigTypeDirectSignature = 0x1F + SigTypeKeyRevocation = 0x20 + SigTypeSubkeyRevocation = 0x28 + SigTypeCertificationRevocation = 0x30 ) // PublicKeyAlgorithm represents the different public key system specified for @@ -449,6 +410,8 @@ const ( // RFC 6637, Section 5. PubKeyAlgoECDH PublicKeyAlgorithm = 18 PubKeyAlgoECDSA PublicKeyAlgorithm = 19 + // https://www.ietf.org/archive/id/draft-koch-eddsa-for-openpgp-04.txt + PubKeyAlgoEdDSA PublicKeyAlgorithm = 22 // Deprecated in RFC 4880, Section 13.5. Use key flags instead. PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2 @@ -459,7 +422,7 @@ const ( // key of the given type. func (pka PublicKeyAlgorithm) CanEncrypt() bool { switch pka { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal: + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal, PubKeyAlgoECDH: return true } return false @@ -469,7 +432,7 @@ func (pka PublicKeyAlgorithm) CanEncrypt() bool { // sign a message. func (pka PublicKeyAlgorithm) CanSign() bool { switch pka { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA: + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA, PubKeyAlgoEdDSA: return true } return false @@ -477,7 +440,7 @@ func (pka PublicKeyAlgorithm) CanSign() bool { // CipherFunction represents the different block ciphers specified for OpenPGP. See // http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-13 -type CipherFunction uint8 +type CipherFunction algorithm.CipherFunction const ( Cipher3DES CipherFunction = 2 @@ -489,81 +452,22 @@ const ( // KeySize returns the key size, in bytes, of cipher. func (cipher CipherFunction) KeySize() int { - switch cipher { - case Cipher3DES: - return 24 - case CipherCAST5: - return cast5.KeySize - case CipherAES128: - return 16 - case CipherAES192: - return 24 - case CipherAES256: - return 32 - } - return 0 + return algorithm.CipherFunction(cipher).KeySize() +} + +// IsSupported returns true if the cipher is supported from the library +func (cipher CipherFunction) IsSupported() bool { + return algorithm.CipherFunction(cipher).KeySize() > 0 } // blockSize returns the block size, in bytes, of cipher. func (cipher CipherFunction) blockSize() int { - switch cipher { - case Cipher3DES: - return des.BlockSize - case CipherCAST5: - return 8 - case CipherAES128, CipherAES192, CipherAES256: - return 16 - } - return 0 + return algorithm.CipherFunction(cipher).BlockSize() } // new returns a fresh instance of the given cipher. func (cipher CipherFunction) new(key []byte) (block cipher.Block) { - switch cipher { - case Cipher3DES: - block, _ = des.NewTripleDESCipher(key) - case CipherCAST5: - block, _ = cast5.NewCipher(key) - case CipherAES128, CipherAES192, CipherAES256: - block, _ = aes.NewCipher(key) - } - return -} - -// readMPI reads a big integer from r. The bit length returned is the bit -// length that was specified in r. This is preserved so that the integer can be -// reserialized exactly. -func readMPI(r io.Reader) (mpi []byte, bitLength uint16, err error) { - var buf [2]byte - _, err = readFull(r, buf[0:]) - if err != nil { - return - } - bitLength = uint16(buf[0])<<8 | uint16(buf[1]) - numBytes := (int(bitLength) + 7) / 8 - mpi = make([]byte, numBytes) - _, err = readFull(r, mpi) - // According to RFC 4880 3.2. we should check that the MPI has no leading - // zeroes (at least when not an encrypted MPI?), but this implementation - // does generate leading zeroes, so we keep accepting them. - return -} - -// writeMPI serializes a big integer to w. -func writeMPI(w io.Writer, bitLength uint16, mpiBytes []byte) (err error) { - // Note that we can produce leading zeroes, in violation of RFC 4880 3.2. - // Implementations seem to be tolerant of them, and stripping them would - // make it complex to guarantee matching re-serialization. - _, err = w.Write([]byte{byte(bitLength >> 8), byte(bitLength)}) - if err == nil { - _, err = w.Write(mpiBytes) - } - return -} - -// writeBig serializes a *big.Int to w. -func writeBig(w io.Writer, i *big.Int) error { - return writeMPI(w, uint16(i.BitLen()), i.Bytes()) + return algorithm.CipherFunction(cipher).New(key) } // padToKeySize left-pads a MPI with zeroes to match the length of the @@ -588,3 +492,60 @@ const ( CompressionZIP CompressionAlgo = 1 CompressionZLIB CompressionAlgo = 2 ) + +// AEADMode represents the different Authenticated Encryption with Associated +// Data specified for OpenPGP. +// See https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-9.6 +type AEADMode algorithm.AEADMode + +const ( + AEADModeEAX AEADMode = 1 + AEADModeOCB AEADMode = 2 + AEADModeGCM AEADMode = 3 +) + +func (mode AEADMode) IvLength() int { + return algorithm.AEADMode(mode).NonceLength() +} + +func (mode AEADMode) TagLength() int { + return algorithm.AEADMode(mode).TagLength() +} + +// new returns a fresh instance of the given mode. +func (mode AEADMode) new(block cipher.Block) cipher.AEAD { + return algorithm.AEADMode(mode).New(block) +} + +// ReasonForRevocation represents a revocation reason code as per RFC4880 +// section 5.2.3.23. +type ReasonForRevocation uint8 + +const ( + NoReason ReasonForRevocation = 0 + KeySuperseded ReasonForRevocation = 1 + KeyCompromised ReasonForRevocation = 2 + KeyRetired ReasonForRevocation = 3 +) + +// Curve is a mapping to supported ECC curves for key generation. +// See https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-06.html#name-curve-specific-wire-formats +type Curve string + +const ( + Curve25519 Curve = "Curve25519" + Curve448 Curve = "Curve448" + CurveNistP256 Curve = "P256" + CurveNistP384 Curve = "P384" + CurveNistP521 Curve = "P521" + CurveSecP256k1 Curve = "SecP256k1" + CurveBrainpoolP256 Curve = "BrainpoolP256" + CurveBrainpoolP384 Curve = "BrainpoolP384" + CurveBrainpoolP512 Curve = "BrainpoolP512" +) + +// TrustLevel represents a trust level per RFC4880 5.2.3.13 +type TrustLevel uint8 + +// TrustAmount represents a trust amount per RFC4880 5.2.3.13 +type TrustAmount uint8 diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key.go new file mode 100644 index 0000000000000..2fc4386437c1d --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key.go @@ -0,0 +1,837 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/cipher" + "crypto/dsa" + "crypto/rand" + "crypto/rsa" + "crypto/sha1" + "io" + "io/ioutil" + "math/big" + "strconv" + "time" + + "github.com/ProtonMail/go-crypto/openpgp/ecdh" + "github.com/ProtonMail/go-crypto/openpgp/ecdsa" + "github.com/ProtonMail/go-crypto/openpgp/eddsa" + "github.com/ProtonMail/go-crypto/openpgp/elgamal" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" + "github.com/ProtonMail/go-crypto/openpgp/s2k" +) + +// PrivateKey represents a possibly encrypted private key. See RFC 4880, +// section 5.5.3. +type PrivateKey struct { + PublicKey + Encrypted bool // if true then the private key is unavailable until Decrypt has been called. + encryptedData []byte + cipher CipherFunction + s2k func(out, in []byte) + // An *{rsa|dsa|elgamal|ecdh|ecdsa|ed25519}.PrivateKey or + // crypto.Signer/crypto.Decrypter (Decryptor RSA only). + PrivateKey interface{} + sha1Checksum bool + iv []byte + + // Type of encryption of the S2K packet + // Allowed values are 0 (Not encrypted), 254 (SHA1), or + // 255 (2-byte checksum) + s2kType S2KType + // Full parameters of the S2K packet + s2kParams *s2k.Params +} + +// S2KType s2k packet type +type S2KType uint8 + +const ( + // S2KNON unencrypt + S2KNON S2KType = 0 + // S2KSHA1 sha1 sum check + S2KSHA1 S2KType = 254 + // S2KCHECKSUM sum check + S2KCHECKSUM S2KType = 255 +) + +func NewRSAPrivateKey(creationTime time.Time, priv *rsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewRSAPublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewDSAPrivateKey(creationTime time.Time, priv *dsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewDSAPublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewElGamalPrivateKey(creationTime time.Time, priv *elgamal.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewElGamalPublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewECDSAPrivateKey(creationTime time.Time, priv *ecdsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewECDSAPublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewEdDSAPrivateKey(creationTime time.Time, priv *eddsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewEdDSAPublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewECDHPrivateKey(creationTime time.Time, priv *ecdh.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewECDHPublicKey(creationTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +// NewSignerPrivateKey creates a PrivateKey from a crypto.Signer that +// implements RSA, ECDSA or EdDSA. +func NewSignerPrivateKey(creationTime time.Time, signer interface{}) *PrivateKey { + pk := new(PrivateKey) + // In general, the public Keys should be used as pointers. We still + // type-switch on the values, for backwards-compatibility. + switch pubkey := signer.(type) { + case *rsa.PrivateKey: + pk.PublicKey = *NewRSAPublicKey(creationTime, &pubkey.PublicKey) + case rsa.PrivateKey: + pk.PublicKey = *NewRSAPublicKey(creationTime, &pubkey.PublicKey) + case *ecdsa.PrivateKey: + pk.PublicKey = *NewECDSAPublicKey(creationTime, &pubkey.PublicKey) + case ecdsa.PrivateKey: + pk.PublicKey = *NewECDSAPublicKey(creationTime, &pubkey.PublicKey) + case *eddsa.PrivateKey: + pk.PublicKey = *NewEdDSAPublicKey(creationTime, &pubkey.PublicKey) + case eddsa.PrivateKey: + pk.PublicKey = *NewEdDSAPublicKey(creationTime, &pubkey.PublicKey) + default: + panic("openpgp: unknown signer type in NewSignerPrivateKey") + } + pk.PrivateKey = signer + return pk +} + +// NewDecrypterPrivateKey creates a PrivateKey from a *{rsa|elgamal|ecdh}.PrivateKey. +func NewDecrypterPrivateKey(creationTime time.Time, decrypter interface{}) *PrivateKey { + pk := new(PrivateKey) + switch priv := decrypter.(type) { + case *rsa.PrivateKey: + pk.PublicKey = *NewRSAPublicKey(creationTime, &priv.PublicKey) + case *elgamal.PrivateKey: + pk.PublicKey = *NewElGamalPublicKey(creationTime, &priv.PublicKey) + case *ecdh.PrivateKey: + pk.PublicKey = *NewECDHPublicKey(creationTime, &priv.PublicKey) + default: + panic("openpgp: unknown decrypter type in NewDecrypterPrivateKey") + } + pk.PrivateKey = decrypter + return pk +} + +func (pk *PrivateKey) parse(r io.Reader) (err error) { + err = (&pk.PublicKey).parse(r) + if err != nil { + return + } + v5 := pk.PublicKey.Version == 5 + + var buf [1]byte + _, err = readFull(r, buf[:]) + if err != nil { + return + } + pk.s2kType = S2KType(buf[0]) + var optCount [1]byte + if v5 { + if _, err = readFull(r, optCount[:]); err != nil { + return + } + } + + switch pk.s2kType { + case S2KNON: + pk.s2k = nil + pk.Encrypted = false + case S2KSHA1, S2KCHECKSUM: + if v5 && pk.s2kType == S2KCHECKSUM { + return errors.StructuralError("wrong s2k identifier for version 5") + } + _, err = readFull(r, buf[:]) + if err != nil { + return + } + pk.cipher = CipherFunction(buf[0]) + if pk.cipher != 0 && !pk.cipher.IsSupported() { + return errors.UnsupportedError("unsupported cipher function in private key") + } + pk.s2kParams, err = s2k.ParseIntoParams(r) + if err != nil { + return + } + if pk.s2kParams.Dummy() { + return + } + pk.s2k, err = pk.s2kParams.Function() + if err != nil { + return + } + pk.Encrypted = true + if pk.s2kType == S2KSHA1 { + pk.sha1Checksum = true + } + default: + return errors.UnsupportedError("deprecated s2k function in private key") + } + + if pk.Encrypted { + blockSize := pk.cipher.blockSize() + if blockSize == 0 { + return errors.UnsupportedError("unsupported cipher in private key: " + strconv.Itoa(int(pk.cipher))) + } + pk.iv = make([]byte, blockSize) + _, err = readFull(r, pk.iv) + if err != nil { + return + } + } + + var privateKeyData []byte + if v5 { + var n [4]byte /* secret material four octet count */ + _, err = readFull(r, n[:]) + if err != nil { + return + } + count := uint32(uint32(n[0])<<24 | uint32(n[1])<<16 | uint32(n[2])<<8 | uint32(n[3])) + if !pk.Encrypted { + count = count + 2 /* two octet checksum */ + } + privateKeyData = make([]byte, count) + _, err = readFull(r, privateKeyData) + if err != nil { + return + } + } else { + privateKeyData, err = ioutil.ReadAll(r) + if err != nil { + return + } + } + if !pk.Encrypted { + if len(privateKeyData) < 2 { + return errors.StructuralError("truncated private key data") + } + var sum uint16 + for i := 0; i < len(privateKeyData)-2; i++ { + sum += uint16(privateKeyData[i]) + } + if privateKeyData[len(privateKeyData)-2] != uint8(sum>>8) || + privateKeyData[len(privateKeyData)-1] != uint8(sum) { + return errors.StructuralError("private key checksum failure") + } + privateKeyData = privateKeyData[:len(privateKeyData)-2] + return pk.parsePrivateKey(privateKeyData) + } + + pk.encryptedData = privateKeyData + return +} + +// Dummy returns true if the private key is a dummy key. This is a GNU extension. +func (pk *PrivateKey) Dummy() bool { + return pk.s2kParams.Dummy() +} + +func mod64kHash(d []byte) uint16 { + var h uint16 + for _, b := range d { + h += uint16(b) + } + return h +} + +func (pk *PrivateKey) Serialize(w io.Writer) (err error) { + contents := bytes.NewBuffer(nil) + err = pk.PublicKey.serializeWithoutHeaders(contents) + if err != nil { + return + } + if _, err = contents.Write([]byte{uint8(pk.s2kType)}); err != nil { + return + } + + optional := bytes.NewBuffer(nil) + if pk.Encrypted || pk.Dummy() { + optional.Write([]byte{uint8(pk.cipher)}) + if err := pk.s2kParams.Serialize(optional); err != nil { + return err + } + if pk.Encrypted { + optional.Write(pk.iv) + } + } + if pk.Version == 5 { + contents.Write([]byte{uint8(optional.Len())}) + } + io.Copy(contents, optional) + + if !pk.Dummy() { + l := 0 + var priv []byte + if !pk.Encrypted { + buf := bytes.NewBuffer(nil) + err = pk.serializePrivateKey(buf) + if err != nil { + return err + } + l = buf.Len() + checksum := mod64kHash(buf.Bytes()) + buf.Write([]byte{byte(checksum >> 8), byte(checksum)}) + priv = buf.Bytes() + } else { + priv, l = pk.encryptedData, len(pk.encryptedData) + } + + if pk.Version == 5 { + contents.Write([]byte{byte(l >> 24), byte(l >> 16), byte(l >> 8), byte(l)}) + } + contents.Write(priv) + } + + ptype := packetTypePrivateKey + if pk.IsSubkey { + ptype = packetTypePrivateSubkey + } + err = serializeHeader(w, ptype, contents.Len()) + if err != nil { + return + } + _, err = io.Copy(w, contents) + if err != nil { + return + } + return +} + +func serializeRSAPrivateKey(w io.Writer, priv *rsa.PrivateKey) error { + if _, err := w.Write(new(encoding.MPI).SetBig(priv.D).EncodedBytes()); err != nil { + return err + } + if _, err := w.Write(new(encoding.MPI).SetBig(priv.Primes[1]).EncodedBytes()); err != nil { + return err + } + if _, err := w.Write(new(encoding.MPI).SetBig(priv.Primes[0]).EncodedBytes()); err != nil { + return err + } + _, err := w.Write(new(encoding.MPI).SetBig(priv.Precomputed.Qinv).EncodedBytes()) + return err +} + +func serializeDSAPrivateKey(w io.Writer, priv *dsa.PrivateKey) error { + _, err := w.Write(new(encoding.MPI).SetBig(priv.X).EncodedBytes()) + return err +} + +func serializeElGamalPrivateKey(w io.Writer, priv *elgamal.PrivateKey) error { + _, err := w.Write(new(encoding.MPI).SetBig(priv.X).EncodedBytes()) + return err +} + +func serializeECDSAPrivateKey(w io.Writer, priv *ecdsa.PrivateKey) error { + _, err := w.Write(encoding.NewMPI(priv.MarshalIntegerSecret()).EncodedBytes()) + return err +} + +func serializeEdDSAPrivateKey(w io.Writer, priv *eddsa.PrivateKey) error { + _, err := w.Write(encoding.NewMPI(priv.MarshalByteSecret()).EncodedBytes()) + return err +} + +func serializeECDHPrivateKey(w io.Writer, priv *ecdh.PrivateKey) error { + _, err := w.Write(encoding.NewMPI(priv.MarshalByteSecret()).EncodedBytes()) + return err +} + +// decrypt decrypts an encrypted private key using a decryption key. +func (pk *PrivateKey) decrypt(decryptionKey []byte) error { + if pk.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } + if !pk.Encrypted { + return nil + } + + block := pk.cipher.new(decryptionKey) + cfb := cipher.NewCFBDecrypter(block, pk.iv) + + data := make([]byte, len(pk.encryptedData)) + cfb.XORKeyStream(data, pk.encryptedData) + + if pk.sha1Checksum { + if len(data) < sha1.Size { + return errors.StructuralError("truncated private key data") + } + h := sha1.New() + h.Write(data[:len(data)-sha1.Size]) + sum := h.Sum(nil) + if !bytes.Equal(sum, data[len(data)-sha1.Size:]) { + return errors.StructuralError("private key checksum failure") + } + data = data[:len(data)-sha1.Size] + } else { + if len(data) < 2 { + return errors.StructuralError("truncated private key data") + } + var sum uint16 + for i := 0; i < len(data)-2; i++ { + sum += uint16(data[i]) + } + if data[len(data)-2] != uint8(sum>>8) || + data[len(data)-1] != uint8(sum) { + return errors.StructuralError("private key checksum failure") + } + data = data[:len(data)-2] + } + + err := pk.parsePrivateKey(data) + if _, ok := err.(errors.KeyInvalidError); ok { + return errors.KeyInvalidError("invalid key parameters") + } + if err != nil { + return err + } + + // Mark key as unencrypted + pk.s2kType = S2KNON + pk.s2k = nil + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} + +func (pk *PrivateKey) decryptWithCache(passphrase []byte, keyCache *s2k.Cache) error { + if pk.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } + if !pk.Encrypted { + return nil + } + + key, err := keyCache.GetOrComputeDerivedKey(passphrase, pk.s2kParams, pk.cipher.KeySize()) + if err != nil { + return err + } + return pk.decrypt(key) +} + +// Decrypt decrypts an encrypted private key using a passphrase. +func (pk *PrivateKey) Decrypt(passphrase []byte) error { + if pk.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } + if !pk.Encrypted { + return nil + } + + key := make([]byte, pk.cipher.KeySize()) + pk.s2k(key, passphrase) + return pk.decrypt(key) +} + +// DecryptPrivateKeys decrypts all encrypted keys with the given config and passphrase. +// Avoids recomputation of similar s2k key derivations. +func DecryptPrivateKeys(keys []*PrivateKey, passphrase []byte) error { + // Create a cache to avoid recomputation of key derviations for the same passphrase. + s2kCache := &s2k.Cache{} + for _, key := range keys { + if key != nil && !key.Dummy() && key.Encrypted { + err := key.decryptWithCache(passphrase, s2kCache) + if err != nil { + return err + } + } + } + return nil +} + +// encrypt encrypts an unencrypted private key. +func (pk *PrivateKey) encrypt(key []byte, params *s2k.Params, cipherFunction CipherFunction) error { + if pk.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } + if pk.Encrypted { + return nil + } + // check if encryptionKey has the correct size + if len(key) != cipherFunction.KeySize() { + return errors.InvalidArgumentError("supplied encryption key has the wrong size") + } + + priv := bytes.NewBuffer(nil) + err := pk.serializePrivateKey(priv) + if err != nil { + return err + } + + pk.cipher = cipherFunction + pk.s2kParams = params + pk.s2k, err = pk.s2kParams.Function() + if err != nil { + return err + } + + privateKeyBytes := priv.Bytes() + pk.sha1Checksum = true + block := pk.cipher.new(key) + pk.iv = make([]byte, pk.cipher.blockSize()) + _, err = rand.Read(pk.iv) + if err != nil { + return err + } + cfb := cipher.NewCFBEncrypter(block, pk.iv) + + if pk.sha1Checksum { + pk.s2kType = S2KSHA1 + h := sha1.New() + h.Write(privateKeyBytes) + sum := h.Sum(nil) + privateKeyBytes = append(privateKeyBytes, sum...) + } else { + pk.s2kType = S2KCHECKSUM + var sum uint16 + for _, b := range privateKeyBytes { + sum += uint16(b) + } + priv.Write([]byte{uint8(sum >> 8), uint8(sum)}) + } + + pk.encryptedData = make([]byte, len(privateKeyBytes)) + cfb.XORKeyStream(pk.encryptedData, privateKeyBytes) + pk.Encrypted = true + pk.PrivateKey = nil + return err +} + +// EncryptWithConfig encrypts an unencrypted private key using the passphrase and the config. +func (pk *PrivateKey) EncryptWithConfig(passphrase []byte, config *Config) error { + params, err := s2k.Generate(config.Random(), config.S2K()) + if err != nil { + return err + } + // Derive an encryption key with the configured s2k function. + key := make([]byte, config.Cipher().KeySize()) + s2k, err := params.Function() + if err != nil { + return err + } + s2k(key, passphrase) + // Encrypt the private key with the derived encryption key. + return pk.encrypt(key, params, config.Cipher()) +} + +// EncryptPrivateKeys encrypts all unencrypted keys with the given config and passphrase. +// Only derives one key from the passphrase, which is then used to encrypt each key. +func EncryptPrivateKeys(keys []*PrivateKey, passphrase []byte, config *Config) error { + params, err := s2k.Generate(config.Random(), config.S2K()) + if err != nil { + return err + } + // Derive an encryption key with the configured s2k function. + encryptionKey := make([]byte, config.Cipher().KeySize()) + s2k, err := params.Function() + if err != nil { + return err + } + s2k(encryptionKey, passphrase) + for _, key := range keys { + if key != nil && !key.Dummy() && !key.Encrypted { + err = key.encrypt(encryptionKey, params, config.Cipher()) + if err != nil { + return err + } + } + } + return nil +} + +// Encrypt encrypts an unencrypted private key using a passphrase. +func (pk *PrivateKey) Encrypt(passphrase []byte) error { + // Default config of private key encryption + config := &Config{ + S2KConfig: &s2k.Config{ + S2KMode: s2k.IteratedSaltedS2K, + S2KCount: 65536, + Hash: crypto.SHA256, + } , + DefaultCipher: CipherAES256, + } + return pk.EncryptWithConfig(passphrase, config) +} + +func (pk *PrivateKey) serializePrivateKey(w io.Writer) (err error) { + switch priv := pk.PrivateKey.(type) { + case *rsa.PrivateKey: + err = serializeRSAPrivateKey(w, priv) + case *dsa.PrivateKey: + err = serializeDSAPrivateKey(w, priv) + case *elgamal.PrivateKey: + err = serializeElGamalPrivateKey(w, priv) + case *ecdsa.PrivateKey: + err = serializeECDSAPrivateKey(w, priv) + case *eddsa.PrivateKey: + err = serializeEdDSAPrivateKey(w, priv) + case *ecdh.PrivateKey: + err = serializeECDHPrivateKey(w, priv) + default: + err = errors.InvalidArgumentError("unknown private key type") + } + return +} + +func (pk *PrivateKey) parsePrivateKey(data []byte) (err error) { + switch pk.PublicKey.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoRSAEncryptOnly: + return pk.parseRSAPrivateKey(data) + case PubKeyAlgoDSA: + return pk.parseDSAPrivateKey(data) + case PubKeyAlgoElGamal: + return pk.parseElGamalPrivateKey(data) + case PubKeyAlgoECDSA: + return pk.parseECDSAPrivateKey(data) + case PubKeyAlgoECDH: + return pk.parseECDHPrivateKey(data) + case PubKeyAlgoEdDSA: + return pk.parseEdDSAPrivateKey(data) + } + panic("impossible") +} + +func (pk *PrivateKey) parseRSAPrivateKey(data []byte) (err error) { + rsaPub := pk.PublicKey.PublicKey.(*rsa.PublicKey) + rsaPriv := new(rsa.PrivateKey) + rsaPriv.PublicKey = *rsaPub + + buf := bytes.NewBuffer(data) + d := new(encoding.MPI) + if _, err := d.ReadFrom(buf); err != nil { + return err + } + + p := new(encoding.MPI) + if _, err := p.ReadFrom(buf); err != nil { + return err + } + + q := new(encoding.MPI) + if _, err := q.ReadFrom(buf); err != nil { + return err + } + + rsaPriv.D = new(big.Int).SetBytes(d.Bytes()) + rsaPriv.Primes = make([]*big.Int, 2) + rsaPriv.Primes[0] = new(big.Int).SetBytes(p.Bytes()) + rsaPriv.Primes[1] = new(big.Int).SetBytes(q.Bytes()) + if err := rsaPriv.Validate(); err != nil { + return errors.KeyInvalidError(err.Error()) + } + rsaPriv.Precompute() + pk.PrivateKey = rsaPriv + + return nil +} + +func (pk *PrivateKey) parseDSAPrivateKey(data []byte) (err error) { + dsaPub := pk.PublicKey.PublicKey.(*dsa.PublicKey) + dsaPriv := new(dsa.PrivateKey) + dsaPriv.PublicKey = *dsaPub + + buf := bytes.NewBuffer(data) + x := new(encoding.MPI) + if _, err := x.ReadFrom(buf); err != nil { + return err + } + + dsaPriv.X = new(big.Int).SetBytes(x.Bytes()) + if err := validateDSAParameters(dsaPriv); err != nil { + return err + } + pk.PrivateKey = dsaPriv + + return nil +} + +func (pk *PrivateKey) parseElGamalPrivateKey(data []byte) (err error) { + pub := pk.PublicKey.PublicKey.(*elgamal.PublicKey) + priv := new(elgamal.PrivateKey) + priv.PublicKey = *pub + + buf := bytes.NewBuffer(data) + x := new(encoding.MPI) + if _, err := x.ReadFrom(buf); err != nil { + return err + } + + priv.X = new(big.Int).SetBytes(x.Bytes()) + if err := validateElGamalParameters(priv); err != nil { + return err + } + pk.PrivateKey = priv + + return nil +} + +func (pk *PrivateKey) parseECDSAPrivateKey(data []byte) (err error) { + ecdsaPub := pk.PublicKey.PublicKey.(*ecdsa.PublicKey) + ecdsaPriv := ecdsa.NewPrivateKey(*ecdsaPub) + + buf := bytes.NewBuffer(data) + d := new(encoding.MPI) + if _, err := d.ReadFrom(buf); err != nil { + return err + } + + if err := ecdsaPriv.UnmarshalIntegerSecret(d.Bytes()); err != nil { + return err + } + if err := ecdsa.Validate(ecdsaPriv); err != nil { + return err + } + pk.PrivateKey = ecdsaPriv + + return nil +} + +func (pk *PrivateKey) parseECDHPrivateKey(data []byte) (err error) { + ecdhPub := pk.PublicKey.PublicKey.(*ecdh.PublicKey) + ecdhPriv := ecdh.NewPrivateKey(*ecdhPub) + + buf := bytes.NewBuffer(data) + d := new(encoding.MPI) + if _, err := d.ReadFrom(buf); err != nil { + return err + } + + if err := ecdhPriv.UnmarshalByteSecret(d.Bytes()); err != nil { + return err + } + + if err := ecdh.Validate(ecdhPriv); err != nil { + return err + } + + pk.PrivateKey = ecdhPriv + + return nil +} + +func (pk *PrivateKey) parseEdDSAPrivateKey(data []byte) (err error) { + eddsaPub := pk.PublicKey.PublicKey.(*eddsa.PublicKey) + eddsaPriv := eddsa.NewPrivateKey(*eddsaPub) + eddsaPriv.PublicKey = *eddsaPub + + buf := bytes.NewBuffer(data) + d := new(encoding.MPI) + if _, err := d.ReadFrom(buf); err != nil { + return err + } + + if err = eddsaPriv.UnmarshalByteSecret(d.Bytes()); err != nil { + return err + } + + if err := eddsa.Validate(eddsaPriv); err != nil { + return err + } + + pk.PrivateKey = eddsaPriv + + return nil +} + +func validateDSAParameters(priv *dsa.PrivateKey) error { + p := priv.P // group prime + q := priv.Q // subgroup order + g := priv.G // g has order q mod p + x := priv.X // secret + y := priv.Y // y == g**x mod p + one := big.NewInt(1) + // expect g, y >= 2 and g < p + if g.Cmp(one) <= 0 || y.Cmp(one) <= 0 || g.Cmp(p) > 0 { + return errors.KeyInvalidError("dsa: invalid group") + } + // expect p > q + if p.Cmp(q) <= 0 { + return errors.KeyInvalidError("dsa: invalid group prime") + } + // q should be large enough and divide p-1 + pSub1 := new(big.Int).Sub(p, one) + if q.BitLen() < 150 || new(big.Int).Mod(pSub1, q).Cmp(big.NewInt(0)) != 0 { + return errors.KeyInvalidError("dsa: invalid order") + } + // confirm that g has order q mod p + if !q.ProbablyPrime(32) || new(big.Int).Exp(g, q, p).Cmp(one) != 0 { + return errors.KeyInvalidError("dsa: invalid order") + } + // check y + if new(big.Int).Exp(g, x, p).Cmp(y) != 0 { + return errors.KeyInvalidError("dsa: mismatching values") + } + + return nil +} + +func validateElGamalParameters(priv *elgamal.PrivateKey) error { + p := priv.P // group prime + g := priv.G // g has order p-1 mod p + x := priv.X // secret + y := priv.Y // y == g**x mod p + one := big.NewInt(1) + // Expect g, y >= 2 and g < p + if g.Cmp(one) <= 0 || y.Cmp(one) <= 0 || g.Cmp(p) > 0 { + return errors.KeyInvalidError("elgamal: invalid group") + } + if p.BitLen() < 1024 { + return errors.KeyInvalidError("elgamal: group order too small") + } + pSub1 := new(big.Int).Sub(p, one) + if new(big.Int).Exp(g, pSub1, p).Cmp(one) != 0 { + return errors.KeyInvalidError("elgamal: invalid group") + } + // Since p-1 is not prime, g might have a smaller order that divides p-1. + // We cannot confirm the exact order of g, but we make sure it is not too small. + gExpI := new(big.Int).Set(g) + i := 1 + threshold := 2 << 17 // we want order > threshold + for i < threshold { + i++ // we check every order to make sure key validation is not easily bypassed by guessing y' + gExpI.Mod(new(big.Int).Mul(gExpI, g), p) + if gExpI.Cmp(one) == 0 { + return errors.KeyInvalidError("elgamal: order too small") + } + } + // Check y + if new(big.Int).Exp(g, x, p).Cmp(y) != 0 { + return errors.KeyInvalidError("elgamal: mismatching values") + } + + return nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key_test_data.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key_test_data.go new file mode 100644 index 0000000000000..029b8f1aab2ee --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/private_key_test_data.go @@ -0,0 +1,12 @@ +package packet + +// Generated with `gpg --export-secret-keys "Test Key 2"` +const privKeyRSAHex = "9501fe044cc349a8010400b70ca0010e98c090008d45d1ee8f9113bd5861fd57b88bacb7c68658747663f1e1a3b5a98f32fda6472373c024b97359cd2efc88ff60f77751adfbf6af5e615e6a1408cfad8bf0cea30b0d5f53aa27ad59089ba9b15b7ebc2777a25d7b436144027e3bcd203909f147d0e332b240cf63d3395f5dfe0df0a6c04e8655af7eacdf0011010001fe0303024a252e7d475fd445607de39a265472aa74a9320ba2dac395faa687e9e0336aeb7e9a7397e511b5afd9dc84557c80ac0f3d4d7bfec5ae16f20d41c8c84a04552a33870b930420e230e179564f6d19bb153145e76c33ae993886c388832b0fa042ddda7f133924f3854481533e0ede31d51278c0519b29abc3bf53da673e13e3e1214b52413d179d7f66deee35cac8eacb060f78379d70ef4af8607e68131ff529439668fc39c9ce6dfef8a5ac234d234802cbfb749a26107db26406213ae5c06d4673253a3cbee1fcbae58d6ab77e38d6e2c0e7c6317c48e054edadb5a40d0d48acb44643d998139a8a66bb820be1f3f80185bc777d14b5954b60effe2448a036d565c6bc0b915fcea518acdd20ab07bc1529f561c58cd044f723109b93f6fd99f876ff891d64306b5d08f48bab59f38695e9109c4dec34013ba3153488ce070268381ba923ee1eb77125b36afcb4347ec3478c8f2735b06ef17351d872e577fa95d0c397c88c71b59629a36aec" + +// Generated by `gpg --export-secret-keys` followed by a manual extraction of +// the ElGamal subkey from the packets. +const privKeyElGamalHex = "9d0157044df9ee1a100400eb8e136a58ec39b582629cdadf830bc64e0a94ed8103ca8bb247b27b11b46d1d25297ef4bcc3071785ba0c0bedfe89eabc5287fcc0edf81ab5896c1c8e4b20d27d79813c7aede75320b33eaeeaa586edc00fd1036c10133e6ba0ff277245d0d59d04b2b3421b7244aca5f4a8d870c6f1c1fbff9e1c26699a860b9504f35ca1d700030503fd1ededd3b840795be6d9ccbe3c51ee42e2f39233c432b831ddd9c4e72b7025a819317e47bf94f9ee316d7273b05d5fcf2999c3a681f519b1234bbfa6d359b4752bd9c3f77d6b6456cde152464763414ca130f4e91d91041432f90620fec0e6d6b5116076c2985d5aeaae13be492b9b329efcaf7ee25120159a0a30cd976b42d7afe030302dae7eb80db744d4960c4df930d57e87fe81412eaace9f900e6c839817a614ddb75ba6603b9417c33ea7b6c93967dfa2bcff3fa3c74a5ce2c962db65b03aece14c96cbd0038fc" + +// pkcs1PrivKeyHex is a PKCS#1, RSA private key. +// Generated by `openssl genrsa 1024 | openssl rsa -outform DER | xxd -p` +const pkcs1PrivKeyHex = "3082025d02010002818100e98edfa1c3b35884a54d0b36a6a603b0290fa85e49e30fa23fc94fef9c6790bc4849928607aa48d809da326fb42a969d06ad756b98b9c1a90f5d4a2b6d0ac05953c97f4da3120164a21a679793ce181c906dc01d235cc085ddcdf6ea06c389b6ab8885dfd685959e693138856a68a7e5db263337ff82a088d583a897cf2d59e9020301000102818100b6d5c9eb70b02d5369b3ee5b520a14490b5bde8a317d36f7e4c74b7460141311d1e5067735f8f01d6f5908b2b96fbd881f7a1ab9a84d82753e39e19e2d36856be960d05ac9ef8e8782ea1b6d65aee28fdfe1d61451e8cff0adfe84322f12cf455028b581cf60eb9e0e140ba5d21aeba6c2634d7c65318b9a665fc01c3191ca21024100fa5e818da3705b0fa33278bb28d4b6f6050388af2d4b75ec9375dd91ccf2e7d7068086a8b82a8f6282e4fbbdb8a7f2622eb97295249d87acea7f5f816f54d347024100eecf9406d7dc49cdfb95ab1eff4064de84c7a30f64b2798936a0d2018ba9eb52e4b636f82e96c49cc63b80b675e91e40d1b2e4017d4b9adaf33ab3d9cf1c214f024100c173704ace742c082323066226a4655226819a85304c542b9dacbeacbf5d1881ee863485fcf6f59f3a604f9b42289282067447f2b13dfeed3eab7851fc81e0550240741fc41f3fc002b382eed8730e33c5d8de40256e4accee846667f536832f711ab1d4590e7db91a8a116ac5bff3be13d3f9243ff2e976662aa9b395d907f8e9c9024046a5696c9ef882363e06c9fa4e2f5b580906452befba03f4a99d0f873697ef1f851d2226ca7934b30b7c3e80cb634a67172bbbf4781735fe3e09263e2dd723e7" diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key.go new file mode 100644 index 0000000000000..3402b8c140cd5 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key.go @@ -0,0 +1,806 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "crypto/dsa" + "crypto/rsa" + "crypto/sha1" + "crypto/sha256" + _ "crypto/sha512" + "encoding/binary" + "fmt" + "hash" + "io" + "math/big" + "strconv" + "time" + + "github.com/ProtonMail/go-crypto/openpgp/ecdh" + "github.com/ProtonMail/go-crypto/openpgp/ecdsa" + "github.com/ProtonMail/go-crypto/openpgp/eddsa" + "github.com/ProtonMail/go-crypto/openpgp/elgamal" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" + "github.com/ProtonMail/go-crypto/openpgp/internal/ecc" + "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" +) + +type kdfHashFunction byte +type kdfAlgorithm byte + +// PublicKey represents an OpenPGP public key. See RFC 4880, section 5.5.2. +type PublicKey struct { + Version int + CreationTime time.Time + PubKeyAlgo PublicKeyAlgorithm + PublicKey interface{} // *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey or *eddsa.PublicKey + Fingerprint []byte + KeyId uint64 + IsSubkey bool + + // RFC 4880 fields + n, e, p, q, g, y encoding.Field + + // RFC 6637 fields + // oid contains the OID byte sequence identifying the elliptic curve used + oid encoding.Field + + // kdf stores key derivation function parameters + // used for ECDH encryption. See RFC 6637, Section 9. + kdf encoding.Field +} + +// UpgradeToV5 updates the version of the key to v5, and updates all necessary +// fields. +func (pk *PublicKey) UpgradeToV5() { + pk.Version = 5 + pk.setFingerprintAndKeyId() +} + +// signingKey provides a convenient abstraction over signature verification +// for v3 and v4 public keys. +type signingKey interface { + SerializeForHash(io.Writer) error + SerializeSignaturePrefix(io.Writer) + serializeWithoutHeaders(io.Writer) error +} + +// NewRSAPublicKey returns a PublicKey that wraps the given rsa.PublicKey. +func NewRSAPublicKey(creationTime time.Time, pub *rsa.PublicKey) *PublicKey { + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoRSA, + PublicKey: pub, + n: new(encoding.MPI).SetBig(pub.N), + e: new(encoding.MPI).SetBig(big.NewInt(int64(pub.E))), + } + + pk.setFingerprintAndKeyId() + return pk +} + +// NewDSAPublicKey returns a PublicKey that wraps the given dsa.PublicKey. +func NewDSAPublicKey(creationTime time.Time, pub *dsa.PublicKey) *PublicKey { + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoDSA, + PublicKey: pub, + p: new(encoding.MPI).SetBig(pub.P), + q: new(encoding.MPI).SetBig(pub.Q), + g: new(encoding.MPI).SetBig(pub.G), + y: new(encoding.MPI).SetBig(pub.Y), + } + + pk.setFingerprintAndKeyId() + return pk +} + +// NewElGamalPublicKey returns a PublicKey that wraps the given elgamal.PublicKey. +func NewElGamalPublicKey(creationTime time.Time, pub *elgamal.PublicKey) *PublicKey { + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoElGamal, + PublicKey: pub, + p: new(encoding.MPI).SetBig(pub.P), + g: new(encoding.MPI).SetBig(pub.G), + y: new(encoding.MPI).SetBig(pub.Y), + } + + pk.setFingerprintAndKeyId() + return pk +} + +func NewECDSAPublicKey(creationTime time.Time, pub *ecdsa.PublicKey) *PublicKey { + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoECDSA, + PublicKey: pub, + p: encoding.NewMPI(pub.MarshalPoint()), + } + + curveInfo := ecc.FindByCurve(pub.GetCurve()) + if curveInfo == nil { + panic("unknown elliptic curve") + } + pk.oid = curveInfo.Oid + pk.setFingerprintAndKeyId() + return pk +} + +func NewECDHPublicKey(creationTime time.Time, pub *ecdh.PublicKey) *PublicKey { + var pk *PublicKey + var kdf = encoding.NewOID([]byte{0x1, pub.Hash.Id(), pub.Cipher.Id()}) + pk = &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoECDH, + PublicKey: pub, + p: encoding.NewMPI(pub.MarshalPoint()), + kdf: kdf, + } + + curveInfo := ecc.FindByCurve(pub.GetCurve()) + + if curveInfo == nil { + panic("unknown elliptic curve") + } + + pk.oid = curveInfo.Oid + pk.setFingerprintAndKeyId() + return pk +} + +func NewEdDSAPublicKey(creationTime time.Time, pub *eddsa.PublicKey) *PublicKey { + curveInfo := ecc.FindByCurve(pub.GetCurve()) + pk := &PublicKey{ + Version: 4, + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoEdDSA, + PublicKey: pub, + oid: curveInfo.Oid, + // Native point format, see draft-koch-eddsa-for-openpgp-04, Appendix B + p: encoding.NewMPI(pub.MarshalPoint()), + } + + pk.setFingerprintAndKeyId() + return pk +} + +func (pk *PublicKey) parse(r io.Reader) (err error) { + // RFC 4880, section 5.5.2 + var buf [6]byte + _, err = readFull(r, buf[:]) + if err != nil { + return + } + if buf[0] != 4 && buf[0] != 5 { + return errors.UnsupportedError("public key version " + strconv.Itoa(int(buf[0]))) + } + + pk.Version = int(buf[0]) + if pk.Version == 5 { + var n [4]byte + _, err = readFull(r, n[:]) + if err != nil { + return + } + } + pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0) + pk.PubKeyAlgo = PublicKeyAlgorithm(buf[5]) + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + err = pk.parseRSA(r) + case PubKeyAlgoDSA: + err = pk.parseDSA(r) + case PubKeyAlgoElGamal: + err = pk.parseElGamal(r) + case PubKeyAlgoECDSA: + err = pk.parseECDSA(r) + case PubKeyAlgoECDH: + err = pk.parseECDH(r) + case PubKeyAlgoEdDSA: + err = pk.parseEdDSA(r) + default: + err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo))) + } + if err != nil { + return + } + + pk.setFingerprintAndKeyId() + return +} + +func (pk *PublicKey) setFingerprintAndKeyId() { + // RFC 4880, section 12.2 + if pk.Version == 5 { + fingerprint := sha256.New() + pk.SerializeForHash(fingerprint) + pk.Fingerprint = make([]byte, 32) + copy(pk.Fingerprint, fingerprint.Sum(nil)) + pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[:8]) + } else { + fingerprint := sha1.New() + pk.SerializeForHash(fingerprint) + pk.Fingerprint = make([]byte, 20) + copy(pk.Fingerprint, fingerprint.Sum(nil)) + pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[12:20]) + } +} + +// parseRSA parses RSA public key material from the given Reader. See RFC 4880, +// section 5.5.2. +func (pk *PublicKey) parseRSA(r io.Reader) (err error) { + pk.n = new(encoding.MPI) + if _, err = pk.n.ReadFrom(r); err != nil { + return + } + pk.e = new(encoding.MPI) + if _, err = pk.e.ReadFrom(r); err != nil { + return + } + + if len(pk.e.Bytes()) > 3 { + err = errors.UnsupportedError("large public exponent") + return + } + rsa := &rsa.PublicKey{ + N: new(big.Int).SetBytes(pk.n.Bytes()), + E: 0, + } + for i := 0; i < len(pk.e.Bytes()); i++ { + rsa.E <<= 8 + rsa.E |= int(pk.e.Bytes()[i]) + } + pk.PublicKey = rsa + return +} + +// parseDSA parses DSA public key material from the given Reader. See RFC 4880, +// section 5.5.2. +func (pk *PublicKey) parseDSA(r io.Reader) (err error) { + pk.p = new(encoding.MPI) + if _, err = pk.p.ReadFrom(r); err != nil { + return + } + pk.q = new(encoding.MPI) + if _, err = pk.q.ReadFrom(r); err != nil { + return + } + pk.g = new(encoding.MPI) + if _, err = pk.g.ReadFrom(r); err != nil { + return + } + pk.y = new(encoding.MPI) + if _, err = pk.y.ReadFrom(r); err != nil { + return + } + + dsa := new(dsa.PublicKey) + dsa.P = new(big.Int).SetBytes(pk.p.Bytes()) + dsa.Q = new(big.Int).SetBytes(pk.q.Bytes()) + dsa.G = new(big.Int).SetBytes(pk.g.Bytes()) + dsa.Y = new(big.Int).SetBytes(pk.y.Bytes()) + pk.PublicKey = dsa + return +} + +// parseElGamal parses ElGamal public key material from the given Reader. See +// RFC 4880, section 5.5.2. +func (pk *PublicKey) parseElGamal(r io.Reader) (err error) { + pk.p = new(encoding.MPI) + if _, err = pk.p.ReadFrom(r); err != nil { + return + } + pk.g = new(encoding.MPI) + if _, err = pk.g.ReadFrom(r); err != nil { + return + } + pk.y = new(encoding.MPI) + if _, err = pk.y.ReadFrom(r); err != nil { + return + } + + elgamal := new(elgamal.PublicKey) + elgamal.P = new(big.Int).SetBytes(pk.p.Bytes()) + elgamal.G = new(big.Int).SetBytes(pk.g.Bytes()) + elgamal.Y = new(big.Int).SetBytes(pk.y.Bytes()) + pk.PublicKey = elgamal + return +} + +// parseECDSA parses ECDSA public key material from the given Reader. See +// RFC 6637, Section 9. +func (pk *PublicKey) parseECDSA(r io.Reader) (err error) { + pk.oid = new(encoding.OID) + if _, err = pk.oid.ReadFrom(r); err != nil { + return + } + pk.p = new(encoding.MPI) + if _, err = pk.p.ReadFrom(r); err != nil { + return + } + + curveInfo := ecc.FindByOid(pk.oid) + if curveInfo == nil { + return errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) + } + + c, ok := curveInfo.Curve.(ecc.ECDSACurve) + if !ok { + return errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", pk.oid)) + } + + ecdsaKey := ecdsa.NewPublicKey(c) + err = ecdsaKey.UnmarshalPoint(pk.p.Bytes()) + pk.PublicKey = ecdsaKey + + return +} + +// parseECDH parses ECDH public key material from the given Reader. See +// RFC 6637, Section 9. +func (pk *PublicKey) parseECDH(r io.Reader) (err error) { + pk.oid = new(encoding.OID) + if _, err = pk.oid.ReadFrom(r); err != nil { + return + } + pk.p = new(encoding.MPI) + if _, err = pk.p.ReadFrom(r); err != nil { + return + } + pk.kdf = new(encoding.OID) + if _, err = pk.kdf.ReadFrom(r); err != nil { + return + } + + curveInfo := ecc.FindByOid(pk.oid) + + if curveInfo == nil { + return errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) + } + + c, ok := curveInfo.Curve.(ecc.ECDHCurve) + if !ok { + return errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", pk.oid)) + } + + if kdfLen := len(pk.kdf.Bytes()); kdfLen < 3 { + return errors.UnsupportedError("unsupported ECDH KDF length: " + strconv.Itoa(kdfLen)) + } + if reserved := pk.kdf.Bytes()[0]; reserved != 0x01 { + return errors.UnsupportedError("unsupported KDF reserved field: " + strconv.Itoa(int(reserved))) + } + kdfHash, ok := algorithm.HashById[pk.kdf.Bytes()[1]] + if !ok { + return errors.UnsupportedError("unsupported ECDH KDF hash: " + strconv.Itoa(int(pk.kdf.Bytes()[1]))) + } + kdfCipher, ok := algorithm.CipherById[pk.kdf.Bytes()[2]] + if !ok { + return errors.UnsupportedError("unsupported ECDH KDF cipher: " + strconv.Itoa(int(pk.kdf.Bytes()[2]))) + } + + ecdhKey := ecdh.NewPublicKey(c, kdfHash, kdfCipher) + err = ecdhKey.UnmarshalPoint(pk.p.Bytes()) + pk.PublicKey = ecdhKey + + return +} + +func (pk *PublicKey) parseEdDSA(r io.Reader) (err error) { + pk.oid = new(encoding.OID) + if _, err = pk.oid.ReadFrom(r); err != nil { + return + } + curveInfo := ecc.FindByOid(pk.oid) + if curveInfo == nil { + return errors.UnsupportedError(fmt.Sprintf("unknown oid: %x", pk.oid)) + } + + c, ok := curveInfo.Curve.(ecc.EdDSACurve) + if !ok { + return errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", pk.oid)) + } + + pk.p = new(encoding.MPI) + if _, err = pk.p.ReadFrom(r); err != nil { + return + } + + if len(pk.p.Bytes()) == 0 { + return errors.StructuralError("empty EdDSA public key") + } + + pub := eddsa.NewPublicKey(c) + + switch flag := pk.p.Bytes()[0]; flag { + case 0x04: + // TODO: see _grcy_ecc_eddsa_ensure_compact in grcypt + return errors.UnsupportedError("unsupported EdDSA compression: " + strconv.Itoa(int(flag))) + case 0x40: + err = pub.UnmarshalPoint(pk.p.Bytes()) + default: + return errors.UnsupportedError("unsupported EdDSA compression: " + strconv.Itoa(int(flag))) + } + + pk.PublicKey = pub + return +} + +// SerializeForHash serializes the PublicKey to w with the special packet +// header format needed for hashing. +func (pk *PublicKey) SerializeForHash(w io.Writer) error { + pk.SerializeSignaturePrefix(w) + return pk.serializeWithoutHeaders(w) +} + +// SerializeSignaturePrefix writes the prefix for this public key to the given Writer. +// The prefix is used when calculating a signature over this public key. See +// RFC 4880, section 5.2.4. +func (pk *PublicKey) SerializeSignaturePrefix(w io.Writer) { + var pLength = pk.algorithmSpecificByteCount() + if pk.Version == 5 { + pLength += 10 // version, timestamp (4), algorithm, key octet count (4). + w.Write([]byte{ + 0x9A, + byte(pLength >> 24), + byte(pLength >> 16), + byte(pLength >> 8), + byte(pLength), + }) + return + } + pLength += 6 + w.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}) +} + +func (pk *PublicKey) Serialize(w io.Writer) (err error) { + length := 6 // 6 byte header + length += pk.algorithmSpecificByteCount() + if pk.Version == 5 { + length += 4 // octet key count + } + packetType := packetTypePublicKey + if pk.IsSubkey { + packetType = packetTypePublicSubkey + } + err = serializeHeader(w, packetType, length) + if err != nil { + return + } + return pk.serializeWithoutHeaders(w) +} + +func (pk *PublicKey) algorithmSpecificByteCount() int { + length := 0 + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + length += int(pk.n.EncodedLength()) + length += int(pk.e.EncodedLength()) + case PubKeyAlgoDSA: + length += int(pk.p.EncodedLength()) + length += int(pk.q.EncodedLength()) + length += int(pk.g.EncodedLength()) + length += int(pk.y.EncodedLength()) + case PubKeyAlgoElGamal: + length += int(pk.p.EncodedLength()) + length += int(pk.g.EncodedLength()) + length += int(pk.y.EncodedLength()) + case PubKeyAlgoECDSA: + length += int(pk.oid.EncodedLength()) + length += int(pk.p.EncodedLength()) + case PubKeyAlgoECDH: + length += int(pk.oid.EncodedLength()) + length += int(pk.p.EncodedLength()) + length += int(pk.kdf.EncodedLength()) + case PubKeyAlgoEdDSA: + length += int(pk.oid.EncodedLength()) + length += int(pk.p.EncodedLength()) + default: + panic("unknown public key algorithm") + } + return length +} + +// serializeWithoutHeaders marshals the PublicKey to w in the form of an +// OpenPGP public key packet, not including the packet header. +func (pk *PublicKey) serializeWithoutHeaders(w io.Writer) (err error) { + t := uint32(pk.CreationTime.Unix()) + if _, err = w.Write([]byte{ + byte(pk.Version), + byte(t >> 24), byte(t >> 16), byte(t >> 8), byte(t), + byte(pk.PubKeyAlgo), + }); err != nil { + return + } + + if pk.Version == 5 { + n := pk.algorithmSpecificByteCount() + if _, err = w.Write([]byte{ + byte(n >> 24), byte(n >> 16), byte(n >> 8), byte(n), + }); err != nil { + return + } + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + if _, err = w.Write(pk.n.EncodedBytes()); err != nil { + return + } + _, err = w.Write(pk.e.EncodedBytes()) + return + case PubKeyAlgoDSA: + if _, err = w.Write(pk.p.EncodedBytes()); err != nil { + return + } + if _, err = w.Write(pk.q.EncodedBytes()); err != nil { + return + } + if _, err = w.Write(pk.g.EncodedBytes()); err != nil { + return + } + _, err = w.Write(pk.y.EncodedBytes()) + return + case PubKeyAlgoElGamal: + if _, err = w.Write(pk.p.EncodedBytes()); err != nil { + return + } + if _, err = w.Write(pk.g.EncodedBytes()); err != nil { + return + } + _, err = w.Write(pk.y.EncodedBytes()) + return + case PubKeyAlgoECDSA: + if _, err = w.Write(pk.oid.EncodedBytes()); err != nil { + return + } + _, err = w.Write(pk.p.EncodedBytes()) + return + case PubKeyAlgoECDH: + if _, err = w.Write(pk.oid.EncodedBytes()); err != nil { + return + } + if _, err = w.Write(pk.p.EncodedBytes()); err != nil { + return + } + _, err = w.Write(pk.kdf.EncodedBytes()) + return + case PubKeyAlgoEdDSA: + if _, err = w.Write(pk.oid.EncodedBytes()); err != nil { + return + } + _, err = w.Write(pk.p.EncodedBytes()) + return + } + return errors.InvalidArgumentError("bad public-key algorithm") +} + +// CanSign returns true iff this public key can generate signatures +func (pk *PublicKey) CanSign() bool { + return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly && pk.PubKeyAlgo != PubKeyAlgoElGamal && pk.PubKeyAlgo != PubKeyAlgoECDH +} + +// VerifySignature returns nil iff sig is a valid signature, made by this +// public key, of the data hashed into signed. signed is mutated by this call. +func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err error) { + if !pk.CanSign() { + return errors.InvalidArgumentError("public key cannot generate signatures") + } + if sig.Version == 5 && (sig.SigType == 0x00 || sig.SigType == 0x01) { + sig.AddMetadataToHashSuffix() + } + signed.Write(sig.HashSuffix) + hashBytes := signed.Sum(nil) + if sig.Version == 5 && (hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1]) { + return errors.SignatureError("hash tag doesn't match") + } + + if pk.PubKeyAlgo != sig.PubKeyAlgo { + return errors.InvalidArgumentError("public key and signature use different algorithms") + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + rsaPublicKey, _ := pk.PublicKey.(*rsa.PublicKey) + err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, padToKeySize(rsaPublicKey, sig.RSASignature.Bytes())) + if err != nil { + return errors.SignatureError("RSA verification failure") + } + return nil + case PubKeyAlgoDSA: + dsaPublicKey, _ := pk.PublicKey.(*dsa.PublicKey) + // Need to truncate hashBytes to match FIPS 186-3 section 4.6. + subgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8 + if len(hashBytes) > subgroupSize { + hashBytes = hashBytes[:subgroupSize] + } + if !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.Bytes()), new(big.Int).SetBytes(sig.DSASigS.Bytes())) { + return errors.SignatureError("DSA verification failure") + } + return nil + case PubKeyAlgoECDSA: + ecdsaPublicKey := pk.PublicKey.(*ecdsa.PublicKey) + if !ecdsa.Verify(ecdsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.ECDSASigR.Bytes()), new(big.Int).SetBytes(sig.ECDSASigS.Bytes())) { + return errors.SignatureError("ECDSA verification failure") + } + return nil + case PubKeyAlgoEdDSA: + eddsaPublicKey := pk.PublicKey.(*eddsa.PublicKey) + if !eddsa.Verify(eddsaPublicKey, hashBytes, sig.EdDSASigR.Bytes(), sig.EdDSASigS.Bytes()) { + return errors.SignatureError("EdDSA verification failure") + } + return nil + default: + return errors.SignatureError("Unsupported public key algorithm used in signature") + } +} + +// keySignatureHash returns a Hash of the message that needs to be signed for +// pk to assert a subkey relationship to signed. +func keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + err = pk.SerializeForHash(h) + if err != nil { + return nil, err + } + + err = signed.SerializeForHash(h) + return +} + +// VerifyKeySignature returns nil iff sig is a valid signature, made by this +// public key, of signed. +func (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error { + h, err := keySignatureHash(pk, signed, sig.Hash) + if err != nil { + return err + } + if err = pk.VerifySignature(h, sig); err != nil { + return err + } + + if sig.FlagSign { + // Signing subkeys must be cross-signed. See + // https://www.gnupg.org/faq/subkey-cross-certify.html. + if sig.EmbeddedSignature == nil { + return errors.StructuralError("signing subkey is missing cross-signature") + } + // Verify the cross-signature. This is calculated over the same + // data as the main signature, so we cannot just recursively + // call signed.VerifyKeySignature(...) + if h, err = keySignatureHash(pk, signed, sig.EmbeddedSignature.Hash); err != nil { + return errors.StructuralError("error while hashing for cross-signature: " + err.Error()) + } + if err := signed.VerifySignature(h, sig.EmbeddedSignature); err != nil { + return errors.StructuralError("error while verifying cross-signature: " + err.Error()) + } + } + + return nil +} + +func keyRevocationHash(pk signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + err = pk.SerializeForHash(h) + + return +} + +// VerifyRevocationSignature returns nil iff sig is a valid signature, made by this +// public key. +func (pk *PublicKey) VerifyRevocationSignature(sig *Signature) (err error) { + h, err := keyRevocationHash(pk, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignature(h, sig) +} + +// VerifySubkeyRevocationSignature returns nil iff sig is a valid subkey revocation signature, +// made by this public key, of signed. +func (pk *PublicKey) VerifySubkeyRevocationSignature(sig *Signature, signed *PublicKey) (err error) { + h, err := keySignatureHash(pk, signed, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignature(h, sig) +} + +// userIdSignatureHash returns a Hash of the message that needs to be signed +// to assert that pk is a valid key for id. +func userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + + var buf [5]byte + buf[0] = 0xb4 + buf[1] = byte(len(id) >> 24) + buf[2] = byte(len(id) >> 16) + buf[3] = byte(len(id) >> 8) + buf[4] = byte(len(id)) + h.Write(buf[:]) + h.Write([]byte(id)) + + return +} + +// VerifyUserIdSignature returns nil iff sig is a valid signature, made by this +// public key, that id is the identity of pub. +func (pk *PublicKey) VerifyUserIdSignature(id string, pub *PublicKey, sig *Signature) (err error) { + h, err := userIdSignatureHash(id, pub, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignature(h, sig) +} + +// KeyIdString returns the public key's fingerprint in capital hex +// (e.g. "6C7EE1B8621CC013"). +func (pk *PublicKey) KeyIdString() string { + return fmt.Sprintf("%X", pk.Fingerprint[12:20]) +} + +// KeyIdShortString returns the short form of public key's fingerprint +// in capital hex, as shown by gpg --list-keys (e.g. "621CC013"). +func (pk *PublicKey) KeyIdShortString() string { + return fmt.Sprintf("%X", pk.Fingerprint[16:20]) +} + +// BitLength returns the bit length for the given public key. +func (pk *PublicKey) BitLength() (bitLength uint16, err error) { + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + bitLength = pk.n.BitLength() + case PubKeyAlgoDSA: + bitLength = pk.p.BitLength() + case PubKeyAlgoElGamal: + bitLength = pk.p.BitLength() + case PubKeyAlgoECDSA: + bitLength = pk.p.BitLength() + case PubKeyAlgoECDH: + bitLength = pk.p.BitLength() + case PubKeyAlgoEdDSA: + bitLength = pk.p.BitLength() + default: + err = errors.InvalidArgumentError("bad public-key algorithm") + } + return +} + +// KeyExpired returns whether sig is a self-signature of a key that has +// expired or is created in the future. +func (pk *PublicKey) KeyExpired(sig *Signature, currentTime time.Time) bool { + if pk.CreationTime.After(currentTime) { + return true + } + if sig.KeyLifetimeSecs == nil || *sig.KeyLifetimeSecs == 0 { + return false + } + expiry := pk.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second) + return currentTime.After(expiry) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key_test_data.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key_test_data.go new file mode 100644 index 0000000000000..b255f1f6f8f5f --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/public_key_test_data.go @@ -0,0 +1,24 @@ +package packet + +const rsaFingerprintHex = "5fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb" + +const rsaPkDataHex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001" + +const dsaFingerprintHex = "eece4c094db002103714c63c8e8fbe54062f19ed" + +const dsaPkDataHex = "9901a2044d432f89110400cd581334f0d7a1e1bdc8b9d6d8c0baf68793632735d2bb0903224cbaa1dfbf35a60ee7a13b92643421e1eb41aa8d79bea19a115a677f6b8ba3c7818ce53a6c2a24a1608bd8b8d6e55c5090cbde09dd26e356267465ae25e69ec8bdd57c7bbb2623e4d73336f73a0a9098f7f16da2e25252130fd694c0e8070c55a812a423ae7f00a0ebf50e70c2f19c3520a551bd4b08d30f23530d3d03ff7d0bf4a53a64a09dc5e6e6e35854b7d70c882b0c60293401958b1bd9e40abec3ea05ba87cf64899299d4bd6aa7f459c201d3fbbd6c82004bdc5e8a9eb8082d12054cc90fa9d4ec251a843236a588bf49552441817436c4f43326966fe85447d4e6d0acf8fa1ef0f014730770603ad7634c3088dc52501c237328417c31c89ed70400b2f1a98b0bf42f11fefc430704bebbaa41d9f355600c3facee1e490f64208e0e094ea55e3a598a219a58500bf78ac677b670a14f4e47e9cf8eab4f368cc1ddcaa18cc59309d4cc62dd4f680e73e6cc3e1ce87a84d0925efbcb26c575c093fc42eecf45135fabf6403a25c2016e1774c0484e440a18319072c617cc97ac0a3bb0" + +const ecdsaFingerprintHex = "9892270b38b8980b05c8d56d43fe956c542ca00b" + +const ecdsaPkDataHex = "9893045071c29413052b8104002304230401f4867769cedfa52c325018896245443968e52e51d0c2df8d939949cb5b330f2921711fbee1c9b9dddb95d15cb0255e99badeddda7cc23d9ddcaacbc290969b9f24019375d61c2e4e3b36953a28d8b2bc95f78c3f1d592fb24499be348656a7b17e3963187b4361afe497bc5f9f81213f04069f8e1fb9e6a6290ae295ca1a92b894396cb4" + +const ecdhFingerprintHex = "722354df2475a42164d1d49faa8b938f9a201946" + +const ecdhPkDataHex = "b90073044d53059212052b810400220303042faa84024a20b6735c4897efa5bfb41bf85b7eefeab5ca0cb9ffc8ea04a46acb25534a577694f9e25340a4ab5223a9dd1eda530c8aa2e6718db10d7e672558c7736fe09369ea5739a2a3554bf16d41faa50562f11c6d39bbd5dffb6b9a9ec91803010909" + +const eddsaFingerprintHex = "b2d5e5ec0e6deca6bc8eeeb00907e75e1dd99ad8" + +const eddsaPkDataHex = "98330456e2132b16092b06010401da470f01010740bbda39266affa511a8c2d02edf690fb784b0499c4406185811a163539ef11dc1b41d74657374696e67203c74657374696e674074657374696e672e636f6d3e8879041316080021050256e2132b021b03050b09080702061508090a0b020416020301021e01021780000a09100907e75e1dd99ad86d0c00fe39d2008359352782bc9b61ac382584cd8eff3f57a18c2287e3afeeb05d1f04ba00fe2d0bc1ddf3ff8adb9afa3e7d9287244b4ec567f3db4d60b74a9b5465ed528203" + +// Source: https://sites.google.com/site/brainhub/pgpecckeys#TOC-ECC-NIST-P-384-key +const ecc384PubHex = `99006f044d53059213052b81040022030304f6b8c5aced5b84ef9f4a209db2e4a9dfb70d28cb8c10ecd57674a9fa5a67389942b62d5e51367df4c7bfd3f8e500feecf07ed265a621a8ebbbe53e947ec78c677eba143bd1533c2b350e1c29f82313e1e1108eba063be1e64b10e6950e799c2db42465635f6473615f64685f333834203c6f70656e70677040627261696e6875622e6f72673e8900cb04101309005305024d530592301480000000002000077072656665727265642d656d61696c2d656e636f64696e67407067702e636f6d7067706d696d65040b090807021901051b03000000021602051e010000000415090a08000a0910098033880f54719fca2b0180aa37350968bd5f115afd8ce7bc7b103822152dbff06d0afcda835329510905b98cb469ba208faab87c7412b799e7b633017f58364ea480e8a1a3f253a0c5f22c446e8be9a9fce6210136ee30811abbd49139de28b5bdf8dc36d06ae748579e9ff503b90073044d53059212052b810400220303042faa84024a20b6735c4897efa5bfb41bf85b7eefeab5ca0cb9ffc8ea04a46acb25534a577694f9e25340a4ab5223a9dd1eda530c8aa2e6718db10d7e672558c7736fe09369ea5739a2a3554bf16d41faa50562f11c6d39bbd5dffb6b9a9ec9180301090989008404181309000c05024d530592051b0c000000000a0910098033880f54719f80970180eee7a6d8fcee41ee4f9289df17f9bcf9d955dca25c583b94336f3a2b2d4986dc5cf417b8d2dc86f741a9e1a6d236c0e3017d1c76575458a0cfb93ae8a2b274fcc65ceecd7a91eec83656ba13219969f06945b48c56bd04152c3a0553c5f2f4bd1267` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/reader.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/reader.go similarity index 83% rename from vendor/golang.org/x/crypto/openpgp/packet/reader.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/reader.go index 34bc7c613e6e2..10215fe5f2333 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/reader.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/reader.go @@ -5,8 +5,9 @@ package packet import ( - "golang.org/x/crypto/openpgp/errors" "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" ) // Reader reads packets from an io.Reader and allows packets to be 'unread' so @@ -42,9 +43,18 @@ func (r *Reader) Next() (p Packet, err error) { r.readers = r.readers[:len(r.readers)-1] continue } - if _, ok := err.(errors.UnknownPacketTypeError); !ok { - return nil, err + // TODO: Add strict mode that rejects unknown packets, instead of ignoring them. + if _, ok := err.(errors.UnknownPacketTypeError); ok { + continue + } + if _, ok := err.(errors.UnsupportedError); ok { + switch p.(type) { + case *SymmetricallyEncrypted, *AEADEncrypted, *Compressed, *LiteralData: + return nil, err + } + continue } + return nil, err } return nil, io.EOF diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/signature.go similarity index 50% rename from vendor/golang.org/x/crypto/openpgp/packet/signature.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/signature.go index b2a24a532327b..80d0bb98e0f4d 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/signature.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/signature.go @@ -8,17 +8,17 @@ import ( "bytes" "crypto" "crypto/dsa" - "crypto/ecdsa" - "encoding/asn1" "encoding/binary" "hash" "io" - "math/big" "strconv" "time" - "golang.org/x/crypto/openpgp/errors" - "golang.org/x/crypto/openpgp/s2k" + "github.com/ProtonMail/go-crypto/openpgp/ecdsa" + "github.com/ProtonMail/go-crypto/openpgp/eddsa" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" + "github.com/ProtonMail/go-crypto/openpgp/internal/encoding" ) const ( @@ -27,10 +27,15 @@ const ( KeyFlagSign KeyFlagEncryptCommunications KeyFlagEncryptStorage + KeyFlagSplitKey + KeyFlagAuthenticate + _ + KeyFlagGroupKey ) // Signature represents a signature. See RFC 4880, section 5.2. type Signature struct { + Version int SigType SignatureType PubKeyAlgo PublicKeyAlgorithm Hash crypto.Hash @@ -39,12 +44,19 @@ type Signature struct { HashSuffix []byte // HashTag contains the first two bytes of the hash for fast rejection // of bad signed data. - HashTag [2]byte + HashTag [2]byte + + // Metadata includes format, filename and time, and is protected by v5 + // signatures of type 0x00 or 0x01. This metadata is included into the hash + // computation; if nil, six 0x00 bytes are used instead. See section 5.2.4. + Metadata *LiteralData + CreationTime time.Time - RSASignature parsedMPI - DSASigR, DSASigS parsedMPI - ECDSASigR, ECDSASigS parsedMPI + RSASignature encoding.Field + DSASigR, DSASigS encoding.Field + ECDSASigR, ECDSASigS encoding.Field + EdDSASigR, EdDSASigS encoding.Field // rawSubpackets contains the unparsed subpackets, in order. rawSubpackets []outputSubpacket @@ -54,22 +66,44 @@ type Signature struct { SigLifetimeSecs, KeyLifetimeSecs *uint32 PreferredSymmetric, PreferredHash, PreferredCompression []uint8 + PreferredCipherSuites [][2]uint8 IssuerKeyId *uint64 + IssuerFingerprint []byte + SignerUserId *string IsPrimaryId *bool + Notations []*Notation + + // TrustLevel and TrustAmount can be set by the signer to assert that + // the key is not only valid but also trustworthy at the specified + // level. + // See RFC 4880, section 5.2.3.13 for details. + TrustLevel TrustLevel + TrustAmount TrustAmount + + // TrustRegularExpression can be used in conjunction with trust Signature + // packets to limit the scope of the trust that is extended. + // See RFC 4880, section 5.2.3.14 for details. + TrustRegularExpression *string + + // PolicyURI can be set to the URI of a document that describes the + // policy under which the signature was issued. See RFC 4880, section + // 5.2.3.20 for details. + PolicyURI string // FlagsValid is set if any flags were given. See RFC 4880, section // 5.2.3.21 for details. - FlagsValid bool - FlagCertify, FlagSign, FlagEncryptCommunications, FlagEncryptStorage bool + FlagsValid bool + FlagCertify, FlagSign, FlagEncryptCommunications, FlagEncryptStorage, FlagSplitKey, FlagAuthenticate, FlagGroupKey bool // RevocationReason is set if this signature has been revoked. // See RFC 4880, section 5.2.3.23 for details. - RevocationReason *uint8 + RevocationReason *ReasonForRevocation RevocationReasonText string - // MDC is set if this signature has a feature packet that indicates - // support for MDC subpackets. - MDC bool + // In a self-signature, these flags are set there is a features subpacket + // indicating that the issuer implementation supports these features + // see https://datatracker.ietf.org/doc/html/draft-ietf-openpgp-crypto-refresh#features-subpacket + SEIPDv1, SEIPDv2 bool // EmbeddedSignature, if non-nil, is a signature of the parent key, by // this key. This prevents an attacker from claiming another's signing @@ -86,11 +120,11 @@ func (sig *Signature) parse(r io.Reader) (err error) { if err != nil { return } - if buf[0] != 4 { + if buf[0] != 4 && buf[0] != 5 { err = errors.UnsupportedError("signature packet version " + strconv.Itoa(int(buf[0]))) return } - + sig.Version = int(buf[0]) _, err = readFull(r, buf[:5]) if err != nil { return @@ -98,36 +132,34 @@ func (sig *Signature) parse(r io.Reader) (err error) { sig.SigType = SignatureType(buf[0]) sig.PubKeyAlgo = PublicKeyAlgorithm(buf[1]) switch sig.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA: + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA, PubKeyAlgoEdDSA: default: err = errors.UnsupportedError("public key algorithm " + strconv.Itoa(int(sig.PubKeyAlgo))) return } var ok bool - sig.Hash, ok = s2k.HashIdToHash(buf[2]) + + if sig.Version < 5 { + sig.Hash, ok = algorithm.HashIdToHashWithSha1(buf[2]) + } else { + sig.Hash, ok = algorithm.HashIdToHash(buf[2]) + } + if !ok { return errors.UnsupportedError("hash function " + strconv.Itoa(int(buf[2]))) } hashedSubpacketsLength := int(buf[3])<<8 | int(buf[4]) - l := 6 + hashedSubpacketsLength - sig.HashSuffix = make([]byte, l+6) - sig.HashSuffix[0] = 4 - copy(sig.HashSuffix[1:], buf[:5]) - hashedSubpackets := sig.HashSuffix[6:l] + hashedSubpackets := make([]byte, hashedSubpacketsLength) _, err = readFull(r, hashedSubpackets) if err != nil { return } - // See RFC 4880, section 5.2.4 - trailer := sig.HashSuffix[l:] - trailer[0] = 4 - trailer[1] = 0xff - trailer[2] = uint8(l >> 24) - trailer[3] = uint8(l >> 16) - trailer[4] = uint8(l >> 8) - trailer[5] = uint8(l) + err = sig.buildHashSuffix(hashedSubpackets) + if err != nil { + return + } err = parseSignatureSubpackets(sig, hashedSubpackets, true) if err != nil { @@ -156,16 +188,33 @@ func (sig *Signature) parse(r io.Reader) (err error) { switch sig.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: - sig.RSASignature.bytes, sig.RSASignature.bitLength, err = readMPI(r) + sig.RSASignature = new(encoding.MPI) + _, err = sig.RSASignature.ReadFrom(r) case PubKeyAlgoDSA: - sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r) - if err == nil { - sig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r) + sig.DSASigR = new(encoding.MPI) + if _, err = sig.DSASigR.ReadFrom(r); err != nil { + return } + + sig.DSASigS = new(encoding.MPI) + _, err = sig.DSASigS.ReadFrom(r) case PubKeyAlgoECDSA: - sig.ECDSASigR.bytes, sig.ECDSASigR.bitLength, err = readMPI(r) - if err == nil { - sig.ECDSASigS.bytes, sig.ECDSASigS.bitLength, err = readMPI(r) + sig.ECDSASigR = new(encoding.MPI) + if _, err = sig.ECDSASigR.ReadFrom(r); err != nil { + return + } + + sig.ECDSASigS = new(encoding.MPI) + _, err = sig.ECDSASigS.ReadFrom(r) + case PubKeyAlgoEdDSA: + sig.EdDSASigR = new(encoding.MPI) + if _, err = sig.EdDSASigR.ReadFrom(r); err != nil { + return + } + + sig.EdDSASigS = new(encoding.MPI) + if _, err = sig.EdDSASigS.ReadFrom(r); err != nil { + return } default: panic("unreachable") @@ -195,16 +244,23 @@ type signatureSubpacketType uint8 const ( creationTimeSubpacket signatureSubpacketType = 2 signatureExpirationSubpacket signatureSubpacketType = 3 + trustSubpacket signatureSubpacketType = 5 + regularExpressionSubpacket signatureSubpacketType = 6 keyExpirationSubpacket signatureSubpacketType = 9 prefSymmetricAlgosSubpacket signatureSubpacketType = 11 issuerSubpacket signatureSubpacketType = 16 + notationDataSubpacket signatureSubpacketType = 20 prefHashAlgosSubpacket signatureSubpacketType = 21 prefCompressionSubpacket signatureSubpacketType = 22 primaryUserIdSubpacket signatureSubpacketType = 25 + policyUriSubpacket signatureSubpacketType = 26 keyFlagsSubpacket signatureSubpacketType = 27 + signerUserIdSubpacket signatureSubpacketType = 28 reasonForRevocationSubpacket signatureSubpacketType = 29 featuresSubpacket signatureSubpacketType = 30 embeddedSignatureSubpacket signatureSubpacketType = 32 + issuerFingerprintSubpacket signatureSubpacketType = 33 + prefCipherSuitesSubpacket signatureSubpacketType = 39 ) // parseSignatureSubpacket parses a single subpacket. len(subpacket) is >= 1. @@ -215,6 +271,10 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r packetType signatureSubpacketType isCritical bool ) + if len(subpacket) == 0 { + err = errors.StructuralError("zero length signature subpacket") + return + } switch { case subpacket[0] < 192: length = uint32(subpacket[0]) @@ -248,12 +308,14 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r isCritical = subpacket[0]&0x80 == 0x80 subpacket = subpacket[1:] sig.rawSubpackets = append(sig.rawSubpackets, outputSubpacket{isHashed, packetType, isCritical, subpacket}) + if !isHashed && + packetType != issuerSubpacket && + packetType != issuerFingerprintSubpacket && + packetType != embeddedSignatureSubpacket { + return + } switch packetType { case creationTimeSubpacket: - if !isHashed { - err = errors.StructuralError("signature creation time in non-hashed area") - return - } if len(subpacket) != 4 { err = errors.StructuralError("signature creation time not four bytes") return @@ -262,20 +324,35 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r sig.CreationTime = time.Unix(int64(t), 0) case signatureExpirationSubpacket: // Signature expiration time, section 5.2.3.10 - if !isHashed { - return - } if len(subpacket) != 4 { err = errors.StructuralError("expiration subpacket with bad length") return } sig.SigLifetimeSecs = new(uint32) *sig.SigLifetimeSecs = binary.BigEndian.Uint32(subpacket) - case keyExpirationSubpacket: - // Key expiration time, section 5.2.3.6 - if !isHashed { + case trustSubpacket: + if len(subpacket) != 2 { + err = errors.StructuralError("trust subpacket with bad length") return } + // Trust level and amount, section 5.2.3.13 + sig.TrustLevel = TrustLevel(subpacket[0]) + sig.TrustAmount = TrustAmount(subpacket[1]) + case regularExpressionSubpacket: + if len(subpacket) == 0 { + err = errors.StructuralError("regexp subpacket with bad length") + return + } + // Trust regular expression, section 5.2.3.14 + // RFC specifies the string should be null-terminated; remove a null byte from the end + if subpacket[len(subpacket)-1] != 0x00 { + err = errors.StructuralError("expected regular expression to be null-terminated") + return + } + trustRegularExpression := string(subpacket[:len(subpacket)-1]) + sig.TrustRegularExpression = &trustRegularExpression + case keyExpirationSubpacket: + // Key expiration time, section 5.2.3.6 if len(subpacket) != 4 { err = errors.StructuralError("key expiration subpacket with bad length") return @@ -284,38 +361,52 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r *sig.KeyLifetimeSecs = binary.BigEndian.Uint32(subpacket) case prefSymmetricAlgosSubpacket: // Preferred symmetric algorithms, section 5.2.3.7 - if !isHashed { - return - } sig.PreferredSymmetric = make([]byte, len(subpacket)) copy(sig.PreferredSymmetric, subpacket) case issuerSubpacket: // Issuer, section 5.2.3.5 + if sig.Version > 4 { + err = errors.StructuralError("issuer subpacket found in v5 key") + return + } if len(subpacket) != 8 { err = errors.StructuralError("issuer subpacket with bad length") return } sig.IssuerKeyId = new(uint64) *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket) - case prefHashAlgosSubpacket: - // Preferred hash algorithms, section 5.2.3.8 - if !isHashed { + case notationDataSubpacket: + // Notation data, section 5.2.3.16 + if len(subpacket) < 8 { + err = errors.StructuralError("notation data subpacket with bad length") + return + } + + nameLength := uint32(subpacket[4])<<8 | uint32(subpacket[5]) + valueLength := uint32(subpacket[6])<<8 | uint32(subpacket[7]) + if len(subpacket) != int(nameLength)+int(valueLength)+8 { + err = errors.StructuralError("notation data subpacket with bad length") return } + + notation := Notation{ + IsHumanReadable: (subpacket[0] & 0x80) == 0x80, + Name: string(subpacket[8:(nameLength + 8)]), + Value: subpacket[(nameLength + 8):(valueLength + nameLength + 8)], + IsCritical: isCritical, + } + + sig.Notations = append(sig.Notations, ¬ation) + case prefHashAlgosSubpacket: + // Preferred hash algorithms, section 5.2.3.8 sig.PreferredHash = make([]byte, len(subpacket)) copy(sig.PreferredHash, subpacket) case prefCompressionSubpacket: // Preferred compression algorithms, section 5.2.3.9 - if !isHashed { - return - } sig.PreferredCompression = make([]byte, len(subpacket)) copy(sig.PreferredCompression, subpacket) case primaryUserIdSubpacket: // Primary User ID, section 5.2.3.19 - if !isHashed { - return - } if len(subpacket) != 1 { err = errors.StructuralError("primary user id subpacket with bad length") return @@ -326,9 +417,6 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r } case keyFlagsSubpacket: // Key flags, section 5.2.3.21 - if !isHashed { - return - } if len(subpacket) == 0 { err = errors.StructuralError("empty key flags subpacket") return @@ -346,24 +434,40 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r if subpacket[0]&KeyFlagEncryptStorage != 0 { sig.FlagEncryptStorage = true } + if subpacket[0]&KeyFlagSplitKey != 0 { + sig.FlagSplitKey = true + } + if subpacket[0]&KeyFlagAuthenticate != 0 { + sig.FlagAuthenticate = true + } + if subpacket[0]&KeyFlagGroupKey != 0 { + sig.FlagGroupKey = true + } + case signerUserIdSubpacket: + userId := string(subpacket) + sig.SignerUserId = &userId case reasonForRevocationSubpacket: // Reason For Revocation, section 5.2.3.23 - if !isHashed { - return - } if len(subpacket) == 0 { err = errors.StructuralError("empty revocation reason subpacket") return } - sig.RevocationReason = new(uint8) - *sig.RevocationReason = subpacket[0] + sig.RevocationReason = new(ReasonForRevocation) + *sig.RevocationReason = ReasonForRevocation(subpacket[0]) sig.RevocationReasonText = string(subpacket[1:]) case featuresSubpacket: // Features subpacket, section 5.2.3.24 specifies a very general // mechanism for OpenPGP implementations to signal support for new - // features. In practice, the subpacket is used exclusively to - // indicate support for MDC-protected encryption. - sig.MDC = len(subpacket) >= 1 && subpacket[0]&1 == 1 + // features. + if len(subpacket) > 0 { + if subpacket[0]&0x01 != 0 { + sig.SEIPDv1 = true + } + // 0x02 and 0x04 are reserved + if subpacket[0]&0x08 != 0 { + sig.SEIPDv2 = true + } + } case embeddedSignatureSubpacket: // Only usage is in signatures that cross-certify // signing subkeys. section 5.2.3.26 describes the @@ -382,6 +486,39 @@ func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (r if sigType := sig.EmbeddedSignature.SigType; sigType != SigTypePrimaryKeyBinding { return nil, errors.StructuralError("cross-signature has unexpected type " + strconv.Itoa(int(sigType))) } + case policyUriSubpacket: + // Policy URI, section 5.2.3.20 + sig.PolicyURI = string(subpacket) + case issuerFingerprintSubpacket: + if len(subpacket) == 0 { + err = errors.StructuralError("empty issuer fingerprint subpacket") + return + } + v, l := subpacket[0], len(subpacket[1:]) + if v == 5 && l != 32 || v != 5 && l != 20 { + return nil, errors.StructuralError("bad fingerprint length") + } + sig.IssuerFingerprint = make([]byte, l) + copy(sig.IssuerFingerprint, subpacket[1:]) + sig.IssuerKeyId = new(uint64) + if v == 5 { + *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket[1:9]) + } else { + *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket[13:21]) + } + case prefCipherSuitesSubpacket: + // Preferred AEAD cipher suites + // See https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#name-preferred-aead-ciphersuites + if len(subpacket)%2 != 0 { + err = errors.StructuralError("invalid aead cipher suite length") + return + } + + sig.PreferredCipherSuites = make([][2]byte, len(subpacket)/2) + + for i := 0; i < len(subpacket)/2; i++ { + sig.PreferredCipherSuites[i] = [2]uint8{subpacket[2*i], subpacket[2*i+1]} + } default: if isCritical { err = errors.UnsupportedError("unknown critical signature subpacket type " + strconv.Itoa(int(packetType))) @@ -406,6 +543,13 @@ func subpacketLengthLength(length int) int { return 5 } +func (sig *Signature) CheckKeyIdOrFingerprint(pk *PublicKey) bool { + if sig.IssuerFingerprint != nil && len(sig.IssuerFingerprint) >= 20 { + return bytes.Equal(sig.IssuerFingerprint, pk.Fingerprint) + } + return sig.IssuerKeyId != nil && *sig.IssuerKeyId == pk.KeyId +} + // serializeSubpacketLength marshals the given length into to. func serializeSubpacketLength(to []byte, length int) int { // RFC 4880, Section 4.2.2. @@ -446,6 +590,9 @@ func serializeSubpackets(to []byte, subpackets []outputSubpacket, hashed bool) { if subpacket.hashed == hashed { n := serializeSubpacketLength(to, len(subpacket.contents)+1) to[n] = byte(subpacket.subpacketType) + if subpacket.isCritical { + to[n] |= 0x80 + } to = to[1+n:] n = copy(to, subpacket.contents) to = to[n:] @@ -454,49 +601,74 @@ func serializeSubpackets(to []byte, subpackets []outputSubpacket, hashed bool) { return } -// KeyExpired returns whether sig is a self-signature of a key that has -// expired. -func (sig *Signature) KeyExpired(currentTime time.Time) bool { - if sig.KeyLifetimeSecs == nil { +// SigExpired returns whether sig is a signature that has expired or is created +// in the future. +func (sig *Signature) SigExpired(currentTime time.Time) bool { + if sig.CreationTime.After(currentTime) { + return true + } + if sig.SigLifetimeSecs == nil || *sig.SigLifetimeSecs == 0 { return false } - expiry := sig.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second) + expiry := sig.CreationTime.Add(time.Duration(*sig.SigLifetimeSecs) * time.Second) return currentTime.After(expiry) } // buildHashSuffix constructs the HashSuffix member of sig in preparation for signing. -func (sig *Signature) buildHashSuffix() (err error) { - hashedSubpacketsLen := subpacketsLength(sig.outSubpackets, true) - +func (sig *Signature) buildHashSuffix(hashedSubpackets []byte) (err error) { + var hashId byte var ok bool - l := 6 + hashedSubpacketsLen - sig.HashSuffix = make([]byte, l+6) - sig.HashSuffix[0] = 4 - sig.HashSuffix[1] = uint8(sig.SigType) - sig.HashSuffix[2] = uint8(sig.PubKeyAlgo) - sig.HashSuffix[3], ok = s2k.HashToHashId(sig.Hash) + + if sig.Version < 5 { + hashId, ok = algorithm.HashToHashIdWithSha1(sig.Hash) + } else { + hashId, ok = algorithm.HashToHashId(sig.Hash) + } + if !ok { sig.HashSuffix = nil return errors.InvalidArgumentError("hash cannot be represented in OpenPGP: " + strconv.Itoa(int(sig.Hash))) } - sig.HashSuffix[4] = byte(hashedSubpacketsLen >> 8) - sig.HashSuffix[5] = byte(hashedSubpacketsLen) - serializeSubpackets(sig.HashSuffix[6:l], sig.outSubpackets, true) - trailer := sig.HashSuffix[l:] - trailer[0] = 4 - trailer[1] = 0xff - trailer[2] = byte(l >> 24) - trailer[3] = byte(l >> 16) - trailer[4] = byte(l >> 8) - trailer[5] = byte(l) + + hashedFields := bytes.NewBuffer([]byte{ + uint8(sig.Version), + uint8(sig.SigType), + uint8(sig.PubKeyAlgo), + uint8(hashId), + uint8(len(hashedSubpackets) >> 8), + uint8(len(hashedSubpackets)), + }) + hashedFields.Write(hashedSubpackets) + + var l uint64 = uint64(6 + len(hashedSubpackets)) + if sig.Version == 5 { + hashedFields.Write([]byte{0x05, 0xff}) + hashedFields.Write([]byte{ + uint8(l >> 56), uint8(l >> 48), uint8(l >> 40), uint8(l >> 32), + uint8(l >> 24), uint8(l >> 16), uint8(l >> 8), uint8(l), + }) + } else { + hashedFields.Write([]byte{0x04, 0xff}) + hashedFields.Write([]byte{ + uint8(l >> 24), uint8(l >> 16), uint8(l >> 8), uint8(l), + }) + } + sig.HashSuffix = make([]byte, hashedFields.Len()) + copy(sig.HashSuffix, hashedFields.Bytes()) return } func (sig *Signature) signPrepareHash(h hash.Hash) (digest []byte, err error) { - err = sig.buildHashSuffix() + hashedSubpacketsLen := subpacketsLength(sig.outSubpackets, true) + hashedSubpackets := make([]byte, hashedSubpacketsLen) + serializeSubpackets(hashedSubpackets, sig.outSubpackets, true) + err = sig.buildHashSuffix(hashedSubpackets) if err != nil { return } + if sig.Version == 5 && (sig.SigType == 0x00 || sig.SigType == 0x01) { + sig.AddMetadataToHashSuffix() + } h.Write(sig.HashSuffix) digest = h.Sum(nil) @@ -509,17 +681,26 @@ func (sig *Signature) signPrepareHash(h hash.Hash) (digest []byte, err error) { // On success, the signature is stored in sig. Call Serialize to write it out. // If config is nil, sensible defaults will be used. func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err error) { - sig.outSubpackets = sig.buildSubpackets() + if priv.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } + sig.Version = priv.PublicKey.Version + sig.IssuerFingerprint = priv.PublicKey.Fingerprint + sig.outSubpackets, err = sig.buildSubpackets(priv.PublicKey) + if err != nil { + return err + } digest, err := sig.signPrepareHash(h) if err != nil { return } - switch priv.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: // supports both *rsa.PrivateKey and crypto.Signer - sig.RSASignature.bytes, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash) - sig.RSASignature.bitLength = uint16(8 * len(sig.RSASignature.bytes)) + sigdata, err := priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash) + if err == nil { + sig.RSASignature = encoding.NewMPI(sigdata) + } case PubKeyAlgoDSA: dsaPriv := priv.PrivateKey.(*dsa.PrivateKey) @@ -530,26 +711,23 @@ func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err e } r, s, err := dsa.Sign(config.Random(), dsaPriv, digest) if err == nil { - sig.DSASigR.bytes = r.Bytes() - sig.DSASigR.bitLength = uint16(8 * len(sig.DSASigR.bytes)) - sig.DSASigS.bytes = s.Bytes() - sig.DSASigS.bitLength = uint16(8 * len(sig.DSASigS.bytes)) + sig.DSASigR = new(encoding.MPI).SetBig(r) + sig.DSASigS = new(encoding.MPI).SetBig(s) } case PubKeyAlgoECDSA: - var r, s *big.Int - if pk, ok := priv.PrivateKey.(*ecdsa.PrivateKey); ok { - // direct support, avoid asn1 wrapping/unwrapping - r, s, err = ecdsa.Sign(config.Random(), pk, digest) - } else { - var b []byte - b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash) - if err == nil { - r, s, err = unwrapECDSASig(b) - } + sk := priv.PrivateKey.(*ecdsa.PrivateKey) + r, s, err := ecdsa.Sign(config.Random(), sk, digest) + + if err == nil { + sig.ECDSASigR = new(encoding.MPI).SetBig(r) + sig.ECDSASigS = new(encoding.MPI).SetBig(s) } + case PubKeyAlgoEdDSA: + sk := priv.PrivateKey.(*eddsa.PrivateKey) + r, s, err := eddsa.Sign(sk, digest) if err == nil { - sig.ECDSASigR = fromBig(r) - sig.ECDSASigS = fromBig(s) + sig.EdDSASigR = encoding.NewMPI(r) + sig.EdDSASigS = encoding.NewMPI(s) } default: err = errors.UnsupportedError("public key algorithm: " + strconv.Itoa(int(sig.PubKeyAlgo))) @@ -558,24 +736,14 @@ func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err e return } -// unwrapECDSASig parses the two integer components of an ASN.1-encoded ECDSA -// signature. -func unwrapECDSASig(b []byte) (r, s *big.Int, err error) { - var ecsdaSig struct { - R, S *big.Int - } - _, err = asn1.Unmarshal(b, &ecsdaSig) - if err != nil { - return - } - return ecsdaSig.R, ecsdaSig.S, nil -} - // SignUserId computes a signature from priv, asserting that pub is a valid // key for the identity id. On success, the signature is stored in sig. Call // Serialize to write it out. // If config is nil, sensible defaults will be used. func (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, config *Config) error { + if priv.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } h, err := userIdSignatureHash(id, pub, sig.Hash) if err != nil { return err @@ -583,10 +751,25 @@ func (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, co return sig.Sign(h, priv, config) } +// CrossSignKey computes a signature from signingKey on pub hashed using hashKey. On success, +// the signature is stored in sig. Call Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) CrossSignKey(pub *PublicKey, hashKey *PublicKey, signingKey *PrivateKey, + config *Config) error { + h, err := keySignatureHash(hashKey, pub, sig.Hash) + if err != nil { + return err + } + return sig.Sign(h, signingKey, config) +} + // SignKey computes a signature from priv, asserting that pub is a subkey. On // success, the signature is stored in sig. Call Serialize to write it out. // If config is nil, sensible defaults will be used. func (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config *Config) error { + if priv.Dummy() { + return errors.ErrDummyPrivateKey("dummy key found") + } h, err := keySignatureHash(&priv.PublicKey, pub, sig.Hash) if err != nil { return err @@ -594,26 +777,48 @@ func (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config *Config) return sig.Sign(h, priv, config) } +// RevokeKey computes a revocation signature of pub using priv. On success, the signature is +// stored in sig. Call Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) RevokeKey(pub *PublicKey, priv *PrivateKey, config *Config) error { + h, err := keyRevocationHash(pub, sig.Hash) + if err != nil { + return err + } + return sig.Sign(h, priv, config) +} + +// RevokeSubkey computes a subkey revocation signature of pub using priv. +// On success, the signature is stored in sig. Call Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) RevokeSubkey(pub *PublicKey, priv *PrivateKey, config *Config) error { + // Identical to a subkey binding signature + return sig.SignKey(pub, priv, config) +} + // Serialize marshals sig to w. Sign, SignUserId or SignKey must have been // called first. func (sig *Signature) Serialize(w io.Writer) (err error) { if len(sig.outSubpackets) == 0 { sig.outSubpackets = sig.rawSubpackets } - if sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil && sig.ECDSASigR.bytes == nil { + if sig.RSASignature == nil && sig.DSASigR == nil && sig.ECDSASigR == nil && sig.EdDSASigR == nil { return errors.InvalidArgumentError("Signature: need to call Sign, SignUserId or SignKey before Serialize") } sigLength := 0 switch sig.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: - sigLength = 2 + len(sig.RSASignature.bytes) + sigLength = int(sig.RSASignature.EncodedLength()) case PubKeyAlgoDSA: - sigLength = 2 + len(sig.DSASigR.bytes) - sigLength += 2 + len(sig.DSASigS.bytes) + sigLength = int(sig.DSASigR.EncodedLength()) + sigLength += int(sig.DSASigS.EncodedLength()) case PubKeyAlgoECDSA: - sigLength = 2 + len(sig.ECDSASigR.bytes) - sigLength += 2 + len(sig.ECDSASigS.bytes) + sigLength = int(sig.ECDSASigR.EncodedLength()) + sigLength += int(sig.ECDSASigS.EncodedLength()) + case PubKeyAlgoEdDSA: + sigLength = int(sig.EdDSASigR.EncodedLength()) + sigLength += int(sig.EdDSASigS.EncodedLength()) default: panic("impossible") } @@ -622,16 +827,29 @@ func (sig *Signature) Serialize(w io.Writer) (err error) { length := len(sig.HashSuffix) - 6 /* trailer not included */ + 2 /* length of unhashed subpackets */ + unhashedSubpacketsLen + 2 /* hash tag */ + sigLength + if sig.Version == 5 { + length -= 4 // eight-octet instead of four-octet big endian + } err = serializeHeader(w, packetTypeSignature, length) if err != nil { return } + err = sig.serializeBody(w) + if err != nil { + return err + } + return +} - _, err = w.Write(sig.HashSuffix[:len(sig.HashSuffix)-6]) +func (sig *Signature) serializeBody(w io.Writer) (err error) { + hashedSubpacketsLen := uint16(uint16(sig.HashSuffix[4])<<8) | uint16(sig.HashSuffix[5]) + fields := sig.HashSuffix[:6+hashedSubpacketsLen] + _, err = w.Write(fields) if err != nil { return } + unhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false) unhashedSubpackets := make([]byte, 2+unhashedSubpacketsLen) unhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 8) unhashedSubpackets[1] = byte(unhashedSubpacketsLen) @@ -648,11 +866,22 @@ func (sig *Signature) Serialize(w io.Writer) (err error) { switch sig.PubKeyAlgo { case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: - err = writeMPIs(w, sig.RSASignature) + _, err = w.Write(sig.RSASignature.EncodedBytes()) case PubKeyAlgoDSA: - err = writeMPIs(w, sig.DSASigR, sig.DSASigS) + if _, err = w.Write(sig.DSASigR.EncodedBytes()); err != nil { + return + } + _, err = w.Write(sig.DSASigS.EncodedBytes()) case PubKeyAlgoECDSA: - err = writeMPIs(w, sig.ECDSASigR, sig.ECDSASigS) + if _, err = w.Write(sig.ECDSASigR.EncodedBytes()); err != nil { + return + } + _, err = w.Write(sig.ECDSASigS.EncodedBytes()) + case PubKeyAlgoEdDSA: + if _, err = w.Write(sig.EdDSASigR.EncodedBytes()); err != nil { + return + } + _, err = w.Write(sig.EdDSASigS.EncodedBytes()) default: panic("impossible") } @@ -667,17 +896,23 @@ type outputSubpacket struct { contents []byte } -func (sig *Signature) buildSubpackets() (subpackets []outputSubpacket) { +func (sig *Signature) buildSubpackets(issuer PublicKey) (subpackets []outputSubpacket, err error) { creationTime := make([]byte, 4) binary.BigEndian.PutUint32(creationTime, uint32(sig.CreationTime.Unix())) subpackets = append(subpackets, outputSubpacket{true, creationTimeSubpacket, false, creationTime}) - if sig.IssuerKeyId != nil { + if sig.IssuerKeyId != nil && sig.Version == 4 { keyId := make([]byte, 8) binary.BigEndian.PutUint64(keyId, *sig.IssuerKeyId) subpackets = append(subpackets, outputSubpacket{true, issuerSubpacket, false, keyId}) } - + if sig.IssuerFingerprint != nil { + contents := append([]uint8{uint8(issuer.Version)}, sig.IssuerFingerprint...) + subpackets = append(subpackets, outputSubpacket{true, issuerFingerprintSubpacket, sig.Version == 5, contents}) + } + if sig.SignerUserId != nil { + subpackets = append(subpackets, outputSubpacket{true, signerUserIdSubpacket, false, []byte(*sig.SignerUserId)}) + } if sig.SigLifetimeSecs != nil && *sig.SigLifetimeSecs != 0 { sigLifetime := make([]byte, 4) binary.BigEndian.PutUint32(sigLifetime, *sig.SigLifetimeSecs) @@ -700,10 +935,51 @@ func (sig *Signature) buildSubpackets() (subpackets []outputSubpacket) { if sig.FlagEncryptStorage { flags |= KeyFlagEncryptStorage } + if sig.FlagSplitKey { + flags |= KeyFlagSplitKey + } + if sig.FlagAuthenticate { + flags |= KeyFlagAuthenticate + } + if sig.FlagGroupKey { + flags |= KeyFlagGroupKey + } subpackets = append(subpackets, outputSubpacket{true, keyFlagsSubpacket, false, []byte{flags}}) } - // The following subpackets may only appear in self-signatures + for _, notation := range sig.Notations { + subpackets = append( + subpackets, + outputSubpacket{ + true, + notationDataSubpacket, + notation.IsCritical, + notation.getData(), + }) + } + + // The following subpackets may only appear in self-signatures. + + var features = byte(0x00) + if sig.SEIPDv1 { + features |= 0x01 + } + if sig.SEIPDv2 { + features |= 0x08 + } + + if features != 0x00 { + subpackets = append(subpackets, outputSubpacket{true, featuresSubpacket, false, []byte{features}}) + } + + if sig.TrustLevel != 0 { + subpackets = append(subpackets, outputSubpacket{true, trustSubpacket, true, []byte{byte(sig.TrustLevel), byte(sig.TrustAmount)}}) + } + + if sig.TrustRegularExpression != nil { + // RFC specifies the string should be null-terminated; add a null byte to the end + subpackets = append(subpackets, outputSubpacket{true, regularExpressionSubpacket, true, []byte(*sig.TrustRegularExpression + "\000")}) + } if sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 { keyLifetime := make([]byte, 4) @@ -727,5 +1003,82 @@ func (sig *Signature) buildSubpackets() (subpackets []outputSubpacket) { subpackets = append(subpackets, outputSubpacket{true, prefCompressionSubpacket, false, sig.PreferredCompression}) } + if len(sig.PolicyURI) > 0 { + subpackets = append(subpackets, outputSubpacket{true, policyUriSubpacket, false, []uint8(sig.PolicyURI)}) + } + + if len(sig.PreferredCipherSuites) > 0 { + serialized := make([]byte, len(sig.PreferredCipherSuites)*2) + for i, cipherSuite := range sig.PreferredCipherSuites { + serialized[2*i] = cipherSuite[0] + serialized[2*i+1] = cipherSuite[1] + } + subpackets = append(subpackets, outputSubpacket{true, prefCipherSuitesSubpacket, false, serialized}) + } + + // Revocation reason appears only in revocation signatures and is serialized as per section 5.2.3.23. + if sig.RevocationReason != nil { + subpackets = append(subpackets, outputSubpacket{true, reasonForRevocationSubpacket, true, + append([]uint8{uint8(*sig.RevocationReason)}, []uint8(sig.RevocationReasonText)...)}) + } + + // EmbeddedSignature appears only in subkeys capable of signing and is serialized as per section 5.2.3.26. + if sig.EmbeddedSignature != nil { + var buf bytes.Buffer + err = sig.EmbeddedSignature.serializeBody(&buf) + if err != nil { + return + } + subpackets = append(subpackets, outputSubpacket{true, embeddedSignatureSubpacket, true, buf.Bytes()}) + } + return } + +// AddMetadataToHashSuffix modifies the current hash suffix to include metadata +// (format, filename, and time). Version 5 keys protect this data including it +// in the hash computation. See section 5.2.4. +func (sig *Signature) AddMetadataToHashSuffix() { + if sig == nil || sig.Version != 5 { + return + } + if sig.SigType != 0x00 && sig.SigType != 0x01 { + return + } + lit := sig.Metadata + if lit == nil { + // This will translate into six 0x00 bytes. + lit = &LiteralData{} + } + + // Extract the current byte count + n := sig.HashSuffix[len(sig.HashSuffix)-8:] + l := uint64( + uint64(n[0])<<56 | uint64(n[1])<<48 | uint64(n[2])<<40 | uint64(n[3])<<32 | + uint64(n[4])<<24 | uint64(n[5])<<16 | uint64(n[6])<<8 | uint64(n[7])) + + suffix := bytes.NewBuffer(nil) + suffix.Write(sig.HashSuffix[:l]) + + // Add the metadata + var buf [4]byte + buf[0] = lit.Format + fileName := lit.FileName + if len(lit.FileName) > 255 { + fileName = fileName[:255] + } + buf[1] = byte(len(fileName)) + suffix.Write(buf[:2]) + suffix.Write([]byte(lit.FileName)) + binary.BigEndian.PutUint32(buf[:], lit.Time) + suffix.Write(buf[:]) + + // Update the counter and restore trailing bytes + l = uint64(suffix.Len()) + suffix.Write([]byte{0x05, 0xff}) + suffix.Write([]byte{ + uint8(l >> 56), uint8(l >> 48), uint8(l >> 40), uint8(l >> 32), + uint8(l >> 24), uint8(l >> 16), uint8(l >> 8), uint8(l), + }) + sig.HashSuffix = suffix.Bytes() +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetric_key_encrypted.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetric_key_encrypted.go new file mode 100644 index 0000000000000..bac2b132ea270 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetric_key_encrypted.go @@ -0,0 +1,276 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/cipher" + "io" + "strconv" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/s2k" +) + +// This is the largest session key that we'll support. Since at most 256-bit cipher +// is supported in OpenPGP, this is large enough to contain also the auth tag. +const maxSessionKeySizeInBytes = 64 + +// SymmetricKeyEncrypted represents a passphrase protected session key. See RFC +// 4880, section 5.3. +type SymmetricKeyEncrypted struct { + Version int + CipherFunc CipherFunction + Mode AEADMode + s2k func(out, in []byte) + iv []byte + encryptedKey []byte // Contains also the authentication tag for AEAD +} + +// parse parses an SymmetricKeyEncrypted packet as specified in +// https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#name-symmetric-key-encrypted-ses +func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error { + var buf [1]byte + + // Version + if _, err := readFull(r, buf[:]); err != nil { + return err + } + ske.Version = int(buf[0]) + if ske.Version != 4 && ske.Version != 5 { + return errors.UnsupportedError("unknown SymmetricKeyEncrypted version") + } + + // Cipher function + if _, err := readFull(r, buf[:]); err != nil { + return err + } + ske.CipherFunc = CipherFunction(buf[0]) + if !ske.CipherFunc.IsSupported() { + return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(buf[0]))) + } + + if ske.Version == 5 { + // AEAD mode + if _, err := readFull(r, buf[:]); err != nil { + return errors.StructuralError("cannot read AEAD octet from packet") + } + ske.Mode = AEADMode(buf[0]) + } + + var err error + if ske.s2k, err = s2k.Parse(r); err != nil { + if _, ok := err.(errors.ErrDummyPrivateKey); ok { + return errors.UnsupportedError("missing key GNU extension in session key") + } + return err + } + + if ske.Version == 5 { + // AEAD IV + iv := make([]byte, ske.Mode.IvLength()) + _, err := readFull(r, iv) + if err != nil { + return errors.StructuralError("cannot read AEAD IV") + } + + ske.iv = iv + } + + encryptedKey := make([]byte, maxSessionKeySizeInBytes) + // The session key may follow. We just have to try and read to find + // out. If it exists then we limit it to maxSessionKeySizeInBytes. + n, err := readFull(r, encryptedKey) + if err != nil && err != io.ErrUnexpectedEOF { + return err + } + + if n != 0 { + if n == maxSessionKeySizeInBytes { + return errors.UnsupportedError("oversized encrypted session key") + } + ske.encryptedKey = encryptedKey[:n] + } + return nil +} + +// Decrypt attempts to decrypt an encrypted session key and returns the key and +// the cipher to use when decrypting a subsequent Symmetrically Encrypted Data +// packet. +func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, CipherFunction, error) { + key := make([]byte, ske.CipherFunc.KeySize()) + ske.s2k(key, passphrase) + if len(ske.encryptedKey) == 0 { + return key, ske.CipherFunc, nil + } + switch ske.Version { + case 4: + plaintextKey, cipherFunc, err := ske.decryptV4(key) + return plaintextKey, cipherFunc, err + case 5: + plaintextKey, err := ske.decryptV5(key) + return plaintextKey, CipherFunction(0), err + } + err := errors.UnsupportedError("unknown SymmetricKeyEncrypted version") + return nil, CipherFunction(0), err +} + +func (ske *SymmetricKeyEncrypted) decryptV4(key []byte) ([]byte, CipherFunction, error) { + // the IV is all zeros + iv := make([]byte, ske.CipherFunc.blockSize()) + c := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv) + plaintextKey := make([]byte, len(ske.encryptedKey)) + c.XORKeyStream(plaintextKey, ske.encryptedKey) + cipherFunc := CipherFunction(plaintextKey[0]) + if cipherFunc.blockSize() == 0 { + return nil, ske.CipherFunc, errors.UnsupportedError( + "unknown cipher: " + strconv.Itoa(int(cipherFunc))) + } + plaintextKey = plaintextKey[1:] + if len(plaintextKey) != cipherFunc.KeySize() { + return nil, cipherFunc, errors.StructuralError( + "length of decrypted key not equal to cipher keysize") + } + return plaintextKey, cipherFunc, nil +} + +func (ske *SymmetricKeyEncrypted) decryptV5(key []byte) ([]byte, error) { + adata := []byte{0xc3, byte(5), byte(ske.CipherFunc), byte(ske.Mode)} + aead := getEncryptedKeyAeadInstance(ske.CipherFunc, ske.Mode, key, adata) + + plaintextKey, err := aead.Open(nil, ske.iv, ske.encryptedKey, adata) + if err != nil { + return nil, err + } + return plaintextKey, nil +} + +// SerializeSymmetricKeyEncrypted serializes a symmetric key packet to w. +// The packet contains a random session key, encrypted by a key derived from +// the given passphrase. The session key is returned and must be passed to +// SerializeSymmetricallyEncrypted. +// If config is nil, sensible defaults will be used. +func SerializeSymmetricKeyEncrypted(w io.Writer, passphrase []byte, config *Config) (key []byte, err error) { + cipherFunc := config.Cipher() + + sessionKey := make([]byte, cipherFunc.KeySize()) + _, err = io.ReadFull(config.Random(), sessionKey) + if err != nil { + return + } + + err = SerializeSymmetricKeyEncryptedReuseKey(w, sessionKey, passphrase, config) + if err != nil { + return + } + + key = sessionKey + return +} + +// SerializeSymmetricKeyEncryptedReuseKey serializes a symmetric key packet to w. +// The packet contains the given session key, encrypted by a key derived from +// the given passphrase. The returned session key must be passed to +// SerializeSymmetricallyEncrypted. +// If config is nil, sensible defaults will be used. +func SerializeSymmetricKeyEncryptedReuseKey(w io.Writer, sessionKey []byte, passphrase []byte, config *Config) (err error) { + var version int + if config.AEAD() != nil { + version = 5 + } else { + version = 4 + } + cipherFunc := config.Cipher() + // cipherFunc must be AES + if !cipherFunc.IsSupported() || cipherFunc < CipherAES128 || cipherFunc > CipherAES256 { + return errors.UnsupportedError("unsupported cipher: " + strconv.Itoa(int(cipherFunc))) + } + + keySize := cipherFunc.KeySize() + s2kBuf := new(bytes.Buffer) + keyEncryptingKey := make([]byte, keySize) + // s2k.Serialize salts and stretches the passphrase, and writes the + // resulting key to keyEncryptingKey and the s2k descriptor to s2kBuf. + err = s2k.Serialize(s2kBuf, keyEncryptingKey, config.Random(), passphrase, config.S2K()) + if err != nil { + return + } + s2kBytes := s2kBuf.Bytes() + + var packetLength int + switch version { + case 4: + packetLength = 2 /* header */ + len(s2kBytes) + 1 /* cipher type */ + keySize + case 5: + ivLen := config.AEAD().Mode().IvLength() + tagLen := config.AEAD().Mode().TagLength() + packetLength = 3 + len(s2kBytes) + ivLen + keySize + tagLen + } + err = serializeHeader(w, packetTypeSymmetricKeyEncrypted, packetLength) + if err != nil { + return + } + + // Symmetric Key Encrypted Version + buf := []byte{byte(version)} + + // Cipher function + buf = append(buf, byte(cipherFunc)) + + if version == 5 { + // AEAD mode + buf = append(buf, byte(config.AEAD().Mode())) + } + _, err = w.Write(buf) + if err != nil { + return + } + _, err = w.Write(s2kBytes) + if err != nil { + return + } + + switch version { + case 4: + iv := make([]byte, cipherFunc.blockSize()) + c := cipher.NewCFBEncrypter(cipherFunc.new(keyEncryptingKey), iv) + encryptedCipherAndKey := make([]byte, keySize+1) + c.XORKeyStream(encryptedCipherAndKey, buf[1:]) + c.XORKeyStream(encryptedCipherAndKey[1:], sessionKey) + _, err = w.Write(encryptedCipherAndKey) + if err != nil { + return + } + case 5: + mode := config.AEAD().Mode() + adata := []byte{0xc3, byte(5), byte(cipherFunc), byte(mode)} + aead := getEncryptedKeyAeadInstance(cipherFunc, mode, keyEncryptingKey, adata) + + // Sample iv using random reader + iv := make([]byte, config.AEAD().Mode().IvLength()) + _, err = io.ReadFull(config.Random(), iv) + if err != nil { + return + } + // Seal and write (encryptedData includes auth. tag) + + encryptedData := aead.Seal(nil, iv, sessionKey, adata) + _, err = w.Write(iv) + if err != nil { + return + } + _, err = w.Write(encryptedData) + if err != nil { + return + } + } + + return +} + +func getEncryptedKeyAeadInstance(c CipherFunction, mode AEADMode, inputKey, associatedData []byte) (aead cipher.AEAD) { + blockCipher := c.new(inputKey) + return mode.new(blockCipher) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted.go new file mode 100644 index 0000000000000..e9bbf0327e133 --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted.go @@ -0,0 +1,90 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" +) + +const aeadSaltSize = 32 + +// SymmetricallyEncrypted represents a symmetrically encrypted byte string. The +// encrypted Contents will consist of more OpenPGP packets. See RFC 4880, +// sections 5.7 and 5.13. +type SymmetricallyEncrypted struct { + Version int + Contents io.Reader // contains tag for version 2 + IntegrityProtected bool // If true it is type 18 (with MDC or AEAD). False is packet type 9 + + // Specific to version 1 + prefix []byte + + // Specific to version 2 + Cipher CipherFunction + Mode AEADMode + ChunkSizeByte byte + Salt [aeadSaltSize]byte +} + +const ( + symmetricallyEncryptedVersionMdc = 1 + symmetricallyEncryptedVersionAead = 2 +) + +func (se *SymmetricallyEncrypted) parse(r io.Reader) error { + if se.IntegrityProtected { + // See RFC 4880, section 5.13. + var buf [1]byte + _, err := readFull(r, buf[:]) + if err != nil { + return err + } + + switch buf[0] { + case symmetricallyEncryptedVersionMdc: + se.Version = symmetricallyEncryptedVersionMdc + case symmetricallyEncryptedVersionAead: + se.Version = symmetricallyEncryptedVersionAead + if err := se.parseAead(r); err != nil { + return err + } + default: + return errors.UnsupportedError("unknown SymmetricallyEncrypted version") + } + } + se.Contents = r + return nil +} + +// Decrypt returns a ReadCloser, from which the decrypted Contents of the +// packet can be read. An incorrect key will only be detected after trying +// to decrypt the entire data. +func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) { + if se.Version == symmetricallyEncryptedVersionAead { + return se.decryptAead(key) + } + + return se.decryptMdc(c, key) +} + +// SerializeSymmetricallyEncrypted serializes a symmetrically encrypted packet +// to w and returns a WriteCloser to which the to-be-encrypted packets can be +// written. +// If config is nil, sensible defaults will be used. +func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, aeadSupported bool, cipherSuite CipherSuite, key []byte, config *Config) (Contents io.WriteCloser, err error) { + writeCloser := noOpCloser{w} + ciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedIntegrityProtected) + if err != nil { + return + } + + if aeadSupported { + return serializeSymmetricallyEncryptedAead(ciphertext, cipherSuite, config.AEADConfig.ChunkSizeByte(), config.Random(), key) + } + + return serializeSymmetricallyEncryptedMdc(ciphertext, c, key, config) +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_aead.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_aead.go new file mode 100644 index 0000000000000..e96252c19681c --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_aead.go @@ -0,0 +1,156 @@ +// Copyright 2023 Proton AG. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto/cipher" + "crypto/sha256" + "io" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + "golang.org/x/crypto/hkdf" +) + +// parseAead parses a V2 SEIPD packet (AEAD) as specified in +// https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-5.13.2 +func (se *SymmetricallyEncrypted) parseAead(r io.Reader) error { + headerData := make([]byte, 3) + if n, err := io.ReadFull(r, headerData); n < 3 { + return errors.StructuralError("could not read aead header: " + err.Error()) + } + + // Cipher + se.Cipher = CipherFunction(headerData[0]) + // cipherFunc must have block size 16 to use AEAD + if se.Cipher.blockSize() != 16 { + return errors.UnsupportedError("invalid aead cipher: " + string(se.Cipher)) + } + + // Mode + se.Mode = AEADMode(headerData[1]) + if se.Mode.TagLength() == 0 { + return errors.UnsupportedError("unknown aead mode: " + string(se.Mode)) + } + + // Chunk size + se.ChunkSizeByte = headerData[2] + if se.ChunkSizeByte > 16 { + return errors.UnsupportedError("invalid aead chunk size byte: " + string(se.ChunkSizeByte)) + } + + // Salt + if n, err := io.ReadFull(r, se.Salt[:]); n < aeadSaltSize { + return errors.StructuralError("could not read aead salt: " + err.Error()) + } + + return nil +} + +// associatedData for chunks: tag, version, cipher, mode, chunk size byte +func (se *SymmetricallyEncrypted) associatedData() []byte { + return []byte{ + 0xD2, + symmetricallyEncryptedVersionAead, + byte(se.Cipher), + byte(se.Mode), + se.ChunkSizeByte, + } +} + +// decryptAead decrypts a V2 SEIPD packet (AEAD) as specified in +// https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-5.13.2 +func (se *SymmetricallyEncrypted) decryptAead(inputKey []byte) (io.ReadCloser, error) { + aead, nonce := getSymmetricallyEncryptedAeadInstance(se.Cipher, se.Mode, inputKey, se.Salt[:], se.associatedData()) + + // Carry the first tagLen bytes + tagLen := se.Mode.TagLength() + peekedBytes := make([]byte, tagLen) + n, err := io.ReadFull(se.Contents, peekedBytes) + if n < tagLen || (err != nil && err != io.EOF) { + return nil, errors.StructuralError("not enough data to decrypt:" + err.Error()) + } + + return &aeadDecrypter{ + aeadCrypter: aeadCrypter{ + aead: aead, + chunkSize: decodeAEADChunkSize(se.ChunkSizeByte), + initialNonce: nonce, + associatedData: se.associatedData(), + chunkIndex: make([]byte, 8), + packetTag: packetTypeSymmetricallyEncryptedIntegrityProtected, + }, + reader: se.Contents, + peekedBytes: peekedBytes, + }, nil +} + +// serializeSymmetricallyEncryptedAead encrypts to a writer a V2 SEIPD packet (AEAD) as specified in +// https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-5.13.2 +func serializeSymmetricallyEncryptedAead(ciphertext io.WriteCloser, cipherSuite CipherSuite, chunkSizeByte byte, rand io.Reader, inputKey []byte) (Contents io.WriteCloser, err error) { + // cipherFunc must have block size 16 to use AEAD + if cipherSuite.Cipher.blockSize() != 16 { + return nil, errors.InvalidArgumentError("invalid aead cipher function") + } + + if cipherSuite.Cipher.KeySize() != len(inputKey) { + return nil, errors.InvalidArgumentError("error in aead serialization: bad key length") + } + + // Data for en/decryption: tag, version, cipher, aead mode, chunk size + prefix := []byte{ + 0xD2, + symmetricallyEncryptedVersionAead, + byte(cipherSuite.Cipher), + byte(cipherSuite.Mode), + chunkSizeByte, + } + + // Write header (that correspond to prefix except first byte) + n, err := ciphertext.Write(prefix[1:]) + if err != nil || n < 4 { + return nil, err + } + + // Random salt + salt := make([]byte, aeadSaltSize) + if _, err := rand.Read(salt); err != nil { + return nil, err + } + + if _, err := ciphertext.Write(salt); err != nil { + return nil, err + } + + aead, nonce := getSymmetricallyEncryptedAeadInstance(cipherSuite.Cipher, cipherSuite.Mode, inputKey, salt, prefix) + + return &aeadEncrypter{ + aeadCrypter: aeadCrypter{ + aead: aead, + chunkSize: decodeAEADChunkSize(chunkSizeByte), + associatedData: prefix, + chunkIndex: make([]byte, 8), + initialNonce: nonce, + packetTag: packetTypeSymmetricallyEncryptedIntegrityProtected, + }, + writer: ciphertext, + }, nil +} + +func getSymmetricallyEncryptedAeadInstance(c CipherFunction, mode AEADMode, inputKey, salt, associatedData []byte) (aead cipher.AEAD, nonce []byte) { + hkdfReader := hkdf.New(sha256.New, inputKey, salt, associatedData) + + encryptionKey := make([]byte, c.KeySize()) + _, _ = readFull(hkdfReader, encryptionKey) + + // Last 64 bits of nonce are the counter + nonce = make([]byte, mode.IvLength()-8) + + _, _ = readFull(hkdfReader, nonce) + + blockCipher := c.new(encryptionKey) + aead = mode.new(blockCipher) + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_mdc.go similarity index 61% rename from vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_mdc.go index 1a1a62964fc95..fa26bebe382fa 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/symmetrically_encrypted_mdc.go @@ -8,54 +8,38 @@ import ( "crypto/cipher" "crypto/sha1" "crypto/subtle" - "golang.org/x/crypto/openpgp/errors" "hash" "io" "strconv" + + "github.com/ProtonMail/go-crypto/openpgp/errors" ) -// SymmetricallyEncrypted represents a symmetrically encrypted byte string. The -// encrypted contents will consist of more OpenPGP packets. See RFC 4880, -// sections 5.7 and 5.13. -type SymmetricallyEncrypted struct { - MDC bool // true iff this is a type 18 packet and thus has an embedded MAC. - contents io.Reader - prefix []byte +// seMdcReader wraps an io.Reader with a no-op Close method. +type seMdcReader struct { + in io.Reader } -const symmetricallyEncryptedVersion = 1 +func (ser seMdcReader) Read(buf []byte) (int, error) { + return ser.in.Read(buf) +} -func (se *SymmetricallyEncrypted) parse(r io.Reader) error { - if se.MDC { - // See RFC 4880, section 5.13. - var buf [1]byte - _, err := readFull(r, buf[:]) - if err != nil { - return err - } - if buf[0] != symmetricallyEncryptedVersion { - return errors.UnsupportedError("unknown SymmetricallyEncrypted version") - } - } - se.contents = r +func (ser seMdcReader) Close() error { return nil } -// Decrypt returns a ReadCloser, from which the decrypted contents of the -// packet can be read. An incorrect key can, with high probability, be detected -// immediately and this will result in a KeyIncorrect error being returned. -func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) { - keySize := c.KeySize() - if keySize == 0 { - return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(c))) +func (se *SymmetricallyEncrypted) decryptMdc(c CipherFunction, key []byte) (io.ReadCloser, error) { + if !c.IsSupported() { + return nil, errors.UnsupportedError("unsupported cipher: " + strconv.Itoa(int(c))) } - if len(key) != keySize { + + if len(key) != c.KeySize() { return nil, errors.InvalidArgumentError("SymmetricallyEncrypted: incorrect key length") } if se.prefix == nil { se.prefix = make([]byte, c.blockSize()+2) - _, err := readFull(se.contents, se.prefix) + _, err := readFull(se.Contents, se.prefix) if err != nil { return nil, err } @@ -64,47 +48,31 @@ func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.Read } ocfbResync := OCFBResync - if se.MDC { + if se.IntegrityProtected { // MDC packets use a different form of OCFB mode. ocfbResync = OCFBNoResync } s := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync) - if s == nil { - return nil, errors.ErrKeyIncorrect - } - plaintext := cipher.StreamReader{S: s, R: se.contents} + plaintext := cipher.StreamReader{S: s, R: se.Contents} - if se.MDC { - // MDC packets have an embedded hash that we need to check. + if se.IntegrityProtected { + // IntegrityProtected packets have an embedded hash that we need to check. h := sha1.New() h.Write(se.prefix) return &seMDCReader{in: plaintext, h: h}, nil } // Otherwise, we just need to wrap plaintext so that it's a valid ReadCloser. - return seReader{plaintext}, nil -} - -// seReader wraps an io.Reader with a no-op Close method. -type seReader struct { - in io.Reader -} - -func (ser seReader) Read(buf []byte) (int, error) { - return ser.in.Read(buf) -} - -func (ser seReader) Close() error { - return nil + return seMdcReader{plaintext}, nil } const mdcTrailerSize = 1 /* tag byte */ + 1 /* length byte */ + sha1.Size // An seMDCReader wraps an io.Reader, maintains a running hash and keeps hold // of the most recent 22 bytes (mdcTrailerSize). Upon EOF, those bytes form an -// MDC packet containing a hash of the previous contents which is checked +// MDC packet containing a hash of the previous Contents which is checked // against the running hash. See RFC 4880, section 5.13. type seMDCReader struct { in io.Reader @@ -175,12 +143,12 @@ func (ser *seMDCReader) Read(buf []byte) (n int, err error) { return } -// This is a new-format packet tag byte for a type 19 (MDC) packet. +// This is a new-format packet tag byte for a type 19 (Integrity Protected) packet. const mdcPacketTagByte = byte(0x80) | 0x40 | 19 func (ser *seMDCReader) Close() error { if ser.error { - return errors.SignatureError("error during reading") + return errors.ErrMDCMissing } for !ser.eof { @@ -191,18 +159,20 @@ func (ser *seMDCReader) Close() error { break } if err != nil { - return errors.SignatureError("error during reading") + return errors.ErrMDCMissing } } - if ser.trailer[0] != mdcPacketTagByte || ser.trailer[1] != sha1.Size { - return errors.SignatureError("MDC packet not found") - } ser.h.Write(ser.trailer[:2]) final := ser.h.Sum(nil) if subtle.ConstantTimeCompare(final, ser.trailer[2:]) != 1 { - return errors.SignatureError("hash mismatch") + return errors.ErrMDCHashMismatch + } + // The hash already includes the MDC header, but we still check its value + // to confirm encryption correctness + if ser.trailer[0] != mdcPacketTagByte || ser.trailer[1] != sha1.Size { + return errors.ErrMDCMissing } return nil } @@ -236,7 +206,7 @@ func (w *seMDCWriter) Close() (err error) { return w.w.Close() } -// noOpCloser is like an io.NopCloser, but for an io.Writer. +// noOpCloser is like an ioutil.NopCloser, but for an io.Writer. type noOpCloser struct { w io.Writer } @@ -249,21 +219,17 @@ func (c noOpCloser) Close() error { return nil } -// SerializeSymmetricallyEncrypted serializes a symmetrically encrypted packet -// to w and returns a WriteCloser to which the to-be-encrypted packets can be -// written. -// If config is nil, sensible defaults will be used. -func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, config *Config) (contents io.WriteCloser, err error) { - if c.KeySize() != len(key) { - return nil, errors.InvalidArgumentError("SymmetricallyEncrypted.Serialize: bad key length") +func serializeSymmetricallyEncryptedMdc(ciphertext io.WriteCloser, c CipherFunction, key []byte, config *Config) (Contents io.WriteCloser, err error) { + // Disallow old cipher suites + if !c.IsSupported() || c < CipherAES128 { + return nil, errors.InvalidArgumentError("invalid mdc cipher function") } - writeCloser := noOpCloser{w} - ciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedMDC) - if err != nil { - return + + if c.KeySize() != len(key) { + return nil, errors.InvalidArgumentError("error in mdc serialization: bad key length") } - _, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion}) + _, err = ciphertext.Write([]byte{symmetricallyEncryptedVersionMdc}) if err != nil { return } @@ -285,6 +251,6 @@ func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, h := sha1.New() h.Write(iv) h.Write(iv[blockSize-2:]) - contents = &seMDCWriter{w: plaintext, h: h} + Contents = &seMDCWriter{w: plaintext, h: h} return } diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userattribute.go similarity index 87% rename from vendor/golang.org/x/crypto/openpgp/packet/userattribute.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userattribute.go index ff7ef5307557e..88ec72c6c4aaf 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userattribute.go @@ -9,6 +9,7 @@ import ( "image" "image/jpeg" "io" + "io/ioutil" ) const UserAttrImageSubpacket = 1 @@ -41,9 +42,16 @@ func NewUserAttributePhoto(photos ...image.Image) (uat *UserAttribute, err error if err = jpeg.Encode(&buf, photo, nil); err != nil { return } + + lengthBuf := make([]byte, 5) + n := serializeSubpacketLength(lengthBuf, len(buf.Bytes())+1) + lengthBuf = lengthBuf[:n] + uat.Contents = append(uat.Contents, &OpaqueSubpacket{ - SubType: UserAttrImageSubpacket, - Contents: buf.Bytes()}) + SubType: UserAttrImageSubpacket, + EncodedLength: lengthBuf, + Contents: buf.Bytes(), + }) } return } @@ -55,7 +63,7 @@ func NewUserAttribute(contents ...*OpaqueSubpacket) *UserAttribute { func (uat *UserAttribute) parse(r io.Reader) (err error) { // RFC 4880, section 5.13 - b, err := io.ReadAll(r) + b, err := ioutil.ReadAll(r) if err != nil { return } @@ -68,7 +76,10 @@ func (uat *UserAttribute) parse(r io.Reader) (err error) { func (uat *UserAttribute) Serialize(w io.Writer) (err error) { var buf bytes.Buffer for _, sp := range uat.Contents { - sp.Serialize(&buf) + err = sp.Serialize(&buf) + if err != nil { + return err + } } if err = serializeHeader(w, packetTypeUserAttribute, buf.Len()); err != nil { return err diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userid.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userid.go similarity index 95% rename from vendor/golang.org/x/crypto/openpgp/packet/userid.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userid.go index 359a462eb8ab6..614fbafd5e1a2 100644 --- a/vendor/golang.org/x/crypto/openpgp/packet/userid.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/packet/userid.go @@ -6,6 +6,7 @@ package packet import ( "io" + "io/ioutil" "strings" ) @@ -65,7 +66,7 @@ func NewUserId(name, comment, email string) *UserId { func (uid *UserId) parse(r io.Reader) (err error) { // RFC 4880, section 5.11 - b, err := io.ReadAll(r) + b, err := ioutil.ReadAll(r) if err != nil { return } @@ -155,5 +156,12 @@ func parseUserId(id string) (name, comment, email string) { name = strings.TrimSpace(id[n.start:n.end]) comment = strings.TrimSpace(id[c.start:c.end]) email = strings.TrimSpace(id[e.start:e.end]) + + // RFC 2822 3.4: alternate simple form of a mailbox + if email == "" && strings.ContainsRune(name, '@') { + email = name + name = "" + } + return } diff --git a/vendor/golang.org/x/crypto/openpgp/read.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/read.go similarity index 51% rename from vendor/golang.org/x/crypto/openpgp/read.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/read.go index 48a893146858c..8499c73790d6e 100644 --- a/vendor/golang.org/x/crypto/openpgp/read.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/read.go @@ -3,24 +3,21 @@ // license that can be found in the LICENSE file. // Package openpgp implements high level operations on OpenPGP messages. -// -// Deprecated: this package is unmaintained except for security fixes. New -// applications should consider a more focused, modern alternative to OpenPGP -// for their specific task. If you are required to interoperate with OpenPGP -// systems and need a maintained package, consider a community fork. -// See https://golang.org/issue/44226. -package openpgp // import "golang.org/x/crypto/openpgp" +package openpgp // import "github.com/ProtonMail/go-crypto/openpgp" import ( "crypto" _ "crypto/sha256" + _ "crypto/sha512" "hash" "io" "strconv" - "golang.org/x/crypto/openpgp/armor" - "golang.org/x/crypto/openpgp/errors" - "golang.org/x/crypto/openpgp/packet" + "github.com/ProtonMail/go-crypto/openpgp/armor" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" + "github.com/ProtonMail/go-crypto/openpgp/packet" + _ "golang.org/x/crypto/sha3" ) // SignatureType is the armor type for a PGP signature. @@ -62,9 +59,9 @@ type MessageDetails struct { // been consumed. Once EOF has been seen, the following fields are // valid. (An authentication code failure is reported as a // SignatureError error when reading from UnverifiedBody.) - SignatureError error // nil if the signature is good. - Signature *packet.Signature // the signature packet itself, if v4 (default) - SignatureV3 *packet.SignatureV3 // the signature packet if it is a v2 or v3 signature + Signature *packet.Signature // the signature packet itself. + SignatureError error // nil if the signature is good. + UnverifiedSignatures []*packet.Signature // all other unverified signature packets. decrypted io.ReadCloser } @@ -94,7 +91,8 @@ func ReadMessage(r io.Reader, keyring KeyRing, prompt PromptFunction, config *pa var symKeys []*packet.SymmetricKeyEncrypted var pubKeys []keyEnvelopePair - var se *packet.SymmetricallyEncrypted + // Integrity protected encrypted packet: SymmetricallyEncrypted or AEADEncrypted + var edp packet.EncryptedDataPacket packets := packet.NewReader(r) md = new(MessageDetails) @@ -119,22 +117,30 @@ ParsePackets: // This packet contains the decryption key encrypted to a public key. md.EncryptedToKeyIds = append(md.EncryptedToKeyIds, p.KeyId) switch p.Algo { - case packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal: + case packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal, packet.PubKeyAlgoECDH: break default: continue } - var keys []Key - if p.KeyId == 0 { - keys = keyring.DecryptionKeys() - } else { - keys = keyring.KeysById(p.KeyId) - } - for _, k := range keys { - pubKeys = append(pubKeys, keyEnvelopePair{k, p}) + if keyring != nil { + var keys []Key + if p.KeyId == 0 { + keys = keyring.DecryptionKeys() + } else { + keys = keyring.KeysById(p.KeyId) + } + for _, k := range keys { + pubKeys = append(pubKeys, keyEnvelopePair{k, p}) + } } case *packet.SymmetricallyEncrypted: - se = p + if !p.IntegrityProtected && !config.AllowUnauthenticatedMessages() { + return nil, errors.UnsupportedError("message is not integrity protected") + } + edp = p + break ParsePackets + case *packet.AEADEncrypted: + edp = p break ParsePackets case *packet.Compressed, *packet.LiteralData, *packet.OnePassSignature: // This message isn't encrypted. @@ -142,7 +148,7 @@ ParsePackets: return nil, errors.StructuralError("key material not followed by encrypted message") } packets.Unread(p) - return readSignedMessage(packets, nil, keyring) + return readSignedMessage(packets, nil, keyring, config) } } @@ -164,12 +170,13 @@ FindKey: } if !pk.key.PrivateKey.Encrypted { if len(pk.encryptedKey.Key) == 0 { - pk.encryptedKey.Decrypt(pk.key.PrivateKey, config) - } - if len(pk.encryptedKey.Key) == 0 { - continue + errDec := pk.encryptedKey.Decrypt(pk.key.PrivateKey, config) + if errDec != nil { + continue + } } - decrypted, err = se.Decrypt(pk.encryptedKey.CipherFunc, pk.encryptedKey.Key) + // Try to decrypt symmetrically encrypted + decrypted, err = edp.Decrypt(pk.encryptedKey.CipherFunc, pk.encryptedKey.Key) if err != nil && err != errors.ErrKeyIncorrect { return nil, err } @@ -204,16 +211,17 @@ FindKey: if len(symKeys) != 0 && passphrase != nil { for _, s := range symKeys { key, cipherFunc, err := s.Decrypt(passphrase) + // In v4, on wrong passphrase, session key decryption is very likely to result in an invalid cipherFunc: + // only for < 5% of cases we will proceed to decrypt the data if err == nil { - decrypted, err = se.Decrypt(cipherFunc, key) - if err != nil && err != errors.ErrKeyIncorrect { + decrypted, err = edp.Decrypt(cipherFunc, key) + if err != nil { return nil, err } if decrypted != nil { break FindKey } } - } } } @@ -222,13 +230,17 @@ FindKey: if err := packets.Push(decrypted); err != nil { return nil, err } - return readSignedMessage(packets, md, keyring) + mdFinal, sensitiveParsingErr := readSignedMessage(packets, md, keyring, config) + if sensitiveParsingErr != nil { + return nil, errors.StructuralError("parsing error") + } + return mdFinal, nil } // readSignedMessage reads a possibly signed message if mdin is non-zero then // that structure is updated and returned. Otherwise a fresh MessageDetails is // used. -func readSignedMessage(packets *packet.Reader, mdin *MessageDetails, keyring KeyRing) (md *MessageDetails, err error) { +func readSignedMessage(packets *packet.Reader, mdin *MessageDetails, keyring KeyRing, config *packet.Config) (md *MessageDetails, err error) { if mdin == nil { mdin = new(MessageDetails) } @@ -237,6 +249,7 @@ func readSignedMessage(packets *packet.Reader, mdin *MessageDetails, keyring Key var p packet.Packet var h hash.Hash var wrappedHash hash.Hash + var prevLast bool FindLiteralData: for { p, err = packets.Next() @@ -249,21 +262,26 @@ FindLiteralData: return nil, err } case *packet.OnePassSignature: - if !p.IsLast { - return nil, errors.UnsupportedError("nested signatures") + if prevLast { + return nil, errors.UnsupportedError("nested signature packets") + } + + if p.IsLast { + prevLast = true } h, wrappedHash, err = hashForSignature(p.Hash, p.SigType) if err != nil { - md = nil - return + md.SignatureError = err } md.IsSigned = true md.SignedByKeyId = p.KeyId - keys := keyring.KeysByIdUsage(p.KeyId, packet.KeyFlagSign) - if len(keys) > 0 { - md.SignedBy = &keys[0] + if keyring != nil { + keys := keyring.KeysByIdUsage(p.KeyId, packet.KeyFlagSign) + if len(keys) > 0 { + md.SignedBy = &keys[0] + } } case *packet.LiteralData: md.LiteralData = p @@ -271,8 +289,8 @@ FindLiteralData: } } - if md.SignedBy != nil { - md.UnverifiedBody = &signatureCheckReader{packets, h, wrappedHash, md} + if md.IsSigned && md.SignatureError == nil { + md.UnverifiedBody = &signatureCheckReader{packets, h, wrappedHash, md, config} } else if md.decrypted != nil { md.UnverifiedBody = checkReader{md} } else { @@ -287,11 +305,14 @@ FindLiteralData: // should be preprocessed (i.e. to normalize line endings). Thus this function // returns two hashes. The second should be used to hash the message itself and // performs any needed preprocessing. -func hashForSignature(hashId crypto.Hash, sigType packet.SignatureType) (hash.Hash, hash.Hash, error) { - if !hashId.Available() { - return nil, nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashId))) +func hashForSignature(hashFunc crypto.Hash, sigType packet.SignatureType) (hash.Hash, hash.Hash, error) { + if _, ok := algorithm.HashToHashIdWithSha1(hashFunc); !ok { + return nil, nil, errors.UnsupportedError("unsupported hash function") } - h := hashId.New() + if !hashFunc.Available() { + return nil, nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashFunc))) + } + h := hashFunc.New() switch sigType { case packet.SigTypeBinary: @@ -310,15 +331,21 @@ type checkReader struct { md *MessageDetails } -func (cr checkReader) Read(buf []byte) (n int, err error) { - n, err = cr.md.LiteralData.Body.Read(buf) - if err == io.EOF { +func (cr checkReader) Read(buf []byte) (int, error) { + n, sensitiveParsingError := cr.md.LiteralData.Body.Read(buf) + if sensitiveParsingError == io.EOF { mdcErr := cr.md.decrypted.Close() if mdcErr != nil { - err = mdcErr + return n, mdcErr } + return n, io.EOF } - return + + if sensitiveParsingError != nil { + return n, errors.StructuralError("parsing error") + } + + return n, nil } // signatureCheckReader wraps an io.Reader from a LiteralData packet and hashes @@ -328,26 +355,53 @@ type signatureCheckReader struct { packets *packet.Reader h, wrappedHash hash.Hash md *MessageDetails + config *packet.Config } -func (scr *signatureCheckReader) Read(buf []byte) (n int, err error) { - n, err = scr.md.LiteralData.Body.Read(buf) - scr.wrappedHash.Write(buf[:n]) - if err == io.EOF { +func (scr *signatureCheckReader) Read(buf []byte) (int, error) { + n, sensitiveParsingError := scr.md.LiteralData.Body.Read(buf) + + // Hash only if required + if scr.md.SignedBy != nil { + scr.wrappedHash.Write(buf[:n]) + } + + if sensitiveParsingError == io.EOF { var p packet.Packet - p, scr.md.SignatureError = scr.packets.Next() - if scr.md.SignatureError != nil { - return + var readError error + var sig *packet.Signature + + p, readError = scr.packets.Next() + for readError == nil { + var ok bool + if sig, ok = p.(*packet.Signature); ok { + if sig.Version == 5 && (sig.SigType == 0x00 || sig.SigType == 0x01) { + sig.Metadata = scr.md.LiteralData + } + + // If signature KeyID matches + if scr.md.SignedBy != nil && *sig.IssuerKeyId == scr.md.SignedByKeyId { + key := scr.md.SignedBy + signatureError := key.PublicKey.VerifySignature(scr.h, sig) + if signatureError == nil { + signatureError = checkSignatureDetails(key, sig, scr.config) + } + scr.md.Signature = sig + scr.md.SignatureError = signatureError + } else { + scr.md.UnverifiedSignatures = append(scr.md.UnverifiedSignatures, sig) + } + } + + p, readError = scr.packets.Next() } - var ok bool - if scr.md.Signature, ok = p.(*packet.Signature); ok { - scr.md.SignatureError = scr.md.SignedBy.PublicKey.VerifySignature(scr.h, scr.md.Signature) - } else if scr.md.SignatureV3, ok = p.(*packet.SignatureV3); ok { - scr.md.SignatureError = scr.md.SignedBy.PublicKey.VerifySignatureV3(scr.h, scr.md.SignatureV3) - } else { - scr.md.SignatureError = errors.StructuralError("LiteralData not followed by Signature") - return + if scr.md.SignedBy != nil && scr.md.Signature == nil { + if scr.md.UnverifiedSignatures == nil { + scr.md.SignatureError = errors.StructuralError("LiteralData not followed by signature") + } else { + scr.md.SignatureError = errors.StructuralError("No matching signature found") + } } // The SymmetricallyEncrypted packet, if any, might have an @@ -356,47 +410,87 @@ func (scr *signatureCheckReader) Read(buf []byte) (n int, err error) { if scr.md.decrypted != nil { mdcErr := scr.md.decrypted.Close() if mdcErr != nil { - err = mdcErr + return n, mdcErr } } + return n, io.EOF } - return + + if sensitiveParsingError != nil { + return n, errors.StructuralError("parsing error") + } + + return n, nil +} + +// VerifyDetachedSignature takes a signed file and a detached signature and +// returns the signature packet and the entity the signature was signed by, +// if any, and a possible signature verification error. +// If the signer isn't known, ErrUnknownIssuer is returned. +func VerifyDetachedSignature(keyring KeyRing, signed, signature io.Reader, config *packet.Config) (sig *packet.Signature, signer *Entity, err error) { + var expectedHashes []crypto.Hash + return verifyDetachedSignature(keyring, signed, signature, expectedHashes, config) +} + +// VerifyDetachedSignatureAndHash performs the same actions as +// VerifyDetachedSignature and checks that the expected hash functions were used. +func VerifyDetachedSignatureAndHash(keyring KeyRing, signed, signature io.Reader, expectedHashes []crypto.Hash, config *packet.Config) (sig *packet.Signature, signer *Entity, err error) { + return verifyDetachedSignature(keyring, signed, signature, expectedHashes, config) } // CheckDetachedSignature takes a signed file and a detached signature and -// returns the signer if the signature is valid. If the signer isn't known, +// returns the entity the signature was signed by, if any, and a possible +// signature verification error. If the signer isn't known, // ErrUnknownIssuer is returned. -func CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signer *Entity, err error) { +func CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader, config *packet.Config) (signer *Entity, err error) { + var expectedHashes []crypto.Hash + return CheckDetachedSignatureAndHash(keyring, signed, signature, expectedHashes, config) +} + +// CheckDetachedSignatureAndHash performs the same actions as +// CheckDetachedSignature and checks that the expected hash functions were used. +func CheckDetachedSignatureAndHash(keyring KeyRing, signed, signature io.Reader, expectedHashes []crypto.Hash, config *packet.Config) (signer *Entity, err error) { + _, signer, err = verifyDetachedSignature(keyring, signed, signature, expectedHashes, config) + return +} + +func verifyDetachedSignature(keyring KeyRing, signed, signature io.Reader, expectedHashes []crypto.Hash, config *packet.Config) (sig *packet.Signature, signer *Entity, err error) { var issuerKeyId uint64 var hashFunc crypto.Hash var sigType packet.SignatureType var keys []Key var p packet.Packet + expectedHashesLen := len(expectedHashes) packets := packet.NewReader(signature) for { p, err = packets.Next() if err == io.EOF { - return nil, errors.ErrUnknownIssuer + return nil, nil, errors.ErrUnknownIssuer } if err != nil { - return nil, err + return nil, nil, err } - switch sig := p.(type) { - case *packet.Signature: - if sig.IssuerKeyId == nil { - return nil, errors.StructuralError("signature doesn't have an issuer") + var ok bool + sig, ok = p.(*packet.Signature) + if !ok { + return nil, nil, errors.StructuralError("non signature packet found") + } + if sig.IssuerKeyId == nil { + return nil, nil, errors.StructuralError("signature doesn't have an issuer") + } + issuerKeyId = *sig.IssuerKeyId + hashFunc = sig.Hash + sigType = sig.SigType + + for i, expectedHash := range expectedHashes { + if hashFunc == expectedHash { + break + } + if i+1 == expectedHashesLen { + return nil, nil, errors.StructuralError("hash algorithm mismatch with cleartext message headers") } - issuerKeyId = *sig.IssuerKeyId - hashFunc = sig.Hash - sigType = sig.SigType - case *packet.SignatureV3: - issuerKeyId = sig.IssuerKeyId - hashFunc = sig.Hash - sigType = sig.SigType - default: - return nil, errors.StructuralError("non signature packet found") } keys = keyring.KeysByIdUsage(issuerKeyId, packet.KeyFlagSign) @@ -411,38 +505,88 @@ func CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signe h, wrappedHash, err := hashForSignature(hashFunc, sigType) if err != nil { - return nil, err + return nil, nil, err } if _, err := io.Copy(wrappedHash, signed); err != nil && err != io.EOF { - return nil, err + return nil, nil, err } for _, key := range keys { - switch sig := p.(type) { - case *packet.Signature: - err = key.PublicKey.VerifySignature(h, sig) - case *packet.SignatureV3: - err = key.PublicKey.VerifySignatureV3(h, sig) - default: - panic("unreachable") - } - + err = key.PublicKey.VerifySignature(h, sig) if err == nil { - return key.Entity, nil + return sig, key.Entity, checkSignatureDetails(&key, sig, config) } } - return nil, err + return nil, nil, err } // CheckArmoredDetachedSignature performs the same actions as // CheckDetachedSignature but expects the signature to be armored. -func CheckArmoredDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signer *Entity, err error) { +func CheckArmoredDetachedSignature(keyring KeyRing, signed, signature io.Reader, config *packet.Config) (signer *Entity, err error) { body, err := readArmored(signature, SignatureType) if err != nil { return } - return CheckDetachedSignature(keyring, signed, body) + return CheckDetachedSignature(keyring, signed, body, config) +} + +// checkSignatureDetails returns an error if: +// - The signature (or one of the binding signatures mentioned below) +// has a unknown critical notation data subpacket +// - The primary key of the signing entity is revoked +// - The primary identity is revoked +// - The signature is expired +// - The primary key of the signing entity is expired according to the +// primary identity binding signature +// +// ... or, if the signature was signed by a subkey and: +// - The signing subkey is revoked +// - The signing subkey is expired according to the subkey binding signature +// - The signing subkey binding signature is expired +// - The signing subkey cross-signature is expired +// +// NOTE: The order of these checks is important, as the caller may choose to +// ignore ErrSignatureExpired or ErrKeyExpired errors, but should never +// ignore any other errors. +// +// TODO: Also return an error if: +// - The primary key is expired according to a direct-key signature +// - (For V5 keys only:) The direct-key signature (exists and) is expired +func checkSignatureDetails(key *Key, signature *packet.Signature, config *packet.Config) error { + now := config.Now() + primaryIdentity := key.Entity.PrimaryIdentity() + signedBySubKey := key.PublicKey != key.Entity.PrimaryKey + sigsToCheck := []*packet.Signature{signature, primaryIdentity.SelfSignature} + if signedBySubKey { + sigsToCheck = append(sigsToCheck, key.SelfSignature, key.SelfSignature.EmbeddedSignature) + } + for _, sig := range sigsToCheck { + for _, notation := range sig.Notations { + if notation.IsCritical && !config.KnownNotation(notation.Name) { + return errors.SignatureError("unknown critical notation: " + notation.Name) + } + } + } + if key.Entity.Revoked(now) || // primary key is revoked + (signedBySubKey && key.Revoked(now)) || // subkey is revoked + primaryIdentity.Revoked(now) { // primary identity is revoked + return errors.ErrKeyRevoked + } + if key.Entity.PrimaryKey.KeyExpired(primaryIdentity.SelfSignature, now) { // primary key is expired + return errors.ErrKeyExpired + } + if signedBySubKey { + if key.PublicKey.KeyExpired(key.SelfSignature, now) { // subkey is expired + return errors.ErrKeyExpired + } + } + for _, sig := range sigsToCheck { + if sig.SigExpired(now) { // any of the relevant signatures are expired + return errors.ErrSignatureExpired + } + } + return nil } diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/read_write_test_data.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/read_write_test_data.go new file mode 100644 index 0000000000000..db6dad5c0b7be --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/read_write_test_data.go @@ -0,0 +1,274 @@ +package openpgp + +const testKey1KeyId uint64 = 0xA34D7E18C20C31BB +const testKey3KeyId uint64 = 0x338934250CCC0360 +const testKeyP256KeyId uint64 = 0xd44a2c495918513e + +const signedInput = "Signed message\nline 2\nline 3\n" +const signedTextInput = "Signed message\r\nline 2\r\nline 3\r\n" + +const recipientUnspecifiedHex = "848c0300000000000000000103ff62d4d578d03cf40c3da998dfe216c074fa6ddec5e31c197c9666ba292830d91d18716a80f699f9d897389a90e6d62d0238f5f07a5248073c0f24920e4bc4a30c2d17ee4e0cae7c3d4aaa4e8dced50e3010a80ee692175fa0385f62ecca4b56ee6e9980aa3ec51b61b077096ac9e800edaf161268593eedb6cc7027ff5cb32745d250010d407a6221ae22ef18469b444f2822478c4d190b24d36371a95cb40087cdd42d9399c3d06a53c0673349bfb607927f20d1e122bde1e2bf3aa6cae6edf489629bcaa0689539ae3b718914d88ededc3b" + +const detachedSignatureHex = "889c04000102000605024d449cd1000a0910a34d7e18c20c31bb167603ff57718d09f28a519fdc7b5a68b6a3336da04df85e38c5cd5d5bd2092fa4629848a33d85b1729402a2aab39c3ac19f9d573f773cc62c264dc924c067a79dfd8a863ae06c7c8686120760749f5fd9b1e03a64d20a7df3446ddc8f0aeadeaeba7cbaee5c1e366d65b6a0c6cc749bcb912d2f15013f812795c2e29eb7f7b77f39ce77" + +const detachedSignatureTextHex = "889c04010102000605024d449d21000a0910a34d7e18c20c31bbc8c60400a24fbef7342603a41cb1165767bd18985d015fb72fe05db42db36cfb2f1d455967f1e491194fbf6cf88146222b23bf6ffbd50d17598d976a0417d3192ff9cc0034fd00f287b02e90418bbefe609484b09231e4e7a5f3562e199bf39909ab5276c4d37382fe088f6b5c3426fc1052865da8b3ab158672d58b6264b10823dc4b39" + +const detachedSignatureDSAHex = "884604001102000605024d6c4eac000a0910338934250ccc0360f18d00a087d743d6405ed7b87755476629600b8b694a39e900a0abff8126f46faf1547c1743c37b21b4ea15b8f83" + +const detachedSignatureP256Hex = "885e0400130a0006050256e5bb00000a0910d44a2c495918513edef001009841a4f792beb0befccb35c8838a6a87d9b936beaa86db6745ddc7b045eee0cf00fd1ac1f78306b17e965935dd3f8bae4587a76587e4af231efe19cc4011a8434817" + +// The plaintext is https://www.gutenberg.org/cache/epub/1080/pg1080.txt +const modestProposalSha512 = "lbbrB1+WP3T9AaC9OQqBdOcCjgeEQadlulXsNPgVx0tyqPzDHwUugZ2gE7V0ESKAw6kAVfgkcuvfgxAAGaeHtw==" + +const testKeys1And2Hex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001b41054657374204b6579203120285253412988b804130102002205024d3c5c10021b03060b090807030206150802090a0b0416020301021e01021780000a0910a34d7e18c20c31bbb5b304009cc45fe610b641a2c146331be94dade0a396e73ca725e1b25c21708d9cab46ecca5ccebc23055879df8f99eea39b377962a400f2ebdc36a7c99c333d74aeba346315137c3ff9d0a09b0273299090343048afb8107cf94cbd1400e3026f0ccac7ecebbc4d78588eb3e478fe2754d3ca664bcf3eac96ca4a6b0c8d7df5102f60f6b0020003b88d044d3c5c10010400b201df61d67487301f11879d514f4248ade90c8f68c7af1284c161098de4c28c2850f1ec7b8e30f959793e571542ffc6532189409cb51c3d30dad78c4ad5165eda18b20d9826d8707d0f742e2ab492103a85bbd9ddf4f5720f6de7064feb0d39ee002219765bb07bcfb8b877f47abe270ddeda4f676108cecb6b9bb2ad484a4f0011010001889f04180102000905024d3c5c10021b0c000a0910a34d7e18c20c31bb1a03040085c8d62e16d05dc4e9dad64953c8a2eed8b6c12f92b1575eeaa6dcf7be9473dd5b24b37b6dffbb4e7c99ed1bd3cb11634be19b3e6e207bed7505c7ca111ccf47cb323bf1f8851eb6360e8034cbff8dd149993c959de89f8f77f38e7e98b8e3076323aa719328e2b408db5ec0d03936efd57422ba04f925cdc7b4c1af7590e40ab0020003988d044d3c5c33010400b488c3e5f83f4d561f317817538d9d0397981e9aef1321ca68ebfae1cf8b7d388e19f4b5a24a82e2fbbf1c6c26557a6c5845307a03d815756f564ac7325b02bc83e87d5480a8fae848f07cb891f2d51ce7df83dcafdc12324517c86d472cc0ee10d47a68fd1d9ae49a6c19bbd36d82af597a0d88cc9c49de9df4e696fc1f0b5d0011010001b42754657374204b6579203220285253412c20656e637279707465642070726976617465206b65792988b804130102002205024d3c5c33021b03060b090807030206150802090a0b0416020301021e01021780000a0910d4984f961e35246b98940400908a73b6a6169f700434f076c6c79015a49bee37130eaf23aaa3cfa9ce60bfe4acaa7bc95f1146ada5867e0079babb38804891f4f0b8ebca57a86b249dee786161a755b7a342e68ccf3f78ed6440a93a6626beb9a37aa66afcd4f888790cb4bb46d94a4ae3eb3d7d3e6b00f6bfec940303e89ec5b32a1eaaacce66497d539328b0020003b88d044d3c5c33010400a4e913f9442abcc7f1804ccab27d2f787ffa592077ca935a8bb23165bd8d57576acac647cc596b2c3f814518cc8c82953c7a4478f32e0cf645630a5ba38d9618ef2bc3add69d459ae3dece5cab778938d988239f8c5ae437807075e06c828019959c644ff05ef6a5a1dab72227c98e3a040b0cf219026640698d7a13d8538a570011010001889f04180102000905024d3c5c33021b0c000a0910d4984f961e35246b26c703ff7ee29ef53bc1ae1ead533c408fa136db508434e233d6e62be621e031e5940bbd4c08142aed0f82217e7c3e1ec8de574bc06ccf3c36633be41ad78a9eacd209f861cae7b064100758545cc9dd83db71806dc1cfd5fb9ae5c7474bba0c19c44034ae61bae5eca379383339dece94ff56ff7aa44a582f3e5c38f45763af577c0934b0020003" + +const testKeys1And2PrivateHex = "9501d8044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd00110100010003ff4d91393b9a8e3430b14d6209df42f98dc927425b881f1209f319220841273a802a97c7bdb8b3a7740b3ab5866c4d1d308ad0d3a79bd1e883aacf1ac92dfe720285d10d08752a7efe3c609b1d00f17f2805b217be53999a7da7e493bfc3e9618fd17018991b8128aea70a05dbce30e4fbe626aa45775fa255dd9177aabf4df7cf0200c1ded12566e4bc2bb590455e5becfb2e2c9796482270a943343a7835de41080582c2be3caf5981aa838140e97afa40ad652a0b544f83eb1833b0957dce26e47b0200eacd6046741e9ce2ec5beb6fb5e6335457844fb09477f83b050a96be7da043e17f3a9523567ed40e7a521f818813a8b8a72209f1442844843ccc7eb9805442570200bdafe0438d97ac36e773c7162028d65844c4d463e2420aa2228c6e50dc2743c3d6c72d0d782a5173fe7be2169c8a9f4ef8a7cf3e37165e8c61b89c346cdc6c1799d2b41054657374204b6579203120285253412988b804130102002205024d3c5c10021b03060b090807030206150802090a0b0416020301021e01021780000a0910a34d7e18c20c31bbb5b304009cc45fe610b641a2c146331be94dade0a396e73ca725e1b25c21708d9cab46ecca5ccebc23055879df8f99eea39b377962a400f2ebdc36a7c99c333d74aeba346315137c3ff9d0a09b0273299090343048afb8107cf94cbd1400e3026f0ccac7ecebbc4d78588eb3e478fe2754d3ca664bcf3eac96ca4a6b0c8d7df5102f60f6b00200009d01d8044d3c5c10010400b201df61d67487301f11879d514f4248ade90c8f68c7af1284c161098de4c28c2850f1ec7b8e30f959793e571542ffc6532189409cb51c3d30dad78c4ad5165eda18b20d9826d8707d0f742e2ab492103a85bbd9ddf4f5720f6de7064feb0d39ee002219765bb07bcfb8b877f47abe270ddeda4f676108cecb6b9bb2ad484a4f00110100010003fd17a7490c22a79c59281fb7b20f5e6553ec0c1637ae382e8adaea295f50241037f8997cf42c1ce26417e015091451b15424b2c59eb8d4161b0975630408e394d3b00f88d4b4e18e2cc85e8251d4753a27c639c83f5ad4a571c4f19d7cd460b9b73c25ade730c99df09637bd173d8e3e981ac64432078263bb6dc30d3e974150dd0200d0ee05be3d4604d2146fb0457f31ba17c057560785aa804e8ca5530a7cd81d3440d0f4ba6851efcfd3954b7e68908fc0ba47f7ac37bf559c6c168b70d3a7c8cd0200da1c677c4bce06a068070f2b3733b0a714e88d62aa3f9a26c6f5216d48d5c2b5624144f3807c0df30be66b3268eeeca4df1fbded58faf49fc95dc3c35f134f8b01fd1396b6c0fc1b6c4f0eb8f5e44b8eace1e6073e20d0b8bc5385f86f1cf3f050f66af789f3ef1fc107b7f4421e19e0349c730c68f0a226981f4e889054fdb4dc149e8e889f04180102000905024d3c5c10021b0c000a0910a34d7e18c20c31bb1a03040085c8d62e16d05dc4e9dad64953c8a2eed8b6c12f92b1575eeaa6dcf7be9473dd5b24b37b6dffbb4e7c99ed1bd3cb11634be19b3e6e207bed7505c7ca111ccf47cb323bf1f8851eb6360e8034cbff8dd149993c959de89f8f77f38e7e98b8e3076323aa719328e2b408db5ec0d03936efd57422ba04f925cdc7b4c1af7590e40ab00200009501fe044d3c5c33010400b488c3e5f83f4d561f317817538d9d0397981e9aef1321ca68ebfae1cf8b7d388e19f4b5a24a82e2fbbf1c6c26557a6c5845307a03d815756f564ac7325b02bc83e87d5480a8fae848f07cb891f2d51ce7df83dcafdc12324517c86d472cc0ee10d47a68fd1d9ae49a6c19bbd36d82af597a0d88cc9c49de9df4e696fc1f0b5d0011010001fe030302e9030f3c783e14856063f16938530e148bc57a7aa3f3e4f90df9dceccdc779bc0835e1ad3d006e4a8d7b36d08b8e0de5a0d947254ecfbd22037e6572b426bcfdc517796b224b0036ff90bc574b5509bede85512f2eefb520fb4b02aa523ba739bff424a6fe81c5041f253f8d757e69a503d3563a104d0d49e9e890b9d0c26f96b55b743883b472caa7050c4acfd4a21f875bdf1258d88bd61224d303dc9df77f743137d51e6d5246b88c406780528fd9a3e15bab5452e5b93970d9dcc79f48b38651b9f15bfbcf6da452837e9cc70683d1bdca94507870f743e4ad902005812488dd342f836e72869afd00ce1850eea4cfa53ce10e3608e13d3c149394ee3cbd0e23d018fcbcb6e2ec5a1a22972d1d462ca05355d0d290dd2751e550d5efb38c6c89686344df64852bf4ff86638708f644e8ec6bd4af9b50d8541cb91891a431326ab2e332faa7ae86cfb6e0540aa63160c1e5cdd5a4add518b303fff0a20117c6bc77f7cfbaf36b04c865c6c2b42754657374204b6579203220285253412c20656e637279707465642070726976617465206b65792988b804130102002205024d3c5c33021b03060b090807030206150802090a0b0416020301021e01021780000a0910d4984f961e35246b98940400908a73b6a6169f700434f076c6c79015a49bee37130eaf23aaa3cfa9ce60bfe4acaa7bc95f1146ada5867e0079babb38804891f4f0b8ebca57a86b249dee786161a755b7a342e68ccf3f78ed6440a93a6626beb9a37aa66afcd4f888790cb4bb46d94a4ae3eb3d7d3e6b00f6bfec940303e89ec5b32a1eaaacce66497d539328b00200009d01fe044d3c5c33010400a4e913f9442abcc7f1804ccab27d2f787ffa592077ca935a8bb23165bd8d57576acac647cc596b2c3f814518cc8c82953c7a4478f32e0cf645630a5ba38d9618ef2bc3add69d459ae3dece5cab778938d988239f8c5ae437807075e06c828019959c644ff05ef6a5a1dab72227c98e3a040b0cf219026640698d7a13d8538a570011010001fe030302e9030f3c783e148560f936097339ae381d63116efcf802ff8b1c9360767db5219cc987375702a4123fd8657d3e22700f23f95020d1b261eda5257e9a72f9a918e8ef22dd5b3323ae03bbc1923dd224db988cadc16acc04b120a9f8b7e84da9716c53e0334d7b66586ddb9014df604b41be1e960dcfcbc96f4ed150a1a0dd070b9eb14276b9b6be413a769a75b519a53d3ecc0c220e85cd91ca354d57e7344517e64b43b6e29823cbd87eae26e2b2e78e6dedfbb76e3e9f77bcb844f9a8932eb3db2c3f9e44316e6f5d60e9e2a56e46b72abe6b06dc9a31cc63f10023d1f5e12d2a3ee93b675c96f504af0001220991c88db759e231b3320dcedf814dcf723fd9857e3d72d66a0f2af26950b915abdf56c1596f46a325bf17ad4810d3535fb02a259b247ac3dbd4cc3ecf9c51b6c07cebb009c1506fba0a89321ec8683e3fd009a6e551d50243e2d5092fefb3321083a4bad91320dc624bd6b5dddf93553e3d53924c05bfebec1fb4bd47e89a1a889f04180102000905024d3c5c33021b0c000a0910d4984f961e35246b26c703ff7ee29ef53bc1ae1ead533c408fa136db508434e233d6e62be621e031e5940bbd4c08142aed0f82217e7c3e1ec8de574bc06ccf3c36633be41ad78a9eacd209f861cae7b064100758545cc9dd83db71806dc1cfd5fb9ae5c7474bba0c19c44034ae61bae5eca379383339dece94ff56ff7aa44a582f3e5c38f45763af577c0934b0020000" + +const dsaElGamalTestKeysHex = "9501e1044dfcb16a110400aa3e5c1a1f43dd28c2ffae8abf5cfce555ee874134d8ba0a0f7b868ce2214beddc74e5e1e21ded354a95d18acdaf69e5e342371a71fbb9093162e0c5f3427de413a7f2c157d83f5cd2f9d791256dc4f6f0e13f13c3302af27f2384075ab3021dff7a050e14854bbde0a1094174855fc02f0bae8e00a340d94a1f22b32e48485700a0cec672ac21258fb95f61de2ce1af74b2c4fa3e6703ff698edc9be22c02ae4d916e4fa223f819d46582c0516235848a77b577ea49018dcd5e9e15cff9dbb4663a1ae6dd7580fa40946d40c05f72814b0f88481207e6c0832c3bded4853ebba0a7e3bd8e8c66df33d5a537cd4acf946d1080e7a3dcea679cb2b11a72a33a2b6a9dc85f466ad2ddf4c3db6283fa645343286971e3dd700703fc0c4e290d45767f370831a90187e74e9972aae5bff488eeff7d620af0362bfb95c1a6c3413ab5d15a2e4139e5d07a54d72583914661ed6a87cce810be28a0aa8879a2dd39e52fb6fe800f4f181ac7e328f740cde3d09a05cecf9483e4cca4253e60d4429ffd679d9996a520012aad119878c941e3cf151459873bdfc2a9563472fe0303027a728f9feb3b864260a1babe83925ce794710cfd642ee4ae0e5b9d74cee49e9c67b6cd0ea5dfbb582132195a121356a1513e1bca73e5b80c58c7ccb4164453412f456c47616d616c2054657374204b65792031886204131102002205024dfcb16a021b03060b090807030206150802090a0b0416020301021e01021780000a091033af447ccd759b09fadd00a0b8fd6f5a790bad7e9f2dbb7632046dc4493588db009c087c6a9ba9f7f49fab221587a74788c00db4889ab00200009d0157044dfcb16a1004008dec3f9291205255ccff8c532318133a6840739dd68b03ba942676f9038612071447bf07d00d559c5c0875724ea16a4c774f80d8338b55fca691a0522e530e604215b467bbc9ccfd483a1da99d7bc2648b4318fdbd27766fc8bfad3fddb37c62b8ae7ccfe9577e9b8d1e77c1d417ed2c2ef02d52f4da11600d85d3229607943700030503ff506c94c87c8cab778e963b76cf63770f0a79bf48fb49d3b4e52234620fc9f7657f9f8d56c96a2b7c7826ae6b57ebb2221a3fe154b03b6637cea7e6d98e3e45d87cf8dc432f723d3d71f89c5192ac8d7290684d2c25ce55846a80c9a7823f6acd9bb29fa6cd71f20bc90eccfca20451d0c976e460e672b000df49466408d527affe0303027a728f9feb3b864260abd761730327bca2aaa4ea0525c175e92bf240682a0e83b226f97ecb2e935b62c9a133858ce31b271fa8eb41f6a1b3cd72a63025ce1a75ee4180dcc284884904181102000905024dfcb16a021b0c000a091033af447ccd759b09dd0b009e3c3e7296092c81bee5a19929462caaf2fff3ae26009e218c437a2340e7ea628149af1ec98ec091a43992b00200009501e1044dfcb1be1104009f61faa61aa43df75d128cbe53de528c4aec49ce9360c992e70c77072ad5623de0a3a6212771b66b39a30dad6781799e92608316900518ec01184a85d872365b7d2ba4bacfb5882ea3c2473d3750dc6178cc1cf82147fb58caa28b28e9f12f6d1efcb0534abed644156c91cca4ab78834268495160b2400bc422beb37d237c2300a0cac94911b6d493bda1e1fbc6feeca7cb7421d34b03fe22cec6ccb39675bb7b94a335c2b7be888fd3906a1125f33301d8aa6ec6ee6878f46f73961c8d57a3e9544d8ef2a2cbfd4d52da665b1266928cfe4cb347a58c412815f3b2d2369dec04b41ac9a71cc9547426d5ab941cccf3b18575637ccfb42df1a802df3cfe0a999f9e7109331170e3a221991bf868543960f8c816c28097e503fe319db10fb98049f3a57d7c80c420da66d56f3644371631fad3f0ff4040a19a4fedc2d07727a1b27576f75a4d28c47d8246f27071e12d7a8de62aad216ddbae6aa02efd6b8a3e2818cda48526549791ab277e447b3a36c57cefe9b592f5eab73959743fcc8e83cbefec03a329b55018b53eec196765ae40ef9e20521a603c551efe0303020950d53a146bf9c66034d00c23130cce95576a2ff78016ca471276e8227fb30b1ffbd92e61804fb0c3eff9e30b1a826ee8f3e4730b4d86273ca977b4164453412f456c47616d616c2054657374204b65792032886204131102002205024dfcb1be021b03060b090807030206150802090a0b0416020301021e01021780000a0910a86bf526325b21b22bd9009e34511620415c974750a20df5cb56b182f3b48e6600a0a9466cb1a1305a84953445f77d461593f1d42bc1b00200009d0157044dfcb1be1004009565a951da1ee87119d600c077198f1c1bceb0f7aa54552489298e41ff788fa8f0d43a69871f0f6f77ebdfb14a4260cf9fbeb65d5844b4272a1904dd95136d06c3da745dc46327dd44a0f16f60135914368c8039a34033862261806bb2c5ce1152e2840254697872c85441ccb7321431d75a747a4bfb1d2c66362b51ce76311700030503fc0ea76601c196768070b7365a200e6ddb09307f262d5f39eec467b5f5784e22abdf1aa49226f59ab37cb49969d8f5230ea65caf56015abda62604544ed526c5c522bf92bed178a078789f6c807b6d34885688024a5bed9e9f8c58d11d4b82487b44c5f470c5606806a0443b79cadb45e0f897a561a53f724e5349b9267c75ca17fe0303020950d53a146bf9c660bc5f4ce8f072465e2d2466434320c1e712272fafc20e342fe7608101580fa1a1a367e60486a7cd1246b7ef5586cf5e10b32762b710a30144f12dd17dd4884904181102000905024dfcb1be021b0c000a0910a86bf526325b21b2904c00a0b2b66b4b39ccffda1d10f3ea8d58f827e30a8b8e009f4255b2d8112a184e40cde43a34e8655ca7809370b0020000" + +const signedMessageHex = "a3019bc0cbccc0c4b8d8b74ee2108fe16ec6d3ca490cbe362d3f8333d3f352531472538b8b13d353b97232f352158c20943157c71c16064626063656269052062e4e01987e9b6fccff4b7df3a34c534b23e679cbec3bc0f8f6e64dfb4b55fe3f8efa9ce110ddb5cd79faf1d753c51aecfa669f7e7aa043436596cccc3359cb7dd6bbe9ecaa69e5989d9e57209571edc0b2fa7f57b9b79a64ee6e99ce1371395fee92fec2796f7b15a77c386ff668ee27f6d38f0baa6c438b561657377bf6acff3c5947befd7bf4c196252f1d6e5c524d0300" + +const signedTextMessageHex = "a3019bc0cbccc8c4b8d8b74ee2108fe16ec6d36a250cbece0c178233d3f352531472538b8b13d35379b97232f352158ca0b4312f57c71c1646462606365626906a062e4e019811591798ff99bf8afee860b0d8a8c2a85c3387e3bcf0bb3b17987f2bbcfab2aa526d930cbfd3d98757184df3995c9f3e7790e36e3e9779f06089d4c64e9e47dd6202cb6e9bc73c5d11bb59fbaf89d22d8dc7cf199ddf17af96e77c5f65f9bbed56f427bd8db7af37f6c9984bf9385efaf5f184f986fb3e6adb0ecfe35bbf92d16a7aa2a344fb0bc52fb7624f0200" + +const signedEncryptedMessageHex = "c18c032a67d68660df41c70103ff5a84c9a72f80e74ef0384c2d6a9ebfe2b09e06a8f298394f6d2abf174e40934ab0ec01fb2d0ddf21211c6fe13eb238563663b017a6b44edca552eb4736c4b7dc6ed907dd9e12a21b51b64b46f902f76fb7aaf805c1db8070574d8d0431a23e324a750f77fb72340a17a42300ee4ca8207301e95a731da229a63ab9c6b44541fbd2c11d016d810b3b3b2b38f15b5b40f0a4910332829c2062f1f7cc61f5b03677d73c54cafa1004ced41f315d46444946faae571d6f426e6dbd45d9780eb466df042005298adabf7ce0ef766dfeb94cd449c7ed0046c880339599c4711af073ce649b1e237c40b50a5536283e03bdbb7afad78bd08707715c67fb43295f905b4c479178809d429a8e167a9a8c6dfd8ab20b4edebdc38d6dec879a3202e1b752690d9bb5b0c07c5a227c79cc200e713a99251a4219d62ad5556900cf69bd384b6c8e726c7be267471d0d23af956da165af4af757246c2ebcc302b39e8ef2fccb4971b234fcda22d759ddb20e27269ee7f7fe67898a9de721bfa02ab0becaa046d00ea16cb1afc4e2eab40d0ac17121c565686e5cbd0cbdfbd9d6db5c70278b9c9db5a83176d04f61fbfbc4471d721340ede2746e5c312ded4f26787985af92b64fae3f253dbdde97f6a5e1996fd4d865599e32ff76325d3e9abe93184c02988ee89a4504356a4ef3b9b7a57cbb9637ca90af34a7676b9ef559325c3cca4e29d69fec1887f5440bb101361d744ad292a8547f22b4f22b419a42aa836169b89190f46d9560824cb2ac6e8771de8223216a5e647e132ab9eebcba89569ab339cb1c3d70fe806b31f4f4c600b4103b8d7583ebff16e43dcda551e6530f975122eb8b29" + +const verifiedSignatureEncryptedMessageHex = "c2b304000108000605026048f6d600210910a34d7e18c20c31bb1621045fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb9a3b0400a32ddac1af259c1b0abab0041327ea04970944401978fb647dd1cf9aba4f164e43f0d8a9389501886474bdd4a6e77f6aea945c07dfbf87743835b44cc2c39a1f9aeecfa83135abc92e18e50396f2e6a06c44e0188b0081effbfb4160d28f118d4ff73dd199a102e47cffd8c7ff2bacd83ae72b5820c021a486766dd587b5da61" + +const unverifiedSignatureEncryptedMessageHex = "c2b304000108000605026048f6d600210910a34d7e18c20c31bb1621045fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb9a3b0400a32ddac1af259c1b0abab0041327ea04970944401978fb647dd1cf9aba4f164e43f0d8a9389501886474bdd4a6e77f6aea945c07dfbf87743835b44cc2c39a1f9aeecfa83135abc92e18e50396f2e6a06c44e0188b0081effbfb4160d28f118d4ff73dd199a102e47cffd8c7ff2bacd83ae72b5820c021a486766dd587b5da61" + +const signedEncryptedMessage2Hex = "85010e03cf6a7abcd43e36731003fb057f5495b79db367e277cdbe4ab90d924ddee0c0381494112ff8c1238fb0184af35d1731573b01bc4c55ecacd2aafbe2003d36310487d1ecc9ac994f3fada7f9f7f5c3a64248ab7782906c82c6ff1303b69a84d9a9529c31ecafbcdb9ba87e05439897d87e8a2a3dec55e14df19bba7f7bd316291c002ae2efd24f83f9e3441203fc081c0c23dc3092a454ca8a082b27f631abf73aca341686982e8fbda7e0e7d863941d68f3de4a755c2964407f4b5e0477b3196b8c93d551dd23c8beef7d0f03fbb1b6066f78907faf4bf1677d8fcec72651124080e0b7feae6b476e72ab207d38d90b958759fdedfc3c6c35717c9dbfc979b3cfbbff0a76d24a5e57056bb88acbd2a901ef64bc6e4db02adc05b6250ff378de81dca18c1910ab257dff1b9771b85bb9bbe0a69f5989e6d1710a35e6dfcceb7d8fb5ccea8db3932b3d9ff3fe0d327597c68b3622aec8e3716c83a6c93f497543b459b58ba504ed6bcaa747d37d2ca746fe49ae0a6ce4a8b694234e941b5159ff8bd34b9023da2814076163b86f40eed7c9472f81b551452d5ab87004a373c0172ec87ea6ce42ccfa7dbdad66b745496c4873d8019e8c28d6b3" + +const signatureEncryptedMessage2Hex = "c24604001102000605024dfd0166000a091033af447ccd759b09bae600a096ec5e63ecf0a403085e10f75cc3bab327663282009f51fad9df457ed8d2b70d8a73c76e0443eac0f377" + +const symmetricallyEncryptedCompressedHex = "c32e040903085a357c1a7b5614ed00cc0d1d92f428162058b3f558a0fb0980d221ebac6c97d5eda4e0fe32f6e706e94dd263012d6ca1ef8c4bbd324098225e603a10c85ebf09cbf7b5aeeb5ce46381a52edc51038b76a8454483be74e6dcd1e50d5689a8ae7eceaeefed98a0023d49b22eb1f65c2aa1ef1783bb5e1995713b0457102ec3c3075fe871267ffa4b686ad5d52000d857" + +const dsaTestKeyHex = "9901a2044d6c49de110400cb5ce438cf9250907ac2ba5bf6547931270b89f7c4b53d9d09f4d0213a5ef2ec1f26806d3d259960f872a4a102ef1581ea3f6d6882d15134f21ef6a84de933cc34c47cc9106efe3bd84c6aec12e78523661e29bc1a61f0aab17fa58a627fd5fd33f5149153fbe8cd70edf3d963bc287ef875270ff14b5bfdd1bca4483793923b00a0fe46d76cb6e4cbdc568435cd5480af3266d610d303fe33ae8273f30a96d4d34f42fa28ce1112d425b2e3bf7ea553d526e2db6b9255e9dc7419045ce817214d1a0056dbc8d5289956a4b1b69f20f1105124096e6a438f41f2e2495923b0f34b70642607d45559595c7fe94d7fa85fc41bf7d68c1fd509ebeaa5f315f6059a446b9369c277597e4f474a9591535354c7e7f4fd98a08aa60400b130c24ff20bdfbf683313f5daebf1c9b34b3bdadfc77f2ddd72ee1fb17e56c473664bc21d66467655dd74b9005e3a2bacce446f1920cd7017231ae447b67036c9b431b8179deacd5120262d894c26bc015bffe3d827ba7087ad9b700d2ca1f6d16cc1786581e5dd065f293c31209300f9b0afcc3f7c08dd26d0a22d87580b4db41054657374204b65792033202844534129886204131102002205024d6c49de021b03060b090807030206150802090a0b0416020301021e01021780000a0910338934250ccc03607e0400a0bdb9193e8a6b96fc2dfc108ae848914b504481f100a09c4dc148cb693293a67af24dd40d2b13a9e36794" + +const dsaTestKeyPrivateHex = "9501bb044d6c49de110400cb5ce438cf9250907ac2ba5bf6547931270b89f7c4b53d9d09f4d0213a5ef2ec1f26806d3d259960f872a4a102ef1581ea3f6d6882d15134f21ef6a84de933cc34c47cc9106efe3bd84c6aec12e78523661e29bc1a61f0aab17fa58a627fd5fd33f5149153fbe8cd70edf3d963bc287ef875270ff14b5bfdd1bca4483793923b00a0fe46d76cb6e4cbdc568435cd5480af3266d610d303fe33ae8273f30a96d4d34f42fa28ce1112d425b2e3bf7ea553d526e2db6b9255e9dc7419045ce817214d1a0056dbc8d5289956a4b1b69f20f1105124096e6a438f41f2e2495923b0f34b70642607d45559595c7fe94d7fa85fc41bf7d68c1fd509ebeaa5f315f6059a446b9369c277597e4f474a9591535354c7e7f4fd98a08aa60400b130c24ff20bdfbf683313f5daebf1c9b34b3bdadfc77f2ddd72ee1fb17e56c473664bc21d66467655dd74b9005e3a2bacce446f1920cd7017231ae447b67036c9b431b8179deacd5120262d894c26bc015bffe3d827ba7087ad9b700d2ca1f6d16cc1786581e5dd065f293c31209300f9b0afcc3f7c08dd26d0a22d87580b4d00009f592e0619d823953577d4503061706843317e4fee083db41054657374204b65792033202844534129886204131102002205024d6c49de021b03060b090807030206150802090a0b0416020301021e01021780000a0910338934250ccc03607e0400a0bdb9193e8a6b96fc2dfc108ae848914b504481f100a09c4dc148cb693293a67af24dd40d2b13a9e36794" + +const p256TestKeyHex = "98520456e5b83813082a8648ce3d030107020304a2072cd6d21321266c758cc5b83fab0510f751cb8d91897cddb7047d8d6f185546e2107111b0a95cb8ef063c33245502af7a65f004d5919d93ee74eb71a66253b424502d3235362054657374204b6579203c696e76616c6964406578616d706c652e636f6d3e8879041313080021050256e5b838021b03050b09080702061508090a0b020416020301021e01021780000a0910d44a2c495918513e54e50100dfa64f97d9b47766fc1943c6314ba3f2b2a103d71ad286dc5b1efb96a345b0c80100dbc8150b54241f559da6ef4baacea6d31902b4f4b1bdc09b34bf0502334b7754b8560456e5b83812082a8648ce3d030107020304bfe3cea9cee13486f8d518aa487fecab451f25467d2bf08e58f63e5fa525d5482133e6a79299c274b068ef0be448152ad65cf11cf764348588ca4f6a0bcf22b6030108078861041813080009050256e5b838021b0c000a0910d44a2c495918513e4a4800ff49d589fa64024ad30be363a032e3a0e0e6f5db56ba4c73db850518bf0121b8f20100fd78e065f4c70ea5be9df319ea67e493b936fc78da834a71828043d3154af56e" + +const p256TestKeyPrivateHex = "94a50456e5b83813082a8648ce3d030107020304a2072cd6d21321266c758cc5b83fab0510f751cb8d91897cddb7047d8d6f185546e2107111b0a95cb8ef063c33245502af7a65f004d5919d93ee74eb71a66253fe070302f0c2bfb0b6c30f87ee1599472b8636477eab23ced13b271886a4b50ed34c9d8436af5af5b8f88921f0efba6ef8c37c459bbb88bc1c6a13bbd25c4ce9b1e97679569ee77645d469bf4b43de637f5561b424502d3235362054657374204b6579203c696e76616c6964406578616d706c652e636f6d3e8879041313080021050256e5b838021b03050b09080702061508090a0b020416020301021e01021780000a0910d44a2c495918513e54e50100dfa64f97d9b47766fc1943c6314ba3f2b2a103d71ad286dc5b1efb96a345b0c80100dbc8150b54241f559da6ef4baacea6d31902b4f4b1bdc09b34bf0502334b77549ca90456e5b83812082a8648ce3d030107020304bfe3cea9cee13486f8d518aa487fecab451f25467d2bf08e58f63e5fa525d5482133e6a79299c274b068ef0be448152ad65cf11cf764348588ca4f6a0bcf22b603010807fe0703027510012471a603cfee2968dce19f732721ddf03e966fd133b4e3c7a685b788705cbc46fb026dc94724b830c9edbaecd2fb2c662f23169516cacd1fe423f0475c364ecc10abcabcfd4bbbda1a36a1bd8861041813080009050256e5b838021b0c000a0910d44a2c495918513e4a4800ff49d589fa64024ad30be363a032e3a0e0e6f5db56ba4c73db850518bf0121b8f20100fd78e065f4c70ea5be9df319ea67e493b936fc78da834a71828043d3154af56e" + +const armoredPrivateKeyBlock = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1.4.10 (GNU/Linux) + +lQHYBE2rFNoBBADFwqWQIW/DSqcB4yCQqnAFTJ27qS5AnB46ccAdw3u4Greeu3Bp +idpoHdjULy7zSKlwR1EA873dO/k/e11Ml3dlAFUinWeejWaK2ugFP6JjiieSsrKn +vWNicdCS4HTWn0X4sjl0ZiAygw6GNhqEQ3cpLeL0g8E9hnYzJKQ0LWJa0QARAQAB +AAP/TB81EIo2VYNmTq0pK1ZXwUpxCrvAAIG3hwKjEzHcbQznsjNvPUihZ+NZQ6+X +0HCfPAdPkGDCLCb6NavcSW+iNnLTrdDnSI6+3BbIONqWWdRDYJhqZCkqmG6zqSfL +IdkJgCw94taUg5BWP/AAeQrhzjChvpMQTVKQL5mnuZbUCeMCAN5qrYMP2S9iKdnk +VANIFj7656ARKt/nf4CBzxcpHTyB8+d2CtPDKCmlJP6vL8t58Jmih+kHJMvC0dzn +gr5f5+sCAOOe5gt9e0am7AvQWhdbHVfJU0TQJx+m2OiCJAqGTB1nvtBLHdJnfdC9 +TnXXQ6ZXibqLyBies/xeY2sCKL5qtTMCAKnX9+9d/5yQxRyrQUHt1NYhaXZnJbHx +q4ytu0eWz+5i68IYUSK69jJ1NWPM0T6SkqpB3KCAIv68VFm9PxqG1KmhSrQIVGVz +dCBLZXmIuAQTAQIAIgUCTasU2gIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AA +CgkQO9o98PRieSoLhgQAkLEZex02Qt7vGhZzMwuN0R22w3VwyYyjBx+fM3JFETy1 +ut4xcLJoJfIaF5ZS38UplgakHG0FQ+b49i8dMij0aZmDqGxrew1m4kBfjXw9B/v+ +eIqpODryb6cOSwyQFH0lQkXC040pjq9YqDsO5w0WYNXYKDnzRV0p4H1pweo2VDid +AdgETasU2gEEAN46UPeWRqKHvA99arOxee38fBt2CI08iiWyI8T3J6ivtFGixSqV +bRcPxYO/qLpVe5l84Nb3X71GfVXlc9hyv7CD6tcowL59hg1E/DC5ydI8K8iEpUmK +/UnHdIY5h8/kqgGxkY/T/hgp5fRQgW1ZoZxLajVlMRZ8W4tFtT0DeA+JABEBAAEA +A/0bE1jaaZKj6ndqcw86jd+QtD1SF+Cf21CWRNeLKnUds4FRRvclzTyUMuWPkUeX +TaNNsUOFqBsf6QQ2oHUBBK4VCHffHCW4ZEX2cd6umz7mpHW6XzN4DECEzOVksXtc +lUC1j4UB91DC/RNQqwX1IV2QLSwssVotPMPqhOi0ZLNY7wIA3n7DWKInxYZZ4K+6 +rQ+POsz6brEoRHwr8x6XlHenq1Oki855pSa1yXIARoTrSJkBtn5oI+f8AzrnN0BN +oyeQAwIA/7E++3HDi5aweWrViiul9cd3rcsS0dEnksPhvS0ozCJiHsq/6GFmy7J8 +QSHZPteedBnZyNp5jR+H7cIfVN3KgwH/Skq4PsuPhDq5TKK6i8Pc1WW8MA6DXTdU +nLkX7RGmMwjC0DBf7KWAlPjFaONAX3a8ndnz//fy1q7u2l9AZwrj1qa1iJ8EGAEC +AAkFAk2rFNoCGwwACgkQO9o98PRieSo2/QP/WTzr4ioINVsvN1akKuekmEMI3LAp +BfHwatufxxP1U+3Si/6YIk7kuPB9Hs+pRqCXzbvPRrI8NHZBmc8qIGthishdCYad +AHcVnXjtxrULkQFGbGvhKURLvS9WnzD/m1K2zzwxzkPTzT9/Yf06O6Mal5AdugPL +VrM0m72/jnpKo04= +=zNCn +-----END PGP PRIVATE KEY BLOCK-----` + +const e2ePublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Charset: UTF-8 + +xv8AAABSBAAAAAATCCqGSM49AwEHAgME1LRoXSpOxtHXDUdmuvzchyg6005qIBJ4 +sfaSxX7QgH9RV2ONUhC+WiayCNADq+UMzuR/vunSr4aQffXvuGnR383/AAAAFDxk +Z2lsQHlhaG9vLWluYy5jb20+wv8AAACGBBATCAA4/wAAAAWCVGvAG/8AAAACiwn/ +AAAACZC2VkQCOjdvYf8AAAAFlQgJCgv/AAAAA5YBAv8AAAACngEAAE1BAP0X8veD +24IjmI5/C6ZAfVNXxgZZFhTAACFX75jUA3oD6AEAzoSwKf1aqH6oq62qhCN/pekX ++WAsVMBhNwzLpqtCRjLO/wAAAFYEAAAAABIIKoZIzj0DAQcCAwT50ain7vXiIRv8 +B1DO3x3cE/aattZ5sHNixJzRCXi2vQIA5QmOxZ6b5jjUekNbdHG3SZi1a2Ak5mfX +fRxC/5VGAwEIB8L/AAAAZQQYEwgAGP8AAAAFglRrwBz/AAAACZC2VkQCOjdvYQAA +FJAA9isX3xtGyMLYwp2F3nXm7QEdY5bq5VUcD/RJlj792VwA/1wH0pCzVLl4Q9F9 +ex7En5r7rHR5xwX82Msc+Rq9dSyO +=7MrZ +-----END PGP PUBLIC KEY BLOCK-----` + +const dsaKeyWithSHA512 = `9901a2044f04b07f110400db244efecc7316553ee08d179972aab87bb1214de7692593fcf5b6feb1c80fba268722dd464748539b85b81d574cd2d7ad0ca2444de4d849b8756bad7768c486c83a824f9bba4af773d11742bdfb4ac3b89ef8cc9452d4aad31a37e4b630d33927bff68e879284a1672659b8b298222fc68f370f3e24dccacc4a862442b9438b00a0ea444a24088dc23e26df7daf8f43cba3bffc4fe703fe3d6cd7fdca199d54ed8ae501c30e3ec7871ea9cdd4cf63cfe6fc82281d70a5b8bb493f922cd99fba5f088935596af087c8d818d5ec4d0b9afa7f070b3d7c1dd32a84fca08d8280b4890c8da1dde334de8e3cad8450eed2a4a4fcc2db7b8e5528b869a74a7f0189e11ef097ef1253582348de072bb07a9fa8ab838e993cef0ee203ff49298723e2d1f549b00559f886cd417a41692ce58d0ac1307dc71d85a8af21b0cf6eaa14baf2922d3a70389bedf17cc514ba0febbd107675a372fe84b90162a9e88b14d4b1c6be855b96b33fb198c46f058568817780435b6936167ebb3724b680f32bf27382ada2e37a879b3d9de2abe0c3f399350afd1ad438883f4791e2e3b4184453412068617368207472756e636174696f6e207465737488620413110a002205024f04b07f021b03060b090807030206150802090a0b0416020301021e01021780000a0910ef20e0cefca131581318009e2bf3bf047a44d75a9bacd00161ee04d435522397009a03a60d51bd8a568c6c021c8d7cf1be8d990d6417b0020003` + +const unknownHashFunctionHex = `8a00000040040001990006050253863c24000a09103b4fe6acc0b21f32ffff0101010101010101010101010101010101010101010101010101010101010101010101010101` + +const rsaSignatureBadMPIlength = `8a00000040040001030006050253863c24000a09103b4fe6acc0b21f32ffff0101010101010101010101010101010101010101010101010101010101010101010101010101` + +const missingHashFunctionHex = `8a00000040040001030006050253863c24000a09103b4fe6acc0b21f32ffff0101010101010101010101010101010101010101010101010101010101010101010101010101` + +const campbellQuine = `a0b001000300fcffa0b001000d00f2ff000300fcffa0b001000d00f2ff8270a01c00000500faff8270a01c00000500faff000500faff001400ebff8270a01c00000500faff000500faff001400ebff428821c400001400ebff428821c400001400ebff428821c400001400ebff428821c400001400ebff428821c400000000ffff000000ffff000b00f4ff428821c400000000ffff000000ffff000b00f4ff0233214c40000100feff000233214c40000100feff0000` + +const keyV4forVerifyingSignedMessageV3 = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: GPGTools - https://gpgtools.org + +mI0EVfxoFQEEAMBIqmbDfYygcvP6Phr1wr1XI41IF7Qixqybs/foBF8qqblD9gIY +BKpXjnBOtbkcVOJ0nljd3/sQIfH4E0vQwK5/4YRQSI59eKOqd6Fx+fWQOLG+uu6z +tewpeCj9LLHvibx/Sc7VWRnrznia6ftrXxJ/wHMezSab3tnGC0YPVdGNABEBAAG0 +JEdvY3J5cHRvIFRlc3QgS2V5IDx0aGVtYXhAZ21haWwuY29tPoi5BBMBCgAjBQJV +/GgVAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQeXnQmhdGW9PFVAP+ +K7TU0qX5ArvIONIxh/WAweyOk884c5cE8f+3NOPOOCRGyVy0FId5A7MmD5GOQh4H +JseOZVEVCqlmngEvtHZb3U1VYtVGE5WZ+6rQhGsMcWP5qaT4soYwMBlSYxgYwQcx +YhN9qOr292f9j2Y//TTIJmZT4Oa+lMxhWdqTfX+qMgG4jQRV/GgVAQQArhFSiij1 +b+hT3dnapbEU+23Z1yTu1DfF6zsxQ4XQWEV3eR8v+8mEDDNcz8oyyF56k6UQ3rXi +UMTIwRDg4V6SbZmaFbZYCOwp/EmXJ3rfhm7z7yzXj2OFN22luuqbyVhuL7LRdB0M +pxgmjXb4tTvfgKd26x34S+QqUJ7W6uprY4sAEQEAAYifBBgBCgAJBQJV/GgVAhsM +AAoJEHl50JoXRlvT7y8D/02ckx4OMkKBZo7viyrBw0MLG92i+DC2bs35PooHR6zz +786mitjOp5z2QWNLBvxC70S0qVfCIz8jKupO1J6rq6Z8CcbLF3qjm6h1omUBf8Nd +EfXKD2/2HV6zMKVknnKzIEzauh+eCKS2CeJUSSSryap/QLVAjRnckaES/OsEWhNB +=RZia +-----END PGP PUBLIC KEY BLOCK----- +` + +const signedMessageV3 = `-----BEGIN PGP MESSAGE----- +Comment: GPGTools - https://gpgtools.org + +owGbwMvMwMVYWXlhlrhb9GXG03JJDKF/MtxDMjKLFYAoUaEktbhEITe1uDgxPVWP +q5NhKjMrWAVcC9evD8z/bF/uWNjqtk/X3y5/38XGRQHm/57rrDRYuGnTw597Xqka +uM3137/hH3Os+Jf2dc0fXOITKwJvXJvecPVs0ta+Vg7ZO1MLn8w58Xx+6L58mbka +DGHyU9yTueZE8D+QF/Tz28Y78dqtF56R1VPn9Xw4uJqrWYdd7b3vIZ1V6R4Nh05d +iT57d/OhWwA= +=hG7R +-----END PGP MESSAGE----- +` + +// https://mailarchive.ietf.org/arch/msg/openpgp/9SheW_LENE0Kxf7haNllovPyAdY/ +const v5PrivKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- + +lGEFXJH05BYAAAAtCSsGAQQB2kcPAQEHQFhZlVcVVtwf+21xNQPX+ecMJJBL0MPd +fj75iux+my8QAAAAAAAiAQCHZ1SnSUmWqxEsoI6facIVZQu6mph3cBFzzTvcm5lA +Ng5ctBhlbW1hLmdvbGRtYW5AZXhhbXBsZS5uZXSIlgUTFggASCIhBRk0e8mHJGQC +X5nfPsLgAA7ZiEiS4fez6kyUAJFZVptUBQJckfTkAhsDBQsJCAcCAyICAQYVCgkI +CwIEFgIDAQIeBwIXgAAA9cAA/jiR3yMsZMeEQ40u6uzEoXa6UXeV/S3wwJAXRJy9 +M8s0AP9vuL/7AyTfFXwwzSjDnYmzS0qAhbLDQ643N+MXGBJ2BZxmBVyR9OQSAAAA +MgorBgEEAZdVAQUBAQdA+nysrzml2UCweAqtpDuncSPlvrcBWKU0yfU0YvYWWAoD +AQgHAAAAAAAiAP9OdAPppjU1WwpqjIItkxr+VPQRT8Zm/Riw7U3F6v3OiBFHiHoF +GBYIACwiIQUZNHvJhyRkAl+Z3z7C4AAO2YhIkuH3s+pMlACRWVabVAUCXJH05AIb +DAAAOSQBAP4BOOIR/sGLNMOfeb5fPs/02QMieoiSjIBnijhob2U5AQC+RtOHCHx7 +TcIYl5/Uyoi+FOvPLcNw4hOv2nwUzSSVAw== +=IiS2 +-----END PGP PRIVATE KEY BLOCK-----` + +// Generated with the above private key +const v5PrivKeyMsg = `-----BEGIN PGP MESSAGE----- +Version: OpenPGP.js v4.10.7 +Comment: https://openpgpjs.org + +xA0DAQoWGTR7yYckZAIByxF1B21zZy50eHRfbIGSdGVzdMJ3BQEWCgAGBQJf +bIGSACMiIQUZNHvJhyRkAl+Z3z7C4AAO2YhIkuH3s+pMlACRWVabVDQvAP9G +y29VPonFXqi2zKkpZrvyvZxg+n5e8Nt9wNbuxeCd3QD/TtO2s+JvjrE4Siwv +UQdl5MlBka1QSNbMq2Bz7XwNPg4= +=6lbM +-----END PGP MESSAGE-----` + +const keyWithExpiredCrossSig = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +xsDNBF2lnPIBDAC5cL9PQoQLTMuhjbYvb4Ncuuo0bfmgPRFywX53jPhoFf4Zg6mv +/seOXpgecTdOcVttfzC8ycIKrt3aQTiwOG/ctaR4Bk/t6ayNFfdUNxHWk4WCKzdz +/56fW2O0F23qIRd8UUJp5IIlN4RDdRCtdhVQIAuzvp2oVy/LaS2kxQoKvph/5pQ/ +5whqsyroEWDJoSV0yOb25B/iwk/pLUFoyhDG9bj0kIzDxrEqW+7Ba8nocQlecMF3 +X5KMN5kp2zraLv9dlBBpWW43XktjcCZgMy20SouraVma8Je/ECwUWYUiAZxLIlMv +9CurEOtxUw6N3RdOtLmYZS9uEnn5y1UkF88o8Nku890uk6BrewFzJyLAx5wRZ4F0 +qV/yq36UWQ0JB/AUGhHVPdFf6pl6eaxBwT5GXvbBUibtf8YI2og5RsgTWtXfU7eb +SGXrl5ZMpbA6mbfhd0R8aPxWfmDWiIOhBufhMCvUHh1sApMKVZnvIff9/0Dca3wb +vLIwa3T4CyshfT0AEQEAAc0hQm9iIEJhYmJhZ2UgPGJvYkBvcGVucGdwLmV4YW1w +bGU+wsEABBMBCgATBYJeO2eVAgsJAxUICgKbAQIeAQAhCRD7/MgqAV5zMBYhBNGm +bhojsYLJmA94jPv8yCoBXnMwKWUMAJ3FKZfJ2mXvh+GFqgymvK4NoKkDRPB0CbUN +aDdG7ZOizQrWXo7Da2MYIZ6eZUDqBKLdhZ5gZfVnisDfu/yeCgpENaKib1MPHpA8 +nZQjnPejbBDomNqY8HRzr5jvXNlwywBpjWGtegCKUY9xbSynjbfzIlMrWL4S+Rfl ++bOOQKRyYJWXmECmVyqY8cz2VUYmETjNcwC8VCDUxQnhtcCJ7Aej22hfYwVEPb/J +BsJBPq8WECCiGfJ9Y2y6TF+62KzG9Kfs5hqUeHhQy8V4TSi479ewwL7DH86XmIIK +chSANBS+7iyMtctjNZfmF9zYdGJFvjI/mbBR/lK66E515Inuf75XnL8hqlXuwqvG +ni+i03Aet1DzULZEIio4uIU6ioc1lGO9h7K2Xn4S7QQH1QoISNMWqXibUR0RCGjw +FsEDTt2QwJl8XXxoJCooM7BCcCQo+rMNVUHDjIwrdoQjPld3YZsUQQRcqH6bLuln +cfn5ufl8zTGWKydoj/iTz8KcjZ7w187AzQRdpZzyAQwA1jC/XGxjK6ddgrRfW9j+ +s/U00++EvIsgTs2kr3Rg0GP7FLWV0YNtR1mpl55/bEl7yAxCDTkOgPUMXcaKlnQh +6zrlt6H53mF6Bvs3inOHQvOsGtU0dqvb1vkTF0juLiJgPlM7pWv+pNQ6IA39vKoQ +sTMBv4v5vYNXP9GgKbg8inUNT17BxzZYHfw5+q63ectgDm2on1e8CIRCZ76oBVwz +dkVxoy3gjh1eENlk2D4P0uJNZzF1Q8GV67yLANGMCDICE/OkWn6daipYDzW4iJQt +YPUWP4hWhjdm+CK+hg6IQUEn2Vtvi16D2blRP8BpUNNa4fNuylWVuJV76rIHvsLZ +1pbM3LHpRgE8s6jivS3Rz3WRs0TmWCNnvHPqWizQ3VTy+r3UQVJ5AmhJDrZdZq9i +aUIuZ01PoE1+CHiJwuxPtWvVAxf2POcm1M/F1fK1J0e+lKlQuyonTXqXR22Y41wr +fP2aPk3nPSTW2DUAf3vRMZg57ZpRxLEhEMxcM4/LMR+PABEBAAHCwrIEGAEKAAkF +gl8sAVYCmwIB3QkQ+/zIKgFeczDA+qAEGQEKAAwFgl47Z5UFgwB4TOAAIQkQfC+q +Tfk8N7IWIQQd3OFfCSF87i87N2B8L6pN+Tw3st58C/0exp0X2U4LqicSHEOSqHZj +jiysdqIELHGyo5DSPv92UFPp36aqjF9OFgtNNwSa56fmAVCD4+hor/fKARRIeIjF +qdIC5Y/9a4B10NQFJa5lsvB38x/d39LI2kEoglZnqWgdJskROo3vNQF4KlIcm6FH +dn4WI8UkC5oUUcrpZVMSKoacIaxLwqnXT42nIVgYYuqrd/ZagZZjG5WlrTOd5+NI +zi/l0fWProcPHGLjmAh4Thu8i7omtVw1nQaMnq9I77ffg3cPDgXknYrLL+q8xXh/ +0mEJyIhnmPwllWCSZuLv9DrD5pOexFfdlwXhf6cLzNpW6QhXD/Tf5KrqIPr9aOv8 +9xaEEXWh0vEby2kIsI2++ft+vfdIyxYw/wKqx0awTSnuBV1rG3z1dswX4BfoY66x +Bz3KOVqlz9+mG/FTRQwrgPvR+qgLCHbuotxoGN7fzW+PI75hQG5JQAqhsC9sHjQH +UrI21/VUNwzfw3v5pYsWuFb5bdQ3ASJetICQiMy7IW8WIQTRpm4aI7GCyZgPeIz7 +/MgqAV5zMG6/C/wLpPl/9e6Hf5wmXIUwpZNQbNZvpiCcyx9sXsHXaycOQVxn3McZ +nYOUP9/mobl1tIeDQyTNbkxWjU0zzJl8XQsDZerb5098pg+x7oGIL7M1vn5s5JMl +owROourqF88JEtOBxLMxlAM7X4hB48xKQ3Hu9hS1GdnqLKki4MqRGl4l5FUwyGOM +GjyS3TzkfiDJNwQxybQiC9n57ij20ieNyLfuWCMLcNNnZUgZtnF6wCctoq/0ZIWu +a7nvuA/XC2WW9YjEJJiWdy5109pqac+qWiY11HWy/nms4gpMdxVpT0RhrKGWq4o0 +M5q3ZElOoeN70UO3OSbU5EVrG7gB1GuwF9mTHUVlV0veSTw0axkta3FGT//XfSpD +lRrCkyLzwq0M+UUHQAuYpAfobDlDdnxxOD2jm5GyTzak3GSVFfjW09QFVO6HlGp5 +01/jtzkUiS6nwoHHkfnyn0beZuR8X6KlcrzLB0VFgQFLmkSM9cSOgYhD0PTu9aHb +hW1Hj9AO8lzggBQ= +=Nt+N +-----END PGP PUBLIC KEY BLOCK----- +` + +const sigFromKeyWithExpiredCrossSig = `-----BEGIN PGP SIGNATURE----- + +wsDzBAABCgAGBYJfLAFsACEJEHwvqk35PDeyFiEEHdzhXwkhfO4vOzdgfC+qTfk8 +N7KiqwwAts4QGB7v9bABCC2qkTxJhmStC0wQMcHRcjL/qAiVnmasQWmvE9KVsdm3 +AaXd8mIx4a37/RRvr9dYrY2eE4uw72cMqPxNja2tvVXkHQvk1oEUqfkvbXs4ypKI +NyeTWjXNOTZEbg0hbm3nMy+Wv7zgB1CEvAsEboLDJlhGqPcD+X8a6CJGrBGUBUrv +KVmZr3U6vEzClz3DBLpoddCQseJRhT4YM1nKmBlZ5quh2LFgTSpajv5OsZheqt9y +EZAPbqmLhDmWRQwGzkWHKceKS7nZ/ox2WK6OS7Ob8ZGZkM64iPo6/EGj5Yc19vQN +AGiIaPEGszBBWlOpHTPhNm0LB0nMWqqaT87oNYwP8CQuuxDb6rKJ2lffCmZH27Lb +UbQZcH8J+0UhpeaiadPZxH5ATJAcenmVtVVMLVOFnm+eIlxzov9ntpgGYt8hLdXB +ITEG9mMgp3TGS9ZzSifMZ8UGtHdp9QdBg8NEVPFzDOMGxpc/Bftav7RRRuPiAER+ +7A5CBid5 +=aQkm +-----END PGP SIGNATURE----- +` + +const signedMessageWithCriticalNotation = `-----BEGIN PGP MESSAGE----- + +owGbwMvMwMH4oOW7S46CznTG09xJDDE3Wl1KUotLuDousDAwcjBYiSmyXL+48d6x +U1PSGUxcj8IUszKBVMpMaWAAAgEGZpAeh9SKxNyCnFS95PzcytRiBi5OAZjyXXzM +f8WYLqv7TXP61Sa4rqT12CI3xaN73YS2pt089f96odCKaEPnWJ3iSGmzJaW/ug10 +2Zo8Wj2k4s7t8wt4H3HtTu+y5UZfV3VOO+l//sdE/o+Lsub8FZH7/eOq7OnbNp4n +vwjE8mqJXetNMfj8r2SCyvkEnlVRYR+/mnge+ib56FdJ8uKtqSxyvgA= +=fRXs +-----END PGP MESSAGE-----` + +const criticalNotationSigner = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +mI0EUmEvTgEEANyWtQQMOybQ9JltDqmaX0WnNPJeLILIM36sw6zL0nfTQ5zXSS3+ +fIF6P29lJFxpblWk02PSID5zX/DYU9/zjM2xPO8Oa4xo0cVTOTLj++Ri5mtr//f5 +GLsIXxFrBJhD/ghFsL3Op0GXOeLJ9A5bsOn8th7x6JucNKuaRB6bQbSPABEBAAG0 +JFRlc3QgTWNUZXN0aW5ndG9uIDx0ZXN0QGV4YW1wbGUuY29tPoi5BBMBAgAjBQJS +YS9OAhsvBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQSmNhOk1uQJQwDAP6 +AgrTyqkRlJVqz2pb46TfbDM2TDF7o9CBnBzIGoxBhlRwpqALz7z2kxBDmwpQa+ki +Bq3jZN/UosY9y8bhwMAlnrDY9jP1gdCo+H0sD48CdXybblNwaYpwqC8VSpDdTndf +9j2wE/weihGp/DAdy/2kyBCaiOY1sjhUfJ1GogF49rC4jQRSYS9OAQQA6R/PtBFa +JaT4jq10yqASk4sqwVMsc6HcifM5lSdxzExFP74naUMMyEsKHP53QxTF0Grqusag +Qg/ZtgT0CN1HUM152y7ACOdp1giKjpMzOTQClqCoclyvWOFB+L/SwGEIJf7LSCEr +woBuJifJc8xAVr0XX0JthoW+uP91eTQ3XpsAEQEAAYkBPQQYAQIACQUCUmEvTgIb +LgCoCRBKY2E6TW5AlJ0gBBkBAgAGBQJSYS9OAAoJEOCE90RsICyXuqIEANmmiRCA +SF7YK7PvFkieJNwzeK0V3F2lGX+uu6Y3Q/Zxdtwc4xR+me/CSBmsURyXTO29OWhP +GLszPH9zSJU9BdDi6v0yNprmFPX/1Ng0Abn/sCkwetvjxC1YIvTLFwtUL/7v6NS2 +bZpsUxRTg9+cSrMWWSNjiY9qUKajm1tuzPDZXAUEAMNmAN3xXN/Kjyvj2OK2ck0X +W748sl/tc3qiKPMJ+0AkMF7Pjhmh9nxqE9+QCEl7qinFqqBLjuzgUhBU4QlwX1GD +AtNTq6ihLMD5v1d82ZC7tNatdlDMGWnIdvEMCv2GZcuIqDQ9rXWs49e7tq1NncLY +hz3tYjKhoFTKEIq3y3Pp +=h/aX +-----END PGP PUBLIC KEY BLOCK-----` diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k.go new file mode 100644 index 0000000000000..a43695964b2ae --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k.go @@ -0,0 +1,407 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package s2k implements the various OpenPGP string-to-key transforms as +// specified in RFC 4800 section 3.7.1, and Argon2 specified in +// draft-ietf-openpgp-crypto-refresh-08 section 3.7.1.4. +package s2k // import "github.com/ProtonMail/go-crypto/openpgp/s2k" + +import ( + "crypto" + "hash" + "io" + "strconv" + + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" + "golang.org/x/crypto/argon2" +) + +type Mode uint8 + +// Defines the default S2KMode constants +// +// 0 (simple), 1(salted), 3(iterated), 4(argon2) +const ( + SimpleS2K Mode = 0 + SaltedS2K Mode = 1 + IteratedSaltedS2K Mode = 3 + Argon2S2K Mode = 4 + GnuS2K Mode = 101 +) + +const Argon2SaltSize int = 16 + +// Params contains all the parameters of the s2k packet +type Params struct { + // mode is the mode of s2k function. + // It can be 0 (simple), 1(salted), 3(iterated) + // 2(reserved) 100-110(private/experimental). + mode Mode + // hashId is the ID of the hash function used in any of the modes + hashId byte + // salt is a byte array to use as a salt in hashing process or argon2 + saltBytes [Argon2SaltSize]byte + // countByte is used to determine how many rounds of hashing are to + // be performed in s2k mode 3. See RFC 4880 Section 3.7.1.3. + countByte byte + // passes is a parameter in Argon2 to determine the number of iterations + // See RFC the crypto refresh Section 3.7.1.4. + passes byte + // parallelism is a parameter in Argon2 to determine the degree of paralellism + // See RFC the crypto refresh Section 3.7.1.4. + parallelism byte + // memoryExp is a parameter in Argon2 to determine the memory usage + // i.e., 2 ** memoryExp kibibytes + // See RFC the crypto refresh Section 3.7.1.4. + memoryExp byte +} + +// encodeCount converts an iterative "count" in the range 1024 to +// 65011712, inclusive, to an encoded count. The return value is the +// octet that is actually stored in the GPG file. encodeCount panics +// if i is not in the above range (encodedCount above takes care to +// pass i in the correct range). See RFC 4880 Section 3.7.7.1. +func encodeCount(i int) uint8 { + if i < 65536 || i > 65011712 { + panic("count arg i outside the required range") + } + + for encoded := 96; encoded < 256; encoded++ { + count := decodeCount(uint8(encoded)) + if count >= i { + return uint8(encoded) + } + } + + return 255 +} + +// decodeCount returns the s2k mode 3 iterative "count" corresponding to +// the encoded octet c. +func decodeCount(c uint8) int { + return (16 + int(c&15)) << (uint32(c>>4) + 6) +} + +// encodeMemory converts the Argon2 "memory" in the range parallelism*8 to +// 2**31, inclusive, to an encoded memory. The return value is the +// octet that is actually stored in the GPG file. encodeMemory panics +// if is not in the above range +// See OpenPGP crypto refresh Section 3.7.1.4. +func encodeMemory(memory uint32, parallelism uint8) uint8 { + if memory < (8 * uint32(parallelism)) || memory > uint32(2147483648) { + panic("Memory argument memory is outside the required range") + } + + for exp := 3; exp < 31; exp++ { + compare := decodeMemory(uint8(exp)) + if compare >= memory { + return uint8(exp) + } + } + + return 31 +} + +// decodeMemory computes the decoded memory in kibibytes as 2**memoryExponent +func decodeMemory(memoryExponent uint8) uint32 { + return uint32(1) << memoryExponent +} + +// Simple writes to out the result of computing the Simple S2K function (RFC +// 4880, section 3.7.1.1) using the given hash and input passphrase. +func Simple(out []byte, h hash.Hash, in []byte) { + Salted(out, h, in, nil) +} + +var zero [1]byte + +// Salted writes to out the result of computing the Salted S2K function (RFC +// 4880, section 3.7.1.2) using the given hash, input passphrase and salt. +func Salted(out []byte, h hash.Hash, in []byte, salt []byte) { + done := 0 + var digest []byte + + for i := 0; done < len(out); i++ { + h.Reset() + for j := 0; j < i; j++ { + h.Write(zero[:]) + } + h.Write(salt) + h.Write(in) + digest = h.Sum(digest[:0]) + n := copy(out[done:], digest) + done += n + } +} + +// Iterated writes to out the result of computing the Iterated and Salted S2K +// function (RFC 4880, section 3.7.1.3) using the given hash, input passphrase, +// salt and iteration count. +func Iterated(out []byte, h hash.Hash, in []byte, salt []byte, count int) { + combined := make([]byte, len(in)+len(salt)) + copy(combined, salt) + copy(combined[len(salt):], in) + + if count < len(combined) { + count = len(combined) + } + + done := 0 + var digest []byte + for i := 0; done < len(out); i++ { + h.Reset() + for j := 0; j < i; j++ { + h.Write(zero[:]) + } + written := 0 + for written < count { + if written+len(combined) > count { + todo := count - written + h.Write(combined[:todo]) + written = count + } else { + h.Write(combined) + written += len(combined) + } + } + digest = h.Sum(digest[:0]) + n := copy(out[done:], digest) + done += n + } +} + +// Argon2 writes to out the key derived from the password (in) with the Argon2 +// function (the crypto refresh, section 3.7.1.4) +func Argon2(out []byte, in []byte, salt []byte, passes uint8, paralellism uint8, memoryExp uint8) { + key := argon2.IDKey(in, salt, uint32(passes), decodeMemory(memoryExp), paralellism, uint32(len(out))) + copy(out[:], key) +} + +// Generate generates valid parameters from given configuration. +// It will enforce the Iterated and Salted or Argon2 S2K method. +func Generate(rand io.Reader, c *Config) (*Params, error) { + var params *Params + if c != nil && c.Mode() == Argon2S2K { + // handle Argon2 case + argonConfig := c.Argon2() + params = &Params{ + mode: Argon2S2K, + passes: argonConfig.Passes(), + parallelism: argonConfig.Parallelism(), + memoryExp: argonConfig.EncodedMemory(), + } + } else if c != nil && c.PassphraseIsHighEntropy && c.Mode() == SaltedS2K { // Allow SaltedS2K if PassphraseIsHighEntropy + hashId, ok := algorithm.HashToHashId(c.hash()) + if !ok { + return nil, errors.UnsupportedError("no such hash") + } + + params = &Params{ + mode: SaltedS2K, + hashId: hashId, + } + } else { // Enforce IteratedSaltedS2K method otherwise + hashId, ok := algorithm.HashToHashId(c.hash()) + if !ok { + return nil, errors.UnsupportedError("no such hash") + } + if c != nil { + c.S2KMode = IteratedSaltedS2K + } + params = &Params{ + mode: IteratedSaltedS2K, + hashId: hashId, + countByte: c.EncodedCount(), + } + } + if _, err := io.ReadFull(rand, params.salt()); err != nil { + return nil, err + } + return params, nil +} + +// Parse reads a binary specification for a string-to-key transformation from r +// and returns a function which performs that transform. If the S2K is a special +// GNU extension that indicates that the private key is missing, then the error +// returned is errors.ErrDummyPrivateKey. +func Parse(r io.Reader) (f func(out, in []byte), err error) { + params, err := ParseIntoParams(r) + if err != nil { + return nil, err + } + + return params.Function() +} + +// ParseIntoParams reads a binary specification for a string-to-key +// transformation from r and returns a struct describing the s2k parameters. +func ParseIntoParams(r io.Reader) (params *Params, err error) { + var buf [Argon2SaltSize + 3]byte + + _, err = io.ReadFull(r, buf[:1]) + if err != nil { + return + } + + params = &Params{ + mode: Mode(buf[0]), + } + + switch params.mode { + case SimpleS2K: + _, err = io.ReadFull(r, buf[:1]) + if err != nil { + return nil, err + } + params.hashId = buf[0] + return params, nil + case SaltedS2K: + _, err = io.ReadFull(r, buf[:9]) + if err != nil { + return nil, err + } + params.hashId = buf[0] + copy(params.salt(), buf[1:9]) + return params, nil + case IteratedSaltedS2K: + _, err = io.ReadFull(r, buf[:10]) + if err != nil { + return nil, err + } + params.hashId = buf[0] + copy(params.salt(), buf[1:9]) + params.countByte = buf[9] + return params, nil + case Argon2S2K: + _, err = io.ReadFull(r, buf[:Argon2SaltSize+3]) + if err != nil { + return nil, err + } + copy(params.salt(), buf[:Argon2SaltSize]) + params.passes = buf[Argon2SaltSize] + params.parallelism = buf[Argon2SaltSize+1] + params.memoryExp = buf[Argon2SaltSize+2] + return params, nil + case GnuS2K: + // This is a GNU extension. See + // https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=doc/DETAILS;h=fe55ae16ab4e26d8356dc574c9e8bc935e71aef1;hb=23191d7851eae2217ecdac6484349849a24fd94a#l1109 + if _, err = io.ReadFull(r, buf[:5]); err != nil { + return nil, err + } + params.hashId = buf[0] + if buf[1] == 'G' && buf[2] == 'N' && buf[3] == 'U' && buf[4] == 1 { + return params, nil + } + return nil, errors.UnsupportedError("GNU S2K extension") + } + + return nil, errors.UnsupportedError("S2K function") +} + +func (params *Params) Dummy() bool { + return params != nil && params.mode == GnuS2K +} + +func (params *Params) salt() []byte { + switch params.mode { + case SaltedS2K, IteratedSaltedS2K: return params.saltBytes[:8] + case Argon2S2K: return params.saltBytes[:Argon2SaltSize] + default: return nil + } +} + +func (params *Params) Function() (f func(out, in []byte), err error) { + if params.Dummy() { + return nil, errors.ErrDummyPrivateKey("dummy key found") + } + var hashObj crypto.Hash + if params.mode != Argon2S2K { + var ok bool + hashObj, ok = algorithm.HashIdToHashWithSha1(params.hashId) + if !ok { + return nil, errors.UnsupportedError("hash for S2K function: " + strconv.Itoa(int(params.hashId))) + } + if !hashObj.Available() { + return nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashObj))) + } + } + + switch params.mode { + case SimpleS2K: + f := func(out, in []byte) { + Simple(out, hashObj.New(), in) + } + + return f, nil + case SaltedS2K: + f := func(out, in []byte) { + Salted(out, hashObj.New(), in, params.salt()) + } + + return f, nil + case IteratedSaltedS2K: + f := func(out, in []byte) { + Iterated(out, hashObj.New(), in, params.salt(), decodeCount(params.countByte)) + } + + return f, nil + case Argon2S2K: + f := func(out, in []byte) { + Argon2(out, in, params.salt(), params.passes, params.parallelism, params.memoryExp) + } + return f, nil + } + + return nil, errors.UnsupportedError("S2K function") +} + +func (params *Params) Serialize(w io.Writer) (err error) { + if _, err = w.Write([]byte{uint8(params.mode)}); err != nil { + return + } + if params.mode != Argon2S2K { + if _, err = w.Write([]byte{params.hashId}); err != nil { + return + } + } + if params.Dummy() { + _, err = w.Write(append([]byte("GNU"), 1)) + return + } + if params.mode > 0 { + if _, err = w.Write(params.salt()); err != nil { + return + } + if params.mode == IteratedSaltedS2K { + _, err = w.Write([]byte{params.countByte}) + } + if params.mode == Argon2S2K { + _, err = w.Write([]byte{params.passes, params.parallelism, params.memoryExp}) + } + } + return +} + +// Serialize salts and stretches the given passphrase and writes the +// resulting key into key. It also serializes an S2K descriptor to +// w. The key stretching can be configured with c, which may be +// nil. In that case, sensible defaults will be used. +func Serialize(w io.Writer, key []byte, rand io.Reader, passphrase []byte, c *Config) error { + params, err := Generate(rand, c) + if err != nil { + return err + } + err = params.Serialize(w) + if err != nil { + return err + } + + f, err := params.Function() + if err != nil { + return err + } + f(key, passphrase) + return nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_cache.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_cache.go new file mode 100644 index 0000000000000..25a4442dfbd1f --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_cache.go @@ -0,0 +1,26 @@ +package s2k + +// Cache stores keys derived with s2k functions from one passphrase +// to avoid recomputation if multiple items are encrypted with +// the same parameters. +type Cache map[Params][]byte + +// GetOrComputeDerivedKey tries to retrieve the key +// for the given s2k parameters from the cache. +// If there is no hit, it derives the key with the s2k function from the passphrase, +// updates the cache, and returns the key. +func (c *Cache) GetOrComputeDerivedKey(passphrase []byte, params *Params, expectedKeySize int) ([]byte, error) { + key, found := (*c)[*params] + if !found || len(key) != expectedKeySize { + var err error + derivedKey := make([]byte, expectedKeySize) + s2k, err := params.Function() + if err != nil { + return nil, err + } + s2k(derivedKey, passphrase) + (*c)[*params] = key + return derivedKey, nil + } + return key, nil +} diff --git a/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_config.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_config.go new file mode 100644 index 0000000000000..b40be5228fcab --- /dev/null +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/s2k/s2k_config.go @@ -0,0 +1,129 @@ +package s2k + +import "crypto" + +// Config collects configuration parameters for s2k key-stretching +// transformations. A nil *Config is valid and results in all default +// values. +type Config struct { + // S2K (String to Key) mode, used for key derivation in the context of secret key encryption + // and passphrase-encrypted data. Either s2k.Argon2S2K or s2k.IteratedSaltedS2K may be used. + // If the passphrase is a high-entropy key, indicated by setting PassphraseIsHighEntropy to true, + // s2k.SaltedS2K can also be used. + // Note: Argon2 is the strongest option but not all OpenPGP implementations are compatible with it + //(pending standardisation). + // 0 (simple), 1(salted), 3(iterated), 4(argon2) + // 2(reserved) 100-110(private/experimental). + S2KMode Mode + // Only relevant if S2KMode is not set to s2k.Argon2S2K. + // Hash is the default hash function to be used. If + // nil, SHA256 is used. + Hash crypto.Hash + // Argon2 parameters for S2K (String to Key). + // Only relevant if S2KMode is set to s2k.Argon2S2K. + // If nil, default parameters are used. + // For more details on the choice of parameters, see https://tools.ietf.org/html/rfc9106#section-4. + Argon2Config *Argon2Config + // Only relevant if S2KMode is set to s2k.IteratedSaltedS2K. + // Iteration count for Iterated S2K (String to Key). It + // determines the strength of the passphrase stretching when + // the said passphrase is hashed to produce a key. S2KCount + // should be between 65536 and 65011712, inclusive. If Config + // is nil or S2KCount is 0, the value 16777216 used. Not all + // values in the above range can be represented. S2KCount will + // be rounded up to the next representable value if it cannot + // be encoded exactly. When set, it is strongly encrouraged to + // use a value that is at least 65536. See RFC 4880 Section + // 3.7.1.3. + S2KCount int + // Indicates whether the passphrase passed by the application is a + // high-entropy key (e.g. it's randomly generated or derived from + // another passphrase using a strong key derivation function). + // When true, allows the S2KMode to be s2k.SaltedS2K. + // When the passphrase is not a high-entropy key, using SaltedS2K is + // insecure, and not allowed by draft-ietf-openpgp-crypto-refresh-08. + PassphraseIsHighEntropy bool +} + +// Argon2Config stores the Argon2 parameters +// A nil *Argon2Config is valid and results in all default +type Argon2Config struct { + NumberOfPasses uint8 + DegreeOfParallelism uint8 + // The memory parameter for Argon2 specifies desired memory usage in kibibytes. + // For example memory=64*1024 sets the memory cost to ~64 MB. + Memory uint32 +} + +func (c *Config) Mode() Mode { + if c == nil { + return IteratedSaltedS2K + } + return c.S2KMode +} + +func (c *Config) hash() crypto.Hash { + if c == nil || uint(c.Hash) == 0 { + return crypto.SHA256 + } + + return c.Hash +} + +func (c *Config) Argon2() *Argon2Config { + if c == nil || c.Argon2Config == nil { + return nil + } + return c.Argon2Config +} + +// EncodedCount get encoded count +func (c *Config) EncodedCount() uint8 { + if c == nil || c.S2KCount == 0 { + return 224 // The common case. Corresponding to 16777216 + } + + i := c.S2KCount + + switch { + case i < 65536: + i = 65536 + case i > 65011712: + i = 65011712 + } + + return encodeCount(i) +} + +func (c *Argon2Config) Passes() uint8 { + if c == nil || c.NumberOfPasses == 0 { + return 3 + } + return c.NumberOfPasses +} + +func (c *Argon2Config) Parallelism() uint8 { + if c == nil || c.DegreeOfParallelism == 0 { + return 4 + } + return c.DegreeOfParallelism +} + +func (c *Argon2Config) EncodedMemory() uint8 { + if c == nil || c.Memory == 0 { + return 16 // 64 MiB of RAM + } + + memory := c.Memory + lowerBound := uint32(c.Parallelism())*8 + upperBound := uint32(2147483648) + + switch { + case memory < lowerBound: + memory = lowerBound + case memory > upperBound: + memory = upperBound + } + + return encodeMemory(memory, c.Parallelism()) +} diff --git a/vendor/golang.org/x/crypto/openpgp/write.go b/vendor/github.com/ProtonMail/go-crypto/openpgp/write.go similarity index 51% rename from vendor/golang.org/x/crypto/openpgp/write.go rename to vendor/github.com/ProtonMail/go-crypto/openpgp/write.go index b89d48b81d737..7fdd13a3dd30e 100644 --- a/vendor/golang.org/x/crypto/openpgp/write.go +++ b/vendor/github.com/ProtonMail/go-crypto/openpgp/write.go @@ -11,10 +11,10 @@ import ( "strconv" "time" - "golang.org/x/crypto/openpgp/armor" - "golang.org/x/crypto/openpgp/errors" - "golang.org/x/crypto/openpgp/packet" - "golang.org/x/crypto/openpgp/s2k" + "github.com/ProtonMail/go-crypto/openpgp/armor" + "github.com/ProtonMail/go-crypto/openpgp/errors" + "github.com/ProtonMail/go-crypto/openpgp/internal/algorithm" + "github.com/ProtonMail/go-crypto/openpgp/packet" ) // DetachSign signs message with the private key from signer (which must @@ -60,27 +60,31 @@ func armoredDetachSign(w io.Writer, signer *Entity, message io.Reader, sigType p } func detachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) { - if signer.PrivateKey == nil { + signingKey, ok := signer.SigningKeyById(config.Now(), config.SigningKey()) + if !ok { + return errors.InvalidArgumentError("no valid signing keys") + } + if signingKey.PrivateKey == nil { return errors.InvalidArgumentError("signing key doesn't have a private key") } - if signer.PrivateKey.Encrypted { + if signingKey.PrivateKey.Encrypted { return errors.InvalidArgumentError("signing key is encrypted") } + if _, ok := algorithm.HashToHashId(config.Hash()); !ok { + return errors.InvalidArgumentError("invalid hash function") + } - sig := new(packet.Signature) - sig.SigType = sigType - sig.PubKeyAlgo = signer.PrivateKey.PubKeyAlgo - sig.Hash = config.Hash() - sig.CreationTime = config.Now() - sig.IssuerKeyId = &signer.PrivateKey.KeyId + sig := createSignaturePacket(signingKey.PublicKey, sigType, config) h, wrappedHash, err := hashForSignature(sig.Hash, sig.SigType) if err != nil { return } - io.Copy(wrappedHash, message) + if _, err = io.Copy(wrappedHash, message); err != nil { + return err + } - err = sig.Sign(h, signer.PrivateKey, config) + err = sig.Sign(h, signingKey.PrivateKey, config) if err != nil { return } @@ -115,18 +119,24 @@ func SymmetricallyEncrypt(ciphertext io.Writer, passphrase []byte, hints *FileHi if err != nil { return } - w, err := packet.SerializeSymmetricallyEncrypted(ciphertext, config.Cipher(), key, config) + + var w io.WriteCloser + cipherSuite := packet.CipherSuite{ + Cipher: config.Cipher(), + Mode: config.AEAD().Mode(), + } + w, err = packet.SerializeSymmetricallyEncrypted(ciphertext, config.Cipher(), config.AEAD() != nil, cipherSuite, key, config) if err != nil { return } - literaldata := w + literalData := w if algo := config.Compression(); algo != packet.CompressionNone { var compConfig *packet.CompressionConfig if config != nil { compConfig = config.CompressionConfig } - literaldata, err = packet.SerializeCompressed(w, algo, compConfig) + literalData, err = packet.SerializeCompressed(w, algo, compConfig) if err != nil { return } @@ -136,7 +146,7 @@ func SymmetricallyEncrypt(ciphertext io.Writer, passphrase []byte, hints *FileHi if !hints.ModTime.IsZero() { epochSeconds = uint32(hints.ModTime.Unix()) } - return packet.SerializeLiteral(literaldata, hints.IsBinary, hints.FileName, epochSeconds) + return packet.SerializeLiteral(literalData, hints.IsBinary, hints.FileName, epochSeconds) } // intersectPreferences mutates and returns a prefix of a that contains only @@ -156,23 +166,76 @@ func intersectPreferences(a []uint8, b []uint8) (intersection []uint8) { return a[:j] } +// intersectPreferences mutates and returns a prefix of a that contains only +// the values in the intersection of a and b. The order of a is preserved. +func intersectCipherSuites(a [][2]uint8, b [][2]uint8) (intersection [][2]uint8) { + var j int + for _, v := range a { + for _, v2 := range b { + if v[0] == v2[0] && v[1] == v2[1] { + a[j] = v + j++ + break + } + } + } + + return a[:j] +} + func hashToHashId(h crypto.Hash) uint8 { - v, ok := s2k.HashToHashId(h) + v, ok := algorithm.HashToHashId(h) if !ok { panic("tried to convert unknown hash") } return v } +// EncryptText encrypts a message to a number of recipients and, optionally, +// signs it. Optional information is contained in 'hints', also encrypted, that +// aids the recipients in processing the message. The resulting WriteCloser +// must be closed after the contents of the file have been written. If config +// is nil, sensible defaults will be used. The signing is done in text mode. +func EncryptText(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { + return encrypt(ciphertext, ciphertext, to, signed, hints, packet.SigTypeText, config) +} + +// Encrypt encrypts a message to a number of recipients and, optionally, signs +// it. hints contains optional information, that is also encrypted, that aids +// the recipients in processing the message. The resulting WriteCloser must +// be closed after the contents of the file have been written. +// If config is nil, sensible defaults will be used. +func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { + return encrypt(ciphertext, ciphertext, to, signed, hints, packet.SigTypeBinary, config) +} + +// EncryptSplit encrypts a message to a number of recipients and, optionally, signs +// it. hints contains optional information, that is also encrypted, that aids +// the recipients in processing the message. The resulting WriteCloser must +// be closed after the contents of the file have been written. +// If config is nil, sensible defaults will be used. +func EncryptSplit(keyWriter io.Writer, dataWriter io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { + return encrypt(keyWriter, dataWriter, to, signed, hints, packet.SigTypeBinary, config) +} + +// EncryptTextSplit encrypts a message to a number of recipients and, optionally, signs +// it. hints contains optional information, that is also encrypted, that aids +// the recipients in processing the message. The resulting WriteCloser must +// be closed after the contents of the file have been written. +// If config is nil, sensible defaults will be used. +func EncryptTextSplit(keyWriter io.Writer, dataWriter io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { + return encrypt(keyWriter, dataWriter, to, signed, hints, packet.SigTypeText, config) +} + // writeAndSign writes the data as a payload package and, optionally, signs // it. hints contains optional information, that is also encrypted, // that aids the recipients in processing the message. The resulting // WriteCloser must be closed after the contents of the file have been // written. If config is nil, sensible defaults will be used. -func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { +func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entity, hints *FileHints, sigType packet.SignatureType, config *packet.Config) (plaintext io.WriteCloser, err error) { var signer *packet.PrivateKey if signed != nil { - signKey, ok := signed.signingKey(config.Now()) + signKey, ok := signed.SigningKeyById(config.Now(), config.SigningKey()) if !ok { return nil, errors.InvalidArgumentError("no valid signing keys") } @@ -187,7 +250,7 @@ func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entit var hash crypto.Hash for _, hashId := range candidateHashes { - if h, ok := s2k.HashIdToHash(hashId); ok && h.Available() { + if h, ok := algorithm.HashIdToHash(hashId); ok && h.Available() { hash = h break } @@ -196,7 +259,7 @@ func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entit // If the hash specified by config is a candidate, we'll use that. if configuredHash := config.Hash(); configuredHash.Available() { for _, hashId := range candidateHashes { - if h, ok := s2k.HashIdToHash(hashId); ok && h == configuredHash { + if h, ok := algorithm.HashIdToHash(hashId); ok && h == configuredHash { hash = h break } @@ -205,7 +268,7 @@ func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entit if hash == 0 { hashId := candidateHashes[0] - name, ok := s2k.HashIdToString(hashId) + name, ok := algorithm.HashIdToString(hashId) if !ok { name = "#" + strconv.Itoa(int(hashId)) } @@ -214,7 +277,7 @@ func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entit if signer != nil { ops := &packet.OnePassSignature{ - SigType: packet.SigTypeBinary, + SigType: sigType, Hash: hash, PubKeyAlgo: signer.PubKeyAlgo, KeyId: signer.KeyId, @@ -247,68 +310,108 @@ func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entit } if signer != nil { - return signatureWriter{payload, literalData, hash, hash.New(), signer, config}, nil + h, wrappedHash, err := hashForSignature(hash, sigType) + if err != nil { + return nil, err + } + metadata := &packet.LiteralData{ + Format: 't', + FileName: hints.FileName, + Time: epochSeconds, + } + if hints.IsBinary { + metadata.Format = 'b' + } + return signatureWriter{payload, literalData, hash, wrappedHash, h, signer, sigType, config, metadata}, nil } return literalData, nil } -// Encrypt encrypts a message to a number of recipients and, optionally, signs +// encrypt encrypts a message to a number of recipients and, optionally, signs // it. hints contains optional information, that is also encrypted, that aids // the recipients in processing the message. The resulting WriteCloser must // be closed after the contents of the file have been written. // If config is nil, sensible defaults will be used. -func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { +func encrypt(keyWriter io.Writer, dataWriter io.Writer, to []*Entity, signed *Entity, hints *FileHints, sigType packet.SignatureType, config *packet.Config) (plaintext io.WriteCloser, err error) { if len(to) == 0 { return nil, errors.InvalidArgumentError("no encryption recipient provided") } // These are the possible ciphers that we'll use for the message. candidateCiphers := []uint8{ - uint8(packet.CipherAES128), uint8(packet.CipherAES256), - uint8(packet.CipherCAST5), + uint8(packet.CipherAES128), } + // These are the possible hash functions that we'll use for the signature. candidateHashes := []uint8{ hashToHashId(crypto.SHA256), hashToHashId(crypto.SHA384), hashToHashId(crypto.SHA512), - hashToHashId(crypto.SHA1), - hashToHashId(crypto.RIPEMD160), + hashToHashId(crypto.SHA3_256), + hashToHashId(crypto.SHA3_512), + } + + // Prefer GCM if everyone supports it + candidateCipherSuites := [][2]uint8{ + {uint8(packet.CipherAES256), uint8(packet.AEADModeGCM)}, + {uint8(packet.CipherAES256), uint8(packet.AEADModeEAX)}, + {uint8(packet.CipherAES256), uint8(packet.AEADModeOCB)}, + {uint8(packet.CipherAES128), uint8(packet.AEADModeGCM)}, + {uint8(packet.CipherAES128), uint8(packet.AEADModeEAX)}, + {uint8(packet.CipherAES128), uint8(packet.AEADModeOCB)}, + } + + candidateCompression := []uint8{ + uint8(packet.CompressionNone), + uint8(packet.CompressionZIP), + uint8(packet.CompressionZLIB), } - // In the event that a recipient doesn't specify any supported ciphers - // or hash functions, these are the ones that we assume that every - // implementation supports. - defaultCiphers := candidateCiphers[len(candidateCiphers)-1:] - defaultHashes := candidateHashes[len(candidateHashes)-1:] encryptKeys := make([]Key, len(to)) + + // AEAD is used only if config enables it and every key supports it + aeadSupported := config.AEAD() != nil + for i := range to { var ok bool - encryptKeys[i], ok = to[i].encryptionKey(config.Now()) + encryptKeys[i], ok = to[i].EncryptionKey(config.Now()) if !ok { - return nil, errors.InvalidArgumentError("cannot encrypt a message to key id " + strconv.FormatUint(to[i].PrimaryKey.KeyId, 16) + " because it has no encryption keys") + return nil, errors.InvalidArgumentError("cannot encrypt a message to key id " + strconv.FormatUint(to[i].PrimaryKey.KeyId, 16) + " because it has no valid encryption keys") } - sig := to[i].primaryIdentity().SelfSignature - - preferredSymmetric := sig.PreferredSymmetric - if len(preferredSymmetric) == 0 { - preferredSymmetric = defaultCiphers - } - preferredHashes := sig.PreferredHash - if len(preferredHashes) == 0 { - preferredHashes = defaultHashes + sig := to[i].PrimaryIdentity().SelfSignature + if !sig.SEIPDv2 { + aeadSupported = false } - candidateCiphers = intersectPreferences(candidateCiphers, preferredSymmetric) - candidateHashes = intersectPreferences(candidateHashes, preferredHashes) + + candidateCiphers = intersectPreferences(candidateCiphers, sig.PreferredSymmetric) + candidateHashes = intersectPreferences(candidateHashes, sig.PreferredHash) + candidateCipherSuites = intersectCipherSuites(candidateCipherSuites, sig.PreferredCipherSuites) + candidateCompression = intersectPreferences(candidateCompression, sig.PreferredCompression) } - if len(candidateCiphers) == 0 || len(candidateHashes) == 0 { - return nil, errors.InvalidArgumentError("cannot encrypt because recipient set shares no common algorithms") + // In the event that the intersection of supported algorithms is empty we use the ones + // labelled as MUST that every implementation supports. + if len(candidateCiphers) == 0 { + // https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-9.3 + candidateCiphers = []uint8{uint8(packet.CipherAES128)} + } + if len(candidateHashes) == 0 { + // https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#hash-algos + candidateHashes = []uint8{hashToHashId(crypto.SHA256)} + } + if len(candidateCipherSuites) == 0 { + // https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-9.6 + candidateCipherSuites = [][2]uint8{{uint8(packet.CipherAES128), uint8(packet.AEADModeOCB)}} } cipher := packet.CipherFunction(candidateCiphers[0]) + aeadCipherSuite := packet.CipherSuite{ + Cipher: packet.CipherFunction(candidateCipherSuites[0][0]), + Mode: packet.AEADMode(candidateCipherSuites[0][1]), + } + // If the cipher specified by config is a candidate, we'll use that. configuredCipher := config.Cipher() for _, c := range candidateCiphers { @@ -325,17 +428,23 @@ func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHint } for _, key := range encryptKeys { - if err := packet.SerializeEncryptedKey(ciphertext, key.PublicKey, cipher, symKey, config); err != nil { + if err := packet.SerializeEncryptedKey(keyWriter, key.PublicKey, cipher, symKey, config); err != nil { return nil, err } } - payload, err := packet.SerializeSymmetricallyEncrypted(ciphertext, cipher, symKey, config) + var payload io.WriteCloser + payload, err = packet.SerializeSymmetricallyEncrypted(dataWriter, cipher, aeadSupported, aeadCipherSuite, symKey, config) if err != nil { return } - return writeAndSign(payload, candidateHashes, signed, hints, config) + payload, err = handleCompression(payload, candidateCompression, config) + if err != nil { + return nil, err + } + + return writeAndSign(payload, candidateHashes, signed, hints, sigType, config) } // Sign signs a message. The resulting WriteCloser must be closed after the @@ -352,16 +461,20 @@ func Sign(output io.Writer, signed *Entity, hints *FileHints, config *packet.Con hashToHashId(crypto.SHA256), hashToHashId(crypto.SHA384), hashToHashId(crypto.SHA512), - hashToHashId(crypto.SHA1), - hashToHashId(crypto.RIPEMD160), + hashToHashId(crypto.SHA3_256), + hashToHashId(crypto.SHA3_512), } - defaultHashes := candidateHashes[len(candidateHashes)-1:] - preferredHashes := signed.primaryIdentity().SelfSignature.PreferredHash + defaultHashes := candidateHashes[0:1] + preferredHashes := signed.PrimaryIdentity().SelfSignature.PreferredHash if len(preferredHashes) == 0 { preferredHashes = defaultHashes } candidateHashes = intersectPreferences(candidateHashes, preferredHashes) - return writeAndSign(noOpCloser{output}, candidateHashes, signed, hints, config) + if len(candidateHashes) == 0 { + return nil, errors.InvalidArgumentError("cannot sign because signing key shares no common algorithms with candidate hashes") + } + + return writeAndSign(noOpCloser{output}, candidateHashes, signed, hints, packet.SigTypeBinary, config) } // signatureWriter hashes the contents of a message while passing it along to @@ -371,24 +484,30 @@ type signatureWriter struct { encryptedData io.WriteCloser literalData io.WriteCloser hashType crypto.Hash + wrappedHash hash.Hash h hash.Hash signer *packet.PrivateKey + sigType packet.SignatureType config *packet.Config + metadata *packet.LiteralData // V5 signatures protect document metadata } func (s signatureWriter) Write(data []byte) (int, error) { - s.h.Write(data) - return s.literalData.Write(data) + s.wrappedHash.Write(data) + switch s.sigType { + case packet.SigTypeBinary: + return s.literalData.Write(data) + case packet.SigTypeText: + flag := 0 + return writeCanonical(s.literalData, data, &flag) + } + return 0, errors.UnsupportedError("unsupported signature type: " + strconv.Itoa(int(s.sigType))) } func (s signatureWriter) Close() error { - sig := &packet.Signature{ - SigType: packet.SigTypeBinary, - PubKeyAlgo: s.signer.PubKeyAlgo, - Hash: s.hashType, - CreationTime: s.config.Now(), - IssuerKeyId: &s.signer.KeyId, - } + sig := createSignaturePacket(&s.signer.PublicKey, s.sigType, s.config) + sig.Hash = s.hashType + sig.Metadata = s.metadata if err := sig.Sign(s.h, s.signer, s.config); err != nil { return err @@ -402,7 +521,22 @@ func (s signatureWriter) Close() error { return s.encryptedData.Close() } -// noOpCloser is like an io.NopCloser, but for an io.Writer. +func createSignaturePacket(signer *packet.PublicKey, sigType packet.SignatureType, config *packet.Config) *packet.Signature { + sigLifetimeSecs := config.SigLifetime() + return &packet.Signature{ + Version: signer.Version, + SigType: sigType, + PubKeyAlgo: signer.PubKeyAlgo, + Hash: config.Hash(), + CreationTime: config.Now(), + IssuerKeyId: &signer.KeyId, + IssuerFingerprint: signer.Fingerprint, + Notations: config.Notations(), + SigLifetimeSecs: &sigLifetimeSecs, + } +} + +// noOpCloser is like an ioutil.NopCloser, but for an io.Writer. // TODO: we have two of these in OpenPGP packages alone. This probably needs // to be promoted somewhere more common. type noOpCloser struct { @@ -416,3 +550,34 @@ func (c noOpCloser) Write(data []byte) (n int, err error) { func (c noOpCloser) Close() error { return nil } + +func handleCompression(compressed io.WriteCloser, candidateCompression []uint8, config *packet.Config) (data io.WriteCloser, err error) { + data = compressed + confAlgo := config.Compression() + if confAlgo == packet.CompressionNone { + return + } + + // Set algorithm labelled as MUST as fallback + // https://www.ietf.org/archive/id/draft-ietf-openpgp-crypto-refresh-07.html#section-9.4 + finalAlgo := packet.CompressionNone + // if compression specified by config available we will use it + for _, c := range candidateCompression { + if uint8(confAlgo) == c { + finalAlgo = confAlgo + break + } + } + + if finalAlgo != packet.CompressionNone { + var compConfig *packet.CompressionConfig + if config != nil { + compConfig = config.CompressionConfig + } + data, err = packet.SerializeCompressed(compressed, finalAlgo, compConfig) + if err != nil { + return + } + } + return data, nil +} diff --git a/vendor/github.com/agiledragon/gomonkey/v2/LICENSE b/vendor/github.com/agiledragon/gomonkey/v2/LICENSE deleted file mode 100644 index d75dc90e65577..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 Zhang Xiaolong - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/agiledragon/gomonkey/v2/README.md b/vendor/github.com/agiledragon/gomonkey/v2/README.md deleted file mode 100644 index b3321ba07ee76..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# gomonkey - -gomonkey is a library to make monkey patching in unit tests easy, and the core idea of monkey patching comes from [Bouke](https://github.com/bouk), you can read [this blogpost](https://bou.ke/blog/monkey-patching-in-go/) for an explanation on how it works. - -## Features - -+ support a patch for a function -+ support a patch for a public member method -+ support a patch for a private member method -+ support a patch for a interface -+ support a patch for a function variable -+ support a patch for a global variable -+ support patches of a specified sequence for a function -+ support patches of a specified sequence for a member method -+ support patches of a specified sequence for a interface -+ support patches of a specified sequence for a function variable - -## Notes -+ gomonkey fails to patch a function or a member method if inlining is enabled, please running your tests with inlining disabled by adding the command line argument that is `-gcflags=-l`(below go1.10) or `-gcflags=all=-l`(go1.10 and above). -+ A panic may happen when a goroutine is patching a function or a member method that is visited by another goroutine at the same time. That is to say, gomonkey is not threadsafe. - -## Supported Platform: - -- ARCH - - amd64 - - arm64 - - 386 - -- OS - - Linux - - MAC OS X - - Windows - -## Installation -- below v2.1.0, for example v2.0.2 -```go -$ go get github.com/agiledragon/gomonkey@v2.0.2 -``` -- v2.1.0 and above, for example v2.2.0 -```go -$ go get github.com/agiledragon/gomonkey/v2@v2.2.0 -``` - -## Test Method -```go -$ cd test -$ go test -gcflags=all=-l -``` - -## Using gomonkey - -Please refer to the test cases as idioms, very complete and detailed. - diff --git a/vendor/github.com/agiledragon/gomonkey/v2/creflect/ae1.17.go b/vendor/github.com/agiledragon/gomonkey/v2/creflect/ae1.17.go deleted file mode 100644 index 68a7e750e9d68..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/creflect/ae1.17.go +++ /dev/null @@ -1,39 +0,0 @@ -//go:build go1.17 -// +build go1.17 - -package creflect - -import ( - "unsafe" -) - -// name is an encoded type name with optional extra data. -type name struct { - bytes *byte -} - -func (n name) data(off int, whySafe string) *byte { - return (*byte)(add(unsafe.Pointer(n.bytes), uintptr(off), whySafe)) -} - -func (n name) readVarint(off int) (int, int) { - v := 0 - for i := 0; ; i++ { - x := *n.data(off+i, "read varint") - v += int(x&0x7f) << (7 * i) - if x&0x80 == 0 { - return i + 1, v - } - } -} - -func (n name) name() (s string) { - if n.bytes == nil { - return - } - i, l := n.readVarint(1) - hdr := (*String)(unsafe.Pointer(&s)) - hdr.Data = unsafe.Pointer(n.data(1+i, "non-empty string")) - hdr.Len = l - return -} diff --git a/vendor/github.com/agiledragon/gomonkey/v2/creflect/be1.16.go b/vendor/github.com/agiledragon/gomonkey/v2/creflect/be1.16.go deleted file mode 100644 index 1fb6988afc523..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/creflect/be1.16.go +++ /dev/null @@ -1,25 +0,0 @@ -//go:build !go1.17 -// +build !go1.17 - -package creflect - -import ( - "unsafe" -) - -// name is an encoded type name with optional extra data. -type name struct { - bytes *byte -} - -func (n name) name() (s string) { - if n.bytes == nil { - return - } - b := (*[4]byte)(unsafe.Pointer(n.bytes)) - - hdr := (*String)(unsafe.Pointer(&s)) - hdr.Data = unsafe.Pointer(&b[3]) - hdr.Len = int(b[1])<<8 | int(b[2]) - return s -} diff --git a/vendor/github.com/agiledragon/gomonkey/v2/creflect/type.go b/vendor/github.com/agiledragon/gomonkey/v2/creflect/type.go deleted file mode 100644 index 7df1f0920750e..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/creflect/type.go +++ /dev/null @@ -1,179 +0,0 @@ -// Customized reflect package for gomonkey,copy most code from go/src/reflect/type.go - -package creflect - -import ( - "reflect" - "unsafe" -) - -// rtype is the common implementation of most values. -// rtype must be kept in sync with ../runtime/type.go:/^type._type. -type rtype struct { - size uintptr - ptrdata uintptr // number of bytes in the type that can contain pointers - hash uint32 // hash of type; avoids computation in hash tables - tflag tflag // extra type information flags - align uint8 // alignment of variable with this type - fieldAlign uint8 // alignment of struct field with this type - kind uint8 // enumeration for C - // function for comparing objects of this type - // (ptr to object A, ptr to object B) -> ==? - equal func(unsafe.Pointer, unsafe.Pointer) bool - gcdata *byte // garbage collection data - str nameOff // string form - ptrToThis typeOff // type for pointer to this type, may be zero -} - -func Create(t reflect.Type) *rtype { - i := *(*funcValue)(unsafe.Pointer(&t)) - r := (*rtype)(i.p) - return r -} - -type funcValue struct { - _ uintptr - p unsafe.Pointer -} - -func funcPointer(v reflect.Method, ok bool) (unsafe.Pointer, bool) { - return (*funcValue)(unsafe.Pointer(&v.Func)).p, ok -} -func MethodByName(r reflect.Type, name string) (fn unsafe.Pointer, ok bool) { - t := Create(r) - if r.Kind() == reflect.Interface { - return funcPointer(r.MethodByName(name)) - } - ut := t.uncommon(r) - if ut == nil { - return nil, false - } - - for _, p := range ut.methods() { - if t.nameOff(p.name).name() == name { - return t.Method(p), true - } - } - return nil, false -} - -func (t *rtype) Method(p method) (fn unsafe.Pointer) { - tfn := t.textOff(p.tfn) - fn = unsafe.Pointer(&tfn) - return -} - -type tflag uint8 -type nameOff int32 // offset to a name -type typeOff int32 // offset to an *rtype -type textOff int32 // offset from top of text section - -//go:linkname resolveTextOff reflect.resolveTextOff -func resolveTextOff(rtype unsafe.Pointer, off int32) unsafe.Pointer - -func (t *rtype) textOff(off textOff) unsafe.Pointer { - return resolveTextOff(unsafe.Pointer(t), int32(off)) -} - -//go:linkname resolveNameOff reflect.resolveNameOff -func resolveNameOff(ptrInModule unsafe.Pointer, off int32) unsafe.Pointer - -func (t *rtype) nameOff(off nameOff) name { - return name{(*byte)(resolveNameOff(unsafe.Pointer(t), int32(off)))} -} - -const ( - tflagUncommon tflag = 1 << 0 -) - -// uncommonType is present only for defined types or types with methods -type uncommonType struct { - pkgPath nameOff // import path; empty for built-in types like int, string - mcount uint16 // number of methods - xcount uint16 // number of exported methods - moff uint32 // offset from this uncommontype to [mcount]method - _ uint32 // unused -} - -// ptrType represents a pointer type. -type ptrType struct { - rtype - elem *rtype // pointer element (pointed at) type -} - -// funcType represents a function type. -type funcType struct { - rtype - inCount uint16 - outCount uint16 // top bit is set if last input parameter is ... -} - -func add(p unsafe.Pointer, x uintptr, whySafe string) unsafe.Pointer { - return unsafe.Pointer(uintptr(p) + x) -} - -// interfaceType represents an interface type. -type interfaceType struct { - rtype - pkgPath name // import path - methods []imethod // sorted by hash -} - -type imethod struct { - name nameOff // name of method - typ typeOff // .(*FuncType) underneath -} - -type String struct { - Data unsafe.Pointer - Len int -} - -func (t *rtype) uncommon(r reflect.Type) *uncommonType { - if t.tflag&tflagUncommon == 0 { - return nil - } - switch r.Kind() { - case reflect.Ptr: - type u struct { - ptrType - u uncommonType - } - return &(*u)(unsafe.Pointer(t)).u - case reflect.Func: - type u struct { - funcType - u uncommonType - } - return &(*u)(unsafe.Pointer(t)).u - case reflect.Interface: - type u struct { - interfaceType - u uncommonType - } - return &(*u)(unsafe.Pointer(t)).u - case reflect.Struct: - type u struct { - interfaceType - u uncommonType - } - return &(*u)(unsafe.Pointer(t)).u - default: - return nil - } -} - -// Method on non-interface type -type method struct { - name nameOff // name of method - mtyp typeOff // method type (without receiver) - ifn textOff // fn used in interface call (one-word receiver) - tfn textOff // fn used for normal method call -} - -func (t *uncommonType) methods() []method { - if t.mcount == 0 { - return nil - } - return (*[1 << 16]method)(add(unsafe.Pointer(t), uintptr(t.moff), "t.mcount > 0"))[:t.mcount:t.mcount] -} diff --git a/vendor/github.com/agiledragon/gomonkey/v2/jmp_386.go b/vendor/github.com/agiledragon/gomonkey/v2/jmp_386.go deleted file mode 100644 index 27c8d4f21084c..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/jmp_386.go +++ /dev/null @@ -1,13 +0,0 @@ -package gomonkey - -func buildJmpDirective(double uintptr) []byte { - d0 := byte(double) - d1 := byte(double >> 8) - d2 := byte(double >> 16) - d3 := byte(double >> 24) - - return []byte{ - 0xBA, d0, d1, d2, d3, // MOV edx, double - 0xFF, 0x22, // JMP [edx] - } -} diff --git a/vendor/github.com/agiledragon/gomonkey/v2/jmp_amd64.go b/vendor/github.com/agiledragon/gomonkey/v2/jmp_amd64.go deleted file mode 100644 index 02c1c42c70182..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/jmp_amd64.go +++ /dev/null @@ -1,18 +0,0 @@ -package gomonkey - -func buildJmpDirective(double uintptr) []byte { - d0 := byte(double) - d1 := byte(double >> 8) - d2 := byte(double >> 16) - d3 := byte(double >> 24) - d4 := byte(double >> 32) - d5 := byte(double >> 40) - d6 := byte(double >> 48) - d7 := byte(double >> 56) - - return []byte{ - 0x48, 0xBA, d0, d1, d2, d3, d4, d5, d6, d7, // MOV rdx, double - 0xFF, 0x22, // JMP [rdx] - } -} - diff --git a/vendor/github.com/agiledragon/gomonkey/v2/jmp_arm64.go b/vendor/github.com/agiledragon/gomonkey/v2/jmp_arm64.go deleted file mode 100644 index add3fd999f6ce..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/jmp_arm64.go +++ /dev/null @@ -1,34 +0,0 @@ -package gomonkey - -import "unsafe" - -func buildJmpDirective(double uintptr) []byte { - res := make([]byte, 0, 24) - d0d1 := double & 0xFFFF - d2d3 := double >> 16 & 0xFFFF - d4d5 := double >> 32 & 0xFFFF - d6d7 := double >> 48 & 0xFFFF - - res = append(res, movImm(0B10, 0, d0d1)...) // MOVZ x26, double[16:0] - res = append(res, movImm(0B11, 1, d2d3)...) // MOVK x26, double[32:16] - res = append(res, movImm(0B11, 2, d4d5)...) // MOVK x26, double[48:32] - res = append(res, movImm(0B11, 3, d6d7)...) // MOVK x26, double[64:48] - res = append(res, []byte{0x4A, 0x03, 0x40, 0xF9}...) // LDR x10, [x26] - res = append(res, []byte{0x40, 0x01, 0x1F, 0xD6}...) // BR x10 - - return res -} - -func movImm(opc, shift int, val uintptr) []byte { - var m uint32 = 26 // rd - m |= uint32(val) << 5 // imm16 - m |= uint32(shift&3) << 21 // hw - m |= 0b100101 << 23 // const - m |= uint32(opc&0x3) << 29 // opc - m |= 0b1 << 31 // sf - - res := make([]byte, 4) - *(*uint32)(unsafe.Pointer(&res[0])) = m - - return res -} diff --git a/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_darwin.go b/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_darwin.go deleted file mode 100644 index 6c169888eac4c..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_darwin.go +++ /dev/null @@ -1,27 +0,0 @@ -package gomonkey - -import "syscall" - -func modifyBinary(target uintptr, bytes []byte) { - function := entryAddress(target, len(bytes)) - err := mprotectCrossPage(target, len(bytes), syscall.PROT_READ|syscall.PROT_WRITE|syscall.PROT_EXEC) - if err != nil { - panic(err) - } - copy(function, bytes) - err = mprotectCrossPage(target, len(bytes), syscall.PROT_READ|syscall.PROT_EXEC) - if err != nil { - panic(err) - } -} - -func mprotectCrossPage(addr uintptr, length int, prot int) error { - pageSize := syscall.Getpagesize() - for p := pageStart(addr); p < addr+uintptr(length); p += uintptr(pageSize) { - page := entryAddress(p, pageSize) - if err := syscall.Mprotect(page, prot); err != nil { - return err - } - } - return nil -} diff --git a/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_linux.go b/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_linux.go deleted file mode 100644 index 6c169888eac4c..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_linux.go +++ /dev/null @@ -1,27 +0,0 @@ -package gomonkey - -import "syscall" - -func modifyBinary(target uintptr, bytes []byte) { - function := entryAddress(target, len(bytes)) - err := mprotectCrossPage(target, len(bytes), syscall.PROT_READ|syscall.PROT_WRITE|syscall.PROT_EXEC) - if err != nil { - panic(err) - } - copy(function, bytes) - err = mprotectCrossPage(target, len(bytes), syscall.PROT_READ|syscall.PROT_EXEC) - if err != nil { - panic(err) - } -} - -func mprotectCrossPage(addr uintptr, length int, prot int) error { - pageSize := syscall.Getpagesize() - for p := pageStart(addr); p < addr+uintptr(length); p += uintptr(pageSize) { - page := entryAddress(p, pageSize) - if err := syscall.Mprotect(page, prot); err != nil { - return err - } - } - return nil -} diff --git a/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_windows.go b/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_windows.go deleted file mode 100644 index ef0dbc756a4e7..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/modify_binary_windows.go +++ /dev/null @@ -1,25 +0,0 @@ -package gomonkey - -import ( - "syscall" - "unsafe" -) - -func modifyBinary(target uintptr, bytes []byte) { - function := entryAddress(target, len(bytes)) - - proc := syscall.NewLazyDLL("kernel32.dll").NewProc("VirtualProtect") - const PROT_READ_WRITE = 0x40 - var old uint32 - result, _, _ := proc.Call(target, uintptr(len(bytes)), uintptr(PROT_READ_WRITE), uintptr(unsafe.Pointer(&old))) - if result == 0 { - panic(result) - } - copy(function, bytes) - - var ignore uint32 - result, _, _ = proc.Call(target, uintptr(len(bytes)), uintptr(old), uintptr(unsafe.Pointer(&ignore))) - if result == 0 { - panic(result) - } -} \ No newline at end of file diff --git a/vendor/github.com/agiledragon/gomonkey/v2/patch.go b/vendor/github.com/agiledragon/gomonkey/v2/patch.go deleted file mode 100644 index 468ae6708feb4..0000000000000 --- a/vendor/github.com/agiledragon/gomonkey/v2/patch.go +++ /dev/null @@ -1,365 +0,0 @@ -package gomonkey - -import ( - "fmt" - "reflect" - "syscall" - "unsafe" - - "github.com/agiledragon/gomonkey/v2/creflect" -) - -type Patches struct { - originals map[uintptr][]byte - values map[reflect.Value]reflect.Value - valueHolders map[reflect.Value]reflect.Value -} - -type Params []interface{} -type OutputCell struct { - Values Params - Times int -} - -func ApplyFunc(target, double interface{}) *Patches { - return create().ApplyFunc(target, double) -} - -func ApplyMethod(target interface{}, methodName string, double interface{}) *Patches { - return create().ApplyMethod(target, methodName, double) -} - -func ApplyMethodFunc(target interface{}, methodName string, doubleFunc interface{}) *Patches { - return create().ApplyMethodFunc(target, methodName, doubleFunc) -} - -func ApplyPrivateMethod(target interface{}, methodName string, double interface{}) *Patches { - return create().ApplyPrivateMethod(target, methodName, double) -} - -func ApplyGlobalVar(target, double interface{}) *Patches { - return create().ApplyGlobalVar(target, double) -} - -func ApplyFuncVar(target, double interface{}) *Patches { - return create().ApplyFuncVar(target, double) -} - -func ApplyFuncSeq(target interface{}, outputs []OutputCell) *Patches { - return create().ApplyFuncSeq(target, outputs) -} - -func ApplyMethodSeq(target interface{}, methodName string, outputs []OutputCell) *Patches { - return create().ApplyMethodSeq(target, methodName, outputs) -} - -func ApplyFuncVarSeq(target interface{}, outputs []OutputCell) *Patches { - return create().ApplyFuncVarSeq(target, outputs) -} - -func ApplyFuncReturn(target interface{}, output ...interface{}) *Patches { - return create().ApplyFuncReturn(target, output...) -} - -func ApplyMethodReturn(target interface{}, methodName string, output ...interface{}) *Patches { - return create().ApplyMethodReturn(target, methodName, output...) -} - -func ApplyFuncVarReturn(target interface{}, output ...interface{}) *Patches { - return create().ApplyFuncVarReturn(target, output...) -} - -func create() *Patches { - return &Patches{originals: make(map[uintptr][]byte), values: make(map[reflect.Value]reflect.Value), valueHolders: make(map[reflect.Value]reflect.Value)} -} - -func NewPatches() *Patches { - return create() -} - -func (this *Patches) ApplyFunc(target, double interface{}) *Patches { - t := reflect.ValueOf(target) - d := reflect.ValueOf(double) - return this.ApplyCore(t, d) -} - -func (this *Patches) ApplyMethod(target interface{}, methodName string, double interface{}) *Patches { - m, ok := castRType(target).MethodByName(methodName) - if !ok { - panic("retrieve method by name failed") - } - d := reflect.ValueOf(double) - return this.ApplyCore(m.Func, d) -} - -func (this *Patches) ApplyMethodFunc(target interface{}, methodName string, doubleFunc interface{}) *Patches { - m, ok := castRType(target).MethodByName(methodName) - if !ok { - panic("retrieve method by name failed") - } - d := funcToMethod(m.Type, doubleFunc) - return this.ApplyCore(m.Func, d) -} - -func (this *Patches) ApplyPrivateMethod(target interface{}, methodName string, double interface{}) *Patches { - m, ok := creflect.MethodByName(castRType(target), methodName) - if !ok { - panic("retrieve method by name failed") - } - d := reflect.ValueOf(double) - return this.ApplyCoreOnlyForPrivateMethod(m, d) -} - -func (this *Patches) ApplyGlobalVar(target, double interface{}) *Patches { - t := reflect.ValueOf(target) - if t.Type().Kind() != reflect.Ptr { - panic("target is not a pointer") - } - - this.values[t] = reflect.ValueOf(t.Elem().Interface()) - d := reflect.ValueOf(double) - t.Elem().Set(d) - return this -} - -func (this *Patches) ApplyFuncVar(target, double interface{}) *Patches { - t := reflect.ValueOf(target) - d := reflect.ValueOf(double) - if t.Type().Kind() != reflect.Ptr { - panic("target is not a pointer") - } - this.check(t.Elem(), d) - return this.ApplyGlobalVar(target, double) -} - -func (this *Patches) ApplyFuncSeq(target interface{}, outputs []OutputCell) *Patches { - funcType := reflect.TypeOf(target) - t := reflect.ValueOf(target) - d := getDoubleFunc(funcType, outputs) - return this.ApplyCore(t, d) -} - -func (this *Patches) ApplyMethodSeq(target interface{}, methodName string, outputs []OutputCell) *Patches { - m, ok := castRType(target).MethodByName(methodName) - if !ok { - panic("retrieve method by name failed") - } - d := getDoubleFunc(m.Type, outputs) - return this.ApplyCore(m.Func, d) -} - -func (this *Patches) ApplyFuncVarSeq(target interface{}, outputs []OutputCell) *Patches { - t := reflect.ValueOf(target) - if t.Type().Kind() != reflect.Ptr { - panic("target is not a pointer") - } - if t.Elem().Kind() != reflect.Func { - panic("target is not a func") - } - - funcType := reflect.TypeOf(target).Elem() - double := getDoubleFunc(funcType, outputs).Interface() - return this.ApplyGlobalVar(target, double) -} - -func (this *Patches) ApplyFuncReturn(target interface{}, returns ...interface{}) *Patches { - funcType := reflect.TypeOf(target) - t := reflect.ValueOf(target) - outputs := []OutputCell{{Values: returns, Times: -1}} - d := getDoubleFunc(funcType, outputs) - return this.ApplyCore(t, d) -} - -func (this *Patches) ApplyMethodReturn(target interface{}, methodName string, returns ...interface{}) *Patches { - m, ok := reflect.TypeOf(target).MethodByName(methodName) - if !ok { - panic("retrieve method by name failed") - } - - outputs := []OutputCell{{Values: returns, Times: -1}} - d := getDoubleFunc(m.Type, outputs) - return this.ApplyCore(m.Func, d) -} - -func (this *Patches) ApplyFuncVarReturn(target interface{}, returns ...interface{}) *Patches { - t := reflect.ValueOf(target) - if t.Type().Kind() != reflect.Ptr { - panic("target is not a pointer") - } - if t.Elem().Kind() != reflect.Func { - panic("target is not a func") - } - - funcType := reflect.TypeOf(target).Elem() - outputs := []OutputCell{{Values: returns, Times: -1}} - double := getDoubleFunc(funcType, outputs).Interface() - return this.ApplyGlobalVar(target, double) -} - -func (this *Patches) Reset() { - for target, bytes := range this.originals { - modifyBinary(target, bytes) - delete(this.originals, target) - } - - for target, variable := range this.values { - target.Elem().Set(variable) - } -} - -func (this *Patches) ApplyCore(target, double reflect.Value) *Patches { - this.check(target, double) - assTarget := *(*uintptr)(getPointer(target)) - original := replace(assTarget, uintptr(getPointer(double))) - if _, ok := this.originals[assTarget]; !ok { - this.originals[assTarget] = original - } - this.valueHolders[double] = double - return this -} - -func (this *Patches) ApplyCoreOnlyForPrivateMethod(target unsafe.Pointer, double reflect.Value) *Patches { - if double.Kind() != reflect.Func { - panic("double is not a func") - } - assTarget := *(*uintptr)(target) - original := replace(assTarget, uintptr(getPointer(double))) - if _, ok := this.originals[assTarget]; !ok { - this.originals[assTarget] = original - } - this.valueHolders[double] = double - return this -} - -func (this *Patches) check(target, double reflect.Value) { - if target.Kind() != reflect.Func { - panic("target is not a func") - } - - if double.Kind() != reflect.Func { - panic("double is not a func") - } - - targetType := target.Type() - doubleType := double.Type() - - if targetType.NumIn() < doubleType.NumIn() || - targetType.NumOut() != doubleType.NumOut() || - (targetType.NumIn() == doubleType.NumIn() && targetType.IsVariadic() != doubleType.IsVariadic()) { - panic(fmt.Sprintf("target type(%s) and double type(%s) are different", target.Type(), double.Type())) - } - - for i, size := 0, doubleType.NumIn(); i < size; i++ { - targetIn := targetType.In(i) - doubleIn := doubleType.In(i) - - if targetIn.AssignableTo(doubleIn) { - continue - } - - panic(fmt.Sprintf("target type(%s) and double type(%s) are different", target.Type(), double.Type())) - } -} - -func replace(target, double uintptr) []byte { - code := buildJmpDirective(double) - bytes := entryAddress(target, len(code)) - original := make([]byte, len(bytes)) - copy(original, bytes) - modifyBinary(target, code) - return original -} - -func getDoubleFunc(funcType reflect.Type, outputs []OutputCell) reflect.Value { - if funcType.NumOut() != len(outputs[0].Values) { - panic(fmt.Sprintf("func type has %v return values, but only %v values provided as double", - funcType.NumOut(), len(outputs[0].Values))) - } - - needReturn := false - slice := make([]Params, 0) - for _, output := range outputs { - if output.Times == -1 { - needReturn = true - slice = []Params{output.Values} - break - } - t := 0 - if output.Times <= 1 { - t = 1 - } else { - t = output.Times - } - for j := 0; j < t; j++ { - slice = append(slice, output.Values) - } - } - - i := 0 - lenOutputs := len(slice) - return reflect.MakeFunc(funcType, func(_ []reflect.Value) []reflect.Value { - if needReturn { - return GetResultValues(funcType, slice[0]...) - } - if i < lenOutputs { - i++ - return GetResultValues(funcType, slice[i-1]...) - } - panic("double seq is less than call seq") - }) -} - -func GetResultValues(funcType reflect.Type, results ...interface{}) []reflect.Value { - var resultValues []reflect.Value - for i, r := range results { - var resultValue reflect.Value - if r == nil { - resultValue = reflect.Zero(funcType.Out(i)) - } else { - v := reflect.New(funcType.Out(i)) - v.Elem().Set(reflect.ValueOf(r)) - resultValue = v.Elem() - } - resultValues = append(resultValues, resultValue) - } - return resultValues -} - -type funcValue struct { - _ uintptr - p unsafe.Pointer -} - -func getPointer(v reflect.Value) unsafe.Pointer { - return (*funcValue)(unsafe.Pointer(&v)).p -} - -func entryAddress(p uintptr, l int) []byte { - return *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{Data: p, Len: l, Cap: l})) -} - -func pageStart(ptr uintptr) uintptr { - return ptr & ^(uintptr(syscall.Getpagesize() - 1)) -} - -func funcToMethod(funcType reflect.Type, doubleFunc interface{}) reflect.Value { - rf := reflect.TypeOf(doubleFunc) - if rf.Kind() != reflect.Func { - panic("doubleFunc is not a func") - } - vf := reflect.ValueOf(doubleFunc) - return reflect.MakeFunc(funcType, func(in []reflect.Value) []reflect.Value { - if funcType.IsVariadic() { - return vf.CallSlice(in[1:]) - } else { - return vf.Call(in[1:]) - } - }) -} - -func castRType(val interface{}) reflect.Type { - if rTypeVal, ok := val.(reflect.Type); ok { - return rTypeVal - } - return reflect.TypeOf(val) -} diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/grapheme_clusters.go b/vendor/github.com/apparentlymart/go-textseg/v13/textseg/grapheme_clusters.go deleted file mode 100644 index 7ad1c799f3f3a..0000000000000 --- a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/grapheme_clusters.go +++ /dev/null @@ -1,4138 +0,0 @@ -//line grapheme_clusters.rl:1 -package textseg - -import ( - "errors" - "unicode/utf8" -) - -// Generated from grapheme_clusters.rl. DO NOT EDIT - -//line grapheme_clusters.go:13 -var _graphclust_actions []byte = []byte{ - 0, 1, 0, 1, 4, 1, 10, 1, 11, - 1, 12, 1, 13, 1, 14, 1, 15, - 1, 16, 1, 17, 1, 18, 1, 19, - 1, 20, 1, 21, 1, 22, 2, 1, - 8, 2, 1, 9, 2, 2, 3, 2, - 5, 1, 3, 0, 1, 9, 3, 5, - 0, 1, 3, 5, 1, 6, 3, 5, - 1, 7, -} - -var _graphclust_key_offsets []int16 = []int16{ - 0, 0, 1, 3, 5, 7, 10, 15, - 17, 20, 28, 31, 33, 35, 38, 68, - 76, 78, 82, 85, 90, 95, 107, 119, - 127, 132, 142, 145, 152, 156, 164, 174, - 180, 188, 190, 198, 201, 203, 206, 208, - 215, 217, 225, 226, 248, 252, 258, 263, - 265, 269, 273, 275, 279, 281, 284, 288, - 290, 297, 299, 301, 305, 309, 313, 315, - 317, 325, 329, 334, 336, 338, 340, 341, - 343, 345, 347, 349, 364, 368, 370, 372, - 378, 382, 388, 390, 392, 396, 400, 402, - 406, 413, 418, 422, 425, 426, 430, 437, - 445, 446, 447, 449, 458, 460, 462, 464, - 466, 500, 504, 506, 510, 514, 517, 521, - 526, 529, 531, 537, 550, 552, 555, 557, - 561, 565, 567, 569, 571, 577, 580, 585, - 591, 594, 596, 600, 604, 611, 614, 620, - 622, 627, 629, 631, 634, 638, 641, 642, - 644, 650, 656, 662, 664, 668, 672, 677, - 682, 692, 694, 696, 698, 699, 701, 702, - 708, 710, 712, 712, 714, 721, 723, 725, - 727, 730, 735, 737, 740, 748, 751, 753, - 755, 758, 788, 796, 798, 802, 805, 810, - 815, 827, 839, 847, 852, 862, 865, 872, - 876, 884, 894, 900, 908, 910, 918, 921, - 923, 926, 928, 935, 937, 945, 946, 968, - 972, 978, 983, 985, 989, 993, 995, 999, - 1001, 1004, 1008, 1010, 1017, 1019, 1021, 1025, - 1029, 1033, 1035, 1037, 1045, 1049, 1054, 1056, - 1058, 1082, 1085, 1086, 1088, 1090, 1094, 1097, - 1098, 1103, 1104, 1107, 1110, 1116, 1118, 1122, - 1122, 1136, 1145, 1150, 1152, 1156, 1158, 1160, - 1161, 1163, 1166, 1169, 1171, 1173, 1188, 1192, - 1194, 1196, 1202, 1206, 1212, 1214, 1216, 1220, - 1224, 1226, 1230, 1237, 1242, 1246, 1249, 1250, - 1254, 1261, 1269, 1270, 1271, 1273, 1282, 1284, - 1286, 1288, 1290, 1324, 1328, 1330, 1334, 1338, - 1341, 1345, 1350, 1353, 1355, 1361, 1374, 1376, - 1379, 1381, 1385, 1389, 1391, 1393, 1395, 1401, - 1404, 1409, 1415, 1418, 1420, 1424, 1428, 1435, - 1438, 1444, 1446, 1451, 1453, 1455, 1458, 1462, - 1465, 1466, 1468, 1474, 1480, 1486, 1488, 1492, - 1496, 1501, 1506, 1516, 1518, 1520, 1522, 1562, - 1564, 1567, 1571, 1576, 1578, 1586, 1588, 1590, - 1592, 1594, 1596, 1598, 1600, 1604, 1608, 1612, - 1616, 1617, 1623, 1625, 1627, 1629, 1636, 1637, - 1639, 1644, 1646, 1648, 1650, 1653, 1658, 1660, - 1663, 1671, 1674, 1676, 1678, 1681, 1711, 1719, - 1721, 1725, 1728, 1733, 1738, 1750, 1762, 1770, - 1775, 1785, 1788, 1795, 1799, 1807, 1817, 1823, - 1831, 1833, 1841, 1844, 1846, 1849, 1851, 1858, - 1860, 1868, 1869, 1891, 1895, 1901, 1906, 1908, - 1912, 1916, 1918, 1922, 1924, 1927, 1931, 1933, - 1940, 1942, 1944, 1948, 1952, 1956, 1958, 1960, - 1968, 1972, 1977, 1979, 1981, 1983, 1984, 1986, - 1988, 1990, 1992, 2007, 2011, 2013, 2015, 2021, - 2025, 2031, 2033, 2035, 2039, 2043, 2045, 2049, - 2056, 2061, 2065, 2068, 2069, 2073, 2080, 2088, - 2089, 2090, 2092, 2101, 2103, 2105, 2107, 2109, - 2143, 2147, 2149, 2153, 2157, 2160, 2164, 2169, - 2172, 2174, 2180, 2193, 2195, 2198, 2200, 2204, - 2208, 2210, 2212, 2214, 2220, 2223, 2228, 2234, - 2237, 2239, 2243, 2247, 2254, 2257, 2263, 2265, - 2270, 2272, 2274, 2277, 2281, 2284, 2285, 2287, - 2293, 2299, 2305, 2307, 2311, 2315, 2320, 2325, - 2335, 2337, 2339, 2341, 2342, 2344, 2345, 2351, - 2353, 2355, 2355, 2357, 2363, 2365, 2367, 2369, - 2372, 2377, 2379, 2382, 2390, 2393, 2395, 2397, - 2400, 2430, 2438, 2440, 2444, 2447, 2452, 2457, - 2469, 2481, 2489, 2494, 2504, 2507, 2514, 2518, - 2526, 2536, 2542, 2550, 2552, 2560, 2563, 2565, - 2568, 2570, 2577, 2579, 2587, 2588, 2610, 2614, - 2620, 2625, 2627, 2631, 2635, 2637, 2641, 2643, - 2646, 2650, 2652, 2659, 2661, 2663, 2667, 2671, - 2675, 2677, 2679, 2687, 2691, 2696, 2698, 2700, - 2724, 2727, 2728, 2730, 2732, 2736, 2739, 2740, - 2745, 2746, 2749, 2752, 2758, 2760, 2764, 2764, - 2778, 2787, 2792, 2794, 2798, 2800, 2802, 2803, - 2805, 2808, 2811, 2813, 2815, 2830, 2834, 2836, - 2838, 2844, 2848, 2854, 2856, 2858, 2862, 2866, - 2868, 2872, 2879, 2884, 2888, 2891, 2892, 2896, - 2903, 2911, 2912, 2913, 2915, 2924, 2926, 2928, - 2930, 2932, 2966, 2970, 2972, 2976, 2980, 2983, - 2987, 2992, 2995, 2997, 3003, 3016, 3018, 3021, - 3023, 3027, 3031, 3033, 3035, 3037, 3043, 3046, - 3051, 3057, 3060, 3062, 3066, 3070, 3077, 3080, - 3086, 3088, 3093, 3095, 3097, 3100, 3104, 3107, - 3108, 3110, 3116, 3122, 3128, 3130, 3134, 3138, - 3143, 3148, 3158, 3160, 3162, 3164, 3204, 3206, - 3209, 3213, 3218, 3220, 3228, 3230, 3232, 3234, - 3236, 3238, 3240, 3242, 3246, 3250, 3254, 3258, - 3259, 3265, 3267, 3269, 3271, 3278, 3279, 3281, - 3287, 3290, 3293, 3297, 3300, 3303, 3310, 3312, - 3337, 3339, 3364, 3366, 3368, 3392, 3394, 3396, - 3397, 3399, 3401, 3403, 3409, 3411, 3443, 3447, - 3452, 3476, 3478, 3480, 3482, 3484, 3487, 3489, - 3491, 3495, 3495, 3551, 3607, 3638, 3643, 3647, - 3669, 3678, 3683, 3687, 3697, 3704, 3707, 3718, - 3721, 3728, 3734, 3738, 3744, 3760, 3775, 3784, - 3790, 3800, 3804, 3808, 3812, 3816, 3818, 3838, - 3844, 3849, 3851, 3853, 3856, 3858, 3860, 3864, - 3920, 3976, 4009, 4014, 4022, 4026, 4028, 4033, - 4040, 4050, 4053, 4056, 4062, 4065, 4068, 4071, - 4077, 4080, 4083, 4087, 4090, 4094, 4097, 4101, - 4143, 4150, 4158, 4167, 4171, 4178, 4180, 4182, - 4192, 4196, 4200, 4204, 4208, 4212, 4216, 4220, - 4226, 4236, 4244, 4249, 4252, 4254, 4257, 4262, - 4264, 4267, 4270, 4274, 4277, 4280, 4287, 4289, - 4291, 4293, 4295, 4298, 4303, 4305, 4308, 4316, - 4319, 4321, 4323, 4326, 4356, 4364, 4366, 4370, - 4373, 4378, 4383, 4395, 4407, 4415, 4420, 4430, - 4433, 4440, 4444, 4452, 4462, 4468, 4476, 4478, - 4486, 4489, 4491, 4494, 4496, 4503, 4505, 4513, - 4514, 4536, 4540, 4546, 4551, 4553, 4557, 4561, - 4563, 4567, 4569, 4572, 4576, 4578, 4585, 4587, - 4589, 4593, 4597, 4601, 4603, 4605, 4613, 4617, - 4622, 4624, 4626, 4650, 4653, 4654, 4656, 4658, - 4662, 4665, 4666, 4671, 4672, 4675, 4678, 4684, - 4686, 4690, 4690, 4704, 4713, 4718, 4720, 4724, - 4726, 4728, 4729, 4731, 4734, 4737, 4739, 4741, - 4756, 4760, 4762, 4764, 4770, 4774, 4780, 4782, - 4784, 4788, 4792, 4794, 4798, 4805, 4810, 4814, - 4817, 4818, 4822, 4829, 4837, 4838, 4839, 4841, - 4850, 4852, 4854, 4856, 4858, 4892, 4896, 4898, - 4902, 4906, 4909, 4913, 4918, 4921, 4923, 4929, - 4942, 4944, 4947, 4949, 4953, 4957, 4959, 4961, - 4963, 4969, 4972, 4977, 4983, 4986, 4988, 4992, - 4996, 5003, 5006, 5012, 5014, 5019, 5021, 5023, - 5026, 5030, 5033, 5034, 5036, 5042, 5048, 5054, - 5056, 5060, 5064, 5069, 5074, 5084, 5086, 5088, - 5090, 5130, 5132, 5135, 5139, 5144, 5146, 5154, - 5156, 5158, 5160, 5162, 5164, 5166, 5168, 5172, - 5176, 5180, 5184, 5185, 5191, 5193, 5195, 5197, - 5204, 5205, 5207, 5232, 5234, 5259, 5261, 5263, - 5287, 5289, 5291, 5292, 5294, 5296, 5298, 5304, - 5306, 5338, 5342, 5347, 5371, 5373, 5375, 5377, - 5379, 5382, 5384, 5386, 5390, 5390, 5446, 5502, - 5533, 5538, 5541, 5563, 5576, 5578, 5580, 5582, - 5585, 5590, 5592, 5595, 5603, 5606, 5608, 5610, - 5613, 5643, 5651, 5653, 5657, 5660, 5665, 5670, - 5682, 5694, 5702, 5707, 5717, 5720, 5727, 5731, - 5739, 5749, 5755, 5763, 5765, 5773, 5776, 5778, - 5781, 5783, 5790, 5792, 5800, 5801, 5823, 5827, - 5833, 5838, 5840, 5844, 5848, 5850, 5854, 5856, - 5859, 5863, 5865, 5872, 5874, 5876, 5880, 5884, - 5888, 5890, 5892, 5900, 5904, 5909, 5911, 5913, - 5915, 5916, 5918, 5920, 5922, 5924, 5939, 5943, - 5945, 5947, 5953, 5957, 5963, 5965, 5967, 5971, - 5975, 5977, 5981, 5988, 5993, 5997, 6000, 6001, - 6005, 6012, 6020, 6021, 6022, 6024, 6033, 6035, - 6037, 6039, 6041, 6075, 6079, 6081, 6085, 6089, - 6092, 6096, 6101, 6104, 6106, 6112, 6125, 6127, - 6130, 6132, 6136, 6140, 6142, 6144, 6146, 6152, - 6155, 6160, 6166, 6169, 6171, 6175, 6179, 6186, - 6189, 6195, 6197, 6202, 6204, 6206, 6209, 6213, - 6216, 6217, 6219, 6225, 6231, 6237, 6239, 6243, - 6247, 6252, 6257, 6267, 6269, 6271, 6273, 6274, - 6276, 6277, 6283, 6285, 6287, 6287, 6294, 6298, - 6308, 6315, 6318, 6329, 6332, 6339, 6345, 6349, - 6355, 6371, 6386, 6395, 6401, 6411, 6415, 6419, - 6423, 6427, 6429, 6449, 6455, 6460, 6462, 6464, - 6467, 6469, 6471, 6475, 6531, 6587, 6620, 6625, - 6633, 6637, 6640, 6647, 6654, 6664, 6667, 6670, - 6676, 6679, 6682, 6685, 6691, 6694, 6697, 6703, - 6706, 6712, 6715, 6721, 6763, 6770, 6778, 6787, - 6791, 6793, 6795, 6797, 6800, 6805, 6807, 6810, - 6818, 6821, 6823, 6825, 6828, 6858, 6866, 6868, - 6872, 6875, 6880, 6885, 6897, 6909, 6917, 6922, - 6932, 6935, 6942, 6946, 6954, 6964, 6970, 6978, - 6980, 6988, 6991, 6993, 6996, 6998, 7005, 7007, - 7015, 7016, 7038, 7042, 7048, 7053, 7055, 7059, - 7063, 7065, 7069, 7071, 7074, 7078, 7080, 7087, - 7089, 7091, 7095, 7099, 7103, 7105, 7107, 7115, - 7119, 7124, 7126, 7128, 7152, 7155, 7156, 7158, - 7160, 7164, 7167, 7168, 7173, 7174, 7177, 7180, - 7186, 7188, 7192, 7192, 7206, 7215, 7220, 7222, - 7226, 7228, 7230, 7231, 7233, 7236, 7239, 7241, - 7243, 7258, 7262, 7264, 7266, 7272, 7276, 7282, - 7284, 7286, 7290, 7294, 7296, 7300, 7307, 7312, - 7316, 7319, 7320, 7324, 7331, 7339, 7340, 7341, - 7343, 7352, 7354, 7356, 7358, 7360, 7394, 7398, - 7400, 7404, 7408, 7411, 7415, 7420, 7423, 7425, - 7431, 7444, 7446, 7449, 7451, 7455, 7459, 7461, - 7463, 7465, 7471, 7474, 7479, 7485, 7488, 7490, - 7494, 7498, 7505, 7508, 7514, 7516, 7521, 7523, - 7525, 7528, 7532, 7535, 7536, 7538, 7544, 7550, - 7556, 7558, 7562, 7566, 7571, 7576, 7586, 7588, - 7590, 7592, 7632, 7634, 7637, 7641, 7646, 7648, - 7656, 7658, 7660, 7662, 7664, 7666, 7668, 7670, - 7674, 7678, 7682, 7686, 7687, 7693, 7695, 7697, - 7699, 7706, 7707, 7709, 7716, 7718, 7720, 7730, - 7734, 7738, 7742, 7746, 7750, 7754, 7758, 7764, - 7774, 7782, 7787, 7790, 7792, 7795, 7804, 7808, - 7810, 7812, 7816, 7816, 7846, 7866, 7886, 7907, - 7930, 7950, 7970, 7991, 8014, 8035, 8056, 8077, - 8097, 8120, 8140, 8161, 8182, 8203, 8224, 8244, - 8264, 8284, -} - -var _graphclust_trans_keys []byte = []byte{ - 10, 128, 255, 176, 255, 131, 137, 191, - 145, 189, 135, 129, 130, 132, 133, 144, - 154, 176, 139, 159, 150, 156, 159, 164, - 167, 168, 170, 173, 145, 176, 255, 139, - 255, 166, 176, 189, 171, 179, 160, 161, - 163, 164, 165, 167, 169, 171, 173, 174, - 175, 176, 177, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, - 166, 170, 172, 178, 150, 153, 155, 163, - 165, 167, 169, 173, 153, 155, 147, 161, - 163, 255, 189, 132, 185, 144, 152, 161, - 164, 255, 188, 129, 131, 190, 255, 133, - 134, 137, 138, 142, 150, 152, 161, 164, - 189, 191, 255, 131, 134, 137, 138, 142, - 144, 146, 175, 178, 180, 182, 255, 134, - 138, 142, 161, 164, 185, 192, 255, 188, - 129, 131, 190, 191, 128, 132, 135, 136, - 139, 141, 149, 151, 162, 163, 130, 190, - 191, 151, 128, 130, 134, 136, 138, 141, - 128, 132, 190, 255, 133, 137, 142, 148, - 151, 161, 164, 255, 128, 132, 134, 136, - 138, 141, 149, 150, 162, 163, 128, 131, - 187, 188, 190, 255, 133, 137, 142, 150, - 152, 161, 164, 255, 129, 131, 138, 150, - 143, 148, 152, 159, 178, 179, 177, 179, - 186, 135, 142, 177, 179, 188, 136, 141, - 181, 183, 185, 152, 153, 190, 191, 177, - 191, 128, 132, 134, 135, 141, 151, 153, - 188, 134, 128, 129, 130, 141, 156, 157, - 158, 159, 160, 162, 164, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 179, 183, - 173, 183, 185, 190, 150, 153, 158, 160, - 177, 180, 130, 141, 157, 132, 134, 157, - 159, 146, 148, 178, 180, 146, 147, 178, - 179, 180, 255, 148, 156, 158, 255, 139, - 141, 169, 133, 134, 160, 171, 176, 187, - 151, 155, 160, 162, 191, 149, 158, 165, - 188, 176, 255, 129, 255, 128, 132, 180, - 255, 133, 170, 180, 255, 128, 130, 161, - 173, 166, 179, 164, 183, 173, 180, 144, - 146, 148, 168, 183, 185, 128, 185, 187, - 191, 128, 131, 179, 181, 183, 140, 141, - 144, 176, 175, 177, 191, 160, 191, 128, - 130, 170, 175, 153, 154, 153, 154, 155, - 160, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 175, 175, 178, 180, 189, - 158, 159, 176, 177, 130, 134, 139, 172, - 163, 167, 128, 129, 180, 255, 134, 159, - 178, 190, 192, 255, 166, 173, 135, 147, - 128, 131, 179, 255, 129, 164, 166, 255, - 169, 182, 131, 188, 140, 141, 176, 178, - 180, 183, 184, 190, 191, 129, 171, 175, - 181, 182, 163, 170, 172, 173, 172, 184, - 190, 158, 128, 143, 160, 175, 144, 145, - 150, 155, 157, 158, 159, 135, 139, 141, - 168, 171, 180, 186, 189, 189, 160, 182, - 186, 191, 129, 131, 133, 134, 140, 143, - 184, 186, 165, 166, 164, 167, 171, 172, - 134, 144, 128, 129, 130, 132, 133, 134, - 135, 136, 139, 140, 141, 144, 145, 146, - 147, 150, 151, 152, 153, 154, 156, 160, - 164, 165, 167, 168, 169, 170, 176, 178, - 180, 181, 182, 187, 128, 130, 184, 255, - 135, 190, 131, 175, 187, 255, 128, 130, - 167, 180, 179, 133, 134, 128, 130, 179, - 255, 141, 129, 136, 144, 255, 190, 172, - 183, 159, 170, 128, 131, 187, 188, 190, - 191, 151, 128, 132, 135, 136, 139, 141, - 162, 163, 166, 172, 176, 180, 181, 191, - 158, 128, 134, 132, 255, 175, 181, 184, - 255, 129, 155, 158, 255, 171, 183, 157, - 171, 172, 186, 176, 181, 183, 184, 187, - 190, 128, 130, 131, 164, 145, 151, 154, - 160, 129, 138, 179, 185, 187, 190, 135, - 145, 155, 138, 153, 175, 182, 184, 191, - 146, 167, 169, 182, 186, 177, 182, 188, - 189, 191, 255, 134, 136, 255, 138, 142, - 144, 145, 147, 151, 179, 182, 171, 172, - 189, 190, 191, 176, 180, 176, 182, 143, - 145, 255, 136, 142, 147, 255, 164, 176, - 177, 178, 157, 158, 133, 134, 137, 168, - 169, 170, 165, 169, 173, 178, 187, 255, - 131, 132, 140, 169, 174, 255, 130, 132, - 128, 182, 187, 255, 173, 180, 182, 255, - 132, 155, 159, 161, 175, 128, 132, 139, - 163, 165, 128, 134, 136, 152, 155, 161, - 163, 164, 166, 170, 172, 175, 144, 150, - 132, 138, 143, 187, 191, 160, 128, 129, - 132, 135, 133, 134, 160, 255, 192, 255, - 128, 191, 169, 173, 174, 128, 159, 160, - 191, 0, 127, 176, 255, 131, 137, 191, - 145, 189, 135, 129, 130, 132, 133, 144, - 154, 176, 139, 159, 150, 156, 159, 164, - 167, 168, 170, 173, 145, 176, 255, 139, - 255, 166, 176, 189, 171, 179, 160, 161, - 163, 164, 165, 167, 169, 171, 173, 174, - 175, 176, 177, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, - 166, 170, 172, 178, 150, 153, 155, 163, - 165, 167, 169, 173, 153, 155, 147, 161, - 163, 255, 189, 132, 185, 144, 152, 161, - 164, 255, 188, 129, 131, 190, 255, 133, - 134, 137, 138, 142, 150, 152, 161, 164, - 189, 191, 255, 131, 134, 137, 138, 142, - 144, 146, 175, 178, 180, 182, 255, 134, - 138, 142, 161, 164, 185, 192, 255, 188, - 129, 131, 190, 191, 128, 132, 135, 136, - 139, 141, 149, 151, 162, 163, 130, 190, - 191, 151, 128, 130, 134, 136, 138, 141, - 128, 132, 190, 255, 133, 137, 142, 148, - 151, 161, 164, 255, 128, 132, 134, 136, - 138, 141, 149, 150, 162, 163, 128, 131, - 187, 188, 190, 255, 133, 137, 142, 150, - 152, 161, 164, 255, 129, 131, 138, 150, - 143, 148, 152, 159, 178, 179, 177, 179, - 186, 135, 142, 177, 179, 188, 136, 141, - 181, 183, 185, 152, 153, 190, 191, 177, - 191, 128, 132, 134, 135, 141, 151, 153, - 188, 134, 128, 129, 130, 141, 156, 157, - 158, 159, 160, 162, 164, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 179, 183, - 173, 183, 185, 190, 150, 153, 158, 160, - 177, 180, 130, 141, 157, 132, 134, 157, - 159, 146, 148, 178, 180, 146, 147, 178, - 179, 180, 255, 148, 156, 158, 255, 139, - 141, 169, 133, 134, 160, 171, 176, 187, - 151, 155, 160, 162, 191, 149, 158, 165, - 188, 176, 255, 129, 255, 128, 132, 180, - 255, 133, 170, 180, 255, 128, 130, 161, - 173, 166, 179, 164, 183, 173, 180, 144, - 146, 148, 168, 183, 185, 128, 185, 187, - 191, 128, 131, 179, 181, 183, 140, 141, - 169, 174, 128, 129, 131, 132, 134, 140, - 142, 143, 147, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 164, 172, 173, 179, - 181, 183, 140, 141, 188, 137, 144, 176, - 162, 185, 148, 153, 169, 170, 168, 154, - 155, 136, 143, 169, 179, 184, 186, 130, - 182, 170, 171, 128, 187, 190, 128, 133, - 135, 146, 148, 191, 128, 191, 128, 133, - 144, 255, 147, 149, 134, 135, 151, 156, - 158, 160, 162, 167, 169, 178, 181, 255, - 132, 135, 140, 142, 151, 147, 149, 163, - 167, 161, 176, 191, 149, 151, 180, 181, - 133, 135, 155, 156, 144, 149, 175, 177, - 191, 160, 191, 128, 130, 138, 189, 170, - 176, 153, 154, 151, 153, 153, 154, 155, - 160, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 175, 175, 178, 180, 189, - 158, 159, 176, 177, 130, 134, 139, 172, - 163, 167, 128, 129, 180, 255, 134, 159, - 178, 190, 192, 255, 166, 173, 135, 147, - 128, 131, 179, 255, 129, 164, 166, 255, - 169, 182, 131, 188, 140, 141, 176, 178, - 180, 183, 184, 190, 191, 129, 171, 175, - 181, 182, 163, 170, 172, 173, 172, 184, - 190, 158, 128, 143, 160, 175, 144, 145, - 150, 155, 157, 158, 159, 135, 139, 141, - 168, 171, 180, 186, 189, 189, 160, 182, - 186, 191, 129, 131, 133, 134, 140, 143, - 184, 186, 165, 166, 164, 167, 171, 172, - 134, 144, 128, 129, 130, 132, 133, 134, - 135, 136, 139, 140, 141, 144, 145, 146, - 147, 150, 151, 152, 153, 154, 156, 160, - 164, 165, 167, 168, 169, 170, 176, 178, - 180, 181, 182, 187, 128, 130, 184, 255, - 135, 190, 131, 175, 187, 255, 128, 130, - 167, 180, 179, 133, 134, 128, 130, 179, - 255, 141, 129, 136, 144, 255, 190, 172, - 183, 159, 170, 128, 131, 187, 188, 190, - 191, 151, 128, 132, 135, 136, 139, 141, - 162, 163, 166, 172, 176, 180, 181, 191, - 158, 128, 134, 132, 255, 175, 181, 184, - 255, 129, 155, 158, 255, 171, 183, 157, - 171, 172, 186, 176, 181, 183, 184, 187, - 190, 128, 130, 131, 164, 145, 151, 154, - 160, 129, 138, 179, 185, 187, 190, 135, - 145, 155, 138, 153, 175, 182, 184, 191, - 146, 167, 169, 182, 186, 177, 182, 188, - 189, 191, 255, 134, 136, 255, 138, 142, - 144, 145, 147, 151, 179, 182, 171, 172, - 189, 190, 191, 176, 180, 176, 182, 143, - 145, 255, 136, 142, 147, 255, 164, 176, - 177, 178, 157, 158, 133, 134, 137, 168, - 169, 170, 165, 169, 173, 178, 187, 255, - 131, 132, 140, 169, 174, 255, 130, 132, - 128, 182, 187, 255, 173, 180, 182, 255, - 132, 155, 159, 161, 175, 128, 132, 139, - 163, 165, 128, 134, 136, 152, 155, 161, - 163, 164, 166, 170, 172, 175, 144, 150, - 132, 138, 128, 131, 132, 133, 134, 135, - 136, 137, 139, 140, 141, 142, 143, 144, - 145, 148, 149, 151, 152, 153, 157, 159, - 160, 161, 162, 163, 164, 165, 168, 169, - 176, 191, 129, 150, 154, 155, 166, 171, - 177, 190, 192, 255, 175, 141, 143, 172, - 177, 190, 191, 142, 145, 154, 173, 255, - 166, 255, 154, 175, 129, 143, 178, 186, - 188, 191, 137, 255, 190, 255, 134, 255, - 144, 255, 180, 191, 149, 191, 140, 143, - 136, 143, 154, 159, 136, 143, 174, 255, - 140, 186, 188, 191, 128, 133, 135, 191, - 160, 128, 129, 132, 135, 133, 134, 160, - 255, 128, 130, 170, 175, 144, 145, 150, - 155, 157, 158, 159, 143, 187, 191, 156, - 128, 133, 134, 191, 128, 255, 176, 255, - 131, 137, 191, 145, 189, 135, 129, 130, - 132, 133, 144, 154, 176, 139, 159, 150, - 156, 159, 164, 167, 168, 170, 173, 145, - 176, 255, 139, 255, 166, 176, 189, 171, - 179, 160, 161, 163, 164, 165, 167, 169, - 171, 173, 174, 175, 176, 177, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 166, 170, 172, 178, 150, - 153, 155, 163, 165, 167, 169, 173, 153, - 155, 147, 161, 163, 255, 189, 132, 185, - 144, 152, 161, 164, 255, 188, 129, 131, - 190, 255, 133, 134, 137, 138, 142, 150, - 152, 161, 164, 189, 191, 255, 131, 134, - 137, 138, 142, 144, 146, 175, 178, 180, - 182, 255, 134, 138, 142, 161, 164, 185, - 192, 255, 188, 129, 131, 190, 191, 128, - 132, 135, 136, 139, 141, 149, 151, 162, - 163, 130, 190, 191, 151, 128, 130, 134, - 136, 138, 141, 128, 132, 190, 255, 133, - 137, 142, 148, 151, 161, 164, 255, 128, - 132, 134, 136, 138, 141, 149, 150, 162, - 163, 128, 131, 187, 188, 190, 255, 133, - 137, 142, 150, 152, 161, 164, 255, 129, - 131, 138, 150, 143, 148, 152, 159, 178, - 179, 177, 179, 186, 135, 142, 177, 179, - 188, 136, 141, 181, 183, 185, 152, 153, - 190, 191, 177, 191, 128, 132, 134, 135, - 141, 151, 153, 188, 134, 128, 129, 130, - 141, 156, 157, 158, 159, 160, 162, 164, - 168, 169, 170, 171, 172, 173, 174, 175, - 176, 179, 183, 173, 183, 185, 190, 150, - 153, 158, 160, 177, 180, 130, 141, 157, - 132, 134, 157, 159, 146, 148, 178, 180, - 146, 147, 178, 179, 180, 255, 148, 156, - 158, 255, 139, 141, 169, 133, 134, 160, - 171, 176, 187, 151, 155, 160, 162, 191, - 149, 158, 165, 188, 176, 255, 129, 255, - 128, 132, 180, 255, 133, 170, 180, 255, - 128, 130, 161, 173, 166, 179, 164, 183, - 173, 180, 144, 146, 148, 168, 183, 185, - 128, 185, 187, 191, 128, 131, 179, 181, - 183, 140, 141, 144, 176, 175, 177, 191, - 160, 191, 128, 130, 170, 175, 153, 154, - 153, 154, 155, 160, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 175, 175, - 178, 180, 189, 158, 159, 176, 177, 130, - 134, 139, 172, 163, 167, 128, 129, 180, - 255, 134, 159, 178, 190, 192, 255, 166, - 173, 135, 147, 128, 131, 179, 255, 129, - 164, 166, 255, 169, 182, 131, 188, 140, - 141, 176, 178, 180, 183, 184, 190, 191, - 129, 171, 175, 181, 182, 163, 170, 172, - 173, 172, 184, 190, 158, 128, 143, 160, - 175, 144, 145, 150, 155, 157, 158, 159, - 135, 139, 141, 168, 171, 180, 186, 189, - 189, 160, 182, 186, 191, 129, 131, 133, - 134, 140, 143, 184, 186, 165, 166, 164, - 167, 171, 172, 134, 144, 128, 129, 130, - 132, 133, 134, 135, 136, 139, 140, 141, - 144, 145, 146, 147, 150, 151, 152, 153, - 154, 156, 160, 164, 165, 167, 168, 169, - 170, 176, 178, 180, 181, 182, 187, 128, - 130, 184, 255, 135, 190, 131, 175, 187, - 255, 128, 130, 167, 180, 179, 133, 134, - 128, 130, 179, 255, 141, 129, 136, 144, - 255, 190, 172, 183, 159, 170, 128, 131, - 187, 188, 190, 191, 151, 128, 132, 135, - 136, 139, 141, 162, 163, 166, 172, 176, - 180, 181, 191, 158, 128, 134, 132, 255, - 175, 181, 184, 255, 129, 155, 158, 255, - 171, 183, 157, 171, 172, 186, 176, 181, - 183, 184, 187, 190, 128, 130, 131, 164, - 145, 151, 154, 160, 129, 138, 179, 185, - 187, 190, 135, 145, 155, 138, 153, 175, - 182, 184, 191, 146, 167, 169, 182, 186, - 177, 182, 188, 189, 191, 255, 134, 136, - 255, 138, 142, 144, 145, 147, 151, 179, - 182, 171, 172, 189, 190, 191, 176, 180, - 176, 182, 143, 145, 255, 136, 142, 147, - 255, 164, 176, 177, 178, 157, 158, 133, - 134, 137, 168, 169, 170, 165, 169, 173, - 178, 187, 255, 131, 132, 140, 169, 174, - 255, 130, 132, 128, 182, 187, 255, 173, - 180, 182, 255, 132, 155, 159, 161, 175, - 128, 132, 139, 163, 165, 128, 134, 136, - 152, 155, 161, 163, 164, 166, 170, 172, - 175, 144, 150, 132, 138, 143, 187, 191, - 160, 128, 129, 132, 135, 133, 134, 160, - 255, 192, 255, 128, 191, 169, 174, 160, - 172, 175, 191, 128, 255, 176, 255, 131, - 137, 191, 145, 189, 135, 129, 130, 132, - 133, 144, 154, 176, 139, 159, 150, 156, - 159, 164, 167, 168, 170, 173, 145, 176, - 255, 139, 255, 166, 176, 189, 171, 179, - 160, 161, 163, 164, 165, 167, 169, 171, - 173, 174, 175, 176, 177, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 166, 170, 172, 178, 150, 153, - 155, 163, 165, 167, 169, 173, 153, 155, - 147, 161, 163, 255, 189, 132, 185, 144, - 152, 161, 164, 255, 188, 129, 131, 190, - 255, 133, 134, 137, 138, 142, 150, 152, - 161, 164, 189, 191, 255, 131, 134, 137, - 138, 142, 144, 146, 175, 178, 180, 182, - 255, 134, 138, 142, 161, 164, 185, 192, - 255, 188, 129, 131, 190, 191, 128, 132, - 135, 136, 139, 141, 149, 151, 162, 163, - 130, 190, 191, 151, 128, 130, 134, 136, - 138, 141, 128, 132, 190, 255, 133, 137, - 142, 148, 151, 161, 164, 255, 128, 132, - 134, 136, 138, 141, 149, 150, 162, 163, - 128, 131, 187, 188, 190, 255, 133, 137, - 142, 150, 152, 161, 164, 255, 129, 131, - 138, 150, 143, 148, 152, 159, 178, 179, - 177, 179, 186, 135, 142, 177, 179, 188, - 136, 141, 181, 183, 185, 152, 153, 190, - 191, 177, 191, 128, 132, 134, 135, 141, - 151, 153, 188, 134, 128, 129, 130, 141, - 156, 157, 158, 159, 160, 162, 164, 168, - 169, 170, 171, 172, 173, 174, 175, 176, - 179, 183, 173, 183, 185, 190, 150, 153, - 158, 160, 177, 180, 130, 141, 157, 132, - 134, 157, 159, 146, 148, 178, 180, 146, - 147, 178, 179, 180, 255, 148, 156, 158, - 255, 139, 141, 169, 133, 134, 160, 171, - 176, 187, 151, 155, 160, 162, 191, 149, - 158, 165, 188, 176, 255, 129, 255, 128, - 132, 180, 255, 133, 170, 180, 255, 128, - 130, 161, 173, 166, 179, 164, 183, 173, - 180, 144, 146, 148, 168, 183, 185, 128, - 185, 187, 191, 128, 131, 179, 181, 183, - 140, 141, 169, 174, 128, 129, 131, 132, - 134, 140, 142, 143, 147, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 164, 172, - 173, 179, 181, 183, 140, 141, 188, 137, - 144, 176, 162, 185, 148, 153, 169, 170, - 168, 154, 155, 136, 143, 169, 179, 184, - 186, 130, 182, 170, 171, 128, 187, 190, - 128, 133, 135, 146, 148, 191, 128, 191, - 128, 133, 144, 255, 147, 149, 134, 135, - 151, 156, 158, 160, 162, 167, 169, 178, - 181, 255, 132, 135, 140, 142, 151, 147, - 149, 163, 167, 161, 176, 191, 149, 151, - 180, 181, 133, 135, 155, 156, 144, 149, - 175, 177, 191, 160, 191, 128, 130, 138, - 189, 170, 176, 153, 154, 151, 153, 153, - 154, 155, 160, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 175, 175, 178, - 180, 189, 158, 159, 176, 177, 130, 134, - 139, 172, 163, 167, 128, 129, 180, 255, - 134, 159, 178, 190, 192, 255, 166, 173, - 135, 147, 128, 131, 179, 255, 129, 164, - 166, 255, 169, 182, 131, 188, 140, 141, - 176, 178, 180, 183, 184, 190, 191, 129, - 171, 175, 181, 182, 163, 170, 172, 173, - 172, 184, 190, 158, 128, 143, 160, 175, - 144, 145, 150, 155, 157, 158, 159, 135, - 139, 141, 168, 171, 180, 186, 189, 189, - 160, 182, 186, 191, 129, 131, 133, 134, - 140, 143, 184, 186, 165, 166, 164, 167, - 171, 172, 134, 144, 128, 129, 130, 132, - 133, 134, 135, 136, 139, 140, 141, 144, - 145, 146, 147, 150, 151, 152, 153, 154, - 156, 160, 164, 165, 167, 168, 169, 170, - 176, 178, 180, 181, 182, 187, 128, 130, - 184, 255, 135, 190, 131, 175, 187, 255, - 128, 130, 167, 180, 179, 133, 134, 128, - 130, 179, 255, 141, 129, 136, 144, 255, - 190, 172, 183, 159, 170, 128, 131, 187, - 188, 190, 191, 151, 128, 132, 135, 136, - 139, 141, 162, 163, 166, 172, 176, 180, - 181, 191, 158, 128, 134, 132, 255, 175, - 181, 184, 255, 129, 155, 158, 255, 171, - 183, 157, 171, 172, 186, 176, 181, 183, - 184, 187, 190, 128, 130, 131, 164, 145, - 151, 154, 160, 129, 138, 179, 185, 187, - 190, 135, 145, 155, 138, 153, 175, 182, - 184, 191, 146, 167, 169, 182, 186, 177, - 182, 188, 189, 191, 255, 134, 136, 255, - 138, 142, 144, 145, 147, 151, 179, 182, - 171, 172, 189, 190, 191, 176, 180, 176, - 182, 143, 145, 255, 136, 142, 147, 255, - 164, 176, 177, 178, 157, 158, 133, 134, - 137, 168, 169, 170, 165, 169, 173, 178, - 187, 255, 131, 132, 140, 169, 174, 255, - 130, 132, 128, 182, 187, 255, 173, 180, - 182, 255, 132, 155, 159, 161, 175, 128, - 132, 139, 163, 165, 128, 134, 136, 152, - 155, 161, 163, 164, 166, 170, 172, 175, - 144, 150, 132, 138, 128, 131, 132, 133, - 134, 135, 136, 137, 139, 140, 141, 142, - 143, 144, 145, 148, 149, 151, 152, 153, - 157, 159, 160, 161, 162, 163, 164, 165, - 168, 169, 176, 191, 129, 150, 154, 155, - 166, 171, 177, 190, 192, 255, 175, 141, - 143, 172, 177, 190, 191, 142, 145, 154, - 173, 255, 166, 255, 154, 175, 129, 143, - 178, 186, 188, 191, 137, 255, 190, 255, - 134, 255, 144, 255, 180, 191, 149, 191, - 140, 143, 136, 143, 154, 159, 136, 143, - 174, 255, 140, 186, 188, 191, 128, 133, - 135, 191, 160, 128, 129, 132, 135, 133, - 134, 160, 255, 128, 130, 170, 175, 144, - 145, 150, 155, 157, 158, 159, 143, 187, - 191, 128, 133, 134, 155, 157, 191, 157, - 128, 191, 143, 128, 191, 163, 181, 128, - 191, 162, 128, 191, 142, 128, 191, 132, - 133, 134, 135, 160, 128, 191, 128, 255, - 128, 129, 130, 132, 133, 134, 141, 156, - 157, 158, 159, 160, 162, 164, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 179, - 183, 160, 255, 128, 129, 130, 133, 134, - 135, 141, 156, 157, 158, 159, 160, 162, - 164, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 179, 183, 160, 255, 168, 255, - 128, 129, 130, 134, 135, 141, 156, 157, - 158, 159, 160, 162, 164, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 179, 183, - 168, 255, 192, 255, 159, 139, 187, 158, - 159, 176, 255, 135, 138, 139, 187, 188, - 255, 168, 255, 153, 154, 155, 160, 162, - 163, 164, 165, 166, 167, 168, 169, 170, - 171, 175, 177, 178, 179, 180, 181, 182, - 184, 185, 186, 187, 188, 189, 191, 176, - 190, 192, 255, 135, 147, 160, 188, 128, - 156, 184, 129, 255, 128, 129, 130, 133, - 134, 141, 156, 157, 158, 159, 160, 162, - 164, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 179, 183, 158, 159, 135, 255, - 148, 176, 140, 168, 132, 160, 188, 152, - 180, 144, 172, 136, 164, 192, 255, 129, - 130, 131, 132, 133, 134, 136, 137, 138, - 139, 140, 141, 143, 144, 145, 146, 147, - 148, 150, 151, 152, 153, 154, 155, 157, - 158, 159, 160, 161, 162, 164, 165, 166, - 167, 168, 169, 171, 172, 173, 174, 175, - 176, 178, 179, 180, 181, 182, 183, 185, - 186, 187, 188, 189, 190, 128, 191, 129, - 130, 131, 132, 133, 134, 136, 137, 138, - 139, 140, 141, 143, 144, 145, 146, 147, - 148, 150, 151, 152, 153, 154, 155, 157, - 158, 159, 160, 161, 162, 164, 165, 166, - 167, 168, 169, 171, 172, 173, 174, 175, - 176, 178, 179, 180, 181, 182, 183, 185, - 186, 187, 188, 189, 190, 128, 191, 129, - 130, 131, 132, 133, 134, 136, 137, 138, - 139, 140, 141, 143, 144, 145, 146, 147, - 148, 150, 151, 152, 153, 154, 155, 157, - 158, 159, 128, 156, 160, 255, 136, 164, - 175, 176, 255, 128, 141, 143, 191, 128, - 129, 132, 134, 140, 142, 143, 147, 150, - 151, 152, 153, 154, 155, 156, 157, 158, - 164, 172, 173, 130, 191, 188, 128, 138, - 140, 141, 144, 167, 175, 191, 137, 128, - 159, 176, 191, 162, 185, 128, 191, 128, - 147, 148, 153, 154, 168, 169, 170, 171, - 191, 168, 128, 153, 154, 155, 156, 191, - 136, 128, 191, 143, 128, 168, 169, 179, - 180, 183, 184, 186, 187, 191, 130, 128, - 191, 182, 128, 169, 170, 171, 172, 191, - 128, 191, 129, 186, 187, 190, 134, 147, - 128, 191, 128, 133, 134, 143, 144, 255, - 147, 149, 134, 135, 151, 156, 158, 160, - 162, 167, 169, 178, 181, 191, 192, 255, - 132, 135, 140, 142, 150, 128, 146, 147, - 151, 152, 162, 163, 167, 168, 191, 161, - 176, 191, 128, 148, 149, 151, 152, 190, - 128, 179, 180, 181, 182, 191, 128, 132, - 133, 135, 136, 154, 155, 156, 157, 191, - 144, 149, 128, 191, 128, 138, 129, 191, - 176, 189, 128, 191, 151, 153, 128, 191, - 128, 191, 165, 177, 178, 179, 180, 181, - 182, 184, 185, 186, 187, 188, 189, 191, - 128, 175, 176, 190, 192, 255, 128, 159, - 160, 188, 189, 191, 128, 156, 184, 129, - 255, 148, 176, 140, 168, 132, 160, 188, - 152, 180, 144, 172, 136, 164, 192, 255, - 129, 130, 131, 132, 133, 134, 136, 137, - 138, 139, 140, 141, 143, 144, 145, 146, - 147, 148, 150, 151, 152, 153, 154, 155, - 157, 158, 159, 160, 161, 162, 164, 165, - 166, 167, 168, 169, 171, 172, 173, 174, - 175, 176, 178, 179, 180, 181, 182, 183, - 185, 186, 187, 188, 189, 190, 128, 191, - 129, 130, 131, 132, 133, 134, 136, 137, - 138, 139, 140, 141, 143, 144, 145, 146, - 147, 148, 150, 151, 152, 153, 154, 155, - 157, 158, 159, 160, 161, 162, 164, 165, - 166, 167, 168, 169, 171, 172, 173, 174, - 175, 176, 178, 179, 180, 181, 182, 183, - 185, 186, 187, 188, 189, 190, 128, 191, - 129, 130, 131, 132, 133, 134, 136, 137, - 138, 139, 140, 141, 143, 144, 145, 146, - 147, 148, 150, 151, 152, 153, 154, 155, - 157, 158, 159, 128, 156, 160, 191, 192, - 255, 136, 164, 175, 176, 255, 135, 138, - 139, 187, 188, 191, 192, 255, 187, 191, - 128, 190, 128, 190, 188, 128, 175, 190, - 191, 145, 147, 155, 157, 159, 128, 191, - 130, 131, 135, 164, 165, 168, 170, 181, - 128, 191, 189, 128, 191, 141, 128, 191, - 128, 129, 130, 131, 132, 191, 191, 128, - 190, 129, 128, 191, 186, 128, 191, 128, - 131, 132, 137, 138, 191, 134, 128, 191, - 144, 128, 191, 128, 175, 185, 191, 178, - 128, 191, 128, 159, 164, 191, 133, 128, - 191, 128, 178, 187, 191, 128, 131, 132, - 133, 134, 135, 136, 137, 139, 140, 141, - 142, 143, 144, 145, 148, 149, 151, 152, - 153, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 168, 169, 176, 191, 129, - 150, 154, 171, 172, 175, 177, 190, 175, - 128, 140, 141, 143, 144, 191, 128, 171, - 172, 177, 178, 189, 190, 191, 142, 128, - 144, 145, 154, 155, 172, 173, 255, 166, - 191, 192, 255, 144, 145, 150, 155, 157, - 158, 159, 135, 143, 166, 191, 128, 154, - 175, 187, 129, 143, 144, 177, 178, 191, - 128, 136, 137, 255, 187, 191, 192, 255, - 190, 191, 192, 255, 128, 133, 134, 255, - 144, 191, 192, 255, 128, 179, 180, 191, - 128, 148, 149, 191, 128, 139, 140, 143, - 144, 191, 128, 135, 136, 143, 144, 153, - 154, 159, 160, 191, 128, 135, 136, 143, - 144, 173, 174, 255, 187, 128, 139, 140, - 191, 134, 128, 191, 128, 191, 160, 128, - 191, 128, 129, 135, 132, 134, 128, 175, - 157, 128, 191, 143, 128, 191, 163, 181, - 128, 191, 162, 128, 191, 142, 128, 191, - 132, 133, 134, 135, 160, 128, 191, 128, - 255, 128, 255, 176, 255, 131, 137, 191, - 145, 189, 135, 129, 130, 132, 133, 144, - 154, 176, 139, 159, 150, 156, 159, 164, - 167, 168, 170, 173, 145, 176, 255, 139, - 255, 166, 176, 189, 171, 179, 160, 161, - 163, 164, 165, 167, 169, 171, 173, 174, - 175, 176, 177, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, - 166, 170, 172, 178, 150, 153, 155, 163, - 165, 167, 169, 173, 153, 155, 147, 161, - 163, 255, 189, 132, 185, 144, 152, 161, - 164, 255, 188, 129, 131, 190, 255, 133, - 134, 137, 138, 142, 150, 152, 161, 164, - 189, 191, 255, 131, 134, 137, 138, 142, - 144, 146, 175, 178, 180, 182, 255, 134, - 138, 142, 161, 164, 185, 192, 255, 188, - 129, 131, 190, 191, 128, 132, 135, 136, - 139, 141, 149, 151, 162, 163, 130, 190, - 191, 151, 128, 130, 134, 136, 138, 141, - 128, 132, 190, 255, 133, 137, 142, 148, - 151, 161, 164, 255, 128, 132, 134, 136, - 138, 141, 149, 150, 162, 163, 128, 131, - 187, 188, 190, 255, 133, 137, 142, 150, - 152, 161, 164, 255, 129, 131, 138, 150, - 143, 148, 152, 159, 178, 179, 177, 179, - 186, 135, 142, 177, 179, 188, 136, 141, - 181, 183, 185, 152, 153, 190, 191, 177, - 191, 128, 132, 134, 135, 141, 151, 153, - 188, 134, 128, 129, 130, 141, 156, 157, - 158, 159, 160, 162, 164, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 179, 183, - 173, 183, 185, 190, 150, 153, 158, 160, - 177, 180, 130, 141, 157, 132, 134, 157, - 159, 146, 148, 178, 180, 146, 147, 178, - 179, 180, 255, 148, 156, 158, 255, 139, - 141, 169, 133, 134, 160, 171, 176, 187, - 151, 155, 160, 162, 191, 149, 158, 165, - 188, 176, 255, 129, 255, 128, 132, 180, - 255, 133, 170, 180, 255, 128, 130, 161, - 173, 166, 179, 164, 183, 173, 180, 144, - 146, 148, 168, 183, 185, 128, 185, 187, - 191, 128, 131, 179, 181, 183, 140, 141, - 169, 174, 128, 129, 131, 132, 134, 140, - 142, 143, 147, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 164, 172, 173, 179, - 181, 183, 140, 141, 188, 137, 144, 176, - 162, 185, 148, 153, 169, 170, 168, 154, - 155, 136, 143, 169, 179, 184, 186, 130, - 182, 170, 171, 128, 187, 190, 128, 133, - 135, 146, 148, 191, 128, 191, 128, 133, - 144, 255, 147, 149, 134, 135, 151, 156, - 158, 160, 162, 167, 169, 178, 181, 255, - 132, 135, 140, 142, 151, 147, 149, 163, - 167, 161, 176, 191, 149, 151, 180, 181, - 133, 135, 155, 156, 144, 149, 175, 177, - 191, 160, 191, 128, 130, 138, 189, 170, - 176, 153, 154, 151, 153, 153, 154, 155, - 160, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 175, 175, 178, 180, 189, - 158, 159, 176, 177, 130, 134, 139, 172, - 163, 167, 128, 129, 180, 255, 134, 159, - 178, 190, 192, 255, 166, 173, 135, 147, - 128, 131, 179, 255, 129, 164, 166, 255, - 169, 182, 131, 188, 140, 141, 176, 178, - 180, 183, 184, 190, 191, 129, 171, 175, - 181, 182, 163, 170, 172, 173, 172, 184, - 190, 158, 128, 143, 160, 175, 144, 145, - 150, 155, 157, 158, 159, 135, 139, 141, - 168, 171, 180, 186, 189, 189, 160, 182, - 186, 191, 129, 131, 133, 134, 140, 143, - 184, 186, 165, 166, 164, 167, 171, 172, - 134, 144, 128, 129, 130, 132, 133, 134, - 135, 136, 139, 140, 141, 144, 145, 146, - 147, 150, 151, 152, 153, 154, 156, 160, - 164, 165, 167, 168, 169, 170, 176, 178, - 180, 181, 182, 187, 128, 130, 184, 255, - 135, 190, 131, 175, 187, 255, 128, 130, - 167, 180, 179, 133, 134, 128, 130, 179, - 255, 141, 129, 136, 144, 255, 190, 172, - 183, 159, 170, 128, 131, 187, 188, 190, - 191, 151, 128, 132, 135, 136, 139, 141, - 162, 163, 166, 172, 176, 180, 181, 191, - 158, 128, 134, 132, 255, 175, 181, 184, - 255, 129, 155, 158, 255, 171, 183, 157, - 171, 172, 186, 176, 181, 183, 184, 187, - 190, 128, 130, 131, 164, 145, 151, 154, - 160, 129, 138, 179, 185, 187, 190, 135, - 145, 155, 138, 153, 175, 182, 184, 191, - 146, 167, 169, 182, 186, 177, 182, 188, - 189, 191, 255, 134, 136, 255, 138, 142, - 144, 145, 147, 151, 179, 182, 171, 172, - 189, 190, 191, 176, 180, 176, 182, 143, - 145, 255, 136, 142, 147, 255, 164, 176, - 177, 178, 157, 158, 133, 134, 137, 168, - 169, 170, 165, 169, 173, 178, 187, 255, - 131, 132, 140, 169, 174, 255, 130, 132, - 128, 182, 187, 255, 173, 180, 182, 255, - 132, 155, 159, 161, 175, 128, 132, 139, - 163, 165, 128, 134, 136, 152, 155, 161, - 163, 164, 166, 170, 172, 175, 144, 150, - 132, 138, 128, 131, 132, 133, 134, 135, - 136, 137, 139, 140, 141, 142, 143, 144, - 145, 148, 149, 151, 152, 153, 157, 159, - 160, 161, 162, 163, 164, 165, 168, 169, - 176, 191, 129, 150, 154, 155, 166, 171, - 177, 190, 192, 255, 175, 141, 143, 172, - 177, 190, 191, 142, 145, 154, 173, 255, - 166, 255, 154, 175, 129, 143, 178, 186, - 188, 191, 137, 255, 190, 255, 134, 255, - 144, 255, 180, 191, 149, 191, 140, 143, - 136, 143, 154, 159, 136, 143, 174, 255, - 140, 186, 188, 191, 128, 133, 135, 191, - 160, 128, 129, 132, 135, 133, 134, 160, - 255, 128, 130, 170, 175, 144, 145, 150, - 155, 157, 158, 159, 143, 187, 191, 128, - 129, 130, 132, 133, 134, 141, 156, 157, - 158, 159, 160, 162, 164, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 179, 183, - 160, 255, 128, 129, 130, 133, 134, 135, - 141, 156, 157, 158, 159, 160, 162, 164, - 168, 169, 170, 171, 172, 173, 174, 175, - 176, 179, 183, 160, 255, 168, 255, 128, - 129, 130, 134, 135, 141, 156, 157, 158, - 159, 160, 162, 164, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 179, 183, 168, - 255, 192, 255, 159, 139, 187, 158, 159, - 176, 255, 135, 138, 139, 187, 188, 255, - 168, 255, 153, 154, 155, 160, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, - 175, 177, 178, 179, 180, 181, 182, 184, - 185, 186, 187, 188, 189, 191, 176, 190, - 192, 255, 135, 147, 160, 188, 128, 156, - 184, 129, 255, 128, 129, 130, 133, 134, - 141, 156, 157, 158, 159, 160, 162, 164, - 168, 169, 170, 171, 172, 173, 174, 175, - 176, 179, 183, 158, 159, 135, 255, 148, - 176, 140, 168, 132, 160, 188, 152, 180, - 144, 172, 136, 164, 192, 255, 129, 130, - 131, 132, 133, 134, 136, 137, 138, 139, - 140, 141, 143, 144, 145, 146, 147, 148, - 150, 151, 152, 153, 154, 155, 157, 158, - 159, 160, 161, 162, 164, 165, 166, 167, - 168, 169, 171, 172, 173, 174, 175, 176, - 178, 179, 180, 181, 182, 183, 185, 186, - 187, 188, 189, 190, 128, 191, 129, 130, - 131, 132, 133, 134, 136, 137, 138, 139, - 140, 141, 143, 144, 145, 146, 147, 148, - 150, 151, 152, 153, 154, 155, 157, 158, - 159, 160, 161, 162, 164, 165, 166, 167, - 168, 169, 171, 172, 173, 174, 175, 176, - 178, 179, 180, 181, 182, 183, 185, 186, - 187, 188, 189, 190, 128, 191, 129, 130, - 131, 132, 133, 134, 136, 137, 138, 139, - 140, 141, 143, 144, 145, 146, 147, 148, - 150, 151, 152, 153, 154, 155, 157, 158, - 159, 128, 156, 160, 255, 136, 164, 175, - 176, 255, 142, 128, 191, 128, 129, 132, - 134, 140, 142, 143, 147, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 164, 172, - 173, 130, 191, 139, 141, 188, 128, 140, - 142, 143, 144, 167, 168, 174, 175, 191, - 128, 255, 176, 255, 131, 137, 191, 145, - 189, 135, 129, 130, 132, 133, 144, 154, - 176, 139, 159, 150, 156, 159, 164, 167, - 168, 170, 173, 145, 176, 255, 139, 255, - 166, 176, 189, 171, 179, 160, 161, 163, - 164, 165, 167, 169, 171, 173, 174, 175, - 176, 177, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 166, - 170, 172, 178, 150, 153, 155, 163, 165, - 167, 169, 173, 153, 155, 147, 161, 163, - 255, 189, 132, 185, 144, 152, 161, 164, - 255, 188, 129, 131, 190, 255, 133, 134, - 137, 138, 142, 150, 152, 161, 164, 189, - 191, 255, 131, 134, 137, 138, 142, 144, - 146, 175, 178, 180, 182, 255, 134, 138, - 142, 161, 164, 185, 192, 255, 188, 129, - 131, 190, 191, 128, 132, 135, 136, 139, - 141, 149, 151, 162, 163, 130, 190, 191, - 151, 128, 130, 134, 136, 138, 141, 128, - 132, 190, 255, 133, 137, 142, 148, 151, - 161, 164, 255, 128, 132, 134, 136, 138, - 141, 149, 150, 162, 163, 128, 131, 187, - 188, 190, 255, 133, 137, 142, 150, 152, - 161, 164, 255, 129, 131, 138, 150, 143, - 148, 152, 159, 178, 179, 177, 179, 186, - 135, 142, 177, 179, 188, 136, 141, 181, - 183, 185, 152, 153, 190, 191, 177, 191, - 128, 132, 134, 135, 141, 151, 153, 188, - 134, 128, 129, 130, 141, 156, 157, 158, - 159, 160, 162, 164, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 179, 183, 173, - 183, 185, 190, 150, 153, 158, 160, 177, - 180, 130, 141, 157, 132, 134, 157, 159, - 146, 148, 178, 180, 146, 147, 178, 179, - 180, 255, 148, 156, 158, 255, 139, 141, - 169, 133, 134, 160, 171, 176, 187, 151, - 155, 160, 162, 191, 149, 158, 165, 188, - 176, 255, 129, 255, 128, 132, 180, 255, - 133, 170, 180, 255, 128, 130, 161, 173, - 166, 179, 164, 183, 173, 180, 144, 146, - 148, 168, 183, 185, 128, 185, 187, 191, - 128, 131, 179, 181, 183, 140, 141, 144, - 176, 175, 177, 191, 160, 191, 128, 130, - 170, 175, 153, 154, 153, 154, 155, 160, - 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 175, 175, 178, 180, 189, 158, - 159, 176, 177, 130, 134, 139, 172, 163, - 167, 128, 129, 180, 255, 134, 159, 178, - 190, 192, 255, 166, 173, 135, 147, 128, - 131, 179, 255, 129, 164, 166, 255, 169, - 182, 131, 188, 140, 141, 176, 178, 180, - 183, 184, 190, 191, 129, 171, 175, 181, - 182, 163, 170, 172, 173, 172, 184, 190, - 158, 128, 143, 160, 175, 144, 145, 150, - 155, 157, 158, 159, 135, 139, 141, 168, - 171, 180, 186, 189, 189, 160, 182, 186, - 191, 129, 131, 133, 134, 140, 143, 184, - 186, 165, 166, 164, 167, 171, 172, 134, - 144, 128, 129, 130, 132, 133, 134, 135, - 136, 139, 140, 141, 144, 145, 146, 147, - 150, 151, 152, 153, 154, 156, 160, 164, - 165, 167, 168, 169, 170, 176, 178, 180, - 181, 182, 187, 128, 130, 184, 255, 135, - 190, 131, 175, 187, 255, 128, 130, 167, - 180, 179, 133, 134, 128, 130, 179, 255, - 141, 129, 136, 144, 255, 190, 172, 183, - 159, 170, 128, 131, 187, 188, 190, 191, - 151, 128, 132, 135, 136, 139, 141, 162, - 163, 166, 172, 176, 180, 181, 191, 158, - 128, 134, 132, 255, 175, 181, 184, 255, - 129, 155, 158, 255, 171, 183, 157, 171, - 172, 186, 176, 181, 183, 184, 187, 190, - 128, 130, 131, 164, 145, 151, 154, 160, - 129, 138, 179, 185, 187, 190, 135, 145, - 155, 138, 153, 175, 182, 184, 191, 146, - 167, 169, 182, 186, 177, 182, 188, 189, - 191, 255, 134, 136, 255, 138, 142, 144, - 145, 147, 151, 179, 182, 171, 172, 189, - 190, 191, 176, 180, 176, 182, 143, 145, - 255, 136, 142, 147, 255, 164, 176, 177, - 178, 157, 158, 133, 134, 137, 168, 169, - 170, 165, 169, 173, 178, 187, 255, 131, - 132, 140, 169, 174, 255, 130, 132, 128, - 182, 187, 255, 173, 180, 182, 255, 132, - 155, 159, 161, 175, 128, 132, 139, 163, - 165, 128, 134, 136, 152, 155, 161, 163, - 164, 166, 170, 172, 175, 144, 150, 132, - 138, 143, 187, 191, 160, 128, 129, 132, - 135, 133, 134, 160, 255, 192, 255, 137, - 128, 159, 160, 175, 176, 191, 162, 185, - 128, 191, 128, 147, 148, 153, 154, 168, - 169, 170, 171, 191, 168, 128, 153, 154, - 155, 156, 191, 136, 128, 191, 143, 128, - 168, 169, 179, 180, 183, 184, 186, 187, - 191, 130, 128, 191, 182, 128, 169, 170, - 171, 172, 191, 128, 191, 129, 186, 187, - 190, 134, 147, 128, 191, 128, 133, 134, - 143, 144, 255, 147, 149, 134, 135, 151, - 156, 158, 160, 162, 167, 169, 178, 181, - 191, 192, 255, 132, 135, 140, 142, 150, - 128, 146, 147, 151, 152, 162, 163, 167, - 168, 191, 161, 176, 191, 128, 148, 149, - 151, 152, 190, 128, 179, 180, 181, 182, - 191, 128, 132, 133, 135, 136, 154, 155, - 156, 157, 191, 144, 149, 128, 191, 128, - 138, 129, 191, 176, 189, 128, 191, 151, - 153, 128, 191, 128, 191, 165, 177, 178, - 179, 180, 181, 182, 184, 185, 186, 187, - 188, 189, 191, 128, 175, 176, 190, 192, - 255, 128, 159, 160, 188, 189, 191, 128, - 156, 184, 129, 255, 148, 176, 140, 168, - 132, 160, 188, 152, 180, 144, 172, 136, - 164, 192, 255, 129, 130, 131, 132, 133, - 134, 136, 137, 138, 139, 140, 141, 143, - 144, 145, 146, 147, 148, 150, 151, 152, - 153, 154, 155, 157, 158, 159, 160, 161, - 162, 164, 165, 166, 167, 168, 169, 171, - 172, 173, 174, 175, 176, 178, 179, 180, - 181, 182, 183, 185, 186, 187, 188, 189, - 190, 128, 191, 129, 130, 131, 132, 133, - 134, 136, 137, 138, 139, 140, 141, 143, - 144, 145, 146, 147, 148, 150, 151, 152, - 153, 154, 155, 157, 158, 159, 160, 161, - 162, 164, 165, 166, 167, 168, 169, 171, - 172, 173, 174, 175, 176, 178, 179, 180, - 181, 182, 183, 185, 186, 187, 188, 189, - 190, 128, 191, 129, 130, 131, 132, 133, - 134, 136, 137, 138, 139, 140, 141, 143, - 144, 145, 146, 147, 148, 150, 151, 152, - 153, 154, 155, 157, 158, 159, 128, 156, - 160, 191, 192, 255, 136, 164, 175, 176, - 255, 135, 138, 139, 187, 188, 191, 192, - 255, 187, 191, 128, 190, 191, 128, 190, - 188, 128, 175, 176, 189, 190, 191, 145, - 147, 155, 157, 159, 128, 191, 130, 131, - 135, 164, 165, 168, 170, 181, 128, 191, - 189, 128, 191, 141, 128, 191, 128, 129, - 130, 131, 132, 191, 191, 128, 190, 129, - 128, 191, 186, 128, 191, 128, 131, 132, - 137, 138, 191, 134, 128, 191, 144, 128, - 191, 128, 175, 176, 184, 185, 191, 178, - 128, 191, 128, 159, 160, 163, 164, 191, - 133, 128, 191, 128, 178, 179, 186, 187, - 191, 128, 131, 132, 133, 134, 135, 136, - 137, 139, 140, 141, 142, 143, 144, 145, - 148, 149, 151, 152, 153, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 168, - 169, 176, 191, 129, 150, 154, 171, 172, - 175, 177, 190, 175, 128, 140, 141, 143, - 144, 191, 128, 171, 172, 177, 178, 189, - 190, 191, 142, 128, 144, 145, 154, 155, - 172, 173, 255, 166, 191, 192, 255, 128, - 255, 176, 255, 131, 137, 191, 145, 189, - 135, 129, 130, 132, 133, 144, 154, 176, - 139, 159, 150, 156, 159, 164, 167, 168, - 170, 173, 145, 176, 255, 139, 255, 166, - 176, 189, 171, 179, 160, 161, 163, 164, - 165, 167, 169, 171, 173, 174, 175, 176, - 177, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 166, 170, - 172, 178, 150, 153, 155, 163, 165, 167, - 169, 173, 153, 155, 147, 161, 163, 255, - 189, 132, 185, 144, 152, 161, 164, 255, - 188, 129, 131, 190, 255, 133, 134, 137, - 138, 142, 150, 152, 161, 164, 189, 191, - 255, 131, 134, 137, 138, 142, 144, 146, - 175, 178, 180, 182, 255, 134, 138, 142, - 161, 164, 185, 192, 255, 188, 129, 131, - 190, 191, 128, 132, 135, 136, 139, 141, - 149, 151, 162, 163, 130, 190, 191, 151, - 128, 130, 134, 136, 138, 141, 128, 132, - 190, 255, 133, 137, 142, 148, 151, 161, - 164, 255, 128, 132, 134, 136, 138, 141, - 149, 150, 162, 163, 128, 131, 187, 188, - 190, 255, 133, 137, 142, 150, 152, 161, - 164, 255, 129, 131, 138, 150, 143, 148, - 152, 159, 178, 179, 177, 179, 186, 135, - 142, 177, 179, 188, 136, 141, 181, 183, - 185, 152, 153, 190, 191, 177, 191, 128, - 132, 134, 135, 141, 151, 153, 188, 134, - 128, 129, 130, 141, 156, 157, 158, 159, - 160, 162, 164, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 179, 183, 173, 183, - 185, 190, 150, 153, 158, 160, 177, 180, - 130, 141, 157, 132, 134, 157, 159, 146, - 148, 178, 180, 146, 147, 178, 179, 180, - 255, 148, 156, 158, 255, 139, 141, 169, - 133, 134, 160, 171, 176, 187, 151, 155, - 160, 162, 191, 149, 158, 165, 188, 176, - 255, 129, 255, 128, 132, 180, 255, 133, - 170, 180, 255, 128, 130, 161, 173, 166, - 179, 164, 183, 173, 180, 144, 146, 148, - 168, 183, 185, 128, 185, 187, 191, 128, - 131, 179, 181, 183, 140, 141, 169, 174, - 128, 129, 131, 132, 134, 140, 142, 143, - 147, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 164, 172, 173, 179, 181, 183, - 140, 141, 188, 137, 144, 176, 162, 185, - 148, 153, 169, 170, 168, 154, 155, 136, - 143, 169, 179, 184, 186, 130, 182, 170, - 171, 128, 187, 190, 128, 133, 135, 146, - 148, 191, 128, 191, 128, 133, 144, 255, - 147, 149, 134, 135, 151, 156, 158, 160, - 162, 167, 169, 178, 181, 255, 132, 135, - 140, 142, 151, 147, 149, 163, 167, 161, - 176, 191, 149, 151, 180, 181, 133, 135, - 155, 156, 144, 149, 175, 177, 191, 160, - 191, 128, 130, 138, 189, 170, 176, 153, - 154, 151, 153, 153, 154, 155, 160, 162, - 163, 164, 165, 166, 167, 168, 169, 170, - 171, 175, 175, 178, 180, 189, 158, 159, - 176, 177, 130, 134, 139, 172, 163, 167, - 128, 129, 180, 255, 134, 159, 178, 190, - 192, 255, 166, 173, 135, 147, 128, 131, - 179, 255, 129, 164, 166, 255, 169, 182, - 131, 188, 140, 141, 176, 178, 180, 183, - 184, 190, 191, 129, 171, 175, 181, 182, - 163, 170, 172, 173, 172, 184, 190, 158, - 128, 143, 160, 175, 144, 145, 150, 155, - 157, 158, 159, 135, 139, 141, 168, 171, - 180, 186, 189, 189, 160, 182, 186, 191, - 129, 131, 133, 134, 140, 143, 184, 186, - 165, 166, 164, 167, 171, 172, 134, 144, - 128, 129, 130, 132, 133, 134, 135, 136, - 139, 140, 141, 144, 145, 146, 147, 150, - 151, 152, 153, 154, 156, 160, 164, 165, - 167, 168, 169, 170, 176, 178, 180, 181, - 182, 187, 128, 130, 184, 255, 135, 190, - 131, 175, 187, 255, 128, 130, 167, 180, - 179, 133, 134, 128, 130, 179, 255, 141, - 129, 136, 144, 255, 190, 172, 183, 159, - 170, 128, 131, 187, 188, 190, 191, 151, - 128, 132, 135, 136, 139, 141, 162, 163, - 166, 172, 176, 180, 181, 191, 158, 128, - 134, 132, 255, 175, 181, 184, 255, 129, - 155, 158, 255, 171, 183, 157, 171, 172, - 186, 176, 181, 183, 184, 187, 190, 128, - 130, 131, 164, 145, 151, 154, 160, 129, - 138, 179, 185, 187, 190, 135, 145, 155, - 138, 153, 175, 182, 184, 191, 146, 167, - 169, 182, 186, 177, 182, 188, 189, 191, - 255, 134, 136, 255, 138, 142, 144, 145, - 147, 151, 179, 182, 171, 172, 189, 190, - 191, 176, 180, 176, 182, 143, 145, 255, - 136, 142, 147, 255, 164, 176, 177, 178, - 157, 158, 133, 134, 137, 168, 169, 170, - 165, 169, 173, 178, 187, 255, 131, 132, - 140, 169, 174, 255, 130, 132, 128, 182, - 187, 255, 173, 180, 182, 255, 132, 155, - 159, 161, 175, 128, 132, 139, 163, 165, - 128, 134, 136, 152, 155, 161, 163, 164, - 166, 170, 172, 175, 144, 150, 132, 138, - 128, 131, 132, 133, 134, 135, 136, 137, - 139, 140, 141, 142, 143, 144, 145, 148, - 149, 151, 152, 153, 157, 159, 160, 161, - 162, 163, 164, 165, 168, 169, 176, 191, - 129, 150, 154, 155, 166, 171, 177, 190, - 192, 255, 175, 141, 143, 172, 177, 190, - 191, 142, 145, 154, 173, 255, 166, 255, - 154, 175, 129, 143, 178, 186, 188, 191, - 137, 255, 190, 255, 134, 255, 144, 255, - 180, 191, 149, 191, 140, 143, 136, 143, - 154, 159, 136, 143, 174, 255, 140, 186, - 188, 191, 128, 133, 135, 191, 160, 128, - 129, 132, 135, 133, 134, 160, 255, 128, - 130, 170, 175, 144, 145, 150, 155, 157, - 158, 159, 143, 187, 191, 144, 145, 150, - 155, 157, 158, 159, 135, 143, 166, 191, - 128, 154, 175, 187, 129, 143, 144, 177, - 178, 191, 128, 136, 137, 255, 187, 191, - 192, 255, 190, 191, 192, 255, 128, 133, - 134, 255, 144, 191, 192, 255, 128, 179, - 180, 191, 128, 148, 149, 191, 128, 139, - 140, 143, 144, 191, 128, 135, 136, 143, - 144, 153, 154, 159, 160, 191, 128, 135, - 136, 143, 144, 173, 174, 255, 187, 128, - 139, 140, 191, 134, 128, 191, 128, 191, - 160, 128, 191, 128, 130, 131, 135, 191, - 129, 134, 136, 190, 128, 159, 160, 191, - 0, 127, 192, 255, 128, 175, 176, 255, - 10, 13, 127, 194, 216, 219, 220, 224, - 225, 226, 227, 234, 235, 236, 237, 239, - 240, 243, 0, 31, 128, 191, 192, 223, - 228, 238, 241, 247, 248, 255, 204, 205, - 210, 214, 215, 216, 217, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 234, 239, - 240, 243, 204, 205, 210, 214, 215, 216, - 217, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 234, 239, 240, 243, 194, 204, - 205, 210, 214, 215, 216, 217, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 234, - 239, 240, 243, 194, 216, 219, 220, 224, - 225, 226, 227, 234, 235, 236, 237, 239, - 240, 243, 32, 126, 192, 223, 228, 238, - 241, 247, 204, 205, 210, 214, 215, 216, - 217, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 234, 239, 240, 243, 204, 205, - 210, 214, 215, 216, 217, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 234, 239, - 240, 243, 194, 204, 205, 210, 214, 215, - 216, 217, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 234, 239, 240, 243, 204, - 205, 210, 214, 215, 216, 217, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 234, - 235, 236, 237, 239, 240, 243, 204, 205, - 210, 214, 215, 216, 217, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 234, 237, - 239, 240, 243, 204, 205, 210, 214, 215, - 216, 217, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 234, 237, 239, 240, 243, - 204, 205, 210, 214, 215, 216, 217, 219, - 220, 221, 222, 223, 224, 225, 226, 227, - 234, 237, 239, 240, 243, 204, 205, 210, - 214, 215, 216, 217, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 234, 239, 240, - 243, 204, 205, 210, 214, 215, 216, 217, - 219, 220, 221, 222, 223, 224, 225, 226, - 227, 234, 235, 236, 237, 239, 240, 243, - 204, 205, 210, 214, 215, 216, 217, 219, - 220, 221, 222, 223, 224, 225, 226, 227, - 234, 239, 240, 243, 194, 204, 205, 210, - 214, 215, 216, 217, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 234, 239, 240, - 243, 204, 205, 210, 214, 215, 216, 217, - 219, 220, 221, 222, 223, 224, 225, 226, - 227, 234, 237, 239, 240, 243, 204, 205, - 210, 214, 215, 216, 217, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 234, 237, - 239, 240, 243, 204, 205, 210, 214, 215, - 216, 217, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 234, 237, 239, 240, 243, - 204, 205, 210, 214, 215, 216, 217, 219, - 220, 221, 222, 223, 224, 225, 226, 227, - 234, 239, 240, 243, 204, 205, 210, 214, - 215, 216, 217, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 234, 239, 240, 243, - 204, 205, 210, 214, 215, 216, 217, 219, - 220, 221, 222, 223, 224, 225, 226, 227, - 234, 239, 240, 243, 194, 204, 205, 210, - 214, 215, 216, 217, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 234, 239, 240, - 243, -} - -var _graphclust_single_lengths []byte = []byte{ - 0, 1, 0, 0, 0, 1, 1, 0, - 1, 0, 1, 0, 0, 1, 26, 0, - 0, 0, 1, 1, 1, 0, 0, 2, - 1, 0, 1, 1, 0, 2, 0, 0, - 2, 0, 2, 1, 0, 1, 0, 3, - 0, 0, 1, 22, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 1, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 5, 0, 0, 0, 1, 0, - 2, 0, 0, 15, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 2, - 1, 1, 0, 3, 1, 0, 7, 8, - 1, 1, 0, 1, 0, 0, 0, 0, - 34, 0, 0, 0, 0, 1, 0, 1, - 1, 0, 0, 1, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, - 1, 0, 0, 0, 1, 1, 0, 0, - 5, 0, 0, 1, 0, 1, 1, 0, - 6, 0, 0, 0, 0, 0, 1, 5, - 0, 0, 0, 0, 1, 0, 1, 4, - 0, 0, 0, 0, 3, 0, 0, 0, - 1, 1, 0, 1, 0, 1, 0, 0, - 1, 26, 0, 0, 0, 1, 1, 1, - 0, 0, 2, 1, 0, 1, 1, 0, - 2, 0, 0, 2, 0, 2, 1, 0, - 1, 0, 3, 0, 0, 1, 22, 0, - 0, 3, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 5, 2, 2, - 24, 3, 1, 0, 2, 0, 1, 1, - 1, 1, 1, 1, 0, 0, 0, 0, - 2, 5, 3, 0, 0, 2, 0, 1, - 0, 3, 1, 0, 2, 15, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, - 0, 2, 1, 1, 0, 3, 1, 0, - 7, 8, 1, 1, 0, 1, 0, 0, - 0, 0, 34, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 0, 1, 1, - 0, 0, 5, 0, 0, 1, 0, 1, - 1, 0, 6, 0, 0, 0, 0, 0, - 1, 5, 0, 0, 0, 0, 32, 0, - 1, 0, 1, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1, 4, 0, 2, 0, 7, 1, 0, - 1, 0, 0, 0, 1, 1, 0, 1, - 0, 1, 0, 0, 1, 26, 0, 0, - 0, 1, 1, 1, 0, 0, 2, 1, - 0, 1, 1, 0, 2, 0, 0, 2, - 0, 2, 1, 0, 1, 0, 3, 0, - 0, 1, 22, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 2, - 0, 5, 0, 0, 0, 1, 0, 2, - 0, 0, 15, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 2, 1, - 1, 0, 3, 1, 0, 7, 8, 1, - 1, 0, 1, 0, 0, 0, 0, 34, - 0, 0, 0, 0, 1, 0, 1, 1, - 0, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 1, 1, 0, 0, 5, - 0, 0, 1, 0, 1, 1, 0, 6, - 0, 0, 0, 0, 0, 1, 5, 0, - 0, 0, 0, 1, 0, 1, 4, 0, - 0, 0, 0, 2, 0, 0, 0, 1, - 1, 0, 1, 0, 1, 0, 0, 1, - 26, 0, 0, 0, 1, 1, 1, 0, - 0, 2, 1, 0, 1, 1, 0, 2, - 0, 0, 2, 0, 2, 1, 0, 1, - 0, 3, 0, 0, 1, 22, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 5, 2, 2, 24, - 3, 1, 0, 2, 0, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 0, 2, - 5, 3, 0, 0, 2, 0, 1, 0, - 3, 1, 0, 2, 15, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, - 2, 1, 1, 0, 3, 1, 0, 7, - 8, 1, 1, 0, 1, 0, 0, 0, - 0, 34, 0, 0, 0, 0, 1, 0, - 1, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 1, 1, - 0, 1, 0, 0, 0, 1, 1, 0, - 0, 5, 0, 0, 1, 0, 1, 1, - 0, 6, 0, 0, 0, 0, 0, 1, - 5, 0, 0, 0, 0, 32, 0, 1, - 0, 1, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, - 4, 0, 2, 0, 7, 1, 0, 0, - 1, 1, 2, 1, 1, 5, 0, 25, - 0, 25, 0, 0, 24, 0, 0, 1, - 0, 2, 0, 0, 0, 28, 0, 3, - 24, 2, 0, 2, 2, 3, 2, 2, - 2, 0, 54, 54, 27, 1, 0, 20, - 1, 1, 2, 0, 1, 1, 1, 1, - 1, 2, 2, 0, 2, 5, 3, 0, - 0, 2, 2, 2, 2, 0, 14, 0, - 3, 2, 2, 3, 2, 2, 2, 54, - 54, 27, 1, 0, 2, 0, 1, 5, - 8, 1, 1, 0, 1, 1, 1, 0, - 1, 1, 0, 1, 0, 1, 0, 34, - 1, 0, 1, 0, 7, 2, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 1, 3, 0, - 1, 1, 2, 1, 1, 5, 0, 0, - 0, 0, 1, 1, 0, 1, 0, 1, - 0, 0, 1, 26, 0, 0, 0, 1, - 1, 1, 0, 0, 2, 1, 0, 1, - 1, 0, 2, 0, 0, 2, 0, 2, - 1, 0, 1, 0, 3, 0, 0, 1, - 22, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 5, - 2, 2, 24, 3, 1, 0, 2, 0, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 2, 5, 3, 0, 0, 2, - 0, 1, 0, 3, 1, 0, 2, 15, - 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 2, 1, 1, 0, 3, - 1, 0, 7, 8, 1, 1, 0, 1, - 0, 0, 0, 0, 34, 0, 0, 0, - 0, 1, 0, 1, 1, 0, 0, 1, - 0, 1, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0, 0, 0, - 1, 1, 0, 0, 5, 0, 0, 1, - 0, 1, 1, 0, 6, 0, 0, 0, - 0, 0, 1, 5, 0, 0, 0, 0, - 32, 0, 1, 0, 1, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 4, 0, 2, 0, 7, - 1, 0, 25, 0, 25, 0, 0, 24, - 0, 0, 1, 0, 2, 0, 0, 0, - 28, 0, 3, 24, 2, 0, 2, 2, - 3, 2, 2, 2, 0, 54, 54, 27, - 1, 1, 20, 3, 0, 0, 0, 1, - 1, 0, 1, 0, 1, 0, 0, 1, - 26, 0, 0, 0, 1, 1, 1, 0, - 0, 2, 1, 0, 1, 1, 0, 2, - 0, 0, 2, 0, 2, 1, 0, 1, - 0, 3, 0, 0, 1, 22, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 5, 0, 0, 0, - 1, 0, 2, 0, 0, 15, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, - 0, 2, 1, 1, 0, 3, 1, 0, - 7, 8, 1, 1, 0, 1, 0, 0, - 0, 0, 34, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 0, 1, 1, - 0, 0, 5, 0, 0, 1, 0, 1, - 1, 0, 6, 0, 0, 0, 0, 0, - 1, 5, 0, 0, 0, 0, 1, 0, - 1, 4, 0, 0, 0, 1, 2, 0, - 1, 1, 1, 1, 1, 2, 2, 0, - 2, 5, 3, 0, 0, 2, 2, 2, - 2, 0, 14, 0, 3, 2, 2, 3, - 2, 2, 2, 54, 54, 27, 1, 0, - 2, 1, 1, 5, 8, 1, 1, 0, - 1, 1, 1, 0, 1, 1, 0, 1, - 0, 1, 0, 34, 1, 0, 1, 0, - 0, 0, 0, 1, 1, 0, 1, 0, - 1, 0, 0, 1, 26, 0, 0, 0, - 1, 1, 1, 0, 0, 2, 1, 0, - 1, 1, 0, 2, 0, 0, 2, 0, - 2, 1, 0, 1, 0, 3, 0, 0, - 1, 22, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, 2, 0, - 5, 2, 2, 24, 3, 1, 0, 2, - 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 2, 5, 3, 0, 0, - 2, 0, 1, 0, 3, 1, 0, 2, - 15, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 2, 1, 1, 0, - 3, 1, 0, 7, 8, 1, 1, 0, - 1, 0, 0, 0, 0, 34, 0, 0, - 0, 0, 1, 0, 1, 1, 0, 0, - 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 1, 0, 0, - 0, 1, 1, 0, 0, 5, 0, 0, - 1, 0, 1, 1, 0, 6, 0, 0, - 0, 0, 0, 1, 5, 0, 0, 0, - 0, 32, 0, 1, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 4, 0, 2, 0, - 7, 1, 0, 7, 2, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 5, 0, 0, - 0, 0, 0, 18, 20, 20, 21, 15, - 20, 20, 21, 23, 21, 21, 21, 20, - 23, 20, 21, 21, 21, 21, 20, 20, - 20, 21, -} - -var _graphclust_range_lengths []byte = []byte{ - 0, 0, 1, 1, 1, 1, 2, 1, - 1, 4, 1, 1, 1, 1, 2, 4, - 1, 2, 1, 2, 2, 6, 6, 3, - 2, 5, 1, 3, 2, 3, 5, 3, - 3, 1, 3, 1, 1, 1, 1, 2, - 1, 4, 0, 0, 2, 3, 1, 1, - 2, 2, 1, 2, 1, 1, 2, 1, - 2, 1, 1, 2, 2, 2, 1, 1, - 3, 2, 0, 1, 1, 1, 0, 1, - 0, 1, 1, 0, 2, 1, 1, 1, - 2, 3, 1, 1, 2, 2, 1, 1, - 3, 2, 2, 0, 0, 2, 0, 0, - 0, 0, 1, 4, 1, 1, 1, 1, - 0, 2, 1, 2, 2, 1, 2, 2, - 1, 1, 3, 6, 1, 1, 1, 2, - 2, 1, 1, 1, 3, 1, 2, 3, - 1, 1, 2, 2, 3, 1, 3, 1, - 0, 1, 1, 1, 2, 1, 0, 1, - 0, 3, 3, 1, 2, 2, 2, 0, - 5, 1, 1, 1, 0, 1, 0, 1, - 1, 1, 0, 1, 2, 1, 1, 1, - 1, 2, 1, 1, 4, 1, 1, 1, - 1, 2, 4, 1, 2, 1, 2, 2, - 6, 6, 3, 2, 5, 1, 3, 2, - 3, 5, 3, 3, 1, 3, 1, 1, - 1, 1, 2, 1, 4, 0, 0, 2, - 3, 1, 1, 2, 2, 1, 2, 1, - 1, 2, 1, 2, 1, 1, 2, 2, - 2, 1, 1, 3, 2, 0, 0, 0, - 0, 0, 0, 1, 0, 2, 1, 0, - 2, 0, 1, 1, 3, 1, 2, 0, - 6, 2, 1, 1, 2, 0, 1, 0, - 1, 0, 1, 1, 0, 0, 2, 1, - 1, 1, 2, 3, 1, 1, 2, 2, - 1, 1, 3, 2, 2, 0, 0, 2, - 0, 0, 0, 0, 1, 4, 1, 1, - 1, 1, 0, 2, 1, 2, 2, 1, - 2, 2, 1, 1, 3, 6, 1, 1, - 1, 2, 2, 1, 1, 1, 3, 1, - 2, 3, 1, 1, 2, 2, 3, 1, - 3, 1, 0, 1, 1, 1, 2, 1, - 0, 1, 0, 3, 3, 1, 2, 2, - 2, 0, 5, 1, 1, 1, 4, 1, - 1, 2, 2, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, - 0, 1, 1, 0, 1, 0, 0, 1, - 2, 1, 1, 1, 1, 2, 1, 1, - 4, 1, 1, 1, 1, 2, 4, 1, - 2, 1, 2, 2, 6, 6, 3, 2, - 5, 1, 3, 2, 3, 5, 3, 3, - 1, 3, 1, 1, 1, 1, 2, 1, - 4, 0, 0, 2, 3, 1, 1, 2, - 2, 1, 2, 1, 1, 2, 1, 2, - 1, 1, 2, 2, 2, 1, 1, 3, - 2, 0, 1, 1, 1, 0, 1, 0, - 1, 1, 0, 2, 1, 1, 1, 2, - 3, 1, 1, 2, 2, 1, 1, 3, - 2, 2, 0, 0, 2, 0, 0, 0, - 0, 1, 4, 1, 1, 1, 1, 0, - 2, 1, 2, 2, 1, 2, 2, 1, - 1, 3, 6, 1, 1, 1, 2, 2, - 1, 1, 1, 3, 1, 2, 3, 1, - 1, 2, 2, 3, 1, 3, 1, 0, - 1, 1, 1, 2, 1, 0, 1, 0, - 3, 3, 1, 2, 2, 2, 0, 5, - 1, 1, 1, 0, 1, 0, 1, 1, - 1, 0, 1, 2, 1, 1, 1, 1, - 2, 1, 1, 4, 1, 1, 1, 1, - 2, 4, 1, 2, 1, 2, 2, 6, - 6, 3, 2, 5, 1, 3, 2, 3, - 5, 3, 3, 1, 3, 1, 1, 1, - 1, 2, 1, 4, 0, 0, 2, 3, - 1, 1, 2, 2, 1, 2, 1, 1, - 2, 1, 2, 1, 1, 2, 2, 2, - 1, 1, 3, 2, 0, 0, 0, 0, - 0, 0, 1, 0, 2, 1, 0, 2, - 0, 1, 1, 3, 1, 2, 0, 6, - 2, 1, 1, 2, 0, 1, 0, 1, - 0, 1, 1, 0, 0, 2, 1, 1, - 1, 2, 3, 1, 1, 2, 2, 1, - 1, 3, 2, 2, 0, 0, 2, 0, - 0, 0, 0, 1, 4, 1, 1, 1, - 1, 0, 2, 1, 2, 2, 1, 2, - 2, 1, 1, 3, 6, 1, 1, 1, - 2, 2, 1, 1, 1, 3, 1, 2, - 3, 1, 1, 2, 2, 3, 1, 3, - 1, 0, 1, 1, 1, 2, 1, 0, - 1, 0, 3, 3, 1, 2, 2, 2, - 0, 5, 1, 1, 1, 4, 1, 1, - 2, 2, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 0, - 1, 1, 0, 1, 0, 0, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 1, 1, 0, 1, 1, 0, - 1, 0, 1, 3, 1, 2, 2, 1, - 0, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 1, 1, 2, 2, 2, 1, - 4, 2, 1, 5, 3, 1, 5, 1, - 3, 2, 1, 3, 7, 5, 3, 3, - 5, 1, 1, 1, 1, 1, 3, 3, - 1, 0, 0, 0, 0, 0, 1, 1, - 1, 3, 2, 4, 1, 1, 2, 1, - 1, 1, 1, 3, 1, 1, 1, 3, - 1, 1, 2, 1, 2, 1, 2, 4, - 3, 4, 4, 2, 0, 0, 1, 3, - 2, 2, 2, 2, 2, 2, 2, 3, - 5, 4, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 4, 1, - 1, 1, 1, 2, 4, 1, 2, 1, - 2, 2, 6, 6, 3, 2, 5, 1, - 3, 2, 3, 5, 3, 3, 1, 3, - 1, 1, 1, 1, 2, 1, 4, 0, - 0, 2, 3, 1, 1, 2, 2, 1, - 2, 1, 1, 2, 1, 2, 1, 1, - 2, 2, 2, 1, 1, 3, 2, 0, - 0, 0, 0, 0, 0, 1, 0, 2, - 1, 0, 2, 0, 1, 1, 3, 1, - 2, 0, 6, 2, 1, 1, 2, 0, - 1, 0, 1, 0, 1, 1, 0, 0, - 2, 1, 1, 1, 2, 3, 1, 1, - 2, 2, 1, 1, 3, 2, 2, 0, - 0, 2, 0, 0, 0, 0, 1, 4, - 1, 1, 1, 1, 0, 2, 1, 2, - 2, 1, 2, 2, 1, 1, 3, 6, - 1, 1, 1, 2, 2, 1, 1, 1, - 3, 1, 2, 3, 1, 1, 2, 2, - 3, 1, 3, 1, 0, 1, 1, 1, - 2, 1, 0, 1, 0, 3, 3, 1, - 2, 2, 2, 0, 5, 1, 1, 1, - 4, 1, 1, 2, 2, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 0, 1, 1, 0, 1, 0, - 0, 1, 0, 1, 0, 1, 1, 0, - 1, 1, 0, 1, 0, 1, 3, 1, - 2, 2, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 0, 1, 1, 2, - 2, 1, 1, 5, 1, 1, 1, 1, - 2, 1, 1, 4, 1, 1, 1, 1, - 2, 4, 1, 2, 1, 2, 2, 6, - 6, 3, 2, 5, 1, 3, 2, 3, - 5, 3, 3, 1, 3, 1, 1, 1, - 1, 2, 1, 4, 0, 0, 2, 3, - 1, 1, 2, 2, 1, 2, 1, 1, - 2, 1, 2, 1, 1, 2, 2, 2, - 1, 1, 3, 2, 0, 1, 1, 1, - 0, 1, 0, 1, 1, 0, 2, 1, - 1, 1, 2, 3, 1, 1, 2, 2, - 1, 1, 3, 2, 2, 0, 0, 2, - 0, 0, 0, 0, 1, 4, 1, 1, - 1, 1, 0, 2, 1, 2, 2, 1, - 2, 2, 1, 1, 3, 6, 1, 1, - 1, 2, 2, 1, 1, 1, 3, 1, - 2, 3, 1, 1, 2, 2, 3, 1, - 3, 1, 0, 1, 1, 1, 2, 1, - 0, 1, 0, 3, 3, 1, 2, 2, - 2, 0, 5, 1, 1, 1, 0, 1, - 0, 1, 1, 1, 0, 3, 1, 5, - 3, 1, 5, 1, 3, 2, 1, 3, - 7, 5, 3, 3, 5, 1, 1, 1, - 1, 1, 3, 3, 1, 0, 0, 0, - 0, 0, 1, 1, 1, 3, 2, 4, - 1, 1, 3, 1, 1, 1, 1, 3, - 1, 1, 1, 3, 1, 1, 3, 1, - 3, 1, 3, 4, 3, 4, 4, 2, - 1, 1, 1, 1, 2, 1, 1, 4, - 1, 1, 1, 1, 2, 4, 1, 2, - 1, 2, 2, 6, 6, 3, 2, 5, - 1, 3, 2, 3, 5, 3, 3, 1, - 3, 1, 1, 1, 1, 2, 1, 4, - 0, 0, 2, 3, 1, 1, 2, 2, - 1, 2, 1, 1, 2, 1, 2, 1, - 1, 2, 2, 2, 1, 1, 3, 2, - 0, 0, 0, 0, 0, 0, 1, 0, - 2, 1, 0, 2, 0, 1, 1, 3, - 1, 2, 0, 6, 2, 1, 1, 2, - 0, 1, 0, 1, 0, 1, 1, 0, - 0, 2, 1, 1, 1, 2, 3, 1, - 1, 2, 2, 1, 1, 3, 2, 2, - 0, 0, 2, 0, 0, 0, 0, 1, - 4, 1, 1, 1, 1, 0, 2, 1, - 2, 2, 1, 2, 2, 1, 1, 3, - 6, 1, 1, 1, 2, 2, 1, 1, - 1, 3, 1, 2, 3, 1, 1, 2, - 2, 3, 1, 3, 1, 0, 1, 1, - 1, 2, 1, 0, 1, 0, 3, 3, - 1, 2, 2, 2, 0, 5, 1, 1, - 1, 4, 1, 1, 2, 2, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 0, 1, 1, 0, 1, - 0, 0, 1, 0, 0, 1, 3, 2, - 2, 2, 2, 2, 2, 2, 3, 5, - 4, 2, 1, 1, 1, 2, 2, 1, - 1, 2, 0, 6, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -} - -var _graphclust_index_offsets []int16 = []int16{ - 0, 0, 2, 4, 6, 8, 11, 15, - 17, 20, 25, 28, 30, 32, 35, 64, - 69, 71, 74, 77, 81, 85, 92, 99, - 105, 109, 115, 118, 123, 126, 132, 138, - 142, 148, 150, 156, 159, 161, 164, 166, - 172, 174, 179, 181, 204, 207, 211, 216, - 218, 221, 224, 226, 229, 231, 234, 237, - 239, 245, 247, 249, 252, 255, 258, 260, - 262, 268, 271, 277, 279, 281, 283, 285, - 287, 290, 292, 294, 310, 313, 315, 317, - 323, 326, 330, 332, 334, 337, 340, 342, - 346, 351, 355, 358, 362, 364, 367, 375, - 384, 386, 388, 390, 396, 398, 400, 402, - 404, 439, 442, 444, 447, 450, 453, 456, - 460, 463, 465, 469, 477, 479, 482, 484, - 487, 490, 492, 494, 496, 500, 503, 507, - 511, 514, 516, 519, 522, 527, 530, 534, - 536, 542, 544, 546, 549, 552, 555, 557, - 559, 566, 570, 574, 576, 579, 582, 586, - 592, 598, 600, 602, 604, 606, 608, 610, - 616, 618, 620, 621, 623, 629, 631, 633, - 635, 638, 642, 644, 647, 652, 655, 657, - 659, 662, 691, 696, 698, 701, 704, 708, - 712, 719, 726, 732, 736, 742, 745, 750, - 753, 759, 765, 769, 775, 777, 783, 786, - 788, 791, 793, 799, 801, 806, 808, 831, - 834, 838, 843, 845, 848, 851, 853, 856, - 858, 861, 864, 866, 872, 874, 876, 879, - 882, 885, 887, 889, 895, 898, 904, 907, - 910, 935, 939, 941, 943, 946, 949, 952, - 954, 958, 960, 963, 966, 970, 972, 975, - 976, 985, 993, 998, 1000, 1003, 1006, 1008, - 1010, 1012, 1016, 1019, 1021, 1024, 1040, 1043, - 1045, 1047, 1053, 1056, 1060, 1062, 1064, 1067, - 1070, 1072, 1076, 1081, 1085, 1088, 1092, 1094, - 1097, 1105, 1114, 1116, 1118, 1120, 1126, 1128, - 1130, 1132, 1134, 1169, 1172, 1174, 1177, 1180, - 1183, 1186, 1190, 1193, 1195, 1199, 1207, 1209, - 1212, 1214, 1217, 1220, 1222, 1224, 1226, 1230, - 1233, 1237, 1241, 1244, 1246, 1249, 1252, 1257, - 1260, 1264, 1266, 1272, 1274, 1276, 1279, 1282, - 1285, 1287, 1289, 1296, 1300, 1304, 1306, 1309, - 1312, 1316, 1322, 1328, 1330, 1332, 1334, 1371, - 1373, 1376, 1379, 1383, 1385, 1391, 1393, 1395, - 1397, 1399, 1401, 1403, 1405, 1408, 1411, 1414, - 1417, 1419, 1425, 1427, 1430, 1432, 1440, 1442, - 1444, 1448, 1450, 1452, 1454, 1457, 1461, 1463, - 1466, 1471, 1474, 1476, 1478, 1481, 1510, 1515, - 1517, 1520, 1523, 1527, 1531, 1538, 1545, 1551, - 1555, 1561, 1564, 1569, 1572, 1578, 1584, 1588, - 1594, 1596, 1602, 1605, 1607, 1610, 1612, 1618, - 1620, 1625, 1627, 1650, 1653, 1657, 1662, 1664, - 1667, 1670, 1672, 1675, 1677, 1680, 1683, 1685, - 1691, 1693, 1695, 1698, 1701, 1704, 1706, 1708, - 1714, 1717, 1723, 1725, 1727, 1729, 1731, 1733, - 1736, 1738, 1740, 1756, 1759, 1761, 1763, 1769, - 1772, 1776, 1778, 1780, 1783, 1786, 1788, 1792, - 1797, 1801, 1804, 1808, 1810, 1813, 1821, 1830, - 1832, 1834, 1836, 1842, 1844, 1846, 1848, 1850, - 1885, 1888, 1890, 1893, 1896, 1899, 1902, 1906, - 1909, 1911, 1915, 1923, 1925, 1928, 1930, 1933, - 1936, 1938, 1940, 1942, 1946, 1949, 1953, 1957, - 1960, 1962, 1965, 1968, 1973, 1976, 1980, 1982, - 1988, 1990, 1992, 1995, 1998, 2001, 2003, 2005, - 2012, 2016, 2020, 2022, 2025, 2028, 2032, 2038, - 2044, 2046, 2048, 2050, 2052, 2054, 2056, 2062, - 2064, 2066, 2067, 2069, 2074, 2076, 2078, 2080, - 2083, 2087, 2089, 2092, 2097, 2100, 2102, 2104, - 2107, 2136, 2141, 2143, 2146, 2149, 2153, 2157, - 2164, 2171, 2177, 2181, 2187, 2190, 2195, 2198, - 2204, 2210, 2214, 2220, 2222, 2228, 2231, 2233, - 2236, 2238, 2244, 2246, 2251, 2253, 2276, 2279, - 2283, 2288, 2290, 2293, 2296, 2298, 2301, 2303, - 2306, 2309, 2311, 2317, 2319, 2321, 2324, 2327, - 2330, 2332, 2334, 2340, 2343, 2349, 2352, 2355, - 2380, 2384, 2386, 2388, 2391, 2394, 2397, 2399, - 2403, 2405, 2408, 2411, 2415, 2417, 2420, 2421, - 2430, 2438, 2443, 2445, 2448, 2451, 2453, 2455, - 2457, 2461, 2464, 2466, 2469, 2485, 2488, 2490, - 2492, 2498, 2501, 2505, 2507, 2509, 2512, 2515, - 2517, 2521, 2526, 2530, 2533, 2537, 2539, 2542, - 2550, 2559, 2561, 2563, 2565, 2571, 2573, 2575, - 2577, 2579, 2614, 2617, 2619, 2622, 2625, 2628, - 2631, 2635, 2638, 2640, 2644, 2652, 2654, 2657, - 2659, 2662, 2665, 2667, 2669, 2671, 2675, 2678, - 2682, 2686, 2689, 2691, 2694, 2697, 2702, 2705, - 2709, 2711, 2717, 2719, 2721, 2724, 2727, 2730, - 2732, 2734, 2741, 2745, 2749, 2751, 2754, 2757, - 2761, 2767, 2773, 2775, 2777, 2779, 2816, 2818, - 2821, 2824, 2828, 2830, 2836, 2838, 2840, 2842, - 2844, 2846, 2848, 2850, 2853, 2856, 2859, 2862, - 2864, 2870, 2872, 2875, 2877, 2885, 2887, 2889, - 2893, 2896, 2899, 2903, 2906, 2909, 2916, 2918, - 2944, 2946, 2972, 2974, 2976, 3001, 3003, 3005, - 3007, 3009, 3012, 3014, 3018, 3020, 3051, 3054, - 3059, 3084, 3087, 3089, 3092, 3095, 3099, 3102, - 3105, 3109, 3110, 3166, 3222, 3252, 3256, 3259, - 3281, 3287, 3291, 3295, 3301, 3306, 3309, 3316, - 3319, 3324, 3329, 3333, 3337, 3347, 3358, 3365, - 3369, 3375, 3379, 3383, 3387, 3391, 3393, 3411, - 3415, 3420, 3423, 3426, 3430, 3433, 3436, 3440, - 3496, 3552, 3583, 3587, 3592, 3596, 3598, 3602, - 3609, 3619, 3622, 3625, 3629, 3632, 3635, 3638, - 3642, 3645, 3648, 3651, 3654, 3657, 3660, 3663, - 3702, 3707, 3712, 3718, 3721, 3729, 3732, 3734, - 3742, 3745, 3748, 3751, 3754, 3757, 3760, 3763, - 3767, 3773, 3778, 3782, 3785, 3787, 3790, 3795, - 3797, 3800, 3803, 3807, 3810, 3813, 3820, 3822, - 3824, 3826, 3828, 3831, 3835, 3837, 3840, 3845, - 3848, 3850, 3852, 3855, 3884, 3889, 3891, 3894, - 3897, 3901, 3905, 3912, 3919, 3925, 3929, 3935, - 3938, 3943, 3946, 3952, 3958, 3962, 3968, 3970, - 3976, 3979, 3981, 3984, 3986, 3992, 3994, 3999, - 4001, 4024, 4027, 4031, 4036, 4038, 4041, 4044, - 4046, 4049, 4051, 4054, 4057, 4059, 4065, 4067, - 4069, 4072, 4075, 4078, 4080, 4082, 4088, 4091, - 4097, 4100, 4103, 4128, 4132, 4134, 4136, 4139, - 4142, 4145, 4147, 4151, 4153, 4156, 4159, 4163, - 4165, 4168, 4169, 4178, 4186, 4191, 4193, 4196, - 4199, 4201, 4203, 4205, 4209, 4212, 4214, 4217, - 4233, 4236, 4238, 4240, 4246, 4249, 4253, 4255, - 4257, 4260, 4263, 4265, 4269, 4274, 4278, 4281, - 4285, 4287, 4290, 4298, 4307, 4309, 4311, 4313, - 4319, 4321, 4323, 4325, 4327, 4362, 4365, 4367, - 4370, 4373, 4376, 4379, 4383, 4386, 4388, 4392, - 4400, 4402, 4405, 4407, 4410, 4413, 4415, 4417, - 4419, 4423, 4426, 4430, 4434, 4437, 4439, 4442, - 4445, 4450, 4453, 4457, 4459, 4465, 4467, 4469, - 4472, 4475, 4478, 4480, 4482, 4489, 4493, 4497, - 4499, 4502, 4505, 4509, 4515, 4521, 4523, 4525, - 4527, 4564, 4566, 4569, 4572, 4576, 4578, 4584, - 4586, 4588, 4590, 4592, 4594, 4596, 4598, 4601, - 4604, 4607, 4610, 4612, 4618, 4620, 4623, 4625, - 4633, 4635, 4637, 4663, 4665, 4691, 4693, 4695, - 4720, 4722, 4724, 4726, 4728, 4731, 4733, 4737, - 4739, 4770, 4773, 4778, 4803, 4806, 4808, 4811, - 4814, 4818, 4821, 4824, 4828, 4829, 4885, 4941, - 4971, 4975, 4978, 5000, 5009, 5011, 5013, 5015, - 5018, 5022, 5024, 5027, 5032, 5035, 5037, 5039, - 5042, 5071, 5076, 5078, 5081, 5084, 5088, 5092, - 5099, 5106, 5112, 5116, 5122, 5125, 5130, 5133, - 5139, 5145, 5149, 5155, 5157, 5163, 5166, 5168, - 5171, 5173, 5179, 5181, 5186, 5188, 5211, 5214, - 5218, 5223, 5225, 5228, 5231, 5233, 5236, 5238, - 5241, 5244, 5246, 5252, 5254, 5256, 5259, 5262, - 5265, 5267, 5269, 5275, 5278, 5284, 5286, 5288, - 5290, 5292, 5294, 5297, 5299, 5301, 5317, 5320, - 5322, 5324, 5330, 5333, 5337, 5339, 5341, 5344, - 5347, 5349, 5353, 5358, 5362, 5365, 5369, 5371, - 5374, 5382, 5391, 5393, 5395, 5397, 5403, 5405, - 5407, 5409, 5411, 5446, 5449, 5451, 5454, 5457, - 5460, 5463, 5467, 5470, 5472, 5476, 5484, 5486, - 5489, 5491, 5494, 5497, 5499, 5501, 5503, 5507, - 5510, 5514, 5518, 5521, 5523, 5526, 5529, 5534, - 5537, 5541, 5543, 5549, 5551, 5553, 5556, 5559, - 5562, 5564, 5566, 5573, 5577, 5581, 5583, 5586, - 5589, 5593, 5599, 5605, 5607, 5609, 5611, 5613, - 5615, 5617, 5623, 5625, 5627, 5628, 5633, 5637, - 5643, 5648, 5651, 5658, 5661, 5666, 5671, 5675, - 5679, 5689, 5700, 5707, 5711, 5717, 5721, 5725, - 5729, 5733, 5735, 5753, 5757, 5762, 5765, 5768, - 5772, 5775, 5778, 5782, 5838, 5894, 5925, 5929, - 5934, 5938, 5941, 5946, 5953, 5963, 5966, 5969, - 5973, 5976, 5979, 5982, 5986, 5989, 5992, 5996, - 5999, 6003, 6006, 6010, 6049, 6054, 6059, 6065, - 6068, 6070, 6072, 6074, 6077, 6081, 6083, 6086, - 6091, 6094, 6096, 6098, 6101, 6130, 6135, 6137, - 6140, 6143, 6147, 6151, 6158, 6165, 6171, 6175, - 6181, 6184, 6189, 6192, 6198, 6204, 6208, 6214, - 6216, 6222, 6225, 6227, 6230, 6232, 6238, 6240, - 6245, 6247, 6270, 6273, 6277, 6282, 6284, 6287, - 6290, 6292, 6295, 6297, 6300, 6303, 6305, 6311, - 6313, 6315, 6318, 6321, 6324, 6326, 6328, 6334, - 6337, 6343, 6346, 6349, 6374, 6378, 6380, 6382, - 6385, 6388, 6391, 6393, 6397, 6399, 6402, 6405, - 6409, 6411, 6414, 6415, 6424, 6432, 6437, 6439, - 6442, 6445, 6447, 6449, 6451, 6455, 6458, 6460, - 6463, 6479, 6482, 6484, 6486, 6492, 6495, 6499, - 6501, 6503, 6506, 6509, 6511, 6515, 6520, 6524, - 6527, 6531, 6533, 6536, 6544, 6553, 6555, 6557, - 6559, 6565, 6567, 6569, 6571, 6573, 6608, 6611, - 6613, 6616, 6619, 6622, 6625, 6629, 6632, 6634, - 6638, 6646, 6648, 6651, 6653, 6656, 6659, 6661, - 6663, 6665, 6669, 6672, 6676, 6680, 6683, 6685, - 6688, 6691, 6696, 6699, 6703, 6705, 6711, 6713, - 6715, 6718, 6721, 6724, 6726, 6728, 6735, 6739, - 6743, 6745, 6748, 6751, 6755, 6761, 6767, 6769, - 6771, 6773, 6810, 6812, 6815, 6818, 6822, 6824, - 6830, 6832, 6834, 6836, 6838, 6840, 6842, 6844, - 6847, 6850, 6853, 6856, 6858, 6864, 6866, 6869, - 6871, 6879, 6881, 6883, 6891, 6894, 6896, 6904, - 6907, 6910, 6913, 6916, 6919, 6922, 6925, 6929, - 6935, 6940, 6944, 6947, 6949, 6952, 6960, 6963, - 6965, 6967, 6970, 6971, 6996, 7017, 7038, 7060, - 7080, 7101, 7122, 7144, 7168, 7190, 7212, 7234, - 7255, 7279, 7300, 7322, 7344, 7366, 7388, 7409, - 7430, 7451, -} - -var _graphclust_indicies []int16 = []int16{ - 0, 1, 3, 2, 2, 3, 3, 2, - 3, 3, 2, 3, 3, 3, 2, 3, - 2, 3, 3, 2, 3, 3, 3, 3, - 2, 3, 3, 2, 2, 3, 3, 2, - 3, 3, 2, 4, 5, 6, 7, 8, - 10, 11, 12, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 9, 13, 2, - 3, 3, 3, 3, 2, 3, 2, 3, - 3, 2, 2, 2, 3, 2, 2, 2, - 3, 3, 3, 3, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 2, - 2, 2, 3, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 2, 3, 3, 3, - 3, 3, 2, 3, 3, 2, 3, 3, - 3, 3, 2, 3, 3, 2, 2, 2, - 2, 2, 2, 3, 3, 3, 3, 3, - 3, 2, 3, 3, 3, 2, 2, 2, - 2, 2, 2, 3, 3, 2, 3, 3, - 3, 3, 3, 2, 3, 3, 2, 3, - 2, 3, 3, 2, 3, 2, 3, 3, - 3, 3, 3, 2, 3, 2, 3, 3, - 3, 3, 2, 3, 2, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 2, 3, 3, 2, 3, - 3, 3, 2, 3, 3, 3, 3, 2, - 3, 2, 3, 3, 2, 3, 3, 2, - 3, 2, 2, 2, 3, 3, 2, 3, - 3, 2, 3, 3, 2, 3, 2, 3, - 3, 3, 3, 3, 2, 3, 2, 2, - 3, 3, 3, 2, 2, 2, 3, 3, - 3, 2, 3, 2, 3, 2, 3, 3, - 3, 3, 3, 2, 3, 3, 2, 54, - 55, 56, 57, 58, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 59, - 60, 2, 3, 2, 3, 2, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 2, 3, 3, - 2, 3, 2, 3, 2, 3, 3, 3, - 3, 3, 2, 3, 3, 2, 2, 2, - 2, 3, 3, 2, 3, 2, 3, 3, - 2, 2, 2, 3, 3, 2, 3, 3, - 3, 2, 3, 3, 3, 3, 2, 3, - 3, 3, 2, 3, 3, 2, 76, 77, - 62, 2, 3, 2, 3, 3, 2, 78, - 79, 80, 81, 82, 83, 84, 2, 85, - 86, 87, 88, 89, 90, 91, 92, 2, - 3, 2, 3, 2, 3, 2, 3, 3, - 3, 3, 3, 2, 3, 2, 3, 2, - 3, 2, 3, 2, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, - 105, 45, 106, 107, 108, 45, 46, 109, - 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 2, 3, - 3, 2, 2, 3, 2, 2, 3, 3, - 3, 2, 3, 3, 2, 3, 3, 2, - 2, 2, 2, 3, 3, 3, 2, 3, - 2, 3, 3, 3, 2, 3, 3, 3, - 3, 3, 3, 3, 2, 3, 2, 3, - 3, 2, 2, 3, 3, 3, 2, 2, - 2, 3, 3, 2, 3, 2, 3, 2, - 3, 3, 3, 2, 3, 3, 2, 3, - 3, 3, 2, 3, 3, 3, 2, 3, - 3, 2, 3, 2, 3, 3, 2, 3, - 3, 2, 3, 3, 3, 3, 2, 2, - 2, 3, 3, 3, 3, 2, 3, 2, - 124, 125, 126, 127, 128, 2, 3, 2, - 3, 2, 3, 3, 2, 2, 2, 3, - 3, 3, 2, 129, 2, 3, 2, 130, - 131, 132, 133, 134, 135, 2, 3, 3, - 3, 2, 2, 2, 2, 3, 3, 2, - 3, 3, 2, 2, 2, 3, 3, 3, - 3, 2, 136, 125, 137, 138, 139, 2, - 3, 3, 3, 3, 3, 2, 3, 2, - 3, 2, 3, 2, 140, 2, 3, 2, - 141, 2, 142, 143, 144, 146, 145, 2, - 3, 2, 2, 3, 3, 3, 1, 148, - 147, 148, 147, 3, 1, 149, 148, 150, - 148, 148, 150, 148, 148, 150, 148, 148, - 148, 150, 148, 150, 148, 148, 150, 148, - 148, 148, 148, 150, 148, 148, 150, 150, - 148, 148, 150, 148, 148, 150, 151, 152, - 153, 154, 155, 157, 158, 159, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, - 156, 160, 150, 148, 148, 148, 148, 150, - 148, 150, 148, 148, 150, 150, 150, 148, - 150, 150, 150, 148, 148, 148, 148, 150, - 150, 150, 150, 150, 150, 150, 148, 150, - 150, 150, 150, 150, 150, 148, 150, 150, - 150, 150, 150, 148, 148, 148, 148, 150, - 148, 148, 148, 148, 148, 150, 148, 148, - 150, 148, 148, 148, 148, 150, 148, 148, - 150, 150, 150, 150, 150, 150, 148, 148, - 148, 148, 148, 148, 150, 148, 148, 148, - 150, 150, 150, 150, 150, 150, 148, 148, - 150, 148, 148, 148, 148, 148, 150, 148, - 148, 150, 148, 150, 148, 148, 150, 148, - 150, 148, 148, 148, 148, 148, 150, 148, - 150, 148, 148, 148, 148, 150, 148, 150, - 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 150, 148, - 148, 150, 148, 148, 148, 150, 148, 148, - 148, 148, 150, 148, 150, 148, 148, 150, - 148, 148, 150, 148, 150, 150, 150, 148, - 148, 150, 148, 148, 150, 148, 148, 150, - 148, 150, 148, 148, 148, 148, 148, 150, - 148, 150, 150, 148, 148, 148, 150, 150, - 150, 148, 148, 148, 150, 148, 150, 148, - 150, 148, 148, 148, 148, 148, 150, 148, - 148, 150, 201, 202, 203, 204, 205, 150, - 148, 206, 150, 148, 148, 150, 207, 208, - 202, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 203, 204, 205, 150, 148, - 206, 148, 150, 148, 150, 148, 150, 148, - 148, 150, 148, 148, 150, 148, 148, 150, - 148, 150, 148, 148, 148, 150, 148, 150, - 148, 148, 150, 148, 148, 150, 148, 148, - 148, 150, 148, 149, 148, 148, 150, 148, - 150, 150, 150, 150, 150, 150, 150, 150, - 148, 148, 148, 148, 148, 148, 148, 148, - 150, 148, 148, 148, 148, 150, 148, 150, - 148, 148, 150, 148, 148, 150, 148, 150, - 148, 150, 148, 150, 227, 228, 229, 150, - 148, 148, 150, 148, 150, 148, 148, 150, - 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 150, - 148, 148, 150, 148, 150, 148, 150, 148, - 148, 148, 148, 148, 150, 148, 148, 150, - 150, 150, 150, 148, 148, 150, 148, 150, - 148, 148, 150, 150, 150, 148, 148, 150, - 148, 148, 148, 150, 148, 148, 148, 148, - 150, 148, 148, 148, 150, 148, 148, 150, - 245, 246, 231, 150, 148, 150, 148, 148, - 150, 247, 248, 249, 250, 251, 252, 253, - 150, 254, 255, 256, 257, 258, 259, 260, - 261, 150, 148, 150, 148, 150, 148, 150, - 148, 148, 148, 148, 148, 150, 148, 150, - 148, 150, 148, 150, 148, 150, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 192, 275, 276, 277, 192, - 193, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, - 150, 148, 148, 150, 150, 148, 150, 150, - 148, 148, 148, 150, 148, 148, 150, 148, - 148, 150, 150, 150, 150, 148, 148, 148, - 150, 148, 150, 148, 148, 148, 150, 148, - 148, 148, 148, 148, 148, 148, 150, 148, - 150, 148, 148, 150, 150, 148, 148, 148, - 150, 150, 150, 148, 148, 150, 148, 150, - 148, 150, 148, 148, 148, 150, 148, 148, - 150, 148, 148, 148, 150, 148, 148, 148, - 150, 148, 148, 150, 148, 150, 148, 148, - 150, 148, 148, 150, 148, 148, 148, 148, - 150, 150, 150, 148, 148, 148, 148, 150, - 148, 150, 293, 294, 295, 296, 297, 150, - 148, 150, 148, 150, 148, 148, 150, 150, - 150, 148, 148, 148, 150, 298, 150, 148, - 150, 299, 300, 301, 302, 303, 304, 150, - 148, 148, 148, 150, 150, 150, 150, 148, - 148, 150, 148, 148, 150, 150, 150, 148, - 148, 148, 148, 150, 305, 294, 306, 307, - 308, 150, 148, 148, 148, 148, 148, 150, - 148, 150, 148, 150, 148, 150, 309, 310, - 311, 312, 313, 314, 315, 316, 310, 309, - 310, 309, 310, 218, 309, 317, 318, 310, - 309, 319, 320, 321, 322, 323, 324, 310, - 325, 326, 309, 310, 309, 317, 220, 218, - 218, 220, 150, 149, 148, 148, 148, 150, - 148, 148, 150, 148, 148, 148, 150, 150, - 148, 148, 148, 148, 148, 148, 150, 148, - 150, 150, 148, 148, 150, 150, 148, 148, - 150, 148, 150, 148, 150, 148, 148, 150, - 148, 148, 150, 148, 148, 150, 148, 148, - 150, 327, 150, 328, 310, 309, 329, 220, - 150, 148, 150, 330, 228, 150, 148, 150, - 247, 248, 249, 250, 251, 252, 331, 150, - 332, 150, 148, 150, 147, 333, 3, 1, - 335, 334, 334, 335, 335, 334, 335, 335, - 334, 335, 335, 335, 334, 335, 334, 335, - 335, 334, 335, 335, 335, 335, 334, 335, - 335, 334, 334, 335, 335, 334, 335, 335, - 334, 336, 337, 338, 339, 340, 342, 343, - 344, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 341, 345, 334, 335, 335, - 335, 335, 334, 335, 334, 335, 335, 334, - 334, 334, 335, 334, 334, 334, 335, 335, - 335, 335, 334, 334, 334, 334, 334, 334, - 334, 335, 334, 334, 334, 334, 334, 334, - 335, 334, 334, 334, 334, 334, 335, 335, - 335, 335, 334, 335, 335, 335, 335, 335, - 334, 335, 335, 334, 335, 335, 335, 335, - 334, 335, 335, 334, 334, 334, 334, 334, - 334, 335, 335, 335, 335, 335, 335, 334, - 335, 335, 335, 334, 334, 334, 334, 334, - 334, 335, 335, 334, 335, 335, 335, 335, - 335, 334, 335, 335, 334, 335, 334, 335, - 335, 334, 335, 334, 335, 335, 335, 335, - 335, 334, 335, 334, 335, 335, 335, 335, - 334, 335, 334, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, - 385, 334, 335, 335, 334, 335, 335, 335, - 334, 335, 335, 335, 335, 334, 335, 334, - 335, 335, 334, 335, 335, 334, 335, 334, - 334, 334, 335, 335, 334, 335, 335, 334, - 335, 335, 334, 335, 334, 335, 335, 335, - 335, 335, 334, 335, 334, 334, 335, 335, - 335, 334, 334, 334, 335, 335, 335, 334, - 335, 334, 335, 334, 335, 335, 335, 335, - 335, 334, 335, 335, 334, 386, 387, 388, - 389, 390, 334, 335, 334, 335, 334, 335, - 334, 335, 334, 335, 334, 391, 392, 334, - 335, 334, 335, 334, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 334, 335, 335, 334, 335, - 334, 335, 334, 335, 335, 335, 335, 335, - 334, 335, 335, 334, 334, 334, 334, 335, - 335, 334, 335, 334, 335, 335, 334, 334, - 334, 335, 335, 334, 335, 335, 335, 334, - 335, 335, 335, 335, 334, 335, 335, 335, - 334, 335, 335, 334, 408, 409, 394, 334, - 335, 334, 335, 335, 334, 410, 411, 412, - 413, 414, 415, 416, 334, 417, 418, 419, - 420, 421, 422, 423, 424, 334, 335, 334, - 335, 334, 335, 334, 335, 335, 335, 335, - 335, 334, 335, 334, 335, 334, 335, 334, - 335, 334, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 377, - 438, 439, 440, 377, 378, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 334, 335, 335, 334, - 334, 335, 334, 334, 335, 335, 335, 334, - 335, 335, 334, 335, 335, 334, 334, 334, - 334, 335, 335, 335, 334, 335, 334, 335, - 335, 335, 334, 335, 335, 335, 335, 335, - 335, 335, 334, 335, 334, 335, 335, 334, - 334, 335, 335, 335, 334, 334, 334, 335, - 335, 334, 335, 334, 335, 334, 335, 335, - 335, 334, 335, 335, 334, 335, 335, 335, - 334, 335, 335, 335, 334, 335, 335, 334, - 335, 334, 335, 335, 334, 335, 335, 334, - 335, 335, 335, 335, 334, 334, 334, 335, - 335, 335, 335, 334, 335, 334, 456, 457, - 458, 459, 460, 334, 335, 334, 335, 334, - 335, 335, 334, 334, 334, 335, 335, 335, - 334, 461, 334, 335, 334, 462, 463, 464, - 465, 466, 467, 334, 335, 335, 335, 334, - 334, 334, 334, 335, 335, 334, 335, 335, - 334, 334, 334, 335, 335, 335, 335, 334, - 468, 457, 469, 470, 471, 334, 335, 335, - 335, 335, 335, 334, 335, 334, 335, 334, - 335, 334, 472, 334, 335, 334, 473, 334, - 474, 475, 476, 478, 477, 334, 335, 334, - 334, 335, 335, 335, 334, 479, 479, 335, - 335, 334, 479, 334, 334, 479, 479, 334, - 479, 479, 334, 479, 479, 479, 334, 479, - 334, 479, 479, 334, 479, 479, 479, 479, - 334, 479, 479, 334, 334, 479, 479, 334, - 479, 479, 334, 480, 481, 482, 483, 484, - 486, 487, 488, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 485, 489, 334, - 479, 479, 479, 479, 334, 479, 334, 479, - 479, 334, 334, 334, 479, 334, 334, 334, - 479, 479, 479, 479, 334, 334, 334, 334, - 334, 334, 334, 479, 334, 334, 334, 334, - 334, 334, 479, 334, 334, 334, 334, 334, - 479, 479, 479, 479, 334, 479, 479, 479, - 479, 479, 334, 479, 479, 334, 479, 479, - 479, 479, 334, 479, 479, 334, 334, 334, - 334, 334, 334, 479, 479, 479, 479, 479, - 479, 334, 479, 479, 479, 334, 334, 334, - 334, 334, 334, 479, 479, 334, 479, 479, - 479, 479, 479, 334, 479, 479, 334, 479, - 334, 479, 479, 334, 479, 334, 479, 479, - 479, 479, 479, 334, 479, 334, 479, 479, - 479, 479, 334, 479, 334, 508, 509, 510, - 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, - 527, 528, 529, 334, 479, 479, 334, 479, - 479, 479, 334, 479, 479, 479, 479, 334, - 479, 334, 479, 479, 334, 479, 479, 334, - 479, 334, 334, 334, 479, 479, 334, 479, - 479, 334, 479, 479, 334, 479, 334, 479, - 479, 479, 479, 479, 334, 479, 334, 334, - 479, 479, 479, 334, 334, 334, 479, 479, - 479, 334, 479, 334, 479, 334, 479, 479, - 479, 479, 479, 334, 479, 479, 334, 530, - 531, 532, 533, 534, 334, 479, 535, 334, - 479, 479, 334, 536, 537, 531, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 547, - 548, 549, 550, 551, 552, 553, 554, 555, - 532, 533, 534, 334, 479, 535, 479, 334, - 479, 334, 479, 334, 479, 479, 334, 479, - 479, 334, 479, 479, 334, 479, 334, 479, - 479, 479, 334, 479, 334, 479, 479, 334, - 479, 479, 334, 479, 479, 479, 334, 479, - 334, 479, 479, 334, 479, 334, 334, 334, - 334, 334, 334, 334, 334, 479, 479, 479, - 479, 479, 479, 479, 479, 334, 479, 479, - 479, 479, 334, 479, 334, 479, 479, 334, - 479, 479, 334, 479, 334, 479, 334, 479, - 334, 556, 557, 558, 334, 479, 479, 334, - 479, 334, 479, 479, 334, 559, 560, 561, - 562, 563, 564, 565, 566, 567, 568, 569, - 570, 571, 572, 573, 334, 479, 479, 334, - 479, 334, 479, 334, 479, 479, 479, 479, - 479, 334, 479, 479, 334, 334, 334, 334, - 479, 479, 334, 479, 334, 479, 479, 334, - 334, 334, 479, 479, 334, 479, 479, 479, - 334, 479, 479, 479, 479, 334, 479, 479, - 479, 334, 479, 479, 334, 574, 575, 560, - 334, 479, 334, 479, 479, 334, 576, 577, - 578, 579, 580, 581, 582, 334, 583, 584, - 585, 586, 587, 588, 589, 590, 334, 479, - 334, 479, 334, 479, 334, 479, 479, 479, - 479, 479, 334, 479, 334, 479, 334, 479, - 334, 479, 334, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, - 521, 604, 605, 606, 521, 522, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, - 617, 618, 619, 620, 621, 334, 479, 479, - 334, 334, 479, 334, 334, 479, 479, 479, - 334, 479, 479, 334, 479, 479, 334, 334, - 334, 334, 479, 479, 479, 334, 479, 334, - 479, 479, 479, 334, 479, 479, 479, 479, - 479, 479, 479, 334, 479, 334, 479, 479, - 334, 334, 479, 479, 479, 334, 334, 334, - 479, 479, 334, 479, 334, 479, 334, 479, - 479, 479, 334, 479, 479, 334, 479, 479, - 479, 334, 479, 479, 479, 334, 479, 479, - 334, 479, 334, 479, 479, 334, 479, 479, - 334, 479, 479, 479, 479, 334, 334, 334, - 479, 479, 479, 479, 334, 479, 334, 622, - 623, 624, 625, 626, 334, 479, 334, 479, - 334, 479, 479, 334, 334, 334, 479, 479, - 479, 334, 627, 334, 479, 334, 628, 629, - 630, 631, 632, 633, 334, 479, 479, 479, - 334, 334, 334, 334, 479, 479, 334, 479, - 479, 334, 334, 334, 479, 479, 479, 479, - 334, 634, 623, 635, 636, 637, 334, 479, - 479, 479, 479, 479, 334, 479, 334, 479, - 334, 479, 334, 638, 639, 640, 641, 642, - 643, 644, 645, 639, 638, 639, 638, 639, - 547, 638, 646, 647, 639, 638, 648, 649, - 650, 651, 652, 653, 639, 654, 655, 638, - 639, 638, 646, 549, 547, 547, 549, 334, - 334, 479, 479, 479, 334, 479, 479, 334, - 479, 479, 479, 334, 334, 479, 479, 479, - 479, 479, 479, 334, 479, 334, 334, 479, - 479, 334, 334, 479, 479, 334, 479, 334, - 479, 334, 479, 479, 334, 479, 479, 334, - 479, 479, 334, 479, 479, 334, 656, 334, - 657, 639, 638, 658, 549, 334, 479, 334, - 659, 557, 334, 479, 334, 576, 577, 578, - 579, 580, 581, 660, 334, 661, 334, 479, - 334, 333, 335, 335, 334, 333, 335, 334, - 333, 335, 334, 663, 664, 662, 334, 333, - 335, 334, 333, 335, 334, 665, 666, 667, - 668, 669, 662, 334, 670, 334, 508, 509, - 510, 665, 666, 671, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 529, 334, - 672, 670, 508, 509, 510, 673, 667, 668, - 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, - 527, 528, 529, 334, 672, 334, 674, 672, - 508, 509, 510, 675, 668, 511, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, - 334, 674, 334, 334, 674, 676, 334, 674, - 334, 677, 678, 334, 672, 334, 334, 674, - 334, 672, 334, 672, 559, 560, 561, 562, - 563, 564, 565, 679, 567, 568, 569, 570, - 571, 572, 573, 681, 682, 683, 684, 685, - 686, 681, 682, 683, 684, 685, 686, 681, - 680, 687, 334, 479, 670, 334, 688, 688, - 688, 674, 334, 508, 509, 510, 673, 671, - 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, - 527, 528, 529, 334, 677, 689, 334, 334, - 672, 688, 688, 674, 688, 688, 674, 688, - 688, 688, 674, 688, 688, 674, 688, 688, - 674, 688, 688, 334, 674, 674, 683, 684, - 685, 686, 680, 681, 683, 684, 685, 686, - 680, 681, 683, 684, 685, 686, 680, 681, - 683, 684, 685, 686, 680, 681, 683, 684, - 685, 686, 680, 681, 683, 684, 685, 686, - 680, 681, 683, 684, 685, 686, 680, 681, - 683, 684, 685, 686, 680, 681, 683, 684, - 685, 686, 680, 681, 682, 687, 684, 685, - 686, 680, 681, 682, 684, 685, 686, 680, - 681, 682, 684, 685, 686, 680, 681, 682, - 684, 685, 686, 680, 681, 682, 684, 685, - 686, 680, 681, 682, 684, 685, 686, 680, - 681, 682, 684, 685, 686, 680, 681, 682, - 684, 685, 686, 680, 681, 682, 684, 685, - 686, 680, 681, 682, 683, 687, 685, 686, - 680, 681, 682, 683, 685, 686, 680, 681, - 682, 683, 685, 686, 680, 681, 682, 683, - 685, 686, 680, 681, 682, 683, 685, 690, - 689, 684, 334, 687, 688, 334, 672, 674, - 335, 335, 334, 691, 692, 693, 694, 695, - 696, 697, 698, 699, 700, 701, 547, 702, - 549, 703, 704, 705, 706, 707, 708, 662, - 334, 479, 335, 335, 335, 335, 334, 479, - 335, 335, 334, 479, 479, 335, 334, 335, - 479, 335, 479, 335, 334, 479, 335, 479, - 335, 334, 479, 335, 334, 479, 335, 479, - 335, 479, 335, 334, 479, 335, 334, 479, - 335, 479, 335, 334, 479, 335, 335, 479, - 334, 335, 335, 479, 334, 479, 335, 479, - 334, 335, 335, 335, 335, 335, 335, 335, - 335, 334, 479, 479, 479, 479, 479, 335, - 335, 479, 335, 479, 335, 334, 479, 479, - 479, 335, 479, 335, 334, 335, 479, 335, - 334, 335, 479, 335, 479, 335, 334, 479, - 479, 335, 334, 709, 710, 662, 334, 479, - 479, 335, 334, 479, 479, 335, 334, 662, - 334, 711, 713, 714, 715, 716, 717, 718, - 713, 714, 715, 716, 717, 718, 713, 662, - 712, 687, 334, 335, 670, 335, 334, 672, - 672, 672, 674, 334, 672, 672, 674, 672, - 672, 674, 672, 672, 672, 674, 672, 672, - 674, 672, 672, 674, 672, 672, 334, 674, - 715, 716, 717, 718, 712, 713, 715, 716, - 717, 718, 712, 713, 715, 716, 717, 718, - 712, 713, 715, 716, 717, 718, 712, 713, - 715, 716, 717, 718, 712, 713, 715, 716, - 717, 718, 712, 713, 715, 716, 717, 718, - 712, 713, 715, 716, 717, 718, 712, 713, - 715, 716, 717, 718, 712, 713, 714, 687, - 716, 717, 718, 712, 713, 714, 716, 717, - 718, 712, 713, 714, 716, 717, 718, 712, - 713, 714, 716, 717, 718, 712, 713, 714, - 716, 717, 718, 712, 713, 714, 716, 717, - 718, 712, 713, 714, 716, 717, 718, 712, - 713, 714, 716, 717, 718, 712, 713, 714, - 716, 717, 718, 712, 713, 714, 715, 687, - 717, 718, 712, 713, 714, 715, 717, 718, - 712, 713, 714, 715, 717, 718, 712, 713, - 714, 715, 717, 718, 712, 713, 714, 715, - 717, 719, 720, 716, 662, 334, 687, 672, - 335, 672, 674, 335, 674, 335, 334, 672, - 721, 722, 662, 334, 335, 334, 335, 335, - 335, 334, 724, 725, 726, 727, 728, 723, - 334, 729, 730, 731, 732, 733, 734, 735, - 736, 662, 334, 333, 335, 334, 333, 335, - 334, 335, 333, 335, 334, 333, 335, 334, - 333, 335, 334, 333, 335, 334, 335, 333, - 335, 334, 333, 335, 334, 737, 662, 334, - 335, 335, 334, 738, 662, 334, 335, 335, - 334, 739, 662, 334, 335, 335, 334, 638, - 639, 740, 741, 742, 743, 744, 745, 639, - 638, 639, 638, 746, 547, 638, 747, 748, - 639, 638, 749, 662, 750, 662, 751, 752, - 753, 754, 639, 755, 756, 638, 639, 638, - 747, 549, 547, 662, 549, 334, 479, 335, - 479, 335, 334, 335, 479, 335, 479, 334, - 479, 335, 479, 335, 479, 334, 757, 334, - 479, 576, 577, 578, 579, 580, 581, 758, - 334, 759, 661, 334, 479, 334, 335, 479, - 479, 335, 479, 335, 479, 334, 335, 479, - 334, 335, 334, 479, 335, 334, 479, 335, - 479, 334, 335, 334, 479, 335, 479, 334, - 335, 479, 334, 335, 479, 335, 334, 335, - 479, 335, 479, 335, 334, 335, 479, 335, - 479, 334, 335, 335, 479, 334, 335, 479, - 334, 723, 334, 760, 723, 334, 390, 662, - 761, 662, 334, 335, 334, 333, 3, 1, - 333, 3, 1, 763, 764, 762, 1, 333, - 3, 1, 333, 3, 1, 765, 766, 767, - 768, 769, 762, 1, 770, 149, 772, 771, - 771, 772, 772, 771, 772, 772, 771, 772, - 772, 772, 771, 772, 771, 772, 772, 771, - 772, 772, 772, 772, 771, 772, 772, 771, - 771, 772, 772, 771, 772, 772, 771, 773, - 774, 775, 776, 777, 779, 780, 781, 783, - 784, 785, 786, 787, 788, 789, 790, 791, - 792, 793, 794, 795, 796, 797, 798, 799, - 800, 778, 782, 771, 772, 772, 772, 772, - 771, 772, 771, 772, 772, 771, 771, 771, - 772, 771, 771, 771, 772, 772, 772, 772, - 771, 771, 771, 771, 771, 771, 771, 772, - 771, 771, 771, 771, 771, 771, 772, 771, - 771, 771, 771, 771, 772, 772, 772, 772, - 771, 772, 772, 772, 772, 772, 771, 772, - 772, 771, 772, 772, 772, 772, 771, 772, - 772, 771, 771, 771, 771, 771, 771, 772, - 772, 772, 772, 772, 772, 771, 772, 772, - 772, 771, 771, 771, 771, 771, 771, 772, - 772, 771, 772, 772, 772, 772, 772, 771, - 772, 772, 771, 772, 771, 772, 772, 771, - 772, 771, 772, 772, 772, 772, 772, 771, - 772, 771, 772, 772, 772, 772, 771, 772, - 771, 801, 802, 803, 804, 805, 806, 807, - 808, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822, 771, - 772, 772, 771, 772, 772, 772, 771, 772, - 772, 772, 772, 771, 772, 771, 772, 772, - 771, 772, 772, 771, 772, 771, 771, 771, - 772, 772, 771, 772, 772, 771, 772, 772, - 771, 772, 771, 772, 772, 772, 772, 772, - 771, 772, 771, 771, 772, 772, 772, 771, - 771, 771, 772, 772, 772, 771, 772, 771, - 772, 771, 772, 772, 772, 772, 772, 771, - 772, 772, 771, 823, 824, 825, 826, 827, - 771, 772, 828, 771, 772, 772, 771, 829, - 830, 824, 831, 832, 833, 834, 835, 836, - 837, 838, 839, 840, 841, 842, 843, 844, - 845, 846, 847, 848, 825, 826, 827, 771, - 772, 828, 772, 771, 772, 771, 772, 771, - 772, 772, 771, 772, 772, 771, 772, 772, - 771, 772, 771, 772, 772, 772, 771, 772, - 771, 772, 772, 771, 772, 772, 771, 772, - 772, 772, 771, 772, 771, 772, 772, 771, - 772, 771, 771, 771, 771, 771, 771, 771, - 771, 772, 772, 772, 772, 772, 772, 772, - 772, 771, 772, 772, 772, 772, 771, 772, - 771, 772, 772, 771, 772, 772, 771, 772, - 771, 772, 771, 772, 771, 849, 850, 851, - 771, 772, 772, 771, 772, 771, 772, 772, - 771, 852, 853, 854, 855, 856, 857, 858, - 859, 860, 861, 862, 863, 864, 865, 866, - 771, 772, 772, 771, 772, 771, 772, 771, - 772, 772, 772, 772, 772, 771, 772, 772, - 771, 771, 771, 771, 772, 772, 771, 772, - 771, 772, 772, 771, 771, 771, 772, 772, - 771, 772, 772, 772, 771, 772, 772, 772, - 772, 771, 772, 772, 772, 771, 772, 772, - 771, 867, 868, 853, 771, 772, 771, 772, - 772, 771, 869, 870, 871, 872, 873, 874, - 875, 771, 876, 877, 878, 879, 880, 881, - 882, 883, 771, 772, 771, 772, 771, 772, - 771, 772, 772, 772, 772, 772, 771, 772, - 771, 772, 771, 772, 771, 772, 771, 884, - 885, 886, 887, 888, 889, 890, 891, 892, - 893, 894, 895, 896, 814, 897, 898, 899, - 814, 815, 900, 901, 902, 903, 904, 905, - 906, 907, 908, 909, 910, 911, 912, 913, - 914, 771, 772, 772, 771, 771, 772, 771, - 771, 772, 772, 772, 771, 772, 772, 771, - 772, 772, 771, 771, 771, 771, 772, 772, - 772, 771, 772, 771, 772, 772, 772, 771, - 772, 772, 772, 772, 772, 772, 772, 771, - 772, 771, 772, 772, 771, 771, 772, 772, - 772, 771, 771, 771, 772, 772, 771, 772, - 771, 772, 771, 772, 772, 772, 771, 772, - 772, 771, 772, 772, 772, 771, 772, 772, - 772, 771, 772, 772, 771, 772, 771, 772, - 772, 771, 772, 772, 771, 772, 772, 772, - 772, 771, 771, 771, 772, 772, 772, 772, - 771, 772, 771, 915, 916, 917, 918, 919, - 771, 772, 771, 772, 771, 772, 772, 771, - 771, 771, 772, 772, 772, 771, 920, 771, - 772, 771, 921, 922, 923, 924, 925, 926, - 771, 772, 772, 772, 771, 771, 771, 771, - 772, 772, 771, 772, 772, 771, 771, 771, - 772, 772, 772, 772, 771, 927, 916, 928, - 929, 930, 771, 772, 772, 772, 772, 772, - 771, 772, 771, 772, 771, 772, 771, 931, - 932, 933, 934, 935, 936, 937, 938, 932, - 931, 932, 931, 932, 840, 931, 939, 940, - 932, 931, 941, 942, 943, 944, 945, 946, - 932, 947, 948, 931, 932, 931, 939, 842, - 840, 840, 842, 771, 771, 772, 772, 772, - 771, 772, 772, 771, 772, 772, 772, 771, - 771, 772, 772, 772, 772, 772, 772, 771, - 772, 771, 771, 772, 772, 771, 771, 772, - 772, 771, 772, 771, 772, 771, 772, 772, - 771, 772, 772, 771, 772, 772, 771, 772, - 772, 771, 949, 771, 950, 932, 931, 951, - 842, 771, 772, 771, 952, 850, 771, 772, - 771, 869, 870, 871, 872, 873, 874, 953, - 771, 954, 771, 772, 771, 801, 802, 803, - 765, 766, 955, 804, 805, 806, 807, 808, - 809, 810, 811, 812, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 771, 956, - 770, 801, 802, 803, 957, 767, 768, 804, - 805, 806, 807, 808, 809, 810, 811, 812, - 813, 814, 815, 816, 817, 818, 819, 820, - 821, 822, 771, 956, 771, 958, 956, 801, - 802, 803, 959, 768, 804, 805, 806, 807, - 808, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822, 771, - 958, 771, 149, 958, 960, 771, 958, 771, - 961, 962, 771, 956, 771, 771, 958, 771, - 956, 771, 956, 852, 853, 854, 855, 856, - 857, 858, 963, 860, 861, 862, 863, 864, - 865, 866, 965, 966, 967, 968, 969, 970, - 965, 966, 967, 968, 969, 970, 965, 964, - 971, 771, 772, 770, 771, 972, 972, 972, - 958, 771, 801, 802, 803, 957, 955, 804, - 805, 806, 807, 808, 809, 810, 811, 812, - 813, 814, 815, 816, 817, 818, 819, 820, - 821, 822, 771, 961, 973, 771, 771, 956, - 972, 972, 958, 972, 972, 958, 972, 972, - 972, 958, 972, 972, 958, 972, 972, 958, - 972, 972, 771, 958, 958, 967, 968, 969, - 970, 964, 965, 967, 968, 969, 970, 964, - 965, 967, 968, 969, 970, 964, 965, 967, - 968, 969, 970, 964, 965, 967, 968, 969, - 970, 964, 965, 967, 968, 969, 970, 964, - 965, 967, 968, 969, 970, 964, 965, 967, - 968, 969, 970, 964, 965, 967, 968, 969, - 970, 964, 965, 966, 971, 968, 969, 970, - 964, 965, 966, 968, 969, 970, 964, 965, - 966, 968, 969, 970, 964, 965, 966, 968, - 969, 970, 964, 965, 966, 968, 969, 970, - 964, 965, 966, 968, 969, 970, 964, 965, - 966, 968, 969, 970, 964, 965, 966, 968, - 969, 970, 964, 965, 966, 968, 969, 970, - 964, 965, 966, 967, 971, 969, 970, 964, - 965, 966, 967, 969, 970, 964, 965, 966, - 967, 969, 970, 964, 965, 966, 967, 969, - 970, 964, 965, 966, 967, 969, 974, 973, - 968, 771, 971, 972, 771, 956, 958, 147, - 3, 1, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 218, 986, 220, - 987, 988, 989, 990, 991, 992, 762, 1, - 147, 993, 148, 3, 147, 3, 147, 3, - 1, 993, 994, 994, 993, 993, 994, 993, - 993, 994, 993, 993, 993, 994, 993, 994, - 993, 993, 994, 993, 993, 993, 993, 994, - 993, 993, 994, 994, 993, 993, 994, 993, - 993, 994, 995, 996, 997, 998, 999, 1001, - 1002, 1003, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, - 1019, 1020, 1021, 1022, 1000, 1004, 994, 993, - 993, 993, 993, 994, 993, 994, 993, 993, - 994, 994, 994, 993, 994, 994, 994, 993, - 993, 993, 993, 994, 994, 994, 994, 994, - 994, 994, 993, 994, 994, 994, 994, 994, - 994, 993, 994, 994, 994, 994, 994, 993, - 993, 993, 993, 994, 993, 993, 993, 993, - 993, 994, 993, 993, 994, 993, 993, 993, - 993, 994, 993, 993, 994, 994, 994, 994, - 994, 994, 993, 993, 993, 993, 993, 993, - 994, 993, 993, 993, 994, 994, 994, 994, - 994, 994, 993, 993, 994, 993, 993, 993, - 993, 993, 994, 993, 993, 994, 993, 994, - 993, 993, 994, 993, 994, 993, 993, 993, - 993, 993, 994, 993, 994, 993, 993, 993, - 993, 994, 993, 994, 1023, 1024, 1025, 1026, - 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, - 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, - 1043, 1044, 994, 993, 993, 994, 993, 993, - 993, 994, 993, 993, 993, 993, 994, 993, - 994, 993, 993, 994, 993, 993, 994, 993, - 994, 994, 994, 993, 993, 994, 993, 993, - 994, 993, 993, 994, 993, 994, 993, 993, - 993, 993, 993, 994, 993, 994, 994, 993, - 993, 993, 994, 994, 994, 993, 993, 993, - 994, 993, 994, 993, 994, 993, 993, 993, - 993, 993, 994, 993, 993, 994, 1045, 1046, - 1047, 1048, 1049, 994, 993, 994, 993, 994, - 993, 994, 993, 994, 993, 994, 1050, 1051, - 994, 993, 994, 993, 994, 1052, 1053, 1054, - 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, - 1063, 1064, 1065, 1066, 994, 993, 993, 994, - 993, 994, 993, 994, 993, 993, 993, 993, - 993, 994, 993, 993, 994, 994, 994, 994, - 993, 993, 994, 993, 994, 993, 993, 994, - 994, 994, 993, 993, 994, 993, 993, 993, - 994, 993, 993, 993, 993, 994, 993, 993, - 993, 994, 993, 993, 994, 1067, 1068, 1053, - 994, 993, 994, 993, 993, 994, 1069, 1070, - 1071, 1072, 1073, 1074, 1075, 994, 1076, 1077, - 1078, 1079, 1080, 1081, 1082, 1083, 994, 993, - 994, 993, 994, 993, 994, 993, 993, 993, - 993, 993, 994, 993, 994, 993, 994, 993, - 994, 993, 994, 1084, 1085, 1086, 1087, 1088, - 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, - 1036, 1097, 1098, 1099, 1036, 1037, 1100, 1101, - 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, - 1110, 1111, 1112, 1113, 1114, 994, 993, 993, - 994, 994, 993, 994, 994, 993, 993, 993, - 994, 993, 993, 994, 993, 993, 994, 994, - 994, 994, 993, 993, 993, 994, 993, 994, - 993, 993, 993, 994, 993, 993, 993, 993, - 993, 993, 993, 994, 993, 994, 993, 993, - 994, 994, 993, 993, 993, 994, 994, 994, - 993, 993, 994, 993, 994, 993, 994, 993, - 993, 993, 994, 993, 993, 994, 993, 993, - 993, 994, 993, 993, 993, 994, 993, 993, - 994, 993, 994, 993, 993, 994, 993, 993, - 994, 993, 993, 993, 993, 994, 994, 994, - 993, 993, 993, 993, 994, 993, 994, 1115, - 1116, 1117, 1118, 1119, 994, 993, 994, 993, - 994, 993, 993, 994, 994, 994, 993, 993, - 993, 994, 1120, 994, 993, 994, 1121, 1122, - 1123, 1124, 1125, 1126, 994, 993, 993, 993, - 994, 994, 994, 994, 993, 993, 994, 993, - 993, 994, 994, 994, 993, 993, 993, 993, - 994, 1127, 1116, 1128, 1129, 1130, 994, 993, - 993, 993, 993, 993, 994, 993, 994, 993, - 994, 993, 994, 1131, 994, 993, 994, 1132, - 994, 1133, 1134, 1135, 1137, 1136, 994, 993, - 994, 994, 993, 993, 148, 3, 147, 3, - 1, 148, 148, 3, 1, 3, 148, 3, - 148, 3, 1, 148, 3, 148, 3, 1, - 148, 3, 1, 148, 3, 148, 3, 148, - 3, 1, 148, 3, 1, 148, 3, 148, - 3, 1, 148, 3, 3, 148, 1, 3, - 3, 148, 1, 148, 3, 148, 1, 3, - 3, 3, 3, 3, 3, 3, 3, 1, - 148, 148, 148, 148, 148, 3, 3, 148, - 3, 148, 3, 1, 148, 148, 148, 3, - 148, 3, 1, 3, 148, 3, 1, 3, - 148, 3, 148, 3, 1, 148, 148, 3, - 1, 1138, 1139, 762, 1, 148, 148, 3, - 1, 148, 148, 3, 1, 762, 1, 1140, - 1142, 1143, 1144, 1145, 1146, 1147, 1142, 1143, - 1144, 1145, 1146, 1147, 1142, 762, 1141, 971, - 1, 3, 770, 3, 1, 956, 956, 956, - 958, 1, 956, 956, 958, 956, 956, 958, - 956, 956, 956, 958, 956, 956, 958, 956, - 956, 958, 956, 956, 1, 958, 1144, 1145, - 1146, 1147, 1141, 1142, 1144, 1145, 1146, 1147, - 1141, 1142, 1144, 1145, 1146, 1147, 1141, 1142, - 1144, 1145, 1146, 1147, 1141, 1142, 1144, 1145, - 1146, 1147, 1141, 1142, 1144, 1145, 1146, 1147, - 1141, 1142, 1144, 1145, 1146, 1147, 1141, 1142, - 1144, 1145, 1146, 1147, 1141, 1142, 1144, 1145, - 1146, 1147, 1141, 1142, 1143, 971, 1145, 1146, - 1147, 1141, 1142, 1143, 1145, 1146, 1147, 1141, - 1142, 1143, 1145, 1146, 1147, 1141, 1142, 1143, - 1145, 1146, 1147, 1141, 1142, 1143, 1145, 1146, - 1147, 1141, 1142, 1143, 1145, 1146, 1147, 1141, - 1142, 1143, 1145, 1146, 1147, 1141, 1142, 1143, - 1145, 1146, 1147, 1141, 1142, 1143, 1145, 1146, - 1147, 1141, 1142, 1143, 1144, 971, 1146, 1147, - 1141, 1142, 1143, 1144, 1146, 1147, 1141, 1142, - 1143, 1144, 1146, 1147, 1141, 1142, 1143, 1144, - 1146, 1147, 1141, 1142, 1143, 1144, 1146, 1148, - 1149, 1145, 762, 1, 971, 956, 3, 956, - 958, 3, 958, 3, 1, 956, 1150, 1151, - 762, 1, 147, 3, 1, 3, 3, 147, - 3, 1, 1153, 1154, 1155, 1156, 1157, 1152, - 1, 1158, 1159, 1160, 1161, 1162, 1163, 1164, - 1165, 762, 1, 333, 3, 1, 333, 3, - 1, 3, 333, 3, 1, 333, 3, 1, - 333, 3, 1, 333, 3, 1, 3, 333, - 3, 1, 333, 3, 1, 1166, 762, 1, - 3, 147, 3, 1, 1167, 762, 1, 3, - 147, 3, 1, 1168, 762, 1, 3, 147, - 3, 1, 309, 310, 1169, 1170, 1171, 1172, - 1173, 1174, 310, 309, 310, 309, 1175, 218, - 309, 1176, 1177, 310, 309, 1178, 762, 1179, - 762, 1180, 1181, 1182, 1183, 310, 1184, 1185, - 309, 310, 309, 1176, 220, 218, 762, 220, - 1, 148, 3, 148, 3, 1, 3, 148, - 3, 148, 1, 148, 3, 148, 3, 148, - 1, 1186, 1, 148, 1188, 1187, 1187, 1188, - 1188, 1187, 1188, 1188, 1187, 1188, 1188, 1188, - 1187, 1188, 1187, 1188, 1188, 1187, 1188, 1188, - 1188, 1188, 1187, 1188, 1188, 1187, 1187, 1188, - 1188, 1187, 1188, 1188, 1187, 1189, 1190, 1191, - 1192, 1193, 1195, 1196, 1197, 1199, 1200, 1201, - 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, - 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1194, - 1198, 1187, 1188, 1188, 1188, 1188, 1187, 1188, - 1187, 1188, 1188, 1187, 1187, 1187, 1188, 1187, - 1187, 1187, 1188, 1188, 1188, 1188, 1187, 1187, - 1187, 1187, 1187, 1187, 1187, 1188, 1187, 1187, - 1187, 1187, 1187, 1187, 1188, 1187, 1187, 1187, - 1187, 1187, 1188, 1188, 1188, 1188, 1187, 1188, - 1188, 1188, 1188, 1188, 1187, 1188, 1188, 1187, - 1188, 1188, 1188, 1188, 1187, 1188, 1188, 1187, - 1187, 1187, 1187, 1187, 1187, 1188, 1188, 1188, - 1188, 1188, 1188, 1187, 1188, 1188, 1188, 1187, - 1187, 1187, 1187, 1187, 1187, 1188, 1188, 1187, - 1188, 1188, 1188, 1188, 1188, 1187, 1188, 1188, - 1187, 1188, 1187, 1188, 1188, 1187, 1188, 1187, - 1188, 1188, 1188, 1188, 1188, 1187, 1188, 1187, - 1188, 1188, 1188, 1188, 1187, 1188, 1187, 1217, - 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, - 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, - 1234, 1235, 1236, 1237, 1238, 1187, 1188, 1188, - 1187, 1188, 1188, 1188, 1187, 1188, 1188, 1188, - 1188, 1187, 1188, 1187, 1188, 1188, 1187, 1188, - 1188, 1187, 1188, 1187, 1187, 1187, 1188, 1188, - 1187, 1188, 1188, 1187, 1188, 1188, 1187, 1188, - 1187, 1188, 1188, 1188, 1188, 1188, 1187, 1188, - 1187, 1187, 1188, 1188, 1188, 1187, 1187, 1187, - 1188, 1188, 1188, 1187, 1188, 1187, 1188, 1187, - 1188, 1188, 1188, 1188, 1188, 1187, 1188, 1188, - 1187, 1239, 1240, 1241, 1242, 1243, 1187, 1188, - 1244, 1187, 1188, 1188, 1187, 1245, 1246, 1240, - 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, - 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, - 1263, 1264, 1241, 1242, 1243, 1187, 1188, 1244, - 1188, 1187, 1188, 1187, 1188, 1187, 1188, 1188, - 1187, 1188, 1188, 1187, 1188, 1188, 1187, 1188, - 1187, 1188, 1188, 1188, 1187, 1188, 1187, 1188, - 1188, 1187, 1188, 1188, 1187, 1188, 1188, 1188, - 1187, 1188, 1187, 1188, 1188, 1187, 1188, 1187, - 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1187, - 1188, 1188, 1188, 1188, 1187, 1188, 1187, 1188, - 1188, 1187, 1188, 1188, 1187, 1188, 1187, 1188, - 1187, 1188, 1187, 1265, 1266, 1267, 1187, 1188, - 1188, 1187, 1188, 1187, 1188, 1188, 1187, 1268, - 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, - 1277, 1278, 1279, 1280, 1281, 1282, 1187, 1188, - 1188, 1187, 1188, 1187, 1188, 1187, 1188, 1188, - 1188, 1188, 1188, 1187, 1188, 1188, 1187, 1187, - 1187, 1187, 1188, 1188, 1187, 1188, 1187, 1188, - 1188, 1187, 1187, 1187, 1188, 1188, 1187, 1188, - 1188, 1188, 1187, 1188, 1188, 1188, 1188, 1187, - 1188, 1188, 1188, 1187, 1188, 1188, 1187, 1283, - 1284, 1269, 1187, 1188, 1187, 1188, 1188, 1187, - 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1187, - 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, - 1187, 1188, 1187, 1188, 1187, 1188, 1187, 1188, - 1188, 1188, 1188, 1188, 1187, 1188, 1187, 1188, - 1187, 1188, 1187, 1188, 1187, 1300, 1301, 1302, - 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, - 1311, 1312, 1230, 1313, 1314, 1315, 1230, 1231, - 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, - 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1187, - 1188, 1188, 1187, 1187, 1188, 1187, 1187, 1188, - 1188, 1188, 1187, 1188, 1188, 1187, 1188, 1188, - 1187, 1187, 1187, 1187, 1188, 1188, 1188, 1187, - 1188, 1187, 1188, 1188, 1188, 1187, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1187, 1188, 1187, - 1188, 1188, 1187, 1187, 1188, 1188, 1188, 1187, - 1187, 1187, 1188, 1188, 1187, 1188, 1187, 1188, - 1187, 1188, 1188, 1188, 1187, 1188, 1188, 1187, - 1188, 1188, 1188, 1187, 1188, 1188, 1188, 1187, - 1188, 1188, 1187, 1188, 1187, 1188, 1188, 1187, - 1188, 1188, 1187, 1188, 1188, 1188, 1188, 1187, - 1187, 1187, 1188, 1188, 1188, 1188, 1187, 1188, - 1187, 1331, 1332, 1333, 1334, 1335, 1187, 1188, - 1187, 1188, 1187, 1188, 1188, 1187, 1187, 1187, - 1188, 1188, 1188, 1187, 1336, 1187, 1188, 1187, - 1337, 1338, 1339, 1340, 1341, 1342, 1187, 1188, - 1188, 1188, 1187, 1187, 1187, 1187, 1188, 1188, - 1187, 1188, 1188, 1187, 1187, 1187, 1188, 1188, - 1188, 1188, 1187, 1343, 1332, 1344, 1345, 1346, - 1187, 1188, 1188, 1188, 1188, 1188, 1187, 1188, - 1187, 1188, 1187, 1188, 1187, 1347, 1348, 1349, - 1350, 1351, 1352, 1353, 1354, 1348, 1347, 1348, - 1347, 1348, 1256, 1347, 1355, 1356, 1348, 1347, - 1357, 1358, 1359, 1360, 1361, 1362, 1348, 1363, - 1364, 1347, 1348, 1347, 1355, 1258, 1256, 1256, - 1258, 1187, 1187, 1188, 1188, 1188, 1187, 1188, - 1188, 1187, 1188, 1188, 1188, 1187, 1187, 1188, - 1188, 1188, 1188, 1188, 1188, 1187, 1188, 1187, - 1187, 1188, 1188, 1187, 1187, 1188, 1188, 1187, - 1188, 1187, 1188, 1187, 1188, 1188, 1187, 1188, - 1188, 1187, 1188, 1188, 1187, 1188, 1188, 1187, - 1365, 1187, 1366, 1348, 1347, 1367, 1258, 1187, - 1188, 1187, 1368, 1266, 1187, 1188, 1187, 1285, - 1286, 1287, 1288, 1289, 1290, 1369, 1187, 1370, - 1187, 1188, 1187, 1285, 1286, 1287, 1288, 1289, - 1290, 1371, 1187, 1372, 1370, 1187, 1188, 1187, - 3, 148, 148, 3, 148, 3, 148, 1, - 3, 148, 1, 3, 1, 148, 3, 1, - 148, 3, 148, 1, 3, 1, 148, 3, - 148, 1, 3, 148, 1, 3, 148, 3, - 1, 3, 148, 3, 148, 3, 1, 3, - 148, 3, 148, 1, 3, 3, 148, 1, - 3, 148, 1, 1152, 1, 1373, 1152, 1, - 1374, 1375, 1376, 1377, 1376, 762, 1378, 1, - 147, 3, 1, 1, 147, 1, 147, 3, - 147, 1, 147, 1, 1380, 1379, 1383, 1384, - 1385, 1386, 1387, 1388, 1389, 1390, 1392, 1393, - 1394, 1395, 1396, 1397, 1399, 1379, 1, 1382, - 1391, 1398, 1, 1381, 144, 146, 1401, 1402, - 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, - 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, - 1400, 309, 329, 1420, 1421, 1422, 1423, 1424, - 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, - 1433, 1434, 1435, 1436, 1437, 1419, 1438, 309, - 329, 1420, 1421, 1422, 1423, 1424, 1425, 1426, - 1427, 1428, 1429, 1430, 1431, 1439, 1440, 1434, - 1435, 1441, 1437, 1419, 1443, 1444, 1445, 1446, - 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, - 1455, 1456, 1458, 335, 662, 723, 1457, 1442, - 476, 478, 1459, 1460, 1461, 1462, 1463, 1464, - 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, - 1473, 1474, 1475, 1476, 1442, 638, 658, 1477, - 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, - 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, - 1494, 1442, 1495, 638, 658, 1477, 1478, 1479, - 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, - 1488, 1496, 1497, 1491, 1492, 1498, 1494, 1442, - 638, 658, 1477, 1478, 1479, 1480, 1481, 1482, - 1483, 1484, 1485, 1486, 1487, 1499, 1489, 1490, - 1500, 1501, 1502, 1503, 1492, 1493, 1494, 1442, - 638, 658, 1477, 1478, 1479, 1480, 1481, 1482, - 1483, 1484, 1485, 1486, 1487, 1504, 1489, 1490, - 1491, 1505, 1492, 1493, 1494, 1442, 638, 658, - 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, - 1485, 1486, 1487, 1506, 1489, 1490, 1491, 1507, - 1492, 1493, 1494, 1442, 638, 658, 1477, 1478, - 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, - 1487, 1508, 1489, 1490, 1491, 1509, 1492, 1493, - 1494, 1442, 638, 658, 1477, 1478, 1479, 1480, - 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, - 1489, 1490, 1491, 1492, 1510, 1494, 1442, 931, - 951, 1512, 1513, 1514, 1515, 1516, 1517, 1518, - 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, - 1527, 1528, 1529, 1530, 1531, 1532, 1511, 931, - 951, 1512, 1513, 1514, 1515, 1516, 1517, 1518, - 1519, 1520, 1521, 1522, 1533, 1524, 1525, 1534, - 1530, 1531, 1532, 1511, 1535, 931, 951, 1512, - 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, - 1521, 1522, 1533, 1536, 1537, 1534, 1530, 1538, - 1532, 1511, 931, 951, 1512, 1513, 1514, 1515, - 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1539, - 1524, 1525, 1534, 1540, 1530, 1531, 1532, 1511, - 931, 951, 1512, 1513, 1514, 1515, 1516, 1517, - 1518, 1519, 1520, 1521, 1522, 1541, 1524, 1525, - 1534, 1542, 1530, 1531, 1532, 1511, 931, 951, - 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, - 1520, 1521, 1522, 1543, 1524, 1525, 1534, 1544, - 1530, 1531, 1532, 1511, 1135, 1137, 1546, 1547, - 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, - 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, - 1545, 1347, 1367, 1565, 1566, 1567, 1568, 1569, - 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, - 1578, 1579, 1580, 1581, 1582, 1564, 1347, 1367, - 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, - 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, - 1583, 1582, 1564, 1584, 1347, 1367, 1565, 1566, - 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, - 1575, 1576, 1585, 1586, 1579, 1580, 1587, 1582, - 1564, -} - -var _graphclust_trans_targs []int16 = []int16{ - 1547, 0, 1547, 1548, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, - 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 67, 68, - 69, 70, 71, 73, 74, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 92, 93, 95, 104, - 136, 142, 144, 151, 156, 96, 97, 98, - 99, 100, 101, 102, 103, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 137, 138, 139, 140, - 141, 143, 145, 146, 147, 148, 149, 150, - 152, 153, 154, 155, 157, 159, 160, 161, - 2, 162, 3, 1547, 1549, 1547, 1547, 178, - 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, - 228, 230, 235, 254, 255, 256, 1550, 233, - 234, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 258, 259, 260, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 278, 279, 281, - 290, 322, 328, 330, 337, 342, 282, 283, - 284, 285, 286, 287, 288, 289, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 323, 324, 325, - 326, 327, 329, 331, 332, 333, 334, 335, - 336, 338, 339, 340, 341, 165, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 361, - 362, 166, 364, 366, 367, 1551, 1547, 1552, - 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 434, 435, 436, 437, 438, 440, - 441, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 455, 456, 457, - 459, 460, 462, 471, 503, 509, 511, 518, - 523, 463, 464, 465, 466, 467, 468, 469, - 470, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, - 504, 505, 506, 507, 508, 510, 512, 513, - 514, 515, 516, 517, 519, 520, 521, 522, - 524, 526, 527, 528, 369, 529, 370, 1553, - 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 560, - 561, 562, 563, 564, 565, 566, 567, 568, - 569, 570, 571, 572, 574, 575, 576, 577, - 578, 579, 580, 581, 582, 583, 584, 585, - 586, 587, 588, 589, 590, 591, 592, 593, - 594, 595, 597, 602, 621, 622, 623, 1554, - 600, 601, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, - 617, 618, 619, 620, 625, 626, 627, 629, - 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 642, 643, 645, 646, - 648, 657, 689, 695, 697, 704, 709, 649, - 650, 651, 652, 653, 654, 655, 656, 658, - 659, 660, 661, 662, 663, 664, 665, 666, - 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 678, 679, 680, 681, 682, - 683, 684, 685, 686, 687, 688, 690, 691, - 692, 693, 694, 696, 698, 699, 700, 701, - 702, 703, 705, 706, 707, 708, 532, 710, - 711, 712, 713, 714, 715, 716, 717, 718, - 719, 720, 721, 722, 723, 724, 725, 726, - 728, 729, 533, 731, 733, 734, 530, 739, - 740, 742, 744, 747, 750, 774, 1555, 756, - 1556, 746, 1557, 749, 752, 754, 755, 758, - 759, 763, 764, 765, 766, 767, 768, 769, - 1558, 762, 773, 776, 777, 778, 779, 780, - 781, 782, 783, 784, 785, 786, 787, 788, - 789, 790, 791, 792, 793, 795, 796, 799, - 800, 801, 802, 803, 804, 805, 806, 810, - 811, 813, 814, 797, 816, 825, 827, 829, - 831, 817, 818, 819, 820, 821, 822, 823, - 824, 826, 828, 830, 832, 833, 834, 835, - 839, 840, 841, 842, 843, 844, 845, 846, - 847, 848, 849, 850, 851, 1559, 837, 838, - 854, 855, 163, 859, 860, 862, 1067, 1070, - 1073, 1097, 1560, 1547, 1561, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, - 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, - 903, 905, 906, 907, 908, 909, 910, 911, - 912, 913, 914, 915, 916, 917, 918, 919, - 920, 921, 922, 923, 924, 925, 926, 928, - 933, 952, 953, 954, 1562, 931, 932, 934, - 935, 936, 937, 938, 939, 940, 941, 942, - 943, 944, 945, 946, 947, 948, 949, 950, - 951, 956, 957, 958, 960, 961, 962, 963, - 964, 965, 966, 967, 968, 969, 970, 971, - 972, 973, 974, 976, 977, 979, 988, 1020, - 1026, 1028, 1035, 1040, 980, 981, 982, 983, - 984, 985, 986, 987, 989, 990, 991, 992, - 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, - 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, - 1017, 1018, 1019, 1021, 1022, 1023, 1024, 1025, - 1027, 1029, 1030, 1031, 1032, 1033, 1034, 1036, - 1037, 1038, 1039, 863, 1041, 1042, 1043, 1044, - 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, - 1053, 1054, 1055, 1056, 1057, 1059, 1060, 864, - 1062, 1064, 1065, 1079, 1563, 1069, 1564, 1072, - 1075, 1077, 1078, 1081, 1082, 1086, 1087, 1088, - 1089, 1090, 1091, 1092, 1565, 1085, 1096, 1099, - 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, - 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, - 1277, 1566, 1547, 1113, 1114, 1115, 1116, 1117, - 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, - 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, - 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1142, - 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, - 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, - 1159, 1160, 1161, 1162, 1163, 1165, 1166, 1167, - 1168, 1169, 1171, 1172, 1174, 1175, 1176, 1177, - 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, - 1186, 1187, 1188, 1190, 1191, 1193, 1202, 1234, - 1240, 1242, 1249, 1254, 1194, 1195, 1196, 1197, - 1198, 1199, 1200, 1201, 1203, 1204, 1205, 1206, - 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, - 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, - 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, - 1231, 1232, 1233, 1235, 1236, 1237, 1238, 1239, - 1241, 1243, 1244, 1245, 1246, 1247, 1248, 1250, - 1251, 1252, 1253, 1255, 1257, 1258, 1259, 1100, - 1260, 1101, 1279, 1280, 1283, 1284, 1285, 1286, - 1287, 1288, 1289, 1290, 1294, 1295, 1297, 1298, - 1281, 1300, 1309, 1311, 1313, 1315, 1301, 1302, - 1303, 1304, 1305, 1306, 1307, 1308, 1310, 1312, - 1314, 1316, 1317, 1318, 1319, 1526, 1527, 1528, - 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, - 1537, 1538, 1567, 1547, 1568, 1333, 1334, 1335, - 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, - 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, - 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, - 1360, 1362, 1363, 1364, 1365, 1366, 1367, 1368, - 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, - 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1385, - 1390, 1409, 1410, 1411, 1569, 1388, 1389, 1391, - 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, - 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, - 1408, 1413, 1414, 1415, 1417, 1418, 1419, 1420, - 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, - 1429, 1430, 1431, 1433, 1434, 1436, 1445, 1477, - 1483, 1485, 1492, 1497, 1437, 1438, 1439, 1440, - 1441, 1442, 1443, 1444, 1446, 1447, 1448, 1449, - 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, - 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, - 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, - 1474, 1475, 1476, 1478, 1479, 1480, 1481, 1482, - 1484, 1486, 1487, 1488, 1489, 1490, 1491, 1493, - 1494, 1495, 1496, 1320, 1498, 1499, 1500, 1501, - 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, - 1510, 1511, 1512, 1513, 1514, 1516, 1517, 1321, - 1519, 1521, 1522, 1524, 1525, 1541, 1542, 1543, - 1544, 1545, 1546, 1547, 1, 1548, 163, 164, - 368, 856, 857, 858, 861, 1098, 1278, 1281, - 1282, 1291, 1292, 1293, 1296, 1299, 1539, 1540, - 1547, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 43, 66, 72, 75, - 91, 94, 158, 1547, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 206, - 229, 363, 261, 277, 365, 360, 231, 232, - 257, 280, 1547, 531, 735, 736, 737, 738, - 741, 775, 794, 798, 807, 808, 809, 812, - 815, 852, 853, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 410, 433, - 439, 442, 458, 461, 525, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, - 573, 596, 730, 628, 644, 732, 727, 598, - 599, 624, 647, 743, 757, 770, 771, 772, - 745, 753, 748, 751, 760, 761, 836, 1547, - 865, 866, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 1066, 927, 1061, 1080, 1093, - 1094, 1095, 975, 1063, 1058, 904, 959, 929, - 930, 955, 978, 1068, 1076, 1071, 1074, 1083, - 1084, 1547, 1102, 1103, 1104, 1105, 1106, 1107, - 1108, 1109, 1110, 1111, 1112, 1141, 1164, 1170, - 1173, 1189, 1192, 1256, 1547, 1322, 1323, 1324, - 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, - 1361, 1384, 1518, 1416, 1432, 1523, 1515, 1520, - 1386, 1387, 1412, 1435, -} - -var _graphclust_trans_actions []byte = []byte{ - 31, 0, 27, 40, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 55, 29, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 55, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 40, 25, 40, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 40, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 40, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 0, - 40, 0, 40, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 40, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 40, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 17, 40, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 51, 0, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 40, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 23, 40, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 43, 1, 47, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -} - -var _graphclust_to_state_actions []byte = []byte{ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -} - -var _graphclust_from_state_actions []byte = []byte{ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -} - -var _graphclust_eof_trans []int16 = []int16{ - 0, 0, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 0, 0, 150, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 150, 151, 150, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 150, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 0, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, - 0, 0, 0, 0, 0, 0, 150, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 150, 772, 772, 150, 772, - 772, 150, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 150, 772, 772, 772, - 772, 0, 0, 0, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 995, 995, 995, - 995, 995, 995, 995, 995, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1401, 1420, 1420, 1443, - 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, - 1512, 1512, 1512, 1512, 1512, 1512, 1546, 1565, - 1565, 1565, -} - -const graphclust_start int = 1547 -const graphclust_first_final int = 1547 -const graphclust_error int = 0 - -const graphclust_en_main int = 1547 - -//line grapheme_clusters.rl:14 - -var Error = errors.New("invalid UTF8 text") - -// ScanGraphemeClusters is a split function for bufio.Scanner that splits -// on grapheme cluster boundaries. -func ScanGraphemeClusters(data []byte, atEOF bool) (int, []byte, error) { - if len(data) == 0 { - return 0, nil, nil - } - - // Ragel state - cs := 0 // Current State - p := 0 // "Pointer" into data - pe := len(data) // End-of-data "pointer" - ts := 0 - te := 0 - act := 0 - eof := pe - - // Make Go compiler happy - _ = ts - _ = te - _ = act - _ = eof - - startPos := 0 - endPos := 0 - -//line grapheme_clusters.go:3847 - { - cs = graphclust_start - ts = 0 - te = 0 - act = 0 - } - -//line grapheme_clusters.go:3855 - { - var _klen int - var _trans int - var _acts int - var _nacts uint - var _keys int - if p == pe { - goto _test_eof - } - if cs == 0 { - goto _out - } - _resume: - _acts = int(_graphclust_from_state_actions[cs]) - _nacts = uint(_graphclust_actions[_acts]) - _acts++ - for ; _nacts > 0; _nacts-- { - _acts++ - switch _graphclust_actions[_acts-1] { - case 4: -//line NONE:1 - ts = p - -//line grapheme_clusters.go:3878 - } - } - - _keys = int(_graphclust_key_offsets[cs]) - _trans = int(_graphclust_index_offsets[cs]) - - _klen = int(_graphclust_single_lengths[cs]) - if _klen > 0 { - _lower := int(_keys) - var _mid int - _upper := int(_keys + _klen - 1) - for { - if _upper < _lower { - break - } - - _mid = _lower + ((_upper - _lower) >> 1) - switch { - case data[p] < _graphclust_trans_keys[_mid]: - _upper = _mid - 1 - case data[p] > _graphclust_trans_keys[_mid]: - _lower = _mid + 1 - default: - _trans += int(_mid - int(_keys)) - goto _match - } - } - _keys += _klen - _trans += _klen - } - - _klen = int(_graphclust_range_lengths[cs]) - if _klen > 0 { - _lower := int(_keys) - var _mid int - _upper := int(_keys + (_klen << 1) - 2) - for { - if _upper < _lower { - break - } - - _mid = _lower + (((_upper - _lower) >> 1) & ^1) - switch { - case data[p] < _graphclust_trans_keys[_mid]: - _upper = _mid - 2 - case data[p] > _graphclust_trans_keys[_mid+1]: - _lower = _mid + 2 - default: - _trans += int((_mid - int(_keys)) >> 1) - goto _match - } - } - _trans += _klen - } - - _match: - _trans = int(_graphclust_indicies[_trans]) - _eof_trans: - cs = int(_graphclust_trans_targs[_trans]) - - if _graphclust_trans_actions[_trans] == 0 { - goto _again - } - - _acts = int(_graphclust_trans_actions[_trans]) - _nacts = uint(_graphclust_actions[_acts]) - _acts++ - for ; _nacts > 0; _nacts-- { - _acts++ - switch _graphclust_actions[_acts-1] { - case 0: -//line grapheme_clusters.rl:47 - - startPos = p - - case 1: -//line grapheme_clusters.rl:51 - - endPos = p - - case 5: -//line NONE:1 - te = p + 1 - - case 6: -//line grapheme_clusters.rl:55 - act = 3 - case 7: -//line grapheme_clusters.rl:55 - act = 4 - case 8: -//line grapheme_clusters.rl:55 - te = p + 1 - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 9: -//line grapheme_clusters.rl:55 - te = p + 1 - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 10: -//line grapheme_clusters.rl:55 - te = p - p-- - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 11: -//line grapheme_clusters.rl:55 - te = p - p-- - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 12: -//line grapheme_clusters.rl:55 - te = p - p-- - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 13: -//line grapheme_clusters.rl:55 - te = p - p-- - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 14: -//line grapheme_clusters.rl:55 - te = p - p-- - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 15: -//line grapheme_clusters.rl:55 - te = p - p-- - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 16: -//line grapheme_clusters.rl:55 - p = (te) - 1 - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 17: -//line grapheme_clusters.rl:55 - p = (te) - 1 - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 18: -//line grapheme_clusters.rl:55 - p = (te) - 1 - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 19: -//line grapheme_clusters.rl:55 - p = (te) - 1 - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 20: -//line grapheme_clusters.rl:55 - p = (te) - 1 - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 21: -//line grapheme_clusters.rl:55 - p = (te) - 1 - { - return endPos + 1, data[startPos : endPos+1], nil - } - case 22: -//line NONE:1 - switch act { - case 0: - { - cs = 0 - goto _again - } - case 3: - { - p = (te) - 1 - - return endPos + 1, data[startPos : endPos+1], nil - } - case 4: - { - p = (te) - 1 - - return endPos + 1, data[startPos : endPos+1], nil - } - } - -//line grapheme_clusters.go:4077 - } - } - - _again: - _acts = int(_graphclust_to_state_actions[cs]) - _nacts = uint(_graphclust_actions[_acts]) - _acts++ - for ; _nacts > 0; _nacts-- { - _acts++ - switch _graphclust_actions[_acts-1] { - case 2: -//line NONE:1 - ts = 0 - - case 3: -//line NONE:1 - act = 0 - -//line grapheme_clusters.go:4095 - } - } - - if cs == 0 { - goto _out - } - p++ - if p != pe { - goto _resume - } - _test_eof: - { - } - if p == eof { - if _graphclust_eof_trans[cs] > 0 { - _trans = int(_graphclust_eof_trans[cs] - 1) - goto _eof_trans - } - } - - _out: - { - } - } - -//line grapheme_clusters.rl:117 - - // If we fall out here then we were unable to complete a sequence. - // If we weren't able to complete a sequence then either we've - // reached the end of a partial buffer (so there's more data to come) - // or we have an isolated symbol that would normally be part of a - // grapheme cluster but has appeared in isolation here. - - if !atEOF { - // Request more - return 0, nil, nil - } - - // Just take the first UTF-8 sequence and return that. - _, seqLen := utf8.DecodeRune(data) - return seqLen, data[:seqLen], nil -} diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/LICENSE b/vendor/github.com/apparentlymart/go-textseg/v15/LICENSE similarity index 100% rename from vendor/github.com/apparentlymart/go-textseg/v13/LICENSE rename to vendor/github.com/apparentlymart/go-textseg/v15/LICENSE diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/all_tokens.go b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/all_tokens.go similarity index 100% rename from vendor/github.com/apparentlymart/go-textseg/v13/textseg/all_tokens.go rename to vendor/github.com/apparentlymart/go-textseg/v15/textseg/all_tokens.go diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/emoji_table.rl b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/emoji_table.rl similarity index 93% rename from vendor/github.com/apparentlymart/go-textseg/v13/textseg/emoji_table.rl rename to vendor/github.com/apparentlymart/go-textseg/v15/textseg/emoji_table.rl index f2cb484a3d738..10b93e474f264 100644 --- a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/emoji_table.rl +++ b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/emoji_table.rl @@ -1,5 +1,5 @@ # The following Ragel file was autogenerated with unicode2ragel.rb -# from: https://www.unicode.org/Public/13.0.0/ucd/emoji/emoji-data.txt +# from: https://www.unicode.org/Public/15.0.0/ucd/emoji/emoji-data.txt # # It defines ["Extended_Pictographic"]. # @@ -150,8 +150,8 @@ | 0xE2 0x9D 0x87 #E0.6 [1] (❇️) sparkle | 0xE2 0x9D 0x8C #E0.6 [1] (❌) cross mark | 0xE2 0x9D 0x8E #E0.6 [1] (❎) cross mark button - | 0xE2 0x9D 0x93..0x95 #E0.6 [3] (❓..❕) question mark..white e... - | 0xE2 0x9D 0x97 #E0.6 [1] (❗) exclamation mark + | 0xE2 0x9D 0x93..0x95 #E0.6 [3] (❓..❕) red question mark..whi... + | 0xE2 0x9D 0x97 #E0.6 [1] (❗) red exclamation mark | 0xE2 0x9D 0xA3 #E1.0 [1] (❣️) heart exclamation | 0xE2 0x9D 0xA4 #E0.6 [1] (❤️) red heart | 0xE2 0x9D 0xA5..0xA7 #E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HE... @@ -299,7 +299,7 @@ | 0xF0 0x9F 0x94 0x89 #E1.0 [1] (🔉) speaker medium volume | 0xF0 0x9F 0x94 0x8A..0x94 #E0.6 [11] (🔊..🔔) speaker high volume... | 0xF0 0x9F 0x94 0x95 #E1.0 [1] (🔕) bell with slash - | 0xF0 0x9F 0x94 0x96..0xAB #E0.6 [22] (🔖..🔫) bookmark..pistol + | 0xF0 0x9F 0x94 0x96..0xAB #E0.6 [22] (🔖..🔫) bookmark..water pistol | 0xF0 0x9F 0x94 0xAC..0xAD #E1.0 [2] (🔬..🔭) microscope..telescope | 0xF0 0x9F 0x94 0xAE..0xBD #E0.6 [16] (🔮..🔽) crystal ball..downw... | 0xF0 0x9F 0x95 0x86..0x88 #E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..... @@ -377,7 +377,7 @@ | 0xF0 0x9F 0x98 0xAE..0xAF #E1.0 [2] (😮..😯) face with open mout... | 0xF0 0x9F 0x98 0xB0..0xB3 #E0.6 [4] (😰..😳) anxious face with s... | 0xF0 0x9F 0x98 0xB4 #E1.0 [1] (😴) sleeping face - | 0xF0 0x9F 0x98 0xB5 #E0.6 [1] (😵) dizzy face + | 0xF0 0x9F 0x98 0xB5 #E0.6 [1] (😵) face with crossed-out ... | 0xF0 0x9F 0x98 0xB6 #E1.0 [1] (😶) face without mouth | 0xF0 0x9F 0x98 0xB7..0xFF #E0.6 [10] (😷..🙀) face with medical m... | 0xF0 0x9F 0x99 0x00..0x80 # @@ -427,7 +427,9 @@ | 0xF0 0x9F 0x9B 0x93..0x94 #E0.0 [2] (🛓..🛔) STUPA..PAGODA | 0xF0 0x9F 0x9B 0x95 #E12.0 [1] (🛕) hindu temple | 0xF0 0x9F 0x9B 0x96..0x97 #E13.0 [2] (🛖..🛗) hut..elevator - | 0xF0 0x9F 0x9B 0x98..0x9F #E0.0 [8] (🛘..🛟) ..<... + | 0xF0 0x9F 0x9B 0x98..0x9B #E0.0 [4] (🛘..🛛) ..<... + | 0xF0 0x9F 0x9B 0x9C #E15.0 [1] (🛜) wireless + | 0xF0 0x9F 0x9B 0x9D..0x9F #E14.0 [3] (🛝..🛟) playground slide..r... | 0xF0 0x9F 0x9B 0xA0..0xA5 #E0.7 [6] (🛠️..🛥️) hammer and wrench... | 0xF0 0x9F 0x9B 0xA6..0xA8 #E0.0 [3] (🛦..🛨) UP-POINTING MILITAR... | 0xF0 0x9F 0x9B 0xA9 #E0.7 [1] (🛩️) small airplane @@ -443,10 +445,12 @@ | 0xF0 0x9F 0x9B 0xBA #E12.0 [1] (🛺) auto rickshaw | 0xF0 0x9F 0x9B 0xBB..0xBC #E13.0 [2] (🛻..🛼) pickup truck..rolle... | 0xF0 0x9F 0x9B 0xBD..0xBF #E0.0 [3] (🛽..🛿) ..<... - | 0xF0 0x9F 0x9D 0xB4..0xBF #E0.0 [12] (🝴..🝿) ..<... + | 0xF0 0x9F 0x9D 0xB4..0xBF #E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS | 0xF0 0x9F 0x9F 0x95..0x9F #E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE..<... | 0xF0 0x9F 0x9F 0xA0..0xAB #E12.0 [12] (🟠..🟫) orange circle..brow... - | 0xF0 0x9F 0x9F 0xAC..0xBF #E0.0 [20] (🟬..🟿) ..<... + | 0xF0 0x9F 0x9F 0xAC..0xAF #E0.0 [4] (🟬..🟯) ..<... + | 0xF0 0x9F 0x9F 0xB0 #E14.0 [1] (🟰) heavy equals sign + | 0xF0 0x9F 0x9F 0xB1..0xBF #E0.0 [15] (🟱..🟿) ..<... | 0xF0 0x9F 0xA0 0x8C..0x8F #E0.0 [4] (🠌..🠏) ..<... | 0xF0 0x9F 0xA1 0x88..0x8F #E0.0 [8] (🡈..🡏) ..<... | 0xF0 0x9F 0xA1 0x9A..0x9F #E0.0 [6] (🡚..🡟) ..<... @@ -476,7 +480,7 @@ | 0xF0 0x9F 0xA5 0xB2 #E13.0 [1] (🥲) smiling face with tear | 0xF0 0x9F 0xA5 0xB3..0xB6 #E11.0 [4] (🥳..🥶) partying face..cold... | 0xF0 0x9F 0xA5 0xB7..0xB8 #E13.0 [2] (🥷..🥸) ninja..disguised face - | 0xF0 0x9F 0xA5 0xB9 #E0.0 [1] (🥹) + | 0xF0 0x9F 0xA5 0xB9 #E14.0 [1] (🥹) face holding back tears | 0xF0 0x9F 0xA5 0xBA #E11.0 [1] (🥺) pleading face | 0xF0 0x9F 0xA5 0xBB #E12.0 [1] (🥻) sari | 0xF0 0x9F 0xA5 0xBC..0xBF #E11.0 [4] (🥼..🥿) lab coat..flat shoe @@ -494,7 +498,7 @@ | 0xF0 0x9F 0xA7 0x81..0x82 #E11.0 [2] (🧁..🧂) cupcake..salt | 0xF0 0x9F 0xA7 0x83..0x8A #E12.0 [8] (🧃..🧊) beverage box..ice | 0xF0 0x9F 0xA7 0x8B #E13.0 [1] (🧋) bubble tea - | 0xF0 0x9F 0xA7 0x8C #E0.0 [1] (🧌) + | 0xF0 0x9F 0xA7 0x8C #E14.0 [1] (🧌) troll | 0xF0 0x9F 0xA7 0x8D..0x8F #E12.0 [3] (🧍..🧏) person standing..de... | 0xF0 0x9F 0xA7 0x90..0xA6 #E5.0 [23] (🧐..🧦) face with monocle..... | 0xF0 0x9F 0xA7 0xA7..0xBF #E11.0 [25] (🧧..🧿) red envelope..nazar... @@ -502,21 +506,37 @@ | 0xF0 0x9F 0xA9 0x00..0xAF # | 0xF0 0x9F 0xA9 0xB0..0xB3 #E12.0 [4] (🩰..🩳) ballet shoes..shorts | 0xF0 0x9F 0xA9 0xB4 #E13.0 [1] (🩴) thong sandal - | 0xF0 0x9F 0xA9 0xB5..0xB7 #E0.0 [3] (🩵..🩷) ..<... + | 0xF0 0x9F 0xA9 0xB5..0xB7 #E15.0 [3] (🩵..🩷) light blue heart..p... | 0xF0 0x9F 0xA9 0xB8..0xBA #E12.0 [3] (🩸..🩺) drop of blood..stet... - | 0xF0 0x9F 0xA9 0xBB..0xBF #E0.0 [5] (🩻..🩿) ..<... + | 0xF0 0x9F 0xA9 0xBB..0xBC #E14.0 [2] (🩻..🩼) x-ray..crutch + | 0xF0 0x9F 0xA9 0xBD..0xBF #E0.0 [3] (🩽..🩿) ..<... | 0xF0 0x9F 0xAA 0x80..0x82 #E12.0 [3] (🪀..🪂) yo-yo..parachute | 0xF0 0x9F 0xAA 0x83..0x86 #E13.0 [4] (🪃..🪆) boomerang..nesting ... - | 0xF0 0x9F 0xAA 0x87..0x8F #E0.0 [9] (🪇..🪏) ..<... + | 0xF0 0x9F 0xAA 0x87..0x88 #E15.0 [2] (🪇..🪈) maracas..flute + | 0xF0 0x9F 0xAA 0x89..0x8F #E0.0 [7] (🪉..🪏) ..<... | 0xF0 0x9F 0xAA 0x90..0x95 #E12.0 [6] (🪐..🪕) ringed planet..banjo | 0xF0 0x9F 0xAA 0x96..0xA8 #E13.0 [19] (🪖..🪨) military helmet..rock - | 0xF0 0x9F 0xAA 0xA9..0xAF #E0.0 [7] (🪩..🪯) ..<... + | 0xF0 0x9F 0xAA 0xA9..0xAC #E14.0 [4] (🪩..🪬) mirror ball..hamsa + | 0xF0 0x9F 0xAA 0xAD..0xAF #E15.0 [3] (🪭..🪯) folding hand fan..k... | 0xF0 0x9F 0xAA 0xB0..0xB6 #E13.0 [7] (🪰..🪶) fly..feather - | 0xF0 0x9F 0xAA 0xB7..0xBF #E0.0 [9] (🪷..🪿) ..<... + | 0xF0 0x9F 0xAA 0xB7..0xBA #E14.0 [4] (🪷..🪺) lotus..nest with eggs + | 0xF0 0x9F 0xAA 0xBB..0xBD #E15.0 [3] (🪻..🪽) hyacinth..wing + | 0xF0 0x9F 0xAA 0xBE #E0.0 [1] (🪾) + | 0xF0 0x9F 0xAA 0xBF #E15.0 [1] (🪿) goose | 0xF0 0x9F 0xAB 0x80..0x82 #E13.0 [3] (🫀..🫂) anatomical heart..p... - | 0xF0 0x9F 0xAB 0x83..0x8F #E0.0 [13] (🫃..🫏) ..<... + | 0xF0 0x9F 0xAB 0x83..0x85 #E14.0 [3] (🫃..🫅) pregnant man..perso... + | 0xF0 0x9F 0xAB 0x86..0x8D #E0.0 [8] (🫆..🫍) ..<... + | 0xF0 0x9F 0xAB 0x8E..0x8F #E15.0 [2] (🫎..🫏) moose..donkey | 0xF0 0x9F 0xAB 0x90..0x96 #E13.0 [7] (🫐..🫖) blueberries..teapot - | 0xF0 0x9F 0xAB 0x97..0xBF #E0.0 [41] (🫗..🫿) ..<... + | 0xF0 0x9F 0xAB 0x97..0x99 #E14.0 [3] (🫗..🫙) pouring liquid..jar + | 0xF0 0x9F 0xAB 0x9A..0x9B #E15.0 [2] (🫚..🫛) ginger root..pea pod + | 0xF0 0x9F 0xAB 0x9C..0x9F #E0.0 [4] (🫜..🫟) ..<... + | 0xF0 0x9F 0xAB 0xA0..0xA7 #E14.0 [8] (🫠..🫧) melting face..bubbles + | 0xF0 0x9F 0xAB 0xA8 #E15.0 [1] (🫨) shaking face + | 0xF0 0x9F 0xAB 0xA9..0xAF #E0.0 [7] (🫩..🫯) ..<... + | 0xF0 0x9F 0xAB 0xB0..0xB6 #E14.0 [7] (🫰..🫶) hand with index fin... + | 0xF0 0x9F 0xAB 0xB7..0xB8 #E15.0 [2] (🫷..🫸) leftwards pushing h... + | 0xF0 0x9F 0xAB 0xB9..0xBF #E0.0 [7] (🫹..🫿) ..<... | 0xF0 0x9F 0xB0 0x80..0xFF #E0.0[1022] (🰀..🿽) 0; _nacts-- { + _acts++ + switch _graphclust_actions[_acts-1] { + case 4: +//line NONE:1 + ts = p + +//line grapheme_clusters.go:4080 + } + } + + _keys = int(_graphclust_key_offsets[cs]) + _trans = int(_graphclust_index_offsets[cs]) + + _klen = int(_graphclust_single_lengths[cs]) + if _klen > 0 { + _lower := int(_keys) + var _mid int + _upper := int(_keys + _klen - 1) + for { + if _upper < _lower { + break + } + + _mid = _lower + ((_upper - _lower) >> 1) + switch { + case data[p] < _graphclust_trans_keys[_mid]: + _upper = _mid - 1 + case data[p] > _graphclust_trans_keys[_mid]: + _lower = _mid + 1 + default: + _trans += int(_mid - int(_keys)) + goto _match + } + } + _keys += _klen + _trans += _klen + } + + _klen = int(_graphclust_range_lengths[cs]) + if _klen > 0 { + _lower := int(_keys) + var _mid int + _upper := int(_keys + (_klen << 1) - 2) + for { + if _upper < _lower { + break + } + + _mid = _lower + (((_upper - _lower) >> 1) & ^1) + switch { + case data[p] < _graphclust_trans_keys[_mid]: + _upper = _mid - 2 + case data[p] > _graphclust_trans_keys[_mid+1]: + _lower = _mid + 2 + default: + _trans += int((_mid - int(_keys)) >> 1) + goto _match + } + } + _trans += _klen + } + + _match: + _trans = int(_graphclust_indicies[_trans]) + _eof_trans: + cs = int(_graphclust_trans_targs[_trans]) + + if _graphclust_trans_actions[_trans] == 0 { + goto _again + } + + _acts = int(_graphclust_trans_actions[_trans]) + _nacts = uint(_graphclust_actions[_acts]) + _acts++ + for ; _nacts > 0; _nacts-- { + _acts++ + switch _graphclust_actions[_acts-1] { + case 0: +//line grapheme_clusters.rl:47 + + startPos = p + + case 1: +//line grapheme_clusters.rl:51 + + endPos = p + + case 5: +//line NONE:1 + te = p + 1 + + case 6: +//line grapheme_clusters.rl:55 + act = 3 + case 7: +//line grapheme_clusters.rl:55 + act = 4 + case 8: +//line grapheme_clusters.rl:55 + act = 8 + case 9: +//line grapheme_clusters.rl:55 + te = p + 1 + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 10: +//line grapheme_clusters.rl:55 + te = p + 1 + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 11: +//line grapheme_clusters.rl:55 + te = p + p-- + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 12: +//line grapheme_clusters.rl:55 + te = p + p-- + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 13: +//line grapheme_clusters.rl:55 + te = p + p-- + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 14: +//line grapheme_clusters.rl:55 + te = p + p-- + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 15: +//line grapheme_clusters.rl:55 + te = p + p-- + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 16: +//line grapheme_clusters.rl:55 + te = p + p-- + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 17: +//line grapheme_clusters.rl:55 + p = (te) - 1 + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 18: +//line grapheme_clusters.rl:55 + p = (te) - 1 + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 19: +//line grapheme_clusters.rl:55 + p = (te) - 1 + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 20: +//line grapheme_clusters.rl:55 + p = (te) - 1 + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 21: +//line grapheme_clusters.rl:55 + p = (te) - 1 + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 22: +//line grapheme_clusters.rl:55 + p = (te) - 1 + { + return endPos + 1, data[startPos : endPos+1], nil + } + case 23: +//line NONE:1 + switch act { + case 0: + { + cs = 0 + goto _again + } + case 3: + { + p = (te) - 1 + + return endPos + 1, data[startPos : endPos+1], nil + } + case 4: + { + p = (te) - 1 + + return endPos + 1, data[startPos : endPos+1], nil + } + case 8: + { + p = (te) - 1 + + return endPos + 1, data[startPos : endPos+1], nil + } + } + +//line grapheme_clusters.go:4287 + } + } + + _again: + _acts = int(_graphclust_to_state_actions[cs]) + _nacts = uint(_graphclust_actions[_acts]) + _acts++ + for ; _nacts > 0; _nacts-- { + _acts++ + switch _graphclust_actions[_acts-1] { + case 2: +//line NONE:1 + ts = 0 + + case 3: +//line NONE:1 + act = 0 + +//line grapheme_clusters.go:4305 + } + } + + if cs == 0 { + goto _out + } + p++ + if p != pe { + goto _resume + } + _test_eof: + { + } + if p == eof { + if _graphclust_eof_trans[cs] > 0 { + _trans = int(_graphclust_eof_trans[cs] - 1) + goto _eof_trans + } + } + + _out: + { + } + } + +//line grapheme_clusters.rl:117 + + // If we fall out here then we were unable to complete a sequence. + // If we weren't able to complete a sequence then either we've + // reached the end of a partial buffer (so there's more data to come) + // or we have an isolated symbol that would normally be part of a + // grapheme cluster but has appeared in isolation here. + + if !atEOF { + // Request more + return 0, nil, nil + } + + // Just take the first UTF-8 sequence and return that. + _, seqLen := utf8.DecodeRune(data) + return seqLen, data[:seqLen], nil +} diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/grapheme_clusters.rl b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/grapheme_clusters.rl similarity index 100% rename from vendor/github.com/apparentlymart/go-textseg/v13/textseg/grapheme_clusters.rl rename to vendor/github.com/apparentlymart/go-textseg/v15/textseg/grapheme_clusters.rl diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/grapheme_clusters_table.rl b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/grapheme_clusters_table.rl similarity index 97% rename from vendor/github.com/apparentlymart/go-textseg/v13/textseg/grapheme_clusters_table.rl rename to vendor/github.com/apparentlymart/go-textseg/v15/textseg/grapheme_clusters_table.rl index 803dca19c58bd..3cff4291de142 100644 --- a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/grapheme_clusters_table.rl +++ b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/grapheme_clusters_table.rl @@ -1,5 +1,5 @@ # The following Ragel file was autogenerated with unicode2ragel.rb -# from: https://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakProperty.txt +# from: https://www.unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt # # It defines ["Prepend", "CR", "LF", "Control", "Extend", "Regional_Indicator", "SpacingMark", "L", "V", "T", "LV", "LVT", "ZWJ"]. # @@ -13,6 +13,7 @@ 0xD8 0x80..0x85 #Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER ... | 0xDB 0x9D #Cf ARABIC END OF AYAH | 0xDC 0x8F #Cf SYRIAC ABBREVIATION MARK + | 0xE0 0xA2 0x90..0x91 #Cf [2] ARABIC POUND MARK ABOVE..ARABIC PI... | 0xE0 0xA3 0xA2 #Cf ARABIC DISPUTED END OF AYAH | 0xE0 0xB5 0x8E #Lo MALAYALAM LETTER DOT REPH | 0xF0 0x91 0x82 0xBD #Cf KAITHI NUMBER SIGN @@ -23,6 +24,7 @@ | 0xF0 0x91 0xA8 0xBA #Lo ZANABAZAR SQUARE CLUSTER-INITIAL L... | 0xF0 0x91 0xAA 0x84..0x89 #Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOM... | 0xF0 0x91 0xB5 0x86 #Lo MASARAM GONDI REPHA + | 0xF0 0x91 0xBC 0x82 #Lo KAWI SIGN REPHA ; CR = @@ -53,7 +55,7 @@ | 0xEF 0xBB 0xBF #Cf ZERO WIDTH NO-BREAK SPACE | 0xEF 0xBF 0xB0..0xB8 #Cn [9] .. | 0xEF 0xBF 0xB9..0xBB #Cf [3] INTERLINEAR ANNOTATION ANCHOR..INT... - | 0xF0 0x93 0x90 0xB0..0xB8 #Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JO... + | 0xF0 0x93 0x90 0xB0..0xBF #Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JO... | 0xF0 0x9B 0xB2 0xA0..0xA3 #Cf [4] SHORTHAND FORMAT LETTER OVERLAP... | 0xF0 0x9D 0x85 0xB3..0xBA #Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSI... | 0xF3 0xA0 0x80 0x80 #Cn @@ -94,7 +96,8 @@ | 0xE0 0xA0 0xA5..0xA7 #Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMA... | 0xE0 0xA0 0xA9..0xAD #Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMAR... | 0xE0 0xA1 0x99..0x9B #Mn [3] MANDAIC AFFRICATION MARK..MANDAIC ... - | 0xE0 0xA3 0x93..0xA1 #Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL... + | 0xE0 0xA2 0x98..0x9F #Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARA... + | 0xE0 0xA3 0x8A..0xA1 #Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABI... | 0xE0 0xA3 0xA3..0xFF #Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAG... | 0xE0 0xA4 0x00..0x82 # | 0xE0 0xA4 0xBA #Mn DEVANAGARI VOWEL SIGN OE @@ -142,6 +145,7 @@ | 0xE0 0xAF 0x97 #Mc TAMIL AU LENGTH MARK | 0xE0 0xB0 0x80 #Mn TELUGU SIGN COMBINING CANDRABINDU ... | 0xE0 0xB0 0x84 #Mn TELUGU SIGN COMBINING ANUSVARA ABOVE + | 0xE0 0xB0 0xBC #Mn TELUGU SIGN NUKTA | 0xE0 0xB0 0xBE..0xFF #Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL... | 0xE0 0xB1 0x00..0x80 # | 0xE0 0xB1 0x86..0x88 #Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL ... @@ -174,7 +178,7 @@ | 0xE0 0xB9 0x87..0x8E #Mn [8] THAI CHARACTER MAITAIKHU..THAI CHA... | 0xE0 0xBA 0xB1 #Mn LAO VOWEL SIGN MAI KAN | 0xE0 0xBA 0xB4..0xBC #Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SI... - | 0xE0 0xBB 0x88..0x8D #Mn [6] LAO TONE MAI EK..LAO NIGGAHITA + | 0xE0 0xBB 0x88..0x8E #Mn [7] LAO TONE MAI EK..LAO YAMAKKAN | 0xE0 0xBC 0x98..0x99 #Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD P... | 0xE0 0xBC 0xB5 #Mn TIBETAN MARK NGAS BZUNG NYI ZLA | 0xE0 0xBC 0xB7 #Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS @@ -198,7 +202,7 @@ | 0xE1 0x82 0x9D #Mn MYANMAR VOWEL SIGN AITON AI | 0xE1 0x8D 0x9D..0x9F #Mn [3] ETHIOPIC COMBINING GEMINATION AND ... | 0xE1 0x9C 0x92..0x94 #Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN... - | 0xE1 0x9C 0xB2..0xB4 #Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN... + | 0xE1 0x9C 0xB2..0xB3 #Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWE... | 0xE1 0x9D 0x92..0x93 #Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SI... | 0xE1 0x9D 0xB2..0xB3 #Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VO... | 0xE1 0x9E 0xB4..0xB5 #Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOW... @@ -207,6 +211,7 @@ | 0xE1 0x9F 0x89..0x93 #Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN... | 0xE1 0x9F 0x9D #Mn KHMER SIGN ATTHACAN | 0xE1 0xA0 0x8B..0x8D #Mn [3] MONGOLIAN FREE VARIATION SELECTOR ... + | 0xE1 0xA0 0x8F #Mn MONGOLIAN FREE VARIATION SELECTOR ... | 0xE1 0xA2 0x85..0x86 #Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..... | 0xE1 0xA2 0xA9 #Mn MONGOLIAN LETTER ALI GALI DAGALGA | 0xE1 0xA4 0xA0..0xA2 #Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SI... @@ -224,8 +229,8 @@ | 0xE1 0xA9 0xBF #Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT | 0xE1 0xAA 0xB0..0xBD #Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCEN... | 0xE1 0xAA 0xBE #Me COMBINING PARENTHESES OVERLAY - | 0xE1 0xAA 0xBF..0xFF #Mn [2] COMBINING LATIN SMALL LETTER W BEL... - | 0xE1 0xAB 0x00..0x80 # + | 0xE1 0xAA 0xBF..0xFF #Mn [16] COMBINING LATIN SMALL LETTER W BEL... + | 0xE1 0xAB 0x00..0x8E # | 0xE1 0xAC 0x80..0x83 #Mn [4] BALINESE SIGN ULU RICEM..BALINESE ... | 0xE1 0xAC 0xB4 #Mn BALINESE SIGN REREKAN | 0xE1 0xAC 0xB5 #Mc BALINESE VOWEL SIGN TEDUNG @@ -249,8 +254,7 @@ | 0xE1 0xB3 0xAD #Mn VEDIC SIGN TIRYAK | 0xE1 0xB3 0xB4 #Mn VEDIC TONE CANDRA ABOVE | 0xE1 0xB3 0xB8..0xB9 #Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE ... - | 0xE1 0xB7 0x80..0xB9 #Mn [58] COMBINING DOTTED GRAVE ACCENT..COM... - | 0xE1 0xB7 0xBB..0xBF #Mn [5] COMBINING DELETION MARK..COMBINING... + | 0xE1 0xB7 0x80..0xBF #Mn [64] COMBINING DOTTED GRAVE ACCENT..COM... | 0xE2 0x80 0x8C #Cf ZERO WIDTH NON-JOINER | 0xE2 0x83 0x90..0x9C #Mn [13] COMBINING LEFT HARPOON ABOVE..COMB... | 0xE2 0x83 0x9D..0xA0 #Me [4] COMBINING ENCLOSING CIRCLE..COMBIN... @@ -314,14 +318,19 @@ | 0xF0 0x90 0xAB 0xA5..0xA6 #Mn [2] MANICHAEAN ABBREVIATION MARK AB... | 0xF0 0x90 0xB4 0xA4..0xA7 #Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..... | 0xF0 0x90 0xBA 0xAB..0xAC #Mn [2] YEZIDI COMBINING HAMZA MARK..YE... + | 0xF0 0x90 0xBB 0xBD..0xBF #Mn [3] ARABIC SMALL LOW WORD SAKTA..AR... | 0xF0 0x90 0xBD 0x86..0x90 #Mn [11] SOGDIAN COMBINING DOT BELOW..SO... + | 0xF0 0x90 0xBE 0x82..0x85 #Mn [4] OLD UYGHUR COMBINING DOT ABOVE.... | 0xF0 0x91 0x80 0x81 #Mn BRAHMI SIGN ANUSVARA | 0xF0 0x91 0x80 0xB8..0xFF #Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VI... | 0xF0 0x91 0x81 0x00..0x86 # + | 0xF0 0x91 0x81 0xB0 #Mn BRAHMI SIGN OLD TAMIL VIRAMA + | 0xF0 0x91 0x81 0xB3..0xB4 #Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHO... | 0xF0 0x91 0x81 0xBF..0xFF #Mn [3] BRAHMI NUMBER JOINER..KAITHI SI... | 0xF0 0x91 0x82 0x00..0x81 # | 0xF0 0x91 0x82 0xB3..0xB6 #Mn [4] KAITHI VOWEL SIGN U..KAITHI VOW... | 0xF0 0x91 0x82 0xB9..0xBA #Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN... + | 0xF0 0x91 0x83 0x82 #Mn KAITHI VOWEL SIGN VOCALIC R | 0xF0 0x91 0x84 0x80..0x82 #Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA... | 0xF0 0x91 0x84 0xA7..0xAB #Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOW... | 0xF0 0x91 0x84 0xAD..0xB4 #Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MA... @@ -334,6 +343,7 @@ | 0xF0 0x91 0x88 0xB4 #Mn KHOJKI SIGN ANUSVARA | 0xF0 0x91 0x88 0xB6..0xB7 #Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN ... | 0xF0 0x91 0x88 0xBE #Mn KHOJKI SIGN SUKUN + | 0xF0 0x91 0x89 0x81 #Mn KHOJKI VOWEL SIGN VOCALIC R | 0xF0 0x91 0x8B 0x9F #Mn KHUDAWADI SIGN ANUSVARA | 0xF0 0x91 0x8B 0xA3..0xAA #Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWA... | 0xF0 0x91 0x8C 0x80..0x81 #Mn [2] GRANTHA SIGN COMBINING ANUSVARA... @@ -405,12 +415,21 @@ | 0xF0 0x91 0xB6 0x95 #Mn GUNJALA GONDI SIGN ANUSVARA | 0xF0 0x91 0xB6 0x97 #Mn GUNJALA GONDI VIRAMA | 0xF0 0x91 0xBB 0xB3..0xB4 #Mn [2] MAKASAR VOWEL SIGN I..MAKASAR V... + | 0xF0 0x91 0xBC 0x80..0x81 #Mn [2] KAWI SIGN CANDRABINDU..KAWI SIG... + | 0xF0 0x91 0xBC 0xB6..0xBA #Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL S... + | 0xF0 0x91 0xBD 0x80 #Mn KAWI VOWEL SIGN EU + | 0xF0 0x91 0xBD 0x82 #Mn KAWI CONJOINER + | 0xF0 0x93 0x91 0x80 #Mn EGYPTIAN HIEROGLYPH MIRROR HORIZON... + | 0xF0 0x93 0x91 0x87..0x95 #Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DA... | 0xF0 0x96 0xAB 0xB0..0xB4 #Mn [5] BASSA VAH COMBINING HIGH TONE..... | 0xF0 0x96 0xAC 0xB0..0xB6 #Mn [7] PAHAWH HMONG MARK CIM TUB..PAHA... | 0xF0 0x96 0xBD 0x8F #Mn MIAO SIGN CONSONANT MODIFIER BAR | 0xF0 0x96 0xBE 0x8F..0x92 #Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW | 0xF0 0x96 0xBF 0xA4 #Mn KHITAN SMALL SCRIPT FILLER | 0xF0 0x9B 0xB2 0x9D..0x9E #Mn [2] DUPLOYAN THICK LETTER SELECTOR.... + | 0xF0 0x9C 0xBC 0x80..0xAD #Mn [46] ZNAMENNY COMBINING MARK GORAZDO... + | 0xF0 0x9C 0xBC 0xB0..0xFF #Mn [23] ZNAMENNY COMBINING TONAL RANGE ... + | 0xF0 0x9C 0xBD 0x00..0x86 # | 0xF0 0x9D 0x85 0xA5 #Mc MUSICAL SYMBOL COMBINING STEM | 0xF0 0x9D 0x85 0xA7..0xA9 #Mn [3] MUSICAL SYMBOL COMBINING TREMOL... | 0xF0 0x9D 0x85 0xAE..0xB2 #Mc [5] MUSICAL SYMBOL COMBINING FLAG-1... @@ -431,8 +450,11 @@ | 0xF0 0x9E 0x80 0x9B..0xA1 #Mn [7] COMBINING GLAGOLITIC LETTER SHT... | 0xF0 0x9E 0x80 0xA3..0xA4 #Mn [2] COMBINING GLAGOLITIC LETTER YU.... | 0xF0 0x9E 0x80 0xA6..0xAA #Mn [5] COMBINING GLAGOLITIC LETTER YO.... + | 0xF0 0x9E 0x82 0x8F #Mn COMBINING CYRILLIC SMALL LETTER BY... | 0xF0 0x9E 0x84 0xB0..0xB6 #Mn [7] NYIAKENG PUACHUE HMONG TONE-B..... + | 0xF0 0x9E 0x8A 0xAE #Mn TOTO SIGN RISING TONE | 0xF0 0x9E 0x8B 0xAC..0xAF #Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI + | 0xF0 0x9E 0x93 0xAC..0xAF #Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUN... | 0xF0 0x9E 0xA3 0x90..0x96 #Mn [7] MENDE KIKAKUI COMBINING NUMBER ... | 0xF0 0x9E 0xA5 0x84..0x8A #Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA | 0xF0 0x9F 0x8F 0xBB..0xBF #Sk [5] EMOJI MODIFIER FITZPATRICK TYPE... @@ -483,6 +505,7 @@ | 0xE0 0xB3 0x83..0x84 #Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANN... | 0xE0 0xB3 0x87..0x88 #Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOW... | 0xE0 0xB3 0x8A..0x8B #Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWE... + | 0xE0 0xB3 0xB3 #Mc KANNADA SIGN COMBINING ANUSVARA AB... | 0xE0 0xB4 0x82..0x83 #Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM... | 0xE0 0xB4 0xBF..0xFF #Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM ... | 0xE0 0xB5 0x00..0x80 # @@ -500,6 +523,8 @@ | 0xE1 0x80 0xBB..0xBC #Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..... | 0xE1 0x81 0x96..0x97 #Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYAN... | 0xE1 0x82 0x84 #Mc MYANMAR VOWEL SIGN SHAN E + | 0xE1 0x9C 0x95 #Mc TAGALOG SIGN PAMUDPOD + | 0xE1 0x9C 0xB4 #Mc HANUNOO SIGN PAMUDPOD | 0xE1 0x9E 0xB6 #Mc KHMER VOWEL SIGN AA | 0xE1 0x9E 0xBE..0xFF #Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL S... | 0xE1 0x9F 0x00..0x85 # @@ -589,7 +614,6 @@ | 0xF0 0x91 0x9A 0xAC #Mc TAKRI SIGN VISARGA | 0xF0 0x91 0x9A 0xAE..0xAF #Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL... | 0xF0 0x91 0x9A 0xB6 #Mc TAKRI SIGN VIRAMA - | 0xF0 0x91 0x9C 0xA0..0xA1 #Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL S... | 0xF0 0x91 0x9C 0xA6 #Mc AHOM VOWEL SIGN E | 0xF0 0x91 0xA0 0xAC..0xAE #Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWE... | 0xF0 0x91 0xA0 0xB8 #Mc DOGRA SIGN VISARGA @@ -613,6 +637,10 @@ | 0xF0 0x91 0xB6 0x93..0x94 #Mc [2] GUNJALA GONDI VOWEL SIGN OO..GU... | 0xF0 0x91 0xB6 0x96 #Mc GUNJALA GONDI SIGN VISARGA | 0xF0 0x91 0xBB 0xB5..0xB6 #Mc [2] MAKASAR VOWEL SIGN E..MAKASAR V... + | 0xF0 0x91 0xBC 0x83 #Mc KAWI SIGN VISARGA + | 0xF0 0x91 0xBC 0xB4..0xB5 #Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL ... + | 0xF0 0x91 0xBC 0xBE..0xBF #Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL S... + | 0xF0 0x91 0xBD 0x81 #Mc KAWI SIGN KILLER | 0xF0 0x96 0xBD 0x91..0xFF #Mc [55] MIAO SIGN ASPIRATION..MIAO VOWE... | 0xF0 0x96 0xBE 0x00..0x87 # | 0xF0 0x96 0xBF 0xB0..0xB1 #Mc [2] VIETNAMESE ALTERNATE READING MA... diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/tables.go b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/tables.go similarity index 93% rename from vendor/github.com/apparentlymart/go-textseg/v13/textseg/tables.go rename to vendor/github.com/apparentlymart/go-textseg/v15/textseg/tables.go index b3f22ad432fac..864268d5890d3 100644 --- a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/tables.go +++ b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/tables.go @@ -1,5 +1,5 @@ // Generated by running -// maketables --url=http://www.unicode.org/Public/12.0.0/ucd/auxiliary/ +// maketables --url=http://www.unicode.org/Public/15.0.0/ucd/auxiliary/ // DO NOT EDIT package textseg @@ -37,7 +37,7 @@ var _GraphemeControl = &unicode.RangeTable{ unicode.Range16{Lo: 0xfff9, Hi: 0xfffb, Stride: 0x1}, }, R32: []unicode.Range32{ - unicode.Range32{Lo: 0x13430, Hi: 0x13438, Stride: 0x1}, + unicode.Range32{Lo: 0x13430, Hi: 0x1343f, Stride: 0x1}, unicode.Range32{Lo: 0x1bca0, Hi: 0x1bca3, Stride: 0x1}, unicode.Range32{Lo: 0x1d173, Hi: 0x1d17a, Stride: 0x1}, unicode.Range32{Lo: 0xe0000, Hi: 0xe0000, Stride: 0x1}, @@ -76,7 +76,8 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x825, Hi: 0x827, Stride: 0x1}, unicode.Range16{Lo: 0x829, Hi: 0x82d, Stride: 0x1}, unicode.Range16{Lo: 0x859, Hi: 0x85b, Stride: 0x1}, - unicode.Range16{Lo: 0x8d3, Hi: 0x8e1, Stride: 0x1}, + unicode.Range16{Lo: 0x898, Hi: 0x89f, Stride: 0x1}, + unicode.Range16{Lo: 0x8ca, Hi: 0x8e1, Stride: 0x1}, unicode.Range16{Lo: 0x8e3, Hi: 0x902, Stride: 0x1}, unicode.Range16{Lo: 0x93a, Hi: 0x93a, Stride: 0x1}, unicode.Range16{Lo: 0x93c, Hi: 0x93c, Stride: 0x1}, @@ -113,7 +114,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xb3f, Hi: 0xb3f, Stride: 0x1}, unicode.Range16{Lo: 0xb41, Hi: 0xb44, Stride: 0x1}, unicode.Range16{Lo: 0xb4d, Hi: 0xb4d, Stride: 0x1}, - unicode.Range16{Lo: 0xb56, Hi: 0xb56, Stride: 0x1}, + unicode.Range16{Lo: 0xb55, Hi: 0xb56, Stride: 0x1}, unicode.Range16{Lo: 0xb57, Hi: 0xb57, Stride: 0x1}, unicode.Range16{Lo: 0xb62, Hi: 0xb63, Stride: 0x1}, unicode.Range16{Lo: 0xb82, Hi: 0xb82, Stride: 0x1}, @@ -123,6 +124,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xbd7, Hi: 0xbd7, Stride: 0x1}, unicode.Range16{Lo: 0xc00, Hi: 0xc00, Stride: 0x1}, unicode.Range16{Lo: 0xc04, Hi: 0xc04, Stride: 0x1}, + unicode.Range16{Lo: 0xc3c, Hi: 0xc3c, Stride: 0x1}, unicode.Range16{Lo: 0xc3e, Hi: 0xc40, Stride: 0x1}, unicode.Range16{Lo: 0xc46, Hi: 0xc48, Stride: 0x1}, unicode.Range16{Lo: 0xc4a, Hi: 0xc4d, Stride: 0x1}, @@ -143,6 +145,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xd4d, Hi: 0xd4d, Stride: 0x1}, unicode.Range16{Lo: 0xd57, Hi: 0xd57, Stride: 0x1}, unicode.Range16{Lo: 0xd62, Hi: 0xd63, Stride: 0x1}, + unicode.Range16{Lo: 0xd81, Hi: 0xd81, Stride: 0x1}, unicode.Range16{Lo: 0xdca, Hi: 0xdca, Stride: 0x1}, unicode.Range16{Lo: 0xdcf, Hi: 0xdcf, Stride: 0x1}, unicode.Range16{Lo: 0xdd2, Hi: 0xdd4, Stride: 0x1}, @@ -153,7 +156,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xe47, Hi: 0xe4e, Stride: 0x1}, unicode.Range16{Lo: 0xeb1, Hi: 0xeb1, Stride: 0x1}, unicode.Range16{Lo: 0xeb4, Hi: 0xebc, Stride: 0x1}, - unicode.Range16{Lo: 0xec8, Hi: 0xecd, Stride: 0x1}, + unicode.Range16{Lo: 0xec8, Hi: 0xece, Stride: 0x1}, unicode.Range16{Lo: 0xf18, Hi: 0xf19, Stride: 0x1}, unicode.Range16{Lo: 0xf35, Hi: 0xf35, Stride: 0x1}, unicode.Range16{Lo: 0xf37, Hi: 0xf37, Stride: 0x1}, @@ -177,7 +180,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x109d, Hi: 0x109d, Stride: 0x1}, unicode.Range16{Lo: 0x135d, Hi: 0x135f, Stride: 0x1}, unicode.Range16{Lo: 0x1712, Hi: 0x1714, Stride: 0x1}, - unicode.Range16{Lo: 0x1732, Hi: 0x1734, Stride: 0x1}, + unicode.Range16{Lo: 0x1732, Hi: 0x1733, Stride: 0x1}, unicode.Range16{Lo: 0x1752, Hi: 0x1753, Stride: 0x1}, unicode.Range16{Lo: 0x1772, Hi: 0x1773, Stride: 0x1}, unicode.Range16{Lo: 0x17b4, Hi: 0x17b5, Stride: 0x1}, @@ -186,6 +189,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x17c9, Hi: 0x17d3, Stride: 0x1}, unicode.Range16{Lo: 0x17dd, Hi: 0x17dd, Stride: 0x1}, unicode.Range16{Lo: 0x180b, Hi: 0x180d, Stride: 0x1}, + unicode.Range16{Lo: 0x180f, Hi: 0x180f, Stride: 0x1}, unicode.Range16{Lo: 0x1885, Hi: 0x1886, Stride: 0x1}, unicode.Range16{Lo: 0x18a9, Hi: 0x18a9, Stride: 0x1}, unicode.Range16{Lo: 0x1920, Hi: 0x1922, Stride: 0x1}, @@ -203,6 +207,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x1a7f, Hi: 0x1a7f, Stride: 0x1}, unicode.Range16{Lo: 0x1ab0, Hi: 0x1abd, Stride: 0x1}, unicode.Range16{Lo: 0x1abe, Hi: 0x1abe, Stride: 0x1}, + unicode.Range16{Lo: 0x1abf, Hi: 0x1ace, Stride: 0x1}, unicode.Range16{Lo: 0x1b00, Hi: 0x1b03, Stride: 0x1}, unicode.Range16{Lo: 0x1b34, Hi: 0x1b34, Stride: 0x1}, unicode.Range16{Lo: 0x1b35, Hi: 0x1b35, Stride: 0x1}, @@ -226,8 +231,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x1ced, Hi: 0x1ced, Stride: 0x1}, unicode.Range16{Lo: 0x1cf4, Hi: 0x1cf4, Stride: 0x1}, unicode.Range16{Lo: 0x1cf8, Hi: 0x1cf9, Stride: 0x1}, - unicode.Range16{Lo: 0x1dc0, Hi: 0x1df9, Stride: 0x1}, - unicode.Range16{Lo: 0x1dfb, Hi: 0x1dff, Stride: 0x1}, + unicode.Range16{Lo: 0x1dc0, Hi: 0x1dff, Stride: 0x1}, unicode.Range16{Lo: 0x200c, Hi: 0x200c, Stride: 0x1}, unicode.Range16{Lo: 0x20d0, Hi: 0x20dc, Stride: 0x1}, unicode.Range16{Lo: 0x20dd, Hi: 0x20e0, Stride: 0x1}, @@ -249,6 +253,7 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xa806, Hi: 0xa806, Stride: 0x1}, unicode.Range16{Lo: 0xa80b, Hi: 0xa80b, Stride: 0x1}, unicode.Range16{Lo: 0xa825, Hi: 0xa826, Stride: 0x1}, + unicode.Range16{Lo: 0xa82c, Hi: 0xa82c, Stride: 0x1}, unicode.Range16{Lo: 0xa8c4, Hi: 0xa8c5, Stride: 0x1}, unicode.Range16{Lo: 0xa8e0, Hi: 0xa8f1, Stride: 0x1}, unicode.Range16{Lo: 0xa8ff, Hi: 0xa8ff, Stride: 0x1}, @@ -291,12 +296,18 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x10a3f, Hi: 0x10a3f, Stride: 0x1}, unicode.Range32{Lo: 0x10ae5, Hi: 0x10ae6, Stride: 0x1}, unicode.Range32{Lo: 0x10d24, Hi: 0x10d27, Stride: 0x1}, + unicode.Range32{Lo: 0x10eab, Hi: 0x10eac, Stride: 0x1}, + unicode.Range32{Lo: 0x10efd, Hi: 0x10eff, Stride: 0x1}, unicode.Range32{Lo: 0x10f46, Hi: 0x10f50, Stride: 0x1}, + unicode.Range32{Lo: 0x10f82, Hi: 0x10f85, Stride: 0x1}, unicode.Range32{Lo: 0x11001, Hi: 0x11001, Stride: 0x1}, unicode.Range32{Lo: 0x11038, Hi: 0x11046, Stride: 0x1}, + unicode.Range32{Lo: 0x11070, Hi: 0x11070, Stride: 0x1}, + unicode.Range32{Lo: 0x11073, Hi: 0x11074, Stride: 0x1}, unicode.Range32{Lo: 0x1107f, Hi: 0x11081, Stride: 0x1}, unicode.Range32{Lo: 0x110b3, Hi: 0x110b6, Stride: 0x1}, unicode.Range32{Lo: 0x110b9, Hi: 0x110ba, Stride: 0x1}, + unicode.Range32{Lo: 0x110c2, Hi: 0x110c2, Stride: 0x1}, unicode.Range32{Lo: 0x11100, Hi: 0x11102, Stride: 0x1}, unicode.Range32{Lo: 0x11127, Hi: 0x1112b, Stride: 0x1}, unicode.Range32{Lo: 0x1112d, Hi: 0x11134, Stride: 0x1}, @@ -304,10 +315,12 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x11180, Hi: 0x11181, Stride: 0x1}, unicode.Range32{Lo: 0x111b6, Hi: 0x111be, Stride: 0x1}, unicode.Range32{Lo: 0x111c9, Hi: 0x111cc, Stride: 0x1}, + unicode.Range32{Lo: 0x111cf, Hi: 0x111cf, Stride: 0x1}, unicode.Range32{Lo: 0x1122f, Hi: 0x11231, Stride: 0x1}, unicode.Range32{Lo: 0x11234, Hi: 0x11234, Stride: 0x1}, unicode.Range32{Lo: 0x11236, Hi: 0x11237, Stride: 0x1}, unicode.Range32{Lo: 0x1123e, Hi: 0x1123e, Stride: 0x1}, + unicode.Range32{Lo: 0x11241, Hi: 0x11241, Stride: 0x1}, unicode.Range32{Lo: 0x112df, Hi: 0x112df, Stride: 0x1}, unicode.Range32{Lo: 0x112e3, Hi: 0x112ea, Stride: 0x1}, unicode.Range32{Lo: 0x11300, Hi: 0x11301, Stride: 0x1}, @@ -344,6 +357,10 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x11727, Hi: 0x1172b, Stride: 0x1}, unicode.Range32{Lo: 0x1182f, Hi: 0x11837, Stride: 0x1}, unicode.Range32{Lo: 0x11839, Hi: 0x1183a, Stride: 0x1}, + unicode.Range32{Lo: 0x11930, Hi: 0x11930, Stride: 0x1}, + unicode.Range32{Lo: 0x1193b, Hi: 0x1193c, Stride: 0x1}, + unicode.Range32{Lo: 0x1193e, Hi: 0x1193e, Stride: 0x1}, + unicode.Range32{Lo: 0x11943, Hi: 0x11943, Stride: 0x1}, unicode.Range32{Lo: 0x119d4, Hi: 0x119d7, Stride: 0x1}, unicode.Range32{Lo: 0x119da, Hi: 0x119db, Stride: 0x1}, unicode.Range32{Lo: 0x119e0, Hi: 0x119e0, Stride: 0x1}, @@ -371,11 +388,20 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x11d95, Hi: 0x11d95, Stride: 0x1}, unicode.Range32{Lo: 0x11d97, Hi: 0x11d97, Stride: 0x1}, unicode.Range32{Lo: 0x11ef3, Hi: 0x11ef4, Stride: 0x1}, + unicode.Range32{Lo: 0x11f00, Hi: 0x11f01, Stride: 0x1}, + unicode.Range32{Lo: 0x11f36, Hi: 0x11f3a, Stride: 0x1}, + unicode.Range32{Lo: 0x11f40, Hi: 0x11f40, Stride: 0x1}, + unicode.Range32{Lo: 0x11f42, Hi: 0x11f42, Stride: 0x1}, + unicode.Range32{Lo: 0x13440, Hi: 0x13440, Stride: 0x1}, + unicode.Range32{Lo: 0x13447, Hi: 0x13455, Stride: 0x1}, unicode.Range32{Lo: 0x16af0, Hi: 0x16af4, Stride: 0x1}, unicode.Range32{Lo: 0x16b30, Hi: 0x16b36, Stride: 0x1}, unicode.Range32{Lo: 0x16f4f, Hi: 0x16f4f, Stride: 0x1}, unicode.Range32{Lo: 0x16f8f, Hi: 0x16f92, Stride: 0x1}, + unicode.Range32{Lo: 0x16fe4, Hi: 0x16fe4, Stride: 0x1}, unicode.Range32{Lo: 0x1bc9d, Hi: 0x1bc9e, Stride: 0x1}, + unicode.Range32{Lo: 0x1cf00, Hi: 0x1cf2d, Stride: 0x1}, + unicode.Range32{Lo: 0x1cf30, Hi: 0x1cf46, Stride: 0x1}, unicode.Range32{Lo: 0x1d165, Hi: 0x1d165, Stride: 0x1}, unicode.Range32{Lo: 0x1d167, Hi: 0x1d169, Stride: 0x1}, unicode.Range32{Lo: 0x1d16e, Hi: 0x1d172, Stride: 0x1}, @@ -394,8 +420,11 @@ var _GraphemeExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x1e01b, Hi: 0x1e021, Stride: 0x1}, unicode.Range32{Lo: 0x1e023, Hi: 0x1e024, Stride: 0x1}, unicode.Range32{Lo: 0x1e026, Hi: 0x1e02a, Stride: 0x1}, + unicode.Range32{Lo: 0x1e08f, Hi: 0x1e08f, Stride: 0x1}, unicode.Range32{Lo: 0x1e130, Hi: 0x1e136, Stride: 0x1}, + unicode.Range32{Lo: 0x1e2ae, Hi: 0x1e2ae, Stride: 0x1}, unicode.Range32{Lo: 0x1e2ec, Hi: 0x1e2ef, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4ec, Hi: 0x1e4ef, Stride: 0x1}, unicode.Range32{Lo: 0x1e8d0, Hi: 0x1e8d6, Stride: 0x1}, unicode.Range32{Lo: 0x1e944, Hi: 0x1e94a, Stride: 0x1}, unicode.Range32{Lo: 0x1f3fb, Hi: 0x1f3ff, Stride: 0x1}, @@ -1235,6 +1264,7 @@ var _GraphemePrepend = &unicode.RangeTable{ unicode.Range16{Lo: 0x600, Hi: 0x605, Stride: 0x1}, unicode.Range16{Lo: 0x6dd, Hi: 0x6dd, Stride: 0x1}, unicode.Range16{Lo: 0x70f, Hi: 0x70f, Stride: 0x1}, + unicode.Range16{Lo: 0x890, Hi: 0x891, Stride: 0x1}, unicode.Range16{Lo: 0x8e2, Hi: 0x8e2, Stride: 0x1}, unicode.Range16{Lo: 0xd4e, Hi: 0xd4e, Stride: 0x1}, }, @@ -1242,9 +1272,12 @@ var _GraphemePrepend = &unicode.RangeTable{ unicode.Range32{Lo: 0x110bd, Hi: 0x110bd, Stride: 0x1}, unicode.Range32{Lo: 0x110cd, Hi: 0x110cd, Stride: 0x1}, unicode.Range32{Lo: 0x111c2, Hi: 0x111c3, Stride: 0x1}, + unicode.Range32{Lo: 0x1193f, Hi: 0x1193f, Stride: 0x1}, + unicode.Range32{Lo: 0x11941, Hi: 0x11941, Stride: 0x1}, unicode.Range32{Lo: 0x11a3a, Hi: 0x11a3a, Stride: 0x1}, unicode.Range32{Lo: 0x11a84, Hi: 0x11a89, Stride: 0x1}, unicode.Range32{Lo: 0x11d46, Hi: 0x11d46, Stride: 0x1}, + unicode.Range32{Lo: 0x11f02, Hi: 0x11f02, Stride: 0x1}, }, LatinOffset: 0, } @@ -1289,6 +1322,7 @@ var _GraphemeSpacingMark = &unicode.RangeTable{ unicode.Range16{Lo: 0xcc3, Hi: 0xcc4, Stride: 0x1}, unicode.Range16{Lo: 0xcc7, Hi: 0xcc8, Stride: 0x1}, unicode.Range16{Lo: 0xcca, Hi: 0xccb, Stride: 0x1}, + unicode.Range16{Lo: 0xcf3, Hi: 0xcf3, Stride: 0x1}, unicode.Range16{Lo: 0xd02, Hi: 0xd03, Stride: 0x1}, unicode.Range16{Lo: 0xd3f, Hi: 0xd40, Stride: 0x1}, unicode.Range16{Lo: 0xd46, Hi: 0xd48, Stride: 0x1}, @@ -1305,6 +1339,8 @@ var _GraphemeSpacingMark = &unicode.RangeTable{ unicode.Range16{Lo: 0x103b, Hi: 0x103c, Stride: 0x1}, unicode.Range16{Lo: 0x1056, Hi: 0x1057, Stride: 0x1}, unicode.Range16{Lo: 0x1084, Hi: 0x1084, Stride: 0x1}, + unicode.Range16{Lo: 0x1715, Hi: 0x1715, Stride: 0x1}, + unicode.Range16{Lo: 0x1734, Hi: 0x1734, Stride: 0x1}, unicode.Range16{Lo: 0x17b6, Hi: 0x17b6, Stride: 0x1}, unicode.Range16{Lo: 0x17be, Hi: 0x17c5, Stride: 0x1}, unicode.Range16{Lo: 0x17c7, Hi: 0x17c8, Stride: 0x1}, @@ -1363,6 +1399,7 @@ var _GraphemeSpacingMark = &unicode.RangeTable{ unicode.Range32{Lo: 0x11182, Hi: 0x11182, Stride: 0x1}, unicode.Range32{Lo: 0x111b3, Hi: 0x111b5, Stride: 0x1}, unicode.Range32{Lo: 0x111bf, Hi: 0x111c0, Stride: 0x1}, + unicode.Range32{Lo: 0x111ce, Hi: 0x111ce, Stride: 0x1}, unicode.Range32{Lo: 0x1122c, Hi: 0x1122e, Stride: 0x1}, unicode.Range32{Lo: 0x11232, Hi: 0x11233, Stride: 0x1}, unicode.Range32{Lo: 0x11235, Hi: 0x11235, Stride: 0x1}, @@ -1390,10 +1427,14 @@ var _GraphemeSpacingMark = &unicode.RangeTable{ unicode.Range32{Lo: 0x116ac, Hi: 0x116ac, Stride: 0x1}, unicode.Range32{Lo: 0x116ae, Hi: 0x116af, Stride: 0x1}, unicode.Range32{Lo: 0x116b6, Hi: 0x116b6, Stride: 0x1}, - unicode.Range32{Lo: 0x11720, Hi: 0x11721, Stride: 0x1}, unicode.Range32{Lo: 0x11726, Hi: 0x11726, Stride: 0x1}, unicode.Range32{Lo: 0x1182c, Hi: 0x1182e, Stride: 0x1}, unicode.Range32{Lo: 0x11838, Hi: 0x11838, Stride: 0x1}, + unicode.Range32{Lo: 0x11931, Hi: 0x11935, Stride: 0x1}, + unicode.Range32{Lo: 0x11937, Hi: 0x11938, Stride: 0x1}, + unicode.Range32{Lo: 0x1193d, Hi: 0x1193d, Stride: 0x1}, + unicode.Range32{Lo: 0x11940, Hi: 0x11940, Stride: 0x1}, + unicode.Range32{Lo: 0x11942, Hi: 0x11942, Stride: 0x1}, unicode.Range32{Lo: 0x119d1, Hi: 0x119d3, Stride: 0x1}, unicode.Range32{Lo: 0x119dc, Hi: 0x119df, Stride: 0x1}, unicode.Range32{Lo: 0x119e4, Hi: 0x119e4, Stride: 0x1}, @@ -1409,7 +1450,12 @@ var _GraphemeSpacingMark = &unicode.RangeTable{ unicode.Range32{Lo: 0x11d93, Hi: 0x11d94, Stride: 0x1}, unicode.Range32{Lo: 0x11d96, Hi: 0x11d96, Stride: 0x1}, unicode.Range32{Lo: 0x11ef5, Hi: 0x11ef6, Stride: 0x1}, + unicode.Range32{Lo: 0x11f03, Hi: 0x11f03, Stride: 0x1}, + unicode.Range32{Lo: 0x11f34, Hi: 0x11f35, Stride: 0x1}, + unicode.Range32{Lo: 0x11f3e, Hi: 0x11f3f, Stride: 0x1}, + unicode.Range32{Lo: 0x11f41, Hi: 0x11f41, Stride: 0x1}, unicode.Range32{Lo: 0x16f51, Hi: 0x16f87, Stride: 0x1}, + unicode.Range32{Lo: 0x16ff0, Hi: 0x16ff1, Stride: 0x1}, unicode.Range32{Lo: 0x1d166, Hi: 0x1d166, Stride: 0x1}, unicode.Range32{Lo: 0x1d16d, Hi: 0x1d16d, Stride: 0x1}, }, @@ -1528,6 +1574,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x2d2, Hi: 0x2d7, Stride: 0x1}, unicode.Range16{Lo: 0x2de, Hi: 0x2df, Stride: 0x1}, unicode.Range16{Lo: 0x2e0, Hi: 0x2e4, Stride: 0x1}, + unicode.Range16{Lo: 0x2e5, Hi: 0x2eb, Stride: 0x1}, unicode.Range16{Lo: 0x2ec, Hi: 0x2ec, Stride: 0x1}, unicode.Range16{Lo: 0x2ed, Hi: 0x2ed, Stride: 0x1}, unicode.Range16{Lo: 0x2ee, Hi: 0x2ee, Stride: 0x1}, @@ -1547,9 +1594,10 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x48a, Hi: 0x52f, Stride: 0x1}, unicode.Range16{Lo: 0x531, Hi: 0x556, Stride: 0x1}, unicode.Range16{Lo: 0x559, Hi: 0x559, Stride: 0x1}, - unicode.Range16{Lo: 0x55b, Hi: 0x55c, Stride: 0x1}, + unicode.Range16{Lo: 0x55a, Hi: 0x55c, Stride: 0x1}, unicode.Range16{Lo: 0x55e, Hi: 0x55e, Stride: 0x1}, unicode.Range16{Lo: 0x560, Hi: 0x588, Stride: 0x1}, + unicode.Range16{Lo: 0x58a, Hi: 0x58a, Stride: 0x1}, unicode.Range16{Lo: 0x5f3, Hi: 0x5f3, Stride: 0x1}, unicode.Range16{Lo: 0x620, Hi: 0x63f, Stride: 0x1}, unicode.Range16{Lo: 0x640, Hi: 0x640, Stride: 0x1}, @@ -1574,8 +1622,10 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x828, Hi: 0x828, Stride: 0x1}, unicode.Range16{Lo: 0x840, Hi: 0x858, Stride: 0x1}, unicode.Range16{Lo: 0x860, Hi: 0x86a, Stride: 0x1}, - unicode.Range16{Lo: 0x8a0, Hi: 0x8b4, Stride: 0x1}, - unicode.Range16{Lo: 0x8b6, Hi: 0x8bd, Stride: 0x1}, + unicode.Range16{Lo: 0x870, Hi: 0x887, Stride: 0x1}, + unicode.Range16{Lo: 0x889, Hi: 0x88e, Stride: 0x1}, + unicode.Range16{Lo: 0x8a0, Hi: 0x8c8, Stride: 0x1}, + unicode.Range16{Lo: 0x8c9, Hi: 0x8c9, Stride: 0x1}, unicode.Range16{Lo: 0x904, Hi: 0x939, Stride: 0x1}, unicode.Range16{Lo: 0x93d, Hi: 0x93d, Stride: 0x1}, unicode.Range16{Lo: 0x950, Hi: 0x950, Stride: 0x1}, @@ -1641,6 +1691,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0xc2a, Hi: 0xc39, Stride: 0x1}, unicode.Range16{Lo: 0xc3d, Hi: 0xc3d, Stride: 0x1}, unicode.Range16{Lo: 0xc58, Hi: 0xc5a, Stride: 0x1}, + unicode.Range16{Lo: 0xc5d, Hi: 0xc5d, Stride: 0x1}, unicode.Range16{Lo: 0xc60, Hi: 0xc61, Stride: 0x1}, unicode.Range16{Lo: 0xc80, Hi: 0xc80, Stride: 0x1}, unicode.Range16{Lo: 0xc85, Hi: 0xc8c, Stride: 0x1}, @@ -1649,10 +1700,10 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0xcaa, Hi: 0xcb3, Stride: 0x1}, unicode.Range16{Lo: 0xcb5, Hi: 0xcb9, Stride: 0x1}, unicode.Range16{Lo: 0xcbd, Hi: 0xcbd, Stride: 0x1}, - unicode.Range16{Lo: 0xcde, Hi: 0xcde, Stride: 0x1}, + unicode.Range16{Lo: 0xcdd, Hi: 0xcde, Stride: 0x1}, unicode.Range16{Lo: 0xce0, Hi: 0xce1, Stride: 0x1}, unicode.Range16{Lo: 0xcf1, Hi: 0xcf2, Stride: 0x1}, - unicode.Range16{Lo: 0xd05, Hi: 0xd0c, Stride: 0x1}, + unicode.Range16{Lo: 0xd04, Hi: 0xd0c, Stride: 0x1}, unicode.Range16{Lo: 0xd0e, Hi: 0xd10, Stride: 0x1}, unicode.Range16{Lo: 0xd12, Hi: 0xd3a, Stride: 0x1}, unicode.Range16{Lo: 0xd3d, Hi: 0xd3d, Stride: 0x1}, @@ -1700,9 +1751,8 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x16a0, Hi: 0x16ea, Stride: 0x1}, unicode.Range16{Lo: 0x16ee, Hi: 0x16f0, Stride: 0x1}, unicode.Range16{Lo: 0x16f1, Hi: 0x16f8, Stride: 0x1}, - unicode.Range16{Lo: 0x1700, Hi: 0x170c, Stride: 0x1}, - unicode.Range16{Lo: 0x170e, Hi: 0x1711, Stride: 0x1}, - unicode.Range16{Lo: 0x1720, Hi: 0x1731, Stride: 0x1}, + unicode.Range16{Lo: 0x1700, Hi: 0x1711, Stride: 0x1}, + unicode.Range16{Lo: 0x171f, Hi: 0x1731, Stride: 0x1}, unicode.Range16{Lo: 0x1740, Hi: 0x1751, Stride: 0x1}, unicode.Range16{Lo: 0x1760, Hi: 0x176c, Stride: 0x1}, unicode.Range16{Lo: 0x176e, Hi: 0x1770, Stride: 0x1}, @@ -1716,7 +1766,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x1900, Hi: 0x191e, Stride: 0x1}, unicode.Range16{Lo: 0x1a00, Hi: 0x1a16, Stride: 0x1}, unicode.Range16{Lo: 0x1b05, Hi: 0x1b33, Stride: 0x1}, - unicode.Range16{Lo: 0x1b45, Hi: 0x1b4b, Stride: 0x1}, + unicode.Range16{Lo: 0x1b45, Hi: 0x1b4c, Stride: 0x1}, unicode.Range16{Lo: 0x1b83, Hi: 0x1ba0, Stride: 0x1}, unicode.Range16{Lo: 0x1bae, Hi: 0x1baf, Stride: 0x1}, unicode.Range16{Lo: 0x1bba, Hi: 0x1be5, Stride: 0x1}, @@ -1778,9 +1828,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x2183, Hi: 0x2184, Stride: 0x1}, unicode.Range16{Lo: 0x2185, Hi: 0x2188, Stride: 0x1}, unicode.Range16{Lo: 0x24b6, Hi: 0x24e9, Stride: 0x1}, - unicode.Range16{Lo: 0x2c00, Hi: 0x2c2e, Stride: 0x1}, - unicode.Range16{Lo: 0x2c30, Hi: 0x2c5e, Stride: 0x1}, - unicode.Range16{Lo: 0x2c60, Hi: 0x2c7b, Stride: 0x1}, + unicode.Range16{Lo: 0x2c00, Hi: 0x2c7b, Stride: 0x1}, unicode.Range16{Lo: 0x2c7c, Hi: 0x2c7d, Stride: 0x1}, unicode.Range16{Lo: 0x2c7e, Hi: 0x2ce4, Stride: 0x1}, unicode.Range16{Lo: 0x2ceb, Hi: 0x2cee, Stride: 0x1}, @@ -1805,7 +1853,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x303c, Hi: 0x303c, Stride: 0x1}, unicode.Range16{Lo: 0x3105, Hi: 0x312f, Stride: 0x1}, unicode.Range16{Lo: 0x3131, Hi: 0x318e, Stride: 0x1}, - unicode.Range16{Lo: 0x31a0, Hi: 0x31ba, Stride: 0x1}, + unicode.Range16{Lo: 0x31a0, Hi: 0x31bf, Stride: 0x1}, unicode.Range16{Lo: 0xa000, Hi: 0xa014, Stride: 0x1}, unicode.Range16{Lo: 0xa015, Hi: 0xa015, Stride: 0x1}, unicode.Range16{Lo: 0xa016, Hi: 0xa48c, Stride: 0x1}, @@ -1822,6 +1870,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0xa69c, Hi: 0xa69d, Stride: 0x1}, unicode.Range16{Lo: 0xa6a0, Hi: 0xa6e5, Stride: 0x1}, unicode.Range16{Lo: 0xa6e6, Hi: 0xa6ef, Stride: 0x1}, + unicode.Range16{Lo: 0xa708, Hi: 0xa716, Stride: 0x1}, unicode.Range16{Lo: 0xa717, Hi: 0xa71f, Stride: 0x1}, unicode.Range16{Lo: 0xa720, Hi: 0xa721, Stride: 0x1}, unicode.Range16{Lo: 0xa722, Hi: 0xa76f, Stride: 0x1}, @@ -1831,8 +1880,12 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0xa789, Hi: 0xa78a, Stride: 0x1}, unicode.Range16{Lo: 0xa78b, Hi: 0xa78e, Stride: 0x1}, unicode.Range16{Lo: 0xa78f, Hi: 0xa78f, Stride: 0x1}, - unicode.Range16{Lo: 0xa790, Hi: 0xa7bf, Stride: 0x1}, - unicode.Range16{Lo: 0xa7c2, Hi: 0xa7c6, Stride: 0x1}, + unicode.Range16{Lo: 0xa790, Hi: 0xa7ca, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d0, Hi: 0xa7d1, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d3, Hi: 0xa7d3, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d5, Hi: 0xa7d9, Stride: 0x1}, + unicode.Range16{Lo: 0xa7f2, Hi: 0xa7f4, Stride: 0x1}, + unicode.Range16{Lo: 0xa7f5, Hi: 0xa7f6, Stride: 0x1}, unicode.Range16{Lo: 0xa7f7, Hi: 0xa7f7, Stride: 0x1}, unicode.Range16{Lo: 0xa7f8, Hi: 0xa7f9, Stride: 0x1}, unicode.Range16{Lo: 0xa7fa, Hi: 0xa7fa, Stride: 0x1}, @@ -1864,7 +1917,8 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range16{Lo: 0xab30, Hi: 0xab5a, Stride: 0x1}, unicode.Range16{Lo: 0xab5b, Hi: 0xab5b, Stride: 0x1}, unicode.Range16{Lo: 0xab5c, Hi: 0xab5f, Stride: 0x1}, - unicode.Range16{Lo: 0xab60, Hi: 0xab67, Stride: 0x1}, + unicode.Range16{Lo: 0xab60, Hi: 0xab68, Stride: 0x1}, + unicode.Range16{Lo: 0xab69, Hi: 0xab69, Stride: 0x1}, unicode.Range16{Lo: 0xab70, Hi: 0xabbf, Stride: 0x1}, unicode.Range16{Lo: 0xabc0, Hi: 0xabe2, Stride: 0x1}, unicode.Range16{Lo: 0xac00, Hi: 0xd7a3, Stride: 0x1}, @@ -1914,9 +1968,20 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x104d8, Hi: 0x104fb, Stride: 0x1}, unicode.Range32{Lo: 0x10500, Hi: 0x10527, Stride: 0x1}, unicode.Range32{Lo: 0x10530, Hi: 0x10563, Stride: 0x1}, + unicode.Range32{Lo: 0x10570, Hi: 0x1057a, Stride: 0x1}, + unicode.Range32{Lo: 0x1057c, Hi: 0x1058a, Stride: 0x1}, + unicode.Range32{Lo: 0x1058c, Hi: 0x10592, Stride: 0x1}, + unicode.Range32{Lo: 0x10594, Hi: 0x10595, Stride: 0x1}, + unicode.Range32{Lo: 0x10597, Hi: 0x105a1, Stride: 0x1}, + unicode.Range32{Lo: 0x105a3, Hi: 0x105b1, Stride: 0x1}, + unicode.Range32{Lo: 0x105b3, Hi: 0x105b9, Stride: 0x1}, + unicode.Range32{Lo: 0x105bb, Hi: 0x105bc, Stride: 0x1}, unicode.Range32{Lo: 0x10600, Hi: 0x10736, Stride: 0x1}, unicode.Range32{Lo: 0x10740, Hi: 0x10755, Stride: 0x1}, unicode.Range32{Lo: 0x10760, Hi: 0x10767, Stride: 0x1}, + unicode.Range32{Lo: 0x10780, Hi: 0x10785, Stride: 0x1}, + unicode.Range32{Lo: 0x10787, Hi: 0x107b0, Stride: 0x1}, + unicode.Range32{Lo: 0x107b2, Hi: 0x107ba, Stride: 0x1}, unicode.Range32{Lo: 0x10800, Hi: 0x10805, Stride: 0x1}, unicode.Range32{Lo: 0x10808, Hi: 0x10808, Stride: 0x1}, unicode.Range32{Lo: 0x1080a, Hi: 0x10835, Stride: 0x1}, @@ -1947,15 +2012,22 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x10c80, Hi: 0x10cb2, Stride: 0x1}, unicode.Range32{Lo: 0x10cc0, Hi: 0x10cf2, Stride: 0x1}, unicode.Range32{Lo: 0x10d00, Hi: 0x10d23, Stride: 0x1}, + unicode.Range32{Lo: 0x10e80, Hi: 0x10ea9, Stride: 0x1}, + unicode.Range32{Lo: 0x10eb0, Hi: 0x10eb1, Stride: 0x1}, unicode.Range32{Lo: 0x10f00, Hi: 0x10f1c, Stride: 0x1}, unicode.Range32{Lo: 0x10f27, Hi: 0x10f27, Stride: 0x1}, unicode.Range32{Lo: 0x10f30, Hi: 0x10f45, Stride: 0x1}, + unicode.Range32{Lo: 0x10f70, Hi: 0x10f81, Stride: 0x1}, + unicode.Range32{Lo: 0x10fb0, Hi: 0x10fc4, Stride: 0x1}, unicode.Range32{Lo: 0x10fe0, Hi: 0x10ff6, Stride: 0x1}, unicode.Range32{Lo: 0x11003, Hi: 0x11037, Stride: 0x1}, + unicode.Range32{Lo: 0x11071, Hi: 0x11072, Stride: 0x1}, + unicode.Range32{Lo: 0x11075, Hi: 0x11075, Stride: 0x1}, unicode.Range32{Lo: 0x11083, Hi: 0x110af, Stride: 0x1}, unicode.Range32{Lo: 0x110d0, Hi: 0x110e8, Stride: 0x1}, unicode.Range32{Lo: 0x11103, Hi: 0x11126, Stride: 0x1}, unicode.Range32{Lo: 0x11144, Hi: 0x11144, Stride: 0x1}, + unicode.Range32{Lo: 0x11147, Hi: 0x11147, Stride: 0x1}, unicode.Range32{Lo: 0x11150, Hi: 0x11172, Stride: 0x1}, unicode.Range32{Lo: 0x11176, Hi: 0x11176, Stride: 0x1}, unicode.Range32{Lo: 0x11183, Hi: 0x111b2, Stride: 0x1}, @@ -1964,6 +2036,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x111dc, Hi: 0x111dc, Stride: 0x1}, unicode.Range32{Lo: 0x11200, Hi: 0x11211, Stride: 0x1}, unicode.Range32{Lo: 0x11213, Hi: 0x1122b, Stride: 0x1}, + unicode.Range32{Lo: 0x1123f, Hi: 0x11240, Stride: 0x1}, unicode.Range32{Lo: 0x11280, Hi: 0x11286, Stride: 0x1}, unicode.Range32{Lo: 0x11288, Hi: 0x11288, Stride: 0x1}, unicode.Range32{Lo: 0x1128a, Hi: 0x1128d, Stride: 0x1}, @@ -1981,7 +2054,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x1135d, Hi: 0x11361, Stride: 0x1}, unicode.Range32{Lo: 0x11400, Hi: 0x11434, Stride: 0x1}, unicode.Range32{Lo: 0x11447, Hi: 0x1144a, Stride: 0x1}, - unicode.Range32{Lo: 0x1145f, Hi: 0x1145f, Stride: 0x1}, + unicode.Range32{Lo: 0x1145f, Hi: 0x11461, Stride: 0x1}, unicode.Range32{Lo: 0x11480, Hi: 0x114af, Stride: 0x1}, unicode.Range32{Lo: 0x114c4, Hi: 0x114c5, Stride: 0x1}, unicode.Range32{Lo: 0x114c7, Hi: 0x114c7, Stride: 0x1}, @@ -1993,7 +2066,13 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x116b8, Hi: 0x116b8, Stride: 0x1}, unicode.Range32{Lo: 0x11800, Hi: 0x1182b, Stride: 0x1}, unicode.Range32{Lo: 0x118a0, Hi: 0x118df, Stride: 0x1}, - unicode.Range32{Lo: 0x118ff, Hi: 0x118ff, Stride: 0x1}, + unicode.Range32{Lo: 0x118ff, Hi: 0x11906, Stride: 0x1}, + unicode.Range32{Lo: 0x11909, Hi: 0x11909, Stride: 0x1}, + unicode.Range32{Lo: 0x1190c, Hi: 0x11913, Stride: 0x1}, + unicode.Range32{Lo: 0x11915, Hi: 0x11916, Stride: 0x1}, + unicode.Range32{Lo: 0x11918, Hi: 0x1192f, Stride: 0x1}, + unicode.Range32{Lo: 0x1193f, Hi: 0x1193f, Stride: 0x1}, + unicode.Range32{Lo: 0x11941, Hi: 0x11941, Stride: 0x1}, unicode.Range32{Lo: 0x119a0, Hi: 0x119a7, Stride: 0x1}, unicode.Range32{Lo: 0x119aa, Hi: 0x119d0, Stride: 0x1}, unicode.Range32{Lo: 0x119e1, Hi: 0x119e1, Stride: 0x1}, @@ -2004,7 +2083,7 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x11a50, Hi: 0x11a50, Stride: 0x1}, unicode.Range32{Lo: 0x11a5c, Hi: 0x11a89, Stride: 0x1}, unicode.Range32{Lo: 0x11a9d, Hi: 0x11a9d, Stride: 0x1}, - unicode.Range32{Lo: 0x11ac0, Hi: 0x11af8, Stride: 0x1}, + unicode.Range32{Lo: 0x11ab0, Hi: 0x11af8, Stride: 0x1}, unicode.Range32{Lo: 0x11c00, Hi: 0x11c08, Stride: 0x1}, unicode.Range32{Lo: 0x11c0a, Hi: 0x11c2e, Stride: 0x1}, unicode.Range32{Lo: 0x11c40, Hi: 0x11c40, Stride: 0x1}, @@ -2018,13 +2097,20 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x11d6a, Hi: 0x11d89, Stride: 0x1}, unicode.Range32{Lo: 0x11d98, Hi: 0x11d98, Stride: 0x1}, unicode.Range32{Lo: 0x11ee0, Hi: 0x11ef2, Stride: 0x1}, + unicode.Range32{Lo: 0x11f02, Hi: 0x11f02, Stride: 0x1}, + unicode.Range32{Lo: 0x11f04, Hi: 0x11f10, Stride: 0x1}, + unicode.Range32{Lo: 0x11f12, Hi: 0x11f33, Stride: 0x1}, + unicode.Range32{Lo: 0x11fb0, Hi: 0x11fb0, Stride: 0x1}, unicode.Range32{Lo: 0x12000, Hi: 0x12399, Stride: 0x1}, unicode.Range32{Lo: 0x12400, Hi: 0x1246e, Stride: 0x1}, unicode.Range32{Lo: 0x12480, Hi: 0x12543, Stride: 0x1}, - unicode.Range32{Lo: 0x13000, Hi: 0x1342e, Stride: 0x1}, + unicode.Range32{Lo: 0x12f90, Hi: 0x12ff0, Stride: 0x1}, + unicode.Range32{Lo: 0x13000, Hi: 0x1342f, Stride: 0x1}, + unicode.Range32{Lo: 0x13441, Hi: 0x13446, Stride: 0x1}, unicode.Range32{Lo: 0x14400, Hi: 0x14646, Stride: 0x1}, unicode.Range32{Lo: 0x16800, Hi: 0x16a38, Stride: 0x1}, unicode.Range32{Lo: 0x16a40, Hi: 0x16a5e, Stride: 0x1}, + unicode.Range32{Lo: 0x16a70, Hi: 0x16abe, Stride: 0x1}, unicode.Range32{Lo: 0x16ad0, Hi: 0x16aed, Stride: 0x1}, unicode.Range32{Lo: 0x16b00, Hi: 0x16b2f, Stride: 0x1}, unicode.Range32{Lo: 0x16b40, Hi: 0x16b43, Stride: 0x1}, @@ -2070,10 +2156,22 @@ var _WordALetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x1d78a, Hi: 0x1d7a8, Stride: 0x1}, unicode.Range32{Lo: 0x1d7aa, Hi: 0x1d7c2, Stride: 0x1}, unicode.Range32{Lo: 0x1d7c4, Hi: 0x1d7cb, Stride: 0x1}, + unicode.Range32{Lo: 0x1df00, Hi: 0x1df09, Stride: 0x1}, + unicode.Range32{Lo: 0x1df0a, Hi: 0x1df0a, Stride: 0x1}, + unicode.Range32{Lo: 0x1df0b, Hi: 0x1df1e, Stride: 0x1}, + unicode.Range32{Lo: 0x1df25, Hi: 0x1df2a, Stride: 0x1}, + unicode.Range32{Lo: 0x1e030, Hi: 0x1e06d, Stride: 0x1}, unicode.Range32{Lo: 0x1e100, Hi: 0x1e12c, Stride: 0x1}, unicode.Range32{Lo: 0x1e137, Hi: 0x1e13d, Stride: 0x1}, unicode.Range32{Lo: 0x1e14e, Hi: 0x1e14e, Stride: 0x1}, + unicode.Range32{Lo: 0x1e290, Hi: 0x1e2ad, Stride: 0x1}, unicode.Range32{Lo: 0x1e2c0, Hi: 0x1e2eb, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4d0, Hi: 0x1e4ea, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4eb, Hi: 0x1e4eb, Stride: 0x1}, + unicode.Range32{Lo: 0x1e7e0, Hi: 0x1e7e6, Stride: 0x1}, + unicode.Range32{Lo: 0x1e7e8, Hi: 0x1e7eb, Stride: 0x1}, + unicode.Range32{Lo: 0x1e7ed, Hi: 0x1e7ee, Stride: 0x1}, + unicode.Range32{Lo: 0x1e7f0, Hi: 0x1e7fe, Stride: 0x1}, unicode.Range32{Lo: 0x1e800, Hi: 0x1e8c4, Stride: 0x1}, unicode.Range32{Lo: 0x1e900, Hi: 0x1e943, Stride: 0x1}, unicode.Range32{Lo: 0x1e94b, Hi: 0x1e94b, Stride: 0x1}, @@ -2158,7 +2256,8 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x825, Hi: 0x827, Stride: 0x1}, unicode.Range16{Lo: 0x829, Hi: 0x82d, Stride: 0x1}, unicode.Range16{Lo: 0x859, Hi: 0x85b, Stride: 0x1}, - unicode.Range16{Lo: 0x8d3, Hi: 0x8e1, Stride: 0x1}, + unicode.Range16{Lo: 0x898, Hi: 0x89f, Stride: 0x1}, + unicode.Range16{Lo: 0x8ca, Hi: 0x8e1, Stride: 0x1}, unicode.Range16{Lo: 0x8e3, Hi: 0x902, Stride: 0x1}, unicode.Range16{Lo: 0x903, Hi: 0x903, Stride: 0x1}, unicode.Range16{Lo: 0x93a, Hi: 0x93a, Stride: 0x1}, @@ -2213,7 +2312,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xb47, Hi: 0xb48, Stride: 0x1}, unicode.Range16{Lo: 0xb4b, Hi: 0xb4c, Stride: 0x1}, unicode.Range16{Lo: 0xb4d, Hi: 0xb4d, Stride: 0x1}, - unicode.Range16{Lo: 0xb56, Hi: 0xb56, Stride: 0x1}, + unicode.Range16{Lo: 0xb55, Hi: 0xb56, Stride: 0x1}, unicode.Range16{Lo: 0xb57, Hi: 0xb57, Stride: 0x1}, unicode.Range16{Lo: 0xb62, Hi: 0xb63, Stride: 0x1}, unicode.Range16{Lo: 0xb82, Hi: 0xb82, Stride: 0x1}, @@ -2227,6 +2326,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xc00, Hi: 0xc00, Stride: 0x1}, unicode.Range16{Lo: 0xc01, Hi: 0xc03, Stride: 0x1}, unicode.Range16{Lo: 0xc04, Hi: 0xc04, Stride: 0x1}, + unicode.Range16{Lo: 0xc3c, Hi: 0xc3c, Stride: 0x1}, unicode.Range16{Lo: 0xc3e, Hi: 0xc40, Stride: 0x1}, unicode.Range16{Lo: 0xc41, Hi: 0xc44, Stride: 0x1}, unicode.Range16{Lo: 0xc46, Hi: 0xc48, Stride: 0x1}, @@ -2245,6 +2345,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xccc, Hi: 0xccd, Stride: 0x1}, unicode.Range16{Lo: 0xcd5, Hi: 0xcd6, Stride: 0x1}, unicode.Range16{Lo: 0xce2, Hi: 0xce3, Stride: 0x1}, + unicode.Range16{Lo: 0xcf3, Hi: 0xcf3, Stride: 0x1}, unicode.Range16{Lo: 0xd00, Hi: 0xd01, Stride: 0x1}, unicode.Range16{Lo: 0xd02, Hi: 0xd03, Stride: 0x1}, unicode.Range16{Lo: 0xd3b, Hi: 0xd3c, Stride: 0x1}, @@ -2255,6 +2356,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xd4d, Hi: 0xd4d, Stride: 0x1}, unicode.Range16{Lo: 0xd57, Hi: 0xd57, Stride: 0x1}, unicode.Range16{Lo: 0xd62, Hi: 0xd63, Stride: 0x1}, + unicode.Range16{Lo: 0xd81, Hi: 0xd81, Stride: 0x1}, unicode.Range16{Lo: 0xd82, Hi: 0xd83, Stride: 0x1}, unicode.Range16{Lo: 0xdca, Hi: 0xdca, Stride: 0x1}, unicode.Range16{Lo: 0xdcf, Hi: 0xdd1, Stride: 0x1}, @@ -2267,7 +2369,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xe47, Hi: 0xe4e, Stride: 0x1}, unicode.Range16{Lo: 0xeb1, Hi: 0xeb1, Stride: 0x1}, unicode.Range16{Lo: 0xeb4, Hi: 0xebc, Stride: 0x1}, - unicode.Range16{Lo: 0xec8, Hi: 0xecd, Stride: 0x1}, + unicode.Range16{Lo: 0xec8, Hi: 0xece, Stride: 0x1}, unicode.Range16{Lo: 0xf18, Hi: 0xf19, Stride: 0x1}, unicode.Range16{Lo: 0xf35, Hi: 0xf35, Stride: 0x1}, unicode.Range16{Lo: 0xf37, Hi: 0xf37, Stride: 0x1}, @@ -2304,7 +2406,9 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x109d, Hi: 0x109d, Stride: 0x1}, unicode.Range16{Lo: 0x135d, Hi: 0x135f, Stride: 0x1}, unicode.Range16{Lo: 0x1712, Hi: 0x1714, Stride: 0x1}, - unicode.Range16{Lo: 0x1732, Hi: 0x1734, Stride: 0x1}, + unicode.Range16{Lo: 0x1715, Hi: 0x1715, Stride: 0x1}, + unicode.Range16{Lo: 0x1732, Hi: 0x1733, Stride: 0x1}, + unicode.Range16{Lo: 0x1734, Hi: 0x1734, Stride: 0x1}, unicode.Range16{Lo: 0x1752, Hi: 0x1753, Stride: 0x1}, unicode.Range16{Lo: 0x1772, Hi: 0x1773, Stride: 0x1}, unicode.Range16{Lo: 0x17b4, Hi: 0x17b5, Stride: 0x1}, @@ -2316,6 +2420,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x17c9, Hi: 0x17d3, Stride: 0x1}, unicode.Range16{Lo: 0x17dd, Hi: 0x17dd, Stride: 0x1}, unicode.Range16{Lo: 0x180b, Hi: 0x180d, Stride: 0x1}, + unicode.Range16{Lo: 0x180f, Hi: 0x180f, Stride: 0x1}, unicode.Range16{Lo: 0x1885, Hi: 0x1886, Stride: 0x1}, unicode.Range16{Lo: 0x18a9, Hi: 0x18a9, Stride: 0x1}, unicode.Range16{Lo: 0x1920, Hi: 0x1922, Stride: 0x1}, @@ -2343,6 +2448,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x1a7f, Hi: 0x1a7f, Stride: 0x1}, unicode.Range16{Lo: 0x1ab0, Hi: 0x1abd, Stride: 0x1}, unicode.Range16{Lo: 0x1abe, Hi: 0x1abe, Stride: 0x1}, + unicode.Range16{Lo: 0x1abf, Hi: 0x1ace, Stride: 0x1}, unicode.Range16{Lo: 0x1b00, Hi: 0x1b03, Stride: 0x1}, unicode.Range16{Lo: 0x1b04, Hi: 0x1b04, Stride: 0x1}, unicode.Range16{Lo: 0x1b34, Hi: 0x1b34, Stride: 0x1}, @@ -2382,8 +2488,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x1cf4, Hi: 0x1cf4, Stride: 0x1}, unicode.Range16{Lo: 0x1cf7, Hi: 0x1cf7, Stride: 0x1}, unicode.Range16{Lo: 0x1cf8, Hi: 0x1cf9, Stride: 0x1}, - unicode.Range16{Lo: 0x1dc0, Hi: 0x1df9, Stride: 0x1}, - unicode.Range16{Lo: 0x1dfb, Hi: 0x1dff, Stride: 0x1}, + unicode.Range16{Lo: 0x1dc0, Hi: 0x1dff, Stride: 0x1}, unicode.Range16{Lo: 0x200c, Hi: 0x200c, Stride: 0x1}, unicode.Range16{Lo: 0x20d0, Hi: 0x20dc, Stride: 0x1}, unicode.Range16{Lo: 0x20dd, Hi: 0x20e0, Stride: 0x1}, @@ -2407,6 +2512,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xa823, Hi: 0xa824, Stride: 0x1}, unicode.Range16{Lo: 0xa825, Hi: 0xa826, Stride: 0x1}, unicode.Range16{Lo: 0xa827, Hi: 0xa827, Stride: 0x1}, + unicode.Range16{Lo: 0xa82c, Hi: 0xa82c, Stride: 0x1}, unicode.Range16{Lo: 0xa880, Hi: 0xa881, Stride: 0x1}, unicode.Range16{Lo: 0xa8b4, Hi: 0xa8c3, Stride: 0x1}, unicode.Range16{Lo: 0xa8c4, Hi: 0xa8c5, Stride: 0x1}, @@ -2468,17 +2574,23 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x10a3f, Hi: 0x10a3f, Stride: 0x1}, unicode.Range32{Lo: 0x10ae5, Hi: 0x10ae6, Stride: 0x1}, unicode.Range32{Lo: 0x10d24, Hi: 0x10d27, Stride: 0x1}, + unicode.Range32{Lo: 0x10eab, Hi: 0x10eac, Stride: 0x1}, + unicode.Range32{Lo: 0x10efd, Hi: 0x10eff, Stride: 0x1}, unicode.Range32{Lo: 0x10f46, Hi: 0x10f50, Stride: 0x1}, + unicode.Range32{Lo: 0x10f82, Hi: 0x10f85, Stride: 0x1}, unicode.Range32{Lo: 0x11000, Hi: 0x11000, Stride: 0x1}, unicode.Range32{Lo: 0x11001, Hi: 0x11001, Stride: 0x1}, unicode.Range32{Lo: 0x11002, Hi: 0x11002, Stride: 0x1}, unicode.Range32{Lo: 0x11038, Hi: 0x11046, Stride: 0x1}, + unicode.Range32{Lo: 0x11070, Hi: 0x11070, Stride: 0x1}, + unicode.Range32{Lo: 0x11073, Hi: 0x11074, Stride: 0x1}, unicode.Range32{Lo: 0x1107f, Hi: 0x11081, Stride: 0x1}, unicode.Range32{Lo: 0x11082, Hi: 0x11082, Stride: 0x1}, unicode.Range32{Lo: 0x110b0, Hi: 0x110b2, Stride: 0x1}, unicode.Range32{Lo: 0x110b3, Hi: 0x110b6, Stride: 0x1}, unicode.Range32{Lo: 0x110b7, Hi: 0x110b8, Stride: 0x1}, unicode.Range32{Lo: 0x110b9, Hi: 0x110ba, Stride: 0x1}, + unicode.Range32{Lo: 0x110c2, Hi: 0x110c2, Stride: 0x1}, unicode.Range32{Lo: 0x11100, Hi: 0x11102, Stride: 0x1}, unicode.Range32{Lo: 0x11127, Hi: 0x1112b, Stride: 0x1}, unicode.Range32{Lo: 0x1112c, Hi: 0x1112c, Stride: 0x1}, @@ -2491,6 +2603,8 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x111b6, Hi: 0x111be, Stride: 0x1}, unicode.Range32{Lo: 0x111bf, Hi: 0x111c0, Stride: 0x1}, unicode.Range32{Lo: 0x111c9, Hi: 0x111cc, Stride: 0x1}, + unicode.Range32{Lo: 0x111ce, Hi: 0x111ce, Stride: 0x1}, + unicode.Range32{Lo: 0x111cf, Hi: 0x111cf, Stride: 0x1}, unicode.Range32{Lo: 0x1122c, Hi: 0x1122e, Stride: 0x1}, unicode.Range32{Lo: 0x1122f, Hi: 0x11231, Stride: 0x1}, unicode.Range32{Lo: 0x11232, Hi: 0x11233, Stride: 0x1}, @@ -2498,6 +2612,7 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x11235, Hi: 0x11235, Stride: 0x1}, unicode.Range32{Lo: 0x11236, Hi: 0x11237, Stride: 0x1}, unicode.Range32{Lo: 0x1123e, Hi: 0x1123e, Stride: 0x1}, + unicode.Range32{Lo: 0x11241, Hi: 0x11241, Stride: 0x1}, unicode.Range32{Lo: 0x112df, Hi: 0x112df, Stride: 0x1}, unicode.Range32{Lo: 0x112e0, Hi: 0x112e2, Stride: 0x1}, unicode.Range32{Lo: 0x112e3, Hi: 0x112ea, Stride: 0x1}, @@ -2557,6 +2672,14 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x1182f, Hi: 0x11837, Stride: 0x1}, unicode.Range32{Lo: 0x11838, Hi: 0x11838, Stride: 0x1}, unicode.Range32{Lo: 0x11839, Hi: 0x1183a, Stride: 0x1}, + unicode.Range32{Lo: 0x11930, Hi: 0x11935, Stride: 0x1}, + unicode.Range32{Lo: 0x11937, Hi: 0x11938, Stride: 0x1}, + unicode.Range32{Lo: 0x1193b, Hi: 0x1193c, Stride: 0x1}, + unicode.Range32{Lo: 0x1193d, Hi: 0x1193d, Stride: 0x1}, + unicode.Range32{Lo: 0x1193e, Hi: 0x1193e, Stride: 0x1}, + unicode.Range32{Lo: 0x11940, Hi: 0x11940, Stride: 0x1}, + unicode.Range32{Lo: 0x11942, Hi: 0x11942, Stride: 0x1}, + unicode.Range32{Lo: 0x11943, Hi: 0x11943, Stride: 0x1}, unicode.Range32{Lo: 0x119d1, Hi: 0x119d3, Stride: 0x1}, unicode.Range32{Lo: 0x119d4, Hi: 0x119d7, Stride: 0x1}, unicode.Range32{Lo: 0x119da, Hi: 0x119db, Stride: 0x1}, @@ -2599,12 +2722,26 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x11d97, Hi: 0x11d97, Stride: 0x1}, unicode.Range32{Lo: 0x11ef3, Hi: 0x11ef4, Stride: 0x1}, unicode.Range32{Lo: 0x11ef5, Hi: 0x11ef6, Stride: 0x1}, + unicode.Range32{Lo: 0x11f00, Hi: 0x11f01, Stride: 0x1}, + unicode.Range32{Lo: 0x11f03, Hi: 0x11f03, Stride: 0x1}, + unicode.Range32{Lo: 0x11f34, Hi: 0x11f35, Stride: 0x1}, + unicode.Range32{Lo: 0x11f36, Hi: 0x11f3a, Stride: 0x1}, + unicode.Range32{Lo: 0x11f3e, Hi: 0x11f3f, Stride: 0x1}, + unicode.Range32{Lo: 0x11f40, Hi: 0x11f40, Stride: 0x1}, + unicode.Range32{Lo: 0x11f41, Hi: 0x11f41, Stride: 0x1}, + unicode.Range32{Lo: 0x11f42, Hi: 0x11f42, Stride: 0x1}, + unicode.Range32{Lo: 0x13440, Hi: 0x13440, Stride: 0x1}, + unicode.Range32{Lo: 0x13447, Hi: 0x13455, Stride: 0x1}, unicode.Range32{Lo: 0x16af0, Hi: 0x16af4, Stride: 0x1}, unicode.Range32{Lo: 0x16b30, Hi: 0x16b36, Stride: 0x1}, unicode.Range32{Lo: 0x16f4f, Hi: 0x16f4f, Stride: 0x1}, unicode.Range32{Lo: 0x16f51, Hi: 0x16f87, Stride: 0x1}, unicode.Range32{Lo: 0x16f8f, Hi: 0x16f92, Stride: 0x1}, + unicode.Range32{Lo: 0x16fe4, Hi: 0x16fe4, Stride: 0x1}, + unicode.Range32{Lo: 0x16ff0, Hi: 0x16ff1, Stride: 0x1}, unicode.Range32{Lo: 0x1bc9d, Hi: 0x1bc9e, Stride: 0x1}, + unicode.Range32{Lo: 0x1cf00, Hi: 0x1cf2d, Stride: 0x1}, + unicode.Range32{Lo: 0x1cf30, Hi: 0x1cf46, Stride: 0x1}, unicode.Range32{Lo: 0x1d165, Hi: 0x1d166, Stride: 0x1}, unicode.Range32{Lo: 0x1d167, Hi: 0x1d169, Stride: 0x1}, unicode.Range32{Lo: 0x1d16d, Hi: 0x1d172, Stride: 0x1}, @@ -2623,8 +2760,11 @@ var _WordExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x1e01b, Hi: 0x1e021, Stride: 0x1}, unicode.Range32{Lo: 0x1e023, Hi: 0x1e024, Stride: 0x1}, unicode.Range32{Lo: 0x1e026, Hi: 0x1e02a, Stride: 0x1}, + unicode.Range32{Lo: 0x1e08f, Hi: 0x1e08f, Stride: 0x1}, unicode.Range32{Lo: 0x1e130, Hi: 0x1e136, Stride: 0x1}, + unicode.Range32{Lo: 0x1e2ae, Hi: 0x1e2ae, Stride: 0x1}, unicode.Range32{Lo: 0x1e2ec, Hi: 0x1e2ef, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4ec, Hi: 0x1e4ef, Stride: 0x1}, unicode.Range32{Lo: 0x1e8d0, Hi: 0x1e8d6, Stride: 0x1}, unicode.Range32{Lo: 0x1e944, Hi: 0x1e94a, Stride: 0x1}, unicode.Range32{Lo: 0x1f3fb, Hi: 0x1f3ff, Stride: 0x1}, @@ -2654,6 +2794,7 @@ var _WordFormat = &unicode.RangeTable{ unicode.Range16{Lo: 0x61c, Hi: 0x61c, Stride: 0x1}, unicode.Range16{Lo: 0x6dd, Hi: 0x6dd, Stride: 0x1}, unicode.Range16{Lo: 0x70f, Hi: 0x70f, Stride: 0x1}, + unicode.Range16{Lo: 0x890, Hi: 0x891, Stride: 0x1}, unicode.Range16{Lo: 0x8e2, Hi: 0x8e2, Stride: 0x1}, unicode.Range16{Lo: 0x180e, Hi: 0x180e, Stride: 0x1}, unicode.Range16{Lo: 0x200e, Hi: 0x200f, Stride: 0x1}, @@ -2666,7 +2807,7 @@ var _WordFormat = &unicode.RangeTable{ R32: []unicode.Range32{ unicode.Range32{Lo: 0x110bd, Hi: 0x110bd, Stride: 0x1}, unicode.Range32{Lo: 0x110cd, Hi: 0x110cd, Stride: 0x1}, - unicode.Range32{Lo: 0x13430, Hi: 0x13438, Stride: 0x1}, + unicode.Range32{Lo: 0x13430, Hi: 0x1343f, Stride: 0x1}, unicode.Range32{Lo: 0x1bca0, Hi: 0x1bca3, Stride: 0x1}, unicode.Range32{Lo: 0x1d173, Hi: 0x1d17a, Stride: 0x1}, unicode.Range32{Lo: 0xe0001, Hi: 0xe0001, Stride: 0x1}, @@ -2706,7 +2847,12 @@ var _WordKatakana = &unicode.RangeTable{ unicode.Range16{Lo: 0xff71, Hi: 0xff9d, Stride: 0x1}, }, R32: []unicode.Range32{ + unicode.Range32{Lo: 0x1aff0, Hi: 0x1aff3, Stride: 0x1}, + unicode.Range32{Lo: 0x1aff5, Hi: 0x1affb, Stride: 0x1}, + unicode.Range32{Lo: 0x1affd, Hi: 0x1affe, Stride: 0x1}, unicode.Range32{Lo: 0x1b000, Hi: 0x1b000, Stride: 0x1}, + unicode.Range32{Lo: 0x1b120, Hi: 0x1b122, Stride: 0x1}, + unicode.Range32{Lo: 0x1b155, Hi: 0x1b155, Stride: 0x1}, unicode.Range32{Lo: 0x1b164, Hi: 0x1b167, Stride: 0x1}, }, LatinOffset: 0, @@ -2724,6 +2870,7 @@ var _WordMidLetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x3a, Hi: 0x3a, Stride: 0x1}, unicode.Range16{Lo: 0xb7, Hi: 0xb7, Stride: 0x1}, unicode.Range16{Lo: 0x387, Hi: 0x387, Stride: 0x1}, + unicode.Range16{Lo: 0x55f, Hi: 0x55f, Stride: 0x1}, unicode.Range16{Lo: 0x5f4, Hi: 0x5f4, Stride: 0x1}, unicode.Range16{Lo: 0x2027, Hi: 0x2027, Stride: 0x1}, unicode.Range16{Lo: 0xfe13, Hi: 0xfe13, Stride: 0x1}, @@ -2831,15 +2978,20 @@ var _WordNumeric = &unicode.RangeTable{ unicode.Range32{Lo: 0x116c0, Hi: 0x116c9, Stride: 0x1}, unicode.Range32{Lo: 0x11730, Hi: 0x11739, Stride: 0x1}, unicode.Range32{Lo: 0x118e0, Hi: 0x118e9, Stride: 0x1}, + unicode.Range32{Lo: 0x11950, Hi: 0x11959, Stride: 0x1}, unicode.Range32{Lo: 0x11c50, Hi: 0x11c59, Stride: 0x1}, unicode.Range32{Lo: 0x11d50, Hi: 0x11d59, Stride: 0x1}, unicode.Range32{Lo: 0x11da0, Hi: 0x11da9, Stride: 0x1}, + unicode.Range32{Lo: 0x11f50, Hi: 0x11f59, Stride: 0x1}, unicode.Range32{Lo: 0x16a60, Hi: 0x16a69, Stride: 0x1}, + unicode.Range32{Lo: 0x16ac0, Hi: 0x16ac9, Stride: 0x1}, unicode.Range32{Lo: 0x16b50, Hi: 0x16b59, Stride: 0x1}, unicode.Range32{Lo: 0x1d7ce, Hi: 0x1d7ff, Stride: 0x1}, unicode.Range32{Lo: 0x1e140, Hi: 0x1e149, Stride: 0x1}, unicode.Range32{Lo: 0x1e2f0, Hi: 0x1e2f9, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4f0, Hi: 0x1e4f9, Stride: 0x1}, unicode.Range32{Lo: 0x1e950, Hi: 0x1e959, Stride: 0x1}, + unicode.Range32{Lo: 0x1fbf0, Hi: 0x1fbf9, Stride: 0x1}, }, LatinOffset: 1, } @@ -3099,6 +3251,14 @@ var _SentenceClose = &unicode.RangeTable{ unicode.Range16{Lo: 0x2e28, Hi: 0x2e28, Stride: 0x1}, unicode.Range16{Lo: 0x2e29, Hi: 0x2e29, Stride: 0x1}, unicode.Range16{Lo: 0x2e42, Hi: 0x2e42, Stride: 0x1}, + unicode.Range16{Lo: 0x2e55, Hi: 0x2e55, Stride: 0x1}, + unicode.Range16{Lo: 0x2e56, Hi: 0x2e56, Stride: 0x1}, + unicode.Range16{Lo: 0x2e57, Hi: 0x2e57, Stride: 0x1}, + unicode.Range16{Lo: 0x2e58, Hi: 0x2e58, Stride: 0x1}, + unicode.Range16{Lo: 0x2e59, Hi: 0x2e59, Stride: 0x1}, + unicode.Range16{Lo: 0x2e5a, Hi: 0x2e5a, Stride: 0x1}, + unicode.Range16{Lo: 0x2e5b, Hi: 0x2e5b, Stride: 0x1}, + unicode.Range16{Lo: 0x2e5c, Hi: 0x2e5c, Stride: 0x1}, unicode.Range16{Lo: 0x3008, Hi: 0x3008, Stride: 0x1}, unicode.Range16{Lo: 0x3009, Hi: 0x3009, Stride: 0x1}, unicode.Range16{Lo: 0x300a, Hi: 0x300a, Stride: 0x1}, @@ -3191,7 +3351,8 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x825, Hi: 0x827, Stride: 0x1}, unicode.Range16{Lo: 0x829, Hi: 0x82d, Stride: 0x1}, unicode.Range16{Lo: 0x859, Hi: 0x85b, Stride: 0x1}, - unicode.Range16{Lo: 0x8d3, Hi: 0x8e1, Stride: 0x1}, + unicode.Range16{Lo: 0x898, Hi: 0x89f, Stride: 0x1}, + unicode.Range16{Lo: 0x8ca, Hi: 0x8e1, Stride: 0x1}, unicode.Range16{Lo: 0x8e3, Hi: 0x902, Stride: 0x1}, unicode.Range16{Lo: 0x903, Hi: 0x903, Stride: 0x1}, unicode.Range16{Lo: 0x93a, Hi: 0x93a, Stride: 0x1}, @@ -3246,7 +3407,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xb47, Hi: 0xb48, Stride: 0x1}, unicode.Range16{Lo: 0xb4b, Hi: 0xb4c, Stride: 0x1}, unicode.Range16{Lo: 0xb4d, Hi: 0xb4d, Stride: 0x1}, - unicode.Range16{Lo: 0xb56, Hi: 0xb56, Stride: 0x1}, + unicode.Range16{Lo: 0xb55, Hi: 0xb56, Stride: 0x1}, unicode.Range16{Lo: 0xb57, Hi: 0xb57, Stride: 0x1}, unicode.Range16{Lo: 0xb62, Hi: 0xb63, Stride: 0x1}, unicode.Range16{Lo: 0xb82, Hi: 0xb82, Stride: 0x1}, @@ -3260,6 +3421,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xc00, Hi: 0xc00, Stride: 0x1}, unicode.Range16{Lo: 0xc01, Hi: 0xc03, Stride: 0x1}, unicode.Range16{Lo: 0xc04, Hi: 0xc04, Stride: 0x1}, + unicode.Range16{Lo: 0xc3c, Hi: 0xc3c, Stride: 0x1}, unicode.Range16{Lo: 0xc3e, Hi: 0xc40, Stride: 0x1}, unicode.Range16{Lo: 0xc41, Hi: 0xc44, Stride: 0x1}, unicode.Range16{Lo: 0xc46, Hi: 0xc48, Stride: 0x1}, @@ -3278,6 +3440,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xccc, Hi: 0xccd, Stride: 0x1}, unicode.Range16{Lo: 0xcd5, Hi: 0xcd6, Stride: 0x1}, unicode.Range16{Lo: 0xce2, Hi: 0xce3, Stride: 0x1}, + unicode.Range16{Lo: 0xcf3, Hi: 0xcf3, Stride: 0x1}, unicode.Range16{Lo: 0xd00, Hi: 0xd01, Stride: 0x1}, unicode.Range16{Lo: 0xd02, Hi: 0xd03, Stride: 0x1}, unicode.Range16{Lo: 0xd3b, Hi: 0xd3c, Stride: 0x1}, @@ -3288,6 +3451,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xd4d, Hi: 0xd4d, Stride: 0x1}, unicode.Range16{Lo: 0xd57, Hi: 0xd57, Stride: 0x1}, unicode.Range16{Lo: 0xd62, Hi: 0xd63, Stride: 0x1}, + unicode.Range16{Lo: 0xd81, Hi: 0xd81, Stride: 0x1}, unicode.Range16{Lo: 0xd82, Hi: 0xd83, Stride: 0x1}, unicode.Range16{Lo: 0xdca, Hi: 0xdca, Stride: 0x1}, unicode.Range16{Lo: 0xdcf, Hi: 0xdd1, Stride: 0x1}, @@ -3300,7 +3464,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xe47, Hi: 0xe4e, Stride: 0x1}, unicode.Range16{Lo: 0xeb1, Hi: 0xeb1, Stride: 0x1}, unicode.Range16{Lo: 0xeb4, Hi: 0xebc, Stride: 0x1}, - unicode.Range16{Lo: 0xec8, Hi: 0xecd, Stride: 0x1}, + unicode.Range16{Lo: 0xec8, Hi: 0xece, Stride: 0x1}, unicode.Range16{Lo: 0xf18, Hi: 0xf19, Stride: 0x1}, unicode.Range16{Lo: 0xf35, Hi: 0xf35, Stride: 0x1}, unicode.Range16{Lo: 0xf37, Hi: 0xf37, Stride: 0x1}, @@ -3337,7 +3501,9 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x109d, Hi: 0x109d, Stride: 0x1}, unicode.Range16{Lo: 0x135d, Hi: 0x135f, Stride: 0x1}, unicode.Range16{Lo: 0x1712, Hi: 0x1714, Stride: 0x1}, - unicode.Range16{Lo: 0x1732, Hi: 0x1734, Stride: 0x1}, + unicode.Range16{Lo: 0x1715, Hi: 0x1715, Stride: 0x1}, + unicode.Range16{Lo: 0x1732, Hi: 0x1733, Stride: 0x1}, + unicode.Range16{Lo: 0x1734, Hi: 0x1734, Stride: 0x1}, unicode.Range16{Lo: 0x1752, Hi: 0x1753, Stride: 0x1}, unicode.Range16{Lo: 0x1772, Hi: 0x1773, Stride: 0x1}, unicode.Range16{Lo: 0x17b4, Hi: 0x17b5, Stride: 0x1}, @@ -3349,6 +3515,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x17c9, Hi: 0x17d3, Stride: 0x1}, unicode.Range16{Lo: 0x17dd, Hi: 0x17dd, Stride: 0x1}, unicode.Range16{Lo: 0x180b, Hi: 0x180d, Stride: 0x1}, + unicode.Range16{Lo: 0x180f, Hi: 0x180f, Stride: 0x1}, unicode.Range16{Lo: 0x1885, Hi: 0x1886, Stride: 0x1}, unicode.Range16{Lo: 0x18a9, Hi: 0x18a9, Stride: 0x1}, unicode.Range16{Lo: 0x1920, Hi: 0x1922, Stride: 0x1}, @@ -3376,6 +3543,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x1a7f, Hi: 0x1a7f, Stride: 0x1}, unicode.Range16{Lo: 0x1ab0, Hi: 0x1abd, Stride: 0x1}, unicode.Range16{Lo: 0x1abe, Hi: 0x1abe, Stride: 0x1}, + unicode.Range16{Lo: 0x1abf, Hi: 0x1ace, Stride: 0x1}, unicode.Range16{Lo: 0x1b00, Hi: 0x1b03, Stride: 0x1}, unicode.Range16{Lo: 0x1b04, Hi: 0x1b04, Stride: 0x1}, unicode.Range16{Lo: 0x1b34, Hi: 0x1b34, Stride: 0x1}, @@ -3415,8 +3583,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0x1cf4, Hi: 0x1cf4, Stride: 0x1}, unicode.Range16{Lo: 0x1cf7, Hi: 0x1cf7, Stride: 0x1}, unicode.Range16{Lo: 0x1cf8, Hi: 0x1cf9, Stride: 0x1}, - unicode.Range16{Lo: 0x1dc0, Hi: 0x1df9, Stride: 0x1}, - unicode.Range16{Lo: 0x1dfb, Hi: 0x1dff, Stride: 0x1}, + unicode.Range16{Lo: 0x1dc0, Hi: 0x1dff, Stride: 0x1}, unicode.Range16{Lo: 0x200c, Hi: 0x200d, Stride: 0x1}, unicode.Range16{Lo: 0x20d0, Hi: 0x20dc, Stride: 0x1}, unicode.Range16{Lo: 0x20dd, Hi: 0x20e0, Stride: 0x1}, @@ -3440,6 +3607,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range16{Lo: 0xa823, Hi: 0xa824, Stride: 0x1}, unicode.Range16{Lo: 0xa825, Hi: 0xa826, Stride: 0x1}, unicode.Range16{Lo: 0xa827, Hi: 0xa827, Stride: 0x1}, + unicode.Range16{Lo: 0xa82c, Hi: 0xa82c, Stride: 0x1}, unicode.Range16{Lo: 0xa880, Hi: 0xa881, Stride: 0x1}, unicode.Range16{Lo: 0xa8b4, Hi: 0xa8c3, Stride: 0x1}, unicode.Range16{Lo: 0xa8c4, Hi: 0xa8c5, Stride: 0x1}, @@ -3501,17 +3669,23 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x10a3f, Hi: 0x10a3f, Stride: 0x1}, unicode.Range32{Lo: 0x10ae5, Hi: 0x10ae6, Stride: 0x1}, unicode.Range32{Lo: 0x10d24, Hi: 0x10d27, Stride: 0x1}, + unicode.Range32{Lo: 0x10eab, Hi: 0x10eac, Stride: 0x1}, + unicode.Range32{Lo: 0x10efd, Hi: 0x10eff, Stride: 0x1}, unicode.Range32{Lo: 0x10f46, Hi: 0x10f50, Stride: 0x1}, + unicode.Range32{Lo: 0x10f82, Hi: 0x10f85, Stride: 0x1}, unicode.Range32{Lo: 0x11000, Hi: 0x11000, Stride: 0x1}, unicode.Range32{Lo: 0x11001, Hi: 0x11001, Stride: 0x1}, unicode.Range32{Lo: 0x11002, Hi: 0x11002, Stride: 0x1}, unicode.Range32{Lo: 0x11038, Hi: 0x11046, Stride: 0x1}, + unicode.Range32{Lo: 0x11070, Hi: 0x11070, Stride: 0x1}, + unicode.Range32{Lo: 0x11073, Hi: 0x11074, Stride: 0x1}, unicode.Range32{Lo: 0x1107f, Hi: 0x11081, Stride: 0x1}, unicode.Range32{Lo: 0x11082, Hi: 0x11082, Stride: 0x1}, unicode.Range32{Lo: 0x110b0, Hi: 0x110b2, Stride: 0x1}, unicode.Range32{Lo: 0x110b3, Hi: 0x110b6, Stride: 0x1}, unicode.Range32{Lo: 0x110b7, Hi: 0x110b8, Stride: 0x1}, unicode.Range32{Lo: 0x110b9, Hi: 0x110ba, Stride: 0x1}, + unicode.Range32{Lo: 0x110c2, Hi: 0x110c2, Stride: 0x1}, unicode.Range32{Lo: 0x11100, Hi: 0x11102, Stride: 0x1}, unicode.Range32{Lo: 0x11127, Hi: 0x1112b, Stride: 0x1}, unicode.Range32{Lo: 0x1112c, Hi: 0x1112c, Stride: 0x1}, @@ -3524,6 +3698,8 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x111b6, Hi: 0x111be, Stride: 0x1}, unicode.Range32{Lo: 0x111bf, Hi: 0x111c0, Stride: 0x1}, unicode.Range32{Lo: 0x111c9, Hi: 0x111cc, Stride: 0x1}, + unicode.Range32{Lo: 0x111ce, Hi: 0x111ce, Stride: 0x1}, + unicode.Range32{Lo: 0x111cf, Hi: 0x111cf, Stride: 0x1}, unicode.Range32{Lo: 0x1122c, Hi: 0x1122e, Stride: 0x1}, unicode.Range32{Lo: 0x1122f, Hi: 0x11231, Stride: 0x1}, unicode.Range32{Lo: 0x11232, Hi: 0x11233, Stride: 0x1}, @@ -3531,6 +3707,7 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x11235, Hi: 0x11235, Stride: 0x1}, unicode.Range32{Lo: 0x11236, Hi: 0x11237, Stride: 0x1}, unicode.Range32{Lo: 0x1123e, Hi: 0x1123e, Stride: 0x1}, + unicode.Range32{Lo: 0x11241, Hi: 0x11241, Stride: 0x1}, unicode.Range32{Lo: 0x112df, Hi: 0x112df, Stride: 0x1}, unicode.Range32{Lo: 0x112e0, Hi: 0x112e2, Stride: 0x1}, unicode.Range32{Lo: 0x112e3, Hi: 0x112ea, Stride: 0x1}, @@ -3590,6 +3767,14 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x1182f, Hi: 0x11837, Stride: 0x1}, unicode.Range32{Lo: 0x11838, Hi: 0x11838, Stride: 0x1}, unicode.Range32{Lo: 0x11839, Hi: 0x1183a, Stride: 0x1}, + unicode.Range32{Lo: 0x11930, Hi: 0x11935, Stride: 0x1}, + unicode.Range32{Lo: 0x11937, Hi: 0x11938, Stride: 0x1}, + unicode.Range32{Lo: 0x1193b, Hi: 0x1193c, Stride: 0x1}, + unicode.Range32{Lo: 0x1193d, Hi: 0x1193d, Stride: 0x1}, + unicode.Range32{Lo: 0x1193e, Hi: 0x1193e, Stride: 0x1}, + unicode.Range32{Lo: 0x11940, Hi: 0x11940, Stride: 0x1}, + unicode.Range32{Lo: 0x11942, Hi: 0x11942, Stride: 0x1}, + unicode.Range32{Lo: 0x11943, Hi: 0x11943, Stride: 0x1}, unicode.Range32{Lo: 0x119d1, Hi: 0x119d3, Stride: 0x1}, unicode.Range32{Lo: 0x119d4, Hi: 0x119d7, Stride: 0x1}, unicode.Range32{Lo: 0x119da, Hi: 0x119db, Stride: 0x1}, @@ -3632,12 +3817,26 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x11d97, Hi: 0x11d97, Stride: 0x1}, unicode.Range32{Lo: 0x11ef3, Hi: 0x11ef4, Stride: 0x1}, unicode.Range32{Lo: 0x11ef5, Hi: 0x11ef6, Stride: 0x1}, + unicode.Range32{Lo: 0x11f00, Hi: 0x11f01, Stride: 0x1}, + unicode.Range32{Lo: 0x11f03, Hi: 0x11f03, Stride: 0x1}, + unicode.Range32{Lo: 0x11f34, Hi: 0x11f35, Stride: 0x1}, + unicode.Range32{Lo: 0x11f36, Hi: 0x11f3a, Stride: 0x1}, + unicode.Range32{Lo: 0x11f3e, Hi: 0x11f3f, Stride: 0x1}, + unicode.Range32{Lo: 0x11f40, Hi: 0x11f40, Stride: 0x1}, + unicode.Range32{Lo: 0x11f41, Hi: 0x11f41, Stride: 0x1}, + unicode.Range32{Lo: 0x11f42, Hi: 0x11f42, Stride: 0x1}, + unicode.Range32{Lo: 0x13440, Hi: 0x13440, Stride: 0x1}, + unicode.Range32{Lo: 0x13447, Hi: 0x13455, Stride: 0x1}, unicode.Range32{Lo: 0x16af0, Hi: 0x16af4, Stride: 0x1}, unicode.Range32{Lo: 0x16b30, Hi: 0x16b36, Stride: 0x1}, unicode.Range32{Lo: 0x16f4f, Hi: 0x16f4f, Stride: 0x1}, unicode.Range32{Lo: 0x16f51, Hi: 0x16f87, Stride: 0x1}, unicode.Range32{Lo: 0x16f8f, Hi: 0x16f92, Stride: 0x1}, + unicode.Range32{Lo: 0x16fe4, Hi: 0x16fe4, Stride: 0x1}, + unicode.Range32{Lo: 0x16ff0, Hi: 0x16ff1, Stride: 0x1}, unicode.Range32{Lo: 0x1bc9d, Hi: 0x1bc9e, Stride: 0x1}, + unicode.Range32{Lo: 0x1cf00, Hi: 0x1cf2d, Stride: 0x1}, + unicode.Range32{Lo: 0x1cf30, Hi: 0x1cf46, Stride: 0x1}, unicode.Range32{Lo: 0x1d165, Hi: 0x1d166, Stride: 0x1}, unicode.Range32{Lo: 0x1d167, Hi: 0x1d169, Stride: 0x1}, unicode.Range32{Lo: 0x1d16d, Hi: 0x1d172, Stride: 0x1}, @@ -3656,8 +3855,11 @@ var _SentenceExtend = &unicode.RangeTable{ unicode.Range32{Lo: 0x1e01b, Hi: 0x1e021, Stride: 0x1}, unicode.Range32{Lo: 0x1e023, Hi: 0x1e024, Stride: 0x1}, unicode.Range32{Lo: 0x1e026, Hi: 0x1e02a, Stride: 0x1}, + unicode.Range32{Lo: 0x1e08f, Hi: 0x1e08f, Stride: 0x1}, unicode.Range32{Lo: 0x1e130, Hi: 0x1e136, Stride: 0x1}, + unicode.Range32{Lo: 0x1e2ae, Hi: 0x1e2ae, Stride: 0x1}, unicode.Range32{Lo: 0x1e2ec, Hi: 0x1e2ef, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4ec, Hi: 0x1e4ef, Stride: 0x1}, unicode.Range32{Lo: 0x1e8d0, Hi: 0x1e8d6, Stride: 0x1}, unicode.Range32{Lo: 0x1e944, Hi: 0x1e94a, Stride: 0x1}, unicode.Range32{Lo: 0xe0020, Hi: 0xe007f, Stride: 0x1}, @@ -3673,6 +3875,7 @@ var _SentenceFormat = &unicode.RangeTable{ unicode.Range16{Lo: 0x61c, Hi: 0x61c, Stride: 0x1}, unicode.Range16{Lo: 0x6dd, Hi: 0x6dd, Stride: 0x1}, unicode.Range16{Lo: 0x70f, Hi: 0x70f, Stride: 0x1}, + unicode.Range16{Lo: 0x890, Hi: 0x891, Stride: 0x1}, unicode.Range16{Lo: 0x8e2, Hi: 0x8e2, Stride: 0x1}, unicode.Range16{Lo: 0x180e, Hi: 0x180e, Stride: 0x1}, unicode.Range16{Lo: 0x200b, Hi: 0x200b, Stride: 0x1}, @@ -3686,7 +3889,7 @@ var _SentenceFormat = &unicode.RangeTable{ R32: []unicode.Range32{ unicode.Range32{Lo: 0x110bd, Hi: 0x110bd, Stride: 0x1}, unicode.Range32{Lo: 0x110cd, Hi: 0x110cd, Stride: 0x1}, - unicode.Range32{Lo: 0x13430, Hi: 0x13438, Stride: 0x1}, + unicode.Range32{Lo: 0x13430, Hi: 0x1343f, Stride: 0x1}, unicode.Range32{Lo: 0x1bca0, Hi: 0x1bca3, Stride: 0x1}, unicode.Range32{Lo: 0x1d173, Hi: 0x1d17a, Stride: 0x1}, unicode.Range32{Lo: 0xe0001, Hi: 0xe0001, Stride: 0x1}, @@ -3979,6 +4182,7 @@ var _SentenceLower = &unicode.RangeTable{ unicode.Range16{Lo: 0x52d, Hi: 0x52d, Stride: 0x1}, unicode.Range16{Lo: 0x52f, Hi: 0x52f, Stride: 0x1}, unicode.Range16{Lo: 0x560, Hi: 0x588, Stride: 0x1}, + unicode.Range16{Lo: 0x10fc, Hi: 0x10fc, Stride: 0x1}, unicode.Range16{Lo: 0x13f8, Hi: 0x13fd, Stride: 0x1}, unicode.Range16{Lo: 0x1c80, Hi: 0x1c88, Stride: 0x1}, unicode.Range16{Lo: 0x1d00, Hi: 0x1d2b, Stride: 0x1}, @@ -4146,7 +4350,7 @@ var _SentenceLower = &unicode.RangeTable{ unicode.Range16{Lo: 0x2170, Hi: 0x217f, Stride: 0x1}, unicode.Range16{Lo: 0x2184, Hi: 0x2184, Stride: 0x1}, unicode.Range16{Lo: 0x24d0, Hi: 0x24e9, Stride: 0x1}, - unicode.Range16{Lo: 0x2c30, Hi: 0x2c5e, Stride: 0x1}, + unicode.Range16{Lo: 0x2c30, Hi: 0x2c5f, Stride: 0x1}, unicode.Range16{Lo: 0x2c61, Hi: 0x2c61, Stride: 0x1}, unicode.Range16{Lo: 0x2c65, Hi: 0x2c66, Stride: 0x1}, unicode.Range16{Lo: 0x2c68, Hi: 0x2c68, Stride: 0x1}, @@ -4318,12 +4522,23 @@ var _SentenceLower = &unicode.RangeTable{ unicode.Range16{Lo: 0xa7bb, Hi: 0xa7bb, Stride: 0x1}, unicode.Range16{Lo: 0xa7bd, Hi: 0xa7bd, Stride: 0x1}, unicode.Range16{Lo: 0xa7bf, Hi: 0xa7bf, Stride: 0x1}, + unicode.Range16{Lo: 0xa7c1, Hi: 0xa7c1, Stride: 0x1}, unicode.Range16{Lo: 0xa7c3, Hi: 0xa7c3, Stride: 0x1}, + unicode.Range16{Lo: 0xa7c8, Hi: 0xa7c8, Stride: 0x1}, + unicode.Range16{Lo: 0xa7ca, Hi: 0xa7ca, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d1, Hi: 0xa7d1, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d3, Hi: 0xa7d3, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d5, Hi: 0xa7d5, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d7, Hi: 0xa7d7, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d9, Hi: 0xa7d9, Stride: 0x1}, + unicode.Range16{Lo: 0xa7f2, Hi: 0xa7f4, Stride: 0x1}, + unicode.Range16{Lo: 0xa7f6, Hi: 0xa7f6, Stride: 0x1}, unicode.Range16{Lo: 0xa7f8, Hi: 0xa7f9, Stride: 0x1}, unicode.Range16{Lo: 0xa7fa, Hi: 0xa7fa, Stride: 0x1}, unicode.Range16{Lo: 0xab30, Hi: 0xab5a, Stride: 0x1}, unicode.Range16{Lo: 0xab5c, Hi: 0xab5f, Stride: 0x1}, - unicode.Range16{Lo: 0xab60, Hi: 0xab67, Stride: 0x1}, + unicode.Range16{Lo: 0xab60, Hi: 0xab68, Stride: 0x1}, + unicode.Range16{Lo: 0xab69, Hi: 0xab69, Stride: 0x1}, unicode.Range16{Lo: 0xab70, Hi: 0xabbf, Stride: 0x1}, unicode.Range16{Lo: 0xfb00, Hi: 0xfb06, Stride: 0x1}, unicode.Range16{Lo: 0xfb13, Hi: 0xfb17, Stride: 0x1}, @@ -4332,6 +4547,14 @@ var _SentenceLower = &unicode.RangeTable{ R32: []unicode.Range32{ unicode.Range32{Lo: 0x10428, Hi: 0x1044f, Stride: 0x1}, unicode.Range32{Lo: 0x104d8, Hi: 0x104fb, Stride: 0x1}, + unicode.Range32{Lo: 0x10597, Hi: 0x105a1, Stride: 0x1}, + unicode.Range32{Lo: 0x105a3, Hi: 0x105b1, Stride: 0x1}, + unicode.Range32{Lo: 0x105b3, Hi: 0x105b9, Stride: 0x1}, + unicode.Range32{Lo: 0x105bb, Hi: 0x105bc, Stride: 0x1}, + unicode.Range32{Lo: 0x10780, Hi: 0x10780, Stride: 0x1}, + unicode.Range32{Lo: 0x10783, Hi: 0x10785, Stride: 0x1}, + unicode.Range32{Lo: 0x10787, Hi: 0x107b0, Stride: 0x1}, + unicode.Range32{Lo: 0x107b2, Hi: 0x107ba, Stride: 0x1}, unicode.Range32{Lo: 0x10cc0, Hi: 0x10cf2, Stride: 0x1}, unicode.Range32{Lo: 0x118c0, Hi: 0x118df, Stride: 0x1}, unicode.Range32{Lo: 0x16e60, Hi: 0x16e7f, Stride: 0x1}, @@ -4363,6 +4586,10 @@ var _SentenceLower = &unicode.RangeTable{ unicode.Range32{Lo: 0x1d7aa, Hi: 0x1d7c2, Stride: 0x1}, unicode.Range32{Lo: 0x1d7c4, Hi: 0x1d7c9, Stride: 0x1}, unicode.Range32{Lo: 0x1d7cb, Hi: 0x1d7cb, Stride: 0x1}, + unicode.Range32{Lo: 0x1df00, Hi: 0x1df09, Stride: 0x1}, + unicode.Range32{Lo: 0x1df0b, Hi: 0x1df1e, Stride: 0x1}, + unicode.Range32{Lo: 0x1df25, Hi: 0x1df2a, Stride: 0x1}, + unicode.Range32{Lo: 0x1e030, Hi: 0x1e06d, Stride: 0x1}, unicode.Range32{Lo: 0x1e922, Hi: 0x1e943, Stride: 0x1}, }, LatinOffset: 6, @@ -4423,15 +4650,20 @@ var _SentenceNumeric = &unicode.RangeTable{ unicode.Range32{Lo: 0x116c0, Hi: 0x116c9, Stride: 0x1}, unicode.Range32{Lo: 0x11730, Hi: 0x11739, Stride: 0x1}, unicode.Range32{Lo: 0x118e0, Hi: 0x118e9, Stride: 0x1}, + unicode.Range32{Lo: 0x11950, Hi: 0x11959, Stride: 0x1}, unicode.Range32{Lo: 0x11c50, Hi: 0x11c59, Stride: 0x1}, unicode.Range32{Lo: 0x11d50, Hi: 0x11d59, Stride: 0x1}, unicode.Range32{Lo: 0x11da0, Hi: 0x11da9, Stride: 0x1}, + unicode.Range32{Lo: 0x11f50, Hi: 0x11f59, Stride: 0x1}, unicode.Range32{Lo: 0x16a60, Hi: 0x16a69, Stride: 0x1}, + unicode.Range32{Lo: 0x16ac0, Hi: 0x16ac9, Stride: 0x1}, unicode.Range32{Lo: 0x16b50, Hi: 0x16b59, Stride: 0x1}, unicode.Range32{Lo: 0x1d7ce, Hi: 0x1d7ff, Stride: 0x1}, unicode.Range32{Lo: 0x1e140, Hi: 0x1e149, Stride: 0x1}, unicode.Range32{Lo: 0x1e2f0, Hi: 0x1e2f9, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4f0, Hi: 0x1e4f9, Stride: 0x1}, unicode.Range32{Lo: 0x1e950, Hi: 0x1e959, Stride: 0x1}, + unicode.Range32{Lo: 0x1fbf0, Hi: 0x1fbf9, Stride: 0x1}, }, LatinOffset: 1, } @@ -4473,8 +4705,10 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x828, Hi: 0x828, Stride: 0x1}, unicode.Range16{Lo: 0x840, Hi: 0x858, Stride: 0x1}, unicode.Range16{Lo: 0x860, Hi: 0x86a, Stride: 0x1}, - unicode.Range16{Lo: 0x8a0, Hi: 0x8b4, Stride: 0x1}, - unicode.Range16{Lo: 0x8b6, Hi: 0x8bd, Stride: 0x1}, + unicode.Range16{Lo: 0x870, Hi: 0x887, Stride: 0x1}, + unicode.Range16{Lo: 0x889, Hi: 0x88e, Stride: 0x1}, + unicode.Range16{Lo: 0x8a0, Hi: 0x8c8, Stride: 0x1}, + unicode.Range16{Lo: 0x8c9, Hi: 0x8c9, Stride: 0x1}, unicode.Range16{Lo: 0x904, Hi: 0x939, Stride: 0x1}, unicode.Range16{Lo: 0x93d, Hi: 0x93d, Stride: 0x1}, unicode.Range16{Lo: 0x950, Hi: 0x950, Stride: 0x1}, @@ -4540,6 +4774,7 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range16{Lo: 0xc2a, Hi: 0xc39, Stride: 0x1}, unicode.Range16{Lo: 0xc3d, Hi: 0xc3d, Stride: 0x1}, unicode.Range16{Lo: 0xc58, Hi: 0xc5a, Stride: 0x1}, + unicode.Range16{Lo: 0xc5d, Hi: 0xc5d, Stride: 0x1}, unicode.Range16{Lo: 0xc60, Hi: 0xc61, Stride: 0x1}, unicode.Range16{Lo: 0xc80, Hi: 0xc80, Stride: 0x1}, unicode.Range16{Lo: 0xc85, Hi: 0xc8c, Stride: 0x1}, @@ -4548,10 +4783,10 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range16{Lo: 0xcaa, Hi: 0xcb3, Stride: 0x1}, unicode.Range16{Lo: 0xcb5, Hi: 0xcb9, Stride: 0x1}, unicode.Range16{Lo: 0xcbd, Hi: 0xcbd, Stride: 0x1}, - unicode.Range16{Lo: 0xcde, Hi: 0xcde, Stride: 0x1}, + unicode.Range16{Lo: 0xcdd, Hi: 0xcde, Stride: 0x1}, unicode.Range16{Lo: 0xce0, Hi: 0xce1, Stride: 0x1}, unicode.Range16{Lo: 0xcf1, Hi: 0xcf2, Stride: 0x1}, - unicode.Range16{Lo: 0xd05, Hi: 0xd0c, Stride: 0x1}, + unicode.Range16{Lo: 0xd04, Hi: 0xd0c, Stride: 0x1}, unicode.Range16{Lo: 0xd0e, Hi: 0xd10, Stride: 0x1}, unicode.Range16{Lo: 0xd12, Hi: 0xd3a, Stride: 0x1}, unicode.Range16{Lo: 0xd3d, Hi: 0xd3d, Stride: 0x1}, @@ -4593,7 +4828,6 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x1075, Hi: 0x1081, Stride: 0x1}, unicode.Range16{Lo: 0x108e, Hi: 0x108e, Stride: 0x1}, unicode.Range16{Lo: 0x10d0, Hi: 0x10fa, Stride: 0x1}, - unicode.Range16{Lo: 0x10fc, Hi: 0x10fc, Stride: 0x1}, unicode.Range16{Lo: 0x10fd, Hi: 0x10ff, Stride: 0x1}, unicode.Range16{Lo: 0x1100, Hi: 0x1248, Stride: 0x1}, unicode.Range16{Lo: 0x124a, Hi: 0x124d, Stride: 0x1}, @@ -4618,9 +4852,8 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x16a0, Hi: 0x16ea, Stride: 0x1}, unicode.Range16{Lo: 0x16ee, Hi: 0x16f0, Stride: 0x1}, unicode.Range16{Lo: 0x16f1, Hi: 0x16f8, Stride: 0x1}, - unicode.Range16{Lo: 0x1700, Hi: 0x170c, Stride: 0x1}, - unicode.Range16{Lo: 0x170e, Hi: 0x1711, Stride: 0x1}, - unicode.Range16{Lo: 0x1720, Hi: 0x1731, Stride: 0x1}, + unicode.Range16{Lo: 0x1700, Hi: 0x1711, Stride: 0x1}, + unicode.Range16{Lo: 0x171f, Hi: 0x1731, Stride: 0x1}, unicode.Range16{Lo: 0x1740, Hi: 0x1751, Stride: 0x1}, unicode.Range16{Lo: 0x1760, Hi: 0x176c, Stride: 0x1}, unicode.Range16{Lo: 0x176e, Hi: 0x1770, Stride: 0x1}, @@ -4643,7 +4876,7 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x1a20, Hi: 0x1a54, Stride: 0x1}, unicode.Range16{Lo: 0x1aa7, Hi: 0x1aa7, Stride: 0x1}, unicode.Range16{Lo: 0x1b05, Hi: 0x1b33, Stride: 0x1}, - unicode.Range16{Lo: 0x1b45, Hi: 0x1b4b, Stride: 0x1}, + unicode.Range16{Lo: 0x1b45, Hi: 0x1b4c, Stride: 0x1}, unicode.Range16{Lo: 0x1b83, Hi: 0x1ba0, Stride: 0x1}, unicode.Range16{Lo: 0x1bae, Hi: 0x1baf, Stride: 0x1}, unicode.Range16{Lo: 0x1bba, Hi: 0x1be5, Stride: 0x1}, @@ -4688,11 +4921,10 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range16{Lo: 0x30ff, Hi: 0x30ff, Stride: 0x1}, unicode.Range16{Lo: 0x3105, Hi: 0x312f, Stride: 0x1}, unicode.Range16{Lo: 0x3131, Hi: 0x318e, Stride: 0x1}, - unicode.Range16{Lo: 0x31a0, Hi: 0x31ba, Stride: 0x1}, + unicode.Range16{Lo: 0x31a0, Hi: 0x31bf, Stride: 0x1}, unicode.Range16{Lo: 0x31f0, Hi: 0x31ff, Stride: 0x1}, - unicode.Range16{Lo: 0x3400, Hi: 0x4db5, Stride: 0x1}, - unicode.Range16{Lo: 0x4e00, Hi: 0x9fef, Stride: 0x1}, - unicode.Range16{Lo: 0xa000, Hi: 0xa014, Stride: 0x1}, + unicode.Range16{Lo: 0x3400, Hi: 0x4dbf, Stride: 0x1}, + unicode.Range16{Lo: 0x4e00, Hi: 0xa014, Stride: 0x1}, unicode.Range16{Lo: 0xa015, Hi: 0xa015, Stride: 0x1}, unicode.Range16{Lo: 0xa016, Hi: 0xa48c, Stride: 0x1}, unicode.Range16{Lo: 0xa4d0, Hi: 0xa4f7, Stride: 0x1}, @@ -4806,6 +5038,7 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x10600, Hi: 0x10736, Stride: 0x1}, unicode.Range32{Lo: 0x10740, Hi: 0x10755, Stride: 0x1}, unicode.Range32{Lo: 0x10760, Hi: 0x10767, Stride: 0x1}, + unicode.Range32{Lo: 0x10781, Hi: 0x10782, Stride: 0x1}, unicode.Range32{Lo: 0x10800, Hi: 0x10805, Stride: 0x1}, unicode.Range32{Lo: 0x10808, Hi: 0x10808, Stride: 0x1}, unicode.Range32{Lo: 0x1080a, Hi: 0x10835, Stride: 0x1}, @@ -4834,15 +5067,22 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x10b80, Hi: 0x10b91, Stride: 0x1}, unicode.Range32{Lo: 0x10c00, Hi: 0x10c48, Stride: 0x1}, unicode.Range32{Lo: 0x10d00, Hi: 0x10d23, Stride: 0x1}, + unicode.Range32{Lo: 0x10e80, Hi: 0x10ea9, Stride: 0x1}, + unicode.Range32{Lo: 0x10eb0, Hi: 0x10eb1, Stride: 0x1}, unicode.Range32{Lo: 0x10f00, Hi: 0x10f1c, Stride: 0x1}, unicode.Range32{Lo: 0x10f27, Hi: 0x10f27, Stride: 0x1}, unicode.Range32{Lo: 0x10f30, Hi: 0x10f45, Stride: 0x1}, + unicode.Range32{Lo: 0x10f70, Hi: 0x10f81, Stride: 0x1}, + unicode.Range32{Lo: 0x10fb0, Hi: 0x10fc4, Stride: 0x1}, unicode.Range32{Lo: 0x10fe0, Hi: 0x10ff6, Stride: 0x1}, unicode.Range32{Lo: 0x11003, Hi: 0x11037, Stride: 0x1}, + unicode.Range32{Lo: 0x11071, Hi: 0x11072, Stride: 0x1}, + unicode.Range32{Lo: 0x11075, Hi: 0x11075, Stride: 0x1}, unicode.Range32{Lo: 0x11083, Hi: 0x110af, Stride: 0x1}, unicode.Range32{Lo: 0x110d0, Hi: 0x110e8, Stride: 0x1}, unicode.Range32{Lo: 0x11103, Hi: 0x11126, Stride: 0x1}, unicode.Range32{Lo: 0x11144, Hi: 0x11144, Stride: 0x1}, + unicode.Range32{Lo: 0x11147, Hi: 0x11147, Stride: 0x1}, unicode.Range32{Lo: 0x11150, Hi: 0x11172, Stride: 0x1}, unicode.Range32{Lo: 0x11176, Hi: 0x11176, Stride: 0x1}, unicode.Range32{Lo: 0x11183, Hi: 0x111b2, Stride: 0x1}, @@ -4851,6 +5091,7 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x111dc, Hi: 0x111dc, Stride: 0x1}, unicode.Range32{Lo: 0x11200, Hi: 0x11211, Stride: 0x1}, unicode.Range32{Lo: 0x11213, Hi: 0x1122b, Stride: 0x1}, + unicode.Range32{Lo: 0x1123f, Hi: 0x11240, Stride: 0x1}, unicode.Range32{Lo: 0x11280, Hi: 0x11286, Stride: 0x1}, unicode.Range32{Lo: 0x11288, Hi: 0x11288, Stride: 0x1}, unicode.Range32{Lo: 0x1128a, Hi: 0x1128d, Stride: 0x1}, @@ -4868,7 +5109,7 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x1135d, Hi: 0x11361, Stride: 0x1}, unicode.Range32{Lo: 0x11400, Hi: 0x11434, Stride: 0x1}, unicode.Range32{Lo: 0x11447, Hi: 0x1144a, Stride: 0x1}, - unicode.Range32{Lo: 0x1145f, Hi: 0x1145f, Stride: 0x1}, + unicode.Range32{Lo: 0x1145f, Hi: 0x11461, Stride: 0x1}, unicode.Range32{Lo: 0x11480, Hi: 0x114af, Stride: 0x1}, unicode.Range32{Lo: 0x114c4, Hi: 0x114c5, Stride: 0x1}, unicode.Range32{Lo: 0x114c7, Hi: 0x114c7, Stride: 0x1}, @@ -4879,8 +5120,15 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x11680, Hi: 0x116aa, Stride: 0x1}, unicode.Range32{Lo: 0x116b8, Hi: 0x116b8, Stride: 0x1}, unicode.Range32{Lo: 0x11700, Hi: 0x1171a, Stride: 0x1}, + unicode.Range32{Lo: 0x11740, Hi: 0x11746, Stride: 0x1}, unicode.Range32{Lo: 0x11800, Hi: 0x1182b, Stride: 0x1}, - unicode.Range32{Lo: 0x118ff, Hi: 0x118ff, Stride: 0x1}, + unicode.Range32{Lo: 0x118ff, Hi: 0x11906, Stride: 0x1}, + unicode.Range32{Lo: 0x11909, Hi: 0x11909, Stride: 0x1}, + unicode.Range32{Lo: 0x1190c, Hi: 0x11913, Stride: 0x1}, + unicode.Range32{Lo: 0x11915, Hi: 0x11916, Stride: 0x1}, + unicode.Range32{Lo: 0x11918, Hi: 0x1192f, Stride: 0x1}, + unicode.Range32{Lo: 0x1193f, Hi: 0x1193f, Stride: 0x1}, + unicode.Range32{Lo: 0x11941, Hi: 0x11941, Stride: 0x1}, unicode.Range32{Lo: 0x119a0, Hi: 0x119a7, Stride: 0x1}, unicode.Range32{Lo: 0x119aa, Hi: 0x119d0, Stride: 0x1}, unicode.Range32{Lo: 0x119e1, Hi: 0x119e1, Stride: 0x1}, @@ -4891,7 +5139,7 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x11a50, Hi: 0x11a50, Stride: 0x1}, unicode.Range32{Lo: 0x11a5c, Hi: 0x11a89, Stride: 0x1}, unicode.Range32{Lo: 0x11a9d, Hi: 0x11a9d, Stride: 0x1}, - unicode.Range32{Lo: 0x11ac0, Hi: 0x11af8, Stride: 0x1}, + unicode.Range32{Lo: 0x11ab0, Hi: 0x11af8, Stride: 0x1}, unicode.Range32{Lo: 0x11c00, Hi: 0x11c08, Stride: 0x1}, unicode.Range32{Lo: 0x11c0a, Hi: 0x11c2e, Stride: 0x1}, unicode.Range32{Lo: 0x11c40, Hi: 0x11c40, Stride: 0x1}, @@ -4905,13 +5153,20 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x11d6a, Hi: 0x11d89, Stride: 0x1}, unicode.Range32{Lo: 0x11d98, Hi: 0x11d98, Stride: 0x1}, unicode.Range32{Lo: 0x11ee0, Hi: 0x11ef2, Stride: 0x1}, + unicode.Range32{Lo: 0x11f02, Hi: 0x11f02, Stride: 0x1}, + unicode.Range32{Lo: 0x11f04, Hi: 0x11f10, Stride: 0x1}, + unicode.Range32{Lo: 0x11f12, Hi: 0x11f33, Stride: 0x1}, + unicode.Range32{Lo: 0x11fb0, Hi: 0x11fb0, Stride: 0x1}, unicode.Range32{Lo: 0x12000, Hi: 0x12399, Stride: 0x1}, unicode.Range32{Lo: 0x12400, Hi: 0x1246e, Stride: 0x1}, unicode.Range32{Lo: 0x12480, Hi: 0x12543, Stride: 0x1}, - unicode.Range32{Lo: 0x13000, Hi: 0x1342e, Stride: 0x1}, + unicode.Range32{Lo: 0x12f90, Hi: 0x12ff0, Stride: 0x1}, + unicode.Range32{Lo: 0x13000, Hi: 0x1342f, Stride: 0x1}, + unicode.Range32{Lo: 0x13441, Hi: 0x13446, Stride: 0x1}, unicode.Range32{Lo: 0x14400, Hi: 0x14646, Stride: 0x1}, unicode.Range32{Lo: 0x16800, Hi: 0x16a38, Stride: 0x1}, unicode.Range32{Lo: 0x16a40, Hi: 0x16a5e, Stride: 0x1}, + unicode.Range32{Lo: 0x16a70, Hi: 0x16abe, Stride: 0x1}, unicode.Range32{Lo: 0x16ad0, Hi: 0x16aed, Stride: 0x1}, unicode.Range32{Lo: 0x16b00, Hi: 0x16b2f, Stride: 0x1}, unicode.Range32{Lo: 0x16b40, Hi: 0x16b43, Stride: 0x1}, @@ -4923,19 +5178,33 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x16fe0, Hi: 0x16fe1, Stride: 0x1}, unicode.Range32{Lo: 0x16fe3, Hi: 0x16fe3, Stride: 0x1}, unicode.Range32{Lo: 0x17000, Hi: 0x187f7, Stride: 0x1}, - unicode.Range32{Lo: 0x18800, Hi: 0x18af2, Stride: 0x1}, - unicode.Range32{Lo: 0x1b000, Hi: 0x1b11e, Stride: 0x1}, + unicode.Range32{Lo: 0x18800, Hi: 0x18cd5, Stride: 0x1}, + unicode.Range32{Lo: 0x18d00, Hi: 0x18d08, Stride: 0x1}, + unicode.Range32{Lo: 0x1aff0, Hi: 0x1aff3, Stride: 0x1}, + unicode.Range32{Lo: 0x1aff5, Hi: 0x1affb, Stride: 0x1}, + unicode.Range32{Lo: 0x1affd, Hi: 0x1affe, Stride: 0x1}, + unicode.Range32{Lo: 0x1b000, Hi: 0x1b122, Stride: 0x1}, + unicode.Range32{Lo: 0x1b132, Hi: 0x1b132, Stride: 0x1}, unicode.Range32{Lo: 0x1b150, Hi: 0x1b152, Stride: 0x1}, + unicode.Range32{Lo: 0x1b155, Hi: 0x1b155, Stride: 0x1}, unicode.Range32{Lo: 0x1b164, Hi: 0x1b167, Stride: 0x1}, unicode.Range32{Lo: 0x1b170, Hi: 0x1b2fb, Stride: 0x1}, unicode.Range32{Lo: 0x1bc00, Hi: 0x1bc6a, Stride: 0x1}, unicode.Range32{Lo: 0x1bc70, Hi: 0x1bc7c, Stride: 0x1}, unicode.Range32{Lo: 0x1bc80, Hi: 0x1bc88, Stride: 0x1}, unicode.Range32{Lo: 0x1bc90, Hi: 0x1bc99, Stride: 0x1}, + unicode.Range32{Lo: 0x1df0a, Hi: 0x1df0a, Stride: 0x1}, unicode.Range32{Lo: 0x1e100, Hi: 0x1e12c, Stride: 0x1}, unicode.Range32{Lo: 0x1e137, Hi: 0x1e13d, Stride: 0x1}, unicode.Range32{Lo: 0x1e14e, Hi: 0x1e14e, Stride: 0x1}, + unicode.Range32{Lo: 0x1e290, Hi: 0x1e2ad, Stride: 0x1}, unicode.Range32{Lo: 0x1e2c0, Hi: 0x1e2eb, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4d0, Hi: 0x1e4ea, Stride: 0x1}, + unicode.Range32{Lo: 0x1e4eb, Hi: 0x1e4eb, Stride: 0x1}, + unicode.Range32{Lo: 0x1e7e0, Hi: 0x1e7e6, Stride: 0x1}, + unicode.Range32{Lo: 0x1e7e8, Hi: 0x1e7eb, Stride: 0x1}, + unicode.Range32{Lo: 0x1e7ed, Hi: 0x1e7ee, Stride: 0x1}, + unicode.Range32{Lo: 0x1e7f0, Hi: 0x1e7fe, Stride: 0x1}, unicode.Range32{Lo: 0x1e800, Hi: 0x1e8c4, Stride: 0x1}, unicode.Range32{Lo: 0x1e94b, Hi: 0x1e94b, Stride: 0x1}, unicode.Range32{Lo: 0x1ee00, Hi: 0x1ee03, Stride: 0x1}, @@ -4971,12 +5240,14 @@ var _SentenceOLetter = &unicode.RangeTable{ unicode.Range32{Lo: 0x1eea1, Hi: 0x1eea3, Stride: 0x1}, unicode.Range32{Lo: 0x1eea5, Hi: 0x1eea9, Stride: 0x1}, unicode.Range32{Lo: 0x1eeab, Hi: 0x1eebb, Stride: 0x1}, - unicode.Range32{Lo: 0x20000, Hi: 0x2a6d6, Stride: 0x1}, - unicode.Range32{Lo: 0x2a700, Hi: 0x2b734, Stride: 0x1}, + unicode.Range32{Lo: 0x20000, Hi: 0x2a6df, Stride: 0x1}, + unicode.Range32{Lo: 0x2a700, Hi: 0x2b739, Stride: 0x1}, unicode.Range32{Lo: 0x2b740, Hi: 0x2b81d, Stride: 0x1}, unicode.Range32{Lo: 0x2b820, Hi: 0x2cea1, Stride: 0x1}, unicode.Range32{Lo: 0x2ceb0, Hi: 0x2ebe0, Stride: 0x1}, unicode.Range32{Lo: 0x2f800, Hi: 0x2fa1d, Stride: 0x1}, + unicode.Range32{Lo: 0x30000, Hi: 0x3134a, Stride: 0x1}, + unicode.Range32{Lo: 0x31350, Hi: 0x323af, Stride: 0x1}, }, LatinOffset: 0, } @@ -5013,7 +5284,7 @@ var _SentenceSTerm = &unicode.RangeTable{ unicode.Range16{Lo: 0x21, Hi: 0x21, Stride: 0x1}, unicode.Range16{Lo: 0x3f, Hi: 0x3f, Stride: 0x1}, unicode.Range16{Lo: 0x589, Hi: 0x589, Stride: 0x1}, - unicode.Range16{Lo: 0x61e, Hi: 0x61f, Stride: 0x1}, + unicode.Range16{Lo: 0x61d, Hi: 0x61f, Stride: 0x1}, unicode.Range16{Lo: 0x6d4, Hi: 0x6d4, Stride: 0x1}, unicode.Range16{Lo: 0x700, Hi: 0x702, Stride: 0x1}, unicode.Range16{Lo: 0x7f9, Hi: 0x7f9, Stride: 0x1}, @@ -5032,12 +5303,14 @@ var _SentenceSTerm = &unicode.RangeTable{ unicode.Range16{Lo: 0x1aa8, Hi: 0x1aab, Stride: 0x1}, unicode.Range16{Lo: 0x1b5a, Hi: 0x1b5b, Stride: 0x1}, unicode.Range16{Lo: 0x1b5e, Hi: 0x1b5f, Stride: 0x1}, + unicode.Range16{Lo: 0x1b7d, Hi: 0x1b7e, Stride: 0x1}, unicode.Range16{Lo: 0x1c3b, Hi: 0x1c3c, Stride: 0x1}, unicode.Range16{Lo: 0x1c7e, Hi: 0x1c7f, Stride: 0x1}, unicode.Range16{Lo: 0x203c, Hi: 0x203d, Stride: 0x1}, unicode.Range16{Lo: 0x2047, Hi: 0x2049, Stride: 0x1}, unicode.Range16{Lo: 0x2e2e, Hi: 0x2e2e, Stride: 0x1}, unicode.Range16{Lo: 0x2e3c, Hi: 0x2e3c, Stride: 0x1}, + unicode.Range16{Lo: 0x2e53, Hi: 0x2e54, Stride: 0x1}, unicode.Range16{Lo: 0x3002, Hi: 0x3002, Stride: 0x1}, unicode.Range16{Lo: 0xa4ff, Hi: 0xa4ff, Stride: 0x1}, unicode.Range16{Lo: 0xa60e, Hi: 0xa60f, Stride: 0x1}, @@ -5058,6 +5331,7 @@ var _SentenceSTerm = &unicode.RangeTable{ R32: []unicode.Range32{ unicode.Range32{Lo: 0x10a56, Hi: 0x10a57, Stride: 0x1}, unicode.Range32{Lo: 0x10f55, Hi: 0x10f59, Stride: 0x1}, + unicode.Range32{Lo: 0x10f86, Hi: 0x10f89, Stride: 0x1}, unicode.Range32{Lo: 0x11047, Hi: 0x11048, Stride: 0x1}, unicode.Range32{Lo: 0x110be, Hi: 0x110c1, Stride: 0x1}, unicode.Range32{Lo: 0x11141, Hi: 0x11143, Stride: 0x1}, @@ -5072,10 +5346,13 @@ var _SentenceSTerm = &unicode.RangeTable{ unicode.Range32{Lo: 0x115c9, Hi: 0x115d7, Stride: 0x1}, unicode.Range32{Lo: 0x11641, Hi: 0x11642, Stride: 0x1}, unicode.Range32{Lo: 0x1173c, Hi: 0x1173e, Stride: 0x1}, + unicode.Range32{Lo: 0x11944, Hi: 0x11944, Stride: 0x1}, + unicode.Range32{Lo: 0x11946, Hi: 0x11946, Stride: 0x1}, unicode.Range32{Lo: 0x11a42, Hi: 0x11a43, Stride: 0x1}, unicode.Range32{Lo: 0x11a9b, Hi: 0x11a9c, Stride: 0x1}, unicode.Range32{Lo: 0x11c41, Hi: 0x11c42, Stride: 0x1}, unicode.Range32{Lo: 0x11ef7, Hi: 0x11ef8, Stride: 0x1}, + unicode.Range32{Lo: 0x11f43, Hi: 0x11f44, Stride: 0x1}, unicode.Range32{Lo: 0x16a6e, Hi: 0x16a6f, Stride: 0x1}, unicode.Range32{Lo: 0x16af5, Hi: 0x16af5, Stride: 0x1}, unicode.Range32{Lo: 0x16b37, Hi: 0x16b38, Stride: 0x1}, @@ -5547,7 +5824,7 @@ var _SentenceUpper = &unicode.RangeTable{ unicode.Range16{Lo: 0x2160, Hi: 0x216f, Stride: 0x1}, unicode.Range16{Lo: 0x2183, Hi: 0x2183, Stride: 0x1}, unicode.Range16{Lo: 0x24b6, Hi: 0x24cf, Stride: 0x1}, - unicode.Range16{Lo: 0x2c00, Hi: 0x2c2e, Stride: 0x1}, + unicode.Range16{Lo: 0x2c00, Hi: 0x2c2f, Stride: 0x1}, unicode.Range16{Lo: 0x2c60, Hi: 0x2c60, Stride: 0x1}, unicode.Range16{Lo: 0x2c62, Hi: 0x2c64, Stride: 0x1}, unicode.Range16{Lo: 0x2c67, Hi: 0x2c67, Stride: 0x1}, @@ -5712,13 +5989,23 @@ var _SentenceUpper = &unicode.RangeTable{ unicode.Range16{Lo: 0xa7ba, Hi: 0xa7ba, Stride: 0x1}, unicode.Range16{Lo: 0xa7bc, Hi: 0xa7bc, Stride: 0x1}, unicode.Range16{Lo: 0xa7be, Hi: 0xa7be, Stride: 0x1}, + unicode.Range16{Lo: 0xa7c0, Hi: 0xa7c0, Stride: 0x1}, unicode.Range16{Lo: 0xa7c2, Hi: 0xa7c2, Stride: 0x1}, - unicode.Range16{Lo: 0xa7c4, Hi: 0xa7c6, Stride: 0x1}, + unicode.Range16{Lo: 0xa7c4, Hi: 0xa7c7, Stride: 0x1}, + unicode.Range16{Lo: 0xa7c9, Hi: 0xa7c9, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d0, Hi: 0xa7d0, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d6, Hi: 0xa7d6, Stride: 0x1}, + unicode.Range16{Lo: 0xa7d8, Hi: 0xa7d8, Stride: 0x1}, + unicode.Range16{Lo: 0xa7f5, Hi: 0xa7f5, Stride: 0x1}, unicode.Range16{Lo: 0xff21, Hi: 0xff3a, Stride: 0x1}, }, R32: []unicode.Range32{ unicode.Range32{Lo: 0x10400, Hi: 0x10427, Stride: 0x1}, unicode.Range32{Lo: 0x104b0, Hi: 0x104d3, Stride: 0x1}, + unicode.Range32{Lo: 0x10570, Hi: 0x1057a, Stride: 0x1}, + unicode.Range32{Lo: 0x1057c, Hi: 0x1058a, Stride: 0x1}, + unicode.Range32{Lo: 0x1058c, Hi: 0x10592, Stride: 0x1}, + unicode.Range32{Lo: 0x10594, Hi: 0x10595, Stride: 0x1}, unicode.Range32{Lo: 0x10c80, Hi: 0x10cb2, Stride: 0x1}, unicode.Range32{Lo: 0x118a0, Hi: 0x118bf, Stride: 0x1}, unicode.Range32{Lo: 0x16e40, Hi: 0x16e5f, Stride: 0x1}, diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/unicode2ragel.rb b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/unicode2ragel.rb similarity index 100% rename from vendor/github.com/apparentlymart/go-textseg/v13/textseg/unicode2ragel.rb rename to vendor/github.com/apparentlymart/go-textseg/v15/textseg/unicode2ragel.rb diff --git a/vendor/github.com/apparentlymart/go-textseg/v13/textseg/utf8_seqs.go b/vendor/github.com/apparentlymart/go-textseg/v15/textseg/utf8_seqs.go similarity index 100% rename from vendor/github.com/apparentlymart/go-textseg/v13/textseg/utf8_seqs.go rename to vendor/github.com/apparentlymart/go-textseg/v15/textseg/utf8_seqs.go diff --git a/vendor/github.com/btubbs/datetime/parser.go b/vendor/github.com/btubbs/datetime/parser.go index 5f81d3873050f..5389943762ea1 100644 --- a/vendor/github.com/btubbs/datetime/parser.go +++ b/vendor/github.com/btubbs/datetime/parser.go @@ -238,12 +238,17 @@ func (p *parser) parseDate() (int, time.Month, int, error) { return parseErr(fmt.Errorf("found %s, expected %s", found, expected)) } - // should start with a number like yyyy or yyyymmdd + // should start with a number like yyyy or yyyymm or yyyymmdd switch tok, lit := p.scan(); tok { case NUMBER: switch len(lit) { case 4: year = parseInt(lit) + case 6: + year = parseInt(lit[:4]) + monthNum := parseInt(lit[4:6]) + month = time.Month(monthNum) + return year, month, day, nil case 8: // we should have yyyymmdd year = parseInt(lit[:4]) diff --git a/vendor/github.com/cloudflare/circl/LICENSE b/vendor/github.com/cloudflare/circl/LICENSE new file mode 100644 index 0000000000000..67edaa90a0444 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/LICENSE @@ -0,0 +1,57 @@ +Copyright (c) 2019 Cloudflare. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Cloudflare nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +======================================================================== + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/curve.go b/vendor/github.com/cloudflare/circl/dh/x25519/curve.go new file mode 100644 index 0000000000000..f9057c2b8662b --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/curve.go @@ -0,0 +1,96 @@ +package x25519 + +import ( + fp "github.com/cloudflare/circl/math/fp25519" +) + +// ladderJoye calculates a fixed-point multiplication with the generator point. +// The algorithm is the right-to-left Joye's ladder as described +// in "How to precompute a ladder" in SAC'2017. +func ladderJoye(k *Key) { + w := [5]fp.Elt{} // [mu,x1,z1,x2,z2] order must be preserved. + fp.SetOne(&w[1]) // x1 = 1 + fp.SetOne(&w[2]) // z1 = 1 + w[3] = fp.Elt{ // x2 = G-S + 0xbd, 0xaa, 0x2f, 0xc8, 0xfe, 0xe1, 0x94, 0x7e, + 0xf8, 0xed, 0xb2, 0x14, 0xae, 0x95, 0xf0, 0xbb, + 0xe2, 0x48, 0x5d, 0x23, 0xb9, 0xa0, 0xc7, 0xad, + 0x34, 0xab, 0x7c, 0xe2, 0xee, 0xcd, 0xae, 0x1e, + } + fp.SetOne(&w[4]) // z2 = 1 + + const n = 255 + const h = 3 + swap := uint(1) + for s := 0; s < n-h; s++ { + i := (s + h) / 8 + j := (s + h) % 8 + bit := uint((k[i] >> uint(j)) & 1) + copy(w[0][:], tableGenerator[s*Size:(s+1)*Size]) + diffAdd(&w, swap^bit) + swap = bit + } + for s := 0; s < h; s++ { + double(&w[1], &w[2]) + } + toAffine((*[fp.Size]byte)(k), &w[1], &w[2]) +} + +// ladderMontgomery calculates a generic scalar point multiplication +// The algorithm implemented is the left-to-right Montgomery's ladder. +func ladderMontgomery(k, xP *Key) { + w := [5]fp.Elt{} // [x1, x2, z2, x3, z3] order must be preserved. + w[0] = *(*fp.Elt)(xP) // x1 = xP + fp.SetOne(&w[1]) // x2 = 1 + w[3] = *(*fp.Elt)(xP) // x3 = xP + fp.SetOne(&w[4]) // z3 = 1 + + move := uint(0) + for s := 255 - 1; s >= 0; s-- { + i := s / 8 + j := s % 8 + bit := uint((k[i] >> uint(j)) & 1) + ladderStep(&w, move^bit) + move = bit + } + toAffine((*[fp.Size]byte)(k), &w[1], &w[2]) +} + +func toAffine(k *[fp.Size]byte, x, z *fp.Elt) { + fp.Inv(z, z) + fp.Mul(x, x, z) + _ = fp.ToBytes(k[:], x) +} + +var lowOrderPoints = [5]fp.Elt{ + { /* (0,_,1) point of order 2 on Curve25519 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + { /* (1,_,1) point of order 4 on Curve25519 */ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + { /* (x,_,1) first point of order 8 on Curve25519 */ + 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae, + 0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a, + 0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd, + 0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x00, + }, + { /* (x,_,1) second point of order 8 on Curve25519 */ + 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24, + 0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b, + 0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86, + 0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0x57, + }, + { /* (-1,_,1) a point of order 4 on the twist of Curve25519 */ + 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + }, +} diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.go b/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.go new file mode 100644 index 0000000000000..8a3d54c570f07 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.go @@ -0,0 +1,30 @@ +//go:build amd64 && !purego +// +build amd64,!purego + +package x25519 + +import ( + fp "github.com/cloudflare/circl/math/fp25519" + "golang.org/x/sys/cpu" +) + +var hasBmi2Adx = cpu.X86.HasBMI2 && cpu.X86.HasADX + +var _ = hasBmi2Adx + +func double(x, z *fp.Elt) { doubleAmd64(x, z) } +func diffAdd(w *[5]fp.Elt, b uint) { diffAddAmd64(w, b) } +func ladderStep(w *[5]fp.Elt, b uint) { ladderStepAmd64(w, b) } +func mulA24(z, x *fp.Elt) { mulA24Amd64(z, x) } + +//go:noescape +func ladderStepAmd64(w *[5]fp.Elt, b uint) + +//go:noescape +func diffAddAmd64(w *[5]fp.Elt, b uint) + +//go:noescape +func doubleAmd64(x, z *fp.Elt) + +//go:noescape +func mulA24Amd64(z, x *fp.Elt) diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.h b/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.h new file mode 100644 index 0000000000000..8c1ae4d0fbb47 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.h @@ -0,0 +1,111 @@ +#define ladderStepLeg \ + addSub(x2,z2) \ + addSub(x3,z3) \ + integerMulLeg(b0,x2,z3) \ + integerMulLeg(b1,x3,z2) \ + reduceFromDoubleLeg(t0,b0) \ + reduceFromDoubleLeg(t1,b1) \ + addSub(t0,t1) \ + cselect(x2,x3,regMove) \ + cselect(z2,z3,regMove) \ + integerSqrLeg(b0,t0) \ + integerSqrLeg(b1,t1) \ + reduceFromDoubleLeg(x3,b0) \ + reduceFromDoubleLeg(z3,b1) \ + integerMulLeg(b0,x1,z3) \ + reduceFromDoubleLeg(z3,b0) \ + integerSqrLeg(b0,x2) \ + integerSqrLeg(b1,z2) \ + reduceFromDoubleLeg(x2,b0) \ + reduceFromDoubleLeg(z2,b1) \ + subtraction(t0,x2,z2) \ + multiplyA24Leg(t1,t0) \ + additionLeg(t1,t1,z2) \ + integerMulLeg(b0,x2,z2) \ + integerMulLeg(b1,t0,t1) \ + reduceFromDoubleLeg(x2,b0) \ + reduceFromDoubleLeg(z2,b1) + +#define ladderStepBmi2Adx \ + addSub(x2,z2) \ + addSub(x3,z3) \ + integerMulAdx(b0,x2,z3) \ + integerMulAdx(b1,x3,z2) \ + reduceFromDoubleAdx(t0,b0) \ + reduceFromDoubleAdx(t1,b1) \ + addSub(t0,t1) \ + cselect(x2,x3,regMove) \ + cselect(z2,z3,regMove) \ + integerSqrAdx(b0,t0) \ + integerSqrAdx(b1,t1) \ + reduceFromDoubleAdx(x3,b0) \ + reduceFromDoubleAdx(z3,b1) \ + integerMulAdx(b0,x1,z3) \ + reduceFromDoubleAdx(z3,b0) \ + integerSqrAdx(b0,x2) \ + integerSqrAdx(b1,z2) \ + reduceFromDoubleAdx(x2,b0) \ + reduceFromDoubleAdx(z2,b1) \ + subtraction(t0,x2,z2) \ + multiplyA24Adx(t1,t0) \ + additionAdx(t1,t1,z2) \ + integerMulAdx(b0,x2,z2) \ + integerMulAdx(b1,t0,t1) \ + reduceFromDoubleAdx(x2,b0) \ + reduceFromDoubleAdx(z2,b1) + +#define difAddLeg \ + addSub(x1,z1) \ + integerMulLeg(b0,z1,ui) \ + reduceFromDoubleLeg(z1,b0) \ + addSub(x1,z1) \ + integerSqrLeg(b0,x1) \ + integerSqrLeg(b1,z1) \ + reduceFromDoubleLeg(x1,b0) \ + reduceFromDoubleLeg(z1,b1) \ + integerMulLeg(b0,x1,z2) \ + integerMulLeg(b1,z1,x2) \ + reduceFromDoubleLeg(x1,b0) \ + reduceFromDoubleLeg(z1,b1) + +#define difAddBmi2Adx \ + addSub(x1,z1) \ + integerMulAdx(b0,z1,ui) \ + reduceFromDoubleAdx(z1,b0) \ + addSub(x1,z1) \ + integerSqrAdx(b0,x1) \ + integerSqrAdx(b1,z1) \ + reduceFromDoubleAdx(x1,b0) \ + reduceFromDoubleAdx(z1,b1) \ + integerMulAdx(b0,x1,z2) \ + integerMulAdx(b1,z1,x2) \ + reduceFromDoubleAdx(x1,b0) \ + reduceFromDoubleAdx(z1,b1) + +#define doubleLeg \ + addSub(x1,z1) \ + integerSqrLeg(b0,x1) \ + integerSqrLeg(b1,z1) \ + reduceFromDoubleLeg(x1,b0) \ + reduceFromDoubleLeg(z1,b1) \ + subtraction(t0,x1,z1) \ + multiplyA24Leg(t1,t0) \ + additionLeg(t1,t1,z1) \ + integerMulLeg(b0,x1,z1) \ + integerMulLeg(b1,t0,t1) \ + reduceFromDoubleLeg(x1,b0) \ + reduceFromDoubleLeg(z1,b1) + +#define doubleBmi2Adx \ + addSub(x1,z1) \ + integerSqrAdx(b0,x1) \ + integerSqrAdx(b1,z1) \ + reduceFromDoubleAdx(x1,b0) \ + reduceFromDoubleAdx(z1,b1) \ + subtraction(t0,x1,z1) \ + multiplyA24Adx(t1,t0) \ + additionAdx(t1,t1,z1) \ + integerMulAdx(b0,x1,z1) \ + integerMulAdx(b1,t0,t1) \ + reduceFromDoubleAdx(x1,b0) \ + reduceFromDoubleAdx(z1,b1) diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.s b/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.s new file mode 100644 index 0000000000000..b7723185b61a8 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/curve_amd64.s @@ -0,0 +1,156 @@ +// +build amd64 + +#include "textflag.h" + +// Depends on circl/math/fp25519 package +#include "../../math/fp25519/fp_amd64.h" +#include "curve_amd64.h" + +// CTE_A24 is (A+2)/4 from Curve25519 +#define CTE_A24 121666 + +#define Size 32 + +// multiplyA24Leg multiplies x times CTE_A24 and stores in z +// Uses: AX, DX, R8-R13, FLAGS +// Instr: x86_64, cmov +#define multiplyA24Leg(z,x) \ + MOVL $CTE_A24, AX; MULQ 0+x; MOVQ AX, R8; MOVQ DX, R9; \ + MOVL $CTE_A24, AX; MULQ 8+x; MOVQ AX, R12; MOVQ DX, R10; \ + MOVL $CTE_A24, AX; MULQ 16+x; MOVQ AX, R13; MOVQ DX, R11; \ + MOVL $CTE_A24, AX; MULQ 24+x; \ + ADDQ R12, R9; \ + ADCQ R13, R10; \ + ADCQ AX, R11; \ + ADCQ $0, DX; \ + MOVL $38, AX; /* 2*C = 38 = 2^256 MOD 2^255-19*/ \ + IMULQ AX, DX; \ + ADDQ DX, R8; \ + ADCQ $0, R9; MOVQ R9, 8+z; \ + ADCQ $0, R10; MOVQ R10, 16+z; \ + ADCQ $0, R11; MOVQ R11, 24+z; \ + MOVQ $0, DX; \ + CMOVQCS AX, DX; \ + ADDQ DX, R8; MOVQ R8, 0+z; + +// multiplyA24Adx multiplies x times CTE_A24 and stores in z +// Uses: AX, DX, R8-R12, FLAGS +// Instr: x86_64, cmov, bmi2 +#define multiplyA24Adx(z,x) \ + MOVQ $CTE_A24, DX; \ + MULXQ 0+x, R8, R10; \ + MULXQ 8+x, R9, R11; ADDQ R10, R9; \ + MULXQ 16+x, R10, AX; ADCQ R11, R10; \ + MULXQ 24+x, R11, R12; ADCQ AX, R11; \ + ;;;;;;;;;;;;;;;;;;;;; ADCQ $0, R12; \ + MOVL $38, DX; /* 2*C = 38 = 2^256 MOD 2^255-19*/ \ + IMULQ DX, R12; \ + ADDQ R12, R8; \ + ADCQ $0, R9; MOVQ R9, 8+z; \ + ADCQ $0, R10; MOVQ R10, 16+z; \ + ADCQ $0, R11; MOVQ R11, 24+z; \ + MOVQ $0, R12; \ + CMOVQCS DX, R12; \ + ADDQ R12, R8; MOVQ R8, 0+z; + +#define mulA24Legacy \ + multiplyA24Leg(0(DI),0(SI)) +#define mulA24Bmi2Adx \ + multiplyA24Adx(0(DI),0(SI)) + +// func mulA24Amd64(z, x *fp255.Elt) +TEXT ·mulA24Amd64(SB),NOSPLIT,$0-16 + MOVQ z+0(FP), DI + MOVQ x+8(FP), SI + CHECK_BMI2ADX(LMA24, mulA24Legacy, mulA24Bmi2Adx) + + +// func ladderStepAmd64(w *[5]fp255.Elt, b uint) +// ladderStepAmd64 calculates a point addition and doubling as follows: +// (x2,z2) = 2*(x2,z2) and (x3,z3) = (x2,z2)+(x3,z3) using as a difference (x1,-). +// work = (x1,x2,z2,x3,z3) are five fp255.Elt of 32 bytes. +// stack = (t0,t1) are two fp.Elt of fp.Size bytes, and +// (b0,b1) are two-double precision fp.Elt of 2*fp.Size bytes. +TEXT ·ladderStepAmd64(SB),NOSPLIT,$192-16 + // Parameters + #define regWork DI + #define regMove SI + #define x1 0*Size(regWork) + #define x2 1*Size(regWork) + #define z2 2*Size(regWork) + #define x3 3*Size(regWork) + #define z3 4*Size(regWork) + // Local variables + #define t0 0*Size(SP) + #define t1 1*Size(SP) + #define b0 2*Size(SP) + #define b1 4*Size(SP) + MOVQ w+0(FP), regWork + MOVQ b+8(FP), regMove + CHECK_BMI2ADX(LLADSTEP, ladderStepLeg, ladderStepBmi2Adx) + #undef regWork + #undef regMove + #undef x1 + #undef x2 + #undef z2 + #undef x3 + #undef z3 + #undef t0 + #undef t1 + #undef b0 + #undef b1 + +// func diffAddAmd64(w *[5]fp255.Elt, b uint) +// diffAddAmd64 calculates a differential point addition using a precomputed point. +// (x1,z1) = (x1,z1)+(mu) using a difference point (x2,z2) +// w = (mu,x1,z1,x2,z2) are five fp.Elt, and +// stack = (b0,b1) are two-double precision fp.Elt of 2*fp.Size bytes. +TEXT ·diffAddAmd64(SB),NOSPLIT,$128-16 + // Parameters + #define regWork DI + #define regSwap SI + #define ui 0*Size(regWork) + #define x1 1*Size(regWork) + #define z1 2*Size(regWork) + #define x2 3*Size(regWork) + #define z2 4*Size(regWork) + // Local variables + #define b0 0*Size(SP) + #define b1 2*Size(SP) + MOVQ w+0(FP), regWork + MOVQ b+8(FP), regSwap + cswap(x1,x2,regSwap) + cswap(z1,z2,regSwap) + CHECK_BMI2ADX(LDIFADD, difAddLeg, difAddBmi2Adx) + #undef regWork + #undef regSwap + #undef ui + #undef x1 + #undef z1 + #undef x2 + #undef z2 + #undef b0 + #undef b1 + +// func doubleAmd64(x, z *fp255.Elt) +// doubleAmd64 calculates a point doubling (x1,z1) = 2*(x1,z1). +// stack = (t0,t1) are two fp.Elt of fp.Size bytes, and +// (b0,b1) are two-double precision fp.Elt of 2*fp.Size bytes. +TEXT ·doubleAmd64(SB),NOSPLIT,$192-16 + // Parameters + #define x1 0(DI) + #define z1 0(SI) + // Local variables + #define t0 0*Size(SP) + #define t1 1*Size(SP) + #define b0 2*Size(SP) + #define b1 4*Size(SP) + MOVQ x+0(FP), DI + MOVQ z+8(FP), SI + CHECK_BMI2ADX(LDOUB,doubleLeg,doubleBmi2Adx) + #undef x1 + #undef z1 + #undef t0 + #undef t1 + #undef b0 + #undef b1 diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/curve_generic.go b/vendor/github.com/cloudflare/circl/dh/x25519/curve_generic.go new file mode 100644 index 0000000000000..dae67ea37df47 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/curve_generic.go @@ -0,0 +1,85 @@ +package x25519 + +import ( + "encoding/binary" + "math/bits" + + fp "github.com/cloudflare/circl/math/fp25519" +) + +func doubleGeneric(x, z *fp.Elt) { + t0, t1 := &fp.Elt{}, &fp.Elt{} + fp.AddSub(x, z) + fp.Sqr(x, x) + fp.Sqr(z, z) + fp.Sub(t0, x, z) + mulA24Generic(t1, t0) + fp.Add(t1, t1, z) + fp.Mul(x, x, z) + fp.Mul(z, t0, t1) +} + +func diffAddGeneric(w *[5]fp.Elt, b uint) { + mu, x1, z1, x2, z2 := &w[0], &w[1], &w[2], &w[3], &w[4] + fp.Cswap(x1, x2, b) + fp.Cswap(z1, z2, b) + fp.AddSub(x1, z1) + fp.Mul(z1, z1, mu) + fp.AddSub(x1, z1) + fp.Sqr(x1, x1) + fp.Sqr(z1, z1) + fp.Mul(x1, x1, z2) + fp.Mul(z1, z1, x2) +} + +func ladderStepGeneric(w *[5]fp.Elt, b uint) { + x1, x2, z2, x3, z3 := &w[0], &w[1], &w[2], &w[3], &w[4] + t0 := &fp.Elt{} + t1 := &fp.Elt{} + fp.AddSub(x2, z2) + fp.AddSub(x3, z3) + fp.Mul(t0, x2, z3) + fp.Mul(t1, x3, z2) + fp.AddSub(t0, t1) + fp.Cmov(x2, x3, b) + fp.Cmov(z2, z3, b) + fp.Sqr(x3, t0) + fp.Sqr(z3, t1) + fp.Mul(z3, x1, z3) + fp.Sqr(x2, x2) + fp.Sqr(z2, z2) + fp.Sub(t0, x2, z2) + mulA24Generic(t1, t0) + fp.Add(t1, t1, z2) + fp.Mul(x2, x2, z2) + fp.Mul(z2, t0, t1) +} + +func mulA24Generic(z, x *fp.Elt) { + const A24 = 121666 + const n = 8 + var xx [4]uint64 + for i := range xx { + xx[i] = binary.LittleEndian.Uint64(x[i*n : (i+1)*n]) + } + + h0, l0 := bits.Mul64(xx[0], A24) + h1, l1 := bits.Mul64(xx[1], A24) + h2, l2 := bits.Mul64(xx[2], A24) + h3, l3 := bits.Mul64(xx[3], A24) + + var c3 uint64 + l1, c0 := bits.Add64(h0, l1, 0) + l2, c1 := bits.Add64(h1, l2, c0) + l3, c2 := bits.Add64(h2, l3, c1) + l4, _ := bits.Add64(h3, 0, c2) + _, l4 = bits.Mul64(l4, 38) + l0, c0 = bits.Add64(l0, l4, 0) + xx[1], c1 = bits.Add64(l1, 0, c0) + xx[2], c2 = bits.Add64(l2, 0, c1) + xx[3], c3 = bits.Add64(l3, 0, c2) + xx[0], _ = bits.Add64(l0, (-c3)&38, 0) + for i := range xx { + binary.LittleEndian.PutUint64(z[i*n:(i+1)*n], xx[i]) + } +} diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/curve_noasm.go b/vendor/github.com/cloudflare/circl/dh/x25519/curve_noasm.go new file mode 100644 index 0000000000000..07fab97d2af61 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/curve_noasm.go @@ -0,0 +1,11 @@ +//go:build !amd64 || purego +// +build !amd64 purego + +package x25519 + +import fp "github.com/cloudflare/circl/math/fp25519" + +func double(x, z *fp.Elt) { doubleGeneric(x, z) } +func diffAdd(w *[5]fp.Elt, b uint) { diffAddGeneric(w, b) } +func ladderStep(w *[5]fp.Elt, b uint) { ladderStepGeneric(w, b) } +func mulA24(z, x *fp.Elt) { mulA24Generic(z, x) } diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/doc.go b/vendor/github.com/cloudflare/circl/dh/x25519/doc.go new file mode 100644 index 0000000000000..3ce102d1457fa --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/doc.go @@ -0,0 +1,19 @@ +/* +Package x25519 provides Diffie-Hellman functions as specified in RFC-7748. + +Validation of public keys. + +The Diffie-Hellman function, as described in RFC-7748 [1], works for any +public key. However, if a different protocol requires contributory +behaviour [2,3], then the public keys must be validated against low-order +points [3,4]. To do that, the Shared function performs this validation +internally and returns false when the public key is invalid (i.e., it +is a low-order point). + +References: + - [1] RFC7748 by Langley, Hamburg, Turner (https://rfc-editor.org/rfc/rfc7748.txt) + - [2] Curve25519 by Bernstein (https://cr.yp.to/ecdh.html) + - [3] Bernstein (https://cr.yp.to/ecdh.html#validate) + - [4] Cremers&Jackson (https://eprint.iacr.org/2019/526) +*/ +package x25519 diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/key.go b/vendor/github.com/cloudflare/circl/dh/x25519/key.go new file mode 100644 index 0000000000000..c76f72ac7fa04 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/key.go @@ -0,0 +1,47 @@ +package x25519 + +import ( + "crypto/subtle" + + fp "github.com/cloudflare/circl/math/fp25519" +) + +// Size is the length in bytes of a X25519 key. +const Size = 32 + +// Key represents a X25519 key. +type Key [Size]byte + +func (k *Key) clamp(in *Key) *Key { + *k = *in + k[0] &= 248 + k[31] = (k[31] & 127) | 64 + return k +} + +// isValidPubKey verifies if the public key is not a low-order point. +func (k *Key) isValidPubKey() bool { + fp.Modp((*fp.Elt)(k)) + var isLowOrder int + for _, P := range lowOrderPoints { + isLowOrder |= subtle.ConstantTimeCompare(P[:], k[:]) + } + return isLowOrder == 0 +} + +// KeyGen obtains a public key given a secret key. +func KeyGen(public, secret *Key) { + ladderJoye(public.clamp(secret)) +} + +// Shared calculates Alice's shared key from Alice's secret key and Bob's +// public key returning true on success. A failure case happens when the public +// key is a low-order point, thus the shared key is all-zeros and the function +// returns false. +func Shared(shared, secret, public *Key) bool { + validPk := *public + validPk[31] &= (1 << (255 % 8)) - 1 + ok := validPk.isValidPubKey() + ladderMontgomery(shared.clamp(secret), &validPk) + return ok +} diff --git a/vendor/github.com/cloudflare/circl/dh/x25519/table.go b/vendor/github.com/cloudflare/circl/dh/x25519/table.go new file mode 100644 index 0000000000000..28c8c4ac03223 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x25519/table.go @@ -0,0 +1,268 @@ +package x25519 + +import "github.com/cloudflare/circl/math/fp25519" + +// tableGenerator contains the set of points: +// +// t[i] = (xi+1)/(xi-1), +// +// where (xi,yi) = 2^iG and G is the generator point +// Size = (256)*(256/8) = 8192 bytes. +var tableGenerator = [256 * fp25519.Size]byte{ + /* (2^ 0)P */ 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, + /* (2^ 1)P */ 0x96, 0xfe, 0xaa, 0x16, 0xf4, 0x20, 0x82, 0x6b, 0x34, 0x6a, 0x56, 0x4f, 0x2b, 0xeb, 0xeb, 0x82, 0x0f, 0x95, 0xa5, 0x75, 0xb0, 0xa5, 0xa9, 0xd5, 0xf4, 0x88, 0x24, 0x4b, 0xcf, 0xb2, 0x42, 0x51, + /* (2^ 2)P */ 0x0c, 0x68, 0x69, 0x00, 0x75, 0xbc, 0xae, 0x6a, 0x41, 0x9c, 0xf9, 0xa0, 0x20, 0x78, 0xcf, 0x89, 0xf4, 0xd0, 0x56, 0x3b, 0x18, 0xd9, 0x58, 0x2a, 0xa4, 0x11, 0x60, 0xe3, 0x80, 0xca, 0x5a, 0x4b, + /* (2^ 3)P */ 0x5d, 0x74, 0x29, 0x8c, 0x34, 0x32, 0x91, 0x32, 0xd7, 0x2f, 0x64, 0xe1, 0x16, 0xe6, 0xa2, 0xf4, 0x34, 0xbc, 0x67, 0xff, 0x03, 0xbb, 0x45, 0x1e, 0x4a, 0x9b, 0x2a, 0xf4, 0xd0, 0x12, 0x69, 0x30, + /* (2^ 4)P */ 0x54, 0x71, 0xaf, 0xe6, 0x07, 0x65, 0x88, 0xff, 0x2f, 0xc8, 0xee, 0xdf, 0x13, 0x0e, 0xf5, 0x04, 0xce, 0xb5, 0xba, 0x2a, 0xe8, 0x2f, 0x51, 0xaa, 0x22, 0xf2, 0xd5, 0x68, 0x1a, 0x25, 0x4e, 0x17, + /* (2^ 5)P */ 0x98, 0x88, 0x02, 0x82, 0x0d, 0x70, 0x96, 0xcf, 0xc5, 0x02, 0x2c, 0x0a, 0x37, 0xe3, 0x43, 0x17, 0xaa, 0x6e, 0xe8, 0xb4, 0x98, 0xec, 0x9e, 0x37, 0x2e, 0x48, 0xe0, 0x51, 0x8a, 0x88, 0x59, 0x0c, + /* (2^ 6)P */ 0x89, 0xd1, 0xb5, 0x99, 0xd6, 0xf1, 0xcb, 0xfb, 0x84, 0xdc, 0x9f, 0x8e, 0xd5, 0xf0, 0xae, 0xac, 0x14, 0x76, 0x1f, 0x23, 0x06, 0x0d, 0xc2, 0xc1, 0x72, 0xf9, 0x74, 0xa2, 0x8d, 0x21, 0x38, 0x29, + /* (2^ 7)P */ 0x18, 0x7f, 0x1d, 0xff, 0xbe, 0x49, 0xaf, 0xf6, 0xc2, 0xc9, 0x7a, 0x38, 0x22, 0x1c, 0x54, 0xcc, 0x6b, 0xc5, 0x15, 0x40, 0xef, 0xc9, 0xfc, 0x96, 0xa9, 0x13, 0x09, 0x69, 0x7c, 0x62, 0xc1, 0x69, + /* (2^ 8)P */ 0x0e, 0xdb, 0x33, 0x47, 0x2f, 0xfd, 0x86, 0x7a, 0xe9, 0x7d, 0x08, 0x9e, 0xf2, 0xc4, 0xb8, 0xfd, 0x29, 0xa2, 0xa2, 0x8e, 0x1a, 0x4b, 0x5e, 0x09, 0x79, 0x7a, 0xb3, 0x29, 0xc8, 0xa7, 0xd7, 0x1a, + /* (2^ 9)P */ 0xc0, 0xa0, 0x7e, 0xd1, 0xca, 0x89, 0x2d, 0x34, 0x51, 0x20, 0xed, 0xcc, 0xa6, 0xdd, 0xbe, 0x67, 0x74, 0x2f, 0xb4, 0x2b, 0xbf, 0x31, 0xca, 0x19, 0xbb, 0xac, 0x80, 0x49, 0xc8, 0xb4, 0xf7, 0x3d, + /* (2^ 10)P */ 0x83, 0xd8, 0x0a, 0xc8, 0x4d, 0x44, 0xc6, 0xa8, 0x85, 0xab, 0xe3, 0x66, 0x03, 0x44, 0x1e, 0xb9, 0xd8, 0xf6, 0x64, 0x01, 0xa0, 0xcd, 0x15, 0xc2, 0x68, 0xe6, 0x47, 0xf2, 0x6e, 0x7c, 0x86, 0x3d, + /* (2^ 11)P */ 0x8c, 0x65, 0x3e, 0xcc, 0x2b, 0x58, 0xdd, 0xc7, 0x28, 0x55, 0x0e, 0xee, 0x48, 0x47, 0x2c, 0xfd, 0x71, 0x4f, 0x9f, 0xcc, 0x95, 0x9b, 0xfd, 0xa0, 0xdf, 0x5d, 0x67, 0xb0, 0x71, 0xd8, 0x29, 0x75, + /* (2^ 12)P */ 0x78, 0xbd, 0x3c, 0x2d, 0xb4, 0x68, 0xf5, 0xb8, 0x82, 0xda, 0xf3, 0x91, 0x1b, 0x01, 0x33, 0x12, 0x62, 0x3b, 0x7c, 0x4a, 0xcd, 0x6c, 0xce, 0x2d, 0x03, 0x86, 0x49, 0x9e, 0x8e, 0xfc, 0xe7, 0x75, + /* (2^ 13)P */ 0xec, 0xb6, 0xd0, 0xfc, 0xf1, 0x13, 0x4f, 0x2f, 0x45, 0x7a, 0xff, 0x29, 0x1f, 0xca, 0xa8, 0xf1, 0x9b, 0xe2, 0x81, 0x29, 0xa7, 0xc1, 0x49, 0xc2, 0x6a, 0xb5, 0x83, 0x8c, 0xbb, 0x0d, 0xbe, 0x6e, + /* (2^ 14)P */ 0x22, 0xb2, 0x0b, 0x17, 0x8d, 0xfa, 0x14, 0x71, 0x5f, 0x93, 0x93, 0xbf, 0xd5, 0xdc, 0xa2, 0x65, 0x9a, 0x97, 0x9c, 0xb5, 0x68, 0x1f, 0xc4, 0xbd, 0x89, 0x92, 0xce, 0xa2, 0x79, 0xef, 0x0e, 0x2f, + /* (2^ 15)P */ 0xce, 0x37, 0x3c, 0x08, 0x0c, 0xbf, 0xec, 0x42, 0x22, 0x63, 0x49, 0xec, 0x09, 0xbc, 0x30, 0x29, 0x0d, 0xac, 0xfe, 0x9c, 0xc1, 0xb0, 0x94, 0xf2, 0x80, 0xbb, 0xfa, 0xed, 0x4b, 0xaa, 0x80, 0x37, + /* (2^ 16)P */ 0x29, 0xd9, 0xea, 0x7c, 0x3e, 0x7d, 0xc1, 0x56, 0xc5, 0x22, 0x57, 0x2e, 0xeb, 0x4b, 0xcb, 0xe7, 0x5a, 0xe1, 0xbf, 0x2d, 0x73, 0x31, 0xe9, 0x0c, 0xf8, 0x52, 0x10, 0x62, 0xc7, 0x83, 0xb8, 0x41, + /* (2^ 17)P */ 0x50, 0x53, 0xd2, 0xc3, 0xa0, 0x5c, 0xf7, 0xdb, 0x51, 0xe3, 0xb1, 0x6e, 0x08, 0xbe, 0x36, 0x29, 0x12, 0xb2, 0xa9, 0xb4, 0x3c, 0xe0, 0x36, 0xc9, 0xaa, 0x25, 0x22, 0x32, 0x82, 0xbf, 0x45, 0x1d, + /* (2^ 18)P */ 0xc5, 0x4c, 0x02, 0x6a, 0x03, 0xb1, 0x1a, 0xe8, 0x72, 0x9a, 0x4c, 0x30, 0x1c, 0x20, 0x12, 0xe2, 0xfc, 0xb1, 0x32, 0x68, 0xba, 0x3f, 0xd7, 0xc5, 0x81, 0x95, 0x83, 0x4d, 0x5a, 0xdb, 0xff, 0x20, + /* (2^ 19)P */ 0xad, 0x0f, 0x5d, 0xbe, 0x67, 0xd3, 0x83, 0xa2, 0x75, 0x44, 0x16, 0x8b, 0xca, 0x25, 0x2b, 0x6c, 0x2e, 0xf2, 0xaa, 0x7c, 0x46, 0x35, 0x49, 0x9d, 0x49, 0xff, 0x85, 0xee, 0x8e, 0x40, 0x66, 0x51, + /* (2^ 20)P */ 0x61, 0xe3, 0xb4, 0xfa, 0xa2, 0xba, 0x67, 0x3c, 0xef, 0x5c, 0xf3, 0x7e, 0xc6, 0x33, 0xe4, 0xb3, 0x1c, 0x9b, 0x15, 0x41, 0x92, 0x72, 0x59, 0x52, 0x33, 0xab, 0xb0, 0xd5, 0x92, 0x18, 0x62, 0x6a, + /* (2^ 21)P */ 0xcb, 0xcd, 0x55, 0x75, 0x38, 0x4a, 0xb7, 0x20, 0x3f, 0x92, 0x08, 0x12, 0x0e, 0xa1, 0x2a, 0x53, 0xd1, 0x1d, 0x28, 0x62, 0x77, 0x7b, 0xa1, 0xea, 0xbf, 0x44, 0x5c, 0xf0, 0x43, 0x34, 0xab, 0x61, + /* (2^ 22)P */ 0xf8, 0xde, 0x24, 0x23, 0x42, 0x6c, 0x7a, 0x25, 0x7f, 0xcf, 0xe3, 0x17, 0x10, 0x6c, 0x1c, 0x13, 0x57, 0xa2, 0x30, 0xf6, 0x39, 0x87, 0x75, 0x23, 0x80, 0x85, 0xa7, 0x01, 0x7a, 0x40, 0x5a, 0x29, + /* (2^ 23)P */ 0xd9, 0xa8, 0x5d, 0x6d, 0x24, 0x43, 0xc4, 0xf8, 0x5d, 0xfa, 0x52, 0x0c, 0x45, 0x75, 0xd7, 0x19, 0x3d, 0xf8, 0x1b, 0x73, 0x92, 0xfc, 0xfc, 0x2a, 0x00, 0x47, 0x2b, 0x1b, 0xe8, 0xc8, 0x10, 0x7d, + /* (2^ 24)P */ 0x0b, 0xa2, 0xba, 0x70, 0x1f, 0x27, 0xe0, 0xc8, 0x57, 0x39, 0xa6, 0x7c, 0x86, 0x48, 0x37, 0x99, 0xbb, 0xd4, 0x7e, 0xcb, 0xb3, 0xef, 0x12, 0x54, 0x75, 0x29, 0xe6, 0x73, 0x61, 0xd3, 0x96, 0x31, + /* (2^ 25)P */ 0xfc, 0xdf, 0xc7, 0x41, 0xd1, 0xca, 0x5b, 0xde, 0x48, 0xc8, 0x95, 0xb3, 0xd2, 0x8c, 0xcc, 0x47, 0xcb, 0xf3, 0x1a, 0xe1, 0x42, 0xd9, 0x4c, 0xa3, 0xc2, 0xce, 0x4e, 0xd0, 0xf2, 0xdb, 0x56, 0x02, + /* (2^ 26)P */ 0x7f, 0x66, 0x0e, 0x4b, 0xe9, 0xb7, 0x5a, 0x87, 0x10, 0x0d, 0x85, 0xc0, 0x83, 0xdd, 0xd4, 0xca, 0x9f, 0xc7, 0x72, 0x4e, 0x8f, 0x2e, 0xf1, 0x47, 0x9b, 0xb1, 0x85, 0x8c, 0xbb, 0x87, 0x1a, 0x5f, + /* (2^ 27)P */ 0xb8, 0x51, 0x7f, 0x43, 0xb6, 0xd0, 0xe9, 0x7a, 0x65, 0x90, 0x87, 0x18, 0x55, 0xce, 0xc7, 0x12, 0xee, 0x7a, 0xf7, 0x5c, 0xfe, 0x09, 0xde, 0x2a, 0x27, 0x56, 0x2c, 0x7d, 0x2f, 0x5a, 0xa0, 0x23, + /* (2^ 28)P */ 0x9a, 0x16, 0x7c, 0xf1, 0x28, 0xe1, 0x08, 0x59, 0x2d, 0x85, 0xd0, 0x8a, 0xdd, 0x98, 0x74, 0xf7, 0x64, 0x2f, 0x10, 0xab, 0xce, 0xc4, 0xb4, 0x74, 0x45, 0x98, 0x13, 0x10, 0xdd, 0xba, 0x3a, 0x18, + /* (2^ 29)P */ 0xac, 0xaa, 0x92, 0xaa, 0x8d, 0xba, 0x65, 0xb1, 0x05, 0x67, 0x38, 0x99, 0x95, 0xef, 0xc5, 0xd5, 0xd1, 0x40, 0xfc, 0xf8, 0x0c, 0x8f, 0x2f, 0xbe, 0x14, 0x45, 0x20, 0xee, 0x35, 0xe6, 0x01, 0x27, + /* (2^ 30)P */ 0x14, 0x65, 0x15, 0x20, 0x00, 0xa8, 0x9f, 0x62, 0xce, 0xc1, 0xa8, 0x64, 0x87, 0x86, 0x23, 0xf2, 0x0e, 0x06, 0x3f, 0x0b, 0xff, 0x4f, 0x89, 0x5b, 0xfa, 0xa3, 0x08, 0xf7, 0x4c, 0x94, 0xd9, 0x60, + /* (2^ 31)P */ 0x1f, 0x20, 0x7a, 0x1c, 0x1a, 0x00, 0xea, 0xae, 0x63, 0xce, 0xe2, 0x3e, 0x63, 0x6a, 0xf1, 0xeb, 0xe1, 0x07, 0x7a, 0x4c, 0x59, 0x09, 0x77, 0x6f, 0xcb, 0x08, 0x02, 0x0d, 0x15, 0x58, 0xb9, 0x79, + /* (2^ 32)P */ 0xe7, 0x10, 0xd4, 0x01, 0x53, 0x5e, 0xb5, 0x24, 0x4d, 0xc8, 0xfd, 0xf3, 0xdf, 0x4e, 0xa3, 0xe3, 0xd8, 0x32, 0x40, 0x90, 0xe4, 0x68, 0x87, 0xd8, 0xec, 0xae, 0x3a, 0x7b, 0x42, 0x84, 0x13, 0x13, + /* (2^ 33)P */ 0x14, 0x4f, 0x23, 0x86, 0x12, 0xe5, 0x05, 0x84, 0x29, 0xc5, 0xb4, 0xad, 0x39, 0x47, 0xdc, 0x14, 0xfd, 0x4f, 0x63, 0x50, 0xb2, 0xb5, 0xa2, 0xb8, 0x93, 0xff, 0xa7, 0xd8, 0x4a, 0xa9, 0xe2, 0x2f, + /* (2^ 34)P */ 0xdd, 0xfa, 0x43, 0xe8, 0xef, 0x57, 0x5c, 0xec, 0x18, 0x99, 0xbb, 0xf0, 0x40, 0xce, 0x43, 0x28, 0x05, 0x63, 0x3d, 0xcf, 0xd6, 0x61, 0xb5, 0xa4, 0x7e, 0x77, 0xfb, 0xe8, 0xbd, 0x29, 0x36, 0x74, + /* (2^ 35)P */ 0x8f, 0x73, 0xaf, 0xbb, 0x46, 0xdd, 0x3e, 0x34, 0x51, 0xa6, 0x01, 0xb1, 0x28, 0x18, 0x98, 0xed, 0x7a, 0x79, 0x2c, 0x88, 0x0b, 0x76, 0x01, 0xa4, 0x30, 0x87, 0xc8, 0x8d, 0xe2, 0x23, 0xc2, 0x1f, + /* (2^ 36)P */ 0x0e, 0xba, 0x0f, 0xfc, 0x91, 0x4e, 0x60, 0x48, 0xa4, 0x6f, 0x2c, 0x05, 0x8f, 0xf7, 0x37, 0xb6, 0x9c, 0x23, 0xe9, 0x09, 0x3d, 0xac, 0xcc, 0x91, 0x7c, 0x68, 0x7a, 0x43, 0xd4, 0xee, 0xf7, 0x23, + /* (2^ 37)P */ 0x00, 0xd8, 0x9b, 0x8d, 0x11, 0xb1, 0x73, 0x51, 0xa7, 0xd4, 0x89, 0x31, 0xb6, 0x41, 0xd6, 0x29, 0x86, 0xc5, 0xbb, 0x88, 0x79, 0x17, 0xbf, 0xfd, 0xf5, 0x1d, 0xd8, 0xca, 0x4f, 0x89, 0x59, 0x29, + /* (2^ 38)P */ 0x99, 0xc8, 0xbb, 0xb4, 0xf3, 0x8e, 0xbc, 0xae, 0xb9, 0x92, 0x69, 0xb2, 0x5a, 0x99, 0x48, 0x41, 0xfb, 0x2c, 0xf9, 0x34, 0x01, 0x0b, 0xe2, 0x24, 0xe8, 0xde, 0x05, 0x4a, 0x89, 0x58, 0xd1, 0x40, + /* (2^ 39)P */ 0xf6, 0x76, 0xaf, 0x85, 0x11, 0x0b, 0xb0, 0x46, 0x79, 0x7a, 0x18, 0x73, 0x78, 0xc7, 0xba, 0x26, 0x5f, 0xff, 0x8f, 0xab, 0x95, 0xbf, 0xc0, 0x3d, 0xd7, 0x24, 0x55, 0x94, 0xd8, 0x8b, 0x60, 0x2a, + /* (2^ 40)P */ 0x02, 0x63, 0x44, 0xbd, 0x88, 0x95, 0x44, 0x26, 0x9c, 0x43, 0x88, 0x03, 0x1c, 0xc2, 0x4b, 0x7c, 0xb2, 0x11, 0xbd, 0x83, 0xf3, 0xa4, 0x98, 0x8e, 0xb9, 0x76, 0xd8, 0xc9, 0x7b, 0x8d, 0x21, 0x26, + /* (2^ 41)P */ 0x8a, 0x17, 0x7c, 0x99, 0x42, 0x15, 0x08, 0xe3, 0x6f, 0x60, 0xb6, 0x6f, 0xa8, 0x29, 0x2d, 0x3c, 0x74, 0x93, 0x27, 0xfa, 0x36, 0x77, 0x21, 0x5c, 0xfa, 0xb1, 0xfe, 0x4a, 0x73, 0x05, 0xde, 0x7d, + /* (2^ 42)P */ 0xab, 0x2b, 0xd4, 0x06, 0x39, 0x0e, 0xf1, 0x3b, 0x9c, 0x64, 0x80, 0x19, 0x3e, 0x80, 0xf7, 0xe4, 0x7a, 0xbf, 0x95, 0x95, 0xf8, 0x3b, 0x05, 0xe6, 0x30, 0x55, 0x24, 0xda, 0x38, 0xaf, 0x4f, 0x39, + /* (2^ 43)P */ 0xf4, 0x28, 0x69, 0x89, 0x58, 0xfb, 0x8e, 0x7a, 0x3c, 0x11, 0x6a, 0xcc, 0xe9, 0x78, 0xc7, 0xfb, 0x6f, 0x59, 0xaf, 0x30, 0xe3, 0x0c, 0x67, 0x72, 0xf7, 0x6c, 0x3d, 0x1d, 0xa8, 0x22, 0xf2, 0x48, + /* (2^ 44)P */ 0xa7, 0xca, 0x72, 0x0d, 0x41, 0xce, 0x1f, 0xf0, 0x95, 0x55, 0x3b, 0x21, 0xc7, 0xec, 0x20, 0x5a, 0x83, 0x14, 0xfa, 0xc1, 0x65, 0x11, 0xc2, 0x7b, 0x41, 0xa7, 0xa8, 0x1d, 0xe3, 0x9a, 0xf8, 0x07, + /* (2^ 45)P */ 0xf9, 0x0f, 0x83, 0xc6, 0xb4, 0xc2, 0xd2, 0x05, 0x93, 0x62, 0x31, 0xc6, 0x0f, 0x33, 0x3e, 0xd4, 0x04, 0xa9, 0xd3, 0x96, 0x0a, 0x59, 0xa5, 0xa5, 0xb6, 0x33, 0x53, 0xa6, 0x91, 0xdb, 0x5e, 0x70, + /* (2^ 46)P */ 0xf7, 0xa5, 0xb9, 0x0b, 0x5e, 0xe1, 0x8e, 0x04, 0x5d, 0xaf, 0x0a, 0x9e, 0xca, 0xcf, 0x40, 0x32, 0x0b, 0xa4, 0xc4, 0xed, 0xce, 0x71, 0x4b, 0x8f, 0x6d, 0x4a, 0x54, 0xde, 0xa3, 0x0d, 0x1c, 0x62, + /* (2^ 47)P */ 0x91, 0x40, 0x8c, 0xa0, 0x36, 0x28, 0x87, 0x92, 0x45, 0x14, 0xc9, 0x10, 0xb0, 0x75, 0x83, 0xce, 0x94, 0x63, 0x27, 0x4f, 0x52, 0xeb, 0x72, 0x8a, 0x35, 0x36, 0xc8, 0x7e, 0xfa, 0xfc, 0x67, 0x26, + /* (2^ 48)P */ 0x2a, 0x75, 0xe8, 0x45, 0x33, 0x17, 0x4c, 0x7f, 0xa5, 0x79, 0x70, 0xee, 0xfe, 0x47, 0x1b, 0x06, 0x34, 0xff, 0x86, 0x9f, 0xfa, 0x9a, 0xdd, 0x25, 0x9c, 0xc8, 0x5d, 0x42, 0xf5, 0xce, 0x80, 0x37, + /* (2^ 49)P */ 0xe9, 0xb4, 0x3b, 0x51, 0x5a, 0x03, 0x46, 0x1a, 0xda, 0x5a, 0x57, 0xac, 0x79, 0xf3, 0x1e, 0x3e, 0x50, 0x4b, 0xa2, 0x5f, 0x1c, 0x5f, 0x8c, 0xc7, 0x22, 0x9f, 0xfd, 0x34, 0x76, 0x96, 0x1a, 0x32, + /* (2^ 50)P */ 0xfa, 0x27, 0x6e, 0x82, 0xb8, 0x07, 0x67, 0x94, 0xd0, 0x6f, 0x50, 0x4c, 0xd6, 0x84, 0xca, 0x3d, 0x36, 0x14, 0xe9, 0x75, 0x80, 0x21, 0x89, 0xc1, 0x84, 0x84, 0x3b, 0x9b, 0x16, 0x84, 0x92, 0x6d, + /* (2^ 51)P */ 0xdf, 0x2d, 0x3f, 0x38, 0x40, 0xe8, 0x67, 0x3a, 0x75, 0x9b, 0x4f, 0x0c, 0xa3, 0xc9, 0xee, 0x33, 0x47, 0xef, 0x83, 0xa7, 0x6f, 0xc8, 0xc7, 0x3e, 0xc4, 0xfb, 0xc9, 0xba, 0x9f, 0x44, 0xec, 0x26, + /* (2^ 52)P */ 0x7d, 0x9e, 0x9b, 0xa0, 0xcb, 0x38, 0x0f, 0x5c, 0x8c, 0x47, 0xa3, 0x62, 0xc7, 0x8c, 0x16, 0x81, 0x1c, 0x12, 0xfc, 0x06, 0xd3, 0xb0, 0x23, 0x3e, 0xdd, 0xdc, 0xef, 0xa5, 0xa0, 0x8a, 0x23, 0x5a, + /* (2^ 53)P */ 0xff, 0x43, 0xea, 0xc4, 0x21, 0x61, 0xa2, 0x1b, 0xb5, 0x32, 0x88, 0x7c, 0x7f, 0xc7, 0xf8, 0x36, 0x9a, 0xf9, 0xdc, 0x0a, 0x0b, 0xea, 0xfb, 0x88, 0xf9, 0xeb, 0x5b, 0xc2, 0x8e, 0x93, 0xa9, 0x5c, + /* (2^ 54)P */ 0xa0, 0xcd, 0xfc, 0x51, 0x5e, 0x6a, 0x43, 0xd5, 0x3b, 0x89, 0xcd, 0xc2, 0x97, 0x47, 0xbc, 0x1d, 0x08, 0x4a, 0x22, 0xd3, 0x65, 0x6a, 0x34, 0x19, 0x66, 0xf4, 0x9a, 0x9b, 0xe4, 0x34, 0x50, 0x0f, + /* (2^ 55)P */ 0x6e, 0xb9, 0xe0, 0xa1, 0x67, 0x39, 0x3c, 0xf2, 0x88, 0x4d, 0x7a, 0x86, 0xfa, 0x08, 0x8b, 0xe5, 0x79, 0x16, 0x34, 0xa7, 0xc6, 0xab, 0x2f, 0xfb, 0x46, 0x69, 0x02, 0xb6, 0x1e, 0x38, 0x75, 0x2a, + /* (2^ 56)P */ 0xac, 0x20, 0x94, 0xc1, 0xe4, 0x3b, 0x0a, 0xc8, 0xdc, 0xb6, 0xf2, 0x81, 0xc6, 0xf6, 0xb1, 0x66, 0x88, 0x33, 0xe9, 0x61, 0x67, 0x03, 0xf7, 0x7c, 0xc4, 0xa4, 0x60, 0xa6, 0xd8, 0xbb, 0xab, 0x25, + /* (2^ 57)P */ 0x98, 0x51, 0xfd, 0x14, 0xba, 0x12, 0xea, 0x91, 0xa9, 0xff, 0x3c, 0x4a, 0xfc, 0x50, 0x49, 0x68, 0x28, 0xad, 0xf5, 0x30, 0x21, 0x84, 0x26, 0xf8, 0x41, 0xa4, 0x01, 0x53, 0xf7, 0x88, 0xa9, 0x3e, + /* (2^ 58)P */ 0x6f, 0x8c, 0x5f, 0x69, 0x9a, 0x10, 0x78, 0xc9, 0xf3, 0xc3, 0x30, 0x05, 0x4a, 0xeb, 0x46, 0x17, 0x95, 0x99, 0x45, 0xb4, 0x77, 0x6d, 0x4d, 0x44, 0xc7, 0x5c, 0x4e, 0x05, 0x8c, 0x2b, 0x95, 0x75, + /* (2^ 59)P */ 0xaa, 0xd6, 0xf4, 0x15, 0x79, 0x3f, 0x70, 0xa3, 0xd8, 0x47, 0x26, 0x2f, 0x20, 0x46, 0xc3, 0x66, 0x4b, 0x64, 0x1d, 0x81, 0xdf, 0x69, 0x14, 0xd0, 0x1f, 0xd7, 0xa5, 0x81, 0x7d, 0xa4, 0xfe, 0x77, + /* (2^ 60)P */ 0x81, 0xa3, 0x7c, 0xf5, 0x9e, 0x52, 0xe9, 0xc5, 0x1a, 0x88, 0x2f, 0xce, 0xb9, 0xb4, 0xee, 0x6e, 0xd6, 0x9b, 0x00, 0xe8, 0x28, 0x1a, 0xe9, 0xb6, 0xec, 0x3f, 0xfc, 0x9a, 0x3e, 0xbe, 0x80, 0x4b, + /* (2^ 61)P */ 0xc5, 0xd2, 0xae, 0x26, 0xc5, 0x73, 0x37, 0x7e, 0x9d, 0xa4, 0xc9, 0x53, 0xb4, 0xfc, 0x4a, 0x1b, 0x4d, 0xb2, 0xff, 0xba, 0xd7, 0xbd, 0x20, 0xa9, 0x0e, 0x40, 0x2d, 0x12, 0x9f, 0x69, 0x54, 0x7c, + /* (2^ 62)P */ 0xc8, 0x4b, 0xa9, 0x4f, 0xe1, 0xc8, 0x46, 0xef, 0x5e, 0xed, 0x52, 0x29, 0xce, 0x74, 0xb0, 0xe0, 0xd5, 0x85, 0xd8, 0xdb, 0xe1, 0x50, 0xa4, 0xbe, 0x2c, 0x71, 0x0f, 0x32, 0x49, 0x86, 0xb6, 0x61, + /* (2^ 63)P */ 0xd1, 0xbd, 0xcc, 0x09, 0x73, 0x5f, 0x48, 0x8a, 0x2d, 0x1a, 0x4d, 0x7d, 0x0d, 0x32, 0x06, 0xbd, 0xf4, 0xbe, 0x2d, 0x32, 0x73, 0x29, 0x23, 0x25, 0x70, 0xf7, 0x17, 0x8c, 0x75, 0xc4, 0x5d, 0x44, + /* (2^ 64)P */ 0x3c, 0x93, 0xc8, 0x7c, 0x17, 0x34, 0x04, 0xdb, 0x9f, 0x05, 0xea, 0x75, 0x21, 0xe8, 0x6f, 0xed, 0x34, 0xdb, 0x53, 0xc0, 0xfd, 0xbe, 0xfe, 0x1e, 0x99, 0xaf, 0x5d, 0xc6, 0x67, 0xe8, 0xdb, 0x4a, + /* (2^ 65)P */ 0xdf, 0x09, 0x06, 0xa9, 0xa2, 0x71, 0xcd, 0x3a, 0x50, 0x40, 0xd0, 0x6d, 0x85, 0x91, 0xe9, 0xe5, 0x3c, 0xc2, 0x57, 0x81, 0x68, 0x9b, 0xc6, 0x1e, 0x4d, 0xfe, 0x5c, 0x88, 0xf6, 0x27, 0x74, 0x69, + /* (2^ 66)P */ 0x51, 0xa8, 0xe1, 0x65, 0x9b, 0x7b, 0xbe, 0xd7, 0xdd, 0x36, 0xc5, 0x22, 0xd5, 0x28, 0x3d, 0xa0, 0x45, 0xb6, 0xd2, 0x8f, 0x65, 0x9d, 0x39, 0x28, 0xe1, 0x41, 0x26, 0x7c, 0xe1, 0xb7, 0xe5, 0x49, + /* (2^ 67)P */ 0xa4, 0x57, 0x04, 0x70, 0x98, 0x3a, 0x8c, 0x6f, 0x78, 0x67, 0xbb, 0x5e, 0xa2, 0xf0, 0x78, 0x50, 0x0f, 0x96, 0x82, 0xc3, 0xcb, 0x3c, 0x3c, 0xd1, 0xb1, 0x84, 0xdf, 0xa7, 0x58, 0x32, 0x00, 0x2e, + /* (2^ 68)P */ 0x1c, 0x6a, 0x29, 0xe6, 0x9b, 0xf3, 0xd1, 0x8a, 0xb2, 0xbf, 0x5f, 0x2a, 0x65, 0xaa, 0xee, 0xc1, 0xcb, 0xf3, 0x26, 0xfd, 0x73, 0x06, 0xee, 0x33, 0xcc, 0x2c, 0x9d, 0xa6, 0x73, 0x61, 0x25, 0x59, + /* (2^ 69)P */ 0x41, 0xfc, 0x18, 0x4e, 0xaa, 0x07, 0xea, 0x41, 0x1e, 0xa5, 0x87, 0x7c, 0x52, 0x19, 0xfc, 0xd9, 0x6f, 0xca, 0x31, 0x58, 0x80, 0xcb, 0xaa, 0xbd, 0x4f, 0x69, 0x16, 0xc9, 0x2d, 0x65, 0x5b, 0x44, + /* (2^ 70)P */ 0x15, 0x23, 0x17, 0xf2, 0xa7, 0xa3, 0x92, 0xce, 0x64, 0x99, 0x1b, 0xe1, 0x2d, 0x28, 0xdc, 0x1e, 0x4a, 0x31, 0x4c, 0xe0, 0xaf, 0x3a, 0x82, 0xa1, 0x86, 0xf5, 0x7c, 0x43, 0x94, 0x2d, 0x0a, 0x79, + /* (2^ 71)P */ 0x09, 0xe0, 0xf6, 0x93, 0xfb, 0x47, 0xc4, 0x71, 0x76, 0x52, 0x84, 0x22, 0x67, 0xa5, 0x22, 0x89, 0x69, 0x51, 0x4f, 0x20, 0x3b, 0x90, 0x70, 0xbf, 0xfe, 0x19, 0xa3, 0x1b, 0x89, 0x89, 0x7a, 0x2f, + /* (2^ 72)P */ 0x0c, 0x14, 0xe2, 0x77, 0xb5, 0x8e, 0xa0, 0x02, 0xf4, 0xdc, 0x7b, 0x42, 0xd4, 0x4e, 0x9a, 0xed, 0xd1, 0x3c, 0x32, 0xe4, 0x44, 0xec, 0x53, 0x52, 0x5b, 0x35, 0xe9, 0x14, 0x3c, 0x36, 0x88, 0x3e, + /* (2^ 73)P */ 0x8c, 0x0b, 0x11, 0x77, 0x42, 0xc1, 0x66, 0xaa, 0x90, 0x33, 0xa2, 0x10, 0x16, 0x39, 0xe0, 0x1a, 0xa2, 0xc2, 0x3f, 0xc9, 0x12, 0xbd, 0x30, 0x20, 0xab, 0xc7, 0x55, 0x95, 0x57, 0x41, 0xe1, 0x3e, + /* (2^ 74)P */ 0x41, 0x7d, 0x6e, 0x6d, 0x3a, 0xde, 0x14, 0x92, 0xfe, 0x7e, 0xf1, 0x07, 0x86, 0xd8, 0xcd, 0x3c, 0x17, 0x12, 0xe1, 0xf8, 0x88, 0x12, 0x4f, 0x67, 0xd0, 0x93, 0x9f, 0x32, 0x0f, 0x25, 0x82, 0x56, + /* (2^ 75)P */ 0x6e, 0x39, 0x2e, 0x6d, 0x13, 0x0b, 0xf0, 0x6c, 0xbf, 0xde, 0x14, 0x10, 0x6f, 0xf8, 0x4c, 0x6e, 0x83, 0x4e, 0xcc, 0xbf, 0xb5, 0xb1, 0x30, 0x59, 0xb6, 0x16, 0xba, 0x8a, 0xb4, 0x69, 0x70, 0x04, + /* (2^ 76)P */ 0x93, 0x07, 0xb2, 0x69, 0xab, 0xe4, 0x4c, 0x0d, 0x9e, 0xfb, 0xd0, 0x97, 0x1a, 0xb9, 0x4d, 0xb2, 0x1d, 0xd0, 0x00, 0x4e, 0xf5, 0x50, 0xfa, 0xcd, 0xb5, 0xdd, 0x8b, 0x36, 0x85, 0x10, 0x1b, 0x22, + /* (2^ 77)P */ 0xd2, 0xd8, 0xe3, 0xb1, 0x68, 0x94, 0xe5, 0xe7, 0x93, 0x2f, 0x12, 0xbd, 0x63, 0x65, 0xc5, 0x53, 0x09, 0x3f, 0x66, 0xe0, 0x03, 0xa9, 0xe8, 0xee, 0x42, 0x3d, 0xbe, 0xcb, 0x62, 0xa6, 0xef, 0x61, + /* (2^ 78)P */ 0x2a, 0xab, 0x6e, 0xde, 0xdd, 0xdd, 0xf8, 0x2c, 0x31, 0xf2, 0x35, 0x14, 0xd5, 0x0a, 0xf8, 0x9b, 0x73, 0x49, 0xf0, 0xc9, 0xce, 0xda, 0xea, 0x5d, 0x27, 0x9b, 0xd2, 0x41, 0x5d, 0x5b, 0x27, 0x29, + /* (2^ 79)P */ 0x4f, 0xf1, 0xeb, 0x95, 0x08, 0x0f, 0xde, 0xcf, 0xa7, 0x05, 0x49, 0x05, 0x6b, 0xb9, 0xaa, 0xb9, 0xfd, 0x20, 0xc4, 0xa1, 0xd9, 0x0d, 0xe8, 0xca, 0xc7, 0xbb, 0x73, 0x16, 0x2f, 0xbf, 0x63, 0x0a, + /* (2^ 80)P */ 0x8c, 0xbc, 0x8f, 0x95, 0x11, 0x6e, 0x2f, 0x09, 0xad, 0x2f, 0x82, 0x04, 0xe8, 0x81, 0x2a, 0x67, 0x17, 0x25, 0xd5, 0x60, 0x15, 0x35, 0xc8, 0xca, 0xf8, 0x92, 0xf1, 0xc8, 0x22, 0x77, 0x3f, 0x6f, + /* (2^ 81)P */ 0xb7, 0x94, 0xe8, 0xc2, 0xcc, 0x90, 0xba, 0xf8, 0x0d, 0x9f, 0xff, 0x38, 0xa4, 0x57, 0x75, 0x2c, 0x59, 0x23, 0xe5, 0x5a, 0x85, 0x1d, 0x4d, 0x89, 0x69, 0x3d, 0x74, 0x7b, 0x15, 0x22, 0xe1, 0x68, + /* (2^ 82)P */ 0xf3, 0x19, 0xb9, 0xcf, 0x70, 0x55, 0x7e, 0xd8, 0xb9, 0x8d, 0x79, 0x95, 0xcd, 0xde, 0x2c, 0x3f, 0xce, 0xa2, 0xc0, 0x10, 0x47, 0x15, 0x21, 0x21, 0xb2, 0xc5, 0x6d, 0x24, 0x15, 0xa1, 0x66, 0x3c, + /* (2^ 83)P */ 0x72, 0xcb, 0x4e, 0x29, 0x62, 0xc5, 0xed, 0xcb, 0x16, 0x0b, 0x28, 0x6a, 0xc3, 0x43, 0x71, 0xba, 0x67, 0x8b, 0x07, 0xd4, 0xef, 0xc2, 0x10, 0x96, 0x1e, 0x4b, 0x6a, 0x94, 0x5d, 0x73, 0x44, 0x61, + /* (2^ 84)P */ 0x50, 0x33, 0x5b, 0xd7, 0x1e, 0x11, 0x6f, 0x53, 0x1b, 0xd8, 0x41, 0x20, 0x8c, 0xdb, 0x11, 0x02, 0x3c, 0x41, 0x10, 0x0e, 0x00, 0xb1, 0x3c, 0xf9, 0x76, 0x88, 0x9e, 0x03, 0x3c, 0xfd, 0x9d, 0x14, + /* (2^ 85)P */ 0x5b, 0x15, 0x63, 0x6b, 0xe4, 0xdd, 0x79, 0xd4, 0x76, 0x79, 0x83, 0x3c, 0xe9, 0x15, 0x6e, 0xb6, 0x38, 0xe0, 0x13, 0x1f, 0x3b, 0xe4, 0xfd, 0xda, 0x35, 0x0b, 0x4b, 0x2e, 0x1a, 0xda, 0xaf, 0x5f, + /* (2^ 86)P */ 0x81, 0x75, 0x19, 0x17, 0xdf, 0xbb, 0x00, 0x36, 0xc2, 0xd2, 0x3c, 0xbe, 0x0b, 0x05, 0x72, 0x39, 0x86, 0xbe, 0xd5, 0xbd, 0x6d, 0x90, 0x38, 0x59, 0x0f, 0x86, 0x9b, 0x3f, 0xe4, 0xe5, 0xfc, 0x34, + /* (2^ 87)P */ 0x02, 0x4d, 0xd1, 0x42, 0xcd, 0xa4, 0xa8, 0x75, 0x65, 0xdf, 0x41, 0x34, 0xc5, 0xab, 0x8d, 0x82, 0xd3, 0x31, 0xe1, 0xd2, 0xed, 0xab, 0xdc, 0x33, 0x5f, 0xd2, 0x14, 0xb8, 0x6f, 0xd7, 0xba, 0x3e, + /* (2^ 88)P */ 0x0f, 0xe1, 0x70, 0x6f, 0x56, 0x6f, 0x90, 0xd4, 0x5a, 0x0f, 0x69, 0x51, 0xaa, 0xf7, 0x12, 0x5d, 0xf2, 0xfc, 0xce, 0x76, 0x6e, 0xb1, 0xad, 0x45, 0x99, 0x29, 0x23, 0xad, 0xae, 0x68, 0xf7, 0x01, + /* (2^ 89)P */ 0xbd, 0xfe, 0x48, 0x62, 0x7b, 0xc7, 0x6c, 0x2b, 0xfd, 0xaf, 0x3a, 0xec, 0x28, 0x06, 0xd3, 0x3c, 0x6a, 0x48, 0xef, 0xd4, 0x80, 0x0b, 0x1c, 0xce, 0x23, 0x6c, 0xf6, 0xa6, 0x2e, 0xff, 0x3b, 0x4c, + /* (2^ 90)P */ 0x5f, 0xeb, 0xea, 0x4a, 0x09, 0xc4, 0x2e, 0x3f, 0xa7, 0x2c, 0x37, 0x6e, 0x28, 0x9b, 0xb1, 0x61, 0x1d, 0x70, 0x2a, 0xde, 0x66, 0xa9, 0xef, 0x5e, 0xef, 0xe3, 0x55, 0xde, 0x65, 0x05, 0xb2, 0x23, + /* (2^ 91)P */ 0x57, 0x85, 0xd5, 0x79, 0x52, 0xca, 0x01, 0xe3, 0x4f, 0x87, 0xc2, 0x27, 0xce, 0xd4, 0xb2, 0x07, 0x67, 0x1d, 0xcf, 0x9d, 0x8a, 0xcd, 0x32, 0xa5, 0x56, 0xff, 0x2b, 0x3f, 0xe2, 0xfe, 0x52, 0x2a, + /* (2^ 92)P */ 0x3d, 0x66, 0xd8, 0x7c, 0xb3, 0xef, 0x24, 0x86, 0x94, 0x75, 0xbd, 0xff, 0x20, 0xac, 0xc7, 0xbb, 0x45, 0x74, 0xd3, 0x82, 0x9c, 0x5e, 0xb8, 0x57, 0x66, 0xec, 0xa6, 0x86, 0xcb, 0x52, 0x30, 0x7b, + /* (2^ 93)P */ 0x1e, 0xe9, 0x25, 0x25, 0xad, 0xf0, 0x82, 0x34, 0xa0, 0xdc, 0x8e, 0xd2, 0x43, 0x80, 0xb6, 0x2c, 0x3a, 0x00, 0x1b, 0x2e, 0x05, 0x6d, 0x4f, 0xaf, 0x0a, 0x1b, 0x78, 0x29, 0x25, 0x8c, 0x5f, 0x18, + /* (2^ 94)P */ 0xd6, 0xe0, 0x0c, 0xd8, 0x5b, 0xde, 0x41, 0xaa, 0xd6, 0xe9, 0x53, 0x68, 0x41, 0xb2, 0x07, 0x94, 0x3a, 0x4c, 0x7f, 0x35, 0x6e, 0xc3, 0x3e, 0x56, 0xce, 0x7b, 0x29, 0x0e, 0xdd, 0xb8, 0xc4, 0x4c, + /* (2^ 95)P */ 0x0e, 0x73, 0xb8, 0xff, 0x52, 0x1a, 0xfc, 0xa2, 0x37, 0x8e, 0x05, 0x67, 0x6e, 0xf1, 0x11, 0x18, 0xe1, 0x4e, 0xdf, 0xcd, 0x66, 0xa3, 0xf9, 0x10, 0x99, 0xf0, 0xb9, 0xa0, 0xc4, 0xa0, 0xf4, 0x72, + /* (2^ 96)P */ 0xa7, 0x4e, 0x3f, 0x66, 0x6f, 0xc0, 0x16, 0x8c, 0xba, 0x0f, 0x97, 0x4e, 0xf7, 0x3a, 0x3b, 0x69, 0x45, 0xc3, 0x9e, 0xd6, 0xf1, 0xe7, 0x02, 0x21, 0x89, 0x80, 0x8a, 0x96, 0xbc, 0x3c, 0xa5, 0x0b, + /* (2^ 97)P */ 0x37, 0x55, 0xa1, 0xfe, 0xc7, 0x9d, 0x3d, 0xca, 0x93, 0x64, 0x53, 0x51, 0xbb, 0x24, 0x68, 0x4c, 0xb1, 0x06, 0x40, 0x84, 0x14, 0x63, 0x88, 0xb9, 0x60, 0xcc, 0x54, 0xb4, 0x2a, 0xa7, 0xd2, 0x40, + /* (2^ 98)P */ 0x75, 0x09, 0x57, 0x12, 0xb7, 0xa1, 0x36, 0x59, 0x57, 0xa6, 0xbd, 0xde, 0x48, 0xd6, 0xb9, 0x91, 0xea, 0x30, 0x43, 0xb6, 0x4b, 0x09, 0x44, 0x33, 0xd0, 0x51, 0xee, 0x12, 0x0d, 0xa1, 0x6b, 0x00, + /* (2^ 99)P */ 0x58, 0x5d, 0xde, 0xf5, 0x68, 0x84, 0x22, 0x19, 0xb0, 0x05, 0xcc, 0x38, 0x4c, 0x2f, 0xb1, 0x0e, 0x90, 0x19, 0x60, 0xd5, 0x9d, 0x9f, 0x03, 0xa1, 0x0b, 0x0e, 0xff, 0x4f, 0xce, 0xd4, 0x02, 0x45, + /* (2^100)P */ 0x89, 0xc1, 0x37, 0x68, 0x10, 0x54, 0x20, 0xeb, 0x3c, 0xb9, 0xd3, 0x6d, 0x4c, 0x54, 0xf6, 0xd0, 0x4f, 0xd7, 0x16, 0xc4, 0x64, 0x70, 0x72, 0x40, 0xf0, 0x2e, 0x50, 0x4b, 0x11, 0xc6, 0x15, 0x6e, + /* (2^101)P */ 0x6b, 0xa7, 0xb1, 0xcf, 0x98, 0xa3, 0xf2, 0x4d, 0xb1, 0xf6, 0xf2, 0x19, 0x74, 0x6c, 0x25, 0x11, 0x43, 0x60, 0x6e, 0x06, 0x62, 0x79, 0x49, 0x4a, 0x44, 0x5b, 0x35, 0x41, 0xab, 0x3a, 0x5b, 0x70, + /* (2^102)P */ 0xd8, 0xb1, 0x97, 0xd7, 0x36, 0xf5, 0x5e, 0x36, 0xdb, 0xf0, 0xdd, 0x22, 0xd6, 0x6b, 0x07, 0x00, 0x88, 0x5a, 0x57, 0xe0, 0xb0, 0x33, 0xbf, 0x3b, 0x4d, 0xca, 0xe4, 0xc8, 0x05, 0xaa, 0x77, 0x37, + /* (2^103)P */ 0x5f, 0xdb, 0x78, 0x55, 0xc8, 0x45, 0x27, 0x39, 0xe2, 0x5a, 0xae, 0xdb, 0x49, 0x41, 0xda, 0x6f, 0x67, 0x98, 0xdc, 0x8a, 0x0b, 0xb0, 0xf0, 0xb1, 0xa3, 0x1d, 0x6f, 0xd3, 0x37, 0x34, 0x96, 0x09, + /* (2^104)P */ 0x53, 0x38, 0xdc, 0xa5, 0x90, 0x4e, 0x82, 0x7e, 0xbd, 0x5c, 0x13, 0x1f, 0x64, 0xf6, 0xb5, 0xcc, 0xcc, 0x8f, 0xce, 0x87, 0x6c, 0xd8, 0x36, 0x67, 0x9f, 0x24, 0x04, 0x66, 0xe2, 0x3c, 0x5f, 0x62, + /* (2^105)P */ 0x3f, 0xf6, 0x02, 0x95, 0x05, 0xc8, 0x8a, 0xaf, 0x69, 0x14, 0x35, 0x2e, 0x0a, 0xe7, 0x05, 0x0c, 0x05, 0x63, 0x4b, 0x76, 0x9c, 0x2e, 0x29, 0x35, 0xc3, 0x3a, 0xe2, 0xc7, 0x60, 0x43, 0x39, 0x1a, + /* (2^106)P */ 0x64, 0x32, 0x18, 0x51, 0x32, 0xd5, 0xc6, 0xd5, 0x4f, 0xb7, 0xc2, 0x43, 0xbd, 0x5a, 0x06, 0x62, 0x9b, 0x3f, 0x97, 0x3b, 0xd0, 0xf5, 0xfb, 0xb5, 0x5e, 0x6e, 0x20, 0x61, 0x36, 0xda, 0xa3, 0x13, + /* (2^107)P */ 0xe5, 0x94, 0x5d, 0x72, 0x37, 0x58, 0xbd, 0xc6, 0xc5, 0x16, 0x50, 0x20, 0x12, 0x09, 0xe3, 0x18, 0x68, 0x3c, 0x03, 0x70, 0x15, 0xce, 0x88, 0x20, 0x87, 0x79, 0x83, 0x5c, 0x49, 0x1f, 0xba, 0x7f, + /* (2^108)P */ 0x9d, 0x07, 0xf9, 0xf2, 0x23, 0x74, 0x8c, 0x5a, 0xc5, 0x3f, 0x02, 0x34, 0x7b, 0x15, 0x35, 0x17, 0x51, 0xb3, 0xfa, 0xd2, 0x9a, 0xb4, 0xf9, 0xe4, 0x3c, 0xe3, 0x78, 0xc8, 0x72, 0xff, 0x91, 0x66, + /* (2^109)P */ 0x3e, 0xff, 0x5e, 0xdc, 0xde, 0x2a, 0x2c, 0x12, 0xf4, 0x6c, 0x95, 0xd8, 0xf1, 0x4b, 0xdd, 0xf8, 0xda, 0x5b, 0x9e, 0x9e, 0x5d, 0x20, 0x86, 0xeb, 0x43, 0xc7, 0x75, 0xd9, 0xb9, 0x92, 0x9b, 0x04, + /* (2^110)P */ 0x5a, 0xc0, 0xf6, 0xb0, 0x30, 0x97, 0x37, 0xa5, 0x53, 0xa5, 0xf3, 0xc6, 0xac, 0xff, 0xa0, 0x72, 0x6d, 0xcd, 0x0d, 0xb2, 0x34, 0x2c, 0x03, 0xb0, 0x4a, 0x16, 0xd5, 0x88, 0xbc, 0x9d, 0x0e, 0x47, + /* (2^111)P */ 0x47, 0xc0, 0x37, 0xa2, 0x0c, 0xf1, 0x9c, 0xb1, 0xa2, 0x81, 0x6c, 0x1f, 0x71, 0x66, 0x54, 0xb6, 0x43, 0x0b, 0xd8, 0x6d, 0xd1, 0x1b, 0x32, 0xb3, 0x8e, 0xbe, 0x5f, 0x0c, 0x60, 0x4f, 0xc1, 0x48, + /* (2^112)P */ 0x03, 0xc8, 0xa6, 0x4a, 0x26, 0x1c, 0x45, 0x66, 0xa6, 0x7d, 0xfa, 0xa4, 0x04, 0x39, 0x6e, 0xb6, 0x95, 0x83, 0x12, 0xb3, 0xb0, 0x19, 0x5f, 0xd4, 0x10, 0xbc, 0xc9, 0xc3, 0x27, 0x26, 0x60, 0x31, + /* (2^113)P */ 0x0d, 0xe1, 0xe4, 0x32, 0x48, 0xdc, 0x20, 0x31, 0xf7, 0x17, 0xc7, 0x56, 0x67, 0xc4, 0x20, 0xeb, 0x94, 0x02, 0x28, 0x67, 0x3f, 0x2e, 0xf5, 0x00, 0x09, 0xc5, 0x30, 0x47, 0xc1, 0x4f, 0x6d, 0x56, + /* (2^114)P */ 0x06, 0x72, 0x83, 0xfd, 0x40, 0x5d, 0x3a, 0x7e, 0x7a, 0x54, 0x59, 0x71, 0xdc, 0x26, 0xe9, 0xc1, 0x95, 0x60, 0x8d, 0xa6, 0xfb, 0x30, 0x67, 0x21, 0xa7, 0xce, 0x69, 0x3f, 0x84, 0xc3, 0xe8, 0x22, + /* (2^115)P */ 0x2b, 0x4b, 0x0e, 0x93, 0xe8, 0x74, 0xd0, 0x33, 0x16, 0x58, 0xd1, 0x84, 0x0e, 0x35, 0xe4, 0xb6, 0x65, 0x23, 0xba, 0xd6, 0x6a, 0xc2, 0x34, 0x55, 0xf3, 0xf3, 0xf1, 0x89, 0x2f, 0xc1, 0x73, 0x77, + /* (2^116)P */ 0xaa, 0x62, 0x79, 0xa5, 0x4d, 0x40, 0xba, 0x8c, 0x56, 0xce, 0x99, 0x19, 0xa8, 0x97, 0x98, 0x5b, 0xfc, 0x92, 0x16, 0x12, 0x2f, 0x86, 0x8e, 0x50, 0x91, 0xc2, 0x93, 0xa0, 0x7f, 0x90, 0x81, 0x3a, + /* (2^117)P */ 0x10, 0xa5, 0x25, 0x47, 0xff, 0xd0, 0xde, 0x0d, 0x03, 0xc5, 0x3f, 0x67, 0x10, 0xcc, 0xd8, 0x10, 0x89, 0x4e, 0x1f, 0x9f, 0x1c, 0x15, 0x9d, 0x5b, 0x4c, 0xa4, 0x09, 0xcb, 0xd5, 0xc1, 0xa5, 0x32, + /* (2^118)P */ 0xfb, 0x41, 0x05, 0xb9, 0x42, 0xa4, 0x0a, 0x1e, 0xdb, 0x85, 0xb4, 0xc1, 0x7c, 0xeb, 0x85, 0x5f, 0xe5, 0xf2, 0x9d, 0x8a, 0xce, 0x95, 0xe5, 0xbe, 0x36, 0x22, 0x42, 0x22, 0xc7, 0x96, 0xe4, 0x25, + /* (2^119)P */ 0xb9, 0xe5, 0x0f, 0xcd, 0x46, 0x3c, 0xdf, 0x5e, 0x88, 0x33, 0xa4, 0xd2, 0x7e, 0x5a, 0xe7, 0x34, 0x52, 0xe3, 0x61, 0xd7, 0x11, 0xde, 0x88, 0xe4, 0x5c, 0x54, 0x85, 0xa0, 0x01, 0x8a, 0x87, 0x0e, + /* (2^120)P */ 0x04, 0xbb, 0x21, 0xe0, 0x77, 0x3c, 0x49, 0xba, 0x9a, 0x89, 0xdf, 0xc7, 0x43, 0x18, 0x4d, 0x2b, 0x67, 0x0d, 0xe8, 0x7a, 0x48, 0x7a, 0xa3, 0x9e, 0x94, 0x17, 0xe4, 0x11, 0x80, 0x95, 0xa9, 0x67, + /* (2^121)P */ 0x65, 0xb0, 0x97, 0x66, 0x1a, 0x05, 0x58, 0x4b, 0xd4, 0xa6, 0x6b, 0x8d, 0x7d, 0x3f, 0xe3, 0x47, 0xc1, 0x46, 0xca, 0x83, 0xd4, 0xa8, 0x4d, 0xbb, 0x0d, 0xdb, 0xc2, 0x81, 0xa1, 0xca, 0xbe, 0x68, + /* (2^122)P */ 0xa5, 0x9a, 0x98, 0x0b, 0xe9, 0x80, 0x89, 0x8d, 0x9b, 0xc9, 0x93, 0x2c, 0x4a, 0xb1, 0x5e, 0xf9, 0xa2, 0x73, 0x6e, 0x79, 0xc4, 0xc7, 0xc6, 0x51, 0x69, 0xb5, 0xef, 0xb5, 0x63, 0x83, 0x22, 0x6e, + /* (2^123)P */ 0xc8, 0x24, 0xd6, 0x2d, 0xb0, 0xc0, 0xbb, 0xc6, 0xee, 0x70, 0x81, 0xec, 0x7d, 0xb4, 0x7e, 0x77, 0xa9, 0xaf, 0xcf, 0x04, 0xa0, 0x15, 0xde, 0x3c, 0x9b, 0xbf, 0x60, 0x71, 0x08, 0xbc, 0xc6, 0x1d, + /* (2^124)P */ 0x02, 0x40, 0xc3, 0xee, 0x43, 0xe0, 0x07, 0x2e, 0x7f, 0xdc, 0x68, 0x7a, 0x67, 0xfc, 0xe9, 0x18, 0x9a, 0x5b, 0xd1, 0x8b, 0x18, 0x03, 0xda, 0xd8, 0x53, 0x82, 0x56, 0x00, 0xbb, 0xc3, 0xfb, 0x48, + /* (2^125)P */ 0xe1, 0x4c, 0x65, 0xfb, 0x4c, 0x7d, 0x54, 0x57, 0xad, 0xe2, 0x58, 0xa0, 0x82, 0x5b, 0x56, 0xd3, 0x78, 0x44, 0x15, 0xbf, 0x0b, 0xaf, 0x3e, 0xf6, 0x18, 0xbb, 0xdf, 0x14, 0xf1, 0x1e, 0x53, 0x47, + /* (2^126)P */ 0x87, 0xc5, 0x78, 0x42, 0x0a, 0x63, 0xec, 0xe1, 0xf3, 0x83, 0x8e, 0xca, 0x46, 0xd5, 0x07, 0x55, 0x2b, 0x0c, 0xdc, 0x3a, 0xc6, 0x35, 0xe1, 0x85, 0x4e, 0x84, 0x82, 0x56, 0xa8, 0xef, 0xa7, 0x0a, + /* (2^127)P */ 0x15, 0xf6, 0xe1, 0xb3, 0xa8, 0x1b, 0x69, 0x72, 0xfa, 0x3f, 0xbe, 0x1f, 0x70, 0xe9, 0xb4, 0x32, 0x68, 0x78, 0xbb, 0x39, 0x2e, 0xd9, 0xb6, 0x97, 0xe8, 0x39, 0x2e, 0xa0, 0xde, 0x53, 0xfe, 0x2c, + /* (2^128)P */ 0xb0, 0x52, 0xcd, 0x85, 0xcd, 0x92, 0x73, 0x68, 0x31, 0x98, 0xe2, 0x10, 0xc9, 0x66, 0xff, 0x27, 0x06, 0x2d, 0x83, 0xa9, 0x56, 0x45, 0x13, 0x97, 0xa0, 0xf8, 0x84, 0x0a, 0x36, 0xb0, 0x9b, 0x26, + /* (2^129)P */ 0x5c, 0xf8, 0x43, 0x76, 0x45, 0x55, 0x6e, 0x70, 0x1b, 0x7d, 0x59, 0x9b, 0x8c, 0xa4, 0x34, 0x37, 0x72, 0xa4, 0xef, 0xc6, 0xe8, 0x91, 0xee, 0x7a, 0xe0, 0xd9, 0xa9, 0x98, 0xc1, 0xab, 0xd6, 0x5c, + /* (2^130)P */ 0x1a, 0xe4, 0x3c, 0xcb, 0x06, 0xde, 0x04, 0x0e, 0x38, 0xe1, 0x02, 0x34, 0x89, 0xeb, 0xc6, 0xd8, 0x72, 0x37, 0x6e, 0x68, 0xbb, 0x59, 0x46, 0x90, 0xc8, 0xa8, 0x6b, 0x74, 0x71, 0xc3, 0x15, 0x72, + /* (2^131)P */ 0xd9, 0xa2, 0xe4, 0xea, 0x7e, 0xa9, 0x12, 0xfd, 0xc5, 0xf2, 0x94, 0x63, 0x51, 0xb7, 0x14, 0x95, 0x94, 0xf2, 0x08, 0x92, 0x80, 0xd5, 0x6f, 0x26, 0xb9, 0x26, 0x9a, 0x61, 0x85, 0x70, 0x84, 0x5c, + /* (2^132)P */ 0xea, 0x94, 0xd6, 0xfe, 0x10, 0x54, 0x98, 0x52, 0x54, 0xd2, 0x2e, 0x4a, 0x93, 0x5b, 0x90, 0x3c, 0x67, 0xe4, 0x3b, 0x2d, 0x69, 0x47, 0xbb, 0x10, 0xe1, 0xe9, 0xe5, 0x69, 0x2d, 0x3d, 0x3b, 0x06, + /* (2^133)P */ 0xeb, 0x7d, 0xa5, 0xdd, 0xee, 0x26, 0x27, 0x47, 0x91, 0x18, 0xf4, 0x10, 0xae, 0xc4, 0xb6, 0xef, 0x14, 0x76, 0x30, 0x7b, 0x91, 0x41, 0x16, 0x2b, 0x7c, 0x5b, 0xf4, 0xc4, 0x4f, 0x55, 0x7c, 0x11, + /* (2^134)P */ 0x12, 0x88, 0x9d, 0x8f, 0x11, 0xf3, 0x7c, 0xc0, 0x39, 0x79, 0x01, 0x50, 0x20, 0xd8, 0xdb, 0x01, 0x27, 0x28, 0x1b, 0x17, 0xf4, 0x03, 0xe8, 0xd7, 0xea, 0x25, 0xd2, 0x87, 0x74, 0xe8, 0x15, 0x10, + /* (2^135)P */ 0x4d, 0xcc, 0x3a, 0xd2, 0xfe, 0xe3, 0x8d, 0xc5, 0x2d, 0xbe, 0xa7, 0x94, 0xc2, 0x91, 0xdb, 0x50, 0x57, 0xf4, 0x9c, 0x1c, 0x3d, 0xd4, 0x94, 0x0b, 0x4a, 0x52, 0x37, 0x6e, 0xfa, 0x40, 0x16, 0x6b, + /* (2^136)P */ 0x09, 0x0d, 0xda, 0x5f, 0x6c, 0x34, 0x2f, 0x69, 0x51, 0x31, 0x4d, 0xfa, 0x59, 0x1c, 0x0b, 0x20, 0x96, 0xa2, 0x77, 0x07, 0x76, 0x6f, 0xc4, 0xb8, 0xcf, 0xfb, 0xfd, 0x3f, 0x5f, 0x39, 0x38, 0x4b, + /* (2^137)P */ 0x71, 0xd6, 0x54, 0xbe, 0x00, 0x5e, 0xd2, 0x18, 0xa6, 0xab, 0xc8, 0xbe, 0x82, 0x05, 0xd5, 0x60, 0x82, 0xb9, 0x78, 0x3b, 0x26, 0x8f, 0xad, 0x87, 0x32, 0x04, 0xda, 0x9c, 0x4e, 0xf6, 0xfd, 0x50, + /* (2^138)P */ 0xf0, 0xdc, 0x78, 0xc5, 0xaa, 0x67, 0xf5, 0x90, 0x3b, 0x13, 0xa3, 0xf2, 0x0e, 0x9b, 0x1e, 0xef, 0x71, 0xde, 0xd9, 0x42, 0x92, 0xba, 0xeb, 0x0e, 0xc7, 0x01, 0x31, 0xf0, 0x9b, 0x3c, 0x47, 0x15, + /* (2^139)P */ 0x95, 0x80, 0xb7, 0x56, 0xae, 0xe8, 0x77, 0x7c, 0x8e, 0x07, 0x6f, 0x6e, 0x66, 0xe7, 0x78, 0xb6, 0x1f, 0xba, 0x48, 0x53, 0x61, 0xb9, 0xa0, 0x2d, 0x0b, 0x3f, 0x73, 0xff, 0xc1, 0x31, 0xf9, 0x7c, + /* (2^140)P */ 0x6c, 0x36, 0x0a, 0x0a, 0xf5, 0x57, 0xb3, 0x26, 0x32, 0xd7, 0x87, 0x2b, 0xf4, 0x8c, 0x70, 0xe9, 0xc0, 0xb2, 0x1c, 0xf9, 0xa5, 0xee, 0x3a, 0xc1, 0x4c, 0xbb, 0x43, 0x11, 0x99, 0x0c, 0xd9, 0x35, + /* (2^141)P */ 0xdc, 0xd9, 0xa0, 0xa9, 0x04, 0xc4, 0xc1, 0x47, 0x51, 0xd2, 0x72, 0x19, 0x45, 0x58, 0x9e, 0x65, 0x31, 0x8c, 0xb3, 0x73, 0xc4, 0xa8, 0x75, 0x38, 0x24, 0x1f, 0x56, 0x79, 0xd3, 0x9e, 0xbd, 0x1f, + /* (2^142)P */ 0x8d, 0xc2, 0x1e, 0xd4, 0x6f, 0xbc, 0xfa, 0x11, 0xca, 0x2d, 0x2a, 0xcd, 0xe3, 0xdf, 0xf8, 0x7e, 0x95, 0x45, 0x40, 0x8c, 0x5d, 0x3b, 0xe7, 0x72, 0x27, 0x2f, 0xb7, 0x54, 0x49, 0xfa, 0x35, 0x61, + /* (2^143)P */ 0x9c, 0xb6, 0x24, 0xde, 0xa2, 0x32, 0xfc, 0xcc, 0x88, 0x5d, 0x09, 0x1f, 0x8c, 0x69, 0x55, 0x3f, 0x29, 0xf9, 0xc3, 0x5a, 0xed, 0x50, 0x33, 0xbe, 0xeb, 0x7e, 0x47, 0xca, 0x06, 0xf8, 0x9b, 0x5e, + /* (2^144)P */ 0x68, 0x9f, 0x30, 0x3c, 0xb6, 0x8f, 0xce, 0xe9, 0xf4, 0xf9, 0xe1, 0x65, 0x35, 0xf6, 0x76, 0x53, 0xf1, 0x93, 0x63, 0x5a, 0xb3, 0xcf, 0xaf, 0xd1, 0x06, 0x35, 0x62, 0xe5, 0xed, 0xa1, 0x32, 0x66, + /* (2^145)P */ 0x4c, 0xed, 0x2d, 0x0c, 0x39, 0x6c, 0x7d, 0x0b, 0x1f, 0xcb, 0x04, 0xdf, 0x81, 0x32, 0xcb, 0x56, 0xc7, 0xc3, 0xec, 0x49, 0x12, 0x5a, 0x30, 0x66, 0x2a, 0xa7, 0x8c, 0xa3, 0x60, 0x8b, 0x58, 0x5d, + /* (2^146)P */ 0x2d, 0xf4, 0xe5, 0xe8, 0x78, 0xbf, 0xec, 0xa6, 0xec, 0x3e, 0x8a, 0x3c, 0x4b, 0xb4, 0xee, 0x86, 0x04, 0x16, 0xd2, 0xfb, 0x48, 0x9c, 0x21, 0xec, 0x31, 0x67, 0xc3, 0x17, 0xf5, 0x1a, 0xaf, 0x1a, + /* (2^147)P */ 0xe7, 0xbd, 0x69, 0x67, 0x83, 0xa2, 0x06, 0xc3, 0xdb, 0x2a, 0x1e, 0x2b, 0x62, 0x80, 0x82, 0x20, 0xa6, 0x94, 0xff, 0xfb, 0x1f, 0xf5, 0x27, 0x80, 0x6b, 0xf2, 0x24, 0x11, 0xce, 0xa1, 0xcf, 0x76, + /* (2^148)P */ 0xb6, 0xab, 0x22, 0x24, 0x56, 0x00, 0xeb, 0x18, 0xc3, 0x29, 0x8c, 0x8f, 0xd5, 0xc4, 0x77, 0xf3, 0x1a, 0x56, 0x31, 0xf5, 0x07, 0xc2, 0xbb, 0x4d, 0x27, 0x8a, 0x12, 0x82, 0xf0, 0xb7, 0x53, 0x02, + /* (2^149)P */ 0xe0, 0x17, 0x2c, 0xb6, 0x1c, 0x09, 0x1f, 0x3d, 0xa9, 0x28, 0x46, 0xd6, 0xab, 0xe1, 0x60, 0x48, 0x53, 0x42, 0x9d, 0x30, 0x36, 0x74, 0xd1, 0x52, 0x76, 0xe5, 0xfa, 0x3e, 0xe1, 0x97, 0x6f, 0x35, + /* (2^150)P */ 0x5b, 0x53, 0x50, 0xa1, 0x1a, 0xe1, 0x51, 0xd3, 0xcc, 0x78, 0xd8, 0x1d, 0xbb, 0x45, 0x6b, 0x3e, 0x98, 0x2c, 0xd9, 0xbe, 0x28, 0x61, 0x77, 0x0c, 0xb8, 0x85, 0x28, 0x03, 0x93, 0xae, 0x34, 0x1d, + /* (2^151)P */ 0xc3, 0xa4, 0x5b, 0xa8, 0x8c, 0x48, 0xa0, 0x4b, 0xce, 0xe6, 0x9c, 0x3c, 0xc3, 0x48, 0x53, 0x98, 0x70, 0xa7, 0xbd, 0x97, 0x6f, 0x4c, 0x12, 0x66, 0x4a, 0x12, 0x54, 0x06, 0x29, 0xa0, 0x81, 0x0f, + /* (2^152)P */ 0xfd, 0x86, 0x9b, 0x56, 0xa6, 0x9c, 0xd0, 0x9e, 0x2d, 0x9a, 0xaf, 0x18, 0xfd, 0x09, 0x10, 0x81, 0x0a, 0xc2, 0xd8, 0x93, 0x3f, 0xd0, 0x08, 0xff, 0x6b, 0xf2, 0xae, 0x9f, 0x19, 0x48, 0xa1, 0x52, + /* (2^153)P */ 0x73, 0x1b, 0x8d, 0x2d, 0xdc, 0xf9, 0x03, 0x3e, 0x70, 0x1a, 0x96, 0x73, 0x18, 0x80, 0x05, 0x42, 0x70, 0x59, 0xa3, 0x41, 0xf0, 0x87, 0xd9, 0xc0, 0x49, 0xd5, 0xc0, 0xa1, 0x15, 0x1f, 0xaa, 0x07, + /* (2^154)P */ 0x24, 0x72, 0xd2, 0x8c, 0xe0, 0x6c, 0xd4, 0xdf, 0x39, 0x42, 0x4e, 0x93, 0x4f, 0x02, 0x0a, 0x6d, 0x59, 0x7b, 0x89, 0x99, 0x63, 0x7a, 0x8a, 0x80, 0xa2, 0x95, 0x3d, 0xe1, 0xe9, 0x56, 0x45, 0x0a, + /* (2^155)P */ 0x45, 0x30, 0xc1, 0xe9, 0x1f, 0x99, 0x1a, 0xd2, 0xb8, 0x51, 0x77, 0xfe, 0x48, 0x85, 0x0e, 0x9b, 0x35, 0x00, 0xf3, 0x4b, 0xcb, 0x43, 0xa6, 0x5d, 0x21, 0xf7, 0x40, 0x39, 0xd6, 0x28, 0xdb, 0x77, + /* (2^156)P */ 0x11, 0x90, 0xdc, 0x4a, 0x61, 0xeb, 0x5e, 0xfc, 0xeb, 0x11, 0xc4, 0xe8, 0x9a, 0x41, 0x29, 0x52, 0x74, 0xcf, 0x1d, 0x7d, 0x78, 0xe7, 0xc3, 0x9e, 0xb5, 0x4c, 0x6e, 0x21, 0x3e, 0x05, 0x0d, 0x34, + /* (2^157)P */ 0xb4, 0xf2, 0x8d, 0xb4, 0x39, 0xaf, 0xc7, 0xca, 0x94, 0x0a, 0xa1, 0x71, 0x28, 0xec, 0xfa, 0xc0, 0xed, 0x75, 0xa5, 0x5c, 0x24, 0x69, 0x0a, 0x14, 0x4c, 0x3a, 0x27, 0x34, 0x71, 0xc3, 0xf1, 0x0c, + /* (2^158)P */ 0xa5, 0xb8, 0x24, 0xc2, 0x6a, 0x30, 0xee, 0xc8, 0xb0, 0x30, 0x49, 0xcb, 0x7c, 0xee, 0xea, 0x57, 0x4f, 0xe7, 0xcb, 0xaa, 0xbd, 0x06, 0xe8, 0xa1, 0x7d, 0x65, 0xeb, 0x2e, 0x74, 0x62, 0x9a, 0x7d, + /* (2^159)P */ 0x30, 0x48, 0x6c, 0x54, 0xef, 0xb6, 0xb6, 0x9e, 0x2e, 0x6e, 0xb3, 0xdd, 0x1f, 0xca, 0x5c, 0x88, 0x05, 0x71, 0x0d, 0xef, 0x83, 0xf3, 0xb9, 0xe6, 0x12, 0x04, 0x2e, 0x9d, 0xef, 0x4f, 0x65, 0x58, + /* (2^160)P */ 0x26, 0x8e, 0x0e, 0xbe, 0xff, 0xc4, 0x05, 0xa9, 0x6e, 0x81, 0x31, 0x9b, 0xdf, 0xe5, 0x2d, 0x94, 0xe1, 0x88, 0x2e, 0x80, 0x3f, 0x72, 0x7d, 0x49, 0x8d, 0x40, 0x2f, 0x60, 0xea, 0x4d, 0x68, 0x30, + /* (2^161)P */ 0x34, 0xcb, 0xe6, 0xa3, 0x78, 0xa2, 0xe5, 0x21, 0xc4, 0x1d, 0x15, 0x5b, 0x6f, 0x6e, 0xfb, 0xae, 0x15, 0xca, 0x77, 0x9d, 0x04, 0x8e, 0x0b, 0xb3, 0x81, 0x89, 0xb9, 0x53, 0xcf, 0xc9, 0xc3, 0x28, + /* (2^162)P */ 0x2a, 0xdd, 0x6c, 0x55, 0x21, 0xb7, 0x7f, 0x28, 0x74, 0x22, 0x02, 0x97, 0xa8, 0x7c, 0x31, 0x0d, 0x58, 0x32, 0x54, 0x3a, 0x42, 0xc7, 0x68, 0x74, 0x2f, 0x64, 0xb5, 0x4e, 0x46, 0x11, 0x7f, 0x4a, + /* (2^163)P */ 0xa6, 0x3a, 0x19, 0x4d, 0x77, 0xa4, 0x37, 0xa2, 0xa1, 0x29, 0x21, 0xa9, 0x6e, 0x98, 0x65, 0xd8, 0x88, 0x1a, 0x7c, 0xf8, 0xec, 0x15, 0xc5, 0x24, 0xeb, 0xf5, 0x39, 0x5f, 0x57, 0x03, 0x40, 0x60, + /* (2^164)P */ 0x27, 0x9b, 0x0a, 0x57, 0x89, 0xf1, 0xb9, 0x47, 0x78, 0x4b, 0x5e, 0x46, 0xde, 0xce, 0x98, 0x2b, 0x20, 0x5c, 0xb8, 0xdb, 0x51, 0xf5, 0x6d, 0x02, 0x01, 0x19, 0xe2, 0x47, 0x10, 0xd9, 0xfc, 0x74, + /* (2^165)P */ 0xa3, 0xbf, 0xc1, 0x23, 0x0a, 0xa9, 0xe2, 0x13, 0xf6, 0x19, 0x85, 0x47, 0x4e, 0x07, 0xb0, 0x0c, 0x44, 0xcf, 0xf6, 0x3a, 0xbe, 0xcb, 0xf1, 0x5f, 0xbe, 0x2d, 0x81, 0xbe, 0x38, 0x54, 0xfe, 0x67, + /* (2^166)P */ 0xb0, 0x05, 0x0f, 0xa4, 0x4f, 0xf6, 0x3c, 0xd1, 0x87, 0x37, 0x28, 0x32, 0x2f, 0xfb, 0x4d, 0x05, 0xea, 0x2a, 0x0d, 0x7f, 0x5b, 0x91, 0x73, 0x41, 0x4e, 0x0d, 0x61, 0x1f, 0x4f, 0x14, 0x2f, 0x48, + /* (2^167)P */ 0x34, 0x82, 0x7f, 0xb4, 0x01, 0x02, 0x21, 0xf6, 0x90, 0xb9, 0x70, 0x9e, 0x92, 0xe1, 0x0a, 0x5d, 0x7c, 0x56, 0x49, 0xb0, 0x55, 0xf4, 0xd7, 0xdc, 0x01, 0x6f, 0x91, 0xf0, 0xf1, 0xd0, 0x93, 0x7e, + /* (2^168)P */ 0xfa, 0xb4, 0x7d, 0x8a, 0xf1, 0xcb, 0x79, 0xdd, 0x2f, 0xc6, 0x74, 0x6f, 0xbf, 0x91, 0x83, 0xbe, 0xbd, 0x91, 0x82, 0x4b, 0xd1, 0x45, 0x71, 0x02, 0x05, 0x17, 0xbf, 0x2c, 0xea, 0x73, 0x5a, 0x58, + /* (2^169)P */ 0xb2, 0x0d, 0x8a, 0x92, 0x3e, 0xa0, 0x5c, 0x48, 0xe7, 0x57, 0x28, 0x74, 0xa5, 0x01, 0xfc, 0x10, 0xa7, 0x51, 0xd5, 0xd6, 0xdb, 0x2e, 0x48, 0x2f, 0x8a, 0xdb, 0x8f, 0x04, 0xb5, 0x33, 0x04, 0x0f, + /* (2^170)P */ 0x47, 0x62, 0xdc, 0xd7, 0x8d, 0x2e, 0xda, 0x60, 0x9a, 0x81, 0xd4, 0x8c, 0xd3, 0xc9, 0xb4, 0x88, 0x97, 0x66, 0xf6, 0x01, 0xc0, 0x3a, 0x03, 0x13, 0x75, 0x7d, 0x36, 0x3b, 0xfe, 0x24, 0x3b, 0x27, + /* (2^171)P */ 0xd4, 0xb9, 0xb3, 0x31, 0x6a, 0xf6, 0xe8, 0xc6, 0xd5, 0x49, 0xdf, 0x94, 0xa4, 0x14, 0x15, 0x28, 0xa7, 0x3d, 0xb2, 0xc8, 0xdf, 0x6f, 0x72, 0xd1, 0x48, 0xe5, 0xde, 0x03, 0xd1, 0xe7, 0x3a, 0x4b, + /* (2^172)P */ 0x7e, 0x9d, 0x4b, 0xce, 0x19, 0x6e, 0x25, 0xc6, 0x1c, 0xc6, 0xe3, 0x86, 0xf1, 0x5c, 0x5c, 0xff, 0x45, 0xc1, 0x8e, 0x4b, 0xa3, 0x3c, 0xc6, 0xac, 0x74, 0x65, 0xe6, 0xfe, 0x88, 0x18, 0x62, 0x74, + /* (2^173)P */ 0x1e, 0x0a, 0x29, 0x45, 0x96, 0x40, 0x6f, 0x95, 0x2e, 0x96, 0x3a, 0x26, 0xe3, 0xf8, 0x0b, 0xef, 0x7b, 0x64, 0xc2, 0x5e, 0xeb, 0x50, 0x6a, 0xed, 0x02, 0x75, 0xca, 0x9d, 0x3a, 0x28, 0x94, 0x06, + /* (2^174)P */ 0xd1, 0xdc, 0xa2, 0x43, 0x36, 0x96, 0x9b, 0x76, 0x53, 0x53, 0xfc, 0x09, 0xea, 0xc8, 0xb7, 0x42, 0xab, 0x7e, 0x39, 0x13, 0xee, 0x2a, 0x00, 0x4f, 0x3a, 0xd6, 0xb7, 0x19, 0x2c, 0x5e, 0x00, 0x63, + /* (2^175)P */ 0xea, 0x3b, 0x02, 0x63, 0xda, 0x36, 0x67, 0xca, 0xb7, 0x99, 0x2a, 0xb1, 0x6d, 0x7f, 0x6c, 0x96, 0xe1, 0xc5, 0x37, 0xc5, 0x90, 0x93, 0xe0, 0xac, 0xee, 0x89, 0xaa, 0xa1, 0x63, 0x60, 0x69, 0x0b, + /* (2^176)P */ 0xe5, 0x56, 0x8c, 0x28, 0x97, 0x3e, 0xb0, 0xeb, 0xe8, 0x8b, 0x8c, 0x93, 0x9f, 0x9f, 0x2a, 0x43, 0x71, 0x7f, 0x71, 0x5b, 0x3d, 0xa9, 0xa5, 0xa6, 0x97, 0x9d, 0x8f, 0xe1, 0xc3, 0xb4, 0x5f, 0x1a, + /* (2^177)P */ 0xce, 0xcd, 0x60, 0x1c, 0xad, 0xe7, 0x94, 0x1c, 0xa0, 0xc4, 0x02, 0xfc, 0x43, 0x2a, 0x20, 0xee, 0x20, 0x6a, 0xc4, 0x67, 0xd8, 0xe4, 0xaf, 0x8d, 0x58, 0x7b, 0xc2, 0x8a, 0x3c, 0x26, 0x10, 0x0a, + /* (2^178)P */ 0x4a, 0x2a, 0x43, 0xe4, 0xdf, 0xa9, 0xde, 0xd0, 0xc5, 0x77, 0x92, 0xbe, 0x7b, 0xf8, 0x6a, 0x85, 0x1a, 0xc7, 0x12, 0xc2, 0xac, 0x72, 0x84, 0xce, 0x91, 0x1e, 0xbb, 0x9b, 0x6d, 0x1b, 0x15, 0x6f, + /* (2^179)P */ 0x6a, 0xd5, 0xee, 0x7c, 0x52, 0x6c, 0x77, 0x26, 0xec, 0xfa, 0xf8, 0xfb, 0xb7, 0x1c, 0x21, 0x7d, 0xcc, 0x09, 0x46, 0xfd, 0xa6, 0x66, 0xae, 0x37, 0x42, 0x0c, 0x77, 0xd2, 0x02, 0xb7, 0x81, 0x1f, + /* (2^180)P */ 0x92, 0x83, 0xc5, 0xea, 0x57, 0xb0, 0xb0, 0x2f, 0x9d, 0x4e, 0x74, 0x29, 0xfe, 0x89, 0xdd, 0xe1, 0xf8, 0xb4, 0xbe, 0x17, 0xeb, 0xf8, 0x64, 0xc9, 0x1e, 0xd4, 0xa2, 0xc9, 0x73, 0x10, 0x57, 0x29, + /* (2^181)P */ 0x54, 0xe2, 0xc0, 0x81, 0x89, 0xa1, 0x48, 0xa9, 0x30, 0x28, 0xb2, 0x65, 0x9b, 0x36, 0xf6, 0x2d, 0xc6, 0xd3, 0xcf, 0x5f, 0xd7, 0xb2, 0x3e, 0xa3, 0x1f, 0xa0, 0x99, 0x41, 0xec, 0xd6, 0x8c, 0x07, + /* (2^182)P */ 0x2f, 0x0d, 0x90, 0xad, 0x41, 0x4a, 0x58, 0x4a, 0x52, 0x4c, 0xc7, 0xe2, 0x78, 0x2b, 0x14, 0x32, 0x78, 0xc9, 0x31, 0x84, 0x33, 0xe8, 0xc4, 0x68, 0xc2, 0x9f, 0x68, 0x08, 0x90, 0xea, 0x69, 0x7f, + /* (2^183)P */ 0x65, 0x82, 0xa3, 0x46, 0x1e, 0xc8, 0xf2, 0x52, 0xfd, 0x32, 0xa8, 0x04, 0x2d, 0x07, 0x78, 0xfd, 0x94, 0x9e, 0x35, 0x25, 0xfa, 0xd5, 0xd7, 0x8c, 0xd2, 0x29, 0xcc, 0x54, 0x74, 0x1b, 0xe7, 0x4d, + /* (2^184)P */ 0xc9, 0x6a, 0xda, 0x1e, 0xad, 0x60, 0xeb, 0x42, 0x3a, 0x9c, 0xc0, 0xdb, 0xdf, 0x37, 0xad, 0x0a, 0x91, 0xc1, 0x3c, 0xe3, 0x71, 0x4b, 0x00, 0x81, 0x3c, 0x80, 0x22, 0x51, 0x34, 0xbe, 0xe6, 0x44, + /* (2^185)P */ 0xdb, 0x20, 0x19, 0xba, 0x88, 0x83, 0xfe, 0x03, 0x08, 0xb0, 0x0d, 0x15, 0x32, 0x7c, 0xd5, 0xf5, 0x29, 0x0c, 0xf6, 0x1a, 0x28, 0xc4, 0xc8, 0x49, 0xee, 0x1a, 0x70, 0xde, 0x18, 0xb5, 0xed, 0x21, + /* (2^186)P */ 0x99, 0xdc, 0x06, 0x8f, 0x41, 0x3e, 0xb6, 0x7f, 0xb8, 0xd7, 0x66, 0xc1, 0x99, 0x0d, 0x46, 0xa4, 0x83, 0x0a, 0x52, 0xce, 0x48, 0x52, 0xdd, 0x24, 0x58, 0x83, 0x92, 0x2b, 0x71, 0xad, 0xc3, 0x5e, + /* (2^187)P */ 0x0f, 0x93, 0x17, 0xbd, 0x5f, 0x2a, 0x02, 0x15, 0xe3, 0x70, 0x25, 0xd8, 0x77, 0x4a, 0xf6, 0xa4, 0x12, 0x37, 0x78, 0x15, 0x69, 0x8d, 0xbc, 0x12, 0xbb, 0x0a, 0x62, 0xfc, 0xc0, 0x94, 0x81, 0x49, + /* (2^188)P */ 0x82, 0x6c, 0x68, 0x55, 0xd2, 0xd9, 0xa2, 0x38, 0xf0, 0x21, 0x3e, 0x19, 0xd9, 0x6b, 0x5c, 0x78, 0x84, 0x54, 0x4a, 0xb2, 0x1a, 0xc8, 0xd5, 0xe4, 0x89, 0x09, 0xe2, 0xb2, 0x60, 0x78, 0x30, 0x56, + /* (2^189)P */ 0xc4, 0x74, 0x4d, 0x8b, 0xf7, 0x55, 0x9d, 0x42, 0x31, 0x01, 0x35, 0x43, 0x46, 0x83, 0xf1, 0x22, 0xff, 0x1f, 0xc7, 0x98, 0x45, 0xc2, 0x60, 0x1e, 0xef, 0x83, 0x99, 0x97, 0x14, 0xf0, 0xf2, 0x59, + /* (2^190)P */ 0x44, 0x4a, 0x49, 0xeb, 0x56, 0x7d, 0xa4, 0x46, 0x8e, 0xa1, 0x36, 0xd6, 0x54, 0xa8, 0x22, 0x3e, 0x3b, 0x1c, 0x49, 0x74, 0x52, 0xe1, 0x46, 0xb3, 0xe7, 0xcd, 0x90, 0x53, 0x4e, 0xfd, 0xea, 0x2c, + /* (2^191)P */ 0x75, 0x66, 0x0d, 0xbe, 0x38, 0x85, 0x8a, 0xba, 0x23, 0x8e, 0x81, 0x50, 0xbb, 0x74, 0x90, 0x4b, 0xc3, 0x04, 0xd3, 0x85, 0x90, 0xb8, 0xda, 0xcb, 0xc4, 0x92, 0x61, 0xe5, 0xe0, 0x4f, 0xa2, 0x61, + /* (2^192)P */ 0xcb, 0x5b, 0x52, 0xdb, 0xe6, 0x15, 0x76, 0xcb, 0xca, 0xe4, 0x67, 0xa5, 0x35, 0x8c, 0x7d, 0xdd, 0x69, 0xdd, 0xfc, 0xca, 0x3a, 0x15, 0xb4, 0xe6, 0x66, 0x97, 0x3c, 0x7f, 0x09, 0x8e, 0x66, 0x2d, + /* (2^193)P */ 0xf0, 0x5e, 0xe5, 0x5c, 0x26, 0x7e, 0x7e, 0xa5, 0x67, 0xb9, 0xd4, 0x7c, 0x52, 0x4e, 0x9f, 0x5d, 0xe5, 0xd1, 0x2f, 0x49, 0x06, 0x36, 0xc8, 0xfb, 0xae, 0xf7, 0xc3, 0xb7, 0xbe, 0x52, 0x0d, 0x09, + /* (2^194)P */ 0x7c, 0x4d, 0x7b, 0x1e, 0x5a, 0x51, 0xb9, 0x09, 0xc0, 0x44, 0xda, 0x99, 0x25, 0x6a, 0x26, 0x1f, 0x04, 0x55, 0xc5, 0xe2, 0x48, 0x95, 0xc4, 0xa1, 0xcc, 0x15, 0x6f, 0x12, 0x87, 0x42, 0xf0, 0x7e, + /* (2^195)P */ 0x15, 0xef, 0x30, 0xbd, 0x9d, 0x65, 0xd1, 0xfe, 0x7b, 0x27, 0xe0, 0xc4, 0xee, 0xb9, 0x4a, 0x8b, 0x91, 0x32, 0xdf, 0xa5, 0x36, 0x62, 0x4d, 0x88, 0x88, 0xf7, 0x5c, 0xbf, 0xa6, 0x6e, 0xd9, 0x1f, + /* (2^196)P */ 0x9a, 0x0d, 0x19, 0x1f, 0x98, 0x61, 0xa1, 0x42, 0xc1, 0x52, 0x60, 0x7e, 0x50, 0x49, 0xd8, 0x61, 0xd5, 0x2c, 0x5a, 0x28, 0xbf, 0x13, 0xe1, 0x9f, 0xd8, 0x85, 0xad, 0xdb, 0x76, 0xd6, 0x22, 0x7c, + /* (2^197)P */ 0x7d, 0xd2, 0xfb, 0x2b, 0xed, 0x70, 0xe7, 0x82, 0xa5, 0xf5, 0x96, 0xe9, 0xec, 0xb2, 0x05, 0x4c, 0x50, 0x01, 0x90, 0xb0, 0xc2, 0xa9, 0x40, 0xcd, 0x64, 0xbf, 0xd9, 0x13, 0x92, 0x31, 0x95, 0x58, + /* (2^198)P */ 0x08, 0x2e, 0xea, 0x3f, 0x70, 0x5d, 0xcc, 0xe7, 0x8c, 0x18, 0xe2, 0x58, 0x12, 0x49, 0x0c, 0xb5, 0xf0, 0x5b, 0x20, 0x48, 0xaa, 0x0b, 0xe3, 0xcc, 0x62, 0x2d, 0xa3, 0xcf, 0x9c, 0x65, 0x7c, 0x53, + /* (2^199)P */ 0x88, 0xc0, 0xcf, 0x98, 0x3a, 0x62, 0xb6, 0x37, 0xa4, 0xac, 0xd6, 0xa4, 0x1f, 0xed, 0x9b, 0xfe, 0xb0, 0xd1, 0xa8, 0x56, 0x8e, 0x9b, 0xd2, 0x04, 0x75, 0x95, 0x51, 0x0b, 0xc4, 0x71, 0x5f, 0x72, + /* (2^200)P */ 0xe6, 0x9c, 0x33, 0xd0, 0x9c, 0xf8, 0xc7, 0x28, 0x8b, 0xc1, 0xdd, 0x69, 0x44, 0xb1, 0x67, 0x83, 0x2c, 0x65, 0xa1, 0xa6, 0x83, 0xda, 0x3a, 0x88, 0x17, 0x6c, 0x4d, 0x03, 0x74, 0x19, 0x5f, 0x58, + /* (2^201)P */ 0x88, 0x91, 0xb1, 0xf1, 0x66, 0xb2, 0xcf, 0x89, 0x17, 0x52, 0xc3, 0xe7, 0x63, 0x48, 0x3b, 0xe6, 0x6a, 0x52, 0xc0, 0xb4, 0xa6, 0x9d, 0x8c, 0xd8, 0x35, 0x46, 0x95, 0xf0, 0x9d, 0x5c, 0x03, 0x3e, + /* (2^202)P */ 0x9d, 0xde, 0x45, 0xfb, 0x12, 0x54, 0x9d, 0xdd, 0x0d, 0xf4, 0xcf, 0xe4, 0x32, 0x45, 0x68, 0xdd, 0x1c, 0x67, 0x1d, 0x15, 0x9b, 0x99, 0x5c, 0x4b, 0x90, 0xf6, 0xe7, 0x11, 0xc8, 0x2c, 0x8c, 0x2d, + /* (2^203)P */ 0x40, 0x5d, 0x05, 0x90, 0x1d, 0xbe, 0x54, 0x7f, 0x40, 0xaf, 0x4a, 0x46, 0xdf, 0xc5, 0x64, 0xa4, 0xbe, 0x17, 0xe9, 0xf0, 0x24, 0x96, 0x97, 0x33, 0x30, 0x6b, 0x35, 0x27, 0xc5, 0x8d, 0x01, 0x2c, + /* (2^204)P */ 0xd4, 0xb3, 0x30, 0xe3, 0x24, 0x50, 0x41, 0xa5, 0xd3, 0x52, 0x16, 0x69, 0x96, 0x3d, 0xff, 0x73, 0xf1, 0x59, 0x9b, 0xef, 0xc4, 0x42, 0xec, 0x94, 0x5a, 0x8e, 0xd0, 0x18, 0x16, 0x20, 0x47, 0x07, + /* (2^205)P */ 0x53, 0x1c, 0x41, 0xca, 0x8a, 0xa4, 0x6c, 0x4d, 0x19, 0x61, 0xa6, 0xcf, 0x2f, 0x5f, 0x41, 0x66, 0xff, 0x27, 0xe2, 0x51, 0x00, 0xd4, 0x4d, 0x9c, 0xeb, 0xf7, 0x02, 0x9a, 0xc0, 0x0b, 0x81, 0x59, + /* (2^206)P */ 0x1d, 0x10, 0xdc, 0xb3, 0x71, 0xb1, 0x7e, 0x2a, 0x8e, 0xf6, 0xfe, 0x9f, 0xb9, 0x5a, 0x1c, 0x44, 0xea, 0x59, 0xb3, 0x93, 0x9b, 0x5c, 0x02, 0x32, 0x2f, 0x11, 0x9d, 0x1e, 0xa7, 0xe0, 0x8c, 0x5e, + /* (2^207)P */ 0xfd, 0x03, 0x95, 0x42, 0x92, 0xcb, 0xcc, 0xbf, 0x55, 0x5d, 0x09, 0x2f, 0x75, 0xba, 0x71, 0xd2, 0x1e, 0x09, 0x2d, 0x97, 0x5e, 0xad, 0x5e, 0x34, 0xba, 0x03, 0x31, 0xa8, 0x11, 0xdf, 0xc8, 0x18, + /* (2^208)P */ 0x4c, 0x0f, 0xed, 0x9a, 0x9a, 0x94, 0xcd, 0x90, 0x7e, 0xe3, 0x60, 0x66, 0xcb, 0xf4, 0xd1, 0xc5, 0x0b, 0x2e, 0xc5, 0x56, 0x2d, 0xc5, 0xca, 0xb8, 0x0d, 0x8e, 0x80, 0xc5, 0x00, 0xe4, 0x42, 0x6e, + /* (2^209)P */ 0x23, 0xfd, 0xae, 0xee, 0x66, 0x69, 0xb4, 0xa3, 0xca, 0xcd, 0x9e, 0xe3, 0x0b, 0x1f, 0x4f, 0x0c, 0x1d, 0xa5, 0x83, 0xd6, 0xc9, 0xc8, 0x9d, 0x18, 0x1b, 0x35, 0x09, 0x4c, 0x05, 0x7f, 0xf2, 0x51, + /* (2^210)P */ 0x82, 0x06, 0x32, 0x2a, 0xcd, 0x7c, 0x48, 0x4c, 0x96, 0x1c, 0xdf, 0xb3, 0x5b, 0xa9, 0x7e, 0x58, 0xe8, 0xb8, 0x5c, 0x55, 0x9e, 0xf7, 0xcc, 0xc8, 0x3d, 0xd7, 0x06, 0xa2, 0x29, 0xc8, 0x7d, 0x54, + /* (2^211)P */ 0x06, 0x9b, 0xc3, 0x80, 0xcd, 0xa6, 0x22, 0xb8, 0xc6, 0xd4, 0x00, 0x20, 0x73, 0x54, 0x6d, 0xe9, 0x4d, 0x3b, 0x46, 0x91, 0x6f, 0x5b, 0x53, 0x28, 0x1d, 0x6e, 0x48, 0xe2, 0x60, 0x46, 0x8f, 0x22, + /* (2^212)P */ 0xbf, 0x3a, 0x8d, 0xde, 0x38, 0x95, 0x79, 0x98, 0x6e, 0xca, 0xeb, 0x45, 0x00, 0x33, 0xd8, 0x8c, 0x38, 0xe7, 0x21, 0x82, 0x00, 0x2a, 0x95, 0x79, 0xbb, 0xd2, 0x5c, 0x53, 0xa7, 0xe1, 0x22, 0x43, + /* (2^213)P */ 0x1c, 0x80, 0xd1, 0x19, 0x18, 0xc1, 0x14, 0xb1, 0xc7, 0x5e, 0x3f, 0x4f, 0xd8, 0xe4, 0x16, 0x20, 0x4c, 0x0f, 0x26, 0x09, 0xf4, 0x2d, 0x0e, 0xdd, 0x66, 0x72, 0x5f, 0xae, 0xc0, 0x62, 0xc3, 0x5e, + /* (2^214)P */ 0xee, 0xb4, 0xb2, 0xb8, 0x18, 0x2b, 0x46, 0xc0, 0xfb, 0x1a, 0x4d, 0x27, 0x50, 0xd9, 0xc8, 0x7c, 0xd2, 0x02, 0x6b, 0x43, 0x05, 0x71, 0x5f, 0xf2, 0xd3, 0xcc, 0xf9, 0xbf, 0xdc, 0xf8, 0xbb, 0x43, + /* (2^215)P */ 0xdf, 0xe9, 0x39, 0xa0, 0x67, 0x17, 0xad, 0xb6, 0x83, 0x35, 0x9d, 0xf6, 0xa8, 0x4d, 0x71, 0xb0, 0xf5, 0x31, 0x29, 0xb4, 0x18, 0xfa, 0x55, 0x5e, 0x61, 0x09, 0xc6, 0x33, 0x8f, 0x55, 0xd5, 0x4e, + /* (2^216)P */ 0xdd, 0xa5, 0x47, 0xc6, 0x01, 0x79, 0xe3, 0x1f, 0x57, 0xd3, 0x81, 0x80, 0x1f, 0xdf, 0x3d, 0x59, 0xa6, 0xd7, 0x3f, 0x81, 0xfd, 0xa4, 0x49, 0x02, 0x61, 0xaf, 0x9c, 0x4e, 0x27, 0xca, 0xac, 0x69, + /* (2^217)P */ 0xc9, 0x21, 0x07, 0x33, 0xea, 0xa3, 0x7b, 0x04, 0xa0, 0x1e, 0x7e, 0x0e, 0xc2, 0x3f, 0x42, 0x83, 0x60, 0x4a, 0x31, 0x01, 0xaf, 0xc0, 0xf4, 0x1d, 0x27, 0x95, 0x28, 0x89, 0xab, 0x2d, 0xa6, 0x09, + /* (2^218)P */ 0x00, 0xcb, 0xc6, 0x9c, 0xa4, 0x25, 0xb3, 0xa5, 0xb6, 0x6c, 0xb5, 0x54, 0xc6, 0x5d, 0x4b, 0xe9, 0xa0, 0x94, 0xc9, 0xad, 0x79, 0x87, 0xe2, 0x3b, 0xad, 0x4a, 0x3a, 0xba, 0xf8, 0xe8, 0x96, 0x42, + /* (2^219)P */ 0xab, 0x1e, 0x45, 0x1e, 0x76, 0x89, 0x86, 0x32, 0x4a, 0x59, 0x59, 0xff, 0x8b, 0x59, 0x4d, 0x2e, 0x4a, 0x08, 0xa7, 0xd7, 0x53, 0x68, 0xb9, 0x49, 0xa8, 0x20, 0x14, 0x60, 0x19, 0xa3, 0x80, 0x49, + /* (2^220)P */ 0x42, 0x2c, 0x55, 0x2f, 0xe1, 0xb9, 0x65, 0x95, 0x96, 0xfe, 0x00, 0x71, 0xdb, 0x18, 0x53, 0x8a, 0xd7, 0xd0, 0xad, 0x43, 0x4d, 0x0b, 0xc9, 0x05, 0xda, 0x4e, 0x5d, 0x6a, 0xd6, 0x4c, 0x8b, 0x53, + /* (2^221)P */ 0x9f, 0x03, 0x9f, 0xe8, 0xc3, 0x4f, 0xe9, 0xf4, 0x45, 0x80, 0x61, 0x6f, 0xf2, 0x9a, 0x2c, 0x59, 0x50, 0x95, 0x4b, 0xfd, 0xb5, 0x6e, 0xa3, 0x08, 0x19, 0x14, 0xed, 0xc2, 0xf6, 0xfa, 0xff, 0x25, + /* (2^222)P */ 0x54, 0xd3, 0x79, 0xcc, 0x59, 0x44, 0x43, 0x34, 0x6b, 0x47, 0xd5, 0xb1, 0xb4, 0xbf, 0xec, 0xee, 0x99, 0x5d, 0x61, 0x61, 0xa0, 0x34, 0xeb, 0xdd, 0x73, 0xb7, 0x64, 0xeb, 0xcc, 0xce, 0x29, 0x51, + /* (2^223)P */ 0x20, 0x35, 0x99, 0x94, 0x58, 0x21, 0x43, 0xee, 0x3b, 0x0b, 0x4c, 0xf1, 0x7c, 0x9c, 0x2f, 0x77, 0xd5, 0xda, 0xbe, 0x06, 0xe3, 0xfc, 0xe2, 0xd2, 0x97, 0x6a, 0xf0, 0x46, 0xb5, 0x42, 0x5f, 0x71, + /* (2^224)P */ 0x1a, 0x5f, 0x5b, 0xda, 0xce, 0xcd, 0x4e, 0x43, 0xa9, 0x41, 0x97, 0xa4, 0x15, 0x71, 0xa1, 0x0d, 0x2e, 0xad, 0xed, 0x73, 0x7c, 0xd7, 0x0b, 0x68, 0x41, 0x90, 0xdd, 0x4e, 0x35, 0x02, 0x7c, 0x48, + /* (2^225)P */ 0xc4, 0xd9, 0x0e, 0xa7, 0xf3, 0xef, 0xef, 0xb8, 0x02, 0xe3, 0x57, 0xe8, 0xa3, 0x2a, 0xa3, 0x56, 0xa0, 0xa5, 0xa2, 0x48, 0xbd, 0x68, 0x3a, 0xdf, 0x44, 0xc4, 0x76, 0x31, 0xb7, 0x50, 0xf6, 0x07, + /* (2^226)P */ 0xb1, 0xcc, 0xe0, 0x26, 0x16, 0x9b, 0x8b, 0xe3, 0x36, 0xfb, 0x09, 0x8b, 0xc1, 0x53, 0xe0, 0x79, 0x64, 0x49, 0xf9, 0xc9, 0x19, 0x03, 0xd9, 0x56, 0xc4, 0xf5, 0x9f, 0xac, 0xe7, 0x41, 0xa9, 0x1c, + /* (2^227)P */ 0xbb, 0xa0, 0x2f, 0x16, 0x29, 0xdf, 0xc4, 0x49, 0x05, 0x33, 0xb3, 0x82, 0x32, 0xcf, 0x88, 0x84, 0x7d, 0x43, 0xbb, 0xca, 0x14, 0xda, 0xdf, 0x95, 0x86, 0xad, 0xd5, 0x64, 0x82, 0xf7, 0x91, 0x33, + /* (2^228)P */ 0x5d, 0x09, 0xb5, 0xe2, 0x6a, 0xe0, 0x9a, 0x72, 0x46, 0xa9, 0x59, 0x32, 0xd7, 0x58, 0x8a, 0xd5, 0xed, 0x21, 0x39, 0xd1, 0x62, 0x42, 0x83, 0xe9, 0x92, 0xb5, 0x4b, 0xa5, 0xfa, 0xda, 0xfe, 0x27, + /* (2^229)P */ 0xbb, 0x48, 0xad, 0x29, 0xb8, 0xc5, 0x9d, 0xa9, 0x60, 0xe2, 0x9e, 0x49, 0x42, 0x57, 0x02, 0x5f, 0xfd, 0x13, 0x75, 0x5d, 0xcd, 0x8e, 0x2c, 0x80, 0x38, 0xd9, 0x6d, 0x3f, 0xef, 0xb3, 0xce, 0x78, + /* (2^230)P */ 0x94, 0x5d, 0x13, 0x8a, 0x4f, 0xf4, 0x42, 0xc3, 0xa3, 0xdd, 0x8c, 0x82, 0x44, 0xdb, 0x9e, 0x7b, 0xe7, 0xcf, 0x37, 0x05, 0x1a, 0xd1, 0x36, 0x94, 0xc8, 0xb4, 0x1a, 0xec, 0x64, 0xb1, 0x64, 0x50, + /* (2^231)P */ 0xfc, 0xb2, 0x7e, 0xd3, 0xcf, 0xec, 0x20, 0x70, 0xfc, 0x25, 0x0d, 0xd9, 0x3e, 0xea, 0x31, 0x1f, 0x34, 0xbb, 0xa1, 0xdf, 0x7b, 0x0d, 0x93, 0x1b, 0x44, 0x30, 0x11, 0x48, 0x7a, 0x46, 0x44, 0x53, + /* (2^232)P */ 0xfb, 0x6d, 0x5e, 0xf2, 0x70, 0x31, 0x07, 0x70, 0xc8, 0x4c, 0x11, 0x50, 0x1a, 0xdc, 0x85, 0xe3, 0x00, 0x4f, 0xfc, 0xc8, 0x8a, 0x69, 0x48, 0x23, 0xd8, 0x40, 0xdd, 0x84, 0x52, 0xa5, 0x77, 0x2a, + /* (2^233)P */ 0xe4, 0x6c, 0x8c, 0xc9, 0xe0, 0xaf, 0x06, 0xfe, 0xe4, 0xd6, 0xdf, 0xdd, 0x96, 0xdf, 0x35, 0xc2, 0xd3, 0x1e, 0xbf, 0x33, 0x1e, 0xd0, 0x28, 0x14, 0xaf, 0xbd, 0x00, 0x93, 0xec, 0x68, 0x57, 0x78, + /* (2^234)P */ 0x3b, 0xb6, 0xde, 0x91, 0x7a, 0xe5, 0x02, 0x97, 0x80, 0x8b, 0xce, 0xe5, 0xbf, 0xb8, 0xbd, 0x61, 0xac, 0x58, 0x1d, 0x3d, 0x6f, 0x42, 0x5b, 0x64, 0xbc, 0x57, 0xa5, 0x27, 0x22, 0xa8, 0x04, 0x48, + /* (2^235)P */ 0x01, 0x26, 0x4d, 0xb4, 0x8a, 0x04, 0x57, 0x8e, 0x35, 0x69, 0x3a, 0x4b, 0x1a, 0x50, 0xd6, 0x68, 0x93, 0xc2, 0xe1, 0xf9, 0xc3, 0x9e, 0x9c, 0xc3, 0xe2, 0x63, 0xde, 0xd4, 0x57, 0xf2, 0x72, 0x41, + /* (2^236)P */ 0x01, 0x64, 0x0c, 0x33, 0x50, 0xb4, 0x68, 0xd3, 0x91, 0x23, 0x8f, 0x41, 0x17, 0x30, 0x0d, 0x04, 0x0d, 0xd9, 0xb7, 0x90, 0x60, 0xbb, 0x34, 0x2c, 0x1f, 0xd5, 0xdf, 0x8f, 0x22, 0x49, 0xf6, 0x16, + /* (2^237)P */ 0xf5, 0x8e, 0x92, 0x2b, 0x8e, 0x81, 0xa6, 0xbe, 0x72, 0x1e, 0xc1, 0xcd, 0x91, 0xcf, 0x8c, 0xe2, 0xcd, 0x36, 0x7a, 0xe7, 0x68, 0xaa, 0x4a, 0x59, 0x0f, 0xfd, 0x7f, 0x6c, 0x80, 0x34, 0x30, 0x31, + /* (2^238)P */ 0x65, 0xbd, 0x49, 0x22, 0xac, 0x27, 0x9d, 0x8a, 0x12, 0x95, 0x8e, 0x01, 0x64, 0xb4, 0xa3, 0x19, 0xc7, 0x7e, 0xb3, 0x52, 0xf3, 0xcf, 0x6c, 0xc2, 0x21, 0x7b, 0x79, 0x1d, 0x34, 0x68, 0x6f, 0x05, + /* (2^239)P */ 0x27, 0x23, 0xfd, 0x7e, 0x75, 0xd6, 0x79, 0x5e, 0x15, 0xfe, 0x3a, 0x55, 0xb6, 0xbc, 0xbd, 0xfa, 0x60, 0x5a, 0xaf, 0x6e, 0x2c, 0x22, 0xe7, 0xd3, 0x3b, 0x74, 0xae, 0x4d, 0x6d, 0xc7, 0x46, 0x70, + /* (2^240)P */ 0x55, 0x4a, 0x8d, 0xb1, 0x72, 0xe8, 0x0b, 0x66, 0x96, 0x14, 0x4e, 0x57, 0x18, 0x25, 0x99, 0x19, 0xbb, 0xdc, 0x2b, 0x30, 0x3a, 0x05, 0x03, 0xc1, 0x8e, 0x8e, 0x21, 0x0b, 0x80, 0xe9, 0xd8, 0x3e, + /* (2^241)P */ 0x3e, 0xe0, 0x75, 0xfa, 0x39, 0x92, 0x0b, 0x7b, 0x83, 0xc0, 0x33, 0x46, 0x68, 0xfb, 0xe9, 0xef, 0x93, 0x77, 0x1a, 0x39, 0xbe, 0x5f, 0xa3, 0x98, 0x34, 0xfe, 0xd0, 0xe2, 0x0f, 0x51, 0x65, 0x60, + /* (2^242)P */ 0x0c, 0xad, 0xab, 0x48, 0x85, 0x66, 0xcb, 0x55, 0x27, 0xe5, 0x87, 0xda, 0x48, 0x45, 0x58, 0xb4, 0xdd, 0xc1, 0x07, 0x01, 0xea, 0xec, 0x43, 0x2c, 0x35, 0xde, 0x72, 0x93, 0x80, 0x28, 0x60, 0x52, + /* (2^243)P */ 0x1f, 0x3b, 0x21, 0xf9, 0x6a, 0xc5, 0x15, 0x34, 0xdb, 0x98, 0x7e, 0x01, 0x4d, 0x1a, 0xee, 0x5b, 0x9b, 0x70, 0xcf, 0xb5, 0x05, 0xb1, 0xf6, 0x13, 0xb6, 0x9a, 0xb2, 0x82, 0x34, 0x0e, 0xf2, 0x5f, + /* (2^244)P */ 0x90, 0x6c, 0x2e, 0xcc, 0x75, 0x9c, 0xa2, 0x0a, 0x06, 0xe2, 0x70, 0x3a, 0xca, 0x73, 0x7d, 0xfc, 0x15, 0xc5, 0xb5, 0xc4, 0x8f, 0xc3, 0x9f, 0x89, 0x07, 0xc2, 0xff, 0x24, 0xb1, 0x86, 0x03, 0x25, + /* (2^245)P */ 0x56, 0x2b, 0x3d, 0xae, 0xd5, 0x28, 0xea, 0x54, 0xce, 0x60, 0xde, 0xd6, 0x9d, 0x14, 0x13, 0x99, 0xc1, 0xd6, 0x06, 0x8f, 0xc5, 0x4f, 0x69, 0x16, 0xc7, 0x8f, 0x01, 0xeb, 0x75, 0x39, 0xb2, 0x46, + /* (2^246)P */ 0xe2, 0xb4, 0xb7, 0xb4, 0x0f, 0x6a, 0x0a, 0x47, 0xde, 0x53, 0x72, 0x8f, 0x5a, 0x47, 0x92, 0x5d, 0xdb, 0x3a, 0xbd, 0x2f, 0xb5, 0xe5, 0xee, 0xab, 0x68, 0x69, 0x80, 0xa0, 0x01, 0x08, 0xa2, 0x7f, + /* (2^247)P */ 0xd2, 0x14, 0x77, 0x9f, 0xf1, 0xfa, 0xf3, 0x76, 0xc3, 0x60, 0x46, 0x2f, 0xc1, 0x40, 0xe8, 0xb3, 0x4e, 0x74, 0x12, 0xf2, 0x8d, 0xcd, 0xb4, 0x0f, 0xd2, 0x2d, 0x3a, 0x1d, 0x25, 0x5a, 0x06, 0x4b, + /* (2^248)P */ 0x4a, 0xcd, 0x77, 0x3d, 0x38, 0xde, 0xeb, 0x5c, 0xb1, 0x9c, 0x2c, 0x88, 0xdf, 0x39, 0xdf, 0x6a, 0x59, 0xf7, 0x9a, 0xb0, 0x2e, 0x24, 0xdd, 0xa2, 0x22, 0x64, 0x5f, 0x0e, 0xe5, 0xc0, 0x47, 0x31, + /* (2^249)P */ 0xdb, 0x50, 0x13, 0x1d, 0x10, 0xa5, 0x4c, 0x16, 0x62, 0xc9, 0x3f, 0xc3, 0x79, 0x34, 0xd1, 0xf8, 0x08, 0xda, 0xe5, 0x13, 0x4d, 0xce, 0x40, 0xe6, 0xba, 0xf8, 0x61, 0x50, 0xc4, 0xe0, 0xde, 0x4b, + /* (2^250)P */ 0xc9, 0xb1, 0xed, 0xa4, 0xc1, 0x6d, 0xc4, 0xd7, 0x8a, 0xd9, 0x7f, 0x43, 0xb6, 0xd7, 0x14, 0x55, 0x0b, 0xc0, 0xa1, 0xb2, 0x6b, 0x2f, 0x94, 0x58, 0x0e, 0x71, 0x70, 0x1d, 0xab, 0xb2, 0xff, 0x2d, + /* (2^251)P */ 0x68, 0x6d, 0x8b, 0xc1, 0x2f, 0xcf, 0xdf, 0xcc, 0x67, 0x61, 0x80, 0xb7, 0xa8, 0xcb, 0xeb, 0xa8, 0xe3, 0x37, 0x29, 0x5e, 0xf9, 0x97, 0x06, 0x98, 0x8c, 0x6e, 0x12, 0xd0, 0x1c, 0xba, 0xfb, 0x02, + /* (2^252)P */ 0x65, 0x45, 0xff, 0xad, 0x60, 0xc3, 0x98, 0xcb, 0x19, 0x15, 0xdb, 0x4b, 0xd2, 0x01, 0x71, 0x44, 0xd5, 0x15, 0xfb, 0x75, 0x74, 0xc8, 0xc4, 0x98, 0x7d, 0xa2, 0x22, 0x6e, 0x6d, 0xc7, 0xf8, 0x05, + /* (2^253)P */ 0x94, 0xf4, 0xb9, 0xfe, 0xdf, 0xe5, 0x69, 0xab, 0x75, 0x6b, 0x40, 0x18, 0x9d, 0xc7, 0x09, 0xae, 0x1d, 0x2d, 0xa4, 0x94, 0xfb, 0x45, 0x9b, 0x19, 0x84, 0xfa, 0x2a, 0xae, 0xeb, 0x0a, 0x71, 0x79, + /* (2^254)P */ 0xdf, 0xd2, 0x34, 0xf3, 0xa7, 0xed, 0xad, 0xa6, 0xb4, 0x57, 0x2a, 0xaf, 0x51, 0x9c, 0xde, 0x7b, 0xa8, 0xea, 0xdc, 0x86, 0x4f, 0xc6, 0x8f, 0xa9, 0x7b, 0xd0, 0x0e, 0xc2, 0x35, 0x03, 0xbe, 0x6b, + /* (2^255)P */ 0x44, 0x43, 0x98, 0x53, 0xbe, 0xdc, 0x7f, 0x66, 0xa8, 0x49, 0x59, 0x00, 0x1c, 0xbc, 0x72, 0x07, 0x8e, 0xd6, 0xbe, 0x4e, 0x9f, 0xa4, 0x07, 0xba, 0xbf, 0x30, 0xdf, 0xba, 0x85, 0xb0, 0xa7, 0x1f, +} diff --git a/vendor/github.com/cloudflare/circl/dh/x448/curve.go b/vendor/github.com/cloudflare/circl/dh/x448/curve.go new file mode 100644 index 0000000000000..d59564e4b42ab --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/curve.go @@ -0,0 +1,104 @@ +package x448 + +import ( + fp "github.com/cloudflare/circl/math/fp448" +) + +// ladderJoye calculates a fixed-point multiplication with the generator point. +// The algorithm is the right-to-left Joye's ladder as described +// in "How to precompute a ladder" in SAC'2017. +func ladderJoye(k *Key) { + w := [5]fp.Elt{} // [mu,x1,z1,x2,z2] order must be preserved. + w[1] = fp.Elt{ // x1 = S + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + } + fp.SetOne(&w[2]) // z1 = 1 + w[3] = fp.Elt{ // x2 = G-S + 0x20, 0x27, 0x9d, 0xc9, 0x7d, 0x19, 0xb1, 0xac, + 0xf8, 0xba, 0x69, 0x1c, 0xff, 0x33, 0xac, 0x23, + 0x51, 0x1b, 0xce, 0x3a, 0x64, 0x65, 0xbd, 0xf1, + 0x23, 0xf8, 0xc1, 0x84, 0x9d, 0x45, 0x54, 0x29, + 0x67, 0xb9, 0x81, 0x1c, 0x03, 0xd1, 0xcd, 0xda, + 0x7b, 0xeb, 0xff, 0x1a, 0x88, 0x03, 0xcf, 0x3a, + 0x42, 0x44, 0x32, 0x01, 0x25, 0xb7, 0xfa, 0xf0, + } + fp.SetOne(&w[4]) // z2 = 1 + + const n = 448 + const h = 2 + swap := uint(1) + for s := 0; s < n-h; s++ { + i := (s + h) / 8 + j := (s + h) % 8 + bit := uint((k[i] >> uint(j)) & 1) + copy(w[0][:], tableGenerator[s*Size:(s+1)*Size]) + diffAdd(&w, swap^bit) + swap = bit + } + for s := 0; s < h; s++ { + double(&w[1], &w[2]) + } + toAffine((*[fp.Size]byte)(k), &w[1], &w[2]) +} + +// ladderMontgomery calculates a generic scalar point multiplication +// The algorithm implemented is the left-to-right Montgomery's ladder. +func ladderMontgomery(k, xP *Key) { + w := [5]fp.Elt{} // [x1, x2, z2, x3, z3] order must be preserved. + w[0] = *(*fp.Elt)(xP) // x1 = xP + fp.SetOne(&w[1]) // x2 = 1 + w[3] = *(*fp.Elt)(xP) // x3 = xP + fp.SetOne(&w[4]) // z3 = 1 + + move := uint(0) + for s := 448 - 1; s >= 0; s-- { + i := s / 8 + j := s % 8 + bit := uint((k[i] >> uint(j)) & 1) + ladderStep(&w, move^bit) + move = bit + } + toAffine((*[fp.Size]byte)(k), &w[1], &w[2]) +} + +func toAffine(k *[fp.Size]byte, x, z *fp.Elt) { + fp.Inv(z, z) + fp.Mul(x, x, z) + _ = fp.ToBytes(k[:], x) +} + +var lowOrderPoints = [3]fp.Elt{ + { /* (0,_,1) point of order 2 on Curve448 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + { /* (1,_,1) a point of order 4 on the twist of Curve448 */ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + { /* (-1,_,1) point of order 4 on Curve448 */ + 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, +} diff --git a/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.go b/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.go new file mode 100644 index 0000000000000..a0622666136de --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.go @@ -0,0 +1,30 @@ +//go:build amd64 && !purego +// +build amd64,!purego + +package x448 + +import ( + fp "github.com/cloudflare/circl/math/fp448" + "golang.org/x/sys/cpu" +) + +var hasBmi2Adx = cpu.X86.HasBMI2 && cpu.X86.HasADX + +var _ = hasBmi2Adx + +func double(x, z *fp.Elt) { doubleAmd64(x, z) } +func diffAdd(w *[5]fp.Elt, b uint) { diffAddAmd64(w, b) } +func ladderStep(w *[5]fp.Elt, b uint) { ladderStepAmd64(w, b) } +func mulA24(z, x *fp.Elt) { mulA24Amd64(z, x) } + +//go:noescape +func doubleAmd64(x, z *fp.Elt) + +//go:noescape +func diffAddAmd64(w *[5]fp.Elt, b uint) + +//go:noescape +func ladderStepAmd64(w *[5]fp.Elt, b uint) + +//go:noescape +func mulA24Amd64(z, x *fp.Elt) diff --git a/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.h b/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.h new file mode 100644 index 0000000000000..8c1ae4d0fbb47 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.h @@ -0,0 +1,111 @@ +#define ladderStepLeg \ + addSub(x2,z2) \ + addSub(x3,z3) \ + integerMulLeg(b0,x2,z3) \ + integerMulLeg(b1,x3,z2) \ + reduceFromDoubleLeg(t0,b0) \ + reduceFromDoubleLeg(t1,b1) \ + addSub(t0,t1) \ + cselect(x2,x3,regMove) \ + cselect(z2,z3,regMove) \ + integerSqrLeg(b0,t0) \ + integerSqrLeg(b1,t1) \ + reduceFromDoubleLeg(x3,b0) \ + reduceFromDoubleLeg(z3,b1) \ + integerMulLeg(b0,x1,z3) \ + reduceFromDoubleLeg(z3,b0) \ + integerSqrLeg(b0,x2) \ + integerSqrLeg(b1,z2) \ + reduceFromDoubleLeg(x2,b0) \ + reduceFromDoubleLeg(z2,b1) \ + subtraction(t0,x2,z2) \ + multiplyA24Leg(t1,t0) \ + additionLeg(t1,t1,z2) \ + integerMulLeg(b0,x2,z2) \ + integerMulLeg(b1,t0,t1) \ + reduceFromDoubleLeg(x2,b0) \ + reduceFromDoubleLeg(z2,b1) + +#define ladderStepBmi2Adx \ + addSub(x2,z2) \ + addSub(x3,z3) \ + integerMulAdx(b0,x2,z3) \ + integerMulAdx(b1,x3,z2) \ + reduceFromDoubleAdx(t0,b0) \ + reduceFromDoubleAdx(t1,b1) \ + addSub(t0,t1) \ + cselect(x2,x3,regMove) \ + cselect(z2,z3,regMove) \ + integerSqrAdx(b0,t0) \ + integerSqrAdx(b1,t1) \ + reduceFromDoubleAdx(x3,b0) \ + reduceFromDoubleAdx(z3,b1) \ + integerMulAdx(b0,x1,z3) \ + reduceFromDoubleAdx(z3,b0) \ + integerSqrAdx(b0,x2) \ + integerSqrAdx(b1,z2) \ + reduceFromDoubleAdx(x2,b0) \ + reduceFromDoubleAdx(z2,b1) \ + subtraction(t0,x2,z2) \ + multiplyA24Adx(t1,t0) \ + additionAdx(t1,t1,z2) \ + integerMulAdx(b0,x2,z2) \ + integerMulAdx(b1,t0,t1) \ + reduceFromDoubleAdx(x2,b0) \ + reduceFromDoubleAdx(z2,b1) + +#define difAddLeg \ + addSub(x1,z1) \ + integerMulLeg(b0,z1,ui) \ + reduceFromDoubleLeg(z1,b0) \ + addSub(x1,z1) \ + integerSqrLeg(b0,x1) \ + integerSqrLeg(b1,z1) \ + reduceFromDoubleLeg(x1,b0) \ + reduceFromDoubleLeg(z1,b1) \ + integerMulLeg(b0,x1,z2) \ + integerMulLeg(b1,z1,x2) \ + reduceFromDoubleLeg(x1,b0) \ + reduceFromDoubleLeg(z1,b1) + +#define difAddBmi2Adx \ + addSub(x1,z1) \ + integerMulAdx(b0,z1,ui) \ + reduceFromDoubleAdx(z1,b0) \ + addSub(x1,z1) \ + integerSqrAdx(b0,x1) \ + integerSqrAdx(b1,z1) \ + reduceFromDoubleAdx(x1,b0) \ + reduceFromDoubleAdx(z1,b1) \ + integerMulAdx(b0,x1,z2) \ + integerMulAdx(b1,z1,x2) \ + reduceFromDoubleAdx(x1,b0) \ + reduceFromDoubleAdx(z1,b1) + +#define doubleLeg \ + addSub(x1,z1) \ + integerSqrLeg(b0,x1) \ + integerSqrLeg(b1,z1) \ + reduceFromDoubleLeg(x1,b0) \ + reduceFromDoubleLeg(z1,b1) \ + subtraction(t0,x1,z1) \ + multiplyA24Leg(t1,t0) \ + additionLeg(t1,t1,z1) \ + integerMulLeg(b0,x1,z1) \ + integerMulLeg(b1,t0,t1) \ + reduceFromDoubleLeg(x1,b0) \ + reduceFromDoubleLeg(z1,b1) + +#define doubleBmi2Adx \ + addSub(x1,z1) \ + integerSqrAdx(b0,x1) \ + integerSqrAdx(b1,z1) \ + reduceFromDoubleAdx(x1,b0) \ + reduceFromDoubleAdx(z1,b1) \ + subtraction(t0,x1,z1) \ + multiplyA24Adx(t1,t0) \ + additionAdx(t1,t1,z1) \ + integerMulAdx(b0,x1,z1) \ + integerMulAdx(b1,t0,t1) \ + reduceFromDoubleAdx(x1,b0) \ + reduceFromDoubleAdx(z1,b1) diff --git a/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.s b/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.s new file mode 100644 index 0000000000000..810aa9e648120 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/curve_amd64.s @@ -0,0 +1,193 @@ +// +build amd64 + +#include "textflag.h" + +// Depends on circl/math/fp448 package +#include "../../math/fp448/fp_amd64.h" +#include "curve_amd64.h" + +// CTE_A24 is (A+2)/4 from Curve448 +#define CTE_A24 39082 + +#define Size 56 + +// multiplyA24Leg multiplies x times CTE_A24 and stores in z +// Uses: AX, DX, R8-R15, FLAGS +// Instr: x86_64, cmov, adx +#define multiplyA24Leg(z,x) \ + MOVQ $CTE_A24, R15; \ + MOVQ 0+x, AX; MULQ R15; MOVQ AX, R8; ;;;;;;;;;;;; MOVQ DX, R9; \ + MOVQ 8+x, AX; MULQ R15; ADDQ AX, R9; ADCQ $0, DX; MOVQ DX, R10; \ + MOVQ 16+x, AX; MULQ R15; ADDQ AX, R10; ADCQ $0, DX; MOVQ DX, R11; \ + MOVQ 24+x, AX; MULQ R15; ADDQ AX, R11; ADCQ $0, DX; MOVQ DX, R12; \ + MOVQ 32+x, AX; MULQ R15; ADDQ AX, R12; ADCQ $0, DX; MOVQ DX, R13; \ + MOVQ 40+x, AX; MULQ R15; ADDQ AX, R13; ADCQ $0, DX; MOVQ DX, R14; \ + MOVQ 48+x, AX; MULQ R15; ADDQ AX, R14; ADCQ $0, DX; \ + MOVQ DX, AX; \ + SHLQ $32, AX; \ + ADDQ DX, R8; MOVQ $0, DX; \ + ADCQ $0, R9; \ + ADCQ $0, R10; \ + ADCQ AX, R11; \ + ADCQ $0, R12; \ + ADCQ $0, R13; \ + ADCQ $0, R14; \ + ADCQ $0, DX; \ + MOVQ DX, AX; \ + SHLQ $32, AX; \ + ADDQ DX, R8; \ + ADCQ $0, R9; \ + ADCQ $0, R10; \ + ADCQ AX, R11; \ + ADCQ $0, R12; \ + ADCQ $0, R13; \ + ADCQ $0, R14; \ + MOVQ R8, 0+z; \ + MOVQ R9, 8+z; \ + MOVQ R10, 16+z; \ + MOVQ R11, 24+z; \ + MOVQ R12, 32+z; \ + MOVQ R13, 40+z; \ + MOVQ R14, 48+z; + +// multiplyA24Adx multiplies x times CTE_A24 and stores in z +// Uses: AX, DX, R8-R14, FLAGS +// Instr: x86_64, bmi2 +#define multiplyA24Adx(z,x) \ + MOVQ $CTE_A24, DX; \ + MULXQ 0+x, R8, R9; \ + MULXQ 8+x, AX, R10; ADDQ AX, R9; \ + MULXQ 16+x, AX, R11; ADCQ AX, R10; \ + MULXQ 24+x, AX, R12; ADCQ AX, R11; \ + MULXQ 32+x, AX, R13; ADCQ AX, R12; \ + MULXQ 40+x, AX, R14; ADCQ AX, R13; \ + MULXQ 48+x, AX, DX; ADCQ AX, R14; \ + ;;;;;;;;;;;;;;;;;;;; ADCQ $0, DX; \ + MOVQ DX, AX; \ + SHLQ $32, AX; \ + ADDQ DX, R8; MOVQ $0, DX; \ + ADCQ $0, R9; \ + ADCQ $0, R10; \ + ADCQ AX, R11; \ + ADCQ $0, R12; \ + ADCQ $0, R13; \ + ADCQ $0, R14; \ + ADCQ $0, DX; \ + MOVQ DX, AX; \ + SHLQ $32, AX; \ + ADDQ DX, R8; \ + ADCQ $0, R9; \ + ADCQ $0, R10; \ + ADCQ AX, R11; \ + ADCQ $0, R12; \ + ADCQ $0, R13; \ + ADCQ $0, R14; \ + MOVQ R8, 0+z; \ + MOVQ R9, 8+z; \ + MOVQ R10, 16+z; \ + MOVQ R11, 24+z; \ + MOVQ R12, 32+z; \ + MOVQ R13, 40+z; \ + MOVQ R14, 48+z; + +#define mulA24Legacy \ + multiplyA24Leg(0(DI),0(SI)) +#define mulA24Bmi2Adx \ + multiplyA24Adx(0(DI),0(SI)) + +// func mulA24Amd64(z, x *fp448.Elt) +TEXT ·mulA24Amd64(SB),NOSPLIT,$0-16 + MOVQ z+0(FP), DI + MOVQ x+8(FP), SI + CHECK_BMI2ADX(LMA24, mulA24Legacy, mulA24Bmi2Adx) + +// func ladderStepAmd64(w *[5]fp448.Elt, b uint) +// ladderStepAmd64 calculates a point addition and doubling as follows: +// (x2,z2) = 2*(x2,z2) and (x3,z3) = (x2,z2)+(x3,z3) using as a difference (x1,-). +// w = {x1,x2,z2,x3,z4} are five fp255.Elt of 56 bytes. +// stack = (t0,t1) are two fp.Elt of fp.Size bytes, and +// (b0,b1) are two-double precision fp.Elt of 2*fp.Size bytes. +TEXT ·ladderStepAmd64(SB),NOSPLIT,$336-16 + // Parameters + #define regWork DI + #define regMove SI + #define x1 0*Size(regWork) + #define x2 1*Size(regWork) + #define z2 2*Size(regWork) + #define x3 3*Size(regWork) + #define z3 4*Size(regWork) + // Local variables + #define t0 0*Size(SP) + #define t1 1*Size(SP) + #define b0 2*Size(SP) + #define b1 4*Size(SP) + MOVQ w+0(FP), regWork + MOVQ b+8(FP), regMove + CHECK_BMI2ADX(LLADSTEP, ladderStepLeg, ladderStepBmi2Adx) + #undef regWork + #undef regMove + #undef x1 + #undef x2 + #undef z2 + #undef x3 + #undef z3 + #undef t0 + #undef t1 + #undef b0 + #undef b1 + +// func diffAddAmd64(work *[5]fp.Elt, swap uint) +// diffAddAmd64 calculates a differential point addition using a precomputed point. +// (x1,z1) = (x1,z1)+(mu) using a difference point (x2,z2) +// work = {mu,x1,z1,x2,z2} are five fp448.Elt of 56 bytes, and +// stack = (b0,b1) are two-double precision fp.Elt of 2*fp.Size bytes. +// This is Equation 7 at https://eprint.iacr.org/2017/264. +TEXT ·diffAddAmd64(SB),NOSPLIT,$224-16 + // Parameters + #define regWork DI + #define regSwap SI + #define ui 0*Size(regWork) + #define x1 1*Size(regWork) + #define z1 2*Size(regWork) + #define x2 3*Size(regWork) + #define z2 4*Size(regWork) + // Local variables + #define b0 0*Size(SP) + #define b1 2*Size(SP) + MOVQ w+0(FP), regWork + MOVQ b+8(FP), regSwap + cswap(x1,x2,regSwap) + cswap(z1,z2,regSwap) + CHECK_BMI2ADX(LDIFADD, difAddLeg, difAddBmi2Adx) + #undef regWork + #undef regSwap + #undef ui + #undef x1 + #undef z1 + #undef x2 + #undef z2 + #undef b0 + #undef b1 + +// func doubleAmd64(x, z *fp448.Elt) +// doubleAmd64 calculates a point doubling (x1,z1) = 2*(x1,z1). +// stack = (t0,t1) are two fp.Elt of fp.Size bytes, and +// (b0,b1) are two-double precision fp.Elt of 2*fp.Size bytes. +TEXT ·doubleAmd64(SB),NOSPLIT,$336-16 + // Parameters + #define x1 0(DI) + #define z1 0(SI) + // Local variables + #define t0 0*Size(SP) + #define t1 1*Size(SP) + #define b0 2*Size(SP) + #define b1 4*Size(SP) + MOVQ x+0(FP), DI + MOVQ z+8(FP), SI + CHECK_BMI2ADX(LDOUB,doubleLeg,doubleBmi2Adx) + #undef x1 + #undef z1 + #undef t0 + #undef t1 + #undef b0 + #undef b1 diff --git a/vendor/github.com/cloudflare/circl/dh/x448/curve_generic.go b/vendor/github.com/cloudflare/circl/dh/x448/curve_generic.go new file mode 100644 index 0000000000000..b0b65ccf7ebb3 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/curve_generic.go @@ -0,0 +1,100 @@ +package x448 + +import ( + "encoding/binary" + "math/bits" + + "github.com/cloudflare/circl/math/fp448" +) + +func doubleGeneric(x, z *fp448.Elt) { + t0, t1 := &fp448.Elt{}, &fp448.Elt{} + fp448.AddSub(x, z) + fp448.Sqr(x, x) + fp448.Sqr(z, z) + fp448.Sub(t0, x, z) + mulA24Generic(t1, t0) + fp448.Add(t1, t1, z) + fp448.Mul(x, x, z) + fp448.Mul(z, t0, t1) +} + +func diffAddGeneric(w *[5]fp448.Elt, b uint) { + mu, x1, z1, x2, z2 := &w[0], &w[1], &w[2], &w[3], &w[4] + fp448.Cswap(x1, x2, b) + fp448.Cswap(z1, z2, b) + fp448.AddSub(x1, z1) + fp448.Mul(z1, z1, mu) + fp448.AddSub(x1, z1) + fp448.Sqr(x1, x1) + fp448.Sqr(z1, z1) + fp448.Mul(x1, x1, z2) + fp448.Mul(z1, z1, x2) +} + +func ladderStepGeneric(w *[5]fp448.Elt, b uint) { + x1, x2, z2, x3, z3 := &w[0], &w[1], &w[2], &w[3], &w[4] + t0 := &fp448.Elt{} + t1 := &fp448.Elt{} + fp448.AddSub(x2, z2) + fp448.AddSub(x3, z3) + fp448.Mul(t0, x2, z3) + fp448.Mul(t1, x3, z2) + fp448.AddSub(t0, t1) + fp448.Cmov(x2, x3, b) + fp448.Cmov(z2, z3, b) + fp448.Sqr(x3, t0) + fp448.Sqr(z3, t1) + fp448.Mul(z3, x1, z3) + fp448.Sqr(x2, x2) + fp448.Sqr(z2, z2) + fp448.Sub(t0, x2, z2) + mulA24Generic(t1, t0) + fp448.Add(t1, t1, z2) + fp448.Mul(x2, x2, z2) + fp448.Mul(z2, t0, t1) +} + +func mulA24Generic(z, x *fp448.Elt) { + const A24 = 39082 + const n = 8 + var xx [7]uint64 + for i := range xx { + xx[i] = binary.LittleEndian.Uint64(x[i*n : (i+1)*n]) + } + h0, l0 := bits.Mul64(xx[0], A24) + h1, l1 := bits.Mul64(xx[1], A24) + h2, l2 := bits.Mul64(xx[2], A24) + h3, l3 := bits.Mul64(xx[3], A24) + h4, l4 := bits.Mul64(xx[4], A24) + h5, l5 := bits.Mul64(xx[5], A24) + h6, l6 := bits.Mul64(xx[6], A24) + + l1, c0 := bits.Add64(h0, l1, 0) + l2, c1 := bits.Add64(h1, l2, c0) + l3, c2 := bits.Add64(h2, l3, c1) + l4, c3 := bits.Add64(h3, l4, c2) + l5, c4 := bits.Add64(h4, l5, c3) + l6, c5 := bits.Add64(h5, l6, c4) + l7, _ := bits.Add64(h6, 0, c5) + + l0, c0 = bits.Add64(l0, l7, 0) + l1, c1 = bits.Add64(l1, 0, c0) + l2, c2 = bits.Add64(l2, 0, c1) + l3, c3 = bits.Add64(l3, l7<<32, c2) + l4, c4 = bits.Add64(l4, 0, c3) + l5, c5 = bits.Add64(l5, 0, c4) + l6, l7 = bits.Add64(l6, 0, c5) + + xx[0], c0 = bits.Add64(l0, l7, 0) + xx[1], c1 = bits.Add64(l1, 0, c0) + xx[2], c2 = bits.Add64(l2, 0, c1) + xx[3], c3 = bits.Add64(l3, l7<<32, c2) + xx[4], c4 = bits.Add64(l4, 0, c3) + xx[5], c5 = bits.Add64(l5, 0, c4) + xx[6], _ = bits.Add64(l6, 0, c5) + + for i := range xx { + binary.LittleEndian.PutUint64(z[i*n:(i+1)*n], xx[i]) + } +} diff --git a/vendor/github.com/cloudflare/circl/dh/x448/curve_noasm.go b/vendor/github.com/cloudflare/circl/dh/x448/curve_noasm.go new file mode 100644 index 0000000000000..3755b7c83b3f5 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/curve_noasm.go @@ -0,0 +1,11 @@ +//go:build !amd64 || purego +// +build !amd64 purego + +package x448 + +import fp "github.com/cloudflare/circl/math/fp448" + +func double(x, z *fp.Elt) { doubleGeneric(x, z) } +func diffAdd(w *[5]fp.Elt, b uint) { diffAddGeneric(w, b) } +func ladderStep(w *[5]fp.Elt, b uint) { ladderStepGeneric(w, b) } +func mulA24(z, x *fp.Elt) { mulA24Generic(z, x) } diff --git a/vendor/github.com/cloudflare/circl/dh/x448/doc.go b/vendor/github.com/cloudflare/circl/dh/x448/doc.go new file mode 100644 index 0000000000000..c02904fedae2d --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/doc.go @@ -0,0 +1,19 @@ +/* +Package x448 provides Diffie-Hellman functions as specified in RFC-7748. + +Validation of public keys. + +The Diffie-Hellman function, as described in RFC-7748 [1], works for any +public key. However, if a different protocol requires contributory +behaviour [2,3], then the public keys must be validated against low-order +points [3,4]. To do that, the Shared function performs this validation +internally and returns false when the public key is invalid (i.e., it +is a low-order point). + +References: + - [1] RFC7748 by Langley, Hamburg, Turner (https://rfc-editor.org/rfc/rfc7748.txt) + - [2] Curve25519 by Bernstein (https://cr.yp.to/ecdh.html) + - [3] Bernstein (https://cr.yp.to/ecdh.html#validate) + - [4] Cremers&Jackson (https://eprint.iacr.org/2019/526) +*/ +package x448 diff --git a/vendor/github.com/cloudflare/circl/dh/x448/key.go b/vendor/github.com/cloudflare/circl/dh/x448/key.go new file mode 100644 index 0000000000000..2fdde51168a90 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/key.go @@ -0,0 +1,46 @@ +package x448 + +import ( + "crypto/subtle" + + fp "github.com/cloudflare/circl/math/fp448" +) + +// Size is the length in bytes of a X448 key. +const Size = 56 + +// Key represents a X448 key. +type Key [Size]byte + +func (k *Key) clamp(in *Key) *Key { + *k = *in + k[0] &= 252 + k[55] |= 128 + return k +} + +// isValidPubKey verifies if the public key is not a low-order point. +func (k *Key) isValidPubKey() bool { + fp.Modp((*fp.Elt)(k)) + var isLowOrder int + for _, P := range lowOrderPoints { + isLowOrder |= subtle.ConstantTimeCompare(P[:], k[:]) + } + return isLowOrder == 0 +} + +// KeyGen obtains a public key given a secret key. +func KeyGen(public, secret *Key) { + ladderJoye(public.clamp(secret)) +} + +// Shared calculates Alice's shared key from Alice's secret key and Bob's +// public key returning true on success. A failure case happens when the public +// key is a low-order point, thus the shared key is all-zeros and the function +// returns false. +func Shared(shared, secret, public *Key) bool { + validPk := *public + ok := validPk.isValidPubKey() + ladderMontgomery(shared.clamp(secret), &validPk) + return ok +} diff --git a/vendor/github.com/cloudflare/circl/dh/x448/table.go b/vendor/github.com/cloudflare/circl/dh/x448/table.go new file mode 100644 index 0000000000000..eef53c30f80ed --- /dev/null +++ b/vendor/github.com/cloudflare/circl/dh/x448/table.go @@ -0,0 +1,460 @@ +package x448 + +import fp "github.com/cloudflare/circl/math/fp448" + +// tableGenerator contains the set of points: +// +// t[i] = (xi+1)/(xi-1), +// +// where (xi,yi) = 2^iG and G is the generator point +// Size = (448)*(448/8) = 25088 bytes. +var tableGenerator = [448 * fp.Size]byte{ + /* (2^ 0)P */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + /* (2^ 1)P */ 0x37, 0xfa, 0xaa, 0x0d, 0x86, 0xa6, 0x24, 0xe9, 0x6c, 0x95, 0x08, 0x34, 0xba, 0x1a, 0x81, 0x3a, 0xae, 0x01, 0xa5, 0xa7, 0x05, 0x85, 0x96, 0x00, 0x06, 0x5a, 0xd7, 0xff, 0xee, 0x8e, 0x8f, 0x94, 0xd2, 0xdc, 0xd7, 0xfc, 0xe7, 0xe5, 0x99, 0x1d, 0x05, 0x46, 0x43, 0xe8, 0xbc, 0x12, 0xb7, 0xeb, 0x30, 0x5e, 0x7a, 0x85, 0x68, 0xed, 0x9d, 0x28, + /* (2^ 2)P */ 0xf1, 0x7d, 0x08, 0x2b, 0x32, 0x4a, 0x62, 0x80, 0x36, 0xe7, 0xa4, 0x76, 0x5a, 0x2a, 0x1e, 0xf7, 0x9e, 0x3c, 0x40, 0x46, 0x9a, 0x1b, 0x61, 0xc1, 0xbf, 0x1a, 0x1b, 0xae, 0x91, 0x80, 0xa3, 0x76, 0x6c, 0xd4, 0x8f, 0xa4, 0xee, 0x26, 0x39, 0x23, 0xa4, 0x80, 0xf4, 0x66, 0x92, 0xe4, 0xe1, 0x18, 0x76, 0xc5, 0xe2, 0x19, 0x87, 0xd5, 0xc3, 0xe8, + /* (2^ 3)P */ 0xfb, 0xc9, 0xf0, 0x07, 0xf2, 0x93, 0xd8, 0x50, 0x36, 0xed, 0xfb, 0xbd, 0xb2, 0xd3, 0xfc, 0xdf, 0xd5, 0x2a, 0x6e, 0x26, 0x09, 0xce, 0xd4, 0x07, 0x64, 0x9f, 0x40, 0x74, 0xad, 0x98, 0x2f, 0x1c, 0xb6, 0xdc, 0x2d, 0x42, 0xff, 0xbf, 0x97, 0xd8, 0xdb, 0xef, 0x99, 0xca, 0x73, 0x99, 0x1a, 0x04, 0x3b, 0x56, 0x2c, 0x1f, 0x87, 0x9d, 0x9f, 0x03, + /* (2^ 4)P */ 0x4c, 0x35, 0x97, 0xf7, 0x81, 0x2c, 0x84, 0xa6, 0xe0, 0xcb, 0xce, 0x37, 0x4c, 0x21, 0x1c, 0x67, 0xfa, 0xab, 0x18, 0x4d, 0xef, 0xd0, 0xf0, 0x44, 0xa9, 0xfb, 0xc0, 0x8e, 0xda, 0x57, 0xa1, 0xd8, 0xeb, 0x87, 0xf4, 0x17, 0xea, 0x66, 0x0f, 0x16, 0xea, 0xcd, 0x5f, 0x3e, 0x88, 0xea, 0x09, 0x68, 0x40, 0xdf, 0x43, 0xcc, 0x54, 0x61, 0x58, 0xaa, + /* (2^ 5)P */ 0x8d, 0xe7, 0x59, 0xd7, 0x5e, 0x63, 0x37, 0xa7, 0x3f, 0xd1, 0x49, 0x85, 0x01, 0xdd, 0x5e, 0xb3, 0xe6, 0x29, 0xcb, 0x25, 0x93, 0xdd, 0x08, 0x96, 0x83, 0x52, 0x76, 0x85, 0xf5, 0x5d, 0x02, 0xbf, 0xe9, 0x6d, 0x15, 0x27, 0xc1, 0x09, 0xd1, 0x14, 0x4d, 0x6e, 0xe8, 0xaf, 0x59, 0x58, 0x34, 0x9d, 0x2a, 0x99, 0x85, 0x26, 0xbe, 0x4b, 0x1e, 0xb9, + /* (2^ 6)P */ 0x8d, 0xce, 0x94, 0xe2, 0x18, 0x56, 0x0d, 0x82, 0x8e, 0xdf, 0x85, 0x01, 0x8f, 0x93, 0x3c, 0xc6, 0xbd, 0x61, 0xfb, 0xf4, 0x22, 0xc5, 0x16, 0x87, 0xd1, 0xb1, 0x9e, 0x09, 0xc5, 0x83, 0x2e, 0x4a, 0x07, 0x88, 0xee, 0xe0, 0x29, 0x8d, 0x2e, 0x1f, 0x88, 0xad, 0xfd, 0x18, 0x93, 0xb7, 0xed, 0x42, 0x86, 0x78, 0xf0, 0xb8, 0x70, 0xbe, 0x01, 0x67, + /* (2^ 7)P */ 0xdf, 0x62, 0x2d, 0x94, 0xc7, 0x35, 0x23, 0xda, 0x27, 0xbb, 0x2b, 0xdb, 0x30, 0x80, 0x68, 0x16, 0xa3, 0xae, 0xd7, 0xd2, 0xa7, 0x7c, 0xbf, 0x6a, 0x1d, 0x83, 0xde, 0x96, 0x0a, 0x43, 0xb6, 0x30, 0x37, 0xd6, 0xee, 0x63, 0x59, 0x9a, 0xbf, 0xa3, 0x30, 0x6c, 0xaf, 0x0c, 0xee, 0x3d, 0xcb, 0x35, 0x4b, 0x55, 0x5f, 0x84, 0x85, 0xcb, 0x4f, 0x1e, + /* (2^ 8)P */ 0x9d, 0x04, 0x68, 0x89, 0xa4, 0xa9, 0x0d, 0x87, 0xc1, 0x70, 0xf1, 0xeb, 0xfb, 0x47, 0x0a, 0xf0, 0xde, 0x67, 0xb7, 0x94, 0xcd, 0x36, 0x43, 0xa5, 0x49, 0x43, 0x67, 0xc3, 0xee, 0x3c, 0x6b, 0xec, 0xd0, 0x1a, 0xf4, 0xad, 0xef, 0x06, 0x4a, 0xe8, 0x46, 0x24, 0xd7, 0x93, 0xbf, 0xf0, 0xe3, 0x81, 0x61, 0xec, 0xea, 0x64, 0xfe, 0x67, 0xeb, 0xc7, + /* (2^ 9)P */ 0x95, 0x45, 0x79, 0xcf, 0x2c, 0xfd, 0x9b, 0xfe, 0x84, 0x46, 0x4b, 0x8f, 0xa1, 0xcf, 0xc3, 0x04, 0x94, 0x78, 0xdb, 0xc9, 0xa6, 0x01, 0x75, 0xa4, 0xb4, 0x93, 0x72, 0x43, 0xa7, 0x7d, 0xda, 0x31, 0x38, 0x54, 0xab, 0x4e, 0x3f, 0x89, 0xa6, 0xab, 0x57, 0xc0, 0x16, 0x65, 0xdb, 0x92, 0x96, 0xe4, 0xc8, 0xae, 0xe7, 0x4c, 0x7a, 0xeb, 0xbb, 0x5a, + /* (2^ 10)P */ 0xbe, 0xfe, 0x86, 0xc3, 0x97, 0xe0, 0x6a, 0x18, 0x20, 0x21, 0xca, 0x22, 0x55, 0xa1, 0xeb, 0xf5, 0x74, 0xe5, 0xc9, 0x59, 0xa7, 0x92, 0x65, 0x15, 0x08, 0x71, 0xd1, 0x09, 0x7e, 0x83, 0xfc, 0xbc, 0x5a, 0x93, 0x38, 0x0d, 0x43, 0x42, 0xfd, 0x76, 0x30, 0xe8, 0x63, 0x60, 0x09, 0x8d, 0x6c, 0xd3, 0xf8, 0x56, 0x3d, 0x68, 0x47, 0xab, 0xa0, 0x1d, + /* (2^ 11)P */ 0x38, 0x50, 0x1c, 0xb1, 0xac, 0x88, 0x8f, 0x38, 0xe3, 0x69, 0xe6, 0xfc, 0x4f, 0x8f, 0xe1, 0x9b, 0xb1, 0x1a, 0x09, 0x39, 0x19, 0xdf, 0xcd, 0x98, 0x7b, 0x64, 0x42, 0xf6, 0x11, 0xea, 0xc7, 0xe8, 0x92, 0x65, 0x00, 0x2c, 0x75, 0xb5, 0x94, 0x1e, 0x5b, 0xa6, 0x66, 0x81, 0x77, 0xf3, 0x39, 0x94, 0xac, 0xbd, 0xe4, 0x2a, 0x66, 0x84, 0x9c, 0x60, + /* (2^ 12)P */ 0xb5, 0xb6, 0xd9, 0x03, 0x67, 0xa4, 0xa8, 0x0a, 0x4a, 0x2b, 0x9d, 0xfa, 0x13, 0xe1, 0x99, 0x25, 0x4a, 0x5c, 0x67, 0xb9, 0xb2, 0xb7, 0xdd, 0x1e, 0xaf, 0xeb, 0x63, 0x41, 0xb6, 0xb9, 0xa0, 0x87, 0x0a, 0xe0, 0x06, 0x07, 0xaa, 0x97, 0xf8, 0xf9, 0x38, 0x4f, 0xdf, 0x0c, 0x40, 0x7c, 0xc3, 0x98, 0xa9, 0x74, 0xf1, 0x5d, 0xda, 0xd1, 0xc0, 0x0a, + /* (2^ 13)P */ 0xf2, 0x0a, 0xab, 0xab, 0x94, 0x50, 0xf0, 0xa3, 0x6f, 0xc6, 0x66, 0xba, 0xa6, 0xdc, 0x44, 0xdd, 0xd6, 0x08, 0xf4, 0xd3, 0xed, 0xb1, 0x40, 0x93, 0xee, 0xf6, 0xb8, 0x8e, 0xb4, 0x7c, 0xb9, 0x82, 0xc9, 0x9d, 0x45, 0x3b, 0x8e, 0x10, 0xcb, 0x70, 0x1e, 0xba, 0x3c, 0x62, 0x50, 0xda, 0xa9, 0x93, 0xb5, 0xd7, 0xd0, 0x6f, 0x29, 0x52, 0x95, 0xae, + /* (2^ 14)P */ 0x14, 0x68, 0x69, 0x23, 0xa8, 0x44, 0x87, 0x9e, 0x22, 0x91, 0xe8, 0x92, 0xdf, 0xf7, 0xae, 0xba, 0x1c, 0x96, 0xe1, 0xc3, 0x94, 0xed, 0x6c, 0x95, 0xae, 0x96, 0xa7, 0x15, 0x9f, 0xf1, 0x17, 0x11, 0x92, 0x42, 0xd5, 0xcd, 0x18, 0xe7, 0xa9, 0xb5, 0x2f, 0xcd, 0xde, 0x6c, 0xc9, 0x7d, 0xfc, 0x7e, 0xbd, 0x7f, 0x10, 0x3d, 0x01, 0x00, 0x8d, 0x95, + /* (2^ 15)P */ 0x3b, 0x76, 0x72, 0xae, 0xaf, 0x84, 0xf2, 0xf7, 0xd1, 0x6d, 0x13, 0x9c, 0x47, 0xe1, 0xb7, 0xa3, 0x19, 0x16, 0xee, 0x75, 0x45, 0xf6, 0x1a, 0x7b, 0x78, 0x49, 0x79, 0x05, 0x86, 0xf0, 0x7f, 0x9f, 0xfc, 0xc4, 0xbd, 0x86, 0xf3, 0x41, 0xa7, 0xfe, 0x01, 0xd5, 0x67, 0x16, 0x10, 0x5b, 0xa5, 0x16, 0xf3, 0x7f, 0x60, 0xce, 0xd2, 0x0c, 0x8e, 0x4b, + /* (2^ 16)P */ 0x4a, 0x07, 0x99, 0x4a, 0x0f, 0x74, 0x91, 0x14, 0x68, 0xb9, 0x48, 0xb7, 0x44, 0x77, 0x9b, 0x4a, 0xe0, 0x68, 0x0e, 0x43, 0x4d, 0x98, 0x98, 0xbf, 0xa8, 0x3a, 0xb7, 0x6d, 0x2a, 0x9a, 0x77, 0x5f, 0x62, 0xf5, 0x6b, 0x4a, 0xb7, 0x7d, 0xe5, 0x09, 0x6b, 0xc0, 0x8b, 0x9c, 0x88, 0x37, 0x33, 0xf2, 0x41, 0xac, 0x22, 0x1f, 0xcf, 0x3b, 0x82, 0x34, + /* (2^ 17)P */ 0x00, 0xc3, 0x78, 0x42, 0x32, 0x2e, 0xdc, 0xda, 0xb1, 0x96, 0x21, 0xa4, 0xe4, 0xbb, 0xe9, 0x9d, 0xbb, 0x0f, 0x93, 0xed, 0x26, 0x3d, 0xb5, 0xdb, 0x94, 0x31, 0x37, 0x07, 0xa2, 0xb2, 0xd5, 0x99, 0x0d, 0x93, 0xe1, 0xce, 0x3f, 0x0b, 0x96, 0x82, 0x47, 0xfe, 0x60, 0x6f, 0x8f, 0x61, 0x88, 0xd7, 0x05, 0x95, 0x0b, 0x46, 0x06, 0xb7, 0x32, 0x06, + /* (2^ 18)P */ 0x44, 0xf5, 0x34, 0xdf, 0x2f, 0x9c, 0x5d, 0x9f, 0x53, 0x5c, 0x42, 0x8f, 0xc9, 0xdc, 0xd8, 0x40, 0xa2, 0xe7, 0x6a, 0x4a, 0x05, 0xf7, 0x86, 0x77, 0x2b, 0xae, 0x37, 0xed, 0x48, 0xfb, 0xf7, 0x62, 0x7c, 0x17, 0x59, 0x92, 0x41, 0x61, 0x93, 0x38, 0x30, 0xd1, 0xef, 0x54, 0x54, 0x03, 0x17, 0x57, 0x91, 0x15, 0x11, 0x33, 0xb5, 0xfa, 0xfb, 0x17, + /* (2^ 19)P */ 0x29, 0xbb, 0xd4, 0xb4, 0x9c, 0xf1, 0x72, 0x94, 0xce, 0x6a, 0x29, 0xa8, 0x89, 0x18, 0x19, 0xf7, 0xb7, 0xcc, 0xee, 0x9a, 0x02, 0xe3, 0xc0, 0xb1, 0xe0, 0xee, 0x83, 0x78, 0xb4, 0x9e, 0x07, 0x87, 0xdf, 0xb0, 0x82, 0x26, 0x4e, 0xa4, 0x0c, 0x33, 0xaf, 0x40, 0x59, 0xb6, 0xdd, 0x52, 0x45, 0xf0, 0xb4, 0xf6, 0xe8, 0x4e, 0x4e, 0x79, 0x1a, 0x5d, + /* (2^ 20)P */ 0x27, 0x33, 0x4d, 0x4c, 0x6b, 0x4f, 0x75, 0xb1, 0xbc, 0x1f, 0xab, 0x5b, 0x2b, 0xf0, 0x1c, 0x57, 0x86, 0xdd, 0xfd, 0x60, 0xb0, 0x8c, 0xe7, 0x9a, 0xe5, 0x5c, 0xeb, 0x11, 0x3a, 0xda, 0x22, 0x25, 0x99, 0x06, 0x8d, 0xf4, 0xaf, 0x29, 0x7a, 0xc9, 0xe5, 0xd2, 0x16, 0x9e, 0xd4, 0x63, 0x1d, 0x64, 0xa6, 0x47, 0x96, 0x37, 0x6f, 0x93, 0x2c, 0xcc, + /* (2^ 21)P */ 0xc1, 0x94, 0x74, 0x86, 0x75, 0xf2, 0x91, 0x58, 0x23, 0x85, 0x63, 0x76, 0x54, 0xc7, 0xb4, 0x8c, 0xbc, 0x4e, 0xc4, 0xa7, 0xba, 0xa0, 0x55, 0x26, 0x71, 0xd5, 0x33, 0x72, 0xc9, 0xad, 0x1e, 0xf9, 0x5d, 0x78, 0x70, 0x93, 0x4e, 0x85, 0xfc, 0x39, 0x06, 0x73, 0x76, 0xff, 0xe8, 0x64, 0x69, 0x42, 0x45, 0xb2, 0x69, 0xb5, 0x32, 0xe7, 0x2c, 0xde, + /* (2^ 22)P */ 0xde, 0x16, 0xd8, 0x33, 0x49, 0x32, 0xe9, 0x0e, 0x3a, 0x60, 0xee, 0x2e, 0x24, 0x75, 0xe3, 0x9c, 0x92, 0x07, 0xdb, 0xad, 0x92, 0xf5, 0x11, 0xdf, 0xdb, 0xb0, 0x17, 0x5c, 0xd6, 0x1a, 0x70, 0x00, 0xb7, 0xe2, 0x18, 0xec, 0xdc, 0xc2, 0x02, 0x93, 0xb3, 0xc8, 0x3f, 0x4f, 0x1b, 0x96, 0xe6, 0x33, 0x8c, 0xfb, 0xcc, 0xa5, 0x4e, 0xe8, 0xe7, 0x11, + /* (2^ 23)P */ 0x05, 0x7a, 0x74, 0x52, 0xf8, 0xdf, 0x0d, 0x7c, 0x6a, 0x1a, 0x4e, 0x9a, 0x02, 0x1d, 0xae, 0x77, 0xf8, 0x8e, 0xf9, 0xa2, 0x38, 0x54, 0x50, 0xb2, 0x2c, 0x08, 0x9d, 0x9b, 0x9f, 0xfb, 0x2b, 0x06, 0xde, 0x9d, 0xc2, 0x03, 0x0b, 0x22, 0x2b, 0x10, 0x5b, 0x3a, 0x73, 0x29, 0x8e, 0x3e, 0x37, 0x08, 0x2c, 0x3b, 0xf8, 0x80, 0xc1, 0x66, 0x1e, 0x98, + /* (2^ 24)P */ 0xd8, 0xd6, 0x3e, 0xcd, 0x63, 0x8c, 0x2b, 0x41, 0x81, 0xc0, 0x0c, 0x06, 0x87, 0xd6, 0xe7, 0x92, 0xfe, 0xf1, 0x0c, 0x4a, 0x84, 0x5b, 0xaf, 0x40, 0x53, 0x6f, 0x60, 0xd6, 0x6b, 0x76, 0x4b, 0xc2, 0xad, 0xc9, 0xb6, 0xb6, 0x6a, 0xa2, 0xb3, 0xf5, 0xf5, 0xc2, 0x55, 0x83, 0xb2, 0xd3, 0xe9, 0x41, 0x6c, 0x63, 0x51, 0xb8, 0x81, 0x74, 0xc8, 0x2c, + /* (2^ 25)P */ 0xb2, 0xaf, 0x1c, 0xee, 0x07, 0xb0, 0x58, 0xa8, 0x2c, 0x6a, 0xc9, 0x2d, 0x62, 0x28, 0x75, 0x0c, 0x40, 0xb6, 0x11, 0x33, 0x96, 0x80, 0x28, 0x6d, 0xd5, 0x9e, 0x87, 0x90, 0x01, 0x66, 0x1d, 0x1c, 0xf8, 0xb4, 0x92, 0xac, 0x38, 0x18, 0x05, 0xc2, 0x4c, 0x4b, 0x54, 0x7d, 0x80, 0x46, 0x87, 0x2d, 0x99, 0x8e, 0x70, 0x80, 0x69, 0x71, 0x8b, 0xed, + /* (2^ 26)P */ 0x37, 0xa7, 0x6b, 0x71, 0x36, 0x75, 0x8e, 0xff, 0x0f, 0x42, 0xda, 0x5a, 0x46, 0xa6, 0x97, 0x79, 0x7e, 0x30, 0xb3, 0x8f, 0xc7, 0x3a, 0xa0, 0xcb, 0x1d, 0x9c, 0x78, 0x77, 0x36, 0xc2, 0xe7, 0xf4, 0x2f, 0x29, 0x07, 0xb1, 0x07, 0xfd, 0xed, 0x1b, 0x39, 0x77, 0x06, 0x38, 0x77, 0x0f, 0x50, 0x31, 0x12, 0xbf, 0x92, 0xbf, 0x72, 0x79, 0x54, 0xa9, + /* (2^ 27)P */ 0xbd, 0x4d, 0x46, 0x6b, 0x1a, 0x80, 0x46, 0x2d, 0xed, 0xfd, 0x64, 0x6d, 0x94, 0xbc, 0x4a, 0x6e, 0x0c, 0x12, 0xf6, 0x12, 0xab, 0x54, 0x88, 0xd3, 0x85, 0xac, 0x51, 0xae, 0x6f, 0xca, 0xc4, 0xb7, 0xec, 0x22, 0x54, 0x6d, 0x80, 0xb2, 0x1c, 0x63, 0x33, 0x76, 0x6b, 0x8e, 0x6d, 0x59, 0xcd, 0x73, 0x92, 0x5f, 0xff, 0xad, 0x10, 0x35, 0x70, 0x5f, + /* (2^ 28)P */ 0xb3, 0x84, 0xde, 0xc8, 0x04, 0x43, 0x63, 0xfa, 0x29, 0xd9, 0xf0, 0x69, 0x65, 0x5a, 0x0c, 0xe8, 0x2e, 0x0b, 0xfe, 0xb0, 0x7a, 0x42, 0xb3, 0xc3, 0xfc, 0xe6, 0xb8, 0x92, 0x29, 0xae, 0xed, 0xec, 0xd5, 0xe8, 0x4a, 0xa1, 0xbd, 0x3b, 0xd3, 0xc0, 0x07, 0xab, 0x65, 0x65, 0x35, 0x9a, 0xa6, 0x5e, 0x78, 0x18, 0x76, 0x1c, 0x15, 0x49, 0xe6, 0x75, + /* (2^ 29)P */ 0x45, 0xb3, 0x92, 0xa9, 0xc3, 0xb8, 0x11, 0x68, 0x64, 0x3a, 0x83, 0x5d, 0xa8, 0x94, 0x6a, 0x9d, 0xaa, 0x27, 0x9f, 0x98, 0x5d, 0xc0, 0x29, 0xf0, 0xc0, 0x4b, 0x14, 0x3c, 0x05, 0xe7, 0xf8, 0xbd, 0x38, 0x22, 0x96, 0x75, 0x65, 0x5e, 0x0d, 0x3f, 0xbb, 0x6f, 0xe8, 0x3f, 0x96, 0x76, 0x9f, 0xba, 0xd9, 0x44, 0x92, 0x96, 0x22, 0xe7, 0x52, 0xe7, + /* (2^ 30)P */ 0xf4, 0xa3, 0x95, 0x90, 0x47, 0xdf, 0x7d, 0xdc, 0xf4, 0x13, 0x87, 0x67, 0x7d, 0x4f, 0x9d, 0xa0, 0x00, 0x46, 0x72, 0x08, 0xc3, 0xa2, 0x7a, 0x3e, 0xe7, 0x6d, 0x52, 0x7c, 0x11, 0x36, 0x50, 0x83, 0x89, 0x64, 0xcb, 0x1f, 0x08, 0x83, 0x46, 0xcb, 0xac, 0xa6, 0xd8, 0x9c, 0x1b, 0xe8, 0x05, 0x47, 0xc7, 0x26, 0x06, 0x83, 0x39, 0xe9, 0xb1, 0x1c, + /* (2^ 31)P */ 0x11, 0xe8, 0xc8, 0x42, 0xbf, 0x30, 0x9c, 0xa3, 0xf1, 0x85, 0x96, 0x95, 0x4f, 0x4f, 0x52, 0xa2, 0xf5, 0x8b, 0x68, 0x24, 0x16, 0xac, 0x9b, 0xa9, 0x27, 0x28, 0x0e, 0x84, 0x03, 0x46, 0x22, 0x5f, 0xf7, 0x0d, 0xa6, 0x85, 0x88, 0xc1, 0x45, 0x4b, 0x85, 0x1a, 0x10, 0x7f, 0xc9, 0x94, 0x20, 0xb0, 0x04, 0x28, 0x12, 0x30, 0xb9, 0xe6, 0x40, 0x6b, + /* (2^ 32)P */ 0xac, 0x1b, 0x57, 0xb6, 0x42, 0xdb, 0x81, 0x8d, 0x76, 0xfd, 0x9b, 0x1c, 0x29, 0x30, 0xd5, 0x3a, 0xcc, 0x53, 0xd9, 0x26, 0x7a, 0x0f, 0x9c, 0x2e, 0x79, 0xf5, 0x62, 0xeb, 0x61, 0x9d, 0x9b, 0x80, 0x39, 0xcd, 0x60, 0x2e, 0x1f, 0x08, 0x22, 0xbc, 0x19, 0xb3, 0x2a, 0x43, 0x44, 0xf2, 0x4e, 0x66, 0xf4, 0x36, 0xa6, 0xa7, 0xbc, 0xa4, 0x15, 0x7e, + /* (2^ 33)P */ 0xc1, 0x90, 0x8a, 0xde, 0xff, 0x78, 0xc3, 0x73, 0x16, 0xee, 0x76, 0xa0, 0x84, 0x60, 0x8d, 0xe6, 0x82, 0x0f, 0xde, 0x4e, 0xc5, 0x99, 0x34, 0x06, 0x90, 0x44, 0x55, 0xf8, 0x91, 0xd8, 0xe1, 0xe4, 0x2c, 0x8a, 0xde, 0x94, 0x1e, 0x78, 0x25, 0x3d, 0xfd, 0xd8, 0x59, 0x7d, 0xaf, 0x6e, 0xbe, 0x96, 0xbe, 0x3c, 0x16, 0x23, 0x0f, 0x4c, 0xa4, 0x28, + /* (2^ 34)P */ 0xba, 0x11, 0x35, 0x57, 0x03, 0xb6, 0xf4, 0x24, 0x89, 0xb8, 0x5a, 0x0d, 0x50, 0x9c, 0xaa, 0x51, 0x7f, 0xa4, 0x0e, 0xfc, 0x71, 0xb3, 0x3b, 0xf1, 0x96, 0x50, 0x23, 0x15, 0xf5, 0xf5, 0xd4, 0x23, 0xdc, 0x8b, 0x26, 0x9e, 0xae, 0xb7, 0x50, 0xcd, 0xc4, 0x25, 0xf6, 0x75, 0x40, 0x9c, 0x37, 0x79, 0x33, 0x60, 0xd4, 0x4b, 0x13, 0x32, 0xee, 0xe2, + /* (2^ 35)P */ 0x43, 0xb8, 0x56, 0x59, 0xf0, 0x68, 0x23, 0xb3, 0xea, 0x70, 0x58, 0x4c, 0x1e, 0x5a, 0x16, 0x54, 0x03, 0xb2, 0xf4, 0x73, 0xb6, 0xd9, 0x5c, 0x9c, 0x6f, 0xcf, 0x82, 0x2e, 0x54, 0x15, 0x46, 0x2c, 0xa3, 0xda, 0x4e, 0x87, 0xf5, 0x2b, 0xba, 0x91, 0xa3, 0xa0, 0x89, 0xba, 0x48, 0x2b, 0xfa, 0x64, 0x02, 0x7f, 0x78, 0x03, 0xd1, 0xe8, 0x3b, 0xe9, + /* (2^ 36)P */ 0x15, 0xa4, 0x71, 0xd4, 0x0c, 0x24, 0xe9, 0x07, 0xa1, 0x43, 0xf4, 0x7f, 0xbb, 0xa2, 0xa6, 0x6b, 0xfa, 0xb7, 0xea, 0x58, 0xd1, 0x96, 0xb0, 0x24, 0x5c, 0xc7, 0x37, 0x4e, 0x60, 0x0f, 0x40, 0xf2, 0x2f, 0x44, 0x70, 0xea, 0x80, 0x63, 0xfe, 0xfc, 0x46, 0x59, 0x12, 0x27, 0xb5, 0x27, 0xfd, 0xb7, 0x73, 0x0b, 0xca, 0x8b, 0xc2, 0xd3, 0x71, 0x08, + /* (2^ 37)P */ 0x26, 0x0e, 0xd7, 0x52, 0x6f, 0xf1, 0xf2, 0x9d, 0xb8, 0x3d, 0xbd, 0xd4, 0x75, 0x97, 0xd8, 0xbf, 0xa8, 0x86, 0x96, 0xa5, 0x80, 0xa0, 0x45, 0x75, 0xf6, 0x77, 0x71, 0xdb, 0x77, 0x96, 0x55, 0x99, 0x31, 0xd0, 0x4f, 0x34, 0xf4, 0x35, 0x39, 0x41, 0xd3, 0x7d, 0xf7, 0xe2, 0x74, 0xde, 0xbe, 0x5b, 0x1f, 0x39, 0x10, 0x21, 0xa3, 0x4d, 0x3b, 0xc8, + /* (2^ 38)P */ 0x04, 0x00, 0x2a, 0x45, 0xb2, 0xaf, 0x9b, 0x18, 0x6a, 0xeb, 0x96, 0x28, 0xa4, 0x77, 0xd0, 0x13, 0xcf, 0x17, 0x65, 0xe8, 0xc5, 0x81, 0x28, 0xad, 0x39, 0x7a, 0x0b, 0xaa, 0x55, 0x2b, 0xf3, 0xfc, 0x86, 0x40, 0xad, 0x0d, 0x1e, 0x28, 0xa2, 0x2d, 0xc5, 0xd6, 0x04, 0x15, 0xa2, 0x30, 0x3d, 0x12, 0x8e, 0xd6, 0xb5, 0xf7, 0x69, 0xbb, 0x84, 0x20, + /* (2^ 39)P */ 0xd7, 0x7a, 0x77, 0x2c, 0xfb, 0x81, 0x80, 0xe9, 0x1e, 0xc6, 0x36, 0x31, 0x79, 0xc3, 0x7c, 0xa9, 0x57, 0x6b, 0xb5, 0x70, 0xfb, 0xe4, 0xa1, 0xff, 0xfd, 0x21, 0xa5, 0x7c, 0xfa, 0x44, 0xba, 0x0d, 0x96, 0x3d, 0xc4, 0x5c, 0x39, 0x52, 0x87, 0xd7, 0x22, 0x0f, 0x52, 0x88, 0x91, 0x87, 0x96, 0xac, 0xfa, 0x3b, 0xdf, 0xdc, 0x83, 0x8c, 0x99, 0x29, + /* (2^ 40)P */ 0x98, 0x6b, 0x3a, 0x8d, 0x83, 0x17, 0xe1, 0x62, 0xd8, 0x80, 0x4c, 0x97, 0xce, 0x6b, 0xaa, 0x10, 0xa7, 0xc4, 0xe9, 0xeb, 0xa5, 0xfb, 0xc9, 0xdd, 0x2d, 0xeb, 0xfc, 0x9a, 0x71, 0xcd, 0x68, 0x6e, 0xc0, 0x35, 0x64, 0x62, 0x1b, 0x95, 0x12, 0xe8, 0x53, 0xec, 0xf0, 0xf4, 0x86, 0x86, 0x78, 0x18, 0xc4, 0xc6, 0xbc, 0x5a, 0x59, 0x8f, 0x7c, 0x7e, + /* (2^ 41)P */ 0x7f, 0xd7, 0x1e, 0xc5, 0x83, 0xdc, 0x1f, 0xbe, 0x0b, 0xcf, 0x2e, 0x01, 0x01, 0xed, 0xac, 0x17, 0x3b, 0xed, 0xa4, 0x30, 0x96, 0x0e, 0x14, 0x7e, 0x19, 0x2b, 0xa5, 0x67, 0x1e, 0xb3, 0x34, 0x03, 0xa8, 0xbb, 0x0a, 0x7d, 0x08, 0x2d, 0xd5, 0x53, 0x19, 0x6f, 0x13, 0xd5, 0xc0, 0x90, 0x8a, 0xcc, 0xc9, 0x5c, 0xab, 0x24, 0xd7, 0x03, 0xf6, 0x57, + /* (2^ 42)P */ 0x49, 0xcb, 0xb4, 0x96, 0x5f, 0xa6, 0xf8, 0x71, 0x6f, 0x59, 0xad, 0x05, 0x24, 0x2d, 0xaf, 0x67, 0xa8, 0xbe, 0x95, 0xdf, 0x0d, 0x28, 0x5a, 0x7f, 0x6e, 0x87, 0x8c, 0x6e, 0x67, 0x0c, 0xf4, 0xe0, 0x1c, 0x30, 0xc2, 0x66, 0xae, 0x20, 0xa1, 0x34, 0xec, 0x9c, 0xbc, 0xae, 0x3d, 0xa1, 0x28, 0x28, 0x95, 0x1d, 0xc9, 0x3a, 0xa8, 0xfd, 0xfc, 0xa1, + /* (2^ 43)P */ 0xe2, 0x2b, 0x9d, 0xed, 0x02, 0x99, 0x67, 0xbb, 0x2e, 0x16, 0x62, 0x05, 0x70, 0xc7, 0x27, 0xb9, 0x1c, 0x3f, 0xf2, 0x11, 0x01, 0xd8, 0x51, 0xa4, 0x18, 0x92, 0xa9, 0x5d, 0xfb, 0xa9, 0xe4, 0x42, 0xba, 0x38, 0x34, 0x1a, 0x4a, 0xc5, 0x6a, 0x37, 0xde, 0xa7, 0x0c, 0xb4, 0x7e, 0x7f, 0xde, 0xa6, 0xee, 0xcd, 0x55, 0x57, 0x05, 0x06, 0xfd, 0x5d, + /* (2^ 44)P */ 0x2f, 0x32, 0xcf, 0x2e, 0x2c, 0x7b, 0xbe, 0x9a, 0x0c, 0x57, 0x35, 0xf8, 0x87, 0xda, 0x9c, 0xec, 0x48, 0xf2, 0xbb, 0xe2, 0xda, 0x10, 0x58, 0x20, 0xc6, 0xd3, 0x87, 0xe9, 0xc7, 0x26, 0xd1, 0x9a, 0x46, 0x87, 0x90, 0xda, 0xdc, 0xde, 0xc3, 0xb3, 0xf2, 0xe8, 0x6f, 0x4a, 0xe6, 0xe8, 0x9d, 0x98, 0x36, 0x20, 0x03, 0x47, 0x15, 0x3f, 0x64, 0x59, + /* (2^ 45)P */ 0xd4, 0x71, 0x49, 0x0a, 0x67, 0x97, 0xaa, 0x3f, 0xf4, 0x1b, 0x3a, 0x6e, 0x5e, 0x17, 0xcc, 0x0a, 0x8f, 0x81, 0x6a, 0x41, 0x38, 0x77, 0x40, 0x8a, 0x11, 0x42, 0x62, 0xd2, 0x50, 0x32, 0x79, 0x78, 0x28, 0xc2, 0x2e, 0x10, 0x01, 0x94, 0x30, 0x4f, 0x7f, 0x18, 0x17, 0x56, 0x85, 0x4e, 0xad, 0xf7, 0xcb, 0x87, 0x3c, 0x3f, 0x50, 0x2c, 0xc0, 0xba, + /* (2^ 46)P */ 0xbc, 0x30, 0x8e, 0x65, 0x8e, 0x57, 0x5b, 0x38, 0x7a, 0xd4, 0x95, 0x52, 0x7a, 0x32, 0x59, 0x69, 0xcd, 0x9d, 0x47, 0x34, 0x5b, 0x55, 0xa5, 0x24, 0x60, 0xdd, 0xc0, 0xc1, 0x62, 0x73, 0x44, 0xae, 0x4c, 0x9c, 0x65, 0x55, 0x1b, 0x9d, 0x8a, 0x29, 0xb0, 0x1a, 0x52, 0xa8, 0xf1, 0xe6, 0x9a, 0xb3, 0xf6, 0xa3, 0xc9, 0x0a, 0x70, 0x7d, 0x0f, 0xee, + /* (2^ 47)P */ 0x77, 0xd3, 0xe5, 0x8e, 0xfa, 0x00, 0xeb, 0x1b, 0x7f, 0xdc, 0x68, 0x3f, 0x92, 0xbd, 0xb7, 0x0b, 0xb7, 0xb5, 0x24, 0xdf, 0xc5, 0x67, 0x53, 0xd4, 0x36, 0x79, 0xc4, 0x7b, 0x57, 0xbc, 0x99, 0x97, 0x60, 0xef, 0xe4, 0x01, 0xa1, 0xa7, 0xaa, 0x12, 0x36, 0x29, 0xb1, 0x03, 0xc2, 0x83, 0x1c, 0x2b, 0x83, 0xef, 0x2e, 0x2c, 0x23, 0x92, 0xfd, 0xd1, + /* (2^ 48)P */ 0x94, 0xef, 0x03, 0x59, 0xfa, 0x8a, 0x18, 0x76, 0xee, 0x58, 0x08, 0x4d, 0x44, 0xce, 0xf1, 0x52, 0x33, 0x49, 0xf6, 0x69, 0x71, 0xe3, 0xa9, 0xbc, 0x86, 0xe3, 0x43, 0xde, 0x33, 0x7b, 0x90, 0x8b, 0x3e, 0x7d, 0xd5, 0x4a, 0xf0, 0x23, 0x99, 0xa6, 0xea, 0x5f, 0x08, 0xe5, 0xb9, 0x49, 0x8b, 0x0d, 0x6a, 0x21, 0xab, 0x07, 0x62, 0xcd, 0xc4, 0xbe, + /* (2^ 49)P */ 0x61, 0xbf, 0x70, 0x14, 0xfa, 0x4e, 0x9e, 0x7c, 0x0c, 0xf8, 0xb2, 0x48, 0x71, 0x62, 0x83, 0xd6, 0xd1, 0xdc, 0x9c, 0x29, 0x66, 0xb1, 0x34, 0x9c, 0x8d, 0xe6, 0x88, 0xaf, 0xbe, 0xdc, 0x4d, 0xeb, 0xb0, 0xe7, 0x28, 0xae, 0xb2, 0x05, 0x56, 0xc6, 0x0e, 0x10, 0x26, 0xab, 0x2c, 0x59, 0x72, 0x03, 0x66, 0xfe, 0x8f, 0x2c, 0x51, 0x2d, 0xdc, 0xae, + /* (2^ 50)P */ 0xdc, 0x63, 0xf1, 0x8b, 0x5c, 0x65, 0x0b, 0xf1, 0xa6, 0x22, 0xe2, 0xd9, 0xdb, 0x49, 0xb1, 0x3c, 0x47, 0xc2, 0xfe, 0xac, 0x86, 0x07, 0x52, 0xec, 0xb0, 0x08, 0x69, 0xfb, 0xd1, 0x06, 0xdc, 0x48, 0x5c, 0x3d, 0xb2, 0x4d, 0xb8, 0x1a, 0x4e, 0xda, 0xb9, 0xc1, 0x2b, 0xab, 0x4b, 0x62, 0x81, 0x21, 0x9a, 0xfc, 0x3d, 0x39, 0x83, 0x11, 0x36, 0xeb, + /* (2^ 51)P */ 0x94, 0xf3, 0x17, 0xef, 0xf9, 0x60, 0x54, 0xc3, 0xd7, 0x27, 0x35, 0xc5, 0x98, 0x5e, 0xf6, 0x63, 0x6c, 0xa0, 0x4a, 0xd3, 0xa3, 0x98, 0xd9, 0x42, 0xe3, 0xf1, 0xf8, 0x81, 0x96, 0xa9, 0xea, 0x6d, 0x4b, 0x8e, 0x33, 0xca, 0x94, 0x0d, 0xa0, 0xf7, 0xbb, 0x64, 0xa3, 0x36, 0x6f, 0xdc, 0x5a, 0x94, 0x42, 0xca, 0x06, 0xb2, 0x2b, 0x9a, 0x9f, 0x71, + /* (2^ 52)P */ 0xec, 0xdb, 0xa6, 0x1f, 0xdf, 0x15, 0x36, 0xa3, 0xda, 0x8a, 0x7a, 0xb6, 0xa7, 0xe3, 0xaf, 0x52, 0xe0, 0x8d, 0xe8, 0xf2, 0x44, 0x20, 0xeb, 0xa1, 0x20, 0xc4, 0x65, 0x3c, 0x7c, 0x6c, 0x49, 0xed, 0x2f, 0x66, 0x23, 0x68, 0x61, 0x91, 0x40, 0x9f, 0x50, 0x19, 0xd1, 0x84, 0xa7, 0xe2, 0xed, 0x34, 0x37, 0xe3, 0xe4, 0x11, 0x7f, 0x87, 0x55, 0x0f, + /* (2^ 53)P */ 0xb3, 0xa1, 0x0f, 0xb0, 0x48, 0xc0, 0x4d, 0x96, 0xa7, 0xcf, 0x5a, 0x81, 0xb8, 0x4a, 0x46, 0xef, 0x0a, 0xd3, 0x40, 0x7e, 0x02, 0xe3, 0x63, 0xaa, 0x50, 0xd1, 0x2a, 0x37, 0x22, 0x4a, 0x7f, 0x4f, 0xb6, 0xf9, 0x01, 0x82, 0x78, 0x3d, 0x93, 0x14, 0x11, 0x8a, 0x90, 0x60, 0xcd, 0x45, 0x4e, 0x7b, 0x42, 0xb9, 0x3e, 0x6e, 0x68, 0x1f, 0x36, 0x41, + /* (2^ 54)P */ 0x13, 0x73, 0x0e, 0x4f, 0x79, 0x93, 0x9e, 0x29, 0x70, 0x7b, 0x4a, 0x59, 0x1a, 0x9a, 0xf4, 0x55, 0x08, 0xf0, 0xdb, 0x17, 0x58, 0xec, 0x64, 0xad, 0x7f, 0x29, 0xeb, 0x3f, 0x85, 0x4e, 0x60, 0x28, 0x98, 0x1f, 0x73, 0x4e, 0xe6, 0xa8, 0xab, 0xd5, 0xd6, 0xfc, 0xa1, 0x36, 0x6d, 0x15, 0xc6, 0x13, 0x83, 0xa0, 0xc2, 0x6e, 0xd9, 0xdb, 0xc9, 0xcc, + /* (2^ 55)P */ 0xff, 0xd8, 0x52, 0xa3, 0xdc, 0x99, 0xcf, 0x3e, 0x19, 0xb3, 0x68, 0xd0, 0xb5, 0x0d, 0xb8, 0xee, 0x3f, 0xef, 0x6e, 0xc0, 0x38, 0x28, 0x44, 0x92, 0x78, 0x91, 0x1a, 0x08, 0x78, 0x6c, 0x65, 0x24, 0xf3, 0xa2, 0x3d, 0xf2, 0xe5, 0x79, 0x62, 0x69, 0x29, 0xf4, 0x22, 0xc5, 0xdb, 0x6a, 0xae, 0xf4, 0x44, 0xa3, 0x6f, 0xc7, 0x86, 0xab, 0xef, 0xef, + /* (2^ 56)P */ 0xbf, 0x54, 0x9a, 0x09, 0x5d, 0x17, 0xd0, 0xde, 0xfb, 0xf5, 0xca, 0xff, 0x13, 0x20, 0x88, 0x82, 0x3a, 0xe2, 0xd0, 0x3b, 0xfb, 0x05, 0x76, 0xd1, 0xc0, 0x02, 0x71, 0x3b, 0x94, 0xe8, 0xc9, 0x84, 0xcf, 0xa4, 0xe9, 0x28, 0x7b, 0xf5, 0x09, 0xc3, 0x2b, 0x22, 0x40, 0xf1, 0x68, 0x24, 0x24, 0x7d, 0x9f, 0x6e, 0xcd, 0xfe, 0xb0, 0x19, 0x61, 0xf5, + /* (2^ 57)P */ 0xe8, 0x63, 0x51, 0xb3, 0x95, 0x6b, 0x7b, 0x74, 0x92, 0x52, 0x45, 0xa4, 0xed, 0xea, 0x0e, 0x0d, 0x2b, 0x01, 0x1e, 0x2c, 0xbc, 0x91, 0x06, 0x69, 0xdb, 0x1f, 0xb5, 0x77, 0x1d, 0x56, 0xf5, 0xb4, 0x02, 0x80, 0x49, 0x56, 0x12, 0xce, 0x86, 0x05, 0xc9, 0xd9, 0xae, 0xf3, 0x6d, 0xe6, 0x3f, 0x40, 0x52, 0xe9, 0x49, 0x2b, 0x31, 0x06, 0x86, 0x14, + /* (2^ 58)P */ 0xf5, 0x09, 0x3b, 0xd2, 0xff, 0xdf, 0x11, 0xa5, 0x1c, 0x99, 0xe8, 0x1b, 0xa4, 0x2c, 0x7d, 0x8e, 0xc8, 0xf7, 0x03, 0x46, 0xfa, 0xb6, 0xde, 0x73, 0x91, 0x7e, 0x5a, 0x7a, 0xd7, 0x9a, 0x5b, 0x80, 0x24, 0x62, 0x5e, 0x92, 0xf1, 0xa3, 0x45, 0xa3, 0x43, 0x92, 0x8a, 0x2a, 0x5b, 0x0c, 0xb4, 0xc8, 0xad, 0x1c, 0xb6, 0x6c, 0x5e, 0x81, 0x18, 0x91, + /* (2^ 59)P */ 0x96, 0xb3, 0xca, 0x2b, 0xe3, 0x7a, 0x59, 0x72, 0x17, 0x74, 0x29, 0x21, 0xe7, 0x78, 0x07, 0xad, 0xda, 0xb6, 0xcd, 0xf9, 0x27, 0x4d, 0xc8, 0xf2, 0x98, 0x22, 0xca, 0xf2, 0x33, 0x74, 0x7a, 0xdd, 0x1e, 0x71, 0xec, 0xe3, 0x3f, 0xe2, 0xa2, 0xd2, 0x38, 0x75, 0xb0, 0xd0, 0x0a, 0xcf, 0x7d, 0x36, 0xdc, 0x49, 0x38, 0x25, 0x34, 0x4f, 0x20, 0x9a, + /* (2^ 60)P */ 0x2b, 0x6e, 0x04, 0x0d, 0x4f, 0x3d, 0x3b, 0x24, 0xf6, 0x4e, 0x5e, 0x0a, 0xbd, 0x48, 0x96, 0xba, 0x81, 0x8f, 0x39, 0x82, 0x13, 0xe6, 0x72, 0xf3, 0x0f, 0xb6, 0x94, 0xf4, 0xc5, 0x90, 0x74, 0x91, 0xa8, 0xf2, 0xc9, 0xca, 0x9a, 0x4d, 0x98, 0xf2, 0xdf, 0x52, 0x4e, 0x97, 0x2f, 0xeb, 0x84, 0xd3, 0xaf, 0xc2, 0xcc, 0xfb, 0x4c, 0x26, 0x4b, 0xe4, + /* (2^ 61)P */ 0x12, 0x9e, 0xfb, 0x9d, 0x78, 0x79, 0x99, 0xdd, 0xb3, 0x0b, 0x2e, 0x56, 0x41, 0x8e, 0x3f, 0x39, 0xb8, 0x97, 0x89, 0x53, 0x9b, 0x8a, 0x3c, 0x40, 0x9d, 0xa4, 0x6c, 0x2e, 0x31, 0x71, 0xc6, 0x0a, 0x41, 0xd4, 0x95, 0x06, 0x5e, 0xc1, 0xab, 0xc2, 0x14, 0xc4, 0xc7, 0x15, 0x08, 0x3a, 0xad, 0x7a, 0xb4, 0x62, 0xa3, 0x0c, 0x90, 0xf4, 0x47, 0x08, + /* (2^ 62)P */ 0x7f, 0xec, 0x09, 0x82, 0xf5, 0x94, 0x09, 0x93, 0x32, 0xd3, 0xdc, 0x56, 0x80, 0x7b, 0x5b, 0x22, 0x80, 0x6a, 0x96, 0x72, 0xb1, 0xc2, 0xd9, 0xa1, 0x8b, 0x66, 0x42, 0x16, 0xe2, 0x07, 0xb3, 0x2d, 0xf1, 0x75, 0x35, 0x72, 0xc7, 0x98, 0xbe, 0x63, 0x3b, 0x20, 0x75, 0x05, 0xc1, 0x3e, 0x31, 0x5a, 0xf7, 0xaa, 0xae, 0x4b, 0xdb, 0x1d, 0xd0, 0x74, + /* (2^ 63)P */ 0x36, 0x5c, 0x74, 0xe6, 0x5d, 0x59, 0x3f, 0x15, 0x4b, 0x4d, 0x4e, 0x67, 0x41, 0xfe, 0x98, 0x1f, 0x49, 0x76, 0x91, 0x0f, 0x9b, 0xf4, 0xaf, 0x86, 0xaf, 0x66, 0x19, 0xed, 0x46, 0xf1, 0x05, 0x9a, 0xcc, 0xd1, 0x14, 0x1f, 0x82, 0x12, 0x8e, 0xe6, 0xf4, 0xc3, 0x42, 0x5c, 0x4e, 0x33, 0x93, 0xbe, 0x30, 0xe7, 0x64, 0xa9, 0x35, 0x00, 0x4d, 0xf9, + /* (2^ 64)P */ 0x1f, 0xc1, 0x1e, 0xb7, 0xe3, 0x7c, 0xfa, 0xa3, 0x6b, 0x76, 0xaf, 0x9c, 0x05, 0x85, 0x4a, 0xa9, 0xfb, 0xe3, 0x7e, 0xf2, 0x49, 0x56, 0xdc, 0x2f, 0x57, 0x10, 0xba, 0x37, 0xb2, 0x62, 0xf5, 0x6b, 0xe5, 0x8f, 0x0a, 0x87, 0xd1, 0x6a, 0xcb, 0x9d, 0x07, 0xd0, 0xf6, 0x38, 0x99, 0x2c, 0x61, 0x4a, 0x4e, 0xd8, 0xd2, 0x88, 0x29, 0x99, 0x11, 0x95, + /* (2^ 65)P */ 0x6f, 0xdc, 0xd5, 0xd6, 0xd6, 0xa7, 0x4c, 0x46, 0x93, 0x65, 0x62, 0x23, 0x95, 0x32, 0x9c, 0xde, 0x40, 0x41, 0x68, 0x2c, 0x18, 0x4e, 0x5a, 0x8c, 0xc0, 0xc5, 0xc5, 0xea, 0x5c, 0x45, 0x0f, 0x60, 0x78, 0x39, 0xb6, 0x36, 0x23, 0x12, 0xbc, 0x21, 0x9a, 0xf8, 0x91, 0xac, 0xc4, 0x70, 0xdf, 0x85, 0x8e, 0x3c, 0xec, 0x22, 0x04, 0x98, 0xa8, 0xaa, + /* (2^ 66)P */ 0xcc, 0x52, 0x10, 0x5b, 0x4b, 0x6c, 0xc5, 0xfa, 0x3e, 0xd4, 0xf8, 0x1c, 0x04, 0x14, 0x48, 0x33, 0xd9, 0xfc, 0x5f, 0xb0, 0xa5, 0x48, 0x8c, 0x45, 0x8a, 0xee, 0x3e, 0xa7, 0xc1, 0x2e, 0x34, 0xca, 0xf6, 0xc9, 0xeb, 0x10, 0xbb, 0xe1, 0x59, 0x84, 0x25, 0xe8, 0x81, 0x70, 0xc0, 0x09, 0x42, 0xa7, 0x3b, 0x0d, 0x33, 0x00, 0xb5, 0x77, 0xbe, 0x25, + /* (2^ 67)P */ 0xcd, 0x1f, 0xbc, 0x7d, 0xef, 0xe5, 0xca, 0x91, 0xaf, 0xa9, 0x59, 0x6a, 0x09, 0xca, 0xd6, 0x1b, 0x3d, 0x55, 0xde, 0xa2, 0x6a, 0x80, 0xd6, 0x95, 0x47, 0xe4, 0x5f, 0x68, 0x54, 0x08, 0xdf, 0x29, 0xba, 0x2a, 0x02, 0x84, 0xe8, 0xe9, 0x00, 0x77, 0x99, 0x36, 0x03, 0xf6, 0x4a, 0x3e, 0x21, 0x81, 0x7d, 0xb8, 0xa4, 0x8a, 0xa2, 0x05, 0xef, 0xbc, + /* (2^ 68)P */ 0x7c, 0x59, 0x5f, 0x66, 0xd9, 0xb7, 0x83, 0x43, 0x8a, 0xa1, 0x8d, 0x51, 0x70, 0xba, 0xf2, 0x9b, 0x95, 0xc0, 0x4b, 0x4c, 0xa0, 0x14, 0xd3, 0xa4, 0x5d, 0x4a, 0x37, 0x36, 0x97, 0x31, 0x1e, 0x12, 0xe7, 0xbb, 0x08, 0x67, 0xa5, 0x23, 0xd7, 0xfb, 0x97, 0xd8, 0x6a, 0x03, 0xb1, 0xf8, 0x7f, 0xda, 0x58, 0xd9, 0x3f, 0x73, 0x4a, 0x53, 0xe1, 0x7b, + /* (2^ 69)P */ 0x55, 0x83, 0x98, 0x78, 0x6c, 0x56, 0x5e, 0xed, 0xf7, 0x23, 0x3e, 0x4c, 0x7d, 0x09, 0x2d, 0x09, 0x9c, 0x58, 0x8b, 0x32, 0xca, 0xfe, 0xbf, 0x47, 0x03, 0xeb, 0x4d, 0xe7, 0xeb, 0x9c, 0x83, 0x05, 0x68, 0xaa, 0x80, 0x89, 0x44, 0xf9, 0xd4, 0xdc, 0xdb, 0xb1, 0xdb, 0x77, 0xac, 0xf9, 0x2a, 0xae, 0x35, 0xac, 0x74, 0xb5, 0x95, 0x62, 0x18, 0x85, + /* (2^ 70)P */ 0xab, 0x82, 0x7e, 0x10, 0xd7, 0xe6, 0x57, 0xd1, 0x66, 0x12, 0x31, 0x9c, 0x9c, 0xa6, 0x27, 0x59, 0x71, 0x2e, 0xeb, 0xa0, 0x68, 0xc5, 0x87, 0x51, 0xf4, 0xca, 0x3f, 0x98, 0x56, 0xb0, 0x89, 0xb1, 0xc7, 0x7b, 0x46, 0xb3, 0xae, 0x36, 0xf2, 0xee, 0x15, 0x1a, 0x60, 0xf4, 0x50, 0x76, 0x4f, 0xc4, 0x53, 0x0d, 0x36, 0x4d, 0x31, 0xb1, 0x20, 0x51, + /* (2^ 71)P */ 0xf7, 0x1d, 0x8c, 0x1b, 0x5e, 0xe5, 0x02, 0x6f, 0xc5, 0xa5, 0xe0, 0x5f, 0xc6, 0xb6, 0x63, 0x43, 0xaf, 0x3c, 0x19, 0x6c, 0xf4, 0xaf, 0xa4, 0x33, 0xb1, 0x0a, 0x37, 0x3d, 0xd9, 0x4d, 0xe2, 0x29, 0x24, 0x26, 0x94, 0x7c, 0x02, 0xe4, 0xe2, 0xf2, 0xbe, 0xbd, 0xac, 0x1b, 0x48, 0xb8, 0xdd, 0xe9, 0x0d, 0x9a, 0x50, 0x1a, 0x98, 0x71, 0x6e, 0xdc, + /* (2^ 72)P */ 0x9f, 0x40, 0xb1, 0xb3, 0x66, 0x28, 0x6c, 0xfe, 0xa6, 0x7d, 0xf8, 0x3e, 0xb8, 0xf3, 0xde, 0x52, 0x76, 0x52, 0xa3, 0x92, 0x98, 0x23, 0xab, 0x4f, 0x88, 0x97, 0xfc, 0x22, 0xe1, 0x6b, 0x67, 0xcd, 0x13, 0x95, 0xda, 0x65, 0xdd, 0x3b, 0x67, 0x3f, 0x5f, 0x4c, 0xf2, 0x8a, 0xad, 0x98, 0xa7, 0x94, 0x24, 0x45, 0x87, 0x11, 0x7c, 0x75, 0x79, 0x85, + /* (2^ 73)P */ 0x70, 0xbf, 0xf9, 0x3b, 0xa9, 0x44, 0x57, 0x72, 0x96, 0xc9, 0xa4, 0x98, 0x65, 0xbf, 0x87, 0xb3, 0x3a, 0x39, 0x12, 0xde, 0xe5, 0x39, 0x01, 0x4f, 0xf7, 0xc0, 0x71, 0x52, 0x36, 0x85, 0xb3, 0x18, 0xf8, 0x14, 0xc0, 0x6d, 0xae, 0x9e, 0x4f, 0xb0, 0x72, 0x87, 0xac, 0x5c, 0xd1, 0x6c, 0x41, 0x6c, 0x90, 0x9d, 0x22, 0x81, 0xe4, 0x2b, 0xea, 0xe5, + /* (2^ 74)P */ 0xfc, 0xea, 0x1a, 0x65, 0xd9, 0x49, 0x6a, 0x39, 0xb5, 0x96, 0x72, 0x7b, 0x32, 0xf1, 0xd0, 0xe9, 0x45, 0xd9, 0x31, 0x55, 0xc7, 0x34, 0xe9, 0x5a, 0xec, 0x73, 0x0b, 0x03, 0xc4, 0xb3, 0xe6, 0xc9, 0x5e, 0x0a, 0x17, 0xfe, 0x53, 0x66, 0x7f, 0x21, 0x18, 0x74, 0x54, 0x1b, 0xc9, 0x49, 0x16, 0xd2, 0x48, 0xaf, 0x5b, 0x47, 0x7b, 0xeb, 0xaa, 0xc9, + /* (2^ 75)P */ 0x47, 0x04, 0xf5, 0x5a, 0x87, 0x77, 0x9e, 0x21, 0x34, 0x4e, 0x83, 0x88, 0xaf, 0x02, 0x1d, 0xb0, 0x5a, 0x1d, 0x1d, 0x7d, 0x8d, 0x2c, 0xd3, 0x8d, 0x63, 0xa9, 0x45, 0xfb, 0x15, 0x6d, 0x86, 0x45, 0xcd, 0x38, 0x0e, 0xf7, 0x37, 0x79, 0xed, 0x6d, 0x5a, 0xbc, 0x32, 0xcc, 0x66, 0xf1, 0x3a, 0xb2, 0x87, 0x6f, 0x70, 0x71, 0xd9, 0xf2, 0xfa, 0x7b, + /* (2^ 76)P */ 0x68, 0x07, 0xdc, 0x61, 0x40, 0xe4, 0xec, 0x32, 0xc8, 0xbe, 0x66, 0x30, 0x54, 0x80, 0xfd, 0x13, 0x7a, 0xef, 0xae, 0xed, 0x2e, 0x00, 0x6d, 0x3f, 0xbd, 0xfc, 0x91, 0x24, 0x53, 0x7f, 0x63, 0x9d, 0x2e, 0xe3, 0x76, 0xe0, 0xf3, 0xe1, 0x8f, 0x7a, 0xc4, 0x77, 0x0c, 0x91, 0xc0, 0xc2, 0x18, 0x6b, 0x04, 0xad, 0xb6, 0x70, 0x9a, 0x64, 0xc5, 0x82, + /* (2^ 77)P */ 0x7f, 0xea, 0x13, 0xd8, 0x9e, 0xfc, 0x5b, 0x06, 0xb5, 0x4f, 0xda, 0x38, 0xe0, 0x9c, 0xd2, 0x3a, 0xc1, 0x1c, 0x62, 0x70, 0x7f, 0xc6, 0x24, 0x0a, 0x47, 0x04, 0x01, 0xc4, 0x55, 0x09, 0xd1, 0x7a, 0x07, 0xba, 0xa3, 0x80, 0x4f, 0xc1, 0x65, 0x36, 0x6d, 0xc0, 0x10, 0xcf, 0x94, 0xa9, 0xa2, 0x01, 0x44, 0xd1, 0xf9, 0x1c, 0x4c, 0xfb, 0xf8, 0x99, + /* (2^ 78)P */ 0x6c, 0xb9, 0x6b, 0xee, 0x43, 0x5b, 0xb9, 0xbb, 0xee, 0x2e, 0x52, 0xc1, 0xc6, 0xb9, 0x61, 0xd2, 0x93, 0xa5, 0xaf, 0x52, 0xf4, 0xa4, 0x1a, 0x51, 0x61, 0xa7, 0xcb, 0x9e, 0xbb, 0x56, 0x65, 0xe2, 0xbf, 0x75, 0xb9, 0x9c, 0x50, 0x96, 0x60, 0x81, 0x74, 0x47, 0xc0, 0x04, 0x88, 0x71, 0x76, 0x39, 0x9a, 0xa7, 0xb1, 0x4e, 0x43, 0x15, 0xe0, 0xbb, + /* (2^ 79)P */ 0xbb, 0xce, 0xe2, 0xbb, 0xf9, 0x17, 0x0f, 0x82, 0x40, 0xad, 0x73, 0xe3, 0xeb, 0x3b, 0x06, 0x1a, 0xcf, 0x8e, 0x6e, 0x28, 0xb8, 0x26, 0xd9, 0x5b, 0xb7, 0xb3, 0xcf, 0xb4, 0x6a, 0x1c, 0xbf, 0x7f, 0xb8, 0xb5, 0x79, 0xcf, 0x45, 0x68, 0x7d, 0xc5, 0xeb, 0xf3, 0xbe, 0x39, 0x40, 0xfc, 0x07, 0x90, 0x7a, 0x62, 0xad, 0x86, 0x08, 0x71, 0x25, 0xe1, + /* (2^ 80)P */ 0x9b, 0x46, 0xac, 0xef, 0xc1, 0x4e, 0xa1, 0x97, 0x95, 0x76, 0xf9, 0x1b, 0xc2, 0xb2, 0x6a, 0x41, 0xea, 0x80, 0x3d, 0xe9, 0x08, 0x52, 0x5a, 0xe3, 0xf2, 0x08, 0xc5, 0xea, 0x39, 0x3f, 0x44, 0x71, 0x4d, 0xea, 0x0d, 0x05, 0x23, 0xe4, 0x2e, 0x3c, 0x89, 0xfe, 0x12, 0x8a, 0x95, 0x42, 0x0a, 0x68, 0xea, 0x5a, 0x28, 0x06, 0x9e, 0xe3, 0x5f, 0xe0, + /* (2^ 81)P */ 0x00, 0x61, 0x6c, 0x98, 0x9b, 0xe7, 0xb9, 0x06, 0x1c, 0xc5, 0x1b, 0xed, 0xbe, 0xc8, 0xb3, 0xea, 0x87, 0xf0, 0xc4, 0x24, 0x7d, 0xbb, 0x5d, 0xa4, 0x1d, 0x7a, 0x16, 0x00, 0x55, 0x94, 0x67, 0x78, 0xbd, 0x58, 0x02, 0x82, 0x90, 0x53, 0x76, 0xd4, 0x72, 0x99, 0x51, 0x6f, 0x7b, 0xcf, 0x80, 0x30, 0x31, 0x3b, 0x01, 0xc7, 0xc1, 0xef, 0xe6, 0x42, + /* (2^ 82)P */ 0xe2, 0x35, 0xaf, 0x4b, 0x79, 0xc6, 0x12, 0x24, 0x99, 0xc0, 0x68, 0xb0, 0x43, 0x3e, 0xe5, 0xef, 0xe2, 0x29, 0xea, 0xb8, 0xb3, 0xbc, 0x6a, 0x53, 0x2c, 0x69, 0x18, 0x5a, 0xf9, 0x15, 0xae, 0x66, 0x58, 0x18, 0xd3, 0x2d, 0x4b, 0x00, 0xfd, 0x84, 0xab, 0x4f, 0xae, 0x70, 0x6b, 0x9e, 0x9a, 0xdf, 0x83, 0xfd, 0x2e, 0x3c, 0xcf, 0xf8, 0x88, 0x5b, + /* (2^ 83)P */ 0xa4, 0x90, 0x31, 0x85, 0x13, 0xcd, 0xdf, 0x64, 0xc9, 0xa1, 0x0b, 0xe7, 0xb6, 0x73, 0x8a, 0x1b, 0x22, 0x78, 0x4c, 0xd4, 0xae, 0x48, 0x18, 0x00, 0x00, 0xa8, 0x9f, 0x06, 0xf9, 0xfb, 0x2d, 0xc3, 0xb1, 0x2a, 0xbc, 0x13, 0x99, 0x57, 0xaf, 0xf0, 0x8d, 0x61, 0x54, 0x29, 0xd5, 0xf2, 0x72, 0x00, 0x96, 0xd1, 0x85, 0x12, 0x8a, 0xf0, 0x23, 0xfb, + /* (2^ 84)P */ 0x69, 0xc7, 0xdb, 0xd9, 0x92, 0x75, 0x08, 0x9b, 0xeb, 0xa5, 0x93, 0xd1, 0x1a, 0xf4, 0xf5, 0xaf, 0xe6, 0xc4, 0x4a, 0x0d, 0x35, 0x26, 0x39, 0x9d, 0xd3, 0x17, 0x3e, 0xae, 0x2d, 0xbf, 0x73, 0x9f, 0xb7, 0x74, 0x91, 0xd1, 0xd8, 0x5c, 0x14, 0xf9, 0x75, 0xdf, 0xeb, 0xc2, 0x22, 0xd8, 0x14, 0x8d, 0x86, 0x23, 0x4d, 0xd1, 0x2d, 0xdb, 0x6b, 0x42, + /* (2^ 85)P */ 0x8c, 0xda, 0xc6, 0xf8, 0x71, 0xba, 0x2b, 0x06, 0x78, 0xae, 0xcc, 0x3a, 0xe3, 0xe3, 0xa1, 0x8b, 0xe2, 0x34, 0x6d, 0x28, 0x9e, 0x46, 0x13, 0x4d, 0x9e, 0xa6, 0x73, 0x49, 0x65, 0x79, 0x88, 0xb9, 0x3a, 0xd1, 0x6d, 0x2f, 0x48, 0x2b, 0x0a, 0x7f, 0x58, 0x20, 0x37, 0xf4, 0x0e, 0xbb, 0x4a, 0x95, 0x58, 0x0c, 0x88, 0x30, 0xc4, 0x74, 0xdd, 0xfd, + /* (2^ 86)P */ 0x6d, 0x13, 0x4e, 0x89, 0x2d, 0xa9, 0xa3, 0xed, 0x09, 0xe3, 0x0e, 0x71, 0x3e, 0x4a, 0xab, 0x90, 0xde, 0x03, 0xeb, 0x56, 0x46, 0x60, 0x06, 0xf5, 0x71, 0xe5, 0xee, 0x9b, 0xef, 0xff, 0xc4, 0x2c, 0x9f, 0x37, 0x48, 0x45, 0x94, 0x12, 0x41, 0x81, 0x15, 0x70, 0x91, 0x99, 0x5e, 0x56, 0x6b, 0xf4, 0xa6, 0xc9, 0xf5, 0x69, 0x9d, 0x78, 0x37, 0x57, + /* (2^ 87)P */ 0xf3, 0x51, 0x57, 0x7e, 0x43, 0x6f, 0xc6, 0x67, 0x59, 0x0c, 0xcf, 0x94, 0xe6, 0x3d, 0xb5, 0x07, 0xc9, 0x77, 0x48, 0xc9, 0x68, 0x0d, 0x98, 0x36, 0x62, 0x35, 0x38, 0x1c, 0xf5, 0xc5, 0xec, 0x66, 0x78, 0xfe, 0x47, 0xab, 0x26, 0xd6, 0x44, 0xb6, 0x06, 0x0f, 0x89, 0xe3, 0x19, 0x40, 0x1a, 0xe7, 0xd8, 0x65, 0x55, 0xf7, 0x1a, 0xfc, 0xa3, 0x0e, + /* (2^ 88)P */ 0x0e, 0x30, 0xa6, 0xb7, 0x58, 0x60, 0x62, 0x2a, 0x6c, 0x13, 0xa8, 0x14, 0x9b, 0xb8, 0xf2, 0x70, 0xd8, 0xb1, 0x71, 0x88, 0x8c, 0x18, 0x31, 0x25, 0x93, 0x90, 0xb4, 0xc7, 0x49, 0xd8, 0xd4, 0xdb, 0x1e, 0x1e, 0x7f, 0xaa, 0xba, 0xc9, 0xf2, 0x5d, 0xa9, 0x3a, 0x43, 0xb4, 0x5c, 0xee, 0x7b, 0xc7, 0x97, 0xb7, 0x66, 0xd7, 0x23, 0xd9, 0x22, 0x59, + /* (2^ 89)P */ 0x28, 0x19, 0xa6, 0xf9, 0x89, 0x20, 0x78, 0xd4, 0x6d, 0xcb, 0x79, 0x8f, 0x61, 0x6f, 0xb2, 0x5c, 0x4f, 0xa6, 0x54, 0x84, 0x95, 0x24, 0x36, 0x64, 0xcb, 0x39, 0xe7, 0x8f, 0x97, 0x9c, 0x5c, 0x3c, 0xfb, 0x51, 0x11, 0x01, 0x17, 0xdb, 0xc9, 0x9b, 0x51, 0x03, 0x9a, 0xe9, 0xe5, 0x24, 0x1e, 0xf5, 0xda, 0xe0, 0x48, 0x02, 0x23, 0xd0, 0x2c, 0x81, + /* (2^ 90)P */ 0x42, 0x1b, 0xe4, 0x91, 0x85, 0x2a, 0x0c, 0xd2, 0x28, 0x66, 0x57, 0x9e, 0x33, 0x8d, 0x25, 0x71, 0x10, 0x65, 0x76, 0xa2, 0x8c, 0x21, 0x86, 0x81, 0x15, 0xc2, 0x27, 0xeb, 0x54, 0x2d, 0x4f, 0x6c, 0xe6, 0xd6, 0x24, 0x9c, 0x1a, 0x12, 0xb8, 0x81, 0xe2, 0x0a, 0xf3, 0xd3, 0xf0, 0xd3, 0xe1, 0x74, 0x1f, 0x9b, 0x11, 0x47, 0xd0, 0xcf, 0xb6, 0x54, + /* (2^ 91)P */ 0x26, 0x45, 0xa2, 0x10, 0xd4, 0x2d, 0xae, 0xc0, 0xb0, 0xe8, 0x86, 0xb3, 0xc7, 0xea, 0x70, 0x87, 0x61, 0xb5, 0xa5, 0x55, 0xbe, 0x88, 0x1d, 0x7a, 0xd9, 0x6f, 0xeb, 0x83, 0xe2, 0x44, 0x7f, 0x98, 0x04, 0xd6, 0x50, 0x9d, 0xa7, 0x86, 0x66, 0x09, 0x63, 0xe1, 0xed, 0x72, 0xb1, 0xe4, 0x1d, 0x3a, 0xfd, 0x47, 0xce, 0x1c, 0xaa, 0x3b, 0x8f, 0x1b, + /* (2^ 92)P */ 0xf4, 0x3c, 0x4a, 0xb6, 0xc2, 0x9c, 0xe0, 0x2e, 0xb7, 0x38, 0xea, 0x61, 0x35, 0x97, 0x10, 0x90, 0xae, 0x22, 0x48, 0xb3, 0xa9, 0xc6, 0x7a, 0xbb, 0x23, 0xf2, 0xf8, 0x1b, 0xa7, 0xa1, 0x79, 0xcc, 0xc4, 0xf8, 0x08, 0x76, 0x8a, 0x5a, 0x1c, 0x1b, 0xc5, 0x33, 0x91, 0xa9, 0xb8, 0xb9, 0xd3, 0xf8, 0x49, 0xcd, 0xe5, 0x82, 0x43, 0xf7, 0xca, 0x68, + /* (2^ 93)P */ 0x38, 0xba, 0xae, 0x44, 0xfe, 0x57, 0x64, 0x56, 0x7c, 0x0e, 0x9c, 0xca, 0xff, 0xa9, 0x82, 0xbb, 0x38, 0x4a, 0xa7, 0xf7, 0x47, 0xab, 0xbe, 0x6d, 0x23, 0x0b, 0x8a, 0xed, 0xc2, 0xb9, 0x8f, 0xf1, 0xec, 0x91, 0x44, 0x73, 0x64, 0xba, 0xd5, 0x8f, 0x37, 0x38, 0x0d, 0xd5, 0xf8, 0x73, 0x57, 0xb6, 0xc2, 0x45, 0xdc, 0x25, 0xb2, 0xb6, 0xea, 0xd9, + /* (2^ 94)P */ 0xbf, 0xe9, 0x1a, 0x40, 0x4d, 0xcc, 0xe6, 0x1d, 0x70, 0x1a, 0x65, 0xcc, 0x34, 0x2c, 0x37, 0x2c, 0x2d, 0x6b, 0x6d, 0xe5, 0x2f, 0x19, 0x9e, 0xe4, 0xe1, 0xaa, 0xd4, 0xab, 0x54, 0xf4, 0xa8, 0xe4, 0x69, 0x2d, 0x8e, 0x4d, 0xd7, 0xac, 0xb0, 0x5b, 0xfe, 0xe3, 0x26, 0x07, 0xc3, 0xf8, 0x1b, 0x43, 0xa8, 0x1d, 0x64, 0xa5, 0x25, 0x88, 0xbb, 0x77, + /* (2^ 95)P */ 0x92, 0xcd, 0x6e, 0xa0, 0x79, 0x04, 0x18, 0xf4, 0x11, 0x58, 0x48, 0xb5, 0x3c, 0x7b, 0xd1, 0xcc, 0xd3, 0x14, 0x2c, 0xa0, 0xdd, 0x04, 0x44, 0x11, 0xb3, 0x6d, 0x2f, 0x0d, 0xf5, 0x2a, 0x75, 0x5d, 0x1d, 0xda, 0x86, 0x8d, 0x7d, 0x6b, 0x32, 0x68, 0xb6, 0x6c, 0x64, 0x9e, 0xde, 0x80, 0x88, 0xce, 0x08, 0xbf, 0x0b, 0xe5, 0x8e, 0x4f, 0x1d, 0xfb, + /* (2^ 96)P */ 0xaf, 0xe8, 0x85, 0xbf, 0x7f, 0x37, 0x8d, 0x66, 0x7c, 0xd5, 0xd3, 0x96, 0xa5, 0x81, 0x67, 0x95, 0xff, 0x48, 0xde, 0xde, 0xd7, 0x7a, 0x46, 0x34, 0xb1, 0x13, 0x70, 0x29, 0xed, 0x87, 0x90, 0xb0, 0x40, 0x2c, 0xa6, 0x43, 0x6e, 0xb6, 0xbc, 0x48, 0x8a, 0xc1, 0xae, 0xb8, 0xd4, 0xe2, 0xc0, 0x32, 0xb2, 0xa6, 0x2a, 0x8f, 0xb5, 0x16, 0x9e, 0xc3, + /* (2^ 97)P */ 0xff, 0x4d, 0xd2, 0xd6, 0x74, 0xef, 0x2c, 0x96, 0xc1, 0x11, 0xa8, 0xb8, 0xfe, 0x94, 0x87, 0x3e, 0xa0, 0xfb, 0x57, 0xa3, 0xfc, 0x7a, 0x7e, 0x6a, 0x59, 0x6c, 0x54, 0xbb, 0xbb, 0xa2, 0x25, 0x38, 0x1b, 0xdf, 0x5d, 0x7b, 0x94, 0x14, 0xde, 0x07, 0x6e, 0xd3, 0xab, 0x02, 0x26, 0x74, 0x16, 0x12, 0xdf, 0x2e, 0x2a, 0xa7, 0xb0, 0xe8, 0x29, 0xc0, + /* (2^ 98)P */ 0x6a, 0x38, 0x0b, 0xd3, 0xba, 0x45, 0x23, 0xe0, 0x04, 0x3b, 0x83, 0x39, 0xc5, 0x11, 0xe6, 0xcf, 0x39, 0x0a, 0xb3, 0xb0, 0x3b, 0x27, 0x29, 0x63, 0x1c, 0xf3, 0x00, 0xe6, 0xd2, 0x55, 0x21, 0x1f, 0x84, 0x97, 0x9f, 0x01, 0x49, 0x43, 0x30, 0x5f, 0xe0, 0x1d, 0x24, 0xc4, 0x4e, 0xa0, 0x2b, 0x0b, 0x12, 0x55, 0xc3, 0x27, 0xae, 0x08, 0x83, 0x7c, + /* (2^ 99)P */ 0x5d, 0x1a, 0xb7, 0xa9, 0xf5, 0xfd, 0xec, 0xad, 0xb7, 0x87, 0x02, 0x5f, 0x0d, 0x30, 0x4d, 0xe2, 0x65, 0x87, 0xa4, 0x41, 0x45, 0x1d, 0x67, 0xe0, 0x30, 0x5c, 0x13, 0x87, 0xf6, 0x2e, 0x08, 0xc1, 0xc7, 0x12, 0x45, 0xc8, 0x9b, 0xad, 0xb8, 0xd5, 0x57, 0xbb, 0x5c, 0x48, 0x3a, 0xe1, 0x91, 0x5e, 0xf6, 0x4d, 0x8a, 0x63, 0x75, 0x69, 0x0c, 0x01, + /* (2^100)P */ 0x8f, 0x53, 0x2d, 0xa0, 0x71, 0x3d, 0xfc, 0x45, 0x10, 0x96, 0xcf, 0x56, 0xf9, 0xbb, 0x40, 0x3c, 0x86, 0x52, 0x76, 0xbe, 0x84, 0xf9, 0xa6, 0x9d, 0x3d, 0x27, 0xbe, 0xb4, 0x00, 0x49, 0x94, 0xf5, 0x5d, 0xe1, 0x62, 0x85, 0x66, 0xe5, 0xb8, 0x20, 0x2c, 0x09, 0x7d, 0x9d, 0x3d, 0x6e, 0x74, 0x39, 0xab, 0xad, 0xa0, 0x90, 0x97, 0x5f, 0xbb, 0xa7, + /* (2^101)P */ 0xdb, 0x2d, 0x99, 0x08, 0x16, 0x46, 0x83, 0x7a, 0xa8, 0xea, 0x3d, 0x28, 0x5b, 0x49, 0xfc, 0xb9, 0x6d, 0x00, 0x9e, 0x54, 0x4f, 0x47, 0x64, 0x9b, 0x58, 0x4d, 0x07, 0x0c, 0x6f, 0x29, 0x56, 0x0b, 0x00, 0x14, 0x85, 0x96, 0x41, 0x04, 0xb9, 0x5c, 0xa4, 0xf6, 0x16, 0x73, 0x6a, 0xc7, 0x62, 0x0c, 0x65, 0x2f, 0x93, 0xbf, 0xf7, 0xb9, 0xb7, 0xf1, + /* (2^102)P */ 0xeb, 0x6d, 0xb3, 0x46, 0x32, 0xd2, 0xcb, 0x08, 0x94, 0x14, 0xbf, 0x3f, 0xc5, 0xcb, 0x5f, 0x9f, 0x8a, 0x89, 0x0c, 0x1b, 0x45, 0xad, 0x4c, 0x50, 0xb4, 0xe1, 0xa0, 0x6b, 0x11, 0x92, 0xaf, 0x1f, 0x00, 0xcc, 0xe5, 0x13, 0x7e, 0xe4, 0x2e, 0xa0, 0x57, 0xf3, 0xa7, 0x84, 0x79, 0x7a, 0xc2, 0xb7, 0xb7, 0xfc, 0x5d, 0xa5, 0xa9, 0x64, 0xcc, 0xd8, + /* (2^103)P */ 0xa9, 0xc4, 0x12, 0x8b, 0x34, 0x78, 0x3e, 0x38, 0xfd, 0x3f, 0x87, 0xfa, 0x88, 0x94, 0xd5, 0xd9, 0x7f, 0xeb, 0x58, 0xff, 0xb9, 0x45, 0xdb, 0xa1, 0xed, 0x22, 0x28, 0x1d, 0x00, 0x6d, 0x79, 0x85, 0x7a, 0x75, 0x5d, 0xf0, 0xb1, 0x9e, 0x47, 0x28, 0x8c, 0x62, 0xdf, 0xfb, 0x4c, 0x7b, 0xc5, 0x1a, 0x42, 0x95, 0xef, 0x9a, 0xb7, 0x27, 0x7e, 0xda, + /* (2^104)P */ 0xca, 0xd5, 0xc0, 0x17, 0xa1, 0x66, 0x79, 0x9c, 0x2a, 0xb7, 0x0a, 0xfe, 0x62, 0xe4, 0x26, 0x78, 0x90, 0xa7, 0xcb, 0xb0, 0x4f, 0x6d, 0xf9, 0x8f, 0xf7, 0x7d, 0xac, 0xb8, 0x78, 0x1f, 0x41, 0xea, 0x97, 0x1e, 0x62, 0x97, 0x43, 0x80, 0x58, 0x80, 0xb6, 0x69, 0x7d, 0xee, 0x16, 0xd2, 0xa1, 0x81, 0xd7, 0xb1, 0x27, 0x03, 0x48, 0xda, 0xab, 0xec, + /* (2^105)P */ 0x5b, 0xed, 0x40, 0x8e, 0x8c, 0xc1, 0x66, 0x90, 0x7f, 0x0c, 0xb2, 0xfc, 0xbd, 0x16, 0xac, 0x7d, 0x4c, 0x6a, 0xf9, 0xae, 0xe7, 0x4e, 0x11, 0x12, 0xe9, 0xbe, 0x17, 0x09, 0xc6, 0xc1, 0x5e, 0xb5, 0x7b, 0x50, 0x5c, 0x27, 0xfb, 0x80, 0xab, 0x01, 0xfa, 0x5b, 0x9b, 0x75, 0x16, 0x6e, 0xb2, 0x5c, 0x8c, 0x2f, 0xa5, 0x6a, 0x1a, 0x68, 0xa6, 0x90, + /* (2^106)P */ 0x75, 0xfe, 0xb6, 0x96, 0x96, 0x87, 0x4c, 0x12, 0xa9, 0xd1, 0xd8, 0x03, 0xa3, 0xc1, 0x15, 0x96, 0xe8, 0xa0, 0x75, 0x82, 0xa0, 0x6d, 0xea, 0x54, 0xdc, 0x5f, 0x0d, 0x7e, 0xf6, 0x70, 0xb5, 0xdc, 0x7a, 0xf6, 0xc4, 0xd4, 0x21, 0x49, 0xf5, 0xd4, 0x14, 0x6d, 0x48, 0x1d, 0x7c, 0x99, 0x42, 0xdf, 0x78, 0x6b, 0x9d, 0xb9, 0x30, 0x3c, 0xd0, 0x29, + /* (2^107)P */ 0x85, 0xd6, 0xd8, 0xf3, 0x91, 0x74, 0xdd, 0xbd, 0x72, 0x96, 0x10, 0xe4, 0x76, 0x02, 0x5a, 0x72, 0x67, 0xd3, 0x17, 0x72, 0x14, 0x9a, 0x20, 0x5b, 0x0f, 0x8d, 0xed, 0x6d, 0x4e, 0xe3, 0xd9, 0x82, 0xc2, 0x99, 0xee, 0x39, 0x61, 0x69, 0x8a, 0x24, 0x01, 0x92, 0x15, 0xe7, 0xfc, 0xf9, 0x4d, 0xac, 0xf1, 0x30, 0x49, 0x01, 0x0b, 0x6e, 0x0f, 0x20, + /* (2^108)P */ 0xd8, 0x25, 0x94, 0x5e, 0x43, 0x29, 0xf5, 0xcc, 0xe8, 0xe3, 0x55, 0x41, 0x3c, 0x9f, 0x58, 0x5b, 0x00, 0xeb, 0xc5, 0xdf, 0xcf, 0xfb, 0xfd, 0x6e, 0x92, 0xec, 0x99, 0x30, 0xd6, 0x05, 0xdd, 0x80, 0x7a, 0x5d, 0x6d, 0x16, 0x85, 0xd8, 0x9d, 0x43, 0x65, 0xd8, 0x2c, 0x33, 0x2f, 0x5c, 0x41, 0xea, 0xb7, 0x95, 0x77, 0xf2, 0x9e, 0x59, 0x09, 0xe8, + /* (2^109)P */ 0x00, 0xa0, 0x03, 0x80, 0xcd, 0x60, 0xe5, 0x17, 0xd4, 0x15, 0x99, 0xdd, 0x4f, 0xbf, 0x66, 0xb8, 0xc0, 0xf5, 0xf9, 0xfc, 0x6d, 0x42, 0x18, 0x34, 0x1c, 0x7d, 0x5b, 0xb5, 0x09, 0xd0, 0x99, 0x57, 0x81, 0x0b, 0x62, 0xb3, 0xa2, 0xf9, 0x0b, 0xae, 0x95, 0xb8, 0xc2, 0x3b, 0x0d, 0x5b, 0x00, 0xf1, 0xed, 0xbc, 0x05, 0x9d, 0x61, 0xbc, 0x73, 0x9d, + /* (2^110)P */ 0xd4, 0xdb, 0x29, 0xe5, 0x85, 0xe9, 0xc6, 0x89, 0x2a, 0xa8, 0x54, 0xab, 0xb3, 0x7f, 0x88, 0xc0, 0x4d, 0xe0, 0xd1, 0x74, 0x6e, 0xa3, 0xa7, 0x39, 0xd5, 0xcc, 0xa1, 0x8a, 0xcb, 0x5b, 0x34, 0xad, 0x92, 0xb4, 0xd8, 0xd5, 0x17, 0xf6, 0x77, 0x18, 0x9e, 0xaf, 0x45, 0x3b, 0x03, 0xe2, 0xf8, 0x52, 0x60, 0xdc, 0x15, 0x20, 0x9e, 0xdf, 0xd8, 0x5d, + /* (2^111)P */ 0x02, 0xc1, 0xac, 0x1a, 0x15, 0x8e, 0x6c, 0xf5, 0x1e, 0x1e, 0xba, 0x7e, 0xc2, 0xda, 0x7d, 0x02, 0xda, 0x43, 0xae, 0x04, 0x70, 0x28, 0x54, 0x78, 0x94, 0xf5, 0x4f, 0x07, 0x84, 0x8f, 0xed, 0xaa, 0xc0, 0xb8, 0xcd, 0x7f, 0x7e, 0x33, 0xa3, 0xbe, 0x21, 0x29, 0xc8, 0x56, 0x34, 0xc0, 0x76, 0x87, 0x8f, 0xc7, 0x73, 0x58, 0x90, 0x16, 0xfc, 0xd6, + /* (2^112)P */ 0xb8, 0x3f, 0xe1, 0xdf, 0x3a, 0x91, 0x25, 0x0c, 0xf6, 0x47, 0xa8, 0x89, 0xc4, 0xc6, 0x61, 0xec, 0x86, 0x2c, 0xfd, 0xbe, 0xa4, 0x6f, 0xc2, 0xd4, 0x46, 0x19, 0x70, 0x5d, 0x09, 0x02, 0x86, 0xd3, 0x4b, 0xe9, 0x16, 0x7b, 0xf0, 0x0d, 0x6c, 0xff, 0x91, 0x05, 0xbf, 0x55, 0xb4, 0x00, 0x8d, 0xe5, 0x6d, 0x68, 0x20, 0x90, 0x12, 0xb5, 0x5c, 0x32, + /* (2^113)P */ 0x80, 0x45, 0xc8, 0x51, 0x87, 0xba, 0x1c, 0x5c, 0xcf, 0x5f, 0x4b, 0x3c, 0x9e, 0x3b, 0x36, 0xd2, 0x26, 0xa2, 0x7f, 0xab, 0xb7, 0xbf, 0xda, 0x68, 0x23, 0x8f, 0xc3, 0xa0, 0xfd, 0xad, 0xf1, 0x56, 0x3b, 0xd0, 0x75, 0x2b, 0x44, 0x61, 0xd8, 0xf4, 0xf1, 0x05, 0x49, 0x53, 0x07, 0xee, 0x47, 0xef, 0xc0, 0x7c, 0x9d, 0xe4, 0x15, 0x88, 0xc5, 0x47, + /* (2^114)P */ 0x2d, 0xb5, 0x09, 0x80, 0xb9, 0xd3, 0xd8, 0xfe, 0x4c, 0xd2, 0xa6, 0x6e, 0xd3, 0x75, 0xcf, 0xb0, 0x99, 0xcb, 0x50, 0x8d, 0xe9, 0x67, 0x9b, 0x20, 0xe8, 0x57, 0xd8, 0x14, 0x85, 0x73, 0x6a, 0x74, 0xe0, 0x99, 0xf0, 0x6b, 0x6e, 0x59, 0x30, 0x31, 0x33, 0x96, 0x5f, 0xa1, 0x0c, 0x1b, 0xf4, 0xca, 0x09, 0xe1, 0x9b, 0xb5, 0xcf, 0x6d, 0x0b, 0xeb, + /* (2^115)P */ 0x1a, 0xde, 0x50, 0xa9, 0xac, 0x3e, 0x10, 0x43, 0x4f, 0x82, 0x4f, 0xc0, 0xfe, 0x3f, 0x33, 0xd2, 0x64, 0x86, 0x50, 0xa9, 0x51, 0x76, 0x5e, 0x50, 0x97, 0x6c, 0x73, 0x8d, 0x77, 0xa3, 0x75, 0x03, 0xbc, 0xc9, 0xfb, 0x50, 0xd9, 0x6d, 0x16, 0xad, 0x5d, 0x32, 0x3d, 0xac, 0x44, 0xdf, 0x51, 0xf7, 0x19, 0xd4, 0x0b, 0x57, 0x78, 0x0b, 0x81, 0x4e, + /* (2^116)P */ 0x32, 0x24, 0xf1, 0x6c, 0x55, 0x62, 0x1d, 0xb3, 0x1f, 0xda, 0xfa, 0x6a, 0x8f, 0x98, 0x01, 0x16, 0xde, 0x44, 0x50, 0x0d, 0x2e, 0x6c, 0x0b, 0xa2, 0xd3, 0x74, 0x0e, 0xa9, 0xbf, 0x8d, 0xa9, 0xc8, 0xc8, 0x2f, 0x62, 0xc1, 0x35, 0x5e, 0xfd, 0x3a, 0xb3, 0x83, 0x2d, 0xee, 0x4e, 0xfd, 0x5c, 0x5e, 0xad, 0x85, 0xa5, 0x10, 0xb5, 0x4f, 0x34, 0xa7, + /* (2^117)P */ 0xd1, 0x58, 0x6f, 0xe6, 0x54, 0x2c, 0xc2, 0xcd, 0xcf, 0x83, 0xdc, 0x88, 0x0c, 0xb9, 0xb4, 0x62, 0x18, 0x89, 0x65, 0x28, 0xe9, 0x72, 0x4b, 0x65, 0xcf, 0xd6, 0x90, 0x88, 0xd7, 0x76, 0x17, 0x4f, 0x74, 0x64, 0x1e, 0xcb, 0xd3, 0xf5, 0x4b, 0xaa, 0x2e, 0x4d, 0x2d, 0x7c, 0x13, 0x1f, 0xfd, 0xd9, 0x60, 0x83, 0x7e, 0xda, 0x64, 0x1c, 0xdc, 0x9f, + /* (2^118)P */ 0xad, 0xef, 0xac, 0x1b, 0xc1, 0x30, 0x5a, 0x15, 0xc9, 0x1f, 0xac, 0xf1, 0xca, 0x44, 0x95, 0x95, 0xea, 0xf2, 0x22, 0xe7, 0x8d, 0x25, 0xf0, 0xff, 0xd8, 0x71, 0xf7, 0xf8, 0x8f, 0x8f, 0xcd, 0xf4, 0x1e, 0xfe, 0x6c, 0x68, 0x04, 0xb8, 0x78, 0xa1, 0x5f, 0xa6, 0x5d, 0x5e, 0xf9, 0x8d, 0xea, 0x80, 0xcb, 0xf3, 0x17, 0xa6, 0x03, 0xc9, 0x38, 0xd5, + /* (2^119)P */ 0x79, 0x14, 0x31, 0xc3, 0x38, 0xe5, 0xaa, 0xbf, 0x17, 0xa3, 0x04, 0x4e, 0x80, 0x59, 0x9c, 0x9f, 0x19, 0x39, 0xe4, 0x2d, 0x23, 0x54, 0x4a, 0x7f, 0x3e, 0xf3, 0xd9, 0xc7, 0xba, 0x6c, 0x8f, 0x6b, 0xfa, 0x34, 0xb5, 0x23, 0x17, 0x1d, 0xff, 0x1d, 0xea, 0x1f, 0xd7, 0xba, 0x61, 0xb2, 0xe0, 0x38, 0x6a, 0xe9, 0xcf, 0x48, 0x5d, 0x6a, 0x10, 0x9c, + /* (2^120)P */ 0xc8, 0xbb, 0x13, 0x1c, 0x3f, 0x3c, 0x34, 0xfd, 0xac, 0x37, 0x52, 0x44, 0x25, 0xa8, 0xde, 0x1d, 0x63, 0xf4, 0x81, 0x9a, 0xbe, 0x0b, 0x74, 0x2e, 0xc8, 0x51, 0x16, 0xd3, 0xac, 0x4a, 0xaf, 0xe2, 0x5f, 0x3a, 0x89, 0x32, 0xd1, 0x9b, 0x7c, 0x90, 0x0d, 0xac, 0xdc, 0x8b, 0x73, 0x45, 0x45, 0x97, 0xb1, 0x90, 0x2c, 0x1b, 0x31, 0xca, 0xb1, 0x94, + /* (2^121)P */ 0x07, 0x28, 0xdd, 0x10, 0x14, 0xa5, 0x95, 0x7e, 0xf3, 0xe4, 0xd4, 0x14, 0xb4, 0x7e, 0x76, 0xdb, 0x42, 0xd6, 0x94, 0x3e, 0xeb, 0x44, 0x64, 0x88, 0x0d, 0xec, 0xc1, 0x21, 0xf0, 0x79, 0xe0, 0x83, 0x67, 0x55, 0x53, 0xc2, 0xf6, 0xc5, 0xc5, 0x89, 0x39, 0xe8, 0x42, 0xd0, 0x17, 0xbd, 0xff, 0x35, 0x59, 0x0e, 0xc3, 0x06, 0x86, 0xd4, 0x64, 0xcf, + /* (2^122)P */ 0x91, 0xa8, 0xdb, 0x57, 0x9b, 0xe2, 0x96, 0x31, 0x10, 0x6e, 0xd7, 0x9a, 0x97, 0xb3, 0xab, 0xb5, 0x15, 0x66, 0xbe, 0xcc, 0x6d, 0x9a, 0xac, 0x06, 0xb3, 0x0d, 0xaa, 0x4b, 0x9c, 0x96, 0x79, 0x6c, 0x34, 0xee, 0x9e, 0x53, 0x4d, 0x6e, 0xbd, 0x88, 0x02, 0xbf, 0x50, 0x54, 0x12, 0x5d, 0x01, 0x02, 0x46, 0xc6, 0x74, 0x02, 0x8c, 0x24, 0xae, 0xb1, + /* (2^123)P */ 0xf5, 0x22, 0xea, 0xac, 0x7d, 0x9c, 0x33, 0x8a, 0xa5, 0x36, 0x79, 0x6a, 0x4f, 0xa4, 0xdc, 0xa5, 0x73, 0x64, 0xc4, 0x6f, 0x43, 0x02, 0x3b, 0x94, 0x66, 0xd2, 0x4b, 0x4f, 0xf6, 0x45, 0x33, 0x5d, 0x10, 0x33, 0x18, 0x1e, 0xa3, 0xfc, 0xf7, 0xd2, 0xb8, 0xc8, 0xa7, 0xe0, 0x76, 0x8a, 0xcd, 0xff, 0x4f, 0x99, 0x34, 0x47, 0x84, 0x91, 0x96, 0x9f, + /* (2^124)P */ 0x8a, 0x48, 0x3b, 0x48, 0x4a, 0xbc, 0xac, 0xe2, 0x80, 0xd6, 0xd2, 0x35, 0xde, 0xd0, 0x56, 0x42, 0x33, 0xb3, 0x56, 0x5a, 0xcd, 0xb8, 0x3d, 0xb5, 0x25, 0xc1, 0xed, 0xff, 0x87, 0x0b, 0x79, 0xff, 0xf2, 0x62, 0xe1, 0x76, 0xc6, 0xa2, 0x0f, 0xa8, 0x9b, 0x0d, 0xcc, 0x3f, 0x3d, 0x35, 0x27, 0x8d, 0x0b, 0x74, 0xb0, 0xc3, 0x78, 0x8c, 0xcc, 0xc8, + /* (2^125)P */ 0xfc, 0x9a, 0x0c, 0xa8, 0x49, 0x42, 0xb8, 0xdf, 0xcf, 0xb3, 0x19, 0xa6, 0x64, 0x57, 0xfe, 0xe8, 0xf8, 0xa6, 0x4b, 0x86, 0xa1, 0xd5, 0x83, 0x7f, 0x14, 0x99, 0x18, 0x0c, 0x7d, 0x5b, 0xf7, 0x3d, 0xf9, 0x4b, 0x79, 0xb1, 0x86, 0x30, 0xb4, 0x5e, 0x6a, 0xe8, 0x9d, 0xfa, 0x8a, 0x41, 0xc4, 0x30, 0xfc, 0x56, 0x74, 0x14, 0x42, 0xc8, 0x96, 0x0e, + /* (2^126)P */ 0xdf, 0x66, 0xec, 0xbc, 0x44, 0xdb, 0x19, 0xce, 0xd4, 0xb5, 0x49, 0x40, 0x07, 0x49, 0xe0, 0x3a, 0x61, 0x10, 0xfb, 0x7d, 0xba, 0xb1, 0xe0, 0x28, 0x5b, 0x99, 0x59, 0x96, 0xa2, 0xee, 0xe0, 0x23, 0x37, 0x39, 0x1f, 0xe6, 0x57, 0x9f, 0xf8, 0xf8, 0xdc, 0x74, 0xf6, 0x8f, 0x4f, 0x5e, 0x51, 0xa4, 0x12, 0xac, 0xbe, 0xe4, 0xf3, 0xd1, 0xf0, 0x24, + /* (2^127)P */ 0x1e, 0x3e, 0x9a, 0x5f, 0xdf, 0x9f, 0xd6, 0x4e, 0x8a, 0x28, 0xc3, 0xcd, 0x96, 0x9d, 0x57, 0xc7, 0x61, 0x81, 0x90, 0xff, 0xae, 0xb1, 0x4f, 0xc2, 0x96, 0x8b, 0x1a, 0x18, 0xf4, 0x50, 0xcb, 0x31, 0xe1, 0x57, 0xf4, 0x90, 0xa8, 0xea, 0xac, 0xe7, 0x61, 0x98, 0xb6, 0x15, 0xc1, 0x7b, 0x29, 0xa4, 0xc3, 0x18, 0xef, 0xb9, 0xd8, 0xdf, 0xf6, 0xac, + /* (2^128)P */ 0xca, 0xa8, 0x6c, 0xf1, 0xb4, 0xca, 0xfe, 0x31, 0xee, 0x48, 0x38, 0x8b, 0x0e, 0xbb, 0x7a, 0x30, 0xaa, 0xf9, 0xee, 0x27, 0x53, 0x24, 0xdc, 0x2e, 0x15, 0xa6, 0x48, 0x8f, 0xa0, 0x7e, 0xf1, 0xdc, 0x93, 0x87, 0x39, 0xeb, 0x7f, 0x38, 0x92, 0x92, 0x4c, 0x29, 0xe9, 0x57, 0xd8, 0x59, 0xfc, 0xe9, 0x9c, 0x44, 0xc0, 0x65, 0xcf, 0xac, 0x4b, 0xdc, + /* (2^129)P */ 0xa3, 0xd0, 0x37, 0x8f, 0x86, 0x2f, 0xc6, 0x47, 0x55, 0x46, 0x65, 0x26, 0x4b, 0x91, 0xe2, 0x18, 0x5c, 0x4f, 0x23, 0xc1, 0x37, 0x29, 0xb9, 0xc1, 0x27, 0xc5, 0x3c, 0xbf, 0x7e, 0x23, 0xdb, 0x73, 0x99, 0xbd, 0x1b, 0xb2, 0x31, 0x68, 0x3a, 0xad, 0xb7, 0xb0, 0x10, 0xc5, 0xe5, 0x11, 0x51, 0xba, 0xa7, 0x60, 0x66, 0x54, 0xf0, 0x08, 0xd7, 0x69, + /* (2^130)P */ 0x89, 0x41, 0x79, 0xcc, 0xeb, 0x0a, 0xf5, 0x4b, 0xa3, 0x4c, 0xce, 0x52, 0xb0, 0xa7, 0xe4, 0x41, 0x75, 0x7d, 0x04, 0xbb, 0x09, 0x4c, 0x50, 0x9f, 0xdf, 0xea, 0x74, 0x61, 0x02, 0xad, 0xb4, 0x9d, 0xb7, 0x05, 0xb9, 0xea, 0xeb, 0x91, 0x35, 0xe7, 0x49, 0xea, 0xd3, 0x4f, 0x3c, 0x60, 0x21, 0x7a, 0xde, 0xc7, 0xe2, 0x5a, 0xee, 0x8e, 0x93, 0xc7, + /* (2^131)P */ 0x00, 0xe8, 0xed, 0xd0, 0xb3, 0x0d, 0xaf, 0xb2, 0xde, 0x2c, 0xf6, 0x00, 0xe2, 0xea, 0x6d, 0xf8, 0x0e, 0xd9, 0x67, 0x59, 0xa9, 0x50, 0xbb, 0x17, 0x8f, 0xff, 0xb1, 0x9f, 0x17, 0xb6, 0xf2, 0xb5, 0xba, 0x80, 0xf7, 0x0f, 0xba, 0xd5, 0x09, 0x43, 0xaa, 0x4e, 0x3a, 0x67, 0x6a, 0x89, 0x9b, 0x18, 0x65, 0x35, 0xf8, 0x3a, 0x49, 0x91, 0x30, 0x51, + /* (2^132)P */ 0x8d, 0x25, 0xe9, 0x0e, 0x7d, 0x50, 0x76, 0xe4, 0x58, 0x7e, 0xb9, 0x33, 0xe6, 0x65, 0x90, 0xc2, 0x50, 0x9d, 0x50, 0x2e, 0x11, 0xad, 0xd5, 0x43, 0x52, 0x32, 0x41, 0x4f, 0x7b, 0xb6, 0xa0, 0xec, 0x81, 0x75, 0x36, 0x7c, 0x77, 0x85, 0x59, 0x70, 0xe4, 0xf9, 0xef, 0x66, 0x8d, 0x35, 0xc8, 0x2a, 0x6e, 0x5b, 0xc6, 0x0d, 0x0b, 0x29, 0x60, 0x68, + /* (2^133)P */ 0xf8, 0xce, 0xb0, 0x3a, 0x56, 0x7d, 0x51, 0x9a, 0x25, 0x73, 0xea, 0xdd, 0xe4, 0xe0, 0x0e, 0xf0, 0x07, 0xc0, 0x31, 0x00, 0x73, 0x35, 0xd0, 0x39, 0xc4, 0x9b, 0xb7, 0x95, 0xe0, 0x62, 0x70, 0x36, 0x0b, 0xcb, 0xa0, 0x42, 0xde, 0x51, 0xcf, 0x41, 0xe0, 0xb8, 0xb4, 0xc0, 0xe5, 0x46, 0x99, 0x9f, 0x02, 0x7f, 0x14, 0x8c, 0xc1, 0x4e, 0xef, 0xe8, + /* (2^134)P */ 0x10, 0x01, 0x57, 0x0a, 0xbe, 0x8b, 0x18, 0xc8, 0xca, 0x00, 0x28, 0x77, 0x4a, 0x9a, 0xc7, 0x55, 0x2a, 0xcc, 0x0c, 0x7b, 0xb9, 0xe9, 0xc8, 0x97, 0x7c, 0x02, 0xe3, 0x09, 0x2f, 0x62, 0x30, 0xb8, 0x40, 0x09, 0x65, 0xe9, 0x55, 0x63, 0xb5, 0x07, 0xca, 0x9f, 0x00, 0xdf, 0x9d, 0x5c, 0xc7, 0xee, 0x57, 0xa5, 0x90, 0x15, 0x1e, 0x22, 0xa0, 0x12, + /* (2^135)P */ 0x71, 0x2d, 0xc9, 0xef, 0x27, 0xb9, 0xd8, 0x12, 0x43, 0x6b, 0xa8, 0xce, 0x3b, 0x6d, 0x6e, 0x91, 0x43, 0x23, 0xbc, 0x32, 0xb3, 0xbf, 0xe1, 0xc7, 0x39, 0xcf, 0x7c, 0x42, 0x4c, 0xb1, 0x30, 0xe2, 0xdd, 0x69, 0x06, 0xe5, 0xea, 0xf0, 0x2a, 0x16, 0x50, 0x71, 0xca, 0x92, 0xdf, 0xc1, 0xcc, 0xec, 0xe6, 0x54, 0x07, 0xf3, 0x18, 0x8d, 0xd8, 0x29, + /* (2^136)P */ 0x98, 0x51, 0x48, 0x8f, 0xfa, 0x2e, 0x5e, 0x67, 0xb0, 0xc6, 0x17, 0x12, 0xb6, 0x7d, 0xc9, 0xad, 0x81, 0x11, 0xad, 0x0c, 0x1c, 0x2d, 0x45, 0xdf, 0xac, 0x66, 0xbd, 0x08, 0x6f, 0x7c, 0xc7, 0x06, 0x6e, 0x19, 0x08, 0x39, 0x64, 0xd7, 0xe4, 0xd1, 0x11, 0x5f, 0x1c, 0xf4, 0x67, 0xc3, 0x88, 0x6a, 0xe6, 0x07, 0xa3, 0x83, 0xd7, 0xfd, 0x2a, 0xf9, + /* (2^137)P */ 0x87, 0xed, 0xeb, 0xd9, 0xdf, 0xff, 0x43, 0x8b, 0xaa, 0x20, 0x58, 0xb0, 0xb4, 0x6b, 0x14, 0xb8, 0x02, 0xc5, 0x40, 0x20, 0x22, 0xbb, 0xf7, 0xb4, 0xf3, 0x05, 0x1e, 0x4d, 0x94, 0xff, 0xe3, 0xc5, 0x22, 0x82, 0xfe, 0xaf, 0x90, 0x42, 0x98, 0x6b, 0x76, 0x8b, 0x3e, 0x89, 0x3f, 0x42, 0x2a, 0xa7, 0x26, 0x00, 0xda, 0x5c, 0xa2, 0x2b, 0xec, 0xdd, + /* (2^138)P */ 0x5c, 0x21, 0x16, 0x0d, 0x46, 0xb8, 0xd0, 0xa7, 0x88, 0xe7, 0x25, 0xcb, 0x3e, 0x50, 0x73, 0x61, 0xe7, 0xaf, 0x5a, 0x3f, 0x47, 0x8b, 0x3d, 0x97, 0x79, 0x2c, 0xe6, 0x6d, 0x95, 0x74, 0x65, 0x70, 0x36, 0xfd, 0xd1, 0x9e, 0x13, 0x18, 0x63, 0xb1, 0x2d, 0x0b, 0xb5, 0x36, 0x3e, 0xe7, 0x35, 0x42, 0x3b, 0xe6, 0x1f, 0x4d, 0x9d, 0x59, 0xa2, 0x43, + /* (2^139)P */ 0x8c, 0x0c, 0x7c, 0x24, 0x9e, 0xe0, 0xf8, 0x05, 0x1c, 0x9e, 0x1f, 0x31, 0xc0, 0x70, 0xb3, 0xfb, 0x4e, 0xf8, 0x0a, 0x57, 0xb7, 0x49, 0xb5, 0x73, 0xa1, 0x5f, 0x9b, 0x6a, 0x07, 0x6c, 0x87, 0x71, 0x87, 0xd4, 0xbe, 0x98, 0x1e, 0x98, 0xee, 0x52, 0xc1, 0x7b, 0x95, 0x0f, 0x28, 0x32, 0x36, 0x28, 0xd0, 0x3a, 0x0f, 0x7d, 0x2a, 0xa9, 0x62, 0xb9, + /* (2^140)P */ 0x97, 0xe6, 0x18, 0x77, 0xf9, 0x34, 0xac, 0xbc, 0xe0, 0x62, 0x9f, 0x42, 0xde, 0xbd, 0x2f, 0xf7, 0x1f, 0xb7, 0x14, 0x52, 0x8a, 0x79, 0xb2, 0x3f, 0xd2, 0x95, 0x71, 0x01, 0xe8, 0xaf, 0x8c, 0xa4, 0xa4, 0xa7, 0x27, 0xf3, 0x5c, 0xdf, 0x3e, 0x57, 0x7a, 0xf1, 0x76, 0x49, 0xe6, 0x42, 0x3f, 0x8f, 0x1e, 0x63, 0x4a, 0x65, 0xb5, 0x41, 0xf5, 0x02, + /* (2^141)P */ 0x72, 0x85, 0xc5, 0x0b, 0xe1, 0x47, 0x64, 0x02, 0xc5, 0x4d, 0x81, 0x69, 0xb2, 0xcf, 0x0f, 0x6c, 0xd4, 0x6d, 0xd0, 0xc7, 0xb4, 0x1c, 0xd0, 0x32, 0x59, 0x89, 0xe2, 0xe0, 0x96, 0x8b, 0x12, 0x98, 0xbf, 0x63, 0x7a, 0x4c, 0x76, 0x7e, 0x58, 0x17, 0x8f, 0x5b, 0x0a, 0x59, 0x65, 0x75, 0xbc, 0x61, 0x1f, 0xbe, 0xc5, 0x6e, 0x0a, 0x57, 0x52, 0x70, + /* (2^142)P */ 0x92, 0x1c, 0x77, 0xbb, 0x62, 0x02, 0x6c, 0x25, 0x9c, 0x66, 0x07, 0x83, 0xab, 0xcc, 0x80, 0x5d, 0xd2, 0x76, 0x0c, 0xa4, 0xc5, 0xb4, 0x8a, 0x68, 0x23, 0x31, 0x32, 0x29, 0x8a, 0x47, 0x92, 0x12, 0x80, 0xb3, 0xfa, 0x18, 0xe4, 0x8d, 0xc0, 0x4d, 0xfe, 0x97, 0x5f, 0x72, 0x41, 0xb5, 0x5c, 0x7a, 0xbd, 0xf0, 0xcf, 0x5e, 0x97, 0xaa, 0x64, 0x32, + /* (2^143)P */ 0x35, 0x3f, 0x75, 0xc1, 0x7a, 0x75, 0x7e, 0xa9, 0xc6, 0x0b, 0x4e, 0x32, 0x62, 0xec, 0xe3, 0x5c, 0xfb, 0x01, 0x43, 0xb6, 0xd4, 0x5b, 0x75, 0xd2, 0xee, 0x7f, 0x5d, 0x23, 0x2b, 0xb3, 0x54, 0x34, 0x4c, 0xd3, 0xb4, 0x32, 0x84, 0x81, 0xb5, 0x09, 0x76, 0x19, 0xda, 0x58, 0xda, 0x7c, 0xdb, 0x2e, 0xdd, 0x4c, 0x8e, 0xdd, 0x5d, 0x89, 0x10, 0x10, + /* (2^144)P */ 0x57, 0x25, 0x6a, 0x08, 0x37, 0x92, 0xa8, 0xdf, 0x24, 0xef, 0x8f, 0x33, 0x34, 0x52, 0xa4, 0x4c, 0xf0, 0x77, 0x9f, 0x69, 0x77, 0xd5, 0x8f, 0xd2, 0x9a, 0xb3, 0xb6, 0x1d, 0x2d, 0xa6, 0xf7, 0x1f, 0xda, 0xd7, 0xcb, 0x75, 0x11, 0xc3, 0x6b, 0xc0, 0x38, 0xb1, 0xd5, 0x2d, 0x96, 0x84, 0x16, 0xfa, 0x26, 0xb9, 0xcc, 0x3f, 0x16, 0x47, 0x23, 0x74, + /* (2^145)P */ 0x9b, 0x61, 0x2a, 0x1c, 0xdd, 0x39, 0xa5, 0xfa, 0x1c, 0x7d, 0x63, 0x50, 0xca, 0xe6, 0x9d, 0xfa, 0xb7, 0xc4, 0x4c, 0x6a, 0x97, 0x5f, 0x36, 0x4e, 0x47, 0xdd, 0x17, 0xf7, 0xf9, 0x19, 0xce, 0x75, 0x17, 0xad, 0xce, 0x2a, 0xf3, 0xfe, 0x27, 0x8f, 0x3e, 0x48, 0xc0, 0x60, 0x87, 0x24, 0x19, 0xae, 0x59, 0xe4, 0x5a, 0x00, 0x2a, 0xba, 0xa2, 0x1f, + /* (2^146)P */ 0x26, 0x88, 0x42, 0x60, 0x9f, 0x6e, 0x2c, 0x7c, 0x39, 0x0f, 0x47, 0x6a, 0x0e, 0x02, 0xbb, 0x4b, 0x34, 0x29, 0x55, 0x18, 0x36, 0xcf, 0x3b, 0x47, 0xf1, 0x2e, 0xfc, 0x6e, 0x94, 0xff, 0xe8, 0x6b, 0x06, 0xd2, 0xba, 0x77, 0x5e, 0x60, 0xd7, 0x19, 0xef, 0x02, 0x9d, 0x3a, 0xc2, 0xb7, 0xa9, 0xd8, 0x57, 0xee, 0x7e, 0x2b, 0xf2, 0x6d, 0x28, 0xda, + /* (2^147)P */ 0xdf, 0xd9, 0x92, 0x11, 0x98, 0x23, 0xe2, 0x45, 0x2f, 0x74, 0x70, 0xee, 0x0e, 0x55, 0x65, 0x79, 0x86, 0x38, 0x17, 0x92, 0x85, 0x87, 0x99, 0x50, 0xd9, 0x7c, 0xdb, 0xa1, 0x10, 0xec, 0x30, 0xb7, 0x40, 0xa3, 0x23, 0x9b, 0x0e, 0x27, 0x49, 0x29, 0x03, 0x94, 0xff, 0x53, 0xdc, 0xd7, 0xed, 0x49, 0xa9, 0x5a, 0x3b, 0xee, 0xd7, 0xc7, 0x65, 0xaf, + /* (2^148)P */ 0xa0, 0xbd, 0xbe, 0x03, 0xee, 0x0c, 0xbe, 0x32, 0x00, 0x7b, 0x52, 0xcb, 0x92, 0x29, 0xbf, 0xa0, 0xc6, 0xd9, 0xd2, 0xd6, 0x15, 0xe8, 0x3a, 0x75, 0x61, 0x65, 0x56, 0xae, 0xad, 0x3c, 0x2a, 0x64, 0x14, 0x3f, 0x8e, 0xc1, 0x2d, 0x0c, 0x8d, 0x20, 0xdb, 0x58, 0x4b, 0xe5, 0x40, 0x15, 0x4b, 0xdc, 0xa8, 0xbd, 0xef, 0x08, 0xa7, 0xd1, 0xf4, 0xb0, + /* (2^149)P */ 0xa9, 0x0f, 0x05, 0x94, 0x66, 0xac, 0x1f, 0x65, 0x3f, 0xe1, 0xb8, 0xe1, 0x34, 0x5e, 0x1d, 0x8f, 0xe3, 0x93, 0x03, 0x15, 0xff, 0xb6, 0x65, 0xb6, 0x6e, 0xc0, 0x2f, 0xd4, 0x2e, 0xb9, 0x2c, 0x13, 0x3c, 0x99, 0x1c, 0xb5, 0x87, 0xba, 0x79, 0xcb, 0xf0, 0x18, 0x06, 0x86, 0x04, 0x14, 0x25, 0x09, 0xcd, 0x1c, 0x14, 0xda, 0x35, 0xd0, 0x38, 0x3b, + /* (2^150)P */ 0x1b, 0x04, 0xa3, 0x27, 0xb4, 0xd3, 0x37, 0x48, 0x1e, 0x8f, 0x69, 0xd3, 0x5a, 0x2f, 0x20, 0x02, 0x36, 0xbe, 0x06, 0x7b, 0x6b, 0x6c, 0x12, 0x5b, 0x80, 0x74, 0x44, 0xe6, 0xf8, 0xf5, 0x95, 0x59, 0x29, 0xab, 0x51, 0x47, 0x83, 0x28, 0xe0, 0xad, 0xde, 0xaa, 0xd3, 0xb1, 0x1a, 0xcb, 0xa3, 0xcd, 0x8b, 0x6a, 0xb1, 0xa7, 0x0a, 0xd1, 0xf9, 0xbe, + /* (2^151)P */ 0xce, 0x2f, 0x85, 0xca, 0x74, 0x6d, 0x49, 0xb8, 0xce, 0x80, 0x44, 0xe0, 0xda, 0x5b, 0xcf, 0x2f, 0x79, 0x74, 0xfe, 0xb4, 0x2c, 0x99, 0x20, 0x6e, 0x09, 0x04, 0xfb, 0x6d, 0x57, 0x5b, 0x95, 0x0c, 0x45, 0xda, 0x4f, 0x7f, 0x63, 0xcc, 0x85, 0x5a, 0x67, 0x50, 0x68, 0x71, 0xb4, 0x67, 0xb1, 0x2e, 0xc1, 0x1c, 0xdc, 0xff, 0x2a, 0x7c, 0x10, 0x5e, + /* (2^152)P */ 0xa6, 0xde, 0xf3, 0xd4, 0x22, 0x30, 0x24, 0x9e, 0x0b, 0x30, 0x54, 0x59, 0x7e, 0xa2, 0xeb, 0x89, 0x54, 0x65, 0x3e, 0x40, 0xd1, 0xde, 0xe6, 0xee, 0x4d, 0xbf, 0x5e, 0x40, 0x1d, 0xee, 0x4f, 0x68, 0xd9, 0xa7, 0x2f, 0xb3, 0x64, 0xb3, 0xf5, 0xc8, 0xd3, 0xaa, 0x70, 0x70, 0x3d, 0xef, 0xd3, 0x95, 0x54, 0xdb, 0x3e, 0x94, 0x95, 0x92, 0x1f, 0x45, + /* (2^153)P */ 0x22, 0x80, 0x1d, 0x9d, 0x96, 0xa5, 0x78, 0x6f, 0xe0, 0x1e, 0x1b, 0x66, 0x42, 0xc8, 0xae, 0x9e, 0x46, 0x45, 0x08, 0x41, 0xdf, 0x80, 0xae, 0x6f, 0xdb, 0x15, 0x5a, 0x21, 0x31, 0x7a, 0xd0, 0xf2, 0x54, 0x15, 0x88, 0xd3, 0x0f, 0x7f, 0x14, 0x5a, 0x14, 0x97, 0xab, 0xf4, 0x58, 0x6a, 0x9f, 0xea, 0x74, 0xe5, 0x6b, 0x90, 0x59, 0x2b, 0x48, 0xd9, + /* (2^154)P */ 0x12, 0x24, 0x04, 0xf5, 0x50, 0xc2, 0x8c, 0xb0, 0x7c, 0x46, 0x98, 0xd5, 0x24, 0xad, 0xf6, 0x72, 0xdc, 0x82, 0x1a, 0x60, 0xc1, 0xeb, 0x48, 0xef, 0x7f, 0x6e, 0xe6, 0xcc, 0xdb, 0x7b, 0xae, 0xbe, 0x5e, 0x1e, 0x5c, 0xe6, 0x0a, 0x70, 0xdf, 0xa4, 0xa3, 0x85, 0x1b, 0x1b, 0x7f, 0x72, 0xb9, 0x96, 0x6f, 0xdc, 0x03, 0x76, 0x66, 0xfb, 0xa0, 0x33, + /* (2^155)P */ 0x37, 0x40, 0xbb, 0xbc, 0x68, 0x58, 0x86, 0xca, 0xbb, 0xa5, 0x24, 0x76, 0x3d, 0x48, 0xd1, 0xad, 0xb4, 0xa8, 0xcf, 0xc3, 0xb6, 0xa8, 0xba, 0x1a, 0x3a, 0xbe, 0x33, 0x75, 0x04, 0x5c, 0x13, 0x8c, 0x0d, 0x70, 0x8d, 0xa6, 0x4e, 0x2a, 0xeb, 0x17, 0x3c, 0x22, 0xdd, 0x3e, 0x96, 0x40, 0x11, 0x9e, 0x4e, 0xae, 0x3d, 0xf8, 0x91, 0xd7, 0x50, 0xc8, + /* (2^156)P */ 0xd8, 0xca, 0xde, 0x19, 0xcf, 0x00, 0xe4, 0x73, 0x18, 0x7f, 0x9b, 0x9f, 0xf4, 0x5b, 0x49, 0x49, 0x99, 0xdc, 0xa4, 0x46, 0x21, 0xb5, 0xd7, 0x3e, 0xb7, 0x47, 0x1b, 0xa9, 0x9f, 0x4c, 0x69, 0x7d, 0xec, 0x33, 0xd6, 0x1c, 0x51, 0x7f, 0x47, 0x74, 0x7a, 0x6c, 0xf3, 0xd2, 0x2e, 0xbf, 0xdf, 0x6c, 0x9e, 0x77, 0x3b, 0x34, 0xf6, 0x73, 0x80, 0xed, + /* (2^157)P */ 0x16, 0xfb, 0x16, 0xc3, 0xc2, 0x83, 0xe4, 0xf4, 0x03, 0x7f, 0x52, 0xb0, 0x67, 0x51, 0x7b, 0x24, 0x5a, 0x51, 0xd3, 0xb6, 0x4e, 0x59, 0x76, 0xcd, 0x08, 0x7b, 0x1d, 0x7a, 0x9c, 0x65, 0xae, 0xce, 0xaa, 0xd2, 0x1c, 0x85, 0x66, 0x68, 0x06, 0x15, 0xa8, 0x06, 0xe6, 0x16, 0x37, 0xf4, 0x49, 0x9e, 0x0f, 0x50, 0x37, 0xb1, 0xb2, 0x93, 0x70, 0x43, + /* (2^158)P */ 0x18, 0x3a, 0x16, 0xe5, 0x8d, 0xc8, 0x35, 0xd6, 0x7b, 0x09, 0xec, 0x61, 0x5f, 0x5c, 0x2a, 0x19, 0x96, 0x2e, 0xc3, 0xfd, 0xab, 0xe6, 0x23, 0xae, 0xab, 0xc5, 0xcb, 0xb9, 0x7b, 0x2d, 0x34, 0x51, 0xb9, 0x41, 0x9e, 0x7d, 0xca, 0xda, 0x25, 0x45, 0x14, 0xb0, 0xc7, 0x4d, 0x26, 0x2b, 0xfe, 0x43, 0xb0, 0x21, 0x5e, 0xfa, 0xdc, 0x7c, 0xf9, 0x5a, + /* (2^159)P */ 0x94, 0xad, 0x42, 0x17, 0xf5, 0xcd, 0x1c, 0x0d, 0xf6, 0x41, 0xd2, 0x55, 0xbb, 0x50, 0xf1, 0xc6, 0xbc, 0xa6, 0xc5, 0x3a, 0xfd, 0x9b, 0x75, 0x3e, 0xf6, 0x1a, 0xa7, 0xb2, 0x6e, 0x64, 0x12, 0xdc, 0x3c, 0xe5, 0xf6, 0xfc, 0x3b, 0xfa, 0x43, 0x81, 0xd4, 0xa5, 0xee, 0xf5, 0x9c, 0x47, 0x2f, 0xd0, 0x9c, 0xde, 0xa1, 0x48, 0x91, 0x9a, 0x34, 0xc1, + /* (2^160)P */ 0x37, 0x1b, 0xb3, 0x88, 0xc9, 0x98, 0x4e, 0xfb, 0x84, 0x4f, 0x2b, 0x0a, 0xb6, 0x8f, 0x35, 0x15, 0xcd, 0x61, 0x7a, 0x5f, 0x5c, 0xa0, 0xca, 0x23, 0xa0, 0x93, 0x1f, 0xcc, 0x3c, 0x39, 0x3a, 0x24, 0xa7, 0x49, 0xad, 0x8d, 0x59, 0xcc, 0x94, 0x5a, 0x16, 0xf5, 0x70, 0xe8, 0x52, 0x1e, 0xee, 0x20, 0x30, 0x17, 0x7e, 0xf0, 0x4c, 0x93, 0x06, 0x5a, + /* (2^161)P */ 0x81, 0xba, 0x3b, 0xd7, 0x3e, 0xb4, 0x32, 0x3a, 0x22, 0x39, 0x2a, 0xfc, 0x19, 0xd9, 0xd2, 0xf6, 0xc5, 0x79, 0x6c, 0x0e, 0xde, 0xda, 0x01, 0xff, 0x52, 0xfb, 0xb6, 0x95, 0x4e, 0x7a, 0x10, 0xb8, 0x06, 0x86, 0x3c, 0xcd, 0x56, 0xd6, 0x15, 0xbf, 0x6e, 0x3e, 0x4f, 0x35, 0x5e, 0xca, 0xbc, 0xa5, 0x95, 0xa2, 0xdf, 0x2d, 0x1d, 0xaf, 0x59, 0xf9, + /* (2^162)P */ 0x69, 0xe5, 0xe2, 0xfa, 0xc9, 0x7f, 0xdd, 0x09, 0xf5, 0x6b, 0x4e, 0x2e, 0xbe, 0xb4, 0xbf, 0x3e, 0xb2, 0xf2, 0x81, 0x30, 0xe1, 0x07, 0xa8, 0x0d, 0x2b, 0xd2, 0x5a, 0x55, 0xbe, 0x4b, 0x86, 0x5d, 0xb0, 0x5e, 0x7c, 0x8f, 0xc1, 0x3c, 0x81, 0x4c, 0xf7, 0x6d, 0x7d, 0xe6, 0x4f, 0x8a, 0x85, 0xc2, 0x2f, 0x28, 0xef, 0x8c, 0x69, 0xc2, 0xc2, 0x1a, + /* (2^163)P */ 0xd9, 0xe4, 0x0e, 0x1e, 0xc2, 0xf7, 0x2f, 0x9f, 0xa1, 0x40, 0xfe, 0x46, 0x16, 0xaf, 0x2e, 0xd1, 0xec, 0x15, 0x9b, 0x61, 0x92, 0xce, 0xfc, 0x10, 0x43, 0x1d, 0x00, 0xf6, 0xbe, 0x20, 0x80, 0x80, 0x6f, 0x3c, 0x16, 0x94, 0x59, 0xba, 0x03, 0x53, 0x6e, 0xb6, 0xdd, 0x25, 0x7b, 0x86, 0xbf, 0x96, 0xf4, 0x2f, 0xa1, 0x96, 0x8d, 0xf9, 0xb3, 0x29, + /* (2^164)P */ 0x3b, 0x04, 0x60, 0x6e, 0xce, 0xab, 0xd2, 0x63, 0x18, 0x53, 0x88, 0x16, 0x4a, 0x6a, 0xab, 0x72, 0x03, 0x68, 0xa5, 0xd4, 0x0d, 0xb2, 0x82, 0x81, 0x1f, 0x2b, 0x5c, 0x75, 0xe8, 0xd2, 0x1d, 0x7f, 0xe7, 0x1b, 0x35, 0x02, 0xde, 0xec, 0xbd, 0xcb, 0xc7, 0x01, 0xd3, 0x95, 0x61, 0xfe, 0xb2, 0x7a, 0x66, 0x09, 0x4c, 0x6d, 0xfd, 0x39, 0xf7, 0x52, + /* (2^165)P */ 0x42, 0xc1, 0x5f, 0xf8, 0x35, 0x52, 0xc1, 0xfe, 0xc5, 0x11, 0x80, 0x1c, 0x11, 0x46, 0x31, 0x11, 0xbe, 0xd0, 0xc4, 0xb6, 0x07, 0x13, 0x38, 0xa0, 0x8d, 0x65, 0xf0, 0x56, 0x9e, 0x16, 0xbf, 0x9d, 0xcd, 0x51, 0x34, 0xf9, 0x08, 0x48, 0x7b, 0x76, 0x0c, 0x7b, 0x30, 0x07, 0xa8, 0x76, 0xaf, 0xa3, 0x29, 0x38, 0xb0, 0x58, 0xde, 0x72, 0x4b, 0x45, + /* (2^166)P */ 0xd4, 0x16, 0xa7, 0xc0, 0xb4, 0x9f, 0xdf, 0x1a, 0x37, 0xc8, 0x35, 0xed, 0xc5, 0x85, 0x74, 0x64, 0x09, 0x22, 0xef, 0xe9, 0x0c, 0xaf, 0x12, 0x4c, 0x9e, 0xf8, 0x47, 0x56, 0xe0, 0x7f, 0x4e, 0x24, 0x6b, 0x0c, 0xe7, 0xad, 0xc6, 0x47, 0x1d, 0xa4, 0x0d, 0x86, 0x89, 0x65, 0xe8, 0x5f, 0x71, 0xc7, 0xe9, 0xcd, 0xec, 0x6c, 0x62, 0xc7, 0xe3, 0xb3, + /* (2^167)P */ 0xb5, 0xea, 0x86, 0xe3, 0x15, 0x18, 0x3f, 0x6d, 0x7b, 0x05, 0x95, 0x15, 0x53, 0x26, 0x1c, 0xeb, 0xbe, 0x7e, 0x16, 0x42, 0x4b, 0xa2, 0x3d, 0xdd, 0x0e, 0xff, 0xba, 0x67, 0xb5, 0xae, 0x7a, 0x17, 0xde, 0x23, 0xad, 0x14, 0xcc, 0xd7, 0xaf, 0x57, 0x01, 0xe0, 0xdd, 0x48, 0xdd, 0xd7, 0xe3, 0xdf, 0xe9, 0x2d, 0xda, 0x67, 0xa4, 0x9f, 0x29, 0x04, + /* (2^168)P */ 0x16, 0x53, 0xe6, 0x9c, 0x4e, 0xe5, 0x1e, 0x70, 0x81, 0x25, 0x02, 0x9b, 0x47, 0x6d, 0xd2, 0x08, 0x73, 0xbe, 0x0a, 0xf1, 0x7b, 0xeb, 0x24, 0xeb, 0x38, 0x23, 0x5c, 0xb6, 0x3e, 0xce, 0x1e, 0xe3, 0xbc, 0x82, 0x35, 0x1f, 0xaf, 0x3a, 0x3a, 0xe5, 0x4e, 0xc1, 0xca, 0xbf, 0x47, 0xb4, 0xbb, 0xbc, 0x5f, 0xea, 0xc6, 0xca, 0xf3, 0xa0, 0xa2, 0x73, + /* (2^169)P */ 0xef, 0xa4, 0x7a, 0x4e, 0xe4, 0xc7, 0xb6, 0x43, 0x2e, 0xa5, 0xe4, 0xa5, 0xba, 0x1e, 0xa5, 0xfe, 0x9e, 0xce, 0xa9, 0x80, 0x04, 0xcb, 0x4f, 0xd8, 0x74, 0x05, 0x48, 0xfa, 0x99, 0x11, 0x5d, 0x97, 0x3b, 0x07, 0x0d, 0xdd, 0xe6, 0xb1, 0x74, 0x87, 0x1a, 0xd3, 0x26, 0xb7, 0x8f, 0xe1, 0x63, 0x3d, 0xec, 0x53, 0x93, 0xb0, 0x81, 0x78, 0x34, 0xa4, + /* (2^170)P */ 0xe1, 0xe7, 0xd4, 0x58, 0x9d, 0x0e, 0x8b, 0x65, 0x66, 0x37, 0x16, 0x48, 0x6f, 0xaa, 0x42, 0x37, 0x77, 0xad, 0xb1, 0x56, 0x48, 0xdf, 0x65, 0x36, 0x30, 0xb8, 0x00, 0x12, 0xd8, 0x32, 0x28, 0x7f, 0xc1, 0x71, 0xeb, 0x93, 0x0f, 0x48, 0x04, 0xe1, 0x5a, 0x6a, 0x96, 0xc1, 0xca, 0x89, 0x6d, 0x1b, 0x82, 0x4c, 0x18, 0x6d, 0x55, 0x4b, 0xea, 0xfd, + /* (2^171)P */ 0x62, 0x1a, 0x53, 0xb4, 0xb1, 0xbe, 0x6f, 0x15, 0x18, 0x88, 0xd4, 0x66, 0x61, 0xc7, 0x12, 0x69, 0x02, 0xbd, 0x03, 0x23, 0x2b, 0xef, 0xf9, 0x54, 0xa4, 0x85, 0xa8, 0xe3, 0xb7, 0xbd, 0xa9, 0xa3, 0xf3, 0x2a, 0xdd, 0xf1, 0xd4, 0x03, 0x0f, 0xa9, 0xa1, 0xd8, 0xa3, 0xcd, 0xb2, 0x71, 0x90, 0x4b, 0x35, 0x62, 0xf2, 0x2f, 0xce, 0x67, 0x1f, 0xaa, + /* (2^172)P */ 0x9e, 0x1e, 0xcd, 0x43, 0x7e, 0x87, 0x37, 0x94, 0x3a, 0x97, 0x4c, 0x7e, 0xee, 0xc9, 0x37, 0x85, 0xf1, 0xd9, 0x4f, 0xbf, 0xf9, 0x6f, 0x39, 0x9a, 0x39, 0x87, 0x2e, 0x25, 0x84, 0x42, 0xc3, 0x80, 0xcb, 0x07, 0x22, 0xae, 0x30, 0xd5, 0x50, 0xa1, 0x23, 0xcc, 0x31, 0x81, 0x9d, 0xf1, 0x30, 0xd9, 0x2b, 0x73, 0x41, 0x16, 0x50, 0xab, 0x2d, 0xa2, + /* (2^173)P */ 0xa4, 0x69, 0x4f, 0xa1, 0x4e, 0xb9, 0xbf, 0x14, 0xe8, 0x2b, 0x04, 0x93, 0xb7, 0x6e, 0x9f, 0x7d, 0x73, 0x0a, 0xc5, 0x14, 0xb8, 0xde, 0x8c, 0xc1, 0xfe, 0xc0, 0xa7, 0xa4, 0xcc, 0x42, 0x42, 0x81, 0x15, 0x65, 0x8a, 0x80, 0xb9, 0xde, 0x1f, 0x60, 0x33, 0x0e, 0xcb, 0xfc, 0xe0, 0xdb, 0x83, 0xa1, 0xe5, 0xd0, 0x16, 0x86, 0x2c, 0xe2, 0x87, 0xed, + /* (2^174)P */ 0x7a, 0xc0, 0xeb, 0x6b, 0xf6, 0x0d, 0x4c, 0x6d, 0x1e, 0xdb, 0xab, 0xe7, 0x19, 0x45, 0xc6, 0xe3, 0xb2, 0x06, 0xbb, 0xbc, 0x70, 0x99, 0x83, 0x33, 0xeb, 0x28, 0xc8, 0x77, 0xf6, 0x4d, 0x01, 0xb7, 0x59, 0xa0, 0xd2, 0xb3, 0x2a, 0x72, 0x30, 0xe7, 0x11, 0x39, 0xb6, 0x41, 0x29, 0x65, 0x5a, 0x14, 0xb9, 0x86, 0x08, 0xe0, 0x7d, 0x32, 0x8c, 0xf0, + /* (2^175)P */ 0x5c, 0x11, 0x30, 0x9e, 0x05, 0x27, 0xf5, 0x45, 0x0f, 0xb3, 0xc9, 0x75, 0xc3, 0xd7, 0xe1, 0x82, 0x3b, 0x8e, 0x87, 0x23, 0x00, 0x15, 0x19, 0x07, 0xd9, 0x21, 0x53, 0xc7, 0xf1, 0xa3, 0xbf, 0x70, 0x64, 0x15, 0x18, 0xca, 0x23, 0x9e, 0xd3, 0x08, 0xc3, 0x2a, 0x8b, 0xe5, 0x83, 0x04, 0x89, 0x14, 0xfd, 0x28, 0x25, 0x1c, 0xe3, 0x26, 0xa7, 0x22, + /* (2^176)P */ 0xdc, 0xd4, 0x75, 0x60, 0x99, 0x94, 0xea, 0x09, 0x8e, 0x8a, 0x3c, 0x1b, 0xf9, 0xbd, 0x33, 0x0d, 0x51, 0x3d, 0x12, 0x6f, 0x4e, 0x72, 0xe0, 0x17, 0x20, 0xe9, 0x75, 0xe6, 0x3a, 0xb2, 0x13, 0x83, 0x4e, 0x7a, 0x08, 0x9e, 0xd1, 0x04, 0x5f, 0x6b, 0x42, 0x0b, 0x76, 0x2a, 0x2d, 0x77, 0x53, 0x6c, 0x65, 0x6d, 0x8e, 0x25, 0x3c, 0xb6, 0x8b, 0x69, + /* (2^177)P */ 0xb9, 0x49, 0x28, 0xd0, 0xdc, 0x6c, 0x8f, 0x4c, 0xc9, 0x14, 0x8a, 0x38, 0xa3, 0xcb, 0xc4, 0x9d, 0x53, 0xcf, 0xe9, 0xe3, 0xcf, 0xe0, 0xb1, 0xf2, 0x1b, 0x4c, 0x7f, 0x83, 0x2a, 0x7a, 0xe9, 0x8b, 0x3b, 0x86, 0x61, 0x30, 0xe9, 0x99, 0xbd, 0xba, 0x19, 0x6e, 0x65, 0x2a, 0x12, 0x3e, 0x9c, 0xa8, 0xaf, 0xc3, 0xcf, 0xf8, 0x1f, 0x77, 0x86, 0xea, + /* (2^178)P */ 0x30, 0xde, 0xe7, 0xff, 0x54, 0xf7, 0xa2, 0x59, 0xf6, 0x0b, 0xfb, 0x7a, 0xf2, 0x39, 0xf0, 0xdb, 0x39, 0xbc, 0xf0, 0xfa, 0x60, 0xeb, 0x6b, 0x4f, 0x47, 0x17, 0xc8, 0x00, 0x65, 0x6d, 0x25, 0x1c, 0xd0, 0x48, 0x56, 0x53, 0x45, 0x11, 0x30, 0x02, 0x49, 0x20, 0x27, 0xac, 0xf2, 0x4c, 0xac, 0x64, 0x3d, 0x52, 0xb8, 0x89, 0xe0, 0x93, 0x16, 0x0f, + /* (2^179)P */ 0x84, 0x09, 0xba, 0x40, 0xb2, 0x2f, 0xa3, 0xa8, 0xc2, 0xba, 0x46, 0x33, 0x05, 0x9d, 0x62, 0xad, 0xa1, 0x3c, 0x33, 0xef, 0x0d, 0xeb, 0xf0, 0x77, 0x11, 0x5a, 0xb0, 0x21, 0x9c, 0xdf, 0x55, 0x24, 0x25, 0x35, 0x51, 0x61, 0x92, 0xf0, 0xb1, 0xce, 0xf5, 0xd4, 0x7b, 0x6c, 0x21, 0x9d, 0x56, 0x52, 0xf8, 0xa1, 0x4c, 0xe9, 0x27, 0x55, 0xac, 0x91, + /* (2^180)P */ 0x03, 0x3e, 0x30, 0xd2, 0x0a, 0xfa, 0x7d, 0x82, 0x3d, 0x1f, 0x8b, 0xcb, 0xb6, 0x04, 0x5c, 0xcc, 0x8b, 0xda, 0xe2, 0x68, 0x74, 0x08, 0x8c, 0x44, 0x83, 0x57, 0x6d, 0x6f, 0x80, 0xb0, 0x7e, 0xa9, 0x82, 0x91, 0x7b, 0x4c, 0x37, 0x97, 0xd1, 0x63, 0xd1, 0xbd, 0x45, 0xe6, 0x8a, 0x86, 0xd6, 0x89, 0x54, 0xfd, 0xd2, 0xb1, 0xd7, 0x54, 0xad, 0xaf, + /* (2^181)P */ 0x8b, 0x33, 0x62, 0x49, 0x9f, 0x63, 0xf9, 0x87, 0x42, 0x58, 0xbf, 0xb3, 0xe6, 0x68, 0x02, 0x60, 0x5c, 0x76, 0x62, 0xf7, 0x61, 0xd7, 0x36, 0x31, 0xf7, 0x9c, 0xb5, 0xe5, 0x13, 0x6c, 0xea, 0x78, 0xae, 0xcf, 0xde, 0xbf, 0xb6, 0xeb, 0x4f, 0xc8, 0x2a, 0xb4, 0x9a, 0x9f, 0xf3, 0xd1, 0x6a, 0xec, 0x0c, 0xbd, 0x85, 0x98, 0x40, 0x06, 0x1c, 0x2a, + /* (2^182)P */ 0x74, 0x3b, 0xe7, 0x81, 0xd5, 0xae, 0x54, 0x56, 0x03, 0xe8, 0x97, 0x16, 0x76, 0xcf, 0x24, 0x96, 0x96, 0x5b, 0xcc, 0x09, 0xab, 0x23, 0x6f, 0x54, 0xae, 0x8f, 0xe4, 0x12, 0xcb, 0xfd, 0xbc, 0xac, 0x93, 0x45, 0x3d, 0x68, 0x08, 0x22, 0x59, 0xc6, 0xf0, 0x47, 0x19, 0x8c, 0x79, 0x93, 0x1e, 0x0e, 0x30, 0xb0, 0x94, 0xfb, 0x17, 0x1d, 0x5a, 0x12, + /* (2^183)P */ 0x85, 0xff, 0x40, 0x18, 0x85, 0xff, 0x44, 0x37, 0x69, 0x23, 0x4d, 0x34, 0xe1, 0xeb, 0xa3, 0x1b, 0x55, 0x40, 0xc1, 0x64, 0xf4, 0xd4, 0x13, 0x0a, 0x9f, 0xb9, 0x19, 0xfc, 0x88, 0x7d, 0xc0, 0x72, 0xcf, 0x69, 0x2f, 0xd2, 0x0c, 0x82, 0x0f, 0xda, 0x08, 0xba, 0x0f, 0xaa, 0x3b, 0xe9, 0xe5, 0x83, 0x7a, 0x06, 0xe8, 0x1b, 0x38, 0x43, 0xc3, 0x54, + /* (2^184)P */ 0x14, 0xaa, 0xb3, 0x6e, 0xe6, 0x28, 0xee, 0xc5, 0x22, 0x6c, 0x7c, 0xf9, 0xa8, 0x71, 0xcc, 0xfe, 0x68, 0x7e, 0xd3, 0xb8, 0x37, 0x96, 0xca, 0x0b, 0xd9, 0xb6, 0x06, 0xa9, 0xf6, 0x71, 0xe8, 0x31, 0xf7, 0xd8, 0xf1, 0x5d, 0xab, 0xb9, 0xf0, 0x5c, 0x98, 0xcf, 0x22, 0xa2, 0x2a, 0xf6, 0xd0, 0x59, 0xf0, 0x9d, 0xd9, 0x6a, 0x4f, 0x59, 0x57, 0xad, + /* (2^185)P */ 0xd7, 0x2b, 0x3d, 0x38, 0x4c, 0x2e, 0x23, 0x4d, 0x49, 0xa2, 0x62, 0x62, 0xf9, 0x0f, 0xde, 0x08, 0xf3, 0x86, 0x71, 0xb6, 0xc7, 0xf9, 0x85, 0x9c, 0x33, 0xa1, 0xcf, 0x16, 0xaa, 0x60, 0xb9, 0xb7, 0xea, 0xed, 0x01, 0x1c, 0x59, 0xdb, 0x3f, 0x3f, 0x97, 0x2e, 0xf0, 0x09, 0x9f, 0x10, 0x85, 0x5f, 0x53, 0x39, 0xf3, 0x13, 0x40, 0x56, 0x95, 0xf9, + /* (2^186)P */ 0xb4, 0xe3, 0xda, 0xc6, 0x1f, 0x78, 0x8e, 0xac, 0xd4, 0x20, 0x1d, 0xa0, 0xbf, 0x4c, 0x09, 0x16, 0xa7, 0x30, 0xb5, 0x8d, 0x9e, 0xa1, 0x5f, 0x6d, 0x52, 0xf4, 0x71, 0xb6, 0x32, 0x2d, 0x21, 0x51, 0xc6, 0xfc, 0x2f, 0x08, 0xf4, 0x13, 0x6c, 0x55, 0xba, 0x72, 0x81, 0x24, 0x49, 0x0e, 0x4f, 0x06, 0x36, 0x39, 0x6a, 0xc5, 0x81, 0xfc, 0xeb, 0xb2, + /* (2^187)P */ 0x7d, 0x8d, 0xc8, 0x6c, 0xea, 0xb4, 0xb9, 0xe8, 0x40, 0xc9, 0x69, 0xc9, 0x30, 0x05, 0xfd, 0x34, 0x46, 0xfd, 0x94, 0x05, 0x16, 0xf5, 0x4b, 0x13, 0x3d, 0x24, 0x1a, 0xd6, 0x64, 0x2b, 0x9c, 0xe2, 0xa5, 0xd9, 0x98, 0xe0, 0xe8, 0xf4, 0xbc, 0x2c, 0xbd, 0xa2, 0x56, 0xe3, 0x9e, 0x14, 0xdb, 0xbf, 0x05, 0xbf, 0x9a, 0x13, 0x5d, 0xf7, 0x91, 0xa3, + /* (2^188)P */ 0x8b, 0xcb, 0x27, 0xf3, 0x15, 0x26, 0x05, 0x40, 0x0f, 0xa6, 0x15, 0x13, 0x71, 0x95, 0xa2, 0xc6, 0x38, 0x04, 0x67, 0xf8, 0x9a, 0x83, 0x06, 0xaa, 0x25, 0x36, 0x72, 0x01, 0x6f, 0x74, 0x5f, 0xe5, 0x6e, 0x44, 0x99, 0xce, 0x13, 0xbc, 0x82, 0xc2, 0x0d, 0xa4, 0x98, 0x50, 0x38, 0xf3, 0xa2, 0xc5, 0xe5, 0x24, 0x1f, 0x6f, 0x56, 0x3e, 0x07, 0xb2, + /* (2^189)P */ 0xbd, 0x0f, 0x32, 0x60, 0x07, 0xb1, 0xd7, 0x0b, 0x11, 0x07, 0x57, 0x02, 0x89, 0xe8, 0x8b, 0xe8, 0x5a, 0x1f, 0xee, 0x54, 0x6b, 0xff, 0xb3, 0x04, 0x07, 0x57, 0x13, 0x0b, 0x94, 0xa8, 0x4d, 0x81, 0xe2, 0x17, 0x16, 0x45, 0xd4, 0x4b, 0xf7, 0x7e, 0x64, 0x66, 0x20, 0xe8, 0x0b, 0x26, 0xfd, 0xa9, 0x8a, 0x47, 0x52, 0x89, 0x14, 0xd0, 0xd1, 0xa1, + /* (2^190)P */ 0xdc, 0x03, 0xe6, 0x20, 0x44, 0x47, 0x8f, 0x04, 0x16, 0x24, 0x22, 0xc1, 0x55, 0x5c, 0xbe, 0x43, 0xc3, 0x92, 0xc5, 0x54, 0x3d, 0x5d, 0xd1, 0x05, 0x9c, 0xc6, 0x7c, 0xbf, 0x23, 0x84, 0x1a, 0xba, 0x4f, 0x1f, 0xfc, 0xa1, 0xae, 0x1a, 0x64, 0x02, 0x51, 0xf1, 0xcb, 0x7a, 0x20, 0xce, 0xb2, 0x34, 0x3c, 0xca, 0xe0, 0xe4, 0xba, 0x22, 0xd4, 0x7b, + /* (2^191)P */ 0xca, 0xfd, 0xca, 0xd7, 0xde, 0x61, 0xae, 0xf0, 0x79, 0x0c, 0x20, 0xab, 0xbc, 0x6f, 0x4d, 0x61, 0xf0, 0xc7, 0x9c, 0x8d, 0x4b, 0x52, 0xf3, 0xb9, 0x48, 0x63, 0x0b, 0xb6, 0xd2, 0x25, 0x9a, 0x96, 0x72, 0xc1, 0x6b, 0x0c, 0xb5, 0xfb, 0x71, 0xaa, 0xad, 0x47, 0x5b, 0xe7, 0xc0, 0x0a, 0x55, 0xb2, 0xd4, 0x16, 0x2f, 0xb1, 0x01, 0xfd, 0xce, 0x27, + /* (2^192)P */ 0x64, 0x11, 0x4b, 0xab, 0x57, 0x09, 0xc6, 0x49, 0x4a, 0x37, 0xc3, 0x36, 0xc4, 0x7b, 0x81, 0x1f, 0x42, 0xed, 0xbb, 0xe0, 0xa0, 0x8d, 0x51, 0xe6, 0xca, 0x8b, 0xb9, 0xcd, 0x99, 0x2d, 0x91, 0x53, 0xa9, 0x47, 0xcb, 0x32, 0xc7, 0xa4, 0x92, 0xec, 0x46, 0x74, 0x44, 0x6d, 0x71, 0x9f, 0x6d, 0x0c, 0x69, 0xa4, 0xf8, 0xbe, 0x9f, 0x7f, 0xa0, 0xd7, + /* (2^193)P */ 0x5f, 0x33, 0xb6, 0x91, 0xc8, 0xa5, 0x3f, 0x5d, 0x7f, 0x38, 0x6e, 0x74, 0x20, 0x4a, 0xd6, 0x2b, 0x98, 0x2a, 0x41, 0x4b, 0x83, 0x64, 0x0b, 0x92, 0x7a, 0x06, 0x1e, 0xc6, 0x2c, 0xf6, 0xe4, 0x91, 0xe5, 0xb1, 0x2e, 0x6e, 0x4e, 0xa8, 0xc8, 0x14, 0x32, 0x57, 0x44, 0x1c, 0xe4, 0xb9, 0x7f, 0x54, 0x51, 0x08, 0x81, 0xaa, 0x4e, 0xce, 0xa1, 0x5d, + /* (2^194)P */ 0x5c, 0xd5, 0x9b, 0x5e, 0x7c, 0xb5, 0xb1, 0x52, 0x73, 0x00, 0x41, 0x56, 0x79, 0x08, 0x7e, 0x07, 0x28, 0x06, 0xa6, 0xfb, 0x7f, 0x69, 0xbd, 0x7a, 0x3c, 0xae, 0x9f, 0x39, 0xbb, 0x54, 0xa2, 0x79, 0xb9, 0x0e, 0x7f, 0xbb, 0xe0, 0xe6, 0xb7, 0x27, 0x64, 0x38, 0x45, 0xdb, 0x84, 0xe4, 0x61, 0x72, 0x3f, 0xe2, 0x24, 0xfe, 0x7a, 0x31, 0x9a, 0xc9, + /* (2^195)P */ 0xa1, 0xd2, 0xa4, 0xee, 0x24, 0x96, 0xe5, 0x5b, 0x79, 0x78, 0x3c, 0x7b, 0x82, 0x3b, 0x8b, 0x58, 0x0b, 0xa3, 0x63, 0x2d, 0xbc, 0x75, 0x46, 0xe8, 0x83, 0x1a, 0xc0, 0x2a, 0x92, 0x61, 0xa8, 0x75, 0x37, 0x3c, 0xbf, 0x0f, 0xef, 0x8f, 0x6c, 0x97, 0x75, 0x10, 0x05, 0x7a, 0xde, 0x23, 0xe8, 0x2a, 0x35, 0xeb, 0x41, 0x64, 0x7d, 0xcf, 0xe0, 0x52, + /* (2^196)P */ 0x4a, 0xd0, 0x49, 0x93, 0xae, 0xf3, 0x24, 0x8c, 0xe1, 0x09, 0x98, 0x45, 0xd8, 0xb9, 0xfe, 0x8e, 0x8c, 0xa8, 0x2c, 0xc9, 0x9f, 0xce, 0x01, 0xdc, 0x38, 0x11, 0xab, 0x85, 0xb9, 0xe8, 0x00, 0x51, 0xfd, 0x82, 0xe1, 0x9b, 0x4e, 0xfc, 0xb5, 0x2a, 0x0f, 0x8b, 0xda, 0x4e, 0x02, 0xca, 0xcc, 0xe3, 0x91, 0xc4, 0xe0, 0xcf, 0x7b, 0xd6, 0xe6, 0x6a, + /* (2^197)P */ 0xfe, 0x11, 0xd7, 0xaa, 0xe3, 0x0c, 0x52, 0x2e, 0x04, 0xe0, 0xe0, 0x61, 0xc8, 0x05, 0xd7, 0x31, 0x4c, 0xc3, 0x9b, 0x2d, 0xce, 0x59, 0xbe, 0x12, 0xb7, 0x30, 0x21, 0xfc, 0x81, 0xb8, 0x5e, 0x57, 0x73, 0xd0, 0xad, 0x8e, 0x9e, 0xe4, 0xeb, 0xcd, 0xcf, 0xd2, 0x0f, 0x01, 0x35, 0x16, 0xed, 0x7a, 0x43, 0x8e, 0x42, 0xdc, 0xea, 0x4c, 0xa8, 0x7c, + /* (2^198)P */ 0x37, 0x26, 0xcc, 0x76, 0x0b, 0xe5, 0x76, 0xdd, 0x3e, 0x19, 0x3c, 0xc4, 0x6c, 0x7f, 0xd0, 0x03, 0xc1, 0xb8, 0x59, 0x82, 0xca, 0x36, 0xc1, 0xe4, 0xc8, 0xb2, 0x83, 0x69, 0x9c, 0xc5, 0x9d, 0x12, 0x82, 0x1c, 0xea, 0xb2, 0x84, 0x9f, 0xf3, 0x52, 0x6b, 0xbb, 0xd8, 0x81, 0x56, 0x83, 0x04, 0x66, 0x05, 0x22, 0x49, 0x37, 0x93, 0xb1, 0xfd, 0xd5, + /* (2^199)P */ 0xaf, 0x96, 0xbf, 0x03, 0xbe, 0xe6, 0x5d, 0x78, 0x19, 0xba, 0x37, 0x46, 0x0a, 0x2b, 0x52, 0x7c, 0xd8, 0x51, 0x9e, 0x3d, 0x29, 0x42, 0xdb, 0x0e, 0x31, 0x20, 0x94, 0xf8, 0x43, 0x9a, 0x2d, 0x22, 0xd3, 0xe3, 0xa1, 0x79, 0x68, 0xfb, 0x2d, 0x7e, 0xd6, 0x79, 0xda, 0x0b, 0xc6, 0x5b, 0x76, 0x68, 0xf0, 0xfe, 0x72, 0x59, 0xbb, 0xa1, 0x9c, 0x74, + /* (2^200)P */ 0x0a, 0xd9, 0xec, 0xc5, 0xbd, 0xf0, 0xda, 0xcf, 0x82, 0xab, 0x46, 0xc5, 0x32, 0x13, 0xdc, 0x5b, 0xac, 0xc3, 0x53, 0x9a, 0x7f, 0xef, 0xa5, 0x40, 0x5a, 0x1f, 0xc1, 0x12, 0x91, 0x54, 0x83, 0x6a, 0xb0, 0x9a, 0x85, 0x4d, 0xbf, 0x36, 0x8e, 0xd3, 0xa2, 0x2b, 0xe5, 0xd6, 0xc6, 0xe1, 0x58, 0x5b, 0x82, 0x9b, 0xc8, 0xf2, 0x03, 0xba, 0xf5, 0x92, + /* (2^201)P */ 0xfb, 0x21, 0x7e, 0xde, 0xe7, 0xb4, 0xc0, 0x56, 0x86, 0x3a, 0x5b, 0x78, 0xf8, 0xf0, 0xf4, 0xe7, 0x5c, 0x00, 0xd2, 0xd7, 0xd6, 0xf8, 0x75, 0x5e, 0x0f, 0x3e, 0xd1, 0x4b, 0x77, 0xd8, 0xad, 0xb0, 0xc9, 0x8b, 0x59, 0x7d, 0x30, 0x76, 0x64, 0x7a, 0x76, 0xd9, 0x51, 0x69, 0xfc, 0xbd, 0x8e, 0xb5, 0x55, 0xe0, 0xd2, 0x07, 0x15, 0xa9, 0xf7, 0xa4, + /* (2^202)P */ 0xaa, 0x2d, 0x2f, 0x2b, 0x3c, 0x15, 0xdd, 0xcd, 0xe9, 0x28, 0x82, 0x4f, 0xa2, 0xaa, 0x31, 0x48, 0xcc, 0xfa, 0x07, 0x73, 0x8a, 0x34, 0x74, 0x0d, 0xab, 0x1a, 0xca, 0xd2, 0xbf, 0x3a, 0xdb, 0x1a, 0x5f, 0x50, 0x62, 0xf4, 0x6b, 0x83, 0x38, 0x43, 0x96, 0xee, 0x6b, 0x39, 0x1e, 0xf0, 0x17, 0x80, 0x1e, 0x9b, 0xed, 0x2b, 0x2f, 0xcc, 0x65, 0xf7, + /* (2^203)P */ 0x03, 0xb3, 0x23, 0x9c, 0x0d, 0xd1, 0xeb, 0x7e, 0x34, 0x17, 0x8a, 0x4c, 0xde, 0x54, 0x39, 0xc4, 0x11, 0x82, 0xd3, 0xa4, 0x00, 0x32, 0x95, 0x9c, 0xa6, 0x64, 0x76, 0x6e, 0xd6, 0x53, 0x27, 0xb4, 0x6a, 0x14, 0x8c, 0x54, 0xf6, 0x58, 0x9e, 0x22, 0x4a, 0x55, 0x18, 0x77, 0xd0, 0x08, 0x6b, 0x19, 0x8a, 0xb5, 0xe7, 0x19, 0xb8, 0x60, 0x92, 0xb1, + /* (2^204)P */ 0x66, 0xec, 0xf3, 0x12, 0xde, 0x67, 0x7f, 0xd4, 0x5b, 0xf6, 0x70, 0x64, 0x0a, 0xb5, 0xc2, 0xf9, 0xb3, 0x64, 0xab, 0x56, 0x46, 0xc7, 0x93, 0xc2, 0x8b, 0x2d, 0xd0, 0xd6, 0x39, 0x3b, 0x1f, 0xcd, 0xb3, 0xac, 0xcc, 0x2c, 0x27, 0x6a, 0xbc, 0xb3, 0x4b, 0xa8, 0x3c, 0x69, 0x20, 0xe2, 0x18, 0x35, 0x17, 0xe1, 0x8a, 0xd3, 0x11, 0x74, 0xaa, 0x4d, + /* (2^205)P */ 0x96, 0xc4, 0x16, 0x7e, 0xfd, 0xf5, 0xd0, 0x7d, 0x1f, 0x32, 0x1b, 0xdb, 0xa6, 0xfd, 0x51, 0x75, 0x4d, 0xd7, 0x00, 0xe5, 0x7f, 0x58, 0x5b, 0xeb, 0x4b, 0x6a, 0x78, 0xfe, 0xe5, 0xd6, 0x8f, 0x99, 0x17, 0xca, 0x96, 0x45, 0xf7, 0x52, 0xdf, 0x84, 0x06, 0x77, 0xb9, 0x05, 0x63, 0x5d, 0xe9, 0x91, 0xb1, 0x4b, 0x82, 0x5a, 0xdb, 0xd7, 0xca, 0x69, + /* (2^206)P */ 0x02, 0xd3, 0x38, 0x38, 0x87, 0xea, 0xbd, 0x9f, 0x11, 0xca, 0xf3, 0x21, 0xf1, 0x9b, 0x35, 0x97, 0x98, 0xff, 0x8e, 0x6d, 0x3d, 0xd6, 0xb2, 0xfa, 0x68, 0xcb, 0x7e, 0x62, 0x85, 0xbb, 0xc7, 0x5d, 0xee, 0x32, 0x30, 0x2e, 0x71, 0x96, 0x63, 0x43, 0x98, 0xc4, 0xa7, 0xde, 0x60, 0xb2, 0xd9, 0x43, 0x4a, 0xfa, 0x97, 0x2d, 0x5f, 0x21, 0xd4, 0xfe, + /* (2^207)P */ 0x3b, 0x20, 0x29, 0x07, 0x07, 0xb5, 0x78, 0xc3, 0xc7, 0xab, 0x56, 0xba, 0x40, 0xde, 0x1d, 0xcf, 0xc3, 0x00, 0x56, 0x21, 0x0c, 0xc8, 0x42, 0xd9, 0x0e, 0xcd, 0x02, 0x7c, 0x07, 0xb9, 0x11, 0xd7, 0x96, 0xaf, 0xff, 0xad, 0xc5, 0xba, 0x30, 0x6d, 0x82, 0x3a, 0xbf, 0xef, 0x7b, 0xf7, 0x0a, 0x74, 0xbd, 0x31, 0x0c, 0xe4, 0xec, 0x1a, 0xe5, 0xc5, + /* (2^208)P */ 0xcc, 0xf2, 0x28, 0x16, 0x12, 0xbf, 0xef, 0x85, 0xbc, 0xf7, 0xcb, 0x9f, 0xdb, 0xa8, 0xb2, 0x49, 0x53, 0x48, 0xa8, 0x24, 0xa8, 0x68, 0x8d, 0xbb, 0x21, 0x0a, 0x5a, 0xbd, 0xb2, 0x91, 0x61, 0x47, 0xc4, 0x43, 0x08, 0xa6, 0x19, 0xef, 0x8e, 0x88, 0x39, 0xc6, 0x33, 0x30, 0xf3, 0x0e, 0xc5, 0x92, 0x66, 0xd6, 0xfe, 0xc5, 0x12, 0xd9, 0x4c, 0x2d, + /* (2^209)P */ 0x30, 0x34, 0x07, 0xbf, 0x9c, 0x5a, 0x4e, 0x65, 0xf1, 0x39, 0x35, 0x38, 0xae, 0x7b, 0x55, 0xac, 0x6a, 0x92, 0x24, 0x7e, 0x50, 0xd3, 0xba, 0x78, 0x51, 0xfe, 0x4d, 0x32, 0x05, 0x11, 0xf5, 0x52, 0xf1, 0x31, 0x45, 0x39, 0x98, 0x7b, 0x28, 0x56, 0xc3, 0x5d, 0x4f, 0x07, 0x6f, 0x84, 0xb8, 0x1a, 0x58, 0x0b, 0xc4, 0x7c, 0xc4, 0x8d, 0x32, 0x8e, + /* (2^210)P */ 0x7e, 0xaf, 0x98, 0xce, 0xc5, 0x2b, 0x9d, 0xf6, 0xfa, 0x2c, 0xb6, 0x2a, 0x5a, 0x1d, 0xc0, 0x24, 0x8d, 0xa4, 0xce, 0xb1, 0x12, 0x01, 0xf9, 0x79, 0xc6, 0x79, 0x38, 0x0c, 0xd4, 0x07, 0xc9, 0xf7, 0x37, 0xa1, 0x0b, 0xfe, 0x72, 0xec, 0x5d, 0xd6, 0xb0, 0x1c, 0x70, 0xbe, 0x70, 0x01, 0x13, 0xe0, 0x86, 0x95, 0xc7, 0x2e, 0x12, 0x3b, 0xe6, 0xa6, + /* (2^211)P */ 0x24, 0x82, 0x67, 0xe0, 0x14, 0x7b, 0x56, 0x08, 0x38, 0x44, 0xdb, 0xa0, 0x3a, 0x05, 0x47, 0xb2, 0xc0, 0xac, 0xd1, 0xcc, 0x3f, 0x82, 0xb8, 0x8a, 0x88, 0xbc, 0xf5, 0x33, 0xa1, 0x35, 0x0f, 0xf6, 0xe2, 0xef, 0x6c, 0xf7, 0x37, 0x9e, 0xe8, 0x10, 0xca, 0xb0, 0x8e, 0x80, 0x86, 0x00, 0x23, 0xd0, 0x4a, 0x76, 0x9f, 0xf7, 0x2c, 0x52, 0x15, 0x0e, + /* (2^212)P */ 0x5e, 0x49, 0xe1, 0x2c, 0x9a, 0x01, 0x76, 0xa6, 0xb3, 0x07, 0x5b, 0xa4, 0x07, 0xef, 0x1d, 0xc3, 0x6a, 0xbb, 0x64, 0xbe, 0x71, 0x15, 0x6e, 0x32, 0x31, 0x46, 0x9a, 0x9e, 0x8f, 0x45, 0x73, 0xce, 0x0b, 0x94, 0x1a, 0x52, 0x07, 0xf4, 0x50, 0x30, 0x49, 0x53, 0x50, 0xfb, 0x71, 0x1f, 0x5a, 0x03, 0xa9, 0x76, 0xf2, 0x8f, 0x42, 0xff, 0xed, 0xed, + /* (2^213)P */ 0xed, 0x08, 0xdb, 0x91, 0x1c, 0xee, 0xa2, 0xb4, 0x47, 0xa2, 0xfa, 0xcb, 0x03, 0xd1, 0xff, 0x8c, 0xad, 0x64, 0x50, 0x61, 0xcd, 0xfc, 0x88, 0xa0, 0x31, 0x95, 0x30, 0xb9, 0x58, 0xdd, 0xd7, 0x43, 0xe4, 0x46, 0xc2, 0x16, 0xd9, 0x72, 0x4a, 0x56, 0x51, 0x70, 0x85, 0xf1, 0xa1, 0x80, 0x40, 0xd5, 0xba, 0x67, 0x81, 0xda, 0xcd, 0x03, 0xea, 0x51, + /* (2^214)P */ 0x42, 0x50, 0xf0, 0xef, 0x37, 0x61, 0x72, 0x85, 0xe1, 0xf1, 0xff, 0x6f, 0x3d, 0xe8, 0x7b, 0x21, 0x5c, 0xe5, 0x50, 0x03, 0xde, 0x00, 0xc1, 0xf7, 0x3a, 0x55, 0x12, 0x1c, 0x9e, 0x1e, 0xce, 0xd1, 0x2f, 0xaf, 0x05, 0x70, 0x5b, 0x47, 0xf2, 0x04, 0x7a, 0x89, 0xbc, 0x78, 0xa6, 0x65, 0x6c, 0xaa, 0x3c, 0xa2, 0x3c, 0x8b, 0x5c, 0xa9, 0x22, 0x48, + /* (2^215)P */ 0x7e, 0x8c, 0x8f, 0x2f, 0x60, 0xe3, 0x5a, 0x94, 0xd4, 0xce, 0xdd, 0x9d, 0x83, 0x3b, 0x77, 0x78, 0x43, 0x1d, 0xfd, 0x8f, 0xc8, 0xe8, 0x02, 0x90, 0xab, 0xf6, 0xc9, 0xfc, 0xf1, 0x63, 0xaa, 0x5f, 0x42, 0xf1, 0x78, 0x34, 0x64, 0x16, 0x75, 0x9c, 0x7d, 0xd0, 0xe4, 0x74, 0x5a, 0xa8, 0xfb, 0xcb, 0xac, 0x20, 0xa3, 0xc2, 0xa6, 0x20, 0xf8, 0x1b, + /* (2^216)P */ 0x00, 0x4f, 0x1e, 0x56, 0xb5, 0x34, 0xb2, 0x87, 0x31, 0xe5, 0xee, 0x8d, 0xf1, 0x41, 0x67, 0xb7, 0x67, 0x3a, 0x54, 0x86, 0x5c, 0xf0, 0x0b, 0x37, 0x2f, 0x1b, 0x92, 0x5d, 0x58, 0x93, 0xdc, 0xd8, 0x58, 0xcc, 0x9e, 0x67, 0xd0, 0x97, 0x3a, 0xaf, 0x49, 0x39, 0x2d, 0x3b, 0xd8, 0x98, 0xfb, 0x76, 0x6b, 0xe7, 0xaf, 0xc3, 0x45, 0x44, 0x53, 0x94, + /* (2^217)P */ 0x30, 0xbd, 0x90, 0x75, 0xd3, 0xbd, 0x3b, 0x58, 0x27, 0x14, 0x9f, 0x6b, 0xd4, 0x31, 0x99, 0xcd, 0xde, 0x3a, 0x21, 0x1e, 0xb4, 0x02, 0xe4, 0x33, 0x04, 0x02, 0xb0, 0x50, 0x66, 0x68, 0x90, 0xdd, 0x7b, 0x69, 0x31, 0xd9, 0xcf, 0x68, 0x73, 0xf1, 0x60, 0xdd, 0xc8, 0x1d, 0x5d, 0xe3, 0xd6, 0x5b, 0x2a, 0xa4, 0xea, 0xc4, 0x3f, 0x08, 0xcd, 0x9c, + /* (2^218)P */ 0x6b, 0x1a, 0xbf, 0x55, 0xc1, 0x1b, 0x0c, 0x05, 0x09, 0xdf, 0xf5, 0x5e, 0xa3, 0x77, 0x95, 0xe9, 0xdf, 0x19, 0xdd, 0xc7, 0x94, 0xcb, 0x06, 0x73, 0xd0, 0x88, 0x02, 0x33, 0x94, 0xca, 0x7a, 0x2f, 0x8e, 0x3d, 0x72, 0x61, 0x2d, 0x4d, 0xa6, 0x61, 0x1f, 0x32, 0x5e, 0x87, 0x53, 0x36, 0x11, 0x15, 0x20, 0xb3, 0x5a, 0x57, 0x51, 0x93, 0x20, 0xd8, + /* (2^219)P */ 0xb7, 0x56, 0xf4, 0xab, 0x7d, 0x0c, 0xfb, 0x99, 0x1a, 0x30, 0x29, 0xb0, 0x75, 0x2a, 0xf8, 0x53, 0x71, 0x23, 0xbd, 0xa7, 0xd8, 0x0a, 0xe2, 0x27, 0x65, 0xe9, 0x74, 0x26, 0x98, 0x4a, 0x69, 0x19, 0xb2, 0x4d, 0x0a, 0x17, 0x98, 0xb2, 0xa9, 0x57, 0x4e, 0xf6, 0x86, 0xc8, 0x01, 0xa4, 0xc6, 0x98, 0xad, 0x5a, 0x90, 0x2c, 0x05, 0x46, 0x64, 0xb7, + /* (2^220)P */ 0x7b, 0x91, 0xdf, 0xfc, 0xf8, 0x1c, 0x8c, 0x15, 0x9e, 0xf7, 0xd5, 0xa8, 0xe8, 0xe7, 0xe3, 0xa3, 0xb0, 0x04, 0x74, 0xfa, 0x78, 0xfb, 0x26, 0xbf, 0x67, 0x42, 0xf9, 0x8c, 0x9b, 0xb4, 0x69, 0x5b, 0x02, 0x13, 0x6d, 0x09, 0x6c, 0xd6, 0x99, 0x61, 0x7b, 0x89, 0x4a, 0x67, 0x75, 0xa3, 0x98, 0x13, 0x23, 0x1d, 0x18, 0x24, 0x0e, 0xef, 0x41, 0x79, + /* (2^221)P */ 0x86, 0x33, 0xab, 0x08, 0xcb, 0xbf, 0x1e, 0x76, 0x3c, 0x0b, 0xbd, 0x30, 0xdb, 0xe9, 0xa3, 0x35, 0x87, 0x1b, 0xe9, 0x07, 0x00, 0x66, 0x7f, 0x3b, 0x35, 0x0c, 0x8a, 0x3f, 0x61, 0xbc, 0xe0, 0xae, 0xf6, 0xcc, 0x54, 0xe1, 0x72, 0x36, 0x2d, 0xee, 0x93, 0x24, 0xf8, 0xd7, 0xc5, 0xf9, 0xcb, 0xb0, 0xe5, 0x88, 0x0d, 0x23, 0x4b, 0x76, 0x15, 0xa2, + /* (2^222)P */ 0x37, 0xdb, 0x83, 0xd5, 0x6d, 0x06, 0x24, 0x37, 0x1b, 0x15, 0x85, 0x15, 0xe2, 0xc0, 0x4e, 0x02, 0xa9, 0x6d, 0x0a, 0x3a, 0x94, 0x4a, 0x6f, 0x49, 0x00, 0x01, 0x72, 0xbb, 0x60, 0x14, 0x35, 0xae, 0xb4, 0xc6, 0x01, 0x0a, 0x00, 0x9e, 0xc3, 0x58, 0xc5, 0xd1, 0x5e, 0x30, 0x73, 0x96, 0x24, 0x85, 0x9d, 0xf0, 0xf9, 0xec, 0x09, 0xd3, 0xe7, 0x70, + /* (2^223)P */ 0xf3, 0xbd, 0x96, 0x87, 0xe9, 0x71, 0xbd, 0xd6, 0xa2, 0x45, 0xeb, 0x0a, 0xcd, 0x2c, 0xf1, 0x72, 0xa6, 0x31, 0xa9, 0x6f, 0x09, 0xa1, 0x5e, 0xdd, 0xc8, 0x8d, 0x0d, 0xbc, 0x5a, 0x8d, 0xb1, 0x2c, 0x9a, 0xcc, 0x37, 0x74, 0xc2, 0xa9, 0x4e, 0xd6, 0xc0, 0x3c, 0xa0, 0x23, 0xb0, 0xa0, 0x77, 0x14, 0x80, 0x45, 0x71, 0x6a, 0x2d, 0x41, 0xc3, 0x82, + /* (2^224)P */ 0x37, 0x44, 0xec, 0x8a, 0x3e, 0xc1, 0x0c, 0xa9, 0x12, 0x9c, 0x08, 0x88, 0xcb, 0xd9, 0xf8, 0xba, 0x00, 0xd6, 0xc3, 0xdf, 0xef, 0x7a, 0x44, 0x7e, 0x25, 0x69, 0xc9, 0xc1, 0x46, 0xe5, 0x20, 0x9e, 0xcc, 0x0b, 0x05, 0x3e, 0xf4, 0x78, 0x43, 0x0c, 0xa6, 0x2f, 0xc1, 0xfa, 0x70, 0xb2, 0x3c, 0x31, 0x7a, 0x63, 0x58, 0xab, 0x17, 0xcf, 0x4c, 0x4f, + /* (2^225)P */ 0x2b, 0x08, 0x31, 0x59, 0x75, 0x8b, 0xec, 0x0a, 0xa9, 0x79, 0x70, 0xdd, 0xf1, 0x11, 0xc3, 0x11, 0x1f, 0xab, 0x37, 0xaa, 0x26, 0xea, 0x53, 0xc4, 0x79, 0xa7, 0x91, 0x00, 0xaa, 0x08, 0x42, 0xeb, 0x8b, 0x8b, 0xe8, 0xc3, 0x2f, 0xb8, 0x78, 0x90, 0x38, 0x0e, 0x8a, 0x42, 0x0c, 0x0f, 0xbf, 0x3e, 0xf8, 0xd8, 0x07, 0xcf, 0x6a, 0x34, 0xc9, 0xfa, + /* (2^226)P */ 0x11, 0xe0, 0x76, 0x4d, 0x23, 0xc5, 0xa6, 0xcc, 0x9f, 0x9a, 0x2a, 0xde, 0x3a, 0xb5, 0x92, 0x39, 0x19, 0x8a, 0xf1, 0x8d, 0xf9, 0x4d, 0xc9, 0xb4, 0x39, 0x9f, 0x57, 0xd8, 0x72, 0xab, 0x1d, 0x61, 0x6a, 0xb2, 0xff, 0x52, 0xba, 0x54, 0x0e, 0xfb, 0x83, 0x30, 0x8a, 0xf7, 0x3b, 0xf4, 0xd8, 0xae, 0x1a, 0x94, 0x3a, 0xec, 0x63, 0xfe, 0x6e, 0x7c, + /* (2^227)P */ 0xdc, 0x70, 0x8e, 0x55, 0x44, 0xbf, 0xd2, 0x6a, 0xa0, 0x14, 0x61, 0x89, 0xd5, 0x55, 0x45, 0x3c, 0xf6, 0x40, 0x0d, 0x83, 0x85, 0x44, 0xb4, 0x62, 0x56, 0xfe, 0x60, 0xd7, 0x07, 0x1d, 0x47, 0x30, 0x3b, 0x73, 0xa4, 0xb5, 0xb7, 0xea, 0xac, 0xda, 0xf1, 0x17, 0xaa, 0x60, 0xdf, 0xe9, 0x84, 0xda, 0x31, 0x32, 0x61, 0xbf, 0xd0, 0x7e, 0x8a, 0x02, + /* (2^228)P */ 0xb9, 0x51, 0xb3, 0x89, 0x21, 0x5d, 0xa2, 0xfe, 0x79, 0x2a, 0xb3, 0x2a, 0x3b, 0xe6, 0x6f, 0x2b, 0x22, 0x03, 0xea, 0x7b, 0x1f, 0xaf, 0x85, 0xc3, 0x38, 0x55, 0x5b, 0x8e, 0xb4, 0xaa, 0x77, 0xfe, 0x03, 0x6e, 0xda, 0x91, 0x24, 0x0c, 0x48, 0x39, 0x27, 0x43, 0x16, 0xd2, 0x0a, 0x0d, 0x43, 0xa3, 0x0e, 0xca, 0x45, 0xd1, 0x7f, 0xf5, 0xd3, 0x16, + /* (2^229)P */ 0x3d, 0x32, 0x9b, 0x38, 0xf8, 0x06, 0x93, 0x78, 0x5b, 0x50, 0x2b, 0x06, 0xd8, 0x66, 0xfe, 0xab, 0x9b, 0x58, 0xc7, 0xd1, 0x4d, 0xd5, 0xf8, 0x3b, 0x10, 0x7e, 0x85, 0xde, 0x58, 0x4e, 0xdf, 0x53, 0xd9, 0x58, 0xe0, 0x15, 0x81, 0x9f, 0x1a, 0x78, 0xfc, 0x9f, 0x10, 0xc2, 0x23, 0xd6, 0x78, 0xd1, 0x9d, 0xd2, 0xd5, 0x1c, 0x53, 0xe2, 0xc9, 0x76, + /* (2^230)P */ 0x98, 0x1e, 0x38, 0x7b, 0x71, 0x18, 0x4b, 0x15, 0xaf, 0xa1, 0xa6, 0x98, 0xcb, 0x26, 0xa3, 0xc8, 0x07, 0x46, 0xda, 0x3b, 0x70, 0x65, 0xec, 0x7a, 0x2b, 0x34, 0x94, 0xa8, 0xb6, 0x14, 0xf8, 0x1a, 0xce, 0xf7, 0xc8, 0x60, 0xf3, 0x88, 0xf4, 0x33, 0x60, 0x7b, 0xd1, 0x02, 0xe7, 0xda, 0x00, 0x4a, 0xea, 0xd2, 0xfd, 0x88, 0xd2, 0x99, 0x28, 0xf3, + /* (2^231)P */ 0x28, 0x24, 0x1d, 0x26, 0xc2, 0xeb, 0x8b, 0x3b, 0xb4, 0x6b, 0xbe, 0x6b, 0x77, 0xff, 0xf3, 0x21, 0x3b, 0x26, 0x6a, 0x8c, 0x8e, 0x2a, 0x44, 0xa8, 0x01, 0x2b, 0x71, 0xea, 0x64, 0x30, 0xfd, 0xfd, 0x95, 0xcb, 0x39, 0x38, 0x48, 0xfa, 0x96, 0x97, 0x8c, 0x2f, 0x33, 0xca, 0x03, 0xe6, 0xd7, 0x94, 0x55, 0x6c, 0xc3, 0xb3, 0xa8, 0xf7, 0xae, 0x8c, + /* (2^232)P */ 0xea, 0x62, 0x8a, 0xb4, 0xeb, 0x74, 0xf7, 0xb8, 0xae, 0xc5, 0x20, 0x71, 0x06, 0xd6, 0x7c, 0x62, 0x9b, 0x69, 0x74, 0xef, 0xa7, 0x6d, 0xd6, 0x8c, 0x37, 0xb9, 0xbf, 0xcf, 0xeb, 0xe4, 0x2f, 0x04, 0x02, 0x21, 0x7d, 0x75, 0x6b, 0x92, 0x48, 0xf8, 0x70, 0xad, 0x69, 0xe2, 0xea, 0x0e, 0x88, 0x67, 0x72, 0xcc, 0x2d, 0x10, 0xce, 0x2d, 0xcf, 0x65, + /* (2^233)P */ 0x49, 0xf3, 0x57, 0x64, 0xe5, 0x5c, 0xc5, 0x65, 0x49, 0x97, 0xc4, 0x8a, 0xcc, 0xa9, 0xca, 0x94, 0x7b, 0x86, 0x88, 0xb6, 0x51, 0x27, 0x69, 0xa5, 0x0f, 0x8b, 0x06, 0x59, 0xa0, 0x94, 0xef, 0x63, 0x1a, 0x01, 0x9e, 0x4f, 0xd2, 0x5a, 0x93, 0xc0, 0x7c, 0xe6, 0x61, 0x77, 0xb6, 0xf5, 0x40, 0xd9, 0x98, 0x43, 0x5b, 0x56, 0x68, 0xe9, 0x37, 0x8f, + /* (2^234)P */ 0xee, 0x87, 0xd2, 0x05, 0x1b, 0x39, 0x89, 0x10, 0x07, 0x6d, 0xe8, 0xfd, 0x8b, 0x4d, 0xb2, 0xa7, 0x7b, 0x1e, 0xa0, 0x6c, 0x0d, 0x3d, 0x3d, 0x49, 0xba, 0x61, 0x36, 0x1f, 0xc2, 0x84, 0x4a, 0xcc, 0x87, 0xa9, 0x1b, 0x23, 0x04, 0xe2, 0x3e, 0x97, 0xe1, 0xdb, 0xd5, 0x5a, 0xe8, 0x41, 0x6b, 0xe5, 0x5a, 0xa1, 0x99, 0xe5, 0x7b, 0xa7, 0xe0, 0x3b, + /* (2^235)P */ 0xea, 0xa3, 0x6a, 0xdd, 0x77, 0x7f, 0x77, 0x41, 0xc5, 0x6a, 0xe4, 0xaf, 0x11, 0x5f, 0x88, 0xa5, 0x10, 0xee, 0xd0, 0x8c, 0x0c, 0xb4, 0xa5, 0x2a, 0xd0, 0xd8, 0x1d, 0x47, 0x06, 0xc0, 0xd5, 0xce, 0x51, 0x54, 0x9b, 0x2b, 0xe6, 0x2f, 0xe7, 0xe7, 0x31, 0x5f, 0x5c, 0x23, 0x81, 0x3e, 0x03, 0x93, 0xaa, 0x2d, 0x71, 0x84, 0xa0, 0x89, 0x32, 0xa6, + /* (2^236)P */ 0x55, 0xa3, 0x13, 0x92, 0x4e, 0x93, 0x7d, 0xec, 0xca, 0x57, 0xfb, 0x37, 0xae, 0xd2, 0x18, 0x2e, 0x54, 0x05, 0x6c, 0xd1, 0x28, 0xca, 0x90, 0x40, 0x82, 0x2e, 0x79, 0xc6, 0x5a, 0xc7, 0xdd, 0x84, 0x93, 0xdf, 0x15, 0xb8, 0x1f, 0xb1, 0xf9, 0xaf, 0x2c, 0xe5, 0x32, 0xcd, 0xc2, 0x99, 0x6d, 0xac, 0x85, 0x5c, 0x63, 0xd3, 0xe2, 0xff, 0x24, 0xda, + /* (2^237)P */ 0x2d, 0x8d, 0xfd, 0x65, 0xcc, 0xe5, 0x02, 0xa0, 0xe5, 0xb9, 0xec, 0x59, 0x09, 0x50, 0x27, 0xb7, 0x3d, 0x2a, 0x79, 0xb2, 0x76, 0x5d, 0x64, 0x95, 0xf8, 0xc5, 0xaf, 0x8a, 0x62, 0x11, 0x5c, 0x56, 0x1c, 0x05, 0x64, 0x9e, 0x5e, 0xbd, 0x54, 0x04, 0xe6, 0x9e, 0xab, 0xe6, 0x22, 0x7e, 0x42, 0x54, 0xb5, 0xa5, 0xd0, 0x8d, 0x28, 0x6b, 0x0f, 0x0b, + /* (2^238)P */ 0x2d, 0xb2, 0x8c, 0x59, 0x10, 0x37, 0x84, 0x3b, 0x9b, 0x65, 0x1b, 0x0f, 0x10, 0xf9, 0xea, 0x60, 0x1b, 0x02, 0xf5, 0xee, 0x8b, 0xe6, 0x32, 0x7d, 0x10, 0x7f, 0x5f, 0x8c, 0x72, 0x09, 0x4e, 0x1f, 0x29, 0xff, 0x65, 0xcb, 0x3e, 0x3a, 0xd2, 0x96, 0x50, 0x1e, 0xea, 0x64, 0x99, 0xb5, 0x4c, 0x7a, 0x69, 0xb8, 0x95, 0xae, 0x48, 0xc0, 0x7c, 0xb1, + /* (2^239)P */ 0xcd, 0x7c, 0x4f, 0x3e, 0xea, 0xf3, 0x90, 0xcb, 0x12, 0x76, 0xd1, 0x17, 0xdc, 0x0d, 0x13, 0x0f, 0xfd, 0x4d, 0xb5, 0x1f, 0xe4, 0xdd, 0xf2, 0x4d, 0x58, 0xea, 0xa5, 0x66, 0x92, 0xcf, 0xe5, 0x54, 0xea, 0x9b, 0x35, 0x83, 0x1a, 0x44, 0x8e, 0x62, 0x73, 0x45, 0x98, 0xa3, 0x89, 0x95, 0x52, 0x93, 0x1a, 0x8d, 0x63, 0x0f, 0xc2, 0x57, 0x3c, 0xb1, + /* (2^240)P */ 0x72, 0xb4, 0xdf, 0x51, 0xb7, 0xf6, 0x52, 0xa2, 0x14, 0x56, 0xe5, 0x0a, 0x2e, 0x75, 0x81, 0x02, 0xee, 0x93, 0x48, 0x0a, 0x92, 0x4e, 0x0c, 0x0f, 0xdf, 0x09, 0x89, 0x99, 0xf6, 0xf9, 0x22, 0xa2, 0x32, 0xf8, 0xb0, 0x76, 0x0c, 0xb2, 0x4d, 0x6e, 0xbe, 0x83, 0x35, 0x61, 0x44, 0xd2, 0x58, 0xc7, 0xdd, 0x14, 0xcf, 0xc3, 0x4b, 0x7c, 0x07, 0xee, + /* (2^241)P */ 0x8b, 0x03, 0xee, 0xcb, 0xa7, 0x2e, 0x28, 0xbd, 0x97, 0xd1, 0x4c, 0x2b, 0xd1, 0x92, 0x67, 0x5b, 0x5a, 0x12, 0xbf, 0x29, 0x17, 0xfc, 0x50, 0x09, 0x74, 0x76, 0xa2, 0xd4, 0x82, 0xfd, 0x2c, 0x0c, 0x90, 0xf7, 0xe7, 0xe5, 0x9a, 0x2c, 0x16, 0x40, 0xb9, 0x6c, 0xd9, 0xe0, 0x22, 0x9e, 0xf8, 0xdd, 0x73, 0xe4, 0x7b, 0x9e, 0xbe, 0x4f, 0x66, 0x22, + /* (2^242)P */ 0xa4, 0x10, 0xbe, 0xb8, 0x83, 0x3a, 0x77, 0x8e, 0xea, 0x0a, 0xc4, 0x97, 0x3e, 0xb6, 0x6c, 0x81, 0xd7, 0x65, 0xd9, 0xf7, 0xae, 0xe6, 0xbe, 0xab, 0x59, 0x81, 0x29, 0x4b, 0xff, 0xe1, 0x0f, 0xc3, 0x2b, 0xad, 0x4b, 0xef, 0xc4, 0x50, 0x9f, 0x88, 0x31, 0xf2, 0xde, 0x80, 0xd6, 0xf4, 0x20, 0x9c, 0x77, 0x9b, 0xbe, 0xbe, 0x08, 0xf5, 0xf0, 0x95, + /* (2^243)P */ 0x0e, 0x7c, 0x7b, 0x7c, 0xb3, 0xd8, 0x83, 0xfc, 0x8c, 0x75, 0x51, 0x74, 0x1b, 0xe1, 0x6d, 0x11, 0x05, 0x46, 0x24, 0x0d, 0xa4, 0x2b, 0x32, 0xfd, 0x2c, 0x4e, 0x21, 0xdf, 0x39, 0x6b, 0x96, 0xfc, 0xff, 0x92, 0xfc, 0x35, 0x0d, 0x9a, 0x4b, 0xc0, 0x70, 0x46, 0x32, 0x7d, 0xc0, 0xc4, 0x04, 0xe0, 0x2d, 0x83, 0xa7, 0x00, 0xc7, 0xcb, 0xb4, 0x8f, + /* (2^244)P */ 0xa9, 0x5a, 0x7f, 0x0e, 0xdd, 0x2c, 0x85, 0xaa, 0x4d, 0xac, 0xde, 0xb3, 0xb6, 0xaf, 0xe6, 0xd1, 0x06, 0x7b, 0x2c, 0xa4, 0x01, 0x19, 0x22, 0x7d, 0x78, 0xf0, 0x3a, 0xea, 0x89, 0xfe, 0x21, 0x61, 0x6d, 0xb8, 0xfe, 0xa5, 0x2a, 0xab, 0x0d, 0x7b, 0x51, 0x39, 0xb6, 0xde, 0xbc, 0xf0, 0xc5, 0x48, 0xd7, 0x09, 0x82, 0x6e, 0x66, 0x75, 0xc5, 0xcd, + /* (2^245)P */ 0xee, 0xdf, 0x2b, 0x6c, 0xa8, 0xde, 0x61, 0xe1, 0x27, 0xfa, 0x2a, 0x0f, 0x68, 0xe7, 0x7a, 0x9b, 0x13, 0xe9, 0x56, 0xd2, 0x1c, 0x3d, 0x2f, 0x3c, 0x7a, 0xf6, 0x6f, 0x45, 0xee, 0xe8, 0xf4, 0xa0, 0xa6, 0xe8, 0xa5, 0x27, 0xee, 0xf2, 0x85, 0xa9, 0xd5, 0x0e, 0xa9, 0x26, 0x60, 0xfe, 0xee, 0xc7, 0x59, 0x99, 0x5e, 0xa3, 0xdf, 0x23, 0x36, 0xd5, + /* (2^246)P */ 0x15, 0x66, 0x6f, 0xd5, 0x78, 0xa4, 0x0a, 0xf7, 0xb1, 0xe8, 0x75, 0x6b, 0x48, 0x7d, 0xa6, 0x4d, 0x3d, 0x36, 0x9b, 0xc7, 0xcc, 0x68, 0x9a, 0xfe, 0x2f, 0x39, 0x2a, 0x51, 0x31, 0x39, 0x7d, 0x73, 0x6f, 0xc8, 0x74, 0x72, 0x6f, 0x6e, 0xda, 0x5f, 0xad, 0x48, 0xc8, 0x40, 0xe1, 0x06, 0x01, 0x36, 0xa1, 0x88, 0xc8, 0x99, 0x9c, 0xd1, 0x11, 0x8f, + /* (2^247)P */ 0xab, 0xc5, 0xcb, 0xcf, 0xbd, 0x73, 0x21, 0xd0, 0x82, 0xb1, 0x2e, 0x2d, 0xd4, 0x36, 0x1b, 0xed, 0xa9, 0x8a, 0x26, 0x79, 0xc4, 0x17, 0xae, 0xe5, 0x09, 0x0a, 0x0c, 0xa4, 0x21, 0xa0, 0x6e, 0xdd, 0x62, 0x8e, 0x44, 0x62, 0xcc, 0x50, 0xff, 0x93, 0xb3, 0x9a, 0x72, 0x8c, 0x3f, 0xa1, 0xa6, 0x4d, 0x87, 0xd5, 0x1c, 0x5a, 0xc0, 0x0b, 0x1a, 0xd6, + /* (2^248)P */ 0x67, 0x36, 0x6a, 0x1f, 0x96, 0xe5, 0x80, 0x20, 0xa9, 0xe8, 0x0b, 0x0e, 0x21, 0x29, 0x3f, 0xc8, 0x0a, 0x6d, 0x27, 0x47, 0xca, 0xd9, 0x05, 0x55, 0xbf, 0x11, 0xcf, 0x31, 0x7a, 0x37, 0xc7, 0x90, 0xa9, 0xf4, 0x07, 0x5e, 0xd5, 0xc3, 0x92, 0xaa, 0x95, 0xc8, 0x23, 0x2a, 0x53, 0x45, 0xe3, 0x3a, 0x24, 0xe9, 0x67, 0x97, 0x3a, 0x82, 0xf9, 0xa6, + /* (2^249)P */ 0x92, 0x9e, 0x6d, 0x82, 0x67, 0xe9, 0xf9, 0x17, 0x96, 0x2c, 0xa7, 0xd3, 0x89, 0xf9, 0xdb, 0xd8, 0x20, 0xc6, 0x2e, 0xec, 0x4a, 0x76, 0x64, 0xbf, 0x27, 0x40, 0xe2, 0xb4, 0xdf, 0x1f, 0xa0, 0xef, 0x07, 0x80, 0xfb, 0x8e, 0x12, 0xf8, 0xb8, 0xe1, 0xc6, 0xdf, 0x7c, 0x69, 0x35, 0x5a, 0xe1, 0x8e, 0x5d, 0x69, 0x84, 0x56, 0xb6, 0x31, 0x1c, 0x0b, + /* (2^250)P */ 0xd6, 0x94, 0x5c, 0xef, 0xbb, 0x46, 0x45, 0x44, 0x5b, 0xa1, 0xae, 0x03, 0x65, 0xdd, 0xb5, 0x66, 0x88, 0x35, 0x29, 0x95, 0x16, 0x54, 0xa6, 0xf5, 0xc9, 0x78, 0x34, 0xe6, 0x0f, 0xc4, 0x2b, 0x5b, 0x79, 0x51, 0x68, 0x48, 0x3a, 0x26, 0x87, 0x05, 0x70, 0xaf, 0x8b, 0xa6, 0xc7, 0x2e, 0xb3, 0xa9, 0x10, 0x01, 0xb0, 0xb9, 0x31, 0xfd, 0xdc, 0x80, + /* (2^251)P */ 0x25, 0xf2, 0xad, 0xd6, 0x75, 0xa3, 0x04, 0x05, 0x64, 0x8a, 0x97, 0x60, 0x27, 0x2a, 0xe5, 0x6d, 0xb0, 0x73, 0xf4, 0x07, 0x2a, 0x9d, 0xe9, 0x46, 0xb4, 0x1c, 0x51, 0xf8, 0x63, 0x98, 0x7e, 0xe5, 0x13, 0x51, 0xed, 0x98, 0x65, 0x98, 0x4f, 0x8f, 0xe7, 0x7e, 0x72, 0xd7, 0x64, 0x11, 0x2f, 0xcd, 0x12, 0xf8, 0xc4, 0x63, 0x52, 0x0f, 0x7f, 0xc4, + /* (2^252)P */ 0x5c, 0xd9, 0x85, 0x63, 0xc7, 0x8a, 0x65, 0x9a, 0x25, 0x83, 0x31, 0x73, 0x49, 0xf0, 0x93, 0x96, 0x70, 0x67, 0x6d, 0xb1, 0xff, 0x95, 0x54, 0xe4, 0xf8, 0x15, 0x6c, 0x5f, 0xbd, 0xf6, 0x0f, 0x38, 0x7b, 0x68, 0x7d, 0xd9, 0x3d, 0xf0, 0xa9, 0xa0, 0xe4, 0xd1, 0xb6, 0x34, 0x6d, 0x14, 0x16, 0xc2, 0x4c, 0x30, 0x0e, 0x67, 0xd3, 0xbe, 0x2e, 0xc0, + /* (2^253)P */ 0x06, 0x6b, 0x52, 0xc8, 0x14, 0xcd, 0xae, 0x03, 0x93, 0xea, 0xc1, 0xf2, 0xf6, 0x8b, 0xc5, 0xb6, 0xdc, 0x82, 0x42, 0x29, 0x94, 0xe0, 0x25, 0x6c, 0x3f, 0x9f, 0x5d, 0xe4, 0x96, 0xf6, 0x8e, 0x3f, 0xf9, 0x72, 0xc4, 0x77, 0x60, 0x8b, 0xa4, 0xf9, 0xa8, 0xc3, 0x0a, 0x81, 0xb1, 0x97, 0x70, 0x18, 0xab, 0xea, 0x37, 0x8a, 0x08, 0xc7, 0xe2, 0x95, + /* (2^254)P */ 0x94, 0x49, 0xd9, 0x5f, 0x76, 0x72, 0x82, 0xad, 0x2d, 0x50, 0x1a, 0x7a, 0x5b, 0xe6, 0x95, 0x1e, 0x95, 0x65, 0x87, 0x1c, 0x52, 0xd7, 0x44, 0xe6, 0x9b, 0x56, 0xcd, 0x6f, 0x05, 0xff, 0x67, 0xc5, 0xdb, 0xa2, 0xac, 0xe4, 0xa2, 0x28, 0x63, 0x5f, 0xfb, 0x0c, 0x3b, 0xf1, 0x87, 0xc3, 0x36, 0x78, 0x3f, 0x77, 0xfa, 0x50, 0x85, 0xf9, 0xd7, 0x82, + /* (2^255)P */ 0x64, 0xc0, 0xe0, 0xd8, 0x2d, 0xed, 0xcb, 0x6a, 0xfd, 0xcd, 0xbc, 0x7e, 0x9f, 0xc8, 0x85, 0xe9, 0xc1, 0x7c, 0x0f, 0xe5, 0x18, 0xea, 0xd4, 0x51, 0xad, 0x59, 0x13, 0x75, 0xd9, 0x3d, 0xd4, 0x8a, 0xb2, 0xbe, 0x78, 0x52, 0x2b, 0x52, 0x94, 0x37, 0x41, 0xd6, 0xb4, 0xb6, 0x45, 0x20, 0x76, 0xe0, 0x1f, 0x31, 0xdb, 0xb1, 0xa1, 0x43, 0xf0, 0x18, + /* (2^256)P */ 0x74, 0xa9, 0xa4, 0xa9, 0xdd, 0x6e, 0x3e, 0x68, 0xe5, 0xc3, 0x2e, 0x92, 0x17, 0xa4, 0xcb, 0x80, 0xb1, 0xf0, 0x06, 0x93, 0xef, 0xe6, 0x00, 0xe6, 0x3b, 0xb1, 0x32, 0x65, 0x7b, 0x83, 0xb6, 0x8a, 0x49, 0x1b, 0x14, 0x89, 0xee, 0xba, 0xf5, 0x6a, 0x8d, 0x36, 0xef, 0xb0, 0xd8, 0xb2, 0x16, 0x99, 0x17, 0x35, 0x02, 0x16, 0x55, 0x58, 0xdd, 0x82, + /* (2^257)P */ 0x36, 0x95, 0xe8, 0xf4, 0x36, 0x42, 0xbb, 0xc5, 0x3e, 0xfa, 0x30, 0x84, 0x9e, 0x59, 0xfd, 0xd2, 0x95, 0x42, 0xf8, 0x64, 0xd9, 0xb9, 0x0e, 0x9f, 0xfa, 0xd0, 0x7b, 0x20, 0x31, 0x77, 0x48, 0x29, 0x4d, 0xd0, 0x32, 0x57, 0x56, 0x30, 0xa6, 0x17, 0x53, 0x04, 0xbf, 0x08, 0x28, 0xec, 0xb8, 0x46, 0xc1, 0x03, 0x89, 0xdc, 0xed, 0xa0, 0x35, 0x53, + /* (2^258)P */ 0xc5, 0x7f, 0x9e, 0xd8, 0xc5, 0xba, 0x5f, 0x68, 0xc8, 0x23, 0x75, 0xea, 0x0d, 0xd9, 0x5a, 0xfd, 0x61, 0x1a, 0xa3, 0x2e, 0x45, 0x63, 0x14, 0x55, 0x86, 0x21, 0x29, 0xbe, 0xef, 0x5e, 0x50, 0xe5, 0x18, 0x59, 0xe7, 0xe3, 0xce, 0x4d, 0x8c, 0x15, 0x8f, 0x89, 0x66, 0x44, 0x52, 0x3d, 0xfa, 0xc7, 0x9a, 0x59, 0x90, 0x8e, 0xc0, 0x06, 0x3f, 0xc9, + /* (2^259)P */ 0x8e, 0x04, 0xd9, 0x16, 0x50, 0x1d, 0x8c, 0x9f, 0xd5, 0xe3, 0xce, 0xfd, 0x47, 0x04, 0x27, 0x4d, 0xc2, 0xfa, 0x71, 0xd9, 0x0b, 0xb8, 0x65, 0xf4, 0x11, 0xf3, 0x08, 0xee, 0x81, 0xc8, 0x67, 0x99, 0x0b, 0x8d, 0x77, 0xa3, 0x4f, 0xb5, 0x9b, 0xdb, 0x26, 0xf1, 0x97, 0xeb, 0x04, 0x54, 0xeb, 0x80, 0x08, 0x1d, 0x1d, 0xf6, 0x3d, 0x1f, 0x5a, 0xb8, + /* (2^260)P */ 0xb7, 0x9c, 0x9d, 0xee, 0xb9, 0x5c, 0xad, 0x0d, 0x9e, 0xfd, 0x60, 0x3c, 0x27, 0x4e, 0xa2, 0x95, 0xfb, 0x64, 0x7e, 0x79, 0x64, 0x87, 0x10, 0xb4, 0x73, 0xe0, 0x9d, 0x46, 0x4d, 0x3d, 0xee, 0x83, 0xe4, 0x16, 0x88, 0x97, 0xe6, 0x4d, 0xba, 0x70, 0xb6, 0x96, 0x7b, 0xff, 0x4b, 0xc8, 0xcf, 0x72, 0x83, 0x3e, 0x5b, 0x24, 0x2e, 0x57, 0xf1, 0x82, + /* (2^261)P */ 0x30, 0x71, 0x40, 0x51, 0x4f, 0x44, 0xbb, 0xc7, 0xf0, 0x54, 0x6e, 0x9d, 0xeb, 0x15, 0xad, 0xf8, 0x61, 0x43, 0x5a, 0xef, 0xc0, 0xb1, 0x57, 0xae, 0x03, 0x40, 0xe8, 0x68, 0x6f, 0x03, 0x20, 0x4f, 0x8a, 0x51, 0x2a, 0x9e, 0xd2, 0x45, 0xaf, 0xb4, 0xf5, 0xd4, 0x95, 0x7f, 0x3d, 0x3d, 0xb7, 0xb6, 0x28, 0xc5, 0x08, 0x8b, 0x44, 0xd6, 0x3f, 0xe7, + /* (2^262)P */ 0xa9, 0x52, 0x04, 0x67, 0xcb, 0x20, 0x63, 0xf8, 0x18, 0x01, 0x44, 0x21, 0x6a, 0x8a, 0x83, 0x48, 0xd4, 0xaf, 0x23, 0x0f, 0x35, 0x8d, 0xe5, 0x5a, 0xc4, 0x7c, 0x55, 0x46, 0x19, 0x5f, 0x35, 0xe0, 0x5d, 0x97, 0x4c, 0x2d, 0x04, 0xed, 0x59, 0xd4, 0xb0, 0xb2, 0xc6, 0xe3, 0x51, 0xe1, 0x38, 0xc6, 0x30, 0x49, 0x8f, 0xae, 0x61, 0x64, 0xce, 0xa8, + /* (2^263)P */ 0x9b, 0x64, 0x83, 0x3c, 0xd3, 0xdf, 0xb9, 0x27, 0xe7, 0x5b, 0x7f, 0xeb, 0xf3, 0x26, 0xcf, 0xb1, 0x8f, 0xaf, 0x26, 0xc8, 0x48, 0xce, 0xa1, 0xac, 0x7d, 0x10, 0x34, 0x28, 0xe1, 0x1f, 0x69, 0x03, 0x64, 0x77, 0x61, 0xdd, 0x4a, 0x9b, 0x18, 0x47, 0xf8, 0xca, 0x63, 0xc9, 0x03, 0x2d, 0x20, 0x2a, 0x69, 0x6e, 0x42, 0xd0, 0xe7, 0xaa, 0xb5, 0xf3, + /* (2^264)P */ 0xea, 0x31, 0x0c, 0x57, 0x0f, 0x3e, 0xe3, 0x35, 0xd8, 0x30, 0xa5, 0x6f, 0xdd, 0x95, 0x43, 0xc6, 0x66, 0x07, 0x4f, 0x34, 0xc3, 0x7e, 0x04, 0x10, 0x2d, 0xc4, 0x1c, 0x94, 0x52, 0x2e, 0x5b, 0x9a, 0x65, 0x2f, 0x91, 0xaa, 0x4f, 0x3c, 0xdc, 0x23, 0x18, 0xe1, 0x4f, 0x85, 0xcd, 0xf4, 0x8c, 0x51, 0xf7, 0xab, 0x4f, 0xdc, 0x15, 0x5c, 0x9e, 0xc5, + /* (2^265)P */ 0x54, 0x57, 0x23, 0x17, 0xe7, 0x82, 0x2f, 0x04, 0x7d, 0xfe, 0xe7, 0x1f, 0xa2, 0x57, 0x79, 0xe9, 0x58, 0x9b, 0xbe, 0xc6, 0x16, 0x4a, 0x17, 0x50, 0x90, 0x4a, 0x34, 0x70, 0x87, 0x37, 0x01, 0x26, 0xd8, 0xa3, 0x5f, 0x07, 0x7c, 0xd0, 0x7d, 0x05, 0x8a, 0x93, 0x51, 0x2f, 0x99, 0xea, 0xcf, 0x00, 0xd8, 0xc7, 0xe6, 0x9b, 0x8c, 0x62, 0x45, 0x87, + /* (2^266)P */ 0xc3, 0xfd, 0x29, 0x66, 0xe7, 0x30, 0x29, 0x77, 0xe0, 0x0d, 0x63, 0x5b, 0xe6, 0x90, 0x1a, 0x1e, 0x99, 0xc2, 0xa7, 0xab, 0xff, 0xa7, 0xbd, 0x79, 0x01, 0x97, 0xfd, 0x27, 0x1b, 0x43, 0x2b, 0xe6, 0xfe, 0x5e, 0xf1, 0xb9, 0x35, 0x38, 0x08, 0x25, 0x55, 0x90, 0x68, 0x2e, 0xc3, 0x67, 0x39, 0x9f, 0x2b, 0x2c, 0x70, 0x48, 0x8c, 0x47, 0xee, 0x56, + /* (2^267)P */ 0xf7, 0x32, 0x70, 0xb5, 0xe6, 0x42, 0xfd, 0x0a, 0x39, 0x9b, 0x07, 0xfe, 0x0e, 0xf4, 0x47, 0xba, 0x6a, 0x3f, 0xf5, 0x2c, 0x15, 0xf3, 0x60, 0x3f, 0xb1, 0x83, 0x7b, 0x2e, 0x34, 0x58, 0x1a, 0x6e, 0x4a, 0x49, 0x05, 0x45, 0xca, 0xdb, 0x00, 0x01, 0x0c, 0x42, 0x5e, 0x60, 0x40, 0x5f, 0xd9, 0xc7, 0x3a, 0x9e, 0x1c, 0x8d, 0xab, 0x11, 0x55, 0x65, + /* (2^268)P */ 0x87, 0x40, 0xb7, 0x0d, 0xaa, 0x34, 0x89, 0x90, 0x75, 0x6d, 0xa2, 0xfe, 0x3b, 0x6d, 0x5c, 0x39, 0x98, 0x10, 0x9e, 0x15, 0xc5, 0x35, 0xa2, 0x27, 0x23, 0x0a, 0x2d, 0x60, 0xe2, 0xa8, 0x7f, 0x3e, 0x77, 0x8f, 0xcc, 0x44, 0xcc, 0x30, 0x28, 0xe2, 0xf0, 0x04, 0x8c, 0xee, 0xe4, 0x5f, 0x68, 0x8c, 0xdf, 0x70, 0xbf, 0x31, 0xee, 0x2a, 0xfc, 0xce, + /* (2^269)P */ 0x92, 0xf2, 0xa0, 0xd9, 0x58, 0x3b, 0x7c, 0x1a, 0x99, 0x46, 0x59, 0x54, 0x60, 0x06, 0x8d, 0x5e, 0xf0, 0x22, 0xa1, 0xed, 0x92, 0x8a, 0x4d, 0x76, 0x95, 0x05, 0x0b, 0xff, 0xfc, 0x9a, 0xd1, 0xcc, 0x05, 0xb9, 0x5e, 0x99, 0xe8, 0x2a, 0x76, 0x7b, 0xfd, 0xa6, 0xe2, 0xd1, 0x1a, 0xd6, 0x76, 0x9f, 0x2f, 0x0e, 0xd1, 0xa8, 0x77, 0x5a, 0x40, 0x5a, + /* (2^270)P */ 0xff, 0xf9, 0x3f, 0xa9, 0xa6, 0x6c, 0x6d, 0x03, 0x8b, 0xa7, 0x10, 0x5d, 0x3f, 0xec, 0x3e, 0x1c, 0x0b, 0x6b, 0xa2, 0x6a, 0x22, 0xa9, 0x28, 0xd0, 0x66, 0xc9, 0xc2, 0x3d, 0x47, 0x20, 0x7d, 0xa6, 0x1d, 0xd8, 0x25, 0xb5, 0xf2, 0xf9, 0x70, 0x19, 0x6b, 0xf8, 0x43, 0x36, 0xc5, 0x1f, 0xe4, 0x5a, 0x4c, 0x13, 0xe4, 0x6d, 0x08, 0x0b, 0x1d, 0xb1, + /* (2^271)P */ 0x3f, 0x20, 0x9b, 0xfb, 0xec, 0x7d, 0x31, 0xc5, 0xfc, 0x88, 0x0b, 0x30, 0xed, 0x36, 0xc0, 0x63, 0xb1, 0x7d, 0x10, 0xda, 0xb6, 0x2e, 0xad, 0xf3, 0xec, 0x94, 0xe7, 0xec, 0xb5, 0x9c, 0xfe, 0xf5, 0x35, 0xf0, 0xa2, 0x2d, 0x7f, 0xca, 0x6b, 0x67, 0x1a, 0xf6, 0xb3, 0xda, 0x09, 0x2a, 0xaa, 0xdf, 0xb1, 0xca, 0x9b, 0xfb, 0xeb, 0xb3, 0xcd, 0xc0, + /* (2^272)P */ 0xcd, 0x4d, 0x89, 0x00, 0xa4, 0x3b, 0x48, 0xf0, 0x76, 0x91, 0x35, 0xa5, 0xf8, 0xc9, 0xb6, 0x46, 0xbc, 0xf6, 0x9a, 0x45, 0x47, 0x17, 0x96, 0x80, 0x5b, 0x3a, 0x28, 0x33, 0xf9, 0x5a, 0xef, 0x43, 0x07, 0xfe, 0x3b, 0xf4, 0x8e, 0x19, 0xce, 0xd2, 0x94, 0x4b, 0x6d, 0x8e, 0x67, 0x20, 0xc7, 0x4f, 0x2f, 0x59, 0x8e, 0xe1, 0xa1, 0xa9, 0xf9, 0x0e, + /* (2^273)P */ 0xdc, 0x7b, 0xb5, 0x50, 0x2e, 0xe9, 0x7e, 0x8b, 0x78, 0xa1, 0x38, 0x96, 0x22, 0xc3, 0x61, 0x67, 0x6d, 0xc8, 0x58, 0xed, 0x41, 0x1d, 0x5d, 0x86, 0x98, 0x7f, 0x2f, 0x1b, 0x8d, 0x3e, 0xaa, 0xc1, 0xd2, 0x0a, 0xf3, 0xbf, 0x95, 0x04, 0xf3, 0x10, 0x3c, 0x2b, 0x7f, 0x90, 0x46, 0x04, 0xaa, 0x6a, 0xa9, 0x35, 0x76, 0xac, 0x49, 0xb5, 0x00, 0x45, + /* (2^274)P */ 0xb1, 0x93, 0x79, 0x84, 0x4a, 0x2a, 0x30, 0x78, 0x16, 0xaa, 0xc5, 0x74, 0x06, 0xce, 0xa5, 0xa7, 0x32, 0x86, 0xe0, 0xf9, 0x10, 0xd2, 0x58, 0x76, 0xfb, 0x66, 0x49, 0x76, 0x3a, 0x90, 0xba, 0xb5, 0xcc, 0x99, 0xcd, 0x09, 0xc1, 0x9a, 0x74, 0x23, 0xdf, 0x0c, 0xfe, 0x99, 0x52, 0x80, 0xa3, 0x7c, 0x1c, 0x71, 0x5f, 0x2c, 0x49, 0x57, 0xf4, 0xf9, + /* (2^275)P */ 0x6d, 0xbf, 0x52, 0xe6, 0x25, 0x98, 0xed, 0xcf, 0xe3, 0xbc, 0x08, 0xa2, 0x1a, 0x90, 0xae, 0xa0, 0xbf, 0x07, 0x15, 0xad, 0x0a, 0x9f, 0x3e, 0x47, 0x44, 0xc2, 0x10, 0x46, 0xa6, 0x7a, 0x9e, 0x2f, 0x57, 0xbc, 0xe2, 0xf0, 0x1d, 0xd6, 0x9a, 0x06, 0xed, 0xfc, 0x54, 0x95, 0x92, 0x15, 0xa2, 0xf7, 0x8d, 0x6b, 0xef, 0xb2, 0x05, 0xed, 0x5c, 0x63, + /* (2^276)P */ 0xbc, 0x0b, 0x27, 0x3a, 0x3a, 0xf8, 0xe1, 0x48, 0x02, 0x7e, 0x27, 0xe6, 0x81, 0x62, 0x07, 0x73, 0x74, 0xe5, 0x52, 0xd7, 0xf8, 0x26, 0xca, 0x93, 0x4d, 0x3e, 0x9b, 0x55, 0x09, 0x8e, 0xe3, 0xd7, 0xa6, 0xe3, 0xb6, 0x2a, 0xa9, 0xb3, 0xb0, 0xa0, 0x8c, 0x01, 0xbb, 0x07, 0x90, 0x78, 0x6d, 0x6d, 0xe9, 0xf0, 0x7a, 0x90, 0xbd, 0xdc, 0x0c, 0x36, + /* (2^277)P */ 0x7f, 0x20, 0x12, 0x0f, 0x40, 0x00, 0x53, 0xd8, 0x0c, 0x27, 0x47, 0x47, 0x22, 0x80, 0xfb, 0x62, 0xe4, 0xa7, 0xf7, 0xbd, 0x42, 0xa5, 0xc3, 0x2b, 0xb2, 0x7f, 0x50, 0xcc, 0xe2, 0xfb, 0xd5, 0xc0, 0x63, 0xdd, 0x24, 0x5f, 0x7c, 0x08, 0x91, 0xbf, 0x6e, 0x47, 0x44, 0xd4, 0x6a, 0xc0, 0xc3, 0x09, 0x39, 0x27, 0xdd, 0xc7, 0xca, 0x06, 0x29, 0x55, + /* (2^278)P */ 0x76, 0x28, 0x58, 0xb0, 0xd2, 0xf3, 0x0f, 0x04, 0xe9, 0xc9, 0xab, 0x66, 0x5b, 0x75, 0x51, 0xdc, 0xe5, 0x8f, 0xe8, 0x1f, 0xdb, 0x03, 0x0f, 0xb0, 0x7d, 0xf9, 0x20, 0x64, 0x89, 0xe9, 0xdc, 0xe6, 0x24, 0xc3, 0xd5, 0xd2, 0x41, 0xa6, 0xe4, 0xe3, 0xc4, 0x79, 0x7c, 0x0f, 0xa1, 0x61, 0x2f, 0xda, 0xa4, 0xc9, 0xfd, 0xad, 0x5c, 0x65, 0x6a, 0xf3, + /* (2^279)P */ 0xd5, 0xab, 0x72, 0x7a, 0x3b, 0x59, 0xea, 0xcf, 0xd5, 0x17, 0xd2, 0xb2, 0x5f, 0x2d, 0xab, 0xad, 0x9e, 0x88, 0x64, 0x55, 0x96, 0x6e, 0xf3, 0x44, 0xa9, 0x11, 0xf5, 0xf8, 0x3a, 0xf1, 0xcd, 0x79, 0x4c, 0x99, 0x6d, 0x23, 0x6a, 0xa0, 0xc2, 0x1a, 0x19, 0x45, 0xb5, 0xd8, 0x95, 0x2f, 0x49, 0xe9, 0x46, 0x39, 0x26, 0x60, 0x04, 0x15, 0x8b, 0xcc, + /* (2^280)P */ 0x66, 0x0c, 0xf0, 0x54, 0x41, 0x02, 0x91, 0xab, 0xe5, 0x85, 0x8a, 0x44, 0xa6, 0x34, 0x96, 0x32, 0xc0, 0xdf, 0x6c, 0x41, 0x39, 0xd4, 0xc6, 0xe1, 0xe3, 0x81, 0xb0, 0x4c, 0x34, 0x4f, 0xe5, 0xf4, 0x35, 0x46, 0x1f, 0xeb, 0x75, 0xfd, 0x43, 0x37, 0x50, 0x99, 0xab, 0xad, 0xb7, 0x8c, 0xa1, 0x57, 0xcb, 0xe6, 0xce, 0x16, 0x2e, 0x85, 0xcc, 0xf9, + /* (2^281)P */ 0x63, 0xd1, 0x3f, 0x9e, 0xa2, 0x17, 0x2e, 0x1d, 0x3e, 0xce, 0x48, 0x2d, 0xbb, 0x8f, 0x69, 0xc9, 0xa6, 0x3d, 0x4e, 0xfe, 0x09, 0x56, 0xb3, 0x02, 0x5f, 0x99, 0x97, 0x0c, 0x54, 0xda, 0x32, 0x97, 0x9b, 0xf4, 0x95, 0xf1, 0xad, 0xe3, 0x2b, 0x04, 0xa7, 0x9b, 0x3f, 0xbb, 0xe7, 0x87, 0x2e, 0x1f, 0x8b, 0x4b, 0x7a, 0xa4, 0x43, 0x0c, 0x0f, 0x35, + /* (2^282)P */ 0x05, 0xdc, 0xe0, 0x2c, 0xa1, 0xc1, 0xd0, 0xf1, 0x1f, 0x4e, 0xc0, 0x6c, 0x35, 0x7b, 0xca, 0x8f, 0x8b, 0x02, 0xb1, 0xf7, 0xd6, 0x2e, 0xe7, 0x93, 0x80, 0x85, 0x18, 0x88, 0x19, 0xb9, 0xb4, 0x4a, 0xbc, 0xeb, 0x5a, 0x78, 0x38, 0xed, 0xc6, 0x27, 0x2a, 0x74, 0x76, 0xf0, 0x1b, 0x79, 0x92, 0x2f, 0xd2, 0x81, 0x98, 0xdf, 0xa9, 0x50, 0x19, 0xeb, + /* (2^283)P */ 0xb5, 0xe7, 0xb4, 0x11, 0x3a, 0x81, 0xb6, 0xb4, 0xf8, 0xa2, 0xb3, 0x6c, 0xfc, 0x9d, 0xe0, 0xc0, 0xe0, 0x59, 0x7f, 0x05, 0x37, 0xef, 0x2c, 0xa9, 0x3a, 0x24, 0xac, 0x7b, 0x25, 0xa0, 0x55, 0xd2, 0x44, 0x82, 0x82, 0x6e, 0x64, 0xa3, 0x58, 0xc8, 0x67, 0xae, 0x26, 0xa7, 0x0f, 0x42, 0x63, 0xe1, 0x93, 0x01, 0x52, 0x19, 0xaf, 0x49, 0x3e, 0x33, + /* (2^284)P */ 0x05, 0x85, 0xe6, 0x66, 0xaf, 0x5f, 0xdf, 0xbf, 0x9d, 0x24, 0x62, 0x60, 0x90, 0xe2, 0x4c, 0x7d, 0x4e, 0xc3, 0x74, 0x5d, 0x4f, 0x53, 0xf3, 0x63, 0x13, 0xf4, 0x74, 0x28, 0x6b, 0x7d, 0x57, 0x0c, 0x9d, 0x84, 0xa7, 0x1a, 0xff, 0xa0, 0x79, 0xdf, 0xfc, 0x65, 0x98, 0x8e, 0x22, 0x0d, 0x62, 0x7e, 0xf2, 0x34, 0x60, 0x83, 0x05, 0x14, 0xb1, 0xc1, + /* (2^285)P */ 0x64, 0x22, 0xcc, 0xdf, 0x5c, 0xbc, 0x88, 0x68, 0x4c, 0xd9, 0xbc, 0x0e, 0xc9, 0x8b, 0xb4, 0x23, 0x52, 0xad, 0xb0, 0xb3, 0xf1, 0x17, 0xd8, 0x15, 0x04, 0x6b, 0x99, 0xf0, 0xc4, 0x7d, 0x48, 0x22, 0x4a, 0xf8, 0x6f, 0xaa, 0x88, 0x0d, 0xc5, 0x5e, 0xa9, 0x1c, 0x61, 0x3d, 0x95, 0xa9, 0x7b, 0x6a, 0x79, 0x33, 0x0a, 0x2b, 0x99, 0xe3, 0x4e, 0x48, + /* (2^286)P */ 0x6b, 0x9b, 0x6a, 0x2a, 0xf1, 0x60, 0x31, 0xb4, 0x73, 0xd1, 0x87, 0x45, 0x9c, 0x15, 0x58, 0x4b, 0x91, 0x6d, 0x94, 0x1c, 0x41, 0x11, 0x4a, 0x83, 0xec, 0xaf, 0x65, 0xbc, 0x34, 0xaa, 0x26, 0xe2, 0xaf, 0xed, 0x46, 0x05, 0x4e, 0xdb, 0xc6, 0x4e, 0x10, 0x28, 0x4e, 0x72, 0xe5, 0x31, 0xa3, 0x20, 0xd7, 0xb1, 0x96, 0x64, 0xf6, 0xce, 0x08, 0x08, + /* (2^287)P */ 0x16, 0xa9, 0x5c, 0x9f, 0x9a, 0xb4, 0xb8, 0xc8, 0x32, 0x78, 0xc0, 0x3a, 0xd9, 0x5f, 0x94, 0xac, 0x3a, 0x42, 0x1f, 0x43, 0xd6, 0x80, 0x47, 0x2c, 0xdc, 0x76, 0x27, 0xfa, 0x50, 0xe5, 0xa1, 0xe4, 0xc3, 0xcb, 0x61, 0x31, 0xe1, 0x2e, 0xde, 0x81, 0x3b, 0x77, 0x1c, 0x39, 0x3c, 0xdb, 0xda, 0x87, 0x4b, 0x84, 0x12, 0xeb, 0xdd, 0x54, 0xbf, 0xe7, + /* (2^288)P */ 0xbf, 0xcb, 0x73, 0x21, 0x3d, 0x7e, 0x13, 0x8c, 0xa6, 0x34, 0x21, 0x2b, 0xa5, 0xe4, 0x9f, 0x8e, 0x9c, 0x01, 0x9c, 0x43, 0xd9, 0xc7, 0xb9, 0xf1, 0xbe, 0x7f, 0x45, 0x51, 0x97, 0xa1, 0x8e, 0x01, 0xf8, 0xbd, 0xd2, 0xbf, 0x81, 0x3a, 0x8b, 0xab, 0xe4, 0x89, 0xb7, 0xbd, 0xf2, 0xcd, 0xa9, 0x8a, 0x8a, 0xde, 0xfb, 0x8a, 0x55, 0x12, 0x7b, 0x17, + /* (2^289)P */ 0x1b, 0x95, 0x58, 0x4d, 0xe6, 0x51, 0x31, 0x52, 0x1c, 0xd8, 0x15, 0x84, 0xb1, 0x0d, 0x36, 0x25, 0x88, 0x91, 0x46, 0x71, 0x42, 0x56, 0xe2, 0x90, 0x08, 0x9e, 0x77, 0x1b, 0xee, 0x22, 0x3f, 0xec, 0xee, 0x8c, 0x7b, 0x2e, 0x79, 0xc4, 0x6c, 0x07, 0xa1, 0x7e, 0x52, 0xf5, 0x26, 0x5c, 0x84, 0x2a, 0x50, 0x6e, 0x82, 0xb3, 0x76, 0xda, 0x35, 0x16, + /* (2^290)P */ 0x0a, 0x6f, 0x99, 0x87, 0xc0, 0x7d, 0x8a, 0xb2, 0xca, 0xae, 0xe8, 0x65, 0x98, 0x0f, 0xb3, 0x44, 0xe1, 0xdc, 0x52, 0x79, 0x75, 0xec, 0x8f, 0x95, 0x87, 0x45, 0xd1, 0x32, 0x18, 0x55, 0x15, 0xce, 0x64, 0x9b, 0x08, 0x4f, 0x2c, 0xea, 0xba, 0x1c, 0x57, 0x06, 0x63, 0xc8, 0xb1, 0xfd, 0xc5, 0x67, 0xe7, 0x1f, 0x87, 0x9e, 0xde, 0x72, 0x7d, 0xec, + /* (2^291)P */ 0x36, 0x8b, 0x4d, 0x2c, 0xc2, 0x46, 0xe8, 0x96, 0xac, 0x0b, 0x8c, 0xc5, 0x09, 0x10, 0xfc, 0xf2, 0xda, 0xea, 0x22, 0xb2, 0xd3, 0x89, 0xeb, 0xb2, 0x85, 0x0f, 0xff, 0x59, 0x50, 0x2c, 0x99, 0x5a, 0x1f, 0xec, 0x2a, 0x6f, 0xec, 0xcf, 0xe9, 0xce, 0x12, 0x6b, 0x19, 0xd8, 0xde, 0x9b, 0xce, 0x0e, 0x6a, 0xaa, 0xe1, 0x32, 0xea, 0x4c, 0xfe, 0x92, + /* (2^292)P */ 0x5f, 0x17, 0x70, 0x53, 0x26, 0x03, 0x0b, 0xab, 0xd1, 0xc1, 0x42, 0x0b, 0xab, 0x2b, 0x3d, 0x31, 0xa4, 0xd5, 0x2b, 0x5e, 0x00, 0xd5, 0x9a, 0x22, 0x34, 0xe0, 0x53, 0x3f, 0x59, 0x7f, 0x2c, 0x6d, 0x72, 0x9a, 0xa4, 0xbe, 0x3d, 0x42, 0x05, 0x1b, 0xf2, 0x7f, 0x88, 0x56, 0xd1, 0x7c, 0x7d, 0x6b, 0x9f, 0x43, 0xfe, 0x65, 0x19, 0xae, 0x9c, 0x4c, + /* (2^293)P */ 0xf3, 0x7c, 0x20, 0xa9, 0xfc, 0xf2, 0xf2, 0x3b, 0x3c, 0x57, 0x41, 0x94, 0xe5, 0xcc, 0x6a, 0x37, 0x5d, 0x09, 0xf2, 0xab, 0xc2, 0xca, 0x60, 0x38, 0x6b, 0x7a, 0xe1, 0x78, 0x2b, 0xc1, 0x1d, 0xe8, 0xfd, 0xbc, 0x3d, 0x5c, 0xa2, 0xdb, 0x49, 0x20, 0x79, 0xe6, 0x1b, 0x9b, 0x65, 0xd9, 0x6d, 0xec, 0x57, 0x1d, 0xd2, 0xe9, 0x90, 0xeb, 0x43, 0x7b, + /* (2^294)P */ 0x2a, 0x8b, 0x2e, 0x19, 0x18, 0x10, 0xb8, 0x83, 0xe7, 0x7d, 0x2d, 0x9a, 0x3a, 0xe5, 0xd1, 0xe4, 0x7c, 0x38, 0xe5, 0x59, 0x2a, 0x6e, 0xd9, 0x01, 0x29, 0x3d, 0x23, 0xf7, 0x52, 0xba, 0x61, 0x04, 0x9a, 0xde, 0xc4, 0x31, 0x50, 0xeb, 0x1b, 0xaa, 0xde, 0x39, 0x58, 0xd8, 0x1b, 0x1e, 0xfc, 0x57, 0x9a, 0x28, 0x43, 0x9e, 0x97, 0x5e, 0xaa, 0xa3, + /* (2^295)P */ 0x97, 0x0a, 0x74, 0xc4, 0x39, 0x99, 0x6b, 0x40, 0xc7, 0x3e, 0x8c, 0xa7, 0xb1, 0x4e, 0x9a, 0x59, 0x6e, 0x1c, 0xfe, 0xfc, 0x2a, 0x5e, 0x73, 0x2b, 0x8c, 0xa9, 0x71, 0xf5, 0xda, 0x6b, 0x15, 0xab, 0xf7, 0xbe, 0x2a, 0x44, 0x5f, 0xba, 0xae, 0x67, 0x93, 0xc5, 0x86, 0xc1, 0xb8, 0xdf, 0xdc, 0xcb, 0xd7, 0xff, 0xb1, 0x71, 0x7c, 0x6f, 0x88, 0xf8, + /* (2^296)P */ 0x3f, 0x89, 0xb1, 0xbf, 0x24, 0x16, 0xac, 0x56, 0xfe, 0xdf, 0x94, 0x71, 0xbf, 0xd6, 0x57, 0x0c, 0xb4, 0x77, 0x37, 0xaa, 0x2a, 0x70, 0x76, 0x49, 0xaf, 0x0c, 0x97, 0x8e, 0x78, 0x2a, 0x67, 0xc9, 0x3b, 0x3d, 0x5b, 0x01, 0x2f, 0xda, 0xd5, 0xa8, 0xde, 0x02, 0xa9, 0xac, 0x76, 0x00, 0x0b, 0x46, 0xc6, 0x2d, 0xdc, 0x08, 0xf4, 0x10, 0x2c, 0xbe, + /* (2^297)P */ 0xcb, 0x07, 0xf9, 0x91, 0xc6, 0xd5, 0x3e, 0x54, 0x63, 0xae, 0xfc, 0x10, 0xbe, 0x3a, 0x20, 0x73, 0x4e, 0x65, 0x0e, 0x2d, 0x86, 0x77, 0x83, 0x9d, 0xe2, 0x0a, 0xe9, 0xac, 0x22, 0x52, 0x76, 0xd4, 0x6e, 0xfa, 0xe0, 0x09, 0xef, 0x78, 0x82, 0x9f, 0x26, 0xf9, 0x06, 0xb5, 0xe7, 0x05, 0x0e, 0xf2, 0x46, 0x72, 0x93, 0xd3, 0x24, 0xbd, 0x87, 0x60, + /* (2^298)P */ 0x14, 0x55, 0x84, 0x7b, 0x6c, 0x60, 0x80, 0x73, 0x8c, 0xbe, 0x2d, 0xd6, 0x69, 0xd6, 0x17, 0x26, 0x44, 0x9f, 0x88, 0xa2, 0x39, 0x7c, 0x89, 0xbc, 0x6d, 0x9e, 0x46, 0xb6, 0x68, 0x66, 0xea, 0xdc, 0x31, 0xd6, 0x21, 0x51, 0x9f, 0x28, 0x28, 0xaf, 0x9e, 0x47, 0x2c, 0x4c, 0x8f, 0xf3, 0xaf, 0x1f, 0xe4, 0xab, 0xac, 0xe9, 0x0c, 0x91, 0x3a, 0x61, + /* (2^299)P */ 0xb0, 0x37, 0x55, 0x4b, 0xe9, 0xc3, 0xb1, 0xce, 0x42, 0xe6, 0xc5, 0x11, 0x7f, 0x2c, 0x11, 0xfc, 0x4e, 0x71, 0x17, 0x00, 0x74, 0x7f, 0xbf, 0x07, 0x4d, 0xfd, 0x40, 0xb2, 0x87, 0xb0, 0xef, 0x1f, 0x35, 0x2c, 0x2d, 0xd7, 0xe1, 0xe4, 0xad, 0x0e, 0x7f, 0x63, 0x66, 0x62, 0x23, 0x41, 0xf6, 0xc1, 0x14, 0xa6, 0xd7, 0xa9, 0x11, 0x56, 0x9d, 0x1b, + /* (2^300)P */ 0x02, 0x82, 0x42, 0x18, 0x4f, 0x1b, 0xc9, 0x5d, 0x78, 0x5f, 0xee, 0xed, 0x01, 0x49, 0x8f, 0xf2, 0xa0, 0xe2, 0x6e, 0xbb, 0x6b, 0x04, 0x8d, 0xb2, 0x41, 0xae, 0xc8, 0x1b, 0x59, 0x34, 0xb8, 0x2a, 0xdb, 0x1f, 0xd2, 0x52, 0xdf, 0x3f, 0x35, 0x00, 0x8b, 0x61, 0xbc, 0x97, 0xa0, 0xc4, 0x77, 0xd1, 0xe4, 0x2c, 0x59, 0x68, 0xff, 0x30, 0xf2, 0xe2, + /* (2^301)P */ 0x79, 0x08, 0xb1, 0xdb, 0x55, 0xae, 0xd0, 0xed, 0xda, 0xa0, 0xec, 0x6c, 0xae, 0x68, 0xf2, 0x0b, 0x61, 0xb3, 0xf5, 0x21, 0x69, 0x87, 0x0b, 0x03, 0xea, 0x8a, 0x15, 0xd9, 0x7e, 0xca, 0xf7, 0xcd, 0xf3, 0x33, 0xb3, 0x4c, 0x5b, 0x23, 0x4e, 0x6f, 0x90, 0xad, 0x91, 0x4b, 0x4f, 0x46, 0x37, 0xe5, 0xe8, 0xb7, 0xeb, 0xd5, 0xca, 0x34, 0x4e, 0x23, + /* (2^302)P */ 0x09, 0x02, 0xdd, 0xfd, 0x70, 0xac, 0x56, 0x80, 0x36, 0x5e, 0x49, 0xd0, 0x3f, 0xc2, 0xe0, 0xba, 0x46, 0x7f, 0x5c, 0xf7, 0xc5, 0xbd, 0xd5, 0x55, 0x7d, 0x3f, 0xd5, 0x7d, 0x06, 0xdf, 0x27, 0x20, 0x4f, 0xe9, 0x30, 0xec, 0x1b, 0xa0, 0x0c, 0xd4, 0x2c, 0xe1, 0x2b, 0x65, 0x73, 0xea, 0x75, 0x35, 0xe8, 0xe6, 0x56, 0xd6, 0x07, 0x15, 0x99, 0xdf, + /* (2^303)P */ 0x4e, 0x10, 0xb7, 0xd0, 0x63, 0x8c, 0xcf, 0x16, 0x00, 0x7c, 0x58, 0xdf, 0x86, 0xdc, 0x4e, 0xca, 0x9c, 0x40, 0x5a, 0x42, 0xfd, 0xec, 0x98, 0xa4, 0x42, 0x53, 0xae, 0x16, 0x9d, 0xfd, 0x75, 0x5a, 0x12, 0x56, 0x1e, 0xc6, 0x57, 0xcc, 0x79, 0x27, 0x96, 0x00, 0xcf, 0x80, 0x4f, 0x8a, 0x36, 0x5c, 0xbb, 0xe9, 0x12, 0xdb, 0xb6, 0x2b, 0xad, 0x96, + /* (2^304)P */ 0x92, 0x32, 0x1f, 0xfd, 0xc6, 0x02, 0x94, 0x08, 0x1b, 0x60, 0x6a, 0x9f, 0x8b, 0xd6, 0xc8, 0xad, 0xd5, 0x1b, 0x27, 0x4e, 0xa4, 0x4d, 0x4a, 0x00, 0x10, 0x5f, 0x86, 0x11, 0xf5, 0xe3, 0x14, 0x32, 0x43, 0xee, 0xb9, 0xc7, 0xab, 0xf4, 0x6f, 0xe5, 0x66, 0x0c, 0x06, 0x0d, 0x96, 0x79, 0x28, 0xaf, 0x45, 0x2b, 0x56, 0xbe, 0xe4, 0x4a, 0x52, 0xd6, + /* (2^305)P */ 0x15, 0x16, 0x69, 0xef, 0x60, 0xca, 0x82, 0x25, 0x0f, 0xc6, 0x30, 0xa0, 0x0a, 0xd1, 0x83, 0x29, 0xcd, 0xb6, 0x89, 0x6c, 0xf5, 0xb2, 0x08, 0x38, 0xe6, 0xca, 0x6b, 0x19, 0x93, 0xc6, 0x5f, 0x75, 0x8e, 0x60, 0x34, 0x23, 0xc4, 0x13, 0x17, 0x69, 0x55, 0xcc, 0x72, 0x9c, 0x2b, 0x6c, 0x80, 0xf4, 0x4b, 0x8b, 0xb6, 0x97, 0x65, 0x07, 0xb6, 0xfb, + /* (2^306)P */ 0x01, 0x99, 0x74, 0x28, 0xa6, 0x67, 0xa3, 0xe5, 0x25, 0xfb, 0xdf, 0x82, 0x93, 0xe7, 0x35, 0x74, 0xce, 0xe3, 0x15, 0x1c, 0x1d, 0x79, 0x52, 0x84, 0x08, 0x04, 0x2f, 0x5c, 0xb8, 0xcd, 0x7f, 0x89, 0xb0, 0x39, 0x93, 0x63, 0xc9, 0x5d, 0x06, 0x01, 0x59, 0xf7, 0x7e, 0xf1, 0x4c, 0x3d, 0x12, 0x8d, 0x69, 0x1d, 0xb7, 0x21, 0x5e, 0x88, 0x82, 0xa2, + /* (2^307)P */ 0x8e, 0x69, 0xaf, 0x9a, 0x41, 0x0d, 0x9d, 0xcf, 0x8e, 0x8d, 0x5c, 0x51, 0x6e, 0xde, 0x0e, 0x48, 0x23, 0x89, 0xe5, 0x37, 0x80, 0xd6, 0x9d, 0x72, 0x32, 0x26, 0x38, 0x2d, 0x63, 0xa0, 0xfa, 0xd3, 0x40, 0xc0, 0x8c, 0x68, 0x6f, 0x2b, 0x1e, 0x9a, 0x39, 0x51, 0x78, 0x74, 0x9a, 0x7b, 0x4a, 0x8f, 0x0c, 0xa0, 0x88, 0x60, 0xa5, 0x21, 0xcd, 0xc7, + /* (2^308)P */ 0x3a, 0x7f, 0x73, 0x14, 0xbf, 0x89, 0x6a, 0x4c, 0x09, 0x5d, 0xf2, 0x93, 0x20, 0x2d, 0xc4, 0x29, 0x86, 0x06, 0x95, 0xab, 0x22, 0x76, 0x4c, 0x54, 0xe1, 0x7e, 0x80, 0x6d, 0xab, 0x29, 0x61, 0x87, 0x77, 0xf6, 0xc0, 0x3e, 0xda, 0xab, 0x65, 0x7e, 0x39, 0x12, 0xa1, 0x6b, 0x42, 0xf7, 0xc5, 0x97, 0x77, 0xec, 0x6f, 0x22, 0xbe, 0x44, 0xc7, 0x03, + /* (2^309)P */ 0xa5, 0x23, 0x90, 0x41, 0xa3, 0xc5, 0x3e, 0xe0, 0xa5, 0x32, 0x49, 0x1f, 0x39, 0x78, 0xb1, 0xd8, 0x24, 0xea, 0xd4, 0x87, 0x53, 0x42, 0x51, 0xf4, 0xd9, 0x46, 0x25, 0x2f, 0x62, 0xa9, 0x90, 0x9a, 0x4a, 0x25, 0x8a, 0xd2, 0x10, 0xe7, 0x3c, 0xbc, 0x58, 0x8d, 0x16, 0x14, 0x96, 0xa4, 0x6f, 0xf8, 0x12, 0x69, 0x91, 0x73, 0xe2, 0xfa, 0xf4, 0x57, + /* (2^310)P */ 0x51, 0x45, 0x3f, 0x96, 0xdc, 0x97, 0x38, 0xa6, 0x01, 0x63, 0x09, 0xea, 0xc2, 0x13, 0x30, 0xb0, 0x00, 0xb8, 0x0a, 0xce, 0xd1, 0x8f, 0x3e, 0x69, 0x62, 0x46, 0x33, 0x9c, 0xbf, 0x4b, 0xcb, 0x0c, 0x90, 0x1c, 0x45, 0xcf, 0x37, 0x5b, 0xf7, 0x4b, 0x5e, 0x95, 0xc3, 0x28, 0x9f, 0x08, 0x83, 0x53, 0x74, 0xab, 0x0c, 0xb4, 0xc0, 0xa1, 0xbc, 0x89, + /* (2^311)P */ 0x06, 0xb1, 0x51, 0x15, 0x65, 0x60, 0x21, 0x17, 0x7a, 0x20, 0x65, 0xee, 0x12, 0x35, 0x4d, 0x46, 0xf4, 0xf8, 0xd0, 0xb1, 0xca, 0x09, 0x30, 0x08, 0x89, 0x23, 0x3b, 0xe7, 0xab, 0x8b, 0x77, 0xa6, 0xad, 0x25, 0xdd, 0xea, 0x3c, 0x7d, 0xa5, 0x24, 0xb3, 0xe8, 0xfa, 0xfb, 0xc9, 0xf2, 0x71, 0xe9, 0xfa, 0xf2, 0xdc, 0x54, 0xdd, 0x55, 0x2e, 0x2f, + /* (2^312)P */ 0x7f, 0x96, 0x96, 0xfb, 0x52, 0x86, 0xcf, 0xea, 0x62, 0x18, 0xf1, 0x53, 0x1f, 0x61, 0x2a, 0x9f, 0x8c, 0x51, 0xca, 0x2c, 0xde, 0x6d, 0xce, 0xab, 0x58, 0x32, 0x0b, 0x33, 0x9b, 0x99, 0xb4, 0x5c, 0x88, 0x2a, 0x76, 0xcc, 0x3e, 0x54, 0x1e, 0x9d, 0xa2, 0x89, 0xe4, 0x19, 0xba, 0x80, 0xc8, 0x39, 0x32, 0x7f, 0x0f, 0xc7, 0x84, 0xbb, 0x43, 0x56, + /* (2^313)P */ 0x9b, 0x07, 0xb4, 0x42, 0xa9, 0xa0, 0x78, 0x4f, 0x28, 0x70, 0x2b, 0x7e, 0x61, 0xe0, 0xdd, 0x02, 0x98, 0xfc, 0xed, 0x31, 0x80, 0xf1, 0x15, 0x52, 0x89, 0x23, 0xcd, 0x5d, 0x2b, 0xc5, 0x19, 0x32, 0xfb, 0x70, 0x50, 0x7a, 0x97, 0x6b, 0x42, 0xdb, 0xca, 0xdb, 0xc4, 0x59, 0x99, 0xe0, 0x12, 0x1f, 0x17, 0xba, 0x8b, 0xf0, 0xc4, 0x38, 0x5d, 0x27, + /* (2^314)P */ 0x29, 0x1d, 0xdc, 0x2b, 0xf6, 0x5b, 0x04, 0x61, 0x36, 0x76, 0xa0, 0x56, 0x36, 0x6e, 0xd7, 0x24, 0x4d, 0xe7, 0xef, 0x44, 0xd2, 0xd5, 0x07, 0xcd, 0xc4, 0x9d, 0x80, 0x48, 0xc3, 0x38, 0xcf, 0xd8, 0xa3, 0xdd, 0xb2, 0x5e, 0xb5, 0x70, 0x15, 0xbb, 0x36, 0x85, 0x8a, 0xd7, 0xfb, 0x56, 0x94, 0x73, 0x9c, 0x81, 0xbe, 0xb1, 0x44, 0x28, 0xf1, 0x37, + /* (2^315)P */ 0xbf, 0xcf, 0x5c, 0xd2, 0xe2, 0xea, 0xc2, 0xcd, 0x70, 0x7a, 0x9d, 0xcb, 0x81, 0xc1, 0xe9, 0xf1, 0x56, 0x71, 0x52, 0xf7, 0x1b, 0x87, 0xc6, 0xd8, 0xcc, 0xb2, 0x69, 0xf3, 0xb0, 0xbd, 0xba, 0x83, 0x12, 0x26, 0xc4, 0xce, 0x72, 0xde, 0x3b, 0x21, 0x28, 0x9e, 0x5a, 0x94, 0xf5, 0x04, 0xa3, 0xc8, 0x0f, 0x5e, 0xbc, 0x71, 0xf9, 0x0d, 0xce, 0xf5, + /* (2^316)P */ 0x93, 0x97, 0x00, 0x85, 0xf4, 0xb4, 0x40, 0xec, 0xd9, 0x2b, 0x6c, 0xd6, 0x63, 0x9e, 0x93, 0x0a, 0x5a, 0xf4, 0xa7, 0x9a, 0xe3, 0x3c, 0xf0, 0x55, 0xd1, 0x96, 0x6c, 0xf5, 0x2a, 0xce, 0xd7, 0x95, 0x72, 0xbf, 0xc5, 0x0c, 0xce, 0x79, 0xa2, 0x0a, 0x78, 0xe0, 0x72, 0xd0, 0x66, 0x28, 0x05, 0x75, 0xd3, 0x23, 0x09, 0x91, 0xed, 0x7e, 0xc4, 0xbc, + /* (2^317)P */ 0x77, 0xc2, 0x9a, 0xf7, 0xa6, 0xe6, 0x18, 0xb4, 0xe7, 0xf6, 0xda, 0xec, 0x44, 0x6d, 0xfb, 0x08, 0xee, 0x65, 0xa8, 0x92, 0x85, 0x1f, 0xba, 0x38, 0x93, 0x20, 0x5c, 0x4d, 0xd2, 0x18, 0x0f, 0x24, 0xbe, 0x1a, 0x96, 0x44, 0x7d, 0xeb, 0xb3, 0xda, 0x95, 0xf4, 0xaf, 0x6c, 0x06, 0x0f, 0x47, 0x37, 0xc8, 0x77, 0x63, 0xe1, 0x29, 0xef, 0xff, 0xa5, + /* (2^318)P */ 0x16, 0x12, 0xd9, 0x47, 0x90, 0x22, 0x9b, 0x05, 0xf2, 0xa5, 0x9a, 0xae, 0x83, 0x98, 0xb5, 0xac, 0xab, 0x29, 0xaa, 0xdc, 0x5f, 0xde, 0xcd, 0xf7, 0x42, 0xad, 0x3b, 0x96, 0xd6, 0x3e, 0x6e, 0x52, 0x47, 0xb1, 0xab, 0x51, 0xde, 0x49, 0x7c, 0x87, 0x8d, 0x86, 0xe2, 0x70, 0x13, 0x21, 0x51, 0x1c, 0x0c, 0x25, 0xc1, 0xb0, 0xe6, 0x19, 0xcf, 0x12, + /* (2^319)P */ 0xf0, 0xbc, 0x97, 0x8f, 0x4b, 0x2f, 0xd1, 0x1f, 0x8c, 0x57, 0xed, 0x3c, 0xf4, 0x26, 0x19, 0xbb, 0x60, 0xca, 0x24, 0xc5, 0xd9, 0x97, 0xe2, 0x5f, 0x76, 0x49, 0x39, 0x7e, 0x2d, 0x12, 0x21, 0x98, 0xda, 0xe6, 0xdb, 0xd2, 0xd8, 0x9f, 0x18, 0xd8, 0x83, 0x6c, 0xba, 0x89, 0x8d, 0x29, 0xfa, 0x46, 0x33, 0x8c, 0x28, 0xdf, 0x6a, 0xb3, 0x69, 0x28, + /* (2^320)P */ 0x86, 0x17, 0xbc, 0xd6, 0x7c, 0xba, 0x1e, 0x83, 0xbb, 0x84, 0xb5, 0x8c, 0xad, 0xdf, 0xa1, 0x24, 0x81, 0x70, 0x40, 0x0f, 0xad, 0xad, 0x3b, 0x23, 0xd0, 0x93, 0xa0, 0x49, 0x5c, 0x4b, 0x51, 0xbe, 0x20, 0x49, 0x4e, 0xda, 0x2d, 0xd3, 0xad, 0x1b, 0x74, 0x08, 0x41, 0xf0, 0xef, 0x19, 0xe9, 0x45, 0x5d, 0x02, 0xae, 0x26, 0x25, 0xd9, 0xd1, 0xc2, + /* (2^321)P */ 0x48, 0x81, 0x3e, 0xb2, 0x83, 0xf8, 0x4d, 0xb3, 0xd0, 0x4c, 0x75, 0xb3, 0xa0, 0x52, 0x26, 0xf2, 0xaf, 0x5d, 0x36, 0x70, 0x72, 0xd6, 0xb7, 0x88, 0x08, 0x69, 0xbd, 0x15, 0x25, 0xb1, 0x45, 0x1b, 0xb7, 0x0b, 0x5f, 0x71, 0x5d, 0x83, 0x49, 0xb9, 0x84, 0x3b, 0x7c, 0xc1, 0x50, 0x93, 0x05, 0x53, 0xe0, 0x61, 0xea, 0xc1, 0xef, 0xdb, 0x82, 0x97, + /* (2^322)P */ 0x00, 0xd5, 0xc3, 0x3a, 0x4d, 0x8a, 0x23, 0x7a, 0xef, 0xff, 0x37, 0xef, 0xf3, 0xbc, 0xa9, 0xb6, 0xae, 0xd7, 0x3a, 0x7b, 0xfd, 0x3e, 0x8e, 0x9b, 0xab, 0x44, 0x54, 0x60, 0x28, 0x6c, 0xbf, 0x15, 0x24, 0x4a, 0x56, 0x60, 0x7f, 0xa9, 0x7a, 0x28, 0x59, 0x2c, 0x8a, 0xd1, 0x7d, 0x6b, 0x00, 0xfd, 0xa5, 0xad, 0xbc, 0x19, 0x3f, 0xcb, 0x73, 0xe0, + /* (2^323)P */ 0xcf, 0x9e, 0x66, 0x06, 0x4d, 0x2b, 0xf5, 0x9c, 0xc2, 0x9d, 0x9e, 0xed, 0x5a, 0x5c, 0x2d, 0x00, 0xbf, 0x29, 0x90, 0x88, 0xe4, 0x5d, 0xfd, 0xe2, 0xf0, 0x38, 0xec, 0x4d, 0x26, 0xea, 0x54, 0xf0, 0x3c, 0x84, 0x10, 0x6a, 0xf9, 0x66, 0x9c, 0xe7, 0x21, 0xfd, 0x0f, 0xc7, 0x13, 0x50, 0x81, 0xb6, 0x50, 0xf9, 0x04, 0x7f, 0xa4, 0x37, 0x85, 0x14, + /* (2^324)P */ 0xdb, 0x87, 0x49, 0xc7, 0xa8, 0x39, 0x0c, 0x32, 0x98, 0x0c, 0xb9, 0x1a, 0x1b, 0x4d, 0xe0, 0x8a, 0x9a, 0x8e, 0x8f, 0xab, 0x5a, 0x17, 0x3d, 0x04, 0x21, 0xce, 0x3e, 0x2c, 0xf9, 0xa3, 0x97, 0xe4, 0x77, 0x95, 0x0e, 0xb6, 0xa5, 0x15, 0xad, 0x3a, 0x1e, 0x46, 0x53, 0x17, 0x09, 0x83, 0x71, 0x4e, 0x86, 0x38, 0xd5, 0x23, 0x44, 0x16, 0x8d, 0xc8, + /* (2^325)P */ 0x05, 0x5e, 0x99, 0x08, 0xbb, 0xc3, 0xc0, 0xb7, 0x6c, 0x12, 0xf2, 0xf3, 0xf4, 0x7c, 0x6a, 0x4d, 0x9e, 0xeb, 0x3d, 0xb9, 0x63, 0x94, 0xce, 0x81, 0xd8, 0x11, 0xcb, 0x55, 0x69, 0x4a, 0x20, 0x0b, 0x4c, 0x2e, 0x14, 0xb8, 0xd4, 0x6a, 0x7c, 0xf0, 0xed, 0xfc, 0x8f, 0xef, 0xa0, 0xeb, 0x6c, 0x01, 0xe2, 0xdc, 0x10, 0x22, 0xa2, 0x01, 0x85, 0x64, + /* (2^326)P */ 0x58, 0xe1, 0x9c, 0x27, 0x55, 0xc6, 0x25, 0xa6, 0x7d, 0x67, 0x88, 0x65, 0x99, 0x6c, 0xcb, 0xdb, 0x27, 0x4f, 0x44, 0x29, 0xf5, 0x4a, 0x23, 0x10, 0xbc, 0x03, 0x3f, 0x36, 0x1e, 0xef, 0xb0, 0xba, 0x75, 0xe8, 0x74, 0x5f, 0x69, 0x3e, 0x26, 0x40, 0xb4, 0x2f, 0xdc, 0x43, 0xbf, 0xa1, 0x8b, 0xbd, 0xca, 0x6e, 0xc1, 0x6e, 0x21, 0x79, 0xa0, 0xd0, + /* (2^327)P */ 0x78, 0x93, 0x4a, 0x2d, 0x22, 0x6e, 0x6e, 0x7d, 0x74, 0xd2, 0x66, 0x58, 0xce, 0x7b, 0x1d, 0x97, 0xb1, 0xf2, 0xda, 0x1c, 0x79, 0xfb, 0xba, 0xd1, 0xc0, 0xc5, 0x6e, 0xc9, 0x11, 0x89, 0xd2, 0x41, 0x8d, 0x70, 0xb9, 0xcc, 0xea, 0x6a, 0xb3, 0x45, 0xb6, 0x05, 0x2e, 0xf2, 0x17, 0xf1, 0x27, 0xb8, 0xed, 0x06, 0x1f, 0xdb, 0x9d, 0x1f, 0x69, 0x28, + /* (2^328)P */ 0x93, 0x12, 0xa8, 0x11, 0xe1, 0x92, 0x30, 0x8d, 0xac, 0xe1, 0x1c, 0x60, 0x7c, 0xed, 0x2d, 0x2e, 0xd3, 0x03, 0x5c, 0x9c, 0xc5, 0xbd, 0x64, 0x4a, 0x8c, 0xba, 0x76, 0xfe, 0xc6, 0xc1, 0xea, 0xc2, 0x4f, 0xbe, 0x70, 0x3d, 0x64, 0xcf, 0x8e, 0x18, 0xcb, 0xcd, 0x57, 0xa7, 0xf7, 0x36, 0xa9, 0x6b, 0x3e, 0xb8, 0x69, 0xee, 0x47, 0xa2, 0x7e, 0xb2, + /* (2^329)P */ 0x96, 0xaf, 0x3a, 0xf5, 0xed, 0xcd, 0xaf, 0xf7, 0x82, 0xaf, 0x59, 0x62, 0x0b, 0x36, 0x85, 0xf9, 0xaf, 0xd6, 0x38, 0xff, 0x87, 0x2e, 0x1d, 0x6c, 0x8b, 0xaf, 0x3b, 0xdf, 0x28, 0xa2, 0xd6, 0x4d, 0x80, 0x92, 0xc3, 0x0f, 0x34, 0xa8, 0xae, 0x69, 0x5d, 0x7b, 0x9d, 0xbc, 0xf5, 0xfd, 0x1d, 0xb1, 0x96, 0x55, 0x86, 0xe1, 0x5c, 0xb6, 0xac, 0xb9, + /* (2^330)P */ 0x50, 0x9e, 0x37, 0x28, 0x7d, 0xa8, 0x33, 0x63, 0xda, 0x3f, 0x20, 0x98, 0x0e, 0x09, 0xa8, 0x77, 0x3b, 0x7a, 0xfc, 0x16, 0x85, 0x44, 0x64, 0x77, 0x65, 0x68, 0x92, 0x41, 0xc6, 0x1f, 0xdf, 0x27, 0xf9, 0xec, 0xa0, 0x61, 0x22, 0xea, 0x19, 0xe7, 0x75, 0x8b, 0x4e, 0xe5, 0x0f, 0xb7, 0xf7, 0xd2, 0x53, 0xf4, 0xdd, 0x4a, 0xaa, 0x78, 0x40, 0xb7, + /* (2^331)P */ 0xd4, 0x89, 0xe3, 0x79, 0xba, 0xb6, 0xc3, 0xda, 0xe6, 0x78, 0x65, 0x7d, 0x6e, 0x22, 0x62, 0xb1, 0x3d, 0xea, 0x90, 0x84, 0x30, 0x5e, 0xd4, 0x39, 0x84, 0x78, 0xd9, 0x75, 0xd6, 0xce, 0x2a, 0x11, 0x29, 0x69, 0xa4, 0x5e, 0xaa, 0x2a, 0x98, 0x5a, 0xe5, 0x91, 0x8f, 0xb2, 0xfb, 0xda, 0x97, 0xe8, 0x83, 0x6f, 0x04, 0xb9, 0x5d, 0xaf, 0xe1, 0x9b, + /* (2^332)P */ 0x8b, 0xe4, 0xe1, 0x48, 0x9c, 0xc4, 0x83, 0x89, 0xdf, 0x65, 0xd3, 0x35, 0x55, 0x13, 0xf4, 0x1f, 0x36, 0x92, 0x33, 0x38, 0xcb, 0xed, 0x15, 0xe6, 0x60, 0x2d, 0x25, 0xf5, 0x36, 0x60, 0x3a, 0x37, 0x9b, 0x71, 0x9d, 0x42, 0xb0, 0x14, 0xc8, 0xba, 0x62, 0xa3, 0x49, 0xb0, 0x88, 0xc1, 0x72, 0x73, 0xdd, 0x62, 0x40, 0xa9, 0x62, 0x88, 0x99, 0xca, + /* (2^333)P */ 0x47, 0x7b, 0xea, 0xda, 0x46, 0x2f, 0x45, 0xc6, 0xe3, 0xb4, 0x4d, 0x8d, 0xac, 0x0b, 0x54, 0x22, 0x06, 0x31, 0x16, 0x66, 0x3e, 0xe4, 0x38, 0x12, 0xcd, 0xf3, 0xe7, 0x99, 0x37, 0xd9, 0x62, 0x24, 0x4b, 0x05, 0xf2, 0x58, 0xe6, 0x29, 0x4b, 0x0d, 0xf6, 0xc1, 0xba, 0xa0, 0x1e, 0x0f, 0xcb, 0x1f, 0xc6, 0x2b, 0x19, 0xfc, 0x82, 0x01, 0xd0, 0x86, + /* (2^334)P */ 0xa2, 0xae, 0x77, 0x20, 0xfb, 0xa8, 0x18, 0xb4, 0x61, 0xef, 0xe8, 0x52, 0x79, 0xbb, 0x86, 0x90, 0x5d, 0x2e, 0x76, 0xed, 0x66, 0x60, 0x5d, 0x00, 0xb5, 0xa4, 0x00, 0x40, 0x89, 0xec, 0xd1, 0xd2, 0x0d, 0x26, 0xb9, 0x30, 0xb2, 0xd2, 0xb8, 0xe8, 0x0e, 0x56, 0xf9, 0x67, 0x94, 0x2e, 0x62, 0xe1, 0x79, 0x48, 0x2b, 0xa9, 0xfa, 0xea, 0xdb, 0x28, + /* (2^335)P */ 0x35, 0xf1, 0xb0, 0x43, 0xbd, 0x27, 0xef, 0x18, 0x44, 0xa2, 0x04, 0xb4, 0x69, 0xa1, 0x97, 0x1f, 0x8c, 0x04, 0x82, 0x9b, 0x00, 0x6d, 0xf8, 0xbf, 0x7d, 0xc1, 0x5b, 0xab, 0xe8, 0xb2, 0x34, 0xbd, 0xaf, 0x7f, 0xb2, 0x0d, 0xf3, 0xed, 0xfc, 0x5b, 0x50, 0xee, 0xe7, 0x4a, 0x20, 0xd9, 0xf5, 0xc6, 0x9a, 0x97, 0x6d, 0x07, 0x2f, 0xb9, 0x31, 0x02, + /* (2^336)P */ 0xf9, 0x54, 0x4a, 0xc5, 0x61, 0x7e, 0x1d, 0xa6, 0x0e, 0x1a, 0xa8, 0xd3, 0x8c, 0x36, 0x7d, 0xf1, 0x06, 0xb1, 0xac, 0x93, 0xcd, 0xe9, 0x8f, 0x61, 0x6c, 0x5d, 0x03, 0x23, 0xdf, 0x85, 0x53, 0x39, 0x63, 0x5e, 0xeb, 0xf3, 0xd3, 0xd3, 0x75, 0x97, 0x9b, 0x62, 0x9b, 0x01, 0xb3, 0x19, 0xd8, 0x2b, 0x36, 0xf2, 0x2c, 0x2c, 0x6f, 0x36, 0xc6, 0x3c, + /* (2^337)P */ 0x05, 0x74, 0x43, 0x10, 0xb6, 0xb0, 0xf8, 0xbf, 0x02, 0x46, 0x9a, 0xee, 0xc1, 0xaf, 0xc1, 0xe5, 0x5a, 0x2e, 0xbb, 0xe1, 0xdc, 0xc6, 0xce, 0x51, 0x29, 0x50, 0xbf, 0x1b, 0xde, 0xff, 0xba, 0x4d, 0x8d, 0x8b, 0x7e, 0xe7, 0xbd, 0x5b, 0x8f, 0xbe, 0xe3, 0x75, 0x71, 0xff, 0x37, 0x05, 0x5a, 0x10, 0xeb, 0x54, 0x7e, 0x44, 0x72, 0x2c, 0xd4, 0xfc, + /* (2^338)P */ 0x03, 0x12, 0x1c, 0xb2, 0x08, 0x90, 0xa1, 0x2d, 0x50, 0xa0, 0xad, 0x7f, 0x8d, 0xa6, 0x97, 0xc1, 0xbd, 0xdc, 0xc3, 0xa7, 0xad, 0x31, 0xdf, 0xb8, 0x03, 0x84, 0xc3, 0xb9, 0x29, 0x3d, 0x92, 0x2e, 0xc3, 0x90, 0x07, 0xe8, 0xa7, 0xc7, 0xbc, 0x61, 0xe9, 0x3e, 0xa0, 0x35, 0xda, 0x1d, 0xab, 0x48, 0xfe, 0x50, 0xc9, 0x25, 0x59, 0x23, 0x69, 0x3f, + /* (2^339)P */ 0x8e, 0x91, 0xab, 0x6b, 0x91, 0x4f, 0x89, 0x76, 0x67, 0xad, 0xb2, 0x65, 0x9d, 0xad, 0x02, 0x36, 0xdc, 0xac, 0x96, 0x93, 0x97, 0x21, 0x14, 0xd0, 0xe8, 0x11, 0x60, 0x1e, 0xeb, 0x96, 0x06, 0xf2, 0x53, 0xf2, 0x6d, 0xb7, 0x93, 0x6f, 0x26, 0x91, 0x23, 0xe3, 0x34, 0x04, 0x92, 0x91, 0x37, 0x08, 0x50, 0xd6, 0x28, 0x09, 0x27, 0xa1, 0x0c, 0x00, + /* (2^340)P */ 0x1f, 0xbb, 0x21, 0x26, 0x33, 0xcb, 0xa4, 0xd1, 0xee, 0x85, 0xf9, 0xd9, 0x3c, 0x90, 0xc3, 0xd1, 0x26, 0xa2, 0x25, 0x93, 0x43, 0x61, 0xed, 0x91, 0x6e, 0x54, 0x03, 0x2e, 0x42, 0x9d, 0xf7, 0xa6, 0x02, 0x0f, 0x2f, 0x9c, 0x7a, 0x8d, 0x12, 0xc2, 0x18, 0xfc, 0x41, 0xff, 0x85, 0x26, 0x1a, 0x44, 0x55, 0x0b, 0x89, 0xab, 0x6f, 0x62, 0x33, 0x8c, + /* (2^341)P */ 0xe0, 0x3c, 0x5d, 0x70, 0x64, 0x87, 0x81, 0x35, 0xf2, 0x37, 0xa6, 0x24, 0x3e, 0xe0, 0x62, 0xd5, 0x71, 0xe7, 0x93, 0xfb, 0xac, 0xc3, 0xe7, 0xc7, 0x04, 0xe2, 0x70, 0xd3, 0x29, 0x5b, 0x21, 0xbf, 0xf4, 0x26, 0x5d, 0xf3, 0x95, 0xb4, 0x2a, 0x6a, 0x07, 0x55, 0xa6, 0x4b, 0x3b, 0x15, 0xf2, 0x25, 0x8a, 0x95, 0x3f, 0x63, 0x2f, 0x7a, 0x23, 0x96, + /* (2^342)P */ 0x0d, 0x3d, 0xd9, 0x13, 0xa7, 0xb3, 0x5e, 0x67, 0xf7, 0x02, 0x23, 0xee, 0x84, 0xff, 0x99, 0xda, 0xb9, 0x53, 0xf8, 0xf0, 0x0e, 0x39, 0x2f, 0x3c, 0x64, 0x34, 0xe3, 0x09, 0xfd, 0x2b, 0x33, 0xc7, 0xfe, 0x62, 0x2b, 0x84, 0xdf, 0x2b, 0xd2, 0x7c, 0x26, 0x01, 0x70, 0x66, 0x5b, 0x85, 0xc2, 0xbe, 0x88, 0x37, 0xf1, 0x30, 0xac, 0xb8, 0x76, 0xa3, + /* (2^343)P */ 0x6e, 0x01, 0xf0, 0x55, 0x35, 0xe4, 0xbd, 0x43, 0x62, 0x9d, 0xd6, 0x11, 0xef, 0x6f, 0xb8, 0x8c, 0xaa, 0x98, 0x87, 0xc6, 0x6d, 0xc4, 0xcc, 0x74, 0x92, 0x53, 0x4a, 0xdf, 0xe4, 0x08, 0x89, 0x17, 0xd0, 0x0f, 0xf4, 0x00, 0x60, 0x78, 0x08, 0x44, 0xb5, 0xda, 0x18, 0xed, 0x98, 0xc8, 0x61, 0x3d, 0x39, 0xdb, 0xcf, 0x1d, 0x49, 0x40, 0x65, 0x75, + /* (2^344)P */ 0x8e, 0x10, 0xae, 0x5f, 0x06, 0xd2, 0x95, 0xfd, 0x20, 0x16, 0x49, 0x5b, 0x57, 0xbe, 0x22, 0x8b, 0x43, 0xfb, 0xe6, 0xcc, 0x26, 0xa5, 0x5d, 0xd3, 0x68, 0xc5, 0xf9, 0x5a, 0x86, 0x24, 0x87, 0x27, 0x05, 0xfd, 0xe2, 0xff, 0xb3, 0xa3, 0x7b, 0x37, 0x59, 0xc5, 0x4e, 0x14, 0x94, 0xf9, 0x3b, 0xcb, 0x7c, 0xed, 0xca, 0x1d, 0xb2, 0xac, 0x05, 0x4a, + /* (2^345)P */ 0xf4, 0xd1, 0x81, 0xeb, 0x89, 0xbf, 0xfe, 0x1e, 0x41, 0x92, 0x29, 0xee, 0xe1, 0x43, 0xf5, 0x86, 0x1d, 0x2f, 0xbb, 0x1e, 0x84, 0x5d, 0x7b, 0x8d, 0xd5, 0xda, 0xee, 0x1e, 0x8a, 0xd0, 0x27, 0xf2, 0x60, 0x51, 0x59, 0x82, 0xf4, 0x84, 0x2b, 0x5b, 0x14, 0x2d, 0x81, 0x82, 0x3e, 0x2b, 0xb4, 0x6d, 0x51, 0x4f, 0xc5, 0xcb, 0xbf, 0x74, 0xe3, 0xb4, + /* (2^346)P */ 0x19, 0x2f, 0x22, 0xb3, 0x04, 0x5f, 0x81, 0xca, 0x05, 0x60, 0xb9, 0xaa, 0xee, 0x0e, 0x2f, 0x48, 0x38, 0xf9, 0x91, 0xb4, 0x66, 0xe4, 0x57, 0x28, 0x54, 0x10, 0xe9, 0x61, 0x9d, 0xd4, 0x90, 0x75, 0xb1, 0x39, 0x23, 0xb6, 0xfc, 0x82, 0xe0, 0xfa, 0xbb, 0x5c, 0x6e, 0xc3, 0x44, 0x13, 0x00, 0x83, 0x55, 0x9e, 0x8e, 0x10, 0x61, 0x81, 0x91, 0x04, + /* (2^347)P */ 0x5f, 0x2a, 0xd7, 0x81, 0xd9, 0x9c, 0xbb, 0x79, 0xbc, 0x62, 0x56, 0x98, 0x03, 0x5a, 0x18, 0x85, 0x2a, 0x9c, 0xd0, 0xfb, 0xd2, 0xb1, 0xaf, 0xef, 0x0d, 0x24, 0xc5, 0xfa, 0x39, 0xbb, 0x6b, 0xed, 0xa4, 0xdf, 0xe4, 0x87, 0xcd, 0x41, 0xd3, 0x72, 0x32, 0xc6, 0x28, 0x21, 0xb1, 0xba, 0x8b, 0xa3, 0x91, 0x79, 0x76, 0x22, 0x25, 0x10, 0x61, 0xd1, + /* (2^348)P */ 0x73, 0xb5, 0x32, 0x97, 0xdd, 0xeb, 0xdd, 0x22, 0x22, 0xf1, 0x33, 0x3c, 0x77, 0x56, 0x7d, 0x6b, 0x48, 0x2b, 0x05, 0x81, 0x03, 0x03, 0x91, 0x9a, 0xe3, 0x5e, 0xd4, 0xee, 0x3f, 0xf8, 0xbb, 0x50, 0x21, 0x32, 0x4c, 0x4a, 0x58, 0x49, 0xde, 0x0c, 0xde, 0x30, 0x82, 0x3d, 0x92, 0xf0, 0x6c, 0xcc, 0x32, 0x3e, 0xd2, 0x78, 0x8a, 0x6e, 0x2c, 0xd0, + /* (2^349)P */ 0xf0, 0xf7, 0xa1, 0x0b, 0xc1, 0x74, 0x85, 0xa8, 0xe9, 0xdd, 0x48, 0xa1, 0xc0, 0x16, 0xd8, 0x2b, 0x61, 0x08, 0xc2, 0x2b, 0x30, 0x26, 0x79, 0xce, 0x9e, 0xfd, 0x39, 0xd7, 0x81, 0xa4, 0x63, 0x8c, 0xd5, 0x74, 0xa0, 0x88, 0xfa, 0x03, 0x30, 0xe9, 0x7f, 0x2b, 0xc6, 0x02, 0xc9, 0x5e, 0xe4, 0xd5, 0x4d, 0x92, 0xd0, 0xf6, 0xf2, 0x5b, 0x79, 0x08, + /* (2^350)P */ 0x34, 0x89, 0x81, 0x43, 0xd1, 0x94, 0x2c, 0x10, 0x54, 0x9b, 0xa0, 0xe5, 0x44, 0xe8, 0xc2, 0x2f, 0x3e, 0x0e, 0x74, 0xae, 0xba, 0xe2, 0xac, 0x85, 0x6b, 0xd3, 0x5c, 0x97, 0xf7, 0x90, 0xf1, 0x12, 0xc0, 0x03, 0xc8, 0x1f, 0x37, 0x72, 0x8c, 0x9b, 0x9c, 0x17, 0x96, 0x9d, 0xc7, 0xbf, 0xa3, 0x3f, 0x44, 0x3d, 0x87, 0x81, 0xbd, 0x81, 0xa6, 0x5f, + /* (2^351)P */ 0xe4, 0xff, 0x78, 0x62, 0x82, 0x5b, 0x76, 0x58, 0xf5, 0x5b, 0xa6, 0xc4, 0x53, 0x11, 0x3b, 0x7b, 0xaa, 0x67, 0xf8, 0xea, 0x3b, 0x5d, 0x9a, 0x2e, 0x04, 0xeb, 0x4a, 0x24, 0xfb, 0x56, 0xf0, 0xa8, 0xd4, 0x14, 0xed, 0x0f, 0xfd, 0xc5, 0x26, 0x17, 0x2a, 0xf0, 0xb9, 0x13, 0x8c, 0xbd, 0x65, 0x14, 0x24, 0x95, 0x27, 0x12, 0x63, 0x2a, 0x09, 0x18, + /* (2^352)P */ 0xe1, 0x5c, 0xe7, 0xe0, 0x00, 0x6a, 0x96, 0xf2, 0x49, 0x6a, 0x39, 0xa5, 0xe0, 0x17, 0x79, 0x4a, 0x63, 0x07, 0x62, 0x09, 0x61, 0x1b, 0x6e, 0xa9, 0xb5, 0x62, 0xb7, 0xde, 0xdf, 0x80, 0x4c, 0x5a, 0x99, 0x73, 0x59, 0x9d, 0xfb, 0xb1, 0x5e, 0xbe, 0xb8, 0xb7, 0x63, 0x93, 0xe8, 0xad, 0x5e, 0x1f, 0xae, 0x59, 0x1c, 0xcd, 0xb4, 0xc2, 0xb3, 0x8a, + /* (2^353)P */ 0x78, 0x53, 0xa1, 0x4c, 0x70, 0x9c, 0x63, 0x7e, 0xb3, 0x12, 0x40, 0x5f, 0xbb, 0x23, 0xa7, 0xf7, 0x77, 0x96, 0x5b, 0x4d, 0x91, 0x10, 0x52, 0x85, 0x9e, 0xa5, 0x38, 0x0b, 0xfd, 0x25, 0x01, 0x4b, 0xfa, 0x4d, 0xd3, 0x3f, 0x78, 0x74, 0x42, 0xff, 0x62, 0x2d, 0x27, 0xdc, 0x9d, 0xd1, 0x29, 0x76, 0x2e, 0x78, 0xb3, 0x35, 0xfa, 0x15, 0xd5, 0x38, + /* (2^354)P */ 0x8b, 0xc7, 0x43, 0xce, 0xf0, 0x5e, 0xf1, 0x0d, 0x02, 0x38, 0xe8, 0x82, 0xc9, 0x25, 0xad, 0x2d, 0x27, 0xa4, 0x54, 0x18, 0xb2, 0x30, 0x73, 0xa4, 0x41, 0x08, 0xe4, 0x86, 0xe6, 0x8c, 0xe9, 0x2a, 0x34, 0xb3, 0xd6, 0x61, 0x8f, 0x66, 0x26, 0x08, 0xb6, 0x06, 0x33, 0xaa, 0x12, 0xac, 0x72, 0xec, 0x2e, 0x52, 0xa3, 0x25, 0x3e, 0xd7, 0x62, 0xe8, + /* (2^355)P */ 0xc4, 0xbb, 0x89, 0xc8, 0x40, 0xcc, 0x84, 0xec, 0x4a, 0xd9, 0xc4, 0x55, 0x78, 0x00, 0xcf, 0xd8, 0xe9, 0x24, 0x59, 0xdc, 0x5e, 0xf0, 0x66, 0xa1, 0x83, 0xae, 0x97, 0x18, 0xc5, 0x54, 0x27, 0xa2, 0x21, 0x52, 0x03, 0x31, 0x5b, 0x11, 0x67, 0xf6, 0x12, 0x00, 0x87, 0x2f, 0xff, 0x59, 0x70, 0x8f, 0x6d, 0x71, 0xab, 0xab, 0x24, 0xb8, 0xba, 0x35, + /* (2^356)P */ 0x69, 0x43, 0xa7, 0x14, 0x06, 0x96, 0xe9, 0xc2, 0xe3, 0x2b, 0x45, 0x22, 0xc0, 0xd0, 0x2f, 0x34, 0xd1, 0x01, 0x99, 0xfc, 0x99, 0x38, 0xa1, 0x25, 0x2e, 0x59, 0x6c, 0x27, 0xc9, 0xeb, 0x7b, 0xdc, 0x4e, 0x26, 0x68, 0xba, 0xfa, 0xec, 0x02, 0x05, 0x64, 0x80, 0x30, 0x20, 0x5c, 0x26, 0x7f, 0xaf, 0x95, 0x17, 0x3d, 0x5c, 0x9e, 0x96, 0x96, 0xaf, + /* (2^357)P */ 0xa6, 0xba, 0x21, 0x29, 0x32, 0xe2, 0x98, 0xde, 0x9b, 0x6d, 0x0b, 0x44, 0x91, 0xa8, 0x3e, 0xd4, 0xb8, 0x04, 0x6c, 0xf6, 0x04, 0x39, 0xbd, 0x52, 0x05, 0x15, 0x27, 0x78, 0x8e, 0x55, 0xac, 0x79, 0xc5, 0xe6, 0x00, 0x7f, 0x90, 0xa2, 0xdd, 0x07, 0x13, 0xe0, 0x24, 0x70, 0x5c, 0x0f, 0x4d, 0xa9, 0xf9, 0xae, 0xcb, 0x34, 0x10, 0x9d, 0x89, 0x9d, + /* (2^358)P */ 0x12, 0xe0, 0xb3, 0x9f, 0xc4, 0x96, 0x1d, 0xcf, 0xed, 0x99, 0x64, 0x28, 0x8d, 0xc7, 0x31, 0x82, 0xee, 0x5e, 0x75, 0x48, 0xff, 0x3a, 0xf2, 0x09, 0x34, 0x03, 0x93, 0x52, 0x19, 0xb2, 0xc5, 0x81, 0x93, 0x45, 0x5e, 0x59, 0x21, 0x2b, 0xec, 0x89, 0xba, 0x36, 0x6e, 0xf9, 0x82, 0x75, 0x7e, 0x82, 0x3f, 0xaa, 0xe2, 0xe3, 0x3b, 0x94, 0xfd, 0x98, + /* (2^359)P */ 0x7c, 0xdb, 0x75, 0x31, 0x61, 0xfb, 0x15, 0x28, 0x94, 0xd7, 0xc3, 0x5a, 0xa9, 0xa1, 0x0a, 0x66, 0x0f, 0x2b, 0x13, 0x3e, 0x42, 0xb5, 0x28, 0x3a, 0xca, 0x83, 0xf3, 0x61, 0x22, 0xf4, 0x40, 0xc5, 0xdf, 0xe7, 0x31, 0x9f, 0x7e, 0x51, 0x75, 0x06, 0x9d, 0x51, 0xc8, 0xe7, 0x9f, 0xc3, 0x71, 0x4f, 0x3d, 0x5b, 0xfb, 0xe9, 0x8e, 0x08, 0x40, 0x8e, + /* (2^360)P */ 0xf7, 0x31, 0xad, 0x50, 0x5d, 0x25, 0x93, 0x73, 0x68, 0xf6, 0x7c, 0x89, 0x5a, 0x3d, 0x9f, 0x9b, 0x05, 0x82, 0xe7, 0x70, 0x4b, 0x19, 0xaa, 0xcf, 0xff, 0xde, 0x50, 0x8f, 0x2f, 0x69, 0xd3, 0xf0, 0x99, 0x51, 0x6b, 0x9d, 0xb6, 0x56, 0x6f, 0xf8, 0x4c, 0x74, 0x8b, 0x4c, 0x91, 0xf9, 0xa9, 0xb1, 0x3e, 0x07, 0xdf, 0x0b, 0x27, 0x8a, 0xb1, 0xed, + /* (2^361)P */ 0xfb, 0x67, 0xd9, 0x48, 0xd2, 0xe4, 0x44, 0x9b, 0x43, 0x15, 0x8a, 0xeb, 0x00, 0x53, 0xad, 0x25, 0xc7, 0x7e, 0x19, 0x30, 0x87, 0xb7, 0xd5, 0x5f, 0x04, 0xf8, 0xaa, 0xdd, 0x57, 0xae, 0x34, 0x75, 0xe2, 0x84, 0x4b, 0x54, 0x60, 0x37, 0x95, 0xe4, 0xd3, 0xec, 0xac, 0xef, 0x47, 0x31, 0xa3, 0xc8, 0x31, 0x22, 0xdb, 0x26, 0xe7, 0x6a, 0xb5, 0xad, + /* (2^362)P */ 0x44, 0x09, 0x5c, 0x95, 0xe4, 0x72, 0x3c, 0x1a, 0xd1, 0xac, 0x42, 0x51, 0x99, 0x6f, 0xfa, 0x1f, 0xf2, 0x22, 0xbe, 0xff, 0x7b, 0x66, 0xf5, 0x6c, 0xb3, 0x66, 0xc7, 0x4d, 0x78, 0x31, 0x83, 0x80, 0xf5, 0x41, 0xe9, 0x7f, 0xbe, 0xf7, 0x23, 0x49, 0x6b, 0x84, 0x4e, 0x7e, 0x47, 0x07, 0x6e, 0x74, 0xdf, 0xe5, 0x9d, 0x9e, 0x56, 0x2a, 0xc0, 0xbc, + /* (2^363)P */ 0xac, 0x10, 0x80, 0x8c, 0x7c, 0xfa, 0x83, 0xdf, 0xb3, 0xd0, 0xc4, 0xbe, 0xfb, 0x9f, 0xac, 0xc9, 0xc3, 0x40, 0x95, 0x0b, 0x09, 0x23, 0xda, 0x63, 0x67, 0xcf, 0xe7, 0x9f, 0x7d, 0x7b, 0x6b, 0xe2, 0xe6, 0x6d, 0xdb, 0x87, 0x9e, 0xa6, 0xff, 0x6d, 0xab, 0xbd, 0xfb, 0x54, 0x84, 0x68, 0xcf, 0x89, 0xf1, 0xd0, 0xe2, 0x85, 0x61, 0xdc, 0x22, 0xd1, + /* (2^364)P */ 0xa8, 0x48, 0xfb, 0x8c, 0x6a, 0x63, 0x01, 0x72, 0x43, 0x43, 0xeb, 0x21, 0xa3, 0x00, 0x8a, 0xc0, 0x87, 0x51, 0x9e, 0x86, 0x75, 0x16, 0x79, 0xf9, 0x6b, 0x11, 0x80, 0x62, 0xc2, 0x9d, 0xb8, 0x8c, 0x30, 0x8e, 0x8d, 0x03, 0x52, 0x7e, 0x31, 0x59, 0x38, 0xf9, 0x25, 0xc7, 0x0f, 0xc7, 0xa8, 0x2b, 0x5c, 0x80, 0xfa, 0x90, 0xa2, 0x63, 0xca, 0xe7, + /* (2^365)P */ 0xf1, 0x5d, 0xb5, 0xd9, 0x20, 0x10, 0x7d, 0x0f, 0xc5, 0x50, 0x46, 0x07, 0xff, 0x02, 0x75, 0x2b, 0x4a, 0xf3, 0x39, 0x91, 0x72, 0xb7, 0xd5, 0xcc, 0x38, 0xb8, 0xe7, 0x36, 0x26, 0x5e, 0x11, 0x97, 0x25, 0xfb, 0x49, 0x68, 0xdc, 0xb4, 0x46, 0x87, 0x5c, 0xc2, 0x7f, 0xaa, 0x7d, 0x36, 0x23, 0xa6, 0xc6, 0x53, 0xec, 0xbc, 0x57, 0x47, 0xc1, 0x2b, + /* (2^366)P */ 0x25, 0x5d, 0x7d, 0x95, 0xda, 0x0b, 0x8f, 0x78, 0x1e, 0x19, 0x09, 0xfa, 0x67, 0xe0, 0xa0, 0x17, 0x24, 0x76, 0x6c, 0x30, 0x1f, 0x62, 0x3d, 0xbe, 0x45, 0x70, 0xcc, 0xb6, 0x1e, 0x68, 0x06, 0x25, 0x68, 0x16, 0x1a, 0x33, 0x3f, 0x90, 0xc7, 0x78, 0x2d, 0x98, 0x3c, 0x2f, 0xb9, 0x2d, 0x94, 0x0b, 0xfb, 0x49, 0x56, 0x30, 0xd7, 0xc1, 0xe6, 0x48, + /* (2^367)P */ 0x7a, 0xd1, 0xe0, 0x8e, 0x67, 0xfc, 0x0b, 0x50, 0x1f, 0x84, 0x98, 0xfa, 0xaf, 0xae, 0x2e, 0x31, 0x27, 0xcf, 0x3f, 0xf2, 0x6e, 0x8d, 0x81, 0x8f, 0xd2, 0x5f, 0xde, 0xd3, 0x5e, 0xe9, 0xe7, 0x13, 0x48, 0x83, 0x5a, 0x4e, 0x84, 0xd1, 0x58, 0xcf, 0x6b, 0x84, 0xdf, 0x13, 0x1d, 0x91, 0x85, 0xe8, 0xcb, 0x29, 0x79, 0xd2, 0xca, 0xac, 0x6a, 0x93, + /* (2^368)P */ 0x53, 0x82, 0xce, 0x61, 0x96, 0x88, 0x6f, 0xe1, 0x4a, 0x4c, 0x1e, 0x30, 0x73, 0xe8, 0x74, 0xde, 0x40, 0x2b, 0xe0, 0xc4, 0xb5, 0xd8, 0x7c, 0x15, 0xe7, 0xe1, 0xb1, 0xe0, 0xd6, 0x88, 0xb1, 0x6a, 0x57, 0x19, 0x6a, 0x22, 0x66, 0x57, 0xf6, 0x8d, 0xfd, 0xc0, 0xf2, 0xa3, 0x03, 0x56, 0xfb, 0x2e, 0x75, 0x5e, 0xc7, 0x8e, 0x22, 0x96, 0x5c, 0x06, + /* (2^369)P */ 0x98, 0x7e, 0xbf, 0x3e, 0xbf, 0x24, 0x9d, 0x15, 0xd3, 0xf6, 0xd3, 0xd2, 0xf0, 0x11, 0xf2, 0xdb, 0x36, 0x23, 0x38, 0xf7, 0x1d, 0x71, 0x20, 0xd2, 0x54, 0x7f, 0x1e, 0x24, 0x8f, 0xe2, 0xaa, 0xf7, 0x3f, 0x6b, 0x41, 0x4e, 0xdc, 0x0e, 0xec, 0xe8, 0x35, 0x0a, 0x08, 0x6d, 0x89, 0x5b, 0x32, 0x91, 0x01, 0xb6, 0xe0, 0x2c, 0xc6, 0xa1, 0xbe, 0xb4, + /* (2^370)P */ 0x29, 0xf2, 0x1e, 0x1c, 0xdc, 0x68, 0x8a, 0x43, 0x87, 0x2c, 0x48, 0xb3, 0x9e, 0xed, 0xd2, 0x82, 0x46, 0xac, 0x2f, 0xef, 0x93, 0x34, 0x37, 0xca, 0x64, 0x8d, 0xc9, 0x06, 0x90, 0xbb, 0x78, 0x0a, 0x3c, 0x4c, 0xcf, 0x35, 0x7a, 0x0f, 0xf7, 0xa7, 0xf4, 0x2f, 0x45, 0x69, 0x3f, 0xa9, 0x5d, 0xce, 0x7b, 0x8a, 0x84, 0xc3, 0xae, 0xf4, 0xda, 0xd5, + /* (2^371)P */ 0xca, 0xba, 0x95, 0x43, 0x05, 0x7b, 0x06, 0xd9, 0x5c, 0x0a, 0x18, 0x5f, 0x6a, 0x6a, 0xce, 0xc0, 0x3d, 0x95, 0x51, 0x0e, 0x1a, 0xbe, 0x85, 0x7a, 0xf2, 0x69, 0xec, 0xc0, 0x8c, 0xca, 0xa3, 0x32, 0x0a, 0x76, 0x50, 0xc6, 0x76, 0x61, 0x00, 0x89, 0xbf, 0x6e, 0x0f, 0x48, 0x90, 0x31, 0x93, 0xec, 0x34, 0x70, 0xf0, 0xc3, 0x8d, 0xf0, 0x0f, 0xb5, + /* (2^372)P */ 0xbe, 0x23, 0xe2, 0x18, 0x99, 0xf1, 0xed, 0x8a, 0xf6, 0xc9, 0xac, 0xb8, 0x1e, 0x9a, 0x3c, 0x15, 0xae, 0xd7, 0x6d, 0xb3, 0x04, 0xee, 0x5b, 0x0d, 0x1e, 0x79, 0xb7, 0xf9, 0xf9, 0x8d, 0xad, 0xf9, 0x8f, 0x5a, 0x6a, 0x7b, 0xd7, 0x9b, 0xca, 0x62, 0xfe, 0x9c, 0xc0, 0x6f, 0x6d, 0x9d, 0x76, 0xa3, 0x69, 0xb9, 0x4c, 0xa1, 0xc4, 0x0c, 0x76, 0xaa, + /* (2^373)P */ 0x1c, 0x06, 0xfe, 0x3f, 0x45, 0x70, 0xcd, 0x97, 0xa9, 0xa2, 0xb1, 0xd3, 0xf2, 0xa5, 0x0c, 0x49, 0x2c, 0x75, 0x73, 0x1f, 0xcf, 0x00, 0xaf, 0xd5, 0x2e, 0xde, 0x0d, 0x8f, 0x8f, 0x7c, 0xc4, 0x58, 0xce, 0xd4, 0xf6, 0x24, 0x19, 0x2e, 0xd8, 0xc5, 0x1d, 0x1a, 0x3f, 0xb8, 0x4f, 0xbc, 0x7d, 0xbd, 0x68, 0xe3, 0x81, 0x98, 0x1b, 0xa8, 0xc9, 0xd9, + /* (2^374)P */ 0x39, 0x95, 0x78, 0x24, 0x6c, 0x38, 0xe4, 0xe7, 0xd0, 0x8d, 0xb9, 0x38, 0x71, 0x5e, 0xc1, 0x62, 0x80, 0xcc, 0xcb, 0x8c, 0x97, 0xca, 0xf8, 0xb9, 0xd9, 0x9c, 0xce, 0x72, 0x7b, 0x70, 0xee, 0x5f, 0xea, 0xa2, 0xdf, 0xa9, 0x14, 0x10, 0xf9, 0x6e, 0x59, 0x9f, 0x9c, 0xe0, 0x0c, 0xb2, 0x07, 0x97, 0xcd, 0xd2, 0x89, 0x16, 0xfd, 0x9c, 0xa8, 0xa5, + /* (2^375)P */ 0x5a, 0x61, 0xf1, 0x59, 0x7c, 0x38, 0xda, 0xe2, 0x85, 0x99, 0x68, 0xe9, 0xc9, 0xf7, 0x32, 0x7e, 0xc4, 0xca, 0xb7, 0x11, 0x08, 0x69, 0x2b, 0x66, 0x02, 0xf7, 0x2e, 0x18, 0xc3, 0x8e, 0xe1, 0xf9, 0xc5, 0x19, 0x9a, 0x0a, 0x9c, 0x07, 0xba, 0xc7, 0x9c, 0x03, 0x34, 0x89, 0x99, 0x67, 0x0b, 0x16, 0x4b, 0x07, 0x36, 0x16, 0x36, 0x2c, 0xe2, 0xa1, + /* (2^376)P */ 0x70, 0x10, 0x91, 0x27, 0xa8, 0x24, 0x8e, 0x29, 0x04, 0x6f, 0x79, 0x1f, 0xd3, 0xa5, 0x68, 0xd3, 0x0b, 0x7d, 0x56, 0x4d, 0x14, 0x57, 0x7b, 0x2e, 0x00, 0x9f, 0x9a, 0xfd, 0x6c, 0x63, 0x18, 0x81, 0xdb, 0x9d, 0xb7, 0xd7, 0xa4, 0x1e, 0xe8, 0x40, 0xf1, 0x4c, 0xa3, 0x01, 0xd5, 0x4b, 0x75, 0xea, 0xdd, 0x97, 0xfd, 0x5b, 0xb2, 0x66, 0x6a, 0x24, + /* (2^377)P */ 0x72, 0x11, 0xfe, 0x73, 0x1b, 0xd3, 0xea, 0x7f, 0x93, 0x15, 0x15, 0x05, 0xfe, 0x40, 0xe8, 0x28, 0xd8, 0x50, 0x47, 0x66, 0xfa, 0xb7, 0xb5, 0x04, 0xba, 0x35, 0x1e, 0x32, 0x9f, 0x5f, 0x32, 0xba, 0x3d, 0xd1, 0xed, 0x9a, 0x76, 0xca, 0xa3, 0x3e, 0x77, 0xd8, 0xd8, 0x7c, 0x5f, 0x68, 0x42, 0xb5, 0x86, 0x7f, 0x3b, 0xc9, 0xc1, 0x89, 0x64, 0xda, + /* (2^378)P */ 0xd5, 0xd4, 0x17, 0x31, 0xfc, 0x6a, 0xfd, 0xb8, 0xe8, 0xe5, 0x3e, 0x39, 0x06, 0xe4, 0xd1, 0x90, 0x2a, 0xca, 0xf6, 0x54, 0x6c, 0x1b, 0x2f, 0x49, 0x97, 0xb1, 0x2a, 0x82, 0x43, 0x3d, 0x1f, 0x8b, 0xe2, 0x47, 0xc5, 0x24, 0xa8, 0xd5, 0x53, 0x29, 0x7d, 0xc6, 0x87, 0xa6, 0x25, 0x3a, 0x64, 0xdd, 0x71, 0x08, 0x9e, 0xcd, 0xe9, 0x45, 0xc7, 0xba, + /* (2^379)P */ 0x37, 0x72, 0x6d, 0x13, 0x7a, 0x8d, 0x04, 0x31, 0xe6, 0xe3, 0x9e, 0x36, 0x71, 0x3e, 0xc0, 0x1e, 0xe3, 0x71, 0xd3, 0x49, 0x4e, 0x4a, 0x36, 0x42, 0x68, 0x68, 0x61, 0xc7, 0x3c, 0xdb, 0x81, 0x49, 0xf7, 0x91, 0x4d, 0xea, 0x4c, 0x4f, 0x98, 0xc6, 0x7e, 0x60, 0x84, 0x4b, 0x6a, 0x37, 0xbb, 0x52, 0xf7, 0xce, 0x02, 0xe4, 0xad, 0xd1, 0x3c, 0xa7, + /* (2^380)P */ 0x51, 0x06, 0x2d, 0xf8, 0x08, 0xe8, 0xf1, 0x0c, 0xe5, 0xa9, 0xac, 0x29, 0x73, 0x3b, 0xed, 0x98, 0x5f, 0x55, 0x08, 0x38, 0x51, 0x44, 0x36, 0x5d, 0xea, 0xc3, 0xb8, 0x0e, 0xa0, 0x4f, 0xd2, 0x79, 0xe9, 0x98, 0xc3, 0xf5, 0x00, 0xb9, 0x26, 0x27, 0x42, 0xa8, 0x07, 0xc1, 0x12, 0x31, 0xc1, 0xc3, 0x3c, 0x3b, 0x7a, 0x72, 0x97, 0xc2, 0x70, 0x3a, + /* (2^381)P */ 0xf4, 0xb2, 0xba, 0x32, 0xbc, 0xa9, 0x2f, 0x87, 0xc7, 0x3c, 0x45, 0xcd, 0xae, 0xe2, 0x13, 0x6d, 0x3a, 0xf2, 0xf5, 0x66, 0x97, 0x29, 0xaf, 0x53, 0x9f, 0xda, 0xea, 0x14, 0xdf, 0x04, 0x98, 0x19, 0x95, 0x9e, 0x2a, 0x00, 0x5c, 0x9d, 0x1d, 0xf0, 0x39, 0x23, 0xff, 0xfc, 0xca, 0x36, 0xb7, 0xde, 0xdf, 0x37, 0x78, 0x52, 0x21, 0xfa, 0x19, 0x10, + /* (2^382)P */ 0x50, 0x20, 0x73, 0x74, 0x62, 0x21, 0xf2, 0xf7, 0x9b, 0x66, 0x85, 0x34, 0x74, 0xd4, 0x9d, 0x60, 0xd7, 0xbc, 0xc8, 0x46, 0x3b, 0xb8, 0x80, 0x42, 0x15, 0x0a, 0x6c, 0x35, 0x1a, 0x69, 0xf0, 0x1d, 0x4b, 0x29, 0x54, 0x5a, 0x9a, 0x48, 0xec, 0x9f, 0x37, 0x74, 0x91, 0xd0, 0xd1, 0x9e, 0x00, 0xc2, 0x76, 0x56, 0xd6, 0xa0, 0x15, 0x14, 0x83, 0x59, + /* (2^383)P */ 0xc2, 0xf8, 0x22, 0x20, 0x23, 0x07, 0xbd, 0x1d, 0x6f, 0x1e, 0x8c, 0x56, 0x06, 0x6a, 0x4b, 0x9f, 0xe2, 0xa9, 0x92, 0x46, 0x4b, 0x46, 0x59, 0xd7, 0xe1, 0xda, 0x14, 0x98, 0x07, 0x65, 0x7e, 0x28, 0x20, 0xf2, 0x9d, 0x4f, 0x36, 0x5c, 0x92, 0xe0, 0x9d, 0xfe, 0x3e, 0xda, 0xe4, 0x47, 0x19, 0x3c, 0x00, 0x7f, 0x22, 0xf2, 0x9e, 0x51, 0xae, 0x4d, + /* (2^384)P */ 0xbe, 0x8c, 0x1b, 0x10, 0xb6, 0xad, 0xcc, 0xcc, 0xd8, 0x5e, 0x21, 0xa6, 0xfb, 0xf1, 0xf6, 0xbd, 0x0a, 0x24, 0x67, 0xb4, 0x57, 0x7a, 0xbc, 0xe8, 0xe9, 0xff, 0xee, 0x0a, 0x1f, 0xee, 0xbd, 0xc8, 0x44, 0xed, 0x2b, 0xbb, 0x55, 0x1f, 0xdd, 0x7c, 0xb3, 0xeb, 0x3f, 0x63, 0xa1, 0x28, 0x91, 0x21, 0xab, 0x71, 0xc6, 0x4c, 0xd0, 0xe9, 0xb0, 0x21, + /* (2^385)P */ 0xad, 0xc9, 0x77, 0x2b, 0xee, 0x89, 0xa4, 0x7b, 0xfd, 0xf9, 0xf6, 0x14, 0xe4, 0xed, 0x1a, 0x16, 0x9b, 0x78, 0x41, 0x43, 0xa8, 0x83, 0x72, 0x06, 0x2e, 0x7c, 0xdf, 0xeb, 0x7e, 0xdd, 0xd7, 0x8b, 0xea, 0x9a, 0x2b, 0x03, 0xba, 0x57, 0xf3, 0xf1, 0xd9, 0xe5, 0x09, 0xc5, 0x98, 0x61, 0x1c, 0x51, 0x6d, 0x5d, 0x6e, 0xfb, 0x5e, 0x95, 0x9f, 0xb5, + /* (2^386)P */ 0x23, 0xe2, 0x1e, 0x95, 0xa3, 0x5e, 0x42, 0x10, 0xc7, 0xc3, 0x70, 0xbf, 0x4b, 0x6b, 0x83, 0x36, 0x93, 0xb7, 0x68, 0x47, 0x88, 0x3a, 0x10, 0x88, 0x48, 0x7f, 0x8c, 0xae, 0x54, 0x10, 0x02, 0xa4, 0x52, 0x8f, 0x8d, 0xf7, 0x26, 0x4f, 0x50, 0xc3, 0x6a, 0xe2, 0x4e, 0x3b, 0x4c, 0xb9, 0x8a, 0x14, 0x15, 0x6d, 0x21, 0x29, 0xb3, 0x6e, 0x4e, 0xd0, + /* (2^387)P */ 0x4c, 0x8a, 0x18, 0x3f, 0xb7, 0x20, 0xfd, 0x3e, 0x54, 0xca, 0x68, 0x3c, 0xea, 0x6f, 0xf4, 0x6b, 0xa2, 0xbd, 0x01, 0xbd, 0xfe, 0x08, 0xa8, 0xd8, 0xc2, 0x20, 0x36, 0x05, 0xcd, 0xe9, 0xf3, 0x9e, 0xfa, 0x85, 0x66, 0x8f, 0x4b, 0x1d, 0x8c, 0x64, 0x4f, 0xb8, 0xc6, 0x0f, 0x5b, 0x57, 0xd8, 0x24, 0x19, 0x5a, 0x14, 0x4b, 0x92, 0xd3, 0x96, 0xbc, + /* (2^388)P */ 0xa9, 0x3f, 0xc9, 0x6c, 0xca, 0x64, 0x1e, 0x6f, 0xdf, 0x65, 0x7f, 0x9a, 0x47, 0x6b, 0x8a, 0x60, 0x31, 0xa6, 0x06, 0xac, 0x69, 0x30, 0xe6, 0xea, 0x63, 0x42, 0x26, 0x5f, 0xdb, 0xd0, 0xf2, 0x8e, 0x34, 0x0a, 0x3a, 0xeb, 0xf3, 0x79, 0xc8, 0xb7, 0x60, 0x56, 0x5c, 0x37, 0x95, 0x71, 0xf8, 0x7f, 0x49, 0x3e, 0x9e, 0x01, 0x26, 0x1e, 0x80, 0x9f, + /* (2^389)P */ 0xf8, 0x16, 0x9a, 0xaa, 0xb0, 0x28, 0xb5, 0x8e, 0xd0, 0x60, 0xe5, 0x26, 0xa9, 0x47, 0xc4, 0x5c, 0xa9, 0x39, 0xfe, 0x0a, 0xd8, 0x07, 0x2b, 0xb3, 0xce, 0xf1, 0xea, 0x1a, 0xf4, 0x7b, 0x98, 0x31, 0x3d, 0x13, 0x29, 0x80, 0xe8, 0x0d, 0xcf, 0x56, 0x39, 0x86, 0x50, 0x0c, 0xb3, 0x18, 0xf4, 0xc5, 0xca, 0xf2, 0x6f, 0xcd, 0x8d, 0xd5, 0x02, 0xb0, + /* (2^390)P */ 0xbf, 0x39, 0x3f, 0xac, 0x6d, 0x1a, 0x6a, 0xe4, 0x42, 0x24, 0xd6, 0x41, 0x9d, 0xb9, 0x5b, 0x46, 0x73, 0x93, 0x76, 0xaa, 0xb7, 0x37, 0x36, 0xa6, 0x09, 0xe5, 0x04, 0x3b, 0x66, 0xc4, 0x29, 0x3e, 0x41, 0xc2, 0xcb, 0xe5, 0x17, 0xd7, 0x34, 0x67, 0x1d, 0x2c, 0x12, 0xec, 0x24, 0x7a, 0x40, 0xa2, 0x45, 0x41, 0xf0, 0x75, 0xed, 0x43, 0x30, 0xc9, + /* (2^391)P */ 0x80, 0xf6, 0x47, 0x5b, 0xad, 0x54, 0x02, 0xbc, 0xdd, 0xa4, 0xb2, 0xd7, 0x42, 0x95, 0xf2, 0x0d, 0x1b, 0xef, 0x37, 0xa7, 0xb4, 0x34, 0x04, 0x08, 0x71, 0x1b, 0xd3, 0xdf, 0xa1, 0xf0, 0x2b, 0xfa, 0xc0, 0x1f, 0xf3, 0x44, 0xb5, 0xc6, 0x47, 0x3d, 0x65, 0x67, 0x45, 0x4d, 0x2f, 0xde, 0x52, 0x73, 0xfc, 0x30, 0x01, 0x6b, 0xc1, 0x03, 0xd8, 0xd7, + /* (2^392)P */ 0x1c, 0x67, 0x55, 0x3e, 0x01, 0x17, 0x0f, 0x3e, 0xe5, 0x34, 0x58, 0xfc, 0xcb, 0x71, 0x24, 0x74, 0x5d, 0x36, 0x1e, 0x89, 0x2a, 0x63, 0xf8, 0xf8, 0x9f, 0x50, 0x9f, 0x32, 0x92, 0x29, 0xd8, 0x1a, 0xec, 0x76, 0x57, 0x6c, 0x67, 0x12, 0x6a, 0x6e, 0xef, 0x97, 0x1f, 0xc3, 0x77, 0x60, 0x3c, 0x22, 0xcb, 0xc7, 0x04, 0x1a, 0x89, 0x2d, 0x10, 0xa6, + /* (2^393)P */ 0x12, 0xf5, 0xa9, 0x26, 0x16, 0xd9, 0x3c, 0x65, 0x5d, 0x83, 0xab, 0xd1, 0x70, 0x6b, 0x1c, 0xdb, 0xe7, 0x86, 0x0d, 0xfb, 0xe7, 0xf8, 0x2a, 0x58, 0x6e, 0x7a, 0x66, 0x13, 0x53, 0x3a, 0x6f, 0x8d, 0x43, 0x5f, 0x14, 0x23, 0x14, 0xff, 0x3d, 0x52, 0x7f, 0xee, 0xbd, 0x7a, 0x34, 0x8b, 0x35, 0x24, 0xc3, 0x7a, 0xdb, 0xcf, 0x22, 0x74, 0x9a, 0x8f, + /* (2^394)P */ 0xdb, 0x20, 0xfc, 0xe5, 0x39, 0x4e, 0x7d, 0x78, 0xee, 0x0b, 0xbf, 0x1d, 0x80, 0xd4, 0x05, 0x4f, 0xb9, 0xd7, 0x4e, 0x94, 0x88, 0x9a, 0x50, 0x78, 0x1a, 0x70, 0x8c, 0xcc, 0x25, 0xb6, 0x61, 0x09, 0xdc, 0x7b, 0xea, 0x3f, 0x7f, 0xea, 0x2a, 0x0d, 0x47, 0x1c, 0x8e, 0xa6, 0x5b, 0xd2, 0xa3, 0x61, 0x93, 0x3c, 0x68, 0x9f, 0x8b, 0xea, 0xb0, 0xcb, + /* (2^395)P */ 0xff, 0x54, 0x02, 0x19, 0xae, 0x8b, 0x4c, 0x2c, 0x3a, 0xe0, 0xe4, 0xac, 0x87, 0xf7, 0x51, 0x45, 0x41, 0x43, 0xdc, 0xaa, 0xcd, 0xcb, 0xdc, 0x40, 0xe3, 0x44, 0x3b, 0x1d, 0x9e, 0x3d, 0xb9, 0x82, 0xcc, 0x7a, 0xc5, 0x12, 0xf8, 0x1e, 0xdd, 0xdb, 0x8d, 0xb0, 0x2a, 0xe8, 0xe6, 0x6c, 0x94, 0x3b, 0xb7, 0x2d, 0xba, 0x79, 0x3b, 0xb5, 0x86, 0xfb, + /* (2^396)P */ 0x82, 0x88, 0x13, 0xdd, 0x6c, 0xcd, 0x85, 0x2b, 0x90, 0x86, 0xb7, 0xac, 0x16, 0xa6, 0x6e, 0x6a, 0x94, 0xd8, 0x1e, 0x4e, 0x41, 0x0f, 0xce, 0x81, 0x6a, 0xa8, 0x26, 0x56, 0x43, 0x52, 0x52, 0xe6, 0xff, 0x88, 0xcf, 0x47, 0x05, 0x1d, 0xff, 0xf3, 0xa0, 0x10, 0xb2, 0x97, 0x87, 0xeb, 0x47, 0xbb, 0xfa, 0x1f, 0xe8, 0x4c, 0xce, 0xc4, 0xcd, 0x93, + /* (2^397)P */ 0xf4, 0x11, 0xf5, 0x8d, 0x89, 0x29, 0x79, 0xb3, 0x59, 0x0b, 0x29, 0x7d, 0x9c, 0x12, 0x4a, 0x65, 0x72, 0x3a, 0xf9, 0xec, 0x37, 0x18, 0x86, 0xef, 0x44, 0x07, 0x25, 0x74, 0x76, 0x53, 0xed, 0x51, 0x01, 0xc6, 0x28, 0xc5, 0xc3, 0x4a, 0x0f, 0x99, 0xec, 0xc8, 0x40, 0x5a, 0x83, 0x30, 0x79, 0xa2, 0x3e, 0x63, 0x09, 0x2d, 0x6f, 0x23, 0x54, 0x1c, + /* (2^398)P */ 0x5c, 0x6f, 0x3b, 0x1c, 0x30, 0x77, 0x7e, 0x87, 0x66, 0x83, 0x2e, 0x7e, 0x85, 0x50, 0xfd, 0xa0, 0x7a, 0xc2, 0xf5, 0x0f, 0xc1, 0x64, 0xe7, 0x0b, 0xbd, 0x59, 0xa7, 0xe7, 0x65, 0x53, 0xc3, 0xf5, 0x55, 0x5b, 0xe1, 0x82, 0x30, 0x5a, 0x61, 0xcd, 0xa0, 0x89, 0x32, 0xdb, 0x87, 0xfc, 0x21, 0x8a, 0xab, 0x6d, 0x82, 0xa8, 0x42, 0x81, 0x4f, 0xf2, + /* (2^399)P */ 0xb3, 0xeb, 0x88, 0x18, 0xf6, 0x56, 0x96, 0xbf, 0xba, 0x5d, 0x71, 0xa1, 0x5a, 0xd1, 0x04, 0x7b, 0xd5, 0x46, 0x01, 0x74, 0xfe, 0x15, 0x25, 0xb7, 0xff, 0x0c, 0x24, 0x47, 0xac, 0xfd, 0xab, 0x47, 0x32, 0xe1, 0x6a, 0x4e, 0xca, 0xcf, 0x7f, 0xdd, 0xf8, 0xd2, 0x4b, 0x3b, 0xf5, 0x17, 0xba, 0xba, 0x8b, 0xa1, 0xec, 0x28, 0x3f, 0x97, 0xab, 0x2a, + /* (2^400)P */ 0x51, 0x38, 0xc9, 0x5e, 0xc6, 0xb3, 0x64, 0xf2, 0x24, 0x4d, 0x04, 0x7d, 0xc8, 0x39, 0x0c, 0x4a, 0xc9, 0x73, 0x74, 0x1b, 0x5c, 0xb2, 0xc5, 0x41, 0x62, 0xa0, 0x4c, 0x6d, 0x8d, 0x91, 0x9a, 0x7b, 0x88, 0xab, 0x9c, 0x7e, 0x23, 0xdb, 0x6f, 0xb5, 0x72, 0xd6, 0x47, 0x40, 0xef, 0x22, 0x58, 0x62, 0x19, 0x6c, 0x38, 0xba, 0x5b, 0x00, 0x30, 0x9f, + /* (2^401)P */ 0x65, 0xbb, 0x3b, 0x9b, 0xe9, 0xae, 0xbf, 0xbe, 0xe4, 0x13, 0x95, 0xf3, 0xe3, 0x77, 0xcb, 0xe4, 0x9a, 0x22, 0xb5, 0x4a, 0x08, 0x9d, 0xb3, 0x9e, 0x27, 0xe0, 0x15, 0x6c, 0x9f, 0x7e, 0x9a, 0x5e, 0x15, 0x45, 0x25, 0x8d, 0x01, 0x0a, 0xd2, 0x2b, 0xbd, 0x48, 0x06, 0x0d, 0x18, 0x97, 0x4b, 0xdc, 0xbc, 0xf0, 0xcd, 0xb2, 0x52, 0x3c, 0xac, 0xf5, + /* (2^402)P */ 0x3e, 0xed, 0x47, 0x6b, 0x5c, 0xf6, 0x76, 0xd0, 0xe9, 0x15, 0xa3, 0xcb, 0x36, 0x00, 0x21, 0xa3, 0x79, 0x20, 0xa5, 0x3e, 0x88, 0x03, 0xcb, 0x7e, 0x63, 0xbb, 0xed, 0xa9, 0x13, 0x35, 0x16, 0xaf, 0x2e, 0xb4, 0x70, 0x14, 0x93, 0xfb, 0xc4, 0x9b, 0xd8, 0xb1, 0xbe, 0x43, 0xd1, 0x85, 0xb8, 0x97, 0xef, 0xea, 0x88, 0xa1, 0x25, 0x52, 0x62, 0x75, + /* (2^403)P */ 0x8e, 0x4f, 0xaa, 0x23, 0x62, 0x7e, 0x2b, 0x37, 0x89, 0x00, 0x11, 0x30, 0xc5, 0x33, 0x4a, 0x89, 0x8a, 0xe2, 0xfc, 0x5c, 0x6a, 0x75, 0xe5, 0xf7, 0x02, 0x4a, 0x9b, 0xf7, 0xb5, 0x6a, 0x85, 0x31, 0xd3, 0x5a, 0xcf, 0xc3, 0xf8, 0xde, 0x2f, 0xcf, 0xb5, 0x24, 0xf4, 0xe3, 0xa1, 0xad, 0x42, 0xae, 0x09, 0xb9, 0x2e, 0x04, 0x2d, 0x01, 0x22, 0x3f, + /* (2^404)P */ 0x41, 0x16, 0xfb, 0x7d, 0x50, 0xfd, 0xb5, 0xba, 0x88, 0x24, 0xba, 0xfd, 0x3d, 0xb2, 0x90, 0x15, 0xb7, 0xfa, 0xa2, 0xe1, 0x4c, 0x7d, 0xb9, 0xc6, 0xff, 0x81, 0x57, 0xb6, 0xc2, 0x9e, 0xcb, 0xc4, 0x35, 0xbd, 0x01, 0xb7, 0xaa, 0xce, 0xd0, 0xe9, 0xb5, 0xd6, 0x72, 0xbf, 0xd2, 0xee, 0xc7, 0xac, 0x94, 0xff, 0x29, 0x57, 0x02, 0x49, 0x09, 0xad, + /* (2^405)P */ 0x27, 0xa5, 0x78, 0x1b, 0xbf, 0x6b, 0xaf, 0x0b, 0x8c, 0xd9, 0xa8, 0x37, 0xb0, 0x67, 0x18, 0xb6, 0xc7, 0x05, 0x8a, 0x67, 0x03, 0x30, 0x62, 0x6e, 0x56, 0x82, 0xa9, 0x54, 0x3e, 0x0c, 0x4e, 0x07, 0xe1, 0x5a, 0x38, 0xed, 0xfa, 0xc8, 0x55, 0x6b, 0x08, 0xa3, 0x6b, 0x64, 0x2a, 0x15, 0xd6, 0x39, 0x6f, 0x47, 0x99, 0x42, 0x3f, 0x33, 0x84, 0x8f, + /* (2^406)P */ 0xbc, 0x45, 0x29, 0x81, 0x0e, 0xa4, 0xc5, 0x72, 0x3a, 0x10, 0xe1, 0xc4, 0x1e, 0xda, 0xc3, 0xfe, 0xb0, 0xce, 0xd2, 0x13, 0x34, 0x67, 0x21, 0xc6, 0x7e, 0xf9, 0x8c, 0xff, 0x39, 0x50, 0xae, 0x92, 0x60, 0x35, 0x2f, 0x8b, 0x6e, 0xc9, 0xc1, 0x27, 0x3a, 0x94, 0x66, 0x3e, 0x26, 0x84, 0x93, 0xc8, 0x6c, 0xcf, 0xd2, 0x03, 0xa1, 0x10, 0xcf, 0xb7, + /* (2^407)P */ 0x64, 0xda, 0x19, 0xf6, 0xc5, 0x73, 0x17, 0x44, 0x88, 0x81, 0x07, 0x0d, 0x34, 0xb2, 0x75, 0xf9, 0xd9, 0xe2, 0xe0, 0x8b, 0x71, 0xcf, 0x72, 0x34, 0x83, 0xb4, 0xce, 0xfc, 0xd7, 0x29, 0x09, 0x5a, 0x98, 0xbf, 0x14, 0xac, 0x77, 0x55, 0x38, 0x47, 0x5b, 0x0f, 0x40, 0x24, 0xe5, 0xa5, 0xa6, 0xac, 0x2d, 0xa6, 0xff, 0x9c, 0x73, 0xfe, 0x5c, 0x7e, + /* (2^408)P */ 0x1e, 0x33, 0xcc, 0x68, 0xb2, 0xbc, 0x8c, 0x93, 0xaf, 0xcc, 0x38, 0xf8, 0xd9, 0x16, 0x72, 0x50, 0xac, 0xd9, 0xb5, 0x0b, 0x9a, 0xbe, 0x46, 0x7a, 0xf1, 0xee, 0xf1, 0xad, 0xec, 0x5b, 0x59, 0x27, 0x9c, 0x05, 0xa3, 0x87, 0xe0, 0x37, 0x2c, 0x83, 0xce, 0xb3, 0x65, 0x09, 0x8e, 0xc3, 0x9c, 0xbf, 0x6a, 0xa2, 0x00, 0xcc, 0x12, 0x36, 0xc5, 0x95, + /* (2^409)P */ 0x36, 0x11, 0x02, 0x14, 0x9c, 0x3c, 0xeb, 0x2f, 0x23, 0x5b, 0x6b, 0x2b, 0x08, 0x54, 0x53, 0xac, 0xb2, 0xa3, 0xe0, 0x26, 0x62, 0x3c, 0xe4, 0xe1, 0x81, 0xee, 0x13, 0x3e, 0xa4, 0x97, 0xef, 0xf9, 0x92, 0x27, 0x01, 0xce, 0x54, 0x8b, 0x3e, 0x31, 0xbe, 0xa7, 0x88, 0xcf, 0x47, 0x99, 0x3c, 0x10, 0x6f, 0x60, 0xb3, 0x06, 0x4e, 0xee, 0x1b, 0xf0, + /* (2^410)P */ 0x59, 0x49, 0x66, 0xcf, 0x22, 0xe6, 0xf6, 0x73, 0xfe, 0xa3, 0x1c, 0x09, 0xfa, 0x5f, 0x65, 0xa8, 0xf0, 0x82, 0xc2, 0xef, 0x16, 0x63, 0x6e, 0x79, 0x69, 0x51, 0x39, 0x07, 0x65, 0xc4, 0x81, 0xec, 0x73, 0x0f, 0x15, 0x93, 0xe1, 0x30, 0x33, 0xe9, 0x37, 0x86, 0x42, 0x4c, 0x1f, 0x9b, 0xad, 0xee, 0x3f, 0xf1, 0x2a, 0x8e, 0x6a, 0xa3, 0xc8, 0x35, + /* (2^411)P */ 0x1e, 0x49, 0xf1, 0xdd, 0xd2, 0x9c, 0x8e, 0x78, 0xb2, 0x06, 0xe4, 0x6a, 0xab, 0x3a, 0xdc, 0xcd, 0xf4, 0xeb, 0xe1, 0xe7, 0x2f, 0xaa, 0xeb, 0x40, 0x31, 0x9f, 0xb9, 0xab, 0x13, 0xa9, 0x78, 0xbf, 0x38, 0x89, 0x0e, 0x85, 0x14, 0x8b, 0x46, 0x76, 0x14, 0xda, 0xcf, 0x33, 0xc8, 0x79, 0xd3, 0xd5, 0xa3, 0x6a, 0x69, 0x45, 0x70, 0x34, 0xc3, 0xe9, + /* (2^412)P */ 0x5e, 0xe7, 0x78, 0xe9, 0x24, 0xcc, 0xe9, 0xf4, 0xc8, 0x6b, 0xe0, 0xfb, 0x3a, 0xbe, 0xcc, 0x42, 0x4a, 0x00, 0x22, 0xf8, 0xe6, 0x32, 0xbe, 0x6d, 0x18, 0x55, 0x60, 0xe9, 0x72, 0x69, 0x50, 0x56, 0xca, 0x04, 0x18, 0x38, 0xa1, 0xee, 0xd8, 0x38, 0x3c, 0xa7, 0x70, 0xe2, 0xb9, 0x4c, 0xa0, 0xc8, 0x89, 0x72, 0xcf, 0x49, 0x7f, 0xdf, 0xbc, 0x67, + /* (2^413)P */ 0x1d, 0x17, 0xcb, 0x0b, 0xbd, 0xb2, 0x36, 0xe3, 0xa8, 0x99, 0x31, 0xb6, 0x26, 0x9c, 0x0c, 0x74, 0xaf, 0x4d, 0x24, 0x61, 0xcf, 0x31, 0x7b, 0xed, 0xdd, 0xc3, 0xf6, 0x32, 0x70, 0xfe, 0x17, 0xf6, 0x51, 0x37, 0x65, 0xce, 0x5d, 0xaf, 0xa5, 0x2f, 0x2a, 0xfe, 0x00, 0x71, 0x7c, 0x50, 0xbe, 0x21, 0xc7, 0xed, 0xc6, 0xfc, 0x67, 0xcf, 0x9c, 0xdd, + /* (2^414)P */ 0x26, 0x3e, 0xf8, 0xbb, 0xd0, 0xb1, 0x01, 0xd8, 0xeb, 0x0b, 0x62, 0x87, 0x35, 0x4c, 0xde, 0xca, 0x99, 0x9c, 0x6d, 0xf7, 0xb6, 0xf0, 0x57, 0x0a, 0x52, 0x29, 0x6a, 0x3f, 0x26, 0x31, 0x04, 0x07, 0x2a, 0xc9, 0xfa, 0x9b, 0x0e, 0x62, 0x8e, 0x72, 0xf2, 0xad, 0xce, 0xb6, 0x35, 0x7a, 0xc1, 0xae, 0x35, 0xc7, 0xa3, 0x14, 0xcf, 0x0c, 0x28, 0xb7, + /* (2^415)P */ 0xa6, 0xf1, 0x32, 0x3a, 0x20, 0xd2, 0x24, 0x97, 0xcf, 0x5d, 0x37, 0x99, 0xaf, 0x33, 0x7a, 0x5b, 0x7a, 0xcc, 0x4e, 0x41, 0x38, 0xb1, 0x4e, 0xad, 0xc9, 0xd9, 0x71, 0x7e, 0xb2, 0xf5, 0xd5, 0x01, 0x6c, 0x4d, 0xfd, 0xa1, 0xda, 0x03, 0x38, 0x9b, 0x3d, 0x92, 0x92, 0xf2, 0xca, 0xbf, 0x1f, 0x24, 0xa4, 0xbb, 0x30, 0x6a, 0x74, 0x56, 0xc8, 0xce, + /* (2^416)P */ 0x27, 0xf4, 0xed, 0xc9, 0xc3, 0xb1, 0x79, 0x85, 0xbe, 0xf6, 0xeb, 0xf3, 0x55, 0xc7, 0xaa, 0xa6, 0xe9, 0x07, 0x5d, 0xf4, 0xeb, 0xa6, 0x81, 0xe3, 0x0e, 0xcf, 0xa3, 0xc1, 0xef, 0xe7, 0x34, 0xb2, 0x03, 0x73, 0x8a, 0x91, 0xf1, 0xad, 0x05, 0xc7, 0x0b, 0x43, 0x99, 0x12, 0x31, 0xc8, 0xc7, 0xc5, 0xa4, 0x3d, 0xcd, 0xe5, 0x4e, 0x6d, 0x24, 0xdd, + /* (2^417)P */ 0x61, 0x54, 0xd0, 0x95, 0x2c, 0x45, 0x75, 0xac, 0xb5, 0x1a, 0x9d, 0x11, 0xeb, 0xed, 0x6b, 0x57, 0xa3, 0xe6, 0xcd, 0x77, 0xd4, 0x83, 0x8e, 0x39, 0xf1, 0x0f, 0x98, 0xcb, 0x40, 0x02, 0x6e, 0x10, 0x82, 0x9e, 0xb4, 0x93, 0x76, 0xd7, 0x97, 0xa3, 0x53, 0x12, 0x86, 0xc6, 0x15, 0x78, 0x73, 0x93, 0xe7, 0x7f, 0xcf, 0x1f, 0xbf, 0xcd, 0xd2, 0x7a, + /* (2^418)P */ 0xc2, 0x21, 0xdc, 0xd5, 0x69, 0xff, 0xca, 0x49, 0x3a, 0xe1, 0xc3, 0x69, 0x41, 0x56, 0xc1, 0x76, 0x63, 0x24, 0xbd, 0x64, 0x1b, 0x3d, 0x92, 0xf9, 0x13, 0x04, 0x25, 0xeb, 0x27, 0xa6, 0xef, 0x39, 0x3a, 0x80, 0xe0, 0xf8, 0x27, 0xee, 0xc9, 0x49, 0x77, 0xef, 0x3f, 0x29, 0x3d, 0x5e, 0xe6, 0x66, 0x83, 0xd1, 0xf6, 0xfe, 0x9d, 0xbc, 0xf1, 0x96, + /* (2^419)P */ 0x6b, 0xc6, 0x99, 0x26, 0x3c, 0xf3, 0x63, 0xf9, 0xc7, 0x29, 0x8c, 0x52, 0x62, 0x2d, 0xdc, 0x8a, 0x66, 0xce, 0x2c, 0xa7, 0xe4, 0xf0, 0xd7, 0x37, 0x17, 0x1e, 0xe4, 0xa3, 0x53, 0x7b, 0x29, 0x8e, 0x60, 0x99, 0xf9, 0x0c, 0x7c, 0x6f, 0xa2, 0xcc, 0x9f, 0x80, 0xdd, 0x5e, 0x46, 0xaa, 0x0d, 0x6c, 0xc9, 0x6c, 0xf7, 0x78, 0x5b, 0x38, 0xe3, 0x24, + /* (2^420)P */ 0x4b, 0x75, 0x6a, 0x2f, 0x08, 0xe1, 0x72, 0x76, 0xab, 0x82, 0x96, 0xdf, 0x3b, 0x1f, 0x9b, 0xd8, 0xed, 0xdb, 0xcd, 0x15, 0x09, 0x5a, 0x1e, 0xb7, 0xc5, 0x26, 0x72, 0x07, 0x0c, 0x50, 0xcd, 0x3b, 0x4d, 0x3f, 0xa2, 0x67, 0xc2, 0x02, 0x61, 0x2e, 0x68, 0xe9, 0x6f, 0xf0, 0x21, 0x2a, 0xa7, 0x3b, 0x88, 0x04, 0x11, 0x64, 0x49, 0x0d, 0xb4, 0x46, + /* (2^421)P */ 0x63, 0x85, 0xf3, 0xc5, 0x2b, 0x5a, 0x9f, 0xf0, 0x17, 0xcb, 0x45, 0x0a, 0xf3, 0x6e, 0x7e, 0xb0, 0x7c, 0xbc, 0xf0, 0x4f, 0x3a, 0xb0, 0xbc, 0x36, 0x36, 0x52, 0x51, 0xcb, 0xfe, 0x9a, 0xcb, 0xe8, 0x7e, 0x4b, 0x06, 0x7f, 0xaa, 0x35, 0xc8, 0x0e, 0x7a, 0x30, 0xa3, 0xb1, 0x09, 0xbb, 0x86, 0x4c, 0xbe, 0xb8, 0xbd, 0xe0, 0x32, 0xa5, 0xd4, 0xf7, + /* (2^422)P */ 0x7d, 0x50, 0x37, 0x68, 0x4e, 0x22, 0xb2, 0x2c, 0xd5, 0x0f, 0x2b, 0x6d, 0xb1, 0x51, 0xf2, 0x82, 0xe9, 0x98, 0x7c, 0x50, 0xc7, 0x96, 0x7e, 0x0e, 0xdc, 0xb1, 0x0e, 0xb2, 0x63, 0x8c, 0x30, 0x37, 0x72, 0x21, 0x9c, 0x61, 0xc2, 0xa7, 0x33, 0xd9, 0xb2, 0x63, 0x93, 0xd1, 0x6b, 0x6a, 0x73, 0xa5, 0x58, 0x80, 0xff, 0x04, 0xc7, 0x83, 0x21, 0x29, + /* (2^423)P */ 0x29, 0x04, 0xbc, 0x99, 0x39, 0xc9, 0x58, 0xc9, 0x6b, 0x17, 0xe8, 0x90, 0xb3, 0xe6, 0xa9, 0xb6, 0x28, 0x9b, 0xcb, 0x3b, 0x28, 0x90, 0x68, 0x71, 0xff, 0xcf, 0x08, 0x78, 0xc9, 0x8d, 0xa8, 0x4e, 0x43, 0xd1, 0x1c, 0x9e, 0xa4, 0xe3, 0xdf, 0xbf, 0x92, 0xf4, 0xf9, 0x41, 0xba, 0x4d, 0x1c, 0xf9, 0xdd, 0x74, 0x76, 0x1c, 0x6e, 0x3e, 0x94, 0x87, + /* (2^424)P */ 0xe4, 0xda, 0xc5, 0xd7, 0xfb, 0x87, 0xc5, 0x4d, 0x6b, 0x19, 0xaa, 0xb9, 0xbc, 0x8c, 0xf2, 0x8a, 0xd8, 0x5d, 0xdb, 0x4d, 0xef, 0xa6, 0xf2, 0x65, 0xf1, 0x22, 0x9c, 0xf1, 0x46, 0x30, 0x71, 0x7c, 0xe4, 0x53, 0x8e, 0x55, 0x2e, 0x9c, 0x9a, 0x31, 0x2a, 0xc3, 0xab, 0x0f, 0xde, 0xe4, 0xbe, 0xd8, 0x96, 0x50, 0x6e, 0x0c, 0x54, 0x49, 0xe6, 0xec, + /* (2^425)P */ 0x3c, 0x1d, 0x5a, 0xa5, 0xda, 0xad, 0xdd, 0xc2, 0xae, 0xac, 0x6f, 0x86, 0x75, 0x31, 0x91, 0x64, 0x45, 0x9d, 0xa4, 0xf0, 0x81, 0xf1, 0x0e, 0xba, 0x74, 0xaf, 0x7b, 0xcd, 0x6f, 0xfe, 0xac, 0x4e, 0xdb, 0x4e, 0x45, 0x35, 0x36, 0xc5, 0xc0, 0x6c, 0x3d, 0x64, 0xf4, 0xd8, 0x07, 0x62, 0xd1, 0xec, 0xf3, 0xfc, 0x93, 0xc9, 0x28, 0x0c, 0x2c, 0xf3, + /* (2^426)P */ 0x0c, 0x69, 0x2b, 0x5c, 0xb6, 0x41, 0x69, 0xf1, 0xa4, 0xf1, 0x5b, 0x75, 0x4c, 0x42, 0x8b, 0x47, 0xeb, 0x69, 0xfb, 0xa8, 0xe6, 0xf9, 0x7b, 0x48, 0x50, 0xaf, 0xd3, 0xda, 0xb2, 0x35, 0x10, 0xb5, 0x5b, 0x40, 0x90, 0x39, 0xc9, 0x07, 0x06, 0x73, 0x26, 0x20, 0x95, 0x01, 0xa4, 0x2d, 0xf0, 0xe7, 0x2e, 0x00, 0x7d, 0x41, 0x09, 0x68, 0x13, 0xc4, + /* (2^427)P */ 0xbe, 0x38, 0x78, 0xcf, 0xc9, 0x4f, 0x36, 0xca, 0x09, 0x61, 0x31, 0x3c, 0x57, 0x2e, 0xec, 0x17, 0xa4, 0x7d, 0x19, 0x2b, 0x9b, 0x5b, 0xbe, 0x8f, 0xd6, 0xc5, 0x2f, 0x86, 0xf2, 0x64, 0x76, 0x17, 0x00, 0x6e, 0x1a, 0x8c, 0x67, 0x1b, 0x68, 0xeb, 0x15, 0xa2, 0xd6, 0x09, 0x91, 0xdd, 0x23, 0x0d, 0x98, 0xb2, 0x10, 0x19, 0x55, 0x9b, 0x63, 0xf2, + /* (2^428)P */ 0x51, 0x1f, 0x93, 0xea, 0x2a, 0x3a, 0xfa, 0x41, 0xc0, 0x57, 0xfb, 0x74, 0xa6, 0x65, 0x09, 0x56, 0x14, 0xb6, 0x12, 0xaa, 0xb3, 0x1a, 0x8d, 0x3b, 0x76, 0x91, 0x7a, 0x23, 0x56, 0x9c, 0x6a, 0xc0, 0xe0, 0x3c, 0x3f, 0xb5, 0x1a, 0xf4, 0x57, 0x71, 0x93, 0x2b, 0xb1, 0xa7, 0x70, 0x57, 0x22, 0x80, 0xf5, 0xb8, 0x07, 0x77, 0x87, 0x0c, 0xbe, 0x83, + /* (2^429)P */ 0x07, 0x9b, 0x0e, 0x52, 0x38, 0x63, 0x13, 0x86, 0x6a, 0xa6, 0xb4, 0xd2, 0x60, 0x68, 0x9a, 0x99, 0x82, 0x0a, 0x04, 0x5f, 0x89, 0x7a, 0x1a, 0x2a, 0xae, 0x2d, 0x35, 0x0c, 0x1e, 0xad, 0xef, 0x4f, 0x9a, 0xfc, 0xc8, 0xd9, 0xcf, 0x9d, 0x48, 0x71, 0xa5, 0x55, 0x79, 0x73, 0x39, 0x1b, 0xd8, 0x73, 0xec, 0x9b, 0x03, 0x16, 0xd8, 0x82, 0xf7, 0x67, + /* (2^430)P */ 0x52, 0x67, 0x42, 0x21, 0xc9, 0x40, 0x78, 0x82, 0x2b, 0x95, 0x2d, 0x20, 0x92, 0xd1, 0xe2, 0x61, 0x25, 0xb0, 0xc6, 0x9c, 0x20, 0x59, 0x8e, 0x28, 0x6f, 0xf3, 0xfd, 0xd3, 0xc1, 0x32, 0x43, 0xc9, 0xa6, 0x08, 0x7a, 0x77, 0x9c, 0x4c, 0x8c, 0x33, 0x71, 0x13, 0x69, 0xe3, 0x52, 0x30, 0xa7, 0xf5, 0x07, 0x67, 0xac, 0xad, 0x46, 0x8a, 0x26, 0x25, + /* (2^431)P */ 0xda, 0x86, 0xc4, 0xa2, 0x71, 0x56, 0xdd, 0xd2, 0x48, 0xd3, 0xde, 0x42, 0x63, 0x01, 0xa7, 0x2c, 0x92, 0x83, 0x6f, 0x2e, 0xd8, 0x1e, 0x3f, 0xc1, 0xc5, 0x42, 0x4e, 0x34, 0x19, 0x54, 0x6e, 0x35, 0x2c, 0x51, 0x2e, 0xfd, 0x0f, 0x9a, 0x45, 0x66, 0x5e, 0x4a, 0x83, 0xda, 0x0a, 0x53, 0x68, 0x63, 0xfa, 0xce, 0x47, 0x20, 0xd3, 0x34, 0xba, 0x0d, + /* (2^432)P */ 0xd0, 0xe9, 0x64, 0xa4, 0x61, 0x4b, 0x86, 0xe5, 0x93, 0x6f, 0xda, 0x0e, 0x31, 0x7e, 0x6e, 0xe3, 0xc6, 0x73, 0xd8, 0xa3, 0x08, 0x57, 0x52, 0xcd, 0x51, 0x63, 0x1d, 0x9f, 0x93, 0x00, 0x62, 0x91, 0x26, 0x21, 0xa7, 0xdd, 0x25, 0x0f, 0x09, 0x0d, 0x35, 0xad, 0xcf, 0x11, 0x8e, 0x6e, 0xe8, 0xae, 0x1d, 0x95, 0xcb, 0x88, 0xf8, 0x70, 0x7b, 0x91, + /* (2^433)P */ 0x0c, 0x19, 0x5c, 0xd9, 0x8d, 0xda, 0x9d, 0x2c, 0x90, 0x54, 0x65, 0xe8, 0xb6, 0x35, 0x50, 0xae, 0xea, 0xae, 0x43, 0xb7, 0x1e, 0x99, 0x8b, 0x4c, 0x36, 0x4e, 0xe4, 0x1e, 0xc4, 0x64, 0x43, 0xb6, 0xeb, 0xd4, 0xe9, 0x60, 0x22, 0xee, 0xcf, 0xb8, 0x52, 0x1b, 0xf0, 0x04, 0xce, 0xbc, 0x2b, 0xf0, 0xbe, 0xcd, 0x44, 0x74, 0x1e, 0x1f, 0x63, 0xf9, + /* (2^434)P */ 0xe1, 0x3f, 0x95, 0x94, 0xb2, 0xb6, 0x31, 0xa9, 0x1b, 0xdb, 0xfd, 0x0e, 0xdb, 0xdd, 0x1a, 0x22, 0x78, 0x60, 0x9f, 0x75, 0x5f, 0x93, 0x06, 0x0c, 0xd8, 0xbb, 0xa2, 0x85, 0x2b, 0x5e, 0xc0, 0x9b, 0xa8, 0x5d, 0xaf, 0x93, 0x91, 0x91, 0x47, 0x41, 0x1a, 0xfc, 0xb4, 0x51, 0x85, 0xad, 0x69, 0x4d, 0x73, 0x69, 0xd5, 0x4e, 0x82, 0xfb, 0x66, 0xcb, + /* (2^435)P */ 0x7c, 0xbe, 0xc7, 0x51, 0xc4, 0x74, 0x6e, 0xab, 0xfd, 0x41, 0x4f, 0x76, 0x4f, 0x24, 0x03, 0xd6, 0x2a, 0xb7, 0x42, 0xb4, 0xda, 0x41, 0x2c, 0x82, 0x48, 0x4c, 0x7f, 0x6f, 0x25, 0x5d, 0x36, 0xd4, 0x69, 0xf5, 0xef, 0x02, 0x81, 0xea, 0x6f, 0x19, 0x69, 0xe8, 0x6f, 0x5b, 0x2f, 0x14, 0x0e, 0x6f, 0x89, 0xb4, 0xb5, 0xd8, 0xae, 0xef, 0x7b, 0x87, + /* (2^436)P */ 0xe9, 0x91, 0xa0, 0x8b, 0xc9, 0xe0, 0x01, 0x90, 0x37, 0xc1, 0x6f, 0xdc, 0x5e, 0xf7, 0xbf, 0x43, 0x00, 0xaa, 0x10, 0x76, 0x76, 0x18, 0x6e, 0x19, 0x1e, 0x94, 0x50, 0x11, 0x0a, 0xd1, 0xe2, 0xdb, 0x08, 0x21, 0xa0, 0x1f, 0xdb, 0x54, 0xfe, 0xea, 0x6e, 0xa3, 0x68, 0x56, 0x87, 0x0b, 0x22, 0x4e, 0x66, 0xf3, 0x82, 0x82, 0x00, 0xcd, 0xd4, 0x12, + /* (2^437)P */ 0x25, 0x8e, 0x24, 0x77, 0x64, 0x4c, 0xe0, 0xf8, 0x18, 0xc0, 0xdc, 0xc7, 0x1b, 0x35, 0x65, 0xde, 0x67, 0x41, 0x5e, 0x6f, 0x90, 0x82, 0xa7, 0x2e, 0x6d, 0xf1, 0x47, 0xb4, 0x92, 0x9c, 0xfd, 0x6a, 0x9a, 0x41, 0x36, 0x20, 0x24, 0x58, 0xc3, 0x59, 0x07, 0x9a, 0xfa, 0x9f, 0x03, 0xcb, 0xc7, 0x69, 0x37, 0x60, 0xe1, 0xab, 0x13, 0x72, 0xee, 0xa2, + /* (2^438)P */ 0x74, 0x78, 0xfb, 0x13, 0xcb, 0x8e, 0x37, 0x1a, 0xf6, 0x1d, 0x17, 0x83, 0x06, 0xd4, 0x27, 0x06, 0x21, 0xe8, 0xda, 0xdf, 0x6b, 0xf3, 0x83, 0x6b, 0x34, 0x8a, 0x8c, 0xee, 0x01, 0x05, 0x5b, 0xed, 0xd3, 0x1b, 0xc9, 0x64, 0x83, 0xc9, 0x49, 0xc2, 0x57, 0x1b, 0xdd, 0xcf, 0xf1, 0x9d, 0x63, 0xee, 0x1c, 0x0d, 0xa0, 0x0a, 0x73, 0x1f, 0x5b, 0x32, + /* (2^439)P */ 0x29, 0xce, 0x1e, 0xc0, 0x6a, 0xf5, 0xeb, 0x99, 0x5a, 0x39, 0x23, 0xe9, 0xdd, 0xac, 0x44, 0x88, 0xbc, 0x80, 0x22, 0xde, 0x2c, 0xcb, 0xa8, 0x3b, 0xff, 0xf7, 0x6f, 0xc7, 0x71, 0x72, 0xa8, 0xa3, 0xf6, 0x4d, 0xc6, 0x75, 0xda, 0x80, 0xdc, 0xd9, 0x30, 0xd9, 0x07, 0x50, 0x5a, 0x54, 0x7d, 0xda, 0x39, 0x6f, 0x78, 0x94, 0xbf, 0x25, 0x98, 0xdc, + /* (2^440)P */ 0x01, 0x26, 0x62, 0x44, 0xfb, 0x0f, 0x11, 0x72, 0x73, 0x0a, 0x16, 0xc7, 0x16, 0x9c, 0x9b, 0x37, 0xd8, 0xff, 0x4f, 0xfe, 0x57, 0xdb, 0xae, 0xef, 0x7d, 0x94, 0x30, 0x04, 0x70, 0x83, 0xde, 0x3c, 0xd4, 0xb5, 0x70, 0xda, 0xa7, 0x55, 0xc8, 0x19, 0xe1, 0x36, 0x15, 0x61, 0xe7, 0x3b, 0x7d, 0x85, 0xbb, 0xf3, 0x42, 0x5a, 0x94, 0xf4, 0x53, 0x2a, + /* (2^441)P */ 0x14, 0x60, 0xa6, 0x0b, 0x83, 0xe1, 0x23, 0x77, 0xc0, 0xce, 0x50, 0xed, 0x35, 0x8d, 0x98, 0x99, 0x7d, 0xf5, 0x8d, 0xce, 0x94, 0x25, 0xc8, 0x0f, 0x6d, 0xfa, 0x4a, 0xa4, 0x3a, 0x1f, 0x66, 0xfb, 0x5a, 0x64, 0xaf, 0x8b, 0x54, 0x54, 0x44, 0x3f, 0x5b, 0x88, 0x61, 0xe4, 0x48, 0x45, 0x26, 0x20, 0xbe, 0x0d, 0x06, 0xbb, 0x65, 0x59, 0xe1, 0x36, + /* (2^442)P */ 0xb7, 0x98, 0xce, 0xa3, 0xe3, 0xee, 0x11, 0x1b, 0x9e, 0x24, 0x59, 0x75, 0x31, 0x37, 0x44, 0x6f, 0x6b, 0x9e, 0xec, 0xb7, 0x44, 0x01, 0x7e, 0xab, 0xbb, 0x69, 0x5d, 0x11, 0xb0, 0x30, 0x64, 0xea, 0x91, 0xb4, 0x7a, 0x8c, 0x02, 0x4c, 0xb9, 0x10, 0xa7, 0xc7, 0x79, 0xe6, 0xdc, 0x77, 0xe3, 0xc8, 0xef, 0x3e, 0xf9, 0x38, 0x81, 0xce, 0x9a, 0xb2, + /* (2^443)P */ 0x91, 0x12, 0x76, 0xd0, 0x10, 0xb4, 0xaf, 0xe1, 0x89, 0x3a, 0x93, 0x6b, 0x5c, 0x19, 0x5f, 0x24, 0xed, 0x04, 0x92, 0xc7, 0xf0, 0x00, 0x08, 0xc1, 0x92, 0xff, 0x90, 0xdb, 0xb2, 0xbf, 0xdf, 0x49, 0xcd, 0xbd, 0x5c, 0x6e, 0xbf, 0x16, 0xbb, 0x61, 0xf9, 0x20, 0x33, 0x35, 0x93, 0x11, 0xbc, 0x59, 0x69, 0xce, 0x18, 0x9f, 0xf8, 0x7b, 0xa1, 0x6e, + /* (2^444)P */ 0xa1, 0xf4, 0xaf, 0xad, 0xf8, 0xe6, 0x99, 0xd2, 0xa1, 0x4d, 0xde, 0x56, 0xc9, 0x7b, 0x0b, 0x11, 0x3e, 0xbf, 0x89, 0x1a, 0x9a, 0x90, 0xe5, 0xe2, 0xa6, 0x37, 0x88, 0xa1, 0x68, 0x59, 0xae, 0x8c, 0xec, 0x02, 0x14, 0x8d, 0xb7, 0x2e, 0x25, 0x75, 0x7f, 0x76, 0x1a, 0xd3, 0x4d, 0xad, 0x8a, 0x00, 0x6c, 0x96, 0x49, 0xa4, 0xc3, 0x2e, 0x5c, 0x7b, + /* (2^445)P */ 0x26, 0x53, 0xf7, 0xda, 0xa8, 0x01, 0x14, 0xb1, 0x63, 0xe3, 0xc3, 0x89, 0x88, 0xb0, 0x85, 0x40, 0x2b, 0x26, 0x9a, 0x10, 0x1a, 0x70, 0x33, 0xf4, 0x50, 0x9d, 0x4d, 0xd8, 0x64, 0xc6, 0x0f, 0xe1, 0x17, 0xc8, 0x10, 0x4b, 0xfc, 0xa0, 0xc9, 0xba, 0x2c, 0x98, 0x09, 0xf5, 0x84, 0xb6, 0x7c, 0x4e, 0xa3, 0xe3, 0x81, 0x1b, 0x32, 0x60, 0x02, 0xdd, + /* (2^446)P */ 0xa3, 0xe5, 0x86, 0xd4, 0x43, 0xa8, 0xd1, 0x98, 0x9d, 0x9d, 0xdb, 0x04, 0xcf, 0x6e, 0x35, 0x05, 0x30, 0x53, 0x3b, 0xbc, 0x90, 0x00, 0x4a, 0xc5, 0x40, 0x2a, 0x0f, 0xde, 0x1a, 0xd7, 0x36, 0x27, 0x44, 0x62, 0xa6, 0xac, 0x9d, 0xd2, 0x70, 0x69, 0x14, 0x39, 0x9b, 0xd1, 0xc3, 0x0a, 0x3a, 0x82, 0x0e, 0xf1, 0x94, 0xd7, 0x42, 0x94, 0xd5, 0x7d, + /* (2^447)P */ 0x04, 0xc0, 0x6e, 0x12, 0x90, 0x70, 0xf9, 0xdf, 0xf7, 0xc9, 0x86, 0xc0, 0xe6, 0x92, 0x8b, 0x0a, 0xa1, 0xc1, 0x3b, 0xcc, 0x33, 0xb7, 0xf0, 0xeb, 0x51, 0x50, 0x80, 0x20, 0x69, 0x1c, 0x4f, 0x89, 0x05, 0x1e, 0xe4, 0x7a, 0x0a, 0xc2, 0xf0, 0xf5, 0x78, 0x91, 0x76, 0x34, 0x45, 0xdc, 0x24, 0x53, 0x24, 0x98, 0xe2, 0x73, 0x6f, 0xe6, 0x46, 0x67, +} diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/constants.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/constants.go new file mode 100644 index 0000000000000..b6b236e5d3d56 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/constants.go @@ -0,0 +1,71 @@ +package goldilocks + +import fp "github.com/cloudflare/circl/math/fp448" + +var ( + // genX is the x-coordinate of the generator of Goldilocks curve. + genX = fp.Elt{ + 0x5e, 0xc0, 0x0c, 0xc7, 0x2b, 0xa8, 0x26, 0x26, + 0x8e, 0x93, 0x00, 0x8b, 0xe1, 0x80, 0x3b, 0x43, + 0x11, 0x65, 0xb6, 0x2a, 0xf7, 0x1a, 0xae, 0x12, + 0x64, 0xa4, 0xd3, 0xa3, 0x24, 0xe3, 0x6d, 0xea, + 0x67, 0x17, 0x0f, 0x47, 0x70, 0x65, 0x14, 0x9e, + 0xda, 0x36, 0xbf, 0x22, 0xa6, 0x15, 0x1d, 0x22, + 0xed, 0x0d, 0xed, 0x6b, 0xc6, 0x70, 0x19, 0x4f, + } + // genY is the y-coordinate of the generator of Goldilocks curve. + genY = fp.Elt{ + 0x14, 0xfa, 0x30, 0xf2, 0x5b, 0x79, 0x08, 0x98, + 0xad, 0xc8, 0xd7, 0x4e, 0x2c, 0x13, 0xbd, 0xfd, + 0xc4, 0x39, 0x7c, 0xe6, 0x1c, 0xff, 0xd3, 0x3a, + 0xd7, 0xc2, 0xa0, 0x05, 0x1e, 0x9c, 0x78, 0x87, + 0x40, 0x98, 0xa3, 0x6c, 0x73, 0x73, 0xea, 0x4b, + 0x62, 0xc7, 0xc9, 0x56, 0x37, 0x20, 0x76, 0x88, + 0x24, 0xbc, 0xb6, 0x6e, 0x71, 0x46, 0x3f, 0x69, + } + // paramD is -39081 in Fp. + paramD = fp.Elt{ + 0x56, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + } + // order is 2^446-0x8335dc163bb124b65129c96fde933d8d723a70aadc873d6d54a7bb0d, + // which is the number of points in the prime subgroup. + order = Scalar{ + 0xf3, 0x44, 0x58, 0xab, 0x92, 0xc2, 0x78, 0x23, + 0x55, 0x8f, 0xc5, 0x8d, 0x72, 0xc2, 0x6c, 0x21, + 0x90, 0x36, 0xd6, 0xae, 0x49, 0xdb, 0x4e, 0xc4, + 0xe9, 0x23, 0xca, 0x7c, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, + } + // residue448 is 2^448 mod order. + residue448 = [4]uint64{ + 0x721cf5b5529eec34, 0x7a4cf635c8e9c2ab, 0xeec492d944a725bf, 0x20cd77058, + } + // invFour is 1/4 mod order. + invFour = Scalar{ + 0x3d, 0x11, 0xd6, 0xaa, 0xa4, 0x30, 0xde, 0x48, + 0xd5, 0x63, 0x71, 0xa3, 0x9c, 0x30, 0x5b, 0x08, + 0xa4, 0x8d, 0xb5, 0x6b, 0xd2, 0xb6, 0x13, 0x71, + 0xfa, 0x88, 0x32, 0xdf, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, + } + // paramDTwist is -39082 in Fp. The D parameter of the twist curve. + paramDTwist = fp.Elt{ + 0x55, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + } +) diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/curve.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/curve.go new file mode 100644 index 0000000000000..5a939100d2ca8 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/curve.go @@ -0,0 +1,80 @@ +// Package goldilocks provides elliptic curve operations over the goldilocks curve. +package goldilocks + +import fp "github.com/cloudflare/circl/math/fp448" + +// Curve is the Goldilocks curve x^2+y^2=z^2-39081x^2y^2. +type Curve struct{} + +// Identity returns the identity point. +func (Curve) Identity() *Point { + return &Point{ + y: fp.One(), + z: fp.One(), + } +} + +// IsOnCurve returns true if the point lies on the curve. +func (Curve) IsOnCurve(P *Point) bool { + x2, y2, t, t2, z2 := &fp.Elt{}, &fp.Elt{}, &fp.Elt{}, &fp.Elt{}, &fp.Elt{} + rhs, lhs := &fp.Elt{}, &fp.Elt{} + fp.Mul(t, &P.ta, &P.tb) // t = ta*tb + fp.Sqr(x2, &P.x) // x^2 + fp.Sqr(y2, &P.y) // y^2 + fp.Sqr(z2, &P.z) // z^2 + fp.Sqr(t2, t) // t^2 + fp.Add(lhs, x2, y2) // x^2 + y^2 + fp.Mul(rhs, t2, ¶mD) // dt^2 + fp.Add(rhs, rhs, z2) // z^2 + dt^2 + fp.Sub(lhs, lhs, rhs) // x^2 + y^2 - (z^2 + dt^2) + eq0 := fp.IsZero(lhs) + + fp.Mul(lhs, &P.x, &P.y) // xy + fp.Mul(rhs, t, &P.z) // tz + fp.Sub(lhs, lhs, rhs) // xy - tz + eq1 := fp.IsZero(lhs) + return eq0 && eq1 +} + +// Generator returns the generator point. +func (Curve) Generator() *Point { + return &Point{ + x: genX, + y: genY, + z: fp.One(), + ta: genX, + tb: genY, + } +} + +// Order returns the number of points in the prime subgroup. +func (Curve) Order() Scalar { return order } + +// Double returns 2P. +func (Curve) Double(P *Point) *Point { R := *P; R.Double(); return &R } + +// Add returns P+Q. +func (Curve) Add(P, Q *Point) *Point { R := *P; R.Add(Q); return &R } + +// ScalarMult returns kP. This function runs in constant time. +func (e Curve) ScalarMult(k *Scalar, P *Point) *Point { + k4 := &Scalar{} + k4.divBy4(k) + return e.pull(twistCurve{}.ScalarMult(k4, e.push(P))) +} + +// ScalarBaseMult returns kG where G is the generator point. This function runs in constant time. +func (e Curve) ScalarBaseMult(k *Scalar) *Point { + k4 := &Scalar{} + k4.divBy4(k) + return e.pull(twistCurve{}.ScalarBaseMult(k4)) +} + +// CombinedMult returns mG+nP, where G is the generator point. This function is non-constant time. +func (e Curve) CombinedMult(m, n *Scalar, P *Point) *Point { + m4 := &Scalar{} + n4 := &Scalar{} + m4.divBy4(m) + n4.divBy4(n) + return e.pull(twistCurve{}.CombinedMult(m4, n4, twistCurve{}.pull(P))) +} diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/isogeny.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/isogeny.go new file mode 100644 index 0000000000000..b1daab851c5dd --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/isogeny.go @@ -0,0 +1,52 @@ +package goldilocks + +import fp "github.com/cloudflare/circl/math/fp448" + +func (Curve) pull(P *twistPoint) *Point { return twistCurve{}.push(P) } +func (twistCurve) pull(P *Point) *twistPoint { return Curve{}.push(P) } + +// push sends a point on the Goldilocks curve to a point on the twist curve. +func (Curve) push(P *Point) *twistPoint { + Q := &twistPoint{} + Px, Py, Pz := &P.x, &P.y, &P.z + a, b, c, d, e, f, g, h := &Q.x, &Q.y, &Q.z, &fp.Elt{}, &Q.ta, &Q.x, &Q.y, &Q.tb + fp.Add(e, Px, Py) // x+y + fp.Sqr(a, Px) // A = x^2 + fp.Sqr(b, Py) // B = y^2 + fp.Sqr(c, Pz) // z^2 + fp.Add(c, c, c) // C = 2*z^2 + *d = *a // D = A + fp.Sqr(e, e) // (x+y)^2 + fp.Sub(e, e, a) // (x+y)^2-A + fp.Sub(e, e, b) // E = (x+y)^2-A-B + fp.Add(h, b, d) // H = B+D + fp.Sub(g, b, d) // G = B-D + fp.Sub(f, c, h) // F = C-H + fp.Mul(&Q.z, f, g) // Z = F * G + fp.Mul(&Q.x, e, f) // X = E * F + fp.Mul(&Q.y, g, h) // Y = G * H, // T = E * H + return Q +} + +// push sends a point on the twist curve to a point on the Goldilocks curve. +func (twistCurve) push(P *twistPoint) *Point { + Q := &Point{} + Px, Py, Pz := &P.x, &P.y, &P.z + a, b, c, d, e, f, g, h := &Q.x, &Q.y, &Q.z, &fp.Elt{}, &Q.ta, &Q.x, &Q.y, &Q.tb + fp.Add(e, Px, Py) // x+y + fp.Sqr(a, Px) // A = x^2 + fp.Sqr(b, Py) // B = y^2 + fp.Sqr(c, Pz) // z^2 + fp.Add(c, c, c) // C = 2*z^2 + fp.Neg(d, a) // D = -A + fp.Sqr(e, e) // (x+y)^2 + fp.Sub(e, e, a) // (x+y)^2-A + fp.Sub(e, e, b) // E = (x+y)^2-A-B + fp.Add(h, b, d) // H = B+D + fp.Sub(g, b, d) // G = B-D + fp.Sub(f, c, h) // F = C-H + fp.Mul(&Q.z, f, g) // Z = F * G + fp.Mul(&Q.x, e, f) // X = E * F + fp.Mul(&Q.y, g, h) // Y = G * H, // T = E * H + return Q +} diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/point.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/point.go new file mode 100644 index 0000000000000..11f73de0542d1 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/point.go @@ -0,0 +1,171 @@ +package goldilocks + +import ( + "errors" + "fmt" + + fp "github.com/cloudflare/circl/math/fp448" +) + +// Point is a point on the Goldilocks Curve. +type Point struct{ x, y, z, ta, tb fp.Elt } + +func (P Point) String() string { + return fmt.Sprintf("x: %v\ny: %v\nz: %v\nta: %v\ntb: %v", P.x, P.y, P.z, P.ta, P.tb) +} + +// FromAffine creates a point from affine coordinates. +func FromAffine(x, y *fp.Elt) (*Point, error) { + P := &Point{ + x: *x, + y: *y, + z: fp.One(), + ta: *x, + tb: *y, + } + if !(Curve{}).IsOnCurve(P) { + return P, errors.New("point not on curve") + } + return P, nil +} + +// isLessThan returns true if 0 <= x < y, and assumes that slices are of the +// same length and are interpreted in little-endian order. +func isLessThan(x, y []byte) bool { + i := len(x) - 1 + for i > 0 && x[i] == y[i] { + i-- + } + return x[i] < y[i] +} + +// FromBytes returns a point from the input buffer. +func FromBytes(in []byte) (*Point, error) { + if len(in) < fp.Size+1 { + return nil, errors.New("wrong input length") + } + err := errors.New("invalid decoding") + P := &Point{} + signX := in[fp.Size] >> 7 + copy(P.y[:], in[:fp.Size]) + p := fp.P() + if !isLessThan(P.y[:], p[:]) { + return nil, err + } + + u, v := &fp.Elt{}, &fp.Elt{} + one := fp.One() + fp.Sqr(u, &P.y) // u = y^2 + fp.Mul(v, u, ¶mD) // v = dy^2 + fp.Sub(u, u, &one) // u = y^2-1 + fp.Sub(v, v, &one) // v = dy^2-1 + isQR := fp.InvSqrt(&P.x, u, v) // x = sqrt(u/v) + if !isQR { + return nil, err + } + fp.Modp(&P.x) // x = x mod p + if fp.IsZero(&P.x) && signX == 1 { + return nil, err + } + if signX != (P.x[0] & 1) { + fp.Neg(&P.x, &P.x) + } + P.ta = P.x + P.tb = P.y + P.z = fp.One() + return P, nil +} + +// IsIdentity returns true is P is the identity Point. +func (P *Point) IsIdentity() bool { + return fp.IsZero(&P.x) && !fp.IsZero(&P.y) && !fp.IsZero(&P.z) && P.y == P.z +} + +// IsEqual returns true if P is equivalent to Q. +func (P *Point) IsEqual(Q *Point) bool { + l, r := &fp.Elt{}, &fp.Elt{} + fp.Mul(l, &P.x, &Q.z) + fp.Mul(r, &Q.x, &P.z) + fp.Sub(l, l, r) + b := fp.IsZero(l) + fp.Mul(l, &P.y, &Q.z) + fp.Mul(r, &Q.y, &P.z) + fp.Sub(l, l, r) + b = b && fp.IsZero(l) + fp.Mul(l, &P.ta, &P.tb) + fp.Mul(l, l, &Q.z) + fp.Mul(r, &Q.ta, &Q.tb) + fp.Mul(r, r, &P.z) + fp.Sub(l, l, r) + b = b && fp.IsZero(l) + return b +} + +// Neg obtains the inverse of the Point. +func (P *Point) Neg() { fp.Neg(&P.x, &P.x); fp.Neg(&P.ta, &P.ta) } + +// ToAffine returns the x,y affine coordinates of P. +func (P *Point) ToAffine() (x, y fp.Elt) { + fp.Inv(&P.z, &P.z) // 1/z + fp.Mul(&P.x, &P.x, &P.z) // x/z + fp.Mul(&P.y, &P.y, &P.z) // y/z + fp.Modp(&P.x) + fp.Modp(&P.y) + fp.SetOne(&P.z) + P.ta = P.x + P.tb = P.y + return P.x, P.y +} + +// ToBytes stores P into a slice of bytes. +func (P *Point) ToBytes(out []byte) error { + if len(out) < fp.Size+1 { + return errors.New("invalid decoding") + } + x, y := P.ToAffine() + out[fp.Size] = (x[0] & 1) << 7 + return fp.ToBytes(out[:fp.Size], &y) +} + +// MarshalBinary encodes the receiver into a binary form and returns the result. +func (P *Point) MarshalBinary() (data []byte, err error) { + data = make([]byte, fp.Size+1) + err = P.ToBytes(data[:fp.Size+1]) + return data, err +} + +// UnmarshalBinary must be able to decode the form generated by MarshalBinary. +func (P *Point) UnmarshalBinary(data []byte) error { Q, err := FromBytes(data); *P = *Q; return err } + +// Double sets P = 2Q. +func (P *Point) Double() { P.Add(P) } + +// Add sets P =P+Q.. +func (P *Point) Add(Q *Point) { + // This is formula (5) from "Twisted Edwards Curves Revisited" by + // Hisil H., Wong K.KH., Carter G., Dawson E. (2008) + // https://doi.org/10.1007/978-3-540-89255-7_20 + x1, y1, z1, ta1, tb1 := &P.x, &P.y, &P.z, &P.ta, &P.tb + x2, y2, z2, ta2, tb2 := &Q.x, &Q.y, &Q.z, &Q.ta, &Q.tb + x3, y3, z3, E, H := &P.x, &P.y, &P.z, &P.ta, &P.tb + A, B, C, D := &fp.Elt{}, &fp.Elt{}, &fp.Elt{}, &fp.Elt{} + t1, t2, F, G := C, D, &fp.Elt{}, &fp.Elt{} + fp.Mul(t1, ta1, tb1) // t1 = ta1*tb1 + fp.Mul(t2, ta2, tb2) // t2 = ta2*tb2 + fp.Mul(A, x1, x2) // A = x1*x2 + fp.Mul(B, y1, y2) // B = y1*y2 + fp.Mul(C, t1, t2) // t1*t2 + fp.Mul(C, C, ¶mD) // C = d*t1*t2 + fp.Mul(D, z1, z2) // D = z1*z2 + fp.Add(F, x1, y1) // x1+y1 + fp.Add(E, x2, y2) // x2+y2 + fp.Mul(E, E, F) // (x1+y1)*(x2+y2) + fp.Sub(E, E, A) // (x1+y1)*(x2+y2)-A + fp.Sub(E, E, B) // E = (x1+y1)*(x2+y2)-A-B + fp.Sub(F, D, C) // F = D-C + fp.Add(G, D, C) // G = D+C + fp.Sub(H, B, A) // H = B-A + fp.Mul(z3, F, G) // Z = F * G + fp.Mul(x3, E, F) // X = E * F + fp.Mul(y3, G, H) // Y = G * H, T = E * H +} diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/scalar.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/scalar.go new file mode 100644 index 0000000000000..f98117b2527e1 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/scalar.go @@ -0,0 +1,203 @@ +package goldilocks + +import ( + "encoding/binary" + "math/bits" +) + +// ScalarSize is the size (in bytes) of scalars. +const ScalarSize = 56 // 448 / 8 + +// _N is the number of 64-bit words to store scalars. +const _N = 7 // 448 / 64 + +// Scalar represents a positive integer stored in little-endian order. +type Scalar [ScalarSize]byte + +type scalar64 [_N]uint64 + +func (z *scalar64) fromScalar(x *Scalar) { + z[0] = binary.LittleEndian.Uint64(x[0*8 : 1*8]) + z[1] = binary.LittleEndian.Uint64(x[1*8 : 2*8]) + z[2] = binary.LittleEndian.Uint64(x[2*8 : 3*8]) + z[3] = binary.LittleEndian.Uint64(x[3*8 : 4*8]) + z[4] = binary.LittleEndian.Uint64(x[4*8 : 5*8]) + z[5] = binary.LittleEndian.Uint64(x[5*8 : 6*8]) + z[6] = binary.LittleEndian.Uint64(x[6*8 : 7*8]) +} + +func (z *scalar64) toScalar(x *Scalar) { + binary.LittleEndian.PutUint64(x[0*8:1*8], z[0]) + binary.LittleEndian.PutUint64(x[1*8:2*8], z[1]) + binary.LittleEndian.PutUint64(x[2*8:3*8], z[2]) + binary.LittleEndian.PutUint64(x[3*8:4*8], z[3]) + binary.LittleEndian.PutUint64(x[4*8:5*8], z[4]) + binary.LittleEndian.PutUint64(x[5*8:6*8], z[5]) + binary.LittleEndian.PutUint64(x[6*8:7*8], z[6]) +} + +// add calculates z = x + y. Assumes len(z) > max(len(x),len(y)). +func add(z, x, y []uint64) uint64 { + l, L, zz := len(x), len(y), y + if l > L { + l, L, zz = L, l, x + } + c := uint64(0) + for i := 0; i < l; i++ { + z[i], c = bits.Add64(x[i], y[i], c) + } + for i := l; i < L; i++ { + z[i], c = bits.Add64(zz[i], 0, c) + } + return c +} + +// sub calculates z = x - y. Assumes len(z) > max(len(x),len(y)). +func sub(z, x, y []uint64) uint64 { + l, L, zz := len(x), len(y), y + if l > L { + l, L, zz = L, l, x + } + c := uint64(0) + for i := 0; i < l; i++ { + z[i], c = bits.Sub64(x[i], y[i], c) + } + for i := l; i < L; i++ { + z[i], c = bits.Sub64(zz[i], 0, c) + } + return c +} + +// mulWord calculates z = x * y. Assumes len(z) >= len(x)+1. +func mulWord(z, x []uint64, y uint64) { + for i := range z { + z[i] = 0 + } + carry := uint64(0) + for i := range x { + hi, lo := bits.Mul64(x[i], y) + lo, cc := bits.Add64(lo, z[i], 0) + hi, _ = bits.Add64(hi, 0, cc) + z[i], cc = bits.Add64(lo, carry, 0) + carry, _ = bits.Add64(hi, 0, cc) + } + z[len(x)] = carry +} + +// Cmov moves x into z if b=1. +func (z *scalar64) Cmov(b uint64, x *scalar64) { + m := uint64(0) - b + for i := range z { + z[i] = (z[i] &^ m) | (x[i] & m) + } +} + +// leftShift shifts to the left the words of z returning the more significant word. +func (z *scalar64) leftShift(low uint64) uint64 { + high := z[_N-1] + for i := _N - 1; i > 0; i-- { + z[i] = z[i-1] + } + z[0] = low + return high +} + +// reduceOneWord calculates z = z + 2^448*x such that the result fits in a Scalar. +func (z *scalar64) reduceOneWord(x uint64) { + prod := (&scalar64{})[:] + mulWord(prod, residue448[:], x) + cc := add(z[:], z[:], prod) + mulWord(prod, residue448[:], cc) + add(z[:], z[:], prod) +} + +// modOrder reduces z mod order. +func (z *scalar64) modOrder() { + var o64, x scalar64 + o64.fromScalar(&order) + // Performs: while (z >= order) { z = z-order } + // At most 8 (eight) iterations reduce 3 bits by subtracting. + for i := 0; i < 8; i++ { + c := sub(x[:], z[:], o64[:]) // (c || x) = z-order + z.Cmov(1-c, &x) // if c != 0 { z = x } + } +} + +// FromBytes stores z = x mod order, where x is a number stored in little-endian order. +func (z *Scalar) FromBytes(x []byte) { + n := len(x) + nCeil := (n + 7) >> 3 + for i := range z { + z[i] = 0 + } + if nCeil < _N { + copy(z[:], x) + return + } + copy(z[:], x[8*(nCeil-_N):]) + var z64 scalar64 + z64.fromScalar(z) + for i := nCeil - _N - 1; i >= 0; i-- { + low := binary.LittleEndian.Uint64(x[8*i:]) + high := z64.leftShift(low) + z64.reduceOneWord(high) + } + z64.modOrder() + z64.toScalar(z) +} + +// divBy4 calculates z = x/4 mod order. +func (z *Scalar) divBy4(x *Scalar) { z.Mul(x, &invFour) } + +// Red reduces z mod order. +func (z *Scalar) Red() { var t scalar64; t.fromScalar(z); t.modOrder(); t.toScalar(z) } + +// Neg calculates z = -z mod order. +func (z *Scalar) Neg() { z.Sub(&order, z) } + +// Add calculates z = x+y mod order. +func (z *Scalar) Add(x, y *Scalar) { + var z64, x64, y64, t scalar64 + x64.fromScalar(x) + y64.fromScalar(y) + c := add(z64[:], x64[:], y64[:]) + add(t[:], z64[:], residue448[:]) + z64.Cmov(c, &t) + z64.modOrder() + z64.toScalar(z) +} + +// Sub calculates z = x-y mod order. +func (z *Scalar) Sub(x, y *Scalar) { + var z64, x64, y64, t scalar64 + x64.fromScalar(x) + y64.fromScalar(y) + c := sub(z64[:], x64[:], y64[:]) + sub(t[:], z64[:], residue448[:]) + z64.Cmov(c, &t) + z64.modOrder() + z64.toScalar(z) +} + +// Mul calculates z = x*y mod order. +func (z *Scalar) Mul(x, y *Scalar) { + var z64, x64, y64 scalar64 + prod := (&[_N + 1]uint64{})[:] + x64.fromScalar(x) + y64.fromScalar(y) + mulWord(prod, x64[:], y64[_N-1]) + copy(z64[:], prod[:_N]) + z64.reduceOneWord(prod[_N]) + for i := _N - 2; i >= 0; i-- { + h := z64.leftShift(0) + z64.reduceOneWord(h) + mulWord(prod, x64[:], y64[i]) + c := add(z64[:], z64[:], prod[:_N]) + z64.reduceOneWord(prod[_N] + c) + } + z64.modOrder() + z64.toScalar(z) +} + +// IsZero returns true if z=0. +func (z *Scalar) IsZero() bool { z.Red(); return *z == Scalar{} } diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/twist.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/twist.go new file mode 100644 index 0000000000000..8cd4e333b9654 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/twist.go @@ -0,0 +1,138 @@ +package goldilocks + +import ( + "crypto/subtle" + "math/bits" + + "github.com/cloudflare/circl/internal/conv" + "github.com/cloudflare/circl/math" + fp "github.com/cloudflare/circl/math/fp448" +) + +// twistCurve is -x^2+y^2=1-39082x^2y^2 and is 4-isogeneous to Goldilocks. +type twistCurve struct{} + +// Identity returns the identity point. +func (twistCurve) Identity() *twistPoint { + return &twistPoint{ + y: fp.One(), + z: fp.One(), + } +} + +// subYDiv16 update x = (x - y) / 16. +func subYDiv16(x *scalar64, y int64) { + s := uint64(y >> 63) + x0, b0 := bits.Sub64((*x)[0], uint64(y), 0) + x1, b1 := bits.Sub64((*x)[1], s, b0) + x2, b2 := bits.Sub64((*x)[2], s, b1) + x3, b3 := bits.Sub64((*x)[3], s, b2) + x4, b4 := bits.Sub64((*x)[4], s, b3) + x5, b5 := bits.Sub64((*x)[5], s, b4) + x6, _ := bits.Sub64((*x)[6], s, b5) + x[0] = (x0 >> 4) | (x1 << 60) + x[1] = (x1 >> 4) | (x2 << 60) + x[2] = (x2 >> 4) | (x3 << 60) + x[3] = (x3 >> 4) | (x4 << 60) + x[4] = (x4 >> 4) | (x5 << 60) + x[5] = (x5 >> 4) | (x6 << 60) + x[6] = (x6 >> 4) +} + +func recodeScalar(d *[113]int8, k *Scalar) { + var k64 scalar64 + k64.fromScalar(k) + for i := 0; i < 112; i++ { + d[i] = int8((k64[0] & 0x1f) - 16) + subYDiv16(&k64, int64(d[i])) + } + d[112] = int8(k64[0]) +} + +// ScalarMult returns kP. +func (e twistCurve) ScalarMult(k *Scalar, P *twistPoint) *twistPoint { + var TabP [8]preTwistPointProy + var S preTwistPointProy + var d [113]int8 + + var isZero int + if k.IsZero() { + isZero = 1 + } + subtle.ConstantTimeCopy(isZero, k[:], order[:]) + + minusK := *k + isEven := 1 - int(k[0]&0x1) + minusK.Neg() + subtle.ConstantTimeCopy(isEven, k[:], minusK[:]) + recodeScalar(&d, k) + + P.oddMultiples(TabP[:]) + Q := e.Identity() + for i := 112; i >= 0; i-- { + Q.Double() + Q.Double() + Q.Double() + Q.Double() + mask := d[i] >> 7 + absDi := (d[i] + mask) ^ mask + inx := int32((absDi - 1) >> 1) + sig := int((d[i] >> 7) & 0x1) + for j := range TabP { + S.cmov(&TabP[j], uint(subtle.ConstantTimeEq(inx, int32(j)))) + } + S.cneg(sig) + Q.mixAdd(&S) + } + Q.cneg(uint(isEven)) + return Q +} + +const ( + omegaFix = 7 + omegaVar = 5 +) + +// CombinedMult returns mG+nP. +func (e twistCurve) CombinedMult(m, n *Scalar, P *twistPoint) *twistPoint { + nafFix := math.OmegaNAF(conv.BytesLe2BigInt(m[:]), omegaFix) + nafVar := math.OmegaNAF(conv.BytesLe2BigInt(n[:]), omegaVar) + + if len(nafFix) > len(nafVar) { + nafVar = append(nafVar, make([]int32, len(nafFix)-len(nafVar))...) + } else if len(nafFix) < len(nafVar) { + nafFix = append(nafFix, make([]int32, len(nafVar)-len(nafFix))...) + } + + var TabQ [1 << (omegaVar - 2)]preTwistPointProy + P.oddMultiples(TabQ[:]) + Q := e.Identity() + for i := len(nafFix) - 1; i >= 0; i-- { + Q.Double() + // Generator point + if nafFix[i] != 0 { + idxM := absolute(nafFix[i]) >> 1 + R := tabVerif[idxM] + if nafFix[i] < 0 { + R.neg() + } + Q.mixAddZ1(&R) + } + // Variable input point + if nafVar[i] != 0 { + idxN := absolute(nafVar[i]) >> 1 + S := TabQ[idxN] + if nafVar[i] < 0 { + S.neg() + } + Q.mixAdd(&S) + } + } + return Q +} + +// absolute returns always a positive value. +func absolute(x int32) int32 { + mask := x >> 31 + return (x + mask) ^ mask +} diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/twistPoint.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/twistPoint.go new file mode 100644 index 0000000000000..c55db77b06949 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/twistPoint.go @@ -0,0 +1,135 @@ +package goldilocks + +import ( + "fmt" + + fp "github.com/cloudflare/circl/math/fp448" +) + +type twistPoint struct{ x, y, z, ta, tb fp.Elt } + +type preTwistPointAffine struct{ addYX, subYX, dt2 fp.Elt } + +type preTwistPointProy struct { + preTwistPointAffine + z2 fp.Elt +} + +func (P *twistPoint) String() string { + return fmt.Sprintf("x: %v\ny: %v\nz: %v\nta: %v\ntb: %v", P.x, P.y, P.z, P.ta, P.tb) +} + +// cneg conditionally negates the point if b=1. +func (P *twistPoint) cneg(b uint) { + t := &fp.Elt{} + fp.Neg(t, &P.x) + fp.Cmov(&P.x, t, b) + fp.Neg(t, &P.ta) + fp.Cmov(&P.ta, t, b) +} + +// Double updates P with 2P. +func (P *twistPoint) Double() { + // This is formula (7) from "Twisted Edwards Curves Revisited" by + // Hisil H., Wong K.KH., Carter G., Dawson E. (2008) + // https://doi.org/10.1007/978-3-540-89255-7_20 + Px, Py, Pz, Pta, Ptb := &P.x, &P.y, &P.z, &P.ta, &P.tb + a, b, c, e, f, g, h := Px, Py, Pz, Pta, Px, Py, Ptb + fp.Add(e, Px, Py) // x+y + fp.Sqr(a, Px) // A = x^2 + fp.Sqr(b, Py) // B = y^2 + fp.Sqr(c, Pz) // z^2 + fp.Add(c, c, c) // C = 2*z^2 + fp.Add(h, a, b) // H = A+B + fp.Sqr(e, e) // (x+y)^2 + fp.Sub(e, e, h) // E = (x+y)^2-A-B + fp.Sub(g, b, a) // G = B-A + fp.Sub(f, c, g) // F = C-G + fp.Mul(Pz, f, g) // Z = F * G + fp.Mul(Px, e, f) // X = E * F + fp.Mul(Py, g, h) // Y = G * H, T = E * H +} + +// mixAdd calculates P= P+Q, where Q is a precomputed point with Z_Q = 1. +func (P *twistPoint) mixAddZ1(Q *preTwistPointAffine) { + fp.Add(&P.z, &P.z, &P.z) // D = 2*z1 (z2=1) + P.coreAddition(Q) +} + +// coreAddition calculates P=P+Q for curves with A=-1. +func (P *twistPoint) coreAddition(Q *preTwistPointAffine) { + // This is the formula following (5) from "Twisted Edwards Curves Revisited" by + // Hisil H., Wong K.KH., Carter G., Dawson E. (2008) + // https://doi.org/10.1007/978-3-540-89255-7_20 + Px, Py, Pz, Pta, Ptb := &P.x, &P.y, &P.z, &P.ta, &P.tb + addYX2, subYX2, dt2 := &Q.addYX, &Q.subYX, &Q.dt2 + a, b, c, d, e, f, g, h := Px, Py, &fp.Elt{}, Pz, Pta, Px, Py, Ptb + fp.Mul(c, Pta, Ptb) // t1 = ta*tb + fp.Sub(h, Py, Px) // y1-x1 + fp.Add(b, Py, Px) // y1+x1 + fp.Mul(a, h, subYX2) // A = (y1-x1)*(y2-x2) + fp.Mul(b, b, addYX2) // B = (y1+x1)*(y2+x2) + fp.Mul(c, c, dt2) // C = 2*D*t1*t2 + fp.Sub(e, b, a) // E = B-A + fp.Add(h, b, a) // H = B+A + fp.Sub(f, d, c) // F = D-C + fp.Add(g, d, c) // G = D+C + fp.Mul(Pz, f, g) // Z = F * G + fp.Mul(Px, e, f) // X = E * F + fp.Mul(Py, g, h) // Y = G * H, T = E * H +} + +func (P *preTwistPointAffine) neg() { + P.addYX, P.subYX = P.subYX, P.addYX + fp.Neg(&P.dt2, &P.dt2) +} + +func (P *preTwistPointAffine) cneg(b int) { + t := &fp.Elt{} + fp.Cswap(&P.addYX, &P.subYX, uint(b)) + fp.Neg(t, &P.dt2) + fp.Cmov(&P.dt2, t, uint(b)) +} + +func (P *preTwistPointAffine) cmov(Q *preTwistPointAffine, b uint) { + fp.Cmov(&P.addYX, &Q.addYX, b) + fp.Cmov(&P.subYX, &Q.subYX, b) + fp.Cmov(&P.dt2, &Q.dt2, b) +} + +// mixAdd calculates P= P+Q, where Q is a precomputed point with Z_Q != 1. +func (P *twistPoint) mixAdd(Q *preTwistPointProy) { + fp.Mul(&P.z, &P.z, &Q.z2) // D = 2*z1*z2 + P.coreAddition(&Q.preTwistPointAffine) +} + +// oddMultiples calculates T[i] = (2*i-1)P for 0 < i < len(T). +func (P *twistPoint) oddMultiples(T []preTwistPointProy) { + if n := len(T); n > 0 { + T[0].FromTwistPoint(P) + _2P := *P + _2P.Double() + R := &preTwistPointProy{} + R.FromTwistPoint(&_2P) + for i := 1; i < n; i++ { + P.mixAdd(R) + T[i].FromTwistPoint(P) + } + } +} + +// cmov conditionally moves Q into P if b=1. +func (P *preTwistPointProy) cmov(Q *preTwistPointProy, b uint) { + P.preTwistPointAffine.cmov(&Q.preTwistPointAffine, b) + fp.Cmov(&P.z2, &Q.z2, b) +} + +// FromTwistPoint precomputes some coordinates of Q for missed addition. +func (P *preTwistPointProy) FromTwistPoint(Q *twistPoint) { + fp.Add(&P.addYX, &Q.y, &Q.x) // addYX = X + Y + fp.Sub(&P.subYX, &Q.y, &Q.x) // subYX = Y - X + fp.Mul(&P.dt2, &Q.ta, &Q.tb) // T = ta*tb + fp.Mul(&P.dt2, &P.dt2, ¶mDTwist) // D*T + fp.Add(&P.dt2, &P.dt2, &P.dt2) // dt2 = 2*D*T + fp.Add(&P.z2, &Q.z, &Q.z) // z2 = 2*Z +} diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/twistTables.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/twistTables.go new file mode 100644 index 0000000000000..ed432e02c78b1 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/twistTables.go @@ -0,0 +1,216 @@ +package goldilocks + +import fp "github.com/cloudflare/circl/math/fp448" + +var tabFixMult = [fxV][fx2w1]preTwistPointAffine{ + { + { + addYX: fp.Elt{0x65, 0x4a, 0xdd, 0xdf, 0xb4, 0x79, 0x60, 0xc8, 0xa1, 0x70, 0xb4, 0x3a, 0x1e, 0x0c, 0x9b, 0x19, 0xe5, 0x48, 0x3f, 0xd7, 0x44, 0x18, 0x18, 0x14, 0x14, 0x27, 0x45, 0xd0, 0x2b, 0x24, 0xd5, 0x93, 0xc3, 0x74, 0x4c, 0x50, 0x70, 0x43, 0x26, 0x05, 0x08, 0x24, 0xca, 0x78, 0x30, 0xc1, 0x06, 0x8d, 0xd4, 0x86, 0x42, 0xf0, 0x14, 0xde, 0x08, 0x05}, + subYX: fp.Elt{0x64, 0x4a, 0xdd, 0xdf, 0xb4, 0x79, 0x60, 0xc8, 0xa1, 0x70, 0xb4, 0x3a, 0x1e, 0x0c, 0x9b, 0x19, 0xe5, 0x48, 0x3f, 0xd7, 0x44, 0x18, 0x18, 0x14, 0x14, 0x27, 0x45, 0xd0, 0x2d, 0x24, 0xd5, 0x93, 0xc3, 0x74, 0x4c, 0x50, 0x70, 0x43, 0x26, 0x05, 0x08, 0x24, 0xca, 0x78, 0x30, 0xc1, 0x06, 0x8d, 0xd4, 0x86, 0x42, 0xf0, 0x14, 0xde, 0x08, 0x05}, + dt2: fp.Elt{0x1a, 0x33, 0xea, 0x64, 0x45, 0x1c, 0xdf, 0x17, 0x1d, 0x16, 0x34, 0x28, 0xd6, 0x61, 0x19, 0x67, 0x79, 0xb4, 0x13, 0xcf, 0x3e, 0x7c, 0x0e, 0x72, 0xda, 0xf1, 0x5f, 0xda, 0xe6, 0xcf, 0x42, 0xd3, 0xb6, 0x17, 0xc2, 0x68, 0x13, 0x2d, 0xd9, 0x60, 0x3e, 0xae, 0xf0, 0x5b, 0x96, 0xf0, 0xcd, 0xaf, 0xea, 0xb7, 0x0d, 0x59, 0x16, 0xa7, 0xff, 0x55}, + }, + { + addYX: fp.Elt{0xca, 0xd8, 0x7d, 0x86, 0x1a, 0xef, 0xad, 0x11, 0xe3, 0x27, 0x41, 0x7e, 0x7f, 0x3e, 0xa9, 0xd2, 0xb5, 0x4e, 0x50, 0xe0, 0x77, 0x91, 0xc2, 0x13, 0x52, 0x73, 0x41, 0x09, 0xa6, 0x57, 0x9a, 0xc8, 0xa8, 0x90, 0x9d, 0x26, 0x14, 0xbb, 0xa1, 0x2a, 0xf7, 0x45, 0x43, 0x4e, 0xea, 0x35, 0x62, 0xe1, 0x08, 0x85, 0x46, 0xb8, 0x24, 0x05, 0x2d, 0xab}, + subYX: fp.Elt{0x9b, 0xe6, 0xd3, 0xe5, 0xfe, 0x50, 0x36, 0x3c, 0x3c, 0x6d, 0x74, 0x1d, 0x74, 0xc0, 0xde, 0x5b, 0x45, 0x27, 0xe5, 0x12, 0xee, 0x63, 0x35, 0x6b, 0x13, 0xe2, 0x41, 0x6b, 0x3a, 0x05, 0x2b, 0xb1, 0x89, 0x26, 0xb6, 0xc6, 0xd1, 0x84, 0xff, 0x0e, 0x9b, 0xa3, 0xfb, 0x21, 0x36, 0x6b, 0x01, 0xf7, 0x9f, 0x7c, 0xeb, 0xf5, 0x18, 0x7a, 0x2a, 0x70}, + dt2: fp.Elt{0x09, 0xad, 0x99, 0x1a, 0x38, 0xd3, 0xdf, 0x22, 0x37, 0x32, 0x61, 0x8b, 0xf3, 0x19, 0x48, 0x08, 0xe8, 0x49, 0xb6, 0x4a, 0xa7, 0xed, 0xa4, 0xa2, 0xee, 0x86, 0xd7, 0x31, 0x5e, 0xce, 0x95, 0x76, 0x86, 0x42, 0x1c, 0x9d, 0x07, 0x14, 0x8c, 0x34, 0x18, 0x9c, 0x6d, 0x3a, 0xdf, 0xa9, 0xe8, 0x36, 0x7e, 0xe4, 0x95, 0xbe, 0xb5, 0x09, 0xf8, 0x9c}, + }, + { + addYX: fp.Elt{0x51, 0xdb, 0x49, 0xa8, 0x9f, 0xe3, 0xd7, 0xec, 0x0d, 0x0f, 0x49, 0xe8, 0xb6, 0xc5, 0x0f, 0x5a, 0x1c, 0xce, 0x54, 0x0d, 0xb1, 0x8d, 0x5b, 0xbf, 0xf4, 0xaa, 0x34, 0x77, 0xc4, 0x5d, 0x59, 0xb6, 0xc5, 0x0e, 0x5a, 0xd8, 0x5b, 0x30, 0xc2, 0x1d, 0xec, 0x85, 0x1c, 0x42, 0xbe, 0x24, 0x2e, 0x50, 0x55, 0x44, 0xb2, 0x3a, 0x01, 0xaa, 0x98, 0xfb}, + subYX: fp.Elt{0xe7, 0x29, 0xb7, 0xd0, 0xaa, 0x4f, 0x32, 0x53, 0x56, 0xde, 0xbc, 0xd1, 0x92, 0x5d, 0x19, 0xbe, 0xa3, 0xe3, 0x75, 0x48, 0xe0, 0x7a, 0x1b, 0x54, 0x7a, 0xb7, 0x41, 0x77, 0x84, 0x38, 0xdd, 0x14, 0x9f, 0xca, 0x3f, 0xa3, 0xc8, 0xa7, 0x04, 0x70, 0xf1, 0x4d, 0x3d, 0xb3, 0x84, 0x79, 0xcb, 0xdb, 0xe4, 0xc5, 0x42, 0x9b, 0x57, 0x19, 0xf1, 0x2d}, + dt2: fp.Elt{0x20, 0xb4, 0x94, 0x9e, 0xdf, 0x31, 0x44, 0x0b, 0xc9, 0x7b, 0x75, 0x40, 0x9d, 0xd1, 0x96, 0x39, 0x70, 0x71, 0x15, 0xc8, 0x93, 0xd5, 0xc5, 0xe5, 0xba, 0xfe, 0xee, 0x08, 0x6a, 0x98, 0x0a, 0x1b, 0xb2, 0xaa, 0x3a, 0xf4, 0xa4, 0x79, 0xf9, 0x8e, 0x4d, 0x65, 0x10, 0x9b, 0x3a, 0x6e, 0x7c, 0x87, 0x94, 0x92, 0x11, 0x65, 0xbf, 0x1a, 0x09, 0xde}, + }, + { + addYX: fp.Elt{0xf3, 0x84, 0x76, 0x77, 0xa5, 0x6b, 0x27, 0x3b, 0x83, 0x3d, 0xdf, 0xa0, 0xeb, 0x32, 0x6d, 0x58, 0x81, 0x57, 0x64, 0xc2, 0x21, 0x7c, 0x9b, 0xea, 0xe6, 0xb0, 0x93, 0xf9, 0xe7, 0xc3, 0xed, 0x5a, 0x8e, 0xe2, 0xb4, 0x72, 0x76, 0x66, 0x0f, 0x22, 0x29, 0x94, 0x3e, 0x63, 0x48, 0x5e, 0x80, 0xcb, 0xac, 0xfa, 0x95, 0xb6, 0x4b, 0xc4, 0x95, 0x33}, + subYX: fp.Elt{0x0c, 0x55, 0xd1, 0x5e, 0x5f, 0xbf, 0xbf, 0xe2, 0x4c, 0xfc, 0x37, 0x4a, 0xc4, 0xb1, 0xf4, 0x83, 0x61, 0x93, 0x60, 0x8e, 0x9f, 0x31, 0xf0, 0xa0, 0x41, 0xff, 0x1d, 0xe2, 0x7f, 0xca, 0x40, 0xd6, 0x88, 0xe8, 0x91, 0x61, 0xe2, 0x11, 0x18, 0x83, 0xf3, 0x25, 0x2f, 0x3f, 0x49, 0x40, 0xd4, 0x83, 0xe2, 0xd7, 0x74, 0x6a, 0x16, 0x86, 0x4e, 0xab}, + dt2: fp.Elt{0xdd, 0x58, 0x65, 0xd8, 0x9f, 0xdd, 0x70, 0x7f, 0x0f, 0xec, 0xbd, 0x5c, 0x5c, 0x9b, 0x7e, 0x1b, 0x9f, 0x79, 0x36, 0x1f, 0xfd, 0x79, 0x10, 0x1c, 0x52, 0xf3, 0x22, 0xa4, 0x1f, 0x71, 0x6e, 0x63, 0x14, 0xf4, 0xa7, 0x3e, 0xbe, 0xad, 0x43, 0x30, 0x38, 0x8c, 0x29, 0xc6, 0xcf, 0x50, 0x75, 0x21, 0xe5, 0x78, 0xfd, 0xb0, 0x9a, 0xc4, 0x6d, 0xd4}, + }, + }, + { + { + addYX: fp.Elt{0x7a, 0xa1, 0x38, 0xa6, 0xfd, 0x0e, 0x96, 0xd5, 0x26, 0x76, 0x86, 0x70, 0x80, 0x30, 0xa6, 0x67, 0xeb, 0xf4, 0x39, 0xdb, 0x22, 0xf5, 0x9f, 0x98, 0xe4, 0xb5, 0x3a, 0x0c, 0x59, 0xbf, 0x85, 0xc6, 0xf0, 0x0b, 0x1c, 0x41, 0x38, 0x09, 0x01, 0xdb, 0xd6, 0x3c, 0xb7, 0xf1, 0x08, 0x6b, 0x4b, 0x9e, 0x63, 0x53, 0x83, 0xd3, 0xab, 0xa3, 0x72, 0x0d}, + subYX: fp.Elt{0x84, 0x68, 0x25, 0xe8, 0xe9, 0x8f, 0x91, 0xbf, 0xf7, 0xa4, 0x30, 0xae, 0xea, 0x9f, 0xdd, 0x56, 0x64, 0x09, 0xc9, 0x54, 0x68, 0x4e, 0x33, 0xc5, 0x6f, 0x7b, 0x2d, 0x52, 0x2e, 0x42, 0xbe, 0xbe, 0xf5, 0x64, 0xbf, 0x77, 0x54, 0xdf, 0xb0, 0x10, 0xd2, 0x16, 0x5d, 0xce, 0xaf, 0x9f, 0xfb, 0xa3, 0x63, 0x50, 0xcb, 0xc0, 0xd0, 0x88, 0x44, 0xa3}, + dt2: fp.Elt{0xc3, 0x8b, 0xa5, 0xf1, 0x44, 0xe4, 0x41, 0xcd, 0x75, 0xe3, 0x17, 0x69, 0x5b, 0xb9, 0xbb, 0xee, 0x82, 0xbb, 0xce, 0x57, 0xdf, 0x2a, 0x9c, 0x12, 0xab, 0x66, 0x08, 0x68, 0x05, 0x1b, 0x87, 0xee, 0x5d, 0x1e, 0x18, 0x14, 0x22, 0x4b, 0x99, 0x61, 0x75, 0x28, 0xe7, 0x65, 0x1c, 0x36, 0xb6, 0x18, 0x09, 0xa8, 0xdf, 0xef, 0x30, 0x35, 0xbc, 0x58}, + }, + { + addYX: fp.Elt{0xc5, 0xd3, 0x0e, 0x6f, 0xaf, 0x06, 0x69, 0xc4, 0x07, 0x9e, 0x58, 0x6e, 0x3f, 0x49, 0xd9, 0x0a, 0x3c, 0x2c, 0x37, 0xcd, 0x27, 0x4d, 0x87, 0x91, 0x7a, 0xb0, 0x28, 0xad, 0x2f, 0x68, 0x92, 0x05, 0x97, 0xf1, 0x30, 0x5f, 0x4c, 0x10, 0x20, 0x30, 0xd3, 0x08, 0x3f, 0xc1, 0xc6, 0xb7, 0xb5, 0xd1, 0x71, 0x7b, 0xa8, 0x0a, 0xd8, 0xf5, 0x17, 0xcf}, + subYX: fp.Elt{0x64, 0xd4, 0x8f, 0x91, 0x40, 0xab, 0x6e, 0x1a, 0x62, 0x83, 0xdc, 0xd7, 0x30, 0x1a, 0x4a, 0x2a, 0x4c, 0x54, 0x86, 0x19, 0x81, 0x5d, 0x04, 0x52, 0xa3, 0xca, 0x82, 0x38, 0xdc, 0x1e, 0xf0, 0x7a, 0x78, 0x76, 0x49, 0x4f, 0x71, 0xc4, 0x74, 0x2f, 0xf0, 0x5b, 0x2e, 0x5e, 0xac, 0xef, 0x17, 0xe4, 0x8e, 0x6e, 0xed, 0x43, 0x23, 0x61, 0x99, 0x49}, + dt2: fp.Elt{0x64, 0x90, 0x72, 0x76, 0xf8, 0x2c, 0x7d, 0x57, 0xf9, 0x30, 0x5e, 0x7a, 0x10, 0x74, 0x19, 0x39, 0xd9, 0xaf, 0x0a, 0xf1, 0x43, 0xed, 0x88, 0x9c, 0x8b, 0xdc, 0x9b, 0x1c, 0x90, 0xe7, 0xf7, 0xa3, 0xa5, 0x0d, 0xc6, 0xbc, 0x30, 0xfb, 0x91, 0x1a, 0x51, 0xba, 0x2d, 0xbe, 0x89, 0xdf, 0x1d, 0xdc, 0x53, 0xa8, 0x82, 0x8a, 0xd3, 0x8d, 0x16, 0x68}, + }, + { + addYX: fp.Elt{0xef, 0x5c, 0xe3, 0x74, 0xbf, 0x13, 0x4a, 0xbf, 0x66, 0x73, 0x64, 0xb7, 0xd4, 0xce, 0x98, 0x82, 0x05, 0xfa, 0x98, 0x0c, 0x0a, 0xae, 0xe5, 0x6b, 0x9f, 0xac, 0xbb, 0x6e, 0x1f, 0xcf, 0xff, 0xa6, 0x71, 0x9a, 0xa8, 0x7a, 0x9e, 0x64, 0x1f, 0x20, 0x4a, 0x61, 0xa2, 0xd6, 0x50, 0xe3, 0xba, 0x81, 0x0c, 0x50, 0x59, 0x69, 0x59, 0x15, 0x55, 0xdb}, + subYX: fp.Elt{0xe8, 0x77, 0x4d, 0xe8, 0x66, 0x3d, 0xc1, 0x00, 0x3c, 0xf2, 0x25, 0x00, 0xdc, 0xb2, 0xe5, 0x9b, 0x12, 0x89, 0xf3, 0xd6, 0xea, 0x85, 0x60, 0xfe, 0x67, 0x91, 0xfd, 0x04, 0x7c, 0xe0, 0xf1, 0x86, 0x06, 0x11, 0x66, 0xee, 0xd4, 0xd5, 0xbe, 0x3b, 0x0f, 0xe3, 0x59, 0xb3, 0x4f, 0x00, 0xb6, 0xce, 0x80, 0xc1, 0x61, 0xf7, 0xaf, 0x04, 0x6a, 0x3c}, + dt2: fp.Elt{0x00, 0xd7, 0x32, 0x93, 0x67, 0x70, 0x6f, 0xd7, 0x69, 0xab, 0xb1, 0xd3, 0xdc, 0xd6, 0xa8, 0xdd, 0x35, 0x25, 0xca, 0xd3, 0x8a, 0x6d, 0xce, 0xfb, 0xfd, 0x2b, 0x83, 0xf0, 0xd4, 0xac, 0x66, 0xfb, 0x72, 0x87, 0x7e, 0x55, 0xb7, 0x91, 0x58, 0x10, 0xc3, 0x11, 0x7e, 0x15, 0xfe, 0x7c, 0x55, 0x90, 0xa3, 0x9e, 0xed, 0x9a, 0x7f, 0xa7, 0xb7, 0xeb}, + }, + { + addYX: fp.Elt{0x25, 0x0f, 0xc2, 0x09, 0x9c, 0x10, 0xc8, 0x7c, 0x93, 0xa7, 0xbe, 0xe9, 0x26, 0x25, 0x7c, 0x21, 0xfe, 0xe7, 0x5f, 0x3c, 0x02, 0x83, 0xa7, 0x9e, 0xdf, 0xc0, 0x94, 0x2b, 0x7d, 0x1a, 0xd0, 0x1d, 0xcc, 0x2e, 0x7d, 0xd4, 0x85, 0xe7, 0xc1, 0x15, 0x66, 0xd6, 0xd6, 0x32, 0xb8, 0xf7, 0x63, 0xaa, 0x3b, 0xa5, 0xea, 0x49, 0xad, 0x88, 0x9b, 0x66}, + subYX: fp.Elt{0x09, 0x97, 0x79, 0x36, 0x41, 0x56, 0x9b, 0xdf, 0x15, 0xd8, 0x43, 0x28, 0x17, 0x5b, 0x96, 0xc9, 0xcf, 0x39, 0x1f, 0x13, 0xf7, 0x4d, 0x1d, 0x1f, 0xda, 0x51, 0x56, 0xe7, 0x0a, 0x5a, 0x65, 0xb6, 0x2a, 0x87, 0x49, 0x86, 0xc2, 0x2b, 0xcd, 0xfe, 0x07, 0xf6, 0x4c, 0xe2, 0x1d, 0x9b, 0xd8, 0x82, 0x09, 0x5b, 0x11, 0x10, 0x62, 0x56, 0x89, 0xbd}, + dt2: fp.Elt{0xd9, 0x15, 0x73, 0xf2, 0x96, 0x35, 0x53, 0xb0, 0xe7, 0xa8, 0x0b, 0x93, 0x35, 0x0b, 0x3a, 0x00, 0xf5, 0x18, 0xb1, 0xc3, 0x12, 0x3f, 0x91, 0x17, 0xc1, 0x4c, 0x15, 0x5a, 0x86, 0x92, 0x11, 0xbd, 0x44, 0x40, 0x5a, 0x7b, 0x15, 0x89, 0xba, 0xc1, 0xc1, 0xbc, 0x43, 0x45, 0xe6, 0x52, 0x02, 0x73, 0x0a, 0xd0, 0x2a, 0x19, 0xda, 0x47, 0xa8, 0xff}, + }, + }, +} + +// tabVerif contains the odd multiples of P. The entry T[i] = (2i+1)P, where +// P = phi(G) and G is the generator of the Goldilocks curve, and phi is a +// 4-degree isogeny. +var tabVerif = [1 << (omegaFix - 2)]preTwistPointAffine{ + { /* 1P*/ + addYX: fp.Elt{0x65, 0x4a, 0xdd, 0xdf, 0xb4, 0x79, 0x60, 0xc8, 0xa1, 0x70, 0xb4, 0x3a, 0x1e, 0x0c, 0x9b, 0x19, 0xe5, 0x48, 0x3f, 0xd7, 0x44, 0x18, 0x18, 0x14, 0x14, 0x27, 0x45, 0xd0, 0x2b, 0x24, 0xd5, 0x93, 0xc3, 0x74, 0x4c, 0x50, 0x70, 0x43, 0x26, 0x05, 0x08, 0x24, 0xca, 0x78, 0x30, 0xc1, 0x06, 0x8d, 0xd4, 0x86, 0x42, 0xf0, 0x14, 0xde, 0x08, 0x05}, + subYX: fp.Elt{0x64, 0x4a, 0xdd, 0xdf, 0xb4, 0x79, 0x60, 0xc8, 0xa1, 0x70, 0xb4, 0x3a, 0x1e, 0x0c, 0x9b, 0x19, 0xe5, 0x48, 0x3f, 0xd7, 0x44, 0x18, 0x18, 0x14, 0x14, 0x27, 0x45, 0xd0, 0x2d, 0x24, 0xd5, 0x93, 0xc3, 0x74, 0x4c, 0x50, 0x70, 0x43, 0x26, 0x05, 0x08, 0x24, 0xca, 0x78, 0x30, 0xc1, 0x06, 0x8d, 0xd4, 0x86, 0x42, 0xf0, 0x14, 0xde, 0x08, 0x05}, + dt2: fp.Elt{0x1a, 0x33, 0xea, 0x64, 0x45, 0x1c, 0xdf, 0x17, 0x1d, 0x16, 0x34, 0x28, 0xd6, 0x61, 0x19, 0x67, 0x79, 0xb4, 0x13, 0xcf, 0x3e, 0x7c, 0x0e, 0x72, 0xda, 0xf1, 0x5f, 0xda, 0xe6, 0xcf, 0x42, 0xd3, 0xb6, 0x17, 0xc2, 0x68, 0x13, 0x2d, 0xd9, 0x60, 0x3e, 0xae, 0xf0, 0x5b, 0x96, 0xf0, 0xcd, 0xaf, 0xea, 0xb7, 0x0d, 0x59, 0x16, 0xa7, 0xff, 0x55}, + }, + { /* 3P*/ + addYX: fp.Elt{0xd1, 0xe9, 0xa8, 0x33, 0x20, 0x76, 0x18, 0x08, 0x45, 0x2a, 0xc9, 0x67, 0x2a, 0xc3, 0x15, 0x24, 0xf9, 0x74, 0x21, 0x30, 0x99, 0x59, 0x8b, 0xb2, 0xf0, 0xa4, 0x07, 0xe2, 0x6a, 0x36, 0x8d, 0xd9, 0xd2, 0x4a, 0x7f, 0x73, 0x50, 0x39, 0x3d, 0xaa, 0xa7, 0x51, 0x73, 0x0d, 0x2b, 0x8b, 0x96, 0x47, 0xac, 0x3c, 0x5d, 0xaa, 0x39, 0x9c, 0xcf, 0xd5}, + subYX: fp.Elt{0x6b, 0x11, 0x5d, 0x1a, 0xf9, 0x41, 0x9d, 0xc5, 0x30, 0x3e, 0xad, 0x25, 0x2c, 0x04, 0x45, 0xea, 0xcc, 0x67, 0x07, 0x85, 0xe9, 0xda, 0x0e, 0xb5, 0x40, 0xb7, 0x32, 0xb4, 0x49, 0xdd, 0xff, 0xaa, 0xfc, 0xbb, 0x19, 0xca, 0x8b, 0x79, 0x2b, 0x8f, 0x8d, 0x00, 0x33, 0xc2, 0xad, 0xe9, 0xd3, 0x12, 0xa8, 0xaa, 0x87, 0x62, 0xad, 0x2d, 0xff, 0xa4}, + dt2: fp.Elt{0xb0, 0xaf, 0x3b, 0xea, 0xf0, 0x42, 0x0b, 0x5e, 0x88, 0xd3, 0x98, 0x08, 0x87, 0x59, 0x72, 0x0a, 0xc2, 0xdf, 0xcb, 0x7f, 0x59, 0xb5, 0x4c, 0x63, 0x68, 0xe8, 0x41, 0x38, 0x67, 0x4f, 0xe9, 0xc6, 0xb2, 0x6b, 0x08, 0xa7, 0xf7, 0x0e, 0xcd, 0xea, 0xca, 0x3d, 0xaf, 0x8e, 0xda, 0x4b, 0x2e, 0xd2, 0x88, 0x64, 0x8d, 0xc5, 0x5f, 0x76, 0x0f, 0x3d}, + }, + { /* 5P*/ + addYX: fp.Elt{0xe5, 0x65, 0xc9, 0xe2, 0x75, 0xf0, 0x7d, 0x1a, 0xba, 0xa4, 0x40, 0x4b, 0x93, 0x12, 0xa2, 0x80, 0x95, 0x0d, 0x03, 0x93, 0xe8, 0xa5, 0x4d, 0xe2, 0x3d, 0x81, 0xf5, 0xce, 0xd4, 0x2d, 0x25, 0x59, 0x16, 0x5c, 0xe7, 0xda, 0xc7, 0x45, 0xd2, 0x7e, 0x2c, 0x38, 0xd4, 0x37, 0x64, 0xb2, 0xc2, 0x28, 0xc5, 0x72, 0x16, 0x32, 0x45, 0x36, 0x6f, 0x9f}, + subYX: fp.Elt{0x09, 0xf4, 0x7e, 0xbd, 0x89, 0xdb, 0x19, 0x58, 0xe1, 0x08, 0x00, 0x8a, 0xf4, 0x5f, 0x2a, 0x32, 0x40, 0xf0, 0x2c, 0x3f, 0x5d, 0xe4, 0xfc, 0x89, 0x11, 0x24, 0xb4, 0x2f, 0x97, 0xad, 0xac, 0x8f, 0x19, 0xab, 0xfa, 0x12, 0xe5, 0xf9, 0x50, 0x4e, 0x50, 0x6f, 0x32, 0x30, 0x88, 0xa6, 0xe5, 0x48, 0x28, 0xa2, 0x1b, 0x9f, 0xcd, 0xe2, 0x43, 0x38}, + dt2: fp.Elt{0xa9, 0xcc, 0x53, 0x39, 0x86, 0x02, 0x60, 0x75, 0x34, 0x99, 0x57, 0xbd, 0xfc, 0x5a, 0x8e, 0xce, 0x5e, 0x98, 0x22, 0xd0, 0xa5, 0x24, 0xff, 0x90, 0x28, 0x9f, 0x58, 0xf3, 0x39, 0xe9, 0xba, 0x36, 0x23, 0xfb, 0x7f, 0x41, 0xcc, 0x2b, 0x5a, 0x25, 0x3f, 0x4c, 0x2a, 0xf1, 0x52, 0x6f, 0x2f, 0x07, 0xe3, 0x88, 0x81, 0x77, 0xdd, 0x7c, 0x88, 0x82}, + }, + { /* 7P*/ + addYX: fp.Elt{0xf7, 0xee, 0x88, 0xfd, 0x3a, 0xbf, 0x7e, 0x28, 0x39, 0x23, 0x79, 0xe6, 0x5c, 0x56, 0xcb, 0xb5, 0x48, 0x6a, 0x80, 0x6d, 0x37, 0x60, 0x6c, 0x10, 0x35, 0x49, 0x4b, 0x46, 0x60, 0xd4, 0x79, 0xd4, 0x53, 0xd3, 0x67, 0x88, 0xd0, 0x41, 0xd5, 0x43, 0x85, 0xc8, 0x71, 0xe3, 0x1c, 0xb6, 0xda, 0x22, 0x64, 0x8f, 0x80, 0xac, 0xad, 0x7d, 0xd5, 0x82}, + subYX: fp.Elt{0x92, 0x40, 0xc1, 0x83, 0x21, 0x9b, 0xd5, 0x7d, 0x3f, 0x29, 0xb6, 0x26, 0xef, 0x12, 0xb9, 0x27, 0x39, 0x42, 0x37, 0x97, 0x09, 0x9a, 0x08, 0xe1, 0x68, 0xb6, 0x7a, 0x3f, 0x9f, 0x45, 0xf8, 0x37, 0x19, 0x83, 0x97, 0xe6, 0x73, 0x30, 0x32, 0x35, 0xcf, 0xae, 0x5c, 0x12, 0x68, 0xdf, 0x6e, 0x2b, 0xde, 0x83, 0xa0, 0x44, 0x74, 0x2e, 0x4a, 0xe9}, + dt2: fp.Elt{0xcb, 0x22, 0x0a, 0xda, 0x6b, 0xc1, 0x8a, 0x29, 0xa1, 0xac, 0x8b, 0x5b, 0x8b, 0x32, 0x20, 0xf2, 0x21, 0xae, 0x0c, 0x43, 0xc4, 0xd7, 0x19, 0x37, 0x3d, 0x79, 0x25, 0x98, 0x6c, 0x9c, 0x22, 0x31, 0x2a, 0x55, 0x9f, 0xda, 0x5e, 0xa8, 0x13, 0xdb, 0x8e, 0x2e, 0x16, 0x39, 0xf4, 0x91, 0x6f, 0xec, 0x71, 0x71, 0xc9, 0x10, 0xf2, 0xa4, 0x8f, 0x11}, + }, + { /* 9P*/ + addYX: fp.Elt{0x85, 0xdd, 0x37, 0x62, 0x74, 0x8e, 0x33, 0x5b, 0x25, 0x12, 0x1b, 0xe7, 0xdf, 0x47, 0xe5, 0x12, 0xfd, 0x3a, 0x3a, 0xf5, 0x5d, 0x4c, 0xa2, 0x29, 0x3c, 0x5c, 0x2f, 0xee, 0x18, 0x19, 0x0a, 0x2b, 0xef, 0x67, 0x50, 0x7a, 0x0d, 0x29, 0xae, 0x55, 0x82, 0xcd, 0xd6, 0x41, 0x90, 0xb4, 0x13, 0x31, 0x5d, 0x11, 0xb8, 0xaa, 0x12, 0x86, 0x08, 0xac}, + subYX: fp.Elt{0xcc, 0x37, 0x8d, 0x83, 0x5f, 0xfd, 0xde, 0xd5, 0xf7, 0xf1, 0xae, 0x0a, 0xa7, 0x0b, 0xeb, 0x6d, 0x19, 0x8a, 0xb6, 0x1a, 0x59, 0xd8, 0xff, 0x3c, 0xbc, 0xbc, 0xef, 0x9c, 0xda, 0x7b, 0x75, 0x12, 0xaf, 0x80, 0x8f, 0x2c, 0x3c, 0xaa, 0x0b, 0x17, 0x86, 0x36, 0x78, 0x18, 0xc8, 0x8a, 0xf6, 0xb8, 0x2c, 0x2f, 0x57, 0x2c, 0x62, 0x57, 0xf6, 0x90}, + dt2: fp.Elt{0x83, 0xbc, 0xa2, 0x07, 0xa5, 0x38, 0x96, 0xea, 0xfe, 0x11, 0x46, 0x1d, 0x3b, 0xcd, 0x42, 0xc5, 0xee, 0x67, 0x04, 0x72, 0x08, 0xd8, 0xd9, 0x96, 0x07, 0xf7, 0xac, 0xc3, 0x64, 0xf1, 0x98, 0x2c, 0x55, 0xd7, 0x7d, 0xc8, 0x6c, 0xbd, 0x2c, 0xff, 0x15, 0xd6, 0x6e, 0xb8, 0x17, 0x8e, 0xa8, 0x27, 0x66, 0xb1, 0x73, 0x79, 0x96, 0xff, 0x29, 0x10}, + }, + { /* 11P*/ + addYX: fp.Elt{0x76, 0xcb, 0x9b, 0x0c, 0x5b, 0xfe, 0xe1, 0x2a, 0xdd, 0x6f, 0x6c, 0xdd, 0x6f, 0xb4, 0xc0, 0xc2, 0x1b, 0x4b, 0x38, 0xe8, 0x66, 0x8c, 0x1e, 0x31, 0x63, 0xb9, 0x94, 0xcd, 0xc3, 0x8c, 0x44, 0x25, 0x7b, 0xd5, 0x39, 0x80, 0xfc, 0x01, 0xaa, 0xf7, 0x2a, 0x61, 0x8a, 0x25, 0xd2, 0x5f, 0xc5, 0x66, 0x38, 0xa4, 0x17, 0xcf, 0x3e, 0x11, 0x0f, 0xa3}, + subYX: fp.Elt{0xe0, 0xb6, 0xd1, 0x9c, 0x71, 0x49, 0x2e, 0x7b, 0xde, 0x00, 0xda, 0x6b, 0xf1, 0xec, 0xe6, 0x7a, 0x15, 0x38, 0x71, 0xe9, 0x7b, 0xdb, 0xf8, 0x98, 0xc0, 0x91, 0x2e, 0x53, 0xee, 0x92, 0x87, 0x25, 0xc9, 0xb0, 0xbb, 0x33, 0x15, 0x46, 0x7f, 0xfd, 0x4f, 0x8b, 0x77, 0x05, 0x96, 0xb6, 0xe2, 0x08, 0xdb, 0x0d, 0x09, 0xee, 0x5b, 0xd1, 0x2a, 0x63}, + dt2: fp.Elt{0x8f, 0x7b, 0x57, 0x8c, 0xbf, 0x06, 0x0d, 0x43, 0x21, 0x92, 0x94, 0x2d, 0x6a, 0x38, 0x07, 0x0f, 0xa0, 0xf1, 0xe3, 0xd8, 0x2a, 0xbf, 0x46, 0xc6, 0x9e, 0x1f, 0x8f, 0x2b, 0x46, 0x84, 0x0b, 0x74, 0xed, 0xff, 0xf8, 0xa5, 0x94, 0xae, 0xf1, 0x67, 0xb1, 0x9b, 0xdd, 0x4a, 0xd0, 0xdb, 0xc2, 0xb5, 0x58, 0x49, 0x0c, 0xa9, 0x1d, 0x7d, 0xa9, 0xd3}, + }, + { /* 13P*/ + addYX: fp.Elt{0x73, 0x84, 0x2e, 0x31, 0x1f, 0xdc, 0xed, 0x9f, 0x74, 0xfa, 0xe0, 0x35, 0xb1, 0x85, 0x6a, 0x8d, 0x86, 0xd0, 0xff, 0xd6, 0x08, 0x43, 0x73, 0x1a, 0xd5, 0xf8, 0x43, 0xd4, 0xb3, 0xe5, 0x3f, 0xa8, 0x84, 0x17, 0x59, 0x65, 0x4e, 0xe6, 0xee, 0x54, 0x9c, 0xda, 0x5e, 0x7e, 0x98, 0x29, 0x6d, 0x73, 0x34, 0x1f, 0x99, 0x80, 0x54, 0x54, 0x81, 0x0b}, + subYX: fp.Elt{0xb1, 0xe5, 0xbb, 0x80, 0x22, 0x9c, 0x81, 0x6d, 0xaf, 0x27, 0x65, 0x6f, 0x7e, 0x9c, 0xb6, 0x8d, 0x35, 0x5c, 0x2e, 0x20, 0x48, 0x7a, 0x28, 0xf0, 0x97, 0xfe, 0xb7, 0x71, 0xce, 0xd6, 0xad, 0x3a, 0x81, 0xf6, 0x74, 0x5e, 0xf3, 0xfd, 0x1b, 0xd4, 0x1e, 0x7c, 0xc2, 0xb7, 0xc8, 0xa6, 0xc9, 0x89, 0x03, 0x47, 0xec, 0x24, 0xd6, 0x0e, 0xec, 0x9c}, + dt2: fp.Elt{0x91, 0x0a, 0x43, 0x34, 0x20, 0xc2, 0x64, 0xf7, 0x4e, 0x48, 0xc8, 0xd2, 0x95, 0x83, 0xd1, 0xa4, 0xfb, 0x4e, 0x41, 0x3b, 0x0d, 0xd5, 0x07, 0xd9, 0xf1, 0x13, 0x16, 0x78, 0x54, 0x57, 0xd0, 0xf1, 0x4f, 0x20, 0xac, 0xcf, 0x9c, 0x3b, 0x33, 0x0b, 0x99, 0x54, 0xc3, 0x7f, 0x3e, 0x57, 0x26, 0x86, 0xd5, 0xa5, 0x2b, 0x8d, 0xe3, 0x19, 0x36, 0xf7}, + }, + { /* 15P*/ + addYX: fp.Elt{0x23, 0x69, 0x47, 0x14, 0xf9, 0x9a, 0x50, 0xff, 0x64, 0xd1, 0x50, 0x35, 0xc3, 0x11, 0xd3, 0x19, 0xcf, 0x87, 0xda, 0x30, 0x0b, 0x50, 0xda, 0xc0, 0xe0, 0x25, 0x00, 0xe5, 0x68, 0x93, 0x04, 0xc2, 0xaf, 0xbd, 0x2f, 0x36, 0x5f, 0x47, 0x96, 0x10, 0xa8, 0xbd, 0xe4, 0x88, 0xac, 0x80, 0x52, 0x61, 0x73, 0xe9, 0x63, 0xdd, 0x99, 0xad, 0x20, 0x5b}, + subYX: fp.Elt{0x1b, 0x5e, 0xa2, 0x2a, 0x25, 0x0f, 0x86, 0xc0, 0xb1, 0x2e, 0x0c, 0x13, 0x40, 0x8d, 0xf0, 0xe6, 0x00, 0x55, 0x08, 0xc5, 0x7d, 0xf4, 0xc9, 0x31, 0x25, 0x3a, 0x99, 0x69, 0xdd, 0x67, 0x63, 0x9a, 0xd6, 0x89, 0x2e, 0xa1, 0x19, 0xca, 0x2c, 0xd9, 0x59, 0x5f, 0x5d, 0xc3, 0x6e, 0x62, 0x36, 0x12, 0x59, 0x15, 0xe1, 0xdc, 0xa4, 0xad, 0xc9, 0xd0}, + dt2: fp.Elt{0xbc, 0xea, 0xfc, 0xaf, 0x66, 0x23, 0xb7, 0x39, 0x6b, 0x2a, 0x96, 0xa8, 0x54, 0x43, 0xe9, 0xaa, 0x32, 0x40, 0x63, 0x92, 0x5e, 0xdf, 0x35, 0xc2, 0x9f, 0x24, 0x0c, 0xed, 0xfc, 0xde, 0x73, 0x8f, 0xa7, 0xd5, 0xa3, 0x2b, 0x18, 0x1f, 0xb0, 0xf8, 0xeb, 0x55, 0xd9, 0xc3, 0xfd, 0x28, 0x7c, 0x4f, 0xce, 0x0d, 0xf7, 0xae, 0xc2, 0x83, 0xc3, 0x78}, + }, + { /* 17P*/ + addYX: fp.Elt{0x71, 0xe6, 0x60, 0x93, 0x37, 0xdb, 0x01, 0xa5, 0x4c, 0xba, 0xe8, 0x8e, 0xd5, 0xf9, 0xd3, 0x98, 0xe5, 0xeb, 0xab, 0x3a, 0x15, 0x8b, 0x35, 0x60, 0xbe, 0xe5, 0x9c, 0x2d, 0x10, 0x9b, 0x2e, 0xcf, 0x65, 0x64, 0xea, 0x8f, 0x72, 0xce, 0xf5, 0x18, 0xe5, 0xe2, 0xf0, 0x0e, 0xae, 0x04, 0xec, 0xa0, 0x20, 0x65, 0x63, 0x07, 0xb1, 0x9f, 0x03, 0x97}, + subYX: fp.Elt{0x9e, 0x41, 0x64, 0x30, 0x95, 0x7f, 0x3a, 0x89, 0x7b, 0x0a, 0x79, 0x59, 0x23, 0x9a, 0x3b, 0xfe, 0xa4, 0x13, 0x08, 0xb2, 0x2e, 0x04, 0x50, 0x10, 0x30, 0xcd, 0x2e, 0xa4, 0x91, 0x71, 0x50, 0x36, 0x4a, 0x02, 0xf4, 0x8d, 0xa3, 0x36, 0x1b, 0xf4, 0x52, 0xba, 0x15, 0x04, 0x8b, 0x80, 0x25, 0xd9, 0xae, 0x67, 0x20, 0xd9, 0x88, 0x8f, 0x97, 0xa6}, + dt2: fp.Elt{0xb5, 0xe7, 0x46, 0xbd, 0x55, 0x23, 0xa0, 0x68, 0xc0, 0x12, 0xd9, 0xf1, 0x0a, 0x75, 0xe2, 0xda, 0xf4, 0x6b, 0xca, 0x14, 0xe4, 0x9f, 0x0f, 0xb5, 0x3c, 0xa6, 0xa5, 0xa2, 0x63, 0x94, 0xd1, 0x1c, 0x39, 0x58, 0x57, 0x02, 0x27, 0x98, 0xb6, 0x47, 0xc6, 0x61, 0x4b, 0x5c, 0xab, 0x6f, 0x2d, 0xab, 0xe3, 0xc1, 0x69, 0xf9, 0x12, 0xb0, 0xc8, 0xd5}, + }, + { /* 19P*/ + addYX: fp.Elt{0x19, 0x7d, 0xd5, 0xac, 0x79, 0xa2, 0x82, 0x9b, 0x28, 0x31, 0x22, 0xc0, 0x73, 0x02, 0x76, 0x17, 0x10, 0x70, 0x79, 0x57, 0xc9, 0x84, 0x62, 0x8e, 0x04, 0x04, 0x61, 0x67, 0x08, 0x48, 0xb4, 0x4b, 0xde, 0x53, 0x8c, 0xff, 0x36, 0x1b, 0x62, 0x86, 0x5d, 0xe1, 0x9b, 0xb1, 0xe5, 0xe8, 0x44, 0x64, 0xa1, 0x68, 0x3f, 0xa8, 0x45, 0x52, 0x91, 0xed}, + subYX: fp.Elt{0x42, 0x1a, 0x36, 0x1f, 0x90, 0x15, 0x24, 0x8d, 0x24, 0x80, 0xe6, 0xfe, 0x1e, 0xf0, 0xad, 0xaf, 0x6a, 0x93, 0xf0, 0xa6, 0x0d, 0x5d, 0xea, 0xf6, 0x62, 0x96, 0x7a, 0x05, 0x76, 0x85, 0x74, 0x32, 0xc7, 0xc8, 0x64, 0x53, 0x62, 0xe7, 0x54, 0x84, 0xe0, 0x40, 0x66, 0x19, 0x70, 0x40, 0x95, 0x35, 0x68, 0x64, 0x43, 0xcd, 0xba, 0x29, 0x32, 0xa8}, + dt2: fp.Elt{0x3e, 0xf6, 0xd6, 0xe4, 0x99, 0xeb, 0x20, 0x66, 0x08, 0x2e, 0x26, 0x64, 0xd7, 0x76, 0xf3, 0xb4, 0xc5, 0xa4, 0x35, 0x92, 0xd2, 0x99, 0x70, 0x5a, 0x1a, 0xe9, 0xe9, 0x3d, 0x3b, 0xe1, 0xcd, 0x0e, 0xee, 0x24, 0x13, 0x03, 0x22, 0xd6, 0xd6, 0x72, 0x08, 0x2b, 0xde, 0xfd, 0x93, 0xed, 0x0c, 0x7f, 0x5e, 0x31, 0x22, 0x4d, 0x80, 0x78, 0xc0, 0x48}, + }, + { /* 21P*/ + addYX: fp.Elt{0x8f, 0x72, 0xd2, 0x9e, 0xc4, 0xcd, 0x2c, 0xbf, 0xa8, 0xd3, 0x24, 0x62, 0x28, 0xee, 0x39, 0x0a, 0x19, 0x3a, 0x58, 0xff, 0x21, 0x2e, 0x69, 0x6c, 0x6e, 0x18, 0xd0, 0xcd, 0x61, 0xc1, 0x18, 0x02, 0x5a, 0xe9, 0xe3, 0xef, 0x1f, 0x8e, 0x10, 0xe8, 0x90, 0x2b, 0x48, 0xcd, 0xee, 0x38, 0xbd, 0x3a, 0xca, 0xbc, 0x2d, 0xe2, 0x3a, 0x03, 0x71, 0x02}, + subYX: fp.Elt{0xf8, 0xa4, 0x32, 0x26, 0x66, 0xaf, 0x3b, 0x53, 0xe7, 0xb0, 0x91, 0x92, 0xf5, 0x3c, 0x74, 0xce, 0xf2, 0xdd, 0x68, 0xa9, 0xf4, 0xcd, 0x5f, 0x60, 0xab, 0x71, 0xdf, 0xcd, 0x5c, 0x5d, 0x51, 0x72, 0x3a, 0x96, 0xea, 0xd6, 0xde, 0x54, 0x8e, 0x55, 0x4c, 0x08, 0x4c, 0x60, 0xdd, 0x34, 0xa9, 0x6f, 0xf3, 0x04, 0x02, 0xa8, 0xa6, 0x4e, 0x4d, 0x62}, + dt2: fp.Elt{0x76, 0x4a, 0xae, 0x38, 0x62, 0x69, 0x72, 0xdc, 0xe8, 0x43, 0xbe, 0x1d, 0x61, 0xde, 0x31, 0xc3, 0x42, 0x8f, 0x33, 0x9d, 0xca, 0xc7, 0x9c, 0xec, 0x6a, 0xe2, 0xaa, 0x01, 0x49, 0x78, 0x8d, 0x72, 0x4f, 0x38, 0xea, 0x52, 0xc2, 0xd3, 0xc9, 0x39, 0x71, 0xba, 0xb9, 0x09, 0x9b, 0xa3, 0x7f, 0x45, 0x43, 0x65, 0x36, 0x29, 0xca, 0xe7, 0x5c, 0x5f}, + }, + { /* 23P*/ + addYX: fp.Elt{0x89, 0x42, 0x35, 0x48, 0x6d, 0x74, 0xe5, 0x1f, 0xc3, 0xdd, 0x28, 0x5b, 0x84, 0x41, 0x33, 0x9f, 0x42, 0xf3, 0x1d, 0x5d, 0x15, 0x6d, 0x76, 0x33, 0x36, 0xaf, 0xe9, 0xdd, 0xfa, 0x63, 0x4f, 0x7a, 0x9c, 0xeb, 0x1c, 0x4f, 0x34, 0x65, 0x07, 0x54, 0xbb, 0x4c, 0x8b, 0x62, 0x9d, 0xd0, 0x06, 0x99, 0xb3, 0xe9, 0xda, 0x85, 0x19, 0xb0, 0x3d, 0x3c}, + subYX: fp.Elt{0xbb, 0x99, 0xf6, 0xbf, 0xaf, 0x2c, 0x22, 0x0d, 0x7a, 0xaa, 0x98, 0x6f, 0x01, 0x82, 0x99, 0xcf, 0x88, 0xbd, 0x0e, 0x3a, 0x89, 0xe0, 0x9c, 0x8c, 0x17, 0x20, 0xc4, 0xe0, 0xcf, 0x43, 0x7a, 0xef, 0x0d, 0x9f, 0x87, 0xd4, 0xfb, 0xf2, 0x96, 0xb8, 0x03, 0xe8, 0xcb, 0x5c, 0xec, 0x65, 0x5f, 0x49, 0xa4, 0x7c, 0x85, 0xb4, 0xf6, 0xc7, 0xdb, 0xa3}, + dt2: fp.Elt{0x11, 0xf3, 0x32, 0xa3, 0xa7, 0xb2, 0x7d, 0x51, 0x82, 0x44, 0xeb, 0xa2, 0x7d, 0x72, 0xcb, 0xc6, 0xf6, 0xc7, 0xb2, 0x38, 0x0e, 0x0f, 0x4f, 0x29, 0x00, 0xe4, 0x5b, 0x94, 0x46, 0x86, 0x66, 0xa1, 0x83, 0xb3, 0xeb, 0x15, 0xb6, 0x31, 0x50, 0x28, 0xeb, 0xed, 0x0d, 0x32, 0x39, 0xe9, 0x23, 0x81, 0x99, 0x3e, 0xff, 0x17, 0x4c, 0x11, 0x43, 0xd1}, + }, + { /* 25P*/ + addYX: fp.Elt{0xce, 0xe7, 0xf8, 0x94, 0x8f, 0x96, 0xf8, 0x96, 0xe6, 0x72, 0x20, 0x44, 0x2c, 0xa7, 0xfc, 0xba, 0xc8, 0xe1, 0xbb, 0xc9, 0x16, 0x85, 0xcd, 0x0b, 0xe5, 0xb5, 0x5a, 0x7f, 0x51, 0x43, 0x63, 0x8b, 0x23, 0x8e, 0x1d, 0x31, 0xff, 0x46, 0x02, 0x66, 0xcc, 0x9e, 0x4d, 0xa2, 0xca, 0xe2, 0xc7, 0xfd, 0x22, 0xb1, 0xdb, 0xdf, 0x6f, 0xe6, 0xa5, 0x82}, + subYX: fp.Elt{0xd0, 0xf5, 0x65, 0x40, 0xec, 0x8e, 0x65, 0x42, 0x78, 0xc1, 0x65, 0xe4, 0x10, 0xc8, 0x0b, 0x1b, 0xdd, 0x96, 0x68, 0xce, 0xee, 0x45, 0x55, 0xd8, 0x6e, 0xd3, 0xe6, 0x77, 0x19, 0xae, 0xc2, 0x8d, 0x8d, 0x3e, 0x14, 0x3f, 0x6d, 0x00, 0x2f, 0x9b, 0xd1, 0x26, 0x60, 0x28, 0x0f, 0x3a, 0x47, 0xb3, 0xe6, 0x68, 0x28, 0x24, 0x25, 0xca, 0xc8, 0x06}, + dt2: fp.Elt{0x54, 0xbb, 0x60, 0x92, 0xdb, 0x8f, 0x0f, 0x38, 0xe0, 0xe6, 0xe4, 0xc9, 0xcc, 0x14, 0x62, 0x01, 0xc4, 0x2b, 0x0f, 0xcf, 0xed, 0x7d, 0x8e, 0xa4, 0xd9, 0x73, 0x0b, 0xba, 0x0c, 0xaf, 0x0c, 0xf9, 0xe2, 0xeb, 0x29, 0x2a, 0x53, 0xdf, 0x2c, 0x5a, 0xfa, 0x8f, 0xc1, 0x01, 0xd7, 0xb1, 0x45, 0x73, 0x92, 0x32, 0x83, 0x85, 0x12, 0x74, 0x89, 0x44}, + }, + { /* 27P*/ + addYX: fp.Elt{0x0b, 0x73, 0x3c, 0xc2, 0xb1, 0x2e, 0xe1, 0xa7, 0xf5, 0xc9, 0x7a, 0xfb, 0x3d, 0x2d, 0xac, 0x59, 0xdb, 0xfa, 0x36, 0x11, 0xd1, 0x13, 0x04, 0x51, 0x1d, 0xab, 0x9b, 0x6b, 0x93, 0xfe, 0xda, 0xb0, 0x8e, 0xb4, 0x79, 0x11, 0x21, 0x0f, 0x65, 0xb9, 0xbb, 0x79, 0x96, 0x2a, 0xfd, 0x30, 0xe0, 0xb4, 0x2d, 0x9a, 0x55, 0x25, 0x5d, 0xd4, 0xad, 0x2a}, + subYX: fp.Elt{0x9e, 0xc5, 0x04, 0xfe, 0xec, 0x3c, 0x64, 0x1c, 0xed, 0x95, 0xed, 0xae, 0xaf, 0x5c, 0x6e, 0x08, 0x9e, 0x02, 0x29, 0x59, 0x7e, 0x5f, 0xc4, 0x9a, 0xd5, 0x32, 0x72, 0x86, 0xe1, 0x4e, 0x3c, 0xce, 0x99, 0x69, 0x3b, 0xc4, 0xdd, 0x4d, 0xb7, 0xbb, 0xda, 0x3b, 0x1a, 0x99, 0xaa, 0x62, 0x15, 0xc1, 0xf0, 0xb6, 0x6c, 0xec, 0x56, 0xc1, 0xff, 0x0c}, + dt2: fp.Elt{0x2f, 0xf1, 0x3f, 0x7a, 0x2d, 0x56, 0x19, 0x7f, 0xea, 0xbe, 0x59, 0x2e, 0x13, 0x67, 0x81, 0xfb, 0xdb, 0xc8, 0xa3, 0x1d, 0xd5, 0xe9, 0x13, 0x8b, 0x29, 0xdf, 0xcf, 0x9f, 0xe7, 0xd9, 0x0b, 0x70, 0xd3, 0x15, 0x57, 0x4a, 0xe9, 0x50, 0x12, 0x1b, 0x81, 0x4b, 0x98, 0x98, 0xa8, 0x31, 0x1d, 0x27, 0x47, 0x38, 0xed, 0x57, 0x99, 0x26, 0xb2, 0xee}, + }, + { /* 29P*/ + addYX: fp.Elt{0x1c, 0xb2, 0xb2, 0x67, 0x3b, 0x8b, 0x3d, 0x5a, 0x30, 0x7e, 0x38, 0x7e, 0x3c, 0x3d, 0x28, 0x56, 0x59, 0xd8, 0x87, 0x53, 0x8b, 0xe6, 0x6c, 0x5d, 0xe5, 0x0a, 0x33, 0x10, 0xce, 0xa2, 0x17, 0x0d, 0xe8, 0x76, 0xee, 0x68, 0xa8, 0x72, 0x54, 0xbd, 0xa6, 0x24, 0x94, 0x6e, 0x77, 0xc7, 0x53, 0xb7, 0x89, 0x1c, 0x7a, 0xe9, 0x78, 0x9a, 0x74, 0x5f}, + subYX: fp.Elt{0x76, 0x96, 0x1c, 0xcf, 0x08, 0x55, 0xd8, 0x1e, 0x0d, 0xa3, 0x59, 0x95, 0x32, 0xf4, 0xc2, 0x8e, 0x84, 0x5e, 0x4b, 0x04, 0xda, 0x71, 0xc9, 0x78, 0x52, 0xde, 0x14, 0xb4, 0x31, 0xf4, 0xd4, 0xb8, 0x58, 0xc5, 0x20, 0xe8, 0xdd, 0x15, 0xb5, 0xee, 0xea, 0x61, 0xe0, 0xf5, 0xd6, 0xae, 0x55, 0x59, 0x05, 0x3e, 0xaf, 0x74, 0xac, 0x1f, 0x17, 0x82}, + dt2: fp.Elt{0x59, 0x24, 0xcd, 0xfc, 0x11, 0x7e, 0x85, 0x18, 0x3d, 0x69, 0xf7, 0x71, 0x31, 0x66, 0x98, 0x42, 0x95, 0x00, 0x8c, 0xb2, 0xae, 0x39, 0x7e, 0x85, 0xd6, 0xb0, 0x02, 0xec, 0xce, 0xfc, 0x25, 0xb2, 0xe3, 0x99, 0x8e, 0x5b, 0x61, 0x96, 0x2e, 0x6d, 0x96, 0x57, 0x71, 0xa5, 0x93, 0x41, 0x0e, 0x6f, 0xfd, 0x0a, 0xbf, 0xa9, 0xf7, 0x56, 0xa9, 0x3e}, + }, + { /* 31P*/ + addYX: fp.Elt{0xa2, 0x2e, 0x0c, 0x17, 0x4d, 0xcc, 0x85, 0x2c, 0x18, 0xa0, 0xd2, 0x08, 0xba, 0x11, 0xfa, 0x47, 0x71, 0x86, 0xaf, 0x36, 0x6a, 0xd7, 0xfe, 0xb9, 0xb0, 0x2f, 0x89, 0x98, 0x49, 0x69, 0xf8, 0x6a, 0xad, 0x27, 0x5e, 0x0a, 0x22, 0x60, 0x5e, 0x5d, 0xca, 0x06, 0x51, 0x27, 0x99, 0x29, 0x85, 0x68, 0x98, 0xe1, 0xc4, 0x21, 0x50, 0xa0, 0xe9, 0xc1}, + subYX: fp.Elt{0x4d, 0x70, 0xee, 0x91, 0x92, 0x3f, 0xb7, 0xd3, 0x1d, 0xdb, 0x8d, 0x6e, 0x16, 0xf5, 0x65, 0x7d, 0x5f, 0xb5, 0x6c, 0x59, 0x26, 0x70, 0x4b, 0xf2, 0xfc, 0xe7, 0xdf, 0x86, 0xfe, 0xa5, 0xa7, 0xa6, 0x5d, 0xfb, 0x06, 0xe9, 0xf9, 0xcc, 0xc0, 0x37, 0xcc, 0xd8, 0x09, 0x04, 0xd2, 0xa5, 0x1d, 0xd7, 0xb7, 0xce, 0x92, 0xac, 0x3c, 0xad, 0xfb, 0xae}, + dt2: fp.Elt{0x17, 0xa3, 0x9a, 0xc7, 0x86, 0x2a, 0x51, 0xf7, 0x96, 0x79, 0x49, 0x22, 0x2e, 0x5a, 0x01, 0x5c, 0xb5, 0x95, 0xd4, 0xe8, 0xcb, 0x00, 0xca, 0x2d, 0x55, 0xb6, 0x34, 0x36, 0x0b, 0x65, 0x46, 0xf0, 0x49, 0xfc, 0x87, 0x86, 0xe5, 0xc3, 0x15, 0xdb, 0x32, 0xcd, 0xf2, 0xd3, 0x82, 0x4c, 0xe6, 0x61, 0x8a, 0xaf, 0xd4, 0x9e, 0x0f, 0x5a, 0xf2, 0x81}, + }, + { /* 33P*/ + addYX: fp.Elt{0x88, 0x10, 0xc0, 0xcb, 0xf5, 0x77, 0xae, 0xa5, 0xbe, 0xf6, 0xcd, 0x2e, 0x8b, 0x7e, 0xbd, 0x79, 0x62, 0x4a, 0xeb, 0x69, 0xc3, 0x28, 0xaa, 0x72, 0x87, 0xa9, 0x25, 0x87, 0x46, 0xea, 0x0e, 0x62, 0xa3, 0x6a, 0x1a, 0xe2, 0xba, 0xdc, 0x81, 0x10, 0x33, 0x01, 0xf6, 0x16, 0x89, 0x80, 0xc6, 0xcd, 0xdb, 0xdc, 0xba, 0x0e, 0x09, 0x4a, 0x35, 0x4a}, + subYX: fp.Elt{0x86, 0xb2, 0x2b, 0xd0, 0xb8, 0x4a, 0x6d, 0x66, 0x7b, 0x32, 0xdf, 0x3b, 0x1a, 0x19, 0x1f, 0x63, 0xee, 0x1f, 0x3d, 0x1c, 0x5c, 0x14, 0x60, 0x5b, 0x72, 0x49, 0x07, 0xb1, 0x0d, 0x72, 0xc6, 0x35, 0xf0, 0xbc, 0x5e, 0xda, 0x80, 0x6b, 0x64, 0x5b, 0xe5, 0x34, 0x54, 0x39, 0xdd, 0xe6, 0x3c, 0xcb, 0xe5, 0x29, 0x32, 0x06, 0xc6, 0xb1, 0x96, 0x34}, + dt2: fp.Elt{0x85, 0x86, 0xf5, 0x84, 0x86, 0xe6, 0x77, 0x8a, 0x71, 0x85, 0x0c, 0x4f, 0x81, 0x5b, 0x29, 0x06, 0xb5, 0x2e, 0x26, 0x71, 0x07, 0x78, 0x07, 0xae, 0xbc, 0x95, 0x46, 0xc3, 0x65, 0xac, 0xe3, 0x76, 0x51, 0x7d, 0xd4, 0x85, 0x31, 0xe3, 0x43, 0xf3, 0x1b, 0x7c, 0xf7, 0x6b, 0x2c, 0xf8, 0x1c, 0xbb, 0x8d, 0xca, 0xab, 0x4b, 0xba, 0x7f, 0xa4, 0xe2}, + }, + { /* 35P*/ + addYX: fp.Elt{0x1a, 0xee, 0xe7, 0xa4, 0x8a, 0x9d, 0x53, 0x80, 0xc6, 0xb8, 0x4e, 0xdc, 0x89, 0xe0, 0xc4, 0x2b, 0x60, 0x52, 0x6f, 0xec, 0x81, 0xd2, 0x55, 0x6b, 0x1b, 0x6f, 0x17, 0x67, 0x8e, 0x42, 0x26, 0x4c, 0x65, 0x23, 0x29, 0xc6, 0x7b, 0xcd, 0x9f, 0xad, 0x4b, 0x42, 0xd3, 0x0c, 0x75, 0xc3, 0x8a, 0xf5, 0xbe, 0x9e, 0x55, 0xf7, 0x47, 0x5d, 0xbd, 0x3a}, + subYX: fp.Elt{0x0d, 0xa8, 0x3b, 0xf9, 0xc7, 0x7e, 0xc6, 0x86, 0x94, 0xc0, 0x01, 0xff, 0x27, 0xce, 0x43, 0xac, 0xe5, 0xe1, 0xd2, 0x8d, 0xc1, 0x22, 0x31, 0xbe, 0xe1, 0xaf, 0xf9, 0x4a, 0x78, 0xa1, 0x0c, 0xaa, 0xd4, 0x80, 0xe4, 0x09, 0x8d, 0xfb, 0x1d, 0x52, 0xc8, 0x60, 0x2d, 0xf2, 0xa2, 0x89, 0x02, 0x56, 0x3d, 0x56, 0x27, 0x85, 0xc7, 0xf0, 0x2b, 0x9a}, + dt2: fp.Elt{0x62, 0x7c, 0xc7, 0x6b, 0x2c, 0x9d, 0x0a, 0x7c, 0xe5, 0x50, 0x3c, 0xe6, 0x87, 0x1c, 0x82, 0x30, 0x67, 0x3c, 0x39, 0xb6, 0xa0, 0x31, 0xfb, 0x03, 0x7b, 0xa1, 0x58, 0xdf, 0x12, 0x76, 0x5d, 0x5d, 0x0a, 0x8f, 0x9b, 0x37, 0x32, 0xc3, 0x60, 0x33, 0xea, 0x9f, 0x0a, 0x99, 0xfa, 0x20, 0xd0, 0x33, 0x21, 0xc3, 0x94, 0xd4, 0x86, 0x49, 0x7c, 0x4e}, + }, + { /* 37P*/ + addYX: fp.Elt{0xc7, 0x0c, 0x71, 0xfe, 0x55, 0xd1, 0x95, 0x8f, 0x43, 0xbb, 0x6b, 0x74, 0x30, 0xbd, 0xe8, 0x6f, 0x1c, 0x1b, 0x06, 0x62, 0xf5, 0xfc, 0x65, 0xa0, 0xeb, 0x81, 0x12, 0xc9, 0x64, 0x66, 0x61, 0xde, 0xf3, 0x6d, 0xd4, 0xae, 0x8e, 0xb1, 0x72, 0xe0, 0xcd, 0x37, 0x01, 0x28, 0x52, 0xd7, 0x39, 0x46, 0x0c, 0x55, 0xcf, 0x47, 0x70, 0xef, 0xa1, 0x17}, + subYX: fp.Elt{0x8d, 0x58, 0xde, 0x83, 0x88, 0x16, 0x0e, 0x12, 0x42, 0x03, 0x50, 0x60, 0x4b, 0xdf, 0xbf, 0x95, 0xcc, 0x7d, 0x18, 0x17, 0x7e, 0x31, 0x5d, 0x8a, 0x66, 0xc1, 0xcf, 0x14, 0xea, 0xf4, 0xf4, 0xe5, 0x63, 0x2d, 0x32, 0x86, 0x9b, 0xed, 0x1f, 0x4f, 0x03, 0xaf, 0x33, 0x92, 0xcb, 0xaf, 0x9c, 0x05, 0x0d, 0x47, 0x1b, 0x42, 0xba, 0x13, 0x22, 0x98}, + dt2: fp.Elt{0xb5, 0x48, 0xeb, 0x7d, 0x3d, 0x10, 0x9f, 0x59, 0xde, 0xf8, 0x1c, 0x4f, 0x7d, 0x9d, 0x40, 0x4d, 0x9e, 0x13, 0x24, 0xb5, 0x21, 0x09, 0xb7, 0xee, 0x98, 0x5c, 0x56, 0xbc, 0x5e, 0x2b, 0x78, 0x38, 0x06, 0xac, 0xe3, 0xe0, 0xfa, 0x2e, 0xde, 0x4f, 0xd2, 0xb3, 0xfb, 0x2d, 0x71, 0x84, 0xd1, 0x9d, 0x12, 0x5b, 0x35, 0xc8, 0x03, 0x68, 0x67, 0xc7}, + }, + { /* 39P*/ + addYX: fp.Elt{0xb6, 0x65, 0xfb, 0xa7, 0x06, 0x35, 0xbb, 0xe0, 0x31, 0x8d, 0x91, 0x40, 0x98, 0xab, 0x30, 0xe4, 0xca, 0x12, 0x59, 0x89, 0xed, 0x65, 0x5d, 0x7f, 0xae, 0x69, 0xa0, 0xa4, 0xfa, 0x78, 0xb4, 0xf7, 0xed, 0xae, 0x86, 0x78, 0x79, 0x64, 0x24, 0xa6, 0xd4, 0xe1, 0xf6, 0xd3, 0xa0, 0x89, 0xba, 0x20, 0xf4, 0x54, 0x0d, 0x8f, 0xdb, 0x1a, 0x79, 0xdb}, + subYX: fp.Elt{0xe1, 0x82, 0x0c, 0x4d, 0xde, 0x9f, 0x40, 0xf0, 0xc1, 0xbd, 0x8b, 0xd3, 0x24, 0x03, 0xcd, 0xf2, 0x92, 0x7d, 0xe2, 0x68, 0x7f, 0xf1, 0xbe, 0x69, 0xde, 0x34, 0x67, 0x4c, 0x85, 0x3b, 0xec, 0x98, 0xcc, 0x4d, 0x3e, 0xc0, 0x96, 0x27, 0xe6, 0x75, 0xfc, 0xdf, 0x37, 0xc0, 0x1e, 0x27, 0xe0, 0xf6, 0xc2, 0xbd, 0xbc, 0x3d, 0x9b, 0x39, 0xdc, 0xe2}, + dt2: fp.Elt{0xd8, 0x29, 0xa7, 0x39, 0xe3, 0x9f, 0x2f, 0x0e, 0x4b, 0x24, 0x21, 0x70, 0xef, 0xfd, 0x91, 0xea, 0xbf, 0xe1, 0x72, 0x90, 0xcc, 0xc9, 0x84, 0x0e, 0xad, 0xd5, 0xe6, 0xbb, 0xc5, 0x99, 0x7f, 0xa4, 0xf0, 0x2e, 0xcc, 0x95, 0x64, 0x27, 0x19, 0xd8, 0x4c, 0x27, 0x0d, 0xff, 0xb6, 0x29, 0xe2, 0x6c, 0xfa, 0xbb, 0x4d, 0x9c, 0xbb, 0xaf, 0xa5, 0xec}, + }, + { /* 41P*/ + addYX: fp.Elt{0xd6, 0x33, 0x3f, 0x9f, 0xcf, 0xfd, 0x4c, 0xd1, 0xfe, 0xe5, 0xeb, 0x64, 0x27, 0xae, 0x7a, 0xa2, 0x82, 0x50, 0x6d, 0xaa, 0xe3, 0x5d, 0xe2, 0x48, 0x60, 0xb3, 0x76, 0x04, 0xd9, 0x19, 0xa7, 0xa1, 0x73, 0x8d, 0x38, 0xa9, 0xaf, 0x45, 0xb5, 0xb2, 0x62, 0x9b, 0xf1, 0x35, 0x7b, 0x84, 0x66, 0xeb, 0x06, 0xef, 0xf1, 0xb2, 0x2d, 0x6a, 0x61, 0x15}, + subYX: fp.Elt{0x86, 0x50, 0x42, 0xf7, 0xda, 0x59, 0xb2, 0xcf, 0x0d, 0x3d, 0xee, 0x8e, 0x53, 0x5d, 0xf7, 0x9e, 0x6a, 0x26, 0x2d, 0xc7, 0x8c, 0x8e, 0x18, 0x50, 0x6d, 0xb7, 0x51, 0x4c, 0xa7, 0x52, 0x6e, 0x0e, 0x0a, 0x16, 0x74, 0xb2, 0x81, 0x8b, 0x56, 0x27, 0x22, 0x84, 0xf4, 0x56, 0xc5, 0x06, 0xe1, 0x8b, 0xca, 0x2d, 0xdb, 0x9a, 0xf6, 0x10, 0x9c, 0x51}, + dt2: fp.Elt{0x1f, 0x16, 0xa2, 0x78, 0x96, 0x1b, 0x85, 0x9c, 0x76, 0x49, 0xd4, 0x0f, 0xac, 0xb0, 0xf4, 0xd0, 0x06, 0x2c, 0x7e, 0x6d, 0x6e, 0x8e, 0xc7, 0x9f, 0x18, 0xad, 0xfc, 0x88, 0x0c, 0x0c, 0x09, 0x05, 0x05, 0xa0, 0x79, 0x72, 0x32, 0x72, 0x87, 0x0f, 0x49, 0x87, 0x0c, 0xb4, 0x12, 0xc2, 0x09, 0xf8, 0x9f, 0x30, 0x72, 0xa9, 0x47, 0x13, 0x93, 0x49}, + }, + { /* 43P*/ + addYX: fp.Elt{0xcc, 0xb1, 0x4c, 0xd3, 0xc0, 0x9e, 0x9e, 0x4d, 0x6d, 0x28, 0x0b, 0xa5, 0x94, 0xa7, 0x2e, 0xc2, 0xc7, 0xaf, 0x29, 0x73, 0xc9, 0x68, 0xea, 0x0f, 0x34, 0x37, 0x8d, 0x96, 0x8f, 0x3a, 0x3d, 0x73, 0x1e, 0x6d, 0x9f, 0xcf, 0x8d, 0x83, 0xb5, 0x71, 0xb9, 0xe1, 0x4b, 0x67, 0x71, 0xea, 0xcf, 0x56, 0xe5, 0xeb, 0x72, 0x15, 0x2f, 0x9e, 0xa8, 0xaa}, + subYX: fp.Elt{0xf4, 0x3e, 0x85, 0x1c, 0x1a, 0xef, 0x50, 0xd1, 0xb4, 0x20, 0xb2, 0x60, 0x05, 0x98, 0xfe, 0x47, 0x3b, 0xc1, 0x76, 0xca, 0x2c, 0x4e, 0x5a, 0x42, 0xa3, 0xf7, 0x20, 0xaa, 0x57, 0x39, 0xee, 0x34, 0x1f, 0xe1, 0x68, 0xd3, 0x7e, 0x06, 0xc4, 0x6c, 0xc7, 0x76, 0x2b, 0xe4, 0x1c, 0x48, 0x44, 0xe6, 0xe5, 0x44, 0x24, 0x8d, 0xb3, 0xb6, 0x88, 0x32}, + dt2: fp.Elt{0x18, 0xa7, 0xba, 0xd0, 0x44, 0x6f, 0x33, 0x31, 0x00, 0xf8, 0xf6, 0x12, 0xe3, 0xc5, 0xc7, 0xb5, 0x91, 0x9c, 0x91, 0xb5, 0x75, 0x18, 0x18, 0x8a, 0xab, 0xed, 0x24, 0x11, 0x2e, 0xce, 0x5a, 0x0f, 0x94, 0x5f, 0x2e, 0xca, 0xd3, 0x80, 0xea, 0xe5, 0x34, 0x96, 0x67, 0x8b, 0x6a, 0x26, 0x5e, 0xc8, 0x9d, 0x2c, 0x5e, 0x6c, 0xa2, 0x0c, 0xbf, 0xf0}, + }, + { /* 45P*/ + addYX: fp.Elt{0xb3, 0xbf, 0xa3, 0x85, 0xee, 0xf6, 0x58, 0x02, 0x78, 0xc4, 0x30, 0xd6, 0x57, 0x59, 0x8c, 0x88, 0x08, 0x7c, 0xbc, 0xbe, 0x0a, 0x74, 0xa9, 0xde, 0x69, 0xe7, 0x41, 0xd8, 0xbf, 0x66, 0x8d, 0x3d, 0x28, 0x00, 0x8c, 0x47, 0x65, 0x34, 0xfe, 0x86, 0x9e, 0x6a, 0xf2, 0x41, 0x6a, 0x94, 0xc4, 0x88, 0x75, 0x23, 0x0d, 0x52, 0x69, 0xee, 0x07, 0x89}, + subYX: fp.Elt{0x22, 0x3c, 0xa1, 0x70, 0x58, 0x97, 0x93, 0xbe, 0x59, 0xa8, 0x0b, 0x8a, 0x46, 0x2a, 0x38, 0x1e, 0x08, 0x6b, 0x61, 0x9f, 0xf2, 0x4a, 0x8b, 0x80, 0x68, 0x6e, 0xc8, 0x92, 0x60, 0xf3, 0xc9, 0x89, 0xb2, 0x6d, 0x63, 0xb0, 0xeb, 0x83, 0x15, 0x63, 0x0e, 0x64, 0xbb, 0xb8, 0xfe, 0xb4, 0x81, 0x90, 0x01, 0x28, 0x10, 0xb9, 0x74, 0x6e, 0xde, 0xa4}, + dt2: fp.Elt{0x1a, 0x23, 0x45, 0xa8, 0x6f, 0x4e, 0xa7, 0x4a, 0x0c, 0xeb, 0xb0, 0x43, 0xf9, 0xef, 0x99, 0x60, 0x5b, 0xdb, 0x66, 0xc0, 0x86, 0x71, 0x43, 0xb1, 0x22, 0x7b, 0x1c, 0xe7, 0x8d, 0x09, 0x1d, 0x83, 0x76, 0x9c, 0xd3, 0x5a, 0xdd, 0x42, 0xd9, 0x2f, 0x2d, 0xba, 0x7a, 0xc2, 0xd9, 0x6b, 0xd4, 0x7a, 0xf1, 0xd5, 0x5f, 0x6b, 0x85, 0xbf, 0x0b, 0xf1}, + }, + { /* 47P*/ + addYX: fp.Elt{0xb2, 0x83, 0xfa, 0x1f, 0xd2, 0xce, 0xb6, 0xf2, 0x2d, 0xea, 0x1b, 0xe5, 0x29, 0xa5, 0x72, 0xf9, 0x25, 0x48, 0x4e, 0xf2, 0x50, 0x1b, 0x39, 0xda, 0x34, 0xc5, 0x16, 0x13, 0xb4, 0x0c, 0xa1, 0x00, 0x79, 0x7a, 0xf5, 0x8b, 0xf3, 0x70, 0x14, 0xb6, 0xfc, 0x9a, 0x47, 0x68, 0x1e, 0x42, 0x70, 0x64, 0x2a, 0x84, 0x3e, 0x3d, 0x20, 0x58, 0xf9, 0x6a}, + subYX: fp.Elt{0xd9, 0xee, 0xc0, 0xc4, 0xf5, 0xc2, 0x86, 0xaf, 0x45, 0xd2, 0xd2, 0x87, 0x1b, 0x64, 0xd5, 0xe0, 0x8c, 0x44, 0x00, 0x4f, 0x43, 0x89, 0x04, 0x48, 0x4a, 0x0b, 0xca, 0x94, 0x06, 0x2f, 0x23, 0x5b, 0x6c, 0x8d, 0x44, 0x66, 0x53, 0xf5, 0x5a, 0x20, 0x72, 0x28, 0x58, 0x84, 0xcc, 0x73, 0x22, 0x5e, 0xd1, 0x0b, 0x56, 0x5e, 0x6a, 0xa3, 0x11, 0x91}, + dt2: fp.Elt{0x6e, 0x9f, 0x88, 0xa8, 0x68, 0x2f, 0x12, 0x37, 0x88, 0xfc, 0x92, 0x8f, 0x24, 0xeb, 0x5b, 0x2a, 0x2a, 0xd0, 0x14, 0x40, 0x4c, 0xa9, 0xa4, 0x03, 0x0c, 0x45, 0x48, 0x13, 0xe8, 0xa6, 0x37, 0xab, 0xc0, 0x06, 0x38, 0x6c, 0x96, 0x73, 0x40, 0x6c, 0xc6, 0xea, 0x56, 0xc6, 0xe9, 0x1a, 0x69, 0xeb, 0x7a, 0xd1, 0x33, 0x69, 0x58, 0x2b, 0xea, 0x2f}, + }, + { /* 49P*/ + addYX: fp.Elt{0x58, 0xa8, 0x05, 0x41, 0x00, 0x9d, 0xaa, 0xd9, 0x98, 0xcf, 0xb9, 0x41, 0xb5, 0x4a, 0x8d, 0xe2, 0xe7, 0xc0, 0x72, 0xef, 0xc8, 0x28, 0x6b, 0x68, 0x9d, 0xc9, 0xdf, 0x05, 0x8b, 0xd0, 0x04, 0x74, 0x79, 0x45, 0x52, 0x05, 0xa3, 0x6e, 0x35, 0x3a, 0xe3, 0xef, 0xb2, 0xdc, 0x08, 0x6f, 0x4e, 0x76, 0x85, 0x67, 0xba, 0x23, 0x8f, 0xdd, 0xaf, 0x09}, + subYX: fp.Elt{0xb4, 0x38, 0xc8, 0xff, 0x4f, 0x65, 0x2a, 0x7e, 0xad, 0xb1, 0xc6, 0xb9, 0x3d, 0xd6, 0xf7, 0x14, 0xcf, 0xf6, 0x98, 0x75, 0xbb, 0x47, 0x83, 0x90, 0xe7, 0xe1, 0xf6, 0x14, 0x99, 0x7e, 0xfa, 0xe4, 0x77, 0x24, 0xe3, 0xe7, 0xf0, 0x1e, 0xdb, 0x27, 0x4e, 0x16, 0x04, 0xf2, 0x08, 0x52, 0xfc, 0xec, 0x55, 0xdb, 0x2e, 0x67, 0xe1, 0x94, 0x32, 0x89}, + dt2: fp.Elt{0x00, 0xad, 0x03, 0x35, 0x1a, 0xb1, 0x88, 0xf0, 0xc9, 0x11, 0xe4, 0x12, 0x52, 0x61, 0xfd, 0x8a, 0x1b, 0x6a, 0x0a, 0x4c, 0x42, 0x46, 0x22, 0x0e, 0xa5, 0xf9, 0xe2, 0x50, 0xf2, 0xb2, 0x1f, 0x20, 0x78, 0x10, 0xf6, 0xbf, 0x7f, 0x0c, 0x9c, 0xad, 0x40, 0x8b, 0x82, 0xd4, 0xba, 0x69, 0x09, 0xac, 0x4b, 0x6d, 0xc4, 0x49, 0x17, 0x81, 0x57, 0x3b}, + }, + { /* 51P*/ + addYX: fp.Elt{0x0d, 0xfe, 0xb4, 0x35, 0x11, 0xbd, 0x1d, 0x6b, 0xc2, 0xc5, 0x3b, 0xd2, 0x23, 0x2c, 0x72, 0xe3, 0x48, 0xb1, 0x48, 0x73, 0xfb, 0xa3, 0x21, 0x6e, 0xc0, 0x09, 0x69, 0xac, 0xe1, 0x60, 0xbc, 0x24, 0x03, 0x99, 0x63, 0x0a, 0x00, 0xf0, 0x75, 0xf6, 0x92, 0xc5, 0xd6, 0xdb, 0x51, 0xd4, 0x7d, 0xe6, 0xf4, 0x11, 0x79, 0xd7, 0xc3, 0xaf, 0x48, 0xd0}, + subYX: fp.Elt{0xf4, 0x4f, 0xaf, 0x31, 0xe3, 0x10, 0x89, 0x95, 0xf0, 0x8a, 0xf6, 0x31, 0x9f, 0x48, 0x02, 0xba, 0x42, 0x2b, 0x3c, 0x22, 0x8b, 0xcc, 0x12, 0x98, 0x6e, 0x7a, 0x64, 0x3a, 0xc4, 0xca, 0x32, 0x2a, 0x72, 0xf8, 0x2c, 0xcf, 0x78, 0x5e, 0x7a, 0x75, 0x6e, 0x72, 0x46, 0x48, 0x62, 0x28, 0xac, 0x58, 0x1a, 0xc6, 0x59, 0x88, 0x2a, 0x44, 0x9e, 0x83}, + dt2: fp.Elt{0xb3, 0xde, 0x36, 0xfd, 0xeb, 0x1b, 0xd4, 0x24, 0x1b, 0x08, 0x8c, 0xfe, 0xa9, 0x41, 0xa1, 0x64, 0xf2, 0x6d, 0xdb, 0xf9, 0x94, 0xae, 0x86, 0x71, 0xab, 0x10, 0xbf, 0xa3, 0xb2, 0xa0, 0xdf, 0x10, 0x8c, 0x74, 0xce, 0xb3, 0xfc, 0xdb, 0xba, 0x15, 0xf6, 0x91, 0x7a, 0x9c, 0x36, 0x1e, 0x45, 0x07, 0x3c, 0xec, 0x1a, 0x61, 0x26, 0x93, 0xe3, 0x50}, + }, + { /* 53P*/ + addYX: fp.Elt{0xc5, 0x50, 0xc5, 0x83, 0xb0, 0xbd, 0xd9, 0xf6, 0x6d, 0x15, 0x5e, 0xc1, 0x1a, 0x33, 0xa0, 0xce, 0x13, 0x70, 0x3b, 0xe1, 0x31, 0xc6, 0xc4, 0x02, 0xec, 0x8c, 0xd5, 0x9c, 0x97, 0xd3, 0x12, 0xc4, 0xa2, 0xf9, 0xd5, 0xfb, 0x22, 0x69, 0x94, 0x09, 0x2f, 0x59, 0xce, 0xdb, 0xf2, 0xf2, 0x00, 0xe0, 0xa9, 0x08, 0x44, 0x2e, 0x8b, 0x6b, 0xf5, 0xb3}, + subYX: fp.Elt{0x90, 0xdd, 0xec, 0xa2, 0x65, 0xb7, 0x61, 0xbc, 0xaa, 0x70, 0xa2, 0x15, 0xd8, 0xb0, 0xf8, 0x8e, 0x23, 0x3d, 0x9f, 0x46, 0xa3, 0x29, 0x20, 0xd1, 0xa1, 0x15, 0x81, 0xc6, 0xb6, 0xde, 0xbe, 0x60, 0x63, 0x24, 0xac, 0x15, 0xfb, 0xeb, 0xd3, 0xea, 0x57, 0x13, 0x86, 0x38, 0x1e, 0x22, 0xf4, 0x8c, 0x5d, 0xaf, 0x1b, 0x27, 0x21, 0x4f, 0xa3, 0x63}, + dt2: fp.Elt{0x07, 0x15, 0x87, 0xc4, 0xfd, 0xa1, 0x97, 0x7a, 0x07, 0x1f, 0x56, 0xcc, 0xe3, 0x6a, 0x01, 0x90, 0xce, 0xf9, 0xfa, 0x50, 0xb2, 0xe0, 0x87, 0x8b, 0x6c, 0x63, 0x6c, 0xf6, 0x2a, 0x09, 0xef, 0xef, 0xd2, 0x31, 0x40, 0x25, 0xf6, 0x84, 0xcb, 0xe0, 0xc4, 0x23, 0xc1, 0xcb, 0xe2, 0x02, 0x83, 0x2d, 0xed, 0x74, 0x74, 0x8b, 0xf8, 0x7c, 0x81, 0x18}, + }, + { /* 55P*/ + addYX: fp.Elt{0x9e, 0xe5, 0x59, 0x95, 0x63, 0x2e, 0xac, 0x8b, 0x03, 0x3c, 0xc1, 0x8e, 0xe1, 0x5b, 0x56, 0x3c, 0x16, 0x41, 0xe4, 0xc2, 0x60, 0x0c, 0x6d, 0x65, 0x9f, 0xfc, 0x27, 0x68, 0x43, 0x44, 0x05, 0x12, 0x6c, 0xda, 0x04, 0xef, 0xcf, 0xcf, 0xdc, 0x0a, 0x1a, 0x7f, 0x12, 0xd3, 0xeb, 0x02, 0xb6, 0x04, 0xca, 0xd6, 0xcb, 0xf0, 0x22, 0xba, 0x35, 0x6d}, + subYX: fp.Elt{0x09, 0x6d, 0xf9, 0x64, 0x4c, 0xe6, 0x41, 0xff, 0x01, 0x4d, 0xce, 0x1e, 0xfa, 0x38, 0xa2, 0x25, 0x62, 0xff, 0x03, 0x39, 0x18, 0x91, 0xbb, 0x9d, 0xce, 0x02, 0xf0, 0xf1, 0x3c, 0x55, 0x18, 0xa9, 0xab, 0x4d, 0xd2, 0x35, 0xfd, 0x8d, 0xa9, 0xb2, 0xad, 0xb7, 0x06, 0x6e, 0xc6, 0x69, 0x49, 0xd6, 0x98, 0x98, 0x0b, 0x22, 0x81, 0x6b, 0xbd, 0xa0}, + dt2: fp.Elt{0x22, 0xf4, 0x85, 0x5d, 0x2b, 0xf1, 0x55, 0xa5, 0xd6, 0x27, 0x86, 0x57, 0x12, 0x1f, 0x16, 0x0a, 0x5a, 0x9b, 0xf2, 0x38, 0xb6, 0x28, 0xd8, 0x99, 0x0c, 0x89, 0x1d, 0x7f, 0xca, 0x21, 0x17, 0x1a, 0x0b, 0x02, 0x5f, 0x77, 0x2f, 0x73, 0x30, 0x7c, 0xc8, 0xd7, 0x2b, 0xcc, 0xe7, 0xf3, 0x21, 0xac, 0x53, 0xa7, 0x11, 0x5d, 0xd8, 0x1d, 0x9b, 0xf5}, + }, + { /* 57P*/ + addYX: fp.Elt{0x94, 0x63, 0x5d, 0xef, 0xfd, 0x6d, 0x25, 0x4e, 0x6d, 0x29, 0x03, 0xed, 0x24, 0x28, 0x27, 0x57, 0x47, 0x3e, 0x6a, 0x1a, 0xfe, 0x37, 0xee, 0x5f, 0x83, 0x29, 0x14, 0xfd, 0x78, 0x25, 0x8a, 0xe1, 0x02, 0x38, 0xd8, 0xca, 0x65, 0x55, 0x40, 0x7d, 0x48, 0x2c, 0x7c, 0x7e, 0x60, 0xb6, 0x0c, 0x6d, 0xf7, 0xe8, 0xb3, 0x62, 0x53, 0xd6, 0x9c, 0x2b}, + subYX: fp.Elt{0x47, 0x25, 0x70, 0x62, 0xf5, 0x65, 0x93, 0x62, 0x08, 0xac, 0x59, 0x66, 0xdb, 0x08, 0xd9, 0x1a, 0x19, 0xaf, 0xf4, 0xef, 0x02, 0xa2, 0x78, 0xa9, 0x55, 0x1c, 0xfa, 0x08, 0x11, 0xcb, 0xa3, 0x71, 0x74, 0xb1, 0x62, 0xe7, 0xc7, 0xf3, 0x5a, 0xb5, 0x8b, 0xd4, 0xf6, 0x10, 0x57, 0x79, 0x72, 0x2f, 0x13, 0x86, 0x7b, 0x44, 0x5f, 0x48, 0xfd, 0x88}, + dt2: fp.Elt{0x10, 0x02, 0xcd, 0x05, 0x9a, 0xc3, 0x32, 0x6d, 0x10, 0x3a, 0x74, 0xba, 0x06, 0xc4, 0x3b, 0x34, 0xbc, 0x36, 0xed, 0xa3, 0xba, 0x9a, 0xdb, 0x6d, 0xd4, 0x69, 0x99, 0x97, 0xd0, 0xe4, 0xdd, 0xf5, 0xd4, 0x7c, 0xd3, 0x4e, 0xab, 0xd1, 0x3b, 0xbb, 0xe9, 0xc7, 0x6a, 0x94, 0x25, 0x61, 0xf0, 0x06, 0xc5, 0x12, 0xa8, 0x86, 0xe5, 0x35, 0x46, 0xeb}, + }, + { /* 59P*/ + addYX: fp.Elt{0x9e, 0x95, 0x11, 0xc6, 0xc7, 0xe8, 0xee, 0x5a, 0x26, 0xa0, 0x72, 0x72, 0x59, 0x91, 0x59, 0x16, 0x49, 0x99, 0x7e, 0xbb, 0xd7, 0x15, 0xb4, 0xf2, 0x40, 0xf9, 0x5a, 0x4d, 0xc8, 0xa0, 0xe2, 0x34, 0x7b, 0x34, 0xf3, 0x99, 0xbf, 0xa9, 0xf3, 0x79, 0xc1, 0x1a, 0x0c, 0xf4, 0x86, 0x74, 0x4e, 0xcb, 0xbc, 0x90, 0xad, 0xb6, 0x51, 0x6d, 0xaa, 0x33}, + subYX: fp.Elt{0x9f, 0xd1, 0xc5, 0xa2, 0x6c, 0x24, 0x88, 0x15, 0x71, 0x68, 0xf6, 0x07, 0x45, 0x02, 0xc4, 0x73, 0x7e, 0x75, 0x87, 0xca, 0x7c, 0xf0, 0x92, 0x00, 0x75, 0xd6, 0x5a, 0xdd, 0xe0, 0x64, 0x16, 0x9d, 0x62, 0x80, 0x33, 0x9f, 0xf4, 0x8e, 0x1a, 0x15, 0x1c, 0xd3, 0x0f, 0x4d, 0x4f, 0x62, 0x2d, 0xd7, 0xa5, 0x77, 0xe3, 0xea, 0xf0, 0xfb, 0x1a, 0xdb}, + dt2: fp.Elt{0x6a, 0xa2, 0xb1, 0xaa, 0xfb, 0x5a, 0x32, 0x4e, 0xff, 0x47, 0x06, 0xd5, 0x9a, 0x4f, 0xce, 0x83, 0x5b, 0x82, 0x34, 0x3e, 0x47, 0xb8, 0xf8, 0xe9, 0x7c, 0x67, 0x69, 0x8d, 0x9c, 0xb7, 0xde, 0x57, 0xf4, 0x88, 0x41, 0x56, 0x0c, 0x87, 0x1e, 0xc9, 0x2f, 0x54, 0xbf, 0x5c, 0x68, 0x2c, 0xd9, 0xc4, 0xef, 0x53, 0x73, 0x1e, 0xa6, 0x38, 0x02, 0x10}, + }, + { /* 61P*/ + addYX: fp.Elt{0x08, 0x80, 0x4a, 0xc9, 0xb7, 0xa8, 0x88, 0xd9, 0xfc, 0x6a, 0xc0, 0x3e, 0xc2, 0x33, 0x4d, 0x2b, 0x2a, 0xa3, 0x6d, 0x72, 0x3e, 0xdc, 0x34, 0x68, 0x08, 0xbf, 0x27, 0xef, 0xf4, 0xff, 0xe2, 0x0c, 0x31, 0x0c, 0xa2, 0x0a, 0x1f, 0x65, 0xc1, 0x4c, 0x61, 0xd3, 0x1b, 0xbc, 0x25, 0xb1, 0xd0, 0xd4, 0x89, 0xb2, 0x53, 0xfb, 0x43, 0xa5, 0xaf, 0x04}, + subYX: fp.Elt{0xe3, 0xe1, 0x37, 0xad, 0x58, 0xa9, 0x55, 0x81, 0xee, 0x64, 0x21, 0xb9, 0xf5, 0x4c, 0x35, 0xea, 0x4a, 0xd3, 0x26, 0xaa, 0x90, 0xd4, 0x60, 0x46, 0x09, 0x4b, 0x4a, 0x62, 0xf9, 0xcd, 0xe1, 0xee, 0xbb, 0xc2, 0x09, 0x0b, 0xb0, 0x96, 0x8e, 0x43, 0x77, 0xaf, 0x25, 0x20, 0x5e, 0x47, 0xe4, 0x1d, 0x50, 0x69, 0x74, 0x08, 0xd7, 0xb9, 0x90, 0x13}, + dt2: fp.Elt{0x51, 0x91, 0x95, 0x64, 0x03, 0x16, 0xfd, 0x6e, 0x26, 0x94, 0x6b, 0x61, 0xe7, 0xd9, 0xe0, 0x4a, 0x6d, 0x7c, 0xfa, 0xc0, 0xe2, 0x43, 0x23, 0x53, 0x70, 0xf5, 0x6f, 0x73, 0x8b, 0x81, 0xb0, 0x0c, 0xee, 0x2e, 0x46, 0xf2, 0x8d, 0xa6, 0xfb, 0xb5, 0x1c, 0x33, 0xbf, 0x90, 0x59, 0xc9, 0x7c, 0xb8, 0x6f, 0xad, 0x75, 0x02, 0x90, 0x8e, 0x59, 0x75}, + }, + { /* 63P*/ + addYX: fp.Elt{0x36, 0x4d, 0x77, 0x04, 0xb8, 0x7d, 0x4a, 0xd1, 0xc5, 0xbb, 0x7b, 0x50, 0x5f, 0x8d, 0x9d, 0x62, 0x0f, 0x66, 0x71, 0xec, 0x87, 0xc5, 0x80, 0x82, 0xc8, 0xf4, 0x6a, 0x94, 0x92, 0x5b, 0xb0, 0x16, 0x9b, 0xb2, 0xc9, 0x6f, 0x2b, 0x2d, 0xee, 0x95, 0x73, 0x2e, 0xc2, 0x1b, 0xc5, 0x55, 0x36, 0x86, 0x24, 0xf8, 0x20, 0x05, 0x0d, 0x93, 0xd7, 0x76}, + subYX: fp.Elt{0x7f, 0x01, 0xeb, 0x2e, 0x48, 0x4d, 0x1d, 0xf1, 0x06, 0x7e, 0x7c, 0x2a, 0x43, 0xbf, 0x28, 0xac, 0xe9, 0x58, 0x13, 0xc8, 0xbf, 0x8e, 0xc0, 0xef, 0xe8, 0x4f, 0x46, 0x8a, 0xe7, 0xc0, 0xf6, 0x0f, 0x0a, 0x03, 0x48, 0x91, 0x55, 0x39, 0x2a, 0xe3, 0xdc, 0xf6, 0x22, 0x9d, 0x4d, 0x71, 0x55, 0x68, 0x25, 0x6e, 0x95, 0x52, 0xee, 0x4c, 0xd9, 0x01}, + dt2: fp.Elt{0xac, 0x33, 0x3f, 0x7c, 0x27, 0x35, 0x15, 0x91, 0x33, 0x8d, 0xf9, 0xc4, 0xf4, 0xf3, 0x90, 0x09, 0x75, 0x69, 0x62, 0x9f, 0x61, 0x35, 0x83, 0x92, 0x04, 0xef, 0x96, 0x38, 0x80, 0x9e, 0x88, 0xb3, 0x67, 0x95, 0xbe, 0x79, 0x3c, 0x35, 0xd8, 0xdc, 0xb2, 0x3e, 0x2d, 0xe6, 0x46, 0xbe, 0x81, 0xf3, 0x32, 0x0e, 0x37, 0x23, 0x75, 0x2a, 0x3d, 0xa0}, + }, +} diff --git a/vendor/github.com/cloudflare/circl/ecc/goldilocks/twist_basemult.go b/vendor/github.com/cloudflare/circl/ecc/goldilocks/twist_basemult.go new file mode 100644 index 0000000000000..f6ac5edbbbccc --- /dev/null +++ b/vendor/github.com/cloudflare/circl/ecc/goldilocks/twist_basemult.go @@ -0,0 +1,62 @@ +package goldilocks + +import ( + "crypto/subtle" + + mlsb "github.com/cloudflare/circl/math/mlsbset" +) + +const ( + // MLSBRecoding parameters + fxT = 448 + fxV = 2 + fxW = 3 + fx2w1 = 1 << (uint(fxW) - 1) +) + +// ScalarBaseMult returns kG where G is the generator point. +func (e twistCurve) ScalarBaseMult(k *Scalar) *twistPoint { + m, err := mlsb.New(fxT, fxV, fxW) + if err != nil { + panic(err) + } + if m.IsExtended() { + panic("not extended") + } + + var isZero int + if k.IsZero() { + isZero = 1 + } + subtle.ConstantTimeCopy(isZero, k[:], order[:]) + + minusK := *k + isEven := 1 - int(k[0]&0x1) + minusK.Neg() + subtle.ConstantTimeCopy(isEven, k[:], minusK[:]) + c, err := m.Encode(k[:]) + if err != nil { + panic(err) + } + + gP := c.Exp(groupMLSB{}) + P := gP.(*twistPoint) + P.cneg(uint(isEven)) + return P +} + +type groupMLSB struct{} + +func (e groupMLSB) ExtendedEltP() mlsb.EltP { return nil } +func (e groupMLSB) Sqr(x mlsb.EltG) { x.(*twistPoint).Double() } +func (e groupMLSB) Mul(x mlsb.EltG, y mlsb.EltP) { x.(*twistPoint).mixAddZ1(y.(*preTwistPointAffine)) } +func (e groupMLSB) Identity() mlsb.EltG { return twistCurve{}.Identity() } +func (e groupMLSB) NewEltP() mlsb.EltP { return &preTwistPointAffine{} } +func (e groupMLSB) Lookup(a mlsb.EltP, v uint, s, u int32) { + Tabj := &tabFixMult[v] + P := a.(*preTwistPointAffine) + for k := range Tabj { + P.cmov(&Tabj[k], uint(subtle.ConstantTimeEq(int32(k), u))) + } + P.cneg(int(s >> 31)) +} diff --git a/vendor/github.com/cloudflare/circl/internal/conv/conv.go b/vendor/github.com/cloudflare/circl/internal/conv/conv.go new file mode 100644 index 0000000000000..649a8e931d6fc --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/conv/conv.go @@ -0,0 +1,140 @@ +package conv + +import ( + "encoding/binary" + "fmt" + "math/big" + "strings" +) + +// BytesLe2Hex returns an hexadecimal string of a number stored in a +// little-endian order slice x. +func BytesLe2Hex(x []byte) string { + b := &strings.Builder{} + b.Grow(2*len(x) + 2) + fmt.Fprint(b, "0x") + if len(x) == 0 { + fmt.Fprint(b, "00") + } + for i := len(x) - 1; i >= 0; i-- { + fmt.Fprintf(b, "%02x", x[i]) + } + return b.String() +} + +// BytesLe2BigInt converts a little-endian slice x into a big-endian +// math/big.Int. +func BytesLe2BigInt(x []byte) *big.Int { + n := len(x) + b := new(big.Int) + if len(x) > 0 { + y := make([]byte, n) + for i := 0; i < n; i++ { + y[n-1-i] = x[i] + } + b.SetBytes(y) + } + return b +} + +// BytesBe2Uint64Le converts a big-endian slice x to a little-endian slice of uint64. +func BytesBe2Uint64Le(x []byte) []uint64 { + l := len(x) + z := make([]uint64, (l+7)/8) + blocks := l / 8 + for i := 0; i < blocks; i++ { + z[i] = binary.BigEndian.Uint64(x[l-8*(i+1):]) + } + remBytes := l % 8 + for i := 0; i < remBytes; i++ { + z[blocks] |= uint64(x[l-1-8*blocks-i]) << uint(8*i) + } + return z +} + +// BigInt2BytesLe stores a positive big.Int number x into a little-endian slice z. +// The slice is modified if the bitlength of x <= 8*len(z) (padding with zeros). +// If x does not fit in the slice or is negative, z is not modified. +func BigInt2BytesLe(z []byte, x *big.Int) { + xLen := (x.BitLen() + 7) >> 3 + zLen := len(z) + if zLen >= xLen && x.Sign() >= 0 { + y := x.Bytes() + for i := 0; i < xLen; i++ { + z[i] = y[xLen-1-i] + } + for i := xLen; i < zLen; i++ { + z[i] = 0 + } + } +} + +// Uint64Le2BigInt converts a little-endian slice x into a big number. +func Uint64Le2BigInt(x []uint64) *big.Int { + n := len(x) + b := new(big.Int) + var bi big.Int + for i := n - 1; i >= 0; i-- { + bi.SetUint64(x[i]) + b.Lsh(b, 64) + b.Add(b, &bi) + } + return b +} + +// Uint64Le2BytesLe converts a little-endian slice x to a little-endian slice of bytes. +func Uint64Le2BytesLe(x []uint64) []byte { + b := make([]byte, 8*len(x)) + n := len(x) + for i := 0; i < n; i++ { + binary.LittleEndian.PutUint64(b[i*8:], x[i]) + } + return b +} + +// Uint64Le2BytesBe converts a little-endian slice x to a big-endian slice of bytes. +func Uint64Le2BytesBe(x []uint64) []byte { + b := make([]byte, 8*len(x)) + n := len(x) + for i := 0; i < n; i++ { + binary.BigEndian.PutUint64(b[i*8:], x[n-1-i]) + } + return b +} + +// Uint64Le2Hex returns an hexadecimal string of a number stored in a +// little-endian order slice x. +func Uint64Le2Hex(x []uint64) string { + b := new(strings.Builder) + b.Grow(16*len(x) + 2) + fmt.Fprint(b, "0x") + if len(x) == 0 { + fmt.Fprint(b, "00") + } + for i := len(x) - 1; i >= 0; i-- { + fmt.Fprintf(b, "%016x", x[i]) + } + return b.String() +} + +// BigInt2Uint64Le stores a positive big.Int number x into a little-endian slice z. +// The slice is modified if the bitlength of x <= 8*len(z) (padding with zeros). +// If x does not fit in the slice or is negative, z is not modified. +func BigInt2Uint64Le(z []uint64, x *big.Int) { + xLen := (x.BitLen() + 63) >> 6 // number of 64-bit words + zLen := len(z) + if zLen >= xLen && x.Sign() > 0 { + var y, yi big.Int + y.Set(x) + two64 := big.NewInt(1) + two64.Lsh(two64, 64).Sub(two64, big.NewInt(1)) + for i := 0; i < xLen; i++ { + yi.And(&y, two64) + z[i] = yi.Uint64() + y.Rsh(&y, 64) + } + } + for i := xLen; i < zLen; i++ { + z[i] = 0 + } +} diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/doc.go b/vendor/github.com/cloudflare/circl/internal/sha3/doc.go new file mode 100644 index 0000000000000..7e023090707b8 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/doc.go @@ -0,0 +1,62 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package sha3 implements the SHA-3 fixed-output-length hash functions and +// the SHAKE variable-output-length hash functions defined by FIPS-202. +// +// Both types of hash function use the "sponge" construction and the Keccak +// permutation. For a detailed specification see http://keccak.noekeon.org/ +// +// # Guidance +// +// If you aren't sure what function you need, use SHAKE256 with at least 64 +// bytes of output. The SHAKE instances are faster than the SHA3 instances; +// the latter have to allocate memory to conform to the hash.Hash interface. +// +// If you need a secret-key MAC (message authentication code), prepend the +// secret key to the input, hash with SHAKE256 and read at least 32 bytes of +// output. +// +// # Security strengths +// +// The SHA3-x (x equals 224, 256, 384, or 512) functions have a security +// strength against preimage attacks of x bits. Since they only produce "x" +// bits of output, their collision-resistance is only "x/2" bits. +// +// The SHAKE-256 and -128 functions have a generic security strength of 256 and +// 128 bits against all attacks, provided that at least 2x bits of their output +// is used. Requesting more than 64 or 32 bytes of output, respectively, does +// not increase the collision-resistance of the SHAKE functions. +// +// # The sponge construction +// +// A sponge builds a pseudo-random function from a public pseudo-random +// permutation, by applying the permutation to a state of "rate + capacity" +// bytes, but hiding "capacity" of the bytes. +// +// A sponge starts out with a zero state. To hash an input using a sponge, up +// to "rate" bytes of the input are XORed into the sponge's state. The sponge +// is then "full" and the permutation is applied to "empty" it. This process is +// repeated until all the input has been "absorbed". The input is then padded. +// The digest is "squeezed" from the sponge in the same way, except that output +// is copied out instead of input being XORed in. +// +// A sponge is parameterized by its generic security strength, which is equal +// to half its capacity; capacity + rate is equal to the permutation's width. +// Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means +// that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. +// +// # Recommendations +// +// The SHAKE functions are recommended for most new uses. They can produce +// output of arbitrary length. SHAKE256, with an output length of at least +// 64 bytes, provides 256-bit security against all attacks. The Keccak team +// recommends it for most applications upgrading from SHA2-512. (NIST chose a +// much stronger, but much slower, sponge instance for SHA3-512.) +// +// The SHA-3 functions are "drop-in" replacements for the SHA-2 functions. +// They produce output of the same length, with the same security strengths +// against all attacks. This means, in particular, that SHA3-256 only has +// 128-bit collision resistance, because its output length is 32 bytes. +package sha3 diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/hashes.go b/vendor/github.com/cloudflare/circl/internal/sha3/hashes.go new file mode 100644 index 0000000000000..7d2365a76ed80 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/hashes.go @@ -0,0 +1,69 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file provides functions for creating instances of the SHA-3 +// and SHAKE hash functions, as well as utility functions for hashing +// bytes. + +// New224 creates a new SHA3-224 hash. +// Its generic security strength is 224 bits against preimage attacks, +// and 112 bits against collision attacks. +func New224() State { + return State{rate: 144, outputLen: 28, dsbyte: 0x06} +} + +// New256 creates a new SHA3-256 hash. +// Its generic security strength is 256 bits against preimage attacks, +// and 128 bits against collision attacks. +func New256() State { + return State{rate: 136, outputLen: 32, dsbyte: 0x06} +} + +// New384 creates a new SHA3-384 hash. +// Its generic security strength is 384 bits against preimage attacks, +// and 192 bits against collision attacks. +func New384() State { + return State{rate: 104, outputLen: 48, dsbyte: 0x06} +} + +// New512 creates a new SHA3-512 hash. +// Its generic security strength is 512 bits against preimage attacks, +// and 256 bits against collision attacks. +func New512() State { + return State{rate: 72, outputLen: 64, dsbyte: 0x06} +} + +// Sum224 returns the SHA3-224 digest of the data. +func Sum224(data []byte) (digest [28]byte) { + h := New224() + _, _ = h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum256 returns the SHA3-256 digest of the data. +func Sum256(data []byte) (digest [32]byte) { + h := New256() + _, _ = h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum384 returns the SHA3-384 digest of the data. +func Sum384(data []byte) (digest [48]byte) { + h := New384() + _, _ = h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum512 returns the SHA3-512 digest of the data. +func Sum512(data []byte) (digest [64]byte) { + h := New512() + _, _ = h.Write(data) + h.Sum(digest[:0]) + return +} diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/keccakf.go b/vendor/github.com/cloudflare/circl/internal/sha3/keccakf.go new file mode 100644 index 0000000000000..ab19d0ad124f3 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/keccakf.go @@ -0,0 +1,383 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// KeccakF1600 applies the Keccak permutation to a 1600b-wide +// state represented as a slice of 25 uint64s. +// nolint:funlen +func KeccakF1600(a *[25]uint64) { + // Implementation translated from Keccak-inplace.c + // in the keccak reference code. + var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 + + for i := 0; i < 24; i += 4 { + // Combines the 5 steps in each round into 2 steps. + // Unrolls 4 rounds per loop and spreads some steps across rounds. + + // Round 1 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[6] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[12] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[18] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[24] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ RC[i] + a[6] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[16] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[22] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[3] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[10] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[1] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[7] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[19] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[20] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[11] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[23] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[4] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[5] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[2] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[8] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[14] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[15] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + // Round 2 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[16] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[7] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[23] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[14] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ RC[i+1] + a[16] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[11] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[2] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[18] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[20] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[6] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[22] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[4] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[15] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[1] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[8] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[24] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[10] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[12] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[3] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[19] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[5] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + // Round 3 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[11] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[22] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[8] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[19] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ RC[i+2] + a[11] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[1] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[12] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[23] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[15] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[16] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[2] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[24] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[5] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[6] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[3] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[14] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[20] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[7] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[18] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[4] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[10] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + // Round 4 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[1] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[2] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[3] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[4] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ RC[i+3] + a[1] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[6] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[7] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[8] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[5] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[11] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[12] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[14] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[10] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[16] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[18] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[19] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[15] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[22] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[23] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[24] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[20] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + } +} diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/rc.go b/vendor/github.com/cloudflare/circl/internal/sha3/rc.go new file mode 100644 index 0000000000000..6a3df42f305f3 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/rc.go @@ -0,0 +1,29 @@ +package sha3 + +// RC stores the round constants for use in the ι step. +var RC = [24]uint64{ + 0x0000000000000001, + 0x0000000000008082, + 0x800000000000808A, + 0x8000000080008000, + 0x000000000000808B, + 0x0000000080000001, + 0x8000000080008081, + 0x8000000000008009, + 0x000000000000008A, + 0x0000000000000088, + 0x0000000080008009, + 0x000000008000000A, + 0x000000008000808B, + 0x800000000000008B, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x000000000000800A, + 0x800000008000000A, + 0x8000000080008081, + 0x8000000000008080, + 0x0000000080000001, + 0x8000000080008008, +} diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/sha3.go b/vendor/github.com/cloudflare/circl/internal/sha3/sha3.go new file mode 100644 index 0000000000000..b35cd006b03ad --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/sha3.go @@ -0,0 +1,195 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// spongeDirection indicates the direction bytes are flowing through the sponge. +type spongeDirection int + +const ( + // spongeAbsorbing indicates that the sponge is absorbing input. + spongeAbsorbing spongeDirection = iota + // spongeSqueezing indicates that the sponge is being squeezed. + spongeSqueezing +) + +const ( + // maxRate is the maximum size of the internal buffer. SHAKE-256 + // currently needs the largest buffer. + maxRate = 168 +) + +func (d *State) buf() []byte { + return d.storage.asBytes()[d.bufo:d.bufe] +} + +type State struct { + // Generic sponge components. + a [25]uint64 // main state of the hash + rate int // the number of bytes of state to use + + bufo int // offset of buffer in storage + bufe int // end of buffer in storage + + // dsbyte contains the "domain separation" bits and the first bit of + // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the + // SHA-3 and SHAKE functions by appending bitstrings to the message. + // Using a little-endian bit-ordering convention, these are "01" for SHA-3 + // and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the + // padding rule from section 5.1 is applied to pad the message to a multiple + // of the rate, which involves adding a "1" bit, zero or more "0" bits, and + // a final "1" bit. We merge the first "1" bit from the padding into dsbyte, + // giving 00000110b (0x06) and 00011111b (0x1f). + // [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf + // "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and + // Extendable-Output Functions (May 2014)" + dsbyte byte + + storage storageBuf + + // Specific to SHA-3 and SHAKE. + outputLen int // the default output size in bytes + state spongeDirection // whether the sponge is absorbing or squeezing +} + +// BlockSize returns the rate of sponge underlying this hash function. +func (d *State) BlockSize() int { return d.rate } + +// Size returns the output size of the hash function in bytes. +func (d *State) Size() int { return d.outputLen } + +// Reset clears the internal state by zeroing the sponge state and +// the byte buffer, and setting Sponge.state to absorbing. +func (d *State) Reset() { + // Zero the permutation's state. + for i := range d.a { + d.a[i] = 0 + } + d.state = spongeAbsorbing + d.bufo = 0 + d.bufe = 0 +} + +func (d *State) clone() *State { + ret := *d + return &ret +} + +// permute applies the KeccakF-1600 permutation. It handles +// any input-output buffering. +func (d *State) permute() { + switch d.state { + case spongeAbsorbing: + // If we're absorbing, we need to xor the input into the state + // before applying the permutation. + xorIn(d, d.buf()) + d.bufe = 0 + d.bufo = 0 + KeccakF1600(&d.a) + case spongeSqueezing: + // If we're squeezing, we need to apply the permutation before + // copying more output. + KeccakF1600(&d.a) + d.bufe = d.rate + d.bufo = 0 + copyOut(d, d.buf()) + } +} + +// pads appends the domain separation bits in dsbyte, applies +// the multi-bitrate 10..1 padding rule, and permutes the state. +func (d *State) padAndPermute(dsbyte byte) { + // Pad with this instance's domain-separator bits. We know that there's + // at least one byte of space in d.buf() because, if it were full, + // permute would have been called to empty it. dsbyte also contains the + // first one bit for the padding. See the comment in the state struct. + zerosStart := d.bufe + 1 + d.bufe = d.rate + buf := d.buf() + buf[zerosStart-1] = dsbyte + for i := zerosStart; i < d.rate; i++ { + buf[i] = 0 + } + // This adds the final one bit for the padding. Because of the way that + // bits are numbered from the LSB upwards, the final bit is the MSB of + // the last byte. + buf[d.rate-1] ^= 0x80 + // Apply the permutation + d.permute() + d.state = spongeSqueezing + d.bufe = d.rate + copyOut(d, buf) +} + +// Write absorbs more data into the hash's state. It produces an error +// if more data is written to the ShakeHash after writing +func (d *State) Write(p []byte) (written int, err error) { + if d.state != spongeAbsorbing { + panic("sha3: write to sponge after read") + } + written = len(p) + + for len(p) > 0 { + bufl := d.bufe - d.bufo + if bufl == 0 && len(p) >= d.rate { + // The fast path; absorb a full "rate" bytes of input and apply the permutation. + xorIn(d, p[:d.rate]) + p = p[d.rate:] + KeccakF1600(&d.a) + } else { + // The slow path; buffer the input until we can fill the sponge, and then xor it in. + todo := d.rate - bufl + if todo > len(p) { + todo = len(p) + } + d.bufe += todo + buf := d.buf() + copy(buf[bufl:], p[:todo]) + p = p[todo:] + + // If the sponge is full, apply the permutation. + if d.bufe == d.rate { + d.permute() + } + } + } + + return written, nil +} + +// Read squeezes an arbitrary number of bytes from the sponge. +func (d *State) Read(out []byte) (n int, err error) { + // If we're still absorbing, pad and apply the permutation. + if d.state == spongeAbsorbing { + d.padAndPermute(d.dsbyte) + } + + n = len(out) + + // Now, do the squeezing. + for len(out) > 0 { + buf := d.buf() + n := copy(out, buf) + d.bufo += n + out = out[n:] + + // Apply the permutation if we've squeezed the sponge dry. + if d.bufo == d.bufe { + d.permute() + } + } + + return +} + +// Sum applies padding to the hash state and then squeezes out the desired +// number of output bytes. +func (d *State) Sum(in []byte) []byte { + // Make a copy of the original hash so that caller can keep writing + // and summing. + dup := d.clone() + hash := make([]byte, dup.outputLen) + _, _ = dup.Read(hash) + return append(in, hash...) +} diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/sha3_s390x.s b/vendor/github.com/cloudflare/circl/internal/sha3/sha3_s390x.s new file mode 100644 index 0000000000000..8a4458f63f992 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/sha3_s390x.s @@ -0,0 +1,33 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo,!appengine + +#include "textflag.h" + +// func kimd(function code, chain *[200]byte, src []byte) +TEXT ·kimd(SB), NOFRAME|NOSPLIT, $0-40 + MOVD function+0(FP), R0 + MOVD chain+8(FP), R1 + LMG src+16(FP), R2, R3 // R2=base, R3=len + +continue: + WORD $0xB93E0002 // KIMD --, R2 + BVS continue // continue if interrupted + MOVD $0, R0 // reset R0 for pre-go1.8 compilers + RET + +// func klmd(function code, chain *[200]byte, dst, src []byte) +TEXT ·klmd(SB), NOFRAME|NOSPLIT, $0-64 + // TODO: SHAKE support + MOVD function+0(FP), R0 + MOVD chain+8(FP), R1 + LMG dst+16(FP), R2, R3 // R2=base, R3=len + LMG src+40(FP), R4, R5 // R4=base, R5=len + +continue: + WORD $0xB93F0024 // KLMD R2, R4 + BVS continue // continue if interrupted + MOVD $0, R0 // reset R0 for pre-go1.8 compilers + RET diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/shake.go b/vendor/github.com/cloudflare/circl/internal/sha3/shake.go new file mode 100644 index 0000000000000..b92c5b7d785a5 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/shake.go @@ -0,0 +1,79 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file defines the ShakeHash interface, and provides +// functions for creating SHAKE and cSHAKE instances, as well as utility +// functions for hashing bytes to arbitrary-length output. +// +// +// SHAKE implementation is based on FIPS PUB 202 [1] +// cSHAKE implementations is based on NIST SP 800-185 [2] +// +// [1] https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf +// [2] https://doi.org/10.6028/NIST.SP.800-185 + +import ( + "io" +) + +// ShakeHash defines the interface to hash functions that +// support arbitrary-length output. +type ShakeHash interface { + // Write absorbs more data into the hash's state. It panics if input is + // written to it after output has been read from it. + io.Writer + + // Read reads more output from the hash; reading affects the hash's + // state. (ShakeHash.Read is thus very different from Hash.Sum) + // It never returns an error. + io.Reader + + // Clone returns a copy of the ShakeHash in its current state. + Clone() ShakeHash + + // Reset resets the ShakeHash to its initial state. + Reset() +} + +// Consts for configuring initial SHA-3 state +const ( + dsbyteShake = 0x1f + rate128 = 168 + rate256 = 136 +) + +// Clone returns copy of SHAKE context within its current state. +func (d *State) Clone() ShakeHash { + return d.clone() +} + +// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 128 bits against all attacks if at +// least 32 bytes of its output are used. +func NewShake128() State { + return State{rate: rate128, dsbyte: dsbyteShake} +} + +// NewShake256 creates a new SHAKE256 variable-output-length ShakeHash. +// Its generic security strength is 256 bits against all attacks if +// at least 64 bytes of its output are used. +func NewShake256() State { + return State{rate: rate256, dsbyte: dsbyteShake} +} + +// ShakeSum128 writes an arbitrary-length digest of data into hash. +func ShakeSum128(hash, data []byte) { + h := NewShake128() + _, _ = h.Write(data) + _, _ = h.Read(hash) +} + +// ShakeSum256 writes an arbitrary-length digest of data into hash. +func ShakeSum256(hash, data []byte) { + h := NewShake256() + _, _ = h.Write(data) + _, _ = h.Read(hash) +} diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/xor.go b/vendor/github.com/cloudflare/circl/internal/sha3/xor.go new file mode 100644 index 0000000000000..1e21337454f0a --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/xor.go @@ -0,0 +1,15 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (!amd64 && !386 && !ppc64le) || appengine +// +build !amd64,!386,!ppc64le appengine + +package sha3 + +// A storageBuf is an aligned array of maxRate bytes. +type storageBuf [maxRate]byte + +func (b *storageBuf) asBytes() *[maxRate]byte { + return (*[maxRate]byte)(b) +} diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/xor_generic.go b/vendor/github.com/cloudflare/circl/internal/sha3/xor_generic.go new file mode 100644 index 0000000000000..2b0c661790605 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/xor_generic.go @@ -0,0 +1,33 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (!amd64 || appengine) && (!386 || appengine) && (!ppc64le || appengine) +// +build !amd64 appengine +// +build !386 appengine +// +build !ppc64le appengine + +package sha3 + +import "encoding/binary" + +// xorIn xors the bytes in buf into the state; it +// makes no non-portable assumptions about memory layout +// or alignment. +func xorIn(d *State, buf []byte) { + n := len(buf) / 8 + + for i := 0; i < n; i++ { + a := binary.LittleEndian.Uint64(buf) + d.a[i] ^= a + buf = buf[8:] + } +} + +// copyOut copies ulint64s to a byte buffer. +func copyOut(d *State, b []byte) { + for i := 0; len(b) >= 8; i++ { + binary.LittleEndian.PutUint64(b, d.a[i]) + b = b[8:] + } +} diff --git a/vendor/github.com/cloudflare/circl/internal/sha3/xor_unaligned.go b/vendor/github.com/cloudflare/circl/internal/sha3/xor_unaligned.go new file mode 100644 index 0000000000000..052fc8d32d2cd --- /dev/null +++ b/vendor/github.com/cloudflare/circl/internal/sha3/xor_unaligned.go @@ -0,0 +1,61 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (amd64 || 386 || ppc64le) && !appengine +// +build amd64 386 ppc64le +// +build !appengine + +package sha3 + +import "unsafe" + +// A storageBuf is an aligned array of maxRate bytes. +type storageBuf [maxRate / 8]uint64 + +func (b *storageBuf) asBytes() *[maxRate]byte { + return (*[maxRate]byte)(unsafe.Pointer(b)) +} + +// xorInuses unaligned reads and writes to update d.a to contain d.a +// XOR buf. +func xorIn(d *State, buf []byte) { + n := len(buf) + bw := (*[maxRate / 8]uint64)(unsafe.Pointer(&buf[0]))[: n/8 : n/8] + if n >= 72 { + d.a[0] ^= bw[0] + d.a[1] ^= bw[1] + d.a[2] ^= bw[2] + d.a[3] ^= bw[3] + d.a[4] ^= bw[4] + d.a[5] ^= bw[5] + d.a[6] ^= bw[6] + d.a[7] ^= bw[7] + d.a[8] ^= bw[8] + } + if n >= 104 { + d.a[9] ^= bw[9] + d.a[10] ^= bw[10] + d.a[11] ^= bw[11] + d.a[12] ^= bw[12] + } + if n >= 136 { + d.a[13] ^= bw[13] + d.a[14] ^= bw[14] + d.a[15] ^= bw[15] + d.a[16] ^= bw[16] + } + if n >= 144 { + d.a[17] ^= bw[17] + } + if n >= 168 { + d.a[18] ^= bw[18] + d.a[19] ^= bw[19] + d.a[20] ^= bw[20] + } +} + +func copyOut(d *State, buf []byte) { + ab := (*[maxRate]uint8)(unsafe.Pointer(&d.a[0])) + copy(buf, ab[:]) +} diff --git a/vendor/github.com/cloudflare/circl/math/fp25519/fp.go b/vendor/github.com/cloudflare/circl/math/fp25519/fp.go new file mode 100644 index 0000000000000..57a50ff5e9bd4 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp25519/fp.go @@ -0,0 +1,205 @@ +// Package fp25519 provides prime field arithmetic over GF(2^255-19). +package fp25519 + +import ( + "errors" + + "github.com/cloudflare/circl/internal/conv" +) + +// Size in bytes of an element. +const Size = 32 + +// Elt is a prime field element. +type Elt [Size]byte + +func (e Elt) String() string { return conv.BytesLe2Hex(e[:]) } + +// p is the prime modulus 2^255-19. +var p = Elt{ + 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, +} + +// P returns the prime modulus 2^255-19. +func P() Elt { return p } + +// ToBytes stores in b the little-endian byte representation of x. +func ToBytes(b []byte, x *Elt) error { + if len(b) != Size { + return errors.New("wrong size") + } + Modp(x) + copy(b, x[:]) + return nil +} + +// IsZero returns true if x is equal to 0. +func IsZero(x *Elt) bool { Modp(x); return *x == Elt{} } + +// SetOne assigns x=1. +func SetOne(x *Elt) { *x = Elt{}; x[0] = 1 } + +// Neg calculates z = -x. +func Neg(z, x *Elt) { Sub(z, &p, x) } + +// InvSqrt calculates z = sqrt(x/y) iff x/y is a quadratic-residue, which is +// indicated by returning isQR = true. Otherwise, when x/y is a quadratic +// non-residue, z will have an undetermined value and isQR = false. +func InvSqrt(z, x, y *Elt) (isQR bool) { + sqrtMinusOne := &Elt{ + 0xb0, 0xa0, 0x0e, 0x4a, 0x27, 0x1b, 0xee, 0xc4, + 0x78, 0xe4, 0x2f, 0xad, 0x06, 0x18, 0x43, 0x2f, + 0xa7, 0xd7, 0xfb, 0x3d, 0x99, 0x00, 0x4d, 0x2b, + 0x0b, 0xdf, 0xc1, 0x4f, 0x80, 0x24, 0x83, 0x2b, + } + t0, t1, t2, t3 := &Elt{}, &Elt{}, &Elt{}, &Elt{} + + Mul(t0, x, y) // t0 = u*v + Sqr(t1, y) // t1 = v^2 + Mul(t2, t0, t1) // t2 = u*v^3 + Sqr(t0, t1) // t0 = v^4 + Mul(t1, t0, t2) // t1 = u*v^7 + + var Tab [4]*Elt + Tab[0] = &Elt{} + Tab[1] = &Elt{} + Tab[2] = t3 + Tab[3] = t1 + + *Tab[0] = *t1 + Sqr(Tab[0], Tab[0]) + Sqr(Tab[1], Tab[0]) + Sqr(Tab[1], Tab[1]) + Mul(Tab[1], Tab[1], Tab[3]) + Mul(Tab[0], Tab[0], Tab[1]) + Sqr(Tab[0], Tab[0]) + Mul(Tab[0], Tab[0], Tab[1]) + Sqr(Tab[1], Tab[0]) + for i := 0; i < 4; i++ { + Sqr(Tab[1], Tab[1]) + } + Mul(Tab[1], Tab[1], Tab[0]) + Sqr(Tab[2], Tab[1]) + for i := 0; i < 4; i++ { + Sqr(Tab[2], Tab[2]) + } + Mul(Tab[2], Tab[2], Tab[0]) + Sqr(Tab[1], Tab[2]) + for i := 0; i < 14; i++ { + Sqr(Tab[1], Tab[1]) + } + Mul(Tab[1], Tab[1], Tab[2]) + Sqr(Tab[2], Tab[1]) + for i := 0; i < 29; i++ { + Sqr(Tab[2], Tab[2]) + } + Mul(Tab[2], Tab[2], Tab[1]) + Sqr(Tab[1], Tab[2]) + for i := 0; i < 59; i++ { + Sqr(Tab[1], Tab[1]) + } + Mul(Tab[1], Tab[1], Tab[2]) + for i := 0; i < 5; i++ { + Sqr(Tab[1], Tab[1]) + } + Mul(Tab[1], Tab[1], Tab[0]) + Sqr(Tab[2], Tab[1]) + for i := 0; i < 124; i++ { + Sqr(Tab[2], Tab[2]) + } + Mul(Tab[2], Tab[2], Tab[1]) + Sqr(Tab[2], Tab[2]) + Sqr(Tab[2], Tab[2]) + Mul(Tab[2], Tab[2], Tab[3]) + + Mul(z, t3, t2) // z = xy^(p+3)/8 = xy^3*(xy^7)^(p-5)/8 + // Checking whether y z^2 == x + Sqr(t0, z) // t0 = z^2 + Mul(t0, t0, y) // t0 = yz^2 + Sub(t1, t0, x) // t1 = t0-u + Add(t2, t0, x) // t2 = t0+u + if IsZero(t1) { + return true + } else if IsZero(t2) { + Mul(z, z, sqrtMinusOne) // z = z*sqrt(-1) + return true + } else { + return false + } +} + +// Inv calculates z = 1/x mod p. +func Inv(z, x *Elt) { + x0, x1, x2 := &Elt{}, &Elt{}, &Elt{} + Sqr(x1, x) + Sqr(x0, x1) + Sqr(x0, x0) + Mul(x0, x0, x) + Mul(z, x0, x1) + Sqr(x1, z) + Mul(x0, x0, x1) + Sqr(x1, x0) + for i := 0; i < 4; i++ { + Sqr(x1, x1) + } + Mul(x0, x0, x1) + Sqr(x1, x0) + for i := 0; i < 9; i++ { + Sqr(x1, x1) + } + Mul(x1, x1, x0) + Sqr(x2, x1) + for i := 0; i < 19; i++ { + Sqr(x2, x2) + } + Mul(x2, x2, x1) + for i := 0; i < 10; i++ { + Sqr(x2, x2) + } + Mul(x2, x2, x0) + Sqr(x0, x2) + for i := 0; i < 49; i++ { + Sqr(x0, x0) + } + Mul(x0, x0, x2) + Sqr(x1, x0) + for i := 0; i < 99; i++ { + Sqr(x1, x1) + } + Mul(x1, x1, x0) + for i := 0; i < 50; i++ { + Sqr(x1, x1) + } + Mul(x1, x1, x2) + for i := 0; i < 5; i++ { + Sqr(x1, x1) + } + Mul(z, z, x1) +} + +// Cmov assigns y to x if n is 1. +func Cmov(x, y *Elt, n uint) { cmov(x, y, n) } + +// Cswap interchanges x and y if n is 1. +func Cswap(x, y *Elt, n uint) { cswap(x, y, n) } + +// Add calculates z = x+y mod p. +func Add(z, x, y *Elt) { add(z, x, y) } + +// Sub calculates z = x-y mod p. +func Sub(z, x, y *Elt) { sub(z, x, y) } + +// AddSub calculates (x,y) = (x+y mod p, x-y mod p). +func AddSub(x, y *Elt) { addsub(x, y) } + +// Mul calculates z = x*y mod p. +func Mul(z, x, y *Elt) { mul(z, x, y) } + +// Sqr calculates z = x^2 mod p. +func Sqr(z, x *Elt) { sqr(z, x) } + +// Modp ensures that z is between [0,p-1]. +func Modp(z *Elt) { modp(z) } diff --git a/vendor/github.com/cloudflare/circl/math/fp25519/fp_amd64.go b/vendor/github.com/cloudflare/circl/math/fp25519/fp_amd64.go new file mode 100644 index 0000000000000..057f0d2803fad --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp25519/fp_amd64.go @@ -0,0 +1,45 @@ +//go:build amd64 && !purego +// +build amd64,!purego + +package fp25519 + +import ( + "golang.org/x/sys/cpu" +) + +var hasBmi2Adx = cpu.X86.HasBMI2 && cpu.X86.HasADX + +var _ = hasBmi2Adx + +func cmov(x, y *Elt, n uint) { cmovAmd64(x, y, n) } +func cswap(x, y *Elt, n uint) { cswapAmd64(x, y, n) } +func add(z, x, y *Elt) { addAmd64(z, x, y) } +func sub(z, x, y *Elt) { subAmd64(z, x, y) } +func addsub(x, y *Elt) { addsubAmd64(x, y) } +func mul(z, x, y *Elt) { mulAmd64(z, x, y) } +func sqr(z, x *Elt) { sqrAmd64(z, x) } +func modp(z *Elt) { modpAmd64(z) } + +//go:noescape +func cmovAmd64(x, y *Elt, n uint) + +//go:noescape +func cswapAmd64(x, y *Elt, n uint) + +//go:noescape +func addAmd64(z, x, y *Elt) + +//go:noescape +func subAmd64(z, x, y *Elt) + +//go:noescape +func addsubAmd64(x, y *Elt) + +//go:noescape +func mulAmd64(z, x, y *Elt) + +//go:noescape +func sqrAmd64(z, x *Elt) + +//go:noescape +func modpAmd64(z *Elt) diff --git a/vendor/github.com/cloudflare/circl/math/fp25519/fp_amd64.h b/vendor/github.com/cloudflare/circl/math/fp25519/fp_amd64.h new file mode 100644 index 0000000000000..b884b584ab36f --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp25519/fp_amd64.h @@ -0,0 +1,351 @@ +// This code was imported from https://github.com/armfazh/rfc7748_precomputed + +// CHECK_BMI2ADX triggers bmi2adx if supported, +// otherwise it fallbacks to legacy code. +#define CHECK_BMI2ADX(label, legacy, bmi2adx) \ + CMPB ·hasBmi2Adx(SB), $0 \ + JE label \ + bmi2adx \ + RET \ + label: \ + legacy \ + RET + +// cselect is a conditional move +// if b=1: it copies y into x; +// if b=0: x remains with the same value; +// if b<> 0,1: undefined. +// Uses: AX, DX, FLAGS +// Instr: x86_64, cmov +#define cselect(x,y,b) \ + TESTQ b, b \ + MOVQ 0+x, AX; MOVQ 0+y, DX; CMOVQNE DX, AX; MOVQ AX, 0+x; \ + MOVQ 8+x, AX; MOVQ 8+y, DX; CMOVQNE DX, AX; MOVQ AX, 8+x; \ + MOVQ 16+x, AX; MOVQ 16+y, DX; CMOVQNE DX, AX; MOVQ AX, 16+x; \ + MOVQ 24+x, AX; MOVQ 24+y, DX; CMOVQNE DX, AX; MOVQ AX, 24+x; + +// cswap is a conditional swap +// if b=1: x,y <- y,x; +// if b=0: x,y remain with the same values; +// if b<> 0,1: undefined. +// Uses: AX, DX, R8, FLAGS +// Instr: x86_64, cmov +#define cswap(x,y,b) \ + TESTQ b, b \ + MOVQ 0+x, AX; MOVQ AX, R8; MOVQ 0+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 0+x; MOVQ DX, 0+y; \ + MOVQ 8+x, AX; MOVQ AX, R8; MOVQ 8+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 8+x; MOVQ DX, 8+y; \ + MOVQ 16+x, AX; MOVQ AX, R8; MOVQ 16+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 16+x; MOVQ DX, 16+y; \ + MOVQ 24+x, AX; MOVQ AX, R8; MOVQ 24+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 24+x; MOVQ DX, 24+y; + +// additionLeg adds x and y and stores in z +// Uses: AX, DX, R8-R11, FLAGS +// Instr: x86_64, cmov +#define additionLeg(z,x,y) \ + MOVL $38, AX; \ + MOVL $0, DX; \ + MOVQ 0+x, R8; ADDQ 0+y, R8; \ + MOVQ 8+x, R9; ADCQ 8+y, R9; \ + MOVQ 16+x, R10; ADCQ 16+y, R10; \ + MOVQ 24+x, R11; ADCQ 24+y, R11; \ + CMOVQCS AX, DX; \ + ADDQ DX, R8; \ + ADCQ $0, R9; MOVQ R9, 8+z; \ + ADCQ $0, R10; MOVQ R10, 16+z; \ + ADCQ $0, R11; MOVQ R11, 24+z; \ + MOVL $0, DX; \ + CMOVQCS AX, DX; \ + ADDQ DX, R8; MOVQ R8, 0+z; + +// additionAdx adds x and y and stores in z +// Uses: AX, DX, R8-R11, FLAGS +// Instr: x86_64, cmov, adx +#define additionAdx(z,x,y) \ + MOVL $38, AX; \ + XORL DX, DX; \ + MOVQ 0+x, R8; ADCXQ 0+y, R8; \ + MOVQ 8+x, R9; ADCXQ 8+y, R9; \ + MOVQ 16+x, R10; ADCXQ 16+y, R10; \ + MOVQ 24+x, R11; ADCXQ 24+y, R11; \ + CMOVQCS AX, DX ; \ + XORL AX, AX; \ + ADCXQ DX, R8; \ + ADCXQ AX, R9; MOVQ R9, 8+z; \ + ADCXQ AX, R10; MOVQ R10, 16+z; \ + ADCXQ AX, R11; MOVQ R11, 24+z; \ + MOVL $38, DX; \ + CMOVQCS DX, AX; \ + ADDQ AX, R8; MOVQ R8, 0+z; + +// subtraction subtracts y from x and stores in z +// Uses: AX, DX, R8-R11, FLAGS +// Instr: x86_64, cmov +#define subtraction(z,x,y) \ + MOVL $38, AX; \ + MOVQ 0+x, R8; SUBQ 0+y, R8; \ + MOVQ 8+x, R9; SBBQ 8+y, R9; \ + MOVQ 16+x, R10; SBBQ 16+y, R10; \ + MOVQ 24+x, R11; SBBQ 24+y, R11; \ + MOVL $0, DX; \ + CMOVQCS AX, DX; \ + SUBQ DX, R8; \ + SBBQ $0, R9; MOVQ R9, 8+z; \ + SBBQ $0, R10; MOVQ R10, 16+z; \ + SBBQ $0, R11; MOVQ R11, 24+z; \ + MOVL $0, DX; \ + CMOVQCS AX, DX; \ + SUBQ DX, R8; MOVQ R8, 0+z; + +// integerMulAdx multiplies x and y and stores in z +// Uses: AX, DX, R8-R15, FLAGS +// Instr: x86_64, bmi2, adx +#define integerMulAdx(z,x,y) \ + MOVL $0,R15; \ + MOVQ 0+y, DX; XORL AX, AX; \ + MULXQ 0+x, AX, R8; MOVQ AX, 0+z; \ + MULXQ 8+x, AX, R9; ADCXQ AX, R8; \ + MULXQ 16+x, AX, R10; ADCXQ AX, R9; \ + MULXQ 24+x, AX, R11; ADCXQ AX, R10; \ + MOVL $0, AX;;;;;;;;; ADCXQ AX, R11; \ + MOVQ 8+y, DX; XORL AX, AX; \ + MULXQ 0+x, AX, R12; ADCXQ R8, AX; MOVQ AX, 8+z; \ + MULXQ 8+x, AX, R13; ADCXQ R9, R12; ADOXQ AX, R12; \ + MULXQ 16+x, AX, R14; ADCXQ R10, R13; ADOXQ AX, R13; \ + MULXQ 24+x, AX, R15; ADCXQ R11, R14; ADOXQ AX, R14; \ + MOVL $0, AX;;;;;;;;; ADCXQ AX, R15; ADOXQ AX, R15; \ + MOVQ 16+y, DX; XORL AX, AX; \ + MULXQ 0+x, AX, R8; ADCXQ R12, AX; MOVQ AX, 16+z; \ + MULXQ 8+x, AX, R9; ADCXQ R13, R8; ADOXQ AX, R8; \ + MULXQ 16+x, AX, R10; ADCXQ R14, R9; ADOXQ AX, R9; \ + MULXQ 24+x, AX, R11; ADCXQ R15, R10; ADOXQ AX, R10; \ + MOVL $0, AX;;;;;;;;; ADCXQ AX, R11; ADOXQ AX, R11; \ + MOVQ 24+y, DX; XORL AX, AX; \ + MULXQ 0+x, AX, R12; ADCXQ R8, AX; MOVQ AX, 24+z; \ + MULXQ 8+x, AX, R13; ADCXQ R9, R12; ADOXQ AX, R12; MOVQ R12, 32+z; \ + MULXQ 16+x, AX, R14; ADCXQ R10, R13; ADOXQ AX, R13; MOVQ R13, 40+z; \ + MULXQ 24+x, AX, R15; ADCXQ R11, R14; ADOXQ AX, R14; MOVQ R14, 48+z; \ + MOVL $0, AX;;;;;;;;; ADCXQ AX, R15; ADOXQ AX, R15; MOVQ R15, 56+z; + +// integerMulLeg multiplies x and y and stores in z +// Uses: AX, DX, R8-R15, FLAGS +// Instr: x86_64 +#define integerMulLeg(z,x,y) \ + MOVQ 0+y, R8; \ + MOVQ 0+x, AX; MULQ R8; MOVQ AX, 0+z; MOVQ DX, R15; \ + MOVQ 8+x, AX; MULQ R8; MOVQ AX, R13; MOVQ DX, R10; \ + MOVQ 16+x, AX; MULQ R8; MOVQ AX, R14; MOVQ DX, R11; \ + MOVQ 24+x, AX; MULQ R8; \ + ADDQ R13, R15; \ + ADCQ R14, R10; MOVQ R10, 16+z; \ + ADCQ AX, R11; MOVQ R11, 24+z; \ + ADCQ $0, DX; MOVQ DX, 32+z; \ + MOVQ 8+y, R8; \ + MOVQ 0+x, AX; MULQ R8; MOVQ AX, R12; MOVQ DX, R9; \ + MOVQ 8+x, AX; MULQ R8; MOVQ AX, R13; MOVQ DX, R10; \ + MOVQ 16+x, AX; MULQ R8; MOVQ AX, R14; MOVQ DX, R11; \ + MOVQ 24+x, AX; MULQ R8; \ + ADDQ R12, R15; MOVQ R15, 8+z; \ + ADCQ R13, R9; \ + ADCQ R14, R10; \ + ADCQ AX, R11; \ + ADCQ $0, DX; \ + ADCQ 16+z, R9; MOVQ R9, R15; \ + ADCQ 24+z, R10; MOVQ R10, 24+z; \ + ADCQ 32+z, R11; MOVQ R11, 32+z; \ + ADCQ $0, DX; MOVQ DX, 40+z; \ + MOVQ 16+y, R8; \ + MOVQ 0+x, AX; MULQ R8; MOVQ AX, R12; MOVQ DX, R9; \ + MOVQ 8+x, AX; MULQ R8; MOVQ AX, R13; MOVQ DX, R10; \ + MOVQ 16+x, AX; MULQ R8; MOVQ AX, R14; MOVQ DX, R11; \ + MOVQ 24+x, AX; MULQ R8; \ + ADDQ R12, R15; MOVQ R15, 16+z; \ + ADCQ R13, R9; \ + ADCQ R14, R10; \ + ADCQ AX, R11; \ + ADCQ $0, DX; \ + ADCQ 24+z, R9; MOVQ R9, R15; \ + ADCQ 32+z, R10; MOVQ R10, 32+z; \ + ADCQ 40+z, R11; MOVQ R11, 40+z; \ + ADCQ $0, DX; MOVQ DX, 48+z; \ + MOVQ 24+y, R8; \ + MOVQ 0+x, AX; MULQ R8; MOVQ AX, R12; MOVQ DX, R9; \ + MOVQ 8+x, AX; MULQ R8; MOVQ AX, R13; MOVQ DX, R10; \ + MOVQ 16+x, AX; MULQ R8; MOVQ AX, R14; MOVQ DX, R11; \ + MOVQ 24+x, AX; MULQ R8; \ + ADDQ R12, R15; MOVQ R15, 24+z; \ + ADCQ R13, R9; \ + ADCQ R14, R10; \ + ADCQ AX, R11; \ + ADCQ $0, DX; \ + ADCQ 32+z, R9; MOVQ R9, 32+z; \ + ADCQ 40+z, R10; MOVQ R10, 40+z; \ + ADCQ 48+z, R11; MOVQ R11, 48+z; \ + ADCQ $0, DX; MOVQ DX, 56+z; + +// integerSqrLeg squares x and stores in z +// Uses: AX, CX, DX, R8-R15, FLAGS +// Instr: x86_64 +#define integerSqrLeg(z,x) \ + MOVQ 0+x, R8; \ + MOVQ 8+x, AX; MULQ R8; MOVQ AX, R9; MOVQ DX, R10; /* A[0]*A[1] */ \ + MOVQ 16+x, AX; MULQ R8; MOVQ AX, R14; MOVQ DX, R11; /* A[0]*A[2] */ \ + MOVQ 24+x, AX; MULQ R8; MOVQ AX, R15; MOVQ DX, R12; /* A[0]*A[3] */ \ + MOVQ 24+x, R8; \ + MOVQ 8+x, AX; MULQ R8; MOVQ AX, CX; MOVQ DX, R13; /* A[3]*A[1] */ \ + MOVQ 16+x, AX; MULQ R8; /* A[3]*A[2] */ \ + \ + ADDQ R14, R10;\ + ADCQ R15, R11; MOVL $0, R15;\ + ADCQ CX, R12;\ + ADCQ AX, R13;\ + ADCQ $0, DX; MOVQ DX, R14;\ + MOVQ 8+x, AX; MULQ 16+x;\ + \ + ADDQ AX, R11;\ + ADCQ DX, R12;\ + ADCQ $0, R13;\ + ADCQ $0, R14;\ + ADCQ $0, R15;\ + \ + SHLQ $1, R14, R15; MOVQ R15, 56+z;\ + SHLQ $1, R13, R14; MOVQ R14, 48+z;\ + SHLQ $1, R12, R13; MOVQ R13, 40+z;\ + SHLQ $1, R11, R12; MOVQ R12, 32+z;\ + SHLQ $1, R10, R11; MOVQ R11, 24+z;\ + SHLQ $1, R9, R10; MOVQ R10, 16+z;\ + SHLQ $1, R9; MOVQ R9, 8+z;\ + \ + MOVQ 0+x,AX; MULQ AX; MOVQ AX, 0+z; MOVQ DX, R9;\ + MOVQ 8+x,AX; MULQ AX; MOVQ AX, R10; MOVQ DX, R11;\ + MOVQ 16+x,AX; MULQ AX; MOVQ AX, R12; MOVQ DX, R13;\ + MOVQ 24+x,AX; MULQ AX; MOVQ AX, R14; MOVQ DX, R15;\ + \ + ADDQ 8+z, R9; MOVQ R9, 8+z;\ + ADCQ 16+z, R10; MOVQ R10, 16+z;\ + ADCQ 24+z, R11; MOVQ R11, 24+z;\ + ADCQ 32+z, R12; MOVQ R12, 32+z;\ + ADCQ 40+z, R13; MOVQ R13, 40+z;\ + ADCQ 48+z, R14; MOVQ R14, 48+z;\ + ADCQ 56+z, R15; MOVQ R15, 56+z; + +// integerSqrAdx squares x and stores in z +// Uses: AX, CX, DX, R8-R15, FLAGS +// Instr: x86_64, bmi2, adx +#define integerSqrAdx(z,x) \ + MOVQ 0+x, DX; /* A[0] */ \ + MULXQ 8+x, R8, R14; /* A[1]*A[0] */ XORL R15, R15; \ + MULXQ 16+x, R9, R10; /* A[2]*A[0] */ ADCXQ R14, R9; \ + MULXQ 24+x, AX, CX; /* A[3]*A[0] */ ADCXQ AX, R10; \ + MOVQ 24+x, DX; /* A[3] */ \ + MULXQ 8+x, R11, R12; /* A[1]*A[3] */ ADCXQ CX, R11; \ + MULXQ 16+x, AX, R13; /* A[2]*A[3] */ ADCXQ AX, R12; \ + MOVQ 8+x, DX; /* A[1] */ ADCXQ R15, R13; \ + MULXQ 16+x, AX, CX; /* A[2]*A[1] */ MOVL $0, R14; \ + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ADCXQ R15, R14; \ + XORL R15, R15; \ + ADOXQ AX, R10; ADCXQ R8, R8; \ + ADOXQ CX, R11; ADCXQ R9, R9; \ + ADOXQ R15, R12; ADCXQ R10, R10; \ + ADOXQ R15, R13; ADCXQ R11, R11; \ + ADOXQ R15, R14; ADCXQ R12, R12; \ + ;;;;;;;;;;;;;;; ADCXQ R13, R13; \ + ;;;;;;;;;;;;;;; ADCXQ R14, R14; \ + MOVQ 0+x, DX; MULXQ DX, AX, CX; /* A[0]^2 */ \ + ;;;;;;;;;;;;;;; MOVQ AX, 0+z; \ + ADDQ CX, R8; MOVQ R8, 8+z; \ + MOVQ 8+x, DX; MULXQ DX, AX, CX; /* A[1]^2 */ \ + ADCQ AX, R9; MOVQ R9, 16+z; \ + ADCQ CX, R10; MOVQ R10, 24+z; \ + MOVQ 16+x, DX; MULXQ DX, AX, CX; /* A[2]^2 */ \ + ADCQ AX, R11; MOVQ R11, 32+z; \ + ADCQ CX, R12; MOVQ R12, 40+z; \ + MOVQ 24+x, DX; MULXQ DX, AX, CX; /* A[3]^2 */ \ + ADCQ AX, R13; MOVQ R13, 48+z; \ + ADCQ CX, R14; MOVQ R14, 56+z; + +// reduceFromDouble finds z congruent to x modulo p such that 0> 63) + // PUT BIT 255 IN CARRY FLAG AND CLEAR + x3 &^= 1 << 63 + + x0, c0 := bits.Add64(x0, cx, 0) + x1, c1 := bits.Add64(x1, 0, c0) + x2, c2 := bits.Add64(x2, 0, c1) + x3, _ = bits.Add64(x3, 0, c2) + + // TEST FOR BIT 255 AGAIN; ONLY TRIGGERED ON OVERFLOW MODULO 2^255-19 + // cx = C[255] ? 0 : 19 + cx = uint64(19) &^ (-(x3 >> 63)) + // CLEAR BIT 255 + x3 &^= 1 << 63 + + x0, c0 = bits.Sub64(x0, cx, 0) + x1, c1 = bits.Sub64(x1, 0, c0) + x2, c2 = bits.Sub64(x2, 0, c1) + x3, _ = bits.Sub64(x3, 0, c2) + + binary.LittleEndian.PutUint64(x[0*8:1*8], x0) + binary.LittleEndian.PutUint64(x[1*8:2*8], x1) + binary.LittleEndian.PutUint64(x[2*8:3*8], x2) + binary.LittleEndian.PutUint64(x[3*8:4*8], x3) +} + +func red64(z *Elt, x0, x1, x2, x3, x4, x5, x6, x7 uint64) { + h0, l0 := bits.Mul64(x4, 38) + h1, l1 := bits.Mul64(x5, 38) + h2, l2 := bits.Mul64(x6, 38) + h3, l3 := bits.Mul64(x7, 38) + + l1, c0 := bits.Add64(h0, l1, 0) + l2, c1 := bits.Add64(h1, l2, c0) + l3, c2 := bits.Add64(h2, l3, c1) + l4, _ := bits.Add64(h3, 0, c2) + + l0, c0 = bits.Add64(l0, x0, 0) + l1, c1 = bits.Add64(l1, x1, c0) + l2, c2 = bits.Add64(l2, x2, c1) + l3, c3 := bits.Add64(l3, x3, c2) + l4, _ = bits.Add64(l4, 0, c3) + + _, l4 = bits.Mul64(l4, 38) + l0, c0 = bits.Add64(l0, l4, 0) + z1, c1 := bits.Add64(l1, 0, c0) + z2, c2 := bits.Add64(l2, 0, c1) + z3, c3 := bits.Add64(l3, 0, c2) + z0, _ := bits.Add64(l0, (-c3)&38, 0) + + binary.LittleEndian.PutUint64(z[0*8:1*8], z0) + binary.LittleEndian.PutUint64(z[1*8:2*8], z1) + binary.LittleEndian.PutUint64(z[2*8:3*8], z2) + binary.LittleEndian.PutUint64(z[3*8:4*8], z3) +} diff --git a/vendor/github.com/cloudflare/circl/math/fp25519/fp_noasm.go b/vendor/github.com/cloudflare/circl/math/fp25519/fp_noasm.go new file mode 100644 index 0000000000000..26ca4d01b7ea1 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp25519/fp_noasm.go @@ -0,0 +1,13 @@ +//go:build !amd64 || purego +// +build !amd64 purego + +package fp25519 + +func cmov(x, y *Elt, n uint) { cmovGeneric(x, y, n) } +func cswap(x, y *Elt, n uint) { cswapGeneric(x, y, n) } +func add(z, x, y *Elt) { addGeneric(z, x, y) } +func sub(z, x, y *Elt) { subGeneric(z, x, y) } +func addsub(x, y *Elt) { addsubGeneric(x, y) } +func mul(z, x, y *Elt) { mulGeneric(z, x, y) } +func sqr(z, x *Elt) { sqrGeneric(z, x) } +func modp(z *Elt) { modpGeneric(z) } diff --git a/vendor/github.com/cloudflare/circl/math/fp448/fp.go b/vendor/github.com/cloudflare/circl/math/fp448/fp.go new file mode 100644 index 0000000000000..a5e36600bb6d4 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp448/fp.go @@ -0,0 +1,164 @@ +// Package fp448 provides prime field arithmetic over GF(2^448-2^224-1). +package fp448 + +import ( + "errors" + + "github.com/cloudflare/circl/internal/conv" +) + +// Size in bytes of an element. +const Size = 56 + +// Elt is a prime field element. +type Elt [Size]byte + +func (e Elt) String() string { return conv.BytesLe2Hex(e[:]) } + +// p is the prime modulus 2^448-2^224-1. +var p = Elt{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +} + +// P returns the prime modulus 2^448-2^224-1. +func P() Elt { return p } + +// ToBytes stores in b the little-endian byte representation of x. +func ToBytes(b []byte, x *Elt) error { + if len(b) != Size { + return errors.New("wrong size") + } + Modp(x) + copy(b, x[:]) + return nil +} + +// IsZero returns true if x is equal to 0. +func IsZero(x *Elt) bool { Modp(x); return *x == Elt{} } + +// IsOne returns true if x is equal to 1. +func IsOne(x *Elt) bool { Modp(x); return *x == Elt{1} } + +// SetOne assigns x=1. +func SetOne(x *Elt) { *x = Elt{1} } + +// One returns the 1 element. +func One() (x Elt) { x = Elt{1}; return } + +// Neg calculates z = -x. +func Neg(z, x *Elt) { Sub(z, &p, x) } + +// Modp ensures that z is between [0,p-1]. +func Modp(z *Elt) { Sub(z, z, &p) } + +// InvSqrt calculates z = sqrt(x/y) iff x/y is a quadratic-residue. If so, +// isQR = true; otherwise, isQR = false, since x/y is a quadratic non-residue, +// and z = sqrt(-x/y). +func InvSqrt(z, x, y *Elt) (isQR bool) { + // First note that x^(2(k+1)) = x^(p-1)/2 * x = legendre(x) * x + // so that's x if x is a quadratic residue and -x otherwise. + // Next, y^(6k+3) = y^(4k+2) * y^(2k+1) = y^(p-1) * y^((p-1)/2) = legendre(y). + // So the z we compute satisfies z^2 y = x^(2(k+1)) y^(6k+3) = legendre(x)*legendre(y). + // Thus if x and y are quadratic residues, then z is indeed sqrt(x/y). + t0, t1 := &Elt{}, &Elt{} + Mul(t0, x, y) // x*y + Sqr(t1, y) // y^2 + Mul(t1, t0, t1) // x*y^3 + powPminus3div4(z, t1) // (x*y^3)^k + Mul(z, z, t0) // z = x*y*(x*y^3)^k = x^(k+1) * y^(3k+1) + + // Check if x/y is a quadratic residue + Sqr(t0, z) // z^2 + Mul(t0, t0, y) // y*z^2 + Sub(t0, t0, x) // y*z^2-x + return IsZero(t0) +} + +// Inv calculates z = 1/x mod p. +func Inv(z, x *Elt) { + // Calculates z = x^(4k+1) = x^(p-3+1) = x^(p-2) = x^-1, where k = (p-3)/4. + t := &Elt{} + powPminus3div4(t, x) // t = x^k + Sqr(t, t) // t = x^2k + Sqr(t, t) // t = x^4k + Mul(z, t, x) // z = x^(4k+1) +} + +// powPminus3div4 calculates z = x^k mod p, where k = (p-3)/4. +func powPminus3div4(z, x *Elt) { + x0, x1 := &Elt{}, &Elt{} + Sqr(z, x) + Mul(z, z, x) + Sqr(x0, z) + Mul(x0, x0, x) + Sqr(z, x0) + Sqr(z, z) + Sqr(z, z) + Mul(z, z, x0) + Sqr(x1, z) + for i := 0; i < 5; i++ { + Sqr(x1, x1) + } + Mul(x1, x1, z) + Sqr(z, x1) + for i := 0; i < 11; i++ { + Sqr(z, z) + } + Mul(z, z, x1) + Sqr(z, z) + Sqr(z, z) + Sqr(z, z) + Mul(z, z, x0) + Sqr(x1, z) + for i := 0; i < 26; i++ { + Sqr(x1, x1) + } + Mul(x1, x1, z) + Sqr(z, x1) + for i := 0; i < 53; i++ { + Sqr(z, z) + } + Mul(z, z, x1) + Sqr(z, z) + Sqr(z, z) + Sqr(z, z) + Mul(z, z, x0) + Sqr(x1, z) + for i := 0; i < 110; i++ { + Sqr(x1, x1) + } + Mul(x1, x1, z) + Sqr(z, x1) + Mul(z, z, x) + for i := 0; i < 223; i++ { + Sqr(z, z) + } + Mul(z, z, x1) +} + +// Cmov assigns y to x if n is 1. +func Cmov(x, y *Elt, n uint) { cmov(x, y, n) } + +// Cswap interchanges x and y if n is 1. +func Cswap(x, y *Elt, n uint) { cswap(x, y, n) } + +// Add calculates z = x+y mod p. +func Add(z, x, y *Elt) { add(z, x, y) } + +// Sub calculates z = x-y mod p. +func Sub(z, x, y *Elt) { sub(z, x, y) } + +// AddSub calculates (x,y) = (x+y mod p, x-y mod p). +func AddSub(x, y *Elt) { addsub(x, y) } + +// Mul calculates z = x*y mod p. +func Mul(z, x, y *Elt) { mul(z, x, y) } + +// Sqr calculates z = x^2 mod p. +func Sqr(z, x *Elt) { sqr(z, x) } diff --git a/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.go b/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.go new file mode 100644 index 0000000000000..6a12209a704bf --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.go @@ -0,0 +1,43 @@ +//go:build amd64 && !purego +// +build amd64,!purego + +package fp448 + +import ( + "golang.org/x/sys/cpu" +) + +var hasBmi2Adx = cpu.X86.HasBMI2 && cpu.X86.HasADX + +var _ = hasBmi2Adx + +func cmov(x, y *Elt, n uint) { cmovAmd64(x, y, n) } +func cswap(x, y *Elt, n uint) { cswapAmd64(x, y, n) } +func add(z, x, y *Elt) { addAmd64(z, x, y) } +func sub(z, x, y *Elt) { subAmd64(z, x, y) } +func addsub(x, y *Elt) { addsubAmd64(x, y) } +func mul(z, x, y *Elt) { mulAmd64(z, x, y) } +func sqr(z, x *Elt) { sqrAmd64(z, x) } + +/* Functions defined in fp_amd64.s */ + +//go:noescape +func cmovAmd64(x, y *Elt, n uint) + +//go:noescape +func cswapAmd64(x, y *Elt, n uint) + +//go:noescape +func addAmd64(z, x, y *Elt) + +//go:noescape +func subAmd64(z, x, y *Elt) + +//go:noescape +func addsubAmd64(x, y *Elt) + +//go:noescape +func mulAmd64(z, x, y *Elt) + +//go:noescape +func sqrAmd64(z, x *Elt) diff --git a/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.h b/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.h new file mode 100644 index 0000000000000..536fe5bdfe0aa --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.h @@ -0,0 +1,591 @@ +// This code was imported from https://github.com/armfazh/rfc7748_precomputed + +// CHECK_BMI2ADX triggers bmi2adx if supported, +// otherwise it fallbacks to legacy code. +#define CHECK_BMI2ADX(label, legacy, bmi2adx) \ + CMPB ·hasBmi2Adx(SB), $0 \ + JE label \ + bmi2adx \ + RET \ + label: \ + legacy \ + RET + +// cselect is a conditional move +// if b=1: it copies y into x; +// if b=0: x remains with the same value; +// if b<> 0,1: undefined. +// Uses: AX, DX, FLAGS +// Instr: x86_64, cmov +#define cselect(x,y,b) \ + TESTQ b, b \ + MOVQ 0+x, AX; MOVQ 0+y, DX; CMOVQNE DX, AX; MOVQ AX, 0+x; \ + MOVQ 8+x, AX; MOVQ 8+y, DX; CMOVQNE DX, AX; MOVQ AX, 8+x; \ + MOVQ 16+x, AX; MOVQ 16+y, DX; CMOVQNE DX, AX; MOVQ AX, 16+x; \ + MOVQ 24+x, AX; MOVQ 24+y, DX; CMOVQNE DX, AX; MOVQ AX, 24+x; \ + MOVQ 32+x, AX; MOVQ 32+y, DX; CMOVQNE DX, AX; MOVQ AX, 32+x; \ + MOVQ 40+x, AX; MOVQ 40+y, DX; CMOVQNE DX, AX; MOVQ AX, 40+x; \ + MOVQ 48+x, AX; MOVQ 48+y, DX; CMOVQNE DX, AX; MOVQ AX, 48+x; + +// cswap is a conditional swap +// if b=1: x,y <- y,x; +// if b=0: x,y remain with the same values; +// if b<> 0,1: undefined. +// Uses: AX, DX, R8, FLAGS +// Instr: x86_64, cmov +#define cswap(x,y,b) \ + TESTQ b, b \ + MOVQ 0+x, AX; MOVQ AX, R8; MOVQ 0+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 0+x; MOVQ DX, 0+y; \ + MOVQ 8+x, AX; MOVQ AX, R8; MOVQ 8+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 8+x; MOVQ DX, 8+y; \ + MOVQ 16+x, AX; MOVQ AX, R8; MOVQ 16+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 16+x; MOVQ DX, 16+y; \ + MOVQ 24+x, AX; MOVQ AX, R8; MOVQ 24+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 24+x; MOVQ DX, 24+y; \ + MOVQ 32+x, AX; MOVQ AX, R8; MOVQ 32+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 32+x; MOVQ DX, 32+y; \ + MOVQ 40+x, AX; MOVQ AX, R8; MOVQ 40+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 40+x; MOVQ DX, 40+y; \ + MOVQ 48+x, AX; MOVQ AX, R8; MOVQ 48+y, DX; CMOVQNE DX, AX; CMOVQNE R8, DX; MOVQ AX, 48+x; MOVQ DX, 48+y; + +// additionLeg adds x and y and stores in z +// Uses: AX, DX, R8-R14, FLAGS +// Instr: x86_64 +#define additionLeg(z,x,y) \ + MOVQ 0+x, R8; ADDQ 0+y, R8; \ + MOVQ 8+x, R9; ADCQ 8+y, R9; \ + MOVQ 16+x, R10; ADCQ 16+y, R10; \ + MOVQ 24+x, R11; ADCQ 24+y, R11; \ + MOVQ 32+x, R12; ADCQ 32+y, R12; \ + MOVQ 40+x, R13; ADCQ 40+y, R13; \ + MOVQ 48+x, R14; ADCQ 48+y, R14; \ + MOVQ $0, AX; ADCQ $0, AX; \ + MOVQ AX, DX; \ + SHLQ $32, DX; \ + ADDQ AX, R8; MOVQ $0, AX; \ + ADCQ $0, R9; \ + ADCQ $0, R10; \ + ADCQ DX, R11; \ + ADCQ $0, R12; \ + ADCQ $0, R13; \ + ADCQ $0, R14; \ + ADCQ $0, AX; \ + MOVQ AX, DX; \ + SHLQ $32, DX; \ + ADDQ AX, R8; MOVQ R8, 0+z; \ + ADCQ $0, R9; MOVQ R9, 8+z; \ + ADCQ $0, R10; MOVQ R10, 16+z; \ + ADCQ DX, R11; MOVQ R11, 24+z; \ + ADCQ $0, R12; MOVQ R12, 32+z; \ + ADCQ $0, R13; MOVQ R13, 40+z; \ + ADCQ $0, R14; MOVQ R14, 48+z; + + +// additionAdx adds x and y and stores in z +// Uses: AX, DX, R8-R15, FLAGS +// Instr: x86_64, adx +#define additionAdx(z,x,y) \ + MOVL $32, R15; \ + XORL DX, DX; \ + MOVQ 0+x, R8; ADCXQ 0+y, R8; \ + MOVQ 8+x, R9; ADCXQ 8+y, R9; \ + MOVQ 16+x, R10; ADCXQ 16+y, R10; \ + MOVQ 24+x, R11; ADCXQ 24+y, R11; \ + MOVQ 32+x, R12; ADCXQ 32+y, R12; \ + MOVQ 40+x, R13; ADCXQ 40+y, R13; \ + MOVQ 48+x, R14; ADCXQ 48+y, R14; \ + ;;;;;;;;;;;;;;; ADCXQ DX, DX; \ + XORL AX, AX; \ + ADCXQ DX, R8; SHLXQ R15, DX, DX; \ + ADCXQ AX, R9; \ + ADCXQ AX, R10; \ + ADCXQ DX, R11; \ + ADCXQ AX, R12; \ + ADCXQ AX, R13; \ + ADCXQ AX, R14; \ + ADCXQ AX, AX; \ + XORL DX, DX; \ + ADCXQ AX, R8; MOVQ R8, 0+z; SHLXQ R15, AX, AX; \ + ADCXQ DX, R9; MOVQ R9, 8+z; \ + ADCXQ DX, R10; MOVQ R10, 16+z; \ + ADCXQ AX, R11; MOVQ R11, 24+z; \ + ADCXQ DX, R12; MOVQ R12, 32+z; \ + ADCXQ DX, R13; MOVQ R13, 40+z; \ + ADCXQ DX, R14; MOVQ R14, 48+z; + +// subtraction subtracts y from x and stores in z +// Uses: AX, DX, R8-R14, FLAGS +// Instr: x86_64 +#define subtraction(z,x,y) \ + MOVQ 0+x, R8; SUBQ 0+y, R8; \ + MOVQ 8+x, R9; SBBQ 8+y, R9; \ + MOVQ 16+x, R10; SBBQ 16+y, R10; \ + MOVQ 24+x, R11; SBBQ 24+y, R11; \ + MOVQ 32+x, R12; SBBQ 32+y, R12; \ + MOVQ 40+x, R13; SBBQ 40+y, R13; \ + MOVQ 48+x, R14; SBBQ 48+y, R14; \ + MOVQ $0, AX; SETCS AX; \ + MOVQ AX, DX; \ + SHLQ $32, DX; \ + SUBQ AX, R8; MOVQ $0, AX; \ + SBBQ $0, R9; \ + SBBQ $0, R10; \ + SBBQ DX, R11; \ + SBBQ $0, R12; \ + SBBQ $0, R13; \ + SBBQ $0, R14; \ + SETCS AX; \ + MOVQ AX, DX; \ + SHLQ $32, DX; \ + SUBQ AX, R8; MOVQ R8, 0+z; \ + SBBQ $0, R9; MOVQ R9, 8+z; \ + SBBQ $0, R10; MOVQ R10, 16+z; \ + SBBQ DX, R11; MOVQ R11, 24+z; \ + SBBQ $0, R12; MOVQ R12, 32+z; \ + SBBQ $0, R13; MOVQ R13, 40+z; \ + SBBQ $0, R14; MOVQ R14, 48+z; + +// maddBmi2Adx multiplies x and y and accumulates in z +// Uses: AX, DX, R15, FLAGS +// Instr: x86_64, bmi2, adx +#define maddBmi2Adx(z,x,y,i,r0,r1,r2,r3,r4,r5,r6) \ + MOVQ i+y, DX; XORL AX, AX; \ + MULXQ 0+x, AX, R8; ADOXQ AX, r0; ADCXQ R8, r1; MOVQ r0,i+z; \ + MULXQ 8+x, AX, r0; ADOXQ AX, r1; ADCXQ r0, r2; MOVQ $0, R8; \ + MULXQ 16+x, AX, r0; ADOXQ AX, r2; ADCXQ r0, r3; \ + MULXQ 24+x, AX, r0; ADOXQ AX, r3; ADCXQ r0, r4; \ + MULXQ 32+x, AX, r0; ADOXQ AX, r4; ADCXQ r0, r5; \ + MULXQ 40+x, AX, r0; ADOXQ AX, r5; ADCXQ r0, r6; \ + MULXQ 48+x, AX, r0; ADOXQ AX, r6; ADCXQ R8, r0; \ + ;;;;;;;;;;;;;;;;;;; ADOXQ R8, r0; + +// integerMulAdx multiplies x and y and stores in z +// Uses: AX, DX, R8-R15, FLAGS +// Instr: x86_64, bmi2, adx +#define integerMulAdx(z,x,y) \ + MOVL $0,R15; \ + MOVQ 0+y, DX; XORL AX, AX; MOVQ $0, R8; \ + MULXQ 0+x, AX, R9; MOVQ AX, 0+z; \ + MULXQ 8+x, AX, R10; ADCXQ AX, R9; \ + MULXQ 16+x, AX, R11; ADCXQ AX, R10; \ + MULXQ 24+x, AX, R12; ADCXQ AX, R11; \ + MULXQ 32+x, AX, R13; ADCXQ AX, R12; \ + MULXQ 40+x, AX, R14; ADCXQ AX, R13; \ + MULXQ 48+x, AX, R15; ADCXQ AX, R14; \ + ;;;;;;;;;;;;;;;;;;;; ADCXQ R8, R15; \ + maddBmi2Adx(z,x,y, 8, R9,R10,R11,R12,R13,R14,R15) \ + maddBmi2Adx(z,x,y,16,R10,R11,R12,R13,R14,R15, R9) \ + maddBmi2Adx(z,x,y,24,R11,R12,R13,R14,R15, R9,R10) \ + maddBmi2Adx(z,x,y,32,R12,R13,R14,R15, R9,R10,R11) \ + maddBmi2Adx(z,x,y,40,R13,R14,R15, R9,R10,R11,R12) \ + maddBmi2Adx(z,x,y,48,R14,R15, R9,R10,R11,R12,R13) \ + MOVQ R15, 56+z; \ + MOVQ R9, 64+z; \ + MOVQ R10, 72+z; \ + MOVQ R11, 80+z; \ + MOVQ R12, 88+z; \ + MOVQ R13, 96+z; \ + MOVQ R14, 104+z; + +// maddLegacy multiplies x and y and accumulates in z +// Uses: AX, DX, R15, FLAGS +// Instr: x86_64 +#define maddLegacy(z,x,y,i) \ + MOVQ i+y, R15; \ + MOVQ 0+x, AX; MULQ R15; MOVQ AX, R8; ;;;;;;;;;;;; MOVQ DX, R9; \ + MOVQ 8+x, AX; MULQ R15; ADDQ AX, R9; ADCQ $0, DX; MOVQ DX, R10; \ + MOVQ 16+x, AX; MULQ R15; ADDQ AX, R10; ADCQ $0, DX; MOVQ DX, R11; \ + MOVQ 24+x, AX; MULQ R15; ADDQ AX, R11; ADCQ $0, DX; MOVQ DX, R12; \ + MOVQ 32+x, AX; MULQ R15; ADDQ AX, R12; ADCQ $0, DX; MOVQ DX, R13; \ + MOVQ 40+x, AX; MULQ R15; ADDQ AX, R13; ADCQ $0, DX; MOVQ DX, R14; \ + MOVQ 48+x, AX; MULQ R15; ADDQ AX, R14; ADCQ $0, DX; \ + ADDQ 0+i+z, R8; MOVQ R8, 0+i+z; \ + ADCQ 8+i+z, R9; MOVQ R9, 8+i+z; \ + ADCQ 16+i+z, R10; MOVQ R10, 16+i+z; \ + ADCQ 24+i+z, R11; MOVQ R11, 24+i+z; \ + ADCQ 32+i+z, R12; MOVQ R12, 32+i+z; \ + ADCQ 40+i+z, R13; MOVQ R13, 40+i+z; \ + ADCQ 48+i+z, R14; MOVQ R14, 48+i+z; \ + ADCQ $0, DX; MOVQ DX, 56+i+z; + +// integerMulLeg multiplies x and y and stores in z +// Uses: AX, DX, R8-R15, FLAGS +// Instr: x86_64 +#define integerMulLeg(z,x,y) \ + MOVQ 0+y, R15; \ + MOVQ 0+x, AX; MULQ R15; MOVQ AX, 0+z; ;;;;;;;;;;;; MOVQ DX, R8; \ + MOVQ 8+x, AX; MULQ R15; ADDQ AX, R8; ADCQ $0, DX; MOVQ DX, R9; MOVQ R8, 8+z; \ + MOVQ 16+x, AX; MULQ R15; ADDQ AX, R9; ADCQ $0, DX; MOVQ DX, R10; MOVQ R9, 16+z; \ + MOVQ 24+x, AX; MULQ R15; ADDQ AX, R10; ADCQ $0, DX; MOVQ DX, R11; MOVQ R10, 24+z; \ + MOVQ 32+x, AX; MULQ R15; ADDQ AX, R11; ADCQ $0, DX; MOVQ DX, R12; MOVQ R11, 32+z; \ + MOVQ 40+x, AX; MULQ R15; ADDQ AX, R12; ADCQ $0, DX; MOVQ DX, R13; MOVQ R12, 40+z; \ + MOVQ 48+x, AX; MULQ R15; ADDQ AX, R13; ADCQ $0, DX; MOVQ DX,56+z; MOVQ R13, 48+z; \ + maddLegacy(z,x,y, 8) \ + maddLegacy(z,x,y,16) \ + maddLegacy(z,x,y,24) \ + maddLegacy(z,x,y,32) \ + maddLegacy(z,x,y,40) \ + maddLegacy(z,x,y,48) + +// integerSqrLeg squares x and stores in z +// Uses: AX, CX, DX, R8-R15, FLAGS +// Instr: x86_64 +#define integerSqrLeg(z,x) \ + XORL R15, R15; \ + MOVQ 0+x, CX; \ + MOVQ CX, AX; MULQ CX; MOVQ AX, 0+z; MOVQ DX, R8; \ + ADDQ CX, CX; ADCQ $0, R15; \ + MOVQ 8+x, AX; MULQ CX; ADDQ AX, R8; ADCQ $0, DX; MOVQ DX, R9; MOVQ R8, 8+z; \ + MOVQ 16+x, AX; MULQ CX; ADDQ AX, R9; ADCQ $0, DX; MOVQ DX, R10; \ + MOVQ 24+x, AX; MULQ CX; ADDQ AX, R10; ADCQ $0, DX; MOVQ DX, R11; \ + MOVQ 32+x, AX; MULQ CX; ADDQ AX, R11; ADCQ $0, DX; MOVQ DX, R12; \ + MOVQ 40+x, AX; MULQ CX; ADDQ AX, R12; ADCQ $0, DX; MOVQ DX, R13; \ + MOVQ 48+x, AX; MULQ CX; ADDQ AX, R13; ADCQ $0, DX; MOVQ DX, R14; \ + \ + MOVQ 8+x, CX; \ + MOVQ CX, AX; ADDQ R15, CX; MOVQ $0, R15; ADCQ $0, R15; \ + ;;;;;;;;;;;;;; MULQ CX; ADDQ AX, R9; ADCQ $0, DX; MOVQ R9,16+z; \ + MOVQ R15, AX; NEGQ AX; ANDQ 8+x, AX; ADDQ AX, DX; ADCQ $0, R11; MOVQ DX, R8; \ + ADDQ 8+x, CX; ADCQ $0, R15; \ + MOVQ 16+x, AX; MULQ CX; ADDQ AX, R10; ADCQ $0, DX; ADDQ R8, R10; ADCQ $0, DX; MOVQ DX, R8; MOVQ R10, 24+z; \ + MOVQ 24+x, AX; MULQ CX; ADDQ AX, R11; ADCQ $0, DX; ADDQ R8, R11; ADCQ $0, DX; MOVQ DX, R8; \ + MOVQ 32+x, AX; MULQ CX; ADDQ AX, R12; ADCQ $0, DX; ADDQ R8, R12; ADCQ $0, DX; MOVQ DX, R8; \ + MOVQ 40+x, AX; MULQ CX; ADDQ AX, R13; ADCQ $0, DX; ADDQ R8, R13; ADCQ $0, DX; MOVQ DX, R8; \ + MOVQ 48+x, AX; MULQ CX; ADDQ AX, R14; ADCQ $0, DX; ADDQ R8, R14; ADCQ $0, DX; MOVQ DX, R9; \ + \ + MOVQ 16+x, CX; \ + MOVQ CX, AX; ADDQ R15, CX; MOVQ $0, R15; ADCQ $0, R15; \ + ;;;;;;;;;;;;;; MULQ CX; ADDQ AX, R11; ADCQ $0, DX; MOVQ R11, 32+z; \ + MOVQ R15, AX; NEGQ AX; ANDQ 16+x,AX; ADDQ AX, DX; ADCQ $0, R13; MOVQ DX, R8; \ + ADDQ 16+x, CX; ADCQ $0, R15; \ + MOVQ 24+x, AX; MULQ CX; ADDQ AX, R12; ADCQ $0, DX; ADDQ R8, R12; ADCQ $0, DX; MOVQ DX, R8; MOVQ R12, 40+z; \ + MOVQ 32+x, AX; MULQ CX; ADDQ AX, R13; ADCQ $0, DX; ADDQ R8, R13; ADCQ $0, DX; MOVQ DX, R8; \ + MOVQ 40+x, AX; MULQ CX; ADDQ AX, R14; ADCQ $0, DX; ADDQ R8, R14; ADCQ $0, DX; MOVQ DX, R8; \ + MOVQ 48+x, AX; MULQ CX; ADDQ AX, R9; ADCQ $0, DX; ADDQ R8, R9; ADCQ $0, DX; MOVQ DX,R10; \ + \ + MOVQ 24+x, CX; \ + MOVQ CX, AX; ADDQ R15, CX; MOVQ $0, R15; ADCQ $0, R15; \ + ;;;;;;;;;;;;;; MULQ CX; ADDQ AX, R13; ADCQ $0, DX; MOVQ R13, 48+z; \ + MOVQ R15, AX; NEGQ AX; ANDQ 24+x,AX; ADDQ AX, DX; ADCQ $0, R9; MOVQ DX, R8; \ + ADDQ 24+x, CX; ADCQ $0, R15; \ + MOVQ 32+x, AX; MULQ CX; ADDQ AX, R14; ADCQ $0, DX; ADDQ R8, R14; ADCQ $0, DX; MOVQ DX, R8; MOVQ R14, 56+z; \ + MOVQ 40+x, AX; MULQ CX; ADDQ AX, R9; ADCQ $0, DX; ADDQ R8, R9; ADCQ $0, DX; MOVQ DX, R8; \ + MOVQ 48+x, AX; MULQ CX; ADDQ AX, R10; ADCQ $0, DX; ADDQ R8, R10; ADCQ $0, DX; MOVQ DX,R11; \ + \ + MOVQ 32+x, CX; \ + MOVQ CX, AX; ADDQ R15, CX; MOVQ $0, R15; ADCQ $0, R15; \ + ;;;;;;;;;;;;;; MULQ CX; ADDQ AX, R9; ADCQ $0, DX; MOVQ R9, 64+z; \ + MOVQ R15, AX; NEGQ AX; ANDQ 32+x,AX; ADDQ AX, DX; ADCQ $0, R11; MOVQ DX, R8; \ + ADDQ 32+x, CX; ADCQ $0, R15; \ + MOVQ 40+x, AX; MULQ CX; ADDQ AX, R10; ADCQ $0, DX; ADDQ R8, R10; ADCQ $0, DX; MOVQ DX, R8; MOVQ R10, 72+z; \ + MOVQ 48+x, AX; MULQ CX; ADDQ AX, R11; ADCQ $0, DX; ADDQ R8, R11; ADCQ $0, DX; MOVQ DX,R12; \ + \ + XORL R13, R13; \ + XORL R14, R14; \ + MOVQ 40+x, CX; \ + MOVQ CX, AX; ADDQ R15, CX; MOVQ $0, R15; ADCQ $0, R15; \ + ;;;;;;;;;;;;;; MULQ CX; ADDQ AX, R11; ADCQ $0, DX; MOVQ R11, 80+z; \ + MOVQ R15, AX; NEGQ AX; ANDQ 40+x,AX; ADDQ AX, DX; ADCQ $0, R13; MOVQ DX, R8; \ + ADDQ 40+x, CX; ADCQ $0, R15; \ + MOVQ 48+x, AX; MULQ CX; ADDQ AX, R12; ADCQ $0, DX; ADDQ R8, R12; ADCQ $0, DX; MOVQ DX, R8; MOVQ R12, 88+z; \ + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ADDQ R8, R13; ADCQ $0,R14; \ + \ + XORL R9, R9; \ + MOVQ 48+x, CX; \ + MOVQ CX, AX; ADDQ R15, CX; MOVQ $0, R15; ADCQ $0, R15; \ + ;;;;;;;;;;;;;; MULQ CX; ADDQ AX, R13; ADCQ $0, DX; MOVQ R13, 96+z; \ + MOVQ R15, AX; NEGQ AX; ANDQ 48+x,AX; ADDQ AX, DX; ADCQ $0, R9; MOVQ DX, R8; \ + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ADDQ R8,R14; ADCQ $0, R9; MOVQ R14, 104+z; + + +// integerSqrAdx squares x and stores in z +// Uses: AX, CX, DX, R8-R15, FLAGS +// Instr: x86_64, bmi2, adx +#define integerSqrAdx(z,x) \ + XORL R15, R15; \ + MOVQ 0+x, DX; \ + ;;;;;;;;;;;;;; MULXQ DX, AX, R8; MOVQ AX, 0+z; \ + ADDQ DX, DX; ADCQ $0, R15; CLC; \ + MULXQ 8+x, AX, R9; ADCXQ AX, R8; MOVQ R8, 8+z; \ + MULXQ 16+x, AX, R10; ADCXQ AX, R9; MOVQ $0, R8;\ + MULXQ 24+x, AX, R11; ADCXQ AX, R10; \ + MULXQ 32+x, AX, R12; ADCXQ AX, R11; \ + MULXQ 40+x, AX, R13; ADCXQ AX, R12; \ + MULXQ 48+x, AX, R14; ADCXQ AX, R13; \ + ;;;;;;;;;;;;;;;;;;;; ADCXQ R8, R14; \ + \ + MOVQ 8+x, DX; \ + MOVQ DX, AX; ADDQ R15, DX; MOVQ $0, R15; ADCQ $0, R15; \ + MULXQ AX, AX, CX; \ + MOVQ R15, R8; NEGQ R8; ANDQ 8+x, R8; \ + ADDQ AX, R9; MOVQ R9, 16+z; \ + ADCQ CX, R8; \ + ADCQ $0, R11; \ + ADDQ 8+x, DX; \ + ADCQ $0, R15; \ + XORL R9, R9; ;;;;;;;;;;;;;;;;;;;;; ADOXQ R8, R10; \ + MULXQ 16+x, AX, CX; ADCXQ AX, R10; ADOXQ CX, R11; MOVQ R10, 24+z; \ + MULXQ 24+x, AX, CX; ADCXQ AX, R11; ADOXQ CX, R12; MOVQ $0, R10; \ + MULXQ 32+x, AX, CX; ADCXQ AX, R12; ADOXQ CX, R13; \ + MULXQ 40+x, AX, CX; ADCXQ AX, R13; ADOXQ CX, R14; \ + MULXQ 48+x, AX, CX; ADCXQ AX, R14; ADOXQ CX, R9; \ + ;;;;;;;;;;;;;;;;;;; ADCXQ R10, R9; \ + \ + MOVQ 16+x, DX; \ + MOVQ DX, AX; ADDQ R15, DX; MOVQ $0, R15; ADCQ $0, R15; \ + MULXQ AX, AX, CX; \ + MOVQ R15, R8; NEGQ R8; ANDQ 16+x, R8; \ + ADDQ AX, R11; MOVQ R11, 32+z; \ + ADCQ CX, R8; \ + ADCQ $0, R13; \ + ADDQ 16+x, DX; \ + ADCQ $0, R15; \ + XORL R11, R11; ;;;;;;;;;;;;;;;;;;; ADOXQ R8, R12; \ + MULXQ 24+x, AX, CX; ADCXQ AX, R12; ADOXQ CX, R13; MOVQ R12, 40+z; \ + MULXQ 32+x, AX, CX; ADCXQ AX, R13; ADOXQ CX, R14; MOVQ $0, R12; \ + MULXQ 40+x, AX, CX; ADCXQ AX, R14; ADOXQ CX, R9; \ + MULXQ 48+x, AX, CX; ADCXQ AX, R9; ADOXQ CX, R10; \ + ;;;;;;;;;;;;;;;;;;; ADCXQ R11,R10; \ + \ + MOVQ 24+x, DX; \ + MOVQ DX, AX; ADDQ R15, DX; MOVQ $0, R15; ADCQ $0, R15; \ + MULXQ AX, AX, CX; \ + MOVQ R15, R8; NEGQ R8; ANDQ 24+x, R8; \ + ADDQ AX, R13; MOVQ R13, 48+z; \ + ADCQ CX, R8; \ + ADCQ $0, R9; \ + ADDQ 24+x, DX; \ + ADCQ $0, R15; \ + XORL R13, R13; ;;;;;;;;;;;;;;;;;;; ADOXQ R8, R14; \ + MULXQ 32+x, AX, CX; ADCXQ AX, R14; ADOXQ CX, R9; MOVQ R14, 56+z; \ + MULXQ 40+x, AX, CX; ADCXQ AX, R9; ADOXQ CX, R10; MOVQ $0, R14; \ + MULXQ 48+x, AX, CX; ADCXQ AX, R10; ADOXQ CX, R11; \ + ;;;;;;;;;;;;;;;;;;; ADCXQ R12,R11; \ + \ + MOVQ 32+x, DX; \ + MOVQ DX, AX; ADDQ R15, DX; MOVQ $0, R15; ADCQ $0, R15; \ + MULXQ AX, AX, CX; \ + MOVQ R15, R8; NEGQ R8; ANDQ 32+x, R8; \ + ADDQ AX, R9; MOVQ R9, 64+z; \ + ADCQ CX, R8; \ + ADCQ $0, R11; \ + ADDQ 32+x, DX; \ + ADCQ $0, R15; \ + XORL R9, R9; ;;;;;;;;;;;;;;;;;;;;; ADOXQ R8, R10; \ + MULXQ 40+x, AX, CX; ADCXQ AX, R10; ADOXQ CX, R11; MOVQ R10, 72+z; \ + MULXQ 48+x, AX, CX; ADCXQ AX, R11; ADOXQ CX, R12; \ + ;;;;;;;;;;;;;;;;;;; ADCXQ R13,R12; \ + \ + MOVQ 40+x, DX; \ + MOVQ DX, AX; ADDQ R15, DX; MOVQ $0, R15; ADCQ $0, R15; \ + MULXQ AX, AX, CX; \ + MOVQ R15, R8; NEGQ R8; ANDQ 40+x, R8; \ + ADDQ AX, R11; MOVQ R11, 80+z; \ + ADCQ CX, R8; \ + ADCQ $0, R13; \ + ADDQ 40+x, DX; \ + ADCQ $0, R15; \ + XORL R11, R11; ;;;;;;;;;;;;;;;;;;; ADOXQ R8, R12; \ + MULXQ 48+x, AX, CX; ADCXQ AX, R12; ADOXQ CX, R13; MOVQ R12, 88+z; \ + ;;;;;;;;;;;;;;;;;;; ADCXQ R14,R13; \ + \ + MOVQ 48+x, DX; \ + MOVQ DX, AX; ADDQ R15, DX; MOVQ $0, R15; ADCQ $0, R15; \ + MULXQ AX, AX, CX; \ + MOVQ R15, R8; NEGQ R8; ANDQ 48+x, R8; \ + XORL R10, R10; ;;;;;;;;;;;;;; ADOXQ CX, R14; \ + ;;;;;;;;;;;;;; ADCXQ AX, R13; ;;;;;;;;;;;;;; MOVQ R13, 96+z; \ + ;;;;;;;;;;;;;; ADCXQ R8, R14; MOVQ R14, 104+z; + +// reduceFromDoubleLeg finds a z=x modulo p such that z<2^448 and stores in z +// Uses: AX, R8-R15, FLAGS +// Instr: x86_64 +#define reduceFromDoubleLeg(z,x) \ + /* ( ,2C13,2C12,2C11,2C10|C10,C9,C8, C7) + (C6,...,C0) */ \ + /* (r14, r13, r12, r11, r10,r9,r8,r15) */ \ + MOVQ 80+x,AX; MOVQ AX,R10; \ + MOVQ $0xFFFFFFFF00000000, R8; \ + ANDQ R8,R10; \ + \ + MOVQ $0,R14; \ + MOVQ 104+x,R13; SHLQ $1,R13,R14; \ + MOVQ 96+x,R12; SHLQ $1,R12,R13; \ + MOVQ 88+x,R11; SHLQ $1,R11,R12; \ + MOVQ 72+x, R9; SHLQ $1,R10,R11; \ + MOVQ 64+x, R8; SHLQ $1,R10; \ + MOVQ $0xFFFFFFFF,R15; ANDQ R15,AX; ORQ AX,R10; \ + MOVQ 56+x,R15; \ + \ + ADDQ 0+x,R15; MOVQ R15, 0+z; MOVQ 56+x,R15; \ + ADCQ 8+x, R8; MOVQ R8, 8+z; MOVQ 64+x, R8; \ + ADCQ 16+x, R9; MOVQ R9,16+z; MOVQ 72+x, R9; \ + ADCQ 24+x,R10; MOVQ R10,24+z; MOVQ 80+x,R10; \ + ADCQ 32+x,R11; MOVQ R11,32+z; MOVQ 88+x,R11; \ + ADCQ 40+x,R12; MOVQ R12,40+z; MOVQ 96+x,R12; \ + ADCQ 48+x,R13; MOVQ R13,48+z; MOVQ 104+x,R13; \ + ADCQ $0,R14; \ + /* (c10c9,c9c8,c8c7,c7c13,c13c12,c12c11,c11c10) + (c6,...,c0) */ \ + /* ( r9, r8, r15, r13, r12, r11, r10) */ \ + MOVQ R10, AX; \ + SHRQ $32,R11,R10; \ + SHRQ $32,R12,R11; \ + SHRQ $32,R13,R12; \ + SHRQ $32,R15,R13; \ + SHRQ $32, R8,R15; \ + SHRQ $32, R9, R8; \ + SHRQ $32, AX, R9; \ + \ + ADDQ 0+z,R10; \ + ADCQ 8+z,R11; \ + ADCQ 16+z,R12; \ + ADCQ 24+z,R13; \ + ADCQ 32+z,R15; \ + ADCQ 40+z, R8; \ + ADCQ 48+z, R9; \ + ADCQ $0,R14; \ + /* ( c7) + (c6,...,c0) */ \ + /* (r14) */ \ + MOVQ R14, AX; SHLQ $32, AX; \ + ADDQ R14,R10; MOVQ $0,R14; \ + ADCQ $0,R11; \ + ADCQ $0,R12; \ + ADCQ AX,R13; \ + ADCQ $0,R15; \ + ADCQ $0, R8; \ + ADCQ $0, R9; \ + ADCQ $0,R14; \ + /* ( c7) + (c6,...,c0) */ \ + /* (r14) */ \ + MOVQ R14, AX; SHLQ $32,AX; \ + ADDQ R14,R10; MOVQ R10, 0+z; \ + ADCQ $0,R11; MOVQ R11, 8+z; \ + ADCQ $0,R12; MOVQ R12,16+z; \ + ADCQ AX,R13; MOVQ R13,24+z; \ + ADCQ $0,R15; MOVQ R15,32+z; \ + ADCQ $0, R8; MOVQ R8,40+z; \ + ADCQ $0, R9; MOVQ R9,48+z; + +// reduceFromDoubleAdx finds a z=x modulo p such that z<2^448 and stores in z +// Uses: AX, R8-R15, FLAGS +// Instr: x86_64, adx +#define reduceFromDoubleAdx(z,x) \ + /* ( ,2C13,2C12,2C11,2C10|C10,C9,C8, C7) + (C6,...,C0) */ \ + /* (r14, r13, r12, r11, r10,r9,r8,r15) */ \ + MOVQ 80+x,AX; MOVQ AX,R10; \ + MOVQ $0xFFFFFFFF00000000, R8; \ + ANDQ R8,R10; \ + \ + MOVQ $0,R14; \ + MOVQ 104+x,R13; SHLQ $1,R13,R14; \ + MOVQ 96+x,R12; SHLQ $1,R12,R13; \ + MOVQ 88+x,R11; SHLQ $1,R11,R12; \ + MOVQ 72+x, R9; SHLQ $1,R10,R11; \ + MOVQ 64+x, R8; SHLQ $1,R10; \ + MOVQ $0xFFFFFFFF,R15; ANDQ R15,AX; ORQ AX,R10; \ + MOVQ 56+x,R15; \ + \ + XORL AX,AX; \ + ADCXQ 0+x,R15; MOVQ R15, 0+z; MOVQ 56+x,R15; \ + ADCXQ 8+x, R8; MOVQ R8, 8+z; MOVQ 64+x, R8; \ + ADCXQ 16+x, R9; MOVQ R9,16+z; MOVQ 72+x, R9; \ + ADCXQ 24+x,R10; MOVQ R10,24+z; MOVQ 80+x,R10; \ + ADCXQ 32+x,R11; MOVQ R11,32+z; MOVQ 88+x,R11; \ + ADCXQ 40+x,R12; MOVQ R12,40+z; MOVQ 96+x,R12; \ + ADCXQ 48+x,R13; MOVQ R13,48+z; MOVQ 104+x,R13; \ + ADCXQ AX,R14; \ + /* (c10c9,c9c8,c8c7,c7c13,c13c12,c12c11,c11c10) + (c6,...,c0) */ \ + /* ( r9, r8, r15, r13, r12, r11, r10) */ \ + MOVQ R10, AX; \ + SHRQ $32,R11,R10; \ + SHRQ $32,R12,R11; \ + SHRQ $32,R13,R12; \ + SHRQ $32,R15,R13; \ + SHRQ $32, R8,R15; \ + SHRQ $32, R9, R8; \ + SHRQ $32, AX, R9; \ + \ + XORL AX,AX; \ + ADCXQ 0+z,R10; \ + ADCXQ 8+z,R11; \ + ADCXQ 16+z,R12; \ + ADCXQ 24+z,R13; \ + ADCXQ 32+z,R15; \ + ADCXQ 40+z, R8; \ + ADCXQ 48+z, R9; \ + ADCXQ AX,R14; \ + /* ( c7) + (c6,...,c0) */ \ + /* (r14) */ \ + MOVQ R14, AX; SHLQ $32, AX; \ + CLC; \ + ADCXQ R14,R10; MOVQ $0,R14; \ + ADCXQ R14,R11; \ + ADCXQ R14,R12; \ + ADCXQ AX,R13; \ + ADCXQ R14,R15; \ + ADCXQ R14, R8; \ + ADCXQ R14, R9; \ + ADCXQ R14,R14; \ + /* ( c7) + (c6,...,c0) */ \ + /* (r14) */ \ + MOVQ R14, AX; SHLQ $32, AX; \ + CLC; \ + ADCXQ R14,R10; MOVQ R10, 0+z; MOVQ $0,R14; \ + ADCXQ R14,R11; MOVQ R11, 8+z; \ + ADCXQ R14,R12; MOVQ R12,16+z; \ + ADCXQ AX,R13; MOVQ R13,24+z; \ + ADCXQ R14,R15; MOVQ R15,32+z; \ + ADCXQ R14, R8; MOVQ R8,40+z; \ + ADCXQ R14, R9; MOVQ R9,48+z; + +// addSub calculates two operations: x,y = x+y,x-y +// Uses: AX, DX, R8-R15, FLAGS +#define addSub(x,y) \ + MOVQ 0+x, R8; ADDQ 0+y, R8; \ + MOVQ 8+x, R9; ADCQ 8+y, R9; \ + MOVQ 16+x, R10; ADCQ 16+y, R10; \ + MOVQ 24+x, R11; ADCQ 24+y, R11; \ + MOVQ 32+x, R12; ADCQ 32+y, R12; \ + MOVQ 40+x, R13; ADCQ 40+y, R13; \ + MOVQ 48+x, R14; ADCQ 48+y, R14; \ + MOVQ $0, AX; ADCQ $0, AX; \ + MOVQ AX, DX; \ + SHLQ $32, DX; \ + ADDQ AX, R8; MOVQ $0, AX; \ + ADCQ $0, R9; \ + ADCQ $0, R10; \ + ADCQ DX, R11; \ + ADCQ $0, R12; \ + ADCQ $0, R13; \ + ADCQ $0, R14; \ + ADCQ $0, AX; \ + MOVQ AX, DX; \ + SHLQ $32, DX; \ + ADDQ AX, R8; MOVQ 0+x,AX; MOVQ R8, 0+x; MOVQ AX, R8; \ + ADCQ $0, R9; MOVQ 8+x,AX; MOVQ R9, 8+x; MOVQ AX, R9; \ + ADCQ $0, R10; MOVQ 16+x,AX; MOVQ R10, 16+x; MOVQ AX, R10; \ + ADCQ DX, R11; MOVQ 24+x,AX; MOVQ R11, 24+x; MOVQ AX, R11; \ + ADCQ $0, R12; MOVQ 32+x,AX; MOVQ R12, 32+x; MOVQ AX, R12; \ + ADCQ $0, R13; MOVQ 40+x,AX; MOVQ R13, 40+x; MOVQ AX, R13; \ + ADCQ $0, R14; MOVQ 48+x,AX; MOVQ R14, 48+x; MOVQ AX, R14; \ + SUBQ 0+y, R8; \ + SBBQ 8+y, R9; \ + SBBQ 16+y, R10; \ + SBBQ 24+y, R11; \ + SBBQ 32+y, R12; \ + SBBQ 40+y, R13; \ + SBBQ 48+y, R14; \ + MOVQ $0, AX; SETCS AX; \ + MOVQ AX, DX; \ + SHLQ $32, DX; \ + SUBQ AX, R8; MOVQ $0, AX; \ + SBBQ $0, R9; \ + SBBQ $0, R10; \ + SBBQ DX, R11; \ + SBBQ $0, R12; \ + SBBQ $0, R13; \ + SBBQ $0, R14; \ + SETCS AX; \ + MOVQ AX, DX; \ + SHLQ $32, DX; \ + SUBQ AX, R8; MOVQ R8, 0+y; \ + SBBQ $0, R9; MOVQ R9, 8+y; \ + SBBQ $0, R10; MOVQ R10, 16+y; \ + SBBQ DX, R11; MOVQ R11, 24+y; \ + SBBQ $0, R12; MOVQ R12, 32+y; \ + SBBQ $0, R13; MOVQ R13, 40+y; \ + SBBQ $0, R14; MOVQ R14, 48+y; diff --git a/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.s b/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.s new file mode 100644 index 0000000000000..435addf5e6ca3 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp448/fp_amd64.s @@ -0,0 +1,74 @@ +// +build amd64 + +#include "textflag.h" +#include "fp_amd64.h" + +// func cmovAmd64(x, y *Elt, n uint) +TEXT ·cmovAmd64(SB),NOSPLIT,$0-24 + MOVQ x+0(FP), DI + MOVQ y+8(FP), SI + MOVQ n+16(FP), BX + cselect(0(DI),0(SI),BX) + RET + +// func cswapAmd64(x, y *Elt, n uint) +TEXT ·cswapAmd64(SB),NOSPLIT,$0-24 + MOVQ x+0(FP), DI + MOVQ y+8(FP), SI + MOVQ n+16(FP), BX + cswap(0(DI),0(SI),BX) + RET + +// func subAmd64(z, x, y *Elt) +TEXT ·subAmd64(SB),NOSPLIT,$0-24 + MOVQ z+0(FP), DI + MOVQ x+8(FP), SI + MOVQ y+16(FP), BX + subtraction(0(DI),0(SI),0(BX)) + RET + +// func addsubAmd64(x, y *Elt) +TEXT ·addsubAmd64(SB),NOSPLIT,$0-16 + MOVQ x+0(FP), DI + MOVQ y+8(FP), SI + addSub(0(DI),0(SI)) + RET + +#define addLegacy \ + additionLeg(0(DI),0(SI),0(BX)) +#define addBmi2Adx \ + additionAdx(0(DI),0(SI),0(BX)) + +#define mulLegacy \ + integerMulLeg(0(SP),0(SI),0(BX)) \ + reduceFromDoubleLeg(0(DI),0(SP)) +#define mulBmi2Adx \ + integerMulAdx(0(SP),0(SI),0(BX)) \ + reduceFromDoubleAdx(0(DI),0(SP)) + +#define sqrLegacy \ + integerSqrLeg(0(SP),0(SI)) \ + reduceFromDoubleLeg(0(DI),0(SP)) +#define sqrBmi2Adx \ + integerSqrAdx(0(SP),0(SI)) \ + reduceFromDoubleAdx(0(DI),0(SP)) + +// func addAmd64(z, x, y *Elt) +TEXT ·addAmd64(SB),NOSPLIT,$0-24 + MOVQ z+0(FP), DI + MOVQ x+8(FP), SI + MOVQ y+16(FP), BX + CHECK_BMI2ADX(LADD, addLegacy, addBmi2Adx) + +// func mulAmd64(z, x, y *Elt) +TEXT ·mulAmd64(SB),NOSPLIT,$112-24 + MOVQ z+0(FP), DI + MOVQ x+8(FP), SI + MOVQ y+16(FP), BX + CHECK_BMI2ADX(LMUL, mulLegacy, mulBmi2Adx) + +// func sqrAmd64(z, x *Elt) +TEXT ·sqrAmd64(SB),NOSPLIT,$112-16 + MOVQ z+0(FP), DI + MOVQ x+8(FP), SI + CHECK_BMI2ADX(LSQR, sqrLegacy, sqrBmi2Adx) diff --git a/vendor/github.com/cloudflare/circl/math/fp448/fp_generic.go b/vendor/github.com/cloudflare/circl/math/fp448/fp_generic.go new file mode 100644 index 0000000000000..47a0b63205f8b --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp448/fp_generic.go @@ -0,0 +1,339 @@ +package fp448 + +import ( + "encoding/binary" + "math/bits" +) + +func cmovGeneric(x, y *Elt, n uint) { + m := -uint64(n & 0x1) + x0 := binary.LittleEndian.Uint64(x[0*8 : 1*8]) + x1 := binary.LittleEndian.Uint64(x[1*8 : 2*8]) + x2 := binary.LittleEndian.Uint64(x[2*8 : 3*8]) + x3 := binary.LittleEndian.Uint64(x[3*8 : 4*8]) + x4 := binary.LittleEndian.Uint64(x[4*8 : 5*8]) + x5 := binary.LittleEndian.Uint64(x[5*8 : 6*8]) + x6 := binary.LittleEndian.Uint64(x[6*8 : 7*8]) + + y0 := binary.LittleEndian.Uint64(y[0*8 : 1*8]) + y1 := binary.LittleEndian.Uint64(y[1*8 : 2*8]) + y2 := binary.LittleEndian.Uint64(y[2*8 : 3*8]) + y3 := binary.LittleEndian.Uint64(y[3*8 : 4*8]) + y4 := binary.LittleEndian.Uint64(y[4*8 : 5*8]) + y5 := binary.LittleEndian.Uint64(y[5*8 : 6*8]) + y6 := binary.LittleEndian.Uint64(y[6*8 : 7*8]) + + x0 = (x0 &^ m) | (y0 & m) + x1 = (x1 &^ m) | (y1 & m) + x2 = (x2 &^ m) | (y2 & m) + x3 = (x3 &^ m) | (y3 & m) + x4 = (x4 &^ m) | (y4 & m) + x5 = (x5 &^ m) | (y5 & m) + x6 = (x6 &^ m) | (y6 & m) + + binary.LittleEndian.PutUint64(x[0*8:1*8], x0) + binary.LittleEndian.PutUint64(x[1*8:2*8], x1) + binary.LittleEndian.PutUint64(x[2*8:3*8], x2) + binary.LittleEndian.PutUint64(x[3*8:4*8], x3) + binary.LittleEndian.PutUint64(x[4*8:5*8], x4) + binary.LittleEndian.PutUint64(x[5*8:6*8], x5) + binary.LittleEndian.PutUint64(x[6*8:7*8], x6) +} + +func cswapGeneric(x, y *Elt, n uint) { + m := -uint64(n & 0x1) + x0 := binary.LittleEndian.Uint64(x[0*8 : 1*8]) + x1 := binary.LittleEndian.Uint64(x[1*8 : 2*8]) + x2 := binary.LittleEndian.Uint64(x[2*8 : 3*8]) + x3 := binary.LittleEndian.Uint64(x[3*8 : 4*8]) + x4 := binary.LittleEndian.Uint64(x[4*8 : 5*8]) + x5 := binary.LittleEndian.Uint64(x[5*8 : 6*8]) + x6 := binary.LittleEndian.Uint64(x[6*8 : 7*8]) + + y0 := binary.LittleEndian.Uint64(y[0*8 : 1*8]) + y1 := binary.LittleEndian.Uint64(y[1*8 : 2*8]) + y2 := binary.LittleEndian.Uint64(y[2*8 : 3*8]) + y3 := binary.LittleEndian.Uint64(y[3*8 : 4*8]) + y4 := binary.LittleEndian.Uint64(y[4*8 : 5*8]) + y5 := binary.LittleEndian.Uint64(y[5*8 : 6*8]) + y6 := binary.LittleEndian.Uint64(y[6*8 : 7*8]) + + t0 := m & (x0 ^ y0) + t1 := m & (x1 ^ y1) + t2 := m & (x2 ^ y2) + t3 := m & (x3 ^ y3) + t4 := m & (x4 ^ y4) + t5 := m & (x5 ^ y5) + t6 := m & (x6 ^ y6) + x0 ^= t0 + x1 ^= t1 + x2 ^= t2 + x3 ^= t3 + x4 ^= t4 + x5 ^= t5 + x6 ^= t6 + y0 ^= t0 + y1 ^= t1 + y2 ^= t2 + y3 ^= t3 + y4 ^= t4 + y5 ^= t5 + y6 ^= t6 + + binary.LittleEndian.PutUint64(x[0*8:1*8], x0) + binary.LittleEndian.PutUint64(x[1*8:2*8], x1) + binary.LittleEndian.PutUint64(x[2*8:3*8], x2) + binary.LittleEndian.PutUint64(x[3*8:4*8], x3) + binary.LittleEndian.PutUint64(x[4*8:5*8], x4) + binary.LittleEndian.PutUint64(x[5*8:6*8], x5) + binary.LittleEndian.PutUint64(x[6*8:7*8], x6) + + binary.LittleEndian.PutUint64(y[0*8:1*8], y0) + binary.LittleEndian.PutUint64(y[1*8:2*8], y1) + binary.LittleEndian.PutUint64(y[2*8:3*8], y2) + binary.LittleEndian.PutUint64(y[3*8:4*8], y3) + binary.LittleEndian.PutUint64(y[4*8:5*8], y4) + binary.LittleEndian.PutUint64(y[5*8:6*8], y5) + binary.LittleEndian.PutUint64(y[6*8:7*8], y6) +} + +func addGeneric(z, x, y *Elt) { + x0 := binary.LittleEndian.Uint64(x[0*8 : 1*8]) + x1 := binary.LittleEndian.Uint64(x[1*8 : 2*8]) + x2 := binary.LittleEndian.Uint64(x[2*8 : 3*8]) + x3 := binary.LittleEndian.Uint64(x[3*8 : 4*8]) + x4 := binary.LittleEndian.Uint64(x[4*8 : 5*8]) + x5 := binary.LittleEndian.Uint64(x[5*8 : 6*8]) + x6 := binary.LittleEndian.Uint64(x[6*8 : 7*8]) + + y0 := binary.LittleEndian.Uint64(y[0*8 : 1*8]) + y1 := binary.LittleEndian.Uint64(y[1*8 : 2*8]) + y2 := binary.LittleEndian.Uint64(y[2*8 : 3*8]) + y3 := binary.LittleEndian.Uint64(y[3*8 : 4*8]) + y4 := binary.LittleEndian.Uint64(y[4*8 : 5*8]) + y5 := binary.LittleEndian.Uint64(y[5*8 : 6*8]) + y6 := binary.LittleEndian.Uint64(y[6*8 : 7*8]) + + z0, c0 := bits.Add64(x0, y0, 0) + z1, c1 := bits.Add64(x1, y1, c0) + z2, c2 := bits.Add64(x2, y2, c1) + z3, c3 := bits.Add64(x3, y3, c2) + z4, c4 := bits.Add64(x4, y4, c3) + z5, c5 := bits.Add64(x5, y5, c4) + z6, z7 := bits.Add64(x6, y6, c5) + + z0, c0 = bits.Add64(z0, z7, 0) + z1, c1 = bits.Add64(z1, 0, c0) + z2, c2 = bits.Add64(z2, 0, c1) + z3, c3 = bits.Add64(z3, z7<<32, c2) + z4, c4 = bits.Add64(z4, 0, c3) + z5, c5 = bits.Add64(z5, 0, c4) + z6, z7 = bits.Add64(z6, 0, c5) + + z0, c0 = bits.Add64(z0, z7, 0) + z1, c1 = bits.Add64(z1, 0, c0) + z2, c2 = bits.Add64(z2, 0, c1) + z3, c3 = bits.Add64(z3, z7<<32, c2) + z4, c4 = bits.Add64(z4, 0, c3) + z5, c5 = bits.Add64(z5, 0, c4) + z6, _ = bits.Add64(z6, 0, c5) + + binary.LittleEndian.PutUint64(z[0*8:1*8], z0) + binary.LittleEndian.PutUint64(z[1*8:2*8], z1) + binary.LittleEndian.PutUint64(z[2*8:3*8], z2) + binary.LittleEndian.PutUint64(z[3*8:4*8], z3) + binary.LittleEndian.PutUint64(z[4*8:5*8], z4) + binary.LittleEndian.PutUint64(z[5*8:6*8], z5) + binary.LittleEndian.PutUint64(z[6*8:7*8], z6) +} + +func subGeneric(z, x, y *Elt) { + x0 := binary.LittleEndian.Uint64(x[0*8 : 1*8]) + x1 := binary.LittleEndian.Uint64(x[1*8 : 2*8]) + x2 := binary.LittleEndian.Uint64(x[2*8 : 3*8]) + x3 := binary.LittleEndian.Uint64(x[3*8 : 4*8]) + x4 := binary.LittleEndian.Uint64(x[4*8 : 5*8]) + x5 := binary.LittleEndian.Uint64(x[5*8 : 6*8]) + x6 := binary.LittleEndian.Uint64(x[6*8 : 7*8]) + + y0 := binary.LittleEndian.Uint64(y[0*8 : 1*8]) + y1 := binary.LittleEndian.Uint64(y[1*8 : 2*8]) + y2 := binary.LittleEndian.Uint64(y[2*8 : 3*8]) + y3 := binary.LittleEndian.Uint64(y[3*8 : 4*8]) + y4 := binary.LittleEndian.Uint64(y[4*8 : 5*8]) + y5 := binary.LittleEndian.Uint64(y[5*8 : 6*8]) + y6 := binary.LittleEndian.Uint64(y[6*8 : 7*8]) + + z0, c0 := bits.Sub64(x0, y0, 0) + z1, c1 := bits.Sub64(x1, y1, c0) + z2, c2 := bits.Sub64(x2, y2, c1) + z3, c3 := bits.Sub64(x3, y3, c2) + z4, c4 := bits.Sub64(x4, y4, c3) + z5, c5 := bits.Sub64(x5, y5, c4) + z6, z7 := bits.Sub64(x6, y6, c5) + + z0, c0 = bits.Sub64(z0, z7, 0) + z1, c1 = bits.Sub64(z1, 0, c0) + z2, c2 = bits.Sub64(z2, 0, c1) + z3, c3 = bits.Sub64(z3, z7<<32, c2) + z4, c4 = bits.Sub64(z4, 0, c3) + z5, c5 = bits.Sub64(z5, 0, c4) + z6, z7 = bits.Sub64(z6, 0, c5) + + z0, c0 = bits.Sub64(z0, z7, 0) + z1, c1 = bits.Sub64(z1, 0, c0) + z2, c2 = bits.Sub64(z2, 0, c1) + z3, c3 = bits.Sub64(z3, z7<<32, c2) + z4, c4 = bits.Sub64(z4, 0, c3) + z5, c5 = bits.Sub64(z5, 0, c4) + z6, _ = bits.Sub64(z6, 0, c5) + + binary.LittleEndian.PutUint64(z[0*8:1*8], z0) + binary.LittleEndian.PutUint64(z[1*8:2*8], z1) + binary.LittleEndian.PutUint64(z[2*8:3*8], z2) + binary.LittleEndian.PutUint64(z[3*8:4*8], z3) + binary.LittleEndian.PutUint64(z[4*8:5*8], z4) + binary.LittleEndian.PutUint64(z[5*8:6*8], z5) + binary.LittleEndian.PutUint64(z[6*8:7*8], z6) +} + +func addsubGeneric(x, y *Elt) { + z := &Elt{} + addGeneric(z, x, y) + subGeneric(y, x, y) + *x = *z +} + +func mulGeneric(z, x, y *Elt) { + x0 := binary.LittleEndian.Uint64(x[0*8 : 1*8]) + x1 := binary.LittleEndian.Uint64(x[1*8 : 2*8]) + x2 := binary.LittleEndian.Uint64(x[2*8 : 3*8]) + x3 := binary.LittleEndian.Uint64(x[3*8 : 4*8]) + x4 := binary.LittleEndian.Uint64(x[4*8 : 5*8]) + x5 := binary.LittleEndian.Uint64(x[5*8 : 6*8]) + x6 := binary.LittleEndian.Uint64(x[6*8 : 7*8]) + + y0 := binary.LittleEndian.Uint64(y[0*8 : 1*8]) + y1 := binary.LittleEndian.Uint64(y[1*8 : 2*8]) + y2 := binary.LittleEndian.Uint64(y[2*8 : 3*8]) + y3 := binary.LittleEndian.Uint64(y[3*8 : 4*8]) + y4 := binary.LittleEndian.Uint64(y[4*8 : 5*8]) + y5 := binary.LittleEndian.Uint64(y[5*8 : 6*8]) + y6 := binary.LittleEndian.Uint64(y[6*8 : 7*8]) + + yy := [7]uint64{y0, y1, y2, y3, y4, y5, y6} + zz := [7]uint64{} + + yi := yy[0] + h0, l0 := bits.Mul64(x0, yi) + h1, l1 := bits.Mul64(x1, yi) + h2, l2 := bits.Mul64(x2, yi) + h3, l3 := bits.Mul64(x3, yi) + h4, l4 := bits.Mul64(x4, yi) + h5, l5 := bits.Mul64(x5, yi) + h6, l6 := bits.Mul64(x6, yi) + + zz[0] = l0 + a0, c0 := bits.Add64(h0, l1, 0) + a1, c1 := bits.Add64(h1, l2, c0) + a2, c2 := bits.Add64(h2, l3, c1) + a3, c3 := bits.Add64(h3, l4, c2) + a4, c4 := bits.Add64(h4, l5, c3) + a5, c5 := bits.Add64(h5, l6, c4) + a6, _ := bits.Add64(h6, 0, c5) + + for i := 1; i < 7; i++ { + yi = yy[i] + h0, l0 = bits.Mul64(x0, yi) + h1, l1 = bits.Mul64(x1, yi) + h2, l2 = bits.Mul64(x2, yi) + h3, l3 = bits.Mul64(x3, yi) + h4, l4 = bits.Mul64(x4, yi) + h5, l5 = bits.Mul64(x5, yi) + h6, l6 = bits.Mul64(x6, yi) + + zz[i], c0 = bits.Add64(a0, l0, 0) + a0, c1 = bits.Add64(a1, l1, c0) + a1, c2 = bits.Add64(a2, l2, c1) + a2, c3 = bits.Add64(a3, l3, c2) + a3, c4 = bits.Add64(a4, l4, c3) + a4, c5 = bits.Add64(a5, l5, c4) + a5, a6 = bits.Add64(a6, l6, c5) + + a0, c0 = bits.Add64(a0, h0, 0) + a1, c1 = bits.Add64(a1, h1, c0) + a2, c2 = bits.Add64(a2, h2, c1) + a3, c3 = bits.Add64(a3, h3, c2) + a4, c4 = bits.Add64(a4, h4, c3) + a5, c5 = bits.Add64(a5, h5, c4) + a6, _ = bits.Add64(a6, h6, c5) + } + red64(z, &zz, &[7]uint64{a0, a1, a2, a3, a4, a5, a6}) +} + +func sqrGeneric(z, x *Elt) { mulGeneric(z, x, x) } + +func red64(z *Elt, l, h *[7]uint64) { + /* (2C13, 2C12, 2C11, 2C10|C10, C9, C8, C7) + (C6,...,C0) */ + h0 := h[0] + h1 := h[1] + h2 := h[2] + h3 := ((h[3] & (0xFFFFFFFF << 32)) << 1) | (h[3] & 0xFFFFFFFF) + h4 := (h[3] >> 63) | (h[4] << 1) + h5 := (h[4] >> 63) | (h[5] << 1) + h6 := (h[5] >> 63) | (h[6] << 1) + h7 := (h[6] >> 63) + + l0, c0 := bits.Add64(h0, l[0], 0) + l1, c1 := bits.Add64(h1, l[1], c0) + l2, c2 := bits.Add64(h2, l[2], c1) + l3, c3 := bits.Add64(h3, l[3], c2) + l4, c4 := bits.Add64(h4, l[4], c3) + l5, c5 := bits.Add64(h5, l[5], c4) + l6, c6 := bits.Add64(h6, l[6], c5) + l7, _ := bits.Add64(h7, 0, c6) + + /* (C10C9, C9C8,C8C7,C7C13,C13C12,C12C11,C11C10) + (C6,...,C0) */ + h0 = (h[3] >> 32) | (h[4] << 32) + h1 = (h[4] >> 32) | (h[5] << 32) + h2 = (h[5] >> 32) | (h[6] << 32) + h3 = (h[6] >> 32) | (h[0] << 32) + h4 = (h[0] >> 32) | (h[1] << 32) + h5 = (h[1] >> 32) | (h[2] << 32) + h6 = (h[2] >> 32) | (h[3] << 32) + + l0, c0 = bits.Add64(l0, h0, 0) + l1, c1 = bits.Add64(l1, h1, c0) + l2, c2 = bits.Add64(l2, h2, c1) + l3, c3 = bits.Add64(l3, h3, c2) + l4, c4 = bits.Add64(l4, h4, c3) + l5, c5 = bits.Add64(l5, h5, c4) + l6, c6 = bits.Add64(l6, h6, c5) + l7, _ = bits.Add64(l7, 0, c6) + + /* (C7) + (C6,...,C0) */ + l0, c0 = bits.Add64(l0, l7, 0) + l1, c1 = bits.Add64(l1, 0, c0) + l2, c2 = bits.Add64(l2, 0, c1) + l3, c3 = bits.Add64(l3, l7<<32, c2) + l4, c4 = bits.Add64(l4, 0, c3) + l5, c5 = bits.Add64(l5, 0, c4) + l6, l7 = bits.Add64(l6, 0, c5) + + /* (C7) + (C6,...,C0) */ + l0, c0 = bits.Add64(l0, l7, 0) + l1, c1 = bits.Add64(l1, 0, c0) + l2, c2 = bits.Add64(l2, 0, c1) + l3, c3 = bits.Add64(l3, l7<<32, c2) + l4, c4 = bits.Add64(l4, 0, c3) + l5, c5 = bits.Add64(l5, 0, c4) + l6, _ = bits.Add64(l6, 0, c5) + + binary.LittleEndian.PutUint64(z[0*8:1*8], l0) + binary.LittleEndian.PutUint64(z[1*8:2*8], l1) + binary.LittleEndian.PutUint64(z[2*8:3*8], l2) + binary.LittleEndian.PutUint64(z[3*8:4*8], l3) + binary.LittleEndian.PutUint64(z[4*8:5*8], l4) + binary.LittleEndian.PutUint64(z[5*8:6*8], l5) + binary.LittleEndian.PutUint64(z[6*8:7*8], l6) +} diff --git a/vendor/github.com/cloudflare/circl/math/fp448/fp_noasm.go b/vendor/github.com/cloudflare/circl/math/fp448/fp_noasm.go new file mode 100644 index 0000000000000..a62225d296240 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp448/fp_noasm.go @@ -0,0 +1,12 @@ +//go:build !amd64 || purego +// +build !amd64 purego + +package fp448 + +func cmov(x, y *Elt, n uint) { cmovGeneric(x, y, n) } +func cswap(x, y *Elt, n uint) { cswapGeneric(x, y, n) } +func add(z, x, y *Elt) { addGeneric(z, x, y) } +func sub(z, x, y *Elt) { subGeneric(z, x, y) } +func addsub(x, y *Elt) { addsubGeneric(x, y) } +func mul(z, x, y *Elt) { mulGeneric(z, x, y) } +func sqr(z, x *Elt) { sqrGeneric(z, x) } diff --git a/vendor/github.com/cloudflare/circl/math/fp448/fuzzer.go b/vendor/github.com/cloudflare/circl/math/fp448/fuzzer.go new file mode 100644 index 0000000000000..2d7afc8059845 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/fp448/fuzzer.go @@ -0,0 +1,75 @@ +//go:build gofuzz +// +build gofuzz + +// How to run the fuzzer: +// +// $ go get -u github.com/dvyukov/go-fuzz/go-fuzz +// $ go get -u github.com/dvyukov/go-fuzz/go-fuzz-build +// $ go-fuzz-build -libfuzzer -func FuzzReduction -o lib.a +// $ clang -fsanitize=fuzzer lib.a -o fu.exe +// $ ./fu.exe +package fp448 + +import ( + "encoding/binary" + "fmt" + "math/big" + + "github.com/cloudflare/circl/internal/conv" +) + +// FuzzReduction is a fuzzer target for red64 function, which reduces t +// (112 bits) to a number t' (56 bits) congruent modulo p448. +func FuzzReduction(data []byte) int { + if len(data) != 2*Size { + return -1 + } + var got, want Elt + var lo, hi [7]uint64 + a := data[:Size] + b := data[Size:] + lo[0] = binary.LittleEndian.Uint64(a[0*8 : 1*8]) + lo[1] = binary.LittleEndian.Uint64(a[1*8 : 2*8]) + lo[2] = binary.LittleEndian.Uint64(a[2*8 : 3*8]) + lo[3] = binary.LittleEndian.Uint64(a[3*8 : 4*8]) + lo[4] = binary.LittleEndian.Uint64(a[4*8 : 5*8]) + lo[5] = binary.LittleEndian.Uint64(a[5*8 : 6*8]) + lo[6] = binary.LittleEndian.Uint64(a[6*8 : 7*8]) + + hi[0] = binary.LittleEndian.Uint64(b[0*8 : 1*8]) + hi[1] = binary.LittleEndian.Uint64(b[1*8 : 2*8]) + hi[2] = binary.LittleEndian.Uint64(b[2*8 : 3*8]) + hi[3] = binary.LittleEndian.Uint64(b[3*8 : 4*8]) + hi[4] = binary.LittleEndian.Uint64(b[4*8 : 5*8]) + hi[5] = binary.LittleEndian.Uint64(b[5*8 : 6*8]) + hi[6] = binary.LittleEndian.Uint64(b[6*8 : 7*8]) + + red64(&got, &lo, &hi) + + t := conv.BytesLe2BigInt(data[:2*Size]) + + two448 := big.NewInt(1) + two448.Lsh(two448, 448) // 2^448 + mask448 := big.NewInt(1) + mask448.Sub(two448, mask448) // 2^448-1 + two224plus1 := big.NewInt(1) + two224plus1.Lsh(two224plus1, 224) + two224plus1.Add(two224plus1, big.NewInt(1)) // 2^224+1 + + var loBig, hiBig big.Int + for t.Cmp(two448) >= 0 { + loBig.And(t, mask448) + hiBig.Rsh(t, 448) + t.Mul(&hiBig, two224plus1) + t.Add(t, &loBig) + } + conv.BigInt2BytesLe(want[:], t) + + if got != want { + fmt.Printf("in: %v\n", conv.BytesLe2BigInt(data[:2*Size])) + fmt.Printf("got: %v\n", got) + fmt.Printf("want: %v\n", want) + panic("error found") + } + return 1 +} diff --git a/vendor/github.com/cloudflare/circl/math/mlsbset/mlsbset.go b/vendor/github.com/cloudflare/circl/math/mlsbset/mlsbset.go new file mode 100644 index 0000000000000..a43851b8bb2b3 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/mlsbset/mlsbset.go @@ -0,0 +1,122 @@ +// Package mlsbset provides a constant-time exponentiation method with precomputation. +// +// References: "Efficient and secure algorithms for GLV-based scalar +// multiplication and their implementation on GLV–GLS curves" by (Faz-Hernandez et al.) +// - https://doi.org/10.1007/s13389-014-0085-7 +// - https://eprint.iacr.org/2013/158 +package mlsbset + +import ( + "errors" + "fmt" + "math/big" + + "github.com/cloudflare/circl/internal/conv" +) + +// EltG is a group element. +type EltG interface{} + +// EltP is a precomputed group element. +type EltP interface{} + +// Group defines the operations required by MLSBSet exponentiation method. +type Group interface { + Identity() EltG // Returns the identity of the group. + Sqr(x EltG) // Calculates x = x^2. + Mul(x EltG, y EltP) // Calculates x = x*y. + NewEltP() EltP // Returns an arbitrary precomputed element. + ExtendedEltP() EltP // Returns the precomputed element x^(2^(w*d)). + Lookup(a EltP, v uint, s, u int32) // Sets a = s*T[v][u]. +} + +// Params contains the parameters of the encoding. +type Params struct { + T uint // T is the maximum size (in bits) of exponents. + V uint // V is the number of tables. + W uint // W is the window size. + E uint // E is the number of digits per table. + D uint // D is the number of digits in total. + L uint // L is the length of the code. +} + +// Encoder allows to convert integers into valid powers. +type Encoder struct{ p Params } + +// New produces an encoder of the MLSBSet algorithm. +func New(t, v, w uint) (Encoder, error) { + if !(t > 1 && v >= 1 && w >= 2) { + return Encoder{}, errors.New("t>1, v>=1, w>=2") + } + e := (t + w*v - 1) / (w * v) + d := e * v + l := d * w + return Encoder{Params{t, v, w, e, d, l}}, nil +} + +// Encode converts an odd integer k into a valid power for exponentiation. +func (m Encoder) Encode(k []byte) (*Power, error) { + if len(k) == 0 { + return nil, errors.New("empty slice") + } + if !(len(k) <= int(m.p.L+7)>>3) { + return nil, errors.New("k too big") + } + if k[0]%2 == 0 { + return nil, errors.New("k must be odd") + } + ap := int((m.p.L+7)/8) - len(k) + k = append(k, make([]byte, ap)...) + s := m.signs(k) + b := make([]int32, m.p.L-m.p.D) + c := conv.BytesLe2BigInt(k) + c.Rsh(c, m.p.D) + var bi big.Int + for i := m.p.D; i < m.p.L; i++ { + c0 := int32(c.Bit(0)) + b[i-m.p.D] = s[i%m.p.D] * c0 + bi.SetInt64(int64(b[i-m.p.D] >> 1)) + c.Rsh(c, 1) + c.Sub(c, &bi) + } + carry := int(c.Int64()) + return &Power{m, s, b, carry}, nil +} + +// signs calculates the set of signs. +func (m Encoder) signs(k []byte) []int32 { + s := make([]int32, m.p.D) + s[m.p.D-1] = 1 + for i := uint(1); i < m.p.D; i++ { + ki := int32((k[i>>3] >> (i & 0x7)) & 0x1) + s[i-1] = 2*ki - 1 + } + return s +} + +// GetParams returns the complementary parameters of the encoding. +func (m Encoder) GetParams() Params { return m.p } + +// tableSize returns the size of each table. +func (m Encoder) tableSize() uint { return 1 << (m.p.W - 1) } + +// Elts returns the total number of elements that must be precomputed. +func (m Encoder) Elts() uint { return m.p.V * m.tableSize() } + +// IsExtended returns true if the element x^(2^(wd)) must be calculated. +func (m Encoder) IsExtended() bool { q := m.p.T / (m.p.V * m.p.W); return m.p.T == q*m.p.V*m.p.W } + +// Ops returns the number of squares and multiplications executed during an exponentiation. +func (m Encoder) Ops() (S uint, M uint) { + S = m.p.E + M = m.p.E * m.p.V + if m.IsExtended() { + M++ + } + return +} + +func (m Encoder) String() string { + return fmt.Sprintf("T: %v W: %v V: %v e: %v d: %v l: %v wv|t: %v", + m.p.T, m.p.W, m.p.V, m.p.E, m.p.D, m.p.L, m.IsExtended()) +} diff --git a/vendor/github.com/cloudflare/circl/math/mlsbset/power.go b/vendor/github.com/cloudflare/circl/math/mlsbset/power.go new file mode 100644 index 0000000000000..3f214c3046afb --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/mlsbset/power.go @@ -0,0 +1,64 @@ +package mlsbset + +import "fmt" + +// Power is a valid exponent produced by the MLSBSet encoding algorithm. +type Power struct { + set Encoder // parameters of code. + s []int32 // set of signs. + b []int32 // set of digits. + c int // carry is {0,1}. +} + +// Exp is calculates x^k, where x is a predetermined element of a group G. +func (p *Power) Exp(G Group) EltG { + a, b := G.Identity(), G.NewEltP() + for e := int(p.set.p.E - 1); e >= 0; e-- { + G.Sqr(a) + for v := uint(0); v < p.set.p.V; v++ { + sgnElt, idElt := p.Digit(v, uint(e)) + G.Lookup(b, v, sgnElt, idElt) + G.Mul(a, b) + } + } + if p.set.IsExtended() && p.c == 1 { + G.Mul(a, G.ExtendedEltP()) + } + return a +} + +// Digit returns the (v,e)-th digit and its sign. +func (p *Power) Digit(v, e uint) (sgn, dig int32) { + sgn = p.bit(0, v, e) + dig = 0 + for i := p.set.p.W - 1; i > 0; i-- { + dig = 2*dig + p.bit(i, v, e) + } + mask := dig >> 31 + dig = (dig + mask) ^ mask + return sgn, dig +} + +// bit returns the (w,v,e)-th bit of the code. +func (p *Power) bit(w, v, e uint) int32 { + if !(w < p.set.p.W && + v < p.set.p.V && + e < p.set.p.E) { + panic(fmt.Errorf("indexes outside (%v,%v,%v)", w, v, e)) + } + if w == 0 { + return p.s[p.set.p.E*v+e] + } + return p.b[p.set.p.D*(w-1)+p.set.p.E*v+e] +} + +func (p *Power) String() string { + dig := "" + for j := uint(0); j < p.set.p.V; j++ { + for i := uint(0); i < p.set.p.E; i++ { + s, d := p.Digit(j, i) + dig += fmt.Sprintf("(%2v,%2v) = %+2v %+2v\n", j, i, s, d) + } + } + return fmt.Sprintf("len: %v\ncarry: %v\ndigits:\n%v", len(p.b)+len(p.s), p.c, dig) +} diff --git a/vendor/github.com/cloudflare/circl/math/wnaf.go b/vendor/github.com/cloudflare/circl/math/wnaf.go new file mode 100644 index 0000000000000..94a1ec5042901 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/math/wnaf.go @@ -0,0 +1,84 @@ +// Package math provides some utility functions for big integers. +package math + +import "math/big" + +// SignedDigit obtains the signed-digit recoding of n and returns a list L of +// digits such that n = sum( L[i]*2^(i*(w-1)) ), and each L[i] is an odd number +// in the set {±1, ±3, ..., ±2^(w-1)-1}. The third parameter ensures that the +// output has ceil(l/(w-1)) digits. +// +// Restrictions: +// - n is odd and n > 0. +// - 1 < w < 32. +// - l >= bit length of n. +// +// References: +// - Alg.6 in "Exponent Recoding and Regular Exponentiation Algorithms" +// by Joye-Tunstall. http://doi.org/10.1007/978-3-642-02384-2_21 +// - Alg.6 in "Selecting Elliptic Curves for Cryptography: An Efficiency and +// Security Analysis" by Bos et al. http://doi.org/10.1007/s13389-015-0097-y +func SignedDigit(n *big.Int, w, l uint) []int32 { + if n.Sign() <= 0 || n.Bit(0) == 0 { + panic("n must be non-zero, odd, and positive") + } + if w <= 1 || w >= 32 { + panic("Verify that 1 < w < 32") + } + if uint(n.BitLen()) > l { + panic("n is too big to fit in l digits") + } + lenN := (l + (w - 1) - 1) / (w - 1) // ceil(l/(w-1)) + L := make([]int32, lenN+1) + var k, v big.Int + k.Set(n) + + var i uint + for i = 0; i < lenN; i++ { + words := k.Bits() + value := int32(words[0] & ((1 << w) - 1)) + value -= int32(1) << (w - 1) + L[i] = value + v.SetInt64(int64(value)) + k.Sub(&k, &v) + k.Rsh(&k, w-1) + } + L[i] = int32(k.Int64()) + return L +} + +// OmegaNAF obtains the window-w Non-Adjacent Form of a positive number n and +// 1 < w < 32. The returned slice L holds n = sum( L[i]*2^i ). +// +// Reference: +// - Alg.9 "Efficient arithmetic on Koblitz curves" by Solinas. +// http://doi.org/10.1023/A:1008306223194 +func OmegaNAF(n *big.Int, w uint) (L []int32) { + if n.Sign() < 0 { + panic("n must be positive") + } + if w <= 1 || w >= 32 { + panic("Verify that 1 < w < 32") + } + + L = make([]int32, n.BitLen()+1) + var k, v big.Int + k.Set(n) + + i := 0 + for ; k.Sign() > 0; i++ { + value := int32(0) + if k.Bit(0) == 1 { + words := k.Bits() + value = int32(words[0] & ((1 << w) - 1)) + if value >= (int32(1) << (w - 1)) { + value -= int32(1) << w + } + v.SetInt64(int64(value)) + k.Sub(&k, &v) + } + L[i] = value + k.Rsh(&k, 1) + } + return L[:i] +} diff --git a/vendor/github.com/cloudflare/circl/sign/ed25519/ed25519.go b/vendor/github.com/cloudflare/circl/sign/ed25519/ed25519.go new file mode 100644 index 0000000000000..08ca65d799a1c --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed25519/ed25519.go @@ -0,0 +1,453 @@ +// Package ed25519 implements Ed25519 signature scheme as described in RFC-8032. +// +// This package provides optimized implementations of the three signature +// variants and maintaining closer compatiblilty with crypto/ed25519. +// +// | Scheme Name | Sign Function | Verification | Context | +// |-------------|-------------------|---------------|-------------------| +// | Ed25519 | Sign | Verify | None | +// | Ed25519Ph | SignPh | VerifyPh | Yes, can be empty | +// | Ed25519Ctx | SignWithCtx | VerifyWithCtx | Yes, non-empty | +// | All above | (PrivateKey).Sign | VerifyAny | As above | +// +// Specific functions for sign and verify are defined. A generic signing +// function for all schemes is available through the crypto.Signer interface, +// which is implemented by the PrivateKey type. A correspond all-in-one +// verification method is provided by the VerifyAny function. +// +// Signing with Ed25519Ph or Ed25519Ctx requires a context string for domain +// separation. This parameter is passed using a SignerOptions struct defined +// in this package. While Ed25519Ph accepts an empty context, Ed25519Ctx +// enforces non-empty context strings. +// +// # Compatibility with crypto.ed25519 +// +// These functions are compatible with the “Ed25519” function defined in +// RFC-8032. However, unlike RFC 8032's formulation, this package's private +// key representation includes a public key suffix to make multiple signing +// operations with the same key more efficient. This package refers to the +// RFC-8032 private key as the “seed”. +// +// References +// +// - RFC-8032: https://rfc-editor.org/rfc/rfc8032.txt +// - Ed25519: https://ed25519.cr.yp.to/ +// - EdDSA: High-speed high-security signatures. https://doi.org/10.1007/s13389-012-0027-1 +package ed25519 + +import ( + "bytes" + "crypto" + cryptoRand "crypto/rand" + "crypto/sha512" + "crypto/subtle" + "errors" + "fmt" + "io" + "strconv" + + "github.com/cloudflare/circl/sign" +) + +const ( + // ContextMaxSize is the maximum length (in bytes) allowed for context. + ContextMaxSize = 255 + // PublicKeySize is the size, in bytes, of public keys as used in this package. + PublicKeySize = 32 + // PrivateKeySize is the size, in bytes, of private keys as used in this package. + PrivateKeySize = 64 + // SignatureSize is the size, in bytes, of signatures generated and verified by this package. + SignatureSize = 64 + // SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032. + SeedSize = 32 +) + +const ( + paramB = 256 / 8 // Size of keys in bytes. +) + +// SignerOptions implements crypto.SignerOpts and augments with parameters +// that are specific to the Ed25519 signature schemes. +type SignerOptions struct { + // Hash must be crypto.Hash(0) for Ed25519/Ed25519ctx, or crypto.SHA512 + // for Ed25519ph. + crypto.Hash + + // Context is an optional domain separation string for Ed25519ph and a + // must for Ed25519ctx. Its length must be less or equal than 255 bytes. + Context string + + // Scheme is an identifier for choosing a signature scheme. The zero value + // is ED25519. + Scheme SchemeID +} + +// SchemeID is an identifier for each signature scheme. +type SchemeID uint + +const ( + ED25519 SchemeID = iota + ED25519Ph + ED25519Ctx +) + +// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer. +type PrivateKey []byte + +// Equal reports whether priv and x have the same value. +func (priv PrivateKey) Equal(x crypto.PrivateKey) bool { + xx, ok := x.(PrivateKey) + return ok && subtle.ConstantTimeCompare(priv, xx) == 1 +} + +// Public returns the PublicKey corresponding to priv. +func (priv PrivateKey) Public() crypto.PublicKey { + publicKey := make(PublicKey, PublicKeySize) + copy(publicKey, priv[SeedSize:]) + return publicKey +} + +// Seed returns the private key seed corresponding to priv. It is provided for +// interoperability with RFC 8032. RFC 8032's private keys correspond to seeds +// in this package. +func (priv PrivateKey) Seed() []byte { + seed := make([]byte, SeedSize) + copy(seed, priv[:SeedSize]) + return seed +} + +func (priv PrivateKey) Scheme() sign.Scheme { return sch } + +func (pub PublicKey) Scheme() sign.Scheme { return sch } + +func (priv PrivateKey) MarshalBinary() (data []byte, err error) { + privateKey := make(PrivateKey, PrivateKeySize) + copy(privateKey, priv) + return privateKey, nil +} + +func (pub PublicKey) MarshalBinary() (data []byte, err error) { + publicKey := make(PublicKey, PublicKeySize) + copy(publicKey, pub) + return publicKey, nil +} + +// Equal reports whether pub and x have the same value. +func (pub PublicKey) Equal(x crypto.PublicKey) bool { + xx, ok := x.(PublicKey) + return ok && bytes.Equal(pub, xx) +} + +// Sign creates a signature of a message with priv key. +// This function is compatible with crypto.ed25519 and also supports the +// three signature variants defined in RFC-8032, namely Ed25519 (or pure +// EdDSA), Ed25519Ph, and Ed25519Ctx. +// The opts.HashFunc() must return zero to specify either Ed25519 or Ed25519Ctx +// variant. This can be achieved by passing crypto.Hash(0) as the value for +// opts. +// The opts.HashFunc() must return SHA512 to specify the Ed25519Ph variant. +// This can be achieved by passing crypto.SHA512 as the value for opts. +// Use a SignerOptions struct (defined in this package) to pass a context +// string for signing. +func (priv PrivateKey) Sign( + rand io.Reader, + message []byte, + opts crypto.SignerOpts, +) (signature []byte, err error) { + var ctx string + var scheme SchemeID + if o, ok := opts.(SignerOptions); ok { + ctx = o.Context + scheme = o.Scheme + } + + switch true { + case scheme == ED25519 && opts.HashFunc() == crypto.Hash(0): + return Sign(priv, message), nil + case scheme == ED25519Ph && opts.HashFunc() == crypto.SHA512: + return SignPh(priv, message, ctx), nil + case scheme == ED25519Ctx && opts.HashFunc() == crypto.Hash(0) && len(ctx) > 0: + return SignWithCtx(priv, message, ctx), nil + default: + return nil, errors.New("ed25519: bad hash algorithm") + } +} + +// GenerateKey generates a public/private key pair using entropy from rand. +// If rand is nil, crypto/rand.Reader will be used. +func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { + if rand == nil { + rand = cryptoRand.Reader + } + + seed := make([]byte, SeedSize) + if _, err := io.ReadFull(rand, seed); err != nil { + return nil, nil, err + } + + privateKey := NewKeyFromSeed(seed) + publicKey := make(PublicKey, PublicKeySize) + copy(publicKey, privateKey[SeedSize:]) + + return publicKey, privateKey, nil +} + +// NewKeyFromSeed calculates a private key from a seed. It will panic if +// len(seed) is not SeedSize. This function is provided for interoperability +// with RFC 8032. RFC 8032's private keys correspond to seeds in this +// package. +func NewKeyFromSeed(seed []byte) PrivateKey { + privateKey := make(PrivateKey, PrivateKeySize) + newKeyFromSeed(privateKey, seed) + return privateKey +} + +func newKeyFromSeed(privateKey, seed []byte) { + if l := len(seed); l != SeedSize { + panic("ed25519: bad seed length: " + strconv.Itoa(l)) + } + var P pointR1 + k := sha512.Sum512(seed) + clamp(k[:]) + reduceModOrder(k[:paramB], false) + P.fixedMult(k[:paramB]) + copy(privateKey[:SeedSize], seed) + _ = P.ToBytes(privateKey[SeedSize:]) +} + +func signAll(signature []byte, privateKey PrivateKey, message, ctx []byte, preHash bool) { + if l := len(privateKey); l != PrivateKeySize { + panic("ed25519: bad private key length: " + strconv.Itoa(l)) + } + + H := sha512.New() + var PHM []byte + + if preHash { + _, _ = H.Write(message) + PHM = H.Sum(nil) + H.Reset() + } else { + PHM = message + } + + // 1. Hash the 32-byte private key using SHA-512. + _, _ = H.Write(privateKey[:SeedSize]) + h := H.Sum(nil) + clamp(h[:]) + prefix, s := h[paramB:], h[:paramB] + + // 2. Compute SHA-512(dom2(F, C) || prefix || PH(M)) + H.Reset() + + writeDom(H, ctx, preHash) + + _, _ = H.Write(prefix) + _, _ = H.Write(PHM) + r := H.Sum(nil) + reduceModOrder(r[:], true) + + // 3. Compute the point [r]B. + var P pointR1 + P.fixedMult(r[:paramB]) + R := (&[paramB]byte{})[:] + if err := P.ToBytes(R); err != nil { + panic(err) + } + + // 4. Compute SHA512(dom2(F, C) || R || A || PH(M)). + H.Reset() + + writeDom(H, ctx, preHash) + + _, _ = H.Write(R) + _, _ = H.Write(privateKey[SeedSize:]) + _, _ = H.Write(PHM) + hRAM := H.Sum(nil) + + reduceModOrder(hRAM[:], true) + + // 5. Compute S = (r + k * s) mod order. + S := (&[paramB]byte{})[:] + calculateS(S, r[:paramB], hRAM[:paramB], s) + + // 6. The signature is the concatenation of R and S. + copy(signature[:paramB], R[:]) + copy(signature[paramB:], S[:]) +} + +// Sign signs the message with privateKey and returns a signature. +// This function supports the signature variant defined in RFC-8032: Ed25519, +// also known as the pure version of EdDSA. +// It will panic if len(privateKey) is not PrivateKeySize. +func Sign(privateKey PrivateKey, message []byte) []byte { + signature := make([]byte, SignatureSize) + signAll(signature, privateKey, message, []byte(""), false) + return signature +} + +// SignPh creates a signature of a message with private key and context. +// This function supports the signature variant defined in RFC-8032: Ed25519ph, +// meaning it internally hashes the message using SHA-512, and optionally +// accepts a context string. +// It will panic if len(privateKey) is not PrivateKeySize. +// Context could be passed to this function, which length should be no more than +// ContextMaxSize=255. It can be empty. +func SignPh(privateKey PrivateKey, message []byte, ctx string) []byte { + if len(ctx) > ContextMaxSize { + panic(fmt.Errorf("ed25519: bad context length: %v", len(ctx))) + } + + signature := make([]byte, SignatureSize) + signAll(signature, privateKey, message, []byte(ctx), true) + return signature +} + +// SignWithCtx creates a signature of a message with private key and context. +// This function supports the signature variant defined in RFC-8032: Ed25519ctx, +// meaning it accepts a non-empty context string. +// It will panic if len(privateKey) is not PrivateKeySize. +// Context must be passed to this function, which length should be no more than +// ContextMaxSize=255 and cannot be empty. +func SignWithCtx(privateKey PrivateKey, message []byte, ctx string) []byte { + if len(ctx) == 0 || len(ctx) > ContextMaxSize { + panic(fmt.Errorf("ed25519: bad context length: %v > %v", len(ctx), ContextMaxSize)) + } + + signature := make([]byte, SignatureSize) + signAll(signature, privateKey, message, []byte(ctx), false) + return signature +} + +func verify(public PublicKey, message, signature, ctx []byte, preHash bool) bool { + if len(public) != PublicKeySize || + len(signature) != SignatureSize || + !isLessThanOrder(signature[paramB:]) { + return false + } + + var P pointR1 + if ok := P.FromBytes(public); !ok { + return false + } + + H := sha512.New() + var PHM []byte + + if preHash { + _, _ = H.Write(message) + PHM = H.Sum(nil) + H.Reset() + } else { + PHM = message + } + + R := signature[:paramB] + + writeDom(H, ctx, preHash) + + _, _ = H.Write(R) + _, _ = H.Write(public) + _, _ = H.Write(PHM) + hRAM := H.Sum(nil) + reduceModOrder(hRAM[:], true) + + var Q pointR1 + encR := (&[paramB]byte{})[:] + P.neg() + Q.doubleMult(&P, signature[paramB:], hRAM[:paramB]) + _ = Q.ToBytes(encR) + return bytes.Equal(R, encR) +} + +// VerifyAny returns true if the signature is valid. Failure cases are invalid +// signature, or when the public key cannot be decoded. +// This function supports all the three signature variants defined in RFC-8032, +// namely Ed25519 (or pure EdDSA), Ed25519Ph, and Ed25519Ctx. +// The opts.HashFunc() must return zero to specify either Ed25519 or Ed25519Ctx +// variant. This can be achieved by passing crypto.Hash(0) as the value for opts. +// The opts.HashFunc() must return SHA512 to specify the Ed25519Ph variant. +// This can be achieved by passing crypto.SHA512 as the value for opts. +// Use a SignerOptions struct to pass a context string for signing. +func VerifyAny(public PublicKey, message, signature []byte, opts crypto.SignerOpts) bool { + var ctx string + var scheme SchemeID + if o, ok := opts.(SignerOptions); ok { + ctx = o.Context + scheme = o.Scheme + } + + switch true { + case scheme == ED25519 && opts.HashFunc() == crypto.Hash(0): + return Verify(public, message, signature) + case scheme == ED25519Ph && opts.HashFunc() == crypto.SHA512: + return VerifyPh(public, message, signature, ctx) + case scheme == ED25519Ctx && opts.HashFunc() == crypto.Hash(0) && len(ctx) > 0: + return VerifyWithCtx(public, message, signature, ctx) + default: + return false + } +} + +// Verify returns true if the signature is valid. Failure cases are invalid +// signature, or when the public key cannot be decoded. +// This function supports the signature variant defined in RFC-8032: Ed25519, +// also known as the pure version of EdDSA. +func Verify(public PublicKey, message, signature []byte) bool { + return verify(public, message, signature, []byte(""), false) +} + +// VerifyPh returns true if the signature is valid. Failure cases are invalid +// signature, or when the public key cannot be decoded. +// This function supports the signature variant defined in RFC-8032: Ed25519ph, +// meaning it internally hashes the message using SHA-512. +// Context could be passed to this function, which length should be no more than +// 255. It can be empty. +func VerifyPh(public PublicKey, message, signature []byte, ctx string) bool { + return verify(public, message, signature, []byte(ctx), true) +} + +// VerifyWithCtx returns true if the signature is valid. Failure cases are invalid +// signature, or when the public key cannot be decoded, or when context is +// not provided. +// This function supports the signature variant defined in RFC-8032: Ed25519ctx, +// meaning it does not handle prehashed messages. Non-empty context string must be +// provided, and must not be more than 255 of length. +func VerifyWithCtx(public PublicKey, message, signature []byte, ctx string) bool { + if len(ctx) == 0 || len(ctx) > ContextMaxSize { + return false + } + + return verify(public, message, signature, []byte(ctx), false) +} + +func clamp(k []byte) { + k[0] &= 248 + k[paramB-1] = (k[paramB-1] & 127) | 64 +} + +// isLessThanOrder returns true if 0 <= x < order. +func isLessThanOrder(x []byte) bool { + i := len(order) - 1 + for i > 0 && x[i] == order[i] { + i-- + } + return x[i] < order[i] +} + +func writeDom(h io.Writer, ctx []byte, preHash bool) { + dom2 := "SigEd25519 no Ed25519 collisions" + + if len(ctx) > 0 { + _, _ = h.Write([]byte(dom2)) + if preHash { + _, _ = h.Write([]byte{byte(0x01), byte(len(ctx))}) + } else { + _, _ = h.Write([]byte{byte(0x00), byte(len(ctx))}) + } + _, _ = h.Write(ctx) + } else if preHash { + _, _ = h.Write([]byte(dom2)) + _, _ = h.Write([]byte{0x01, 0x00}) + } +} diff --git a/vendor/github.com/cloudflare/circl/sign/ed25519/modular.go b/vendor/github.com/cloudflare/circl/sign/ed25519/modular.go new file mode 100644 index 0000000000000..10efafdcafbab --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed25519/modular.go @@ -0,0 +1,175 @@ +package ed25519 + +import ( + "encoding/binary" + "math/bits" +) + +var order = [paramB]byte{ + 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, + 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, +} + +// isLessThan returns true if 0 <= x < y, and assumes that slices have the same length. +func isLessThan(x, y []byte) bool { + i := len(x) - 1 + for i > 0 && x[i] == y[i] { + i-- + } + return x[i] < y[i] +} + +// reduceModOrder calculates k = k mod order of the curve. +func reduceModOrder(k []byte, is512Bit bool) { + var X [((2 * paramB) * 8) / 64]uint64 + numWords := len(k) >> 3 + for i := 0; i < numWords; i++ { + X[i] = binary.LittleEndian.Uint64(k[i*8 : (i+1)*8]) + } + red512(&X, is512Bit) + for i := 0; i < numWords; i++ { + binary.LittleEndian.PutUint64(k[i*8:(i+1)*8], X[i]) + } +} + +// red512 calculates x = x mod Order of the curve. +func red512(x *[8]uint64, full bool) { + // Implementation of Algs.(14.47)+(14.52) of Handbook of Applied + // Cryptography, by A. Menezes, P. van Oorschot, and S. Vanstone. + const ( + ell0 = uint64(0x5812631a5cf5d3ed) + ell1 = uint64(0x14def9dea2f79cd6) + ell160 = uint64(0x812631a5cf5d3ed0) + ell161 = uint64(0x4def9dea2f79cd65) + ell162 = uint64(0x0000000000000001) + ) + + var c0, c1, c2, c3 uint64 + r0, r1, r2, r3, r4 := x[0], x[1], x[2], x[3], uint64(0) + + if full { + q0, q1, q2, q3 := x[4], x[5], x[6], x[7] + + for i := 0; i < 3; i++ { + h0, s0 := bits.Mul64(q0, ell160) + h1, s1 := bits.Mul64(q1, ell160) + h2, s2 := bits.Mul64(q2, ell160) + h3, s3 := bits.Mul64(q3, ell160) + + s1, c0 = bits.Add64(h0, s1, 0) + s2, c1 = bits.Add64(h1, s2, c0) + s3, c2 = bits.Add64(h2, s3, c1) + s4, _ := bits.Add64(h3, 0, c2) + + h0, l0 := bits.Mul64(q0, ell161) + h1, l1 := bits.Mul64(q1, ell161) + h2, l2 := bits.Mul64(q2, ell161) + h3, l3 := bits.Mul64(q3, ell161) + + l1, c0 = bits.Add64(h0, l1, 0) + l2, c1 = bits.Add64(h1, l2, c0) + l3, c2 = bits.Add64(h2, l3, c1) + l4, _ := bits.Add64(h3, 0, c2) + + s1, c0 = bits.Add64(s1, l0, 0) + s2, c1 = bits.Add64(s2, l1, c0) + s3, c2 = bits.Add64(s3, l2, c1) + s4, c3 = bits.Add64(s4, l3, c2) + s5, s6 := bits.Add64(l4, 0, c3) + + s2, c0 = bits.Add64(s2, q0, 0) + s3, c1 = bits.Add64(s3, q1, c0) + s4, c2 = bits.Add64(s4, q2, c1) + s5, c3 = bits.Add64(s5, q3, c2) + s6, s7 := bits.Add64(s6, 0, c3) + + q := q0 | q1 | q2 | q3 + m := -((q | -q) >> 63) // if q=0 then m=0...0 else m=1..1 + s0 &= m + s1 &= m + s2 &= m + s3 &= m + q0, q1, q2, q3 = s4, s5, s6, s7 + + if (i+1)%2 == 0 { + r0, c0 = bits.Add64(r0, s0, 0) + r1, c1 = bits.Add64(r1, s1, c0) + r2, c2 = bits.Add64(r2, s2, c1) + r3, c3 = bits.Add64(r3, s3, c2) + r4, _ = bits.Add64(r4, 0, c3) + } else { + r0, c0 = bits.Sub64(r0, s0, 0) + r1, c1 = bits.Sub64(r1, s1, c0) + r2, c2 = bits.Sub64(r2, s2, c1) + r3, c3 = bits.Sub64(r3, s3, c2) + r4, _ = bits.Sub64(r4, 0, c3) + } + } + + m := -(r4 >> 63) + r0, c0 = bits.Add64(r0, m&ell160, 0) + r1, c1 = bits.Add64(r1, m&ell161, c0) + r2, c2 = bits.Add64(r2, m&ell162, c1) + r3, c3 = bits.Add64(r3, 0, c2) + r4, _ = bits.Add64(r4, m&1, c3) + x[4], x[5], x[6], x[7] = 0, 0, 0, 0 + } + + q0 := (r4 << 4) | (r3 >> 60) + r3 &= (uint64(1) << 60) - 1 + + h0, s0 := bits.Mul64(ell0, q0) + h1, s1 := bits.Mul64(ell1, q0) + s1, c0 = bits.Add64(h0, s1, 0) + s2, _ := bits.Add64(h1, 0, c0) + + r0, c0 = bits.Sub64(r0, s0, 0) + r1, c1 = bits.Sub64(r1, s1, c0) + r2, c2 = bits.Sub64(r2, s2, c1) + r3, _ = bits.Sub64(r3, 0, c2) + + x[0], x[1], x[2], x[3] = r0, r1, r2, r3 +} + +// calculateS performs s = r+k*a mod Order of the curve. +func calculateS(s, r, k, a []byte) { + K := [4]uint64{ + binary.LittleEndian.Uint64(k[0*8 : 1*8]), + binary.LittleEndian.Uint64(k[1*8 : 2*8]), + binary.LittleEndian.Uint64(k[2*8 : 3*8]), + binary.LittleEndian.Uint64(k[3*8 : 4*8]), + } + S := [8]uint64{ + binary.LittleEndian.Uint64(r[0*8 : 1*8]), + binary.LittleEndian.Uint64(r[1*8 : 2*8]), + binary.LittleEndian.Uint64(r[2*8 : 3*8]), + binary.LittleEndian.Uint64(r[3*8 : 4*8]), + } + var c3 uint64 + for i := range K { + ai := binary.LittleEndian.Uint64(a[i*8 : (i+1)*8]) + + h0, l0 := bits.Mul64(K[0], ai) + h1, l1 := bits.Mul64(K[1], ai) + h2, l2 := bits.Mul64(K[2], ai) + h3, l3 := bits.Mul64(K[3], ai) + + l1, c0 := bits.Add64(h0, l1, 0) + l2, c1 := bits.Add64(h1, l2, c0) + l3, c2 := bits.Add64(h2, l3, c1) + l4, _ := bits.Add64(h3, 0, c2) + + S[i+0], c0 = bits.Add64(S[i+0], l0, 0) + S[i+1], c1 = bits.Add64(S[i+1], l1, c0) + S[i+2], c2 = bits.Add64(S[i+2], l2, c1) + S[i+3], c3 = bits.Add64(S[i+3], l3, c2) + S[i+4], _ = bits.Add64(S[i+4], l4, c3) + } + red512(&S, true) + binary.LittleEndian.PutUint64(s[0*8:1*8], S[0]) + binary.LittleEndian.PutUint64(s[1*8:2*8], S[1]) + binary.LittleEndian.PutUint64(s[2*8:3*8], S[2]) + binary.LittleEndian.PutUint64(s[3*8:4*8], S[3]) +} diff --git a/vendor/github.com/cloudflare/circl/sign/ed25519/mult.go b/vendor/github.com/cloudflare/circl/sign/ed25519/mult.go new file mode 100644 index 0000000000000..3216aae303ca8 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed25519/mult.go @@ -0,0 +1,180 @@ +package ed25519 + +import ( + "crypto/subtle" + "encoding/binary" + "math/bits" + + "github.com/cloudflare/circl/internal/conv" + "github.com/cloudflare/circl/math" + fp "github.com/cloudflare/circl/math/fp25519" +) + +var paramD = fp.Elt{ + 0xa3, 0x78, 0x59, 0x13, 0xca, 0x4d, 0xeb, 0x75, + 0xab, 0xd8, 0x41, 0x41, 0x4d, 0x0a, 0x70, 0x00, + 0x98, 0xe8, 0x79, 0x77, 0x79, 0x40, 0xc7, 0x8c, + 0x73, 0xfe, 0x6f, 0x2b, 0xee, 0x6c, 0x03, 0x52, +} + +// mLSBRecoding parameters. +const ( + fxT = 257 + fxV = 2 + fxW = 3 + fx2w1 = 1 << (uint(fxW) - 1) + numWords64 = (paramB * 8 / 64) +) + +// mLSBRecoding is the odd-only modified LSB-set. +// +// Reference: +// +// "Efficient and secure algorithms for GLV-based scalar multiplication and +// their implementation on GLV–GLS curves" by (Faz-Hernandez et al.) +// http://doi.org/10.1007/s13389-014-0085-7. +func mLSBRecoding(L []int8, k []byte) { + const ee = (fxT + fxW*fxV - 1) / (fxW * fxV) + const dd = ee * fxV + const ll = dd * fxW + if len(L) == (ll + 1) { + var m [numWords64 + 1]uint64 + for i := 0; i < numWords64; i++ { + m[i] = binary.LittleEndian.Uint64(k[8*i : 8*i+8]) + } + condAddOrderN(&m) + L[dd-1] = 1 + for i := 0; i < dd-1; i++ { + kip1 := (m[(i+1)/64] >> (uint(i+1) % 64)) & 0x1 + L[i] = int8(kip1<<1) - 1 + } + { // right-shift by d + right := uint(dd % 64) + left := uint(64) - right + lim := ((numWords64+1)*64 - dd) / 64 + j := dd / 64 + for i := 0; i < lim; i++ { + m[i] = (m[i+j] >> right) | (m[i+j+1] << left) + } + m[lim] = m[lim+j] >> right + } + for i := dd; i < ll; i++ { + L[i] = L[i%dd] * int8(m[0]&0x1) + div2subY(m[:], int64(L[i]>>1), numWords64) + } + L[ll] = int8(m[0]) + } +} + +// absolute returns always a positive value. +func absolute(x int32) int32 { + mask := x >> 31 + return (x + mask) ^ mask +} + +// condAddOrderN updates x = x+order if x is even, otherwise x remains unchanged. +func condAddOrderN(x *[numWords64 + 1]uint64) { + isOdd := (x[0] & 0x1) - 1 + c := uint64(0) + for i := 0; i < numWords64; i++ { + orderWord := binary.LittleEndian.Uint64(order[8*i : 8*i+8]) + o := isOdd & orderWord + x0, c0 := bits.Add64(x[i], o, c) + x[i] = x0 + c = c0 + } + x[numWords64], _ = bits.Add64(x[numWords64], 0, c) +} + +// div2subY update x = (x/2) - y. +func div2subY(x []uint64, y int64, l int) { + s := uint64(y >> 63) + for i := 0; i < l-1; i++ { + x[i] = (x[i] >> 1) | (x[i+1] << 63) + } + x[l-1] = (x[l-1] >> 1) + + b := uint64(0) + x0, b0 := bits.Sub64(x[0], uint64(y), b) + x[0] = x0 + b = b0 + for i := 1; i < l-1; i++ { + x0, b0 := bits.Sub64(x[i], s, b) + x[i] = x0 + b = b0 + } + x[l-1], _ = bits.Sub64(x[l-1], s, b) +} + +func (P *pointR1) fixedMult(scalar []byte) { + if len(scalar) != paramB { + panic("wrong scalar size") + } + const ee = (fxT + fxW*fxV - 1) / (fxW * fxV) + const dd = ee * fxV + const ll = dd * fxW + + L := make([]int8, ll+1) + mLSBRecoding(L[:], scalar) + S := &pointR3{} + P.SetIdentity() + for ii := ee - 1; ii >= 0; ii-- { + P.double() + for j := 0; j < fxV; j++ { + dig := L[fxW*dd-j*ee+ii-ee] + for i := (fxW-1)*dd - j*ee + ii - ee; i >= (2*dd - j*ee + ii - ee); i = i - dd { + dig = 2*dig + L[i] + } + idx := absolute(int32(dig)) + sig := L[dd-j*ee+ii-ee] + Tabj := &tabSign[fxV-j-1] + for k := 0; k < fx2w1; k++ { + S.cmov(&Tabj[k], subtle.ConstantTimeEq(int32(k), idx)) + } + S.cneg(subtle.ConstantTimeEq(int32(sig), -1)) + P.mixAdd(S) + } + } +} + +const ( + omegaFix = 7 + omegaVar = 5 +) + +// doubleMult returns P=mG+nQ. +func (P *pointR1) doubleMult(Q *pointR1, m, n []byte) { + nafFix := math.OmegaNAF(conv.BytesLe2BigInt(m), omegaFix) + nafVar := math.OmegaNAF(conv.BytesLe2BigInt(n), omegaVar) + + if len(nafFix) > len(nafVar) { + nafVar = append(nafVar, make([]int32, len(nafFix)-len(nafVar))...) + } else if len(nafFix) < len(nafVar) { + nafFix = append(nafFix, make([]int32, len(nafVar)-len(nafFix))...) + } + + var TabQ [1 << (omegaVar - 2)]pointR2 + Q.oddMultiples(TabQ[:]) + P.SetIdentity() + for i := len(nafFix) - 1; i >= 0; i-- { + P.double() + // Generator point + if nafFix[i] != 0 { + idxM := absolute(nafFix[i]) >> 1 + R := tabVerif[idxM] + if nafFix[i] < 0 { + R.neg() + } + P.mixAdd(&R) + } + // Variable input point + if nafVar[i] != 0 { + idxN := absolute(nafVar[i]) >> 1 + S := TabQ[idxN] + if nafVar[i] < 0 { + S.neg() + } + P.add(&S) + } + } +} diff --git a/vendor/github.com/cloudflare/circl/sign/ed25519/point.go b/vendor/github.com/cloudflare/circl/sign/ed25519/point.go new file mode 100644 index 0000000000000..374a69503c34b --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed25519/point.go @@ -0,0 +1,195 @@ +package ed25519 + +import fp "github.com/cloudflare/circl/math/fp25519" + +type ( + pointR1 struct{ x, y, z, ta, tb fp.Elt } + pointR2 struct { + pointR3 + z2 fp.Elt + } +) +type pointR3 struct{ addYX, subYX, dt2 fp.Elt } + +func (P *pointR1) neg() { + fp.Neg(&P.x, &P.x) + fp.Neg(&P.ta, &P.ta) +} + +func (P *pointR1) SetIdentity() { + P.x = fp.Elt{} + fp.SetOne(&P.y) + fp.SetOne(&P.z) + P.ta = fp.Elt{} + P.tb = fp.Elt{} +} + +func (P *pointR1) toAffine() { + fp.Inv(&P.z, &P.z) + fp.Mul(&P.x, &P.x, &P.z) + fp.Mul(&P.y, &P.y, &P.z) + fp.Modp(&P.x) + fp.Modp(&P.y) + fp.SetOne(&P.z) + P.ta = P.x + P.tb = P.y +} + +func (P *pointR1) ToBytes(k []byte) error { + P.toAffine() + var x [fp.Size]byte + err := fp.ToBytes(k[:fp.Size], &P.y) + if err != nil { + return err + } + err = fp.ToBytes(x[:], &P.x) + if err != nil { + return err + } + b := x[0] & 1 + k[paramB-1] = k[paramB-1] | (b << 7) + return nil +} + +func (P *pointR1) FromBytes(k []byte) bool { + if len(k) != paramB { + panic("wrong size") + } + signX := k[paramB-1] >> 7 + copy(P.y[:], k[:fp.Size]) + P.y[fp.Size-1] &= 0x7F + p := fp.P() + if !isLessThan(P.y[:], p[:]) { + return false + } + + one, u, v := &fp.Elt{}, &fp.Elt{}, &fp.Elt{} + fp.SetOne(one) + fp.Sqr(u, &P.y) // u = y^2 + fp.Mul(v, u, ¶mD) // v = dy^2 + fp.Sub(u, u, one) // u = y^2-1 + fp.Add(v, v, one) // v = dy^2+1 + isQR := fp.InvSqrt(&P.x, u, v) // x = sqrt(u/v) + if !isQR { + return false + } + fp.Modp(&P.x) // x = x mod p + if fp.IsZero(&P.x) && signX == 1 { + return false + } + if signX != (P.x[0] & 1) { + fp.Neg(&P.x, &P.x) + } + P.ta = P.x + P.tb = P.y + fp.SetOne(&P.z) + return true +} + +// double calculates 2P for curves with A=-1. +func (P *pointR1) double() { + Px, Py, Pz, Pta, Ptb := &P.x, &P.y, &P.z, &P.ta, &P.tb + a, b, c, e, f, g, h := Px, Py, Pz, Pta, Px, Py, Ptb + fp.Add(e, Px, Py) // x+y + fp.Sqr(a, Px) // A = x^2 + fp.Sqr(b, Py) // B = y^2 + fp.Sqr(c, Pz) // z^2 + fp.Add(c, c, c) // C = 2*z^2 + fp.Add(h, a, b) // H = A+B + fp.Sqr(e, e) // (x+y)^2 + fp.Sub(e, e, h) // E = (x+y)^2-A-B + fp.Sub(g, b, a) // G = B-A + fp.Sub(f, c, g) // F = C-G + fp.Mul(Pz, f, g) // Z = F * G + fp.Mul(Px, e, f) // X = E * F + fp.Mul(Py, g, h) // Y = G * H, T = E * H +} + +func (P *pointR1) mixAdd(Q *pointR3) { + fp.Add(&P.z, &P.z, &P.z) // D = 2*z1 + P.coreAddition(Q) +} + +func (P *pointR1) add(Q *pointR2) { + fp.Mul(&P.z, &P.z, &Q.z2) // D = 2*z1*z2 + P.coreAddition(&Q.pointR3) +} + +// coreAddition calculates P=P+Q for curves with A=-1. +func (P *pointR1) coreAddition(Q *pointR3) { + Px, Py, Pz, Pta, Ptb := &P.x, &P.y, &P.z, &P.ta, &P.tb + addYX2, subYX2, dt2 := &Q.addYX, &Q.subYX, &Q.dt2 + a, b, c, d, e, f, g, h := Px, Py, &fp.Elt{}, Pz, Pta, Px, Py, Ptb + fp.Mul(c, Pta, Ptb) // t1 = ta*tb + fp.Sub(h, Py, Px) // y1-x1 + fp.Add(b, Py, Px) // y1+x1 + fp.Mul(a, h, subYX2) // A = (y1-x1)*(y2-x2) + fp.Mul(b, b, addYX2) // B = (y1+x1)*(y2+x2) + fp.Mul(c, c, dt2) // C = 2*D*t1*t2 + fp.Sub(e, b, a) // E = B-A + fp.Add(h, b, a) // H = B+A + fp.Sub(f, d, c) // F = D-C + fp.Add(g, d, c) // G = D+C + fp.Mul(Pz, f, g) // Z = F * G + fp.Mul(Px, e, f) // X = E * F + fp.Mul(Py, g, h) // Y = G * H, T = E * H +} + +func (P *pointR1) oddMultiples(T []pointR2) { + var R pointR2 + n := len(T) + T[0].fromR1(P) + _2P := *P + _2P.double() + R.fromR1(&_2P) + for i := 1; i < n; i++ { + P.add(&R) + T[i].fromR1(P) + } +} + +func (P *pointR1) isEqual(Q *pointR1) bool { + l, r := &fp.Elt{}, &fp.Elt{} + fp.Mul(l, &P.x, &Q.z) + fp.Mul(r, &Q.x, &P.z) + fp.Sub(l, l, r) + b := fp.IsZero(l) + fp.Mul(l, &P.y, &Q.z) + fp.Mul(r, &Q.y, &P.z) + fp.Sub(l, l, r) + b = b && fp.IsZero(l) + fp.Mul(l, &P.ta, &P.tb) + fp.Mul(l, l, &Q.z) + fp.Mul(r, &Q.ta, &Q.tb) + fp.Mul(r, r, &P.z) + fp.Sub(l, l, r) + b = b && fp.IsZero(l) + return b +} + +func (P *pointR3) neg() { + P.addYX, P.subYX = P.subYX, P.addYX + fp.Neg(&P.dt2, &P.dt2) +} + +func (P *pointR2) fromR1(Q *pointR1) { + fp.Add(&P.addYX, &Q.y, &Q.x) + fp.Sub(&P.subYX, &Q.y, &Q.x) + fp.Mul(&P.dt2, &Q.ta, &Q.tb) + fp.Mul(&P.dt2, &P.dt2, ¶mD) + fp.Add(&P.dt2, &P.dt2, &P.dt2) + fp.Add(&P.z2, &Q.z, &Q.z) +} + +func (P *pointR3) cneg(b int) { + t := &fp.Elt{} + fp.Cswap(&P.addYX, &P.subYX, uint(b)) + fp.Neg(t, &P.dt2) + fp.Cmov(&P.dt2, t, uint(b)) +} + +func (P *pointR3) cmov(Q *pointR3, b int) { + fp.Cmov(&P.addYX, &Q.addYX, uint(b)) + fp.Cmov(&P.subYX, &Q.subYX, uint(b)) + fp.Cmov(&P.dt2, &Q.dt2, uint(b)) +} diff --git a/vendor/github.com/cloudflare/circl/sign/ed25519/pubkey.go b/vendor/github.com/cloudflare/circl/sign/ed25519/pubkey.go new file mode 100644 index 0000000000000..c3505b67acec8 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed25519/pubkey.go @@ -0,0 +1,9 @@ +//go:build go1.13 +// +build go1.13 + +package ed25519 + +import cryptoEd25519 "crypto/ed25519" + +// PublicKey is the type of Ed25519 public keys. +type PublicKey cryptoEd25519.PublicKey diff --git a/vendor/github.com/cloudflare/circl/sign/ed25519/pubkey112.go b/vendor/github.com/cloudflare/circl/sign/ed25519/pubkey112.go new file mode 100644 index 0000000000000..d57d86eff08eb --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed25519/pubkey112.go @@ -0,0 +1,7 @@ +//go:build !go1.13 +// +build !go1.13 + +package ed25519 + +// PublicKey is the type of Ed25519 public keys. +type PublicKey []byte diff --git a/vendor/github.com/cloudflare/circl/sign/ed25519/signapi.go b/vendor/github.com/cloudflare/circl/sign/ed25519/signapi.go new file mode 100644 index 0000000000000..e4520f5203494 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed25519/signapi.go @@ -0,0 +1,87 @@ +package ed25519 + +import ( + "crypto/rand" + "encoding/asn1" + + "github.com/cloudflare/circl/sign" +) + +var sch sign.Scheme = &scheme{} + +// Scheme returns a signature interface. +func Scheme() sign.Scheme { return sch } + +type scheme struct{} + +func (*scheme) Name() string { return "Ed25519" } +func (*scheme) PublicKeySize() int { return PublicKeySize } +func (*scheme) PrivateKeySize() int { return PrivateKeySize } +func (*scheme) SignatureSize() int { return SignatureSize } +func (*scheme) SeedSize() int { return SeedSize } +func (*scheme) TLSIdentifier() uint { return 0x0807 } +func (*scheme) SupportsContext() bool { return false } +func (*scheme) Oid() asn1.ObjectIdentifier { + return asn1.ObjectIdentifier{1, 3, 101, 112} +} + +func (*scheme) GenerateKey() (sign.PublicKey, sign.PrivateKey, error) { + return GenerateKey(rand.Reader) +} + +func (*scheme) Sign( + sk sign.PrivateKey, + message []byte, + opts *sign.SignatureOpts, +) []byte { + priv, ok := sk.(PrivateKey) + if !ok { + panic(sign.ErrTypeMismatch) + } + if opts != nil && opts.Context != "" { + panic(sign.ErrContextNotSupported) + } + return Sign(priv, message) +} + +func (*scheme) Verify( + pk sign.PublicKey, + message, signature []byte, + opts *sign.SignatureOpts, +) bool { + pub, ok := pk.(PublicKey) + if !ok { + panic(sign.ErrTypeMismatch) + } + if opts != nil { + if opts.Context != "" { + panic(sign.ErrContextNotSupported) + } + } + return Verify(pub, message, signature) +} + +func (*scheme) DeriveKey(seed []byte) (sign.PublicKey, sign.PrivateKey) { + privateKey := NewKeyFromSeed(seed) + publicKey := make(PublicKey, PublicKeySize) + copy(publicKey, privateKey[SeedSize:]) + return publicKey, privateKey +} + +func (*scheme) UnmarshalBinaryPublicKey(buf []byte) (sign.PublicKey, error) { + if len(buf) < PublicKeySize { + return nil, sign.ErrPubKeySize + } + pub := make(PublicKey, PublicKeySize) + copy(pub, buf[:PublicKeySize]) + return pub, nil +} + +func (*scheme) UnmarshalBinaryPrivateKey(buf []byte) (sign.PrivateKey, error) { + if len(buf) < PrivateKeySize { + return nil, sign.ErrPrivKeySize + } + priv := make(PrivateKey, PrivateKeySize) + copy(priv, buf[:PrivateKeySize]) + return priv, nil +} diff --git a/vendor/github.com/cloudflare/circl/sign/ed25519/tables.go b/vendor/github.com/cloudflare/circl/sign/ed25519/tables.go new file mode 100644 index 0000000000000..8763b426fc026 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed25519/tables.go @@ -0,0 +1,213 @@ +package ed25519 + +import fp "github.com/cloudflare/circl/math/fp25519" + +var tabSign = [fxV][fx2w1]pointR3{ + { + pointR3{ + addYX: fp.Elt{0x85, 0x3b, 0x8c, 0xf5, 0xc6, 0x93, 0xbc, 0x2f, 0x19, 0x0e, 0x8c, 0xfb, 0xc6, 0x2d, 0x93, 0xcf, 0xc2, 0x42, 0x3d, 0x64, 0x98, 0x48, 0x0b, 0x27, 0x65, 0xba, 0xd4, 0x33, 0x3a, 0x9d, 0xcf, 0x07}, + subYX: fp.Elt{0x3e, 0x91, 0x40, 0xd7, 0x05, 0x39, 0x10, 0x9d, 0xb3, 0xbe, 0x40, 0xd1, 0x05, 0x9f, 0x39, 0xfd, 0x09, 0x8a, 0x8f, 0x68, 0x34, 0x84, 0xc1, 0xa5, 0x67, 0x12, 0xf8, 0x98, 0x92, 0x2f, 0xfd, 0x44}, + dt2: fp.Elt{0x68, 0xaa, 0x7a, 0x87, 0x05, 0x12, 0xc9, 0xab, 0x9e, 0xc4, 0xaa, 0xcc, 0x23, 0xe8, 0xd9, 0x26, 0x8c, 0x59, 0x43, 0xdd, 0xcb, 0x7d, 0x1b, 0x5a, 0xa8, 0x65, 0x0c, 0x9f, 0x68, 0x7b, 0x11, 0x6f}, + }, + { + addYX: fp.Elt{0x7c, 0xb0, 0x9e, 0xe6, 0xc5, 0xbf, 0xfa, 0x13, 0x8e, 0x0d, 0x22, 0xde, 0xc8, 0xd1, 0xce, 0x52, 0x02, 0xd5, 0x62, 0x31, 0x71, 0x0e, 0x8e, 0x9d, 0xb0, 0xd6, 0x00, 0xa5, 0x5a, 0x0e, 0xce, 0x72}, + subYX: fp.Elt{0x1a, 0x8e, 0x5c, 0xdc, 0xa4, 0xb3, 0x6c, 0x51, 0x18, 0xa0, 0x09, 0x80, 0x9a, 0x46, 0x33, 0xd5, 0xe0, 0x3c, 0x4d, 0x3b, 0xfc, 0x49, 0xa2, 0x43, 0x29, 0xe1, 0x29, 0xa9, 0x93, 0xea, 0x7c, 0x35}, + dt2: fp.Elt{0x08, 0x46, 0x6f, 0x68, 0x7f, 0x0b, 0x7c, 0x9e, 0xad, 0xba, 0x07, 0x61, 0x74, 0x83, 0x2f, 0xfc, 0x26, 0xd6, 0x09, 0xb9, 0x00, 0x34, 0x36, 0x4f, 0x01, 0xf3, 0x48, 0xdb, 0x43, 0xba, 0x04, 0x44}, + }, + { + addYX: fp.Elt{0x4c, 0xda, 0x0d, 0x13, 0x66, 0xfd, 0x82, 0x84, 0x9f, 0x75, 0x5b, 0xa2, 0x17, 0xfe, 0x34, 0xbf, 0x1f, 0xcb, 0xba, 0x90, 0x55, 0x80, 0x83, 0xfd, 0x63, 0xb9, 0x18, 0xf8, 0x5b, 0x5d, 0x94, 0x1e}, + subYX: fp.Elt{0xb9, 0xdb, 0x6c, 0x04, 0x88, 0x22, 0xd8, 0x79, 0x83, 0x2f, 0x8d, 0x65, 0x6b, 0xd2, 0xab, 0x1b, 0xdd, 0x65, 0xe5, 0x93, 0x63, 0xf8, 0xa2, 0xd8, 0x3c, 0xf1, 0x4b, 0xc5, 0x99, 0xd1, 0xf2, 0x12}, + dt2: fp.Elt{0x05, 0x4c, 0xb8, 0x3b, 0xfe, 0xf5, 0x9f, 0x2e, 0xd1, 0xb2, 0xb8, 0xff, 0xfe, 0x6d, 0xd9, 0x37, 0xe0, 0xae, 0xb4, 0x5a, 0x51, 0x80, 0x7e, 0x9b, 0x1d, 0xd1, 0x8d, 0x8c, 0x56, 0xb1, 0x84, 0x35}, + }, + { + addYX: fp.Elt{0x39, 0x71, 0x43, 0x34, 0xe3, 0x42, 0x45, 0xa1, 0xf2, 0x68, 0x71, 0xa7, 0xe8, 0x23, 0xfd, 0x9f, 0x86, 0x48, 0xff, 0xe5, 0x96, 0x74, 0xcf, 0x05, 0x49, 0xe2, 0xb3, 0x6c, 0x17, 0x77, 0x2f, 0x6d}, + subYX: fp.Elt{0x73, 0x3f, 0xc1, 0xc7, 0x6a, 0x66, 0xa1, 0x20, 0xdd, 0x11, 0xfb, 0x7a, 0x6e, 0xa8, 0x51, 0xb8, 0x3f, 0x9d, 0xa2, 0x97, 0x84, 0xb5, 0xc7, 0x90, 0x7c, 0xab, 0x48, 0xd6, 0x84, 0xa3, 0xd5, 0x1a}, + dt2: fp.Elt{0x63, 0x27, 0x3c, 0x49, 0x4b, 0xfc, 0x22, 0xf2, 0x0b, 0x50, 0xc2, 0x0f, 0xb4, 0x1f, 0x31, 0x0c, 0x2f, 0x53, 0xab, 0xaa, 0x75, 0x6f, 0xe0, 0x69, 0x39, 0x56, 0xe0, 0x3b, 0xb7, 0xa8, 0xbf, 0x45}, + }, + }, + { + { + addYX: fp.Elt{0x00, 0x45, 0xd9, 0x0d, 0x58, 0x03, 0xfc, 0x29, 0x93, 0xec, 0xbb, 0x6f, 0xa4, 0x7a, 0xd2, 0xec, 0xf8, 0xa7, 0xe2, 0xc2, 0x5f, 0x15, 0x0a, 0x13, 0xd5, 0xa1, 0x06, 0xb7, 0x1a, 0x15, 0x6b, 0x41}, + subYX: fp.Elt{0x85, 0x8c, 0xb2, 0x17, 0xd6, 0x3b, 0x0a, 0xd3, 0xea, 0x3b, 0x77, 0x39, 0xb7, 0x77, 0xd3, 0xc5, 0xbf, 0x5c, 0x6a, 0x1e, 0x8c, 0xe7, 0xc6, 0xc6, 0xc4, 0xb7, 0x2a, 0x8b, 0xf7, 0xb8, 0x61, 0x0d}, + dt2: fp.Elt{0xb0, 0x36, 0xc1, 0xe9, 0xef, 0xd7, 0xa8, 0x56, 0x20, 0x4b, 0xe4, 0x58, 0xcd, 0xe5, 0x07, 0xbd, 0xab, 0xe0, 0x57, 0x1b, 0xda, 0x2f, 0xe6, 0xaf, 0xd2, 0xe8, 0x77, 0x42, 0xf7, 0x2a, 0x1a, 0x19}, + }, + { + addYX: fp.Elt{0x6a, 0x6d, 0x6d, 0xd1, 0xfa, 0xf5, 0x03, 0x30, 0xbd, 0x6d, 0xc2, 0xc8, 0xf5, 0x38, 0x80, 0x4f, 0xb2, 0xbe, 0xa1, 0x76, 0x50, 0x1a, 0x73, 0xf2, 0x78, 0x2b, 0x8e, 0x3a, 0x1e, 0x34, 0x47, 0x7b}, + subYX: fp.Elt{0xc3, 0x2c, 0x36, 0xdc, 0xc5, 0x45, 0xbc, 0xef, 0x1b, 0x64, 0xd6, 0x65, 0x28, 0xe9, 0xda, 0x84, 0x13, 0xbe, 0x27, 0x8e, 0x3f, 0x98, 0x2a, 0x37, 0xee, 0x78, 0x97, 0xd6, 0xc0, 0x6f, 0xb4, 0x53}, + dt2: fp.Elt{0x58, 0x5d, 0xa7, 0xa3, 0x68, 0xbb, 0x20, 0x30, 0x2e, 0x03, 0xe9, 0xb1, 0xd4, 0x90, 0x72, 0xe3, 0x71, 0xb2, 0x36, 0x3e, 0x73, 0xa0, 0x2e, 0x3d, 0xd1, 0x85, 0x33, 0x62, 0x4e, 0xa7, 0x7b, 0x31}, + }, + { + addYX: fp.Elt{0xbf, 0xc4, 0x38, 0x53, 0xfb, 0x68, 0xa9, 0x77, 0xce, 0x55, 0xf9, 0x05, 0xcb, 0xeb, 0xfb, 0x8c, 0x46, 0xc2, 0x32, 0x7c, 0xf0, 0xdb, 0xd7, 0x2c, 0x62, 0x8e, 0xdd, 0x54, 0x75, 0xcf, 0x3f, 0x33}, + subYX: fp.Elt{0x49, 0x50, 0x1f, 0x4e, 0x6e, 0x55, 0x55, 0xde, 0x8c, 0x4e, 0x77, 0x96, 0x38, 0x3b, 0xfe, 0xb6, 0x43, 0x3c, 0x86, 0x69, 0xc2, 0x72, 0x66, 0x1f, 0x6b, 0xf9, 0x87, 0xbc, 0x4f, 0x37, 0x3e, 0x3c}, + dt2: fp.Elt{0xd2, 0x2f, 0x06, 0x6b, 0x08, 0x07, 0x69, 0x77, 0xc0, 0x94, 0xcc, 0xae, 0x43, 0x00, 0x59, 0x6e, 0xa3, 0x63, 0xa8, 0xdd, 0xfa, 0x24, 0x18, 0xd0, 0x35, 0xc7, 0x78, 0xf7, 0x0d, 0xd4, 0x5a, 0x1e}, + }, + { + addYX: fp.Elt{0x45, 0xc1, 0x17, 0x51, 0xf8, 0xed, 0x7e, 0xc7, 0xa9, 0x1a, 0x11, 0x6e, 0x2d, 0xef, 0x0b, 0xd5, 0x3f, 0x98, 0xb0, 0xa3, 0x9d, 0x65, 0xf1, 0xcd, 0x53, 0x4a, 0x8a, 0x18, 0x70, 0x0a, 0x7f, 0x23}, + subYX: fp.Elt{0xdd, 0xef, 0xbe, 0x3a, 0x31, 0xe0, 0xbc, 0xbe, 0x6d, 0x5d, 0x79, 0x87, 0xd6, 0xbe, 0x68, 0xe3, 0x59, 0x76, 0x8c, 0x86, 0x0e, 0x7a, 0x92, 0x13, 0x14, 0x8f, 0x67, 0xb3, 0xcb, 0x1a, 0x76, 0x76}, + dt2: fp.Elt{0x56, 0x7a, 0x1c, 0x9d, 0xca, 0x96, 0xf9, 0xf9, 0x03, 0x21, 0xd4, 0xe8, 0xb3, 0xd5, 0xe9, 0x52, 0xc8, 0x54, 0x1e, 0x1b, 0x13, 0xb6, 0xfd, 0x47, 0x7d, 0x02, 0x32, 0x33, 0x27, 0xe2, 0x1f, 0x19}, + }, + }, +} + +var tabVerif = [1 << (omegaFix - 2)]pointR3{ + { /* 1P */ + addYX: fp.Elt{0x85, 0x3b, 0x8c, 0xf5, 0xc6, 0x93, 0xbc, 0x2f, 0x19, 0x0e, 0x8c, 0xfb, 0xc6, 0x2d, 0x93, 0xcf, 0xc2, 0x42, 0x3d, 0x64, 0x98, 0x48, 0x0b, 0x27, 0x65, 0xba, 0xd4, 0x33, 0x3a, 0x9d, 0xcf, 0x07}, + subYX: fp.Elt{0x3e, 0x91, 0x40, 0xd7, 0x05, 0x39, 0x10, 0x9d, 0xb3, 0xbe, 0x40, 0xd1, 0x05, 0x9f, 0x39, 0xfd, 0x09, 0x8a, 0x8f, 0x68, 0x34, 0x84, 0xc1, 0xa5, 0x67, 0x12, 0xf8, 0x98, 0x92, 0x2f, 0xfd, 0x44}, + dt2: fp.Elt{0x68, 0xaa, 0x7a, 0x87, 0x05, 0x12, 0xc9, 0xab, 0x9e, 0xc4, 0xaa, 0xcc, 0x23, 0xe8, 0xd9, 0x26, 0x8c, 0x59, 0x43, 0xdd, 0xcb, 0x7d, 0x1b, 0x5a, 0xa8, 0x65, 0x0c, 0x9f, 0x68, 0x7b, 0x11, 0x6f}, + }, + { /* 3P */ + addYX: fp.Elt{0x30, 0x97, 0xee, 0x4c, 0xa8, 0xb0, 0x25, 0xaf, 0x8a, 0x4b, 0x86, 0xe8, 0x30, 0x84, 0x5a, 0x02, 0x32, 0x67, 0x01, 0x9f, 0x02, 0x50, 0x1b, 0xc1, 0xf4, 0xf8, 0x80, 0x9a, 0x1b, 0x4e, 0x16, 0x7a}, + subYX: fp.Elt{0x65, 0xd2, 0xfc, 0xa4, 0xe8, 0x1f, 0x61, 0x56, 0x7d, 0xba, 0xc1, 0xe5, 0xfd, 0x53, 0xd3, 0x3b, 0xbd, 0xd6, 0x4b, 0x21, 0x1a, 0xf3, 0x31, 0x81, 0x62, 0xda, 0x5b, 0x55, 0x87, 0x15, 0xb9, 0x2a}, + dt2: fp.Elt{0x89, 0xd8, 0xd0, 0x0d, 0x3f, 0x93, 0xae, 0x14, 0x62, 0xda, 0x35, 0x1c, 0x22, 0x23, 0x94, 0x58, 0x4c, 0xdb, 0xf2, 0x8c, 0x45, 0xe5, 0x70, 0xd1, 0xc6, 0xb4, 0xb9, 0x12, 0xaf, 0x26, 0x28, 0x5a}, + }, + { /* 5P */ + addYX: fp.Elt{0x33, 0xbb, 0xa5, 0x08, 0x44, 0xbc, 0x12, 0xa2, 0x02, 0xed, 0x5e, 0xc7, 0xc3, 0x48, 0x50, 0x8d, 0x44, 0xec, 0xbf, 0x5a, 0x0c, 0xeb, 0x1b, 0xdd, 0xeb, 0x06, 0xe2, 0x46, 0xf1, 0xcc, 0x45, 0x29}, + subYX: fp.Elt{0xba, 0xd6, 0x47, 0xa4, 0xc3, 0x82, 0x91, 0x7f, 0xb7, 0x29, 0x27, 0x4b, 0xd1, 0x14, 0x00, 0xd5, 0x87, 0xa0, 0x64, 0xb8, 0x1c, 0xf1, 0x3c, 0xe3, 0xf3, 0x55, 0x1b, 0xeb, 0x73, 0x7e, 0x4a, 0x15}, + dt2: fp.Elt{0x85, 0x82, 0x2a, 0x81, 0xf1, 0xdb, 0xbb, 0xbc, 0xfc, 0xd1, 0xbd, 0xd0, 0x07, 0x08, 0x0e, 0x27, 0x2d, 0xa7, 0xbd, 0x1b, 0x0b, 0x67, 0x1b, 0xb4, 0x9a, 0xb6, 0x3b, 0x6b, 0x69, 0xbe, 0xaa, 0x43}, + }, + { /* 7P */ + addYX: fp.Elt{0xbf, 0xa3, 0x4e, 0x94, 0xd0, 0x5c, 0x1a, 0x6b, 0xd2, 0xc0, 0x9d, 0xb3, 0x3a, 0x35, 0x70, 0x74, 0x49, 0x2e, 0x54, 0x28, 0x82, 0x52, 0xb2, 0x71, 0x7e, 0x92, 0x3c, 0x28, 0x69, 0xea, 0x1b, 0x46}, + subYX: fp.Elt{0xb1, 0x21, 0x32, 0xaa, 0x9a, 0x2c, 0x6f, 0xba, 0xa7, 0x23, 0xba, 0x3b, 0x53, 0x21, 0xa0, 0x6c, 0x3a, 0x2c, 0x19, 0x92, 0x4f, 0x76, 0xea, 0x9d, 0xe0, 0x17, 0x53, 0x2e, 0x5d, 0xdd, 0x6e, 0x1d}, + dt2: fp.Elt{0xa2, 0xb3, 0xb8, 0x01, 0xc8, 0x6d, 0x83, 0xf1, 0x9a, 0xa4, 0x3e, 0x05, 0x47, 0x5f, 0x03, 0xb3, 0xf3, 0xad, 0x77, 0x58, 0xba, 0x41, 0x9c, 0x52, 0xa7, 0x90, 0x0f, 0x6a, 0x1c, 0xbb, 0x9f, 0x7a}, + }, + { /* 9P */ + addYX: fp.Elt{0x2f, 0x63, 0xa8, 0xa6, 0x8a, 0x67, 0x2e, 0x9b, 0xc5, 0x46, 0xbc, 0x51, 0x6f, 0x9e, 0x50, 0xa6, 0xb5, 0xf5, 0x86, 0xc6, 0xc9, 0x33, 0xb2, 0xce, 0x59, 0x7f, 0xdd, 0x8a, 0x33, 0xed, 0xb9, 0x34}, + subYX: fp.Elt{0x64, 0x80, 0x9d, 0x03, 0x7e, 0x21, 0x6e, 0xf3, 0x9b, 0x41, 0x20, 0xf5, 0xb6, 0x81, 0xa0, 0x98, 0x44, 0xb0, 0x5e, 0xe7, 0x08, 0xc6, 0xcb, 0x96, 0x8f, 0x9c, 0xdc, 0xfa, 0x51, 0x5a, 0xc0, 0x49}, + dt2: fp.Elt{0x1b, 0xaf, 0x45, 0x90, 0xbf, 0xe8, 0xb4, 0x06, 0x2f, 0xd2, 0x19, 0xa7, 0xe8, 0x83, 0xff, 0xe2, 0x16, 0xcf, 0xd4, 0x93, 0x29, 0xfc, 0xf6, 0xaa, 0x06, 0x8b, 0x00, 0x1b, 0x02, 0x72, 0xc1, 0x73}, + }, + { /* 11P */ + addYX: fp.Elt{0xde, 0x2a, 0x80, 0x8a, 0x84, 0x00, 0xbf, 0x2f, 0x27, 0x2e, 0x30, 0x02, 0xcf, 0xfe, 0xd9, 0xe5, 0x06, 0x34, 0x70, 0x17, 0x71, 0x84, 0x3e, 0x11, 0xaf, 0x8f, 0x6d, 0x54, 0xe2, 0xaa, 0x75, 0x42}, + subYX: fp.Elt{0x48, 0x43, 0x86, 0x49, 0x02, 0x5b, 0x5f, 0x31, 0x81, 0x83, 0x08, 0x77, 0x69, 0xb3, 0xd6, 0x3e, 0x95, 0xeb, 0x8d, 0x6a, 0x55, 0x75, 0xa0, 0xa3, 0x7f, 0xc7, 0xd5, 0x29, 0x80, 0x59, 0xab, 0x18}, + dt2: fp.Elt{0xe9, 0x89, 0x60, 0xfd, 0xc5, 0x2c, 0x2b, 0xd8, 0xa4, 0xe4, 0x82, 0x32, 0xa1, 0xb4, 0x1e, 0x03, 0x22, 0x86, 0x1a, 0xb5, 0x99, 0x11, 0x31, 0x44, 0x48, 0xf9, 0x3d, 0xb5, 0x22, 0x55, 0xc6, 0x3d}, + }, + { /* 13P */ + addYX: fp.Elt{0x6d, 0x7f, 0x00, 0xa2, 0x22, 0xc2, 0x70, 0xbf, 0xdb, 0xde, 0xbc, 0xb5, 0x9a, 0xb3, 0x84, 0xbf, 0x07, 0xba, 0x07, 0xfb, 0x12, 0x0e, 0x7a, 0x53, 0x41, 0xf2, 0x46, 0xc3, 0xee, 0xd7, 0x4f, 0x23}, + subYX: fp.Elt{0x93, 0xbf, 0x7f, 0x32, 0x3b, 0x01, 0x6f, 0x50, 0x6b, 0x6f, 0x77, 0x9b, 0xc9, 0xeb, 0xfc, 0xae, 0x68, 0x59, 0xad, 0xaa, 0x32, 0xb2, 0x12, 0x9d, 0xa7, 0x24, 0x60, 0x17, 0x2d, 0x88, 0x67, 0x02}, + dt2: fp.Elt{0x78, 0xa3, 0x2e, 0x73, 0x19, 0xa1, 0x60, 0x53, 0x71, 0xd4, 0x8d, 0xdf, 0xb1, 0xe6, 0x37, 0x24, 0x33, 0xe5, 0xa7, 0x91, 0xf8, 0x37, 0xef, 0xa2, 0x63, 0x78, 0x09, 0xaa, 0xfd, 0xa6, 0x7b, 0x49}, + }, + { /* 15P */ + addYX: fp.Elt{0xa0, 0xea, 0xcf, 0x13, 0x03, 0xcc, 0xce, 0x24, 0x6d, 0x24, 0x9c, 0x18, 0x8d, 0xc2, 0x48, 0x86, 0xd0, 0xd4, 0xf2, 0xc1, 0xfa, 0xbd, 0xbd, 0x2d, 0x2b, 0xe7, 0x2d, 0xf1, 0x17, 0x29, 0xe2, 0x61}, + subYX: fp.Elt{0x0b, 0xcf, 0x8c, 0x46, 0x86, 0xcd, 0x0b, 0x04, 0xd6, 0x10, 0x99, 0x2a, 0xa4, 0x9b, 0x82, 0xd3, 0x92, 0x51, 0xb2, 0x07, 0x08, 0x30, 0x08, 0x75, 0xbf, 0x5e, 0xd0, 0x18, 0x42, 0xcd, 0xb5, 0x43}, + dt2: fp.Elt{0x16, 0xb5, 0xd0, 0x9b, 0x2f, 0x76, 0x9a, 0x5d, 0xee, 0xde, 0x3f, 0x37, 0x4e, 0xaf, 0x38, 0xeb, 0x70, 0x42, 0xd6, 0x93, 0x7d, 0x5a, 0x2e, 0x03, 0x42, 0xd8, 0xe4, 0x0a, 0x21, 0x61, 0x1d, 0x51}, + }, + { /* 17P */ + addYX: fp.Elt{0x81, 0x9d, 0x0e, 0x95, 0xef, 0x76, 0xc6, 0x92, 0x4f, 0x04, 0xd7, 0xc0, 0xcd, 0x20, 0x46, 0xa5, 0x48, 0x12, 0x8f, 0x6f, 0x64, 0x36, 0x9b, 0xaa, 0xe3, 0x55, 0xb8, 0xdd, 0x24, 0x59, 0x32, 0x6d}, + subYX: fp.Elt{0x87, 0xde, 0x20, 0x44, 0x48, 0x86, 0x13, 0x08, 0xb4, 0xed, 0x92, 0xb5, 0x16, 0xf0, 0x1c, 0x8a, 0x25, 0x2d, 0x94, 0x29, 0x27, 0x4e, 0xfa, 0x39, 0x10, 0x28, 0x48, 0xe2, 0x6f, 0xfe, 0xa7, 0x71}, + dt2: fp.Elt{0x54, 0xc8, 0xc8, 0xa5, 0xb8, 0x82, 0x71, 0x6c, 0x03, 0x2a, 0x5f, 0xfe, 0x79, 0x14, 0xfd, 0x33, 0x0c, 0x8d, 0x77, 0x83, 0x18, 0x59, 0xcf, 0x72, 0xa9, 0xea, 0x9e, 0x55, 0xb6, 0xc4, 0x46, 0x47}, + }, + { /* 19P */ + addYX: fp.Elt{0x2b, 0x9a, 0xc6, 0x6d, 0x3c, 0x7b, 0x77, 0xd3, 0x17, 0xf6, 0x89, 0x6f, 0x27, 0xb2, 0xfa, 0xde, 0xb5, 0x16, 0x3a, 0xb5, 0xf7, 0x1c, 0x65, 0x45, 0xb7, 0x9f, 0xfe, 0x34, 0xde, 0x51, 0x9a, 0x5c}, + subYX: fp.Elt{0x47, 0x11, 0x74, 0x64, 0xc8, 0x46, 0x85, 0x34, 0x49, 0xc8, 0xfc, 0x0e, 0xdd, 0xae, 0x35, 0x7d, 0x32, 0xa3, 0x72, 0x06, 0x76, 0x9a, 0x93, 0xff, 0xd6, 0xe6, 0xb5, 0x7d, 0x49, 0x63, 0x96, 0x21}, + dt2: fp.Elt{0x67, 0x0e, 0xf1, 0x79, 0xcf, 0xf1, 0x10, 0xf5, 0x5b, 0x51, 0x58, 0xe6, 0xa1, 0xda, 0xdd, 0xff, 0x77, 0x22, 0x14, 0x10, 0x17, 0xa7, 0xc3, 0x09, 0xbb, 0x23, 0x82, 0x60, 0x3c, 0x50, 0x04, 0x48}, + }, + { /* 21P */ + addYX: fp.Elt{0xc7, 0x7f, 0xa3, 0x2c, 0xd0, 0x9e, 0x24, 0xc4, 0xab, 0xac, 0x15, 0xa6, 0xe3, 0xa0, 0x59, 0xa0, 0x23, 0x0e, 0x6e, 0xc9, 0xd7, 0x6e, 0xa9, 0x88, 0x6d, 0x69, 0x50, 0x16, 0xa5, 0x98, 0x33, 0x55}, + subYX: fp.Elt{0x75, 0xd1, 0x36, 0x3a, 0xd2, 0x21, 0x68, 0x3b, 0x32, 0x9e, 0x9b, 0xe9, 0xa7, 0x0a, 0xb4, 0xbb, 0x47, 0x8a, 0x83, 0x20, 0xe4, 0x5c, 0x9e, 0x5d, 0x5e, 0x4c, 0xde, 0x58, 0x88, 0x09, 0x1e, 0x77}, + dt2: fp.Elt{0xdf, 0x1e, 0x45, 0x78, 0xd2, 0xf5, 0x12, 0x9a, 0xcb, 0x9c, 0x89, 0x85, 0x79, 0x5d, 0xda, 0x3a, 0x08, 0x95, 0xa5, 0x9f, 0x2d, 0x4a, 0x7f, 0x47, 0x11, 0xa6, 0xf5, 0x8f, 0xd6, 0xd1, 0x5e, 0x5a}, + }, + { /* 23P */ + addYX: fp.Elt{0x83, 0x0e, 0x15, 0xfe, 0x2a, 0x12, 0x95, 0x11, 0xd8, 0x35, 0x4b, 0x7e, 0x25, 0x9a, 0x20, 0xcf, 0x20, 0x1e, 0x71, 0x1e, 0x29, 0xf8, 0x87, 0x73, 0xf0, 0x92, 0xbf, 0xd8, 0x97, 0xb8, 0xac, 0x44}, + subYX: fp.Elt{0x59, 0x73, 0x52, 0x58, 0xc5, 0xe0, 0xe5, 0xba, 0x7e, 0x9d, 0xdb, 0xca, 0x19, 0x5c, 0x2e, 0x39, 0xe9, 0xab, 0x1c, 0xda, 0x1e, 0x3c, 0x65, 0x28, 0x44, 0xdc, 0xef, 0x5f, 0x13, 0x60, 0x9b, 0x01}, + dt2: fp.Elt{0x83, 0x4b, 0x13, 0x5e, 0x14, 0x68, 0x60, 0x1e, 0x16, 0x4c, 0x30, 0x24, 0x4f, 0xe6, 0xf5, 0xc4, 0xd7, 0x3e, 0x1a, 0xfc, 0xa8, 0x88, 0x6e, 0x50, 0x92, 0x2f, 0xad, 0xe6, 0xfd, 0x49, 0x0c, 0x15}, + }, + { /* 25P */ + addYX: fp.Elt{0x38, 0x11, 0x47, 0x09, 0x95, 0xf2, 0x7b, 0x8e, 0x51, 0xa6, 0x75, 0x4f, 0x39, 0xef, 0x6f, 0x5d, 0xad, 0x08, 0xa7, 0x25, 0xc4, 0x79, 0xaf, 0x10, 0x22, 0x99, 0xb9, 0x5b, 0x07, 0x5a, 0x2b, 0x6b}, + subYX: fp.Elt{0x68, 0xa8, 0xdc, 0x9c, 0x3c, 0x86, 0x49, 0xb8, 0xd0, 0x4a, 0x71, 0xb8, 0xdb, 0x44, 0x3f, 0xc8, 0x8d, 0x16, 0x36, 0x0c, 0x56, 0xe3, 0x3e, 0xfe, 0xc1, 0xfb, 0x05, 0x1e, 0x79, 0xd7, 0xa6, 0x78}, + dt2: fp.Elt{0x76, 0xb9, 0xa0, 0x47, 0x4b, 0x70, 0xbf, 0x58, 0xd5, 0x48, 0x17, 0x74, 0x55, 0xb3, 0x01, 0xa6, 0x90, 0xf5, 0x42, 0xd5, 0xb1, 0x1f, 0x2b, 0xaa, 0x00, 0x5d, 0xd5, 0x4a, 0xfc, 0x7f, 0x5c, 0x72}, + }, + { /* 27P */ + addYX: fp.Elt{0xb2, 0x99, 0xcf, 0xd1, 0x15, 0x67, 0x42, 0xe4, 0x34, 0x0d, 0xa2, 0x02, 0x11, 0xd5, 0x52, 0x73, 0x9f, 0x10, 0x12, 0x8b, 0x7b, 0x15, 0xd1, 0x23, 0xa3, 0xf3, 0xb1, 0x7c, 0x27, 0xc9, 0x4c, 0x79}, + subYX: fp.Elt{0xc0, 0x98, 0xd0, 0x1c, 0xf7, 0x2b, 0x80, 0x91, 0x66, 0x63, 0x5e, 0xed, 0xa4, 0x6c, 0x41, 0xfe, 0x4c, 0x99, 0x02, 0x49, 0x71, 0x5d, 0x58, 0xdf, 0xe7, 0xfa, 0x55, 0xf8, 0x25, 0x46, 0xd5, 0x4c}, + dt2: fp.Elt{0x53, 0x50, 0xac, 0xc2, 0x26, 0xc4, 0xf6, 0x4a, 0x58, 0x72, 0xf6, 0x32, 0xad, 0xed, 0x9a, 0xbc, 0x21, 0x10, 0x31, 0x0a, 0xf1, 0x32, 0xd0, 0x2a, 0x85, 0x8e, 0xcc, 0x6f, 0x7b, 0x35, 0x08, 0x70}, + }, + { /* 29P */ + addYX: fp.Elt{0x01, 0x3f, 0x77, 0x38, 0x27, 0x67, 0x88, 0x0b, 0xfb, 0xcc, 0xfb, 0x95, 0xfa, 0xc8, 0xcc, 0xb8, 0xb6, 0x29, 0xad, 0xb9, 0xa3, 0xd5, 0x2d, 0x8d, 0x6a, 0x0f, 0xad, 0x51, 0x98, 0x7e, 0xef, 0x06}, + subYX: fp.Elt{0x34, 0x4a, 0x58, 0x82, 0xbb, 0x9f, 0x1b, 0xd0, 0x2b, 0x79, 0xb4, 0xd2, 0x63, 0x64, 0xab, 0x47, 0x02, 0x62, 0x53, 0x48, 0x9c, 0x63, 0x31, 0xb6, 0x28, 0xd4, 0xd6, 0x69, 0x36, 0x2a, 0xa9, 0x13}, + dt2: fp.Elt{0xe5, 0x7d, 0x57, 0xc0, 0x1c, 0x77, 0x93, 0xca, 0x5c, 0xdc, 0x35, 0x50, 0x1e, 0xe4, 0x40, 0x75, 0x71, 0xe0, 0x02, 0xd8, 0x01, 0x0f, 0x68, 0x24, 0x6a, 0xf8, 0x2a, 0x8a, 0xdf, 0x6d, 0x29, 0x3c}, + }, + { /* 31P */ + addYX: fp.Elt{0x13, 0xa7, 0x14, 0xd9, 0xf9, 0x15, 0xad, 0xae, 0x12, 0xf9, 0x8f, 0x8c, 0xf9, 0x7b, 0x2f, 0xa9, 0x30, 0xd7, 0x53, 0x9f, 0x17, 0x23, 0xf8, 0xaf, 0xba, 0x77, 0x0c, 0x49, 0x93, 0xd3, 0x99, 0x7a}, + subYX: fp.Elt{0x41, 0x25, 0x1f, 0xbb, 0x2e, 0x4d, 0xeb, 0xfc, 0x1f, 0xb9, 0xad, 0x40, 0xc7, 0x10, 0x95, 0xb8, 0x05, 0xad, 0xa1, 0xd0, 0x7d, 0xa3, 0x71, 0xfc, 0x7b, 0x71, 0x47, 0x07, 0x70, 0x2c, 0x89, 0x0a}, + dt2: fp.Elt{0xe8, 0xa3, 0xbd, 0x36, 0x24, 0xed, 0x52, 0x8f, 0x94, 0x07, 0xe8, 0x57, 0x41, 0xc8, 0xa8, 0x77, 0xe0, 0x9c, 0x2f, 0x26, 0x63, 0x65, 0xa9, 0xa5, 0xd2, 0xf7, 0x02, 0x83, 0xd2, 0x62, 0x67, 0x28}, + }, + { /* 33P */ + addYX: fp.Elt{0x25, 0x5b, 0xe3, 0x3c, 0x09, 0x36, 0x78, 0x4e, 0x97, 0xaa, 0x6b, 0xb2, 0x1d, 0x18, 0xe1, 0x82, 0x3f, 0xb8, 0xc7, 0xcb, 0xd3, 0x92, 0xc1, 0x0c, 0x3a, 0x9d, 0x9d, 0x6a, 0x04, 0xda, 0xf1, 0x32}, + subYX: fp.Elt{0xbd, 0xf5, 0x2e, 0xce, 0x2b, 0x8e, 0x55, 0x7c, 0x63, 0xbc, 0x47, 0x67, 0xb4, 0x6c, 0x98, 0xe4, 0xb8, 0x89, 0xbb, 0x3b, 0x9f, 0x17, 0x4a, 0x15, 0x7a, 0x76, 0xf1, 0xd6, 0xa3, 0xf2, 0x86, 0x76}, + dt2: fp.Elt{0x6a, 0x7c, 0x59, 0x6d, 0xa6, 0x12, 0x8d, 0xaa, 0x2b, 0x85, 0xd3, 0x04, 0x03, 0x93, 0x11, 0x8f, 0x22, 0xb0, 0x09, 0xc2, 0x73, 0xdc, 0x91, 0x3f, 0xa6, 0x28, 0xad, 0xa9, 0xf8, 0x05, 0x13, 0x56}, + }, + { /* 35P */ + addYX: fp.Elt{0xd1, 0xae, 0x92, 0xec, 0x8d, 0x97, 0x0c, 0x10, 0xe5, 0x73, 0x6d, 0x4d, 0x43, 0xd5, 0x43, 0xca, 0x48, 0xba, 0x47, 0xd8, 0x22, 0x1b, 0x13, 0x83, 0x2c, 0x4d, 0x5d, 0xe3, 0x53, 0xec, 0xaa}, + subYX: fp.Elt{0xd5, 0xc0, 0xb0, 0xe7, 0x28, 0xcc, 0x22, 0x67, 0x53, 0x5c, 0x07, 0xdb, 0xbb, 0xe9, 0x9d, 0x70, 0x61, 0x0a, 0x01, 0xd7, 0xa7, 0x8d, 0xf6, 0xca, 0x6c, 0xcc, 0x57, 0x2c, 0xef, 0x1a, 0x0a, 0x03}, + dt2: fp.Elt{0xaa, 0xd2, 0x3a, 0x00, 0x73, 0xf7, 0xb1, 0x7b, 0x08, 0x66, 0x21, 0x2b, 0x80, 0x29, 0x3f, 0x0b, 0x3e, 0xd2, 0x0e, 0x52, 0x86, 0xdc, 0x21, 0x78, 0x80, 0x54, 0x06, 0x24, 0x1c, 0x9c, 0xbe, 0x20}, + }, + { /* 37P */ + addYX: fp.Elt{0xa6, 0x73, 0x96, 0x24, 0xd8, 0x87, 0x53, 0xe1, 0x93, 0xe4, 0x46, 0xf5, 0x2d, 0xbc, 0x43, 0x59, 0xb5, 0x63, 0x6f, 0xc3, 0x81, 0x9a, 0x7f, 0x1c, 0xde, 0xc1, 0x0a, 0x1f, 0x36, 0xb3, 0x0a, 0x75}, + subYX: fp.Elt{0x60, 0x5e, 0x02, 0xe2, 0x4a, 0xe4, 0xe0, 0x20, 0x38, 0xb9, 0xdc, 0xcb, 0x2f, 0x3b, 0x3b, 0xb0, 0x1c, 0x0d, 0x5a, 0xf9, 0x9c, 0x63, 0x5d, 0x10, 0x11, 0xe3, 0x67, 0x50, 0x54, 0x4c, 0x76, 0x69}, + dt2: fp.Elt{0x37, 0x10, 0xf8, 0xa2, 0x83, 0x32, 0x8a, 0x1e, 0xf1, 0xcb, 0x7f, 0xbd, 0x23, 0xda, 0x2e, 0x6f, 0x63, 0x25, 0x2e, 0xac, 0x5b, 0xd1, 0x2f, 0xb7, 0x40, 0x50, 0x07, 0xb7, 0x3f, 0x6b, 0xf9, 0x54}, + }, + { /* 39P */ + addYX: fp.Elt{0x79, 0x92, 0x66, 0x29, 0x04, 0xf2, 0xad, 0x0f, 0x4a, 0x72, 0x7d, 0x7d, 0x04, 0xa2, 0xdd, 0x3a, 0xf1, 0x60, 0x57, 0x8c, 0x82, 0x94, 0x3d, 0x6f, 0x9e, 0x53, 0xb7, 0x2b, 0xc5, 0xe9, 0x7f, 0x3d}, + subYX: fp.Elt{0xcd, 0x1e, 0xb1, 0x16, 0xc6, 0xaf, 0x7d, 0x17, 0x79, 0x64, 0x57, 0xfa, 0x9c, 0x4b, 0x76, 0x89, 0x85, 0xe7, 0xec, 0xe6, 0x10, 0xa1, 0xa8, 0xb7, 0xf0, 0xdb, 0x85, 0xbe, 0x9f, 0x83, 0xe6, 0x78}, + dt2: fp.Elt{0x6b, 0x85, 0xb8, 0x37, 0xf7, 0x2d, 0x33, 0x70, 0x8a, 0x17, 0x1a, 0x04, 0x43, 0x5d, 0xd0, 0x75, 0x22, 0x9e, 0xe5, 0xa0, 0x4a, 0xf7, 0x0f, 0x32, 0x42, 0x82, 0x08, 0x50, 0xf3, 0x68, 0xf2, 0x70}, + }, + { /* 41P */ + addYX: fp.Elt{0x47, 0x5f, 0x80, 0xb1, 0x83, 0x45, 0x86, 0x66, 0x19, 0x7c, 0xdd, 0x60, 0xd1, 0xc5, 0x35, 0xf5, 0x06, 0xb0, 0x4c, 0x1e, 0xb7, 0x4e, 0x87, 0xe9, 0xd9, 0x89, 0xd8, 0xfa, 0x5c, 0x34, 0x0d, 0x7c}, + subYX: fp.Elt{0x55, 0xf3, 0xdc, 0x70, 0x20, 0x11, 0x24, 0x23, 0x17, 0xe1, 0xfc, 0xe7, 0x7e, 0xc9, 0x0c, 0x38, 0x98, 0xb6, 0x52, 0x35, 0xed, 0xde, 0x1d, 0xb3, 0xb9, 0xc4, 0xb8, 0x39, 0xc0, 0x56, 0x4e, 0x40}, + dt2: fp.Elt{0x8a, 0x33, 0x78, 0x8c, 0x4b, 0x1f, 0x1f, 0x59, 0xe1, 0xb5, 0xe0, 0x67, 0xb1, 0x6a, 0x36, 0xa0, 0x44, 0x3d, 0x5f, 0xb4, 0x52, 0x41, 0xbc, 0x5c, 0x77, 0xc7, 0xae, 0x2a, 0x76, 0x54, 0xd7, 0x20}, + }, + { /* 43P */ + addYX: fp.Elt{0x58, 0xb7, 0x3b, 0xc7, 0x6f, 0xc3, 0x8f, 0x5e, 0x9a, 0xbb, 0x3c, 0x36, 0xa5, 0x43, 0xe5, 0xac, 0x22, 0xc9, 0x3b, 0x90, 0x7d, 0x4a, 0x93, 0xa9, 0x62, 0xec, 0xce, 0xf3, 0x46, 0x1e, 0x8f, 0x2b}, + subYX: fp.Elt{0x43, 0xf5, 0xb9, 0x35, 0xb1, 0xfe, 0x74, 0x9d, 0x6c, 0x95, 0x8c, 0xde, 0xf1, 0x7d, 0xb3, 0x84, 0xa9, 0x8b, 0x13, 0x57, 0x07, 0x2b, 0x32, 0xe9, 0xe1, 0x4c, 0x0b, 0x79, 0xa8, 0xad, 0xb8, 0x38}, + dt2: fp.Elt{0x5d, 0xf9, 0x51, 0xdf, 0x9c, 0x4a, 0xc0, 0xb5, 0xac, 0xde, 0x1f, 0xcb, 0xae, 0x52, 0x39, 0x2b, 0xda, 0x66, 0x8b, 0x32, 0x8b, 0x6d, 0x10, 0x1d, 0x53, 0x19, 0xba, 0xce, 0x32, 0xeb, 0x9a, 0x04}, + }, + { /* 45P */ + addYX: fp.Elt{0x31, 0x79, 0xfc, 0x75, 0x0b, 0x7d, 0x50, 0xaa, 0xd3, 0x25, 0x67, 0x7a, 0x4b, 0x92, 0xef, 0x0f, 0x30, 0x39, 0x6b, 0x39, 0x2b, 0x54, 0x82, 0x1d, 0xfc, 0x74, 0xf6, 0x30, 0x75, 0xe1, 0x5e, 0x79}, + subYX: fp.Elt{0x7e, 0xfe, 0xdc, 0x63, 0x3c, 0x7d, 0x76, 0xd7, 0x40, 0x6e, 0x85, 0x97, 0x48, 0x59, 0x9c, 0x20, 0x13, 0x7c, 0x4f, 0xe1, 0x61, 0x68, 0x67, 0xb6, 0xfc, 0x25, 0xd6, 0xc8, 0xe0, 0x65, 0xc6, 0x51}, + dt2: fp.Elt{0x81, 0xbd, 0xec, 0x52, 0x0a, 0x5b, 0x4a, 0x25, 0xe7, 0xaf, 0x34, 0xe0, 0x6e, 0x1f, 0x41, 0x5d, 0x31, 0x4a, 0xee, 0xca, 0x0d, 0x4d, 0xa2, 0xe6, 0x77, 0x44, 0xc5, 0x9d, 0xf4, 0x9b, 0xd1, 0x6c}, + }, + { /* 47P */ + addYX: fp.Elt{0x86, 0xc3, 0xaf, 0x65, 0x21, 0x61, 0xfe, 0x1f, 0x10, 0x1b, 0xd5, 0xb8, 0x88, 0x2a, 0x2a, 0x08, 0xaa, 0x0b, 0x99, 0x20, 0x7e, 0x62, 0xf6, 0x76, 0xe7, 0x43, 0x9e, 0x42, 0xa7, 0xb3, 0x01, 0x5e}, + subYX: fp.Elt{0xa3, 0x9c, 0x17, 0x52, 0x90, 0x61, 0x87, 0x7e, 0x85, 0x9f, 0x2c, 0x0b, 0x06, 0x0a, 0x1d, 0x57, 0x1e, 0x71, 0x99, 0x84, 0xa8, 0xba, 0xa2, 0x80, 0x38, 0xe6, 0xb2, 0x40, 0xdb, 0xf3, 0x20, 0x75}, + dt2: fp.Elt{0xa1, 0x57, 0x93, 0xd3, 0xe3, 0x0b, 0xb5, 0x3d, 0xa5, 0x94, 0x9e, 0x59, 0xdd, 0x6c, 0x7b, 0x96, 0x6e, 0x1e, 0x31, 0xdf, 0x64, 0x9a, 0x30, 0x1a, 0x86, 0xc9, 0xf3, 0xce, 0x9c, 0x2c, 0x09, 0x71}, + }, + { /* 49P */ + addYX: fp.Elt{0xcf, 0x1d, 0x05, 0x74, 0xac, 0xd8, 0x6b, 0x85, 0x1e, 0xaa, 0xb7, 0x55, 0x08, 0xa4, 0xf6, 0x03, 0xeb, 0x3c, 0x74, 0xc9, 0xcb, 0xe7, 0x4a, 0x3a, 0xde, 0xab, 0x37, 0x71, 0xbb, 0xa5, 0x73, 0x41}, + subYX: fp.Elt{0x8c, 0x91, 0x64, 0x03, 0x3f, 0x52, 0xd8, 0x53, 0x1c, 0x6b, 0xab, 0x3f, 0xf4, 0x04, 0xb4, 0xa2, 0xa4, 0xe5, 0x81, 0x66, 0x9e, 0x4a, 0x0b, 0x08, 0xa7, 0x7b, 0x25, 0xd0, 0x03, 0x5b, 0xa1, 0x0e}, + dt2: fp.Elt{0x8a, 0x21, 0xf9, 0xf0, 0x31, 0x6e, 0xc5, 0x17, 0x08, 0x47, 0xfc, 0x1a, 0x2b, 0x6e, 0x69, 0x5a, 0x76, 0xf1, 0xb2, 0xf4, 0x68, 0x16, 0x93, 0xf7, 0x67, 0x3a, 0x4e, 0x4a, 0x61, 0x65, 0xc5, 0x5f}, + }, + { /* 51P */ + addYX: fp.Elt{0x8e, 0x98, 0x90, 0x77, 0xe6, 0xe1, 0x92, 0x48, 0x22, 0xd7, 0x5c, 0x1c, 0x0f, 0x95, 0xd5, 0x01, 0xed, 0x3e, 0x92, 0xe5, 0x9a, 0x81, 0xb0, 0xe3, 0x1b, 0x65, 0x46, 0x9d, 0x40, 0xc7, 0x14, 0x32}, + subYX: fp.Elt{0xe5, 0x7a, 0x6d, 0xc4, 0x0d, 0x57, 0x6e, 0x13, 0x8f, 0xdc, 0xf8, 0x54, 0xcc, 0xaa, 0xd0, 0x0f, 0x86, 0xad, 0x0d, 0x31, 0x03, 0x9f, 0x54, 0x59, 0xa1, 0x4a, 0x45, 0x4c, 0x41, 0x1c, 0x71, 0x62}, + dt2: fp.Elt{0x70, 0x17, 0x65, 0x06, 0x74, 0x82, 0x29, 0x13, 0x36, 0x94, 0x27, 0x8a, 0x66, 0xa0, 0xa4, 0x3b, 0x3c, 0x22, 0x5d, 0x18, 0xec, 0xb8, 0xb6, 0xd9, 0x3c, 0x83, 0xcb, 0x3e, 0x07, 0x94, 0xea, 0x5b}, + }, + { /* 53P */ + addYX: fp.Elt{0xf8, 0xd2, 0x43, 0xf3, 0x63, 0xce, 0x70, 0xb4, 0xf1, 0xe8, 0x43, 0x05, 0x8f, 0xba, 0x67, 0x00, 0x6f, 0x7b, 0x11, 0xa2, 0xa1, 0x51, 0xda, 0x35, 0x2f, 0xbd, 0xf1, 0x44, 0x59, 0x78, 0xd0, 0x4a}, + subYX: fp.Elt{0xe4, 0x9b, 0xc8, 0x12, 0x09, 0xbf, 0x1d, 0x64, 0x9c, 0x57, 0x6e, 0x7d, 0x31, 0x8b, 0xf3, 0xac, 0x65, 0xb0, 0x97, 0xf6, 0x02, 0x9e, 0xfe, 0xab, 0xec, 0x1e, 0xf6, 0x48, 0xc1, 0xd5, 0xac, 0x3a}, + dt2: fp.Elt{0x01, 0x83, 0x31, 0xc3, 0x34, 0x3b, 0x8e, 0x85, 0x26, 0x68, 0x31, 0x07, 0x47, 0xc0, 0x99, 0xdc, 0x8c, 0xa8, 0x9d, 0xd3, 0x2e, 0x5b, 0x08, 0x34, 0x3d, 0x85, 0x02, 0xd9, 0xb1, 0x0c, 0xff, 0x3a}, + }, + { /* 55P */ + addYX: fp.Elt{0x05, 0x35, 0xc5, 0xf4, 0x0b, 0x43, 0x26, 0x92, 0x83, 0x22, 0x1f, 0x26, 0x13, 0x9c, 0xe4, 0x68, 0xc6, 0x27, 0xd3, 0x8f, 0x78, 0x33, 0xef, 0x09, 0x7f, 0x9e, 0xd9, 0x2b, 0x73, 0x9f, 0xcf, 0x2c}, + subYX: fp.Elt{0x5e, 0x40, 0x20, 0x3a, 0xeb, 0xc7, 0xc5, 0x87, 0xc9, 0x56, 0xad, 0xed, 0xef, 0x11, 0xe3, 0x8e, 0xf9, 0xd5, 0x29, 0xad, 0x48, 0x2e, 0x25, 0x29, 0x1d, 0x25, 0xcd, 0xf4, 0x86, 0x7e, 0x0e, 0x11}, + dt2: fp.Elt{0xe4, 0xf5, 0x03, 0xd6, 0x9e, 0xd8, 0xc0, 0x57, 0x0c, 0x20, 0xb0, 0xf0, 0x28, 0x86, 0x88, 0x12, 0xb7, 0x3b, 0x2e, 0xa0, 0x09, 0x27, 0x17, 0x53, 0x37, 0x3a, 0x69, 0xb9, 0xe0, 0x57, 0xc5, 0x05}, + }, + { /* 57P */ + addYX: fp.Elt{0xb0, 0x0e, 0xc2, 0x89, 0xb0, 0xbb, 0x76, 0xf7, 0x5c, 0xd8, 0x0f, 0xfa, 0xf6, 0x5b, 0xf8, 0x61, 0xfb, 0x21, 0x44, 0x63, 0x4e, 0x3f, 0xb9, 0xb6, 0x05, 0x12, 0x86, 0x41, 0x08, 0xef, 0x9f, 0x28}, + subYX: fp.Elt{0x6f, 0x7e, 0xc9, 0x1f, 0x31, 0xce, 0xf9, 0xd8, 0xae, 0xfd, 0xf9, 0x11, 0x30, 0x26, 0x3f, 0x7a, 0xdd, 0x25, 0xed, 0x8b, 0xa0, 0x7e, 0x5b, 0xe1, 0x5a, 0x87, 0xe9, 0x8f, 0x17, 0x4c, 0x15, 0x6e}, + dt2: fp.Elt{0xbf, 0x9a, 0xd6, 0xfe, 0x36, 0x63, 0x61, 0xcf, 0x4f, 0xc9, 0x35, 0x83, 0xe7, 0xe4, 0x16, 0x9b, 0xe7, 0x7f, 0x3a, 0x75, 0x65, 0x97, 0x78, 0x13, 0x19, 0xa3, 0x5c, 0xa9, 0x42, 0xf6, 0xfb, 0x6a}, + }, + { /* 59P */ + addYX: fp.Elt{0xcc, 0xa8, 0x13, 0xf9, 0x70, 0x50, 0xe5, 0x5d, 0x61, 0xf5, 0x0c, 0x2b, 0x7b, 0x16, 0x1d, 0x7d, 0x89, 0xd4, 0xea, 0x90, 0xb6, 0x56, 0x29, 0xda, 0xd9, 0x1e, 0x80, 0xdb, 0xce, 0x93, 0xc0, 0x12}, + subYX: fp.Elt{0xc1, 0xd2, 0xf5, 0x62, 0x0c, 0xde, 0xa8, 0x7d, 0x9a, 0x7b, 0x0e, 0xb0, 0xa4, 0x3d, 0xfc, 0x98, 0xe0, 0x70, 0xad, 0x0d, 0xda, 0x6a, 0xeb, 0x7d, 0xc4, 0x38, 0x50, 0xb9, 0x51, 0xb8, 0xb4, 0x0d}, + dt2: fp.Elt{0x0f, 0x19, 0xb8, 0x08, 0x93, 0x7f, 0x14, 0xfc, 0x10, 0xe3, 0x1a, 0xa1, 0xa0, 0x9d, 0x96, 0x06, 0xfd, 0xd7, 0xc7, 0xda, 0x72, 0x55, 0xe7, 0xce, 0xe6, 0x5c, 0x63, 0xc6, 0x99, 0x87, 0xaa, 0x33}, + }, + { /* 61P */ + addYX: fp.Elt{0xb1, 0x6c, 0x15, 0xfc, 0x88, 0xf5, 0x48, 0x83, 0x27, 0x6d, 0x0a, 0x1a, 0x9b, 0xba, 0xa2, 0x6d, 0xb6, 0x5a, 0xca, 0x87, 0x5c, 0x2d, 0x26, 0xe2, 0xa6, 0x89, 0xd5, 0xc8, 0xc1, 0xd0, 0x2c, 0x21}, + subYX: fp.Elt{0xf2, 0x5c, 0x08, 0xbd, 0x1e, 0xf5, 0x0f, 0xaf, 0x1f, 0x3f, 0xd3, 0x67, 0x89, 0x1a, 0xf5, 0x78, 0x3c, 0x03, 0x60, 0x50, 0xe1, 0xbf, 0xc2, 0x6e, 0x86, 0x1a, 0xe2, 0xe8, 0x29, 0x6f, 0x3c, 0x23}, + dt2: fp.Elt{0x81, 0xc7, 0x18, 0x7f, 0x10, 0xd5, 0xf4, 0xd2, 0x28, 0x9d, 0x7e, 0x52, 0xf2, 0xcd, 0x2e, 0x12, 0x41, 0x33, 0x3d, 0x3d, 0x2a, 0x86, 0x0a, 0xa7, 0xe3, 0x4c, 0x91, 0x11, 0x89, 0x77, 0xb7, 0x1d}, + }, + { /* 63P */ + addYX: fp.Elt{0xb6, 0x1a, 0x70, 0xdd, 0x69, 0x47, 0x39, 0xb3, 0xa5, 0x8d, 0xcf, 0x19, 0xd4, 0xde, 0xb8, 0xe2, 0x52, 0xc8, 0x2a, 0xfd, 0x61, 0x41, 0xdf, 0x15, 0xbe, 0x24, 0x7d, 0x01, 0x8a, 0xca, 0xe2, 0x7a}, + subYX: fp.Elt{0x6f, 0xc2, 0x6b, 0x7c, 0x39, 0x52, 0xf3, 0xdd, 0x13, 0x01, 0xd5, 0x53, 0xcc, 0xe2, 0x97, 0x7a, 0x30, 0xa3, 0x79, 0xbf, 0x3a, 0xf4, 0x74, 0x7c, 0xfc, 0xad, 0xe2, 0x26, 0xad, 0x97, 0xad, 0x31}, + dt2: fp.Elt{0x62, 0xb9, 0x20, 0x09, 0xed, 0x17, 0xe8, 0xb7, 0x9d, 0xda, 0x19, 0x3f, 0xcc, 0x18, 0x85, 0x1e, 0x64, 0x0a, 0x56, 0x25, 0x4f, 0xc1, 0x91, 0xe4, 0x83, 0x2c, 0x62, 0xa6, 0x53, 0xfc, 0xd1, 0x1e}, + }, +} diff --git a/vendor/github.com/cloudflare/circl/sign/ed448/ed448.go b/vendor/github.com/cloudflare/circl/sign/ed448/ed448.go new file mode 100644 index 0000000000000..324bd8f334609 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed448/ed448.go @@ -0,0 +1,411 @@ +// Package ed448 implements Ed448 signature scheme as described in RFC-8032. +// +// This package implements two signature variants. +// +// | Scheme Name | Sign Function | Verification | Context | +// |-------------|-------------------|---------------|-------------------| +// | Ed448 | Sign | Verify | Yes, can be empty | +// | Ed448Ph | SignPh | VerifyPh | Yes, can be empty | +// | All above | (PrivateKey).Sign | VerifyAny | As above | +// +// Specific functions for sign and verify are defined. A generic signing +// function for all schemes is available through the crypto.Signer interface, +// which is implemented by the PrivateKey type. A correspond all-in-one +// verification method is provided by the VerifyAny function. +// +// Both schemes require a context string for domain separation. This parameter +// is passed using a SignerOptions struct defined in this package. +// +// References: +// +// - RFC8032: https://rfc-editor.org/rfc/rfc8032.txt +// - EdDSA for more curves: https://eprint.iacr.org/2015/677 +// - High-speed high-security signatures: https://doi.org/10.1007/s13389-012-0027-1 +package ed448 + +import ( + "bytes" + "crypto" + cryptoRand "crypto/rand" + "crypto/subtle" + "errors" + "fmt" + "io" + "strconv" + + "github.com/cloudflare/circl/ecc/goldilocks" + "github.com/cloudflare/circl/internal/sha3" + "github.com/cloudflare/circl/sign" +) + +const ( + // ContextMaxSize is the maximum length (in bytes) allowed for context. + ContextMaxSize = 255 + // PublicKeySize is the length in bytes of Ed448 public keys. + PublicKeySize = 57 + // PrivateKeySize is the length in bytes of Ed448 private keys. + PrivateKeySize = 114 + // SignatureSize is the length in bytes of signatures. + SignatureSize = 114 + // SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032. + SeedSize = 57 +) + +const ( + paramB = 456 / 8 // Size of keys in bytes. + hashSize = 2 * paramB // Size of the hash function's output. +) + +// SignerOptions implements crypto.SignerOpts and augments with parameters +// that are specific to the Ed448 signature schemes. +type SignerOptions struct { + // Hash must be crypto.Hash(0) for both Ed448 and Ed448Ph. + crypto.Hash + + // Context is an optional domain separation string for signing. + // Its length must be less or equal than 255 bytes. + Context string + + // Scheme is an identifier for choosing a signature scheme. + Scheme SchemeID +} + +// SchemeID is an identifier for each signature scheme. +type SchemeID uint + +const ( + ED448 SchemeID = iota + ED448Ph +) + +// PublicKey is the type of Ed448 public keys. +type PublicKey []byte + +// Equal reports whether pub and x have the same value. +func (pub PublicKey) Equal(x crypto.PublicKey) bool { + xx, ok := x.(PublicKey) + return ok && bytes.Equal(pub, xx) +} + +// PrivateKey is the type of Ed448 private keys. It implements crypto.Signer. +type PrivateKey []byte + +// Equal reports whether priv and x have the same value. +func (priv PrivateKey) Equal(x crypto.PrivateKey) bool { + xx, ok := x.(PrivateKey) + return ok && subtle.ConstantTimeCompare(priv, xx) == 1 +} + +// Public returns the PublicKey corresponding to priv. +func (priv PrivateKey) Public() crypto.PublicKey { + publicKey := make([]byte, PublicKeySize) + copy(publicKey, priv[SeedSize:]) + return PublicKey(publicKey) +} + +// Seed returns the private key seed corresponding to priv. It is provided for +// interoperability with RFC 8032. RFC 8032's private keys correspond to seeds +// in this package. +func (priv PrivateKey) Seed() []byte { + seed := make([]byte, SeedSize) + copy(seed, priv[:SeedSize]) + return seed +} + +func (priv PrivateKey) Scheme() sign.Scheme { return sch } + +func (pub PublicKey) Scheme() sign.Scheme { return sch } + +func (priv PrivateKey) MarshalBinary() (data []byte, err error) { + privateKey := make(PrivateKey, PrivateKeySize) + copy(privateKey, priv) + return privateKey, nil +} + +func (pub PublicKey) MarshalBinary() (data []byte, err error) { + publicKey := make(PublicKey, PublicKeySize) + copy(publicKey, pub) + return publicKey, nil +} + +// Sign creates a signature of a message given a key pair. +// This function supports all the two signature variants defined in RFC-8032, +// namely Ed448 (or pure EdDSA) and Ed448Ph. +// The opts.HashFunc() must return zero to the specify Ed448 variant. This can +// be achieved by passing crypto.Hash(0) as the value for opts. +// Use an Options struct to pass a bool indicating that the ed448Ph variant +// should be used. +// The struct can also be optionally used to pass a context string for signing. +func (priv PrivateKey) Sign( + rand io.Reader, + message []byte, + opts crypto.SignerOpts, +) (signature []byte, err error) { + var ctx string + var scheme SchemeID + + if o, ok := opts.(SignerOptions); ok { + ctx = o.Context + scheme = o.Scheme + } + + switch true { + case scheme == ED448 && opts.HashFunc() == crypto.Hash(0): + return Sign(priv, message, ctx), nil + case scheme == ED448Ph && opts.HashFunc() == crypto.Hash(0): + return SignPh(priv, message, ctx), nil + default: + return nil, errors.New("ed448: bad hash algorithm") + } +} + +// GenerateKey generates a public/private key pair using entropy from rand. +// If rand is nil, crypto/rand.Reader will be used. +func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { + if rand == nil { + rand = cryptoRand.Reader + } + + seed := make(PrivateKey, SeedSize) + if _, err := io.ReadFull(rand, seed); err != nil { + return nil, nil, err + } + + privateKey := NewKeyFromSeed(seed) + publicKey := make([]byte, PublicKeySize) + copy(publicKey, privateKey[SeedSize:]) + + return publicKey, privateKey, nil +} + +// NewKeyFromSeed calculates a private key from a seed. It will panic if +// len(seed) is not SeedSize. This function is provided for interoperability +// with RFC 8032. RFC 8032's private keys correspond to seeds in this +// package. +func NewKeyFromSeed(seed []byte) PrivateKey { + privateKey := make([]byte, PrivateKeySize) + newKeyFromSeed(privateKey, seed) + return privateKey +} + +func newKeyFromSeed(privateKey, seed []byte) { + if l := len(seed); l != SeedSize { + panic("ed448: bad seed length: " + strconv.Itoa(l)) + } + + var h [hashSize]byte + H := sha3.NewShake256() + _, _ = H.Write(seed) + _, _ = H.Read(h[:]) + s := &goldilocks.Scalar{} + deriveSecretScalar(s, h[:paramB]) + + copy(privateKey[:SeedSize], seed) + _ = goldilocks.Curve{}.ScalarBaseMult(s).ToBytes(privateKey[SeedSize:]) +} + +func signAll(signature []byte, privateKey PrivateKey, message, ctx []byte, preHash bool) { + if len(ctx) > ContextMaxSize { + panic(fmt.Errorf("ed448: bad context length: " + strconv.Itoa(len(ctx)))) + } + + H := sha3.NewShake256() + var PHM []byte + + if preHash { + var h [64]byte + _, _ = H.Write(message) + _, _ = H.Read(h[:]) + PHM = h[:] + H.Reset() + } else { + PHM = message + } + + // 1. Hash the 57-byte private key using SHAKE256(x, 114). + var h [hashSize]byte + _, _ = H.Write(privateKey[:SeedSize]) + _, _ = H.Read(h[:]) + s := &goldilocks.Scalar{} + deriveSecretScalar(s, h[:paramB]) + prefix := h[paramB:] + + // 2. Compute SHAKE256(dom4(F, C) || prefix || PH(M), 114). + var rPM [hashSize]byte + H.Reset() + + writeDom(&H, ctx, preHash) + + _, _ = H.Write(prefix) + _, _ = H.Write(PHM) + _, _ = H.Read(rPM[:]) + + // 3. Compute the point [r]B. + r := &goldilocks.Scalar{} + r.FromBytes(rPM[:]) + R := (&[paramB]byte{})[:] + if err := (goldilocks.Curve{}.ScalarBaseMult(r).ToBytes(R)); err != nil { + panic(err) + } + // 4. Compute SHAKE256(dom4(F, C) || R || A || PH(M), 114) + var hRAM [hashSize]byte + H.Reset() + + writeDom(&H, ctx, preHash) + + _, _ = H.Write(R) + _, _ = H.Write(privateKey[SeedSize:]) + _, _ = H.Write(PHM) + _, _ = H.Read(hRAM[:]) + + // 5. Compute S = (r + k * s) mod order. + k := &goldilocks.Scalar{} + k.FromBytes(hRAM[:]) + S := &goldilocks.Scalar{} + S.Mul(k, s) + S.Add(S, r) + + // 6. The signature is the concatenation of R and S. + copy(signature[:paramB], R[:]) + copy(signature[paramB:], S[:]) +} + +// Sign signs the message with privateKey and returns a signature. +// This function supports the signature variant defined in RFC-8032: Ed448, +// also known as the pure version of EdDSA. +// It will panic if len(privateKey) is not PrivateKeySize. +func Sign(priv PrivateKey, message []byte, ctx string) []byte { + signature := make([]byte, SignatureSize) + signAll(signature, priv, message, []byte(ctx), false) + return signature +} + +// SignPh creates a signature of a message given a keypair. +// This function supports the signature variant defined in RFC-8032: Ed448ph, +// meaning it internally hashes the message using SHAKE-256. +// Context could be passed to this function, which length should be no more than +// 255. It can be empty. +func SignPh(priv PrivateKey, message []byte, ctx string) []byte { + signature := make([]byte, SignatureSize) + signAll(signature, priv, message, []byte(ctx), true) + return signature +} + +func verify(public PublicKey, message, signature, ctx []byte, preHash bool) bool { + if len(public) != PublicKeySize || + len(signature) != SignatureSize || + len(ctx) > ContextMaxSize || + !isLessThanOrder(signature[paramB:]) { + return false + } + + P, err := goldilocks.FromBytes(public) + if err != nil { + return false + } + + H := sha3.NewShake256() + var PHM []byte + + if preHash { + var h [64]byte + _, _ = H.Write(message) + _, _ = H.Read(h[:]) + PHM = h[:] + H.Reset() + } else { + PHM = message + } + + var hRAM [hashSize]byte + R := signature[:paramB] + + writeDom(&H, ctx, preHash) + + _, _ = H.Write(R) + _, _ = H.Write(public) + _, _ = H.Write(PHM) + _, _ = H.Read(hRAM[:]) + + k := &goldilocks.Scalar{} + k.FromBytes(hRAM[:]) + S := &goldilocks.Scalar{} + S.FromBytes(signature[paramB:]) + + encR := (&[paramB]byte{})[:] + P.Neg() + _ = goldilocks.Curve{}.CombinedMult(S, k, P).ToBytes(encR) + return bytes.Equal(R, encR) +} + +// VerifyAny returns true if the signature is valid. Failure cases are invalid +// signature, or when the public key cannot be decoded. +// This function supports all the two signature variants defined in RFC-8032, +// namely Ed448 (or pure EdDSA) and Ed448Ph. +// The opts.HashFunc() must return zero, this can be achieved by passing +// crypto.Hash(0) as the value for opts. +// Use a SignerOptions struct to pass a context string for signing. +func VerifyAny(public PublicKey, message, signature []byte, opts crypto.SignerOpts) bool { + var ctx string + var scheme SchemeID + if o, ok := opts.(SignerOptions); ok { + ctx = o.Context + scheme = o.Scheme + } + + switch true { + case scheme == ED448 && opts.HashFunc() == crypto.Hash(0): + return Verify(public, message, signature, ctx) + case scheme == ED448Ph && opts.HashFunc() == crypto.Hash(0): + return VerifyPh(public, message, signature, ctx) + default: + return false + } +} + +// Verify returns true if the signature is valid. Failure cases are invalid +// signature, or when the public key cannot be decoded. +// This function supports the signature variant defined in RFC-8032: Ed448, +// also known as the pure version of EdDSA. +func Verify(public PublicKey, message, signature []byte, ctx string) bool { + return verify(public, message, signature, []byte(ctx), false) +} + +// VerifyPh returns true if the signature is valid. Failure cases are invalid +// signature, or when the public key cannot be decoded. +// This function supports the signature variant defined in RFC-8032: Ed448ph, +// meaning it internally hashes the message using SHAKE-256. +// Context could be passed to this function, which length should be no more than +// 255. It can be empty. +func VerifyPh(public PublicKey, message, signature []byte, ctx string) bool { + return verify(public, message, signature, []byte(ctx), true) +} + +func deriveSecretScalar(s *goldilocks.Scalar, h []byte) { + h[0] &= 0xFC // The two least significant bits of the first octet are cleared, + h[paramB-1] = 0x00 // all eight bits the last octet are cleared, and + h[paramB-2] |= 0x80 // the highest bit of the second to last octet is set. + s.FromBytes(h[:paramB]) +} + +// isLessThanOrder returns true if 0 <= x < order and if the last byte of x is zero. +func isLessThanOrder(x []byte) bool { + order := goldilocks.Curve{}.Order() + i := len(order) - 1 + for i > 0 && x[i] == order[i] { + i-- + } + return x[paramB-1] == 0 && x[i] < order[i] +} + +func writeDom(h io.Writer, ctx []byte, preHash bool) { + dom4 := "SigEd448" + _, _ = h.Write([]byte(dom4)) + + if preHash { + _, _ = h.Write([]byte{byte(0x01), byte(len(ctx))}) + } else { + _, _ = h.Write([]byte{byte(0x00), byte(len(ctx))}) + } + _, _ = h.Write(ctx) +} diff --git a/vendor/github.com/cloudflare/circl/sign/ed448/signapi.go b/vendor/github.com/cloudflare/circl/sign/ed448/signapi.go new file mode 100644 index 0000000000000..22da8bc0a5705 --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/ed448/signapi.go @@ -0,0 +1,87 @@ +package ed448 + +import ( + "crypto/rand" + "encoding/asn1" + + "github.com/cloudflare/circl/sign" +) + +var sch sign.Scheme = &scheme{} + +// Scheme returns a signature interface. +func Scheme() sign.Scheme { return sch } + +type scheme struct{} + +func (*scheme) Name() string { return "Ed448" } +func (*scheme) PublicKeySize() int { return PublicKeySize } +func (*scheme) PrivateKeySize() int { return PrivateKeySize } +func (*scheme) SignatureSize() int { return SignatureSize } +func (*scheme) SeedSize() int { return SeedSize } +func (*scheme) TLSIdentifier() uint { return 0x0808 } +func (*scheme) SupportsContext() bool { return true } +func (*scheme) Oid() asn1.ObjectIdentifier { + return asn1.ObjectIdentifier{1, 3, 101, 113} +} + +func (*scheme) GenerateKey() (sign.PublicKey, sign.PrivateKey, error) { + return GenerateKey(rand.Reader) +} + +func (*scheme) Sign( + sk sign.PrivateKey, + message []byte, + opts *sign.SignatureOpts, +) []byte { + priv, ok := sk.(PrivateKey) + if !ok { + panic(sign.ErrTypeMismatch) + } + ctx := "" + if opts != nil { + ctx = opts.Context + } + return Sign(priv, message, ctx) +} + +func (*scheme) Verify( + pk sign.PublicKey, + message, signature []byte, + opts *sign.SignatureOpts, +) bool { + pub, ok := pk.(PublicKey) + if !ok { + panic(sign.ErrTypeMismatch) + } + ctx := "" + if opts != nil { + ctx = opts.Context + } + return Verify(pub, message, signature, ctx) +} + +func (*scheme) DeriveKey(seed []byte) (sign.PublicKey, sign.PrivateKey) { + privateKey := NewKeyFromSeed(seed) + publicKey := make(PublicKey, PublicKeySize) + copy(publicKey, privateKey[SeedSize:]) + return publicKey, privateKey +} + +func (*scheme) UnmarshalBinaryPublicKey(buf []byte) (sign.PublicKey, error) { + if len(buf) < PublicKeySize { + return nil, sign.ErrPubKeySize + } + pub := make(PublicKey, PublicKeySize) + copy(pub, buf[:PublicKeySize]) + return pub, nil +} + +func (*scheme) UnmarshalBinaryPrivateKey(buf []byte) (sign.PrivateKey, error) { + if len(buf) < PrivateKeySize { + return nil, sign.ErrPrivKeySize + } + priv := make(PrivateKey, PrivateKeySize) + copy(priv, buf[:PrivateKeySize]) + return priv, nil +} diff --git a/vendor/github.com/cloudflare/circl/sign/sign.go b/vendor/github.com/cloudflare/circl/sign/sign.go new file mode 100644 index 0000000000000..13b20fa4b04ae --- /dev/null +++ b/vendor/github.com/cloudflare/circl/sign/sign.go @@ -0,0 +1,110 @@ +// Package sign provides unified interfaces for signature schemes. +// +// A register of schemes is available in the package +// +// github.com/cloudflare/circl/sign/schemes +package sign + +import ( + "crypto" + "encoding" + "errors" +) + +type SignatureOpts struct { + // If non-empty, includes the given context in the signature if supported + // and will cause an error during signing otherwise. + Context string +} + +// A public key is used to verify a signature set by the corresponding private +// key. +type PublicKey interface { + // Returns the signature scheme for this public key. + Scheme() Scheme + Equal(crypto.PublicKey) bool + encoding.BinaryMarshaler + crypto.PublicKey +} + +// A private key allows one to create signatures. +type PrivateKey interface { + // Returns the signature scheme for this private key. + Scheme() Scheme + Equal(crypto.PrivateKey) bool + // For compatibility with Go standard library + crypto.Signer + crypto.PrivateKey + encoding.BinaryMarshaler +} + +// A Scheme represents a specific instance of a signature scheme. +type Scheme interface { + // Name of the scheme. + Name() string + + // GenerateKey creates a new key-pair. + GenerateKey() (PublicKey, PrivateKey, error) + + // Creates a signature using the PrivateKey on the given message and + // returns the signature. opts are additional options which can be nil. + // + // Panics if key is nil or wrong type or opts context is not supported. + Sign(sk PrivateKey, message []byte, opts *SignatureOpts) []byte + + // Checks whether the given signature is a valid signature set by + // the private key corresponding to the given public key on the + // given message. opts are additional options which can be nil. + // + // Panics if key is nil or wrong type or opts context is not supported. + Verify(pk PublicKey, message []byte, signature []byte, opts *SignatureOpts) bool + + // Deterministically derives a keypair from a seed. If you're unsure, + // you're better off using GenerateKey(). + // + // Panics if seed is not of length SeedSize(). + DeriveKey(seed []byte) (PublicKey, PrivateKey) + + // Unmarshals a PublicKey from the provided buffer. + UnmarshalBinaryPublicKey([]byte) (PublicKey, error) + + // Unmarshals a PublicKey from the provided buffer. + UnmarshalBinaryPrivateKey([]byte) (PrivateKey, error) + + // Size of binary marshalled public keys. + PublicKeySize() int + + // Size of binary marshalled public keys. + PrivateKeySize() int + + // Size of signatures. + SignatureSize() int + + // Size of seeds. + SeedSize() int + + // Returns whether contexts are supported. + SupportsContext() bool +} + +var ( + // ErrTypeMismatch is the error used if types of, for instance, private + // and public keys don't match. + ErrTypeMismatch = errors.New("types mismatch") + + // ErrSeedSize is the error used if the provided seed is of the wrong + // size. + ErrSeedSize = errors.New("wrong seed size") + + // ErrPubKeySize is the error used if the provided public key is of + // the wrong size. + ErrPubKeySize = errors.New("wrong size for public key") + + // ErrPrivKeySize is the error used if the provided private key is of + // the wrong size. + ErrPrivKeySize = errors.New("wrong size for private key") + + // ErrContextNotSupported is the error used if a context is not + // supported. + ErrContextNotSupported = errors.New("context not supported") +) diff --git a/vendor/github.com/fatih/color/README.md b/vendor/github.com/fatih/color/README.md index 5152bf59bf8e9..be82827cacd30 100644 --- a/vendor/github.com/fatih/color/README.md +++ b/vendor/github.com/fatih/color/README.md @@ -7,7 +7,6 @@ suits you. ![Color](https://user-images.githubusercontent.com/438920/96832689-03b3e000-13f4-11eb-9803-46f4c4de3406.jpg) - ## Install ```bash @@ -124,17 +123,17 @@ fmt.Println("All text will now be bold magenta.") ``` ### Disable/Enable color - + There might be a case where you want to explicitly disable/enable color output. the `go-isatty` package will automatically disable color output for non-tty output streams (for example if the output were piped directly to `less`). The `color` package also disables color output if the [`NO_COLOR`](https://no-color.org) environment -variable is set (regardless of its value). +variable is set to a non-empty string. -`Color` has support to disable/enable colors programatically both globally and +`Color` has support to disable/enable colors programmatically both globally and for single color definitions. For example suppose you have a CLI app and a -`--no-color` bool flag. You can easily disable the color output with: +`-no-color` bool flag. You can easily disable the color output with: ```go var flagNoColor = flag.Bool("no-color", false, "Disable color output") @@ -167,11 +166,10 @@ To output color in GitHub Actions (or other CI systems that support ANSI colors) * Save/Return previous values * Evaluate fmt.Formatter interface - ## Credits - * [Fatih Arslan](https://github.com/fatih) - * Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable) +* [Fatih Arslan](https://github.com/fatih) +* Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable) ## License diff --git a/vendor/github.com/fatih/color/color.go b/vendor/github.com/fatih/color/color.go index 98a60f3c88d6a..889f9e77bdc9a 100644 --- a/vendor/github.com/fatih/color/color.go +++ b/vendor/github.com/fatih/color/color.go @@ -19,10 +19,10 @@ var ( // set (regardless of its value). This is a global option and affects all // colors. For more control over each color block use the methods // DisableColor() individually. - NoColor = noColorExists() || os.Getenv("TERM") == "dumb" || + NoColor = noColorIsSet() || os.Getenv("TERM") == "dumb" || (!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd())) - // Output defines the standard output of the print functions. By default + // Output defines the standard output of the print functions. By default, // os.Stdout is used. Output = colorable.NewColorableStdout() @@ -35,10 +35,9 @@ var ( colorsCacheMu sync.Mutex // protects colorsCache ) -// noColorExists returns true if the environment variable NO_COLOR exists. -func noColorExists() bool { - _, exists := os.LookupEnv("NO_COLOR") - return exists +// noColorIsSet returns true if the environment variable NO_COLOR is set to a non-empty string. +func noColorIsSet() bool { + return os.Getenv("NO_COLOR") != "" } // Color defines a custom color object which is defined by SGR parameters. @@ -120,7 +119,7 @@ func New(value ...Attribute) *Color { params: make([]Attribute, 0), } - if noColorExists() { + if noColorIsSet() { c.noColor = boolPtr(true) } @@ -152,7 +151,7 @@ func (c *Color) Set() *Color { return c } - fmt.Fprintf(Output, c.format()) + fmt.Fprint(Output, c.format()) return c } @@ -164,16 +163,21 @@ func (c *Color) unset() { Unset() } -func (c *Color) setWriter(w io.Writer) *Color { +// SetWriter is used to set the SGR sequence with the given io.Writer. This is +// a low-level function, and users should use the higher-level functions, such +// as color.Fprint, color.Print, etc. +func (c *Color) SetWriter(w io.Writer) *Color { if c.isNoColorSet() { return c } - fmt.Fprintf(w, c.format()) + fmt.Fprint(w, c.format()) return c } -func (c *Color) unsetWriter(w io.Writer) { +// UnsetWriter resets all escape attributes and clears the output with the give +// io.Writer. Usually should be called after SetWriter(). +func (c *Color) UnsetWriter(w io.Writer) { if c.isNoColorSet() { return } @@ -192,20 +196,14 @@ func (c *Color) Add(value ...Attribute) *Color { return c } -func (c *Color) prepend(value Attribute) { - c.params = append(c.params, 0) - copy(c.params[1:], c.params[0:]) - c.params[0] = value -} - // Fprint formats using the default formats for its operands and writes to w. // Spaces are added between operands when neither is a string. // It returns the number of bytes written and any write error encountered. // On Windows, users should wrap w with colorable.NewColorable() if w is of // type *os.File. func (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) + c.SetWriter(w) + defer c.UnsetWriter(w) return fmt.Fprint(w, a...) } @@ -227,8 +225,8 @@ func (c *Color) Print(a ...interface{}) (n int, err error) { // On Windows, users should wrap w with colorable.NewColorable() if w is of // type *os.File. func (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) + c.SetWriter(w) + defer c.UnsetWriter(w) return fmt.Fprintf(w, format, a...) } @@ -248,8 +246,8 @@ func (c *Color) Printf(format string, a ...interface{}) (n int, err error) { // On Windows, users should wrap w with colorable.NewColorable() if w is of // type *os.File. func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) + c.SetWriter(w) + defer c.UnsetWriter(w) return fmt.Fprintln(w, a...) } @@ -396,7 +394,7 @@ func (c *Color) DisableColor() { } // EnableColor enables the color output. Use it in conjunction with -// DisableColor(). Otherwise this method has no side effects. +// DisableColor(). Otherwise, this method has no side effects. func (c *Color) EnableColor() { c.noColor = boolPtr(false) } diff --git a/vendor/github.com/fatih/color/color_windows.go b/vendor/github.com/fatih/color/color_windows.go new file mode 100644 index 0000000000000..be01c558e5065 --- /dev/null +++ b/vendor/github.com/fatih/color/color_windows.go @@ -0,0 +1,19 @@ +package color + +import ( + "os" + + "golang.org/x/sys/windows" +) + +func init() { + // Opt-in for ansi color support for current process. + // https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#output-sequences + var outMode uint32 + out := windows.Handle(os.Stdout.Fd()) + if err := windows.GetConsoleMode(out, &outMode); err != nil { + return + } + outMode |= windows.ENABLE_PROCESSED_OUTPUT | windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING + _ = windows.SetConsoleMode(out, outMode) +} diff --git a/vendor/github.com/fatih/color/doc.go b/vendor/github.com/fatih/color/doc.go index 04541de786f39..9491ad5413c61 100644 --- a/vendor/github.com/fatih/color/doc.go +++ b/vendor/github.com/fatih/color/doc.go @@ -5,106 +5,105 @@ that suits you. Use simple and default helper functions with predefined foreground colors: - color.Cyan("Prints text in cyan.") + color.Cyan("Prints text in cyan.") - // a newline will be appended automatically - color.Blue("Prints %s in blue.", "text") + // a newline will be appended automatically + color.Blue("Prints %s in blue.", "text") - // More default foreground colors.. - color.Red("We have red") - color.Yellow("Yellow color too!") - color.Magenta("And many others ..") + // More default foreground colors.. + color.Red("We have red") + color.Yellow("Yellow color too!") + color.Magenta("And many others ..") - // Hi-intensity colors - color.HiGreen("Bright green color.") - color.HiBlack("Bright black means gray..") - color.HiWhite("Shiny white color!") + // Hi-intensity colors + color.HiGreen("Bright green color.") + color.HiBlack("Bright black means gray..") + color.HiWhite("Shiny white color!") -However there are times where custom color mixes are required. Below are some +However, there are times when custom color mixes are required. Below are some examples to create custom color objects and use the print functions of each separate color object. - // Create a new color object - c := color.New(color.FgCyan).Add(color.Underline) - c.Println("Prints cyan text with an underline.") + // Create a new color object + c := color.New(color.FgCyan).Add(color.Underline) + c.Println("Prints cyan text with an underline.") - // Or just add them to New() - d := color.New(color.FgCyan, color.Bold) - d.Printf("This prints bold cyan %s\n", "too!.") + // Or just add them to New() + d := color.New(color.FgCyan, color.Bold) + d.Printf("This prints bold cyan %s\n", "too!.") - // Mix up foreground and background colors, create new mixes! - red := color.New(color.FgRed) + // Mix up foreground and background colors, create new mixes! + red := color.New(color.FgRed) - boldRed := red.Add(color.Bold) - boldRed.Println("This will print text in bold red.") + boldRed := red.Add(color.Bold) + boldRed.Println("This will print text in bold red.") - whiteBackground := red.Add(color.BgWhite) - whiteBackground.Println("Red text with White background.") + whiteBackground := red.Add(color.BgWhite) + whiteBackground.Println("Red text with White background.") - // Use your own io.Writer output - color.New(color.FgBlue).Fprintln(myWriter, "blue color!") + // Use your own io.Writer output + color.New(color.FgBlue).Fprintln(myWriter, "blue color!") - blue := color.New(color.FgBlue) - blue.Fprint(myWriter, "This will print text in blue.") + blue := color.New(color.FgBlue) + blue.Fprint(myWriter, "This will print text in blue.") You can create PrintXxx functions to simplify even more: - // Create a custom print function for convenient - red := color.New(color.FgRed).PrintfFunc() - red("warning") - red("error: %s", err) + // Create a custom print function for convenient + red := color.New(color.FgRed).PrintfFunc() + red("warning") + red("error: %s", err) - // Mix up multiple attributes - notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() - notice("don't forget this...") + // Mix up multiple attributes + notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() + notice("don't forget this...") You can also FprintXxx functions to pass your own io.Writer: - blue := color.New(FgBlue).FprintfFunc() - blue(myWriter, "important notice: %s", stars) - - // Mix up with multiple attributes - success := color.New(color.Bold, color.FgGreen).FprintlnFunc() - success(myWriter, don't forget this...") + blue := color.New(FgBlue).FprintfFunc() + blue(myWriter, "important notice: %s", stars) + // Mix up with multiple attributes + success := color.New(color.Bold, color.FgGreen).FprintlnFunc() + success(myWriter, don't forget this...") Or create SprintXxx functions to mix strings with other non-colorized strings: - yellow := New(FgYellow).SprintFunc() - red := New(FgRed).SprintFunc() + yellow := New(FgYellow).SprintFunc() + red := New(FgRed).SprintFunc() - fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error")) + fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error")) - info := New(FgWhite, BgGreen).SprintFunc() - fmt.Printf("this %s rocks!\n", info("package")) + info := New(FgWhite, BgGreen).SprintFunc() + fmt.Printf("this %s rocks!\n", info("package")) Windows support is enabled by default. All Print functions work as intended. -However only for color.SprintXXX functions, user should use fmt.FprintXXX and +However, only for color.SprintXXX functions, user should use fmt.FprintXXX and set the output to color.Output: - fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) + fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) - info := New(FgWhite, BgGreen).SprintFunc() - fmt.Fprintf(color.Output, "this %s rocks!\n", info("package")) + info := New(FgWhite, BgGreen).SprintFunc() + fmt.Fprintf(color.Output, "this %s rocks!\n", info("package")) Using with existing code is possible. Just use the Set() method to set the standard output to the given parameters. That way a rewrite of an existing code is not required. - // Use handy standard colors. - color.Set(color.FgYellow) + // Use handy standard colors. + color.Set(color.FgYellow) - fmt.Println("Existing text will be now in Yellow") - fmt.Printf("This one %s\n", "too") + fmt.Println("Existing text will be now in Yellow") + fmt.Printf("This one %s\n", "too") - color.Unset() // don't forget to unset + color.Unset() // don't forget to unset - // You can mix up parameters - color.Set(color.FgMagenta, color.Bold) - defer color.Unset() // use it in your function + // You can mix up parameters + color.Set(color.FgMagenta, color.Bold) + defer color.Unset() // use it in your function - fmt.Println("All text will be now bold magenta.") + fmt.Println("All text will be now bold magenta.") There might be a case where you want to disable color output (for example to pipe the standard output of your app to somewhere else). `Color` has support to @@ -112,24 +111,24 @@ disable colors both globally and for single color definition. For example suppose you have a CLI app and a `--no-color` bool flag. You can easily disable the color output with: - var flagNoColor = flag.Bool("no-color", false, "Disable color output") + var flagNoColor = flag.Bool("no-color", false, "Disable color output") - if *flagNoColor { - color.NoColor = true // disables colorized output - } + if *flagNoColor { + color.NoColor = true // disables colorized output + } You can also disable the color by setting the NO_COLOR environment variable to any value. It also has support for single color definitions (local). You can disable/enable color output on the fly: - c := color.New(color.FgCyan) - c.Println("Prints cyan text") + c := color.New(color.FgCyan) + c.Println("Prints cyan text") - c.DisableColor() - c.Println("This is printed without any color") + c.DisableColor() + c.Println("This is printed without any color") - c.EnableColor() - c.Println("This prints again cyan...") + c.EnableColor() + c.Println("This prints again cyan...") */ package color diff --git a/vendor/github.com/golang/protobuf/jsonpb/decode.go b/vendor/github.com/golang/protobuf/jsonpb/decode.go index 60e82caa9a2d3..6c16c255ffba3 100644 --- a/vendor/github.com/golang/protobuf/jsonpb/decode.go +++ b/vendor/github.com/golang/protobuf/jsonpb/decode.go @@ -386,8 +386,14 @@ func (u *Unmarshaler) unmarshalMessage(m protoreflect.Message, in []byte) error } func isSingularWellKnownValue(fd protoreflect.FieldDescriptor) bool { + if fd.Cardinality() == protoreflect.Repeated { + return false + } if md := fd.Message(); md != nil { - return md.FullName() == "google.protobuf.Value" && fd.Cardinality() != protoreflect.Repeated + return md.FullName() == "google.protobuf.Value" + } + if ed := fd.Enum(); ed != nil { + return ed.FullName() == "google.protobuf.NullValue" } return false } diff --git a/vendor/github.com/google/uuid/.travis.yml b/vendor/github.com/google/uuid/.travis.yml deleted file mode 100644 index d8156a60ba9b3..0000000000000 --- a/vendor/github.com/google/uuid/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: go - -go: - - 1.4.3 - - 1.5.3 - - tip - -script: - - go test -v ./... diff --git a/vendor/github.com/google/uuid/CHANGELOG.md b/vendor/github.com/google/uuid/CHANGELOG.md new file mode 100644 index 0000000000000..2bd78667afbb3 --- /dev/null +++ b/vendor/github.com/google/uuid/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +## [1.3.1](https://github.com/google/uuid/compare/v1.3.0...v1.3.1) (2023-08-18) + + +### Bug Fixes + +* Use .EqualFold() to parse urn prefixed UUIDs ([#118](https://github.com/google/uuid/issues/118)) ([574e687](https://github.com/google/uuid/commit/574e6874943741fb99d41764c705173ada5293f0)) + +## Changelog diff --git a/vendor/github.com/google/uuid/CONTRIBUTING.md b/vendor/github.com/google/uuid/CONTRIBUTING.md index 04fdf09f136bb..5566888726d98 100644 --- a/vendor/github.com/google/uuid/CONTRIBUTING.md +++ b/vendor/github.com/google/uuid/CONTRIBUTING.md @@ -2,6 +2,22 @@ We definitely welcome patches and contribution to this project! +### Tips + +Commits must be formatted according to the [Conventional Commits Specification](https://www.conventionalcommits.org). + +Always try to include a test case! If it is not possible or not necessary, +please explain why in the pull request description. + +### Releasing + +Commits that would precipitate a SemVer change, as desrcibed in the Conventional +Commits Specification, will trigger [`release-please`](https://github.com/google-github-actions/release-please-action) +to create a release candidate pull request. Once submitted, `release-please` +will create a release. + +For tips on how to work with `release-please`, see its documentation. + ### Legal requirements In order to protect both you and ourselves, you will need to sign the diff --git a/vendor/github.com/google/uuid/README.md b/vendor/github.com/google/uuid/README.md index f765a46f91501..3e9a61889de48 100644 --- a/vendor/github.com/google/uuid/README.md +++ b/vendor/github.com/google/uuid/README.md @@ -1,6 +1,6 @@ -# uuid ![build status](https://travis-ci.org/google/uuid.svg?branch=master) +# uuid The uuid package generates and inspects UUIDs based on -[RFC 4122](http://tools.ietf.org/html/rfc4122) +[RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122) and DCE 1.1: Authentication and Security Services. This package is based on the github.com/pborman/uuid package (previously named @@ -9,10 +9,12 @@ a UUID is a 16 byte array rather than a byte slice. One loss due to this change is the ability to represent an invalid UUID (vs a NIL UUID). ###### Install -`go get github.com/google/uuid` +```sh +go get github.com/google/uuid +``` ###### Documentation -[![GoDoc](https://godoc.org/github.com/google/uuid?status.svg)](http://godoc.org/github.com/google/uuid) +[![Go Reference](https://pkg.go.dev/badge/github.com/google/uuid.svg)](https://pkg.go.dev/github.com/google/uuid) Full `go doc` style documentation for the package can be viewed online without installing this package by using the GoDoc site here: diff --git a/vendor/github.com/google/uuid/node_js.go b/vendor/github.com/google/uuid/node_js.go index 24b78edc90710..b2a0bc8711b3d 100644 --- a/vendor/github.com/google/uuid/node_js.go +++ b/vendor/github.com/google/uuid/node_js.go @@ -7,6 +7,6 @@ package uuid // getHardwareInterface returns nil values for the JS version of the code. -// This remvoves the "net" dependency, because it is not used in the browser. +// This removes the "net" dependency, because it is not used in the browser. // Using the "net" library inflates the size of the transpiled JS code by 673k bytes. func getHardwareInterface(name string) (string, []byte) { return "", nil } diff --git a/vendor/github.com/google/uuid/uuid.go b/vendor/github.com/google/uuid/uuid.go index a57207aeb6fd8..a56138cc4bd04 100644 --- a/vendor/github.com/google/uuid/uuid.go +++ b/vendor/github.com/google/uuid/uuid.go @@ -69,7 +69,7 @@ func Parse(s string) (UUID, error) { // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx case 36 + 9: - if strings.ToLower(s[:9]) != "urn:uuid:" { + if !strings.EqualFold(s[:9], "urn:uuid:") { return uuid, fmt.Errorf("invalid urn prefix: %q", s[:9]) } s = s[9:] @@ -101,7 +101,8 @@ func Parse(s string) (UUID, error) { 9, 11, 14, 16, 19, 21, - 24, 26, 28, 30, 32, 34} { + 24, 26, 28, 30, 32, 34, + } { v, ok := xtob(s[x], s[x+1]) if !ok { return uuid, errors.New("invalid UUID format") @@ -117,7 +118,7 @@ func ParseBytes(b []byte) (UUID, error) { switch len(b) { case 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx case 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - if !bytes.Equal(bytes.ToLower(b[:9]), []byte("urn:uuid:")) { + if !bytes.EqualFold(b[:9], []byte("urn:uuid:")) { return uuid, fmt.Errorf("invalid urn prefix: %q", b[:9]) } b = b[9:] @@ -145,7 +146,8 @@ func ParseBytes(b []byte) (UUID, error) { 9, 11, 14, 16, 19, 21, - 24, 26, 28, 30, 32, 34} { + 24, 26, 28, 30, 32, 34, + } { v, ok := xtob(b[x], b[x+1]) if !ok { return uuid, errors.New("invalid UUID format") diff --git a/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/availability_set_id.go b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/availability_set_id.go new file mode 100644 index 0000000000000..3342e9aae1e4a --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/availability_set_id.go @@ -0,0 +1,127 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package commonids + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.ResourceId = AvailabilitySetId{} + +// AvailabilitySetId is a struct representing the Resource ID for a Availability Set +type AvailabilitySetId struct { + SubscriptionId string + ResourceGroupName string + AvailabilitySetName string +} + +// NewAvailabilitySetID returns a new AvailabilitySetId struct +func NewAvailabilitySetID(subscriptionId string, resourceGroupName string, availabilitySetName string) AvailabilitySetId { + return AvailabilitySetId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + AvailabilitySetName: availabilitySetName, + } +} + +// ParseAvailabilitySetID parses 'input' into a AvailabilitySetId +func ParseAvailabilitySetID(input string) (*AvailabilitySetId, error) { + parser := resourceids.NewParserFromResourceIdType(AvailabilitySetId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := AvailabilitySetId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.AvailabilitySetName, ok = parsed.Parsed["availabilitySetName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "availabilitySetName", *parsed) + } + + return &id, nil +} + +// ParseAvailabilitySetIDInsensitively parses 'input' case-insensitively into a AvailabilitySetId +// note: this method should only be used for API response data and not user input +func ParseAvailabilitySetIDInsensitively(input string) (*AvailabilitySetId, error) { + parser := resourceids.NewParserFromResourceIdType(AvailabilitySetId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := AvailabilitySetId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.AvailabilitySetName, ok = parsed.Parsed["availabilitySetName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "availabilitySetName", *parsed) + } + + return &id, nil +} + +// ValidateAvailabilitySetID checks that 'input' can be parsed as a Availability Set ID +func ValidateAvailabilitySetID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseAvailabilitySetID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Availability Set ID +func (id AvailabilitySetId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/availabilitySets/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.AvailabilitySetName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Availability Set ID +func (id AvailabilitySetId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftCompute", "Microsoft.Compute", "Microsoft.Compute"), + resourceids.StaticSegment("staticAvailabilitySets", "availabilitySets", "availabilitySets"), + resourceids.UserSpecifiedSegment("availabilitySetName", "availabilitySetValue"), + } +} + +// String returns a human-readable description of this Availability Set ID +func (id AvailabilitySetId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Availability Set Name: %q", id.AvailabilitySetName), + } + return fmt.Sprintf("Availability Set (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/dedicated_host.go b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/dedicated_host.go new file mode 100644 index 0000000000000..b10cae32d152e --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/dedicated_host.go @@ -0,0 +1,140 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package commonids + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.ResourceId = DedicatedHostId{} + +// DedicatedHostId is a struct representing the Resource ID for a Dedicated Host +type DedicatedHostId struct { + SubscriptionId string + ResourceGroupName string + HostGroupName string + HostName string +} + +// NewDedicatedHostID returns a new DedicatedHostId struct +func NewDedicatedHostID(subscriptionId string, resourceGroupName string, hostGroupName string, hostName string) DedicatedHostId { + return DedicatedHostId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + HostGroupName: hostGroupName, + HostName: hostName, + } +} + +// ParseDedicatedHostID parses 'input' into a DedicatedHostId +func ParseDedicatedHostID(input string) (*DedicatedHostId, error) { + parser := resourceids.NewParserFromResourceIdType(DedicatedHostId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := DedicatedHostId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.HostGroupName, ok = parsed.Parsed["hostGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "hostGroupName", *parsed) + } + + if id.HostName, ok = parsed.Parsed["hostName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "hostName", *parsed) + } + + return &id, nil +} + +// ParseDedicatedHostIDInsensitively parses 'input' case-insensitively into a DedicatedHostId +// note: this method should only be used for API response data and not user input +func ParseDedicatedHostIDInsensitively(input string) (*DedicatedHostId, error) { + parser := resourceids.NewParserFromResourceIdType(DedicatedHostId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := DedicatedHostId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.HostGroupName, ok = parsed.Parsed["hostGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "hostGroupName", *parsed) + } + + if id.HostName, ok = parsed.Parsed["hostName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "hostName", *parsed) + } + + return &id, nil +} + +// ValidateDedicatedHostID checks that 'input' can be parsed as a Dedicated Host ID +func ValidateDedicatedHostID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseDedicatedHostID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Dedicated Host ID +func (id DedicatedHostId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/hostGroups/%s/hosts/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.HostGroupName, id.HostName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Dedicated Host ID +func (id DedicatedHostId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftCompute", "Microsoft.Compute", "Microsoft.Compute"), + resourceids.StaticSegment("staticHostGroups", "hostGroups", "hostGroups"), + resourceids.UserSpecifiedSegment("hostGroupName", "hostGroupValue"), + resourceids.StaticSegment("staticHosts", "hosts", "hosts"), + resourceids.UserSpecifiedSegment("hostName", "hostValue"), + } +} + +// String returns a human-readable description of this DedicatedHost ID +func (id DedicatedHostId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Host Group Name: %q", id.HostGroupName), + fmt.Sprintf("Host Name: %q", id.HostName), + } + return fmt.Sprintf("Dedicated Host (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/dedicated_host_group.go b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/dedicated_host_group.go new file mode 100644 index 0000000000000..ea855419215d2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/dedicated_host_group.go @@ -0,0 +1,127 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package commonids + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.ResourceId = DedicatedHostGroupId{} + +// DedicatedHostGroupId is a struct representing the Resource ID for a Dedicated Host Group +type DedicatedHostGroupId struct { + SubscriptionId string + ResourceGroupName string + HostGroupName string +} + +// NewDedicatedHostGroupID returns a new HostGroupId struct +func NewDedicatedHostGroupID(subscriptionId string, resourceGroupName string, hostGroupName string) DedicatedHostGroupId { + return DedicatedHostGroupId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + HostGroupName: hostGroupName, + } +} + +// ParseDedicatedHostGroupID parses 'input' into a DedicatedHostGroupId +func ParseDedicatedHostGroupID(input string) (*DedicatedHostGroupId, error) { + parser := resourceids.NewParserFromResourceIdType(DedicatedHostGroupId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := DedicatedHostGroupId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.HostGroupName, ok = parsed.Parsed["hostGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "hostGroupName", *parsed) + } + + return &id, nil +} + +// ParseDedicatedHostGroupIDInsensitively parses 'input' case-insensitively into a DedicatedHostGroupId +// note: this method should only be used for API response data and not user input +func ParseDedicatedHostGroupIDInsensitively(input string) (*DedicatedHostGroupId, error) { + parser := resourceids.NewParserFromResourceIdType(DedicatedHostGroupId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := DedicatedHostGroupId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.HostGroupName, ok = parsed.Parsed["hostGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "hostGroupName", *parsed) + } + + return &id, nil +} + +// ValidateDedicatedHostGroupID checks that 'input' can be parsed as a Dedicated Host Group ID +func ValidateDedicatedHostGroupID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseDedicatedHostGroupID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Dedicated Host Group ID +func (id DedicatedHostGroupId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/hostGroups/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.HostGroupName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Dedicated Host Group ID +func (id DedicatedHostGroupId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftCompute", "Microsoft.Compute", "Microsoft.Compute"), + resourceids.StaticSegment("staticHostGroups", "hostGroups", "hostGroups"), + resourceids.UserSpecifiedSegment("hostGroupName", "hostGroupValue"), + } +} + +// String returns a human-readable description of this Dedicated Host Group ID +func (id DedicatedHostGroupId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Host Group Name: %q", id.HostGroupName), + } + return fmt.Sprintf("Dedicated Host Group (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/disk_encryption_set.go b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/disk_encryption_set.go new file mode 100644 index 0000000000000..0127577bb5c61 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/disk_encryption_set.go @@ -0,0 +1,127 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package commonids + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.ResourceId = DiskEncryptionSetId{} + +// DiskEncryptionSetId is a struct representing the Resource ID for a Disk Encryption Set +type DiskEncryptionSetId struct { + SubscriptionId string + ResourceGroupName string + DiskEncryptionSetName string +} + +// NewDiskEncryptionSetID returns a new DiskEncryptionSetId struct +func NewDiskEncryptionSetID(subscriptionId string, resourceGroupName string, diskEncryptionSetName string) DiskEncryptionSetId { + return DiskEncryptionSetId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + DiskEncryptionSetName: diskEncryptionSetName, + } +} + +// ParseDiskEncryptionSetID parses 'input' into a DiskEncryptionSetId +func ParseDiskEncryptionSetID(input string) (*DiskEncryptionSetId, error) { + parser := resourceids.NewParserFromResourceIdType(DiskEncryptionSetId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := DiskEncryptionSetId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.DiskEncryptionSetName, ok = parsed.Parsed["diskEncryptionSetName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "diskEncryptionSetName", *parsed) + } + + return &id, nil +} + +// ParseDiskEncryptionSetIDInsensitively parses 'input' case-insensitively into a DiskEncryptionSetId +// note: this method should only be used for API response data and not user input +func ParseDiskEncryptionSetIDInsensitively(input string) (*DiskEncryptionSetId, error) { + parser := resourceids.NewParserFromResourceIdType(DiskEncryptionSetId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := DiskEncryptionSetId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.DiskEncryptionSetName, ok = parsed.Parsed["diskEncryptionSetName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "diskEncryptionSetName", *parsed) + } + + return &id, nil +} + +// ValidateDiskEncryptionSetID checks that 'input' can be parsed as a Disk Encryption Set ID +func ValidateDiskEncryptionSetID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseDiskEncryptionSetID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Disk Encryption Set ID +func (id DiskEncryptionSetId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/diskEncryptionSets/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.DiskEncryptionSetName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Disk Encryption Set ID +func (id DiskEncryptionSetId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftCompute", "Microsoft.Compute", "Microsoft.Compute"), + resourceids.StaticSegment("staticDiskEncryptionSets", "diskEncryptionSets", "diskEncryptionSets"), + resourceids.UserSpecifiedSegment("diskEncryptionSetName", "diskEncryptionSetValue"), + } +} + +// String returns a human-readable description of this Disk Encryption Set ID +func (id DiskEncryptionSetId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Disk Encryption Set Name: %q", id.DiskEncryptionSetName), + } + return fmt.Sprintf("Disk Encryption Set (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/managed_disk.go b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/managed_disk.go new file mode 100644 index 0000000000000..3090a126310e1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/managed_disk.go @@ -0,0 +1,127 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package commonids + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.ResourceId = ManagedDiskId{} + +// ManagedDiskId is a struct representing the Resource ID for a Managed Disk +type ManagedDiskId struct { + SubscriptionId string + ResourceGroupName string + DiskName string +} + +// NewManagedDiskID returns a new ManagedDiskId struct +func NewManagedDiskID(subscriptionId string, resourceGroupName string, diskName string) ManagedDiskId { + return ManagedDiskId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + DiskName: diskName, + } +} + +// ParseManagedDiskID parses 'input' into a ManagedDiskId +func ParseManagedDiskID(input string) (*ManagedDiskId, error) { + parser := resourceids.NewParserFromResourceIdType(ManagedDiskId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ManagedDiskId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.DiskName, ok = parsed.Parsed["diskName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "diskName", *parsed) + } + + return &id, nil +} + +// ParseManagedDiskIDInsensitively parses 'input' case-insensitively into a ManagedDiskId +// note: this method should only be used for API response data and not user input +func ParseManagedDiskIDInsensitively(input string) (*ManagedDiskId, error) { + parser := resourceids.NewParserFromResourceIdType(ManagedDiskId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ManagedDiskId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.DiskName, ok = parsed.Parsed["diskName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "diskName", *parsed) + } + + return &id, nil +} + +// ValidateManagedDiskID checks that 'input' can be parsed as a Managed Disk ID +func ValidateManagedDiskID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseManagedDiskID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Managed Disk ID +func (id ManagedDiskId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/disks/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.DiskName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Disk ID +func (id ManagedDiskId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftCompute", "Microsoft.Compute", "Microsoft.Compute"), + resourceids.StaticSegment("staticDisks", "disks", "disks"), + resourceids.UserSpecifiedSegment("diskName", "diskValue"), + } +} + +// String returns a human-readable description of this Managed Disk ID +func (id ManagedDiskId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Disk Name: %q", id.DiskName), + } + return fmt.Sprintf("Managed Disk (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/spring_cloud_service.go b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/spring_cloud_service.go new file mode 100644 index 0000000000000..87d09cf741479 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/spring_cloud_service.go @@ -0,0 +1,127 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package commonids + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.ResourceId = SpringCloudServiceId{} + +// SpringCloudServiceId is a struct representing the Resource ID for a Spring Cloud Service +type SpringCloudServiceId struct { + SubscriptionId string + ResourceGroupName string + ServiceName string +} + +// NewSpringCloudServiceID returns a new SpringCloudServiceId struct +func NewSpringCloudServiceID(subscriptionId string, resourceGroupName string, serviceName string) SpringCloudServiceId { + return SpringCloudServiceId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + ServiceName: serviceName, + } +} + +// ParseSpringCloudServiceID parses 'input' into a SpringCloudServiceId +func ParseSpringCloudServiceID(input string) (*SpringCloudServiceId, error) { + parser := resourceids.NewParserFromResourceIdType(SpringCloudServiceId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := SpringCloudServiceId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ServiceName, ok = parsed.Parsed["serviceName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "serviceName", *parsed) + } + + return &id, nil +} + +// ParseSpringCloudServiceIDInsensitively parses 'input' case-insensitively into a SpringCloudServiceId +// note: this method should only be used for API response data and not user input +func ParseSpringCloudServiceIDInsensitively(input string) (*SpringCloudServiceId, error) { + parser := resourceids.NewParserFromResourceIdType(SpringCloudServiceId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := SpringCloudServiceId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ServiceName, ok = parsed.Parsed["serviceName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "serviceName", *parsed) + } + + return &id, nil +} + +// ValidateSpringCloudServiceID checks that 'input' can be parsed as a Spring Cloud Service ID +func ValidateSpringCloudServiceID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseSpringCloudServiceID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Spring Cloud Service ID +func (id SpringCloudServiceId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.AppPlatform/spring/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.ServiceName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Spring Cloud Service ID +func (id SpringCloudServiceId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftAppPlatform", "Microsoft.AppPlatform", "Microsoft.AppPlatform"), + resourceids.StaticSegment("staticSpring", "spring", "spring"), + resourceids.UserSpecifiedSegment("serviceName", "serviceValue"), + } +} + +// String returns a human-readable description of this Spring Cloud Service ID +func (id SpringCloudServiceId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Service Name: %q", id.ServiceName), + } + return fmt.Sprintf("Spring Cloud Service (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/virtual_machine.go b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/virtual_machine.go new file mode 100644 index 0000000000000..f75ce94224beb --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/virtual_machine.go @@ -0,0 +1,127 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package commonids + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.ResourceId = VirtualMachineId{} + +// VirtualMachineId is a struct representing the Resource ID for a Virtual Machine +type VirtualMachineId struct { + SubscriptionId string + ResourceGroupName string + VirtualMachineName string +} + +// NewVirtualMachineID returns a new VirtualMachineId struct +func NewVirtualMachineID(subscriptionId string, resourceGroupName string, virtualMachineName string) VirtualMachineId { + return VirtualMachineId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + VirtualMachineName: virtualMachineName, + } +} + +// ParseVirtualMachineID parses 'input' into a VirtualMachineId +func ParseVirtualMachineID(input string) (*VirtualMachineId, error) { + parser := resourceids.NewParserFromResourceIdType(VirtualMachineId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := VirtualMachineId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.VirtualMachineName, ok = parsed.Parsed["virtualMachineName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "virtualMachineName", *parsed) + } + + return &id, nil +} + +// ParseVirtualMachineIDInsensitively parses 'input' case-insensitively into a VirtualMachineId +// note: this method should only be used for API response data and not user input +func ParseVirtualMachineIDInsensitively(input string) (*VirtualMachineId, error) { + parser := resourceids.NewParserFromResourceIdType(VirtualMachineId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := VirtualMachineId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.VirtualMachineName, ok = parsed.Parsed["virtualMachineName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "virtualMachineName", *parsed) + } + + return &id, nil +} + +// ValidateVirtualMachineID checks that 'input' can be parsed as a Virtual Machine ID +func ValidateVirtualMachineID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseVirtualMachineID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Virtual Machine ID +func (id VirtualMachineId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/virtualMachines/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.VirtualMachineName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Virtual Machine ID +func (id VirtualMachineId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftCompute", "Microsoft.Compute", "Microsoft.Compute"), + resourceids.StaticSegment("staticVirtualMachines", "virtualMachines", "virtualMachines"), + resourceids.UserSpecifiedSegment("virtualMachineName", "virtualMachineValue"), + } +} + +// String returns a human-readable description of this Virtual Machine ID +func (id VirtualMachineId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Virtual Machine Name: %q", id.VirtualMachineName), + } + return fmt.Sprintf("Virtual Machine (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/virtual_machine_scale_set.go b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/virtual_machine_scale_set.go new file mode 100644 index 0000000000000..4100e501cc86d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-helpers/resourcemanager/commonids/virtual_machine_scale_set.go @@ -0,0 +1,125 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package commonids + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// VirtualMachineScaleSetId is a struct representing the Resource ID for a Virtual Machine Scale Set +type VirtualMachineScaleSetId struct { + SubscriptionId string + ResourceGroupName string + VirtualMachineScaleSetName string +} + +// NewVirtualMachineScaleSetID returns a new VirtualMachineScaleSetId struct +func NewVirtualMachineScaleSetID(subscriptionId string, resourceGroupName string, virtualMachineScaleSetName string) VirtualMachineScaleSetId { + return VirtualMachineScaleSetId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + VirtualMachineScaleSetName: virtualMachineScaleSetName, + } +} + +// ParseVirtualMachineScaleSetID parses 'input' into a VirtualMachineScaleSetId +func ParseVirtualMachineScaleSetID(input string) (*VirtualMachineScaleSetId, error) { + parser := resourceids.NewParserFromResourceIdType(VirtualMachineScaleSetId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := VirtualMachineScaleSetId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.VirtualMachineScaleSetName, ok = parsed.Parsed["virtualMachineScaleSetName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "virtualMachineScaleSetName", *parsed) + } + + return &id, nil +} + +// ParseVirtualMachineScaleSetIDInsensitively parses 'input' case-insensitively into a VirtualMachineScaleSetId +// note: this method should only be used for API response data and not user input +func ParseVirtualMachineScaleSetIDInsensitively(input string) (*VirtualMachineScaleSetId, error) { + parser := resourceids.NewParserFromResourceIdType(VirtualMachineScaleSetId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := VirtualMachineScaleSetId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.VirtualMachineScaleSetName, ok = parsed.Parsed["virtualMachineScaleSetName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "virtualMachineScaleSetName", *parsed) + } + + return &id, nil +} + +// ValidateVirtualMachineScaleSetID checks that 'input' can be parsed as a Virtual Machine Scale Set ID +func ValidateVirtualMachineScaleSetID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseVirtualMachineScaleSetID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Virtual Machine Scale Set ID +func (id VirtualMachineScaleSetId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/virtualMachineScaleSets/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.VirtualMachineScaleSetName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Virtual Machine Scale Set ID +func (id VirtualMachineScaleSetId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftCompute", "Microsoft.Compute", "Microsoft.Compute"), + resourceids.StaticSegment("staticVirtualMachineScaleSets", "virtualMachineScaleSets", "virtualMachineScaleSets"), + resourceids.UserSpecifiedSegment("virtualMachineScaleSetName", "virtualMachineScaleSetValue"), + } +} + +// String returns a human-readable description of this Virtual Machine Scale Set ID +func (id VirtualMachineScaleSetId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Virtual Machine Scale Set Name: %q", id.VirtualMachineScaleSetName), + } + return fmt.Sprintf("Virtual Machine Scale Set (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/README.md index 8173b464d9047..110f4c5eb0ce7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `AlertProcessingRulesClient.AlertProcessingRulesCreateOrUpdate` +### Example Usage: `AlertProcessingRulesClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := alertprocessingrules.AlertProcessingRule{ } -read, err := client.AlertProcessingRulesCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,13 +41,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AlertProcessingRulesClient.AlertProcessingRulesDelete` +### Example Usage: `AlertProcessingRulesClient.Delete` ```go ctx := context.TODO() id := alertprocessingrules.NewActionRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "actionRuleValue") -read, err := client.AlertProcessingRulesDelete(ctx, id) +read, err := client.Delete(ctx, id) if err != nil { // handle the error } @@ -57,13 +57,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AlertProcessingRulesClient.AlertProcessingRulesGetByName` +### Example Usage: `AlertProcessingRulesClient.GetByName` ```go ctx := context.TODO() id := alertprocessingrules.NewActionRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "actionRuleValue") -read, err := client.AlertProcessingRulesGetByName(ctx, id) +read, err := client.GetByName(ctx, id) if err != nil { // handle the error } @@ -73,14 +73,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AlertProcessingRulesClient.AlertProcessingRulesListByResourceGroup` +### Example Usage: `AlertProcessingRulesClient.ListByResourceGroup` ```go ctx := context.TODO() id := alertprocessingrules.NewResourceGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group") -// alternatively `client.AlertProcessingRulesListByResourceGroup(ctx, id)` can be used to do batched pagination -items, err := client.AlertProcessingRulesListByResourceGroupComplete(ctx, id) +// alternatively `client.ListByResourceGroup(ctx, id)` can be used to do batched pagination +items, err := client.ListByResourceGroupComplete(ctx, id) if err != nil { // handle the error } @@ -90,14 +90,14 @@ for _, item := range items { ``` -### Example Usage: `AlertProcessingRulesClient.AlertProcessingRulesListBySubscription` +### Example Usage: `AlertProcessingRulesClient.ListBySubscription` ```go ctx := context.TODO() id := alertprocessingrules.NewSubscriptionID("12345678-1234-9876-4563-123456789012") -// alternatively `client.AlertProcessingRulesListBySubscription(ctx, id)` can be used to do batched pagination -items, err := client.AlertProcessingRulesListBySubscriptionComplete(ctx, id) +// alternatively `client.ListBySubscription(ctx, id)` can be used to do batched pagination +items, err := client.ListBySubscriptionComplete(ctx, id) if err != nil { // handle the error } @@ -107,7 +107,7 @@ for _, item := range items { ``` -### Example Usage: `AlertProcessingRulesClient.AlertProcessingRulesUpdate` +### Example Usage: `AlertProcessingRulesClient.Update` ```go ctx := context.TODO() @@ -118,7 +118,7 @@ payload := alertprocessingrules.PatchObject{ } -read, err := client.AlertProcessingRulesUpdate(ctx, id, payload) +read, err := client.Update(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulescreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_createorupdate.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulescreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_createorupdate.go index 3ea2ab429498a..8d167889d07fd 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulescreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_createorupdate.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertProcessingRulesCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AlertProcessingRule } -// AlertProcessingRulesCreateOrUpdate ... -func (c AlertProcessingRulesClient) AlertProcessingRulesCreateOrUpdate(ctx context.Context, id ActionRuleId, input AlertProcessingRule) (result AlertProcessingRulesCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c AlertProcessingRulesClient) CreateOrUpdate(ctx context.Context, id ActionRuleId, input AlertProcessingRule) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_delete.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_delete.go index 6721913070ccc..fe7cad1aff0b2 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_delete.go @@ -11,13 +11,13 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertProcessingRulesDeleteOperationResponse struct { +type DeleteOperationResponse struct { HttpResponse *http.Response OData *odata.OData } -// AlertProcessingRulesDelete ... -func (c AlertProcessingRulesClient) AlertProcessingRulesDelete(ctx context.Context, id ActionRuleId) (result AlertProcessingRulesDeleteOperationResponse, err error) { +// Delete ... +func (c AlertProcessingRulesClient) Delete(ctx context.Context, id ActionRuleId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesgetbyname.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_getbyname.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesgetbyname.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_getbyname.go index 67c11910f556c..a5f010dc56c51 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesgetbyname.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_getbyname.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertProcessingRulesGetByNameOperationResponse struct { +type GetByNameOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AlertProcessingRule } -// AlertProcessingRulesGetByName ... -func (c AlertProcessingRulesClient) AlertProcessingRulesGetByName(ctx context.Context, id ActionRuleId) (result AlertProcessingRulesGetByNameOperationResponse, err error) { +// GetByName ... +func (c AlertProcessingRulesClient) GetByName(ctx context.Context, id ActionRuleId) (result GetByNameOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingruleslistbysubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_listbyresourcegroup.go similarity index 52% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingruleslistbysubscription.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_listbyresourcegroup.go index be97487feb2ce..43c3c14df4305 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingruleslistbysubscription.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_listbyresourcegroup.go @@ -13,18 +13,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertProcessingRulesListBySubscriptionOperationResponse struct { +type ListByResourceGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]AlertProcessingRule } -type AlertProcessingRulesListBySubscriptionCompleteResult struct { +type ListByResourceGroupCompleteResult struct { Items []AlertProcessingRule } -// AlertProcessingRulesListBySubscription ... -func (c AlertProcessingRulesClient) AlertProcessingRulesListBySubscription(ctx context.Context, id commonids.SubscriptionId) (result AlertProcessingRulesListBySubscriptionOperationResponse, err error) { +// ListByResourceGroup ... +func (c AlertProcessingRulesClient) ListByResourceGroup(ctx context.Context, id commonids.ResourceGroupId) (result ListByResourceGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -61,16 +61,16 @@ func (c AlertProcessingRulesClient) AlertProcessingRulesListBySubscription(ctx c return } -// AlertProcessingRulesListBySubscriptionComplete retrieves all the results into a single object -func (c AlertProcessingRulesClient) AlertProcessingRulesListBySubscriptionComplete(ctx context.Context, id commonids.SubscriptionId) (AlertProcessingRulesListBySubscriptionCompleteResult, error) { - return c.AlertProcessingRulesListBySubscriptionCompleteMatchingPredicate(ctx, id, AlertProcessingRuleOperationPredicate{}) +// ListByResourceGroupComplete retrieves all the results into a single object +func (c AlertProcessingRulesClient) ListByResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId) (ListByResourceGroupCompleteResult, error) { + return c.ListByResourceGroupCompleteMatchingPredicate(ctx, id, AlertProcessingRuleOperationPredicate{}) } -// AlertProcessingRulesListBySubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c AlertProcessingRulesClient) AlertProcessingRulesListBySubscriptionCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate AlertProcessingRuleOperationPredicate) (result AlertProcessingRulesListBySubscriptionCompleteResult, err error) { +// ListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c AlertProcessingRulesClient) ListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate AlertProcessingRuleOperationPredicate) (result ListByResourceGroupCompleteResult, err error) { items := make([]AlertProcessingRule, 0) - resp, err := c.AlertProcessingRulesListBySubscription(ctx, id) + resp, err := c.ListByResourceGroup(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -83,7 +83,7 @@ func (c AlertProcessingRulesClient) AlertProcessingRulesListBySubscriptionComple } } - result = AlertProcessingRulesListBySubscriptionCompleteResult{ + result = ListByResourceGroupCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingruleslistbyresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_listbysubscription.go similarity index 52% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingruleslistbyresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_listbysubscription.go index 188d1ad9d7af0..50e4e2ca03670 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingruleslistbyresourcegroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_listbysubscription.go @@ -13,18 +13,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertProcessingRulesListByResourceGroupOperationResponse struct { +type ListBySubscriptionOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]AlertProcessingRule } -type AlertProcessingRulesListByResourceGroupCompleteResult struct { +type ListBySubscriptionCompleteResult struct { Items []AlertProcessingRule } -// AlertProcessingRulesListByResourceGroup ... -func (c AlertProcessingRulesClient) AlertProcessingRulesListByResourceGroup(ctx context.Context, id commonids.ResourceGroupId) (result AlertProcessingRulesListByResourceGroupOperationResponse, err error) { +// ListBySubscription ... +func (c AlertProcessingRulesClient) ListBySubscription(ctx context.Context, id commonids.SubscriptionId) (result ListBySubscriptionOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -61,16 +61,16 @@ func (c AlertProcessingRulesClient) AlertProcessingRulesListByResourceGroup(ctx return } -// AlertProcessingRulesListByResourceGroupComplete retrieves all the results into a single object -func (c AlertProcessingRulesClient) AlertProcessingRulesListByResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId) (AlertProcessingRulesListByResourceGroupCompleteResult, error) { - return c.AlertProcessingRulesListByResourceGroupCompleteMatchingPredicate(ctx, id, AlertProcessingRuleOperationPredicate{}) +// ListBySubscriptionComplete retrieves all the results into a single object +func (c AlertProcessingRulesClient) ListBySubscriptionComplete(ctx context.Context, id commonids.SubscriptionId) (ListBySubscriptionCompleteResult, error) { + return c.ListBySubscriptionCompleteMatchingPredicate(ctx, id, AlertProcessingRuleOperationPredicate{}) } -// AlertProcessingRulesListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c AlertProcessingRulesClient) AlertProcessingRulesListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate AlertProcessingRuleOperationPredicate) (result AlertProcessingRulesListByResourceGroupCompleteResult, err error) { +// ListBySubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c AlertProcessingRulesClient) ListBySubscriptionCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate AlertProcessingRuleOperationPredicate) (result ListBySubscriptionCompleteResult, err error) { items := make([]AlertProcessingRule, 0) - resp, err := c.AlertProcessingRulesListByResourceGroup(ctx, id) + resp, err := c.ListBySubscription(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -83,7 +83,7 @@ func (c AlertProcessingRulesClient) AlertProcessingRulesListByResourceGroupCompl } } - result = AlertProcessingRulesListByResourceGroupCompleteResult{ + result = ListBySubscriptionCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_update.go similarity index 78% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_update.go index 4498f137bde3b..78030bbdf19ed 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_alertprocessingrulesupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/method_update.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertProcessingRulesUpdateOperationResponse struct { +type UpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AlertProcessingRule } -// AlertProcessingRulesUpdate ... -func (c AlertProcessingRulesClient) AlertProcessingRulesUpdate(ctx context.Context, id ActionRuleId, input PatchObject) (result AlertProcessingRulesUpdateOperationResponse, err error) { +// Update ... +func (c AlertProcessingRulesClient) Update(ctx context.Context, id ActionRuleId, input PatchObject) (result UpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/model_action.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/model_action.go index 1d378e45d6e26..34348e362ace0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/model_action.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/model_action.go @@ -12,7 +12,7 @@ import ( type Action interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawActionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/model_recurrence.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/model_recurrence.go index bcb277fe55bfa..7dee3512f7563 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/model_recurrence.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/alertsmanagement/2021-08-08/alertprocessingrules/model_recurrence.go @@ -12,7 +12,7 @@ import ( type Recurrence interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRecurrenceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/README.md new file mode 100644 index 0000000000000..2e4d4d60eb244 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/README.md @@ -0,0 +1,82 @@ + +## `github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas` Documentation + +The `replicas` SDK allows for interaction with the Azure Resource Manager Service `appconfiguration` (API Version `2023-03-01`). + +This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). + +### Import Path + +```go +import "github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas" +``` + + +### Client Initialization + +```go +client := replicas.NewReplicasClientWithBaseURI("https://management.azure.com") +client.Client.Authorizer = authorizer +``` + + +### Example Usage: `ReplicasClient.Create` + +```go +ctx := context.TODO() +id := replicas.NewReplicaID("12345678-1234-9876-4563-123456789012", "example-resource-group", "configurationStoreValue", "replicaValue") + +payload := replicas.Replica{ + // ... +} + + +if err := client.CreateThenPoll(ctx, id, payload); err != nil { + // handle the error +} +``` + + +### Example Usage: `ReplicasClient.Delete` + +```go +ctx := context.TODO() +id := replicas.NewReplicaID("12345678-1234-9876-4563-123456789012", "example-resource-group", "configurationStoreValue", "replicaValue") + +if err := client.DeleteThenPoll(ctx, id); err != nil { + // handle the error +} +``` + + +### Example Usage: `ReplicasClient.Get` + +```go +ctx := context.TODO() +id := replicas.NewReplicaID("12345678-1234-9876-4563-123456789012", "example-resource-group", "configurationStoreValue", "replicaValue") + +read, err := client.Get(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `ReplicasClient.ListByConfigurationStore` + +```go +ctx := context.TODO() +id := replicas.NewConfigurationStoreID("12345678-1234-9876-4563-123456789012", "example-resource-group", "configurationStoreValue") + +// alternatively `client.ListByConfigurationStore(ctx, id)` can be used to do batched pagination +items, err := client.ListByConfigurationStoreComplete(ctx, id) +if err != nil { + // handle the error +} +for _, item := range items { + // do something +} +``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/client.go new file mode 100644 index 0000000000000..d971742c1bdca --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/client.go @@ -0,0 +1,26 @@ +package replicas + +import ( + "fmt" + + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + sdkEnv "github.com/hashicorp/go-azure-sdk/sdk/environments" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ReplicasClient struct { + Client *resourcemanager.Client +} + +func NewReplicasClientWithBaseURI(sdkApi sdkEnv.Api) (*ReplicasClient, error) { + client, err := resourcemanager.NewResourceManagerClient(sdkApi, "replicas", defaultApiVersion) + if err != nil { + return nil, fmt.Errorf("instantiating ReplicasClient: %+v", err) + } + + return &ReplicasClient{ + Client: client, + }, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/constants.go new file mode 100644 index 0000000000000..2a26986170648 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/constants.go @@ -0,0 +1,60 @@ +package replicas + +import ( + "encoding/json" + "fmt" + "strings" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ReplicaProvisioningState string + +const ( + ReplicaProvisioningStateCanceled ReplicaProvisioningState = "Canceled" + ReplicaProvisioningStateCreating ReplicaProvisioningState = "Creating" + ReplicaProvisioningStateDeleting ReplicaProvisioningState = "Deleting" + ReplicaProvisioningStateFailed ReplicaProvisioningState = "Failed" + ReplicaProvisioningStateSucceeded ReplicaProvisioningState = "Succeeded" +) + +func PossibleValuesForReplicaProvisioningState() []string { + return []string{ + string(ReplicaProvisioningStateCanceled), + string(ReplicaProvisioningStateCreating), + string(ReplicaProvisioningStateDeleting), + string(ReplicaProvisioningStateFailed), + string(ReplicaProvisioningStateSucceeded), + } +} + +func (s *ReplicaProvisioningState) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseReplicaProvisioningState(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseReplicaProvisioningState(input string) (*ReplicaProvisioningState, error) { + vals := map[string]ReplicaProvisioningState{ + "canceled": ReplicaProvisioningStateCanceled, + "creating": ReplicaProvisioningStateCreating, + "deleting": ReplicaProvisioningStateDeleting, + "failed": ReplicaProvisioningStateFailed, + "succeeded": ReplicaProvisioningStateSucceeded, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := ReplicaProvisioningState(input) + return &out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/id_configurationstore.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/id_configurationstore.go new file mode 100644 index 0000000000000..64c7ad6a24404 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/id_configurationstore.go @@ -0,0 +1,127 @@ +package replicas + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = ConfigurationStoreId{} + +// ConfigurationStoreId is a struct representing the Resource ID for a Configuration Store +type ConfigurationStoreId struct { + SubscriptionId string + ResourceGroupName string + ConfigurationStoreName string +} + +// NewConfigurationStoreID returns a new ConfigurationStoreId struct +func NewConfigurationStoreID(subscriptionId string, resourceGroupName string, configurationStoreName string) ConfigurationStoreId { + return ConfigurationStoreId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + ConfigurationStoreName: configurationStoreName, + } +} + +// ParseConfigurationStoreID parses 'input' into a ConfigurationStoreId +func ParseConfigurationStoreID(input string) (*ConfigurationStoreId, error) { + parser := resourceids.NewParserFromResourceIdType(ConfigurationStoreId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ConfigurationStoreId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ConfigurationStoreName, ok = parsed.Parsed["configurationStoreName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "configurationStoreName", *parsed) + } + + return &id, nil +} + +// ParseConfigurationStoreIDInsensitively parses 'input' case-insensitively into a ConfigurationStoreId +// note: this method should only be used for API response data and not user input +func ParseConfigurationStoreIDInsensitively(input string) (*ConfigurationStoreId, error) { + parser := resourceids.NewParserFromResourceIdType(ConfigurationStoreId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ConfigurationStoreId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ConfigurationStoreName, ok = parsed.Parsed["configurationStoreName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "configurationStoreName", *parsed) + } + + return &id, nil +} + +// ValidateConfigurationStoreID checks that 'input' can be parsed as a Configuration Store ID +func ValidateConfigurationStoreID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseConfigurationStoreID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Configuration Store ID +func (id ConfigurationStoreId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.AppConfiguration/configurationStores/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.ConfigurationStoreName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Configuration Store ID +func (id ConfigurationStoreId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftAppConfiguration", "Microsoft.AppConfiguration", "Microsoft.AppConfiguration"), + resourceids.StaticSegment("staticConfigurationStores", "configurationStores", "configurationStores"), + resourceids.UserSpecifiedSegment("configurationStoreName", "configurationStoreValue"), + } +} + +// String returns a human-readable description of this Configuration Store ID +func (id ConfigurationStoreId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Configuration Store Name: %q", id.ConfigurationStoreName), + } + return fmt.Sprintf("Configuration Store (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/id_replica.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/id_replica.go new file mode 100644 index 0000000000000..464e8bae7e91f --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/id_replica.go @@ -0,0 +1,140 @@ +package replicas + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = ReplicaId{} + +// ReplicaId is a struct representing the Resource ID for a Replica +type ReplicaId struct { + SubscriptionId string + ResourceGroupName string + ConfigurationStoreName string + ReplicaName string +} + +// NewReplicaID returns a new ReplicaId struct +func NewReplicaID(subscriptionId string, resourceGroupName string, configurationStoreName string, replicaName string) ReplicaId { + return ReplicaId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + ConfigurationStoreName: configurationStoreName, + ReplicaName: replicaName, + } +} + +// ParseReplicaID parses 'input' into a ReplicaId +func ParseReplicaID(input string) (*ReplicaId, error) { + parser := resourceids.NewParserFromResourceIdType(ReplicaId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ReplicaId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ConfigurationStoreName, ok = parsed.Parsed["configurationStoreName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "configurationStoreName", *parsed) + } + + if id.ReplicaName, ok = parsed.Parsed["replicaName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "replicaName", *parsed) + } + + return &id, nil +} + +// ParseReplicaIDInsensitively parses 'input' case-insensitively into a ReplicaId +// note: this method should only be used for API response data and not user input +func ParseReplicaIDInsensitively(input string) (*ReplicaId, error) { + parser := resourceids.NewParserFromResourceIdType(ReplicaId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ReplicaId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ConfigurationStoreName, ok = parsed.Parsed["configurationStoreName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "configurationStoreName", *parsed) + } + + if id.ReplicaName, ok = parsed.Parsed["replicaName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "replicaName", *parsed) + } + + return &id, nil +} + +// ValidateReplicaID checks that 'input' can be parsed as a Replica ID +func ValidateReplicaID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseReplicaID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Replica ID +func (id ReplicaId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.AppConfiguration/configurationStores/%s/replicas/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.ConfigurationStoreName, id.ReplicaName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Replica ID +func (id ReplicaId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftAppConfiguration", "Microsoft.AppConfiguration", "Microsoft.AppConfiguration"), + resourceids.StaticSegment("staticConfigurationStores", "configurationStores", "configurationStores"), + resourceids.UserSpecifiedSegment("configurationStoreName", "configurationStoreValue"), + resourceids.StaticSegment("staticReplicas", "replicas", "replicas"), + resourceids.UserSpecifiedSegment("replicaName", "replicaValue"), + } +} + +// String returns a human-readable description of this Replica ID +func (id ReplicaId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Configuration Store Name: %q", id.ConfigurationStoreName), + fmt.Sprintf("Replica Name: %q", id.ReplicaName), + } + return fmt.Sprintf("Replica (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_create.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_create.go new file mode 100644 index 0000000000000..58b36592090f0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_create.go @@ -0,0 +1,74 @@ +package replicas + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Create ... +func (c ReplicasClient) Create(ctx context.Context, id ReplicaId, input Replica) (result CreateOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusCreated, + http.StatusOK, + }, + HttpMethod: http.MethodPut, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// CreateThenPoll performs Create then polls until it's completed +func (c ReplicasClient) CreateThenPoll(ctx context.Context, id ReplicaId, input Replica) error { + result, err := c.Create(ctx, id, input) + if err != nil { + return fmt.Errorf("performing Create: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Create: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_delete.go new file mode 100644 index 0000000000000..a245c7836583d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_delete.go @@ -0,0 +1,71 @@ +package replicas + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Delete ... +func (c ReplicasClient) Delete(ctx context.Context, id ReplicaId) (result DeleteOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusNoContent, + http.StatusOK, + }, + HttpMethod: http.MethodDelete, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// DeleteThenPoll performs Delete then polls until it's completed +func (c ReplicasClient) DeleteThenPoll(ctx context.Context, id ReplicaId) error { + result, err := c.Delete(ctx, id) + if err != nil { + return fmt.Errorf("performing Delete: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Delete: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_get.go new file mode 100644 index 0000000000000..45e517f34af78 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_get.go @@ -0,0 +1,51 @@ +package replicas + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *Replica +} + +// Get ... +func (c ReplicasClient) Get(ctx context.Context, id ReplicaId) (result GetOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_listbyconfigurationstore.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_listbyconfigurationstore.go new file mode 100644 index 0000000000000..01a7747d80760 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/method_listbyconfigurationstore.go @@ -0,0 +1,89 @@ +package replicas + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListByConfigurationStoreOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]Replica +} + +type ListByConfigurationStoreCompleteResult struct { + Items []Replica +} + +// ListByConfigurationStore ... +func (c ReplicasClient) ListByConfigurationStore(ctx context.Context, id ConfigurationStoreId) (result ListByConfigurationStoreOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/replicas", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]Replica `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListByConfigurationStoreComplete retrieves all the results into a single object +func (c ReplicasClient) ListByConfigurationStoreComplete(ctx context.Context, id ConfigurationStoreId) (ListByConfigurationStoreCompleteResult, error) { + return c.ListByConfigurationStoreCompleteMatchingPredicate(ctx, id, ReplicaOperationPredicate{}) +} + +// ListByConfigurationStoreCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c ReplicasClient) ListByConfigurationStoreCompleteMatchingPredicate(ctx context.Context, id ConfigurationStoreId, predicate ReplicaOperationPredicate) (result ListByConfigurationStoreCompleteResult, err error) { + items := make([]Replica, 0) + + resp, err := c.ListByConfigurationStore(ctx, id) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListByConfigurationStoreCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/model_replica.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/model_replica.go new file mode 100644 index 0000000000000..95deda8039b9b --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/model_replica.go @@ -0,0 +1,17 @@ +package replicas + +import ( + "github.com/hashicorp/go-azure-helpers/resourcemanager/systemdata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type Replica struct { + Id *string `json:"id,omitempty"` + Location *string `json:"location,omitempty"` + Name *string `json:"name,omitempty"` + Properties *ReplicaProperties `json:"properties,omitempty"` + SystemData *systemdata.SystemData `json:"systemData,omitempty"` + Type *string `json:"type,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/model_replicaproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/model_replicaproperties.go new file mode 100644 index 0000000000000..361a71b2a0d2b --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/model_replicaproperties.go @@ -0,0 +1,9 @@ +package replicas + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ReplicaProperties struct { + Endpoint *string `json:"endpoint,omitempty"` + ProvisioningState *ReplicaProvisioningState `json:"provisioningState,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/predicates.go new file mode 100644 index 0000000000000..436f7639b383c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/predicates.go @@ -0,0 +1,32 @@ +package replicas + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ReplicaOperationPredicate struct { + Id *string + Location *string + Name *string + Type *string +} + +func (p ReplicaOperationPredicate) Matches(input Replica) bool { + + if p.Id != nil && (input.Id == nil || *p.Id != *input.Id) { + return false + } + + if p.Location != nil && (input.Location == nil || *p.Location != *input.Location) { + return false + } + + if p.Name != nil && (input.Name == nil || *p.Name != *input.Name) { + return false + } + + if p.Type != nil && (input.Type == nil || *p.Type != *input.Type) { + return false + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/version.go new file mode 100644 index 0000000000000..198b0d4d213b7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas/version.go @@ -0,0 +1,12 @@ +package replicas + +import "fmt" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +const defaultApiVersion = "2023-03-01" + +func userAgent() string { + return fmt.Sprintf("hashicorp/go-azure-sdk/replicas/%s", defaultApiVersion) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/README.md index 4f3199899510f..094acce765198 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `SoftwareUpdateConfigurationClient.SoftwareUpdateConfigurationsCreate` +### Example Usage: `SoftwareUpdateConfigurationClient.Create` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := softwareupdateconfiguration.SoftwareUpdateConfiguration{ } -read, err := client.SoftwareUpdateConfigurationsCreate(ctx, id, payload, softwareupdateconfiguration.DefaultSoftwareUpdateConfigurationsCreateOperationOptions()) +read, err := client.Create(ctx, id, payload, softwareupdateconfiguration.DefaultCreateOperationOptions()) if err != nil { // handle the error } @@ -41,13 +41,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `SoftwareUpdateConfigurationClient.SoftwareUpdateConfigurationsDelete` +### Example Usage: `SoftwareUpdateConfigurationClient.Delete` ```go ctx := context.TODO() id := softwareupdateconfiguration.NewSoftwareUpdateConfigurationID("12345678-1234-9876-4563-123456789012", "example-resource-group", "automationAccountValue", "softwareUpdateConfigurationValue") -read, err := client.SoftwareUpdateConfigurationsDelete(ctx, id, softwareupdateconfiguration.DefaultSoftwareUpdateConfigurationsDeleteOperationOptions()) +read, err := client.Delete(ctx, id, softwareupdateconfiguration.DefaultDeleteOperationOptions()) if err != nil { // handle the error } @@ -57,13 +57,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `SoftwareUpdateConfigurationClient.SoftwareUpdateConfigurationsGetByName` +### Example Usage: `SoftwareUpdateConfigurationClient.GetByName` ```go ctx := context.TODO() id := softwareupdateconfiguration.NewSoftwareUpdateConfigurationID("12345678-1234-9876-4563-123456789012", "example-resource-group", "automationAccountValue", "softwareUpdateConfigurationValue") -read, err := client.SoftwareUpdateConfigurationsGetByName(ctx, id, softwareupdateconfiguration.DefaultSoftwareUpdateConfigurationsGetByNameOperationOptions()) +read, err := client.GetByName(ctx, id, softwareupdateconfiguration.DefaultGetByNameOperationOptions()) if err != nil { // handle the error } @@ -73,13 +73,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `SoftwareUpdateConfigurationClient.SoftwareUpdateConfigurationsList` +### Example Usage: `SoftwareUpdateConfigurationClient.List` ```go ctx := context.TODO() id := softwareupdateconfiguration.NewAutomationAccountID("12345678-1234-9876-4563-123456789012", "example-resource-group", "automationAccountValue") -read, err := client.SoftwareUpdateConfigurationsList(ctx, id, softwareupdateconfiguration.DefaultSoftwareUpdateConfigurationsListOperationOptions()) +read, err := client.List(ctx, id, softwareupdateconfiguration.DefaultListOperationOptions()) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_create_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_create_autorest.go new file mode 100644 index 0000000000000..246401b9d736b --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_create_autorest.go @@ -0,0 +1,98 @@ +package softwareupdateconfiguration + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateOperationResponse struct { + HttpResponse *http.Response + Model *SoftwareUpdateConfiguration +} + +type CreateOperationOptions struct { + ClientRequestId *string +} + +func DefaultCreateOperationOptions() CreateOperationOptions { + return CreateOperationOptions{} +} + +func (o CreateOperationOptions) toHeaders() map[string]interface{} { + out := make(map[string]interface{}) + + if o.ClientRequestId != nil { + out["clientRequestId"] = *o.ClientRequestId + } + + return out +} + +func (o CreateOperationOptions) toQueryString() map[string]interface{} { + out := make(map[string]interface{}) + + return out +} + +// Create ... +func (c SoftwareUpdateConfigurationClient) Create(ctx context.Context, id SoftwareUpdateConfigurationId, input SoftwareUpdateConfiguration, options CreateOperationOptions) (result CreateOperationResponse, err error) { + req, err := c.preparerForCreate(ctx, id, input, options) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "Create", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "Create", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForCreate(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "Create", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForCreate prepares the Create request. +func (c SoftwareUpdateConfigurationClient) preparerForCreate(ctx context.Context, id SoftwareUpdateConfigurationId, input SoftwareUpdateConfiguration, options CreateOperationOptions) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + for k, v := range options.toQueryString() { + queryParameters[k] = autorest.Encode("query", v) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(c.baseUri), + autorest.WithHeaders(options.toHeaders()), + autorest.WithPath(id.ID()), + autorest.WithJSON(input), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForCreate handles the response to the Create request. The method always +// closes the http.Response Body. +func (c SoftwareUpdateConfigurationClient) responderForCreate(resp *http.Response) (result CreateOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusCreated, http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Model), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_delete_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_delete_autorest.go new file mode 100644 index 0000000000000..28d07262284da --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_delete_autorest.go @@ -0,0 +1,95 @@ +package softwareupdateconfiguration + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteOperationResponse struct { + HttpResponse *http.Response +} + +type DeleteOperationOptions struct { + ClientRequestId *string +} + +func DefaultDeleteOperationOptions() DeleteOperationOptions { + return DeleteOperationOptions{} +} + +func (o DeleteOperationOptions) toHeaders() map[string]interface{} { + out := make(map[string]interface{}) + + if o.ClientRequestId != nil { + out["clientRequestId"] = *o.ClientRequestId + } + + return out +} + +func (o DeleteOperationOptions) toQueryString() map[string]interface{} { + out := make(map[string]interface{}) + + return out +} + +// Delete ... +func (c SoftwareUpdateConfigurationClient) Delete(ctx context.Context, id SoftwareUpdateConfigurationId, options DeleteOperationOptions) (result DeleteOperationResponse, err error) { + req, err := c.preparerForDelete(ctx, id, options) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "Delete", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "Delete", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForDelete(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "Delete", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForDelete prepares the Delete request. +func (c SoftwareUpdateConfigurationClient) preparerForDelete(ctx context.Context, id SoftwareUpdateConfigurationId, options DeleteOperationOptions) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + for k, v := range options.toQueryString() { + queryParameters[k] = autorest.Encode("query", v) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsDelete(), + autorest.WithBaseURL(c.baseUri), + autorest.WithHeaders(options.toHeaders()), + autorest.WithPath(id.ID()), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForDelete handles the response to the Delete request. The method always +// closes the http.Response Body. +func (c SoftwareUpdateConfigurationClient) responderForDelete(resp *http.Response) (result DeleteOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusNoContent, http.StatusOK), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_getbyname_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_getbyname_autorest.go new file mode 100644 index 0000000000000..f032b3bcfc81c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_getbyname_autorest.go @@ -0,0 +1,97 @@ +package softwareupdateconfiguration + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetByNameOperationResponse struct { + HttpResponse *http.Response + Model *SoftwareUpdateConfiguration +} + +type GetByNameOperationOptions struct { + ClientRequestId *string +} + +func DefaultGetByNameOperationOptions() GetByNameOperationOptions { + return GetByNameOperationOptions{} +} + +func (o GetByNameOperationOptions) toHeaders() map[string]interface{} { + out := make(map[string]interface{}) + + if o.ClientRequestId != nil { + out["clientRequestId"] = *o.ClientRequestId + } + + return out +} + +func (o GetByNameOperationOptions) toQueryString() map[string]interface{} { + out := make(map[string]interface{}) + + return out +} + +// GetByName ... +func (c SoftwareUpdateConfigurationClient) GetByName(ctx context.Context, id SoftwareUpdateConfigurationId, options GetByNameOperationOptions) (result GetByNameOperationResponse, err error) { + req, err := c.preparerForGetByName(ctx, id, options) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "GetByName", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "GetByName", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForGetByName(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "GetByName", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForGetByName prepares the GetByName request. +func (c SoftwareUpdateConfigurationClient) preparerForGetByName(ctx context.Context, id SoftwareUpdateConfigurationId, options GetByNameOperationOptions) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + for k, v := range options.toQueryString() { + queryParameters[k] = autorest.Encode("query", v) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithHeaders(options.toHeaders()), + autorest.WithPath(id.ID()), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForGetByName handles the response to the GetByName request. The method always +// closes the http.Response Body. +func (c SoftwareUpdateConfigurationClient) responderForGetByName(resp *http.Response) (result GetByNameOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Model), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_list_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_list_autorest.go new file mode 100644 index 0000000000000..cb02e0a0514da --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_list_autorest.go @@ -0,0 +1,103 @@ +package softwareupdateconfiguration + +import ( + "context" + "fmt" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListOperationResponse struct { + HttpResponse *http.Response + Model *SoftwareUpdateConfigurationListResult +} + +type ListOperationOptions struct { + ClientRequestId *string + Filter *string +} + +func DefaultListOperationOptions() ListOperationOptions { + return ListOperationOptions{} +} + +func (o ListOperationOptions) toHeaders() map[string]interface{} { + out := make(map[string]interface{}) + + if o.ClientRequestId != nil { + out["clientRequestId"] = *o.ClientRequestId + } + + return out +} + +func (o ListOperationOptions) toQueryString() map[string]interface{} { + out := make(map[string]interface{}) + + if o.Filter != nil { + out["$filter"] = *o.Filter + } + + return out +} + +// List ... +func (c SoftwareUpdateConfigurationClient) List(ctx context.Context, id AutomationAccountId, options ListOperationOptions) (result ListOperationResponse, err error) { + req, err := c.preparerForList(ctx, id, options) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "List", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "List", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForList(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "List", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForList prepares the List request. +func (c SoftwareUpdateConfigurationClient) preparerForList(ctx context.Context, id AutomationAccountId, options ListOperationOptions) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + for k, v := range options.toQueryString() { + queryParameters[k] = autorest.Encode("query", v) + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithHeaders(options.toHeaders()), + autorest.WithPath(fmt.Sprintf("%s/softwareUpdateConfigurations", id.ID())), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForList handles the response to the List request. The method always +// closes the http.Response Body. +func (c SoftwareUpdateConfigurationClient) responderForList(resp *http.Response) (result ListOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Model), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationscreate_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationscreate_autorest.go deleted file mode 100644 index 7f530ab7f92b2..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationscreate_autorest.go +++ /dev/null @@ -1,98 +0,0 @@ -package softwareupdateconfiguration - -import ( - "context" - "net/http" - - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type SoftwareUpdateConfigurationsCreateOperationResponse struct { - HttpResponse *http.Response - Model *SoftwareUpdateConfiguration -} - -type SoftwareUpdateConfigurationsCreateOperationOptions struct { - ClientRequestId *string -} - -func DefaultSoftwareUpdateConfigurationsCreateOperationOptions() SoftwareUpdateConfigurationsCreateOperationOptions { - return SoftwareUpdateConfigurationsCreateOperationOptions{} -} - -func (o SoftwareUpdateConfigurationsCreateOperationOptions) toHeaders() map[string]interface{} { - out := make(map[string]interface{}) - - if o.ClientRequestId != nil { - out["clientRequestId"] = *o.ClientRequestId - } - - return out -} - -func (o SoftwareUpdateConfigurationsCreateOperationOptions) toQueryString() map[string]interface{} { - out := make(map[string]interface{}) - - return out -} - -// SoftwareUpdateConfigurationsCreate ... -func (c SoftwareUpdateConfigurationClient) SoftwareUpdateConfigurationsCreate(ctx context.Context, id SoftwareUpdateConfigurationId, input SoftwareUpdateConfiguration, options SoftwareUpdateConfigurationsCreateOperationOptions) (result SoftwareUpdateConfigurationsCreateOperationResponse, err error) { - req, err := c.preparerForSoftwareUpdateConfigurationsCreate(ctx, id, input, options) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsCreate", nil, "Failure preparing request") - return - } - - result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsCreate", result.HttpResponse, "Failure sending request") - return - } - - result, err = c.responderForSoftwareUpdateConfigurationsCreate(result.HttpResponse) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsCreate", result.HttpResponse, "Failure responding to request") - return - } - - return -} - -// preparerForSoftwareUpdateConfigurationsCreate prepares the SoftwareUpdateConfigurationsCreate request. -func (c SoftwareUpdateConfigurationClient) preparerForSoftwareUpdateConfigurationsCreate(ctx context.Context, id SoftwareUpdateConfigurationId, input SoftwareUpdateConfiguration, options SoftwareUpdateConfigurationsCreateOperationOptions) (*http.Request, error) { - queryParameters := map[string]interface{}{ - "api-version": defaultApiVersion, - } - - for k, v := range options.toQueryString() { - queryParameters[k] = autorest.Encode("query", v) - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(c.baseUri), - autorest.WithHeaders(options.toHeaders()), - autorest.WithPath(id.ID()), - autorest.WithJSON(input), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// responderForSoftwareUpdateConfigurationsCreate handles the response to the SoftwareUpdateConfigurationsCreate request. The method always -// closes the http.Response Body. -func (c SoftwareUpdateConfigurationClient) responderForSoftwareUpdateConfigurationsCreate(resp *http.Response) (result SoftwareUpdateConfigurationsCreateOperationResponse, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusCreated, http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Model), - autorest.ByClosing()) - result.HttpResponse = resp - - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationsdelete_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationsdelete_autorest.go deleted file mode 100644 index 9e29d5b7dc555..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationsdelete_autorest.go +++ /dev/null @@ -1,95 +0,0 @@ -package softwareupdateconfiguration - -import ( - "context" - "net/http" - - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type SoftwareUpdateConfigurationsDeleteOperationResponse struct { - HttpResponse *http.Response -} - -type SoftwareUpdateConfigurationsDeleteOperationOptions struct { - ClientRequestId *string -} - -func DefaultSoftwareUpdateConfigurationsDeleteOperationOptions() SoftwareUpdateConfigurationsDeleteOperationOptions { - return SoftwareUpdateConfigurationsDeleteOperationOptions{} -} - -func (o SoftwareUpdateConfigurationsDeleteOperationOptions) toHeaders() map[string]interface{} { - out := make(map[string]interface{}) - - if o.ClientRequestId != nil { - out["clientRequestId"] = *o.ClientRequestId - } - - return out -} - -func (o SoftwareUpdateConfigurationsDeleteOperationOptions) toQueryString() map[string]interface{} { - out := make(map[string]interface{}) - - return out -} - -// SoftwareUpdateConfigurationsDelete ... -func (c SoftwareUpdateConfigurationClient) SoftwareUpdateConfigurationsDelete(ctx context.Context, id SoftwareUpdateConfigurationId, options SoftwareUpdateConfigurationsDeleteOperationOptions) (result SoftwareUpdateConfigurationsDeleteOperationResponse, err error) { - req, err := c.preparerForSoftwareUpdateConfigurationsDelete(ctx, id, options) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsDelete", nil, "Failure preparing request") - return - } - - result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsDelete", result.HttpResponse, "Failure sending request") - return - } - - result, err = c.responderForSoftwareUpdateConfigurationsDelete(result.HttpResponse) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsDelete", result.HttpResponse, "Failure responding to request") - return - } - - return -} - -// preparerForSoftwareUpdateConfigurationsDelete prepares the SoftwareUpdateConfigurationsDelete request. -func (c SoftwareUpdateConfigurationClient) preparerForSoftwareUpdateConfigurationsDelete(ctx context.Context, id SoftwareUpdateConfigurationId, options SoftwareUpdateConfigurationsDeleteOperationOptions) (*http.Request, error) { - queryParameters := map[string]interface{}{ - "api-version": defaultApiVersion, - } - - for k, v := range options.toQueryString() { - queryParameters[k] = autorest.Encode("query", v) - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsDelete(), - autorest.WithBaseURL(c.baseUri), - autorest.WithHeaders(options.toHeaders()), - autorest.WithPath(id.ID()), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// responderForSoftwareUpdateConfigurationsDelete handles the response to the SoftwareUpdateConfigurationsDelete request. The method always -// closes the http.Response Body. -func (c SoftwareUpdateConfigurationClient) responderForSoftwareUpdateConfigurationsDelete(resp *http.Response) (result SoftwareUpdateConfigurationsDeleteOperationResponse, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusNoContent, http.StatusOK), - autorest.ByClosing()) - result.HttpResponse = resp - - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationsgetbyname_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationsgetbyname_autorest.go deleted file mode 100644 index bde68b133b185..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationsgetbyname_autorest.go +++ /dev/null @@ -1,97 +0,0 @@ -package softwareupdateconfiguration - -import ( - "context" - "net/http" - - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type SoftwareUpdateConfigurationsGetByNameOperationResponse struct { - HttpResponse *http.Response - Model *SoftwareUpdateConfiguration -} - -type SoftwareUpdateConfigurationsGetByNameOperationOptions struct { - ClientRequestId *string -} - -func DefaultSoftwareUpdateConfigurationsGetByNameOperationOptions() SoftwareUpdateConfigurationsGetByNameOperationOptions { - return SoftwareUpdateConfigurationsGetByNameOperationOptions{} -} - -func (o SoftwareUpdateConfigurationsGetByNameOperationOptions) toHeaders() map[string]interface{} { - out := make(map[string]interface{}) - - if o.ClientRequestId != nil { - out["clientRequestId"] = *o.ClientRequestId - } - - return out -} - -func (o SoftwareUpdateConfigurationsGetByNameOperationOptions) toQueryString() map[string]interface{} { - out := make(map[string]interface{}) - - return out -} - -// SoftwareUpdateConfigurationsGetByName ... -func (c SoftwareUpdateConfigurationClient) SoftwareUpdateConfigurationsGetByName(ctx context.Context, id SoftwareUpdateConfigurationId, options SoftwareUpdateConfigurationsGetByNameOperationOptions) (result SoftwareUpdateConfigurationsGetByNameOperationResponse, err error) { - req, err := c.preparerForSoftwareUpdateConfigurationsGetByName(ctx, id, options) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsGetByName", nil, "Failure preparing request") - return - } - - result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsGetByName", result.HttpResponse, "Failure sending request") - return - } - - result, err = c.responderForSoftwareUpdateConfigurationsGetByName(result.HttpResponse) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsGetByName", result.HttpResponse, "Failure responding to request") - return - } - - return -} - -// preparerForSoftwareUpdateConfigurationsGetByName prepares the SoftwareUpdateConfigurationsGetByName request. -func (c SoftwareUpdateConfigurationClient) preparerForSoftwareUpdateConfigurationsGetByName(ctx context.Context, id SoftwareUpdateConfigurationId, options SoftwareUpdateConfigurationsGetByNameOperationOptions) (*http.Request, error) { - queryParameters := map[string]interface{}{ - "api-version": defaultApiVersion, - } - - for k, v := range options.toQueryString() { - queryParameters[k] = autorest.Encode("query", v) - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsGet(), - autorest.WithBaseURL(c.baseUri), - autorest.WithHeaders(options.toHeaders()), - autorest.WithPath(id.ID()), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// responderForSoftwareUpdateConfigurationsGetByName handles the response to the SoftwareUpdateConfigurationsGetByName request. The method always -// closes the http.Response Body. -func (c SoftwareUpdateConfigurationClient) responderForSoftwareUpdateConfigurationsGetByName(resp *http.Response) (result SoftwareUpdateConfigurationsGetByNameOperationResponse, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Model), - autorest.ByClosing()) - result.HttpResponse = resp - - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationslist_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationslist_autorest.go deleted file mode 100644 index b8c1403c03bea..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2019-06-01/softwareupdateconfiguration/method_softwareupdateconfigurationslist_autorest.go +++ /dev/null @@ -1,103 +0,0 @@ -package softwareupdateconfiguration - -import ( - "context" - "fmt" - "net/http" - - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type SoftwareUpdateConfigurationsListOperationResponse struct { - HttpResponse *http.Response - Model *SoftwareUpdateConfigurationListResult -} - -type SoftwareUpdateConfigurationsListOperationOptions struct { - ClientRequestId *string - Filter *string -} - -func DefaultSoftwareUpdateConfigurationsListOperationOptions() SoftwareUpdateConfigurationsListOperationOptions { - return SoftwareUpdateConfigurationsListOperationOptions{} -} - -func (o SoftwareUpdateConfigurationsListOperationOptions) toHeaders() map[string]interface{} { - out := make(map[string]interface{}) - - if o.ClientRequestId != nil { - out["clientRequestId"] = *o.ClientRequestId - } - - return out -} - -func (o SoftwareUpdateConfigurationsListOperationOptions) toQueryString() map[string]interface{} { - out := make(map[string]interface{}) - - if o.Filter != nil { - out["$filter"] = *o.Filter - } - - return out -} - -// SoftwareUpdateConfigurationsList ... -func (c SoftwareUpdateConfigurationClient) SoftwareUpdateConfigurationsList(ctx context.Context, id AutomationAccountId, options SoftwareUpdateConfigurationsListOperationOptions) (result SoftwareUpdateConfigurationsListOperationResponse, err error) { - req, err := c.preparerForSoftwareUpdateConfigurationsList(ctx, id, options) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsList", nil, "Failure preparing request") - return - } - - result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsList", result.HttpResponse, "Failure sending request") - return - } - - result, err = c.responderForSoftwareUpdateConfigurationsList(result.HttpResponse) - if err != nil { - err = autorest.NewErrorWithError(err, "softwareupdateconfiguration.SoftwareUpdateConfigurationClient", "SoftwareUpdateConfigurationsList", result.HttpResponse, "Failure responding to request") - return - } - - return -} - -// preparerForSoftwareUpdateConfigurationsList prepares the SoftwareUpdateConfigurationsList request. -func (c SoftwareUpdateConfigurationClient) preparerForSoftwareUpdateConfigurationsList(ctx context.Context, id AutomationAccountId, options SoftwareUpdateConfigurationsListOperationOptions) (*http.Request, error) { - queryParameters := map[string]interface{}{ - "api-version": defaultApiVersion, - } - - for k, v := range options.toQueryString() { - queryParameters[k] = autorest.Encode("query", v) - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsGet(), - autorest.WithBaseURL(c.baseUri), - autorest.WithHeaders(options.toHeaders()), - autorest.WithPath(fmt.Sprintf("%s/softwareUpdateConfigurations", id.ID())), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// responderForSoftwareUpdateConfigurationsList handles the response to the SoftwareUpdateConfigurationsList request. The method always -// closes the http.Response Body. -func (c SoftwareUpdateConfigurationClient) responderForSoftwareUpdateConfigurationsList(resp *http.Response) (result SoftwareUpdateConfigurationsListOperationResponse, err error) { - err = autorest.Respond( - resp, - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result.Model), - autorest.ByClosing()) - result.HttpResponse = resp - - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/README.md index 1808ced1d6dba..c9ed1d5314bb4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/README.md @@ -20,13 +20,13 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `SoftwareUpdateConfigurationMachineRunClient.SoftwareUpdateConfigurationMachineRunsGetById` +### Example Usage: `SoftwareUpdateConfigurationMachineRunClient.GetById` ```go ctx := context.TODO() id := softwareupdateconfigurationmachinerun.NewSoftwareUpdateConfigurationMachineRunID("12345678-1234-9876-4563-123456789012", "example-resource-group", "automationAccountValue", "softwareUpdateConfigurationMachineRunIdValue") -read, err := client.SoftwareUpdateConfigurationMachineRunsGetById(ctx, id, softwareupdateconfigurationmachinerun.DefaultSoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions()) +read, err := client.GetById(ctx, id, softwareupdateconfigurationmachinerun.DefaultGetByIdOperationOptions()) if err != nil { // handle the error } @@ -36,13 +36,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `SoftwareUpdateConfigurationMachineRunClient.SoftwareUpdateConfigurationMachineRunsList` +### Example Usage: `SoftwareUpdateConfigurationMachineRunClient.List` ```go ctx := context.TODO() id := softwareupdateconfigurationmachinerun.NewAutomationAccountID("12345678-1234-9876-4563-123456789012", "example-resource-group", "automationAccountValue") -read, err := client.SoftwareUpdateConfigurationMachineRunsList(ctx, id, softwareupdateconfigurationmachinerun.DefaultSoftwareUpdateConfigurationMachineRunsListOperationOptions()) +read, err := client.List(ctx, id, softwareupdateconfigurationmachinerun.DefaultListOperationOptions()) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_softwareupdateconfigurationmachinerunsgetbyid.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_getbyid.go similarity index 54% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_softwareupdateconfigurationmachinerunsgetbyid.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_getbyid.go index d60def7349cbc..491097fdd085b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_softwareupdateconfigurationmachinerunsgetbyid.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_getbyid.go @@ -12,21 +12,21 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type SoftwareUpdateConfigurationMachineRunsGetByIdOperationResponse struct { +type GetByIdOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *SoftwareUpdateConfigurationMachineRun } -type SoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions struct { +type GetByIdOperationOptions struct { ClientRequestId *string } -func DefaultSoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions() SoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions { - return SoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions{} +func DefaultGetByIdOperationOptions() GetByIdOperationOptions { + return GetByIdOperationOptions{} } -func (o SoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions) ToHeaders() *client.Headers { +func (o GetByIdOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} if o.ClientRequestId != nil { out.Append("clientRequestId", fmt.Sprintf("%v", *o.ClientRequestId)) @@ -34,19 +34,19 @@ func (o SoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions) ToHeaders return &out } -func (o SoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions) ToOData() *odata.Query { +func (o GetByIdOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o SoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions) ToQuery() *client.QueryParams { +func (o GetByIdOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} return &out } -// SoftwareUpdateConfigurationMachineRunsGetById ... -func (c SoftwareUpdateConfigurationMachineRunClient) SoftwareUpdateConfigurationMachineRunsGetById(ctx context.Context, id SoftwareUpdateConfigurationMachineRunId, options SoftwareUpdateConfigurationMachineRunsGetByIdOperationOptions) (result SoftwareUpdateConfigurationMachineRunsGetByIdOperationResponse, err error) { +// GetById ... +func (c SoftwareUpdateConfigurationMachineRunClient) GetById(ctx context.Context, id SoftwareUpdateConfigurationMachineRunId, options GetByIdOperationOptions) (result GetByIdOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_softwareupdateconfigurationmachinerunslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_list.go similarity index 62% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_softwareupdateconfigurationmachinerunslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_list.go index 83cdac6b458d1..9d8aede660fe1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_softwareupdateconfigurationmachinerunslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationmachinerun/method_list.go @@ -12,24 +12,24 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type SoftwareUpdateConfigurationMachineRunsListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *SoftwareUpdateConfigurationMachineRunListResult } -type SoftwareUpdateConfigurationMachineRunsListOperationOptions struct { +type ListOperationOptions struct { ClientRequestId *string Filter *string Skip *string Top *string } -func DefaultSoftwareUpdateConfigurationMachineRunsListOperationOptions() SoftwareUpdateConfigurationMachineRunsListOperationOptions { - return SoftwareUpdateConfigurationMachineRunsListOperationOptions{} +func DefaultListOperationOptions() ListOperationOptions { + return ListOperationOptions{} } -func (o SoftwareUpdateConfigurationMachineRunsListOperationOptions) ToHeaders() *client.Headers { +func (o ListOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} if o.ClientRequestId != nil { out.Append("clientRequestId", fmt.Sprintf("%v", *o.ClientRequestId)) @@ -37,12 +37,12 @@ func (o SoftwareUpdateConfigurationMachineRunsListOperationOptions) ToHeaders() return &out } -func (o SoftwareUpdateConfigurationMachineRunsListOperationOptions) ToOData() *odata.Query { +func (o ListOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o SoftwareUpdateConfigurationMachineRunsListOperationOptions) ToQuery() *client.QueryParams { +func (o ListOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Filter != nil { out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) @@ -56,8 +56,8 @@ func (o SoftwareUpdateConfigurationMachineRunsListOperationOptions) ToQuery() *c return &out } -// SoftwareUpdateConfigurationMachineRunsList ... -func (c SoftwareUpdateConfigurationMachineRunClient) SoftwareUpdateConfigurationMachineRunsList(ctx context.Context, id AutomationAccountId, options SoftwareUpdateConfigurationMachineRunsListOperationOptions) (result SoftwareUpdateConfigurationMachineRunsListOperationResponse, err error) { +// List ... +func (c SoftwareUpdateConfigurationMachineRunClient) List(ctx context.Context, id AutomationAccountId, options ListOperationOptions) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/README.md index ebca664570a64..39d25d4b60752 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/README.md @@ -20,13 +20,13 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `SoftwareUpdateConfigurationRunClient.SoftwareUpdateConfigurationRunsGetById` +### Example Usage: `SoftwareUpdateConfigurationRunClient.GetById` ```go ctx := context.TODO() id := softwareupdateconfigurationrun.NewSoftwareUpdateConfigurationRunID("12345678-1234-9876-4563-123456789012", "example-resource-group", "automationAccountValue", "softwareUpdateConfigurationRunIdValue") -read, err := client.SoftwareUpdateConfigurationRunsGetById(ctx, id, softwareupdateconfigurationrun.DefaultSoftwareUpdateConfigurationRunsGetByIdOperationOptions()) +read, err := client.GetById(ctx, id, softwareupdateconfigurationrun.DefaultGetByIdOperationOptions()) if err != nil { // handle the error } @@ -36,13 +36,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `SoftwareUpdateConfigurationRunClient.SoftwareUpdateConfigurationRunsList` +### Example Usage: `SoftwareUpdateConfigurationRunClient.List` ```go ctx := context.TODO() id := softwareupdateconfigurationrun.NewAutomationAccountID("12345678-1234-9876-4563-123456789012", "example-resource-group", "automationAccountValue") -read, err := client.SoftwareUpdateConfigurationRunsList(ctx, id, softwareupdateconfigurationrun.DefaultSoftwareUpdateConfigurationRunsListOperationOptions()) +read, err := client.List(ctx, id, softwareupdateconfigurationrun.DefaultListOperationOptions()) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_softwareupdateconfigurationrunsgetbyid.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_getbyid.go similarity index 57% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_softwareupdateconfigurationrunsgetbyid.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_getbyid.go index 6a354dbe27972..b71161c814840 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_softwareupdateconfigurationrunsgetbyid.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_getbyid.go @@ -12,21 +12,21 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type SoftwareUpdateConfigurationRunsGetByIdOperationResponse struct { +type GetByIdOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *SoftwareUpdateConfigurationRun } -type SoftwareUpdateConfigurationRunsGetByIdOperationOptions struct { +type GetByIdOperationOptions struct { ClientRequestId *string } -func DefaultSoftwareUpdateConfigurationRunsGetByIdOperationOptions() SoftwareUpdateConfigurationRunsGetByIdOperationOptions { - return SoftwareUpdateConfigurationRunsGetByIdOperationOptions{} +func DefaultGetByIdOperationOptions() GetByIdOperationOptions { + return GetByIdOperationOptions{} } -func (o SoftwareUpdateConfigurationRunsGetByIdOperationOptions) ToHeaders() *client.Headers { +func (o GetByIdOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} if o.ClientRequestId != nil { out.Append("clientRequestId", fmt.Sprintf("%v", *o.ClientRequestId)) @@ -34,19 +34,19 @@ func (o SoftwareUpdateConfigurationRunsGetByIdOperationOptions) ToHeaders() *cli return &out } -func (o SoftwareUpdateConfigurationRunsGetByIdOperationOptions) ToOData() *odata.Query { +func (o GetByIdOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o SoftwareUpdateConfigurationRunsGetByIdOperationOptions) ToQuery() *client.QueryParams { +func (o GetByIdOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} return &out } -// SoftwareUpdateConfigurationRunsGetById ... -func (c SoftwareUpdateConfigurationRunClient) SoftwareUpdateConfigurationRunsGetById(ctx context.Context, id SoftwareUpdateConfigurationRunId, options SoftwareUpdateConfigurationRunsGetByIdOperationOptions) (result SoftwareUpdateConfigurationRunsGetByIdOperationResponse, err error) { +// GetById ... +func (c SoftwareUpdateConfigurationRunClient) GetById(ctx context.Context, id SoftwareUpdateConfigurationRunId, options GetByIdOperationOptions) (result GetByIdOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_softwareupdateconfigurationrunslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_list.go similarity index 64% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_softwareupdateconfigurationrunslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_list.go index 07e03e04bb210..ec87c1b659fed 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_softwareupdateconfigurationrunslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/automation/2022-08-08/softwareupdateconfigurationrun/method_list.go @@ -12,24 +12,24 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type SoftwareUpdateConfigurationRunsListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *SoftwareUpdateConfigurationRunListResult } -type SoftwareUpdateConfigurationRunsListOperationOptions struct { +type ListOperationOptions struct { ClientRequestId *string Filter *string Skip *string Top *string } -func DefaultSoftwareUpdateConfigurationRunsListOperationOptions() SoftwareUpdateConfigurationRunsListOperationOptions { - return SoftwareUpdateConfigurationRunsListOperationOptions{} +func DefaultListOperationOptions() ListOperationOptions { + return ListOperationOptions{} } -func (o SoftwareUpdateConfigurationRunsListOperationOptions) ToHeaders() *client.Headers { +func (o ListOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} if o.ClientRequestId != nil { out.Append("clientRequestId", fmt.Sprintf("%v", *o.ClientRequestId)) @@ -37,12 +37,12 @@ func (o SoftwareUpdateConfigurationRunsListOperationOptions) ToHeaders() *client return &out } -func (o SoftwareUpdateConfigurationRunsListOperationOptions) ToOData() *odata.Query { +func (o ListOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o SoftwareUpdateConfigurationRunsListOperationOptions) ToQuery() *client.QueryParams { +func (o ListOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Filter != nil { out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) @@ -56,8 +56,8 @@ func (o SoftwareUpdateConfigurationRunsListOperationOptions) ToQuery() *client.Q return &out } -// SoftwareUpdateConfigurationRunsList ... -func (c SoftwareUpdateConfigurationRunClient) SoftwareUpdateConfigurationRunsList(ctx context.Context, id AutomationAccountId, options SoftwareUpdateConfigurationRunsListOperationOptions) (result SoftwareUpdateConfigurationRunsListOperationResponse, err error) { +// List ... +func (c SoftwareUpdateConfigurationRunClient) List(ctx context.Context, id AutomationAccountId, options ListOperationOptions) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/README.md index 87859931e078f..983c2b2cb53e7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `ExtensionsClient.ExtensionsCreate` +### Example Usage: `ExtensionsClient.Create` ```go ctx := context.TODO() @@ -31,31 +31,31 @@ payload := extensions.Extension{ } -if err := client.ExtensionsCreateThenPoll(ctx, id, payload); err != nil { +if err := client.CreateThenPoll(ctx, id, payload); err != nil { // handle the error } ``` -### Example Usage: `ExtensionsClient.ExtensionsDelete` +### Example Usage: `ExtensionsClient.Delete` ```go ctx := context.TODO() id := extensions.NewExtensionID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "arcSettingValue", "extensionValue") -if err := client.ExtensionsDeleteThenPoll(ctx, id); err != nil { +if err := client.DeleteThenPoll(ctx, id); err != nil { // handle the error } ``` -### Example Usage: `ExtensionsClient.ExtensionsGet` +### Example Usage: `ExtensionsClient.Get` ```go ctx := context.TODO() id := extensions.NewExtensionID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "arcSettingValue", "extensionValue") -read, err := client.ExtensionsGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -65,14 +65,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ExtensionsClient.ExtensionsListByArcSetting` +### Example Usage: `ExtensionsClient.ListByArcSetting` ```go ctx := context.TODO() id := extensions.NewArcSettingID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "arcSettingValue") -// alternatively `client.ExtensionsListByArcSetting(ctx, id)` can be used to do batched pagination -items, err := client.ExtensionsListByArcSettingComplete(ctx, id) +// alternatively `client.ListByArcSetting(ctx, id)` can be used to do batched pagination +items, err := client.ListByArcSettingComplete(ctx, id) if err != nil { // handle the error } @@ -82,7 +82,7 @@ for _, item := range items { ``` -### Example Usage: `ExtensionsClient.ExtensionsUpdate` +### Example Usage: `ExtensionsClient.Update` ```go ctx := context.TODO() @@ -93,13 +93,13 @@ payload := extensions.Extension{ } -if err := client.ExtensionsUpdateThenPoll(ctx, id, payload); err != nil { +if err := client.UpdateThenPoll(ctx, id, payload); err != nil { // handle the error } ``` -### Example Usage: `ExtensionsClient.ExtensionsUpgrade` +### Example Usage: `ExtensionsClient.Upgrade` ```go ctx := context.TODO() @@ -110,7 +110,7 @@ payload := extensions.ExtensionUpgradeParameters{ } -if err := client.ExtensionsUpgradeThenPoll(ctx, id, payload); err != nil { +if err := client.UpgradeThenPoll(ctx, id, payload); err != nil { // handle the error } ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionscreate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_create.go similarity index 67% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionscreate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_create.go index 3a5d07f853b5d..1a3e8d46429dd 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionscreate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_create.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ExtensionsCreateOperationResponse struct { +type CreateOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// ExtensionsCreate ... -func (c ExtensionsClient) ExtensionsCreate(ctx context.Context, id ExtensionId, input Extension) (result ExtensionsCreateOperationResponse, err error) { +// Create ... +func (c ExtensionsClient) Create(ctx context.Context, id ExtensionId, input Extension) (result CreateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -59,15 +59,15 @@ func (c ExtensionsClient) ExtensionsCreate(ctx context.Context, id ExtensionId, return } -// ExtensionsCreateThenPoll performs ExtensionsCreate then polls until it's completed -func (c ExtensionsClient) ExtensionsCreateThenPoll(ctx context.Context, id ExtensionId, input Extension) error { - result, err := c.ExtensionsCreate(ctx, id, input) +// CreateThenPoll performs Create then polls until it's completed +func (c ExtensionsClient) CreateThenPoll(ctx context.Context, id ExtensionId, input Extension) error { + result, err := c.Create(ctx, id, input) if err != nil { - return fmt.Errorf("performing ExtensionsCreate: %+v", err) + return fmt.Errorf("performing Create: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after ExtensionsCreate: %+v", err) + return fmt.Errorf("polling after Create: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_delete.go similarity index 68% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_delete.go index c540d5d7cb779..00a5692b6d4ae 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_delete.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ExtensionsDeleteOperationResponse struct { +type DeleteOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// ExtensionsDelete ... -func (c ExtensionsClient) ExtensionsDelete(ctx context.Context, id ExtensionId) (result ExtensionsDeleteOperationResponse, err error) { +// Delete ... +func (c ExtensionsClient) Delete(ctx context.Context, id ExtensionId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -56,15 +56,15 @@ func (c ExtensionsClient) ExtensionsDelete(ctx context.Context, id ExtensionId) return } -// ExtensionsDeleteThenPoll performs ExtensionsDelete then polls until it's completed -func (c ExtensionsClient) ExtensionsDeleteThenPoll(ctx context.Context, id ExtensionId) error { - result, err := c.ExtensionsDelete(ctx, id) +// DeleteThenPoll performs Delete then polls until it's completed +func (c ExtensionsClient) DeleteThenPoll(ctx context.Context, id ExtensionId) error { + result, err := c.Delete(ctx, id) if err != nil { - return fmt.Errorf("performing ExtensionsDelete: %+v", err) + return fmt.Errorf("performing Delete: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after ExtensionsDelete: %+v", err) + return fmt.Errorf("polling after Delete: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_get.go similarity index 82% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_get.go index 4b3f2de8f2e3f..8588896a3913c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ExtensionsGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Extension } -// ExtensionsGet ... -func (c ExtensionsClient) ExtensionsGet(ctx context.Context, id ExtensionId) (result ExtensionsGetOperationResponse, err error) { +// Get ... +func (c ExtensionsClient) Get(ctx context.Context, id ExtensionId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionslistbyarcsetting.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_listbyarcsetting.go similarity index 55% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionslistbyarcsetting.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_listbyarcsetting.go index 16c99ba35b014..87515f772bfcb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionslistbyarcsetting.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_listbyarcsetting.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ExtensionsListByArcSettingOperationResponse struct { +type ListByArcSettingOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]Extension } -type ExtensionsListByArcSettingCompleteResult struct { +type ListByArcSettingCompleteResult struct { Items []Extension } -// ExtensionsListByArcSetting ... -func (c ExtensionsClient) ExtensionsListByArcSetting(ctx context.Context, id ArcSettingId) (result ExtensionsListByArcSettingOperationResponse, err error) { +// ListByArcSetting ... +func (c ExtensionsClient) ListByArcSetting(ctx context.Context, id ArcSettingId) (result ListByArcSettingOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c ExtensionsClient) ExtensionsListByArcSetting(ctx context.Context, id Arc return } -// ExtensionsListByArcSettingComplete retrieves all the results into a single object -func (c ExtensionsClient) ExtensionsListByArcSettingComplete(ctx context.Context, id ArcSettingId) (ExtensionsListByArcSettingCompleteResult, error) { - return c.ExtensionsListByArcSettingCompleteMatchingPredicate(ctx, id, ExtensionOperationPredicate{}) +// ListByArcSettingComplete retrieves all the results into a single object +func (c ExtensionsClient) ListByArcSettingComplete(ctx context.Context, id ArcSettingId) (ListByArcSettingCompleteResult, error) { + return c.ListByArcSettingCompleteMatchingPredicate(ctx, id, ExtensionOperationPredicate{}) } -// ExtensionsListByArcSettingCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c ExtensionsClient) ExtensionsListByArcSettingCompleteMatchingPredicate(ctx context.Context, id ArcSettingId, predicate ExtensionOperationPredicate) (result ExtensionsListByArcSettingCompleteResult, err error) { +// ListByArcSettingCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c ExtensionsClient) ListByArcSettingCompleteMatchingPredicate(ctx context.Context, id ArcSettingId, predicate ExtensionOperationPredicate) (result ListByArcSettingCompleteResult, err error) { items := make([]Extension, 0) - resp, err := c.ExtensionsListByArcSetting(ctx, id) + resp, err := c.ListByArcSetting(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c ExtensionsClient) ExtensionsListByArcSettingCompleteMatchingPredicate(ct } } - result = ExtensionsListByArcSettingCompleteResult{ + result = ListByArcSettingCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_update.go similarity index 67% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_update.go index c4cb835da7003..e3004bd22e2e2 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_update.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ExtensionsUpdateOperationResponse struct { +type UpdateOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// ExtensionsUpdate ... -func (c ExtensionsClient) ExtensionsUpdate(ctx context.Context, id ExtensionId, input Extension) (result ExtensionsUpdateOperationResponse, err error) { +// Update ... +func (c ExtensionsClient) Update(ctx context.Context, id ExtensionId, input Extension) (result UpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -59,15 +59,15 @@ func (c ExtensionsClient) ExtensionsUpdate(ctx context.Context, id ExtensionId, return } -// ExtensionsUpdateThenPoll performs ExtensionsUpdate then polls until it's completed -func (c ExtensionsClient) ExtensionsUpdateThenPoll(ctx context.Context, id ExtensionId, input Extension) error { - result, err := c.ExtensionsUpdate(ctx, id, input) +// UpdateThenPoll performs Update then polls until it's completed +func (c ExtensionsClient) UpdateThenPoll(ctx context.Context, id ExtensionId, input Extension) error { + result, err := c.Update(ctx, id, input) if err != nil { - return fmt.Errorf("performing ExtensionsUpdate: %+v", err) + return fmt.Errorf("performing Update: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after ExtensionsUpdate: %+v", err) + return fmt.Errorf("polling after Update: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsupgrade.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_upgrade.go similarity index 66% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsupgrade.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_upgrade.go index 6d2886172e3dc..22d59b202cb39 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_extensionsupgrade.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/extensions/method_upgrade.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ExtensionsUpgradeOperationResponse struct { +type UpgradeOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// ExtensionsUpgrade ... -func (c ExtensionsClient) ExtensionsUpgrade(ctx context.Context, id ExtensionId, input ExtensionUpgradeParameters) (result ExtensionsUpgradeOperationResponse, err error) { +// Upgrade ... +func (c ExtensionsClient) Upgrade(ctx context.Context, id ExtensionId, input ExtensionUpgradeParameters) (result UpgradeOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -58,15 +58,15 @@ func (c ExtensionsClient) ExtensionsUpgrade(ctx context.Context, id ExtensionId, return } -// ExtensionsUpgradeThenPoll performs ExtensionsUpgrade then polls until it's completed -func (c ExtensionsClient) ExtensionsUpgradeThenPoll(ctx context.Context, id ExtensionId, input ExtensionUpgradeParameters) error { - result, err := c.ExtensionsUpgrade(ctx, id, input) +// UpgradeThenPoll performs Upgrade then polls until it's completed +func (c ExtensionsClient) UpgradeThenPoll(ctx context.Context, id ExtensionId, input ExtensionUpgradeParameters) error { + result, err := c.Upgrade(ctx, id, input) if err != nil { - return fmt.Errorf("performing ExtensionsUpgrade: %+v", err) + return fmt.Errorf("performing Upgrade: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after ExtensionsUpgrade: %+v", err) + return fmt.Errorf("polling after Upgrade: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/README.md index ecbe3fa4d7c05..5781797778356 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/README.md @@ -20,13 +20,13 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `OffersClient.OffersGet` +### Example Usage: `OffersClient.Get` ```go ctx := context.TODO() id := offers.NewOfferID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "publisherValue", "offerValue") -read, err := client.OffersGet(ctx, id, offers.DefaultOffersGetOperationOptions()) +read, err := client.Get(ctx, id, offers.DefaultGetOperationOptions()) if err != nil { // handle the error } @@ -36,14 +36,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `OffersClient.OffersListByCluster` +### Example Usage: `OffersClient.ListByCluster` ```go ctx := context.TODO() id := offers.NewClusterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue") -// alternatively `client.OffersListByCluster(ctx, id, offers.DefaultOffersListByClusterOperationOptions())` can be used to do batched pagination -items, err := client.OffersListByClusterComplete(ctx, id, offers.DefaultOffersListByClusterOperationOptions()) +// alternatively `client.ListByCluster(ctx, id, offers.DefaultListByClusterOperationOptions())` can be used to do batched pagination +items, err := client.ListByClusterComplete(ctx, id, offers.DefaultListByClusterOperationOptions()) if err != nil { // handle the error } @@ -53,14 +53,14 @@ for _, item := range items { ``` -### Example Usage: `OffersClient.OffersListByPublisher` +### Example Usage: `OffersClient.ListByPublisher` ```go ctx := context.TODO() id := offers.NewPublisherID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "publisherValue") -// alternatively `client.OffersListByPublisher(ctx, id, offers.DefaultOffersListByPublisherOperationOptions())` can be used to do batched pagination -items, err := client.OffersListByPublisherComplete(ctx, id, offers.DefaultOffersListByPublisherOperationOptions()) +// alternatively `client.ListByPublisher(ctx, id, offers.DefaultListByPublisherOperationOptions())` can be used to do batched pagination +items, err := client.ListByPublisherComplete(ctx, id, offers.DefaultListByPublisherOperationOptions()) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offersget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_get.go similarity index 68% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offersget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_get.go index 4ee29ea299483..d88c72ee5ce33 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offersget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_get.go @@ -12,32 +12,32 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type OffersGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Offer } -type OffersGetOperationOptions struct { +type GetOperationOptions struct { Expand *string } -func DefaultOffersGetOperationOptions() OffersGetOperationOptions { - return OffersGetOperationOptions{} +func DefaultGetOperationOptions() GetOperationOptions { + return GetOperationOptions{} } -func (o OffersGetOperationOptions) ToHeaders() *client.Headers { +func (o GetOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} return &out } -func (o OffersGetOperationOptions) ToOData() *odata.Query { +func (o GetOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o OffersGetOperationOptions) ToQuery() *client.QueryParams { +func (o GetOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Expand != nil { out.Append("$expand", fmt.Sprintf("%v", *o.Expand)) @@ -45,8 +45,8 @@ func (o OffersGetOperationOptions) ToQuery() *client.QueryParams { return &out } -// OffersGet ... -func (c OffersClient) OffersGet(ctx context.Context, id OfferId, options OffersGetOperationOptions) (result OffersGetOperationResponse, err error) { +// Get ... +func (c OffersClient) Get(ctx context.Context, id OfferId, options GetOperationOptions) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offerslistbycluster.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_listbycluster.go similarity index 50% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offerslistbycluster.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_listbycluster.go index df80c8f8b0e76..f57d01728f83a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offerslistbycluster.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_listbycluster.go @@ -12,36 +12,36 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type OffersListByClusterOperationResponse struct { +type ListByClusterOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]Offer } -type OffersListByClusterCompleteResult struct { +type ListByClusterCompleteResult struct { Items []Offer } -type OffersListByClusterOperationOptions struct { +type ListByClusterOperationOptions struct { Expand *string } -func DefaultOffersListByClusterOperationOptions() OffersListByClusterOperationOptions { - return OffersListByClusterOperationOptions{} +func DefaultListByClusterOperationOptions() ListByClusterOperationOptions { + return ListByClusterOperationOptions{} } -func (o OffersListByClusterOperationOptions) ToHeaders() *client.Headers { +func (o ListByClusterOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} return &out } -func (o OffersListByClusterOperationOptions) ToOData() *odata.Query { +func (o ListByClusterOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o OffersListByClusterOperationOptions) ToQuery() *client.QueryParams { +func (o ListByClusterOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Expand != nil { out.Append("$expand", fmt.Sprintf("%v", *o.Expand)) @@ -49,8 +49,8 @@ func (o OffersListByClusterOperationOptions) ToQuery() *client.QueryParams { return &out } -// OffersListByCluster ... -func (c OffersClient) OffersListByCluster(ctx context.Context, id ClusterId, options OffersListByClusterOperationOptions) (result OffersListByClusterOperationResponse, err error) { +// ListByCluster ... +func (c OffersClient) ListByCluster(ctx context.Context, id ClusterId, options ListByClusterOperationOptions) (result ListByClusterOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -88,16 +88,16 @@ func (c OffersClient) OffersListByCluster(ctx context.Context, id ClusterId, opt return } -// OffersListByClusterComplete retrieves all the results into a single object -func (c OffersClient) OffersListByClusterComplete(ctx context.Context, id ClusterId, options OffersListByClusterOperationOptions) (OffersListByClusterCompleteResult, error) { - return c.OffersListByClusterCompleteMatchingPredicate(ctx, id, options, OfferOperationPredicate{}) +// ListByClusterComplete retrieves all the results into a single object +func (c OffersClient) ListByClusterComplete(ctx context.Context, id ClusterId, options ListByClusterOperationOptions) (ListByClusterCompleteResult, error) { + return c.ListByClusterCompleteMatchingPredicate(ctx, id, options, OfferOperationPredicate{}) } -// OffersListByClusterCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c OffersClient) OffersListByClusterCompleteMatchingPredicate(ctx context.Context, id ClusterId, options OffersListByClusterOperationOptions, predicate OfferOperationPredicate) (result OffersListByClusterCompleteResult, err error) { +// ListByClusterCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c OffersClient) ListByClusterCompleteMatchingPredicate(ctx context.Context, id ClusterId, options ListByClusterOperationOptions, predicate OfferOperationPredicate) (result ListByClusterCompleteResult, err error) { items := make([]Offer, 0) - resp, err := c.OffersListByCluster(ctx, id, options) + resp, err := c.ListByCluster(ctx, id, options) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -110,7 +110,7 @@ func (c OffersClient) OffersListByClusterCompleteMatchingPredicate(ctx context.C } } - result = OffersListByClusterCompleteResult{ + result = ListByClusterCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offerslistbypublisher.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_listbypublisher.go similarity index 50% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offerslistbypublisher.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_listbypublisher.go index d8348049eecbb..8110b3258eaa4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_offerslistbypublisher.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/offers/method_listbypublisher.go @@ -12,36 +12,36 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type OffersListByPublisherOperationResponse struct { +type ListByPublisherOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]Offer } -type OffersListByPublisherCompleteResult struct { +type ListByPublisherCompleteResult struct { Items []Offer } -type OffersListByPublisherOperationOptions struct { +type ListByPublisherOperationOptions struct { Expand *string } -func DefaultOffersListByPublisherOperationOptions() OffersListByPublisherOperationOptions { - return OffersListByPublisherOperationOptions{} +func DefaultListByPublisherOperationOptions() ListByPublisherOperationOptions { + return ListByPublisherOperationOptions{} } -func (o OffersListByPublisherOperationOptions) ToHeaders() *client.Headers { +func (o ListByPublisherOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} return &out } -func (o OffersListByPublisherOperationOptions) ToOData() *odata.Query { +func (o ListByPublisherOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o OffersListByPublisherOperationOptions) ToQuery() *client.QueryParams { +func (o ListByPublisherOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Expand != nil { out.Append("$expand", fmt.Sprintf("%v", *o.Expand)) @@ -49,8 +49,8 @@ func (o OffersListByPublisherOperationOptions) ToQuery() *client.QueryParams { return &out } -// OffersListByPublisher ... -func (c OffersClient) OffersListByPublisher(ctx context.Context, id PublisherId, options OffersListByPublisherOperationOptions) (result OffersListByPublisherOperationResponse, err error) { +// ListByPublisher ... +func (c OffersClient) ListByPublisher(ctx context.Context, id PublisherId, options ListByPublisherOperationOptions) (result ListByPublisherOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -88,16 +88,16 @@ func (c OffersClient) OffersListByPublisher(ctx context.Context, id PublisherId, return } -// OffersListByPublisherComplete retrieves all the results into a single object -func (c OffersClient) OffersListByPublisherComplete(ctx context.Context, id PublisherId, options OffersListByPublisherOperationOptions) (OffersListByPublisherCompleteResult, error) { - return c.OffersListByPublisherCompleteMatchingPredicate(ctx, id, options, OfferOperationPredicate{}) +// ListByPublisherComplete retrieves all the results into a single object +func (c OffersClient) ListByPublisherComplete(ctx context.Context, id PublisherId, options ListByPublisherOperationOptions) (ListByPublisherCompleteResult, error) { + return c.ListByPublisherCompleteMatchingPredicate(ctx, id, options, OfferOperationPredicate{}) } -// OffersListByPublisherCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c OffersClient) OffersListByPublisherCompleteMatchingPredicate(ctx context.Context, id PublisherId, options OffersListByPublisherOperationOptions, predicate OfferOperationPredicate) (result OffersListByPublisherCompleteResult, err error) { +// ListByPublisherCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c OffersClient) ListByPublisherCompleteMatchingPredicate(ctx context.Context, id PublisherId, options ListByPublisherOperationOptions, predicate OfferOperationPredicate) (result ListByPublisherCompleteResult, err error) { items := make([]Offer, 0) - resp, err := c.OffersListByPublisher(ctx, id, options) + resp, err := c.ListByPublisher(ctx, id, options) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -110,7 +110,7 @@ func (c OffersClient) OffersListByPublisherCompleteMatchingPredicate(ctx context } } - result = OffersListByPublisherCompleteResult{ + result = ListByPublisherCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/README.md index 5d2653d5cb8b8..4f11e94c61105 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/README.md @@ -20,13 +20,13 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `PublishersClient.PublishersGet` +### Example Usage: `PublishersClient.Get` ```go ctx := context.TODO() id := publishers.NewPublisherID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "publisherValue") -read, err := client.PublishersGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -36,14 +36,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `PublishersClient.PublishersListByCluster` +### Example Usage: `PublishersClient.ListByCluster` ```go ctx := context.TODO() id := publishers.NewClusterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue") -// alternatively `client.PublishersListByCluster(ctx, id)` can be used to do batched pagination -items, err := client.PublishersListByClusterComplete(ctx, id) +// alternatively `client.ListByCluster(ctx, id)` can be used to do batched pagination +items, err := client.ListByClusterComplete(ctx, id) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_publishersget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_get.go similarity index 82% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_publishersget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_get.go index f69bd15f8c3d8..9051da16a5427 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_publishersget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PublishersGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Publisher } -// PublishersGet ... -func (c PublishersClient) PublishersGet(ctx context.Context, id PublisherId) (result PublishersGetOperationResponse, err error) { +// Get ... +func (c PublishersClient) Get(ctx context.Context, id PublisherId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_publisherslistbycluster.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_listbycluster.go similarity index 56% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_publisherslistbycluster.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_listbycluster.go index f60c90893d13e..4d4cafb8ae9a1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_publisherslistbycluster.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/publishers/method_listbycluster.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PublishersListByClusterOperationResponse struct { +type ListByClusterOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]Publisher } -type PublishersListByClusterCompleteResult struct { +type ListByClusterCompleteResult struct { Items []Publisher } -// PublishersListByCluster ... -func (c PublishersClient) PublishersListByCluster(ctx context.Context, id ClusterId) (result PublishersListByClusterOperationResponse, err error) { +// ListByCluster ... +func (c PublishersClient) ListByCluster(ctx context.Context, id ClusterId) (result ListByClusterOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c PublishersClient) PublishersListByCluster(ctx context.Context, id Cluste return } -// PublishersListByClusterComplete retrieves all the results into a single object -func (c PublishersClient) PublishersListByClusterComplete(ctx context.Context, id ClusterId) (PublishersListByClusterCompleteResult, error) { - return c.PublishersListByClusterCompleteMatchingPredicate(ctx, id, PublisherOperationPredicate{}) +// ListByClusterComplete retrieves all the results into a single object +func (c PublishersClient) ListByClusterComplete(ctx context.Context, id ClusterId) (ListByClusterCompleteResult, error) { + return c.ListByClusterCompleteMatchingPredicate(ctx, id, PublisherOperationPredicate{}) } -// PublishersListByClusterCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c PublishersClient) PublishersListByClusterCompleteMatchingPredicate(ctx context.Context, id ClusterId, predicate PublisherOperationPredicate) (result PublishersListByClusterCompleteResult, err error) { +// ListByClusterCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c PublishersClient) ListByClusterCompleteMatchingPredicate(ctx context.Context, id ClusterId, predicate PublisherOperationPredicate) (result ListByClusterCompleteResult, err error) { items := make([]Publisher, 0) - resp, err := c.PublishersListByCluster(ctx, id) + resp, err := c.ListByCluster(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c PublishersClient) PublishersListByClusterCompleteMatchingPredicate(ctx c } } - result = PublishersListByClusterCompleteResult{ + result = ListByClusterCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/README.md index b96187a70ab60..bed63366de671 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/README.md @@ -20,25 +20,25 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `UpdateRunsClient.UpdateRunsDelete` +### Example Usage: `UpdateRunsClient.Delete` ```go ctx := context.TODO() id := updateruns.NewUpdateRunID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "updateValue", "updateRunValue") -if err := client.UpdateRunsDeleteThenPoll(ctx, id); err != nil { +if err := client.DeleteThenPoll(ctx, id); err != nil { // handle the error } ``` -### Example Usage: `UpdateRunsClient.UpdateRunsGet` +### Example Usage: `UpdateRunsClient.Get` ```go ctx := context.TODO() id := updateruns.NewUpdateRunID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "updateValue", "updateRunValue") -read, err := client.UpdateRunsGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -48,14 +48,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `UpdateRunsClient.UpdateRunsList` +### Example Usage: `UpdateRunsClient.List` ```go ctx := context.TODO() id := updateruns.NewUpdateID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "updateValue") -// alternatively `client.UpdateRunsList(ctx, id)` can be used to do batched pagination -items, err := client.UpdateRunsListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -65,7 +65,7 @@ for _, item := range items { ``` -### Example Usage: `UpdateRunsClient.UpdateRunsPut` +### Example Usage: `UpdateRunsClient.Put` ```go ctx := context.TODO() @@ -76,7 +76,7 @@ payload := updateruns.UpdateRun{ } -read, err := client.UpdateRunsPut(ctx, id, payload) +read, err := client.Put(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_delete.go similarity index 68% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_delete.go index 9c05a8bc33454..93881d05ad31e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_delete.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdateRunsDeleteOperationResponse struct { +type DeleteOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// UpdateRunsDelete ... -func (c UpdateRunsClient) UpdateRunsDelete(ctx context.Context, id UpdateRunId) (result UpdateRunsDeleteOperationResponse, err error) { +// Delete ... +func (c UpdateRunsClient) Delete(ctx context.Context, id UpdateRunId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -56,15 +56,15 @@ func (c UpdateRunsClient) UpdateRunsDelete(ctx context.Context, id UpdateRunId) return } -// UpdateRunsDeleteThenPoll performs UpdateRunsDelete then polls until it's completed -func (c UpdateRunsClient) UpdateRunsDeleteThenPoll(ctx context.Context, id UpdateRunId) error { - result, err := c.UpdateRunsDelete(ctx, id) +// DeleteThenPoll performs Delete then polls until it's completed +func (c UpdateRunsClient) DeleteThenPoll(ctx context.Context, id UpdateRunId) error { + result, err := c.Delete(ctx, id) if err != nil { - return fmt.Errorf("performing UpdateRunsDelete: %+v", err) + return fmt.Errorf("performing Delete: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after UpdateRunsDelete: %+v", err) + return fmt.Errorf("polling after Delete: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_get.go similarity index 82% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_get.go index 2e43d0966239a..64d0f910e25dc 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdateRunsGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *UpdateRun } -// UpdateRunsGet ... -func (c UpdateRunsClient) UpdateRunsGet(ctx context.Context, id UpdateRunId) (result UpdateRunsGetOperationResponse, err error) { +// Get ... +func (c UpdateRunsClient) Get(ctx context.Context, id UpdateRunId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_list.go similarity index 59% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_list.go index dfe0fea089bae..3439701938b2b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_list.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdateRunsListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]UpdateRun } -type UpdateRunsListCompleteResult struct { +type ListCompleteResult struct { Items []UpdateRun } -// UpdateRunsList ... -func (c UpdateRunsClient) UpdateRunsList(ctx context.Context, id UpdateId) (result UpdateRunsListOperationResponse, err error) { +// List ... +func (c UpdateRunsClient) List(ctx context.Context, id UpdateId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c UpdateRunsClient) UpdateRunsList(ctx context.Context, id UpdateId) (resu return } -// UpdateRunsListComplete retrieves all the results into a single object -func (c UpdateRunsClient) UpdateRunsListComplete(ctx context.Context, id UpdateId) (UpdateRunsListCompleteResult, error) { - return c.UpdateRunsListCompleteMatchingPredicate(ctx, id, UpdateRunOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c UpdateRunsClient) ListComplete(ctx context.Context, id UpdateId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, UpdateRunOperationPredicate{}) } -// UpdateRunsListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c UpdateRunsClient) UpdateRunsListCompleteMatchingPredicate(ctx context.Context, id UpdateId, predicate UpdateRunOperationPredicate) (result UpdateRunsListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c UpdateRunsClient) ListCompleteMatchingPredicate(ctx context.Context, id UpdateId, predicate UpdateRunOperationPredicate) (result ListCompleteResult, err error) { items := make([]UpdateRun, 0) - resp, err := c.UpdateRunsList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c UpdateRunsClient) UpdateRunsListCompleteMatchingPredicate(ctx context.Co } } - result = UpdateRunsListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_put.go similarity index 81% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsput.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_put.go index 7a8bf3dd170f6..10a3a926a4c8a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_updaterunsput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updateruns/method_put.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdateRunsPutOperationResponse struct { +type PutOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *UpdateRun } -// UpdateRunsPut ... -func (c UpdateRunsClient) UpdateRunsPut(ctx context.Context, id UpdateRunId, input UpdateRun) (result UpdateRunsPutOperationResponse, err error) { +// Put ... +func (c UpdateRunsClient) Put(ctx context.Context, id UpdateRunId, input UpdateRun) (result PutOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/README.md index aa706c71553fd..0a9065e6b136c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/README.md @@ -20,25 +20,25 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `UpdatesClient.UpdatesDelete` +### Example Usage: `UpdatesClient.Delete` ```go ctx := context.TODO() id := updates.NewUpdateID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "updateValue") -if err := client.UpdatesDeleteThenPoll(ctx, id); err != nil { +if err := client.DeleteThenPoll(ctx, id); err != nil { // handle the error } ``` -### Example Usage: `UpdatesClient.UpdatesGet` +### Example Usage: `UpdatesClient.Get` ```go ctx := context.TODO() id := updates.NewUpdateID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "updateValue") -read, err := client.UpdatesGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -48,14 +48,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `UpdatesClient.UpdatesList` +### Example Usage: `UpdatesClient.List` ```go ctx := context.TODO() id := updates.NewClusterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue") -// alternatively `client.UpdatesList(ctx, id)` can be used to do batched pagination -items, err := client.UpdatesListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -65,19 +65,19 @@ for _, item := range items { ``` -### Example Usage: `UpdatesClient.UpdatesPost` +### Example Usage: `UpdatesClient.Post` ```go ctx := context.TODO() id := updates.NewUpdateID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue", "updateValue") -if err := client.UpdatesPostThenPoll(ctx, id); err != nil { +if err := client.PostThenPoll(ctx, id); err != nil { // handle the error } ``` -### Example Usage: `UpdatesClient.UpdatesPut` +### Example Usage: `UpdatesClient.Put` ```go ctx := context.TODO() @@ -88,7 +88,7 @@ payload := updates.Update{ } -read, err := client.UpdatesPut(ctx, id, payload) +read, err := client.Put(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_delete.go similarity index 70% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_delete.go index 604cb98106f76..e2977fac7f928 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_delete.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdatesDeleteOperationResponse struct { +type DeleteOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// UpdatesDelete ... -func (c UpdatesClient) UpdatesDelete(ctx context.Context, id UpdateId) (result UpdatesDeleteOperationResponse, err error) { +// Delete ... +func (c UpdatesClient) Delete(ctx context.Context, id UpdateId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -56,15 +56,15 @@ func (c UpdatesClient) UpdatesDelete(ctx context.Context, id UpdateId) (result U return } -// UpdatesDeleteThenPoll performs UpdatesDelete then polls until it's completed -func (c UpdatesClient) UpdatesDeleteThenPoll(ctx context.Context, id UpdateId) error { - result, err := c.UpdatesDelete(ctx, id) +// DeleteThenPoll performs Delete then polls until it's completed +func (c UpdatesClient) DeleteThenPoll(ctx context.Context, id UpdateId) error { + result, err := c.Delete(ctx, id) if err != nil { - return fmt.Errorf("performing UpdatesDelete: %+v", err) + return fmt.Errorf("performing Delete: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after UpdatesDelete: %+v", err) + return fmt.Errorf("polling after Delete: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_get.go similarity index 83% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_get.go index da40936ed40ff..522a789507d07 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdatesGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Update } -// UpdatesGet ... -func (c UpdatesClient) UpdatesGet(ctx context.Context, id UpdateId) (result UpdatesGetOperationResponse, err error) { +// Get ... +func (c UpdatesClient) Get(ctx context.Context, id UpdateId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updateslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_list.go similarity index 60% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updateslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_list.go index 75c14a0b1e81e..a60cd434758bf 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updateslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_list.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdatesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]Update } -type UpdatesListCompleteResult struct { +type ListCompleteResult struct { Items []Update } -// UpdatesList ... -func (c UpdatesClient) UpdatesList(ctx context.Context, id ClusterId) (result UpdatesListOperationResponse, err error) { +// List ... +func (c UpdatesClient) List(ctx context.Context, id ClusterId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c UpdatesClient) UpdatesList(ctx context.Context, id ClusterId) (result Up return } -// UpdatesListComplete retrieves all the results into a single object -func (c UpdatesClient) UpdatesListComplete(ctx context.Context, id ClusterId) (UpdatesListCompleteResult, error) { - return c.UpdatesListCompleteMatchingPredicate(ctx, id, UpdateOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c UpdatesClient) ListComplete(ctx context.Context, id ClusterId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, UpdateOperationPredicate{}) } -// UpdatesListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c UpdatesClient) UpdatesListCompleteMatchingPredicate(ctx context.Context, id ClusterId, predicate UpdateOperationPredicate) (result UpdatesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c UpdatesClient) ListCompleteMatchingPredicate(ctx context.Context, id ClusterId, predicate UpdateOperationPredicate) (result ListCompleteResult, err error) { items := make([]Update, 0) - resp, err := c.UpdatesList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c UpdatesClient) UpdatesListCompleteMatchingPredicate(ctx context.Context, } } - result = UpdatesListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatespost.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_post.go similarity index 71% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatespost.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_post.go index 809eb8b509465..b41ccb849bb29 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatespost.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_post.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdatesPostOperationResponse struct { +type PostOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// UpdatesPost ... -func (c UpdatesClient) UpdatesPost(ctx context.Context, id UpdateId) (result UpdatesPostOperationResponse, err error) { +// Post ... +func (c UpdatesClient) Post(ctx context.Context, id UpdateId) (result PostOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -55,15 +55,15 @@ func (c UpdatesClient) UpdatesPost(ctx context.Context, id UpdateId) (result Upd return } -// UpdatesPostThenPoll performs UpdatesPost then polls until it's completed -func (c UpdatesClient) UpdatesPostThenPoll(ctx context.Context, id UpdateId) error { - result, err := c.UpdatesPost(ctx, id) +// PostThenPoll performs Post then polls until it's completed +func (c UpdatesClient) PostThenPoll(ctx context.Context, id UpdateId) error { + result, err := c.Post(ctx, id) if err != nil { - return fmt.Errorf("performing UpdatesPost: %+v", err) + return fmt.Errorf("performing Post: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after UpdatesPost: %+v", err) + return fmt.Errorf("polling after Post: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_put.go similarity index 83% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesput.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_put.go index b89ea1ccaa8fa..d1330de10b981 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_updatesput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updates/method_put.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdatesPutOperationResponse struct { +type PutOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Update } -// UpdatesPut ... -func (c UpdatesClient) UpdatesPut(ctx context.Context, id UpdateId, input Update) (result UpdatesPutOperationResponse, err error) { +// Put ... +func (c UpdatesClient) Put(ctx context.Context, id UpdateId, input Update) (result PutOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/README.md index 103f77409ec12..b8920573fb2b4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/README.md @@ -20,25 +20,25 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `UpdateSummariesClient.UpdateSummariesDelete` +### Example Usage: `UpdateSummariesClient.Delete` ```go ctx := context.TODO() id := updatesummaries.NewClusterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue") -if err := client.UpdateSummariesDeleteThenPoll(ctx, id); err != nil { +if err := client.DeleteThenPoll(ctx, id); err != nil { // handle the error } ``` -### Example Usage: `UpdateSummariesClient.UpdateSummariesGet` +### Example Usage: `UpdateSummariesClient.Get` ```go ctx := context.TODO() id := updatesummaries.NewClusterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue") -read, err := client.UpdateSummariesGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -48,14 +48,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `UpdateSummariesClient.UpdateSummariesList` +### Example Usage: `UpdateSummariesClient.List` ```go ctx := context.TODO() id := updatesummaries.NewClusterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "clusterValue") -// alternatively `client.UpdateSummariesList(ctx, id)` can be used to do batched pagination -items, err := client.UpdateSummariesListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -65,7 +65,7 @@ for _, item := range items { ``` -### Example Usage: `UpdateSummariesClient.UpdateSummariesPut` +### Example Usage: `UpdateSummariesClient.Put` ```go ctx := context.TODO() @@ -76,7 +76,7 @@ payload := updatesummaries.UpdateSummaries{ } -read, err := client.UpdateSummariesPut(ctx, id, payload) +read, err := client.Put(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_delete.go similarity index 67% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_delete.go index e209c529842b8..b3ba841c6be52 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_delete.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdateSummariesDeleteOperationResponse struct { +type DeleteOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// UpdateSummariesDelete ... -func (c UpdateSummariesClient) UpdateSummariesDelete(ctx context.Context, id ClusterId) (result UpdateSummariesDeleteOperationResponse, err error) { +// Delete ... +func (c UpdateSummariesClient) Delete(ctx context.Context, id ClusterId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -56,15 +56,15 @@ func (c UpdateSummariesClient) UpdateSummariesDelete(ctx context.Context, id Clu return } -// UpdateSummariesDeleteThenPoll performs UpdateSummariesDelete then polls until it's completed -func (c UpdateSummariesClient) UpdateSummariesDeleteThenPoll(ctx context.Context, id ClusterId) error { - result, err := c.UpdateSummariesDelete(ctx, id) +// DeleteThenPoll performs Delete then polls until it's completed +func (c UpdateSummariesClient) DeleteThenPoll(ctx context.Context, id ClusterId) error { + result, err := c.Delete(ctx, id) if err != nil { - return fmt.Errorf("performing UpdateSummariesDelete: %+v", err) + return fmt.Errorf("performing Delete: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after UpdateSummariesDelete: %+v", err) + return fmt.Errorf("polling after Delete: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_get.go similarity index 81% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_get.go index 12cf2516cd969..4d276115b34aa 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_get.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdateSummariesGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *UpdateSummaries } -// UpdateSummariesGet ... -func (c UpdateSummariesClient) UpdateSummariesGet(ctx context.Context, id ClusterId) (result UpdateSummariesGetOperationResponse, err error) { +// Get ... +func (c UpdateSummariesClient) Get(ctx context.Context, id ClusterId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummarieslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_list.go similarity index 57% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummarieslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_list.go index 51a1bce43ca0b..f12814e9ae4c6 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummarieslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_list.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdateSummariesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]UpdateSummaries } -type UpdateSummariesListCompleteResult struct { +type ListCompleteResult struct { Items []UpdateSummaries } -// UpdateSummariesList ... -func (c UpdateSummariesClient) UpdateSummariesList(ctx context.Context, id ClusterId) (result UpdateSummariesListOperationResponse, err error) { +// List ... +func (c UpdateSummariesClient) List(ctx context.Context, id ClusterId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c UpdateSummariesClient) UpdateSummariesList(ctx context.Context, id Clust return } -// UpdateSummariesListComplete retrieves all the results into a single object -func (c UpdateSummariesClient) UpdateSummariesListComplete(ctx context.Context, id ClusterId) (UpdateSummariesListCompleteResult, error) { - return c.UpdateSummariesListCompleteMatchingPredicate(ctx, id, UpdateSummariesOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c UpdateSummariesClient) ListComplete(ctx context.Context, id ClusterId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, UpdateSummariesOperationPredicate{}) } -// UpdateSummariesListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c UpdateSummariesClient) UpdateSummariesListCompleteMatchingPredicate(ctx context.Context, id ClusterId, predicate UpdateSummariesOperationPredicate) (result UpdateSummariesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c UpdateSummariesClient) ListCompleteMatchingPredicate(ctx context.Context, id ClusterId, predicate UpdateSummariesOperationPredicate) (result ListCompleteResult, err error) { items := make([]UpdateSummaries, 0) - resp, err := c.UpdateSummariesList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c UpdateSummariesClient) UpdateSummariesListCompleteMatchingPredicate(ctx } } - result = UpdateSummariesListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_put.go similarity index 80% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesput.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_put.go index c9b6d770e47f5..23d550f67429b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_updatesummariesput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/azurestackhci/2023-03-01/updatesummaries/method_put.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type UpdateSummariesPutOperationResponse struct { +type PutOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *UpdateSummaries } -// UpdateSummariesPut ... -func (c UpdateSummariesClient) UpdateSummariesPut(ctx context.Context, id ClusterId, input UpdateSummaries) (result UpdateSummariesPutOperationResponse, err error) { +// Put ... +func (c UpdateSummariesClient) Put(ctx context.Context, id ClusterId, input UpdateSummaries) (result PutOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_supportedcapabilities.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_supportedcapabilities.go deleted file mode 100644 index 4d7f5bbea5a7a..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_supportedcapabilities.go +++ /dev/null @@ -1,9 +0,0 @@ -package disks - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type SupportedCapabilities struct { - AcceleratedNetwork *bool `json:"acceleratedNetwork,omitempty"` - Architecture *Architecture `json:"architecture,omitempty"` -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/README.md similarity index 96% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/README.md index 30c1ed95c0964..0b2841c6791da 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks` Documentation -The `disks` SDK allows for interaction with the Azure Resource Manager Service `compute` (API Version `2022-03-02`). +The `disks` SDK allows for interaction with the Azure Resource Manager Service `compute` (API Version `2023-04-02`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks" +import "github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/constants.go similarity index 94% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/constants.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/constants.go index 201b2c508eb65..c4e76da34ef4f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/constants.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/constants.go @@ -140,6 +140,7 @@ type DiskCreateOption string const ( DiskCreateOptionAttach DiskCreateOption = "Attach" DiskCreateOptionCopy DiskCreateOption = "Copy" + DiskCreateOptionCopyFromSanSnapshot DiskCreateOption = "CopyFromSanSnapshot" DiskCreateOptionCopyStart DiskCreateOption = "CopyStart" DiskCreateOptionEmpty DiskCreateOption = "Empty" DiskCreateOptionFromImage DiskCreateOption = "FromImage" @@ -154,6 +155,7 @@ func PossibleValuesForDiskCreateOption() []string { return []string{ string(DiskCreateOptionAttach), string(DiskCreateOptionCopy), + string(DiskCreateOptionCopyFromSanSnapshot), string(DiskCreateOptionCopyStart), string(DiskCreateOptionEmpty), string(DiskCreateOptionFromImage), @@ -182,6 +184,7 @@ func parseDiskCreateOption(input string) (*DiskCreateOption, error) { vals := map[string]DiskCreateOption{ "attach": DiskCreateOptionAttach, "copy": DiskCreateOptionCopy, + "copyfromsansnapshot": DiskCreateOptionCopyFromSanSnapshot, "copystart": DiskCreateOptionCopyStart, "empty": DiskCreateOptionEmpty, "fromimage": DiskCreateOptionFromImage, @@ -406,6 +409,47 @@ func parseEncryptionType(input string) (*EncryptionType, error) { return &out, nil } +type FileFormat string + +const ( + FileFormatVHD FileFormat = "VHD" + FileFormatVHDX FileFormat = "VHDX" +) + +func PossibleValuesForFileFormat() []string { + return []string{ + string(FileFormatVHD), + string(FileFormatVHDX), + } +} + +func (s *FileFormat) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseFileFormat(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseFileFormat(input string) (*FileFormat, error) { + vals := map[string]FileFormat{ + "vhd": FileFormatVHD, + "vhdx": FileFormatVHDX, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := FileFormat(input) + return &out, nil +} + type HyperVGeneration string const ( diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/id_disk.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/id_disk.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/id_disk.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/id_disk.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_createorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_createorupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_createorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_createorupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_delete.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_delete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_delete.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_get.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_get.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_get.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_grantaccess.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_grantaccess.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_grantaccess.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_grantaccess.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_list.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_list.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_list.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_list.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_listbyresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_listbyresourcegroup.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_listbyresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_listbyresourcegroup.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_revokeaccess.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_revokeaccess.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_revokeaccess.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_revokeaccess.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_update.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_update.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/method_update.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/method_update.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_accessuri.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_accessuri.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_accessuri.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_accessuri.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_creationdata.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_creationdata.go similarity index 85% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_creationdata.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_creationdata.go index 93534a3e16912..9b0d6e4487936 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_creationdata.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_creationdata.go @@ -5,9 +5,11 @@ package disks type CreationData struct { CreateOption DiskCreateOption `json:"createOption"` + ElasticSanResourceId *string `json:"elasticSanResourceId,omitempty"` GalleryImageReference *ImageDiskReference `json:"galleryImageReference,omitempty"` ImageReference *ImageDiskReference `json:"imageReference,omitempty"` LogicalSectorSize *int64 `json:"logicalSectorSize,omitempty"` + PerformancePlus *bool `json:"performancePlus,omitempty"` SecurityDataUri *string `json:"securityDataUri,omitempty"` SourceResourceId *string `json:"sourceResourceId,omitempty"` SourceUniqueId *string `json:"sourceUniqueId,omitempty"` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_disk.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_disk.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_disk.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_disk.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_diskproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_diskproperties.go similarity index 75% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_diskproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_diskproperties.go index 604c5742566af..255deb54c1db3 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_diskproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_diskproperties.go @@ -11,6 +11,7 @@ import ( type DiskProperties struct { BurstingEnabled *bool `json:"burstingEnabled,omitempty"` + BurstingEnabledTime *string `json:"burstingEnabledTime,omitempty"` CompletionPercent *float64 `json:"completionPercent,omitempty"` CreationData CreationData `json:"creationData"` DataAccessAuthMode *DataAccessAuthMode `json:"dataAccessAuthMode,omitempty"` @@ -25,8 +26,10 @@ type DiskProperties struct { Encryption *Encryption `json:"encryption,omitempty"` EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` HyperVGeneration *HyperVGeneration `json:"hyperVGeneration,omitempty"` + LastOwnershipUpdateTime *string `json:"LastOwnershipUpdateTime,omitempty"` MaxShares *int64 `json:"maxShares,omitempty"` NetworkAccessPolicy *NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` + OptimizedForFrequentAttach *bool `json:"optimizedForFrequentAttach,omitempty"` OsType *OperatingSystemTypes `json:"osType,omitempty"` PropertyUpdatesInProgress *PropertyUpdatesInProgress `json:"propertyUpdatesInProgress,omitempty"` ProvisioningState *string `json:"provisioningState,omitempty"` @@ -41,6 +44,30 @@ type DiskProperties struct { UniqueId *string `json:"uniqueId,omitempty"` } +func (o *DiskProperties) GetBurstingEnabledTimeAsTime() (*time.Time, error) { + if o.BurstingEnabledTime == nil { + return nil, nil + } + return dates.ParseAsFormat(o.BurstingEnabledTime, "2006-01-02T15:04:05Z07:00") +} + +func (o *DiskProperties) SetBurstingEnabledTimeAsTime(input time.Time) { + formatted := input.Format("2006-01-02T15:04:05Z07:00") + o.BurstingEnabledTime = &formatted +} + +func (o *DiskProperties) GetLastOwnershipUpdateTimeAsTime() (*time.Time, error) { + if o.LastOwnershipUpdateTime == nil { + return nil, nil + } + return dates.ParseAsFormat(o.LastOwnershipUpdateTime, "2006-01-02T15:04:05Z07:00") +} + +func (o *DiskProperties) SetLastOwnershipUpdateTimeAsTime(input time.Time) { + formatted := input.Format("2006-01-02T15:04:05Z07:00") + o.LastOwnershipUpdateTime = &formatted +} + func (o *DiskProperties) GetTimeCreatedAsTime() (*time.Time, error) { if o.TimeCreated == nil { return nil, nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_disksecurityprofile.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_disksecurityprofile.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_disksecurityprofile.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_disksecurityprofile.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_disksku.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_disksku.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_disksku.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_disksku.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_diskupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_diskupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_diskupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_diskupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_diskupdateproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_diskupdateproperties.go similarity index 95% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_diskupdateproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_diskupdateproperties.go index db0d9f71afdb6..29d3b7441b4ff 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_diskupdateproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_diskupdateproperties.go @@ -16,6 +16,7 @@ type DiskUpdateProperties struct { EncryptionSettingsCollection *EncryptionSettingsCollection `json:"encryptionSettingsCollection,omitempty"` MaxShares *int64 `json:"maxShares,omitempty"` NetworkAccessPolicy *NetworkAccessPolicy `json:"networkAccessPolicy,omitempty"` + OptimizedForFrequentAttach *bool `json:"optimizedForFrequentAttach,omitempty"` OsType *OperatingSystemTypes `json:"osType,omitempty"` PropertyUpdatesInProgress *PropertyUpdatesInProgress `json:"propertyUpdatesInProgress,omitempty"` PublicNetworkAccess *PublicNetworkAccess `json:"publicNetworkAccess,omitempty"` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_encryption.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_encryption.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_encryption.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_encryption.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_encryptionsettingscollection.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_encryptionsettingscollection.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_encryptionsettingscollection.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_encryptionsettingscollection.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_encryptionsettingselement.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_encryptionsettingselement.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_encryptionsettingselement.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_encryptionsettingselement.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_grantaccessdata.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_grantaccessdata.go similarity index 85% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_grantaccessdata.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_grantaccessdata.go index 2ec02360cf443..983cf1a40d525 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_grantaccessdata.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_grantaccessdata.go @@ -6,5 +6,6 @@ package disks type GrantAccessData struct { Access AccessLevel `json:"access"` DurationInSeconds int64 `json:"durationInSeconds"` + FileFormat *FileFormat `json:"fileFormat,omitempty"` GetSecureVMGuestStateSAS *bool `json:"getSecureVMGuestStateSAS,omitempty"` } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_imagediskreference.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_imagediskreference.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_imagediskreference.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_imagediskreference.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_keyvaultandkeyreference.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_keyvaultandkeyreference.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_keyvaultandkeyreference.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_keyvaultandkeyreference.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_keyvaultandsecretreference.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_keyvaultandsecretreference.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_keyvaultandsecretreference.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_keyvaultandsecretreference.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_propertyupdatesinprogress.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_propertyupdatesinprogress.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_propertyupdatesinprogress.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_propertyupdatesinprogress.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_purchaseplan.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_purchaseplan.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_purchaseplan.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_purchaseplan.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_shareinfoelement.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_shareinfoelement.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_shareinfoelement.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_shareinfoelement.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_sourcevault.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_sourcevault.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/model_sourcevault.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_sourcevault.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_supportedcapabilities.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_supportedcapabilities.go new file mode 100644 index 0000000000000..33c1827411064 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/model_supportedcapabilities.go @@ -0,0 +1,10 @@ +package disks + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SupportedCapabilities struct { + AcceleratedNetwork *bool `json:"acceleratedNetwork,omitempty"` + Architecture *Architecture `json:"architecture,omitempty"` + DiskControllerTypes *string `json:"diskControllerTypes,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/version.go index 4c3637d6d79e2..f678fc2f35223 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2022-03-02" +const defaultApiVersion = "2023-04-02" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/disks/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/registries/model_runrequest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/registries/model_runrequest.go index b3bf6e7acdc45..d98eb00a9e2b0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/registries/model_runrequest.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/registries/model_runrequest.go @@ -12,7 +12,7 @@ import ( type RunRequest interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRunRequestImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/taskruns/model_runrequest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/taskruns/model_runrequest.go index b39a8415f0e84..8ced0bcd755c9 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/taskruns/model_runrequest.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/taskruns/model_runrequest.go @@ -12,7 +12,7 @@ import ( type RunRequest interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRunRequestImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/tasks/model_taskstepproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/tasks/model_taskstepproperties.go index 4def741225d10..a2715325318bc 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/tasks/model_taskstepproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/tasks/model_taskstepproperties.go @@ -12,7 +12,7 @@ import ( type TaskStepProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTaskStepPropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/tasks/model_taskstepupdateparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/tasks/model_taskstepupdateparameters.go index c9471d7bdf8ed..3cb8d86047401 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/tasks/model_taskstepupdateparameters.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/containerregistry/2019-06-01-preview/tasks/model_taskstepupdateparameters.go @@ -12,7 +12,7 @@ import ( type TaskStepUpdateParameters interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTaskStepUpdateParametersImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/cosmosdb/model_backuppolicy.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/cosmosdb/model_backuppolicy.go index fdf2c05aa07df..2e4805f1c2f85 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/cosmosdb/model_backuppolicy.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/cosmosdb/model_backuppolicy.go @@ -12,7 +12,7 @@ import ( type BackupPolicy interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawBackupPolicyImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/sqldedicatedgateway/model_serviceresourceproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/sqldedicatedgateway/model_serviceresourceproperties.go index b42e855d5d492..73d5a0131feb6 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/sqldedicatedgateway/model_serviceresourceproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/sqldedicatedgateway/model_serviceresourceproperties.go @@ -12,7 +12,7 @@ import ( type ServiceResourceProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawServiceResourcePropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/cosmosdb/model_backuppolicy.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/cosmosdb/model_backuppolicy.go index fdf2c05aa07df..2e4805f1c2f85 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/cosmosdb/model_backuppolicy.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/cosmosdb/model_backuppolicy.go @@ -12,7 +12,7 @@ import ( type BackupPolicy interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawBackupPolicyImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/README.md similarity index 97% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/README.md index c2d361c87c6c1..472946e887bf1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras` Documentation -The `managedcassandras` SDK allows for interaction with the Azure Resource Manager Service `cosmosdb` (API Version `2022-05-15`). +The `managedcassandras` SDK allows for interaction with the Azure Resource Manager Service `cosmosdb` (API Version `2023-04-15`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras" +import "github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/constants.go similarity index 97% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/constants.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/constants.go index 40bd1061a2f15..6af8d3602dc90 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/constants.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/constants.go @@ -9,12 +9,14 @@ type AuthenticationMethod string const ( AuthenticationMethodCassandra AuthenticationMethod = "Cassandra" + AuthenticationMethodLdap AuthenticationMethod = "Ldap" AuthenticationMethodNone AuthenticationMethod = "None" ) func PossibleValuesForAuthenticationMethod() []string { return []string{ string(AuthenticationMethodCassandra), + string(AuthenticationMethodLdap), string(AuthenticationMethodNone), } } @@ -22,6 +24,7 @@ func PossibleValuesForAuthenticationMethod() []string { func parseAuthenticationMethod(input string) (*AuthenticationMethod, error) { vals := map[string]AuthenticationMethod{ "cassandra": AuthenticationMethodCassandra, + "ldap": AuthenticationMethodLdap, "none": AuthenticationMethodNone, } if v, ok := vals[strings.ToLower(input)]; ok { diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/id_cassandracluster.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/id_cassandracluster.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/id_cassandracluster.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/id_cassandracluster.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/id_datacenter.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/id_datacenter.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/id_datacenter.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/id_datacenter.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclusterscreateupdate_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclusterscreateupdate_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclusterscreateupdate_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclusterscreateupdate_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersdeallocate_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersdeallocate_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersdeallocate_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersdeallocate_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersdelete_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersdelete_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersdelete_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersdelete_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersget_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersget_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersget_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersget_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersinvokecommand_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersinvokecommand_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersinvokecommand_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersinvokecommand_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclusterslistbyresourcegroup_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclusterslistbyresourcegroup_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclusterslistbyresourcegroup_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclusterslistbyresourcegroup_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclusterslistbysubscription_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclusterslistbysubscription_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclusterslistbysubscription_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclusterslistbysubscription_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersstart_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersstart_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersstart_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersstart_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersstatus_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersstatus_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersstatus_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersstatus_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersupdate_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersupdate_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandraclustersupdate_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandraclustersupdate_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacenterscreateupdate_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacenterscreateupdate_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacenterscreateupdate_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacenterscreateupdate_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacentersdelete_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacentersdelete_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacentersdelete_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacentersdelete_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacentersget_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacentersget_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacentersget_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacentersget_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacenterslist_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacenterslist_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacenterslist_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacenterslist_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacentersupdate_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacentersupdate_autorest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/method_cassandradatacentersupdate_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/method_cassandradatacentersupdate_autorest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_authenticationmethodldapproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_authenticationmethodldapproperties.go new file mode 100644 index 0000000000000..c7a9f432d0f10 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_authenticationmethodldapproperties.go @@ -0,0 +1,15 @@ +package managedcassandras + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type AuthenticationMethodLdapProperties struct { + ConnectionTimeoutInMs *int64 `json:"connectionTimeoutInMs,omitempty"` + SearchBaseDistinguishedName *string `json:"searchBaseDistinguishedName,omitempty"` + SearchFilterTemplate *string `json:"searchFilterTemplate,omitempty"` + ServerCertificates *[]Certificate `json:"serverCertificates,omitempty"` + ServerHostname *string `json:"serverHostname,omitempty"` + ServerPort *int64 `json:"serverPort,omitempty"` + ServiceUserDistinguishedName *string `json:"serviceUserDistinguishedName,omitempty"` + ServiceUserPassword *string `json:"serviceUserPassword,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_cassandraclusterpublicstatus.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraclusterpublicstatus.go similarity index 86% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_cassandraclusterpublicstatus.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraclusterpublicstatus.go index c3e660cb5002e..84f74679736d0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_cassandraclusterpublicstatus.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraclusterpublicstatus.go @@ -7,5 +7,6 @@ type CassandraClusterPublicStatus struct { ConnectionErrors *[]ConnectionError `json:"connectionErrors,omitempty"` DataCenters *[]CassandraClusterPublicStatusDataCentersInlined `json:"dataCenters,omitempty"` ETag *string `json:"eTag,omitempty"` + Errors *[]CassandraError `json:"errors,omitempty"` ReaperStatus *ManagedCassandraReaperStatus `json:"reaperStatus,omitempty"` } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlined.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlined.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlined.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlined.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlinednodesinlined.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlinednodesinlined.go similarity index 94% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlinednodesinlined.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlinednodesinlined.go index a82d6d75934fd..56fe106a00cf1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlinednodesinlined.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraclusterpublicstatusdatacentersinlinednodesinlined.go @@ -5,6 +5,7 @@ package managedcassandras type CassandraClusterPublicStatusDataCentersInlinedNodesInlined struct { Address *string `json:"address,omitempty"` + CassandraProcessStatus *string `json:"cassandraProcessStatus,omitempty"` CpuUsage *float64 `json:"cpuUsage,omitempty"` DiskFreeKB *int64 `json:"diskFreeKB,omitempty"` DiskUsedKB *int64 `json:"diskUsedKB,omitempty"` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraerror.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraerror.go new file mode 100644 index 0000000000000..5fb8d8d739dcf --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_cassandraerror.go @@ -0,0 +1,11 @@ +package managedcassandras + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CassandraError struct { + AdditionalErrorInfo *string `json:"additionalErrorInfo,omitempty"` + Code *string `json:"code,omitempty"` + Message *string `json:"message,omitempty"` + Target *string `json:"target,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_certificate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_certificate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_certificate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_certificate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_clusterresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_clusterresource.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_clusterresource.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_clusterresource.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_clusterresourceproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_clusterresourceproperties.go similarity index 95% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_clusterresourceproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_clusterresourceproperties.go index c6e3f3775ef1d..f21acba43e743 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_clusterresourceproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_clusterresourceproperties.go @@ -17,6 +17,7 @@ type ClusterResourceProperties struct { HoursBetweenBackups *int64 `json:"hoursBetweenBackups,omitempty"` InitialCassandraAdminPassword *string `json:"initialCassandraAdminPassword,omitempty"` PrometheusEndpoint *SeedNode `json:"prometheusEndpoint,omitempty"` + ProvisionError *CassandraError `json:"provisionError,omitempty"` ProvisioningState *ManagedCassandraProvisioningState `json:"provisioningState,omitempty"` RepairEnabled *bool `json:"repairEnabled,omitempty"` RestoreFromBackupId *string `json:"restoreFromBackupId,omitempty"` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_commandoutput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_commandoutput.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_commandoutput.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_commandoutput.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_commandpostbody.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_commandpostbody.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_commandpostbody.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_commandpostbody.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_connectionerror.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_connectionerror.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_connectionerror.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_connectionerror.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_datacenterresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_datacenterresource.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_datacenterresource.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_datacenterresource.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_datacenterresourceproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_datacenterresourceproperties.go similarity index 53% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_datacenterresourceproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_datacenterresourceproperties.go index df4a1fe277c1e..3c2a79024d92c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_datacenterresourceproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_datacenterresourceproperties.go @@ -4,16 +4,19 @@ package managedcassandras // Licensed under the MIT License. See NOTICE.txt in the project root for license information. type DataCenterResourceProperties struct { - AvailabilityZone *bool `json:"availabilityZone,omitempty"` - BackupStorageCustomerKeyUri *string `json:"backupStorageCustomerKeyUri,omitempty"` - Base64EncodedCassandraYamlFragment *string `json:"base64EncodedCassandraYamlFragment,omitempty"` - DataCenterLocation *string `json:"dataCenterLocation,omitempty"` - DelegatedSubnetId *string `json:"delegatedSubnetId,omitempty"` - DiskCapacity *int64 `json:"diskCapacity,omitempty"` - DiskSku *string `json:"diskSku,omitempty"` - ManagedDiskCustomerKeyUri *string `json:"managedDiskCustomerKeyUri,omitempty"` - NodeCount *int64 `json:"nodeCount,omitempty"` - ProvisioningState *ManagedCassandraProvisioningState `json:"provisioningState,omitempty"` - SeedNodes *[]SeedNode `json:"seedNodes,omitempty"` - Sku *string `json:"sku,omitempty"` + AuthenticationMethodLdapProperties *AuthenticationMethodLdapProperties `json:"authenticationMethodLdapProperties,omitempty"` + AvailabilityZone *bool `json:"availabilityZone,omitempty"` + BackupStorageCustomerKeyUri *string `json:"backupStorageCustomerKeyUri,omitempty"` + Base64EncodedCassandraYamlFragment *string `json:"base64EncodedCassandraYamlFragment,omitempty"` + DataCenterLocation *string `json:"dataCenterLocation,omitempty"` + Deallocated *bool `json:"deallocated,omitempty"` + DelegatedSubnetId *string `json:"delegatedSubnetId,omitempty"` + DiskCapacity *int64 `json:"diskCapacity,omitempty"` + DiskSku *string `json:"diskSku,omitempty"` + ManagedDiskCustomerKeyUri *string `json:"managedDiskCustomerKeyUri,omitempty"` + NodeCount *int64 `json:"nodeCount,omitempty"` + ProvisionError *CassandraError `json:"provisionError,omitempty"` + ProvisioningState *ManagedCassandraProvisioningState `json:"provisioningState,omitempty"` + SeedNodes *[]SeedNode `json:"seedNodes,omitempty"` + Sku *string `json:"sku,omitempty"` } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_listclusters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_listclusters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_listclusters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_listclusters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_listdatacenters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_listdatacenters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_listdatacenters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_listdatacenters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_managedcassandrareaperstatus.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_managedcassandrareaperstatus.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_managedcassandrareaperstatus.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_managedcassandrareaperstatus.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_seednode.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_seednode.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/model_seednode.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/model_seednode.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/version.go index a3dfed28657a8..04f8a2e8f9c1a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2022-05-15" +const defaultApiVersion = "2023-04-15" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/managedcassandras/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datafactory/2018-06-01/factories/model_factoryrepoconfiguration.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datafactory/2018-06-01/factories/model_factoryrepoconfiguration.go index c135416de0be5..37176cae8665b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datafactory/2018-06-01/factories/model_factoryrepoconfiguration.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datafactory/2018-06-01/factories/model_factoryrepoconfiguration.go @@ -12,7 +12,7 @@ import ( type FactoryRepoConfiguration interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFactoryRepoConfigurationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_authcredentials.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_authcredentials.go index 2880b2e1cd59a..8be823b957b95 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_authcredentials.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_authcredentials.go @@ -12,7 +12,7 @@ import ( type AuthCredentials interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAuthCredentialsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_azurebackuprestorerequest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_azurebackuprestorerequest.go index 71406f865c71f..3b5348e6cdfa5 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_azurebackuprestorerequest.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_azurebackuprestorerequest.go @@ -12,7 +12,7 @@ import ( type AzureBackupRestoreRequest interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAzureBackupRestoreRequestImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_datastoreparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_datastoreparameters.go index fca77dbde56b6..ee57cd90fa32c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_datastoreparameters.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_datastoreparameters.go @@ -12,7 +12,7 @@ import ( type DataStoreParameters interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDataStoreParametersImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_itemlevelrestorecriteria.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_itemlevelrestorecriteria.go index 710b63b35159e..9745f3102fea6 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_itemlevelrestorecriteria.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_itemlevelrestorecriteria.go @@ -12,7 +12,7 @@ import ( type ItemLevelRestoreCriteria interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawItemLevelRestoreCriteriaImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_operationextendedinfo.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_operationextendedinfo.go index 92418b3351e25..53581d9a9e1c7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_operationextendedinfo.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_operationextendedinfo.go @@ -12,7 +12,7 @@ import ( type OperationExtendedInfo interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawOperationExtendedInfoImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_restoretargetinfobase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_restoretargetinfobase.go index 9458ed9da35b2..ce31702dc783b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_restoretargetinfobase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backupinstances/model_restoretargetinfobase.go @@ -12,7 +12,7 @@ import ( type RestoreTargetInfoBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRestoreTargetInfoBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_backupcriteria.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_backupcriteria.go index 723eae785f66e..ae5e3acf7f996 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_backupcriteria.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_backupcriteria.go @@ -12,7 +12,7 @@ import ( type BackupCriteria interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawBackupCriteriaImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_backupparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_backupparameters.go index cc0e1cb3dcd16..2cd46e5bbe7d0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_backupparameters.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_backupparameters.go @@ -12,7 +12,7 @@ import ( type BackupParameters interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawBackupParametersImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_basebackuppolicy.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_basebackuppolicy.go index 9b3aae01624a6..5da7096ec0c88 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_basebackuppolicy.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_basebackuppolicy.go @@ -12,7 +12,7 @@ import ( type BaseBackupPolicy interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawBaseBackupPolicyImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_basepolicyrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_basepolicyrule.go index 66828ff394035..2434dc31521d3 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_basepolicyrule.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_basepolicyrule.go @@ -12,7 +12,7 @@ import ( type BasePolicyRule interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawBasePolicyRuleImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_copyoption.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_copyoption.go index bbda441660b06..8015dcb6bfd91 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_copyoption.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_copyoption.go @@ -12,7 +12,7 @@ import ( type CopyOption interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawCopyOptionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_deleteoption.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_deleteoption.go index 168171b65f0ea..d8ac5dc7882f1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_deleteoption.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_deleteoption.go @@ -12,7 +12,7 @@ import ( type DeleteOption interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDeleteOptionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_triggercontext.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_triggercontext.go index e482a943c928d..866643b9b2128 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_triggercontext.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dataprotection/2022-04-01/backuppolicies/model_triggercontext.go @@ -12,7 +12,7 @@ import ( type TriggerContext interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTriggerContextImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datashare/2019-11-01/dataset/model_dataset.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datashare/2019-11-01/dataset/model_dataset.go index 30555ef7ed33d..1b6be39fc676f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datashare/2019-11-01/dataset/model_dataset.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datashare/2019-11-01/dataset/model_dataset.go @@ -12,7 +12,7 @@ import ( type DataSet interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDataSetImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datashare/2019-11-01/synchronizationsetting/model_synchronizationsetting.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datashare/2019-11-01/synchronizationsetting/model_synchronizationsetting.go index 592471e0cec49..e8dfdd22f3942 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datashare/2019-11-01/synchronizationsetting/model_synchronizationsetting.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/datashare/2019-11-01/synchronizationsetting/model_synchronizationsetting.go @@ -12,7 +12,7 @@ import ( type SynchronizationSetting interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSynchronizationSettingImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/digitaltwins/2023-01-31/endpoints/model_digitaltwinsendpointresourceproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/digitaltwins/2023-01-31/endpoints/model_digitaltwinsendpointresourceproperties.go index 57637d5d0957a..e5658b7bbb2c2 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/digitaltwins/2023-01-31/endpoints/model_digitaltwinsendpointresourceproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/digitaltwins/2023-01-31/endpoints/model_digitaltwinsendpointresourceproperties.go @@ -12,7 +12,7 @@ import ( type DigitalTwinsEndpointResourceProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDigitalTwinsEndpointResourcePropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/digitaltwins/2023-01-31/timeseriesdatabaseconnections/model_timeseriesdatabaseconnectionproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/digitaltwins/2023-01-31/timeseriesdatabaseconnections/model_timeseriesdatabaseconnectionproperties.go index bdc2b2dc7f1d4..d0f36d4a49307 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/digitaltwins/2023-01-31/timeseriesdatabaseconnections/model_timeseriesdatabaseconnectionproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/digitaltwins/2023-01-31/timeseriesdatabaseconnections/model_timeseriesdatabaseconnectionproperties.go @@ -12,7 +12,7 @@ import ( type TimeSeriesDatabaseConnectionProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTimeSeriesDatabaseConnectionPropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/README.md index 131c3b69a3763..637023a3c1c93 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `DnsClient.DnsResourceReferenceGetByTargetResources` +### Example Usage: `DnsClient.ResourceReferenceGetByTargetResources` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := dns.DnsResourceReferenceRequest{ } -read, err := client.DnsResourceReferenceGetByTargetResources(ctx, id, payload) +read, err := client.ResourceReferenceGetByTargetResources(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/method_dnsresourcereferencegetbytargetresources.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/method_resourcereferencegetbytargetresources.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/method_dnsresourcereferencegetbytargetresources.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/method_resourcereferencegetbytargetresources.go index 41f25efdd5923..ac04e0794ed7e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/method_dnsresourcereferencegetbytargetresources.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/dns/2018-05-01/dns/method_resourcereferencegetbytargetresources.go @@ -13,14 +13,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type DnsResourceReferenceGetByTargetResourcesOperationResponse struct { +type ResourceReferenceGetByTargetResourcesOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *DnsResourceReferenceResult } -// DnsResourceReferenceGetByTargetResources ... -func (c DnsClient) DnsResourceReferenceGetByTargetResources(ctx context.Context, id commonids.SubscriptionId, input DnsResourceReferenceRequest) (result DnsResourceReferenceGetByTargetResourcesOperationResponse, err error) { +// ResourceReferenceGetByTargetResources ... +func (c DnsClient) ResourceReferenceGetByTargetResources(ctx context.Context, id commonids.SubscriptionId, input DnsResourceReferenceRequest) (result ResourceReferenceGetByTargetResourcesOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/domains/model_inputschemamapping.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/domains/model_inputschemamapping.go index 7dd005669c4db..2b57ba9fbd0e1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/domains/model_inputschemamapping.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/domains/model_inputschemamapping.go @@ -12,7 +12,7 @@ import ( type InputSchemaMapping interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawInputSchemaMappingImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_advancedfilter.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_advancedfilter.go index 312dc9053adcd..9b667278529c6 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_advancedfilter.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_advancedfilter.go @@ -12,7 +12,7 @@ import ( type AdvancedFilter interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAdvancedFilterImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_deadletterdestination.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_deadletterdestination.go index 9aa848d0e0626..b445f359655b1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_deadletterdestination.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_deadletterdestination.go @@ -12,7 +12,7 @@ import ( type DeadLetterDestination interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDeadLetterDestinationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_deliveryattributemapping.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_deliveryattributemapping.go index ca730fcc6b477..317188346aa1b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_deliveryattributemapping.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_deliveryattributemapping.go @@ -12,7 +12,7 @@ import ( type DeliveryAttributeMapping interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDeliveryAttributeMappingImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_eventsubscriptiondestination.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_eventsubscriptiondestination.go index c593c03bd05a9..b190369064fe0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_eventsubscriptiondestination.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/eventsubscriptions/model_eventsubscriptiondestination.go @@ -12,7 +12,7 @@ import ( type EventSubscriptionDestination interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEventSubscriptionDestinationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/topics/model_inputschemamapping.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/topics/model_inputschemamapping.go index bb65fe5cbc8bb..ea5cba6d2c9ba 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/topics/model_inputschemamapping.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/eventgrid/2022-06-15/topics/model_inputschemamapping.go @@ -12,7 +12,7 @@ import ( type InputSchemaMapping interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawInputSchemaMappingImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/frontdoor/2020-05-01/frontdoors/model_routeconfiguration.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/frontdoor/2020-05-01/frontdoors/model_routeconfiguration.go index 9eaff03c96b0f..b619f91375528 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/frontdoor/2020-05-01/frontdoors/model_routeconfiguration.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/frontdoor/2020-05-01/frontdoors/model_routeconfiguration.go @@ -12,7 +12,7 @@ import ( type RouteConfiguration interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRouteConfigurationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/README.md index a541627083fa0..87710cf5f4d6c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `PrivateLinkScopesClient.PrivateLinkScopesCreateOrUpdate` +### Example Usage: `PrivateLinkScopesClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := privatelinkscopes.HybridComputePrivateLinkScope{ } -read, err := client.PrivateLinkScopesCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,25 +41,25 @@ if model := read.Model; model != nil { ``` -### Example Usage: `PrivateLinkScopesClient.PrivateLinkScopesDelete` +### Example Usage: `PrivateLinkScopesClient.Delete` ```go ctx := context.TODO() id := privatelinkscopes.NewProviderPrivateLinkScopeID("12345678-1234-9876-4563-123456789012", "example-resource-group", "privateLinkScopeValue") -if err := client.PrivateLinkScopesDeleteThenPoll(ctx, id); err != nil { +if err := client.DeleteThenPoll(ctx, id); err != nil { // handle the error } ``` -### Example Usage: `PrivateLinkScopesClient.PrivateLinkScopesGet` +### Example Usage: `PrivateLinkScopesClient.Get` ```go ctx := context.TODO() id := privatelinkscopes.NewProviderPrivateLinkScopeID("12345678-1234-9876-4563-123456789012", "example-resource-group", "privateLinkScopeValue") -read, err := client.PrivateLinkScopesGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -69,13 +69,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `PrivateLinkScopesClient.PrivateLinkScopesGetValidationDetails` +### Example Usage: `PrivateLinkScopesClient.GetValidationDetails` ```go ctx := context.TODO() id := privatelinkscopes.NewPrivateLinkScopeID("12345678-1234-9876-4563-123456789012", "locationValue", "privateLinkScopeIdValue") -read, err := client.PrivateLinkScopesGetValidationDetails(ctx, id) +read, err := client.GetValidationDetails(ctx, id) if err != nil { // handle the error } @@ -85,13 +85,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `PrivateLinkScopesClient.PrivateLinkScopesGetValidationDetailsForMachine` +### Example Usage: `PrivateLinkScopesClient.GetValidationDetailsForMachine` ```go ctx := context.TODO() id := privatelinkscopes.NewMachineID("12345678-1234-9876-4563-123456789012", "example-resource-group", "machineValue") -read, err := client.PrivateLinkScopesGetValidationDetailsForMachine(ctx, id) +read, err := client.GetValidationDetailsForMachine(ctx, id) if err != nil { // handle the error } @@ -101,14 +101,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `PrivateLinkScopesClient.PrivateLinkScopesList` +### Example Usage: `PrivateLinkScopesClient.List` ```go ctx := context.TODO() id := privatelinkscopes.NewSubscriptionID("12345678-1234-9876-4563-123456789012") -// alternatively `client.PrivateLinkScopesList(ctx, id)` can be used to do batched pagination -items, err := client.PrivateLinkScopesListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -118,14 +118,14 @@ for _, item := range items { ``` -### Example Usage: `PrivateLinkScopesClient.PrivateLinkScopesListByResourceGroup` +### Example Usage: `PrivateLinkScopesClient.ListByResourceGroup` ```go ctx := context.TODO() id := privatelinkscopes.NewResourceGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group") -// alternatively `client.PrivateLinkScopesListByResourceGroup(ctx, id)` can be used to do batched pagination -items, err := client.PrivateLinkScopesListByResourceGroupComplete(ctx, id) +// alternatively `client.ListByResourceGroup(ctx, id)` can be used to do batched pagination +items, err := client.ListByResourceGroupComplete(ctx, id) if err != nil { // handle the error } @@ -135,7 +135,7 @@ for _, item := range items { ``` -### Example Usage: `PrivateLinkScopesClient.PrivateLinkScopesUpdateTags` +### Example Usage: `PrivateLinkScopesClient.UpdateTags` ```go ctx := context.TODO() @@ -146,7 +146,7 @@ payload := privatelinkscopes.TagsResource{ } -read, err := client.PrivateLinkScopesUpdateTags(ctx, id, payload) +read, err := client.UpdateTags(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopescreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_createorupdate.go similarity index 75% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopescreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_createorupdate.go index 0ac5e8dd2363f..0636b64bcf2f1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopescreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_createorupdate.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PrivateLinkScopesCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *HybridComputePrivateLinkScope } -// PrivateLinkScopesCreateOrUpdate ... -func (c PrivateLinkScopesClient) PrivateLinkScopesCreateOrUpdate(ctx context.Context, id ProviderPrivateLinkScopeId, input HybridComputePrivateLinkScope) (result PrivateLinkScopesCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c PrivateLinkScopesClient) CreateOrUpdate(ctx context.Context, id ProviderPrivateLinkScopeId, input HybridComputePrivateLinkScope) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_delete.go new file mode 100644 index 0000000000000..59dfe5ecb40a7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_delete.go @@ -0,0 +1,71 @@ +package privatelinkscopes + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Delete ... +func (c PrivateLinkScopesClient) Delete(ctx context.Context, id ProviderPrivateLinkScopeId) (result DeleteOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusNoContent, + http.StatusOK, + }, + HttpMethod: http.MethodDelete, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// DeleteThenPoll performs Delete then polls until it's completed +func (c PrivateLinkScopesClient) DeleteThenPoll(ctx context.Context, id ProviderPrivateLinkScopeId) error { + result, err := c.Delete(ctx, id) + if err != nil { + return fmt.Errorf("performing Delete: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Delete: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_get.go similarity index 79% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_get.go index ef8815df2730b..0f20624eb1f42 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PrivateLinkScopesGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *HybridComputePrivateLinkScope } -// PrivateLinkScopesGet ... -func (c PrivateLinkScopesClient) PrivateLinkScopesGet(ctx context.Context, id ProviderPrivateLinkScopeId) (result PrivateLinkScopesGetOperationResponse, err error) { +// Get ... +func (c PrivateLinkScopesClient) Get(ctx context.Context, id ProviderPrivateLinkScopeId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesgetvalidationdetails.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_getvalidationdetails.go similarity index 75% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesgetvalidationdetails.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_getvalidationdetails.go index 33e15c3275ac4..a6bcf91961041 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesgetvalidationdetails.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_getvalidationdetails.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PrivateLinkScopesGetValidationDetailsOperationResponse struct { +type GetValidationDetailsOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *PrivateLinkScopeValidationDetails } -// PrivateLinkScopesGetValidationDetails ... -func (c PrivateLinkScopesClient) PrivateLinkScopesGetValidationDetails(ctx context.Context, id PrivateLinkScopeId) (result PrivateLinkScopesGetValidationDetailsOperationResponse, err error) { +// GetValidationDetails ... +func (c PrivateLinkScopesClient) GetValidationDetails(ctx context.Context, id PrivateLinkScopeId) (result GetValidationDetailsOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesgetvalidationdetailsformachine.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_getvalidationdetailsformachine.go similarity index 74% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesgetvalidationdetailsformachine.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_getvalidationdetailsformachine.go index 1d30371bbf25d..a82f22a97f512 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesgetvalidationdetailsformachine.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_getvalidationdetailsformachine.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PrivateLinkScopesGetValidationDetailsForMachineOperationResponse struct { +type GetValidationDetailsForMachineOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *PrivateLinkScopeValidationDetails } -// PrivateLinkScopesGetValidationDetailsForMachine ... -func (c PrivateLinkScopesClient) PrivateLinkScopesGetValidationDetailsForMachine(ctx context.Context, id MachineId) (result PrivateLinkScopesGetValidationDetailsForMachineOperationResponse, err error) { +// GetValidationDetailsForMachine ... +func (c PrivateLinkScopesClient) GetValidationDetailsForMachine(ctx context.Context, id MachineId) (result GetValidationDetailsForMachineOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopeslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_list.go similarity index 58% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopeslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_list.go index 299088d7b8682..d12469ca5785f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopeslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_list.go @@ -13,18 +13,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PrivateLinkScopesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]HybridComputePrivateLinkScope } -type PrivateLinkScopesListCompleteResult struct { +type ListCompleteResult struct { Items []HybridComputePrivateLinkScope } -// PrivateLinkScopesList ... -func (c PrivateLinkScopesClient) PrivateLinkScopesList(ctx context.Context, id commonids.SubscriptionId) (result PrivateLinkScopesListOperationResponse, err error) { +// List ... +func (c PrivateLinkScopesClient) List(ctx context.Context, id commonids.SubscriptionId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -61,16 +61,16 @@ func (c PrivateLinkScopesClient) PrivateLinkScopesList(ctx context.Context, id c return } -// PrivateLinkScopesListComplete retrieves all the results into a single object -func (c PrivateLinkScopesClient) PrivateLinkScopesListComplete(ctx context.Context, id commonids.SubscriptionId) (PrivateLinkScopesListCompleteResult, error) { - return c.PrivateLinkScopesListCompleteMatchingPredicate(ctx, id, HybridComputePrivateLinkScopeOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c PrivateLinkScopesClient) ListComplete(ctx context.Context, id commonids.SubscriptionId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, HybridComputePrivateLinkScopeOperationPredicate{}) } -// PrivateLinkScopesListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c PrivateLinkScopesClient) PrivateLinkScopesListCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate HybridComputePrivateLinkScopeOperationPredicate) (result PrivateLinkScopesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c PrivateLinkScopesClient) ListCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate HybridComputePrivateLinkScopeOperationPredicate) (result ListCompleteResult, err error) { items := make([]HybridComputePrivateLinkScope, 0) - resp, err := c.PrivateLinkScopesList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -83,7 +83,7 @@ func (c PrivateLinkScopesClient) PrivateLinkScopesListCompleteMatchingPredicate( } } - result = PrivateLinkScopesListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopeslistbyresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_listbyresourcegroup.go similarity index 53% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopeslistbyresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_listbyresourcegroup.go index 26fa7a8d9f222..a8d282f78a413 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopeslistbyresourcegroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_listbyresourcegroup.go @@ -13,18 +13,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PrivateLinkScopesListByResourceGroupOperationResponse struct { +type ListByResourceGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]HybridComputePrivateLinkScope } -type PrivateLinkScopesListByResourceGroupCompleteResult struct { +type ListByResourceGroupCompleteResult struct { Items []HybridComputePrivateLinkScope } -// PrivateLinkScopesListByResourceGroup ... -func (c PrivateLinkScopesClient) PrivateLinkScopesListByResourceGroup(ctx context.Context, id commonids.ResourceGroupId) (result PrivateLinkScopesListByResourceGroupOperationResponse, err error) { +// ListByResourceGroup ... +func (c PrivateLinkScopesClient) ListByResourceGroup(ctx context.Context, id commonids.ResourceGroupId) (result ListByResourceGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -61,16 +61,16 @@ func (c PrivateLinkScopesClient) PrivateLinkScopesListByResourceGroup(ctx contex return } -// PrivateLinkScopesListByResourceGroupComplete retrieves all the results into a single object -func (c PrivateLinkScopesClient) PrivateLinkScopesListByResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId) (PrivateLinkScopesListByResourceGroupCompleteResult, error) { - return c.PrivateLinkScopesListByResourceGroupCompleteMatchingPredicate(ctx, id, HybridComputePrivateLinkScopeOperationPredicate{}) +// ListByResourceGroupComplete retrieves all the results into a single object +func (c PrivateLinkScopesClient) ListByResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId) (ListByResourceGroupCompleteResult, error) { + return c.ListByResourceGroupCompleteMatchingPredicate(ctx, id, HybridComputePrivateLinkScopeOperationPredicate{}) } -// PrivateLinkScopesListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c PrivateLinkScopesClient) PrivateLinkScopesListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate HybridComputePrivateLinkScopeOperationPredicate) (result PrivateLinkScopesListByResourceGroupCompleteResult, err error) { +// ListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c PrivateLinkScopesClient) ListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate HybridComputePrivateLinkScopeOperationPredicate) (result ListByResourceGroupCompleteResult, err error) { items := make([]HybridComputePrivateLinkScope, 0) - resp, err := c.PrivateLinkScopesListByResourceGroup(ctx, id) + resp, err := c.ListByResourceGroup(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -83,7 +83,7 @@ func (c PrivateLinkScopesClient) PrivateLinkScopesListByResourceGroupCompleteMat } } - result = PrivateLinkScopesListByResourceGroupCompleteResult{ + result = ListByResourceGroupCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesdelete.go deleted file mode 100644 index 1373f46c44846..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesdelete.go +++ /dev/null @@ -1,71 +0,0 @@ -package privatelinkscopes - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" - "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type PrivateLinkScopesDeleteOperationResponse struct { - Poller pollers.Poller - HttpResponse *http.Response - OData *odata.OData -} - -// PrivateLinkScopesDelete ... -func (c PrivateLinkScopesClient) PrivateLinkScopesDelete(ctx context.Context, id ProviderPrivateLinkScopeId) (result PrivateLinkScopesDeleteOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusAccepted, - http.StatusNoContent, - http.StatusOK, - }, - HttpMethod: http.MethodDelete, - Path: id.ID(), - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.Execute(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) - if err != nil { - return - } - - return -} - -// PrivateLinkScopesDeleteThenPoll performs PrivateLinkScopesDelete then polls until it's completed -func (c PrivateLinkScopesClient) PrivateLinkScopesDeleteThenPoll(ctx context.Context, id ProviderPrivateLinkScopeId) error { - result, err := c.PrivateLinkScopesDelete(ctx, id) - if err != nil { - return fmt.Errorf("performing PrivateLinkScopesDelete: %+v", err) - } - - if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after PrivateLinkScopesDelete: %+v", err) - } - - return nil -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesupdatetags.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_updatetags.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesupdatetags.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_updatetags.go index 67442337c2b31..0157ed00349e0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_privatelinkscopesupdatetags.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/hybridcompute/2022-11-10/privatelinkscopes/method_updatetags.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type PrivateLinkScopesUpdateTagsOperationResponse struct { +type UpdateTagsOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *HybridComputePrivateLinkScope } -// PrivateLinkScopesUpdateTags ... -func (c PrivateLinkScopesClient) PrivateLinkScopesUpdateTags(ctx context.Context, id ProviderPrivateLinkScopeId, input TagsResource) (result PrivateLinkScopesUpdateTagsOperationResponse, err error) { +// UpdateTags ... +func (c PrivateLinkScopesClient) UpdateTags(ctx context.Context, id ProviderPrivateLinkScopeId, input TagsResource) (result UpdateTagsOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-03-01/metricalerts/model_metricalertcriteria.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-03-01/metricalerts/model_metricalertcriteria.go index 4c9448d356d6f..6f9fc6bbbd214 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-03-01/metricalerts/model_metricalertcriteria.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-03-01/metricalerts/model_metricalertcriteria.go @@ -12,7 +12,7 @@ import ( type MetricAlertCriteria interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawMetricAlertCriteriaImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-03-01/metricalerts/model_multimetriccriteria.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-03-01/metricalerts/model_multimetriccriteria.go index e53c58297bc50..2a0693f313100 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-03-01/metricalerts/model_multimetriccriteria.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-03-01/metricalerts/model_multimetriccriteria.go @@ -12,7 +12,7 @@ import ( type MultiMetricCriteria interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawMultiMetricCriteriaImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-04-16/scheduledqueryrules/model_action.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-04-16/scheduledqueryrules/model_action.go index 6d38c4097e004..e84613de58a4b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-04-16/scheduledqueryrules/model_action.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/insights/2018-04-16/scheduledqueryrules/model_action.go @@ -12,7 +12,7 @@ import ( type Action interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawActionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/kusto/2023-05-02/databases/model_database.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/kusto/2023-05-02/databases/model_database.go index 675c8ac4dd5d1..2f3c58a1325d9 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/kusto/2023-05-02/databases/model_database.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/kusto/2023-05-02/databases/model_database.go @@ -12,7 +12,7 @@ import ( type Database interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDatabaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/kusto/2023-05-02/dataconnections/model_dataconnection.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/kusto/2023-05-02/dataconnections/model_dataconnection.go index a9ff96431d490..d8a779e662fb9 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/kusto/2023-05-02/dataconnections/model_dataconnection.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/kusto/2023-05-02/dataconnections/model_dataconnection.go @@ -12,7 +12,7 @@ import ( type DataConnection interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDataConnectionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastore.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastore.go index 426ae668c5b4d..776b2b0a745f2 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastore.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastore.go @@ -12,7 +12,7 @@ import ( type Datastore interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDatastoreImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastorecredentials.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastorecredentials.go index 569e26921f898..06a4bb3f51ba8 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastorecredentials.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastorecredentials.go @@ -12,7 +12,7 @@ import ( type DatastoreCredentials interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDatastoreCredentialsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastoresecrets.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastoresecrets.go index 1ab8207f08de1..117ac723e8ce1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastoresecrets.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/datastore/model_datastoresecrets.go @@ -12,7 +12,7 @@ import ( type DatastoreSecrets interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDatastoreSecretsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/machinelearningcomputes/model_compute.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/machinelearningcomputes/model_compute.go index 927b9fc83cc2a..36f9d37457de7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/machinelearningcomputes/model_compute.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/machinelearningcomputes/model_compute.go @@ -12,7 +12,7 @@ import ( type Compute interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawComputeImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/machinelearningcomputes/model_computesecrets.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/machinelearningcomputes/model_computesecrets.go index 407192afe0e5a..9df90b89da3bb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/machinelearningcomputes/model_computesecrets.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/machinelearningservices/2023-04-01/machinelearningcomputes/model_computesecrets.go @@ -12,7 +12,7 @@ import ( type ComputeSecrets interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawComputeSecretsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mariadb/2018-06-01/servers/model_serverpropertiesforcreate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mariadb/2018-06-01/servers/model_serverpropertiesforcreate.go index ec427ee27c48a..84868e2551eba 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mariadb/2018-06-01/servers/model_serverpropertiesforcreate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mariadb/2018-06-01/servers/model_serverpropertiesforcreate.go @@ -12,7 +12,7 @@ import ( type ServerPropertiesForCreate interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawServerPropertiesForCreateImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/README.md index 11a9b053d5192..8f4e013480d4e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `AccountFiltersClient.AccountFiltersCreateOrUpdate` +### Example Usage: `AccountFiltersClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := accountfilters.AccountFilter{ } -read, err := client.AccountFiltersCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,13 +41,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AccountFiltersClient.AccountFiltersDelete` +### Example Usage: `AccountFiltersClient.Delete` ```go ctx := context.TODO() id := accountfilters.NewAccountFilterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "accountFilterValue") -read, err := client.AccountFiltersDelete(ctx, id) +read, err := client.Delete(ctx, id) if err != nil { // handle the error } @@ -57,13 +57,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AccountFiltersClient.AccountFiltersGet` +### Example Usage: `AccountFiltersClient.Get` ```go ctx := context.TODO() id := accountfilters.NewAccountFilterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "accountFilterValue") -read, err := client.AccountFiltersGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -73,14 +73,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AccountFiltersClient.AccountFiltersList` +### Example Usage: `AccountFiltersClient.List` ```go ctx := context.TODO() id := accountfilters.NewMediaServiceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue") -// alternatively `client.AccountFiltersList(ctx, id)` can be used to do batched pagination -items, err := client.AccountFiltersListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -90,7 +90,7 @@ for _, item := range items { ``` -### Example Usage: `AccountFiltersClient.AccountFiltersUpdate` +### Example Usage: `AccountFiltersClient.Update` ```go ctx := context.TODO() @@ -101,7 +101,7 @@ payload := accountfilters.AccountFilter{ } -read, err := client.AccountFiltersUpdate(ctx, id, payload) +read, err := client.Update(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfilterscreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_createorupdate.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfilterscreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_createorupdate.go index c5d8c2c6672cc..11ca7904b4fd9 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfilterscreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_createorupdate.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AccountFilter } -// AccountFiltersCreateOrUpdate ... -func (c AccountFiltersClient) AccountFiltersCreateOrUpdate(ctx context.Context, id AccountFilterId, input AccountFilter) (result AccountFiltersCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c AccountFiltersClient) CreateOrUpdate(ctx context.Context, id AccountFilterId, input AccountFilter) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_delete.go similarity index 78% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_delete.go index adbb2a159092d..135b80326daf0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_delete.go @@ -11,13 +11,13 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersDeleteOperationResponse struct { +type DeleteOperationResponse struct { HttpResponse *http.Response OData *odata.OData } -// AccountFiltersDelete ... -func (c AccountFiltersClient) AccountFiltersDelete(ctx context.Context, id AccountFilterId) (result AccountFiltersDeleteOperationResponse, err error) { +// Delete ... +func (c AccountFiltersClient) Delete(ctx context.Context, id AccountFilterId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_get.go similarity index 80% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_get.go index 4ee7d84d5999c..7dbc6aa511592 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AccountFilter } -// AccountFiltersGet ... -func (c AccountFiltersClient) AccountFiltersGet(ctx context.Context, id AccountFilterId) (result AccountFiltersGetOperationResponse, err error) { +// Get ... +func (c AccountFiltersClient) Get(ctx context.Context, id AccountFilterId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfilterslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_list.go similarity index 57% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfilterslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_list.go index a820f098ce77a..23d8b21febb42 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfilterslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_list.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]AccountFilter } -type AccountFiltersListCompleteResult struct { +type ListCompleteResult struct { Items []AccountFilter } -// AccountFiltersList ... -func (c AccountFiltersClient) AccountFiltersList(ctx context.Context, id MediaServiceId) (result AccountFiltersListOperationResponse, err error) { +// List ... +func (c AccountFiltersClient) List(ctx context.Context, id MediaServiceId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c AccountFiltersClient) AccountFiltersList(ctx context.Context, id MediaSe return } -// AccountFiltersListComplete retrieves all the results into a single object -func (c AccountFiltersClient) AccountFiltersListComplete(ctx context.Context, id MediaServiceId) (AccountFiltersListCompleteResult, error) { - return c.AccountFiltersListCompleteMatchingPredicate(ctx, id, AccountFilterOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c AccountFiltersClient) ListComplete(ctx context.Context, id MediaServiceId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, AccountFilterOperationPredicate{}) } -// AccountFiltersListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c AccountFiltersClient) AccountFiltersListCompleteMatchingPredicate(ctx context.Context, id MediaServiceId, predicate AccountFilterOperationPredicate) (result AccountFiltersListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c AccountFiltersClient) ListCompleteMatchingPredicate(ctx context.Context, id MediaServiceId, predicate AccountFilterOperationPredicate) (result ListCompleteResult, err error) { items := make([]AccountFilter, 0) - resp, err := c.AccountFiltersList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c AccountFiltersClient) AccountFiltersListCompleteMatchingPredicate(ctx co } } - result = AccountFiltersListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_update.go similarity index 79% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_update.go index e96384546a3e0..7ccf1739e939f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_update.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersUpdateOperationResponse struct { +type UpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AccountFilter } -// AccountFiltersUpdate ... -func (c AccountFiltersClient) AccountFiltersUpdate(ctx context.Context, id AccountFilterId, input AccountFilter) (result AccountFiltersUpdateOperationResponse, err error) { +// Update ... +func (c AccountFiltersClient) Update(ctx context.Context, id AccountFilterId, input AccountFilter) (result UpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/assetsandassetfilters/model_trackbase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/assetsandassetfilters/model_trackbase.go index 3a4841018aaf4..46a24e0d7cc39 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/assetsandassetfilters/model_trackbase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/assetsandassetfilters/model_trackbase.go @@ -12,7 +12,7 @@ import ( type TrackBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTrackBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/README.md index b3ba48574cbbc..6ac6842aecbc2 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesCreateOrUpdate` +### Example Usage: `ContentKeyPoliciesClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := contentkeypolicies.ContentKeyPolicy{ } -read, err := client.ContentKeyPoliciesCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,13 +41,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesDelete` +### Example Usage: `ContentKeyPoliciesClient.Delete` ```go ctx := context.TODO() id := contentkeypolicies.NewContentKeyPolicyID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "contentKeyPolicyValue") -read, err := client.ContentKeyPoliciesDelete(ctx, id) +read, err := client.Delete(ctx, id) if err != nil { // handle the error } @@ -57,13 +57,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesGet` +### Example Usage: `ContentKeyPoliciesClient.Get` ```go ctx := context.TODO() id := contentkeypolicies.NewContentKeyPolicyID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "contentKeyPolicyValue") -read, err := client.ContentKeyPoliciesGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -73,13 +73,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesGetPolicyPropertiesWithSecrets` +### Example Usage: `ContentKeyPoliciesClient.GetPolicyPropertiesWithSecrets` ```go ctx := context.TODO() id := contentkeypolicies.NewContentKeyPolicyID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "contentKeyPolicyValue") -read, err := client.ContentKeyPoliciesGetPolicyPropertiesWithSecrets(ctx, id) +read, err := client.GetPolicyPropertiesWithSecrets(ctx, id) if err != nil { // handle the error } @@ -89,14 +89,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesList` +### Example Usage: `ContentKeyPoliciesClient.List` ```go ctx := context.TODO() id := contentkeypolicies.NewMediaServiceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue") -// alternatively `client.ContentKeyPoliciesList(ctx, id, contentkeypolicies.DefaultContentKeyPoliciesListOperationOptions())` can be used to do batched pagination -items, err := client.ContentKeyPoliciesListComplete(ctx, id, contentkeypolicies.DefaultContentKeyPoliciesListOperationOptions()) +// alternatively `client.List(ctx, id, contentkeypolicies.DefaultListOperationOptions())` can be used to do batched pagination +items, err := client.ListComplete(ctx, id, contentkeypolicies.DefaultListOperationOptions()) if err != nil { // handle the error } @@ -106,7 +106,7 @@ for _, item := range items { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesUpdate` +### Example Usage: `ContentKeyPoliciesClient.Update` ```go ctx := context.TODO() @@ -117,7 +117,7 @@ payload := contentkeypolicies.ContentKeyPolicy{ } -read, err := client.ContentKeyPoliciesUpdate(ctx, id, payload) +read, err := client.Update(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciescreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_createorupdate.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciescreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_createorupdate.go index 63772e3c41ade..3348aeb304c00 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciescreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_createorupdate.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContentKeyPolicy } -// ContentKeyPoliciesCreateOrUpdate ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesCreateOrUpdate(ctx context.Context, id ContentKeyPolicyId, input ContentKeyPolicy) (result ContentKeyPoliciesCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c ContentKeyPoliciesClient) CreateOrUpdate(ctx context.Context, id ContentKeyPolicyId, input ContentKeyPolicy) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_delete.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_delete.go index a6e51adce6bc6..db4ae9dd0035b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_delete.go @@ -11,13 +11,13 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesDeleteOperationResponse struct { +type DeleteOperationResponse struct { HttpResponse *http.Response OData *odata.OData } -// ContentKeyPoliciesDelete ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesDelete(ctx context.Context, id ContentKeyPolicyId) (result ContentKeyPoliciesDeleteOperationResponse, err error) { +// Delete ... +func (c ContentKeyPoliciesClient) Delete(ctx context.Context, id ContentKeyPolicyId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_get.go similarity index 79% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_get.go index d6a9cd8bda8d5..915ccc87f6c91 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContentKeyPolicy } -// ContentKeyPoliciesGet ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesGet(ctx context.Context, id ContentKeyPolicyId) (result ContentKeyPoliciesGetOperationResponse, err error) { +// Get ... +func (c ContentKeyPoliciesClient) Get(ctx context.Context, id ContentKeyPolicyId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesgetpolicypropertieswithsecrets.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_getpolicypropertieswithsecrets.go similarity index 73% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesgetpolicypropertieswithsecrets.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_getpolicypropertieswithsecrets.go index 8fb24b280d0e1..457da340ae246 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesgetpolicypropertieswithsecrets.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_getpolicypropertieswithsecrets.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesGetPolicyPropertiesWithSecretsOperationResponse struct { +type GetPolicyPropertiesWithSecretsOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContentKeyPolicyProperties } -// ContentKeyPoliciesGetPolicyPropertiesWithSecrets ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesGetPolicyPropertiesWithSecrets(ctx context.Context, id ContentKeyPolicyId) (result ContentKeyPoliciesGetPolicyPropertiesWithSecretsOperationResponse, err error) { +// GetPolicyPropertiesWithSecrets ... +func (c ContentKeyPoliciesClient) GetPolicyPropertiesWithSecrets(ctx context.Context, id ContentKeyPolicyId) (result GetPolicyPropertiesWithSecretsOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypolicieslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_list.go similarity index 53% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypolicieslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_list.go index d9c3ff45a454c..2a8e714de5073 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypolicieslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_list.go @@ -12,38 +12,38 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]ContentKeyPolicy } -type ContentKeyPoliciesListCompleteResult struct { +type ListCompleteResult struct { Items []ContentKeyPolicy } -type ContentKeyPoliciesListOperationOptions struct { +type ListOperationOptions struct { Filter *string Orderby *string Top *int64 } -func DefaultContentKeyPoliciesListOperationOptions() ContentKeyPoliciesListOperationOptions { - return ContentKeyPoliciesListOperationOptions{} +func DefaultListOperationOptions() ListOperationOptions { + return ListOperationOptions{} } -func (o ContentKeyPoliciesListOperationOptions) ToHeaders() *client.Headers { +func (o ListOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} return &out } -func (o ContentKeyPoliciesListOperationOptions) ToOData() *odata.Query { +func (o ListOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o ContentKeyPoliciesListOperationOptions) ToQuery() *client.QueryParams { +func (o ListOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Filter != nil { out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) @@ -57,8 +57,8 @@ func (o ContentKeyPoliciesListOperationOptions) ToQuery() *client.QueryParams { return &out } -// ContentKeyPoliciesList ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesList(ctx context.Context, id MediaServiceId, options ContentKeyPoliciesListOperationOptions) (result ContentKeyPoliciesListOperationResponse, err error) { +// List ... +func (c ContentKeyPoliciesClient) List(ctx context.Context, id MediaServiceId, options ListOperationOptions) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -96,16 +96,16 @@ func (c ContentKeyPoliciesClient) ContentKeyPoliciesList(ctx context.Context, id return } -// ContentKeyPoliciesListComplete retrieves all the results into a single object -func (c ContentKeyPoliciesClient) ContentKeyPoliciesListComplete(ctx context.Context, id MediaServiceId, options ContentKeyPoliciesListOperationOptions) (ContentKeyPoliciesListCompleteResult, error) { - return c.ContentKeyPoliciesListCompleteMatchingPredicate(ctx, id, options, ContentKeyPolicyOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c ContentKeyPoliciesClient) ListComplete(ctx context.Context, id MediaServiceId, options ListOperationOptions) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, options, ContentKeyPolicyOperationPredicate{}) } -// ContentKeyPoliciesListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c ContentKeyPoliciesClient) ContentKeyPoliciesListCompleteMatchingPredicate(ctx context.Context, id MediaServiceId, options ContentKeyPoliciesListOperationOptions, predicate ContentKeyPolicyOperationPredicate) (result ContentKeyPoliciesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c ContentKeyPoliciesClient) ListCompleteMatchingPredicate(ctx context.Context, id MediaServiceId, options ListOperationOptions, predicate ContentKeyPolicyOperationPredicate) (result ListCompleteResult, err error) { items := make([]ContentKeyPolicy, 0) - resp, err := c.ContentKeyPoliciesList(ctx, id, options) + resp, err := c.List(ctx, id, options) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -118,7 +118,7 @@ func (c ContentKeyPoliciesClient) ContentKeyPoliciesListCompleteMatchingPredicat } } - result = ContentKeyPoliciesListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_update.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_update.go index 47c0bc84760e3..f0a52c19410fd 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_update.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesUpdateOperationResponse struct { +type UpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContentKeyPolicy } -// ContentKeyPoliciesUpdate ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesUpdate(ctx context.Context, id ContentKeyPolicyId, input ContentKeyPolicy) (result ContentKeyPoliciesUpdateOperationResponse, err error) { +// Update ... +func (c ContentKeyPoliciesClient) Update(ctx context.Context, id ContentKeyPolicyId, input ContentKeyPolicy) (result UpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyconfiguration.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyconfiguration.go index fd47318307b83..bdd6a1d25333e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyconfiguration.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyconfiguration.go @@ -12,7 +12,7 @@ import ( type ContentKeyPolicyConfiguration interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawContentKeyPolicyConfigurationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyplayreadycontentkeylocation.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyplayreadycontentkeylocation.go index 38c7832835cb7..4966f524297ff 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyplayreadycontentkeylocation.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyplayreadycontentkeylocation.go @@ -12,7 +12,7 @@ import ( type ContentKeyPolicyPlayReadyContentKeyLocation interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawContentKeyPolicyPlayReadyContentKeyLocationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyrestriction.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyrestriction.go index 5e7ac4c8845e4..1f3ab4d83cf8e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyrestriction.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyrestriction.go @@ -12,7 +12,7 @@ import ( type ContentKeyPolicyRestriction interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawContentKeyPolicyRestrictionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyrestrictiontokenkey.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyrestrictiontokenkey.go index 720eb01e9943f..6d8a4e938da3e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyrestrictiontokenkey.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/model_contentkeypolicyrestrictiontokenkey.go @@ -12,7 +12,7 @@ import ( type ContentKeyPolicyRestrictionTokenKey interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawContentKeyPolicyRestrictionTokenKeyImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_cliptime.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_cliptime.go index ca480ea6dd5be..d57cf10337b4f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_cliptime.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_cliptime.go @@ -12,7 +12,7 @@ import ( type ClipTime interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawClipTimeImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_codec.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_codec.go index a3b765ec5761a..0ac7cdcc648c8 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_codec.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_codec.go @@ -12,7 +12,7 @@ import ( type Codec interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawCodecImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_format.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_format.go index 5f1df6db909fc..65f94ae3b899d 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_format.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_format.go @@ -12,7 +12,7 @@ import ( type Format interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFormatImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_inputdefinition.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_inputdefinition.go index d52da1be51e33..04e0c4c26ba10 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_inputdefinition.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_inputdefinition.go @@ -12,7 +12,7 @@ import ( type InputDefinition interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawInputDefinitionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_jobinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_jobinput.go index deb8166daf489..e4d997151def6 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_jobinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_jobinput.go @@ -12,7 +12,7 @@ import ( type JobInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawJobInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_joboutput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_joboutput.go index 77f14dc0755b3..6135f1282f5c7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_joboutput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_joboutput.go @@ -12,7 +12,7 @@ import ( type JobOutput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawJobOutputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_overlay.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_overlay.go index cce72c5df00e2..160ee13ef1d0c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_overlay.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_overlay.go @@ -12,7 +12,7 @@ import ( type Overlay interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawOverlayImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_preset.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_preset.go index 455d1388c154e..af6ef205d3345 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_preset.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_preset.go @@ -12,7 +12,7 @@ import ( type Preset interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawPresetImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_trackdescriptor.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_trackdescriptor.go index 57b15a244cc46..8aa3d1a50d911 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_trackdescriptor.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/encodings/model_trackdescriptor.go @@ -12,7 +12,7 @@ import ( type TrackDescriptor interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTrackDescriptorImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_cliptime.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_cliptime.go index ca480ea6dd5be..d57cf10337b4f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_cliptime.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_cliptime.go @@ -12,7 +12,7 @@ import ( type ClipTime interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawClipTimeImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_codec.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_codec.go index ffb7dd108ff7d..dac8228b1d03a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_codec.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_codec.go @@ -12,7 +12,7 @@ import ( type Codec interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawCodecImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_format.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_format.go index 5f1df6db909fc..65f94ae3b899d 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_format.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_format.go @@ -12,7 +12,7 @@ import ( type Format interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFormatImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_inputdefinition.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_inputdefinition.go index d52da1be51e33..04e0c4c26ba10 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_inputdefinition.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_inputdefinition.go @@ -12,7 +12,7 @@ import ( type InputDefinition interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawInputDefinitionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_jobinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_jobinput.go index deb8166daf489..e4d997151def6 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_jobinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_jobinput.go @@ -12,7 +12,7 @@ import ( type JobInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawJobInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_joboutput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_joboutput.go index 77f14dc0755b3..6135f1282f5c7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_joboutput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_joboutput.go @@ -12,7 +12,7 @@ import ( type JobOutput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawJobOutputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_overlay.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_overlay.go index cce72c5df00e2..160ee13ef1d0c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_overlay.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_overlay.go @@ -12,7 +12,7 @@ import ( type Overlay interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawOverlayImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_preset.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_preset.go index 455d1388c154e..af6ef205d3345 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_preset.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_preset.go @@ -12,7 +12,7 @@ import ( type Preset interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawPresetImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_trackdescriptor.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_trackdescriptor.go index 57b15a244cc46..8aa3d1a50d911 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_trackdescriptor.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-07-01/encodings/model_trackdescriptor.go @@ -12,7 +12,7 @@ import ( type TrackDescriptor interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTrackDescriptorImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/README.md index 5e2f3a8d8f2e7..22cec88cb0245 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `AccountFiltersClient.AccountFiltersCreateOrUpdate` +### Example Usage: `AccountFiltersClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := accountfilters.AccountFilter{ } -read, err := client.AccountFiltersCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,13 +41,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AccountFiltersClient.AccountFiltersDelete` +### Example Usage: `AccountFiltersClient.Delete` ```go ctx := context.TODO() id := accountfilters.NewAccountFilterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "accountFilterValue") -read, err := client.AccountFiltersDelete(ctx, id) +read, err := client.Delete(ctx, id) if err != nil { // handle the error } @@ -57,13 +57,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AccountFiltersClient.AccountFiltersGet` +### Example Usage: `AccountFiltersClient.Get` ```go ctx := context.TODO() id := accountfilters.NewAccountFilterID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "accountFilterValue") -read, err := client.AccountFiltersGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -73,14 +73,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AccountFiltersClient.AccountFiltersList` +### Example Usage: `AccountFiltersClient.List` ```go ctx := context.TODO() id := accountfilters.NewMediaServiceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue") -// alternatively `client.AccountFiltersList(ctx, id)` can be used to do batched pagination -items, err := client.AccountFiltersListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -90,7 +90,7 @@ for _, item := range items { ``` -### Example Usage: `AccountFiltersClient.AccountFiltersUpdate` +### Example Usage: `AccountFiltersClient.Update` ```go ctx := context.TODO() @@ -101,7 +101,7 @@ payload := accountfilters.AccountFilter{ } -read, err := client.AccountFiltersUpdate(ctx, id, payload) +read, err := client.Update(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfilterscreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_createorupdate.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfilterscreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_createorupdate.go index c5d8c2c6672cc..11ca7904b4fd9 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfilterscreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_createorupdate.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AccountFilter } -// AccountFiltersCreateOrUpdate ... -func (c AccountFiltersClient) AccountFiltersCreateOrUpdate(ctx context.Context, id AccountFilterId, input AccountFilter) (result AccountFiltersCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c AccountFiltersClient) CreateOrUpdate(ctx context.Context, id AccountFilterId, input AccountFilter) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_delete.go similarity index 78% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_delete.go index adbb2a159092d..135b80326daf0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_delete.go @@ -11,13 +11,13 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersDeleteOperationResponse struct { +type DeleteOperationResponse struct { HttpResponse *http.Response OData *odata.OData } -// AccountFiltersDelete ... -func (c AccountFiltersClient) AccountFiltersDelete(ctx context.Context, id AccountFilterId) (result AccountFiltersDeleteOperationResponse, err error) { +// Delete ... +func (c AccountFiltersClient) Delete(ctx context.Context, id AccountFilterId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_get.go similarity index 80% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_get.go index 4ee7d84d5999c..7dbc6aa511592 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfiltersget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AccountFilter } -// AccountFiltersGet ... -func (c AccountFiltersClient) AccountFiltersGet(ctx context.Context, id AccountFilterId) (result AccountFiltersGetOperationResponse, err error) { +// Get ... +func (c AccountFiltersClient) Get(ctx context.Context, id AccountFilterId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfilterslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_list.go similarity index 57% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfilterslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_list.go index a820f098ce77a..23d8b21febb42 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_accountfilterslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_list.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]AccountFilter } -type AccountFiltersListCompleteResult struct { +type ListCompleteResult struct { Items []AccountFilter } -// AccountFiltersList ... -func (c AccountFiltersClient) AccountFiltersList(ctx context.Context, id MediaServiceId) (result AccountFiltersListOperationResponse, err error) { +// List ... +func (c AccountFiltersClient) List(ctx context.Context, id MediaServiceId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c AccountFiltersClient) AccountFiltersList(ctx context.Context, id MediaSe return } -// AccountFiltersListComplete retrieves all the results into a single object -func (c AccountFiltersClient) AccountFiltersListComplete(ctx context.Context, id MediaServiceId) (AccountFiltersListCompleteResult, error) { - return c.AccountFiltersListCompleteMatchingPredicate(ctx, id, AccountFilterOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c AccountFiltersClient) ListComplete(ctx context.Context, id MediaServiceId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, AccountFilterOperationPredicate{}) } -// AccountFiltersListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c AccountFiltersClient) AccountFiltersListCompleteMatchingPredicate(ctx context.Context, id MediaServiceId, predicate AccountFilterOperationPredicate) (result AccountFiltersListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c AccountFiltersClient) ListCompleteMatchingPredicate(ctx context.Context, id MediaServiceId, predicate AccountFilterOperationPredicate) (result ListCompleteResult, err error) { items := make([]AccountFilter, 0) - resp, err := c.AccountFiltersList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c AccountFiltersClient) AccountFiltersListCompleteMatchingPredicate(ctx co } } - result = AccountFiltersListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_update.go similarity index 79% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_update.go index e96384546a3e0..7ccf1739e939f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/accountfilters/method_accountfiltersupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/accountfilters/method_update.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AccountFiltersUpdateOperationResponse struct { +type UpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *AccountFilter } -// AccountFiltersUpdate ... -func (c AccountFiltersClient) AccountFiltersUpdate(ctx context.Context, id AccountFilterId, input AccountFilter) (result AccountFiltersUpdateOperationResponse, err error) { +// Update ... +func (c AccountFiltersClient) Update(ctx context.Context, id AccountFilterId, input AccountFilter) (result UpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/assetsandassetfilters/model_trackbase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/assetsandassetfilters/model_trackbase.go index 3a4841018aaf4..46a24e0d7cc39 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/assetsandassetfilters/model_trackbase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/assetsandassetfilters/model_trackbase.go @@ -12,7 +12,7 @@ import ( type TrackBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTrackBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/README.md index 0b153a8164e48..d83c94df0911c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesCreateOrUpdate` +### Example Usage: `ContentKeyPoliciesClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := contentkeypolicies.ContentKeyPolicy{ } -read, err := client.ContentKeyPoliciesCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,13 +41,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesDelete` +### Example Usage: `ContentKeyPoliciesClient.Delete` ```go ctx := context.TODO() id := contentkeypolicies.NewContentKeyPolicyID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "contentKeyPolicyValue") -read, err := client.ContentKeyPoliciesDelete(ctx, id) +read, err := client.Delete(ctx, id) if err != nil { // handle the error } @@ -57,13 +57,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesGet` +### Example Usage: `ContentKeyPoliciesClient.Get` ```go ctx := context.TODO() id := contentkeypolicies.NewContentKeyPolicyID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "contentKeyPolicyValue") -read, err := client.ContentKeyPoliciesGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -73,13 +73,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesGetPolicyPropertiesWithSecrets` +### Example Usage: `ContentKeyPoliciesClient.GetPolicyPropertiesWithSecrets` ```go ctx := context.TODO() id := contentkeypolicies.NewContentKeyPolicyID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue", "contentKeyPolicyValue") -read, err := client.ContentKeyPoliciesGetPolicyPropertiesWithSecrets(ctx, id) +read, err := client.GetPolicyPropertiesWithSecrets(ctx, id) if err != nil { // handle the error } @@ -89,14 +89,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesList` +### Example Usage: `ContentKeyPoliciesClient.List` ```go ctx := context.TODO() id := contentkeypolicies.NewMediaServiceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "mediaServiceValue") -// alternatively `client.ContentKeyPoliciesList(ctx, id, contentkeypolicies.DefaultContentKeyPoliciesListOperationOptions())` can be used to do batched pagination -items, err := client.ContentKeyPoliciesListComplete(ctx, id, contentkeypolicies.DefaultContentKeyPoliciesListOperationOptions()) +// alternatively `client.List(ctx, id, contentkeypolicies.DefaultListOperationOptions())` can be used to do batched pagination +items, err := client.ListComplete(ctx, id, contentkeypolicies.DefaultListOperationOptions()) if err != nil { // handle the error } @@ -106,7 +106,7 @@ for _, item := range items { ``` -### Example Usage: `ContentKeyPoliciesClient.ContentKeyPoliciesUpdate` +### Example Usage: `ContentKeyPoliciesClient.Update` ```go ctx := context.TODO() @@ -117,7 +117,7 @@ payload := contentkeypolicies.ContentKeyPolicy{ } -read, err := client.ContentKeyPoliciesUpdate(ctx, id, payload) +read, err := client.Update(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciescreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_createorupdate.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciescreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_createorupdate.go index 63772e3c41ade..3348aeb304c00 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciescreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_createorupdate.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContentKeyPolicy } -// ContentKeyPoliciesCreateOrUpdate ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesCreateOrUpdate(ctx context.Context, id ContentKeyPolicyId, input ContentKeyPolicy) (result ContentKeyPoliciesCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c ContentKeyPoliciesClient) CreateOrUpdate(ctx context.Context, id ContentKeyPolicyId, input ContentKeyPolicy) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_delete.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_delete.go index a6e51adce6bc6..db4ae9dd0035b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_delete.go @@ -11,13 +11,13 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesDeleteOperationResponse struct { +type DeleteOperationResponse struct { HttpResponse *http.Response OData *odata.OData } -// ContentKeyPoliciesDelete ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesDelete(ctx context.Context, id ContentKeyPolicyId) (result ContentKeyPoliciesDeleteOperationResponse, err error) { +// Delete ... +func (c ContentKeyPoliciesClient) Delete(ctx context.Context, id ContentKeyPolicyId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_get.go similarity index 79% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_get.go index d6a9cd8bda8d5..915ccc87f6c91 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContentKeyPolicy } -// ContentKeyPoliciesGet ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesGet(ctx context.Context, id ContentKeyPolicyId) (result ContentKeyPoliciesGetOperationResponse, err error) { +// Get ... +func (c ContentKeyPoliciesClient) Get(ctx context.Context, id ContentKeyPolicyId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesgetpolicypropertieswithsecrets.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_getpolicypropertieswithsecrets.go similarity index 73% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesgetpolicypropertieswithsecrets.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_getpolicypropertieswithsecrets.go index 8fb24b280d0e1..457da340ae246 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2021-11-01/contentkeypolicies/method_contentkeypoliciesgetpolicypropertieswithsecrets.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_getpolicypropertieswithsecrets.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesGetPolicyPropertiesWithSecretsOperationResponse struct { +type GetPolicyPropertiesWithSecretsOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContentKeyPolicyProperties } -// ContentKeyPoliciesGetPolicyPropertiesWithSecrets ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesGetPolicyPropertiesWithSecrets(ctx context.Context, id ContentKeyPolicyId) (result ContentKeyPoliciesGetPolicyPropertiesWithSecretsOperationResponse, err error) { +// GetPolicyPropertiesWithSecrets ... +func (c ContentKeyPoliciesClient) GetPolicyPropertiesWithSecrets(ctx context.Context, id ContentKeyPolicyId) (result GetPolicyPropertiesWithSecretsOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypolicieslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_list.go similarity index 53% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypolicieslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_list.go index d9c3ff45a454c..2a8e714de5073 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypolicieslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_list.go @@ -12,38 +12,38 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]ContentKeyPolicy } -type ContentKeyPoliciesListCompleteResult struct { +type ListCompleteResult struct { Items []ContentKeyPolicy } -type ContentKeyPoliciesListOperationOptions struct { +type ListOperationOptions struct { Filter *string Orderby *string Top *int64 } -func DefaultContentKeyPoliciesListOperationOptions() ContentKeyPoliciesListOperationOptions { - return ContentKeyPoliciesListOperationOptions{} +func DefaultListOperationOptions() ListOperationOptions { + return ListOperationOptions{} } -func (o ContentKeyPoliciesListOperationOptions) ToHeaders() *client.Headers { +func (o ListOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} return &out } -func (o ContentKeyPoliciesListOperationOptions) ToOData() *odata.Query { +func (o ListOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o ContentKeyPoliciesListOperationOptions) ToQuery() *client.QueryParams { +func (o ListOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Filter != nil { out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) @@ -57,8 +57,8 @@ func (o ContentKeyPoliciesListOperationOptions) ToQuery() *client.QueryParams { return &out } -// ContentKeyPoliciesList ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesList(ctx context.Context, id MediaServiceId, options ContentKeyPoliciesListOperationOptions) (result ContentKeyPoliciesListOperationResponse, err error) { +// List ... +func (c ContentKeyPoliciesClient) List(ctx context.Context, id MediaServiceId, options ListOperationOptions) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -96,16 +96,16 @@ func (c ContentKeyPoliciesClient) ContentKeyPoliciesList(ctx context.Context, id return } -// ContentKeyPoliciesListComplete retrieves all the results into a single object -func (c ContentKeyPoliciesClient) ContentKeyPoliciesListComplete(ctx context.Context, id MediaServiceId, options ContentKeyPoliciesListOperationOptions) (ContentKeyPoliciesListCompleteResult, error) { - return c.ContentKeyPoliciesListCompleteMatchingPredicate(ctx, id, options, ContentKeyPolicyOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c ContentKeyPoliciesClient) ListComplete(ctx context.Context, id MediaServiceId, options ListOperationOptions) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, options, ContentKeyPolicyOperationPredicate{}) } -// ContentKeyPoliciesListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c ContentKeyPoliciesClient) ContentKeyPoliciesListCompleteMatchingPredicate(ctx context.Context, id MediaServiceId, options ContentKeyPoliciesListOperationOptions, predicate ContentKeyPolicyOperationPredicate) (result ContentKeyPoliciesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c ContentKeyPoliciesClient) ListCompleteMatchingPredicate(ctx context.Context, id MediaServiceId, options ListOperationOptions, predicate ContentKeyPolicyOperationPredicate) (result ListCompleteResult, err error) { items := make([]ContentKeyPolicy, 0) - resp, err := c.ContentKeyPoliciesList(ctx, id, options) + resp, err := c.List(ctx, id, options) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -118,7 +118,7 @@ func (c ContentKeyPoliciesClient) ContentKeyPoliciesListCompleteMatchingPredicat } } - result = ContentKeyPoliciesListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_update.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_update.go index 47c0bc84760e3..f0a52c19410fd 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_contentkeypoliciesupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/method_update.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContentKeyPoliciesUpdateOperationResponse struct { +type UpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContentKeyPolicy } -// ContentKeyPoliciesUpdate ... -func (c ContentKeyPoliciesClient) ContentKeyPoliciesUpdate(ctx context.Context, id ContentKeyPolicyId, input ContentKeyPolicy) (result ContentKeyPoliciesUpdateOperationResponse, err error) { +// Update ... +func (c ContentKeyPoliciesClient) Update(ctx context.Context, id ContentKeyPolicyId, input ContentKeyPolicy) (result UpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyconfiguration.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyconfiguration.go index fd47318307b83..bdd6a1d25333e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyconfiguration.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyconfiguration.go @@ -12,7 +12,7 @@ import ( type ContentKeyPolicyConfiguration interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawContentKeyPolicyConfigurationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyplayreadycontentkeylocation.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyplayreadycontentkeylocation.go index 38c7832835cb7..4966f524297ff 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyplayreadycontentkeylocation.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyplayreadycontentkeylocation.go @@ -12,7 +12,7 @@ import ( type ContentKeyPolicyPlayReadyContentKeyLocation interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawContentKeyPolicyPlayReadyContentKeyLocationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyrestriction.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyrestriction.go index 5e7ac4c8845e4..1f3ab4d83cf8e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyrestriction.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyrestriction.go @@ -12,7 +12,7 @@ import ( type ContentKeyPolicyRestriction interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawContentKeyPolicyRestrictionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyrestrictiontokenkey.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyrestrictiontokenkey.go index 720eb01e9943f..6d8a4e938da3e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyrestrictiontokenkey.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/media/2022-08-01/contentkeypolicies/model_contentkeypolicyrestrictiontokenkey.go @@ -12,7 +12,7 @@ import ( type ContentKeyPolicyRestrictionTokenKey interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawContentKeyPolicyRestrictionTokenKeyImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2017-12-01/servers/model_serverpropertiesforcreate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2017-12-01/servers/model_serverpropertiesforcreate.go index ec427ee27c48a..84868e2551eba 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2017-12-01/servers/model_serverpropertiesforcreate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2017-12-01/servers/model_serverpropertiesforcreate.go @@ -12,7 +12,7 @@ import ( type ServerPropertiesForCreate interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawServerPropertiesForCreateImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/README.md similarity index 74% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/README.md index 6c2bc8556d517..d6bc92c2acf23 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups` Documentation -The `backups` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `backups` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups" ``` @@ -51,3 +51,19 @@ for _, item := range items { // do something } ``` + + +### Example Usage: `BackupsClient.Put` + +```go +ctx := context.TODO() +id := backups.NewBackupID("12345678-1234-9876-4563-123456789012", "example-resource-group", "flexibleServerValue", "backupValue") + +read, err := client.Put(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/id_backup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/id_backup.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/id_backup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/id_backup.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/method_get.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/method_get.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/method_get.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/method_listbyserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/method_listbyserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/method_listbyserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/method_listbyserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/method_put.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/method_put.go new file mode 100644 index 0000000000000..37f1376f78247 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/method_put.go @@ -0,0 +1,51 @@ +package backups + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type PutOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *ServerBackup +} + +// Put ... +func (c BackupsClient) Put(ctx context.Context, id BackupId) (result PutOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPut, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/model_serverbackup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/model_serverbackup.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/model_serverbackup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/model_serverbackup.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/model_serverbackupproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/model_serverbackupproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/model_serverbackupproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/model_serverbackupproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/version.go index 650fe50c24ab1..91f95dd8aeb2a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/backups/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/README.md similarity index 91% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/README.md index dd5e294050ae7..b509c2abd5191 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability` Documentation -The `checknameavailability` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `checknameavailability` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/id_location.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/id_location.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/id_location.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/id_location.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/method_execute.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/method_execute.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/method_execute.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/method_execute.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/method_withoutlocationexecute.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/method_withoutlocationexecute.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/method_withoutlocationexecute.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/method_withoutlocationexecute.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/model_nameavailability.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/model_nameavailability.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/model_nameavailability.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/model_nameavailability.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/model_nameavailabilityrequest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/model_nameavailabilityrequest.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/model_nameavailabilityrequest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/model_nameavailabilityrequest.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/version.go similarity index 89% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/version.go index e8c1f33be52c4..570fa81a003cb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/checknameavailability/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/client.go similarity index 70% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/client.go index 570363f854716..68a55624f0cd0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/client.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/client.go @@ -1,4 +1,4 @@ -package v2021_05_01 +package v2022_01_01 // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. @@ -6,23 +6,26 @@ package v2021_05_01 import ( "fmt" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart" - "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/azureadadministrators" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart" + "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop" "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" sdkEnv "github.com/hashicorp/go-azure-sdk/sdk/environments" ) type Client struct { + AzureADAdministrators *azureadadministrators.AzureADAdministratorsClient Backups *backups.BackupsClient CheckNameAvailability *checknameavailability.CheckNameAvailabilityClient Configurations *configurations.ConfigurationsClient @@ -30,6 +33,7 @@ type Client struct { FirewallRules *firewallrules.FirewallRulesClient GetPrivateDnsZoneSuffix *getprivatednszonesuffix.GetPrivateDnsZoneSuffixClient LocationBasedCapabilities *locationbasedcapabilities.LocationBasedCapabilitiesClient + LogFiles *logfiles.LogFilesClient ServerFailover *serverfailover.ServerFailoverClient ServerRestart *serverrestart.ServerRestartClient ServerStart *serverstart.ServerStartClient @@ -38,6 +42,12 @@ type Client struct { } func NewClientWithBaseURI(sdkApi sdkEnv.Api, configureFunc func(c *resourcemanager.Client)) (*Client, error) { + azureADAdministratorsClient, err := azureadadministrators.NewAzureADAdministratorsClientWithBaseURI(sdkApi) + if err != nil { + return nil, fmt.Errorf("building AzureADAdministrators client: %+v", err) + } + configureFunc(azureADAdministratorsClient.Client) + backupsClient, err := backups.NewBackupsClientWithBaseURI(sdkApi) if err != nil { return nil, fmt.Errorf("building Backups client: %+v", err) @@ -80,6 +90,12 @@ func NewClientWithBaseURI(sdkApi sdkEnv.Api, configureFunc func(c *resourcemanag } configureFunc(locationBasedCapabilitiesClient.Client) + logFilesClient, err := logfiles.NewLogFilesClientWithBaseURI(sdkApi) + if err != nil { + return nil, fmt.Errorf("building LogFiles client: %+v", err) + } + configureFunc(logFilesClient.Client) + serverFailoverClient, err := serverfailover.NewServerFailoverClientWithBaseURI(sdkApi) if err != nil { return nil, fmt.Errorf("building ServerFailover client: %+v", err) @@ -111,6 +127,7 @@ func NewClientWithBaseURI(sdkApi sdkEnv.Api, configureFunc func(c *resourcemanag configureFunc(serversClient.Client) return &Client{ + AzureADAdministrators: azureADAdministratorsClient, Backups: backupsClient, CheckNameAvailability: checkNameAvailabilityClient, Configurations: configurationsClient, @@ -118,6 +135,7 @@ func NewClientWithBaseURI(sdkApi sdkEnv.Api, configureFunc func(c *resourcemanag FirewallRules: firewallRulesClient, GetPrivateDnsZoneSuffix: getPrivateDnsZoneSuffixClient, LocationBasedCapabilities: locationBasedCapabilitiesClient, + LogFiles: logFilesClient, ServerFailover: serverFailoverClient, ServerRestart: serverRestartClient, ServerStart: serverStartClient, diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/README.md similarity index 72% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/README.md index 67771a9be586a..867d4e86462b8 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations` Documentation -The `configurations` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `configurations` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations" ``` @@ -37,6 +37,23 @@ if err := client.BatchUpdateThenPoll(ctx, id, payload); err != nil { ``` +### Example Usage: `ConfigurationsClient.CreateOrUpdate` + +```go +ctx := context.TODO() +id := configurations.NewConfigurationID("12345678-1234-9876-4563-123456789012", "example-resource-group", "flexibleServerValue", "configurationValue") + +payload := configurations.Configuration{ + // ... +} + + +if err := client.CreateOrUpdateThenPoll(ctx, id, payload); err != nil { + // handle the error +} +``` + + ### Example Usage: `ConfigurationsClient.Get` ```go @@ -59,8 +76,8 @@ if model := read.Model; model != nil { ctx := context.TODO() id := configurations.NewFlexibleServerID("12345678-1234-9876-4563-123456789012", "example-resource-group", "flexibleServerValue") -// alternatively `client.ListByServer(ctx, id)` can be used to do batched pagination -items, err := client.ListByServerComplete(ctx, id) +// alternatively `client.ListByServer(ctx, id, configurations.DefaultListByServerOperationOptions())` can be used to do batched pagination +items, err := client.ListByServerComplete(ctx, id, configurations.DefaultListByServerOperationOptions()) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/constants.go similarity index 81% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/constants.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/constants.go index f1dd2076e3c46..5508483dcba54 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/constants.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/constants.go @@ -172,3 +172,44 @@ func parseIsReadOnly(input string) (*IsReadOnly, error) { out := IsReadOnly(input) return &out, nil } + +type ResetAllToDefault string + +const ( + ResetAllToDefaultFalse ResetAllToDefault = "False" + ResetAllToDefaultTrue ResetAllToDefault = "True" +) + +func PossibleValuesForResetAllToDefault() []string { + return []string{ + string(ResetAllToDefaultFalse), + string(ResetAllToDefaultTrue), + } +} + +func (s *ResetAllToDefault) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseResetAllToDefault(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseResetAllToDefault(input string) (*ResetAllToDefault, error) { + vals := map[string]ResetAllToDefault{ + "false": ResetAllToDefaultFalse, + "true": ResetAllToDefaultTrue, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := ResetAllToDefault(input) + return &out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/id_configuration.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/id_configuration.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/id_configuration.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/id_configuration.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_batchupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_batchupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_batchupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_batchupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_createorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_createorupdate.go new file mode 100644 index 0000000000000..56e5056d14064 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_createorupdate.go @@ -0,0 +1,74 @@ +package configurations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateOrUpdateOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// CreateOrUpdate ... +func (c ConfigurationsClient) CreateOrUpdate(ctx context.Context, id ConfigurationId, input Configuration) (result CreateOrUpdateOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusOK, + }, + HttpMethod: http.MethodPut, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// CreateOrUpdateThenPoll performs CreateOrUpdate then polls until it's completed +func (c ConfigurationsClient) CreateOrUpdateThenPoll(ctx context.Context, id ConfigurationId, input Configuration) error { + result, err := c.CreateOrUpdate(ctx, id, input) + if err != nil { + return fmt.Errorf("performing CreateOrUpdate: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after CreateOrUpdate: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_get.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_get.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_get.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_listbyserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_listbyserver.go new file mode 100644 index 0000000000000..47b61512371ff --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_listbyserver.go @@ -0,0 +1,129 @@ +package configurations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListByServerOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]Configuration +} + +type ListByServerCompleteResult struct { + Items []Configuration +} + +type ListByServerOperationOptions struct { + Keyword *string + Page *int64 + PageSize *int64 + Tags *string +} + +func DefaultListByServerOperationOptions() ListByServerOperationOptions { + return ListByServerOperationOptions{} +} + +func (o ListByServerOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListByServerOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListByServerOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.Keyword != nil { + out.Append("keyword", fmt.Sprintf("%v", *o.Keyword)) + } + if o.Page != nil { + out.Append("page", fmt.Sprintf("%v", *o.Page)) + } + if o.PageSize != nil { + out.Append("pageSize", fmt.Sprintf("%v", *o.PageSize)) + } + if o.Tags != nil { + out.Append("tags", fmt.Sprintf("%v", *o.Tags)) + } + return &out +} + +// ListByServer ... +func (c ConfigurationsClient) ListByServer(ctx context.Context, id FlexibleServerId, options ListByServerOperationOptions) (result ListByServerOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/configurations", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]Configuration `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListByServerComplete retrieves all the results into a single object +func (c ConfigurationsClient) ListByServerComplete(ctx context.Context, id FlexibleServerId, options ListByServerOperationOptions) (ListByServerCompleteResult, error) { + return c.ListByServerCompleteMatchingPredicate(ctx, id, options, ConfigurationOperationPredicate{}) +} + +// ListByServerCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c ConfigurationsClient) ListByServerCompleteMatchingPredicate(ctx context.Context, id FlexibleServerId, options ListByServerOperationOptions, predicate ConfigurationOperationPredicate) (result ListByServerCompleteResult, err error) { + items := make([]Configuration, 0) + + resp, err := c.ListByServer(ctx, id, options) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListByServerCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_update.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_update.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_update.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/method_update.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configuration.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configuration.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configuration.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configuration.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationforbatchupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationforbatchupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationforbatchupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationforbatchupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationforbatchupdateproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationforbatchupdateproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationforbatchupdateproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationforbatchupdateproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationlistforbatchupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationlistforbatchupdate.go similarity index 58% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationlistforbatchupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationlistforbatchupdate.go index 9a2ca76edd1bd..a5f4e77694e83 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationlistforbatchupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationlistforbatchupdate.go @@ -4,5 +4,6 @@ package configurations // Licensed under the MIT License. See NOTICE.txt in the project root for license information. type ConfigurationListForBatchUpdate struct { - Value *[]ConfigurationForBatchUpdate `json:"value,omitempty"` + ResetAllToDefault *ResetAllToDefault `json:"resetAllToDefault,omitempty"` + Value *[]ConfigurationForBatchUpdate `json:"value,omitempty"` } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationlistresult.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationlistresult.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationlistresult.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationlistresult.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationproperties.go similarity index 85% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationproperties.go index c1a6803626aa9..51d6836b9a566 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/model_configurationproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/model_configurationproperties.go @@ -5,9 +5,11 @@ package configurations type ConfigurationProperties struct { AllowedValues *string `json:"allowedValues,omitempty"` + CurrentValue *string `json:"currentValue,omitempty"` DataType *string `json:"dataType,omitempty"` DefaultValue *string `json:"defaultValue,omitempty"` Description *string `json:"description,omitempty"` + DocumentationLink *string `json:"documentationLink,omitempty"` IsConfigPendingRestart *IsConfigPendingRestart `json:"isConfigPendingRestart,omitempty"` IsDynamicConfig *IsDynamicConfig `json:"isDynamicConfig,omitempty"` IsReadOnly *IsReadOnly `json:"isReadOnly,omitempty"` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/version.go index b06cb044d76b3..c91dc76206fbf 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/configurations/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/README.md similarity index 94% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/README.md index 3b3657e76db38..d81cd68c5c421 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases` Documentation -The `databases` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `databases` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/id_database.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/id_database.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/id_database.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/id_database.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/method_createorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/method_createorupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/method_createorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/method_createorupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/method_delete.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/method_delete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/method_delete.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/method_get.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/method_get.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/method_get.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/method_listbyserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/method_listbyserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/method_listbyserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/method_listbyserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/model_database.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/model_database.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/model_database.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/model_database.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/model_databaseproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/model_databaseproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/model_databaseproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/model_databaseproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/version.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases/version.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/README.md similarity index 94% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/README.md index ae8c0ef4a459e..c5b4f8ab7f354 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules` Documentation -The `firewallrules` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `firewallrules` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/id_firewallrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/id_firewallrule.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/id_firewallrule.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/id_firewallrule.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/method_createorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/method_createorupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/method_createorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/method_createorupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/method_delete.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/method_delete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/method_delete.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/method_get.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/method_get.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/method_get.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/method_listbyserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/method_listbyserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/method_listbyserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/method_listbyserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/model_firewallrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/model_firewallrule.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/model_firewallrule.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/model_firewallrule.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/model_firewallruleproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/model_firewallruleproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/model_firewallruleproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/model_firewallruleproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/version.go index f42dd905c1ff3..c96e99a28a329 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/firewallrules/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/README.md similarity index 85% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/README.md index 55d3d5d889d79..a893cd14eacfc 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix` Documentation -The `getprivatednszonesuffix` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `getprivatednszonesuffix` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/method_execute.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/method_execute.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/method_execute.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/method_execute.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/model_getprivatednszonesuffixresponse.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/model_getprivatednszonesuffixresponse.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/model_getprivatednszonesuffixresponse.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/model_getprivatednszonesuffixresponse.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/version.go similarity index 89% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/version.go index c6e2c966af0c8..d5e2b6bda7b3f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/getprivatednszonesuffix/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/README.md similarity index 86% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/README.md index 79572dad66a71..a8c4f04afa8bb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities` Documentation -The `locationbasedcapabilities` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `locationbasedcapabilities` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/id_location.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/id_location.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/id_location.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/id_location.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/method_list.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/method_list.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/method_list.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/method_list.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_capabilityproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_capabilityproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_capabilityproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_capabilityproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_servereditioncapability.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_servereditioncapability.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_servereditioncapability.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_servereditioncapability.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_serverversioncapability.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_serverversioncapability.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_serverversioncapability.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_serverversioncapability.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_skucapability.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_skucapability.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_skucapability.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_skucapability.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_storageeditioncapability.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_storageeditioncapability.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/model_storageeditioncapability.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/model_storageeditioncapability.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/version.go similarity index 89% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/version.go index 513cc3a111d40..2d0679772a8c4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/locationbasedcapabilities/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/README.md new file mode 100644 index 0000000000000..7f7d09c872915 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/README.md @@ -0,0 +1,37 @@ + +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles` Documentation + +The `logfiles` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). + +This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). + +### Import Path + +```go +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles" +``` + + +### Client Initialization + +```go +client := logfiles.NewLogFilesClientWithBaseURI("https://management.azure.com") +client.Client.Authorizer = authorizer +``` + + +### Example Usage: `LogFilesClient.ListByServer` + +```go +ctx := context.TODO() +id := logfiles.NewFlexibleServerID("12345678-1234-9876-4563-123456789012", "example-resource-group", "flexibleServerValue") + +// alternatively `client.ListByServer(ctx, id)` can be used to do batched pagination +items, err := client.ListByServerComplete(ctx, id) +if err != nil { + // handle the error +} +for _, item := range items { + // do something +} +``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/client.go new file mode 100644 index 0000000000000..8e5eb32752862 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/client.go @@ -0,0 +1,26 @@ +package logfiles + +import ( + "fmt" + + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + sdkEnv "github.com/hashicorp/go-azure-sdk/sdk/environments" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type LogFilesClient struct { + Client *resourcemanager.Client +} + +func NewLogFilesClientWithBaseURI(sdkApi sdkEnv.Api) (*LogFilesClient, error) { + client, err := resourcemanager.NewResourceManagerClient(sdkApi, "logfiles", defaultApiVersion) + if err != nil { + return nil, fmt.Errorf("instantiating LogFilesClient: %+v", err) + } + + return &LogFilesClient{ + Client: client, + }, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/id_flexibleserver.go new file mode 100644 index 0000000000000..3bf684f08d90c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/id_flexibleserver.go @@ -0,0 +1,127 @@ +package logfiles + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = FlexibleServerId{} + +// FlexibleServerId is a struct representing the Resource ID for a Flexible Server +type FlexibleServerId struct { + SubscriptionId string + ResourceGroupName string + FlexibleServerName string +} + +// NewFlexibleServerID returns a new FlexibleServerId struct +func NewFlexibleServerID(subscriptionId string, resourceGroupName string, flexibleServerName string) FlexibleServerId { + return FlexibleServerId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + FlexibleServerName: flexibleServerName, + } +} + +// ParseFlexibleServerID parses 'input' into a FlexibleServerId +func ParseFlexibleServerID(input string) (*FlexibleServerId, error) { + parser := resourceids.NewParserFromResourceIdType(FlexibleServerId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := FlexibleServerId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.FlexibleServerName, ok = parsed.Parsed["flexibleServerName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "flexibleServerName", *parsed) + } + + return &id, nil +} + +// ParseFlexibleServerIDInsensitively parses 'input' case-insensitively into a FlexibleServerId +// note: this method should only be used for API response data and not user input +func ParseFlexibleServerIDInsensitively(input string) (*FlexibleServerId, error) { + parser := resourceids.NewParserFromResourceIdType(FlexibleServerId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := FlexibleServerId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.FlexibleServerName, ok = parsed.Parsed["flexibleServerName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "flexibleServerName", *parsed) + } + + return &id, nil +} + +// ValidateFlexibleServerID checks that 'input' can be parsed as a Flexible Server ID +func ValidateFlexibleServerID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseFlexibleServerID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Flexible Server ID +func (id FlexibleServerId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.DBforMySQL/flexibleServers/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.FlexibleServerName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Flexible Server ID +func (id FlexibleServerId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftDBforMySQL", "Microsoft.DBforMySQL", "Microsoft.DBforMySQL"), + resourceids.StaticSegment("staticFlexibleServers", "flexibleServers", "flexibleServers"), + resourceids.UserSpecifiedSegment("flexibleServerName", "flexibleServerValue"), + } +} + +// String returns a human-readable description of this Flexible Server ID +func (id FlexibleServerId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Flexible Server Name: %q", id.FlexibleServerName), + } + return fmt.Sprintf("Flexible Server (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_listbyserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/method_listbyserver.go similarity index 66% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_listbyserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/method_listbyserver.go index 9e8eca7ab7264..d8381b932e469 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations/method_listbyserver.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/method_listbyserver.go @@ -1,4 +1,4 @@ -package configurations +package logfiles import ( "context" @@ -15,22 +15,22 @@ import ( type ListByServerOperationResponse struct { HttpResponse *http.Response OData *odata.OData - Model *[]Configuration + Model *[]LogFile } type ListByServerCompleteResult struct { - Items []Configuration + Items []LogFile } // ListByServer ... -func (c ConfigurationsClient) ListByServer(ctx context.Context, id FlexibleServerId) (result ListByServerOperationResponse, err error) { +func (c LogFilesClient) ListByServer(ctx context.Context, id FlexibleServerId) (result ListByServerOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ http.StatusOK, }, HttpMethod: http.MethodGet, - Path: fmt.Sprintf("%s/configurations", id.ID()), + Path: fmt.Sprintf("%s/logFiles", id.ID()), } req, err := c.Client.NewRequest(ctx, opts) @@ -49,7 +49,7 @@ func (c ConfigurationsClient) ListByServer(ctx context.Context, id FlexibleServe } var values struct { - Values *[]Configuration `json:"value"` + Values *[]LogFile `json:"value"` } if err = resp.Unmarshal(&values); err != nil { return @@ -61,13 +61,13 @@ func (c ConfigurationsClient) ListByServer(ctx context.Context, id FlexibleServe } // ListByServerComplete retrieves all the results into a single object -func (c ConfigurationsClient) ListByServerComplete(ctx context.Context, id FlexibleServerId) (ListByServerCompleteResult, error) { - return c.ListByServerCompleteMatchingPredicate(ctx, id, ConfigurationOperationPredicate{}) +func (c LogFilesClient) ListByServerComplete(ctx context.Context, id FlexibleServerId) (ListByServerCompleteResult, error) { + return c.ListByServerCompleteMatchingPredicate(ctx, id, LogFileOperationPredicate{}) } // ListByServerCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c ConfigurationsClient) ListByServerCompleteMatchingPredicate(ctx context.Context, id FlexibleServerId, predicate ConfigurationOperationPredicate) (result ListByServerCompleteResult, err error) { - items := make([]Configuration, 0) +func (c LogFilesClient) ListByServerCompleteMatchingPredicate(ctx context.Context, id FlexibleServerId, predicate LogFileOperationPredicate) (result ListByServerCompleteResult, err error) { + items := make([]LogFile, 0) resp, err := c.ListByServer(ctx, id) if err != nil { diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/model_logfile.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/model_logfile.go new file mode 100644 index 0000000000000..238e512289b88 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/model_logfile.go @@ -0,0 +1,16 @@ +package logfiles + +import ( + "github.com/hashicorp/go-azure-helpers/resourcemanager/systemdata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type LogFile struct { + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Properties *LogFileProperties `json:"properties,omitempty"` + SystemData *systemdata.SystemData `json:"systemData,omitempty"` + Type *string `json:"type,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/model_logfileproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/model_logfileproperties.go new file mode 100644 index 0000000000000..43030a1fdc1bf --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/model_logfileproperties.go @@ -0,0 +1,42 @@ +package logfiles + +import ( + "time" + + "github.com/hashicorp/go-azure-helpers/lang/dates" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type LogFileProperties struct { + CreatedTime *string `json:"createdTime,omitempty"` + LastModifiedTime *string `json:"lastModifiedTime,omitempty"` + SizeInKB *int64 `json:"sizeInKB,omitempty"` + Type *string `json:"type,omitempty"` + Url *string `json:"url,omitempty"` +} + +func (o *LogFileProperties) GetCreatedTimeAsTime() (*time.Time, error) { + if o.CreatedTime == nil { + return nil, nil + } + return dates.ParseAsFormat(o.CreatedTime, "2006-01-02T15:04:05Z07:00") +} + +func (o *LogFileProperties) SetCreatedTimeAsTime(input time.Time) { + formatted := input.Format("2006-01-02T15:04:05Z07:00") + o.CreatedTime = &formatted +} + +func (o *LogFileProperties) GetLastModifiedTimeAsTime() (*time.Time, error) { + if o.LastModifiedTime == nil { + return nil, nil + } + return dates.ParseAsFormat(o.LastModifiedTime, "2006-01-02T15:04:05Z07:00") +} + +func (o *LogFileProperties) SetLastModifiedTimeAsTime(input time.Time) { + formatted := input.Format("2006-01-02T15:04:05Z07:00") + o.LastModifiedTime = &formatted +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/predicates.go new file mode 100644 index 0000000000000..3b4f9690c5d55 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/predicates.go @@ -0,0 +1,27 @@ +package logfiles + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type LogFileOperationPredicate struct { + Id *string + Name *string + Type *string +} + +func (p LogFileOperationPredicate) Matches(input LogFile) bool { + + if p.Id != nil && (input.Id == nil || *p.Id != *input.Id) { + return false + } + + if p.Name != nil && (input.Name == nil || *p.Name != *input.Name) { + return false + } + + if p.Type != nil && (input.Type == nil || *p.Type != *input.Type) { + return false + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/version.go new file mode 100644 index 0000000000000..5f0a51699f00e --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles/version.go @@ -0,0 +1,12 @@ +package logfiles + +import "fmt" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +const defaultApiVersion = "2022-01-01" + +func userAgent() string { + return fmt.Sprintf("hashicorp/go-azure-sdk/logfiles/%s", defaultApiVersion) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/method_serversfailover.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/method_serversfailover.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/method_serversfailover.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/method_serversfailover.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/version.go index 2fe100ead4b27..062cc1c455a26 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/serverfailover/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/README.md similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/README.md index 903ba8ec30bb6..927869906b015 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart` Documentation -The `serverrestart` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `serverrestart` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/constants.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/constants.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/constants.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/method_serversrestart.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/method_serversrestart.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/method_serversrestart.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/method_serversrestart.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/model_serverrestartparameter.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/model_serverrestartparameter.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/model_serverrestartparameter.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/model_serverrestartparameter.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/version.go index e2aa43b27de46..80aaca6b1f13a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/serverrestart/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/README.md similarity index 96% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/README.md index 68a0a2d840968..15ec8a110ff3a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers` Documentation -The `servers` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2021-05-01`). +The `servers` SDK allows for interaction with the Azure Resource Manager Service `mysql` (API Version `2022-01-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers" +import "github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers" ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/constants.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/constants.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/constants.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_create.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_create.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_create.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_create.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_delete.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_delete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_delete.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_get.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_get.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_get.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_list.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_list.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_list.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_list.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_listbyresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_listbyresourcegroup.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_listbyresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_listbyresourcegroup.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_replicaslistbyserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_replicaslistbyserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_replicaslistbyserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_replicaslistbyserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_update.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_update.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/method_update.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/method_update.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_backup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_backup.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_backup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_backup.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_dataencryption.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_dataencryption.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_dataencryption.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_dataencryption.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_highavailability.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_highavailability.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_highavailability.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_highavailability.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_identity.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_identity.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_identity.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_identity.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_maintenancewindow.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_maintenancewindow.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_maintenancewindow.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_maintenancewindow.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_network.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_network.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_network.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_network.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_server.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_server.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_server.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_server.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_serverforupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_serverforupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_serverforupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_serverforupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_serverproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_serverproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_serverproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_serverproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_serverpropertiesforupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_serverpropertiesforupdate.go similarity index 91% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_serverpropertiesforupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_serverpropertiesforupdate.go index a6b7c345f55ed..a5b79594b3c9d 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_serverpropertiesforupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_serverpropertiesforupdate.go @@ -11,4 +11,5 @@ type ServerPropertiesForUpdate struct { MaintenanceWindow *MaintenanceWindow `json:"maintenanceWindow,omitempty"` ReplicationRole *ReplicationRole `json:"replicationRole,omitempty"` Storage *Storage `json:"storage,omitempty"` + Version *ServerVersion `json:"version,omitempty"` } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_sku.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_sku.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_sku.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_sku.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_storage.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_storage.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_storage.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_storage.go index 3dfb466f07018..ae3776c4e789c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/model_storage.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/model_storage.go @@ -5,7 +5,9 @@ package servers type Storage struct { AutoGrow *EnableStatusEnum `json:"autoGrow,omitempty"` + AutoIoScaling *EnableStatusEnum `json:"autoIoScaling,omitempty"` Iops *int64 `json:"iops,omitempty"` + LogOnDisk *EnableStatusEnum `json:"logOnDisk,omitempty"` StorageSizeGB *int64 `json:"storageSizeGB,omitempty"` StorageSku *string `json:"storageSku,omitempty"` } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/version.go index 111072603c626..ca20aadce54a2 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/servers/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/method_serversstart.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/method_serversstart.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/method_serversstart.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/method_serversstart.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/version.go index c0a1cd1e96f20..4c27bb142235d 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/serverstart/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/id_flexibleserver.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/id_flexibleserver.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/id_flexibleserver.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/id_flexibleserver.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/method_serversstop.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/method_serversstop.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/method_serversstop.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/method_serversstop.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/version.go index 5ba165c24f767..a2f8f0dc7c73f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2022-01-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/serverstop/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/README.md index bd321b7befafb..29f999291cdeb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `VolumeGroupsClient.VolumeGroupsCreate` +### Example Usage: `VolumeGroupsClient.Create` ```go ctx := context.TODO() @@ -31,31 +31,31 @@ payload := volumegroups.VolumeGroupDetails{ } -if err := client.VolumeGroupsCreateThenPoll(ctx, id, payload); err != nil { +if err := client.CreateThenPoll(ctx, id, payload); err != nil { // handle the error } ``` -### Example Usage: `VolumeGroupsClient.VolumeGroupsDelete` +### Example Usage: `VolumeGroupsClient.Delete` ```go ctx := context.TODO() id := volumegroups.NewVolumeGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "volumeGroupValue") -if err := client.VolumeGroupsDeleteThenPoll(ctx, id); err != nil { +if err := client.DeleteThenPoll(ctx, id); err != nil { // handle the error } ``` -### Example Usage: `VolumeGroupsClient.VolumeGroupsGet` +### Example Usage: `VolumeGroupsClient.Get` ```go ctx := context.TODO() id := volumegroups.NewVolumeGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "volumeGroupValue") -read, err := client.VolumeGroupsGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -65,13 +65,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `VolumeGroupsClient.VolumeGroupsListByNetAppAccount` +### Example Usage: `VolumeGroupsClient.ListByNetAppAccount` ```go ctx := context.TODO() id := volumegroups.NewNetAppAccountID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue") -read, err := client.VolumeGroupsListByNetAppAccount(ctx, id) +read, err := client.ListByNetAppAccount(ctx, id) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupscreate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_create.go similarity index 65% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupscreate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_create.go index 3a763156a550b..13500e108f390 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupscreate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_create.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type VolumeGroupsCreateOperationResponse struct { +type CreateOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// VolumeGroupsCreate ... -func (c VolumeGroupsClient) VolumeGroupsCreate(ctx context.Context, id VolumeGroupId, input VolumeGroupDetails) (result VolumeGroupsCreateOperationResponse, err error) { +// Create ... +func (c VolumeGroupsClient) Create(ctx context.Context, id VolumeGroupId, input VolumeGroupDetails) (result CreateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -58,15 +58,15 @@ func (c VolumeGroupsClient) VolumeGroupsCreate(ctx context.Context, id VolumeGro return } -// VolumeGroupsCreateThenPoll performs VolumeGroupsCreate then polls until it's completed -func (c VolumeGroupsClient) VolumeGroupsCreateThenPoll(ctx context.Context, id VolumeGroupId, input VolumeGroupDetails) error { - result, err := c.VolumeGroupsCreate(ctx, id, input) +// CreateThenPoll performs Create then polls until it's completed +func (c VolumeGroupsClient) CreateThenPoll(ctx context.Context, id VolumeGroupId, input VolumeGroupDetails) error { + result, err := c.Create(ctx, id, input) if err != nil { - return fmt.Errorf("performing VolumeGroupsCreate: %+v", err) + return fmt.Errorf("performing Create: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after VolumeGroupsCreate: %+v", err) + return fmt.Errorf("polling after Create: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupsdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_delete.go similarity index 67% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupsdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_delete.go index ce64231243a35..32e6c75b1500f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupsdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_delete.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type VolumeGroupsDeleteOperationResponse struct { +type DeleteOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// VolumeGroupsDelete ... -func (c VolumeGroupsClient) VolumeGroupsDelete(ctx context.Context, id VolumeGroupId) (result VolumeGroupsDeleteOperationResponse, err error) { +// Delete ... +func (c VolumeGroupsClient) Delete(ctx context.Context, id VolumeGroupId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -56,15 +56,15 @@ func (c VolumeGroupsClient) VolumeGroupsDelete(ctx context.Context, id VolumeGro return } -// VolumeGroupsDeleteThenPoll performs VolumeGroupsDelete then polls until it's completed -func (c VolumeGroupsClient) VolumeGroupsDeleteThenPoll(ctx context.Context, id VolumeGroupId) error { - result, err := c.VolumeGroupsDelete(ctx, id) +// DeleteThenPoll performs Delete then polls until it's completed +func (c VolumeGroupsClient) DeleteThenPoll(ctx context.Context, id VolumeGroupId) error { + result, err := c.Delete(ctx, id) if err != nil { - return fmt.Errorf("performing VolumeGroupsDelete: %+v", err) + return fmt.Errorf("performing Delete: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after VolumeGroupsDelete: %+v", err) + return fmt.Errorf("polling after Delete: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupsget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_get.go similarity index 81% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupsget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_get.go index 7bf91f15b5166..6a14cec40c478 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupsget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type VolumeGroupsGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *VolumeGroupDetails } -// VolumeGroupsGet ... -func (c VolumeGroupsClient) VolumeGroupsGet(ctx context.Context, id VolumeGroupId) (result VolumeGroupsGetOperationResponse, err error) { +// Get ... +func (c VolumeGroupsClient) Get(ctx context.Context, id VolumeGroupId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupslistbynetappaccount.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_listbynetappaccount.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupslistbynetappaccount.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_listbynetappaccount.go index 59c9b9fa370c5..0a84dcdd8e0fc 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_volumegroupslistbynetappaccount.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups/method_listbynetappaccount.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type VolumeGroupsListByNetAppAccountOperationResponse struct { +type ListByNetAppAccountOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *VolumeGroupList } -// VolumeGroupsListByNetAppAccount ... -func (c VolumeGroupsClient) VolumeGroupsListByNetAppAccount(ctx context.Context, id NetAppAccountId) (result VolumeGroupsListByNetAppAccountOperationResponse, err error) { +// ListByNetAppAccount ... +func (c VolumeGroupsClient) ListByNetAppAccount(ctx context.Context, id NetAppAccountId) (result ListByNetAppAccountOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/README.md new file mode 100644 index 0000000000000..475baa381e1c5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/README.md @@ -0,0 +1,98 @@ + +## `github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules` Documentation + +The `volumequotarules` SDK allows for interaction with the Azure Resource Manager Service `netapp` (API Version `2022-05-01`). + +This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). + +### Import Path + +```go +import "github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules" +``` + + +### Client Initialization + +```go +client := volumequotarules.NewVolumeQuotaRulesClientWithBaseURI("https://management.azure.com") +client.Client.Authorizer = authorizer +``` + + +### Example Usage: `VolumeQuotaRulesClient.Create` + +```go +ctx := context.TODO() +id := volumequotarules.NewVolumeQuotaRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "capacityPoolValue", "volumeValue", "volumeQuotaRuleValue") + +payload := volumequotarules.VolumeQuotaRule{ + // ... +} + + +if err := client.CreateThenPoll(ctx, id, payload); err != nil { + // handle the error +} +``` + + +### Example Usage: `VolumeQuotaRulesClient.Delete` + +```go +ctx := context.TODO() +id := volumequotarules.NewVolumeQuotaRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "capacityPoolValue", "volumeValue", "volumeQuotaRuleValue") + +if err := client.DeleteThenPoll(ctx, id); err != nil { + // handle the error +} +``` + + +### Example Usage: `VolumeQuotaRulesClient.Get` + +```go +ctx := context.TODO() +id := volumequotarules.NewVolumeQuotaRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "capacityPoolValue", "volumeValue", "volumeQuotaRuleValue") + +read, err := client.Get(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `VolumeQuotaRulesClient.ListByVolume` + +```go +ctx := context.TODO() +id := volumequotarules.NewVolumeID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "capacityPoolValue", "volumeValue") + +read, err := client.ListByVolume(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `VolumeQuotaRulesClient.Update` + +```go +ctx := context.TODO() +id := volumequotarules.NewVolumeQuotaRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "capacityPoolValue", "volumeValue", "volumeQuotaRuleValue") + +payload := volumequotarules.VolumeQuotaRulePatch{ + // ... +} + + +if err := client.UpdateThenPoll(ctx, id, payload); err != nil { + // handle the error +} +``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/client.go new file mode 100644 index 0000000000000..c6c70e112e06c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/client.go @@ -0,0 +1,26 @@ +package volumequotarules + +import ( + "fmt" + + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + sdkEnv "github.com/hashicorp/go-azure-sdk/sdk/environments" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type VolumeQuotaRulesClient struct { + Client *resourcemanager.Client +} + +func NewVolumeQuotaRulesClientWithBaseURI(sdkApi sdkEnv.Api) (*VolumeQuotaRulesClient, error) { + client, err := resourcemanager.NewResourceManagerClient(sdkApi, "volumequotarules", defaultApiVersion) + if err != nil { + return nil, fmt.Errorf("instantiating VolumeQuotaRulesClient: %+v", err) + } + + return &VolumeQuotaRulesClient{ + Client: client, + }, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/constants.go new file mode 100644 index 0000000000000..fb0e41e1afb62 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/constants.go @@ -0,0 +1,113 @@ +package volumequotarules + +import ( + "encoding/json" + "fmt" + "strings" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ProvisioningState string + +const ( + ProvisioningStateAccepted ProvisioningState = "Accepted" + ProvisioningStateCreating ProvisioningState = "Creating" + ProvisioningStateDeleting ProvisioningState = "Deleting" + ProvisioningStateFailed ProvisioningState = "Failed" + ProvisioningStateMoving ProvisioningState = "Moving" + ProvisioningStatePatching ProvisioningState = "Patching" + ProvisioningStateSucceeded ProvisioningState = "Succeeded" +) + +func PossibleValuesForProvisioningState() []string { + return []string{ + string(ProvisioningStateAccepted), + string(ProvisioningStateCreating), + string(ProvisioningStateDeleting), + string(ProvisioningStateFailed), + string(ProvisioningStateMoving), + string(ProvisioningStatePatching), + string(ProvisioningStateSucceeded), + } +} + +func (s *ProvisioningState) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseProvisioningState(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseProvisioningState(input string) (*ProvisioningState, error) { + vals := map[string]ProvisioningState{ + "accepted": ProvisioningStateAccepted, + "creating": ProvisioningStateCreating, + "deleting": ProvisioningStateDeleting, + "failed": ProvisioningStateFailed, + "moving": ProvisioningStateMoving, + "patching": ProvisioningStatePatching, + "succeeded": ProvisioningStateSucceeded, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := ProvisioningState(input) + return &out, nil +} + +type Type string + +const ( + TypeDefaultGroupQuota Type = "DefaultGroupQuota" + TypeDefaultUserQuota Type = "DefaultUserQuota" + TypeIndividualGroupQuota Type = "IndividualGroupQuota" + TypeIndividualUserQuota Type = "IndividualUserQuota" +) + +func PossibleValuesForType() []string { + return []string{ + string(TypeDefaultGroupQuota), + string(TypeDefaultUserQuota), + string(TypeIndividualGroupQuota), + string(TypeIndividualUserQuota), + } +} + +func (s *Type) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseType(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseType(input string) (*Type, error) { + vals := map[string]Type{ + "defaultgroupquota": TypeDefaultGroupQuota, + "defaultuserquota": TypeDefaultUserQuota, + "individualgroupquota": TypeIndividualGroupQuota, + "individualuserquota": TypeIndividualUserQuota, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Type(input) + return &out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/id_volume.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/id_volume.go new file mode 100644 index 0000000000000..306e2dc62196d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/id_volume.go @@ -0,0 +1,153 @@ +package volumequotarules + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = VolumeId{} + +// VolumeId is a struct representing the Resource ID for a Volume +type VolumeId struct { + SubscriptionId string + ResourceGroupName string + NetAppAccountName string + CapacityPoolName string + VolumeName string +} + +// NewVolumeID returns a new VolumeId struct +func NewVolumeID(subscriptionId string, resourceGroupName string, netAppAccountName string, capacityPoolName string, volumeName string) VolumeId { + return VolumeId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + NetAppAccountName: netAppAccountName, + CapacityPoolName: capacityPoolName, + VolumeName: volumeName, + } +} + +// ParseVolumeID parses 'input' into a VolumeId +func ParseVolumeID(input string) (*VolumeId, error) { + parser := resourceids.NewParserFromResourceIdType(VolumeId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := VolumeId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.NetAppAccountName, ok = parsed.Parsed["netAppAccountName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "netAppAccountName", *parsed) + } + + if id.CapacityPoolName, ok = parsed.Parsed["capacityPoolName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "capacityPoolName", *parsed) + } + + if id.VolumeName, ok = parsed.Parsed["volumeName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "volumeName", *parsed) + } + + return &id, nil +} + +// ParseVolumeIDInsensitively parses 'input' case-insensitively into a VolumeId +// note: this method should only be used for API response data and not user input +func ParseVolumeIDInsensitively(input string) (*VolumeId, error) { + parser := resourceids.NewParserFromResourceIdType(VolumeId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := VolumeId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.NetAppAccountName, ok = parsed.Parsed["netAppAccountName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "netAppAccountName", *parsed) + } + + if id.CapacityPoolName, ok = parsed.Parsed["capacityPoolName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "capacityPoolName", *parsed) + } + + if id.VolumeName, ok = parsed.Parsed["volumeName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "volumeName", *parsed) + } + + return &id, nil +} + +// ValidateVolumeID checks that 'input' can be parsed as a Volume ID +func ValidateVolumeID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseVolumeID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Volume ID +func (id VolumeId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.NetApp/netAppAccounts/%s/capacityPools/%s/volumes/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.NetAppAccountName, id.CapacityPoolName, id.VolumeName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Volume ID +func (id VolumeId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftNetApp", "Microsoft.NetApp", "Microsoft.NetApp"), + resourceids.StaticSegment("staticNetAppAccounts", "netAppAccounts", "netAppAccounts"), + resourceids.UserSpecifiedSegment("netAppAccountName", "netAppAccountValue"), + resourceids.StaticSegment("staticCapacityPools", "capacityPools", "capacityPools"), + resourceids.UserSpecifiedSegment("capacityPoolName", "capacityPoolValue"), + resourceids.StaticSegment("staticVolumes", "volumes", "volumes"), + resourceids.UserSpecifiedSegment("volumeName", "volumeValue"), + } +} + +// String returns a human-readable description of this Volume ID +func (id VolumeId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Net App Account Name: %q", id.NetAppAccountName), + fmt.Sprintf("Capacity Pool Name: %q", id.CapacityPoolName), + fmt.Sprintf("Volume Name: %q", id.VolumeName), + } + return fmt.Sprintf("Volume (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/id_volumequotarule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/id_volumequotarule.go new file mode 100644 index 0000000000000..f86acf65be70c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/id_volumequotarule.go @@ -0,0 +1,166 @@ +package volumequotarules + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = VolumeQuotaRuleId{} + +// VolumeQuotaRuleId is a struct representing the Resource ID for a Volume Quota Rule +type VolumeQuotaRuleId struct { + SubscriptionId string + ResourceGroupName string + NetAppAccountName string + CapacityPoolName string + VolumeName string + VolumeQuotaRuleName string +} + +// NewVolumeQuotaRuleID returns a new VolumeQuotaRuleId struct +func NewVolumeQuotaRuleID(subscriptionId string, resourceGroupName string, netAppAccountName string, capacityPoolName string, volumeName string, volumeQuotaRuleName string) VolumeQuotaRuleId { + return VolumeQuotaRuleId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + NetAppAccountName: netAppAccountName, + CapacityPoolName: capacityPoolName, + VolumeName: volumeName, + VolumeQuotaRuleName: volumeQuotaRuleName, + } +} + +// ParseVolumeQuotaRuleID parses 'input' into a VolumeQuotaRuleId +func ParseVolumeQuotaRuleID(input string) (*VolumeQuotaRuleId, error) { + parser := resourceids.NewParserFromResourceIdType(VolumeQuotaRuleId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := VolumeQuotaRuleId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.NetAppAccountName, ok = parsed.Parsed["netAppAccountName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "netAppAccountName", *parsed) + } + + if id.CapacityPoolName, ok = parsed.Parsed["capacityPoolName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "capacityPoolName", *parsed) + } + + if id.VolumeName, ok = parsed.Parsed["volumeName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "volumeName", *parsed) + } + + if id.VolumeQuotaRuleName, ok = parsed.Parsed["volumeQuotaRuleName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "volumeQuotaRuleName", *parsed) + } + + return &id, nil +} + +// ParseVolumeQuotaRuleIDInsensitively parses 'input' case-insensitively into a VolumeQuotaRuleId +// note: this method should only be used for API response data and not user input +func ParseVolumeQuotaRuleIDInsensitively(input string) (*VolumeQuotaRuleId, error) { + parser := resourceids.NewParserFromResourceIdType(VolumeQuotaRuleId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := VolumeQuotaRuleId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.NetAppAccountName, ok = parsed.Parsed["netAppAccountName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "netAppAccountName", *parsed) + } + + if id.CapacityPoolName, ok = parsed.Parsed["capacityPoolName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "capacityPoolName", *parsed) + } + + if id.VolumeName, ok = parsed.Parsed["volumeName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "volumeName", *parsed) + } + + if id.VolumeQuotaRuleName, ok = parsed.Parsed["volumeQuotaRuleName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "volumeQuotaRuleName", *parsed) + } + + return &id, nil +} + +// ValidateVolumeQuotaRuleID checks that 'input' can be parsed as a Volume Quota Rule ID +func ValidateVolumeQuotaRuleID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseVolumeQuotaRuleID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Volume Quota Rule ID +func (id VolumeQuotaRuleId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.NetApp/netAppAccounts/%s/capacityPools/%s/volumes/%s/volumeQuotaRules/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.NetAppAccountName, id.CapacityPoolName, id.VolumeName, id.VolumeQuotaRuleName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Volume Quota Rule ID +func (id VolumeQuotaRuleId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftNetApp", "Microsoft.NetApp", "Microsoft.NetApp"), + resourceids.StaticSegment("staticNetAppAccounts", "netAppAccounts", "netAppAccounts"), + resourceids.UserSpecifiedSegment("netAppAccountName", "netAppAccountValue"), + resourceids.StaticSegment("staticCapacityPools", "capacityPools", "capacityPools"), + resourceids.UserSpecifiedSegment("capacityPoolName", "capacityPoolValue"), + resourceids.StaticSegment("staticVolumes", "volumes", "volumes"), + resourceids.UserSpecifiedSegment("volumeName", "volumeValue"), + resourceids.StaticSegment("staticVolumeQuotaRules", "volumeQuotaRules", "volumeQuotaRules"), + resourceids.UserSpecifiedSegment("volumeQuotaRuleName", "volumeQuotaRuleValue"), + } +} + +// String returns a human-readable description of this Volume Quota Rule ID +func (id VolumeQuotaRuleId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Net App Account Name: %q", id.NetAppAccountName), + fmt.Sprintf("Capacity Pool Name: %q", id.CapacityPoolName), + fmt.Sprintf("Volume Name: %q", id.VolumeName), + fmt.Sprintf("Volume Quota Rule Name: %q", id.VolumeQuotaRuleName), + } + return fmt.Sprintf("Volume Quota Rule (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_create.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_create.go new file mode 100644 index 0000000000000..f052dfadc2f6f --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_create.go @@ -0,0 +1,74 @@ +package volumequotarules + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Create ... +func (c VolumeQuotaRulesClient) Create(ctx context.Context, id VolumeQuotaRuleId, input VolumeQuotaRule) (result CreateOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusCreated, + http.StatusOK, + }, + HttpMethod: http.MethodPut, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// CreateThenPoll performs Create then polls until it's completed +func (c VolumeQuotaRulesClient) CreateThenPoll(ctx context.Context, id VolumeQuotaRuleId, input VolumeQuotaRule) error { + result, err := c.Create(ctx, id, input) + if err != nil { + return fmt.Errorf("performing Create: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Create: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_delete.go new file mode 100644 index 0000000000000..f490494d05410 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_delete.go @@ -0,0 +1,70 @@ +package volumequotarules + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Delete ... +func (c VolumeQuotaRulesClient) Delete(ctx context.Context, id VolumeQuotaRuleId) (result DeleteOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusNoContent, + }, + HttpMethod: http.MethodDelete, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// DeleteThenPoll performs Delete then polls until it's completed +func (c VolumeQuotaRulesClient) DeleteThenPoll(ctx context.Context, id VolumeQuotaRuleId) error { + result, err := c.Delete(ctx, id) + if err != nil { + return fmt.Errorf("performing Delete: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Delete: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_get.go new file mode 100644 index 0000000000000..bed8822bc7973 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_get.go @@ -0,0 +1,51 @@ +package volumequotarules + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *VolumeQuotaRule +} + +// Get ... +func (c VolumeQuotaRulesClient) Get(ctx context.Context, id VolumeQuotaRuleId) (result GetOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_listbyvolume.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_listbyvolume.go new file mode 100644 index 0000000000000..1bdc8b8007cf9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_listbyvolume.go @@ -0,0 +1,52 @@ +package volumequotarules + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListByVolumeOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *VolumeQuotaRulesList +} + +// ListByVolume ... +func (c VolumeQuotaRulesClient) ListByVolume(ctx context.Context, id VolumeId) (result ListByVolumeOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/volumeQuotaRules", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_update.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_update.go new file mode 100644 index 0000000000000..2201827bac1d2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/method_update.go @@ -0,0 +1,74 @@ +package volumequotarules + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type UpdateOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Update ... +func (c VolumeQuotaRulesClient) Update(ctx context.Context, id VolumeQuotaRuleId, input VolumeQuotaRulePatch) (result UpdateOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusOK, + }, + HttpMethod: http.MethodPatch, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// UpdateThenPoll performs Update then polls until it's completed +func (c VolumeQuotaRulesClient) UpdateThenPoll(ctx context.Context, id VolumeQuotaRuleId, input VolumeQuotaRulePatch) error { + result, err := c.Update(ctx, id, input) + if err != nil { + return fmt.Errorf("performing Update: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Update: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarule.go new file mode 100644 index 0000000000000..9436f5c000863 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarule.go @@ -0,0 +1,18 @@ +package volumequotarules + +import ( + "github.com/hashicorp/go-azure-helpers/resourcemanager/systemdata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type VolumeQuotaRule struct { + Id *string `json:"id,omitempty"` + Location string `json:"location"` + Name *string `json:"name,omitempty"` + Properties *VolumeQuotaRulesProperties `json:"properties,omitempty"` + SystemData *systemdata.SystemData `json:"systemData,omitempty"` + Tags *map[string]string `json:"tags,omitempty"` + Type *string `json:"type,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarulepatch.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarulepatch.go new file mode 100644 index 0000000000000..04e5803959e8d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarulepatch.go @@ -0,0 +1,8 @@ +package volumequotarules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type VolumeQuotaRulePatch struct { + Properties *VolumeQuotaRulesProperties `json:"properties,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotaruleslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotaruleslist.go new file mode 100644 index 0000000000000..d9e15cf803555 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotaruleslist.go @@ -0,0 +1,8 @@ +package volumequotarules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type VolumeQuotaRulesList struct { + Value *[]VolumeQuotaRule `json:"value,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarulesproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarulesproperties.go new file mode 100644 index 0000000000000..5ae037e0a23c7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/model_volumequotarulesproperties.go @@ -0,0 +1,11 @@ +package volumequotarules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type VolumeQuotaRulesProperties struct { + ProvisioningState *ProvisioningState `json:"provisioningState,omitempty"` + QuotaSizeInKiBs *int64 `json:"quotaSizeInKiBs,omitempty"` + QuotaTarget *string `json:"quotaTarget,omitempty"` + QuotaType *Type `json:"quotaType,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/version.go new file mode 100644 index 0000000000000..aa45e3bee318d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules/version.go @@ -0,0 +1,12 @@ +package volumequotarules + +import "fmt" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +const defaultApiVersion = "2022-05-01" + +func userAgent() string { + return fmt.Sprintf("hashicorp/go-azure-sdk/volumequotarules/%s", defaultApiVersion) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/adminrules/model_baseadminrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/adminrules/model_baseadminrule.go index e4875f14f9800..bbcabba727eb2 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/adminrules/model_baseadminrule.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/adminrules/model_baseadminrule.go @@ -12,7 +12,7 @@ import ( type BaseAdminRule interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawBaseAdminRuleImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/README.md index f725a2f4663f5..c00203cbfe8fb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/README.md @@ -20,13 +20,13 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `ApplicationGatewayWafDynamicManifestsClient.ApplicationGatewayWafDynamicManifestsDefaultGet` +### Example Usage: `ApplicationGatewayWafDynamicManifestsClient.DefaultGet` ```go ctx := context.TODO() id := applicationgatewaywafdynamicmanifests.NewLocationID("12345678-1234-9876-4563-123456789012", "locationValue") -read, err := client.ApplicationGatewayWafDynamicManifestsDefaultGet(ctx, id) +read, err := client.DefaultGet(ctx, id) if err != nil { // handle the error } @@ -36,14 +36,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ApplicationGatewayWafDynamicManifestsClient.ApplicationGatewayWafDynamicManifestsGet` +### Example Usage: `ApplicationGatewayWafDynamicManifestsClient.Get` ```go ctx := context.TODO() id := applicationgatewaywafdynamicmanifests.NewLocationID("12345678-1234-9876-4563-123456789012", "locationValue") -// alternatively `client.ApplicationGatewayWafDynamicManifestsGet(ctx, id)` can be used to do batched pagination -items, err := client.ApplicationGatewayWafDynamicManifestsGetComplete(ctx, id) +// alternatively `client.Get(ctx, id)` can be used to do batched pagination +items, err := client.GetComplete(ctx, id) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_applicationgatewaywafdynamicmanifestsdefaultget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_defaultget.go similarity index 74% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_applicationgatewaywafdynamicmanifestsdefaultget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_defaultget.go index e9251c3e22570..f5479ef99a08c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_applicationgatewaywafdynamicmanifestsdefaultget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_defaultget.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ApplicationGatewayWafDynamicManifestsDefaultGetOperationResponse struct { +type DefaultGetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ApplicationGatewayWafDynamicManifestResult } -// ApplicationGatewayWafDynamicManifestsDefaultGet ... -func (c ApplicationGatewayWafDynamicManifestsClient) ApplicationGatewayWafDynamicManifestsDefaultGet(ctx context.Context, id LocationId) (result ApplicationGatewayWafDynamicManifestsDefaultGetOperationResponse, err error) { +// DefaultGet ... +func (c ApplicationGatewayWafDynamicManifestsClient) DefaultGet(ctx context.Context, id LocationId) (result DefaultGetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_applicationgatewaywafdynamicmanifestsget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_get.go similarity index 51% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_applicationgatewaywafdynamicmanifestsget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_get.go index b66cd668d1f85..005eeecec6635 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_applicationgatewaywafdynamicmanifestsget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/applicationgatewaywafdynamicmanifests/method_get.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ApplicationGatewayWafDynamicManifestsGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]ApplicationGatewayWafDynamicManifestResult } -type ApplicationGatewayWafDynamicManifestsGetCompleteResult struct { +type GetCompleteResult struct { Items []ApplicationGatewayWafDynamicManifestResult } -// ApplicationGatewayWafDynamicManifestsGet ... -func (c ApplicationGatewayWafDynamicManifestsClient) ApplicationGatewayWafDynamicManifestsGet(ctx context.Context, id LocationId) (result ApplicationGatewayWafDynamicManifestsGetOperationResponse, err error) { +// Get ... +func (c ApplicationGatewayWafDynamicManifestsClient) Get(ctx context.Context, id LocationId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c ApplicationGatewayWafDynamicManifestsClient) ApplicationGatewayWafDynami return } -// ApplicationGatewayWafDynamicManifestsGetComplete retrieves all the results into a single object -func (c ApplicationGatewayWafDynamicManifestsClient) ApplicationGatewayWafDynamicManifestsGetComplete(ctx context.Context, id LocationId) (ApplicationGatewayWafDynamicManifestsGetCompleteResult, error) { - return c.ApplicationGatewayWafDynamicManifestsGetCompleteMatchingPredicate(ctx, id, ApplicationGatewayWafDynamicManifestResultOperationPredicate{}) +// GetComplete retrieves all the results into a single object +func (c ApplicationGatewayWafDynamicManifestsClient) GetComplete(ctx context.Context, id LocationId) (GetCompleteResult, error) { + return c.GetCompleteMatchingPredicate(ctx, id, ApplicationGatewayWafDynamicManifestResultOperationPredicate{}) } -// ApplicationGatewayWafDynamicManifestsGetCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c ApplicationGatewayWafDynamicManifestsClient) ApplicationGatewayWafDynamicManifestsGetCompleteMatchingPredicate(ctx context.Context, id LocationId, predicate ApplicationGatewayWafDynamicManifestResultOperationPredicate) (result ApplicationGatewayWafDynamicManifestsGetCompleteResult, err error) { +// GetCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c ApplicationGatewayWafDynamicManifestsClient) GetCompleteMatchingPredicate(ctx context.Context, id LocationId, predicate ApplicationGatewayWafDynamicManifestResultOperationPredicate) (result GetCompleteResult, err error) { items := make([]ApplicationGatewayWafDynamicManifestResult, 0) - resp, err := c.ApplicationGatewayWafDynamicManifestsGet(ctx, id) + resp, err := c.Get(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c ApplicationGatewayWafDynamicManifestsClient) ApplicationGatewayWafDynami } } - result = ApplicationGatewayWafDynamicManifestsGetCompleteResult{ + result = GetCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/README.md index cbbcd2bd50050..5a155608f9c28 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/README.md @@ -20,14 +20,14 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `AvailableServiceAliasesClient.AvailableServiceAliasesList` +### Example Usage: `AvailableServiceAliasesClient.List` ```go ctx := context.TODO() id := availableservicealiases.NewLocationID("12345678-1234-9876-4563-123456789012", "locationValue") -// alternatively `client.AvailableServiceAliasesList(ctx, id)` can be used to do batched pagination -items, err := client.AvailableServiceAliasesListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -37,14 +37,14 @@ for _, item := range items { ``` -### Example Usage: `AvailableServiceAliasesClient.AvailableServiceAliasesListByResourceGroup` +### Example Usage: `AvailableServiceAliasesClient.ListByResourceGroup` ```go ctx := context.TODO() id := availableservicealiases.NewProviderLocationID("12345678-1234-9876-4563-123456789012", "example-resource-group", "locationValue") -// alternatively `client.AvailableServiceAliasesListByResourceGroup(ctx, id)` can be used to do batched pagination -items, err := client.AvailableServiceAliasesListByResourceGroupComplete(ctx, id) +// alternatively `client.ListByResourceGroup(ctx, id)` can be used to do batched pagination +items, err := client.ListByResourceGroupComplete(ctx, id) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_availableservicealiaseslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_list.go similarity index 56% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_availableservicealiaseslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_list.go index 3643de6300089..be3024e340230 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_availableservicealiaseslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_list.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AvailableServiceAliasesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]AvailableServiceAlias } -type AvailableServiceAliasesListCompleteResult struct { +type ListCompleteResult struct { Items []AvailableServiceAlias } -// AvailableServiceAliasesList ... -func (c AvailableServiceAliasesClient) AvailableServiceAliasesList(ctx context.Context, id LocationId) (result AvailableServiceAliasesListOperationResponse, err error) { +// List ... +func (c AvailableServiceAliasesClient) List(ctx context.Context, id LocationId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c AvailableServiceAliasesClient) AvailableServiceAliasesList(ctx context.C return } -// AvailableServiceAliasesListComplete retrieves all the results into a single object -func (c AvailableServiceAliasesClient) AvailableServiceAliasesListComplete(ctx context.Context, id LocationId) (AvailableServiceAliasesListCompleteResult, error) { - return c.AvailableServiceAliasesListCompleteMatchingPredicate(ctx, id, AvailableServiceAliasOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c AvailableServiceAliasesClient) ListComplete(ctx context.Context, id LocationId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, AvailableServiceAliasOperationPredicate{}) } -// AvailableServiceAliasesListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c AvailableServiceAliasesClient) AvailableServiceAliasesListCompleteMatchingPredicate(ctx context.Context, id LocationId, predicate AvailableServiceAliasOperationPredicate) (result AvailableServiceAliasesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c AvailableServiceAliasesClient) ListCompleteMatchingPredicate(ctx context.Context, id LocationId, predicate AvailableServiceAliasOperationPredicate) (result ListCompleteResult, err error) { items := make([]AvailableServiceAlias, 0) - resp, err := c.AvailableServiceAliasesList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c AvailableServiceAliasesClient) AvailableServiceAliasesListCompleteMatchi } } - result = AvailableServiceAliasesListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_availableservicealiaseslistbyresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_listbyresourcegroup.go similarity index 50% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_availableservicealiaseslistbyresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_listbyresourcegroup.go index a6ef5ba7a977f..7114e56916a74 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_availableservicealiaseslistbyresourcegroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/availableservicealiases/method_listbyresourcegroup.go @@ -12,18 +12,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AvailableServiceAliasesListByResourceGroupOperationResponse struct { +type ListByResourceGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]AvailableServiceAlias } -type AvailableServiceAliasesListByResourceGroupCompleteResult struct { +type ListByResourceGroupCompleteResult struct { Items []AvailableServiceAlias } -// AvailableServiceAliasesListByResourceGroup ... -func (c AvailableServiceAliasesClient) AvailableServiceAliasesListByResourceGroup(ctx context.Context, id ProviderLocationId) (result AvailableServiceAliasesListByResourceGroupOperationResponse, err error) { +// ListByResourceGroup ... +func (c AvailableServiceAliasesClient) ListByResourceGroup(ctx context.Context, id ProviderLocationId) (result ListByResourceGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -60,16 +60,16 @@ func (c AvailableServiceAliasesClient) AvailableServiceAliasesListByResourceGrou return } -// AvailableServiceAliasesListByResourceGroupComplete retrieves all the results into a single object -func (c AvailableServiceAliasesClient) AvailableServiceAliasesListByResourceGroupComplete(ctx context.Context, id ProviderLocationId) (AvailableServiceAliasesListByResourceGroupCompleteResult, error) { - return c.AvailableServiceAliasesListByResourceGroupCompleteMatchingPredicate(ctx, id, AvailableServiceAliasOperationPredicate{}) +// ListByResourceGroupComplete retrieves all the results into a single object +func (c AvailableServiceAliasesClient) ListByResourceGroupComplete(ctx context.Context, id ProviderLocationId) (ListByResourceGroupCompleteResult, error) { + return c.ListByResourceGroupCompleteMatchingPredicate(ctx, id, AvailableServiceAliasOperationPredicate{}) } -// AvailableServiceAliasesListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c AvailableServiceAliasesClient) AvailableServiceAliasesListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id ProviderLocationId, predicate AvailableServiceAliasOperationPredicate) (result AvailableServiceAliasesListByResourceGroupCompleteResult, err error) { +// ListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c AvailableServiceAliasesClient) ListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id ProviderLocationId, predicate AvailableServiceAliasOperationPredicate) (result ListByResourceGroupCompleteResult, err error) { items := make([]AvailableServiceAlias, 0) - resp, err := c.AvailableServiceAliasesListByResourceGroup(ctx, id) + resp, err := c.ListByResourceGroup(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -82,7 +82,7 @@ func (c AvailableServiceAliasesClient) AvailableServiceAliasesListByResourceGrou } } - result = AvailableServiceAliasesListByResourceGroupCompleteResult{ + result = ListByResourceGroupCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/firewallpolicyrulecollectiongroups/model_firewallpolicyrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/firewallpolicyrulecollectiongroups/model_firewallpolicyrule.go index faab335e6eea9..5cd71ef998ac5 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/firewallpolicyrulecollectiongroups/model_firewallpolicyrule.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/firewallpolicyrulecollectiongroups/model_firewallpolicyrule.go @@ -12,7 +12,7 @@ import ( type FirewallPolicyRule interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFirewallPolicyRuleImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/firewallpolicyrulecollectiongroups/model_firewallpolicyrulecollection.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/firewallpolicyrulecollectiongroups/model_firewallpolicyrulecollection.go index 04974173f3fdc..30f1b958dc852 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/firewallpolicyrulecollectiongroups/model_firewallpolicyrulecollection.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/firewallpolicyrulecollectiongroups/model_firewallpolicyrulecollection.go @@ -12,7 +12,7 @@ import ( type FirewallPolicyRuleCollection interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFirewallPolicyRuleCollectionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/networkmanageractiveconfigurations/model_activebasesecurityadminrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/networkmanageractiveconfigurations/model_activebasesecurityadminrule.go index 3580a8da11fa4..c19193dfd8204 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/networkmanageractiveconfigurations/model_activebasesecurityadminrule.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/networkmanageractiveconfigurations/model_activebasesecurityadminrule.go @@ -12,7 +12,7 @@ import ( type ActiveBaseSecurityAdminRule interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawActiveBaseSecurityAdminRuleImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/networkmanagereffectivesecurityadminrules/model_effectivebasesecurityadminrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/networkmanagereffectivesecurityadminrules/model_effectivebasesecurityadminrule.go index 6a40be283b3be..9ef5715f8e426 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/networkmanagereffectivesecurityadminrules/model_effectivebasesecurityadminrule.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/networkmanagereffectivesecurityadminrules/model_effectivebasesecurityadminrule.go @@ -12,7 +12,7 @@ import ( type EffectiveBaseSecurityAdminRule interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEffectiveBaseSecurityAdminRuleImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/README.md new file mode 100644 index 0000000000000..0691d3a676450 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/README.md @@ -0,0 +1,103 @@ + +## `github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules` Documentation + +The `tagrules` SDK allows for interaction with the Azure Resource Manager Service `newrelic` (API Version `2022-07-01`). + +This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). + +### Import Path + +```go +import "github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules" +``` + + +### Client Initialization + +```go +client := tagrules.NewTagRulesClientWithBaseURI("https://management.azure.com") +client.Client.Authorizer = authorizer +``` + + +### Example Usage: `TagRulesClient.CreateOrUpdate` + +```go +ctx := context.TODO() +id := tagrules.NewTagRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "monitorValue", "tagRuleValue") + +payload := tagrules.TagRule{ + // ... +} + + +if err := client.CreateOrUpdateThenPoll(ctx, id, payload); err != nil { + // handle the error +} +``` + + +### Example Usage: `TagRulesClient.Delete` + +```go +ctx := context.TODO() +id := tagrules.NewTagRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "monitorValue", "tagRuleValue") + +if err := client.DeleteThenPoll(ctx, id); err != nil { + // handle the error +} +``` + + +### Example Usage: `TagRulesClient.Get` + +```go +ctx := context.TODO() +id := tagrules.NewTagRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "monitorValue", "tagRuleValue") + +read, err := client.Get(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `TagRulesClient.ListByNewRelicMonitorResource` + +```go +ctx := context.TODO() +id := tagrules.NewMonitorID("12345678-1234-9876-4563-123456789012", "example-resource-group", "monitorValue") + +// alternatively `client.ListByNewRelicMonitorResource(ctx, id)` can be used to do batched pagination +items, err := client.ListByNewRelicMonitorResourceComplete(ctx, id) +if err != nil { + // handle the error +} +for _, item := range items { + // do something +} +``` + + +### Example Usage: `TagRulesClient.Update` + +```go +ctx := context.TODO() +id := tagrules.NewTagRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "monitorValue", "tagRuleValue") + +payload := tagrules.TagRuleUpdate{ + // ... +} + + +read, err := client.Update(ctx, id, payload) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/client.go new file mode 100644 index 0000000000000..e35a62f311620 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/client.go @@ -0,0 +1,26 @@ +package tagrules + +import ( + "fmt" + + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + sdkEnv "github.com/hashicorp/go-azure-sdk/sdk/environments" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type TagRulesClient struct { + Client *resourcemanager.Client +} + +func NewTagRulesClientWithBaseURI(sdkApi sdkEnv.Api) (*TagRulesClient, error) { + client, err := resourcemanager.NewResourceManagerClient(sdkApi, "tagrules", defaultApiVersion) + if err != nil { + return nil, fmt.Errorf("instantiating TagRulesClient: %+v", err) + } + + return &TagRulesClient{ + Client: client, + }, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/constants.go new file mode 100644 index 0000000000000..c8fd2d9e8a4ae --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/constants.go @@ -0,0 +1,277 @@ +package tagrules + +import ( + "encoding/json" + "fmt" + "strings" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ProvisioningState string + +const ( + ProvisioningStateAccepted ProvisioningState = "Accepted" + ProvisioningStateCanceled ProvisioningState = "Canceled" + ProvisioningStateCreating ProvisioningState = "Creating" + ProvisioningStateDeleted ProvisioningState = "Deleted" + ProvisioningStateDeleting ProvisioningState = "Deleting" + ProvisioningStateFailed ProvisioningState = "Failed" + ProvisioningStateNotSpecified ProvisioningState = "NotSpecified" + ProvisioningStateSucceeded ProvisioningState = "Succeeded" + ProvisioningStateUpdating ProvisioningState = "Updating" +) + +func PossibleValuesForProvisioningState() []string { + return []string{ + string(ProvisioningStateAccepted), + string(ProvisioningStateCanceled), + string(ProvisioningStateCreating), + string(ProvisioningStateDeleted), + string(ProvisioningStateDeleting), + string(ProvisioningStateFailed), + string(ProvisioningStateNotSpecified), + string(ProvisioningStateSucceeded), + string(ProvisioningStateUpdating), + } +} + +func (s *ProvisioningState) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseProvisioningState(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseProvisioningState(input string) (*ProvisioningState, error) { + vals := map[string]ProvisioningState{ + "accepted": ProvisioningStateAccepted, + "canceled": ProvisioningStateCanceled, + "creating": ProvisioningStateCreating, + "deleted": ProvisioningStateDeleted, + "deleting": ProvisioningStateDeleting, + "failed": ProvisioningStateFailed, + "notspecified": ProvisioningStateNotSpecified, + "succeeded": ProvisioningStateSucceeded, + "updating": ProvisioningStateUpdating, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := ProvisioningState(input) + return &out, nil +} + +type SendAadLogsStatus string + +const ( + SendAadLogsStatusDisabled SendAadLogsStatus = "Disabled" + SendAadLogsStatusEnabled SendAadLogsStatus = "Enabled" +) + +func PossibleValuesForSendAadLogsStatus() []string { + return []string{ + string(SendAadLogsStatusDisabled), + string(SendAadLogsStatusEnabled), + } +} + +func (s *SendAadLogsStatus) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseSendAadLogsStatus(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseSendAadLogsStatus(input string) (*SendAadLogsStatus, error) { + vals := map[string]SendAadLogsStatus{ + "disabled": SendAadLogsStatusDisabled, + "enabled": SendAadLogsStatusEnabled, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := SendAadLogsStatus(input) + return &out, nil +} + +type SendActivityLogsStatus string + +const ( + SendActivityLogsStatusDisabled SendActivityLogsStatus = "Disabled" + SendActivityLogsStatusEnabled SendActivityLogsStatus = "Enabled" +) + +func PossibleValuesForSendActivityLogsStatus() []string { + return []string{ + string(SendActivityLogsStatusDisabled), + string(SendActivityLogsStatusEnabled), + } +} + +func (s *SendActivityLogsStatus) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseSendActivityLogsStatus(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseSendActivityLogsStatus(input string) (*SendActivityLogsStatus, error) { + vals := map[string]SendActivityLogsStatus{ + "disabled": SendActivityLogsStatusDisabled, + "enabled": SendActivityLogsStatusEnabled, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := SendActivityLogsStatus(input) + return &out, nil +} + +type SendMetricsStatus string + +const ( + SendMetricsStatusDisabled SendMetricsStatus = "Disabled" + SendMetricsStatusEnabled SendMetricsStatus = "Enabled" +) + +func PossibleValuesForSendMetricsStatus() []string { + return []string{ + string(SendMetricsStatusDisabled), + string(SendMetricsStatusEnabled), + } +} + +func (s *SendMetricsStatus) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseSendMetricsStatus(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseSendMetricsStatus(input string) (*SendMetricsStatus, error) { + vals := map[string]SendMetricsStatus{ + "disabled": SendMetricsStatusDisabled, + "enabled": SendMetricsStatusEnabled, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := SendMetricsStatus(input) + return &out, nil +} + +type SendSubscriptionLogsStatus string + +const ( + SendSubscriptionLogsStatusDisabled SendSubscriptionLogsStatus = "Disabled" + SendSubscriptionLogsStatusEnabled SendSubscriptionLogsStatus = "Enabled" +) + +func PossibleValuesForSendSubscriptionLogsStatus() []string { + return []string{ + string(SendSubscriptionLogsStatusDisabled), + string(SendSubscriptionLogsStatusEnabled), + } +} + +func (s *SendSubscriptionLogsStatus) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseSendSubscriptionLogsStatus(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseSendSubscriptionLogsStatus(input string) (*SendSubscriptionLogsStatus, error) { + vals := map[string]SendSubscriptionLogsStatus{ + "disabled": SendSubscriptionLogsStatusDisabled, + "enabled": SendSubscriptionLogsStatusEnabled, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := SendSubscriptionLogsStatus(input) + return &out, nil +} + +type TagAction string + +const ( + TagActionExclude TagAction = "Exclude" + TagActionInclude TagAction = "Include" +) + +func PossibleValuesForTagAction() []string { + return []string{ + string(TagActionExclude), + string(TagActionInclude), + } +} + +func (s *TagAction) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseTagAction(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseTagAction(input string) (*TagAction, error) { + vals := map[string]TagAction{ + "exclude": TagActionExclude, + "include": TagActionInclude, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := TagAction(input) + return &out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/id_monitor.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/id_monitor.go new file mode 100644 index 0000000000000..91def2f39e15c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/id_monitor.go @@ -0,0 +1,127 @@ +package tagrules + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = MonitorId{} + +// MonitorId is a struct representing the Resource ID for a Monitor +type MonitorId struct { + SubscriptionId string + ResourceGroupName string + MonitorName string +} + +// NewMonitorID returns a new MonitorId struct +func NewMonitorID(subscriptionId string, resourceGroupName string, monitorName string) MonitorId { + return MonitorId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + MonitorName: monitorName, + } +} + +// ParseMonitorID parses 'input' into a MonitorId +func ParseMonitorID(input string) (*MonitorId, error) { + parser := resourceids.NewParserFromResourceIdType(MonitorId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := MonitorId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.MonitorName, ok = parsed.Parsed["monitorName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "monitorName", *parsed) + } + + return &id, nil +} + +// ParseMonitorIDInsensitively parses 'input' case-insensitively into a MonitorId +// note: this method should only be used for API response data and not user input +func ParseMonitorIDInsensitively(input string) (*MonitorId, error) { + parser := resourceids.NewParserFromResourceIdType(MonitorId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := MonitorId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.MonitorName, ok = parsed.Parsed["monitorName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "monitorName", *parsed) + } + + return &id, nil +} + +// ValidateMonitorID checks that 'input' can be parsed as a Monitor ID +func ValidateMonitorID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseMonitorID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Monitor ID +func (id MonitorId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/NewRelic.Observability/monitors/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.MonitorName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Monitor ID +func (id MonitorId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticNewRelicObservability", "NewRelic.Observability", "NewRelic.Observability"), + resourceids.StaticSegment("staticMonitors", "monitors", "monitors"), + resourceids.UserSpecifiedSegment("monitorName", "monitorValue"), + } +} + +// String returns a human-readable description of this Monitor ID +func (id MonitorId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Monitor Name: %q", id.MonitorName), + } + return fmt.Sprintf("Monitor (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/id_tagrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/id_tagrule.go new file mode 100644 index 0000000000000..0f89ab5c649b4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/id_tagrule.go @@ -0,0 +1,140 @@ +package tagrules + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = TagRuleId{} + +// TagRuleId is a struct representing the Resource ID for a Tag Rule +type TagRuleId struct { + SubscriptionId string + ResourceGroupName string + MonitorName string + TagRuleName string +} + +// NewTagRuleID returns a new TagRuleId struct +func NewTagRuleID(subscriptionId string, resourceGroupName string, monitorName string, tagRuleName string) TagRuleId { + return TagRuleId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + MonitorName: monitorName, + TagRuleName: tagRuleName, + } +} + +// ParseTagRuleID parses 'input' into a TagRuleId +func ParseTagRuleID(input string) (*TagRuleId, error) { + parser := resourceids.NewParserFromResourceIdType(TagRuleId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := TagRuleId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.MonitorName, ok = parsed.Parsed["monitorName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "monitorName", *parsed) + } + + if id.TagRuleName, ok = parsed.Parsed["tagRuleName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "tagRuleName", *parsed) + } + + return &id, nil +} + +// ParseTagRuleIDInsensitively parses 'input' case-insensitively into a TagRuleId +// note: this method should only be used for API response data and not user input +func ParseTagRuleIDInsensitively(input string) (*TagRuleId, error) { + parser := resourceids.NewParserFromResourceIdType(TagRuleId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := TagRuleId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.MonitorName, ok = parsed.Parsed["monitorName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "monitorName", *parsed) + } + + if id.TagRuleName, ok = parsed.Parsed["tagRuleName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "tagRuleName", *parsed) + } + + return &id, nil +} + +// ValidateTagRuleID checks that 'input' can be parsed as a Tag Rule ID +func ValidateTagRuleID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseTagRuleID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Tag Rule ID +func (id TagRuleId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/NewRelic.Observability/monitors/%s/tagRules/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.MonitorName, id.TagRuleName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Tag Rule ID +func (id TagRuleId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticNewRelicObservability", "NewRelic.Observability", "NewRelic.Observability"), + resourceids.StaticSegment("staticMonitors", "monitors", "monitors"), + resourceids.UserSpecifiedSegment("monitorName", "monitorValue"), + resourceids.StaticSegment("staticTagRules", "tagRules", "tagRules"), + resourceids.UserSpecifiedSegment("tagRuleName", "tagRuleValue"), + } +} + +// String returns a human-readable description of this Tag Rule ID +func (id TagRuleId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Monitor Name: %q", id.MonitorName), + fmt.Sprintf("Tag Rule Name: %q", id.TagRuleName), + } + return fmt.Sprintf("Tag Rule (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_createorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_createorupdate.go new file mode 100644 index 0000000000000..0a114c6602f57 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_createorupdate.go @@ -0,0 +1,74 @@ +package tagrules + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateOrUpdateOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// CreateOrUpdate ... +func (c TagRulesClient) CreateOrUpdate(ctx context.Context, id TagRuleId, input TagRule) (result CreateOrUpdateOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusCreated, + http.StatusOK, + }, + HttpMethod: http.MethodPut, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// CreateOrUpdateThenPoll performs CreateOrUpdate then polls until it's completed +func (c TagRulesClient) CreateOrUpdateThenPoll(ctx context.Context, id TagRuleId, input TagRule) error { + result, err := c.CreateOrUpdate(ctx, id, input) + if err != nil { + return fmt.Errorf("performing CreateOrUpdate: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after CreateOrUpdate: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_delete.go new file mode 100644 index 0000000000000..4161493d1b977 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_delete.go @@ -0,0 +1,71 @@ +package tagrules + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Delete ... +func (c TagRulesClient) Delete(ctx context.Context, id TagRuleId) (result DeleteOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusNoContent, + http.StatusOK, + }, + HttpMethod: http.MethodDelete, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// DeleteThenPoll performs Delete then polls until it's completed +func (c TagRulesClient) DeleteThenPoll(ctx context.Context, id TagRuleId) error { + result, err := c.Delete(ctx, id) + if err != nil { + return fmt.Errorf("performing Delete: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Delete: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_get.go new file mode 100644 index 0000000000000..48b6368423a09 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_get.go @@ -0,0 +1,51 @@ +package tagrules + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *TagRule +} + +// Get ... +func (c TagRulesClient) Get(ctx context.Context, id TagRuleId) (result GetOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_listbynewrelicmonitorresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_listbynewrelicmonitorresource.go new file mode 100644 index 0000000000000..f785b30da5b7c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_listbynewrelicmonitorresource.go @@ -0,0 +1,89 @@ +package tagrules + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListByNewRelicMonitorResourceOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]TagRule +} + +type ListByNewRelicMonitorResourceCompleteResult struct { + Items []TagRule +} + +// ListByNewRelicMonitorResource ... +func (c TagRulesClient) ListByNewRelicMonitorResource(ctx context.Context, id MonitorId) (result ListByNewRelicMonitorResourceOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/tagRules", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]TagRule `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListByNewRelicMonitorResourceComplete retrieves all the results into a single object +func (c TagRulesClient) ListByNewRelicMonitorResourceComplete(ctx context.Context, id MonitorId) (ListByNewRelicMonitorResourceCompleteResult, error) { + return c.ListByNewRelicMonitorResourceCompleteMatchingPredicate(ctx, id, TagRuleOperationPredicate{}) +} + +// ListByNewRelicMonitorResourceCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c TagRulesClient) ListByNewRelicMonitorResourceCompleteMatchingPredicate(ctx context.Context, id MonitorId, predicate TagRuleOperationPredicate) (result ListByNewRelicMonitorResourceCompleteResult, err error) { + items := make([]TagRule, 0) + + resp, err := c.ListByNewRelicMonitorResource(ctx, id) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListByNewRelicMonitorResourceCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_update.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_update.go new file mode 100644 index 0000000000000..5f8ada856f1b9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/method_update.go @@ -0,0 +1,55 @@ +package tagrules + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type UpdateOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *TagRule +} + +// Update ... +func (c TagRulesClient) Update(ctx context.Context, id TagRuleId, input TagRuleUpdate) (result UpdateOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPatch, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_filteringtag.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_filteringtag.go new file mode 100644 index 0000000000000..13b1c7f0b877f --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_filteringtag.go @@ -0,0 +1,10 @@ +package tagrules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type FilteringTag struct { + Action *TagAction `json:"action,omitempty"` + Name *string `json:"name,omitempty"` + Value *string `json:"value,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_logrules.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_logrules.go new file mode 100644 index 0000000000000..1bd42a848b5be --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_logrules.go @@ -0,0 +1,11 @@ +package tagrules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type LogRules struct { + FilteringTags *[]FilteringTag `json:"filteringTags,omitempty"` + SendAadLogs *SendAadLogsStatus `json:"sendAadLogs,omitempty"` + SendActivityLogs *SendActivityLogsStatus `json:"sendActivityLogs,omitempty"` + SendSubscriptionLogs *SendSubscriptionLogsStatus `json:"sendSubscriptionLogs,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_metricrules.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_metricrules.go new file mode 100644 index 0000000000000..75e75e9aeb192 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_metricrules.go @@ -0,0 +1,10 @@ +package tagrules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type MetricRules struct { + FilteringTags *[]FilteringTag `json:"filteringTags,omitempty"` + SendMetrics *SendMetricsStatus `json:"sendMetrics,omitempty"` + UserEmail *string `json:"userEmail,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_monitoringtagrulesproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_monitoringtagrulesproperties.go new file mode 100644 index 0000000000000..8900c72ac040c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_monitoringtagrulesproperties.go @@ -0,0 +1,10 @@ +package tagrules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type MonitoringTagRulesProperties struct { + LogRules *LogRules `json:"logRules,omitempty"` + MetricRules *MetricRules `json:"metricRules,omitempty"` + ProvisioningState *ProvisioningState `json:"provisioningState,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagrule.go new file mode 100644 index 0000000000000..be251a10a4d2c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagrule.go @@ -0,0 +1,16 @@ +package tagrules + +import ( + "github.com/hashicorp/go-azure-helpers/resourcemanager/systemdata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type TagRule struct { + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Properties MonitoringTagRulesProperties `json:"properties"` + SystemData *systemdata.SystemData `json:"systemData,omitempty"` + Type *string `json:"type,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagruleupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagruleupdate.go new file mode 100644 index 0000000000000..75517f3f96d2c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagruleupdate.go @@ -0,0 +1,8 @@ +package tagrules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type TagRuleUpdate struct { + Properties *TagRuleUpdateProperties `json:"properties,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagruleupdateproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagruleupdateproperties.go new file mode 100644 index 0000000000000..57895124c7556 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/model_tagruleupdateproperties.go @@ -0,0 +1,9 @@ +package tagrules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type TagRuleUpdateProperties struct { + LogRules *LogRules `json:"logRules,omitempty"` + MetricRules *MetricRules `json:"metricRules,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/predicates.go new file mode 100644 index 0000000000000..b8e7c533c9f0e --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/predicates.go @@ -0,0 +1,27 @@ +package tagrules + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type TagRuleOperationPredicate struct { + Id *string + Name *string + Type *string +} + +func (p TagRuleOperationPredicate) Matches(input TagRule) bool { + + if p.Id != nil && (input.Id == nil || *p.Id != *input.Id) { + return false + } + + if p.Name != nil && (input.Name == nil || *p.Name != *input.Name) { + return false + } + + if p.Type != nil && (input.Type == nil || *p.Type != *input.Type) { + return false + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/version.go new file mode 100644 index 0000000000000..c7df0f2437ea6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules/version.go @@ -0,0 +1,12 @@ +package tagrules + +import "fmt" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +const defaultApiVersion = "2022-07-01" + +func userAgent() string { + return fmt.Sprintf("hashicorp/go-azure-sdk/tagrules/%s", defaultApiVersion) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/README.md index 4c0f2cc2c76ea..5545c936616cf 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `QueryPacksClient.QueryPacksCreateOrUpdate` +### Example Usage: `QueryPacksClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := querypacks.LogAnalyticsQueryPack{ } -read, err := client.QueryPacksCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,7 +41,7 @@ if model := read.Model; model != nil { ``` -### Example Usage: `QueryPacksClient.QueryPacksCreateOrUpdateWithoutName` +### Example Usage: `QueryPacksClient.CreateOrUpdateWithoutName` ```go ctx := context.TODO() @@ -52,7 +52,7 @@ payload := querypacks.LogAnalyticsQueryPack{ } -read, err := client.QueryPacksCreateOrUpdateWithoutName(ctx, id, payload) +read, err := client.CreateOrUpdateWithoutName(ctx, id, payload) if err != nil { // handle the error } @@ -62,13 +62,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `QueryPacksClient.QueryPacksDelete` +### Example Usage: `QueryPacksClient.Delete` ```go ctx := context.TODO() id := querypacks.NewQueryPackID("12345678-1234-9876-4563-123456789012", "example-resource-group", "queryPackValue") -read, err := client.QueryPacksDelete(ctx, id) +read, err := client.Delete(ctx, id) if err != nil { // handle the error } @@ -78,13 +78,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `QueryPacksClient.QueryPacksGet` +### Example Usage: `QueryPacksClient.Get` ```go ctx := context.TODO() id := querypacks.NewQueryPackID("12345678-1234-9876-4563-123456789012", "example-resource-group", "queryPackValue") -read, err := client.QueryPacksGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -94,14 +94,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `QueryPacksClient.QueryPacksList` +### Example Usage: `QueryPacksClient.List` ```go ctx := context.TODO() id := querypacks.NewSubscriptionID("12345678-1234-9876-4563-123456789012") -// alternatively `client.QueryPacksList(ctx, id)` can be used to do batched pagination -items, err := client.QueryPacksListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -111,14 +111,14 @@ for _, item := range items { ``` -### Example Usage: `QueryPacksClient.QueryPacksListByResourceGroup` +### Example Usage: `QueryPacksClient.ListByResourceGroup` ```go ctx := context.TODO() id := querypacks.NewResourceGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group") -// alternatively `client.QueryPacksListByResourceGroup(ctx, id)` can be used to do batched pagination -items, err := client.QueryPacksListByResourceGroupComplete(ctx, id) +// alternatively `client.ListByResourceGroup(ctx, id)` can be used to do batched pagination +items, err := client.ListByResourceGroupComplete(ctx, id) if err != nil { // handle the error } @@ -128,7 +128,7 @@ for _, item := range items { ``` -### Example Usage: `QueryPacksClient.QueryPacksUpdateTags` +### Example Usage: `QueryPacksClient.UpdateTags` ```go ctx := context.TODO() @@ -139,7 +139,7 @@ payload := querypacks.TagsResource{ } -read, err := client.QueryPacksUpdateTags(ctx, id, payload) +read, err := client.UpdateTags(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackscreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_createorupdate.go similarity index 78% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackscreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_createorupdate.go index 71b3da2be4176..cb03c319811f7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackscreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_createorupdate.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type QueryPacksCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *LogAnalyticsQueryPack } -// QueryPacksCreateOrUpdate ... -func (c QueryPacksClient) QueryPacksCreateOrUpdate(ctx context.Context, id QueryPackId, input LogAnalyticsQueryPack) (result QueryPacksCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c QueryPacksClient) CreateOrUpdate(ctx context.Context, id QueryPackId, input LogAnalyticsQueryPack) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackscreateorupdatewithoutname.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_createorupdatewithoutname.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackscreateorupdatewithoutname.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_createorupdatewithoutname.go index 54aa3868fe85b..e67c68054e72f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackscreateorupdatewithoutname.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_createorupdatewithoutname.go @@ -13,14 +13,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type QueryPacksCreateOrUpdateWithoutNameOperationResponse struct { +type CreateOrUpdateWithoutNameOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *LogAnalyticsQueryPack } -// QueryPacksCreateOrUpdateWithoutName ... -func (c QueryPacksClient) QueryPacksCreateOrUpdateWithoutName(ctx context.Context, id commonids.ResourceGroupId, input LogAnalyticsQueryPack) (result QueryPacksCreateOrUpdateWithoutNameOperationResponse, err error) { +// CreateOrUpdateWithoutName ... +func (c QueryPacksClient) CreateOrUpdateWithoutName(ctx context.Context, id commonids.ResourceGroupId, input LogAnalyticsQueryPack) (result CreateOrUpdateWithoutNameOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_delete.go similarity index 80% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_delete.go index 5eae5b2fb4cbb..c9137572bc33d 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_delete.go @@ -11,13 +11,13 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type QueryPacksDeleteOperationResponse struct { +type DeleteOperationResponse struct { HttpResponse *http.Response OData *odata.OData } -// QueryPacksDelete ... -func (c QueryPacksClient) QueryPacksDelete(ctx context.Context, id QueryPackId) (result QueryPacksDeleteOperationResponse, err error) { +// Delete ... +func (c QueryPacksClient) Delete(ctx context.Context, id QueryPackId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_get.go similarity index 82% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_get.go index 5844470a58df1..9ae8ae69114bf 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type QueryPacksGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *LogAnalyticsQueryPack } -// QueryPacksGet ... -func (c QueryPacksClient) QueryPacksGet(ctx context.Context, id QueryPackId) (result QueryPacksGetOperationResponse, err error) { +// Get ... +func (c QueryPacksClient) Get(ctx context.Context, id QueryPackId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_list.go similarity index 60% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_list.go index 008fc4bb5a481..5c30a554675a6 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_list.go @@ -13,18 +13,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type QueryPacksListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]LogAnalyticsQueryPack } -type QueryPacksListCompleteResult struct { +type ListCompleteResult struct { Items []LogAnalyticsQueryPack } -// QueryPacksList ... -func (c QueryPacksClient) QueryPacksList(ctx context.Context, id commonids.SubscriptionId) (result QueryPacksListOperationResponse, err error) { +// List ... +func (c QueryPacksClient) List(ctx context.Context, id commonids.SubscriptionId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -61,16 +61,16 @@ func (c QueryPacksClient) QueryPacksList(ctx context.Context, id commonids.Subsc return } -// QueryPacksListComplete retrieves all the results into a single object -func (c QueryPacksClient) QueryPacksListComplete(ctx context.Context, id commonids.SubscriptionId) (QueryPacksListCompleteResult, error) { - return c.QueryPacksListCompleteMatchingPredicate(ctx, id, LogAnalyticsQueryPackOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c QueryPacksClient) ListComplete(ctx context.Context, id commonids.SubscriptionId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, LogAnalyticsQueryPackOperationPredicate{}) } -// QueryPacksListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c QueryPacksClient) QueryPacksListCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate LogAnalyticsQueryPackOperationPredicate) (result QueryPacksListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c QueryPacksClient) ListCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate LogAnalyticsQueryPackOperationPredicate) (result ListCompleteResult, err error) { items := make([]LogAnalyticsQueryPack, 0) - resp, err := c.QueryPacksList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -83,7 +83,7 @@ func (c QueryPacksClient) QueryPacksListCompleteMatchingPredicate(ctx context.Co } } - result = QueryPacksListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackslistbyresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_listbyresourcegroup.go similarity index 55% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackslistbyresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_listbyresourcegroup.go index 148edebb6b2c1..a31cb8ff84c36 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypackslistbyresourcegroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_listbyresourcegroup.go @@ -13,18 +13,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type QueryPacksListByResourceGroupOperationResponse struct { +type ListByResourceGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]LogAnalyticsQueryPack } -type QueryPacksListByResourceGroupCompleteResult struct { +type ListByResourceGroupCompleteResult struct { Items []LogAnalyticsQueryPack } -// QueryPacksListByResourceGroup ... -func (c QueryPacksClient) QueryPacksListByResourceGroup(ctx context.Context, id commonids.ResourceGroupId) (result QueryPacksListByResourceGroupOperationResponse, err error) { +// ListByResourceGroup ... +func (c QueryPacksClient) ListByResourceGroup(ctx context.Context, id commonids.ResourceGroupId) (result ListByResourceGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -61,16 +61,16 @@ func (c QueryPacksClient) QueryPacksListByResourceGroup(ctx context.Context, id return } -// QueryPacksListByResourceGroupComplete retrieves all the results into a single object -func (c QueryPacksClient) QueryPacksListByResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId) (QueryPacksListByResourceGroupCompleteResult, error) { - return c.QueryPacksListByResourceGroupCompleteMatchingPredicate(ctx, id, LogAnalyticsQueryPackOperationPredicate{}) +// ListByResourceGroupComplete retrieves all the results into a single object +func (c QueryPacksClient) ListByResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId) (ListByResourceGroupCompleteResult, error) { + return c.ListByResourceGroupCompleteMatchingPredicate(ctx, id, LogAnalyticsQueryPackOperationPredicate{}) } -// QueryPacksListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c QueryPacksClient) QueryPacksListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate LogAnalyticsQueryPackOperationPredicate) (result QueryPacksListByResourceGroupCompleteResult, err error) { +// ListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c QueryPacksClient) ListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate LogAnalyticsQueryPackOperationPredicate) (result ListByResourceGroupCompleteResult, err error) { items := make([]LogAnalyticsQueryPack, 0) - resp, err := c.QueryPacksListByResourceGroup(ctx, id) + resp, err := c.ListByResourceGroup(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -83,7 +83,7 @@ func (c QueryPacksClient) QueryPacksListByResourceGroupCompleteMatchingPredicate } } - result = QueryPacksListByResourceGroupCompleteResult{ + result = ListByResourceGroupCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksupdatetags.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_updatetags.go similarity index 80% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksupdatetags.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_updatetags.go index 6efa3a9b9dda2..3ab71888aa21a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_querypacksupdatetags.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/operationalinsights/2019-09-01/querypacks/method_updatetags.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type QueryPacksUpdateTagsOperationResponse struct { +type UpdateTagsOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *LogAnalyticsQueryPack } -// QueryPacksUpdateTags ... -func (c QueryPacksClient) QueryPacksUpdateTags(ctx context.Context, id QueryPackId, input TagsResource) (result QueryPacksUpdateTagsOperationResponse, err error) { +// UpdateTags ... +func (c QueryPacksClient) UpdateTags(ctx context.Context, id QueryPackId, input TagsResource) (result UpdateTagsOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/README.md index 7daae24ef0dec..f2c3faa709dc5 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `ContactProfileClient.ContactProfilesCreateOrUpdate` +### Example Usage: `ContactProfileClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,31 +31,31 @@ payload := contactprofile.ContactProfile{ } -if err := client.ContactProfilesCreateOrUpdateThenPoll(ctx, id, payload); err != nil { +if err := client.CreateOrUpdateThenPoll(ctx, id, payload); err != nil { // handle the error } ``` -### Example Usage: `ContactProfileClient.ContactProfilesDelete` +### Example Usage: `ContactProfileClient.Delete` ```go ctx := context.TODO() id := contactprofile.NewContactProfileID("12345678-1234-9876-4563-123456789012", "example-resource-group", "contactProfileValue") -if err := client.ContactProfilesDeleteThenPoll(ctx, id); err != nil { +if err := client.DeleteThenPoll(ctx, id); err != nil { // handle the error } ``` -### Example Usage: `ContactProfileClient.ContactProfilesGet` +### Example Usage: `ContactProfileClient.Get` ```go ctx := context.TODO() id := contactprofile.NewContactProfileID("12345678-1234-9876-4563-123456789012", "example-resource-group", "contactProfileValue") -read, err := client.ContactProfilesGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -65,14 +65,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ContactProfileClient.ContactProfilesList` +### Example Usage: `ContactProfileClient.List` ```go ctx := context.TODO() id := contactprofile.NewResourceGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group") -// alternatively `client.ContactProfilesList(ctx, id)` can be used to do batched pagination -items, err := client.ContactProfilesListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } @@ -82,14 +82,14 @@ for _, item := range items { ``` -### Example Usage: `ContactProfileClient.ContactProfilesListBySubscription` +### Example Usage: `ContactProfileClient.ListBySubscription` ```go ctx := context.TODO() id := contactprofile.NewSubscriptionID("12345678-1234-9876-4563-123456789012") -// alternatively `client.ContactProfilesListBySubscription(ctx, id)` can be used to do batched pagination -items, err := client.ContactProfilesListBySubscriptionComplete(ctx, id) +// alternatively `client.ListBySubscription(ctx, id)` can be used to do batched pagination +items, err := client.ListBySubscriptionComplete(ctx, id) if err != nil { // handle the error } @@ -99,7 +99,7 @@ for _, item := range items { ``` -### Example Usage: `ContactProfileClient.ContactProfilesUpdateTags` +### Example Usage: `ContactProfileClient.UpdateTags` ```go ctx := context.TODO() @@ -110,7 +110,7 @@ payload := contactprofile.TagsObject{ } -if err := client.ContactProfilesUpdateTagsThenPoll(ctx, id, payload); err != nil { +if err := client.UpdateTagsThenPoll(ctx, id, payload); err != nil { // handle the error } ``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesdelete.go deleted file mode 100644 index b6f859bafe2a8..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesdelete.go +++ /dev/null @@ -1,71 +0,0 @@ -package contactprofile - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" - "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type ContactProfilesDeleteOperationResponse struct { - Poller pollers.Poller - HttpResponse *http.Response - OData *odata.OData -} - -// ContactProfilesDelete ... -func (c ContactProfileClient) ContactProfilesDelete(ctx context.Context, id ContactProfileId) (result ContactProfilesDeleteOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusAccepted, - http.StatusNoContent, - http.StatusOK, - }, - HttpMethod: http.MethodDelete, - Path: id.ID(), - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.Execute(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) - if err != nil { - return - } - - return -} - -// ContactProfilesDeleteThenPoll performs ContactProfilesDelete then polls until it's completed -func (c ContactProfileClient) ContactProfilesDeleteThenPoll(ctx context.Context, id ContactProfileId) error { - result, err := c.ContactProfilesDelete(ctx, id) - if err != nil { - return fmt.Errorf("performing ContactProfilesDelete: %+v", err) - } - - if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after ContactProfilesDelete: %+v", err) - } - - return nil -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilescreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_createorupdate.go similarity index 62% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilescreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_createorupdate.go index 677a88777cc49..1e1224e433426 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilescreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_createorupdate.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContactProfilesCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// ContactProfilesCreateOrUpdate ... -func (c ContactProfileClient) ContactProfilesCreateOrUpdate(ctx context.Context, id ContactProfileId, input ContactProfile) (result ContactProfilesCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c ContactProfileClient) CreateOrUpdate(ctx context.Context, id ContactProfileId, input ContactProfile) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -59,15 +59,15 @@ func (c ContactProfileClient) ContactProfilesCreateOrUpdate(ctx context.Context, return } -// ContactProfilesCreateOrUpdateThenPoll performs ContactProfilesCreateOrUpdate then polls until it's completed -func (c ContactProfileClient) ContactProfilesCreateOrUpdateThenPoll(ctx context.Context, id ContactProfileId, input ContactProfile) error { - result, err := c.ContactProfilesCreateOrUpdate(ctx, id, input) +// CreateOrUpdateThenPoll performs CreateOrUpdate then polls until it's completed +func (c ContactProfileClient) CreateOrUpdateThenPoll(ctx context.Context, id ContactProfileId, input ContactProfile) error { + result, err := c.CreateOrUpdate(ctx, id, input) if err != nil { - return fmt.Errorf("performing ContactProfilesCreateOrUpdate: %+v", err) + return fmt.Errorf("performing CreateOrUpdate: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after ContactProfilesCreateOrUpdate: %+v", err) + return fmt.Errorf("polling after CreateOrUpdate: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_delete.go new file mode 100644 index 0000000000000..2ac7f8dc2351d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_delete.go @@ -0,0 +1,71 @@ +package contactprofile + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Delete ... +func (c ContactProfileClient) Delete(ctx context.Context, id ContactProfileId) (result DeleteOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusNoContent, + http.StatusOK, + }, + HttpMethod: http.MethodDelete, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// DeleteThenPoll performs Delete then polls until it's completed +func (c ContactProfileClient) DeleteThenPoll(ctx context.Context, id ContactProfileId) error { + result, err := c.Delete(ctx, id) + if err != nil { + return fmt.Errorf("performing Delete: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Delete: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_get.go similarity index 80% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_get.go index 4d167b1f876b1..8976b1ce612c3 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContactProfilesGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ContactProfile } -// ContactProfilesGet ... -func (c ContactProfileClient) ContactProfilesGet(ctx context.Context, id ContactProfileId) (result ContactProfilesGetOperationResponse, err error) { +// Get ... +func (c ContactProfileClient) Get(ctx context.Context, id ContactProfileId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofileslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_list.go similarity index 58% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofileslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_list.go index 99fbc73ec8fc9..e04b1c71b5c3e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofileslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_list.go @@ -13,18 +13,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContactProfilesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]ContactProfile } -type ContactProfilesListCompleteResult struct { +type ListCompleteResult struct { Items []ContactProfile } -// ContactProfilesList ... -func (c ContactProfileClient) ContactProfilesList(ctx context.Context, id commonids.ResourceGroupId) (result ContactProfilesListOperationResponse, err error) { +// List ... +func (c ContactProfileClient) List(ctx context.Context, id commonids.ResourceGroupId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -61,16 +61,16 @@ func (c ContactProfileClient) ContactProfilesList(ctx context.Context, id common return } -// ContactProfilesListComplete retrieves all the results into a single object -func (c ContactProfileClient) ContactProfilesListComplete(ctx context.Context, id commonids.ResourceGroupId) (ContactProfilesListCompleteResult, error) { - return c.ContactProfilesListCompleteMatchingPredicate(ctx, id, ContactProfileOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c ContactProfileClient) ListComplete(ctx context.Context, id commonids.ResourceGroupId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, ContactProfileOperationPredicate{}) } -// ContactProfilesListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c ContactProfileClient) ContactProfilesListCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate ContactProfileOperationPredicate) (result ContactProfilesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c ContactProfileClient) ListCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate ContactProfileOperationPredicate) (result ListCompleteResult, err error) { items := make([]ContactProfile, 0) - resp, err := c.ContactProfilesList(ctx, id) + resp, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -83,7 +83,7 @@ func (c ContactProfileClient) ContactProfilesListCompleteMatchingPredicate(ctx c } } - result = ContactProfilesListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofileslistbysubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_listbysubscription.go similarity index 54% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofileslistbysubscription.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_listbysubscription.go index cdea2cff0460c..c93a631d44256 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofileslistbysubscription.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_listbysubscription.go @@ -13,18 +13,18 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContactProfilesListBySubscriptionOperationResponse struct { +type ListBySubscriptionOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]ContactProfile } -type ContactProfilesListBySubscriptionCompleteResult struct { +type ListBySubscriptionCompleteResult struct { Items []ContactProfile } -// ContactProfilesListBySubscription ... -func (c ContactProfileClient) ContactProfilesListBySubscription(ctx context.Context, id commonids.SubscriptionId) (result ContactProfilesListBySubscriptionOperationResponse, err error) { +// ListBySubscription ... +func (c ContactProfileClient) ListBySubscription(ctx context.Context, id commonids.SubscriptionId) (result ListBySubscriptionOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -61,16 +61,16 @@ func (c ContactProfileClient) ContactProfilesListBySubscription(ctx context.Cont return } -// ContactProfilesListBySubscriptionComplete retrieves all the results into a single object -func (c ContactProfileClient) ContactProfilesListBySubscriptionComplete(ctx context.Context, id commonids.SubscriptionId) (ContactProfilesListBySubscriptionCompleteResult, error) { - return c.ContactProfilesListBySubscriptionCompleteMatchingPredicate(ctx, id, ContactProfileOperationPredicate{}) +// ListBySubscriptionComplete retrieves all the results into a single object +func (c ContactProfileClient) ListBySubscriptionComplete(ctx context.Context, id commonids.SubscriptionId) (ListBySubscriptionCompleteResult, error) { + return c.ListBySubscriptionCompleteMatchingPredicate(ctx, id, ContactProfileOperationPredicate{}) } -// ContactProfilesListBySubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c ContactProfileClient) ContactProfilesListBySubscriptionCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate ContactProfileOperationPredicate) (result ContactProfilesListBySubscriptionCompleteResult, err error) { +// ListBySubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c ContactProfileClient) ListBySubscriptionCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate ContactProfileOperationPredicate) (result ListBySubscriptionCompleteResult, err error) { items := make([]ContactProfile, 0) - resp, err := c.ContactProfilesListBySubscription(ctx, id) + resp, err := c.ListBySubscription(ctx, id) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -83,7 +83,7 @@ func (c ContactProfileClient) ContactProfilesListBySubscriptionCompleteMatchingP } } - result = ContactProfilesListBySubscriptionCompleteResult{ + result = ListBySubscriptionCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesupdatetags.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_updatetags.go similarity index 63% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesupdatetags.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_updatetags.go index bae72802f418e..e8e193cb2da54 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_contactprofilesupdatetags.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/orbital/2022-11-01/contactprofile/method_updatetags.go @@ -14,14 +14,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ContactProfilesUpdateTagsOperationResponse struct { +type UpdateTagsOperationResponse struct { Poller pollers.Poller HttpResponse *http.Response OData *odata.OData } -// ContactProfilesUpdateTags ... -func (c ContactProfileClient) ContactProfilesUpdateTags(ctx context.Context, id ContactProfileId, input TagsObject) (result ContactProfilesUpdateTagsOperationResponse, err error) { +// UpdateTags ... +func (c ContactProfileClient) UpdateTags(ctx context.Context, id ContactProfileId, input TagsObject) (result UpdateTagsOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -59,15 +59,15 @@ func (c ContactProfileClient) ContactProfilesUpdateTags(ctx context.Context, id return } -// ContactProfilesUpdateTagsThenPoll performs ContactProfilesUpdateTags then polls until it's completed -func (c ContactProfileClient) ContactProfilesUpdateTagsThenPoll(ctx context.Context, id ContactProfileId, input TagsObject) error { - result, err := c.ContactProfilesUpdateTags(ctx, id, input) +// UpdateTagsThenPoll performs UpdateTags then polls until it's completed +func (c ContactProfileClient) UpdateTagsThenPoll(ctx context.Context, id ContactProfileId, input TagsObject) error { + result, err := c.UpdateTags(ctx, id, input) if err != nil { - return fmt.Errorf("performing ContactProfilesUpdateTags: %+v", err) + return fmt.Errorf("performing UpdateTags: %+v", err) } if err := result.Poller.PollUntilDone(ctx); err != nil { - return fmt.Errorf("polling after ContactProfilesUpdateTags: %+v", err) + return fmt.Errorf("polling after UpdateTags: %+v", err) } return nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/README.md index 5e27d94b3b606..481148f35a1da 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/README.md @@ -20,13 +20,13 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `RemediationsClient.RemediationsCancelAtManagementGroup` +### Example Usage: `RemediationsClient.CancelAtManagementGroup` ```go ctx := context.TODO() id := remediations.NewProviders2RemediationID("managementGroupIdValue", "remediationValue") -read, err := client.RemediationsCancelAtManagementGroup(ctx, id) +read, err := client.CancelAtManagementGroup(ctx, id) if err != nil { // handle the error } @@ -36,13 +36,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsCancelAtResource` +### Example Usage: `RemediationsClient.CancelAtResource` ```go ctx := context.TODO() id := remediations.NewScopedRemediationID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "remediationValue") -read, err := client.RemediationsCancelAtResource(ctx, id) +read, err := client.CancelAtResource(ctx, id) if err != nil { // handle the error } @@ -52,13 +52,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsCancelAtResourceGroup` +### Example Usage: `RemediationsClient.CancelAtResourceGroup` ```go ctx := context.TODO() id := remediations.NewProviderRemediationID("12345678-1234-9876-4563-123456789012", "example-resource-group", "remediationValue") -read, err := client.RemediationsCancelAtResourceGroup(ctx, id) +read, err := client.CancelAtResourceGroup(ctx, id) if err != nil { // handle the error } @@ -68,13 +68,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsCancelAtSubscription` +### Example Usage: `RemediationsClient.CancelAtSubscription` ```go ctx := context.TODO() id := remediations.NewRemediationID("12345678-1234-9876-4563-123456789012", "remediationValue") -read, err := client.RemediationsCancelAtSubscription(ctx, id) +read, err := client.CancelAtSubscription(ctx, id) if err != nil { // handle the error } @@ -84,7 +84,7 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsCreateOrUpdateAtManagementGroup` +### Example Usage: `RemediationsClient.CreateOrUpdateAtManagementGroup` ```go ctx := context.TODO() @@ -95,7 +95,7 @@ payload := remediations.Remediation{ } -read, err := client.RemediationsCreateOrUpdateAtManagementGroup(ctx, id, payload) +read, err := client.CreateOrUpdateAtManagementGroup(ctx, id, payload) if err != nil { // handle the error } @@ -105,7 +105,7 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsCreateOrUpdateAtResource` +### Example Usage: `RemediationsClient.CreateOrUpdateAtResource` ```go ctx := context.TODO() @@ -116,7 +116,7 @@ payload := remediations.Remediation{ } -read, err := client.RemediationsCreateOrUpdateAtResource(ctx, id, payload) +read, err := client.CreateOrUpdateAtResource(ctx, id, payload) if err != nil { // handle the error } @@ -126,7 +126,7 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsCreateOrUpdateAtResourceGroup` +### Example Usage: `RemediationsClient.CreateOrUpdateAtResourceGroup` ```go ctx := context.TODO() @@ -137,7 +137,7 @@ payload := remediations.Remediation{ } -read, err := client.RemediationsCreateOrUpdateAtResourceGroup(ctx, id, payload) +read, err := client.CreateOrUpdateAtResourceGroup(ctx, id, payload) if err != nil { // handle the error } @@ -147,7 +147,7 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsCreateOrUpdateAtSubscription` +### Example Usage: `RemediationsClient.CreateOrUpdateAtSubscription` ```go ctx := context.TODO() @@ -158,7 +158,7 @@ payload := remediations.Remediation{ } -read, err := client.RemediationsCreateOrUpdateAtSubscription(ctx, id, payload) +read, err := client.CreateOrUpdateAtSubscription(ctx, id, payload) if err != nil { // handle the error } @@ -168,13 +168,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsDeleteAtManagementGroup` +### Example Usage: `RemediationsClient.DeleteAtManagementGroup` ```go ctx := context.TODO() id := remediations.NewProviders2RemediationID("managementGroupIdValue", "remediationValue") -read, err := client.RemediationsDeleteAtManagementGroup(ctx, id) +read, err := client.DeleteAtManagementGroup(ctx, id) if err != nil { // handle the error } @@ -184,13 +184,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsDeleteAtResource` +### Example Usage: `RemediationsClient.DeleteAtResource` ```go ctx := context.TODO() id := remediations.NewScopedRemediationID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "remediationValue") -read, err := client.RemediationsDeleteAtResource(ctx, id) +read, err := client.DeleteAtResource(ctx, id) if err != nil { // handle the error } @@ -200,13 +200,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsDeleteAtResourceGroup` +### Example Usage: `RemediationsClient.DeleteAtResourceGroup` ```go ctx := context.TODO() id := remediations.NewProviderRemediationID("12345678-1234-9876-4563-123456789012", "example-resource-group", "remediationValue") -read, err := client.RemediationsDeleteAtResourceGroup(ctx, id) +read, err := client.DeleteAtResourceGroup(ctx, id) if err != nil { // handle the error } @@ -216,13 +216,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsDeleteAtSubscription` +### Example Usage: `RemediationsClient.DeleteAtSubscription` ```go ctx := context.TODO() id := remediations.NewRemediationID("12345678-1234-9876-4563-123456789012", "remediationValue") -read, err := client.RemediationsDeleteAtSubscription(ctx, id) +read, err := client.DeleteAtSubscription(ctx, id) if err != nil { // handle the error } @@ -232,13 +232,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsGetAtManagementGroup` +### Example Usage: `RemediationsClient.GetAtManagementGroup` ```go ctx := context.TODO() id := remediations.NewProviders2RemediationID("managementGroupIdValue", "remediationValue") -read, err := client.RemediationsGetAtManagementGroup(ctx, id) +read, err := client.GetAtManagementGroup(ctx, id) if err != nil { // handle the error } @@ -248,13 +248,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsGetAtResource` +### Example Usage: `RemediationsClient.GetAtResource` ```go ctx := context.TODO() id := remediations.NewScopedRemediationID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "remediationValue") -read, err := client.RemediationsGetAtResource(ctx, id) +read, err := client.GetAtResource(ctx, id) if err != nil { // handle the error } @@ -264,13 +264,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsGetAtResourceGroup` +### Example Usage: `RemediationsClient.GetAtResourceGroup` ```go ctx := context.TODO() id := remediations.NewProviderRemediationID("12345678-1234-9876-4563-123456789012", "example-resource-group", "remediationValue") -read, err := client.RemediationsGetAtResourceGroup(ctx, id) +read, err := client.GetAtResourceGroup(ctx, id) if err != nil { // handle the error } @@ -280,13 +280,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsGetAtSubscription` +### Example Usage: `RemediationsClient.GetAtSubscription` ```go ctx := context.TODO() id := remediations.NewRemediationID("12345678-1234-9876-4563-123456789012", "remediationValue") -read, err := client.RemediationsGetAtSubscription(ctx, id) +read, err := client.GetAtSubscription(ctx, id) if err != nil { // handle the error } @@ -296,14 +296,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `RemediationsClient.RemediationsListDeploymentsAtManagementGroup` +### Example Usage: `RemediationsClient.ListDeploymentsAtManagementGroup` ```go ctx := context.TODO() id := remediations.NewProviders2RemediationID("managementGroupIdValue", "remediationValue") -// alternatively `client.RemediationsListDeploymentsAtManagementGroup(ctx, id, remediations.DefaultRemediationsListDeploymentsAtManagementGroupOperationOptions())` can be used to do batched pagination -items, err := client.RemediationsListDeploymentsAtManagementGroupComplete(ctx, id, remediations.DefaultRemediationsListDeploymentsAtManagementGroupOperationOptions()) +// alternatively `client.ListDeploymentsAtManagementGroup(ctx, id, remediations.DefaultListDeploymentsAtManagementGroupOperationOptions())` can be used to do batched pagination +items, err := client.ListDeploymentsAtManagementGroupComplete(ctx, id, remediations.DefaultListDeploymentsAtManagementGroupOperationOptions()) if err != nil { // handle the error } @@ -313,14 +313,14 @@ for _, item := range items { ``` -### Example Usage: `RemediationsClient.RemediationsListDeploymentsAtResource` +### Example Usage: `RemediationsClient.ListDeploymentsAtResource` ```go ctx := context.TODO() id := remediations.NewScopedRemediationID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "remediationValue") -// alternatively `client.RemediationsListDeploymentsAtResource(ctx, id, remediations.DefaultRemediationsListDeploymentsAtResourceOperationOptions())` can be used to do batched pagination -items, err := client.RemediationsListDeploymentsAtResourceComplete(ctx, id, remediations.DefaultRemediationsListDeploymentsAtResourceOperationOptions()) +// alternatively `client.ListDeploymentsAtResource(ctx, id, remediations.DefaultListDeploymentsAtResourceOperationOptions())` can be used to do batched pagination +items, err := client.ListDeploymentsAtResourceComplete(ctx, id, remediations.DefaultListDeploymentsAtResourceOperationOptions()) if err != nil { // handle the error } @@ -330,14 +330,14 @@ for _, item := range items { ``` -### Example Usage: `RemediationsClient.RemediationsListDeploymentsAtResourceGroup` +### Example Usage: `RemediationsClient.ListDeploymentsAtResourceGroup` ```go ctx := context.TODO() id := remediations.NewProviderRemediationID("12345678-1234-9876-4563-123456789012", "example-resource-group", "remediationValue") -// alternatively `client.RemediationsListDeploymentsAtResourceGroup(ctx, id, remediations.DefaultRemediationsListDeploymentsAtResourceGroupOperationOptions())` can be used to do batched pagination -items, err := client.RemediationsListDeploymentsAtResourceGroupComplete(ctx, id, remediations.DefaultRemediationsListDeploymentsAtResourceGroupOperationOptions()) +// alternatively `client.ListDeploymentsAtResourceGroup(ctx, id, remediations.DefaultListDeploymentsAtResourceGroupOperationOptions())` can be used to do batched pagination +items, err := client.ListDeploymentsAtResourceGroupComplete(ctx, id, remediations.DefaultListDeploymentsAtResourceGroupOperationOptions()) if err != nil { // handle the error } @@ -347,14 +347,14 @@ for _, item := range items { ``` -### Example Usage: `RemediationsClient.RemediationsListDeploymentsAtSubscription` +### Example Usage: `RemediationsClient.ListDeploymentsAtSubscription` ```go ctx := context.TODO() id := remediations.NewRemediationID("12345678-1234-9876-4563-123456789012", "remediationValue") -// alternatively `client.RemediationsListDeploymentsAtSubscription(ctx, id, remediations.DefaultRemediationsListDeploymentsAtSubscriptionOperationOptions())` can be used to do batched pagination -items, err := client.RemediationsListDeploymentsAtSubscriptionComplete(ctx, id, remediations.DefaultRemediationsListDeploymentsAtSubscriptionOperationOptions()) +// alternatively `client.ListDeploymentsAtSubscription(ctx, id, remediations.DefaultListDeploymentsAtSubscriptionOperationOptions())` can be used to do batched pagination +items, err := client.ListDeploymentsAtSubscriptionComplete(ctx, id, remediations.DefaultListDeploymentsAtSubscriptionOperationOptions()) if err != nil { // handle the error } @@ -364,14 +364,14 @@ for _, item := range items { ``` -### Example Usage: `RemediationsClient.RemediationsListForManagementGroup` +### Example Usage: `RemediationsClient.ListForManagementGroup` ```go ctx := context.TODO() id := remediations.NewManagementGroupID("managementGroupIdValue") -// alternatively `client.RemediationsListForManagementGroup(ctx, id, remediations.DefaultRemediationsListForManagementGroupOperationOptions())` can be used to do batched pagination -items, err := client.RemediationsListForManagementGroupComplete(ctx, id, remediations.DefaultRemediationsListForManagementGroupOperationOptions()) +// alternatively `client.ListForManagementGroup(ctx, id, remediations.DefaultListForManagementGroupOperationOptions())` can be used to do batched pagination +items, err := client.ListForManagementGroupComplete(ctx, id, remediations.DefaultListForManagementGroupOperationOptions()) if err != nil { // handle the error } @@ -381,14 +381,14 @@ for _, item := range items { ``` -### Example Usage: `RemediationsClient.RemediationsListForResource` +### Example Usage: `RemediationsClient.ListForResource` ```go ctx := context.TODO() id := remediations.NewScopeID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group") -// alternatively `client.RemediationsListForResource(ctx, id, remediations.DefaultRemediationsListForResourceOperationOptions())` can be used to do batched pagination -items, err := client.RemediationsListForResourceComplete(ctx, id, remediations.DefaultRemediationsListForResourceOperationOptions()) +// alternatively `client.ListForResource(ctx, id, remediations.DefaultListForResourceOperationOptions())` can be used to do batched pagination +items, err := client.ListForResourceComplete(ctx, id, remediations.DefaultListForResourceOperationOptions()) if err != nil { // handle the error } @@ -398,14 +398,14 @@ for _, item := range items { ``` -### Example Usage: `RemediationsClient.RemediationsListForResourceGroup` +### Example Usage: `RemediationsClient.ListForResourceGroup` ```go ctx := context.TODO() id := remediations.NewResourceGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group") -// alternatively `client.RemediationsListForResourceGroup(ctx, id, remediations.DefaultRemediationsListForResourceGroupOperationOptions())` can be used to do batched pagination -items, err := client.RemediationsListForResourceGroupComplete(ctx, id, remediations.DefaultRemediationsListForResourceGroupOperationOptions()) +// alternatively `client.ListForResourceGroup(ctx, id, remediations.DefaultListForResourceGroupOperationOptions())` can be used to do batched pagination +items, err := client.ListForResourceGroupComplete(ctx, id, remediations.DefaultListForResourceGroupOperationOptions()) if err != nil { // handle the error } @@ -415,14 +415,14 @@ for _, item := range items { ``` -### Example Usage: `RemediationsClient.RemediationsListForSubscription` +### Example Usage: `RemediationsClient.ListForSubscription` ```go ctx := context.TODO() id := remediations.NewSubscriptionID("12345678-1234-9876-4563-123456789012") -// alternatively `client.RemediationsListForSubscription(ctx, id, remediations.DefaultRemediationsListForSubscriptionOperationOptions())` can be used to do batched pagination -items, err := client.RemediationsListForSubscriptionComplete(ctx, id, remediations.DefaultRemediationsListForSubscriptionOperationOptions()) +// alternatively `client.ListForSubscription(ctx, id, remediations.DefaultListForSubscriptionOperationOptions())` can be used to do batched pagination +items, err := client.ListForSubscriptionComplete(ctx, id, remediations.DefaultListForSubscriptionOperationOptions()) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatmanagementgroup.go similarity index 78% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatresource.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatmanagementgroup.go index 4defe87de5eea..135aa5e01332f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatresource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatmanagementgroup.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsCancelAtResourceOperationResponse struct { +type CancelAtManagementGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsCancelAtResource ... -func (c RemediationsClient) RemediationsCancelAtResource(ctx context.Context, id ScopedRemediationId) (result RemediationsCancelAtResourceOperationResponse, err error) { +// CancelAtManagementGroup ... +func (c RemediationsClient) CancelAtManagementGroup(ctx context.Context, id Providers2RemediationId) (result CancelAtManagementGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatresource.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatsubscription.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatresource.go index 0ce774fd0a8ce..328dee5406030 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatsubscription.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatresource.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsCancelAtSubscriptionOperationResponse struct { +type CancelAtResourceOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsCancelAtSubscription ... -func (c RemediationsClient) RemediationsCancelAtSubscription(ctx context.Context, id RemediationId) (result RemediationsCancelAtSubscriptionOperationResponse, err error) { +// CancelAtResource ... +func (c RemediationsClient) CancelAtResource(ctx context.Context, id ScopedRemediationId) (result CancelAtResourceOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatresourcegroup.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatresourcegroup.go index dbf123dcdf1aa..c5a49acf3f2e9 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatresourcegroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatresourcegroup.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsCancelAtResourceGroupOperationResponse struct { +type CancelAtResourceGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsCancelAtResourceGroup ... -func (c RemediationsClient) RemediationsCancelAtResourceGroup(ctx context.Context, id ProviderRemediationId) (result RemediationsCancelAtResourceGroupOperationResponse, err error) { +// CancelAtResourceGroup ... +func (c RemediationsClient) CancelAtResourceGroup(ctx context.Context, id ProviderRemediationId) (result CancelAtResourceGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatmanagementgroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatsubscription.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatmanagementgroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatsubscription.go index 0f7ed29ec7a18..3d80ffc919397 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscancelatmanagementgroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_cancelatsubscription.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsCancelAtManagementGroupOperationResponse struct { +type CancelAtSubscriptionOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsCancelAtManagementGroup ... -func (c RemediationsClient) RemediationsCancelAtManagementGroup(ctx context.Context, id Providers2RemediationId) (result RemediationsCancelAtManagementGroupOperationResponse, err error) { +// CancelAtSubscription ... +func (c RemediationsClient) CancelAtSubscription(ctx context.Context, id RemediationId) (result CancelAtSubscriptionOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatmanagementgroup.go similarity index 75% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatresource.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatmanagementgroup.go index e3c6a4337ec1a..30dc891b0ad11 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatresource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatmanagementgroup.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsCreateOrUpdateAtResourceOperationResponse struct { +type CreateOrUpdateAtManagementGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsCreateOrUpdateAtResource ... -func (c RemediationsClient) RemediationsCreateOrUpdateAtResource(ctx context.Context, id ScopedRemediationId, input Remediation) (result RemediationsCreateOrUpdateAtResourceOperationResponse, err error) { +// CreateOrUpdateAtManagementGroup ... +func (c RemediationsClient) CreateOrUpdateAtManagementGroup(ctx context.Context, id Providers2RemediationId, input Remediation) (result CreateOrUpdateAtManagementGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatresource.go similarity index 75% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatsubscription.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatresource.go index 399e40a866f2c..688e66b108431 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatsubscription.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatresource.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsCreateOrUpdateAtSubscriptionOperationResponse struct { +type CreateOrUpdateAtResourceOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsCreateOrUpdateAtSubscription ... -func (c RemediationsClient) RemediationsCreateOrUpdateAtSubscription(ctx context.Context, id RemediationId, input Remediation) (result RemediationsCreateOrUpdateAtSubscriptionOperationResponse, err error) { +// CreateOrUpdateAtResource ... +func (c RemediationsClient) CreateOrUpdateAtResource(ctx context.Context, id ScopedRemediationId, input Remediation) (result CreateOrUpdateAtResourceOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatresourcegroup.go similarity index 74% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatresourcegroup.go index fc1f6a9254ed1..5f6979cee6ed7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatresourcegroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatresourcegroup.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsCreateOrUpdateAtResourceGroupOperationResponse struct { +type CreateOrUpdateAtResourceGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsCreateOrUpdateAtResourceGroup ... -func (c RemediationsClient) RemediationsCreateOrUpdateAtResourceGroup(ctx context.Context, id ProviderRemediationId, input Remediation) (result RemediationsCreateOrUpdateAtResourceGroupOperationResponse, err error) { +// CreateOrUpdateAtResourceGroup ... +func (c RemediationsClient) CreateOrUpdateAtResourceGroup(ctx context.Context, id ProviderRemediationId, input Remediation) (result CreateOrUpdateAtResourceGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatsubscription.go new file mode 100644 index 0000000000000..23a52495677b0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_createorupdateatsubscription.go @@ -0,0 +1,56 @@ +package remediations + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateOrUpdateAtSubscriptionOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *Remediation +} + +// CreateOrUpdateAtSubscription ... +func (c RemediationsClient) CreateOrUpdateAtSubscription(ctx context.Context, id RemediationId, input Remediation) (result CreateOrUpdateAtSubscriptionOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusCreated, + http.StatusOK, + }, + HttpMethod: http.MethodPut, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatmanagementgroup.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatresource.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatmanagementgroup.go index d6d9de1af2bdf..a8094bbe226f8 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatresource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatmanagementgroup.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsDeleteAtResourceOperationResponse struct { +type DeleteAtManagementGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsDeleteAtResource ... -func (c RemediationsClient) RemediationsDeleteAtResource(ctx context.Context, id ScopedRemediationId) (result RemediationsDeleteAtResourceOperationResponse, err error) { +// DeleteAtManagementGroup ... +func (c RemediationsClient) DeleteAtManagementGroup(ctx context.Context, id Providers2RemediationId) (result DeleteAtManagementGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatresource.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatsubscription.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatresource.go index 17fcfe4cd89fa..c878dc6ccf62a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatsubscription.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatresource.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsDeleteAtSubscriptionOperationResponse struct { +type DeleteAtResourceOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsDeleteAtSubscription ... -func (c RemediationsClient) RemediationsDeleteAtSubscription(ctx context.Context, id RemediationId) (result RemediationsDeleteAtSubscriptionOperationResponse, err error) { +// DeleteAtResource ... +func (c RemediationsClient) DeleteAtResource(ctx context.Context, id ScopedRemediationId) (result DeleteAtResourceOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatresourcegroup.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatresourcegroup.go index 9b6a3f46c001d..58ae370e96265 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatresourcegroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatresourcegroup.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsDeleteAtResourceGroupOperationResponse struct { +type DeleteAtResourceGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsDeleteAtResourceGroup ... -func (c RemediationsClient) RemediationsDeleteAtResourceGroup(ctx context.Context, id ProviderRemediationId) (result RemediationsDeleteAtResourceGroupOperationResponse, err error) { +// DeleteAtResourceGroup ... +func (c RemediationsClient) DeleteAtResourceGroup(ctx context.Context, id ProviderRemediationId) (result DeleteAtResourceGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatmanagementgroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatsubscription.go similarity index 75% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatmanagementgroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatsubscription.go index d6e4e4e743a99..2aa83df7637f2 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsdeleteatmanagementgroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_deleteatsubscription.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsDeleteAtManagementGroupOperationResponse struct { +type DeleteAtSubscriptionOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsDeleteAtManagementGroup ... -func (c RemediationsClient) RemediationsDeleteAtManagementGroup(ctx context.Context, id Providers2RemediationId) (result RemediationsDeleteAtManagementGroupOperationResponse, err error) { +// DeleteAtSubscription ... +func (c RemediationsClient) DeleteAtSubscription(ctx context.Context, id RemediationId) (result DeleteAtSubscriptionOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatmanagementgroup.go similarity index 78% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatresource.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatmanagementgroup.go index 32ca6b86c6537..265bb83d10822 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatresource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatmanagementgroup.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsGetAtResourceOperationResponse struct { +type GetAtManagementGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsGetAtResource ... -func (c RemediationsClient) RemediationsGetAtResource(ctx context.Context, id ScopedRemediationId) (result RemediationsGetAtResourceOperationResponse, err error) { +// GetAtManagementGroup ... +func (c RemediationsClient) GetAtManagementGroup(ctx context.Context, id Providers2RemediationId) (result GetAtManagementGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatresource.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatsubscription.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatresource.go index 09a9b7ba04053..a3516fb09142a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatsubscription.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatresource.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsGetAtSubscriptionOperationResponse struct { +type GetAtResourceOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsGetAtSubscription ... -func (c RemediationsClient) RemediationsGetAtSubscription(ctx context.Context, id RemediationId) (result RemediationsGetAtSubscriptionOperationResponse, err error) { +// GetAtResource ... +func (c RemediationsClient) GetAtResource(ctx context.Context, id ScopedRemediationId) (result GetAtResourceOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatresourcegroup.go similarity index 76% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatresourcegroup.go index ec5db9efb7e50..504bae2db8c48 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatresourcegroup.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatresourcegroup.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsGetAtResourceGroupOperationResponse struct { +type GetAtResourceGroupOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *Remediation } -// RemediationsGetAtResourceGroup ... -func (c RemediationsClient) RemediationsGetAtResourceGroup(ctx context.Context, id ProviderRemediationId) (result RemediationsGetAtResourceGroupOperationResponse, err error) { +// GetAtResourceGroup ... +func (c RemediationsClient) GetAtResourceGroup(ctx context.Context, id ProviderRemediationId) (result GetAtResourceGroupOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatsubscription.go new file mode 100644 index 0000000000000..aa899a87fb9d2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_getatsubscription.go @@ -0,0 +1,51 @@ +package remediations + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetAtSubscriptionOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *Remediation +} + +// GetAtSubscription ... +func (c RemediationsClient) GetAtSubscription(ctx context.Context, id RemediationId) (result GetAtSubscriptionOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatmanagementgroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatmanagementgroup.go new file mode 100644 index 0000000000000..23132d7fa9a35 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatmanagementgroup.go @@ -0,0 +1,117 @@ +package remediations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListDeploymentsAtManagementGroupOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]RemediationDeployment +} + +type ListDeploymentsAtManagementGroupCompleteResult struct { + Items []RemediationDeployment +} + +type ListDeploymentsAtManagementGroupOperationOptions struct { + Top *int64 +} + +func DefaultListDeploymentsAtManagementGroupOperationOptions() ListDeploymentsAtManagementGroupOperationOptions { + return ListDeploymentsAtManagementGroupOperationOptions{} +} + +func (o ListDeploymentsAtManagementGroupOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListDeploymentsAtManagementGroupOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListDeploymentsAtManagementGroupOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.Top != nil { + out.Append("$top", fmt.Sprintf("%v", *o.Top)) + } + return &out +} + +// ListDeploymentsAtManagementGroup ... +func (c RemediationsClient) ListDeploymentsAtManagementGroup(ctx context.Context, id Providers2RemediationId, options ListDeploymentsAtManagementGroupOperationOptions) (result ListDeploymentsAtManagementGroupOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPost, + Path: fmt.Sprintf("%s/listDeployments", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]RemediationDeployment `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListDeploymentsAtManagementGroupComplete retrieves all the results into a single object +func (c RemediationsClient) ListDeploymentsAtManagementGroupComplete(ctx context.Context, id Providers2RemediationId, options ListDeploymentsAtManagementGroupOperationOptions) (ListDeploymentsAtManagementGroupCompleteResult, error) { + return c.ListDeploymentsAtManagementGroupCompleteMatchingPredicate(ctx, id, options, RemediationDeploymentOperationPredicate{}) +} + +// ListDeploymentsAtManagementGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c RemediationsClient) ListDeploymentsAtManagementGroupCompleteMatchingPredicate(ctx context.Context, id Providers2RemediationId, options ListDeploymentsAtManagementGroupOperationOptions, predicate RemediationDeploymentOperationPredicate) (result ListDeploymentsAtManagementGroupCompleteResult, err error) { + items := make([]RemediationDeployment, 0) + + resp, err := c.ListDeploymentsAtManagementGroup(ctx, id, options) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListDeploymentsAtManagementGroupCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatresource.go new file mode 100644 index 0000000000000..2f1bc1c7f1a37 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatresource.go @@ -0,0 +1,117 @@ +package remediations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListDeploymentsAtResourceOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]RemediationDeployment +} + +type ListDeploymentsAtResourceCompleteResult struct { + Items []RemediationDeployment +} + +type ListDeploymentsAtResourceOperationOptions struct { + Top *int64 +} + +func DefaultListDeploymentsAtResourceOperationOptions() ListDeploymentsAtResourceOperationOptions { + return ListDeploymentsAtResourceOperationOptions{} +} + +func (o ListDeploymentsAtResourceOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListDeploymentsAtResourceOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListDeploymentsAtResourceOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.Top != nil { + out.Append("$top", fmt.Sprintf("%v", *o.Top)) + } + return &out +} + +// ListDeploymentsAtResource ... +func (c RemediationsClient) ListDeploymentsAtResource(ctx context.Context, id ScopedRemediationId, options ListDeploymentsAtResourceOperationOptions) (result ListDeploymentsAtResourceOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPost, + Path: fmt.Sprintf("%s/listDeployments", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]RemediationDeployment `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListDeploymentsAtResourceComplete retrieves all the results into a single object +func (c RemediationsClient) ListDeploymentsAtResourceComplete(ctx context.Context, id ScopedRemediationId, options ListDeploymentsAtResourceOperationOptions) (ListDeploymentsAtResourceCompleteResult, error) { + return c.ListDeploymentsAtResourceCompleteMatchingPredicate(ctx, id, options, RemediationDeploymentOperationPredicate{}) +} + +// ListDeploymentsAtResourceCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c RemediationsClient) ListDeploymentsAtResourceCompleteMatchingPredicate(ctx context.Context, id ScopedRemediationId, options ListDeploymentsAtResourceOperationOptions, predicate RemediationDeploymentOperationPredicate) (result ListDeploymentsAtResourceCompleteResult, err error) { + items := make([]RemediationDeployment, 0) + + resp, err := c.ListDeploymentsAtResource(ctx, id, options) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListDeploymentsAtResourceCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatresourcegroup.go new file mode 100644 index 0000000000000..6a0c5d01a0415 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatresourcegroup.go @@ -0,0 +1,117 @@ +package remediations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListDeploymentsAtResourceGroupOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]RemediationDeployment +} + +type ListDeploymentsAtResourceGroupCompleteResult struct { + Items []RemediationDeployment +} + +type ListDeploymentsAtResourceGroupOperationOptions struct { + Top *int64 +} + +func DefaultListDeploymentsAtResourceGroupOperationOptions() ListDeploymentsAtResourceGroupOperationOptions { + return ListDeploymentsAtResourceGroupOperationOptions{} +} + +func (o ListDeploymentsAtResourceGroupOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListDeploymentsAtResourceGroupOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListDeploymentsAtResourceGroupOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.Top != nil { + out.Append("$top", fmt.Sprintf("%v", *o.Top)) + } + return &out +} + +// ListDeploymentsAtResourceGroup ... +func (c RemediationsClient) ListDeploymentsAtResourceGroup(ctx context.Context, id ProviderRemediationId, options ListDeploymentsAtResourceGroupOperationOptions) (result ListDeploymentsAtResourceGroupOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPost, + Path: fmt.Sprintf("%s/listDeployments", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]RemediationDeployment `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListDeploymentsAtResourceGroupComplete retrieves all the results into a single object +func (c RemediationsClient) ListDeploymentsAtResourceGroupComplete(ctx context.Context, id ProviderRemediationId, options ListDeploymentsAtResourceGroupOperationOptions) (ListDeploymentsAtResourceGroupCompleteResult, error) { + return c.ListDeploymentsAtResourceGroupCompleteMatchingPredicate(ctx, id, options, RemediationDeploymentOperationPredicate{}) +} + +// ListDeploymentsAtResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c RemediationsClient) ListDeploymentsAtResourceGroupCompleteMatchingPredicate(ctx context.Context, id ProviderRemediationId, options ListDeploymentsAtResourceGroupOperationOptions, predicate RemediationDeploymentOperationPredicate) (result ListDeploymentsAtResourceGroupCompleteResult, err error) { + items := make([]RemediationDeployment, 0) + + resp, err := c.ListDeploymentsAtResourceGroup(ctx, id, options) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListDeploymentsAtResourceGroupCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatsubscription.go new file mode 100644 index 0000000000000..6fd2a8f1eb4a5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listdeploymentsatsubscription.go @@ -0,0 +1,117 @@ +package remediations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListDeploymentsAtSubscriptionOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]RemediationDeployment +} + +type ListDeploymentsAtSubscriptionCompleteResult struct { + Items []RemediationDeployment +} + +type ListDeploymentsAtSubscriptionOperationOptions struct { + Top *int64 +} + +func DefaultListDeploymentsAtSubscriptionOperationOptions() ListDeploymentsAtSubscriptionOperationOptions { + return ListDeploymentsAtSubscriptionOperationOptions{} +} + +func (o ListDeploymentsAtSubscriptionOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListDeploymentsAtSubscriptionOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListDeploymentsAtSubscriptionOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.Top != nil { + out.Append("$top", fmt.Sprintf("%v", *o.Top)) + } + return &out +} + +// ListDeploymentsAtSubscription ... +func (c RemediationsClient) ListDeploymentsAtSubscription(ctx context.Context, id RemediationId, options ListDeploymentsAtSubscriptionOperationOptions) (result ListDeploymentsAtSubscriptionOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPost, + Path: fmt.Sprintf("%s/listDeployments", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]RemediationDeployment `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListDeploymentsAtSubscriptionComplete retrieves all the results into a single object +func (c RemediationsClient) ListDeploymentsAtSubscriptionComplete(ctx context.Context, id RemediationId, options ListDeploymentsAtSubscriptionOperationOptions) (ListDeploymentsAtSubscriptionCompleteResult, error) { + return c.ListDeploymentsAtSubscriptionCompleteMatchingPredicate(ctx, id, options, RemediationDeploymentOperationPredicate{}) +} + +// ListDeploymentsAtSubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c RemediationsClient) ListDeploymentsAtSubscriptionCompleteMatchingPredicate(ctx context.Context, id RemediationId, options ListDeploymentsAtSubscriptionOperationOptions, predicate RemediationDeploymentOperationPredicate) (result ListDeploymentsAtSubscriptionCompleteResult, err error) { + items := make([]RemediationDeployment, 0) + + resp, err := c.ListDeploymentsAtSubscription(ctx, id, options) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListDeploymentsAtSubscriptionCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listformanagementgroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listformanagementgroup.go new file mode 100644 index 0000000000000..dac0700aeb0cb --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listformanagementgroup.go @@ -0,0 +1,121 @@ +package remediations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListForManagementGroupOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]Remediation +} + +type ListForManagementGroupCompleteResult struct { + Items []Remediation +} + +type ListForManagementGroupOperationOptions struct { + Filter *string + Top *int64 +} + +func DefaultListForManagementGroupOperationOptions() ListForManagementGroupOperationOptions { + return ListForManagementGroupOperationOptions{} +} + +func (o ListForManagementGroupOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListForManagementGroupOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListForManagementGroupOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.Filter != nil { + out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) + } + if o.Top != nil { + out.Append("$top", fmt.Sprintf("%v", *o.Top)) + } + return &out +} + +// ListForManagementGroup ... +func (c RemediationsClient) ListForManagementGroup(ctx context.Context, id ManagementGroupId, options ListForManagementGroupOperationOptions) (result ListForManagementGroupOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/providers/Microsoft.PolicyInsights/remediations", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]Remediation `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListForManagementGroupComplete retrieves all the results into a single object +func (c RemediationsClient) ListForManagementGroupComplete(ctx context.Context, id ManagementGroupId, options ListForManagementGroupOperationOptions) (ListForManagementGroupCompleteResult, error) { + return c.ListForManagementGroupCompleteMatchingPredicate(ctx, id, options, RemediationOperationPredicate{}) +} + +// ListForManagementGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c RemediationsClient) ListForManagementGroupCompleteMatchingPredicate(ctx context.Context, id ManagementGroupId, options ListForManagementGroupOperationOptions, predicate RemediationOperationPredicate) (result ListForManagementGroupCompleteResult, err error) { + items := make([]Remediation, 0) + + resp, err := c.ListForManagementGroup(ctx, id, options) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListForManagementGroupCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforresource.go similarity index 50% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforresource.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforresource.go index b0b4bf29b9a79..74d6eeaae7bc4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforresource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforresource.go @@ -13,37 +13,37 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type RemediationsListForResourceOperationResponse struct { +type ListForResourceOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]Remediation } -type RemediationsListForResourceCompleteResult struct { +type ListForResourceCompleteResult struct { Items []Remediation } -type RemediationsListForResourceOperationOptions struct { +type ListForResourceOperationOptions struct { Filter *string Top *int64 } -func DefaultRemediationsListForResourceOperationOptions() RemediationsListForResourceOperationOptions { - return RemediationsListForResourceOperationOptions{} +func DefaultListForResourceOperationOptions() ListForResourceOperationOptions { + return ListForResourceOperationOptions{} } -func (o RemediationsListForResourceOperationOptions) ToHeaders() *client.Headers { +func (o ListForResourceOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} return &out } -func (o RemediationsListForResourceOperationOptions) ToOData() *odata.Query { +func (o ListForResourceOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o RemediationsListForResourceOperationOptions) ToQuery() *client.QueryParams { +func (o ListForResourceOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Filter != nil { out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) @@ -54,8 +54,8 @@ func (o RemediationsListForResourceOperationOptions) ToQuery() *client.QueryPara return &out } -// RemediationsListForResource ... -func (c RemediationsClient) RemediationsListForResource(ctx context.Context, id commonids.ScopeId, options RemediationsListForResourceOperationOptions) (result RemediationsListForResourceOperationResponse, err error) { +// ListForResource ... +func (c RemediationsClient) ListForResource(ctx context.Context, id commonids.ScopeId, options ListForResourceOperationOptions) (result ListForResourceOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -93,16 +93,16 @@ func (c RemediationsClient) RemediationsListForResource(ctx context.Context, id return } -// RemediationsListForResourceComplete retrieves all the results into a single object -func (c RemediationsClient) RemediationsListForResourceComplete(ctx context.Context, id commonids.ScopeId, options RemediationsListForResourceOperationOptions) (RemediationsListForResourceCompleteResult, error) { - return c.RemediationsListForResourceCompleteMatchingPredicate(ctx, id, options, RemediationOperationPredicate{}) +// ListForResourceComplete retrieves all the results into a single object +func (c RemediationsClient) ListForResourceComplete(ctx context.Context, id commonids.ScopeId, options ListForResourceOperationOptions) (ListForResourceCompleteResult, error) { + return c.ListForResourceCompleteMatchingPredicate(ctx, id, options, RemediationOperationPredicate{}) } -// RemediationsListForResourceCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c RemediationsClient) RemediationsListForResourceCompleteMatchingPredicate(ctx context.Context, id commonids.ScopeId, options RemediationsListForResourceOperationOptions, predicate RemediationOperationPredicate) (result RemediationsListForResourceCompleteResult, err error) { +// ListForResourceCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c RemediationsClient) ListForResourceCompleteMatchingPredicate(ctx context.Context, id commonids.ScopeId, options ListForResourceOperationOptions, predicate RemediationOperationPredicate) (result ListForResourceCompleteResult, err error) { items := make([]Remediation, 0) - resp, err := c.RemediationsListForResource(ctx, id, options) + resp, err := c.ListForResource(ctx, id, options) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -115,7 +115,7 @@ func (c RemediationsClient) RemediationsListForResourceCompleteMatchingPredicate } } - result = RemediationsListForResourceCompleteResult{ + result = ListForResourceCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforresourcegroup.go new file mode 100644 index 0000000000000..6192757037e7b --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforresourcegroup.go @@ -0,0 +1,122 @@ +package remediations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListForResourceGroupOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]Remediation +} + +type ListForResourceGroupCompleteResult struct { + Items []Remediation +} + +type ListForResourceGroupOperationOptions struct { + Filter *string + Top *int64 +} + +func DefaultListForResourceGroupOperationOptions() ListForResourceGroupOperationOptions { + return ListForResourceGroupOperationOptions{} +} + +func (o ListForResourceGroupOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListForResourceGroupOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListForResourceGroupOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.Filter != nil { + out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) + } + if o.Top != nil { + out.Append("$top", fmt.Sprintf("%v", *o.Top)) + } + return &out +} + +// ListForResourceGroup ... +func (c RemediationsClient) ListForResourceGroup(ctx context.Context, id commonids.ResourceGroupId, options ListForResourceGroupOperationOptions) (result ListForResourceGroupOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/providers/Microsoft.PolicyInsights/remediations", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]Remediation `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListForResourceGroupComplete retrieves all the results into a single object +func (c RemediationsClient) ListForResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId, options ListForResourceGroupOperationOptions) (ListForResourceGroupCompleteResult, error) { + return c.ListForResourceGroupCompleteMatchingPredicate(ctx, id, options, RemediationOperationPredicate{}) +} + +// ListForResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c RemediationsClient) ListForResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, options ListForResourceGroupOperationOptions, predicate RemediationOperationPredicate) (result ListForResourceGroupCompleteResult, err error) { + items := make([]Remediation, 0) + + resp, err := c.ListForResourceGroup(ctx, id, options) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListForResourceGroupCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforsubscription.go new file mode 100644 index 0000000000000..d9e71bb97a881 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_listforsubscription.go @@ -0,0 +1,122 @@ +package remediations + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListForSubscriptionOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]Remediation +} + +type ListForSubscriptionCompleteResult struct { + Items []Remediation +} + +type ListForSubscriptionOperationOptions struct { + Filter *string + Top *int64 +} + +func DefaultListForSubscriptionOperationOptions() ListForSubscriptionOperationOptions { + return ListForSubscriptionOperationOptions{} +} + +func (o ListForSubscriptionOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListForSubscriptionOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListForSubscriptionOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.Filter != nil { + out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) + } + if o.Top != nil { + out.Append("$top", fmt.Sprintf("%v", *o.Top)) + } + return &out +} + +// ListForSubscription ... +func (c RemediationsClient) ListForSubscription(ctx context.Context, id commonids.SubscriptionId, options ListForSubscriptionOperationOptions) (result ListForSubscriptionOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/providers/Microsoft.PolicyInsights/remediations", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]Remediation `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListForSubscriptionComplete retrieves all the results into a single object +func (c RemediationsClient) ListForSubscriptionComplete(ctx context.Context, id commonids.SubscriptionId, options ListForSubscriptionOperationOptions) (ListForSubscriptionCompleteResult, error) { + return c.ListForSubscriptionCompleteMatchingPredicate(ctx, id, options, RemediationOperationPredicate{}) +} + +// ListForSubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c RemediationsClient) ListForSubscriptionCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, options ListForSubscriptionOperationOptions, predicate RemediationOperationPredicate) (result ListForSubscriptionCompleteResult, err error) { + items := make([]Remediation, 0) + + resp, err := c.ListForSubscription(ctx, id, options) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListForSubscriptionCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatmanagementgroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatmanagementgroup.go deleted file mode 100644 index 7d1fedb7645c1..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationscreateorupdateatmanagementgroup.go +++ /dev/null @@ -1,56 +0,0 @@ -package remediations - -import ( - "context" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsCreateOrUpdateAtManagementGroupOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *Remediation -} - -// RemediationsCreateOrUpdateAtManagementGroup ... -func (c RemediationsClient) RemediationsCreateOrUpdateAtManagementGroup(ctx context.Context, id Providers2RemediationId, input Remediation) (result RemediationsCreateOrUpdateAtManagementGroupOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusCreated, - http.StatusOK, - }, - HttpMethod: http.MethodPut, - Path: id.ID(), - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - if err = req.Marshal(input); err != nil { - return - } - - var resp *client.Response - resp, err = req.Execute(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - if err = resp.Unmarshal(&result.Model); err != nil { - return - } - - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatmanagementgroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatmanagementgroup.go deleted file mode 100644 index 77017b8788b90..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationsgetatmanagementgroup.go +++ /dev/null @@ -1,51 +0,0 @@ -package remediations - -import ( - "context" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsGetAtManagementGroupOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *Remediation -} - -// RemediationsGetAtManagementGroup ... -func (c RemediationsClient) RemediationsGetAtManagementGroup(ctx context.Context, id Providers2RemediationId) (result RemediationsGetAtManagementGroupOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusOK, - }, - HttpMethod: http.MethodGet, - Path: id.ID(), - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.Execute(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - if err = resp.Unmarshal(&result.Model); err != nil { - return - } - - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatmanagementgroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatmanagementgroup.go deleted file mode 100644 index 9589d69763553..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatmanagementgroup.go +++ /dev/null @@ -1,117 +0,0 @@ -package remediations - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsListDeploymentsAtManagementGroupOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *[]RemediationDeployment -} - -type RemediationsListDeploymentsAtManagementGroupCompleteResult struct { - Items []RemediationDeployment -} - -type RemediationsListDeploymentsAtManagementGroupOperationOptions struct { - Top *int64 -} - -func DefaultRemediationsListDeploymentsAtManagementGroupOperationOptions() RemediationsListDeploymentsAtManagementGroupOperationOptions { - return RemediationsListDeploymentsAtManagementGroupOperationOptions{} -} - -func (o RemediationsListDeploymentsAtManagementGroupOperationOptions) ToHeaders() *client.Headers { - out := client.Headers{} - - return &out -} - -func (o RemediationsListDeploymentsAtManagementGroupOperationOptions) ToOData() *odata.Query { - out := odata.Query{} - return &out -} - -func (o RemediationsListDeploymentsAtManagementGroupOperationOptions) ToQuery() *client.QueryParams { - out := client.QueryParams{} - if o.Top != nil { - out.Append("$top", fmt.Sprintf("%v", *o.Top)) - } - return &out -} - -// RemediationsListDeploymentsAtManagementGroup ... -func (c RemediationsClient) RemediationsListDeploymentsAtManagementGroup(ctx context.Context, id Providers2RemediationId, options RemediationsListDeploymentsAtManagementGroupOperationOptions) (result RemediationsListDeploymentsAtManagementGroupOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusOK, - }, - HttpMethod: http.MethodPost, - Path: fmt.Sprintf("%s/listDeployments", id.ID()), - OptionsObject: options, - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.ExecutePaged(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - var values struct { - Values *[]RemediationDeployment `json:"value"` - } - if err = resp.Unmarshal(&values); err != nil { - return - } - - result.Model = values.Values - - return -} - -// RemediationsListDeploymentsAtManagementGroupComplete retrieves all the results into a single object -func (c RemediationsClient) RemediationsListDeploymentsAtManagementGroupComplete(ctx context.Context, id Providers2RemediationId, options RemediationsListDeploymentsAtManagementGroupOperationOptions) (RemediationsListDeploymentsAtManagementGroupCompleteResult, error) { - return c.RemediationsListDeploymentsAtManagementGroupCompleteMatchingPredicate(ctx, id, options, RemediationDeploymentOperationPredicate{}) -} - -// RemediationsListDeploymentsAtManagementGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c RemediationsClient) RemediationsListDeploymentsAtManagementGroupCompleteMatchingPredicate(ctx context.Context, id Providers2RemediationId, options RemediationsListDeploymentsAtManagementGroupOperationOptions, predicate RemediationDeploymentOperationPredicate) (result RemediationsListDeploymentsAtManagementGroupCompleteResult, err error) { - items := make([]RemediationDeployment, 0) - - resp, err := c.RemediationsListDeploymentsAtManagementGroup(ctx, id, options) - if err != nil { - err = fmt.Errorf("loading results: %+v", err) - return - } - if resp.Model != nil { - for _, v := range *resp.Model { - if predicate.Matches(v) { - items = append(items, v) - } - } - } - - result = RemediationsListDeploymentsAtManagementGroupCompleteResult{ - Items: items, - } - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatresource.go deleted file mode 100644 index 1b65da6fce035..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatresource.go +++ /dev/null @@ -1,117 +0,0 @@ -package remediations - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsListDeploymentsAtResourceOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *[]RemediationDeployment -} - -type RemediationsListDeploymentsAtResourceCompleteResult struct { - Items []RemediationDeployment -} - -type RemediationsListDeploymentsAtResourceOperationOptions struct { - Top *int64 -} - -func DefaultRemediationsListDeploymentsAtResourceOperationOptions() RemediationsListDeploymentsAtResourceOperationOptions { - return RemediationsListDeploymentsAtResourceOperationOptions{} -} - -func (o RemediationsListDeploymentsAtResourceOperationOptions) ToHeaders() *client.Headers { - out := client.Headers{} - - return &out -} - -func (o RemediationsListDeploymentsAtResourceOperationOptions) ToOData() *odata.Query { - out := odata.Query{} - return &out -} - -func (o RemediationsListDeploymentsAtResourceOperationOptions) ToQuery() *client.QueryParams { - out := client.QueryParams{} - if o.Top != nil { - out.Append("$top", fmt.Sprintf("%v", *o.Top)) - } - return &out -} - -// RemediationsListDeploymentsAtResource ... -func (c RemediationsClient) RemediationsListDeploymentsAtResource(ctx context.Context, id ScopedRemediationId, options RemediationsListDeploymentsAtResourceOperationOptions) (result RemediationsListDeploymentsAtResourceOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusOK, - }, - HttpMethod: http.MethodPost, - Path: fmt.Sprintf("%s/listDeployments", id.ID()), - OptionsObject: options, - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.ExecutePaged(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - var values struct { - Values *[]RemediationDeployment `json:"value"` - } - if err = resp.Unmarshal(&values); err != nil { - return - } - - result.Model = values.Values - - return -} - -// RemediationsListDeploymentsAtResourceComplete retrieves all the results into a single object -func (c RemediationsClient) RemediationsListDeploymentsAtResourceComplete(ctx context.Context, id ScopedRemediationId, options RemediationsListDeploymentsAtResourceOperationOptions) (RemediationsListDeploymentsAtResourceCompleteResult, error) { - return c.RemediationsListDeploymentsAtResourceCompleteMatchingPredicate(ctx, id, options, RemediationDeploymentOperationPredicate{}) -} - -// RemediationsListDeploymentsAtResourceCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c RemediationsClient) RemediationsListDeploymentsAtResourceCompleteMatchingPredicate(ctx context.Context, id ScopedRemediationId, options RemediationsListDeploymentsAtResourceOperationOptions, predicate RemediationDeploymentOperationPredicate) (result RemediationsListDeploymentsAtResourceCompleteResult, err error) { - items := make([]RemediationDeployment, 0) - - resp, err := c.RemediationsListDeploymentsAtResource(ctx, id, options) - if err != nil { - err = fmt.Errorf("loading results: %+v", err) - return - } - if resp.Model != nil { - for _, v := range *resp.Model { - if predicate.Matches(v) { - items = append(items, v) - } - } - } - - result = RemediationsListDeploymentsAtResourceCompleteResult{ - Items: items, - } - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatresourcegroup.go deleted file mode 100644 index 0363599de49d1..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatresourcegroup.go +++ /dev/null @@ -1,117 +0,0 @@ -package remediations - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsListDeploymentsAtResourceGroupOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *[]RemediationDeployment -} - -type RemediationsListDeploymentsAtResourceGroupCompleteResult struct { - Items []RemediationDeployment -} - -type RemediationsListDeploymentsAtResourceGroupOperationOptions struct { - Top *int64 -} - -func DefaultRemediationsListDeploymentsAtResourceGroupOperationOptions() RemediationsListDeploymentsAtResourceGroupOperationOptions { - return RemediationsListDeploymentsAtResourceGroupOperationOptions{} -} - -func (o RemediationsListDeploymentsAtResourceGroupOperationOptions) ToHeaders() *client.Headers { - out := client.Headers{} - - return &out -} - -func (o RemediationsListDeploymentsAtResourceGroupOperationOptions) ToOData() *odata.Query { - out := odata.Query{} - return &out -} - -func (o RemediationsListDeploymentsAtResourceGroupOperationOptions) ToQuery() *client.QueryParams { - out := client.QueryParams{} - if o.Top != nil { - out.Append("$top", fmt.Sprintf("%v", *o.Top)) - } - return &out -} - -// RemediationsListDeploymentsAtResourceGroup ... -func (c RemediationsClient) RemediationsListDeploymentsAtResourceGroup(ctx context.Context, id ProviderRemediationId, options RemediationsListDeploymentsAtResourceGroupOperationOptions) (result RemediationsListDeploymentsAtResourceGroupOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusOK, - }, - HttpMethod: http.MethodPost, - Path: fmt.Sprintf("%s/listDeployments", id.ID()), - OptionsObject: options, - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.ExecutePaged(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - var values struct { - Values *[]RemediationDeployment `json:"value"` - } - if err = resp.Unmarshal(&values); err != nil { - return - } - - result.Model = values.Values - - return -} - -// RemediationsListDeploymentsAtResourceGroupComplete retrieves all the results into a single object -func (c RemediationsClient) RemediationsListDeploymentsAtResourceGroupComplete(ctx context.Context, id ProviderRemediationId, options RemediationsListDeploymentsAtResourceGroupOperationOptions) (RemediationsListDeploymentsAtResourceGroupCompleteResult, error) { - return c.RemediationsListDeploymentsAtResourceGroupCompleteMatchingPredicate(ctx, id, options, RemediationDeploymentOperationPredicate{}) -} - -// RemediationsListDeploymentsAtResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c RemediationsClient) RemediationsListDeploymentsAtResourceGroupCompleteMatchingPredicate(ctx context.Context, id ProviderRemediationId, options RemediationsListDeploymentsAtResourceGroupOperationOptions, predicate RemediationDeploymentOperationPredicate) (result RemediationsListDeploymentsAtResourceGroupCompleteResult, err error) { - items := make([]RemediationDeployment, 0) - - resp, err := c.RemediationsListDeploymentsAtResourceGroup(ctx, id, options) - if err != nil { - err = fmt.Errorf("loading results: %+v", err) - return - } - if resp.Model != nil { - for _, v := range *resp.Model { - if predicate.Matches(v) { - items = append(items, v) - } - } - } - - result = RemediationsListDeploymentsAtResourceGroupCompleteResult{ - Items: items, - } - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatsubscription.go deleted file mode 100644 index 09aa9970799cb..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistdeploymentsatsubscription.go +++ /dev/null @@ -1,117 +0,0 @@ -package remediations - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsListDeploymentsAtSubscriptionOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *[]RemediationDeployment -} - -type RemediationsListDeploymentsAtSubscriptionCompleteResult struct { - Items []RemediationDeployment -} - -type RemediationsListDeploymentsAtSubscriptionOperationOptions struct { - Top *int64 -} - -func DefaultRemediationsListDeploymentsAtSubscriptionOperationOptions() RemediationsListDeploymentsAtSubscriptionOperationOptions { - return RemediationsListDeploymentsAtSubscriptionOperationOptions{} -} - -func (o RemediationsListDeploymentsAtSubscriptionOperationOptions) ToHeaders() *client.Headers { - out := client.Headers{} - - return &out -} - -func (o RemediationsListDeploymentsAtSubscriptionOperationOptions) ToOData() *odata.Query { - out := odata.Query{} - return &out -} - -func (o RemediationsListDeploymentsAtSubscriptionOperationOptions) ToQuery() *client.QueryParams { - out := client.QueryParams{} - if o.Top != nil { - out.Append("$top", fmt.Sprintf("%v", *o.Top)) - } - return &out -} - -// RemediationsListDeploymentsAtSubscription ... -func (c RemediationsClient) RemediationsListDeploymentsAtSubscription(ctx context.Context, id RemediationId, options RemediationsListDeploymentsAtSubscriptionOperationOptions) (result RemediationsListDeploymentsAtSubscriptionOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusOK, - }, - HttpMethod: http.MethodPost, - Path: fmt.Sprintf("%s/listDeployments", id.ID()), - OptionsObject: options, - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.ExecutePaged(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - var values struct { - Values *[]RemediationDeployment `json:"value"` - } - if err = resp.Unmarshal(&values); err != nil { - return - } - - result.Model = values.Values - - return -} - -// RemediationsListDeploymentsAtSubscriptionComplete retrieves all the results into a single object -func (c RemediationsClient) RemediationsListDeploymentsAtSubscriptionComplete(ctx context.Context, id RemediationId, options RemediationsListDeploymentsAtSubscriptionOperationOptions) (RemediationsListDeploymentsAtSubscriptionCompleteResult, error) { - return c.RemediationsListDeploymentsAtSubscriptionCompleteMatchingPredicate(ctx, id, options, RemediationDeploymentOperationPredicate{}) -} - -// RemediationsListDeploymentsAtSubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c RemediationsClient) RemediationsListDeploymentsAtSubscriptionCompleteMatchingPredicate(ctx context.Context, id RemediationId, options RemediationsListDeploymentsAtSubscriptionOperationOptions, predicate RemediationDeploymentOperationPredicate) (result RemediationsListDeploymentsAtSubscriptionCompleteResult, err error) { - items := make([]RemediationDeployment, 0) - - resp, err := c.RemediationsListDeploymentsAtSubscription(ctx, id, options) - if err != nil { - err = fmt.Errorf("loading results: %+v", err) - return - } - if resp.Model != nil { - for _, v := range *resp.Model { - if predicate.Matches(v) { - items = append(items, v) - } - } - } - - result = RemediationsListDeploymentsAtSubscriptionCompleteResult{ - Items: items, - } - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistformanagementgroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistformanagementgroup.go deleted file mode 100644 index 54f5aaabdfbff..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistformanagementgroup.go +++ /dev/null @@ -1,121 +0,0 @@ -package remediations - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsListForManagementGroupOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *[]Remediation -} - -type RemediationsListForManagementGroupCompleteResult struct { - Items []Remediation -} - -type RemediationsListForManagementGroupOperationOptions struct { - Filter *string - Top *int64 -} - -func DefaultRemediationsListForManagementGroupOperationOptions() RemediationsListForManagementGroupOperationOptions { - return RemediationsListForManagementGroupOperationOptions{} -} - -func (o RemediationsListForManagementGroupOperationOptions) ToHeaders() *client.Headers { - out := client.Headers{} - - return &out -} - -func (o RemediationsListForManagementGroupOperationOptions) ToOData() *odata.Query { - out := odata.Query{} - return &out -} - -func (o RemediationsListForManagementGroupOperationOptions) ToQuery() *client.QueryParams { - out := client.QueryParams{} - if o.Filter != nil { - out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) - } - if o.Top != nil { - out.Append("$top", fmt.Sprintf("%v", *o.Top)) - } - return &out -} - -// RemediationsListForManagementGroup ... -func (c RemediationsClient) RemediationsListForManagementGroup(ctx context.Context, id ManagementGroupId, options RemediationsListForManagementGroupOperationOptions) (result RemediationsListForManagementGroupOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusOK, - }, - HttpMethod: http.MethodGet, - Path: fmt.Sprintf("%s/providers/Microsoft.PolicyInsights/remediations", id.ID()), - OptionsObject: options, - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.ExecutePaged(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - var values struct { - Values *[]Remediation `json:"value"` - } - if err = resp.Unmarshal(&values); err != nil { - return - } - - result.Model = values.Values - - return -} - -// RemediationsListForManagementGroupComplete retrieves all the results into a single object -func (c RemediationsClient) RemediationsListForManagementGroupComplete(ctx context.Context, id ManagementGroupId, options RemediationsListForManagementGroupOperationOptions) (RemediationsListForManagementGroupCompleteResult, error) { - return c.RemediationsListForManagementGroupCompleteMatchingPredicate(ctx, id, options, RemediationOperationPredicate{}) -} - -// RemediationsListForManagementGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c RemediationsClient) RemediationsListForManagementGroupCompleteMatchingPredicate(ctx context.Context, id ManagementGroupId, options RemediationsListForManagementGroupOperationOptions, predicate RemediationOperationPredicate) (result RemediationsListForManagementGroupCompleteResult, err error) { - items := make([]Remediation, 0) - - resp, err := c.RemediationsListForManagementGroup(ctx, id, options) - if err != nil { - err = fmt.Errorf("loading results: %+v", err) - return - } - if resp.Model != nil { - for _, v := range *resp.Model { - if predicate.Matches(v) { - items = append(items, v) - } - } - } - - result = RemediationsListForManagementGroupCompleteResult{ - Items: items, - } - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforresourcegroup.go deleted file mode 100644 index abd059ba620db..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforresourcegroup.go +++ /dev/null @@ -1,122 +0,0 @@ -package remediations - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsListForResourceGroupOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *[]Remediation -} - -type RemediationsListForResourceGroupCompleteResult struct { - Items []Remediation -} - -type RemediationsListForResourceGroupOperationOptions struct { - Filter *string - Top *int64 -} - -func DefaultRemediationsListForResourceGroupOperationOptions() RemediationsListForResourceGroupOperationOptions { - return RemediationsListForResourceGroupOperationOptions{} -} - -func (o RemediationsListForResourceGroupOperationOptions) ToHeaders() *client.Headers { - out := client.Headers{} - - return &out -} - -func (o RemediationsListForResourceGroupOperationOptions) ToOData() *odata.Query { - out := odata.Query{} - return &out -} - -func (o RemediationsListForResourceGroupOperationOptions) ToQuery() *client.QueryParams { - out := client.QueryParams{} - if o.Filter != nil { - out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) - } - if o.Top != nil { - out.Append("$top", fmt.Sprintf("%v", *o.Top)) - } - return &out -} - -// RemediationsListForResourceGroup ... -func (c RemediationsClient) RemediationsListForResourceGroup(ctx context.Context, id commonids.ResourceGroupId, options RemediationsListForResourceGroupOperationOptions) (result RemediationsListForResourceGroupOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusOK, - }, - HttpMethod: http.MethodGet, - Path: fmt.Sprintf("%s/providers/Microsoft.PolicyInsights/remediations", id.ID()), - OptionsObject: options, - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.ExecutePaged(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - var values struct { - Values *[]Remediation `json:"value"` - } - if err = resp.Unmarshal(&values); err != nil { - return - } - - result.Model = values.Values - - return -} - -// RemediationsListForResourceGroupComplete retrieves all the results into a single object -func (c RemediationsClient) RemediationsListForResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId, options RemediationsListForResourceGroupOperationOptions) (RemediationsListForResourceGroupCompleteResult, error) { - return c.RemediationsListForResourceGroupCompleteMatchingPredicate(ctx, id, options, RemediationOperationPredicate{}) -} - -// RemediationsListForResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c RemediationsClient) RemediationsListForResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, options RemediationsListForResourceGroupOperationOptions, predicate RemediationOperationPredicate) (result RemediationsListForResourceGroupCompleteResult, err error) { - items := make([]Remediation, 0) - - resp, err := c.RemediationsListForResourceGroup(ctx, id, options) - if err != nil { - err = fmt.Errorf("loading results: %+v", err) - return - } - if resp.Model != nil { - for _, v := range *resp.Model { - if predicate.Matches(v) { - items = append(items, v) - } - } - } - - result = RemediationsListForResourceGroupCompleteResult{ - Items: items, - } - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforsubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforsubscription.go deleted file mode 100644 index aeec6808616ab..0000000000000 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/policyinsights/2021-10-01/remediations/method_remediationslistforsubscription.go +++ /dev/null @@ -1,122 +0,0 @@ -package remediations - -import ( - "context" - "fmt" - "net/http" - - "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" - "github.com/hashicorp/go-azure-sdk/sdk/client" - "github.com/hashicorp/go-azure-sdk/sdk/odata" -) - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See NOTICE.txt in the project root for license information. - -type RemediationsListForSubscriptionOperationResponse struct { - HttpResponse *http.Response - OData *odata.OData - Model *[]Remediation -} - -type RemediationsListForSubscriptionCompleteResult struct { - Items []Remediation -} - -type RemediationsListForSubscriptionOperationOptions struct { - Filter *string - Top *int64 -} - -func DefaultRemediationsListForSubscriptionOperationOptions() RemediationsListForSubscriptionOperationOptions { - return RemediationsListForSubscriptionOperationOptions{} -} - -func (o RemediationsListForSubscriptionOperationOptions) ToHeaders() *client.Headers { - out := client.Headers{} - - return &out -} - -func (o RemediationsListForSubscriptionOperationOptions) ToOData() *odata.Query { - out := odata.Query{} - return &out -} - -func (o RemediationsListForSubscriptionOperationOptions) ToQuery() *client.QueryParams { - out := client.QueryParams{} - if o.Filter != nil { - out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) - } - if o.Top != nil { - out.Append("$top", fmt.Sprintf("%v", *o.Top)) - } - return &out -} - -// RemediationsListForSubscription ... -func (c RemediationsClient) RemediationsListForSubscription(ctx context.Context, id commonids.SubscriptionId, options RemediationsListForSubscriptionOperationOptions) (result RemediationsListForSubscriptionOperationResponse, err error) { - opts := client.RequestOptions{ - ContentType: "application/json; charset=utf-8", - ExpectedStatusCodes: []int{ - http.StatusOK, - }, - HttpMethod: http.MethodGet, - Path: fmt.Sprintf("%s/providers/Microsoft.PolicyInsights/remediations", id.ID()), - OptionsObject: options, - } - - req, err := c.Client.NewRequest(ctx, opts) - if err != nil { - return - } - - var resp *client.Response - resp, err = req.ExecutePaged(ctx) - if resp != nil { - result.OData = resp.OData - result.HttpResponse = resp.Response - } - if err != nil { - return - } - - var values struct { - Values *[]Remediation `json:"value"` - } - if err = resp.Unmarshal(&values); err != nil { - return - } - - result.Model = values.Values - - return -} - -// RemediationsListForSubscriptionComplete retrieves all the results into a single object -func (c RemediationsClient) RemediationsListForSubscriptionComplete(ctx context.Context, id commonids.SubscriptionId, options RemediationsListForSubscriptionOperationOptions) (RemediationsListForSubscriptionCompleteResult, error) { - return c.RemediationsListForSubscriptionCompleteMatchingPredicate(ctx, id, options, RemediationOperationPredicate{}) -} - -// RemediationsListForSubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c RemediationsClient) RemediationsListForSubscriptionCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, options RemediationsListForSubscriptionOperationOptions, predicate RemediationOperationPredicate) (result RemediationsListForSubscriptionCompleteResult, err error) { - items := make([]Remediation, 0) - - resp, err := c.RemediationsListForSubscription(ctx, id, options) - if err != nil { - err = fmt.Errorf("loading results: %+v", err) - return - } - if resp.Model != nil { - for _, v := range *resp.Model { - if predicate.Matches(v) { - items = append(items, v) - } - } - } - - result = RemediationsListForSubscriptionCompleteResult{ - Items: items, - } - return -} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/postgresql/2017-12-01/servers/model_serverpropertiesforcreate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/postgresql/2017-12-01/servers/model_serverpropertiesforcreate.go index ec427ee27c48a..84868e2551eba 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/postgresql/2017-12-01/servers/model_serverpropertiesforcreate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/postgresql/2017-12-01/servers/model_serverpropertiesforcreate.go @@ -12,7 +12,7 @@ import ( type ServerPropertiesForCreate interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawServerPropertiesForCreateImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservices/2022-10-01/vaultcertificates/model_resourcecertificatedetails.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservices/2022-10-01/vaultcertificates/model_resourcecertificatedetails.go index cce0bf3034374..4057ff8ccddcb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservices/2022-10-01/vaultcertificates/model_resourcecertificatedetails.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservices/2022-10-01/vaultcertificates/model_resourcecertificatedetails.go @@ -12,7 +12,7 @@ import ( type ResourceCertificateDetails interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawResourceCertificateDetailsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/backupprotectableitems/model_workloadprotectableitem.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/backupprotectableitems/model_workloadprotectableitem.go index 44b1c9e03d8db..91f978fc79b4b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/backupprotectableitems/model_workloadprotectableitem.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/backupprotectableitems/model_workloadprotectableitem.go @@ -12,7 +12,7 @@ import ( type WorkloadProtectableItem interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawWorkloadProtectableItemImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/backupprotecteditems/model_protecteditem.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/backupprotecteditems/model_protecteditem.go index 3bddaacbde72e..c0293f0a8088c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/backupprotecteditems/model_protecteditem.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/backupprotecteditems/model_protecteditem.go @@ -12,7 +12,7 @@ import ( type ProtectedItem interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawProtectedItemImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protecteditems/model_protecteditem.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protecteditems/model_protecteditem.go index 7bf74ef7011eb..ffceef4149cfa 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protecteditems/model_protecteditem.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protecteditems/model_protecteditem.go @@ -12,7 +12,7 @@ import ( type ProtectedItem interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawProtectedItemImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectioncontainers/model_protectioncontainer.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectioncontainers/model_protectioncontainer.go index 61eaf6b11781e..1ba03b161724f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectioncontainers/model_protectioncontainer.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectioncontainers/model_protectioncontainer.go @@ -12,7 +12,7 @@ import ( type ProtectionContainer interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawProtectionContainerImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_protectionpolicy.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_protectionpolicy.go index ab2baf59cff61..7d850fa25bdcb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_protectionpolicy.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_protectionpolicy.go @@ -12,7 +12,7 @@ import ( type ProtectionPolicy interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawProtectionPolicyImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_retentionpolicy.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_retentionpolicy.go index 9354684990846..fa52632f677c4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_retentionpolicy.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_retentionpolicy.go @@ -12,7 +12,7 @@ import ( type RetentionPolicy interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRetentionPolicyImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_schedulepolicy.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_schedulepolicy.go index d8029ff79ae87..6f395ac7fc7e1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_schedulepolicy.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2023-02-01/protectionpolicies/model_schedulepolicy.go @@ -12,7 +12,7 @@ import ( type SchedulePolicy interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSchedulePolicyImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics/model_fabricspecificcreationinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics/model_fabricspecificcreationinput.go index 77538a67c9285..8dbde38163bed 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics/model_fabricspecificcreationinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics/model_fabricspecificcreationinput.go @@ -12,7 +12,7 @@ import ( type FabricSpecificCreationInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFabricSpecificCreationInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics/model_fabricspecificdetails.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics/model_fabricspecificdetails.go index 84ebe19e2f947..2a06cf9d12092 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics/model_fabricspecificdetails.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationfabrics/model_fabricspecificdetails.go @@ -12,7 +12,7 @@ import ( type FabricSpecificDetails interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFabricSpecificDetailsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_fabricspecificcreatenetworkmappinginput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_fabricspecificcreatenetworkmappinginput.go index 3ea35d8b588af..24f1403cfe778 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_fabricspecificcreatenetworkmappinginput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_fabricspecificcreatenetworkmappinginput.go @@ -12,7 +12,7 @@ import ( type FabricSpecificCreateNetworkMappingInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFabricSpecificCreateNetworkMappingInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_fabricspecificupdatenetworkmappinginput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_fabricspecificupdatenetworkmappinginput.go index 95419b8b30dec..9b00243a9b26e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_fabricspecificupdatenetworkmappinginput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_fabricspecificupdatenetworkmappinginput.go @@ -12,7 +12,7 @@ import ( type FabricSpecificUpdateNetworkMappingInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFabricSpecificUpdateNetworkMappingInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_networkmappingfabricspecificsettings.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_networkmappingfabricspecificsettings.go index 63dd65ff96110..21b3513bb8abf 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_networkmappingfabricspecificsettings.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationnetworkmappings/model_networkmappingfabricspecificsettings.go @@ -12,7 +12,7 @@ import ( type NetworkMappingFabricSpecificSettings interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawNetworkMappingFabricSpecificSettingsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies/model_policyproviderspecificdetails.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies/model_policyproviderspecificdetails.go index 016431c3e1a2a..ce5f183fe9ea5 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies/model_policyproviderspecificdetails.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies/model_policyproviderspecificdetails.go @@ -12,7 +12,7 @@ import ( type PolicyProviderSpecificDetails interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawPolicyProviderSpecificDetailsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies/model_policyproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies/model_policyproviderspecificinput.go index f70c979f34d3b..51288b6fcb240 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies/model_policyproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationpolicies/model_policyproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type PolicyProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawPolicyProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_adddisksproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_adddisksproviderspecificinput.go index 530b53e37f88c..a47bc604b1d1c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_adddisksproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_adddisksproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type AddDisksProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAddDisksProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_applyrecoverypointproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_applyrecoverypointproviderspecificinput.go index 5fb59b4ee03fc..59c1321593cdf 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_applyrecoverypointproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_applyrecoverypointproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type ApplyRecoveryPointProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawApplyRecoveryPointProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_disableprotectionproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_disableprotectionproviderspecificinput.go index 8eb54226f17a0..72ae183f48d1c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_disableprotectionproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_disableprotectionproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type DisableProtectionProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDisableProtectionProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_enableprotectionproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_enableprotectionproviderspecificinput.go index 261d1267a06b6..c23af95ecaa80 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_enableprotectionproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_enableprotectionproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type EnableProtectionProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEnableProtectionProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_plannedfailoverproviderspecificfailoverinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_plannedfailoverproviderspecificfailoverinput.go index fdbd7c4df6b79..4371a17a20215 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_plannedfailoverproviderspecificfailoverinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_plannedfailoverproviderspecificfailoverinput.go @@ -12,7 +12,7 @@ import ( type PlannedFailoverProviderSpecificFailoverInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawPlannedFailoverProviderSpecificFailoverInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_removedisksproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_removedisksproviderspecificinput.go index d55a6a31a36b8..73a0e3c6b4f05 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_removedisksproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_removedisksproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type RemoveDisksProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRemoveDisksProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_replicationproviderspecificsettings.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_replicationproviderspecificsettings.go index 88ae2135fa226..1e5be9a6f9118 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_replicationproviderspecificsettings.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_replicationproviderspecificsettings.go @@ -12,7 +12,7 @@ import ( type ReplicationProviderSpecificSettings interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawReplicationProviderSpecificSettingsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_reversereplicationproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_reversereplicationproviderspecificinput.go index 862a5d59b19ad..551d56de914fd 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_reversereplicationproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_reversereplicationproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type ReverseReplicationProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawReverseReplicationProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_switchproviderproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_switchproviderproviderspecificinput.go index 310b9f7c3b1e0..fc9fa51e0bf9f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_switchproviderproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_switchproviderproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type SwitchProviderProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSwitchProviderProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_testfailoverproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_testfailoverproviderspecificinput.go index ffc36cdaca9a2..a9a345c2fa947 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_testfailoverproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_testfailoverproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type TestFailoverProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTestFailoverProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_unplannedfailoverproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_unplannedfailoverproviderspecificinput.go index 343d3b7639808..e1270ba432e83 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_unplannedfailoverproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_unplannedfailoverproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type UnplannedFailoverProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawUnplannedFailoverProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_updateapplianceforreplicationprotecteditemproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_updateapplianceforreplicationprotecteditemproviderspecificinput.go index 7803c78738940..4ecaa33309c58 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_updateapplianceforreplicationprotecteditemproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_updateapplianceforreplicationprotecteditemproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type UpdateApplianceForReplicationProtectedItemProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawUpdateApplianceForReplicationProtectedItemProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_updatereplicationprotecteditemproviderinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_updatereplicationprotecteditemproviderinput.go index 9dbfcb53e672f..e890f834bde21 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_updatereplicationprotecteditemproviderinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotecteditems/model_updatereplicationprotecteditemproviderinput.go @@ -12,7 +12,7 @@ import ( type UpdateReplicationProtectedItemProviderInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawUpdateReplicationProtectedItemProviderInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_protectioncontainermappingproviderspecificdetails.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_protectioncontainermappingproviderspecificdetails.go index c945b02704548..265a84762fbe4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_protectioncontainermappingproviderspecificdetails.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_protectioncontainermappingproviderspecificdetails.go @@ -12,7 +12,7 @@ import ( type ProtectionContainerMappingProviderSpecificDetails interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawProtectionContainerMappingProviderSpecificDetailsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_replicationproviderspecificcontainermappinginput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_replicationproviderspecificcontainermappinginput.go index 41f7981f6955c..baeb2a5e0957f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_replicationproviderspecificcontainermappinginput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_replicationproviderspecificcontainermappinginput.go @@ -12,7 +12,7 @@ import ( type ReplicationProviderSpecificContainerMappingInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawReplicationProviderSpecificContainerMappingInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_replicationproviderspecificupdatecontainermappinginput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_replicationproviderspecificupdatecontainermappinginput.go index 97305ee5ce72b..462294f36892c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_replicationproviderspecificupdatecontainermappinginput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainermappings/model_replicationproviderspecificupdatecontainermappinginput.go @@ -12,7 +12,7 @@ import ( type ReplicationProviderSpecificUpdateContainerMappingInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawReplicationProviderSpecificUpdateContainerMappingInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainers/model_replicationproviderspecificcontainercreationinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainers/model_replicationproviderspecificcontainercreationinput.go index 461a925257a52..a7fde08841d66 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainers/model_replicationproviderspecificcontainercreationinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainers/model_replicationproviderspecificcontainercreationinput.go @@ -12,7 +12,7 @@ import ( type ReplicationProviderSpecificContainerCreationInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawReplicationProviderSpecificContainerCreationInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainers/model_switchprotectionproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainers/model_switchprotectionproviderspecificinput.go index e777904122e26..5d72ac382a0a0 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainers/model_switchprotectionproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationprotectioncontainers/model_switchprotectionproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type SwitchProtectionProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSwitchProtectionProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanactiondetails.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanactiondetails.go index 0e7e5fd1f3498..8743f523c0109 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanactiondetails.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanactiondetails.go @@ -12,7 +12,7 @@ import ( type RecoveryPlanActionDetails interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRecoveryPlanActionDetailsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificdetails.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificdetails.go index e765fd9aefc1e..f3f72d62347a3 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificdetails.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificdetails.go @@ -12,7 +12,7 @@ import ( type RecoveryPlanProviderSpecificDetails interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRecoveryPlanProviderSpecificDetailsImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificfailoverinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificfailoverinput.go index 06431dd2a8fba..5edf059e80e54 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificfailoverinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificfailoverinput.go @@ -12,7 +12,7 @@ import ( type RecoveryPlanProviderSpecificFailoverInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRecoveryPlanProviderSpecificFailoverInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificinput.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificinput.go index a9e5c527d384a..b0870834d88bb 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificinput.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicessiterecovery/2022-10-01/replicationrecoveryplans/model_recoveryplanproviderspecificinput.go @@ -12,7 +12,7 @@ import ( type RecoveryPlanProviderSpecificInput interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawRecoveryPlanProviderSpecificInputImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/README.md similarity index 89% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/README.md index dbd5fdbd30ad0..5ca218b350ef7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases` Documentation -The `databases` SDK allows for interaction with the Azure Resource Manager Service `redisenterprise` (API Version `2022-01-01`). +The `databases` SDK allows for interaction with the Azure Resource Manager Service `redisenterprise` (API Version `2023-07-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases" +import "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases" ``` @@ -66,6 +66,23 @@ if err := client.ExportThenPoll(ctx, id, payload); err != nil { ``` +### Example Usage: `DatabasesClient.Flush` + +```go +ctx := context.TODO() +id := databases.NewDatabaseID("12345678-1234-9876-4563-123456789012", "example-resource-group", "redisEnterpriseValue", "databaseValue") + +payload := databases.FlushParameters{ + // ... +} + + +if err := client.FlushThenPoll(ctx, id, payload); err != nil { + // handle the error +} +``` + + ### Example Usage: `DatabasesClient.ForceUnlink` ```go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/constants.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/constants.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/constants.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/id_database.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/id_database.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/id_database.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/id_database.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/id_redisenterprise.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/id_redisenterprise.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/id_redisenterprise.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/id_redisenterprise.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_create.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_create.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_create.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_create.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_delete.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_delete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_delete.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_export.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_export.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_export.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_export.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_flush.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_flush.go new file mode 100644 index 0000000000000..aaf7666fdf07d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_flush.go @@ -0,0 +1,74 @@ +package databases + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type FlushOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Flush ... +func (c DatabasesClient) Flush(ctx context.Context, id DatabaseId, input FlushParameters) (result FlushOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusOK, + }, + HttpMethod: http.MethodPost, + Path: fmt.Sprintf("%s/flush", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// FlushThenPoll performs Flush then polls until it's completed +func (c DatabasesClient) FlushThenPoll(ctx context.Context, id DatabaseId, input FlushParameters) error { + result, err := c.Flush(ctx, id, input) + if err != nil { + return fmt.Errorf("performing Flush: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Flush: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_forceunlink.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_forceunlink.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_forceunlink.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_forceunlink.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_get.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_get.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_get.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_import.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_import.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_import.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_import.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_listbycluster.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_listbycluster.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_listbycluster.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_listbycluster.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_listkeys.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_listkeys.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_listkeys.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_listkeys.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_regeneratekey.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_regeneratekey.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_regeneratekey.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_regeneratekey.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_update.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_update.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/method_update.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/method_update.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_accesskeys.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_accesskeys.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_accesskeys.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_accesskeys.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_database.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_database.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_database.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_database.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_databaseproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_databaseproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_databaseproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_databaseproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_databasepropertiesgeoreplication.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_databasepropertiesgeoreplication.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_databasepropertiesgeoreplication.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_databasepropertiesgeoreplication.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_databaseupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_databaseupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_databaseupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_databaseupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_exportclusterparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_exportclusterparameters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_exportclusterparameters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_exportclusterparameters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_flushparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_flushparameters.go new file mode 100644 index 0000000000000..7ac8c6633b300 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_flushparameters.go @@ -0,0 +1,8 @@ +package databases + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type FlushParameters struct { + Ids *[]string `json:"ids,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_forceunlinkparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_forceunlinkparameters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_forceunlinkparameters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_forceunlinkparameters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_importclusterparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_importclusterparameters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_importclusterparameters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_importclusterparameters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_linkeddatabase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_linkeddatabase.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_linkeddatabase.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_linkeddatabase.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_module.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_module.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_module.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_module.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_persistence.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_persistence.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_persistence.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_persistence.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_regeneratekeyparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_regeneratekeyparameters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/model_regeneratekeyparameters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/model_regeneratekeyparameters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/version.go index b1bf2c06bca0d..5f96648f5097b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2021-05-01" +const defaultApiVersion = "2023-07-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/databases/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/README.md similarity index 92% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/README.md rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/README.md index d4e9d4eafb45a..b5ce463ffbc96 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/README.md @@ -1,14 +1,14 @@ -## `github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise` Documentation +## `github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise` Documentation -The `redisenterprise` SDK allows for interaction with the Azure Resource Manager Service `redisenterprise` (API Version `2022-01-01`). +The `redisenterprise` SDK allows for interaction with the Azure Resource Manager Service `redisenterprise` (API Version `2023-07-01`). This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). ### Import Path ```go -import "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise" +import "github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise" ``` @@ -83,6 +83,23 @@ if err := client.DatabasesExportThenPoll(ctx, id, payload); err != nil { ``` +### Example Usage: `RedisEnterpriseClient.DatabasesFlush` + +```go +ctx := context.TODO() +id := redisenterprise.NewDatabaseID("12345678-1234-9876-4563-123456789012", "example-resource-group", "redisEnterpriseValue", "databaseValue") + +payload := redisenterprise.FlushParameters{ + // ... +} + + +if err := client.DatabasesFlushThenPoll(ctx, id, payload); err != nil { + // handle the error +} +``` + + ### Example Usage: `RedisEnterpriseClient.DatabasesForceUnlink` ```go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/client.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/client.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/client.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/constants.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/constants.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/constants.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/id_database.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/id_database.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/id_database.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/id_database.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/id_redisenterprise.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/id_redisenterprise.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/id_redisenterprise.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/id_redisenterprise.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_create.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_create.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_create.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_create.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasescreate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasescreate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasescreate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasescreate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesdelete.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesdelete.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesexport.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesexport.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesexport.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesexport.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesflush.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesflush.go new file mode 100644 index 0000000000000..1a2453ebee2af --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesflush.go @@ -0,0 +1,74 @@ +package redisenterprise + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DatabasesFlushOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// DatabasesFlush ... +func (c RedisEnterpriseClient) DatabasesFlush(ctx context.Context, id DatabaseId, input FlushParameters) (result DatabasesFlushOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusOK, + }, + HttpMethod: http.MethodPost, + Path: fmt.Sprintf("%s/flush", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// DatabasesFlushThenPoll performs DatabasesFlush then polls until it's completed +func (c RedisEnterpriseClient) DatabasesFlushThenPoll(ctx context.Context, id DatabaseId, input FlushParameters) error { + result, err := c.DatabasesFlush(ctx, id, input) + if err != nil { + return fmt.Errorf("performing DatabasesFlush: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after DatabasesFlush: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesforceunlink.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesforceunlink.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesforceunlink.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesforceunlink.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesget.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesget.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesimport.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesimport.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesimport.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesimport.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databaseslistbycluster.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databaseslistbycluster.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databaseslistbycluster.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databaseslistbycluster.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databaseslistkeys.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databaseslistkeys.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databaseslistkeys.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databaseslistkeys.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesregeneratekey.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesregeneratekey.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesregeneratekey.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesregeneratekey.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_databasesupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_databasesupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_delete.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_delete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_delete.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_get.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_get.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_get.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_list.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_list.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_list.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_list.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_listbyresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_listbyresourcegroup.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_listbyresourcegroup.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_listbyresourcegroup.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_update.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_update.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/method_update.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/method_update.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_accesskeys.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_accesskeys.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_accesskeys.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_accesskeys.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_cluster.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_cluster.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_cluster.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_cluster.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_clusterproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_clusterproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_clusterproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_clusterproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_clusterupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_clusterupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_clusterupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_clusterupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_database.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_database.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_database.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_database.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_databaseproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_databaseproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_databaseproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_databaseproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_databasepropertiesgeoreplication.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_databasepropertiesgeoreplication.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_databasepropertiesgeoreplication.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_databasepropertiesgeoreplication.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_databaseupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_databaseupdate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_databaseupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_databaseupdate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_exportclusterparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_exportclusterparameters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_exportclusterparameters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_exportclusterparameters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_flushparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_flushparameters.go new file mode 100644 index 0000000000000..9d3358ea74196 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_flushparameters.go @@ -0,0 +1,8 @@ +package redisenterprise + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type FlushParameters struct { + Ids *[]string `json:"ids,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_forceunlinkparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_forceunlinkparameters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_forceunlinkparameters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_forceunlinkparameters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_importclusterparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_importclusterparameters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_importclusterparameters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_importclusterparameters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_linkeddatabase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_linkeddatabase.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_linkeddatabase.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_linkeddatabase.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_module.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_module.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_module.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_module.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_persistence.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_persistence.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_persistence.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_persistence.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_privateendpoint.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_privateendpoint.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_privateendpoint.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_privateendpoint.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_privateendpointconnection.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_privateendpointconnection.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_privateendpointconnection.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_privateendpointconnection.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_privateendpointconnectionproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_privateendpointconnectionproperties.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_privateendpointconnectionproperties.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_privateendpointconnectionproperties.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_privatelinkserviceconnectionstate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_privatelinkserviceconnectionstate.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_privatelinkserviceconnectionstate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_privatelinkserviceconnectionstate.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_regeneratekeyparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_regeneratekeyparameters.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_regeneratekeyparameters.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_regeneratekeyparameters.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_sku.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_sku.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/model_sku.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/model_sku.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/predicates.go similarity index 100% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/predicates.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/predicates.go diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/version.go similarity index 88% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/version.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/version.go index 60498332607a6..c10a96d76cfb7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise/version.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise/version.go @@ -5,7 +5,7 @@ import "fmt" // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -const defaultApiVersion = "2022-01-01" +const defaultApiVersion = "2023-07-01" func userAgent() string { return fmt.Sprintf("hashicorp/go-azure-sdk/redisenterprise/%s", defaultApiVersion) diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/README.md new file mode 100644 index 0000000000000..8d17fd3e3757e --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/README.md @@ -0,0 +1,184 @@ + +## `github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances` Documentation + +The `appliances` SDK allows for interaction with the Azure Resource Manager Service `resourceconnector` (API Version `2022-10-27`). + +This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). + +### Import Path + +```go +import "github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances" +``` + + +### Client Initialization + +```go +client := appliances.NewAppliancesClientWithBaseURI("https://management.azure.com") +client.Client.Authorizer = authorizer +``` + + +### Example Usage: `AppliancesClient.CreateOrUpdate` + +```go +ctx := context.TODO() +id := appliances.NewApplianceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "applianceValue") + +payload := appliances.Appliance{ + // ... +} + + +if err := client.CreateOrUpdateThenPoll(ctx, id, payload); err != nil { + // handle the error +} +``` + + +### Example Usage: `AppliancesClient.Delete` + +```go +ctx := context.TODO() +id := appliances.NewApplianceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "applianceValue") + +if err := client.DeleteThenPoll(ctx, id); err != nil { + // handle the error +} +``` + + +### Example Usage: `AppliancesClient.Get` + +```go +ctx := context.TODO() +id := appliances.NewApplianceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "applianceValue") + +read, err := client.Get(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AppliancesClient.GetTelemetryConfig` + +```go +ctx := context.TODO() +id := appliances.NewSubscriptionID("12345678-1234-9876-4563-123456789012") + +read, err := client.GetTelemetryConfig(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AppliancesClient.GetUpgradeGraph` + +```go +ctx := context.TODO() +id := appliances.NewUpgradeGraphID("12345678-1234-9876-4563-123456789012", "example-resource-group", "applianceValue", "upgradeGraphValue") + +read, err := client.GetUpgradeGraph(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AppliancesClient.ListByResourceGroup` + +```go +ctx := context.TODO() +id := appliances.NewResourceGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group") + +// alternatively `client.ListByResourceGroup(ctx, id)` can be used to do batched pagination +items, err := client.ListByResourceGroupComplete(ctx, id) +if err != nil { + // handle the error +} +for _, item := range items { + // do something +} +``` + + +### Example Usage: `AppliancesClient.ListBySubscription` + +```go +ctx := context.TODO() +id := appliances.NewSubscriptionID("12345678-1234-9876-4563-123456789012") + +// alternatively `client.ListBySubscription(ctx, id)` can be used to do batched pagination +items, err := client.ListBySubscriptionComplete(ctx, id) +if err != nil { + // handle the error +} +for _, item := range items { + // do something +} +``` + + +### Example Usage: `AppliancesClient.ListClusterUserCredential` + +```go +ctx := context.TODO() +id := appliances.NewApplianceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "applianceValue") + +read, err := client.ListClusterUserCredential(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AppliancesClient.ListKeys` + +```go +ctx := context.TODO() +id := appliances.NewApplianceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "applianceValue") + +read, err := client.ListKeys(ctx, id, appliances.DefaultListKeysOperationOptions()) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AppliancesClient.Update` + +```go +ctx := context.TODO() +id := appliances.NewApplianceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "applianceValue") + +payload := appliances.PatchableAppliance{ + // ... +} + + +read, err := client.Update(ctx, id, payload) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/client.go new file mode 100644 index 0000000000000..c909b4585ece2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/client.go @@ -0,0 +1,26 @@ +package appliances + +import ( + "fmt" + + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + sdkEnv "github.com/hashicorp/go-azure-sdk/sdk/environments" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type AppliancesClient struct { + Client *resourcemanager.Client +} + +func NewAppliancesClientWithBaseURI(sdkApi sdkEnv.Api) (*AppliancesClient, error) { + client, err := resourcemanager.NewResourceManagerClient(sdkApi, "appliances", defaultApiVersion) + if err != nil { + return nil, fmt.Errorf("instantiating AppliancesClient: %+v", err) + } + + return &AppliancesClient{ + Client: client, + }, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/constants.go new file mode 100644 index 0000000000000..3b8487515b5be --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/constants.go @@ -0,0 +1,264 @@ +package appliances + +import ( + "encoding/json" + "fmt" + "strings" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type AccessProfileType string + +const ( + AccessProfileTypeClusterCustomerUser AccessProfileType = "clusterCustomerUser" + AccessProfileTypeClusterUser AccessProfileType = "clusterUser" +) + +func PossibleValuesForAccessProfileType() []string { + return []string{ + string(AccessProfileTypeClusterCustomerUser), + string(AccessProfileTypeClusterUser), + } +} + +func (s *AccessProfileType) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseAccessProfileType(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseAccessProfileType(input string) (*AccessProfileType, error) { + vals := map[string]AccessProfileType{ + "clustercustomeruser": AccessProfileTypeClusterCustomerUser, + "clusteruser": AccessProfileTypeClusterUser, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := AccessProfileType(input) + return &out, nil +} + +type Distro string + +const ( + DistroAKSEdge Distro = "AKSEdge" +) + +func PossibleValuesForDistro() []string { + return []string{ + string(DistroAKSEdge), + } +} + +func (s *Distro) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseDistro(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseDistro(input string) (*Distro, error) { + vals := map[string]Distro{ + "aksedge": DistroAKSEdge, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Distro(input) + return &out, nil +} + +type Provider string + +const ( + ProviderHCI Provider = "HCI" + ProviderSCVMM Provider = "SCVMM" + ProviderVMWare Provider = "VMWare" +) + +func PossibleValuesForProvider() []string { + return []string{ + string(ProviderHCI), + string(ProviderSCVMM), + string(ProviderVMWare), + } +} + +func (s *Provider) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseProvider(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseProvider(input string) (*Provider, error) { + vals := map[string]Provider{ + "hci": ProviderHCI, + "scvmm": ProviderSCVMM, + "vmware": ProviderVMWare, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Provider(input) + return &out, nil +} + +type Status string + +const ( + StatusConnected Status = "Connected" + StatusConnecting Status = "Connecting" + StatusETCDSnapshotFailed Status = "ETCDSnapshotFailed" + StatusImageDeprovisioning Status = "ImageDeprovisioning" + StatusImageDownloaded Status = "ImageDownloaded" + StatusImageDownloading Status = "ImageDownloading" + StatusImagePending Status = "ImagePending" + StatusImageProvisioned Status = "ImageProvisioned" + StatusImageProvisioning Status = "ImageProvisioning" + StatusImageUnknown Status = "ImageUnknown" + StatusNone Status = "None" + StatusOffline Status = "Offline" + StatusPostUpgrade Status = "PostUpgrade" + StatusPreUpgrade Status = "PreUpgrade" + StatusPreparingForUpgrade Status = "PreparingForUpgrade" + StatusRunning Status = "Running" + StatusUpdatingCAPI Status = "UpdatingCAPI" + StatusUpdatingCloudOperator Status = "UpdatingCloudOperator" + StatusUpdatingCluster Status = "UpdatingCluster" + StatusUpgradeClusterExtensionFailedToDelete Status = "UpgradeClusterExtensionFailedToDelete" + StatusUpgradeComplete Status = "UpgradeComplete" + StatusUpgradeFailed Status = "UpgradeFailed" + StatusUpgradePrerequisitesCompleted Status = "UpgradePrerequisitesCompleted" + StatusUpgradingKVAIO Status = "UpgradingKVAIO" + StatusValidating Status = "Validating" + StatusValidatingETCDHealth Status = "ValidatingETCDHealth" + StatusValidatingImageDownload Status = "ValidatingImageDownload" + StatusValidatingImageUpload Status = "ValidatingImageUpload" + StatusValidatingSFSConnectivity Status = "ValidatingSFSConnectivity" + StatusWaitingForCloudOperator Status = "WaitingForCloudOperator" + StatusWaitingForHeartbeat Status = "WaitingForHeartbeat" + StatusWaitingForKVAIO Status = "WaitingForKVAIO" +) + +func PossibleValuesForStatus() []string { + return []string{ + string(StatusConnected), + string(StatusConnecting), + string(StatusETCDSnapshotFailed), + string(StatusImageDeprovisioning), + string(StatusImageDownloaded), + string(StatusImageDownloading), + string(StatusImagePending), + string(StatusImageProvisioned), + string(StatusImageProvisioning), + string(StatusImageUnknown), + string(StatusNone), + string(StatusOffline), + string(StatusPostUpgrade), + string(StatusPreUpgrade), + string(StatusPreparingForUpgrade), + string(StatusRunning), + string(StatusUpdatingCAPI), + string(StatusUpdatingCloudOperator), + string(StatusUpdatingCluster), + string(StatusUpgradeClusterExtensionFailedToDelete), + string(StatusUpgradeComplete), + string(StatusUpgradeFailed), + string(StatusUpgradePrerequisitesCompleted), + string(StatusUpgradingKVAIO), + string(StatusValidating), + string(StatusValidatingETCDHealth), + string(StatusValidatingImageDownload), + string(StatusValidatingImageUpload), + string(StatusValidatingSFSConnectivity), + string(StatusWaitingForCloudOperator), + string(StatusWaitingForHeartbeat), + string(StatusWaitingForKVAIO), + } +} + +func (s *Status) UnmarshalJSON(bytes []byte) error { + var decoded string + if err := json.Unmarshal(bytes, &decoded); err != nil { + return fmt.Errorf("unmarshaling: %+v", err) + } + out, err := parseStatus(decoded) + if err != nil { + return fmt.Errorf("parsing %q: %+v", decoded, err) + } + *s = *out + return nil +} + +func parseStatus(input string) (*Status, error) { + vals := map[string]Status{ + "connected": StatusConnected, + "connecting": StatusConnecting, + "etcdsnapshotfailed": StatusETCDSnapshotFailed, + "imagedeprovisioning": StatusImageDeprovisioning, + "imagedownloaded": StatusImageDownloaded, + "imagedownloading": StatusImageDownloading, + "imagepending": StatusImagePending, + "imageprovisioned": StatusImageProvisioned, + "imageprovisioning": StatusImageProvisioning, + "imageunknown": StatusImageUnknown, + "none": StatusNone, + "offline": StatusOffline, + "postupgrade": StatusPostUpgrade, + "preupgrade": StatusPreUpgrade, + "preparingforupgrade": StatusPreparingForUpgrade, + "running": StatusRunning, + "updatingcapi": StatusUpdatingCAPI, + "updatingcloudoperator": StatusUpdatingCloudOperator, + "updatingcluster": StatusUpdatingCluster, + "upgradeclusterextensionfailedtodelete": StatusUpgradeClusterExtensionFailedToDelete, + "upgradecomplete": StatusUpgradeComplete, + "upgradefailed": StatusUpgradeFailed, + "upgradeprerequisitescompleted": StatusUpgradePrerequisitesCompleted, + "upgradingkvaio": StatusUpgradingKVAIO, + "validating": StatusValidating, + "validatingetcdhealth": StatusValidatingETCDHealth, + "validatingimagedownload": StatusValidatingImageDownload, + "validatingimageupload": StatusValidatingImageUpload, + "validatingsfsconnectivity": StatusValidatingSFSConnectivity, + "waitingforcloudoperator": StatusWaitingForCloudOperator, + "waitingforheartbeat": StatusWaitingForHeartbeat, + "waitingforkvaio": StatusWaitingForKVAIO, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Status(input) + return &out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/id_appliance.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/id_appliance.go new file mode 100644 index 0000000000000..c8eb093b3a031 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/id_appliance.go @@ -0,0 +1,127 @@ +package appliances + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = ApplianceId{} + +// ApplianceId is a struct representing the Resource ID for a Appliance +type ApplianceId struct { + SubscriptionId string + ResourceGroupName string + ApplianceName string +} + +// NewApplianceID returns a new ApplianceId struct +func NewApplianceID(subscriptionId string, resourceGroupName string, applianceName string) ApplianceId { + return ApplianceId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + ApplianceName: applianceName, + } +} + +// ParseApplianceID parses 'input' into a ApplianceId +func ParseApplianceID(input string) (*ApplianceId, error) { + parser := resourceids.NewParserFromResourceIdType(ApplianceId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ApplianceId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ApplianceName, ok = parsed.Parsed["applianceName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "applianceName", *parsed) + } + + return &id, nil +} + +// ParseApplianceIDInsensitively parses 'input' case-insensitively into a ApplianceId +// note: this method should only be used for API response data and not user input +func ParseApplianceIDInsensitively(input string) (*ApplianceId, error) { + parser := resourceids.NewParserFromResourceIdType(ApplianceId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ApplianceId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ApplianceName, ok = parsed.Parsed["applianceName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "applianceName", *parsed) + } + + return &id, nil +} + +// ValidateApplianceID checks that 'input' can be parsed as a Appliance ID +func ValidateApplianceID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseApplianceID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Appliance ID +func (id ApplianceId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.ResourceConnector/appliances/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.ApplianceName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Appliance ID +func (id ApplianceId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftResourceConnector", "Microsoft.ResourceConnector", "Microsoft.ResourceConnector"), + resourceids.StaticSegment("staticAppliances", "appliances", "appliances"), + resourceids.UserSpecifiedSegment("applianceName", "applianceValue"), + } +} + +// String returns a human-readable description of this Appliance ID +func (id ApplianceId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Appliance Name: %q", id.ApplianceName), + } + return fmt.Sprintf("Appliance (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/id_upgradegraph.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/id_upgradegraph.go new file mode 100644 index 0000000000000..02d88d9c97c19 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/id_upgradegraph.go @@ -0,0 +1,140 @@ +package appliances + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = UpgradeGraphId{} + +// UpgradeGraphId is a struct representing the Resource ID for a Upgrade Graph +type UpgradeGraphId struct { + SubscriptionId string + ResourceGroupName string + ApplianceName string + UpgradeGraphName string +} + +// NewUpgradeGraphID returns a new UpgradeGraphId struct +func NewUpgradeGraphID(subscriptionId string, resourceGroupName string, applianceName string, upgradeGraphName string) UpgradeGraphId { + return UpgradeGraphId{ + SubscriptionId: subscriptionId, + ResourceGroupName: resourceGroupName, + ApplianceName: applianceName, + UpgradeGraphName: upgradeGraphName, + } +} + +// ParseUpgradeGraphID parses 'input' into a UpgradeGraphId +func ParseUpgradeGraphID(input string) (*UpgradeGraphId, error) { + parser := resourceids.NewParserFromResourceIdType(UpgradeGraphId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := UpgradeGraphId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ApplianceName, ok = parsed.Parsed["applianceName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "applianceName", *parsed) + } + + if id.UpgradeGraphName, ok = parsed.Parsed["upgradeGraphName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "upgradeGraphName", *parsed) + } + + return &id, nil +} + +// ParseUpgradeGraphIDInsensitively parses 'input' case-insensitively into a UpgradeGraphId +// note: this method should only be used for API response data and not user input +func ParseUpgradeGraphIDInsensitively(input string) (*UpgradeGraphId, error) { + parser := resourceids.NewParserFromResourceIdType(UpgradeGraphId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := UpgradeGraphId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.ResourceGroupName, ok = parsed.Parsed["resourceGroupName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "resourceGroupName", *parsed) + } + + if id.ApplianceName, ok = parsed.Parsed["applianceName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "applianceName", *parsed) + } + + if id.UpgradeGraphName, ok = parsed.Parsed["upgradeGraphName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "upgradeGraphName", *parsed) + } + + return &id, nil +} + +// ValidateUpgradeGraphID checks that 'input' can be parsed as a Upgrade Graph ID +func ValidateUpgradeGraphID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseUpgradeGraphID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Upgrade Graph ID +func (id UpgradeGraphId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.ResourceConnector/appliances/%s/upgradeGraphs/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroupName, id.ApplianceName, id.UpgradeGraphName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Upgrade Graph ID +func (id UpgradeGraphId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticResourceGroups", "resourceGroups", "resourceGroups"), + resourceids.ResourceGroupSegment("resourceGroupName", "example-resource-group"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftResourceConnector", "Microsoft.ResourceConnector", "Microsoft.ResourceConnector"), + resourceids.StaticSegment("staticAppliances", "appliances", "appliances"), + resourceids.UserSpecifiedSegment("applianceName", "applianceValue"), + resourceids.StaticSegment("staticUpgradeGraphs", "upgradeGraphs", "upgradeGraphs"), + resourceids.UserSpecifiedSegment("upgradeGraphName", "upgradeGraphValue"), + } +} + +// String returns a human-readable description of this Upgrade Graph ID +func (id UpgradeGraphId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Resource Group Name: %q", id.ResourceGroupName), + fmt.Sprintf("Appliance Name: %q", id.ApplianceName), + fmt.Sprintf("Upgrade Graph Name: %q", id.UpgradeGraphName), + } + return fmt.Sprintf("Upgrade Graph (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_createorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_createorupdate.go new file mode 100644 index 0000000000000..3e65ee2b9d529 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_createorupdate.go @@ -0,0 +1,74 @@ +package appliances + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateOrUpdateOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// CreateOrUpdate ... +func (c AppliancesClient) CreateOrUpdate(ctx context.Context, id ApplianceId, input Appliance) (result CreateOrUpdateOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusCreated, + http.StatusOK, + }, + HttpMethod: http.MethodPut, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// CreateOrUpdateThenPoll performs CreateOrUpdate then polls until it's completed +func (c AppliancesClient) CreateOrUpdateThenPoll(ctx context.Context, id ApplianceId, input Appliance) error { + result, err := c.CreateOrUpdate(ctx, id, input) + if err != nil { + return fmt.Errorf("performing CreateOrUpdate: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after CreateOrUpdate: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_delete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_delete.go new file mode 100644 index 0000000000000..cd9e813db837a --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_delete.go @@ -0,0 +1,70 @@ +package appliances + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/client/pollers" + "github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteOperationResponse struct { + Poller pollers.Poller + HttpResponse *http.Response + OData *odata.OData +} + +// Delete ... +func (c AppliancesClient) Delete(ctx context.Context, id ApplianceId) (result DeleteOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusAccepted, + http.StatusNoContent, + }, + HttpMethod: http.MethodDelete, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + result.Poller, err = resourcemanager.PollerFromResponse(resp, c.Client) + if err != nil { + return + } + + return +} + +// DeleteThenPoll performs Delete then polls until it's completed +func (c AppliancesClient) DeleteThenPoll(ctx context.Context, id ApplianceId) error { + result, err := c.Delete(ctx, id) + if err != nil { + return fmt.Errorf("performing Delete: %+v", err) + } + + if err := result.Poller.PollUntilDone(ctx); err != nil { + return fmt.Errorf("polling after Delete: %+v", err) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_get.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_get.go new file mode 100644 index 0000000000000..72c7193183061 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_get.go @@ -0,0 +1,51 @@ +package appliances + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *Appliance +} + +// Get ... +func (c AppliancesClient) Get(ctx context.Context, id ApplianceId) (result GetOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_gettelemetryconfig.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_gettelemetryconfig.go new file mode 100644 index 0000000000000..b379b7ee1150a --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_gettelemetryconfig.go @@ -0,0 +1,53 @@ +package appliances + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetTelemetryConfigOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *ApplianceGetTelemetryConfigResult +} + +// GetTelemetryConfig ... +func (c AppliancesClient) GetTelemetryConfig(ctx context.Context, id commonids.SubscriptionId) (result GetTelemetryConfigOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/providers/Microsoft.ResourceConnector/telemetryconfig", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_getupgradegraph.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_getupgradegraph.go new file mode 100644 index 0000000000000..8d8b3bee629b4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_getupgradegraph.go @@ -0,0 +1,51 @@ +package appliances + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetUpgradeGraphOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *UpgradeGraph +} + +// GetUpgradeGraph ... +func (c AppliancesClient) GetUpgradeGraph(ctx context.Context, id UpgradeGraphId) (result GetUpgradeGraphOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listbyresourcegroup.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listbyresourcegroup.go new file mode 100644 index 0000000000000..f60ee84ed5be5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listbyresourcegroup.go @@ -0,0 +1,90 @@ +package appliances + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListByResourceGroupOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]Appliance +} + +type ListByResourceGroupCompleteResult struct { + Items []Appliance +} + +// ListByResourceGroup ... +func (c AppliancesClient) ListByResourceGroup(ctx context.Context, id commonids.ResourceGroupId) (result ListByResourceGroupOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/providers/Microsoft.ResourceConnector/appliances", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]Appliance `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListByResourceGroupComplete retrieves all the results into a single object +func (c AppliancesClient) ListByResourceGroupComplete(ctx context.Context, id commonids.ResourceGroupId) (ListByResourceGroupCompleteResult, error) { + return c.ListByResourceGroupCompleteMatchingPredicate(ctx, id, ApplianceOperationPredicate{}) +} + +// ListByResourceGroupCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c AppliancesClient) ListByResourceGroupCompleteMatchingPredicate(ctx context.Context, id commonids.ResourceGroupId, predicate ApplianceOperationPredicate) (result ListByResourceGroupCompleteResult, err error) { + items := make([]Appliance, 0) + + resp, err := c.ListByResourceGroup(ctx, id) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListByResourceGroupCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listbysubscription.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listbysubscription.go new file mode 100644 index 0000000000000..96e13e35442ec --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listbysubscription.go @@ -0,0 +1,90 @@ +package appliances + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListBySubscriptionOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *[]Appliance +} + +type ListBySubscriptionCompleteResult struct { + Items []Appliance +} + +// ListBySubscription ... +func (c AppliancesClient) ListBySubscription(ctx context.Context, id commonids.SubscriptionId) (result ListBySubscriptionOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodGet, + Path: fmt.Sprintf("%s/providers/Microsoft.ResourceConnector/appliances", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.ExecutePaged(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + var values struct { + Values *[]Appliance `json:"value"` + } + if err = resp.Unmarshal(&values); err != nil { + return + } + + result.Model = values.Values + + return +} + +// ListBySubscriptionComplete retrieves all the results into a single object +func (c AppliancesClient) ListBySubscriptionComplete(ctx context.Context, id commonids.SubscriptionId) (ListBySubscriptionCompleteResult, error) { + return c.ListBySubscriptionCompleteMatchingPredicate(ctx, id, ApplianceOperationPredicate{}) +} + +// ListBySubscriptionCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c AppliancesClient) ListBySubscriptionCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate ApplianceOperationPredicate) (result ListBySubscriptionCompleteResult, err error) { + items := make([]Appliance, 0) + + resp, err := c.ListBySubscription(ctx, id) + if err != nil { + err = fmt.Errorf("loading results: %+v", err) + return + } + if resp.Model != nil { + for _, v := range *resp.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + result = ListBySubscriptionCompleteResult{ + Items: items, + } + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listclusterusercredential.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listclusterusercredential.go new file mode 100644 index 0000000000000..f78229f12866f --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listclusterusercredential.go @@ -0,0 +1,52 @@ +package appliances + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListClusterUserCredentialOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *ApplianceListCredentialResults +} + +// ListClusterUserCredential ... +func (c AppliancesClient) ListClusterUserCredential(ctx context.Context, id ApplianceId) (result ListClusterUserCredentialOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPost, + Path: fmt.Sprintf("%s/listClusterUserCredential", id.ID()), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listkeys.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listkeys.go new file mode 100644 index 0000000000000..934aad299db0b --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_listkeys.go @@ -0,0 +1,80 @@ +package appliances + +import ( + "context" + "fmt" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListKeysOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *ApplianceListKeysResults +} + +type ListKeysOperationOptions struct { + ArtifactType *string +} + +func DefaultListKeysOperationOptions() ListKeysOperationOptions { + return ListKeysOperationOptions{} +} + +func (o ListKeysOperationOptions) ToHeaders() *client.Headers { + out := client.Headers{} + + return &out +} + +func (o ListKeysOperationOptions) ToOData() *odata.Query { + out := odata.Query{} + return &out +} + +func (o ListKeysOperationOptions) ToQuery() *client.QueryParams { + out := client.QueryParams{} + if o.ArtifactType != nil { + out.Append("artifactType", fmt.Sprintf("%v", *o.ArtifactType)) + } + return &out +} + +// ListKeys ... +func (c AppliancesClient) ListKeys(ctx context.Context, id ApplianceId, options ListKeysOperationOptions) (result ListKeysOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPost, + Path: fmt.Sprintf("%s/listkeys", id.ID()), + OptionsObject: options, + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_update.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_update.go new file mode 100644 index 0000000000000..11f8e1c5d32f3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/method_update.go @@ -0,0 +1,55 @@ +package appliances + +import ( + "context" + "net/http" + + "github.com/hashicorp/go-azure-sdk/sdk/client" + "github.com/hashicorp/go-azure-sdk/sdk/odata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type UpdateOperationResponse struct { + HttpResponse *http.Response + OData *odata.OData + Model *Appliance +} + +// Update ... +func (c AppliancesClient) Update(ctx context.Context, id ApplianceId, input PatchableAppliance) (result UpdateOperationResponse, err error) { + opts := client.RequestOptions{ + ContentType: "application/json; charset=utf-8", + ExpectedStatusCodes: []int{ + http.StatusOK, + }, + HttpMethod: http.MethodPatch, + Path: id.ID(), + } + + req, err := c.Client.NewRequest(ctx, opts) + if err != nil { + return + } + + if err = req.Marshal(input); err != nil { + return + } + + var resp *client.Response + resp, err = req.Execute(ctx) + if resp != nil { + result.OData = resp.OData + result.HttpResponse = resp.Response + } + if err != nil { + return + } + + if err = resp.Unmarshal(&result.Model); err != nil { + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliance.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliance.go new file mode 100644 index 0000000000000..3bffef71c23d6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliance.go @@ -0,0 +1,20 @@ +package appliances + +import ( + "github.com/hashicorp/go-azure-helpers/resourcemanager/identity" + "github.com/hashicorp/go-azure-helpers/resourcemanager/systemdata" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type Appliance struct { + Id *string `json:"id,omitempty"` + Identity *identity.SystemAssigned `json:"identity,omitempty"` + Location string `json:"location"` + Name *string `json:"name,omitempty"` + Properties *ApplianceProperties `json:"properties,omitempty"` + SystemData *systemdata.SystemData `json:"systemData,omitempty"` + Tags *map[string]string `json:"tags,omitempty"` + Type *string `json:"type,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancecredentialkubeconfig.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancecredentialkubeconfig.go new file mode 100644 index 0000000000000..ba91ca3f35d64 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancecredentialkubeconfig.go @@ -0,0 +1,9 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ApplianceCredentialKubeconfig struct { + Name *AccessProfileType `json:"name,omitempty"` + Value *string `json:"value,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancegettelemetryconfigresult.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancegettelemetryconfigresult.go new file mode 100644 index 0000000000000..51784d4d3349a --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancegettelemetryconfigresult.go @@ -0,0 +1,8 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ApplianceGetTelemetryConfigResult struct { + TelemetryInstrumentationKey *string `json:"telemetryInstrumentationKey,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancelistcredentialresults.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancelistcredentialresults.go new file mode 100644 index 0000000000000..925fa85564429 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancelistcredentialresults.go @@ -0,0 +1,9 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ApplianceListCredentialResults struct { + HybridConnectionConfig *HybridConnectionConfig `json:"hybridConnectionConfig,omitempty"` + Kubeconfigs *[]ApplianceCredentialKubeconfig `json:"kubeconfigs,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancelistkeysresults.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancelistkeysresults.go new file mode 100644 index 0000000000000..be869370361cf --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancelistkeysresults.go @@ -0,0 +1,10 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ApplianceListKeysResults struct { + ArtifactProfiles *map[string]ArtifactProfile `json:"artifactProfiles,omitempty"` + Kubeconfigs *[]ApplianceCredentialKubeconfig `json:"kubeconfigs,omitempty"` + SshKeys *map[string]SSHKey `json:"sshKeys,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_applianceproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_applianceproperties.go new file mode 100644 index 0000000000000..ea46a7b2231b9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_applianceproperties.go @@ -0,0 +1,13 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ApplianceProperties struct { + Distro *Distro `json:"distro,omitempty"` + InfrastructureConfig *AppliancePropertiesInfrastructureConfig `json:"infrastructureConfig,omitempty"` + ProvisioningState *string `json:"provisioningState,omitempty"` + PublicKey *string `json:"publicKey,omitempty"` + Status *Status `json:"status,omitempty"` + Version *string `json:"version,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancepropertiesinfrastructureconfig.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancepropertiesinfrastructureconfig.go new file mode 100644 index 0000000000000..1301b177d0463 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_appliancepropertiesinfrastructureconfig.go @@ -0,0 +1,8 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type AppliancePropertiesInfrastructureConfig struct { + Provider *Provider `json:"provider,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_artifactprofile.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_artifactprofile.go new file mode 100644 index 0000000000000..81f4faa9faeb5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_artifactprofile.go @@ -0,0 +1,8 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ArtifactProfile struct { + Endpoint *string `json:"endpoint,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_hybridconnectionconfig.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_hybridconnectionconfig.go new file mode 100644 index 0000000000000..84aaa679766f6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_hybridconnectionconfig.go @@ -0,0 +1,11 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type HybridConnectionConfig struct { + ExpirationTime *int64 `json:"expirationTime,omitempty"` + HybridConnectionName *string `json:"hybridConnectionName,omitempty"` + Relay *string `json:"relay,omitempty"` + Token *string `json:"token,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_patchableappliance.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_patchableappliance.go new file mode 100644 index 0000000000000..2eed58c90089b --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_patchableappliance.go @@ -0,0 +1,8 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type PatchableAppliance struct { + Tags *map[string]string `json:"tags,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_sshkey.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_sshkey.go new file mode 100644 index 0000000000000..682a1195a2365 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_sshkey.go @@ -0,0 +1,12 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SSHKey struct { + Certificate *string `json:"certificate,omitempty"` + CreationTimeStamp *int64 `json:"creationTimeStamp,omitempty"` + ExpirationTimeStamp *int64 `json:"expirationTimeStamp,omitempty"` + PrivateKey *string `json:"privateKey,omitempty"` + PublicKey *string `json:"publicKey,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversion.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversion.go new file mode 100644 index 0000000000000..1c4599e8f33e8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversion.go @@ -0,0 +1,9 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SupportedVersion struct { + Metadata *SupportedVersionMetadata `json:"metadata,omitempty"` + Version *string `json:"version,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversioncatalogversion.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversioncatalogversion.go new file mode 100644 index 0000000000000..a25fbf59ca003 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversioncatalogversion.go @@ -0,0 +1,10 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SupportedVersionCatalogVersion struct { + Data *SupportedVersionCatalogVersionData `json:"data,omitempty"` + Name *string `json:"name,omitempty"` + Namespace *string `json:"namespace,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversioncatalogversiondata.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversioncatalogversiondata.go new file mode 100644 index 0000000000000..53a8fe553b448 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversioncatalogversiondata.go @@ -0,0 +1,11 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SupportedVersionCatalogVersionData struct { + Audience *string `json:"audience,omitempty"` + Catalog *string `json:"catalog,omitempty"` + Offer *string `json:"offer,omitempty"` + Version *string `json:"version,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversionmetadata.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversionmetadata.go new file mode 100644 index 0000000000000..e6aab72141e95 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_supportedversionmetadata.go @@ -0,0 +1,8 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SupportedVersionMetadata struct { + CatalogVersion *SupportedVersionCatalogVersion `json:"catalogVersion,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_upgradegraph.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_upgradegraph.go new file mode 100644 index 0000000000000..aba238b13ca8d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_upgradegraph.go @@ -0,0 +1,10 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type UpgradeGraph struct { + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Properties *UpgradeGraphProperties `json:"properties,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_upgradegraphproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_upgradegraphproperties.go new file mode 100644 index 0000000000000..ba33a88bc7121 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/model_upgradegraphproperties.go @@ -0,0 +1,9 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type UpgradeGraphProperties struct { + ApplianceVersion *string `json:"applianceVersion,omitempty"` + SupportedVersions *[]SupportedVersion `json:"supportedVersions,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/predicates.go new file mode 100644 index 0000000000000..748f0086d8512 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/predicates.go @@ -0,0 +1,32 @@ +package appliances + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ApplianceOperationPredicate struct { + Id *string + Location *string + Name *string + Type *string +} + +func (p ApplianceOperationPredicate) Matches(input Appliance) bool { + + if p.Id != nil && (input.Id == nil || *p.Id != *input.Id) { + return false + } + + if p.Location != nil && *p.Location != input.Location { + return false + } + + if p.Name != nil && (input.Name == nil || *p.Name != *input.Name) { + return false + } + + if p.Type != nil && (input.Type == nil || *p.Type != *input.Type) { + return false + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/version.go new file mode 100644 index 0000000000000..d8fc28f3da58d --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances/version.go @@ -0,0 +1,12 @@ +package appliances + +import "fmt" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +const defaultApiVersion = "2022-10-27" + +func userAgent() string { + return fmt.Sprintf("hashicorp/go-azure-sdk/appliances/%s", defaultApiVersion) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resources/2020-10-01/deploymentscripts/model_deploymentscript.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resources/2020-10-01/deploymentscripts/model_deploymentscript.go index a69e58901023a..bb259806d611a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resources/2020-10-01/deploymentscripts/model_deploymentscript.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/resources/2020-10-01/deploymentscripts/model_deploymentscript.go @@ -12,7 +12,7 @@ import ( type DeploymentScript interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawDeploymentScriptImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/README.md new file mode 100644 index 0000000000000..369e16f9200b1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/README.md @@ -0,0 +1,123 @@ + +## `github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata` Documentation + +The `assessmentsmetadata` SDK allows for interaction with the Azure Resource Manager Service `security` (API Version `2021-06-01`). + +This readme covers example usages, but further information on [using this SDK can be found in the project root](https://github.com/hashicorp/go-azure-sdk/tree/main/docs). + +### Import Path + +```go +import "github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata" +``` + + +### Client Initialization + +```go +client := assessmentsmetadata.NewAssessmentsMetadataClientWithBaseURI("https://management.azure.com") +client.Client.Authorizer = authorizer +``` + + +### Example Usage: `AssessmentsMetadataClient.CreateInSubscription` + +```go +ctx := context.TODO() +id := assessmentsmetadata.NewProviderAssessmentMetadataID("12345678-1234-9876-4563-123456789012", "assessmentMetadataValue") + +payload := assessmentsmetadata.SecurityAssessmentMetadataResponse{ + // ... +} + + +read, err := client.CreateInSubscription(ctx, id, payload) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AssessmentsMetadataClient.DeleteInSubscription` + +```go +ctx := context.TODO() +id := assessmentsmetadata.NewProviderAssessmentMetadataID("12345678-1234-9876-4563-123456789012", "assessmentMetadataValue") + +read, err := client.DeleteInSubscription(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AssessmentsMetadataClient.Get` + +```go +ctx := context.TODO() +id := assessmentsmetadata.NewAssessmentMetadataID("assessmentMetadataValue") + +read, err := client.Get(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AssessmentsMetadataClient.GetInSubscription` + +```go +ctx := context.TODO() +id := assessmentsmetadata.NewProviderAssessmentMetadataID("12345678-1234-9876-4563-123456789012", "assessmentMetadataValue") + +read, err := client.GetInSubscription(ctx, id) +if err != nil { + // handle the error +} +if model := read.Model; model != nil { + // do something with the model/response object +} +``` + + +### Example Usage: `AssessmentsMetadataClient.List` + +```go +ctx := context.TODO() + + +// alternatively `client.List(ctx)` can be used to do batched pagination +items, err := client.ListComplete(ctx) +if err != nil { + // handle the error +} +for _, item := range items { + // do something +} +``` + + +### Example Usage: `AssessmentsMetadataClient.ListBySubscription` + +```go +ctx := context.TODO() +id := assessmentsmetadata.NewSubscriptionID("12345678-1234-9876-4563-123456789012") + +// alternatively `client.ListBySubscription(ctx, id)` can be used to do batched pagination +items, err := client.ListBySubscriptionComplete(ctx, id) +if err != nil { + // handle the error +} +for _, item := range items { + // do something +} +``` diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/client.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/client.go new file mode 100644 index 0000000000000..c0aadd1558d7f --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/client.go @@ -0,0 +1,18 @@ +package assessmentsmetadata + +import "github.com/Azure/go-autorest/autorest" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type AssessmentsMetadataClient struct { + Client autorest.Client + baseUri string +} + +func NewAssessmentsMetadataClientWithBaseURI(endpoint string) AssessmentsMetadataClient { + return AssessmentsMetadataClient{ + Client: autorest.NewClientWithUserAgent(userAgent()), + baseUri: endpoint, + } +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/constants.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/constants.go new file mode 100644 index 0000000000000..0d20712b3a6b9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/constants.go @@ -0,0 +1,614 @@ +package assessmentsmetadata + +import "strings" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type AssessmentType string + +const ( + AssessmentTypeBuiltIn AssessmentType = "BuiltIn" + AssessmentTypeCustomPolicy AssessmentType = "CustomPolicy" + AssessmentTypeCustomerManaged AssessmentType = "CustomerManaged" + AssessmentTypeVerifiedPartner AssessmentType = "VerifiedPartner" +) + +func PossibleValuesForAssessmentType() []string { + return []string{ + string(AssessmentTypeBuiltIn), + string(AssessmentTypeCustomPolicy), + string(AssessmentTypeCustomerManaged), + string(AssessmentTypeVerifiedPartner), + } +} + +func parseAssessmentType(input string) (*AssessmentType, error) { + vals := map[string]AssessmentType{ + "builtin": AssessmentTypeBuiltIn, + "custompolicy": AssessmentTypeCustomPolicy, + "customermanaged": AssessmentTypeCustomerManaged, + "verifiedpartner": AssessmentTypeVerifiedPartner, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := AssessmentType(input) + return &out, nil +} + +type Categories string + +const ( + CategoriesCompute Categories = "Compute" + CategoriesData Categories = "Data" + CategoriesIdentityAndAccess Categories = "IdentityAndAccess" + CategoriesIoT Categories = "IoT" + CategoriesNetworking Categories = "Networking" +) + +func PossibleValuesForCategories() []string { + return []string{ + string(CategoriesCompute), + string(CategoriesData), + string(CategoriesIdentityAndAccess), + string(CategoriesIoT), + string(CategoriesNetworking), + } +} + +func parseCategories(input string) (*Categories, error) { + vals := map[string]Categories{ + "compute": CategoriesCompute, + "data": CategoriesData, + "identityandaccess": CategoriesIdentityAndAccess, + "iot": CategoriesIoT, + "networking": CategoriesNetworking, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Categories(input) + return &out, nil +} + +type ImplementationEffort string + +const ( + ImplementationEffortHigh ImplementationEffort = "High" + ImplementationEffortLow ImplementationEffort = "Low" + ImplementationEffortModerate ImplementationEffort = "Moderate" +) + +func PossibleValuesForImplementationEffort() []string { + return []string{ + string(ImplementationEffortHigh), + string(ImplementationEffortLow), + string(ImplementationEffortModerate), + } +} + +func parseImplementationEffort(input string) (*ImplementationEffort, error) { + vals := map[string]ImplementationEffort{ + "high": ImplementationEffortHigh, + "low": ImplementationEffortLow, + "moderate": ImplementationEffortModerate, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := ImplementationEffort(input) + return &out, nil +} + +type Severity string + +const ( + SeverityHigh Severity = "High" + SeverityLow Severity = "Low" + SeverityMedium Severity = "Medium" +) + +func PossibleValuesForSeverity() []string { + return []string{ + string(SeverityHigh), + string(SeverityLow), + string(SeverityMedium), + } +} + +func parseSeverity(input string) (*Severity, error) { + vals := map[string]Severity{ + "high": SeverityHigh, + "low": SeverityLow, + "medium": SeverityMedium, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Severity(input) + return &out, nil +} + +type Tactics string + +const ( + TacticsCollection Tactics = "Collection" + TacticsCommandAndControl Tactics = "Command and Control" + TacticsCredentialAccess Tactics = "Credential Access" + TacticsDefenseEvasion Tactics = "Defense Evasion" + TacticsDiscovery Tactics = "Discovery" + TacticsExecution Tactics = "Execution" + TacticsExfiltration Tactics = "Exfiltration" + TacticsImpact Tactics = "Impact" + TacticsInitialAccess Tactics = "Initial Access" + TacticsLateralMovement Tactics = "Lateral Movement" + TacticsPersistence Tactics = "Persistence" + TacticsPrivilegeEscalation Tactics = "Privilege Escalation" + TacticsReconnaissance Tactics = "Reconnaissance" + TacticsResourceDevelopment Tactics = "Resource Development" +) + +func PossibleValuesForTactics() []string { + return []string{ + string(TacticsCollection), + string(TacticsCommandAndControl), + string(TacticsCredentialAccess), + string(TacticsDefenseEvasion), + string(TacticsDiscovery), + string(TacticsExecution), + string(TacticsExfiltration), + string(TacticsImpact), + string(TacticsInitialAccess), + string(TacticsLateralMovement), + string(TacticsPersistence), + string(TacticsPrivilegeEscalation), + string(TacticsReconnaissance), + string(TacticsResourceDevelopment), + } +} + +func parseTactics(input string) (*Tactics, error) { + vals := map[string]Tactics{ + "collection": TacticsCollection, + "command and control": TacticsCommandAndControl, + "credential access": TacticsCredentialAccess, + "defense evasion": TacticsDefenseEvasion, + "discovery": TacticsDiscovery, + "execution": TacticsExecution, + "exfiltration": TacticsExfiltration, + "impact": TacticsImpact, + "initial access": TacticsInitialAccess, + "lateral movement": TacticsLateralMovement, + "persistence": TacticsPersistence, + "privilege escalation": TacticsPrivilegeEscalation, + "reconnaissance": TacticsReconnaissance, + "resource development": TacticsResourceDevelopment, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Tactics(input) + return &out, nil +} + +type Techniques string + +const ( + TechniquesAbuseElevationControlMechanism Techniques = "Abuse Elevation Control Mechanism" + TechniquesAccessTokenManipulation Techniques = "Access Token Manipulation" + TechniquesAccountDiscovery Techniques = "Account Discovery" + TechniquesAccountManipulation Techniques = "Account Manipulation" + TechniquesActiveScanning Techniques = "Active Scanning" + TechniquesApplicationLayerProtocol Techniques = "Application Layer Protocol" + TechniquesAudioCapture Techniques = "Audio Capture" + TechniquesBootOrLogonAutostartExecution Techniques = "Boot or Logon Autostart Execution" + TechniquesBootOrLogonInitializationScripts Techniques = "Boot or Logon Initialization Scripts" + TechniquesBruteForce Techniques = "Brute Force" + TechniquesCloudInfrastructureDiscovery Techniques = "Cloud Infrastructure Discovery" + TechniquesCloudServiceDashboard Techniques = "Cloud Service Dashboard" + TechniquesCloudServiceDiscovery Techniques = "Cloud Service Discovery" + TechniquesCommandAndScriptingInterpreter Techniques = "Command and Scripting Interpreter" + TechniquesCompromiseClientSoftwareBinary Techniques = "Compromise Client Software Binary" + TechniquesCompromiseInfrastructure Techniques = "Compromise Infrastructure" + TechniquesContainerAndResourceDiscovery Techniques = "Container and Resource Discovery" + TechniquesCreateAccount Techniques = "Create Account" + TechniquesCreateOrModifySystemProcess Techniques = "Create or Modify System Process" + TechniquesCredentialsFromPasswordStores Techniques = "Credentials from Password Stores" + TechniquesDataDestruction Techniques = "Data Destruction" + TechniquesDataEncryptedForImpact Techniques = "Data Encrypted for Impact" + TechniquesDataFromCloudStorageObject Techniques = "Data from Cloud Storage Object" + TechniquesDataFromConfigurationRepository Techniques = "Data from Configuration Repository" + TechniquesDataFromInformationRepositories Techniques = "Data from Information Repositories" + TechniquesDataFromLocalSystem Techniques = "Data from Local System" + TechniquesDataManipulation Techniques = "Data Manipulation" + TechniquesDataStaged Techniques = "Data Staged" + TechniquesDefacement Techniques = "Defacement" + TechniquesDeobfuscateDecodeFilesOrInformation Techniques = "Deobfuscate/Decode Files or Information" + TechniquesDiskWipe Techniques = "Disk Wipe" + TechniquesDomainTrustDiscovery Techniques = "Domain Trust Discovery" + TechniquesDriveNegativebyCompromise Techniques = "Drive-by Compromise" + TechniquesDynamicResolution Techniques = "Dynamic Resolution" + TechniquesEndpointDenialOfService Techniques = "Endpoint Denial of Service" + TechniquesEventTriggeredExecution Techniques = "Event Triggered Execution" + TechniquesExfiltrationOverAlternativeProtocol Techniques = "Exfiltration Over Alternative Protocol" + TechniquesExploitPublicNegativeFacingApplication Techniques = "Exploit Public-Facing Application" + TechniquesExploitationForClientExecution Techniques = "Exploitation for Client Execution" + TechniquesExploitationForCredentialAccess Techniques = "Exploitation for Credential Access" + TechniquesExploitationForDefenseEvasion Techniques = "Exploitation for Defense Evasion" + TechniquesExploitationForPrivilegeEscalation Techniques = "Exploitation for Privilege Escalation" + TechniquesExploitationOfRemoteServices Techniques = "Exploitation of Remote Services" + TechniquesExternalRemoteServices Techniques = "External Remote Services" + TechniquesFallbackChannels Techniques = "Fallback Channels" + TechniquesFileAndDirectoryDiscovery Techniques = "File and Directory Discovery" + TechniquesFileAndDirectoryPermissionsModification Techniques = "File and Directory Permissions Modification" + TechniquesGatherVictimNetworkInformation Techniques = "Gather Victim Network Information" + TechniquesHideArtifacts Techniques = "Hide Artifacts" + TechniquesHijackExecutionFlow Techniques = "Hijack Execution Flow" + TechniquesImpairDefenses Techniques = "Impair Defenses" + TechniquesImplantContainerImage Techniques = "Implant Container Image" + TechniquesIndicatorRemovalOnHost Techniques = "Indicator Removal on Host" + TechniquesIndirectCommandExecution Techniques = "Indirect Command Execution" + TechniquesIngressToolTransfer Techniques = "Ingress Tool Transfer" + TechniquesInputCapture Techniques = "Input Capture" + TechniquesInterNegativeProcessCommunication Techniques = "Inter-Process Communication" + TechniquesLateralToolTransfer Techniques = "Lateral Tool Transfer" + TechniquesManNegativeinNegativetheNegativeMiddle Techniques = "Man-in-the-Middle" + TechniquesMasquerading Techniques = "Masquerading" + TechniquesModifyAuthenticationProcess Techniques = "Modify Authentication Process" + TechniquesModifyRegistry Techniques = "Modify Registry" + TechniquesNetworkDenialOfService Techniques = "Network Denial of Service" + TechniquesNetworkServiceScanning Techniques = "Network Service Scanning" + TechniquesNetworkSniffing Techniques = "Network Sniffing" + TechniquesNonNegativeApplicationLayerProtocol Techniques = "Non-Application Layer Protocol" + TechniquesNonNegativeStandardPort Techniques = "Non-Standard Port" + TechniquesOSCredentialDumping Techniques = "OS Credential Dumping" + TechniquesObfuscatedFilesOrInformation Techniques = "Obfuscated Files or Information" + TechniquesObtainCapabilities Techniques = "Obtain Capabilities" + TechniquesOfficeApplicationStartup Techniques = "Office Application Startup" + TechniquesPermissionGroupsDiscovery Techniques = "Permission Groups Discovery" + TechniquesPhishing Techniques = "Phishing" + TechniquesPreNegativeOSBoot Techniques = "Pre-OS Boot" + TechniquesProcessDiscovery Techniques = "Process Discovery" + TechniquesProcessInjection Techniques = "Process Injection" + TechniquesProtocolTunneling Techniques = "Protocol Tunneling" + TechniquesProxy Techniques = "Proxy" + TechniquesQueryRegistry Techniques = "Query Registry" + TechniquesRemoteAccessSoftware Techniques = "Remote Access Software" + TechniquesRemoteServiceSessionHijacking Techniques = "Remote Service Session Hijacking" + TechniquesRemoteServices Techniques = "Remote Services" + TechniquesRemoteSystemDiscovery Techniques = "Remote System Discovery" + TechniquesResourceHijacking Techniques = "Resource Hijacking" + TechniquesSQLStoredProcedures Techniques = "SQL Stored Procedures" + TechniquesScheduledTaskJob Techniques = "Scheduled Task/Job" + TechniquesScreenCapture Techniques = "Screen Capture" + TechniquesSearchVictimNegativeOwnedWebsites Techniques = "Search Victim-Owned Websites" + TechniquesServerSoftwareComponent Techniques = "Server Software Component" + TechniquesServiceStop Techniques = "Service Stop" + TechniquesSignedBinaryProxyExecution Techniques = "Signed Binary Proxy Execution" + TechniquesSoftwareDeploymentTools Techniques = "Software Deployment Tools" + TechniquesStealOrForgeKerberosTickets Techniques = "Steal or Forge Kerberos Tickets" + TechniquesSubvertTrustControls Techniques = "Subvert Trust Controls" + TechniquesSupplyChainCompromise Techniques = "Supply Chain Compromise" + TechniquesSystemInformationDiscovery Techniques = "System Information Discovery" + TechniquesTaintSharedContent Techniques = "Taint Shared Content" + TechniquesTrafficSignaling Techniques = "Traffic Signaling" + TechniquesTransferDataToCloudAccount Techniques = "Transfer Data to Cloud Account" + TechniquesTrustedRelationship Techniques = "Trusted Relationship" + TechniquesUnsecuredCredentials Techniques = "Unsecured Credentials" + TechniquesUserExecution Techniques = "User Execution" + TechniquesValidAccounts Techniques = "Valid Accounts" + TechniquesWindowsManagementInstrumentation Techniques = "Windows Management Instrumentation" +) + +func PossibleValuesForTechniques() []string { + return []string{ + string(TechniquesAbuseElevationControlMechanism), + string(TechniquesAccessTokenManipulation), + string(TechniquesAccountDiscovery), + string(TechniquesAccountManipulation), + string(TechniquesActiveScanning), + string(TechniquesApplicationLayerProtocol), + string(TechniquesAudioCapture), + string(TechniquesBootOrLogonAutostartExecution), + string(TechniquesBootOrLogonInitializationScripts), + string(TechniquesBruteForce), + string(TechniquesCloudInfrastructureDiscovery), + string(TechniquesCloudServiceDashboard), + string(TechniquesCloudServiceDiscovery), + string(TechniquesCommandAndScriptingInterpreter), + string(TechniquesCompromiseClientSoftwareBinary), + string(TechniquesCompromiseInfrastructure), + string(TechniquesContainerAndResourceDiscovery), + string(TechniquesCreateAccount), + string(TechniquesCreateOrModifySystemProcess), + string(TechniquesCredentialsFromPasswordStores), + string(TechniquesDataDestruction), + string(TechniquesDataEncryptedForImpact), + string(TechniquesDataFromCloudStorageObject), + string(TechniquesDataFromConfigurationRepository), + string(TechniquesDataFromInformationRepositories), + string(TechniquesDataFromLocalSystem), + string(TechniquesDataManipulation), + string(TechniquesDataStaged), + string(TechniquesDefacement), + string(TechniquesDeobfuscateDecodeFilesOrInformation), + string(TechniquesDiskWipe), + string(TechniquesDomainTrustDiscovery), + string(TechniquesDriveNegativebyCompromise), + string(TechniquesDynamicResolution), + string(TechniquesEndpointDenialOfService), + string(TechniquesEventTriggeredExecution), + string(TechniquesExfiltrationOverAlternativeProtocol), + string(TechniquesExploitPublicNegativeFacingApplication), + string(TechniquesExploitationForClientExecution), + string(TechniquesExploitationForCredentialAccess), + string(TechniquesExploitationForDefenseEvasion), + string(TechniquesExploitationForPrivilegeEscalation), + string(TechniquesExploitationOfRemoteServices), + string(TechniquesExternalRemoteServices), + string(TechniquesFallbackChannels), + string(TechniquesFileAndDirectoryDiscovery), + string(TechniquesFileAndDirectoryPermissionsModification), + string(TechniquesGatherVictimNetworkInformation), + string(TechniquesHideArtifacts), + string(TechniquesHijackExecutionFlow), + string(TechniquesImpairDefenses), + string(TechniquesImplantContainerImage), + string(TechniquesIndicatorRemovalOnHost), + string(TechniquesIndirectCommandExecution), + string(TechniquesIngressToolTransfer), + string(TechniquesInputCapture), + string(TechniquesInterNegativeProcessCommunication), + string(TechniquesLateralToolTransfer), + string(TechniquesManNegativeinNegativetheNegativeMiddle), + string(TechniquesMasquerading), + string(TechniquesModifyAuthenticationProcess), + string(TechniquesModifyRegistry), + string(TechniquesNetworkDenialOfService), + string(TechniquesNetworkServiceScanning), + string(TechniquesNetworkSniffing), + string(TechniquesNonNegativeApplicationLayerProtocol), + string(TechniquesNonNegativeStandardPort), + string(TechniquesOSCredentialDumping), + string(TechniquesObfuscatedFilesOrInformation), + string(TechniquesObtainCapabilities), + string(TechniquesOfficeApplicationStartup), + string(TechniquesPermissionGroupsDiscovery), + string(TechniquesPhishing), + string(TechniquesPreNegativeOSBoot), + string(TechniquesProcessDiscovery), + string(TechniquesProcessInjection), + string(TechniquesProtocolTunneling), + string(TechniquesProxy), + string(TechniquesQueryRegistry), + string(TechniquesRemoteAccessSoftware), + string(TechniquesRemoteServiceSessionHijacking), + string(TechniquesRemoteServices), + string(TechniquesRemoteSystemDiscovery), + string(TechniquesResourceHijacking), + string(TechniquesSQLStoredProcedures), + string(TechniquesScheduledTaskJob), + string(TechniquesScreenCapture), + string(TechniquesSearchVictimNegativeOwnedWebsites), + string(TechniquesServerSoftwareComponent), + string(TechniquesServiceStop), + string(TechniquesSignedBinaryProxyExecution), + string(TechniquesSoftwareDeploymentTools), + string(TechniquesStealOrForgeKerberosTickets), + string(TechniquesSubvertTrustControls), + string(TechniquesSupplyChainCompromise), + string(TechniquesSystemInformationDiscovery), + string(TechniquesTaintSharedContent), + string(TechniquesTrafficSignaling), + string(TechniquesTransferDataToCloudAccount), + string(TechniquesTrustedRelationship), + string(TechniquesUnsecuredCredentials), + string(TechniquesUserExecution), + string(TechniquesValidAccounts), + string(TechniquesWindowsManagementInstrumentation), + } +} + +func parseTechniques(input string) (*Techniques, error) { + vals := map[string]Techniques{ + "abuse elevation control mechanism": TechniquesAbuseElevationControlMechanism, + "access token manipulation": TechniquesAccessTokenManipulation, + "account discovery": TechniquesAccountDiscovery, + "account manipulation": TechniquesAccountManipulation, + "active scanning": TechniquesActiveScanning, + "application layer protocol": TechniquesApplicationLayerProtocol, + "audio capture": TechniquesAudioCapture, + "boot or logon autostart execution": TechniquesBootOrLogonAutostartExecution, + "boot or logon initialization scripts": TechniquesBootOrLogonInitializationScripts, + "brute force": TechniquesBruteForce, + "cloud infrastructure discovery": TechniquesCloudInfrastructureDiscovery, + "cloud service dashboard": TechniquesCloudServiceDashboard, + "cloud service discovery": TechniquesCloudServiceDiscovery, + "command and scripting interpreter": TechniquesCommandAndScriptingInterpreter, + "compromise client software binary": TechniquesCompromiseClientSoftwareBinary, + "compromise infrastructure": TechniquesCompromiseInfrastructure, + "container and resource discovery": TechniquesContainerAndResourceDiscovery, + "create account": TechniquesCreateAccount, + "create or modify system process": TechniquesCreateOrModifySystemProcess, + "credentials from password stores": TechniquesCredentialsFromPasswordStores, + "data destruction": TechniquesDataDestruction, + "data encrypted for impact": TechniquesDataEncryptedForImpact, + "data from cloud storage object": TechniquesDataFromCloudStorageObject, + "data from configuration repository": TechniquesDataFromConfigurationRepository, + "data from information repositories": TechniquesDataFromInformationRepositories, + "data from local system": TechniquesDataFromLocalSystem, + "data manipulation": TechniquesDataManipulation, + "data staged": TechniquesDataStaged, + "defacement": TechniquesDefacement, + "deobfuscate/decode files or information": TechniquesDeobfuscateDecodeFilesOrInformation, + "disk wipe": TechniquesDiskWipe, + "domain trust discovery": TechniquesDomainTrustDiscovery, + "drive-by compromise": TechniquesDriveNegativebyCompromise, + "dynamic resolution": TechniquesDynamicResolution, + "endpoint denial of service": TechniquesEndpointDenialOfService, + "event triggered execution": TechniquesEventTriggeredExecution, + "exfiltration over alternative protocol": TechniquesExfiltrationOverAlternativeProtocol, + "exploit public-facing application": TechniquesExploitPublicNegativeFacingApplication, + "exploitation for client execution": TechniquesExploitationForClientExecution, + "exploitation for credential access": TechniquesExploitationForCredentialAccess, + "exploitation for defense evasion": TechniquesExploitationForDefenseEvasion, + "exploitation for privilege escalation": TechniquesExploitationForPrivilegeEscalation, + "exploitation of remote services": TechniquesExploitationOfRemoteServices, + "external remote services": TechniquesExternalRemoteServices, + "fallback channels": TechniquesFallbackChannels, + "file and directory discovery": TechniquesFileAndDirectoryDiscovery, + "file and directory permissions modification": TechniquesFileAndDirectoryPermissionsModification, + "gather victim network information": TechniquesGatherVictimNetworkInformation, + "hide artifacts": TechniquesHideArtifacts, + "hijack execution flow": TechniquesHijackExecutionFlow, + "impair defenses": TechniquesImpairDefenses, + "implant container image": TechniquesImplantContainerImage, + "indicator removal on host": TechniquesIndicatorRemovalOnHost, + "indirect command execution": TechniquesIndirectCommandExecution, + "ingress tool transfer": TechniquesIngressToolTransfer, + "input capture": TechniquesInputCapture, + "inter-process communication": TechniquesInterNegativeProcessCommunication, + "lateral tool transfer": TechniquesLateralToolTransfer, + "man-in-the-middle": TechniquesManNegativeinNegativetheNegativeMiddle, + "masquerading": TechniquesMasquerading, + "modify authentication process": TechniquesModifyAuthenticationProcess, + "modify registry": TechniquesModifyRegistry, + "network denial of service": TechniquesNetworkDenialOfService, + "network service scanning": TechniquesNetworkServiceScanning, + "network sniffing": TechniquesNetworkSniffing, + "non-application layer protocol": TechniquesNonNegativeApplicationLayerProtocol, + "non-standard port": TechniquesNonNegativeStandardPort, + "os credential dumping": TechniquesOSCredentialDumping, + "obfuscated files or information": TechniquesObfuscatedFilesOrInformation, + "obtain capabilities": TechniquesObtainCapabilities, + "office application startup": TechniquesOfficeApplicationStartup, + "permission groups discovery": TechniquesPermissionGroupsDiscovery, + "phishing": TechniquesPhishing, + "pre-os boot": TechniquesPreNegativeOSBoot, + "process discovery": TechniquesProcessDiscovery, + "process injection": TechniquesProcessInjection, + "protocol tunneling": TechniquesProtocolTunneling, + "proxy": TechniquesProxy, + "query registry": TechniquesQueryRegistry, + "remote access software": TechniquesRemoteAccessSoftware, + "remote service session hijacking": TechniquesRemoteServiceSessionHijacking, + "remote services": TechniquesRemoteServices, + "remote system discovery": TechniquesRemoteSystemDiscovery, + "resource hijacking": TechniquesResourceHijacking, + "sql stored procedures": TechniquesSQLStoredProcedures, + "scheduled task/job": TechniquesScheduledTaskJob, + "screen capture": TechniquesScreenCapture, + "search victim-owned websites": TechniquesSearchVictimNegativeOwnedWebsites, + "server software component": TechniquesServerSoftwareComponent, + "service stop": TechniquesServiceStop, + "signed binary proxy execution": TechniquesSignedBinaryProxyExecution, + "software deployment tools": TechniquesSoftwareDeploymentTools, + "steal or forge kerberos tickets": TechniquesStealOrForgeKerberosTickets, + "subvert trust controls": TechniquesSubvertTrustControls, + "supply chain compromise": TechniquesSupplyChainCompromise, + "system information discovery": TechniquesSystemInformationDiscovery, + "taint shared content": TechniquesTaintSharedContent, + "traffic signaling": TechniquesTrafficSignaling, + "transfer data to cloud account": TechniquesTransferDataToCloudAccount, + "trusted relationship": TechniquesTrustedRelationship, + "unsecured credentials": TechniquesUnsecuredCredentials, + "user execution": TechniquesUserExecution, + "valid accounts": TechniquesValidAccounts, + "windows management instrumentation": TechniquesWindowsManagementInstrumentation, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Techniques(input) + return &out, nil +} + +type Threats string + +const ( + ThreatsAccountBreach Threats = "accountBreach" + ThreatsDataExfiltration Threats = "dataExfiltration" + ThreatsDataSpillage Threats = "dataSpillage" + ThreatsDenialOfService Threats = "denialOfService" + ThreatsElevationOfPrivilege Threats = "elevationOfPrivilege" + ThreatsMaliciousInsider Threats = "maliciousInsider" + ThreatsMissingCoverage Threats = "missingCoverage" + ThreatsThreatResistance Threats = "threatResistance" +) + +func PossibleValuesForThreats() []string { + return []string{ + string(ThreatsAccountBreach), + string(ThreatsDataExfiltration), + string(ThreatsDataSpillage), + string(ThreatsDenialOfService), + string(ThreatsElevationOfPrivilege), + string(ThreatsMaliciousInsider), + string(ThreatsMissingCoverage), + string(ThreatsThreatResistance), + } +} + +func parseThreats(input string) (*Threats, error) { + vals := map[string]Threats{ + "accountbreach": ThreatsAccountBreach, + "dataexfiltration": ThreatsDataExfiltration, + "dataspillage": ThreatsDataSpillage, + "denialofservice": ThreatsDenialOfService, + "elevationofprivilege": ThreatsElevationOfPrivilege, + "maliciousinsider": ThreatsMaliciousInsider, + "missingcoverage": ThreatsMissingCoverage, + "threatresistance": ThreatsThreatResistance, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := Threats(input) + return &out, nil +} + +type UserImpact string + +const ( + UserImpactHigh UserImpact = "High" + UserImpactLow UserImpact = "Low" + UserImpactModerate UserImpact = "Moderate" +) + +func PossibleValuesForUserImpact() []string { + return []string{ + string(UserImpactHigh), + string(UserImpactLow), + string(UserImpactModerate), + } +} + +func parseUserImpact(input string) (*UserImpact, error) { + vals := map[string]UserImpact{ + "high": UserImpactHigh, + "low": UserImpactLow, + "moderate": UserImpactModerate, + } + if v, ok := vals[strings.ToLower(input)]; ok { + return &v, nil + } + + // otherwise presume it's an undefined value and best-effort it + out := UserImpact(input) + return &out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/id_assessmentmetadata.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/id_assessmentmetadata.go new file mode 100644 index 0000000000000..b5fa77a50d3b4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/id_assessmentmetadata.go @@ -0,0 +1,101 @@ +package assessmentsmetadata + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = AssessmentMetadataId{} + +// AssessmentMetadataId is a struct representing the Resource ID for a Assessment Metadata +type AssessmentMetadataId struct { + AssessmentMetadataName string +} + +// NewAssessmentMetadataID returns a new AssessmentMetadataId struct +func NewAssessmentMetadataID(assessmentMetadataName string) AssessmentMetadataId { + return AssessmentMetadataId{ + AssessmentMetadataName: assessmentMetadataName, + } +} + +// ParseAssessmentMetadataID parses 'input' into a AssessmentMetadataId +func ParseAssessmentMetadataID(input string) (*AssessmentMetadataId, error) { + parser := resourceids.NewParserFromResourceIdType(AssessmentMetadataId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := AssessmentMetadataId{} + + if id.AssessmentMetadataName, ok = parsed.Parsed["assessmentMetadataName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "assessmentMetadataName", *parsed) + } + + return &id, nil +} + +// ParseAssessmentMetadataIDInsensitively parses 'input' case-insensitively into a AssessmentMetadataId +// note: this method should only be used for API response data and not user input +func ParseAssessmentMetadataIDInsensitively(input string) (*AssessmentMetadataId, error) { + parser := resourceids.NewParserFromResourceIdType(AssessmentMetadataId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := AssessmentMetadataId{} + + if id.AssessmentMetadataName, ok = parsed.Parsed["assessmentMetadataName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "assessmentMetadataName", *parsed) + } + + return &id, nil +} + +// ValidateAssessmentMetadataID checks that 'input' can be parsed as a Assessment Metadata ID +func ValidateAssessmentMetadataID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseAssessmentMetadataID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Assessment Metadata ID +func (id AssessmentMetadataId) ID() string { + fmtString := "/providers/Microsoft.Security/assessmentMetadata/%s" + return fmt.Sprintf(fmtString, id.AssessmentMetadataName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Assessment Metadata ID +func (id AssessmentMetadataId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftSecurity", "Microsoft.Security", "Microsoft.Security"), + resourceids.StaticSegment("staticAssessmentMetadata", "assessmentMetadata", "assessmentMetadata"), + resourceids.UserSpecifiedSegment("assessmentMetadataName", "assessmentMetadataValue"), + } +} + +// String returns a human-readable description of this Assessment Metadata ID +func (id AssessmentMetadataId) String() string { + components := []string{ + fmt.Sprintf("Assessment Metadata Name: %q", id.AssessmentMetadataName), + } + return fmt.Sprintf("Assessment Metadata (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/id_providerassessmentmetadata.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/id_providerassessmentmetadata.go new file mode 100644 index 0000000000000..e0957f9874e5a --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/id_providerassessmentmetadata.go @@ -0,0 +1,114 @@ +package assessmentsmetadata + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +var _ resourceids.ResourceId = ProviderAssessmentMetadataId{} + +// ProviderAssessmentMetadataId is a struct representing the Resource ID for a Provider Assessment Metadata +type ProviderAssessmentMetadataId struct { + SubscriptionId string + AssessmentMetadataName string +} + +// NewProviderAssessmentMetadataID returns a new ProviderAssessmentMetadataId struct +func NewProviderAssessmentMetadataID(subscriptionId string, assessmentMetadataName string) ProviderAssessmentMetadataId { + return ProviderAssessmentMetadataId{ + SubscriptionId: subscriptionId, + AssessmentMetadataName: assessmentMetadataName, + } +} + +// ParseProviderAssessmentMetadataID parses 'input' into a ProviderAssessmentMetadataId +func ParseProviderAssessmentMetadataID(input string) (*ProviderAssessmentMetadataId, error) { + parser := resourceids.NewParserFromResourceIdType(ProviderAssessmentMetadataId{}) + parsed, err := parser.Parse(input, false) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ProviderAssessmentMetadataId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.AssessmentMetadataName, ok = parsed.Parsed["assessmentMetadataName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "assessmentMetadataName", *parsed) + } + + return &id, nil +} + +// ParseProviderAssessmentMetadataIDInsensitively parses 'input' case-insensitively into a ProviderAssessmentMetadataId +// note: this method should only be used for API response data and not user input +func ParseProviderAssessmentMetadataIDInsensitively(input string) (*ProviderAssessmentMetadataId, error) { + parser := resourceids.NewParserFromResourceIdType(ProviderAssessmentMetadataId{}) + parsed, err := parser.Parse(input, true) + if err != nil { + return nil, fmt.Errorf("parsing %q: %+v", input, err) + } + + var ok bool + id := ProviderAssessmentMetadataId{} + + if id.SubscriptionId, ok = parsed.Parsed["subscriptionId"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "subscriptionId", *parsed) + } + + if id.AssessmentMetadataName, ok = parsed.Parsed["assessmentMetadataName"]; !ok { + return nil, resourceids.NewSegmentNotSpecifiedError(id, "assessmentMetadataName", *parsed) + } + + return &id, nil +} + +// ValidateProviderAssessmentMetadataID checks that 'input' can be parsed as a Provider Assessment Metadata ID +func ValidateProviderAssessmentMetadataID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := ParseProviderAssessmentMetadataID(v); err != nil { + errors = append(errors, err) + } + + return +} + +// ID returns the formatted Provider Assessment Metadata ID +func (id ProviderAssessmentMetadataId) ID() string { + fmtString := "/subscriptions/%s/providers/Microsoft.Security/assessmentMetadata/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.AssessmentMetadataName) +} + +// Segments returns a slice of Resource ID Segments which comprise this Provider Assessment Metadata ID +func (id ProviderAssessmentMetadataId) Segments() []resourceids.Segment { + return []resourceids.Segment{ + resourceids.StaticSegment("staticSubscriptions", "subscriptions", "subscriptions"), + resourceids.SubscriptionIdSegment("subscriptionId", "12345678-1234-9876-4563-123456789012"), + resourceids.StaticSegment("staticProviders", "providers", "providers"), + resourceids.ResourceProviderSegment("staticMicrosoftSecurity", "Microsoft.Security", "Microsoft.Security"), + resourceids.StaticSegment("staticAssessmentMetadata", "assessmentMetadata", "assessmentMetadata"), + resourceids.UserSpecifiedSegment("assessmentMetadataName", "assessmentMetadataValue"), + } +} + +// String returns a human-readable description of this Provider Assessment Metadata ID +func (id ProviderAssessmentMetadataId) String() string { + components := []string{ + fmt.Sprintf("Subscription: %q", id.SubscriptionId), + fmt.Sprintf("Assessment Metadata Name: %q", id.AssessmentMetadataName), + } + return fmt.Sprintf("Provider Assessment Metadata (%s)", strings.Join(components, "\n")) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_createinsubscription_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_createinsubscription_autorest.go new file mode 100644 index 0000000000000..35ddfe1552a6c --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_createinsubscription_autorest.go @@ -0,0 +1,69 @@ +package assessmentsmetadata + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type CreateInSubscriptionOperationResponse struct { + HttpResponse *http.Response + Model *SecurityAssessmentMetadataResponse +} + +// CreateInSubscription ... +func (c AssessmentsMetadataClient) CreateInSubscription(ctx context.Context, id ProviderAssessmentMetadataId, input SecurityAssessmentMetadataResponse) (result CreateInSubscriptionOperationResponse, err error) { + req, err := c.preparerForCreateInSubscription(ctx, id, input) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "CreateInSubscription", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "CreateInSubscription", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForCreateInSubscription(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "CreateInSubscription", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForCreateInSubscription prepares the CreateInSubscription request. +func (c AssessmentsMetadataClient) preparerForCreateInSubscription(ctx context.Context, id ProviderAssessmentMetadataId, input SecurityAssessmentMetadataResponse) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(id.ID()), + autorest.WithJSON(input), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForCreateInSubscription handles the response to the CreateInSubscription request. The method always +// closes the http.Response Body. +func (c AssessmentsMetadataClient) responderForCreateInSubscription(resp *http.Response) (result CreateInSubscriptionOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Model), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_deleteinsubscription_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_deleteinsubscription_autorest.go new file mode 100644 index 0000000000000..69002c88c88c7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_deleteinsubscription_autorest.go @@ -0,0 +1,66 @@ +package assessmentsmetadata + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type DeleteInSubscriptionOperationResponse struct { + HttpResponse *http.Response +} + +// DeleteInSubscription ... +func (c AssessmentsMetadataClient) DeleteInSubscription(ctx context.Context, id ProviderAssessmentMetadataId) (result DeleteInSubscriptionOperationResponse, err error) { + req, err := c.preparerForDeleteInSubscription(ctx, id) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "DeleteInSubscription", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "DeleteInSubscription", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForDeleteInSubscription(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "DeleteInSubscription", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForDeleteInSubscription prepares the DeleteInSubscription request. +func (c AssessmentsMetadataClient) preparerForDeleteInSubscription(ctx context.Context, id ProviderAssessmentMetadataId) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsDelete(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(id.ID()), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForDeleteInSubscription handles the response to the DeleteInSubscription request. The method always +// closes the http.Response Body. +func (c AssessmentsMetadataClient) responderForDeleteInSubscription(resp *http.Response) (result DeleteInSubscriptionOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_get_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_get_autorest.go new file mode 100644 index 0000000000000..2f76335c03591 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_get_autorest.go @@ -0,0 +1,68 @@ +package assessmentsmetadata + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetOperationResponse struct { + HttpResponse *http.Response + Model *SecurityAssessmentMetadataResponse +} + +// Get ... +func (c AssessmentsMetadataClient) Get(ctx context.Context, id AssessmentMetadataId) (result GetOperationResponse, err error) { + req, err := c.preparerForGet(ctx, id) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "Get", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "Get", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForGet(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "Get", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForGet prepares the Get request. +func (c AssessmentsMetadataClient) preparerForGet(ctx context.Context, id AssessmentMetadataId) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(id.ID()), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForGet handles the response to the Get request. The method always +// closes the http.Response Body. +func (c AssessmentsMetadataClient) responderForGet(resp *http.Response) (result GetOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Model), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_getinsubscription_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_getinsubscription_autorest.go new file mode 100644 index 0000000000000..483a5b5dc7ce0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_getinsubscription_autorest.go @@ -0,0 +1,68 @@ +package assessmentsmetadata + +import ( + "context" + "net/http" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type GetInSubscriptionOperationResponse struct { + HttpResponse *http.Response + Model *SecurityAssessmentMetadataResponse +} + +// GetInSubscription ... +func (c AssessmentsMetadataClient) GetInSubscription(ctx context.Context, id ProviderAssessmentMetadataId) (result GetInSubscriptionOperationResponse, err error) { + req, err := c.preparerForGetInSubscription(ctx, id) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "GetInSubscription", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "GetInSubscription", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForGetInSubscription(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "GetInSubscription", result.HttpResponse, "Failure responding to request") + return + } + + return +} + +// preparerForGetInSubscription prepares the GetInSubscription request. +func (c AssessmentsMetadataClient) preparerForGetInSubscription(ctx context.Context, id ProviderAssessmentMetadataId) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(id.ID()), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForGetInSubscription handles the response to the GetInSubscription request. The method always +// closes the http.Response Body. +func (c AssessmentsMetadataClient) responderForGetInSubscription(resp *http.Response) (result GetInSubscriptionOperationResponse, err error) { + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result.Model), + autorest.ByClosing()) + result.HttpResponse = resp + + return +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_list_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_list_autorest.go new file mode 100644 index 0000000000000..18733ef85c902 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_list_autorest.go @@ -0,0 +1,186 @@ +package assessmentsmetadata + +import ( + "context" + "fmt" + "net/http" + "net/url" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListOperationResponse struct { + HttpResponse *http.Response + Model *[]SecurityAssessmentMetadataResponse + + nextLink *string + nextPageFunc func(ctx context.Context, nextLink string) (ListOperationResponse, error) +} + +type ListCompleteResult struct { + Items []SecurityAssessmentMetadataResponse +} + +func (r ListOperationResponse) HasMore() bool { + return r.nextLink != nil +} + +func (r ListOperationResponse) LoadMore(ctx context.Context) (resp ListOperationResponse, err error) { + if !r.HasMore() { + err = fmt.Errorf("no more pages returned") + return + } + return r.nextPageFunc(ctx, *r.nextLink) +} + +// List ... +func (c AssessmentsMetadataClient) List(ctx context.Context) (resp ListOperationResponse, err error) { + req, err := c.preparerForList(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "List", nil, "Failure preparing request") + return + } + + resp.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "List", resp.HttpResponse, "Failure sending request") + return + } + + resp, err = c.responderForList(resp.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "List", resp.HttpResponse, "Failure responding to request") + return + } + return +} + +// preparerForList prepares the List request. +func (c AssessmentsMetadataClient) preparerForList(ctx context.Context) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath("/providers/Microsoft.Security/assessmentMetadata"), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// preparerForListWithNextLink prepares the List request with the given nextLink token. +func (c AssessmentsMetadataClient) preparerForListWithNextLink(ctx context.Context, nextLink string) (*http.Request, error) { + uri, err := url.Parse(nextLink) + if err != nil { + return nil, fmt.Errorf("parsing nextLink %q: %+v", nextLink, err) + } + queryParameters := map[string]interface{}{} + for k, v := range uri.Query() { + if len(v) == 0 { + continue + } + val := v[0] + val = autorest.Encode("query", val) + queryParameters[k] = val + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(uri.Path), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForList handles the response to the List request. The method always +// closes the http.Response Body. +func (c AssessmentsMetadataClient) responderForList(resp *http.Response) (result ListOperationResponse, err error) { + type page struct { + Values []SecurityAssessmentMetadataResponse `json:"value"` + NextLink *string `json:"nextLink"` + } + var respObj page + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&respObj), + autorest.ByClosing()) + result.HttpResponse = resp + result.Model = &respObj.Values + result.nextLink = respObj.NextLink + if respObj.NextLink != nil { + result.nextPageFunc = func(ctx context.Context, nextLink string) (result ListOperationResponse, err error) { + req, err := c.preparerForListWithNextLink(ctx, nextLink) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "List", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "List", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForList(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "List", result.HttpResponse, "Failure responding to request") + return + } + + return + } + } + return +} + +// ListComplete retrieves all of the results into a single object +func (c AssessmentsMetadataClient) ListComplete(ctx context.Context) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, SecurityAssessmentMetadataResponseOperationPredicate{}) +} + +// ListCompleteMatchingPredicate retrieves all of the results and then applied the predicate +func (c AssessmentsMetadataClient) ListCompleteMatchingPredicate(ctx context.Context, predicate SecurityAssessmentMetadataResponseOperationPredicate) (resp ListCompleteResult, err error) { + items := make([]SecurityAssessmentMetadataResponse, 0) + + page, err := c.List(ctx) + if err != nil { + err = fmt.Errorf("loading the initial page: %+v", err) + return + } + if page.Model != nil { + for _, v := range *page.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + for page.HasMore() { + page, err = page.LoadMore(ctx) + if err != nil { + err = fmt.Errorf("loading the next page: %+v", err) + return + } + + if page.Model != nil { + for _, v := range *page.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + } + + out := ListCompleteResult{ + Items: items, + } + return out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_listbysubscription_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_listbysubscription_autorest.go new file mode 100644 index 0000000000000..59ebe826395b7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/method_listbysubscription_autorest.go @@ -0,0 +1,187 @@ +package assessmentsmetadata + +import ( + "context" + "fmt" + "net/http" + "net/url" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/hashicorp/go-azure-helpers/resourcemanager/commonids" +) + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type ListBySubscriptionOperationResponse struct { + HttpResponse *http.Response + Model *[]SecurityAssessmentMetadataResponse + + nextLink *string + nextPageFunc func(ctx context.Context, nextLink string) (ListBySubscriptionOperationResponse, error) +} + +type ListBySubscriptionCompleteResult struct { + Items []SecurityAssessmentMetadataResponse +} + +func (r ListBySubscriptionOperationResponse) HasMore() bool { + return r.nextLink != nil +} + +func (r ListBySubscriptionOperationResponse) LoadMore(ctx context.Context) (resp ListBySubscriptionOperationResponse, err error) { + if !r.HasMore() { + err = fmt.Errorf("no more pages returned") + return + } + return r.nextPageFunc(ctx, *r.nextLink) +} + +// ListBySubscription ... +func (c AssessmentsMetadataClient) ListBySubscription(ctx context.Context, id commonids.SubscriptionId) (resp ListBySubscriptionOperationResponse, err error) { + req, err := c.preparerForListBySubscription(ctx, id) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "ListBySubscription", nil, "Failure preparing request") + return + } + + resp.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "ListBySubscription", resp.HttpResponse, "Failure sending request") + return + } + + resp, err = c.responderForListBySubscription(resp.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "ListBySubscription", resp.HttpResponse, "Failure responding to request") + return + } + return +} + +// preparerForListBySubscription prepares the ListBySubscription request. +func (c AssessmentsMetadataClient) preparerForListBySubscription(ctx context.Context, id commonids.SubscriptionId) (*http.Request, error) { + queryParameters := map[string]interface{}{ + "api-version": defaultApiVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(fmt.Sprintf("%s/providers/Microsoft.Security/assessmentMetadata", id.ID())), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// preparerForListBySubscriptionWithNextLink prepares the ListBySubscription request with the given nextLink token. +func (c AssessmentsMetadataClient) preparerForListBySubscriptionWithNextLink(ctx context.Context, nextLink string) (*http.Request, error) { + uri, err := url.Parse(nextLink) + if err != nil { + return nil, fmt.Errorf("parsing nextLink %q: %+v", nextLink, err) + } + queryParameters := map[string]interface{}{} + for k, v := range uri.Query() { + if len(v) == 0 { + continue + } + val := v[0] + val = autorest.Encode("query", val) + queryParameters[k] = val + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsGet(), + autorest.WithBaseURL(c.baseUri), + autorest.WithPath(uri.Path), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// responderForListBySubscription handles the response to the ListBySubscription request. The method always +// closes the http.Response Body. +func (c AssessmentsMetadataClient) responderForListBySubscription(resp *http.Response) (result ListBySubscriptionOperationResponse, err error) { + type page struct { + Values []SecurityAssessmentMetadataResponse `json:"value"` + NextLink *string `json:"nextLink"` + } + var respObj page + err = autorest.Respond( + resp, + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&respObj), + autorest.ByClosing()) + result.HttpResponse = resp + result.Model = &respObj.Values + result.nextLink = respObj.NextLink + if respObj.NextLink != nil { + result.nextPageFunc = func(ctx context.Context, nextLink string) (result ListBySubscriptionOperationResponse, err error) { + req, err := c.preparerForListBySubscriptionWithNextLink(ctx, nextLink) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "ListBySubscription", nil, "Failure preparing request") + return + } + + result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "ListBySubscription", result.HttpResponse, "Failure sending request") + return + } + + result, err = c.responderForListBySubscription(result.HttpResponse) + if err != nil { + err = autorest.NewErrorWithError(err, "assessmentsmetadata.AssessmentsMetadataClient", "ListBySubscription", result.HttpResponse, "Failure responding to request") + return + } + + return + } + } + return +} + +// ListBySubscriptionComplete retrieves all of the results into a single object +func (c AssessmentsMetadataClient) ListBySubscriptionComplete(ctx context.Context, id commonids.SubscriptionId) (ListBySubscriptionCompleteResult, error) { + return c.ListBySubscriptionCompleteMatchingPredicate(ctx, id, SecurityAssessmentMetadataResponseOperationPredicate{}) +} + +// ListBySubscriptionCompleteMatchingPredicate retrieves all of the results and then applied the predicate +func (c AssessmentsMetadataClient) ListBySubscriptionCompleteMatchingPredicate(ctx context.Context, id commonids.SubscriptionId, predicate SecurityAssessmentMetadataResponseOperationPredicate) (resp ListBySubscriptionCompleteResult, err error) { + items := make([]SecurityAssessmentMetadataResponse, 0) + + page, err := c.ListBySubscription(ctx, id) + if err != nil { + err = fmt.Errorf("loading the initial page: %+v", err) + return + } + if page.Model != nil { + for _, v := range *page.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + + for page.HasMore() { + page, err = page.LoadMore(ctx) + if err != nil { + err = fmt.Errorf("loading the next page: %+v", err) + return + } + + if page.Model != nil { + for _, v := range *page.Model { + if predicate.Matches(v) { + items = append(items, v) + } + } + } + } + + out := ListBySubscriptionCompleteResult{ + Items: items, + } + return out, nil +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapartnerdata.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapartnerdata.go new file mode 100644 index 0000000000000..d949f659575ca --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapartnerdata.go @@ -0,0 +1,10 @@ +package assessmentsmetadata + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SecurityAssessmentMetadataPartnerData struct { + PartnerName string `json:"partnerName"` + ProductName *string `json:"productName,omitempty"` + Secret string `json:"secret"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapropertiesresponse.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapropertiesresponse.go new file mode 100644 index 0000000000000..d813b1002b9e7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapropertiesresponse.go @@ -0,0 +1,23 @@ +package assessmentsmetadata + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SecurityAssessmentMetadataPropertiesResponse struct { + AssessmentType AssessmentType `json:"assessmentType"` + Categories *[]Categories `json:"categories,omitempty"` + Description *string `json:"description,omitempty"` + DisplayName string `json:"displayName"` + ImplementationEffort *ImplementationEffort `json:"implementationEffort,omitempty"` + PartnerData *SecurityAssessmentMetadataPartnerData `json:"partnerData,omitempty"` + PlannedDeprecationDate *string `json:"plannedDeprecationDate,omitempty"` + PolicyDefinitionId *string `json:"policyDefinitionId,omitempty"` + Preview *bool `json:"preview,omitempty"` + PublishDates *SecurityAssessmentMetadataPropertiesResponsePublishDates `json:"publishDates,omitempty"` + RemediationDescription *string `json:"remediationDescription,omitempty"` + Severity Severity `json:"severity"` + Tactics *[]Tactics `json:"tactics,omitempty"` + Techniques *[]Techniques `json:"techniques,omitempty"` + Threats *[]Threats `json:"threats,omitempty"` + UserImpact *UserImpact `json:"userImpact,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapropertiesresponsepublishdates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapropertiesresponsepublishdates.go new file mode 100644 index 0000000000000..e9dc01d7c86df --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadatapropertiesresponsepublishdates.go @@ -0,0 +1,9 @@ +package assessmentsmetadata + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SecurityAssessmentMetadataPropertiesResponsePublishDates struct { + GA *string `json:"GA,omitempty"` + Public string `json:"public"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadataresponse.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadataresponse.go new file mode 100644 index 0000000000000..7acc7c794683e --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/model_securityassessmentmetadataresponse.go @@ -0,0 +1,11 @@ +package assessmentsmetadata + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SecurityAssessmentMetadataResponse struct { + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Properties *SecurityAssessmentMetadataPropertiesResponse `json:"properties,omitempty"` + Type *string `json:"type,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/predicates.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/predicates.go new file mode 100644 index 0000000000000..0ab05ff02ccf0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/predicates.go @@ -0,0 +1,27 @@ +package assessmentsmetadata + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +type SecurityAssessmentMetadataResponseOperationPredicate struct { + Id *string + Name *string + Type *string +} + +func (p SecurityAssessmentMetadataResponseOperationPredicate) Matches(input SecurityAssessmentMetadataResponse) bool { + + if p.Id != nil && (input.Id == nil || *p.Id != *input.Id) { + return false + } + + if p.Name != nil && (input.Name == nil || *p.Name != *input.Name) { + return false + } + + if p.Type != nil && (input.Type == nil || *p.Type != *input.Type) { + return false + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/version.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/version.go new file mode 100644 index 0000000000000..5c96708bc7cf5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata/version.go @@ -0,0 +1,12 @@ +package assessmentsmetadata + +import "fmt" + +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See NOTICE.txt in the project root for license information. + +const defaultApiVersion = "2021-06-01" + +func userAgent() string { + return fmt.Sprintf("hashicorp/go-azure-sdk/assessmentsmetadata/%s", defaultApiVersion) +} diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/README.md index b4700b41a87f5..81a1e2123cce1 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `AlertRulesClient.AlertRulesCreateOrUpdate` +### Example Usage: `AlertRulesClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := alertrules.AlertRule{ } -read, err := client.AlertRulesCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,13 +41,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AlertRulesClient.AlertRulesDelete` +### Example Usage: `AlertRulesClient.Delete` ```go ctx := context.TODO() id := alertrules.NewAlertRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "workspaceValue", "ruleIdValue") -read, err := client.AlertRulesDelete(ctx, id) +read, err := client.Delete(ctx, id) if err != nil { // handle the error } @@ -57,13 +57,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AlertRulesClient.AlertRulesGet` +### Example Usage: `AlertRulesClient.Get` ```go ctx := context.TODO() id := alertrules.NewAlertRuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "workspaceValue", "ruleIdValue") -read, err := client.AlertRulesGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -73,14 +73,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `AlertRulesClient.AlertRulesList` +### Example Usage: `AlertRulesClient.List` ```go ctx := context.TODO() id := alertrules.NewWorkspaceID("12345678-1234-9876-4563-123456789012", "example-resource-group", "workspaceValue") -// alternatively `client.AlertRulesList(ctx, id)` can be used to do batched pagination -items, err := client.AlertRulesListComplete(ctx, id) +// alternatively `client.List(ctx, id)` can be used to do batched pagination +items, err := client.ListComplete(ctx, id) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulescreateorupdate_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_createorupdate_autorest.go similarity index 58% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulescreateorupdate_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_createorupdate_autorest.go index ce26fec11566a..548f6c4ef37d4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulescreateorupdate_autorest.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_createorupdate_autorest.go @@ -12,36 +12,36 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertRulesCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response Model *AlertRule } -// AlertRulesCreateOrUpdate ... -func (c AlertRulesClient) AlertRulesCreateOrUpdate(ctx context.Context, id AlertRuleId, input AlertRule) (result AlertRulesCreateOrUpdateOperationResponse, err error) { - req, err := c.preparerForAlertRulesCreateOrUpdate(ctx, id, input) +// CreateOrUpdate ... +func (c AlertRulesClient) CreateOrUpdate(ctx context.Context, id AlertRuleId, input AlertRule) (result CreateOrUpdateOperationResponse, err error) { + req, err := c.preparerForCreateOrUpdate(ctx, id, input) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesCreateOrUpdate", nil, "Failure preparing request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "CreateOrUpdate", nil, "Failure preparing request") return } result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesCreateOrUpdate", result.HttpResponse, "Failure sending request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "CreateOrUpdate", result.HttpResponse, "Failure sending request") return } - result, err = c.responderForAlertRulesCreateOrUpdate(result.HttpResponse) + result, err = c.responderForCreateOrUpdate(result.HttpResponse) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesCreateOrUpdate", result.HttpResponse, "Failure responding to request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "CreateOrUpdate", result.HttpResponse, "Failure responding to request") return } return } -// preparerForAlertRulesCreateOrUpdate prepares the AlertRulesCreateOrUpdate request. -func (c AlertRulesClient) preparerForAlertRulesCreateOrUpdate(ctx context.Context, id AlertRuleId, input AlertRule) (*http.Request, error) { +// preparerForCreateOrUpdate prepares the CreateOrUpdate request. +func (c AlertRulesClient) preparerForCreateOrUpdate(ctx context.Context, id AlertRuleId, input AlertRule) (*http.Request, error) { queryParameters := map[string]interface{}{ "api-version": defaultApiVersion, } @@ -56,9 +56,9 @@ func (c AlertRulesClient) preparerForAlertRulesCreateOrUpdate(ctx context.Contex return preparer.Prepare((&http.Request{}).WithContext(ctx)) } -// responderForAlertRulesCreateOrUpdate handles the response to the AlertRulesCreateOrUpdate request. The method always +// responderForCreateOrUpdate handles the response to the CreateOrUpdate request. The method always // closes the http.Response Body. -func (c AlertRulesClient) responderForAlertRulesCreateOrUpdate(resp *http.Response) (result AlertRulesCreateOrUpdateOperationResponse, err error) { +func (c AlertRulesClient) responderForCreateOrUpdate(resp *http.Response) (result CreateOrUpdateOperationResponse, err error) { var respObj json.RawMessage err = autorest.Respond( resp, diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulesdelete_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_delete_autorest.go similarity index 57% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulesdelete_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_delete_autorest.go index 635d0607bc384..417e1a0017ec9 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulesdelete_autorest.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_delete_autorest.go @@ -11,35 +11,35 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertRulesDeleteOperationResponse struct { +type DeleteOperationResponse struct { HttpResponse *http.Response } -// AlertRulesDelete ... -func (c AlertRulesClient) AlertRulesDelete(ctx context.Context, id AlertRuleId) (result AlertRulesDeleteOperationResponse, err error) { - req, err := c.preparerForAlertRulesDelete(ctx, id) +// Delete ... +func (c AlertRulesClient) Delete(ctx context.Context, id AlertRuleId) (result DeleteOperationResponse, err error) { + req, err := c.preparerForDelete(ctx, id) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesDelete", nil, "Failure preparing request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "Delete", nil, "Failure preparing request") return } result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesDelete", result.HttpResponse, "Failure sending request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "Delete", result.HttpResponse, "Failure sending request") return } - result, err = c.responderForAlertRulesDelete(result.HttpResponse) + result, err = c.responderForDelete(result.HttpResponse) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesDelete", result.HttpResponse, "Failure responding to request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "Delete", result.HttpResponse, "Failure responding to request") return } return } -// preparerForAlertRulesDelete prepares the AlertRulesDelete request. -func (c AlertRulesClient) preparerForAlertRulesDelete(ctx context.Context, id AlertRuleId) (*http.Request, error) { +// preparerForDelete prepares the Delete request. +func (c AlertRulesClient) preparerForDelete(ctx context.Context, id AlertRuleId) (*http.Request, error) { queryParameters := map[string]interface{}{ "api-version": defaultApiVersion, } @@ -53,9 +53,9 @@ func (c AlertRulesClient) preparerForAlertRulesDelete(ctx context.Context, id Al return preparer.Prepare((&http.Request{}).WithContext(ctx)) } -// responderForAlertRulesDelete handles the response to the AlertRulesDelete request. The method always +// responderForDelete handles the response to the Delete request. The method always // closes the http.Response Body. -func (c AlertRulesClient) responderForAlertRulesDelete(resp *http.Response) (result AlertRulesDeleteOperationResponse, err error) { +func (c AlertRulesClient) responderForDelete(resp *http.Response) (result DeleteOperationResponse, err error) { err = autorest.Respond( resp, azure.WithErrorUnlessStatusCode(http.StatusNoContent, http.StatusOK), diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulesget_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_get_autorest.go similarity index 62% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulesget_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_get_autorest.go index 8b5f415b01e66..ddd1836d4de72 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertrulesget_autorest.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_get_autorest.go @@ -12,36 +12,36 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertRulesGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response Model *AlertRule } -// AlertRulesGet ... -func (c AlertRulesClient) AlertRulesGet(ctx context.Context, id AlertRuleId) (result AlertRulesGetOperationResponse, err error) { - req, err := c.preparerForAlertRulesGet(ctx, id) +// Get ... +func (c AlertRulesClient) Get(ctx context.Context, id AlertRuleId) (result GetOperationResponse, err error) { + req, err := c.preparerForGet(ctx, id) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesGet", nil, "Failure preparing request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "Get", nil, "Failure preparing request") return } result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesGet", result.HttpResponse, "Failure sending request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "Get", result.HttpResponse, "Failure sending request") return } - result, err = c.responderForAlertRulesGet(result.HttpResponse) + result, err = c.responderForGet(result.HttpResponse) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesGet", result.HttpResponse, "Failure responding to request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "Get", result.HttpResponse, "Failure responding to request") return } return } -// preparerForAlertRulesGet prepares the AlertRulesGet request. -func (c AlertRulesClient) preparerForAlertRulesGet(ctx context.Context, id AlertRuleId) (*http.Request, error) { +// preparerForGet prepares the Get request. +func (c AlertRulesClient) preparerForGet(ctx context.Context, id AlertRuleId) (*http.Request, error) { queryParameters := map[string]interface{}{ "api-version": defaultApiVersion, } @@ -55,9 +55,9 @@ func (c AlertRulesClient) preparerForAlertRulesGet(ctx context.Context, id Alert return preparer.Prepare((&http.Request{}).WithContext(ctx)) } -// responderForAlertRulesGet handles the response to the AlertRulesGet request. The method always +// responderForGet handles the response to the Get request. The method always // closes the http.Response Body. -func (c AlertRulesClient) responderForAlertRulesGet(resp *http.Response) (result AlertRulesGetOperationResponse, err error) { +func (c AlertRulesClient) responderForGet(resp *http.Response) (result GetOperationResponse, err error) { var respObj json.RawMessage err = autorest.Respond( resp, diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertruleslist_autorest.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_list_autorest.go similarity index 59% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertruleslist_autorest.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_list_autorest.go index f65b7ed44eb4f..f06cf0f62414e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_alertruleslist_autorest.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/method_list_autorest.go @@ -14,23 +14,23 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type AlertRulesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response Model *[]AlertRule nextLink *string - nextPageFunc func(ctx context.Context, nextLink string) (AlertRulesListOperationResponse, error) + nextPageFunc func(ctx context.Context, nextLink string) (ListOperationResponse, error) } -type AlertRulesListCompleteResult struct { +type ListCompleteResult struct { Items []AlertRule } -func (r AlertRulesListOperationResponse) HasMore() bool { +func (r ListOperationResponse) HasMore() bool { return r.nextLink != nil } -func (r AlertRulesListOperationResponse) LoadMore(ctx context.Context) (resp AlertRulesListOperationResponse, err error) { +func (r ListOperationResponse) LoadMore(ctx context.Context) (resp ListOperationResponse, err error) { if !r.HasMore() { err = fmt.Errorf("no more pages returned") return @@ -38,30 +38,30 @@ func (r AlertRulesListOperationResponse) LoadMore(ctx context.Context) (resp Ale return r.nextPageFunc(ctx, *r.nextLink) } -// AlertRulesList ... -func (c AlertRulesClient) AlertRulesList(ctx context.Context, id WorkspaceId) (resp AlertRulesListOperationResponse, err error) { - req, err := c.preparerForAlertRulesList(ctx, id) +// List ... +func (c AlertRulesClient) List(ctx context.Context, id WorkspaceId) (resp ListOperationResponse, err error) { + req, err := c.preparerForList(ctx, id) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesList", nil, "Failure preparing request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "List", nil, "Failure preparing request") return } resp.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesList", resp.HttpResponse, "Failure sending request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "List", resp.HttpResponse, "Failure sending request") return } - resp, err = c.responderForAlertRulesList(resp.HttpResponse) + resp, err = c.responderForList(resp.HttpResponse) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesList", resp.HttpResponse, "Failure responding to request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "List", resp.HttpResponse, "Failure responding to request") return } return } -// preparerForAlertRulesList prepares the AlertRulesList request. -func (c AlertRulesClient) preparerForAlertRulesList(ctx context.Context, id WorkspaceId) (*http.Request, error) { +// preparerForList prepares the List request. +func (c AlertRulesClient) preparerForList(ctx context.Context, id WorkspaceId) (*http.Request, error) { queryParameters := map[string]interface{}{ "api-version": defaultApiVersion, } @@ -75,8 +75,8 @@ func (c AlertRulesClient) preparerForAlertRulesList(ctx context.Context, id Work return preparer.Prepare((&http.Request{}).WithContext(ctx)) } -// preparerForAlertRulesListWithNextLink prepares the AlertRulesList request with the given nextLink token. -func (c AlertRulesClient) preparerForAlertRulesListWithNextLink(ctx context.Context, nextLink string) (*http.Request, error) { +// preparerForListWithNextLink prepares the List request with the given nextLink token. +func (c AlertRulesClient) preparerForListWithNextLink(ctx context.Context, nextLink string) (*http.Request, error) { uri, err := url.Parse(nextLink) if err != nil { return nil, fmt.Errorf("parsing nextLink %q: %+v", nextLink, err) @@ -100,9 +100,9 @@ func (c AlertRulesClient) preparerForAlertRulesListWithNextLink(ctx context.Cont return preparer.Prepare((&http.Request{}).WithContext(ctx)) } -// responderForAlertRulesList handles the response to the AlertRulesList request. The method always +// responderForList handles the response to the List request. The method always // closes the http.Response Body. -func (c AlertRulesClient) responderForAlertRulesList(resp *http.Response) (result AlertRulesListOperationResponse, err error) { +func (c AlertRulesClient) responderForList(resp *http.Response) (result ListOperationResponse, err error) { type page struct { Values []json.RawMessage `json:"value"` NextLink *string `json:"nextLink"` @@ -126,22 +126,22 @@ func (c AlertRulesClient) responderForAlertRulesList(resp *http.Response) (resul result.Model = &temp result.nextLink = respObj.NextLink if respObj.NextLink != nil { - result.nextPageFunc = func(ctx context.Context, nextLink string) (result AlertRulesListOperationResponse, err error) { - req, err := c.preparerForAlertRulesListWithNextLink(ctx, nextLink) + result.nextPageFunc = func(ctx context.Context, nextLink string) (result ListOperationResponse, err error) { + req, err := c.preparerForListWithNextLink(ctx, nextLink) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesList", nil, "Failure preparing request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "List", nil, "Failure preparing request") return } result.HttpResponse, err = c.Client.Send(req, azure.DoRetryWithRegistration(c.Client)) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesList", result.HttpResponse, "Failure sending request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "List", result.HttpResponse, "Failure sending request") return } - result, err = c.responderForAlertRulesList(result.HttpResponse) + result, err = c.responderForList(result.HttpResponse) if err != nil { - err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "AlertRulesList", result.HttpResponse, "Failure responding to request") + err = autorest.NewErrorWithError(err, "alertrules.AlertRulesClient", "List", result.HttpResponse, "Failure responding to request") return } @@ -151,16 +151,16 @@ func (c AlertRulesClient) responderForAlertRulesList(resp *http.Response) (resul return } -// AlertRulesListComplete retrieves all of the results into a single object -func (c AlertRulesClient) AlertRulesListComplete(ctx context.Context, id WorkspaceId) (AlertRulesListCompleteResult, error) { - return c.AlertRulesListCompleteMatchingPredicate(ctx, id, AlertRuleOperationPredicate{}) +// ListComplete retrieves all of the results into a single object +func (c AlertRulesClient) ListComplete(ctx context.Context, id WorkspaceId) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, AlertRuleOperationPredicate{}) } -// AlertRulesListCompleteMatchingPredicate retrieves all of the results and then applied the predicate -func (c AlertRulesClient) AlertRulesListCompleteMatchingPredicate(ctx context.Context, id WorkspaceId, predicate AlertRuleOperationPredicate) (resp AlertRulesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all of the results and then applied the predicate +func (c AlertRulesClient) ListCompleteMatchingPredicate(ctx context.Context, id WorkspaceId, predicate AlertRuleOperationPredicate) (resp ListCompleteResult, err error) { items := make([]AlertRule, 0) - page, err := c.AlertRulesList(ctx, id) + page, err := c.List(ctx, id) if err != nil { err = fmt.Errorf("loading the initial page: %+v", err) return @@ -189,7 +189,7 @@ func (c AlertRulesClient) AlertRulesListCompleteMatchingPredicate(ctx context.Co } } - out := AlertRulesListCompleteResult{ + out := ListCompleteResult{ Items: items, } return out, nil diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/model_alertrule.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/model_alertrule.go index 36f61a80d5ac0..7bb4d493656b3 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/model_alertrule.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules/model_alertrule.go @@ -12,7 +12,7 @@ import ( type AlertRule interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAlertRuleImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules/model_automationruleaction.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules/model_automationruleaction.go index 3d6a36a9d8f84..77887bb8adf91 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules/model_automationruleaction.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules/model_automationruleaction.go @@ -12,7 +12,7 @@ import ( type AutomationRuleAction interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAutomationRuleActionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules/model_automationrulecondition.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules/model_automationrulecondition.go index dae315ac24c0d..6e9c0bf07a819 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules/model_automationrulecondition.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules/model_automationrulecondition.go @@ -12,7 +12,7 @@ import ( type AutomationRuleCondition interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAutomationRuleConditionImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_authinfobase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_authinfobase.go index 70e5b3164143a..69f8da16ba9b4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_authinfobase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_authinfobase.go @@ -12,7 +12,7 @@ import ( type AuthInfoBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAuthInfoBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_azureresourcepropertiesbase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_azureresourcepropertiesbase.go index eb4a8ff65ffdf..d7d98345d685d 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_azureresourcepropertiesbase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_azureresourcepropertiesbase.go @@ -12,7 +12,7 @@ import ( type AzureResourcePropertiesBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAzureResourcePropertiesBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_secretinfobase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_secretinfobase.go index 45341f1121de6..e9869b2628b28 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_secretinfobase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_secretinfobase.go @@ -12,7 +12,7 @@ import ( type SecretInfoBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSecretInfoBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_targetservicebase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_targetservicebase.go index dd8478e2e2b43..226cec33e1654 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_targetservicebase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/links/model_targetservicebase.go @@ -12,7 +12,7 @@ import ( type TargetServiceBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTargetServiceBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_authinfobase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_authinfobase.go index 0b28f0411f447..f4db87ec23e89 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_authinfobase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_authinfobase.go @@ -12,7 +12,7 @@ import ( type AuthInfoBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAuthInfoBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_azureresourcepropertiesbase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_azureresourcepropertiesbase.go index d3a8183fe1ae5..8770e9d89a1ce 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_azureresourcepropertiesbase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_azureresourcepropertiesbase.go @@ -12,7 +12,7 @@ import ( type AzureResourcePropertiesBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawAzureResourcePropertiesBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_secretinfobase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_secretinfobase.go index 3f55b0a2e9baf..2f256c61e4a89 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_secretinfobase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_secretinfobase.go @@ -12,7 +12,7 @@ import ( type SecretInfoBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSecretInfoBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_targetservicebase.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_targetservicebase.go index ef66f83b4b08c..5f8718ac05a8a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_targetservicebase.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/servicelinker/2022-05-01/servicelinker/model_targetservicebase.go @@ -12,7 +12,7 @@ import ( type TargetServiceBase interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawTargetServiceBaseImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/storagemover/2023-03-01/endpoints/model_endpointbaseproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/storagemover/2023-03-01/endpoints/model_endpointbaseproperties.go index 97518baff125f..211401ab81561 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/storagemover/2023-03-01/endpoints/model_endpointbaseproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/storagemover/2023-03-01/endpoints/model_endpointbaseproperties.go @@ -12,7 +12,7 @@ import ( type EndpointBaseProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEndpointBasePropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionbinding.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionbinding.go index d18b015f10524..b1a7c39083afe 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionbinding.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionbinding.go @@ -12,7 +12,7 @@ import ( type FunctionBinding interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFunctionBindingImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionproperties.go index 9ea82c06d45e1..181c74ee5c0aa 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionproperties.go @@ -12,7 +12,7 @@ import ( type FunctionProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFunctionPropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionretrievedefaultdefinitionparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionretrievedefaultdefinitionparameters.go index c00181d727813..8a0a51f4aba7e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionretrievedefaultdefinitionparameters.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/functions/model_functionretrievedefaultdefinitionparameters.go @@ -12,7 +12,7 @@ import ( type FunctionRetrieveDefaultDefinitionParameters interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFunctionRetrieveDefaultDefinitionParametersImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_inputproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_inputproperties.go index 9467fb1751707..cbc3c04c4cf57 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_inputproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_inputproperties.go @@ -12,7 +12,7 @@ import ( type InputProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawInputPropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_referenceinputdatasource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_referenceinputdatasource.go index f08c7a2d436a0..8db1d63704122 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_referenceinputdatasource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_referenceinputdatasource.go @@ -12,7 +12,7 @@ import ( type ReferenceInputDataSource interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawReferenceInputDataSourceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_serialization.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_serialization.go index 8e4e163c78d54..f7ae126855139 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_serialization.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_serialization.go @@ -12,7 +12,7 @@ import ( type Serialization interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSerializationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_streaminputdatasource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_streaminputdatasource.go index 0fd906f8ee71f..f57f014f1247c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_streaminputdatasource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/inputs/model_streaminputdatasource.go @@ -12,7 +12,7 @@ import ( type StreamInputDataSource interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawStreamInputDataSourceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_functionbinding.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_functionbinding.go index 1ef93846664cc..e34e1d5d03212 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_functionbinding.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_functionbinding.go @@ -12,7 +12,7 @@ import ( type FunctionBinding interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFunctionBindingImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_functionproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_functionproperties.go index fb08a672fabae..797d9ff512048 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_functionproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_functionproperties.go @@ -12,7 +12,7 @@ import ( type FunctionProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawFunctionPropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_inputproperties.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_inputproperties.go index de9e5bc43a49a..20140f3aa7147 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_inputproperties.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_inputproperties.go @@ -12,7 +12,7 @@ import ( type InputProperties interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawInputPropertiesImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_outputdatasource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_outputdatasource.go index 26d8e84610f78..854d1d7e9b72f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_outputdatasource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_outputdatasource.go @@ -12,7 +12,7 @@ import ( type OutputDataSource interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawOutputDataSourceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_referenceinputdatasource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_referenceinputdatasource.go index 9b7e4d111cc89..56c7d1cfd6335 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_referenceinputdatasource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_referenceinputdatasource.go @@ -12,7 +12,7 @@ import ( type ReferenceInputDataSource interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawReferenceInputDataSourceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_serialization.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_serialization.go index a4bb3af030341..19476ba2e7a6d 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_serialization.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_serialization.go @@ -12,7 +12,7 @@ import ( type Serialization interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSerializationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_streaminputdatasource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_streaminputdatasource.go index 7c8a73eae74fc..412a7fa9166e9 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_streaminputdatasource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2020-03-01/streamingjobs/model_streaminputdatasource.go @@ -12,7 +12,7 @@ import ( type StreamInputDataSource interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawStreamInputDataSourceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2021-10-01-preview/outputs/model_outputdatasource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2021-10-01-preview/outputs/model_outputdatasource.go index 54ed114007e46..07f934765ec27 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2021-10-01-preview/outputs/model_outputdatasource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2021-10-01-preview/outputs/model_outputdatasource.go @@ -12,7 +12,7 @@ import ( type OutputDataSource interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawOutputDataSourceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2021-10-01-preview/outputs/model_serialization.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2021-10-01-preview/outputs/model_serialization.go index 78d390ec0f614..dd7efbb86a37c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2021-10-01-preview/outputs/model_serialization.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/streamanalytics/2021-10-01-preview/outputs/model_serialization.go @@ -12,7 +12,7 @@ import ( type Serialization interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawSerializationImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentcreateorupdateparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentcreateorupdateparameters.go index c00c69c04dbc6..cd3944bf5094c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentcreateorupdateparameters.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentcreateorupdateparameters.go @@ -12,7 +12,7 @@ import ( type EnvironmentCreateOrUpdateParameters interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEnvironmentCreateOrUpdateParametersImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentresource.go index d086b71ec6037..0dcbd2472292f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentresource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentresource.go @@ -12,7 +12,7 @@ import ( type EnvironmentResource interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEnvironmentResourceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentupdateparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentupdateparameters.go index 7c9eb7d0f029b..7acd0488a03f5 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentupdateparameters.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/environments/model_environmentupdateparameters.go @@ -12,7 +12,7 @@ import ( type EnvironmentUpdateParameters interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEnvironmentUpdateParametersImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourcecreateorupdateparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourcecreateorupdateparameters.go index 812efdd995bb6..f49c6c716489c 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourcecreateorupdateparameters.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourcecreateorupdateparameters.go @@ -12,7 +12,7 @@ import ( type EventSourceCreateOrUpdateParameters interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEventSourceCreateOrUpdateParametersImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourceresource.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourceresource.go index 44f6746748cf6..fb8ace14b524f 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourceresource.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourceresource.go @@ -12,7 +12,7 @@ import ( type EventSourceResource interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEventSourceResourceImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourceupdateparameters.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourceupdateparameters.go index 37bdbbb558112..269cdb0d05a38 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourceupdateparameters.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/timeseriesinsights/2020-05-15/eventsources/model_eventsourceupdateparameters.go @@ -12,7 +12,7 @@ import ( type EventSourceUpdateParameters interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEventSourceUpdateParametersImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/README.md index 3be3cba6d3339..f2675f9250742 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/README.md @@ -20,7 +20,7 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `EdgeModulesClient.EdgeModulesCreateOrUpdate` +### Example Usage: `EdgeModulesClient.CreateOrUpdate` ```go ctx := context.TODO() @@ -31,7 +31,7 @@ payload := edgemodules.EdgeModuleEntity{ } -read, err := client.EdgeModulesCreateOrUpdate(ctx, id, payload) +read, err := client.CreateOrUpdate(ctx, id, payload) if err != nil { // handle the error } @@ -41,13 +41,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `EdgeModulesClient.EdgeModulesDelete` +### Example Usage: `EdgeModulesClient.Delete` ```go ctx := context.TODO() id := edgemodules.NewEdgeModuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "videoAnalyzerValue", "edgeModuleValue") -read, err := client.EdgeModulesDelete(ctx, id) +read, err := client.Delete(ctx, id) if err != nil { // handle the error } @@ -57,13 +57,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `EdgeModulesClient.EdgeModulesGet` +### Example Usage: `EdgeModulesClient.Get` ```go ctx := context.TODO() id := edgemodules.NewEdgeModuleID("12345678-1234-9876-4563-123456789012", "example-resource-group", "videoAnalyzerValue", "edgeModuleValue") -read, err := client.EdgeModulesGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -73,14 +73,14 @@ if model := read.Model; model != nil { ``` -### Example Usage: `EdgeModulesClient.EdgeModulesList` +### Example Usage: `EdgeModulesClient.List` ```go ctx := context.TODO() id := edgemodules.NewVideoAnalyzerID("12345678-1234-9876-4563-123456789012", "example-resource-group", "videoAnalyzerValue") -// alternatively `client.EdgeModulesList(ctx, id, edgemodules.DefaultEdgeModulesListOperationOptions())` can be used to do batched pagination -items, err := client.EdgeModulesListComplete(ctx, id, edgemodules.DefaultEdgeModulesListOperationOptions()) +// alternatively `client.List(ctx, id, edgemodules.DefaultListOperationOptions())` can be used to do batched pagination +items, err := client.ListComplete(ctx, id, edgemodules.DefaultListOperationOptions()) if err != nil { // handle the error } @@ -90,7 +90,7 @@ for _, item := range items { ``` -### Example Usage: `EdgeModulesClient.EdgeModulesListProvisioningToken` +### Example Usage: `EdgeModulesClient.ListProvisioningToken` ```go ctx := context.TODO() @@ -101,7 +101,7 @@ payload := edgemodules.ListProvisioningTokenInput{ } -read, err := client.EdgeModulesListProvisioningToken(ctx, id, payload) +read, err := client.ListProvisioningToken(ctx, id, payload) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulescreateorupdate.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_createorupdate.go similarity index 78% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulescreateorupdate.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_createorupdate.go index 22ec0f6cc980e..0df359c1d948a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulescreateorupdate.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_createorupdate.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type EdgeModulesCreateOrUpdateOperationResponse struct { +type CreateOrUpdateOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *EdgeModuleEntity } -// EdgeModulesCreateOrUpdate ... -func (c EdgeModulesClient) EdgeModulesCreateOrUpdate(ctx context.Context, id EdgeModuleId, input EdgeModuleEntity) (result EdgeModulesCreateOrUpdateOperationResponse, err error) { +// CreateOrUpdate ... +func (c EdgeModulesClient) CreateOrUpdate(ctx context.Context, id EdgeModuleId, input EdgeModuleEntity) (result CreateOrUpdateOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulesdelete.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_delete.go similarity index 79% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulesdelete.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_delete.go index 301ca74b896e7..9444373021d5e 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulesdelete.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_delete.go @@ -11,13 +11,13 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type EdgeModulesDeleteOperationResponse struct { +type DeleteOperationResponse struct { HttpResponse *http.Response OData *odata.OData } -// EdgeModulesDelete ... -func (c EdgeModulesClient) EdgeModulesDelete(ctx context.Context, id EdgeModuleId) (result EdgeModulesDeleteOperationResponse, err error) { +// Delete ... +func (c EdgeModulesClient) Delete(ctx context.Context, id EdgeModuleId) (result DeleteOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulesget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_get.go similarity index 81% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulesget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_get.go index 302f6ea6bc205..78b6084bf0c6a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemodulesget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type EdgeModulesGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *EdgeModuleEntity } -// EdgeModulesGet ... -func (c EdgeModulesClient) EdgeModulesGet(ctx context.Context, id EdgeModuleId) (result EdgeModulesGetOperationResponse, err error) { +// Get ... +func (c EdgeModulesClient) Get(ctx context.Context, id EdgeModuleId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemoduleslist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_list.go similarity index 55% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemoduleslist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_list.go index 3ac228b62ef20..b48c4b722b5a4 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemoduleslist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_list.go @@ -12,38 +12,38 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type EdgeModulesListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *[]EdgeModuleEntity } -type EdgeModulesListCompleteResult struct { +type ListCompleteResult struct { Items []EdgeModuleEntity } -type EdgeModulesListOperationOptions struct { +type ListOperationOptions struct { Filter *string Orderby *string Top *int64 } -func DefaultEdgeModulesListOperationOptions() EdgeModulesListOperationOptions { - return EdgeModulesListOperationOptions{} +func DefaultListOperationOptions() ListOperationOptions { + return ListOperationOptions{} } -func (o EdgeModulesListOperationOptions) ToHeaders() *client.Headers { +func (o ListOperationOptions) ToHeaders() *client.Headers { out := client.Headers{} return &out } -func (o EdgeModulesListOperationOptions) ToOData() *odata.Query { +func (o ListOperationOptions) ToOData() *odata.Query { out := odata.Query{} return &out } -func (o EdgeModulesListOperationOptions) ToQuery() *client.QueryParams { +func (o ListOperationOptions) ToQuery() *client.QueryParams { out := client.QueryParams{} if o.Filter != nil { out.Append("$filter", fmt.Sprintf("%v", *o.Filter)) @@ -57,8 +57,8 @@ func (o EdgeModulesListOperationOptions) ToQuery() *client.QueryParams { return &out } -// EdgeModulesList ... -func (c EdgeModulesClient) EdgeModulesList(ctx context.Context, id VideoAnalyzerId, options EdgeModulesListOperationOptions) (result EdgeModulesListOperationResponse, err error) { +// List ... +func (c EdgeModulesClient) List(ctx context.Context, id VideoAnalyzerId, options ListOperationOptions) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ @@ -96,16 +96,16 @@ func (c EdgeModulesClient) EdgeModulesList(ctx context.Context, id VideoAnalyzer return } -// EdgeModulesListComplete retrieves all the results into a single object -func (c EdgeModulesClient) EdgeModulesListComplete(ctx context.Context, id VideoAnalyzerId, options EdgeModulesListOperationOptions) (EdgeModulesListCompleteResult, error) { - return c.EdgeModulesListCompleteMatchingPredicate(ctx, id, options, EdgeModuleEntityOperationPredicate{}) +// ListComplete retrieves all the results into a single object +func (c EdgeModulesClient) ListComplete(ctx context.Context, id VideoAnalyzerId, options ListOperationOptions) (ListCompleteResult, error) { + return c.ListCompleteMatchingPredicate(ctx, id, options, EdgeModuleEntityOperationPredicate{}) } -// EdgeModulesListCompleteMatchingPredicate retrieves all the results and then applies the predicate -func (c EdgeModulesClient) EdgeModulesListCompleteMatchingPredicate(ctx context.Context, id VideoAnalyzerId, options EdgeModulesListOperationOptions, predicate EdgeModuleEntityOperationPredicate) (result EdgeModulesListCompleteResult, err error) { +// ListCompleteMatchingPredicate retrieves all the results and then applies the predicate +func (c EdgeModulesClient) ListCompleteMatchingPredicate(ctx context.Context, id VideoAnalyzerId, options ListOperationOptions, predicate EdgeModuleEntityOperationPredicate) (result ListCompleteResult, err error) { items := make([]EdgeModuleEntity, 0) - resp, err := c.EdgeModulesList(ctx, id, options) + resp, err := c.List(ctx, id, options) if err != nil { err = fmt.Errorf("loading results: %+v", err) return @@ -118,7 +118,7 @@ func (c EdgeModulesClient) EdgeModulesListCompleteMatchingPredicate(ctx context. } } - result = EdgeModulesListCompleteResult{ + result = ListCompleteResult{ Items: items, } return diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemoduleslistprovisioningtoken.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_listprovisioningtoken.go similarity index 77% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemoduleslistprovisioningtoken.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_listprovisioningtoken.go index 45f9a4a88608c..263164adb8379 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_edgemoduleslistprovisioningtoken.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/videoanalyzer/2021-05-01-preview/edgemodules/method_listprovisioningtoken.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type EdgeModulesListProvisioningTokenOperationResponse struct { +type ListProvisioningTokenOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *EdgeModuleProvisioningToken } -// EdgeModulesListProvisioningToken ... -func (c EdgeModulesClient) EdgeModulesListProvisioningToken(ctx context.Context, id EdgeModuleId, input ListProvisioningTokenInput) (result EdgeModulesListProvisioningTokenOperationResponse, err error) { +// ListProvisioningToken ... +func (c EdgeModulesClient) ListProvisioningToken(ctx context.Context, id EdgeModuleId, input ListProvisioningTokenInput) (result ListProvisioningTokenOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/README.md b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/README.md index 7422c534b6b93..d28522cdc96e7 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/README.md +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/README.md @@ -20,13 +20,13 @@ client.Client.Authorizer = authorizer ``` -### Example Usage: `ManagedAPIsClient.ManagedApisGet` +### Example Usage: `ManagedAPIsClient.Get` ```go ctx := context.TODO() id := managedapis.NewManagedApiID("12345678-1234-9876-4563-123456789012", "locationValue", "managedApiValue") -read, err := client.ManagedApisGet(ctx, id) +read, err := client.Get(ctx, id) if err != nil { // handle the error } @@ -36,13 +36,13 @@ if model := read.Model; model != nil { ``` -### Example Usage: `ManagedAPIsClient.ManagedApisList` +### Example Usage: `ManagedAPIsClient.List` ```go ctx := context.TODO() id := managedapis.NewLocationID("12345678-1234-9876-4563-123456789012", "locationValue") -read, err := client.ManagedApisList(ctx, id) +read, err := client.List(ctx, id) if err != nil { // handle the error } diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_managedapisget.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_get.go similarity index 82% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_managedapisget.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_get.go index 92f3aa46b856a..6d2b691d2b81a 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_managedapisget.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_get.go @@ -11,14 +11,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ManagedApisGetOperationResponse struct { +type GetOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ManagedApiDefinition } -// ManagedApisGet ... -func (c ManagedAPIsClient) ManagedApisGet(ctx context.Context, id ManagedApiId) (result ManagedApisGetOperationResponse, err error) { +// Get ... +func (c ManagedAPIsClient) Get(ctx context.Context, id ManagedApiId) (result GetOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_managedapislist.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_list.go similarity index 82% rename from vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_managedapislist.go rename to vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_list.go index 75d0c1496bd07..5c0bae4688955 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_managedapislist.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/web/2016-06-01/managedapis/method_list.go @@ -12,14 +12,14 @@ import ( // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See NOTICE.txt in the project root for license information. -type ManagedApisListOperationResponse struct { +type ListOperationResponse struct { HttpResponse *http.Response OData *odata.OData Model *ManagedApiDefinitionCollection } -// ManagedApisList ... -func (c ManagedAPIsClient) ManagedApisList(ctx context.Context, id LocationId) (result ManagedApisListOperationResponse, err error) { +// List ... +func (c ManagedAPIsClient) List(ctx context.Context, id LocationId) (result ListOperationResponse, err error) { opts := client.RequestOptions{ ContentType: "application/json; charset=utf-8", ExpectedStatusCodes: []int{ diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/webpubsub/2023-02-01/webpubsub/model_eventlistenerendpoint.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/webpubsub/2023-02-01/webpubsub/model_eventlistenerendpoint.go index 5ed1b93feabdc..ce6a41e868857 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/webpubsub/2023-02-01/webpubsub/model_eventlistenerendpoint.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/webpubsub/2023-02-01/webpubsub/model_eventlistenerendpoint.go @@ -12,7 +12,7 @@ import ( type EventListenerEndpoint interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEventListenerEndpointImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/webpubsub/2023-02-01/webpubsub/model_eventlistenerfilter.go b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/webpubsub/2023-02-01/webpubsub/model_eventlistenerfilter.go index a246071a240d4..113e67a18be5b 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/webpubsub/2023-02-01/webpubsub/model_eventlistenerfilter.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/resource-manager/webpubsub/2023-02-01/webpubsub/model_eventlistenerfilter.go @@ -12,7 +12,7 @@ import ( type EventListenerFilter interface { } -// RawModeOfTransitImpl is returned when the Discriminated Value +// RawEventListenerFilterImpl is returned when the Discriminated Value // doesn't match any of the defined types // NOTE: this should only be used when a type isn't defined for this type of Object (as a workaround) // and is used only for Deserialization (e.g. this cannot be used as a Request Payload). diff --git a/vendor/github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager/poller_lro.go b/vendor/github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager/poller_lro.go index 8e6898d3edb1d..680e6e616f510 100644 --- a/vendor/github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager/poller_lro.go +++ b/vendor/github.com/hashicorp/go-azure-sdk/sdk/client/resourcemanager/poller_lro.go @@ -183,6 +183,8 @@ func (p *longRunningOperationPoller) Poll(ctx context.Context) (result *pollers. "newReplicaGroup": pollers.PollingStatusInProgress, // AnalysisServices @ 2017-08-01 (Servers) returns `Provisioning` during Creation "Provisioning": pollers.PollingStatusInProgress, + // Resources @ 2020-10-01 (DeploymentScripts) returns `ProvisioningResources` during Creation + "ProvisioningResources": pollers.PollingStatusInProgress, // AnalysisServices @ 2017-08-01 (Servers Resume) returns `Resuming` during Update "Resuming": pollers.PollingStatusInProgress, // AnalysisServices @ 2017-08-01 (Servers Suspend) returns `Scaling` during Update @@ -234,8 +236,12 @@ func (p *longRunningOperationPoller) Poll(ctx context.Context) (result *pollers. } type operationResult struct { - Name *string `json:"name"` - StartTime *time.Time `json:"startTime"` + Name *string `json:"name"` + // Some APIs (such as CosmosDbPostgreSQLCluster) return a DateTime value that doesn't match RFC3339 + // as such we're intentionally parsing this as a string (for info) rather than as a time.Time due to: + // > parsing time "2023-08-11 01:58:30 +0000" as "2006-01-02T15:04:05Z07:00": + // > cannot parse " 01:58:30 +0000" as "T" + StartTime *string `json:"startTime"` Properties struct { // Some APIs (such as Storage) return the Resource Representation from the LRO API, as such we need to check provisioningState diff --git a/vendor/github.com/hashicorp/go-hclog/LICENSE b/vendor/github.com/hashicorp/go-hclog/LICENSE index abaf1e45f2a9e..9938fb50ee1d8 100644 --- a/vendor/github.com/hashicorp/go-hclog/LICENSE +++ b/vendor/github.com/hashicorp/go-hclog/LICENSE @@ -1,6 +1,4 @@ -MIT License - -Copyright (c) 2017 HashiCorp +Copyright (c) 2017 HashiCorp, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/github.com/hashicorp/go-hclog/colorize_unix.go b/vendor/github.com/hashicorp/go-hclog/colorize_unix.go index 99cc176a416b3..d00816b38fa06 100644 --- a/vendor/github.com/hashicorp/go-hclog/colorize_unix.go +++ b/vendor/github.com/hashicorp/go-hclog/colorize_unix.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + //go:build !windows // +build !windows @@ -7,23 +10,35 @@ import ( "github.com/mattn/go-isatty" ) +// hasFD is used to check if the writer has an Fd value to check +// if it's a terminal. +type hasFD interface { + Fd() uintptr +} + // setColorization will mutate the values of this logger // to appropriately configure colorization options. It provides // a wrapper to the output stream on Windows systems. func (l *intLogger) setColorization(opts *LoggerOptions) { - switch opts.Color { - case ColorOff: - fallthrough - case ForceColor: + if opts.Color != AutoColor { return - case AutoColor: - fi := l.checkWriterIsFile() - isUnixTerm := isatty.IsTerminal(fi.Fd()) - isCygwinTerm := isatty.IsCygwinTerminal(fi.Fd()) - isTerm := isUnixTerm || isCygwinTerm - if !isTerm { + } + + if sc, ok := l.writer.w.(SupportsColor); ok { + if !sc.SupportsColor() { l.headerColor = ColorOff l.writer.color = ColorOff } + return + } + + fi, ok := l.writer.w.(hasFD) + if !ok { + return + } + + if !isatty.IsTerminal(fi.Fd()) { + l.headerColor = ColorOff + l.writer.color = ColorOff } } diff --git a/vendor/github.com/hashicorp/go-hclog/colorize_windows.go b/vendor/github.com/hashicorp/go-hclog/colorize_windows.go index 26f8cef8d121a..2c3fb9ea6f0d6 100644 --- a/vendor/github.com/hashicorp/go-hclog/colorize_windows.go +++ b/vendor/github.com/hashicorp/go-hclog/colorize_windows.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + //go:build windows // +build windows @@ -7,32 +10,32 @@ import ( "os" colorable "github.com/mattn/go-colorable" - "github.com/mattn/go-isatty" ) // setColorization will mutate the values of this logger // to appropriately configure colorization options. It provides // a wrapper to the output stream on Windows systems. func (l *intLogger) setColorization(opts *LoggerOptions) { - switch opts.Color { - case ColorOff: + if opts.Color == ColorOff { + return + } + + fi, ok := l.writer.w.(*os.File) + if !ok { + l.writer.color = ColorOff + l.headerColor = ColorOff return - case ForceColor: - fi := l.checkWriterIsFile() - l.writer.w = colorable.NewColorable(fi) - case AutoColor: - fi := l.checkWriterIsFile() - isUnixTerm := isatty.IsTerminal(os.Stdout.Fd()) - isCygwinTerm := isatty.IsCygwinTerminal(os.Stdout.Fd()) - isTerm := isUnixTerm || isCygwinTerm - if !isTerm { - l.writer.color = ColorOff - l.headerColor = ColorOff - return - } - - if l.headerColor == ColorOff { - l.writer.w = colorable.NewColorable(fi) - } + } + + cfi := colorable.NewColorable(fi) + + // NewColorable detects if color is possible and if it's not, then it + // returns the original value. So we can test if we got the original + // value back to know if color is possible. + if cfi == fi { + l.writer.color = ColorOff + l.headerColor = ColorOff + } else { + l.writer.w = cfi } } diff --git a/vendor/github.com/hashicorp/go-hclog/context.go b/vendor/github.com/hashicorp/go-hclog/context.go index 7815f50194263..eb5aba556bb62 100644 --- a/vendor/github.com/hashicorp/go-hclog/context.go +++ b/vendor/github.com/hashicorp/go-hclog/context.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( diff --git a/vendor/github.com/hashicorp/go-hclog/exclude.go b/vendor/github.com/hashicorp/go-hclog/exclude.go index cfd4307a80351..4b73ba553dad5 100644 --- a/vendor/github.com/hashicorp/go-hclog/exclude.go +++ b/vendor/github.com/hashicorp/go-hclog/exclude.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( diff --git a/vendor/github.com/hashicorp/go-hclog/global.go b/vendor/github.com/hashicorp/go-hclog/global.go index 48ff1f3a4e909..a7403f593a93b 100644 --- a/vendor/github.com/hashicorp/go-hclog/global.go +++ b/vendor/github.com/hashicorp/go-hclog/global.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( diff --git a/vendor/github.com/hashicorp/go-hclog/interceptlogger.go b/vendor/github.com/hashicorp/go-hclog/interceptlogger.go index ff42f1bfc1dd4..e9b1c18853086 100644 --- a/vendor/github.com/hashicorp/go-hclog/interceptlogger.go +++ b/vendor/github.com/hashicorp/go-hclog/interceptlogger.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( diff --git a/vendor/github.com/hashicorp/go-hclog/intlogger.go b/vendor/github.com/hashicorp/go-hclog/intlogger.go index 89d26c9b01f75..b45064acf1a71 100644 --- a/vendor/github.com/hashicorp/go-hclog/intlogger.go +++ b/vendor/github.com/hashicorp/go-hclog/intlogger.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( @@ -8,7 +11,6 @@ import ( "fmt" "io" "log" - "os" "reflect" "runtime" "sort" @@ -86,6 +88,8 @@ type intLogger struct { // create subloggers with their own level setting independentLevels bool + + subloggerHook func(sub Logger) Logger } // New returns a configured logger. @@ -152,6 +156,7 @@ func newLogger(opts *LoggerOptions) *intLogger { independentLevels: opts.IndependentLevels, headerColor: headerColor, fieldColor: fieldColor, + subloggerHook: opts.SubloggerHook, } if opts.IncludeLocation { l.callerOffset = offsetIntLogger + opts.AdditionalLocationOffset @@ -167,6 +172,10 @@ func newLogger(opts *LoggerOptions) *intLogger { l.timeFormat = opts.TimeFormat } + if l.subloggerHook == nil { + l.subloggerHook = identityHook + } + l.setColorization(opts) atomic.StoreInt32(l.level, int32(level)) @@ -174,6 +183,10 @@ func newLogger(opts *LoggerOptions) *intLogger { return l } +func identityHook(logger Logger) Logger { + return logger +} + // offsetIntLogger is the stack frame offset in the call stack for the caller to // one of the Warn, Info, Log, etc methods. const offsetIntLogger = 3 @@ -775,7 +788,7 @@ func (l *intLogger) With(args ...interface{}) Logger { sl.implied = append(sl.implied, MissingKey, extra) } - return sl + return l.subloggerHook(sl) } // Create a new sub-Logger that a name decending from the current name. @@ -789,7 +802,7 @@ func (l *intLogger) Named(name string) Logger { sl.name = name } - return sl + return l.subloggerHook(sl) } // Create a new sub-Logger with an explicit name. This ignores the current @@ -800,7 +813,7 @@ func (l *intLogger) ResetNamed(name string) Logger { sl.name = name - return sl + return l.subloggerHook(sl) } func (l *intLogger) ResetOutput(opts *LoggerOptions) error { @@ -876,16 +889,6 @@ func (l *intLogger) StandardWriter(opts *StandardLoggerOptions) io.Writer { } } -// checks if the underlying io.Writer is a file, and -// panics if not. For use by colorization. -func (l *intLogger) checkWriterIsFile() *os.File { - fi, ok := l.writer.w.(*os.File) - if !ok { - panic("Cannot enable coloring of non-file Writers") - } - return fi -} - // Accept implements the SinkAdapter interface func (i *intLogger) Accept(name string, level Level, msg string, args ...interface{}) { i.log(name, level, msg, args...) diff --git a/vendor/github.com/hashicorp/go-hclog/logger.go b/vendor/github.com/hashicorp/go-hclog/logger.go index 3cdb2837d7981..947ac0c9afc92 100644 --- a/vendor/github.com/hashicorp/go-hclog/logger.go +++ b/vendor/github.com/hashicorp/go-hclog/logger.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( @@ -89,6 +92,13 @@ const ( ForceColor ) +// SupportsColor is an optional interface that can be implemented by the output +// value. If implemented and SupportsColor() returns true, then AutoColor will +// enable colorization. +type SupportsColor interface { + SupportsColor() bool +} + // LevelFromString returns a Level type for the named log level, or "NoLevel" if // the level string is invalid. This facilitates setting the log level via // config or environment variable by name in a predictable way. @@ -292,6 +302,13 @@ type LoggerOptions struct { // logger will not affect any subloggers, and SetLevel on any subloggers // will not affect the parent or sibling loggers. IndependentLevels bool + + // SubloggerHook registers a function that is called when a sublogger via + // Named, With, or ResetNamed is created. If defined, the function is passed + // the newly created Logger and the returned Logger is returned from the + // original function. This option allows customization via interception and + // wrapping of Logger instances. + SubloggerHook func(sub Logger) Logger } // InterceptLogger describes the interface for using a logger diff --git a/vendor/github.com/hashicorp/go-hclog/nulllogger.go b/vendor/github.com/hashicorp/go-hclog/nulllogger.go index 55e89dd31cad8..d43da809eb96a 100644 --- a/vendor/github.com/hashicorp/go-hclog/nulllogger.go +++ b/vendor/github.com/hashicorp/go-hclog/nulllogger.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( diff --git a/vendor/github.com/hashicorp/go-hclog/stdlog.go b/vendor/github.com/hashicorp/go-hclog/stdlog.go index 641f20ccbcc80..03739b61fa76e 100644 --- a/vendor/github.com/hashicorp/go-hclog/stdlog.go +++ b/vendor/github.com/hashicorp/go-hclog/stdlog.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( diff --git a/vendor/github.com/hashicorp/go-hclog/writer.go b/vendor/github.com/hashicorp/go-hclog/writer.go index 421a1f06c0ba8..4ee219bf0ce75 100644 --- a/vendor/github.com/hashicorp/go-hclog/writer.go +++ b/vendor/github.com/hashicorp/go-hclog/writer.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MIT + package hclog import ( diff --git a/vendor/github.com/hashicorp/go-plugin/CHANGELOG.md b/vendor/github.com/hashicorp/go-plugin/CHANGELOG.md index d40ad613615e0..ffcfe15431bf3 100644 --- a/vendor/github.com/hashicorp/go-plugin/CHANGELOG.md +++ b/vendor/github.com/hashicorp/go-plugin/CHANGELOG.md @@ -1,3 +1,47 @@ +## v1.5.1 + +BUGS: + +* server: `PLUGIN_UNIX_SOCKET_DIR` is consistently used for gRPC broker sockets as well as the initial socket [[GH-277](https://github.com/hashicorp/go-plugin/pull/277)] + +ENHANCEMENTS: + +* client: New `UnixSocketConfig` option in `ClientConfig` to support making the client's Unix sockets group-writable [[GH-277](https://github.com/hashicorp/go-plugin/pull/277)] + +## v1.5.0 + +ENHANCEMENTS: + +* client: New `runner.Runner` interface to support clients providing custom plugin command runner implementations [[GH-270](https://github.com/hashicorp/go-plugin/pull/270)] + * Accessible via new `ClientConfig` field `RunnerFunc`, which is mutually exclusive with `Cmd` and `Reattach` + * Reattaching support via `ReattachConfig` field `ReattachFunc` +* client: New `ClientConfig` field `SkipHostEnv` allows omitting the client process' own environment variables from the plugin command's environment [[GH-270](https://github.com/hashicorp/go-plugin/pull/270)] +* client: Add `ID()` method to `Client` for retrieving the pid or other unique ID of a running plugin [[GH-272](https://github.com/hashicorp/go-plugin/pull/272)] +* server: Support setting the directory to create Unix sockets in with the env var `PLUGIN_UNIX_SOCKET_DIR` [[GH-270](https://github.com/hashicorp/go-plugin/pull/270)] +* server: Support setting group write permission and a custom group name or gid owner with the env var `PLUGIN_UNIX_SOCKET_GROUP` [[GH-270](https://github.com/hashicorp/go-plugin/pull/270)] + +## v1.4.11-rc1 + +ENHANCEMENTS: + +* deps: bump protoreflect to v1.15.1 [[GH-264](https://github.com/hashicorp/go-plugin/pull/264)] + +## v1.4.10 + +BUG FIXES: + +* additional notes: ensure to close files [[GH-241](https://github.com/hashicorp/go-plugin/pull/241)] + +ENHANCEMENTS: + +* deps: Remove direct dependency on golang.org/x/net [[GH-240](https://github.com/hashicorp/go-plugin/pull/240)] + +## v1.4.9 + +ENHANCEMENTS: + +* client: Remove log warning introduced in 1.4.5 when SecureConfig is nil. [[GH-238](https://github.com/hashicorp/go-plugin/pull/238)] + ## v1.4.8 BUG FIXES: @@ -33,5 +77,3 @@ BUG FIXES: * Bidirectional communication: fix bidirectional communication when AutoMTLS is enabled [[GH-193](https://github.com/hashicorp/go-plugin/pull/193)] * RPC: Trim a spurious log message for plugins using RPC [[GH-186](https://github.com/hashicorp/go-plugin/pull/186)] - - diff --git a/vendor/github.com/hashicorp/go-plugin/README.md b/vendor/github.com/hashicorp/go-plugin/README.md index 39391f24fe425..50baee06e157d 100644 --- a/vendor/github.com/hashicorp/go-plugin/README.md +++ b/vendor/github.com/hashicorp/go-plugin/README.md @@ -4,8 +4,9 @@ that has been in use by HashiCorp tooling for over 4 years. While initially created for [Packer](https://www.packer.io), it is additionally in use by [Terraform](https://www.terraform.io), [Nomad](https://www.nomadproject.io), -[Vault](https://www.vaultproject.io), and -[Boundary](https://www.boundaryproject.io). +[Vault](https://www.vaultproject.io), +[Boundary](https://www.boundaryproject.io), +and [Waypoint](https://www.waypointproject.io). While the plugin system is over RPC, it is currently only designed to work over a local [reliable] network. Plugins over a real network are not supported diff --git a/vendor/github.com/hashicorp/go-plugin/client.go b/vendor/github.com/hashicorp/go-plugin/client.go index d0baf7e8d76f4..b6024afce0e12 100644 --- a/vendor/github.com/hashicorp/go-plugin/client.go +++ b/vendor/github.com/hashicorp/go-plugin/client.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( @@ -23,17 +26,11 @@ import ( "time" "github.com/hashicorp/go-hclog" + "github.com/hashicorp/go-plugin/internal/cmdrunner" + "github.com/hashicorp/go-plugin/runner" "google.golang.org/grpc" ) -const unrecognizedRemotePluginMessage = `Unrecognized remote plugin message: %s -This usually means - the plugin was not compiled for this architecture, - the plugin is missing dynamic-link libraries necessary to run, - the plugin is not executable by this process due to file permissions, or - the plugin failed to negotiate the initial go-plugin protocol handshake -%s` - // If this is 1, then we've called CleanupClients. This can be used // by plugin RPC implementations to change error behavior since you // can expected network connection errors at this point. This should be @@ -49,7 +46,7 @@ var managedClientsLock sync.Mutex var ( // ErrProcessNotFound is returned when a client is instantiated to // reattach to an existing process and it isn't found. - ErrProcessNotFound = errors.New("Reattachment process not found") + ErrProcessNotFound = cmdrunner.ErrProcessNotFound // ErrChecksumsDoNotMatch is returned when binary's checksum doesn't match // the one provided in the SecureConfig. @@ -84,7 +81,7 @@ type Client struct { exited bool l sync.Mutex address net.Addr - process *os.Process + runner runner.AttachedRunner client ClientProtocol protocol Protocol logger hclog.Logger @@ -103,6 +100,8 @@ type Client struct { // processKilled is used for testing only, to flag when the process was // forcefully killed. processKilled bool + + unixSocketCfg UnixSocketConfig } // NegotiatedVersion returns the protocol version negotiated with the server. @@ -111,6 +110,19 @@ func (c *Client) NegotiatedVersion() int { return c.negotiatedVersion } +// ID returns a unique ID for the running plugin. By default this is the process +// ID (pid), but it could take other forms if RunnerFunc was provided. +func (c *Client) ID() string { + c.l.Lock() + defer c.l.Unlock() + + if c.runner != nil { + return c.runner.ID() + } + + return "" +} + // ClientConfig is the configuration used to initialize a new // plugin client. After being used to initialize a plugin client, // that configuration must not be modified again. @@ -138,6 +150,13 @@ type ClientConfig struct { Cmd *exec.Cmd Reattach *ReattachConfig + // RunnerFunc allows consumers to provide their own implementation of + // runner.Runner and control the context within which a plugin is executed. + // The cmd argument will have been copied from the config and populated with + // environment variables that a go-plugin server expects to read such as + // AutoMTLS certs and the magic cookie key. + RunnerFunc func(l hclog.Logger, cmd *exec.Cmd, tmpDir string) (runner.Runner, error) + // SecureConfig is configuration for verifying the integrity of the // executable. It can not be used with Reattach. SecureConfig *SecureConfig @@ -217,6 +236,32 @@ type ClientConfig struct { // to create gRPC connections. This only affects plugins using the gRPC // protocol. GRPCDialOptions []grpc.DialOption + + // SkipHostEnv allows plugins to run without inheriting the parent process' + // environment variables. + SkipHostEnv bool + + // UnixSocketConfig configures additional options for any Unix sockets + // that are created. Not normally required. Not supported on Windows. + UnixSocketConfig *UnixSocketConfig +} + +type UnixSocketConfig struct { + // If set, go-plugin will change the owner of any Unix sockets created to + // this group, and set them as group-writable. Can be a name or gid. The + // client process must be a member of this group or chown will fail. + Group string + + // The directory to create Unix sockets in. Internally managed by go-plugin + // and deleted when the plugin is killed. + directory string +} + +func unixSocketConfigFromEnv() UnixSocketConfig { + return UnixSocketConfig{ + Group: os.Getenv(EnvUnixSocketGroup), + directory: os.Getenv(EnvUnixSocketDir), + } } // ReattachConfig is used to configure a client to reattach to an @@ -228,6 +273,11 @@ type ReattachConfig struct { Addr net.Addr Pid int + // ReattachFunc allows consumers to provide their own implementation of + // runner.AttachedRunner and attach to something other than a plain process. + // At least one of Pid or ReattachFunc must be set. + ReattachFunc runner.ReattachFunc + // Test is set to true if this is reattaching to to a plugin in "test mode" // (see ServeConfig.Test). In this mode, client.Kill will NOT kill the // process and instead will rely on the plugin to terminate itself. This @@ -307,7 +357,7 @@ func CleanupClients() { // plugin and gets the address for the RPC connection. // // The client must be cleaned up at some point by calling Kill(). If -// the client is a managed client (created with NewManagedClient) you +// the client is a managed client (created with ClientConfig.Managed) you // can just call CleanupClients at the end of your program and they will // be properly cleaned. func NewClient(config *ClientConfig) (c *Client) { @@ -415,12 +465,13 @@ func (c *Client) killed() bool { func (c *Client) Kill() { // Grab a lock to read some private fields. c.l.Lock() - process := c.process + runner := c.runner addr := c.address + hostSocketDir := c.unixSocketCfg.directory c.l.Unlock() - // If there is no process, there is nothing to kill. - if process == nil { + // If there is no runner or ID, there is nothing to kill. + if runner == nil || runner.ID() == "" { return } @@ -428,10 +479,14 @@ func (c *Client) Kill() { // Wait for the all client goroutines to finish. c.clientWaitGroup.Wait() + if hostSocketDir != "" { + os.RemoveAll(hostSocketDir) + } + // Make sure there is no reference to the old process after it has been // killed. c.l.Lock() - c.process = nil + c.runner = nil c.l.Unlock() }() @@ -474,23 +529,15 @@ func (c *Client) Kill() { // If graceful exiting failed, just kill it c.logger.Warn("plugin failed to exit gracefully") - process.Kill() + if err := runner.Kill(context.Background()); err != nil { + c.logger.Debug("error killing plugin", "error", err) + } c.l.Lock() c.processKilled = true c.l.Unlock() } -// peTypes is a list of Portable Executable (PE) machine types from https://learn.microsoft.com/en-us/windows/win32/debug/pe-format -// mapped to GOARCH types. It is not comprehensive, and only includes machine types that Go supports. -var peTypes = map[uint16]string{ - 0x14c: "386", - 0x1c0: "arm", - 0x6264: "loong64", - 0x8664: "amd64", - 0xaa64: "arm64", -} - // Start the underlying subprocess, communicating with it to negotiate // a port for RPC connections, and returning the address to connect via RPC. // @@ -509,14 +556,21 @@ func (c *Client) Start() (addr net.Addr, err error) { // this in a {} for scoping reasons, and hopeful that the escape // analysis will pop the stack here. { - cmdSet := c.config.Cmd != nil - attachSet := c.config.Reattach != nil - secureSet := c.config.SecureConfig != nil - if cmdSet == attachSet { - return nil, fmt.Errorf("Only one of Cmd or Reattach must be set") + var mutuallyExclusiveOptions int + if c.config.Cmd != nil { + mutuallyExclusiveOptions += 1 + } + if c.config.Reattach != nil { + mutuallyExclusiveOptions += 1 + } + if c.config.RunnerFunc != nil { + mutuallyExclusiveOptions += 1 + } + if mutuallyExclusiveOptions != 1 { + return nil, fmt.Errorf("exactly one of Cmd, or Reattach, or RunnerFunc must be set") } - if secureSet && attachSet { + if c.config.SecureConfig != nil && c.config.Reattach != nil { return nil, ErrSecureConfigAndReattach } } @@ -552,22 +606,19 @@ func (c *Client) Start() (addr net.Addr, err error) { } cmd := c.config.Cmd - cmd.Env = append(cmd.Env, os.Environ()...) - cmd.Env = append(cmd.Env, env...) - cmd.Stdin = os.Stdin - - cmdStdout, err := cmd.StdoutPipe() - if err != nil { - return nil, err + if cmd == nil { + // It's only possible to get here if RunnerFunc is non-nil, but we'll + // still use cmd as a spec to populate metadata for the external + // implementation to consume. + cmd = exec.Command("") } - cmdStderr, err := cmd.StderrPipe() - if err != nil { - return nil, err + if !c.config.SkipHostEnv { + cmd.Env = append(cmd.Env, os.Environ()...) } + cmd.Env = append(cmd.Env, env...) + cmd.Stdin = os.Stdin - if c.config.SecureConfig == nil { - c.logger.Warn("plugin configured with a nil SecureConfig") - } else { + if c.config.SecureConfig != nil { if ok, err := c.config.SecureConfig.Check(cmd.Path); err != nil { return nil, fmt.Errorf("error verifying checksum: %s", err) } else if !ok { @@ -600,26 +651,62 @@ func (c *Client) Start() (addr net.Addr, err error) { } } - c.logger.Debug("starting plugin", "path", cmd.Path, "args", cmd.Args) - err = cmd.Start() - if err != nil { - return + if c.config.UnixSocketConfig != nil { + c.unixSocketCfg.Group = c.config.UnixSocketConfig.Group } - // Set the process - c.process = cmd.Process - c.logger.Debug("plugin started", "path", cmd.Path, "pid", c.process.Pid) + if c.unixSocketCfg.Group != "" { + cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvUnixSocketGroup, c.unixSocketCfg.Group)) + } + + var runner runner.Runner + switch { + case c.config.RunnerFunc != nil: + c.unixSocketCfg.directory, err = os.MkdirTemp("", "plugin-dir") + if err != nil { + return nil, err + } + // os.MkdirTemp creates folders with 0o700, so if we have a group + // configured we need to make it group-writable. + if c.unixSocketCfg.Group != "" { + err = setGroupWritable(c.unixSocketCfg.directory, c.unixSocketCfg.Group, 0o770) + if err != nil { + return nil, err + } + } + cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvUnixSocketDir, c.unixSocketCfg.directory)) + c.logger.Trace("created temporary directory for unix sockets", "dir", c.unixSocketCfg.directory) + + runner, err = c.config.RunnerFunc(c.logger, cmd, c.unixSocketCfg.directory) + if err != nil { + return nil, err + } + default: + runner, err = cmdrunner.NewCmdRunner(c.logger, cmd) + if err != nil { + return nil, err + } + + } + + c.runner = runner + startCtx, startCtxCancel := context.WithTimeout(context.Background(), c.config.StartTimeout) + defer startCtxCancel() + err = runner.Start(startCtx) + if err != nil { + return nil, err + } // Make sure the command is properly cleaned up if there is an error defer func() { - r := recover() + rErr := recover() - if err != nil || r != nil { - cmd.Process.Kill() + if err != nil || rErr != nil { + runner.Kill(context.Background()) } - if r != nil { - panic(r) + if rErr != nil { + panic(rErr) } }() @@ -630,7 +717,7 @@ func (c *Client) Start() (addr net.Addr, err error) { c.clientWaitGroup.Add(1) c.stderrWaitGroup.Add(1) // logStderr calls Done() - go c.logStderr(cmdStderr) + go c.logStderr(runner.Name(), runner.Stderr()) c.clientWaitGroup.Add(1) go func() { @@ -639,29 +726,17 @@ func (c *Client) Start() (addr net.Addr, err error) { defer c.clientWaitGroup.Done() - // get the cmd info early, since the process information will be removed - // in Kill. - pid := c.process.Pid - path := cmd.Path - // wait to finish reading from stderr since the stderr pipe reader // will be closed by the subsequent call to cmd.Wait(). c.stderrWaitGroup.Wait() // Wait for the command to end. - err := cmd.Wait() - - msgArgs := []interface{}{ - "path", path, - "pid", pid, - } + err := runner.Wait(context.Background()) if err != nil { - msgArgs = append(msgArgs, - []interface{}{"error", err.Error()}...) - c.logger.Error("plugin process exited", msgArgs...) + c.logger.Error("plugin process exited", "plugin", runner.Name(), "id", runner.ID(), "error", err.Error()) } else { // Log and make sure to flush the logs right away - c.logger.Info("plugin process exited", msgArgs...) + c.logger.Info("plugin process exited", "plugin", runner.Name(), "id", runner.ID()) } os.Stderr.Sync() @@ -680,10 +755,13 @@ func (c *Client) Start() (addr net.Addr, err error) { defer c.clientWaitGroup.Done() defer close(linesCh) - scanner := bufio.NewScanner(cmdStdout) + scanner := bufio.NewScanner(runner.Stdout()) for scanner.Scan() { linesCh <- scanner.Text() } + if scanner.Err() != nil { + c.logger.Error("error encountered while scanning stdout", "error", scanner.Err()) + } }() // Make sure after we exit we read the lines from stdout forever @@ -703,19 +781,27 @@ func (c *Client) Start() (addr net.Addr, err error) { timeout := time.After(c.config.StartTimeout) // Start looking for the address - c.logger.Debug("waiting for RPC address", "path", cmd.Path) + c.logger.Debug("waiting for RPC address", "plugin", runner.Name()) select { case <-timeout: err = errors.New("timeout while waiting for plugin to start") case <-c.doneCtx.Done(): err = errors.New("plugin exited before we could connect") - case line := <-linesCh: + case line, ok := <-linesCh: // Trim the line and split by "|" in order to get the parts of // the output. line = strings.TrimSpace(line) parts := strings.SplitN(line, "|", 6) if len(parts) < 4 { - err = fmt.Errorf(unrecognizedRemotePluginMessage, line, additionalNotesAboutCommand(cmd.Path)) + errText := fmt.Sprintf("Unrecognized remote plugin message: %s", line) + if !ok { + errText += "\n" + "Failed to read any lines from plugin's stdout" + } + additionalNotes := runner.Diagnose(context.Background()) + if additionalNotes != "" { + errText += "\n" + additionalNotes + } + err = errors.New(errText) return } @@ -750,13 +836,18 @@ func (c *Client) Start() (addr net.Addr, err error) { c.negotiatedVersion = version c.logger.Debug("using plugin", "version", version) - switch parts[2] { + network, address, err := runner.PluginToHost(parts[2], parts[3]) + if err != nil { + return addr, err + } + + switch network { case "tcp": - addr, err = net.ResolveTCPAddr("tcp", parts[3]) + addr, err = net.ResolveTCPAddr("tcp", address) case "unix": - addr, err = net.ResolveUnixAddr("unix", parts[3]) + addr, err = net.ResolveUnixAddr("unix", address) default: - err = fmt.Errorf("Unknown address type: %s", parts[3]) + err = fmt.Errorf("Unknown address type: %s", address) } // If we have a server type, then record that. We default to net/rpc @@ -817,39 +908,30 @@ func (c *Client) loadServerCert(cert string) error { } func (c *Client) reattach() (net.Addr, error) { - // Verify the process still exists. If not, then it is an error - p, err := os.FindProcess(c.config.Reattach.Pid) - if err != nil { - // On Unix systems, FindProcess never returns an error. - // On Windows, for non-existent pids it returns: - // os.SyscallError - 'OpenProcess: the paremter is incorrect' - return nil, ErrProcessNotFound + reattachFunc := c.config.Reattach.ReattachFunc + // For backwards compatibility default to cmdrunner.ReattachFunc + if reattachFunc == nil { + reattachFunc = cmdrunner.ReattachFunc(c.config.Reattach.Pid, c.config.Reattach.Addr) } - // Attempt to connect to the addr since on Unix systems FindProcess - // doesn't actually return an error if it can't find the process. - conn, err := net.Dial( - c.config.Reattach.Addr.Network(), - c.config.Reattach.Addr.String()) + r, err := reattachFunc() if err != nil { - p.Kill() - return nil, ErrProcessNotFound + return nil, err } - conn.Close() // Create a context for when we kill c.doneCtx, c.ctxCancel = context.WithCancel(context.Background()) c.clientWaitGroup.Add(1) // Goroutine to mark exit status - go func(pid int) { + go func(r runner.AttachedRunner) { defer c.clientWaitGroup.Done() // ensure the context is cancelled when we're done defer c.ctxCancel() // Wait for the process to die - pidWait(pid) + r.Wait(context.Background()) // Log so we can see it c.logger.Debug("reattached plugin process exited") @@ -858,7 +940,7 @@ func (c *Client) reattach() (net.Addr, error) { c.l.Lock() defer c.l.Unlock() c.exited = true - }(p.Pid) + }(r) // Set the address and protocol c.address = c.config.Reattach.Addr @@ -876,7 +958,7 @@ func (c *Client) reattach() (net.Addr, error) { // process being killed (the only purpose we have for c.process), since // in test mode the process is responsible for exiting on its own. if !c.config.Reattach.Test { - c.process = p + c.runner = r } return c.address, nil @@ -915,6 +997,9 @@ func (c *Client) checkProtoVersion(protoVersion string) (int, PluginSet, error) // // If this returns nil then the process hasn't been started yet. Please // call Start or Client before calling this. +// +// Clients who specified a RunnerFunc will need to populate their own +// ReattachFunc in the returned ReattachConfig before it can be used. func (c *Client) ReattachConfig() *ReattachConfig { c.l.Lock() defer c.l.Unlock() @@ -932,11 +1017,16 @@ func (c *Client) ReattachConfig() *ReattachConfig { return c.config.Reattach } - return &ReattachConfig{ + reattach := &ReattachConfig{ Protocol: c.protocol, Addr: c.address, - Pid: c.config.Cmd.Process.Pid, } + + if c.config.Cmd != nil && c.config.Cmd.Process != nil { + reattach.Pid = c.config.Cmd.Process.Pid + } + + return reattach } // Protocol returns the protocol of server on the remote end. This will @@ -988,10 +1078,10 @@ func (c *Client) dialer(_ string, timeout time.Duration) (net.Conn, error) { var stdErrBufferSize = 64 * 1024 -func (c *Client) logStderr(r io.Reader) { +func (c *Client) logStderr(name string, r io.Reader) { defer c.clientWaitGroup.Done() defer c.stderrWaitGroup.Done() - l := c.logger.Named(filepath.Base(c.config.Cmd.Path)) + l := c.logger.Named(filepath.Base(name)) reader := bufio.NewReaderSize(r, stdErrBufferSize) // continuation indicates the previous line was a prefix diff --git a/vendor/github.com/hashicorp/go-plugin/constants.go b/vendor/github.com/hashicorp/go-plugin/constants.go new file mode 100644 index 0000000000000..b66fa79993ee4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-plugin/constants.go @@ -0,0 +1,9 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package plugin + +const ( + EnvUnixSocketDir = "PLUGIN_UNIX_SOCKET_DIR" + EnvUnixSocketGroup = "PLUGIN_UNIX_SOCKET_GROUP" +) diff --git a/vendor/github.com/hashicorp/go-plugin/discover.go b/vendor/github.com/hashicorp/go-plugin/discover.go index d22c566ed506b..c5b96242b1a78 100644 --- a/vendor/github.com/hashicorp/go-plugin/discover.go +++ b/vendor/github.com/hashicorp/go-plugin/discover.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/error.go b/vendor/github.com/hashicorp/go-plugin/error.go index 22a7baa6a0d85..e62a21913f404 100644 --- a/vendor/github.com/hashicorp/go-plugin/error.go +++ b/vendor/github.com/hashicorp/go-plugin/error.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin // This is a type that wraps error types so that they can be messaged diff --git a/vendor/github.com/hashicorp/go-plugin/grpc_broker.go b/vendor/github.com/hashicorp/go-plugin/grpc_broker.go index daf142d1709e1..b86561a017f07 100644 --- a/vendor/github.com/hashicorp/go-plugin/grpc_broker.go +++ b/vendor/github.com/hashicorp/go-plugin/grpc_broker.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( @@ -12,6 +15,7 @@ import ( "time" "github.com/hashicorp/go-plugin/internal/plugin" + "github.com/hashicorp/go-plugin/runner" "github.com/oklog/run" "google.golang.org/grpc" @@ -264,6 +268,9 @@ type GRPCBroker struct { doneCh chan struct{} o sync.Once + unixSocketCfg UnixSocketConfig + addrTranslator runner.AddrTranslator + sync.Mutex } @@ -272,12 +279,15 @@ type gRPCBrokerPending struct { doneCh chan struct{} } -func newGRPCBroker(s streamer, tls *tls.Config) *GRPCBroker { +func newGRPCBroker(s streamer, tls *tls.Config, unixSocketCfg UnixSocketConfig, addrTranslator runner.AddrTranslator) *GRPCBroker { return &GRPCBroker{ streamer: s, streams: make(map[uint32]*gRPCBrokerPending), tls: tls, doneCh: make(chan struct{}), + + unixSocketCfg: unixSocketCfg, + addrTranslator: addrTranslator, } } @@ -285,15 +295,23 @@ func newGRPCBroker(s streamer, tls *tls.Config) *GRPCBroker { // // This should not be called multiple times with the same ID at one time. func (b *GRPCBroker) Accept(id uint32) (net.Listener, error) { - listener, err := serverListener() + listener, err := serverListener(b.unixSocketCfg) if err != nil { return nil, err } + advertiseNet := listener.Addr().Network() + advertiseAddr := listener.Addr().String() + if b.addrTranslator != nil { + advertiseNet, advertiseAddr, err = b.addrTranslator.HostToPlugin(advertiseNet, advertiseAddr) + if err != nil { + return nil, err + } + } err = b.streamer.Send(&plugin.ConnInfo{ ServiceId: id, - Network: listener.Addr().Network(), - Address: listener.Addr().String(), + Network: advertiseNet, + Address: advertiseAddr, }) if err != nil { return nil, err @@ -376,12 +394,20 @@ func (b *GRPCBroker) Dial(id uint32) (conn *grpc.ClientConn, err error) { return nil, fmt.Errorf("timeout waiting for connection info") } + network, address := c.Network, c.Address + if b.addrTranslator != nil { + network, address, err = b.addrTranslator.PluginToHost(network, address) + if err != nil { + return nil, err + } + } + var addr net.Addr - switch c.Network { + switch network { case "tcp": - addr, err = net.ResolveTCPAddr("tcp", c.Address) + addr, err = net.ResolveTCPAddr("tcp", address) case "unix": - addr, err = net.ResolveUnixAddr("unix", c.Address) + addr, err = net.ResolveUnixAddr("unix", address) default: err = fmt.Errorf("Unknown address type: %s", c.Address) } diff --git a/vendor/github.com/hashicorp/go-plugin/grpc_client.go b/vendor/github.com/hashicorp/go-plugin/grpc_client.go index 842903c922b47..583e42503c802 100644 --- a/vendor/github.com/hashicorp/go-plugin/grpc_client.go +++ b/vendor/github.com/hashicorp/go-plugin/grpc_client.go @@ -1,6 +1,10 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( + "context" "crypto/tls" "fmt" "math" @@ -8,7 +12,6 @@ import ( "time" "github.com/hashicorp/go-plugin/internal/plugin" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/grpc/health/grpc_health_v1" @@ -60,7 +63,7 @@ func newGRPCClient(doneCtx context.Context, c *Client) (*GRPCClient, error) { // Start the broker. brokerGRPCClient := newGRPCBrokerClient(conn) - broker := newGRPCBroker(brokerGRPCClient, c.config.TLSConfig) + broker := newGRPCBroker(brokerGRPCClient, c.config.TLSConfig, c.unixSocketCfg, c.runner) go broker.Run() go brokerGRPCClient.StartStream() diff --git a/vendor/github.com/hashicorp/go-plugin/grpc_controller.go b/vendor/github.com/hashicorp/go-plugin/grpc_controller.go index 1a8a8e70ea4c3..2085356cd3438 100644 --- a/vendor/github.com/hashicorp/go-plugin/grpc_controller.go +++ b/vendor/github.com/hashicorp/go-plugin/grpc_controller.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/grpc_server.go b/vendor/github.com/hashicorp/go-plugin/grpc_server.go index 54b061cc36545..369f958aeea41 100644 --- a/vendor/github.com/hashicorp/go-plugin/grpc_server.go +++ b/vendor/github.com/hashicorp/go-plugin/grpc_server.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( @@ -81,7 +84,7 @@ func (s *GRPCServer) Init() error { // Register the broker service brokerServer := newGRPCBrokerServer() plugin.RegisterGRPCBrokerServer(s.server, brokerServer) - s.broker = newGRPCBroker(brokerServer, s.TLS) + s.broker = newGRPCBroker(brokerServer, s.TLS, unixSocketConfigFromEnv(), nil) go s.broker.Run() // Register the controller diff --git a/vendor/github.com/hashicorp/go-plugin/grpc_stdio.go b/vendor/github.com/hashicorp/go-plugin/grpc_stdio.go index a582181505fe6..ae06c11631377 100644 --- a/vendor/github.com/hashicorp/go-plugin/grpc_stdio.go +++ b/vendor/github.com/hashicorp/go-plugin/grpc_stdio.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/addr_translator.go b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/addr_translator.go new file mode 100644 index 0000000000000..1854d2dd5319d --- /dev/null +++ b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/addr_translator.go @@ -0,0 +1,16 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package cmdrunner + +// addrTranslator implements stateless identity functions, as the host and plugin +// run in the same context wrt Unix and network addresses. +type addrTranslator struct{} + +func (*addrTranslator) PluginToHost(pluginNet, pluginAddr string) (string, string, error) { + return pluginNet, pluginAddr, nil +} + +func (*addrTranslator) HostToPlugin(hostNet, hostAddr string) (string, string, error) { + return hostNet, hostAddr, nil +} diff --git a/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/cmd_reattach.go b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/cmd_reattach.go new file mode 100644 index 0000000000000..dce1a86a88eb0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/cmd_reattach.go @@ -0,0 +1,63 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package cmdrunner + +import ( + "context" + "fmt" + "net" + "os" + + "github.com/hashicorp/go-plugin/runner" +) + +// ReattachFunc returns a function that allows reattaching to a plugin running +// as a plain process. The process may or may not be a child process. +func ReattachFunc(pid int, addr net.Addr) runner.ReattachFunc { + return func() (runner.AttachedRunner, error) { + p, err := os.FindProcess(pid) + if err != nil { + // On Unix systems, FindProcess never returns an error. + // On Windows, for non-existent pids it returns: + // os.SyscallError - 'OpenProcess: the paremter is incorrect' + return nil, ErrProcessNotFound + } + + // Attempt to connect to the addr since on Unix systems FindProcess + // doesn't actually return an error if it can't find the process. + conn, err := net.Dial(addr.Network(), addr.String()) + if err != nil { + p.Kill() + return nil, ErrProcessNotFound + } + conn.Close() + + return &CmdAttachedRunner{ + pid: pid, + process: p, + }, nil + } +} + +// CmdAttachedRunner is mostly a subset of CmdRunner, except the Wait function +// does not assume the process is a child of the host process, and so uses a +// different implementation to wait on the process. +type CmdAttachedRunner struct { + pid int + process *os.Process + + addrTranslator +} + +func (c *CmdAttachedRunner) Wait(_ context.Context) error { + return pidWait(c.pid) +} + +func (c *CmdAttachedRunner) Kill(_ context.Context) error { + return c.process.Kill() +} + +func (c *CmdAttachedRunner) ID() string { + return fmt.Sprintf("%d", c.pid) +} diff --git a/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/cmd_runner.go b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/cmd_runner.go new file mode 100644 index 0000000000000..b26fea928e28e --- /dev/null +++ b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/cmd_runner.go @@ -0,0 +1,129 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package cmdrunner + +import ( + "context" + "errors" + "fmt" + "io" + "os" + "os/exec" + + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/go-plugin/runner" +) + +var ( + _ runner.Runner = (*CmdRunner)(nil) + + // ErrProcessNotFound is returned when a client is instantiated to + // reattach to an existing process and it isn't found. + ErrProcessNotFound = errors.New("Reattachment process not found") +) + +const unrecognizedRemotePluginMessage = `This usually means + the plugin was not compiled for this architecture, + the plugin is missing dynamic-link libraries necessary to run, + the plugin is not executable by this process due to file permissions, or + the plugin failed to negotiate the initial go-plugin protocol handshake +%s` + +// CmdRunner implements the runner.Runner interface. It mostly just passes through +// to exec.Cmd methods. +type CmdRunner struct { + logger hclog.Logger + cmd *exec.Cmd + + stdout io.ReadCloser + stderr io.ReadCloser + + // Cmd info is persisted early, since the process information will be removed + // after Kill is called. + path string + pid int + + addrTranslator +} + +// NewCmdRunner returns an implementation of runner.Runner for running a plugin +// as a subprocess. It must be passed a cmd that hasn't yet been started. +func NewCmdRunner(logger hclog.Logger, cmd *exec.Cmd) (*CmdRunner, error) { + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, err + } + + stderr, err := cmd.StderrPipe() + if err != nil { + return nil, err + } + + return &CmdRunner{ + logger: logger, + cmd: cmd, + stdout: stdout, + stderr: stderr, + path: cmd.Path, + }, nil +} + +func (c *CmdRunner) Start(_ context.Context) error { + c.logger.Debug("starting plugin", "path", c.cmd.Path, "args", c.cmd.Args) + err := c.cmd.Start() + if err != nil { + return err + } + + c.pid = c.cmd.Process.Pid + c.logger.Debug("plugin started", "path", c.path, "pid", c.pid) + return nil +} + +func (c *CmdRunner) Wait(_ context.Context) error { + return c.cmd.Wait() +} + +func (c *CmdRunner) Kill(_ context.Context) error { + if c.cmd.Process != nil { + err := c.cmd.Process.Kill() + // Swallow ErrProcessDone, we support calling Kill multiple times. + if !errors.Is(err, os.ErrProcessDone) { + return err + } + return nil + } + + return nil +} + +func (c *CmdRunner) Stdout() io.ReadCloser { + return c.stdout +} + +func (c *CmdRunner) Stderr() io.ReadCloser { + return c.stderr +} + +func (c *CmdRunner) Name() string { + return c.path +} + +func (c *CmdRunner) ID() string { + return fmt.Sprintf("%d", c.pid) +} + +// peTypes is a list of Portable Executable (PE) machine types from https://learn.microsoft.com/en-us/windows/win32/debug/pe-format +// mapped to GOARCH types. It is not comprehensive, and only includes machine types that Go supports. +var peTypes = map[uint16]string{ + 0x14c: "386", + 0x1c0: "arm", + 0x6264: "loong64", + 0x8664: "amd64", + 0xaa64: "arm64", +} + +func (c *CmdRunner) Diagnose(_ context.Context) string { + return fmt.Sprintf(unrecognizedRemotePluginMessage, additionalNotesAboutCommand(c.cmd.Path)) +} diff --git a/vendor/github.com/hashicorp/go-plugin/notes_unix.go b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/notes_unix.go similarity index 92% rename from vendor/github.com/hashicorp/go-plugin/notes_unix.go rename to vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/notes_unix.go index dae1c411decaf..ce04cfebc673d 100644 --- a/vendor/github.com/hashicorp/go-plugin/notes_unix.go +++ b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/notes_unix.go @@ -1,7 +1,10 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + //go:build !windows // +build !windows -package plugin +package cmdrunner import ( "debug/elf" @@ -50,10 +53,13 @@ func additionalNotesAboutCommand(path string) string { } if elfFile, err := elf.Open(path); err == nil { + defer elfFile.Close() notes += fmt.Sprintf(" ELF architecture: %s (current architecture: %s)\n", elfFile.Machine, runtime.GOARCH) } else if machoFile, err := macho.Open(path); err == nil { + defer machoFile.Close() notes += fmt.Sprintf(" MachO architecture: %s (current architecture: %s)\n", machoFile.Cpu, runtime.GOARCH) } else if peFile, err := pe.Open(path); err == nil { + defer peFile.Close() machine, ok := peTypes[peFile.Machine] if !ok { machine = "unknown" diff --git a/vendor/github.com/hashicorp/go-plugin/notes_windows.go b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/notes_windows.go similarity index 87% rename from vendor/github.com/hashicorp/go-plugin/notes_windows.go rename to vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/notes_windows.go index 900b93319c1f6..39c51dd1e0833 100644 --- a/vendor/github.com/hashicorp/go-plugin/notes_windows.go +++ b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/notes_windows.go @@ -1,7 +1,10 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + //go:build windows // +build windows -package plugin +package cmdrunner import ( "debug/elf" @@ -26,10 +29,13 @@ func additionalNotesAboutCommand(path string) string { notes += fmt.Sprintf(" Mode: %s\n", stat.Mode()) if elfFile, err := elf.Open(path); err == nil { + defer elfFile.Close() notes += fmt.Sprintf(" ELF architecture: %s (current architecture: %s)\n", elfFile.Machine, runtime.GOARCH) } else if machoFile, err := macho.Open(path); err == nil { + defer machoFile.Close() notes += fmt.Sprintf(" MachO architecture: %s (current architecture: %s)\n", machoFile.Cpu, runtime.GOARCH) } else if peFile, err := pe.Open(path); err == nil { + defer peFile.Close() machine, ok := peTypes[peFile.Machine] if !ok { machine = "unknown" diff --git a/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process.go b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process.go new file mode 100644 index 0000000000000..6c34dc7747fe1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process.go @@ -0,0 +1,25 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package cmdrunner + +import "time" + +// pidAlive checks whether a pid is alive. +func pidAlive(pid int) bool { + return _pidAlive(pid) +} + +// pidWait blocks for a process to exit. +func pidWait(pid int) error { + ticker := time.NewTicker(1 * time.Second) + defer ticker.Stop() + + for range ticker.C { + if !pidAlive(pid) { + break + } + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-plugin/process_posix.go b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process_posix.go similarity index 79% rename from vendor/github.com/hashicorp/go-plugin/process_posix.go rename to vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process_posix.go index 185957f8d1153..bf3fc5b683eca 100644 --- a/vendor/github.com/hashicorp/go-plugin/process_posix.go +++ b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process_posix.go @@ -1,7 +1,10 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + //go:build !windows // +build !windows -package plugin +package cmdrunner import ( "os" diff --git a/vendor/github.com/hashicorp/go-plugin/process_windows.go b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process_windows.go similarity index 86% rename from vendor/github.com/hashicorp/go-plugin/process_windows.go rename to vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process_windows.go index 0eaa7705d22cd..6c39df28f7e64 100644 --- a/vendor/github.com/hashicorp/go-plugin/process_windows.go +++ b/vendor/github.com/hashicorp/go-plugin/internal/cmdrunner/process_windows.go @@ -1,4 +1,7 @@ -package plugin +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package cmdrunner import ( "syscall" diff --git a/vendor/github.com/hashicorp/go-plugin/internal/plugin/gen.go b/vendor/github.com/hashicorp/go-plugin/internal/plugin/gen.go index fb9d415254feb..a3b5fb124e069 100644 --- a/vendor/github.com/hashicorp/go-plugin/internal/plugin/gen.go +++ b/vendor/github.com/hashicorp/go-plugin/internal/plugin/gen.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + //go:generate protoc -I ./ ./grpc_broker.proto ./grpc_controller.proto ./grpc_stdio.proto --go_out=plugins=grpc:. package plugin diff --git a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.pb.go b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.pb.go index 6bf103859f881..303b63e43b1e3 100644 --- a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.pb.go +++ b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.pb.go @@ -8,7 +8,7 @@ import fmt "fmt" import math "math" import ( - context "golang.org/x/net/context" + context "context" grpc "google.golang.org/grpc" ) diff --git a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.proto b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.proto index aa3df4630a725..038423ded7a5c 100644 --- a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.proto +++ b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.proto @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + syntax = "proto3"; package plugin; option go_package = "plugin"; diff --git a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.pb.go b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.pb.go index 3e39da95a890a..982fca0a57476 100644 --- a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.pb.go +++ b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.pb.go @@ -8,7 +8,7 @@ import fmt "fmt" import math "math" import ( - context "golang.org/x/net/context" + context "context" grpc "google.golang.org/grpc" ) diff --git a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.proto b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.proto index 345d0a1c1f236..3157eb885dea3 100644 --- a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.proto +++ b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.proto @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + syntax = "proto3"; package plugin; option go_package = "plugin"; diff --git a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.pb.go b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.pb.go index c8f94921b4631..bdef71b8aa036 100644 --- a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.pb.go +++ b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.pb.go @@ -9,7 +9,7 @@ import math "math" import empty "github.com/golang/protobuf/ptypes/empty" import ( - context "golang.org/x/net/context" + context "context" grpc "google.golang.org/grpc" ) diff --git a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.proto b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.proto index ce1a12230351d..1c0d1d0526a9b 100644 --- a/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.proto +++ b/vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.proto @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + syntax = "proto3"; package plugin; option go_package = "plugin"; diff --git a/vendor/github.com/hashicorp/go-plugin/log_entry.go b/vendor/github.com/hashicorp/go-plugin/log_entry.go index fb2ef930caadd..ab963d56b54a3 100644 --- a/vendor/github.com/hashicorp/go-plugin/log_entry.go +++ b/vendor/github.com/hashicorp/go-plugin/log_entry.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/mtls.go b/vendor/github.com/hashicorp/go-plugin/mtls.go index 8895524587731..09ecafaf45a5a 100644 --- a/vendor/github.com/hashicorp/go-plugin/mtls.go +++ b/vendor/github.com/hashicorp/go-plugin/mtls.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/mux_broker.go b/vendor/github.com/hashicorp/go-plugin/mux_broker.go index 01c45ad7c682d..4eb1208fbb7d6 100644 --- a/vendor/github.com/hashicorp/go-plugin/mux_broker.go +++ b/vendor/github.com/hashicorp/go-plugin/mux_broker.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/plugin.go b/vendor/github.com/hashicorp/go-plugin/plugin.go index 79d9674633a40..184749b96efa2 100644 --- a/vendor/github.com/hashicorp/go-plugin/plugin.go +++ b/vendor/github.com/hashicorp/go-plugin/plugin.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // The plugin package exposes functions and helpers for communicating to // plugins which are implemented as standalone binary applications. // diff --git a/vendor/github.com/hashicorp/go-plugin/process.go b/vendor/github.com/hashicorp/go-plugin/process.go index 88c999a580d31..b88446361da7d 100644 --- a/vendor/github.com/hashicorp/go-plugin/process.go +++ b/vendor/github.com/hashicorp/go-plugin/process.go @@ -1,24 +1,4 @@ -package plugin - -import ( - "time" -) - -// pidAlive checks whether a pid is alive. -func pidAlive(pid int) bool { - return _pidAlive(pid) -} +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 -// pidWait blocks for a process to exit. -func pidWait(pid int) error { - ticker := time.NewTicker(1 * time.Second) - defer ticker.Stop() - - for range ticker.C { - if !pidAlive(pid) { - break - } - } - - return nil -} +package plugin diff --git a/vendor/github.com/hashicorp/go-plugin/protocol.go b/vendor/github.com/hashicorp/go-plugin/protocol.go index 0cfc19e52d639..e4b7be383785a 100644 --- a/vendor/github.com/hashicorp/go-plugin/protocol.go +++ b/vendor/github.com/hashicorp/go-plugin/protocol.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/rpc_client.go b/vendor/github.com/hashicorp/go-plugin/rpc_client.go index f30a4b1d38729..142454df80dea 100644 --- a/vendor/github.com/hashicorp/go-plugin/rpc_client.go +++ b/vendor/github.com/hashicorp/go-plugin/rpc_client.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/rpc_server.go b/vendor/github.com/hashicorp/go-plugin/rpc_server.go index 064809d29185a..cec0a3d93a2f0 100644 --- a/vendor/github.com/hashicorp/go-plugin/rpc_server.go +++ b/vendor/github.com/hashicorp/go-plugin/rpc_server.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/runner/runner.go b/vendor/github.com/hashicorp/go-plugin/runner/runner.go new file mode 100644 index 0000000000000..e638ae5f8ee2c --- /dev/null +++ b/vendor/github.com/hashicorp/go-plugin/runner/runner.go @@ -0,0 +1,72 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package runner + +import ( + "context" + "io" +) + +// Runner defines the interface required by go-plugin to manage the lifecycle of +// of a plugin and attempt to negotiate a connection with it. Note that this +// is orthogonal to the protocol and transport used, which is negotiated over stdout. +type Runner interface { + // Start should start the plugin and ensure any work required for servicing + // other interface methods is done. If the context is cancelled, it should + // only abort any attempts to _start_ the plugin. Waiting and shutdown are + // handled separately. + Start(ctx context.Context) error + + // Diagnose makes a best-effort attempt to return any debug information that + // might help users understand why a plugin failed to start and negotiate a + // connection. + Diagnose(ctx context.Context) string + + // Stdout is used to negotiate the go-plugin protocol. + Stdout() io.ReadCloser + + // Stderr is used for forwarding plugin logs to the host process logger. + Stderr() io.ReadCloser + + // Name is a human-friendly name for the plugin, such as the path to the + // executable. It does not have to be unique. + Name() string + + AttachedRunner +} + +// AttachedRunner defines a limited subset of Runner's interface to represent the +// reduced responsibility for plugin lifecycle when attaching to an already running +// plugin. +type AttachedRunner interface { + // Wait should wait until the plugin stops running, whether in response to + // an out of band signal or in response to calling Kill(). + Wait(ctx context.Context) error + + // Kill should stop the plugin and perform any cleanup required. + Kill(ctx context.Context) error + + // ID is a unique identifier to represent the running plugin. e.g. pid or + // container ID. + ID() string + + AddrTranslator +} + +// AddrTranslator translates addresses between the execution context of the host +// process and the plugin. For example, if the plugin is in a container, the file +// path for a Unix socket may be different between the host and the container. +// +// It is only intended to be used by the host process. +type AddrTranslator interface { + // Called before connecting on any addresses received back from the plugin. + PluginToHost(pluginNet, pluginAddr string) (hostNet string, hostAddr string, err error) + + // Called on any host process addresses before they are sent to the plugin. + HostToPlugin(hostNet, hostAddr string) (pluginNet string, pluginAddr string, err error) +} + +// ReattachFunc can be passed to a client's reattach config to reattach to an +// already running plugin instead of starting it ourselves. +type ReattachFunc func() (AttachedRunner, error) diff --git a/vendor/github.com/hashicorp/go-plugin/server.go b/vendor/github.com/hashicorp/go-plugin/server.go index e134999103fd4..4b0f2b7691936 100644 --- a/vendor/github.com/hashicorp/go-plugin/server.go +++ b/vendor/github.com/hashicorp/go-plugin/server.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( @@ -8,10 +11,10 @@ import ( "errors" "fmt" "io" - "io/ioutil" "net" "os" "os/signal" + "os/user" "runtime" "sort" "strconv" @@ -270,7 +273,7 @@ func Serve(opts *ServeConfig) { } // Register a listener so we can accept a connection - listener, err := serverListener() + listener, err := serverListener(unixSocketConfigFromEnv()) if err != nil { logger.Error("plugin init error", "error", err) return @@ -493,12 +496,12 @@ func Serve(opts *ServeConfig) { } } -func serverListener() (net.Listener, error) { +func serverListener(unixSocketCfg UnixSocketConfig) (net.Listener, error) { if runtime.GOOS == "windows" { return serverListener_tcp() } - return serverListener_unix() + return serverListener_unix(unixSocketCfg) } func serverListener_tcp() (net.Listener, error) { @@ -543,8 +546,8 @@ func serverListener_tcp() (net.Listener, error) { return nil, errors.New("Couldn't bind plugin TCP listener") } -func serverListener_unix() (net.Listener, error) { - tf, err := ioutil.TempFile("", "plugin") +func serverListener_unix(unixSocketCfg UnixSocketConfig) (net.Listener, error) { + tf, err := os.CreateTemp(unixSocketCfg.directory, "plugin") if err != nil { return nil, err } @@ -564,6 +567,15 @@ func serverListener_unix() (net.Listener, error) { return nil, err } + // By default, unix sockets are only writable by the owner. Set up a custom + // group owner and group write permissions if configured. + if unixSocketCfg.Group != "" { + err = setGroupWritable(path, unixSocketCfg.Group, 0o660) + if err != nil { + return nil, err + } + } + // Wrap the listener in rmListener so that the Unix domain socket file // is removed on close. return &rmListener{ @@ -572,6 +584,32 @@ func serverListener_unix() (net.Listener, error) { }, nil } +func setGroupWritable(path, groupString string, mode os.FileMode) error { + groupID, err := strconv.Atoi(groupString) + if err != nil { + group, err := user.LookupGroup(groupString) + if err != nil { + return fmt.Errorf("failed to find gid from %q: %w", groupString, err) + } + groupID, err = strconv.Atoi(group.Gid) + if err != nil { + return fmt.Errorf("failed to parse %q group's gid as an integer: %w", groupString, err) + } + } + + err = os.Chown(path, -1, groupID) + if err != nil { + return err + } + + err = os.Chmod(path, mode) + if err != nil { + return err + } + + return nil +} + // rmListener is an implementation of net.Listener that forwards most // calls to the listener but also removes a file as part of the close. We // use this to cleanup the unix domain socket on close. diff --git a/vendor/github.com/hashicorp/go-plugin/server_mux.go b/vendor/github.com/hashicorp/go-plugin/server_mux.go index 033079ea0fc51..6b14b0c291dbc 100644 --- a/vendor/github.com/hashicorp/go-plugin/server_mux.go +++ b/vendor/github.com/hashicorp/go-plugin/server_mux.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/stream.go b/vendor/github.com/hashicorp/go-plugin/stream.go index 1d547aaaab3ff..a2348642d8610 100644 --- a/vendor/github.com/hashicorp/go-plugin/stream.go +++ b/vendor/github.com/hashicorp/go-plugin/stream.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/go-plugin/testing.go b/vendor/github.com/hashicorp/go-plugin/testing.go index e36f2eb2b7c42..ae48b7a37eb86 100644 --- a/vendor/github.com/hashicorp/go-plugin/testing.go +++ b/vendor/github.com/hashicorp/go-plugin/testing.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( @@ -163,7 +166,7 @@ func TestPluginGRPCConn(t testing.T, ps map[string]Plugin) (*GRPCClient, *GRPCSe } brokerGRPCClient := newGRPCBrokerClient(conn) - broker := newGRPCBroker(brokerGRPCClient, nil) + broker := newGRPCBroker(brokerGRPCClient, nil, UnixSocketConfig{}, nil) go broker.Run() go brokerGRPCClient.StartStream() diff --git a/vendor/github.com/hashicorp/hc-install/.copywrite.hcl b/vendor/github.com/hashicorp/hc-install/.copywrite.hcl new file mode 100644 index 0000000000000..45ec82c768d70 --- /dev/null +++ b/vendor/github.com/hashicorp/hc-install/.copywrite.hcl @@ -0,0 +1,7 @@ +schema_version = 1 + +project { + license = "MPL-2.0" + copyright_year = 2020 + header_ignore = [] +} diff --git a/vendor/github.com/hashicorp/hc-install/.go-version b/vendor/github.com/hashicorp/hc-install/.go-version index 83d5e73f00e46..5fb5a6b4f547c 100644 --- a/vendor/github.com/hashicorp/hc-install/.go-version +++ b/vendor/github.com/hashicorp/hc-install/.go-version @@ -1 +1 @@ -1.19.5 +1.20 diff --git a/vendor/github.com/hashicorp/hc-install/README.md b/vendor/github.com/hashicorp/hc-install/README.md index eb287ff0fc7a6..6e78b5a610a1d 100644 --- a/vendor/github.com/hashicorp/hc-install/README.md +++ b/vendor/github.com/hashicorp/hc-install/README.md @@ -41,16 +41,17 @@ Each comes with different trade-offs described below. - `releases.{LatestVersion,ExactVersion}` - Downloads, verifies & installs any known product from `releases.hashicorp.com` - **Pros:** - Fast and reliable way of obtaining any pre-built version of any product + - Allows installation of enterprise versions - **Cons:** - - Installation may consume some bandwith, disk space and a little time + - Installation may consume some bandwidth, disk space and a little time - Potentially less stable builds (see `checkpoint` below) - - `checkpoint.{LatestVersion}` - Downloads, verifies & installs any known product available in HashiCorp Checkpoint + - `checkpoint.LatestVersion` - Downloads, verifies & installs any known product available in HashiCorp Checkpoint - **Pros:** - Checkpoint typically contains only product versions considered stable - **Cons:** - - Installation may consume some bandwith, disk space and a little time - - Currently doesn't allow installation of a old versions (see `releases` above) - - `build.{GitRevision}` - Clones raw source code and builds the product from it + - Installation may consume some bandwidth, disk space and a little time + - Currently doesn't allow installation of old versions or enterprise versions (see `releases` above) + - `build.GitRevision` - Clones raw source code and builds the product from it - **Pros:** - Useful for catching bugs and incompatibilities as early as possible (prior to product release). - **Cons:** @@ -61,73 +62,59 @@ Each comes with different trade-offs described below. ## Example Usage -### Install single version +See examples at https://pkg.go.dev/github.com/hashicorp/hc-install#example-Installer. -```go -TODO -``` +## CLI + +In addition to the Go library, which is the intended primary use case of `hc-install`, we also distribute CLI. + +The CLI comes with some trade-offs: -### Find or install single version + - more limited interface compared to the flexible Go API (installs specific versions of products via `releases.ExactVersion`) + - minimal environment pre-requisites (no need to compile Go code) + - see ["hc-install is not a package manager"](https://github.com/hashicorp/hc-install#hc-install-is-not-a-package-manager) -```go -i := NewInstaller() +### Installation -v0_14_0 := version.Must(version.NewVersion("0.14.0")) +Given that one of the key roles of the CLI/library is integrity checking, you should choose the installation method which involves the same level of integrity checks, and/or perform these checks yourself. `go install` provides only minimal to no integrity checks, depending on exact use. We recommend any of the installation methods documented below. -execPath, err := i.Ensure(context.Background(), []src.Source{ - &fs.ExactVersion{ - Product: product.Terraform, - Version: v0_14_0, - }, - &releases.ExactVersion{ - Product: product.Terraform, - Version: v0_14_0, - }, -}) -if err != nil { - // process err -} +#### Homebrew (macOS / Linux) -// run any tests +[Homebrew](https://brew.sh) -defer i.Remove() ``` +brew install hashicorp/tap/hc-install +``` + +#### Linux + +We support Debian & Ubuntu via apt and RHEL, CentOS, Fedora and Amazon Linux via RPM. -### Install multiple versions +You can follow the instructions in the [Official Packaging Guide](https://www.hashicorp.com/official-packaging-guide) to install the package from the official HashiCorp-maintained repositories. The package name is `hc-install` in all repositories. + +#### Other platforms + +1. [Download for the latest version](https://releases.hashicorp.com/hc-install/) relevant for your operating system and architecture. +2. Verify integrity by comparing the SHA256 checksums which are part of the release (called `hc-install__SHA256SUMS`). +3. Install it by unzipping it and moving it to a directory included in your system's `PATH`. +4. Check that you have installed it correctly via `hc-install --version`. + You should see the latest version printed to your terminal. + +### Usage -```go -TODO ``` +Usage: hc-install install [options] -version -### Install and build multiple versions - -```go -i := NewInstaller() - -vc, _ := version.NewConstraint(">= 0.12") -rv := &releases.Versions{ - Product: product.Terraform, - Constraints: vc, -} - -versions, err := rv.List(context.Background()) -if err != nil { - return err -} -versions = append(versions, &build.GitRevision{Ref: "HEAD"}) - -for _, installableVersion := range versions { - execPath, err := i.Ensure(context.Background(), []src.Source{ - installableVersion, - }) - if err != nil { - return err - } - - // Do some testing here - _ = execPath - - // clean up - os.Remove(execPath) -} + This command installs a HashiCorp product. + Options: + -version [REQUIRED] Version of product to install. + -path Path to directory where the product will be installed. Defaults + to current working directory. +``` +```sh +hc-install install -version 1.3.7 terraform +``` +``` +hc-install: will install terraform@1.3.7 +installed terraform@1.3.7 to /current/working/dir/terraform ``` diff --git a/vendor/github.com/hashicorp/hc-install/checkpoint/latest_version.go b/vendor/github.com/hashicorp/hc-install/checkpoint/latest_version.go index 2d52b339f97c7..2cd5379fb8ee7 100644 --- a/vendor/github.com/hashicorp/hc-install/checkpoint/latest_version.go +++ b/vendor/github.com/hashicorp/hc-install/checkpoint/latest_version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package checkpoint import ( @@ -123,7 +126,7 @@ func (lv *LatestVersion) Install(ctx context.Context) (string, error) { if lv.ArmoredPublicKey != "" { d.ArmoredPublicKey = lv.ArmoredPublicKey } - zipFilePath, err := d.DownloadAndUnpack(ctx, pv, dstDir) + zipFilePath, err := d.DownloadAndUnpack(ctx, pv, dstDir, "") if zipFilePath != "" { lv.pathsToRemove = append(lv.pathsToRemove, zipFilePath) } diff --git a/vendor/github.com/hashicorp/hc-install/errors/errors.go b/vendor/github.com/hashicorp/hc-install/errors/errors.go index 8d4f1d22d87ec..15d51b602639f 100644 --- a/vendor/github.com/hashicorp/hc-install/errors/errors.go +++ b/vendor/github.com/hashicorp/hc-install/errors/errors.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package errors type skippableErr struct { diff --git a/vendor/github.com/hashicorp/hc-install/fs/any_version.go b/vendor/github.com/hashicorp/hc-install/fs/any_version.go index fc1f946340309..8071dfcf52c4b 100644 --- a/vendor/github.com/hashicorp/hc-install/fs/any_version.go +++ b/vendor/github.com/hashicorp/hc-install/fs/any_version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fs import ( diff --git a/vendor/github.com/hashicorp/hc-install/fs/exact_version.go b/vendor/github.com/hashicorp/hc-install/fs/exact_version.go index 018c1fbadcb75..c3cc49bfc911b 100644 --- a/vendor/github.com/hashicorp/hc-install/fs/exact_version.go +++ b/vendor/github.com/hashicorp/hc-install/fs/exact_version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fs import ( diff --git a/vendor/github.com/hashicorp/hc-install/fs/fs.go b/vendor/github.com/hashicorp/hc-install/fs/fs.go index 5adb9c329c240..216df2c2cdc27 100644 --- a/vendor/github.com/hashicorp/hc-install/fs/fs.go +++ b/vendor/github.com/hashicorp/hc-install/fs/fs.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fs import ( diff --git a/vendor/github.com/hashicorp/hc-install/fs/fs_unix.go b/vendor/github.com/hashicorp/hc-install/fs/fs_unix.go index 95c5c11f1d914..eebd98b82c041 100644 --- a/vendor/github.com/hashicorp/hc-install/fs/fs_unix.go +++ b/vendor/github.com/hashicorp/hc-install/fs/fs_unix.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + //go:build !windows // +build !windows diff --git a/vendor/github.com/hashicorp/hc-install/fs/fs_windows.go b/vendor/github.com/hashicorp/hc-install/fs/fs_windows.go index 2a03c7ad2f204..e2e4e73fb19b6 100644 --- a/vendor/github.com/hashicorp/hc-install/fs/fs_windows.go +++ b/vendor/github.com/hashicorp/hc-install/fs/fs_windows.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fs import ( diff --git a/vendor/github.com/hashicorp/hc-install/fs/version.go b/vendor/github.com/hashicorp/hc-install/fs/version.go index 26633b8afc89d..39efb52d9fa02 100644 --- a/vendor/github.com/hashicorp/hc-install/fs/version.go +++ b/vendor/github.com/hashicorp/hc-install/fs/version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fs import ( diff --git a/vendor/github.com/hashicorp/hc-install/installer.go b/vendor/github.com/hashicorp/hc-install/installer.go index 8b773c56db01f..6c704eede3d9e 100644 --- a/vendor/github.com/hashicorp/hc-install/installer.go +++ b/vendor/github.com/hashicorp/hc-install/installer.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package install import ( diff --git a/vendor/github.com/hashicorp/hc-install/internal/build/get_go_version.go b/vendor/github.com/hashicorp/hc-install/internal/build/get_go_version.go index 3a929859ac123..858f8ab297438 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/build/get_go_version.go +++ b/vendor/github.com/hashicorp/hc-install/internal/build/get_go_version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package build import ( diff --git a/vendor/github.com/hashicorp/hc-install/internal/build/go_build.go b/vendor/github.com/hashicorp/hc-install/internal/build/go_build.go index 9581c322cc222..504bf45a3052b 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/build/go_build.go +++ b/vendor/github.com/hashicorp/hc-install/internal/build/go_build.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package build import ( diff --git a/vendor/github.com/hashicorp/hc-install/internal/build/go_is_installed.go b/vendor/github.com/hashicorp/hc-install/internal/build/go_is_installed.go index 6a81d196b6896..00165fff5cbb5 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/build/go_is_installed.go +++ b/vendor/github.com/hashicorp/hc-install/internal/build/go_is_installed.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package build import ( diff --git a/vendor/github.com/hashicorp/hc-install/internal/build/install_go_version.go b/vendor/github.com/hashicorp/hc-install/internal/build/install_go_version.go index a6610e076f6ee..9dc070d7957dc 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/build/install_go_version.go +++ b/vendor/github.com/hashicorp/hc-install/internal/build/install_go_version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package build import ( @@ -10,14 +13,21 @@ import ( "github.com/hashicorp/go-version" ) +var v1_21 = version.Must(version.NewVersion("1.21")) + // installGoVersion installs given version of Go using Go // according to https://golang.org/doc/manage-install func (gb *GoBuild) installGoVersion(ctx context.Context, v *version.Version) (Go, error) { - versionString := v.Core().String() + goVersion := v.String() - // trim 0 patch versions as that's how Go does it :shrug: - shortVersion := strings.TrimSuffix(versionString, ".0") - pkgURL := fmt.Sprintf("golang.org/dl/go%s", shortVersion) + // trim 0 patch versions as that's how Go does it + // for versions prior to 1.21 + // See https://github.com/golang/go/issues/62136 + if v.LessThan(v1_21) { + versionString := v.Core().String() + goVersion = strings.TrimSuffix(versionString, ".0") + } + pkgURL := fmt.Sprintf("golang.org/dl/go%s", goVersion) gb.log().Printf("go getting %q", pkgURL) cmd := exec.CommandContext(ctx, "go", "get", pkgURL) @@ -33,7 +43,7 @@ func (gb *GoBuild) installGoVersion(ctx context.Context, v *version.Version) (Go return Go{}, fmt.Errorf("unable to install Go %s: %w\n%s", v, err, out) } - cmdName := fmt.Sprintf("go%s", shortVersion) + cmdName := fmt.Sprintf("go%s", goVersion) gb.log().Printf("downloading go %q", v) cmd = exec.CommandContext(ctx, cmdName, "download") diff --git a/vendor/github.com/hashicorp/hc-install/internal/httpclient/httpclient.go b/vendor/github.com/hashicorp/hc-install/internal/httpclient/httpclient.go index 0ae6ae4af86f2..a9503dfdb882a 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/httpclient/httpclient.go +++ b/vendor/github.com/hashicorp/hc-install/internal/httpclient/httpclient.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package httpclient import ( diff --git a/vendor/github.com/hashicorp/hc-install/internal/pubkey/pubkey.go b/vendor/github.com/hashicorp/hc-install/internal/pubkey/pubkey.go index c36fba4716635..d06f104506315 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/pubkey/pubkey.go +++ b/vendor/github.com/hashicorp/hc-install/internal/pubkey/pubkey.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package pubkey const ( diff --git a/vendor/github.com/hashicorp/hc-install/internal/releasesjson/checksum_downloader.go b/vendor/github.com/hashicorp/hc-install/internal/releasesjson/checksum_downloader.go index c012a20aab197..843de8cdfadda 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/releasesjson/checksum_downloader.go +++ b/vendor/github.com/hashicorp/hc-install/internal/releasesjson/checksum_downloader.go @@ -1,7 +1,9 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package releasesjson import ( - "bytes" "context" "crypto/sha256" "encoding/hex" @@ -12,8 +14,8 @@ import ( "net/url" "strings" + "github.com/ProtonMail/go-crypto/openpgp" "github.com/hashicorp/hc-install/internal/httpclient" - "golang.org/x/crypto/openpgp" ) type ChecksumDownloader struct { @@ -133,43 +135,13 @@ func fileMapFromChecksums(checksums strings.Builder) (ChecksumFileMap, error) { return csMap, nil } -func compareChecksum(logger *log.Logger, r io.Reader, verifiedHashSum HashSum, filename string, expectedSize int64) error { - h := sha256.New() - - // This may take a while depending on network connection as the io.Reader - // is expected to be http.Response.Body which streams the bytes - // on demand over the network. - logger.Printf("copying %q (%d bytes) to calculate checksum", filename, expectedSize) - bytesCopied, err := io.Copy(h, r) - if err != nil { - return err - } - logger.Printf("copied %d bytes of %q", bytesCopied, filename) - - if expectedSize != 0 && bytesCopied != int64(expectedSize) { - return fmt.Errorf("unexpected size (downloaded: %d, expected: %d)", - bytesCopied, expectedSize) - } - - calculatedSum := h.Sum(nil) - if !bytes.Equal(calculatedSum, verifiedHashSum) { - return fmt.Errorf("checksum mismatch (expected %q, calculated %q)", - verifiedHashSum, - hex.EncodeToString(calculatedSum)) - } - - logger.Printf("checksum matches: %q", hex.EncodeToString(calculatedSum)) - - return nil -} - func (cd *ChecksumDownloader) verifySumsSignature(checksums, signature io.Reader) error { el, err := cd.keyEntityList() if err != nil { return err } - _, err = openpgp.CheckDetachedSignature(el, checksums, signature) + _, err = openpgp.CheckDetachedSignature(el, checksums, signature, nil) if err != nil { return fmt.Errorf("unable to verify checksums signature: %w", err) } diff --git a/vendor/github.com/hashicorp/hc-install/internal/releasesjson/downloader.go b/vendor/github.com/hashicorp/hc-install/internal/releasesjson/downloader.go index 8b2097d7615ed..146c1cf029f39 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/releasesjson/downloader.go +++ b/vendor/github.com/hashicorp/hc-install/internal/releasesjson/downloader.go @@ -1,9 +1,13 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package releasesjson import ( "archive/zip" "bytes" "context" + "crypto/sha256" "fmt" "io" "io/ioutil" @@ -25,7 +29,7 @@ type Downloader struct { BaseURL string } -func (d *Downloader) DownloadAndUnpack(ctx context.Context, pv *ProductVersion, dstDir string) (zipFilePath string, err error) { +func (d *Downloader) DownloadAndUnpack(ctx context.Context, pv *ProductVersion, binDir string, licenseDir string) (zipFilePath string, err error) { if len(pv.Builds) == 0 { return "", fmt.Errorf("no builds found for %s %s", pv.Name, pv.Version) } @@ -92,8 +96,7 @@ func (d *Downloader) DownloadAndUnpack(ctx context.Context, pv *ProductVersion, defer resp.Body.Close() - var pkgReader io.Reader - pkgReader = resp.Body + pkgReader := resp.Body contentType := resp.Header.Get("content-type") if !contentTypeIsZip(contentType) { @@ -103,19 +106,6 @@ func (d *Downloader) DownloadAndUnpack(ctx context.Context, pv *ProductVersion, expectedSize := resp.ContentLength - if d.VerifyChecksum { - d.Logger.Printf("verifying checksum of %q", pb.Filename) - // provide extra reader to calculate & compare checksum - var buf bytes.Buffer - r := io.TeeReader(resp.Body, &buf) - pkgReader = &buf - - err := compareChecksum(d.Logger, r, verifiedChecksum, pb.Filename, expectedSize) - if err != nil { - return "", err - } - } - pkgFile, err := ioutil.TempFile("", pb.Filename) if err != nil { return "", err @@ -124,19 +114,39 @@ func (d *Downloader) DownloadAndUnpack(ctx context.Context, pv *ProductVersion, pkgFilePath, err := filepath.Abs(pkgFile.Name()) d.Logger.Printf("copying %q (%d bytes) to %s", pb.Filename, expectedSize, pkgFile.Name()) - // Unless the bytes were already downloaded above for checksum verification - // this may take a while depending on network connection as the io.Reader - // is expected to be http.Response.Body which streams the bytes - // on demand over the network. - bytesCopied, err := io.Copy(pkgFile, pkgReader) - if err != nil { - return pkgFilePath, err + + var bytesCopied int64 + if d.VerifyChecksum { + d.Logger.Printf("verifying checksum of %q", pb.Filename) + h := sha256.New() + r := io.TeeReader(resp.Body, pkgFile) + + bytesCopied, err = io.Copy(h, r) + if err != nil { + return "", err + } + + calculatedSum := h.Sum(nil) + if !bytes.Equal(calculatedSum, verifiedChecksum) { + return pkgFilePath, fmt.Errorf( + "checksum mismatch (expected: %x, got: %x)", + verifiedChecksum, calculatedSum, + ) + } + } else { + bytesCopied, err = io.Copy(pkgFile, pkgReader) + if err != nil { + return pkgFilePath, err + } } + d.Logger.Printf("copied %d bytes to %s", bytesCopied, pkgFile.Name()) if expectedSize != 0 && bytesCopied != int64(expectedSize) { - return pkgFilePath, fmt.Errorf("unexpected size (downloaded: %d, expected: %d)", - bytesCopied, expectedSize) + return pkgFilePath, fmt.Errorf( + "unexpected size (downloaded: %d, expected: %d)", + bytesCopied, expectedSize, + ) } r, err := zip.OpenReader(pkgFile.Name()) @@ -156,6 +166,12 @@ func (d *Downloader) DownloadAndUnpack(ctx context.Context, pv *ProductVersion, return pkgFilePath, err } + // Determine the appropriate destination file path + dstDir := binDir + if isLicenseFile(f.Name) && licenseDir != "" { + dstDir = licenseDir + } + d.Logger.Printf("unpacking %s to %s", f.Name, dstDir) dstPath := filepath.Join(dstDir, f.Name) dstFile, err := os.Create(dstPath) @@ -190,3 +206,19 @@ func contentTypeIsZip(contentType string) bool { } return false } + +// Enterprise products have a few additional license files +// that need to be extracted to a separate directory +var licenseFiles = []string{ + "EULA.txt", + "TermsOfEvaluation.txt", +} + +func isLicenseFile(filename string) bool { + for _, lf := range licenseFiles { + if lf == filename { + return true + } + } + return false +} diff --git a/vendor/github.com/hashicorp/hc-install/internal/releasesjson/product_version.go b/vendor/github.com/hashicorp/hc-install/internal/releasesjson/product_version.go index 5eecb01364772..99b811a6458fb 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/releasesjson/product_version.go +++ b/vendor/github.com/hashicorp/hc-install/internal/releasesjson/product_version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package releasesjson import "github.com/hashicorp/go-version" diff --git a/vendor/github.com/hashicorp/hc-install/internal/releasesjson/releases.go b/vendor/github.com/hashicorp/hc-install/internal/releasesjson/releases.go index b100a8d2b5720..755019f2f257d 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/releasesjson/releases.go +++ b/vendor/github.com/hashicorp/hc-install/internal/releasesjson/releases.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package releasesjson import ( @@ -112,13 +115,6 @@ func (r *Releases) ListProductVersions(ctx context.Context, productName string) continue } - if ok, _ := versionIsSupported(v); !ok { - // Remove (currently unsupported) enterprise - // version and any other "custom" build - delete(p.Versions, rawVersion) - continue - } - p.Versions[rawVersion].Version = v } @@ -126,10 +122,6 @@ func (r *Releases) ListProductVersions(ctx context.Context, productName string) } func (r *Releases) GetProductVersion(ctx context.Context, product string, version *version.Version) (*ProductVersion, error) { - if ok, err := versionIsSupported(version); !ok { - return nil, fmt.Errorf("%s: %w", product, err) - } - client := httpclient.NewHTTPClient() indexURL := fmt.Sprintf("%s/%s/%s/index.json", @@ -175,12 +167,3 @@ func (r *Releases) GetProductVersion(ctx context.Context, product string, versio return pv, nil } - -func versionIsSupported(v *version.Version) (bool, error) { - isSupported := v.Metadata() == "" - if !isSupported { - return false, fmt.Errorf("cannot obtain %s (enterprise versions are not supported)", - v.String()) - } - return true, nil -} diff --git a/vendor/github.com/hashicorp/hc-install/internal/src/src.go b/vendor/github.com/hashicorp/hc-install/internal/src/src.go index 5b53d92b12f5f..9cac8a64e31ec 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/src/src.go +++ b/vendor/github.com/hashicorp/hc-install/internal/src/src.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package src type InstallSrcSigil struct{} diff --git a/vendor/github.com/hashicorp/hc-install/internal/validators/validators.go b/vendor/github.com/hashicorp/hc-install/internal/validators/validators.go index 5e3e6c8163743..8a331c4cf72e3 100644 --- a/vendor/github.com/hashicorp/hc-install/internal/validators/validators.go +++ b/vendor/github.com/hashicorp/hc-install/internal/validators/validators.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validators import "regexp" diff --git a/vendor/github.com/hashicorp/hc-install/product/consul.go b/vendor/github.com/hashicorp/hc-install/product/consul.go index 72e490e2f3077..9789d7c318e1e 100644 --- a/vendor/github.com/hashicorp/hc-install/product/consul.go +++ b/vendor/github.com/hashicorp/hc-install/product/consul.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package product import ( diff --git a/vendor/github.com/hashicorp/hc-install/product/nomad.go b/vendor/github.com/hashicorp/hc-install/product/nomad.go new file mode 100644 index 0000000000000..b675d9a19a820 --- /dev/null +++ b/vendor/github.com/hashicorp/hc-install/product/nomad.go @@ -0,0 +1,54 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package product + +import ( + "context" + "fmt" + "os/exec" + "regexp" + "runtime" + "strings" + + "github.com/hashicorp/go-version" + "github.com/hashicorp/hc-install/internal/build" +) + +var nomadVersionOutputRe = regexp.MustCompile(`Nomad ` + simpleVersionRe) + +var Nomad = Product{ + Name: "nomad", + BinaryName: func() string { + if runtime.GOOS == "windows" { + return "nomad.exe" + } + return "nomad" + }, + GetVersion: func(ctx context.Context, path string) (*version.Version, error) { + cmd := exec.CommandContext(ctx, path, "version") + + out, err := cmd.Output() + if err != nil { + return nil, err + } + + stdout := strings.TrimSpace(string(out)) + + submatches := nomadVersionOutputRe.FindStringSubmatch(stdout) + if len(submatches) != 2 { + return nil, fmt.Errorf("unexpected number of version matches %d for %s", len(submatches), stdout) + } + v, err := version.NewVersion(submatches[1]) + if err != nil { + return nil, fmt.Errorf("unable to parse version %q: %w", submatches[1], err) + } + + return v, err + }, + BuildInstructions: &BuildInstructions{ + GitRepoURL: "https://github.com/hashicorp/nomad.git", + PreCloneCheck: &build.GoIsInstalled{}, + Build: &build.GoBuild{DetectVendoring: true}, + }, +} diff --git a/vendor/github.com/hashicorp/hc-install/product/product.go b/vendor/github.com/hashicorp/hc-install/product/product.go index 0b5e2a5467163..85f2e11bf2c4b 100644 --- a/vendor/github.com/hashicorp/hc-install/product/product.go +++ b/vendor/github.com/hashicorp/hc-install/product/product.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package product import ( diff --git a/vendor/github.com/hashicorp/hc-install/product/terraform.go b/vendor/github.com/hashicorp/hc-install/product/terraform.go index d820203a77ea7..afb6b35fb3ab5 100644 --- a/vendor/github.com/hashicorp/hc-install/product/terraform.go +++ b/vendor/github.com/hashicorp/hc-install/product/terraform.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package product import ( diff --git a/vendor/github.com/hashicorp/hc-install/product/vault.go b/vendor/github.com/hashicorp/hc-install/product/vault.go index f00827bfecb8d..0b25965963ac6 100644 --- a/vendor/github.com/hashicorp/hc-install/product/vault.go +++ b/vendor/github.com/hashicorp/hc-install/product/vault.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package product import ( diff --git a/vendor/github.com/hashicorp/hc-install/releases/enterprise.go b/vendor/github.com/hashicorp/hc-install/releases/enterprise.go new file mode 100644 index 0000000000000..179d40d1cd432 --- /dev/null +++ b/vendor/github.com/hashicorp/hc-install/releases/enterprise.go @@ -0,0 +1,38 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package releases + +import "fmt" + +type EnterpriseOptions struct { + // LicenseDir represents directory path where to install license files (required) + LicenseDir string + + // Meta represents optional version metadata (e.g. hsm, fips1402) + Meta string +} + +func enterpriseVersionMetadata(eo *EnterpriseOptions) string { + if eo == nil { + return "" + } + + metadata := "ent" + if eo.Meta != "" { + metadata += "." + eo.Meta + } + return metadata +} + +func validateEnterpriseOptions(eo *EnterpriseOptions) error { + if eo == nil { + return nil + } + + if eo.LicenseDir == "" { + return fmt.Errorf("LicenseDir must be provided when requesting enterprise versions") + } + + return nil +} diff --git a/vendor/github.com/hashicorp/hc-install/releases/exact_version.go b/vendor/github.com/hashicorp/hc-install/releases/exact_version.go index 7e4091ef7e19f..e42f4d239fd87 100644 --- a/vendor/github.com/hashicorp/hc-install/releases/exact_version.go +++ b/vendor/github.com/hashicorp/hc-install/releases/exact_version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package releases import ( @@ -25,6 +28,9 @@ type ExactVersion struct { InstallDir string Timeout time.Duration + // Enterprise indicates installation of enterprise version (leave nil for Community editions) + Enterprise *EnterpriseOptions + SkipChecksumVerification bool // ArmoredPublicKey is a public PGP key in ASCII/armor format to use @@ -64,6 +70,10 @@ func (ev *ExactVersion) Validate() error { return fmt.Errorf("unknown version") } + if err := validateEnterpriseOptions(ev.Enterprise); err != nil { + return err + } + return nil } @@ -97,7 +107,11 @@ func (ev *ExactVersion) Install(ctx context.Context) (string, error) { rels.BaseURL = ev.apiBaseURL } rels.SetLogger(ev.log()) - pv, err := rels.GetProductVersion(ctx, ev.Product.Name, ev.Version) + installVersion := ev.Version + if ev.Enterprise != nil { + installVersion = versionWithMetadata(installVersion, enterpriseVersionMetadata(ev.Enterprise)) + } + pv, err := rels.GetProductVersion(ctx, ev.Product.Name, installVersion) if err != nil { return "", err } @@ -115,7 +129,11 @@ func (ev *ExactVersion) Install(ctx context.Context) (string, error) { d.BaseURL = ev.apiBaseURL } - zipFilePath, err := d.DownloadAndUnpack(ctx, pv, dstDir) + licenseDir := "" + if ev.Enterprise != nil { + licenseDir = ev.Enterprise.LicenseDir + } + zipFilePath, err := d.DownloadAndUnpack(ctx, pv, dstDir, licenseDir) if zipFilePath != "" { ev.pathsToRemove = append(ev.pathsToRemove, zipFilePath) } @@ -148,3 +166,21 @@ func (ev *ExactVersion) Remove(ctx context.Context) error { return nil } + +// versionWithMetadata returns a new version by combining the given version with the given metadata +func versionWithMetadata(v *version.Version, metadata string) *version.Version { + if v == nil { + return nil + } + + if metadata == "" { + return v + } + + v2, err := version.NewVersion(fmt.Sprintf("%s+%s", v.Core(), metadata)) + if err != nil { + return nil + } + + return v2 +} diff --git a/vendor/github.com/hashicorp/hc-install/releases/latest_version.go b/vendor/github.com/hashicorp/hc-install/releases/latest_version.go index 36aa5b2b3cb31..8873b5d4ecc33 100644 --- a/vendor/github.com/hashicorp/hc-install/releases/latest_version.go +++ b/vendor/github.com/hashicorp/hc-install/releases/latest_version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package releases import ( @@ -25,6 +28,9 @@ type LatestVersion struct { Timeout time.Duration IncludePrereleases bool + // Enterprise indicates installation of enterprise version (leave nil for Community editions) + Enterprise *EnterpriseOptions + SkipChecksumVerification bool // ArmoredPublicKey is a public PGP key in ASCII/armor format to use @@ -60,6 +66,10 @@ func (lv *LatestVersion) Validate() error { return fmt.Errorf("invalid binary name: %q", lv.Product.BinaryName()) } + if err := validateEnterpriseOptions(lv.Enterprise); err != nil { + return err + } + return nil } @@ -119,7 +129,11 @@ func (lv *LatestVersion) Install(ctx context.Context) (string, error) { if lv.apiBaseURL != "" { d.BaseURL = lv.apiBaseURL } - zipFilePath, err := d.DownloadAndUnpack(ctx, versionToInstall, dstDir) + licenseDir := "" + if lv.Enterprise != nil { + licenseDir = lv.Enterprise.LicenseDir + } + zipFilePath, err := d.DownloadAndUnpack(ctx, versionToInstall, dstDir, licenseDir) if zipFilePath != "" { lv.pathsToRemove = append(lv.pathsToRemove, zipFilePath) } @@ -153,6 +167,7 @@ func (lv *LatestVersion) Remove(ctx context.Context) error { } func (lv *LatestVersion) findLatestMatchingVersion(pvs rjson.ProductVersionsMap, vc version.Constraints) (*rjson.ProductVersion, bool) { + expectedMetadata := enterpriseVersionMetadata(lv.Enterprise) versions := make(version.Collection, 0) for _, pv := range pvs.AsSlice() { if !lv.IncludePrereleases && pv.Version.Prerelease() != "" { @@ -160,6 +175,10 @@ func (lv *LatestVersion) findLatestMatchingVersion(pvs rjson.ProductVersionsMap, continue } + if pv.Version.Metadata() != expectedMetadata { + continue + } + versions = append(versions, pv.Version) } diff --git a/vendor/github.com/hashicorp/hc-install/releases/releases.go b/vendor/github.com/hashicorp/hc-install/releases/releases.go index 2c3f30992805f..7bef49ba30f3e 100644 --- a/vendor/github.com/hashicorp/hc-install/releases/releases.go +++ b/vendor/github.com/hashicorp/hc-install/releases/releases.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package releases import ( diff --git a/vendor/github.com/hashicorp/hc-install/releases/versions.go b/vendor/github.com/hashicorp/hc-install/releases/versions.go index bf0f799faafdb..49b1af78cae28 100644 --- a/vendor/github.com/hashicorp/hc-install/releases/versions.go +++ b/vendor/github.com/hashicorp/hc-install/releases/versions.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package releases import ( @@ -18,6 +21,7 @@ import ( type Versions struct { Product product.Product Constraints version.Constraints + Enterprise *EnterpriseOptions // require enterprise version if set (leave nil for OSS) ListTimeout time.Duration @@ -42,6 +46,10 @@ func (v *Versions) List(ctx context.Context) ([]src.Source, error) { return nil, fmt.Errorf("invalid product name: %q", v.Product.Name) } + if err := validateEnterpriseOptions(v.Enterprise); err != nil { + return nil, err + } + timeout := defaultListTimeout if v.ListTimeout > 0 { timeout = v.ListTimeout @@ -58,6 +66,8 @@ func (v *Versions) List(ctx context.Context) ([]src.Source, error) { versions := pvs.AsSlice() sort.Stable(versions) + expectedMetadata := enterpriseVersionMetadata(v.Enterprise) + installables := make([]src.Source, 0) for _, pv := range versions { if !v.Constraints.Check(pv.Version) { @@ -65,6 +75,11 @@ func (v *Versions) List(ctx context.Context) ([]src.Source, error) { continue } + if pv.Version.Metadata() != expectedMetadata { + // skip version which doesn't match required metadata for enterprise or OSS versions + continue + } + ev := &ExactVersion{ Product: v.Product, Version: pv.Version, @@ -75,6 +90,13 @@ func (v *Versions) List(ctx context.Context) ([]src.Source, error) { SkipChecksumVerification: v.Install.SkipChecksumVerification, } + if v.Enterprise != nil { + ev.Enterprise = &EnterpriseOptions{ + Meta: v.Enterprise.Meta, + LicenseDir: v.Enterprise.LicenseDir, + } + } + installables = append(installables, ev) } diff --git a/vendor/github.com/hashicorp/hc-install/src/src.go b/vendor/github.com/hashicorp/hc-install/src/src.go index 11fef7869ffdd..f7b8265efba38 100644 --- a/vendor/github.com/hashicorp/hc-install/src/src.go +++ b/vendor/github.com/hashicorp/hc-install/src/src.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package src import ( diff --git a/vendor/github.com/hashicorp/hc-install/version/VERSION b/vendor/github.com/hashicorp/hc-install/version/VERSION index 79a2734bbf3de..a918a2aa18d5b 100644 --- a/vendor/github.com/hashicorp/hc-install/version/VERSION +++ b/vendor/github.com/hashicorp/hc-install/version/VERSION @@ -1 +1 @@ -0.5.0 \ No newline at end of file +0.6.0 diff --git a/vendor/github.com/hashicorp/hc-install/version/version.go b/vendor/github.com/hashicorp/hc-install/version/version.go index db367e560ae13..facd42949c769 100644 --- a/vendor/github.com/hashicorp/hc-install/version/version.go +++ b/vendor/github.com/hashicorp/hc-install/version/version.go @@ -1,7 +1,11 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package version import ( _ "embed" + "strings" "github.com/hashicorp/go-version" ) @@ -9,6 +13,9 @@ import ( //go:embed VERSION var rawVersion string +// parsedVersion declared here ensures that invalid versions panic early, on import +var parsedVersion = version.Must(version.NewVersion(strings.TrimSpace(rawVersion))) + // Version returns the version of the library // // Note: This is only exposed as public function/package @@ -16,5 +23,5 @@ var rawVersion string // In general downstream should not implement version-specific // logic and rely on this function to be present in future releases. func Version() *version.Version { - return version.Must(version.NewVersion(rawVersion)) + return parsedVersion } diff --git a/vendor/github.com/hashicorp/hcl/v2/CHANGELOG.md b/vendor/github.com/hashicorp/hcl/v2/CHANGELOG.md index daf3ad90f6002..0d523b52282a6 100644 --- a/vendor/github.com/hashicorp/hcl/v2/CHANGELOG.md +++ b/vendor/github.com/hashicorp/hcl/v2/CHANGELOG.md @@ -1,5 +1,35 @@ # HCL Changelog +## v2.18.0 (August 30, 2023) + +### Enhancements + +* HCL now uses the tables from Unicode 15 when performing string normalization and character segmentation. HCL was previously using the Unicode 13 tables. + + For calling applications where consistent Unicode support is important, consider also upgrading to Go 1.21 at the same time as adopting HCL v2.18.0 so that the standard library unicode tables (used for case folding, etc) will also be from Unicode 15. + +## v2.17.1 (August 30, 2023) + +### Enhancements + +* hclsyntax: When evaluating string templates that have a long known constant prefix, HCL will truncate the known prefix to avoid creating excessively-large refinements. String prefix refinements are intended primarily for relatively-short fixed prefixes, such as `https://` at the start of a URL known to use that scheme. ([#617](https://github.com/hashicorp/hcl/pull/617)) +* ext/tryfunc: The "try" and "can" functions now handle unknown values slightly more precisely, and so can return known values in more situations when given expressions referring to unknown symbols. ([#622](https://github.com/hashicorp/hcl/pull/622)) + +### Bugs Fixed + +* ext/typeexpr: Will no longer try to refine unknown values of unknown type when dealing with a user-specified type constraint containing the `any` keyword, avoiding an incorrect panic at runtime. ([#625](https://github.com/hashicorp/hcl/pull/625)) +* ext/typeexpr: Now correctly handles attempts to declare the same object type attribute multiple times by returning an error. Previously this could potentially panic by creating an incoherent internal state. ([#624](https://github.com/hashicorp/hcl/pull/624)) + +## v2.17.0 (May 31, 2023) + +### Enhancements + +* HCL now uses a newer version of the upstream `cty` library which has improved treatment of unknown values: it can now track additional optional information that reduces the range of an unknown value, which allows some operations against unknown values to return known or partially-known results. ([#590](https://github.com/hashicorp/hcl/pull/590)) + + **Note:** This change effectively passes on [`cty`'s notion of backward compatibility](https://github.com/zclconf/go-cty/blob/main/COMPATIBILITY.md) whereby unknown values can become "more known" in later releases. In particular, if your caller is using `cty.Value.RawEquals` in its tests against the results of operations with unknown values then you may see those tests begin failing after upgrading, due to the values now being more "refined". + + If so, you should review the refinements with consideration to [the `cty` refinements docs](https://github.com/zclconf/go-cty/blob/7dcbae46a6f247e983efb1fa774d2bb68781a333/docs/refinements.md) and update your expected results to match only if the reported refinements seem correct for the given situation. The `RawEquals` method is intended only for making exact value comparisons in test cases, so main application code should not use it; use `Equals` instead for real logic, which will take refinements into account automatically. + ## v2.16.2 (March 9, 2023) ### Bugs Fixed diff --git a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/expression.go b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/expression.go index 55fecd4eaf0d0..5df423fec2405 100644 --- a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/expression.go +++ b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/expression.go @@ -696,7 +696,59 @@ func (e *ConditionalExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostic return cty.UnknownVal(resultType), diags } if !condResult.IsKnown() { - return cty.UnknownVal(resultType), diags + // We might be able to offer a refined range for the result based on + // the two possible outcomes. + if trueResult.Type() == cty.Number && falseResult.Type() == cty.Number { + // This case deals with the common case of (predicate ? 1 : 0) and + // significantly decreases the range of the result in that case. + if !(trueResult.IsNull() || falseResult.IsNull()) { + if gt := trueResult.GreaterThan(falseResult); gt.IsKnown() { + b := cty.UnknownVal(cty.Number).Refine() + if gt.True() { + b = b. + NumberRangeLowerBound(falseResult, true). + NumberRangeUpperBound(trueResult, true) + } else { + b = b. + NumberRangeLowerBound(trueResult, true). + NumberRangeUpperBound(falseResult, true) + } + b = b.NotNull() // If neither of the results is null then the result can't be either + return b.NewValue().WithSameMarks(condResult).WithSameMarks(trueResult).WithSameMarks(falseResult), diags + } + } + } + if trueResult.Type().IsCollectionType() && falseResult.Type().IsCollectionType() { + if trueResult.Type().Equals(falseResult.Type()) { + if !(trueResult.IsNull() || falseResult.IsNull()) { + trueLen := trueResult.Length() + falseLen := falseResult.Length() + if gt := trueLen.GreaterThan(falseLen); gt.IsKnown() { + b := cty.UnknownVal(resultType).Refine() + trueLen, _ := trueLen.AsBigFloat().Int64() + falseLen, _ := falseLen.AsBigFloat().Int64() + if gt.True() { + b = b. + CollectionLengthLowerBound(int(falseLen)). + CollectionLengthUpperBound(int(trueLen)) + } else { + b = b. + CollectionLengthLowerBound(int(trueLen)). + CollectionLengthUpperBound(int(falseLen)) + } + b = b.NotNull() // If neither of the results is null then the result can't be either + return b.NewValue().WithSameMarks(condResult).WithSameMarks(trueResult).WithSameMarks(falseResult), diags + } + } + } + } + trueRng := trueResult.Range() + falseRng := falseResult.Range() + ret := cty.UnknownVal(resultType) + if trueRng.DefinitelyNotNull() && falseRng.DefinitelyNotNull() { + ret = ret.RefineNotNull() + } + return ret.WithSameMarks(condResult).WithSameMarks(trueResult).WithSameMarks(falseResult), diags } condResult, err := convert.Convert(condResult, cty.Bool) if err != nil { @@ -1632,11 +1684,15 @@ func (e *SplatExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) { // example, it is valid to use a splat on a single object to retrieve a // list of a single attribute, but we still need to check if that // attribute actually exists. - upgradedUnknown = !sourceVal.IsKnown() + if !sourceVal.IsKnown() { + sourceRng := sourceVal.Range() + if sourceRng.CouldBeNull() { + upgradedUnknown = true + } + } sourceVal = cty.TupleVal([]cty.Value{sourceVal}) sourceTy = sourceVal.Type() - } // We'll compute our result type lazily if we need it. In the normal case @@ -1675,7 +1731,20 @@ func (e *SplatExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) { // checking to proceed. ty, tyDiags := resultTy() diags = append(diags, tyDiags...) - return cty.UnknownVal(ty), diags + ret := cty.UnknownVal(ty) + if ty != cty.DynamicPseudoType { + ret = ret.RefineNotNull() + } + if ty.IsListType() && sourceVal.Type().IsCollectionType() { + // We can refine the length of an unknown list result based on + // the source collection's own length. + sourceRng := sourceVal.Range() + ret = ret.Refine(). + CollectionLengthLowerBound(sourceRng.LengthLowerBound()). + CollectionLengthUpperBound(sourceRng.LengthUpperBound()). + NewValue() + } + return ret.WithSameMarks(sourceVal), diags } // Unmark the collection, and save the marks to apply to the returned diff --git a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/expression_template.go b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/expression_template.go index 0b5ac19553e5b..a0dc7c2291be8 100644 --- a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/expression_template.go +++ b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/expression_template.go @@ -38,11 +38,9 @@ func (e *TemplateExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) if partVal.IsNull() { diags = append(diags, &hcl.Diagnostic{ - Severity: hcl.DiagError, - Summary: "Invalid template interpolation value", - Detail: fmt.Sprintf( - "The expression result is null. Cannot include a null value in a string template.", - ), + Severity: hcl.DiagError, + Summary: "Invalid template interpolation value", + Detail: "The expression result is null. Cannot include a null value in a string template.", Subject: part.Range().Ptr(), Context: &e.SrcRange, Expression: part, @@ -83,16 +81,38 @@ func (e *TemplateExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) continue } - buf.WriteString(strVal.AsString()) + // If we're just continuing to validate after we found an unknown value + // then we'll skip appending so that "buf" will contain only the + // known prefix of the result. + if isKnown && !diags.HasErrors() { + buf.WriteString(strVal.AsString()) + } } var ret cty.Value if !isKnown { ret = cty.UnknownVal(cty.String) + if !diags.HasErrors() { // Invalid input means our partial result buffer is suspect + if knownPrefix := buf.String(); knownPrefix != "" { + byteLen := len(knownPrefix) + // Impose a reasonable upper limit to avoid producing too long a prefix. + // The 128 B is about 10% of the safety limits in cty's msgpack decoder. + // @see https://github.com/zclconf/go-cty/blob/v1.13.2/cty/msgpack/unknown.go#L170-L175 + // + // This operation is safe because StringPrefix removes incomplete trailing grapheme clusters. + if byteLen > 128 { // arbitrarily-decided threshold + byteLen = 128 + } + ret = ret.Refine().StringPrefix(knownPrefix[:byteLen]).NewValue() + } + } } else { ret = cty.StringVal(buf.String()) } + // A template rendering result is never null. + ret = ret.RefineNotNull() + // Apply the full set of marks to the returned value return ret.WithMarks(marks), diags } diff --git a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/parser.go b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/parser.go index 6ed88e6320358..aa147afeb49a6 100644 --- a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/parser.go +++ b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/parser.go @@ -9,7 +9,7 @@ import ( "strconv" "unicode/utf8" - "github.com/apparentlymart/go-textseg/v13/textseg" + "github.com/apparentlymart/go-textseg/v15/textseg" "github.com/hashicorp/hcl/v2" "github.com/zclconf/go-cty/cty" ) diff --git a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/parser_template.go b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/parser_template.go index 3ac6829881aca..19e988064d8b2 100644 --- a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/parser_template.go +++ b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/parser_template.go @@ -8,7 +8,7 @@ import ( "strings" "unicode" - "github.com/apparentlymart/go-textseg/v13/textseg" + "github.com/apparentlymart/go-textseg/v15/textseg" "github.com/hashicorp/hcl/v2" "github.com/zclconf/go-cty/cty" ) diff --git a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/token.go b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/token.go index a14b39407fe46..afde5f33a0bb0 100644 --- a/vendor/github.com/hashicorp/hcl/v2/hclsyntax/token.go +++ b/vendor/github.com/hashicorp/hcl/v2/hclsyntax/token.go @@ -7,7 +7,7 @@ import ( "bytes" "fmt" - "github.com/apparentlymart/go-textseg/v13/textseg" + "github.com/apparentlymart/go-textseg/v15/textseg" "github.com/hashicorp/hcl/v2" ) diff --git a/vendor/github.com/hashicorp/hcl/v2/pos_scanner.go b/vendor/github.com/hashicorp/hcl/v2/pos_scanner.go index cff553927093e..2232f374af2c1 100644 --- a/vendor/github.com/hashicorp/hcl/v2/pos_scanner.go +++ b/vendor/github.com/hashicorp/hcl/v2/pos_scanner.go @@ -7,7 +7,7 @@ import ( "bufio" "bytes" - "github.com/apparentlymart/go-textseg/v13/textseg" + "github.com/apparentlymart/go-textseg/v15/textseg" ) // RangeScanner is a helper that will scan over a buffer using a bufio.SplitFunc diff --git a/vendor/github.com/hashicorp/terraform-exec/internal/version/version.go b/vendor/github.com/hashicorp/terraform-exec/internal/version/version.go index bf1a046c740e7..e5328d9803617 100644 --- a/vendor/github.com/hashicorp/terraform-exec/internal/version/version.go +++ b/vendor/github.com/hashicorp/terraform-exec/internal/version/version.go @@ -1,6 +1,9 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package version -const version = "0.18.1" +const version = "0.19.0" // ModuleVersion returns the current version of the github.com/hashicorp/terraform-exec Go module. // This is a function to allow for future possible enhancement using debug.BuildInfo. diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/apply.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/apply.go index 6dfdb976c5334..2c5a6d07a9d3b 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/apply.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/apply.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( @@ -10,6 +13,7 @@ import ( type applyConfig struct { backup string + destroy bool dirOrPlan string lock bool @@ -18,6 +22,7 @@ type applyConfig struct { parallelism int reattachInfo ReattachInfo refresh bool + refreshOnly bool replaceAddrs []string state string stateOut string @@ -29,6 +34,7 @@ type applyConfig struct { } var defaultApplyOptions = applyConfig{ + destroy: false, lock: true, parallelism: 10, refresh: true, @@ -75,6 +81,10 @@ func (opt *RefreshOption) configureApply(conf *applyConfig) { conf.refresh = opt.refresh } +func (opt *RefreshOnlyOption) configureApply(conf *applyConfig) { + conf.refreshOnly = opt.refreshOnly +} + func (opt *ReplaceOption) configureApply(conf *applyConfig) { conf.replaceAddrs = append(conf.replaceAddrs, opt.address) } @@ -91,6 +101,10 @@ func (opt *ReattachOption) configureApply(conf *applyConfig) { conf.reattachInfo = opt.info } +func (opt *DestroyFlagOption) configureApply(conf *applyConfig) { + conf.destroy = opt.destroy +} + // Apply represents the terraform apply subcommand. func (tf *Terraform) Apply(ctx context.Context, opts ...ApplyOption) error { cmd, err := tf.applyCmd(ctx, opts...) @@ -178,6 +192,17 @@ func (tf *Terraform) buildApplyArgs(ctx context.Context, c applyConfig) ([]strin args = append(args, "-parallelism="+fmt.Sprint(c.parallelism)) args = append(args, "-refresh="+strconv.FormatBool(c.refresh)) + if c.refreshOnly { + err := tf.compatible(ctx, tf0_15_4, nil) + if err != nil { + return nil, fmt.Errorf("refresh-only option was introduced in Terraform 0.15.4: %w", err) + } + if !c.refresh { + return nil, fmt.Errorf("you cannot use refresh=false in refresh-only planning mode") + } + args = append(args, "-refresh-only") + } + // string slice opts: split into separate args if c.replaceAddrs != nil { err := tf.compatible(ctx, tf0_15_2, nil) @@ -188,6 +213,14 @@ func (tf *Terraform) buildApplyArgs(ctx context.Context, c applyConfig) ([]strin args = append(args, "-replace="+addr) } } + if c.destroy { + err := tf.compatible(ctx, tf0_15_2, nil) + if err != nil { + return nil, fmt.Errorf("-destroy option was introduced in Terraform 0.15.2: %w", err) + } + args = append(args, "-destroy") + } + if c.targets != nil { for _, ta := range c.targets { args = append(args, "-target="+ta) diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd.go index 56393a006c111..5e160324c8263 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( @@ -166,7 +169,7 @@ func (tf *Terraform) buildEnv(mergeEnv map[string]string) []string { env[automationEnvVar] = "1" // force usage of workspace methods for switching - env[workspaceEnvVar] = "" + delete(env, workspaceEnvVar) if tf.disablePluginTLS { env[disablePluginTLSEnvVar] = "1" diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd_default.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd_default.go index 79dacc93337b9..3af11c8122848 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd_default.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd_default.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + //go:build !linux // +build !linux diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd_linux.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd_linux.go index 440fafe8f25aa..0565372c12f17 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd_linux.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/cmd_linux.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/destroy.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/destroy.go index 189db7e45f6f9..dbef8b3757e11 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/destroy.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/destroy.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/doc.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/doc.go index 0e82bbd9f9065..288476f516e4e 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/doc.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tfexec exposes functionality for constructing and running Terraform // CLI commands. Structured return values use the data types defined in the // github.com/hashicorp/terraform-json package. diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/errors.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/errors.go index 3bbb431caa083..c6645e8bc7797 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/errors.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/errors.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/fmt.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/fmt.go index 2234c79fa7e3d..0979492336ca9 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/fmt.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/fmt.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/force_unlock.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/force_unlock.go index de95f547a6adc..7d74a12f931f6 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/force_unlock.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/force_unlock.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/get.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/get.go index 5bac9b1976d4e..8a1363b5df94d 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/get.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/get.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/graph.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/graph.go index 73396280ba926..1b28aa579e03f 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/graph.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/graph.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/import.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/import.go index e243d7281778d..67275dfaa7e96 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/import.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/import.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/init.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/init.go index 8fd366777c02c..c292fdc0f1941 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/init.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/init.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/metadata_functions.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/metadata_functions.go index 4577e062b4a1f..0e642b2db8d0f 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/metadata_functions.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/metadata_functions.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/options.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/options.go index ad3cc65c66bd4..5f04680b29041 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/options.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/options.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( @@ -324,6 +327,14 @@ func Refresh(refresh bool) *RefreshOption { return &RefreshOption{refresh} } +type RefreshOnlyOption struct { + refreshOnly bool +} + +func RefreshOnly(refreshOnly bool) *RefreshOnlyOption { + return &RefreshOnlyOption{refreshOnly} +} + type ReplaceOption struct { address string } @@ -362,6 +373,15 @@ func Target(resource string) *TargetOption { return &TargetOption{resource} } +type TestsDirectoryOption struct { + testsDirectory string +} + +// TestsDirectory represents the -tests-directory option (path to tests files) +func TestsDirectory(testsDirectory string) *TestsDirectoryOption { + return &TestsDirectoryOption{testsDirectory} +} + type GraphTypeOption struct { graphType string } diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/output.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/output.go index b16b8b7289051..b1185e8a179ef 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/output.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/output.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/plan.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/plan.go index 5ea3155202da4..946ce8d0ad332 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/plan.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/plan.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( @@ -17,6 +20,7 @@ type planConfig struct { parallelism int reattachInfo ReattachInfo refresh bool + refreshOnly bool replaceAddrs []string state string targets []string @@ -65,6 +69,10 @@ func (opt *RefreshOption) configurePlan(conf *planConfig) { conf.refresh = opt.refresh } +func (opt *RefreshOnlyOption) configurePlan(conf *planConfig) { + conf.refreshOnly = opt.refreshOnly +} + func (opt *ReplaceOption) configurePlan(conf *planConfig) { conf.replaceAddrs = append(conf.replaceAddrs, opt.address) } @@ -199,6 +207,17 @@ func (tf *Terraform) buildPlanArgs(ctx context.Context, c planConfig) ([]string, args = append(args, "-parallelism="+fmt.Sprint(c.parallelism)) args = append(args, "-refresh="+strconv.FormatBool(c.refresh)) + if c.refreshOnly { + err := tf.compatible(ctx, tf0_15_4, nil) + if err != nil { + return nil, fmt.Errorf("refresh-only option was introduced in Terraform 0.15.4: %w", err) + } + if !c.refresh { + return nil, fmt.Errorf("you cannot use refresh=false in refresh-only planning mode") + } + args = append(args, "-refresh-only") + } + // unary flags: pass if true if c.replaceAddrs != nil { err := tf.compatible(ctx, tf0_15_2, nil) diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/providers_lock.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/providers_lock.go index b3a20216d23d9..ef5d995b2af8e 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/providers_lock.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/providers_lock.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/providers_schema.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/providers_schema.go index 52efc5db6062d..995dd15697ddd 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/providers_schema.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/providers_schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/refresh.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/refresh.go index 4bdd8960f5968..16733889d84bc 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/refresh.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/refresh.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/show.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/show.go index 61e660ac991cb..8bf0779f5f4d8 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/show.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/show.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/state_mv.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/state_mv.go index fc7eecf86ce44..ca92e5220b401 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/state_mv.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/state_mv.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/state_pull.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/state_pull.go index 11b6b9c77f0ec..9fa6e5db95a37 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/state_pull.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/state_pull.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/state_push.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/state_push.go index 14e55a2eb3fec..a0873e96ced77 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/state_push.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/state_push.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/state_rm.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/state_rm.go index 0c5dd66676e19..2db18cb74722b 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/state_rm.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/state_rm.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/taint.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/taint.go index cd69df3085f6e..b6ac955cdd60f 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/taint.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/taint.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/terraform.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/terraform.go index 10d7d9adbae60..628b733dec2b0 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/terraform.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/terraform.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/test.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/test.go new file mode 100644 index 0000000000000..5e0bb6353fb66 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/test.go @@ -0,0 +1,66 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfexec + +import ( + "context" + "fmt" + "io" + "os/exec" +) + +type testConfig struct { + testsDirectory string +} + +var defaultTestOptions = testConfig{} + +type TestOption interface { + configureTest(*testConfig) +} + +func (opt *TestsDirectoryOption) configureTest(conf *testConfig) { + conf.testsDirectory = opt.testsDirectory +} + +// Test represents the terraform test -json subcommand. +// +// The given io.Writer, if specified, will receive +// [machine-readable](https://developer.hashicorp.com/terraform/internals/machine-readable-ui) +// JSON from Terraform including test results. +func (tf *Terraform) Test(ctx context.Context, w io.Writer, opts ...TestOption) error { + err := tf.compatible(ctx, tf1_6_0, nil) + + if err != nil { + return fmt.Errorf("terraform test was added in 1.6.0: %w", err) + } + + tf.SetStdout(w) + + testCmd := tf.testCmd(ctx) + + err = tf.runTerraformCmd(ctx, testCmd) + + if err != nil { + return err + } + + return nil +} + +func (tf *Terraform) testCmd(ctx context.Context, opts ...TestOption) *exec.Cmd { + c := defaultTestOptions + + for _, o := range opts { + o.configureTest(&c) + } + + args := []string{"test", "-json"} + + if c.testsDirectory != "" { + args = append(args, "-tests-directory="+c.testsDirectory) + } + + return tf.buildTerraformCmd(ctx, nil, args...) +} diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/untaint.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/untaint.go index bda1272775d02..5f0bf350e6574 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/untaint.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/untaint.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/upgrade012.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/upgrade012.go index e55237a7b6eea..34a2c87de1449 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/upgrade012.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/upgrade012.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/upgrade013.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/upgrade013.go index f1f444e2f4220..98dc45908530a 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/upgrade013.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/upgrade013.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/validate.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/validate.go index 320011df19a3b..d995d3759da76 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/validate.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/validate.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/version.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/version.go index a2e973681f04d..4ba4f6eafcd6f 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/version.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( @@ -26,8 +29,10 @@ var ( tf0_15_0 = version.Must(version.NewVersion("0.15.0")) tf0_15_2 = version.Must(version.NewVersion("0.15.2")) tf0_15_3 = version.Must(version.NewVersion("0.15.3")) + tf0_15_4 = version.Must(version.NewVersion("0.15.4")) tf1_1_0 = version.Must(version.NewVersion("1.1.0")) tf1_4_0 = version.Must(version.NewVersion("1.4.0")) + tf1_6_0 = version.Must(version.NewVersion("1.6.0")) ) // Version returns structured output from the terraform version command including both the Terraform CLI version diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_delete.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_delete.go index 526772079a386..f2a17e652ee26 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_delete.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_delete.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_list.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_list.go index 33c0d779b390c..1b4bec37636af 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_list.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_list.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_new.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_new.go index 2e05ffdb764ea..921a11873f94b 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_new.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_new.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_select.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_select.go index 5a51330f6f56f..da88472ab472c 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_select.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_select.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import "context" diff --git a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_show.go b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_show.go index 7d5a267f1dbd9..840eff9ae9887 100644 --- a/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_show.go +++ b/vendor/github.com/hashicorp/terraform-exec/tfexec/workspace_show.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfexec import ( diff --git a/vendor/github.com/hashicorp/terraform-json/.copywrite.hcl b/vendor/github.com/hashicorp/terraform-json/.copywrite.hcl new file mode 100644 index 0000000000000..ada7d74aa733c --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-json/.copywrite.hcl @@ -0,0 +1,13 @@ +schema_version = 1 + +project { + license = "MPL-2.0" + copyright_year = 2019 + + # (OPTIONAL) A list of globs that should not have copyright/license headers. + # Supports doublestar glob patterns for more flexibility in defining which + # files or folders should be ignored + header_ignore = [ + "testdata/**", + ] +} diff --git a/vendor/github.com/hashicorp/terraform-json/action.go b/vendor/github.com/hashicorp/terraform-json/action.go index 51c4c8369af90..c74f7e68a31ba 100644 --- a/vendor/github.com/hashicorp/terraform-json/action.go +++ b/vendor/github.com/hashicorp/terraform-json/action.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson // Action is a valid action type for a resource change. diff --git a/vendor/github.com/hashicorp/terraform-json/checks.go b/vendor/github.com/hashicorp/terraform-json/checks.go new file mode 100644 index 0000000000000..558cb290b6d61 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-json/checks.go @@ -0,0 +1,145 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfjson + +// CheckKind is a string representation of the type of conditional check +// referenced in a check result. +type CheckKind string + +const ( + // CheckKindResource indicates the check result is from a pre- or + // post-condition on a resource or data source. + CheckKindResource CheckKind = "resource" + + // CheckKindOutputValue indicates the check result is from an output + // post-condition. + CheckKindOutputValue CheckKind = "output_value" + + // CheckKindCheckBlock indicates the check result is from a check block. + CheckKindCheckBlock CheckKind = "check" +) + +// CheckStatus is a string representation of the status of a given conditional +// check. +type CheckStatus string + +const ( + // CheckStatusPass indicates the check passed. + CheckStatusPass CheckStatus = "pass" + + // CheckStatusFail indicates the check failed. + CheckStatusFail CheckStatus = "fail" + + // CheckStatusError indicates the check errored. This is distinct from + // CheckStatusFail in that it represents a logical or configuration error + // within the check block that prevented the check from executing, as + // opposed to the check was attempted and evaluated to false. + CheckStatusError CheckStatus = "error" + + // CheckStatusUnknown indicates the result of the check was not known. This + // could be because a value within the check could not be known at plan + // time, or because the overall plan failed for an unrelated reason before + // this check could be executed. + CheckStatusUnknown CheckStatus = "unknown" +) + +// CheckStaticAddress details the address of the object that performed a given +// check. The static address points to the overall resource, as opposed to the +// dynamic address which contains the instance key for any resource that has +// multiple instances. +type CheckStaticAddress struct { + // ToDisplay is a formatted and ready to display representation of the + // address. + ToDisplay string `json:"to_display"` + + // Kind represents the CheckKind of this check. + Kind CheckKind `json:"kind"` + + // Module is the module part of the address. This will be empty for any + // resources in the root module. + Module string `json:"module,omitempty"` + + // Mode is the ResourceMode of the resource that contains this check. This + // field is only set is Kind equals CheckKindResource. + Mode ResourceMode `json:"mode,omitempty"` + + // Type is the resource type for the resource that contains this check. This + // field is only set if Kind equals CheckKindResource. + Type string `json:"type,omitempty"` + + // Name is the name of the resource, check block, or output that contains + // this check. + Name string `json:"name,omitempty"` +} + +// CheckDynamicAddress contains the InstanceKey field for any resources that +// have multiple instances. A complete address can be built by combining the +// CheckStaticAddress with the CheckDynamicAddress. +type CheckDynamicAddress struct { + // ToDisplay is a formatted and ready to display representation of the + // full address, including the additional information from the relevant + // CheckStaticAddress. + ToDisplay string `json:"to_display"` + + // Module is the module part of the address. This address will include the + // instance key for any module expansions resulting from foreach or count + // arguments. This field will be empty for any resources within the root + // module. + Module string `json:"module,omitempty"` + + // InstanceKey is the instance key for any instances of a given resource. + // + // InstanceKey will be empty if there was no foreach or count argument + // defined on the containing object. + InstanceKey interface{} `json:"instance_key,omitempty"` +} + +// CheckResultStatic is the container for a "checkable object". +// +// A "checkable object" is a resource or data source, an output, or a check +// block. +type CheckResultStatic struct { + // Address is the absolute address of the "checkable object" + Address CheckStaticAddress `json:"address"` + + // Status is the overall status for all the checks within this object. + Status CheckStatus `json:"status"` + + // Instances contains the results for dynamic object that belongs to this + // static object. For example, any instances created from an object using + // the foreach or count meta arguments. + // + // Check blocks and outputs will only contain a single instance, while + // resources can contain 1 to many. + Instances []CheckResultDynamic `json:"instances,omitempty"` +} + +// CheckResultDynamic describes the check result for a dynamic object that +// results from the expansion of the containing object. +type CheckResultDynamic struct { + // Address is the relative address of this instance given the Address in the + // parent object. + Address CheckDynamicAddress `json:"address"` + + // Status is the overall status for the checks within this dynamic object. + Status CheckStatus `json:"status"` + + // Problems describes any additional optional details about this check if + // the check failed. + // + // This will not include the errors resulting from this check block, as they + // will be exposed as diagnostics in the original terraform execution. It + // may contain any failure messages even if the overall status is + // CheckStatusError, however, as the instance could contain multiple checks + // that returned a mix of error and failure statuses. + Problems []CheckResultProblem `json:"problems,omitempty"` +} + +// CheckResultProblem describes one of potentially several problems that led to +// a check being classied as CheckStatusFail. +type CheckResultProblem struct { + // Message is the condition error message provided by the original check + // author. + Message string `json:"message"` +} diff --git a/vendor/github.com/hashicorp/terraform-json/config.go b/vendor/github.com/hashicorp/terraform-json/config.go index 5ebe4bc840c96..e8ea638acc18e 100644 --- a/vendor/github.com/hashicorp/terraform-json/config.go +++ b/vendor/github.com/hashicorp/terraform-json/config.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson import ( diff --git a/vendor/github.com/hashicorp/terraform-json/expression.go b/vendor/github.com/hashicorp/terraform-json/expression.go index 8a39face7b670..5ecb15ce50fba 100644 --- a/vendor/github.com/hashicorp/terraform-json/expression.go +++ b/vendor/github.com/hashicorp/terraform-json/expression.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson import "encoding/json" diff --git a/vendor/github.com/hashicorp/terraform-json/metadata.go b/vendor/github.com/hashicorp/terraform-json/metadata.go index 70d7ce4380a01..eb52577607845 100644 --- a/vendor/github.com/hashicorp/terraform-json/metadata.go +++ b/vendor/github.com/hashicorp/terraform-json/metadata.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson import ( diff --git a/vendor/github.com/hashicorp/terraform-json/plan.go b/vendor/github.com/hashicorp/terraform-json/plan.go index 6cfd533e99295..de529accc0578 100644 --- a/vendor/github.com/hashicorp/terraform-json/plan.go +++ b/vendor/github.com/hashicorp/terraform-json/plan.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson import ( @@ -63,6 +66,14 @@ type Plan struct { // RelevantAttributes represents any resource instances and their // attributes which may have contributed to the planned changes RelevantAttributes []ResourceAttribute `json:"relevant_attributes,omitempty"` + + // Checks contains the results of any conditional checks executed, or + // planned to be executed, during this plan. + Checks []CheckResultStatic `json:"checks,omitempty"` + + // Timestamp contains the static timestamp that Terraform considers to be + // the time this plan executed, in UTC. + Timestamp string `json:"timestamp,omitempty"` } // ResourceAttribute describes a full path to a resource attribute @@ -197,6 +208,28 @@ type Change struct { // display of sensitive values in user interfaces. BeforeSensitive interface{} `json:"before_sensitive,omitempty"` AfterSensitive interface{} `json:"after_sensitive,omitempty"` + + // Importing contains the import metadata about this operation. If importing + // is present (ie. not null) then the change is an import operation in + // addition to anything mentioned in the actions field. The actual contents + // of the Importing struct is subject to change, so downstream consumers + // should treat any values in here as strictly optional. + Importing *Importing `json:"importing,omitempty"` + + // GeneratedConfig contains any HCL config generated for this resource + // during planning as a string. + // + // If this is populated, then Importing should also be populated but this + // might change in the future. However, not all Importing changes will + // contain generated config. + GeneratedConfig string `json:"generated_config,omitempty"` +} + +// Importing is a nested object for the resource import metadata. +type Importing struct { + // The original ID of this resource used to target it as part of planned + // import operation. + ID string `json:"id,omitempty"` } // PlanVariable is a top-level variable in the Terraform plan. diff --git a/vendor/github.com/hashicorp/terraform-json/schemas.go b/vendor/github.com/hashicorp/terraform-json/schemas.go index f7c8abd50f632..64f87d84a9070 100644 --- a/vendor/github.com/hashicorp/terraform-json/schemas.go +++ b/vendor/github.com/hashicorp/terraform-json/schemas.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson import ( diff --git a/vendor/github.com/hashicorp/terraform-json/state.go b/vendor/github.com/hashicorp/terraform-json/state.go index 3c3f6a4b0aab0..0f2a9996966a3 100644 --- a/vendor/github.com/hashicorp/terraform-json/state.go +++ b/vendor/github.com/hashicorp/terraform-json/state.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson import ( @@ -32,6 +35,10 @@ type State struct { // The values that make up the state. Values *StateValues `json:"values,omitempty"` + + // Checks contains the results of any conditional checks when Values was + // last updated. + Checks *CheckResultStatic `json:"checks,omitempty"` } // UseJSONNumber controls whether the State will be decoded using the diff --git a/vendor/github.com/hashicorp/terraform-json/tfjson.go b/vendor/github.com/hashicorp/terraform-json/tfjson.go index 55f9ac44498a3..3a78a4f0fed30 100644 --- a/vendor/github.com/hashicorp/terraform-json/tfjson.go +++ b/vendor/github.com/hashicorp/terraform-json/tfjson.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tfjson is a de-coupled helper library containing types for // the plan format output by "terraform show -json" command. This // command is designed for the export of Terraform plan data in diff --git a/vendor/github.com/hashicorp/terraform-json/validate.go b/vendor/github.com/hashicorp/terraform-json/validate.go index 97b82d0a97933..53652eff30099 100644 --- a/vendor/github.com/hashicorp/terraform-json/validate.go +++ b/vendor/github.com/hashicorp/terraform-json/validate.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson import ( diff --git a/vendor/github.com/hashicorp/terraform-json/version.go b/vendor/github.com/hashicorp/terraform-json/version.go index 16f0a853e34db..7516ad6dd4940 100644 --- a/vendor/github.com/hashicorp/terraform-json/version.go +++ b/vendor/github.com/hashicorp/terraform-json/version.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfjson // VersionOutput represents output from the version -json command diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/context.go b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/context.go index 385283bb915d7..d99e19796c23c 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/context.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/context.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/doc.go index cc1a033e6141f..1d29f515eacc2 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/doc.go @@ -1,2 +1,5 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package logging contains shared environment variable and log functionality. package logging diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/environment_variables.go b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/environment_variables.go index 49b8072c8c881..c203345769d3d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/environment_variables.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/environment_variables.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging // Environment variables. diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/keys.go b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/keys.go index ce803d752bd68..2cfacba63e428 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/keys.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/keys.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging // Global logging keys attached to all requests. @@ -50,4 +53,10 @@ const ( // The protocol version being used, as a string, such as "6" KeyProtocolVersion = "tf_proto_version" + + // Whether the GetProviderSchemaOptional server capability is enabled + KeyServerCapabilityGetProviderSchemaOptional = "tf_server_capability_get_provider_schema_optional" + + // Whether the PlanDestroy server capability is enabled + KeyServerCapabilityPlanDestroy = "tf_server_capability_plan_destroy" ) diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/protocol.go b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/protocol.go index ee12476905558..a1d49eae12ce5 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/protocol.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/protocol.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/protocol_data.go b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/protocol_data.go index 36dfcd764df55..e96188f59c6ef 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/protocol_data.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/protocol_data.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/provider.go b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/provider.go index b40763c6e1787..1ece6992d0991 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/internal/logging/provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/data_source.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/data_source.go index bdeac86384821..f76df34175a6a 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/data_source.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/data_source.go @@ -1,9 +1,19 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 import ( "context" ) +// DataSourceMetadata describes metadata for a data resource in the GetMetadata +// RPC. +type DataSourceMetadata struct { + // TypeName is the name of the data resource. + TypeName string +} + // DataSourceServer is an interface containing the methods a data source // implementation needs to fill. type DataSourceServer interface { diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/diagnostic.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/diagnostic.go index de0906e33a025..15ab6a4ab133f 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/diagnostic.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/diagnostic.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 import "github.com/hashicorp/terraform-plugin-go/tftypes" diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/doc.go index fdaf5cde4c702..2d35c9251fb19 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tfprotov5 provides the interfaces and types needed to build a // Terraform provider server. // diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/dynamic_value.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/dynamic_value.go index 71d5cc4e97bdd..d21e4966114e5 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/dynamic_value.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/dynamic_value.go @@ -1,9 +1,17 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 import ( + "bytes" + "encoding/json" "errors" + "fmt" "github.com/hashicorp/terraform-plugin-go/tftypes" + msgpack "github.com/vmihailenco/msgpack/v5" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) // ErrUnknownDynamicValueType is returned when a DynamicValue has no MsgPack or @@ -35,7 +43,7 @@ func NewDynamicValue(t tftypes.Type, v tftypes.Value) (DynamicValue, error) { // DynamicValue represents a nested encoding value that came from the protocol. // The only way providers should ever interact with it is by calling its -// `Unmarshal` method to retrive a `tftypes.Value`. Although the type system +// `Unmarshal` method to retrieve a `tftypes.Value`. Although the type system // allows for other interactions, they are explicitly not supported, and will // not be considered when evaluating for breaking changes. Treat this type as // an opaque value, and *only* call its `Unmarshal` method. @@ -44,6 +52,43 @@ type DynamicValue struct { JSON []byte } +// IsNull returns true if the DynamicValue represents a null value based on the +// underlying JSON or MessagePack data. +func (d DynamicValue) IsNull() (bool, error) { + if d.JSON != nil { + decoder := json.NewDecoder(bytes.NewReader(d.JSON)) + token, err := decoder.Token() + + if err != nil { + return false, fmt.Errorf("unable to read DynamicValue JSON token: %w", err) + } + + if token != nil { + return false, nil + } + + return true, nil + } + + if d.MsgPack != nil { + decoder := msgpack.NewDecoder(bytes.NewReader(d.MsgPack)) + code, err := decoder.PeekCode() + + if err != nil { + return false, fmt.Errorf("unable to read DynamicValue MsgPack code: %w", err) + } + + // Extensions are considered unknown + if msgpcode.IsExt(code) || code != msgpcode.Nil { + return false, nil + } + + return true, nil + } + + return false, fmt.Errorf("unable to read DynamicValue: %w", ErrUnknownDynamicValueType) +} + // Unmarshal returns a `tftypes.Value` that represents the information // contained in the DynamicValue in an easy-to-interact-with way. It is the // main purpose of the DynamicValue type, and is how provider developers should diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag/diagnostics.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag/diagnostics.go index 9032b901fdbda..cc40d861fce4a 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag/diagnostics.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag/diagnostics.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package diag import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag/doc.go index 0c73dab12fe60..faaba2285cd07 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package diag contains diagnostics helpers. These implementations are // intentionally outside the public API. package diag diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/attribute_path.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/attribute_path.go index 421bfbec548bc..182479ec9a808 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/attribute_path.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/attribute_path.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/data_source.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/data_source.go index bb1ad54250c58..9a3e8891c98d9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/data_source.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/data_source.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( @@ -5,6 +8,16 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5" ) +func DataSourceMetadata(in *tfplugin5.GetMetadata_DataSourceMetadata) *tfprotov5.DataSourceMetadata { + if in == nil { + return nil + } + + return &tfprotov5.DataSourceMetadata{ + TypeName: in.TypeName, + } +} + func ValidateDataSourceConfigRequest(in *tfplugin5.ValidateDataSourceConfig_Request) (*tfprotov5.ValidateDataSourceConfigRequest, error) { resp := &tfprotov5.ValidateDataSourceConfigRequest{ TypeName: in.TypeName, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/diagnostic.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/diagnostic.go index e0feaea5e9433..1dc41687dc168 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/diagnostic.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/diagnostic.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/provider.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/provider.go index 8184bebf38744..e45cecaa05971 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( @@ -5,6 +8,40 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5" ) +func GetMetadataRequest(in *tfplugin5.GetMetadata_Request) (*tfprotov5.GetMetadataRequest, error) { + return &tfprotov5.GetMetadataRequest{}, nil +} + +func GetMetadataResponse(in *tfplugin5.GetMetadata_Response) (*tfprotov5.GetMetadataResponse, error) { + if in == nil { + return nil, nil + } + + resp := &tfprotov5.GetMetadataResponse{ + DataSources: make([]tfprotov5.DataSourceMetadata, 0, len(in.DataSources)), + Resources: make([]tfprotov5.ResourceMetadata, 0, len(in.Resources)), + ServerCapabilities: ServerCapabilities(in.ServerCapabilities), + } + + for _, datasource := range in.DataSources { + resp.DataSources = append(resp.DataSources, *DataSourceMetadata(datasource)) + } + + for _, resource := range in.Resources { + resp.Resources = append(resp.Resources, *ResourceMetadata(resource)) + } + + diags, err := Diagnostics(in.Diagnostics) + + if err != nil { + return resp, err + } + + resp.Diagnostics = diags + + return resp, nil +} + func GetProviderSchemaRequest(in *tfplugin5.GetProviderSchema_Request) (*tfprotov5.GetProviderSchemaRequest, error) { return &tfprotov5.GetProviderSchemaRequest{}, nil } diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/resource.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/resource.go index 9b7d505be4d8a..f87abdfad0882 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/resource.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( @@ -7,6 +10,16 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5" ) +func ResourceMetadata(in *tfplugin5.GetMetadata_ResourceMetadata) *tfprotov5.ResourceMetadata { + if in == nil { + return nil + } + + return &tfprotov5.ResourceMetadata{ + TypeName: in.TypeName, + } +} + func ValidateResourceTypeConfigRequest(in *tfplugin5.ValidateResourceTypeConfig_Request) (*tfprotov5.ValidateResourceTypeConfigRequest, error) { resp := &tfprotov5.ValidateResourceTypeConfigRequest{ TypeName: in.TypeName, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/schema.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/schema.go index 90f2e03222661..35828c3115c2d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/server_capabilities.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/server_capabilities.go new file mode 100644 index 0000000000000..16e258f39471f --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/server_capabilities.go @@ -0,0 +1,20 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package fromproto + +import ( + "github.com/hashicorp/terraform-plugin-go/tfprotov5" + "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5" +) + +func ServerCapabilities(in *tfplugin5.ServerCapabilities) *tfprotov5.ServerCapabilities { + if in == nil { + return nil + } + + return &tfprotov5.ServerCapabilities{ + GetProviderSchemaOptional: in.GetProviderSchemaOptional, + PlanDestroy: in.PlanDestroy, + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/state.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/state.go index ad89004d2d11f..910f0c7304cfd 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/state.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/string_kind.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/string_kind.go index c15d2df461463..b2b47248f3828 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/string_kind.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/string_kind.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/types.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/types.go index 17f31f852b911..f99ff2b777cbb 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/types.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/fromproto/types.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/context_keys.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/context_keys.go index cc72fe4bbf676..5b2556a27b452 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/context_keys.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/context_keys.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tf5serverlogging // Context key types. diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/doc.go index e77a831c03ea5..82b9d39e5c5a7 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tf5serverlogging contains logging functionality specific to // tf5server and tfprotov5 types. package tf5serverlogging diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/downstream_request.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/downstream_request.go index 65ed7011321b1..efa4d9b529bcd 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/downstream_request.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/downstream_request.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tf5serverlogging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/server_capabilities.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/server_capabilities.go new file mode 100644 index 0000000000000..d0f86c84272a0 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tf5serverlogging/server_capabilities.go @@ -0,0 +1,26 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tf5serverlogging + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-go/internal/logging" + "github.com/hashicorp/terraform-plugin-go/tfprotov5" +) + +// ServerCapabilities generates a TRACE "Announced server capabilities" log. +func ServerCapabilities(ctx context.Context, capabilities *tfprotov5.ServerCapabilities) { + responseFields := map[string]interface{}{ + logging.KeyServerCapabilityGetProviderSchemaOptional: false, + logging.KeyServerCapabilityPlanDestroy: false, + } + + if capabilities != nil { + responseFields[logging.KeyServerCapabilityGetProviderSchemaOptional] = capabilities.GetProviderSchemaOptional + responseFields[logging.KeyServerCapabilityPlanDestroy] = capabilities.PlanDestroy + } + + logging.ProtocolTrace(ctx, "Announced server capabilities", responseFields) +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5.pb.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5.pb.go index 9b7abe79e46ad..b00fa1be15ff9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5.pb.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5.pb.go @@ -1,6 +1,9 @@ -// Terraform Plugin RPC protocol version 5.3 +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Terraform Plugin RPC protocol version 5.4 // -// This file defines version 5.3 of the RPC protocol. To implement a plugin +// This file defines version 5.4 of the RPC protocol. To implement a plugin // against this protocol, copy this definition into your own codebase and // use protoc to generate stubs for your target language. // @@ -19,8 +22,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc-gen-go v1.31.0 +// protoc v4.23.2 // source: tfplugin5.proto package tfplugin5 @@ -523,6 +526,109 @@ func (x *Schema) GetBlock() *Schema_Block { return nil } +// ServerCapabilities allows providers to communicate extra information +// regarding supported protocol features. This is used to indicate +// availability of certain forward-compatible changes which may be optional +// in a major protocol version, but cannot be tested for directly. +type ServerCapabilities struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The plan_destroy capability signals that a provider expects a call + // to PlanResourceChange when a resource is going to be destroyed. + PlanDestroy bool `protobuf:"varint,1,opt,name=plan_destroy,json=planDestroy,proto3" json:"plan_destroy,omitempty"` + // The get_provider_schema_optional capability indicates that this + // provider does not require calling GetProviderSchema to operate + // normally, and the caller can used a cached copy of the provider's + // schema. + GetProviderSchemaOptional bool `protobuf:"varint,2,opt,name=get_provider_schema_optional,json=getProviderSchemaOptional,proto3" json:"get_provider_schema_optional,omitempty"` +} + +func (x *ServerCapabilities) Reset() { + *x = ServerCapabilities{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin5_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerCapabilities) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerCapabilities) ProtoMessage() {} + +func (x *ServerCapabilities) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin5_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerCapabilities.ProtoReflect.Descriptor instead. +func (*ServerCapabilities) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{6} +} + +func (x *ServerCapabilities) GetPlanDestroy() bool { + if x != nil { + return x.PlanDestroy + } + return false +} + +func (x *ServerCapabilities) GetGetProviderSchemaOptional() bool { + if x != nil { + return x.GetProviderSchemaOptional + } + return false +} + +type GetMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetMetadata) Reset() { + *x = GetMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin5_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetadata) ProtoMessage() {} + +func (x *GetMetadata) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin5_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetadata.ProtoReflect.Descriptor instead. +func (*GetMetadata) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{7} +} + type GetProviderSchema struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -532,7 +638,7 @@ type GetProviderSchema struct { func (x *GetProviderSchema) Reset() { *x = GetProviderSchema{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[6] + mi := &file_tfplugin5_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -545,7 +651,7 @@ func (x *GetProviderSchema) String() string { func (*GetProviderSchema) ProtoMessage() {} func (x *GetProviderSchema) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[6] + mi := &file_tfplugin5_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -558,7 +664,7 @@ func (x *GetProviderSchema) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProviderSchema.ProtoReflect.Descriptor instead. func (*GetProviderSchema) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{6} + return file_tfplugin5_proto_rawDescGZIP(), []int{8} } type PrepareProviderConfig struct { @@ -570,7 +676,7 @@ type PrepareProviderConfig struct { func (x *PrepareProviderConfig) Reset() { *x = PrepareProviderConfig{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[7] + mi := &file_tfplugin5_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -583,7 +689,7 @@ func (x *PrepareProviderConfig) String() string { func (*PrepareProviderConfig) ProtoMessage() {} func (x *PrepareProviderConfig) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[7] + mi := &file_tfplugin5_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -596,7 +702,7 @@ func (x *PrepareProviderConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareProviderConfig.ProtoReflect.Descriptor instead. func (*PrepareProviderConfig) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{7} + return file_tfplugin5_proto_rawDescGZIP(), []int{9} } type UpgradeResourceState struct { @@ -608,7 +714,7 @@ type UpgradeResourceState struct { func (x *UpgradeResourceState) Reset() { *x = UpgradeResourceState{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[8] + mi := &file_tfplugin5_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -621,7 +727,7 @@ func (x *UpgradeResourceState) String() string { func (*UpgradeResourceState) ProtoMessage() {} func (x *UpgradeResourceState) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[8] + mi := &file_tfplugin5_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -634,7 +740,7 @@ func (x *UpgradeResourceState) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeResourceState.ProtoReflect.Descriptor instead. func (*UpgradeResourceState) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{8} + return file_tfplugin5_proto_rawDescGZIP(), []int{10} } type ValidateResourceTypeConfig struct { @@ -646,7 +752,7 @@ type ValidateResourceTypeConfig struct { func (x *ValidateResourceTypeConfig) Reset() { *x = ValidateResourceTypeConfig{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[9] + mi := &file_tfplugin5_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -659,7 +765,7 @@ func (x *ValidateResourceTypeConfig) String() string { func (*ValidateResourceTypeConfig) ProtoMessage() {} func (x *ValidateResourceTypeConfig) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[9] + mi := &file_tfplugin5_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -672,7 +778,7 @@ func (x *ValidateResourceTypeConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateResourceTypeConfig.ProtoReflect.Descriptor instead. func (*ValidateResourceTypeConfig) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{9} + return file_tfplugin5_proto_rawDescGZIP(), []int{11} } type ValidateDataSourceConfig struct { @@ -684,7 +790,7 @@ type ValidateDataSourceConfig struct { func (x *ValidateDataSourceConfig) Reset() { *x = ValidateDataSourceConfig{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[10] + mi := &file_tfplugin5_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -697,7 +803,7 @@ func (x *ValidateDataSourceConfig) String() string { func (*ValidateDataSourceConfig) ProtoMessage() {} func (x *ValidateDataSourceConfig) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[10] + mi := &file_tfplugin5_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -710,7 +816,7 @@ func (x *ValidateDataSourceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateDataSourceConfig.ProtoReflect.Descriptor instead. func (*ValidateDataSourceConfig) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{10} + return file_tfplugin5_proto_rawDescGZIP(), []int{12} } type Configure struct { @@ -722,7 +828,7 @@ type Configure struct { func (x *Configure) Reset() { *x = Configure{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[11] + mi := &file_tfplugin5_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -735,7 +841,7 @@ func (x *Configure) String() string { func (*Configure) ProtoMessage() {} func (x *Configure) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[11] + mi := &file_tfplugin5_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -748,7 +854,7 @@ func (x *Configure) ProtoReflect() protoreflect.Message { // Deprecated: Use Configure.ProtoReflect.Descriptor instead. func (*Configure) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{11} + return file_tfplugin5_proto_rawDescGZIP(), []int{13} } type ReadResource struct { @@ -760,7 +866,7 @@ type ReadResource struct { func (x *ReadResource) Reset() { *x = ReadResource{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[12] + mi := &file_tfplugin5_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -773,7 +879,7 @@ func (x *ReadResource) String() string { func (*ReadResource) ProtoMessage() {} func (x *ReadResource) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[12] + mi := &file_tfplugin5_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -786,7 +892,7 @@ func (x *ReadResource) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadResource.ProtoReflect.Descriptor instead. func (*ReadResource) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{12} + return file_tfplugin5_proto_rawDescGZIP(), []int{14} } type PlanResourceChange struct { @@ -798,7 +904,7 @@ type PlanResourceChange struct { func (x *PlanResourceChange) Reset() { *x = PlanResourceChange{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[13] + mi := &file_tfplugin5_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -811,7 +917,7 @@ func (x *PlanResourceChange) String() string { func (*PlanResourceChange) ProtoMessage() {} func (x *PlanResourceChange) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[13] + mi := &file_tfplugin5_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -824,7 +930,7 @@ func (x *PlanResourceChange) ProtoReflect() protoreflect.Message { // Deprecated: Use PlanResourceChange.ProtoReflect.Descriptor instead. func (*PlanResourceChange) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{13} + return file_tfplugin5_proto_rawDescGZIP(), []int{15} } type ApplyResourceChange struct { @@ -836,7 +942,7 @@ type ApplyResourceChange struct { func (x *ApplyResourceChange) Reset() { *x = ApplyResourceChange{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[14] + mi := &file_tfplugin5_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -849,7 +955,7 @@ func (x *ApplyResourceChange) String() string { func (*ApplyResourceChange) ProtoMessage() {} func (x *ApplyResourceChange) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[14] + mi := &file_tfplugin5_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -862,7 +968,7 @@ func (x *ApplyResourceChange) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyResourceChange.ProtoReflect.Descriptor instead. func (*ApplyResourceChange) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{14} + return file_tfplugin5_proto_rawDescGZIP(), []int{16} } type ImportResourceState struct { @@ -874,7 +980,7 @@ type ImportResourceState struct { func (x *ImportResourceState) Reset() { *x = ImportResourceState{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[15] + mi := &file_tfplugin5_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -887,7 +993,7 @@ func (x *ImportResourceState) String() string { func (*ImportResourceState) ProtoMessage() {} func (x *ImportResourceState) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[15] + mi := &file_tfplugin5_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -900,7 +1006,7 @@ func (x *ImportResourceState) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportResourceState.ProtoReflect.Descriptor instead. func (*ImportResourceState) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{15} + return file_tfplugin5_proto_rawDescGZIP(), []int{17} } type ReadDataSource struct { @@ -912,7 +1018,7 @@ type ReadDataSource struct { func (x *ReadDataSource) Reset() { *x = ReadDataSource{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[16] + mi := &file_tfplugin5_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -925,7 +1031,7 @@ func (x *ReadDataSource) String() string { func (*ReadDataSource) ProtoMessage() {} func (x *ReadDataSource) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[16] + mi := &file_tfplugin5_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -938,7 +1044,7 @@ func (x *ReadDataSource) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadDataSource.ProtoReflect.Descriptor instead. func (*ReadDataSource) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{16} + return file_tfplugin5_proto_rawDescGZIP(), []int{18} } type GetProvisionerSchema struct { @@ -950,7 +1056,7 @@ type GetProvisionerSchema struct { func (x *GetProvisionerSchema) Reset() { *x = GetProvisionerSchema{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[17] + mi := &file_tfplugin5_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -963,7 +1069,7 @@ func (x *GetProvisionerSchema) String() string { func (*GetProvisionerSchema) ProtoMessage() {} func (x *GetProvisionerSchema) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[17] + mi := &file_tfplugin5_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -976,7 +1082,7 @@ func (x *GetProvisionerSchema) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProvisionerSchema.ProtoReflect.Descriptor instead. func (*GetProvisionerSchema) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{17} + return file_tfplugin5_proto_rawDescGZIP(), []int{19} } type ValidateProvisionerConfig struct { @@ -988,7 +1094,7 @@ type ValidateProvisionerConfig struct { func (x *ValidateProvisionerConfig) Reset() { *x = ValidateProvisionerConfig{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[18] + mi := &file_tfplugin5_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1001,7 +1107,7 @@ func (x *ValidateProvisionerConfig) String() string { func (*ValidateProvisionerConfig) ProtoMessage() {} func (x *ValidateProvisionerConfig) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[18] + mi := &file_tfplugin5_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1014,7 +1120,7 @@ func (x *ValidateProvisionerConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateProvisionerConfig.ProtoReflect.Descriptor instead. func (*ValidateProvisionerConfig) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{18} + return file_tfplugin5_proto_rawDescGZIP(), []int{20} } type ProvisionResource struct { @@ -1026,7 +1132,7 @@ type ProvisionResource struct { func (x *ProvisionResource) Reset() { *x = ProvisionResource{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[19] + mi := &file_tfplugin5_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1039,7 +1145,7 @@ func (x *ProvisionResource) String() string { func (*ProvisionResource) ProtoMessage() {} func (x *ProvisionResource) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[19] + mi := &file_tfplugin5_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1052,7 +1158,7 @@ func (x *ProvisionResource) ProtoReflect() protoreflect.Message { // Deprecated: Use ProvisionResource.ProtoReflect.Descriptor instead. func (*ProvisionResource) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{19} + return file_tfplugin5_proto_rawDescGZIP(), []int{21} } type AttributePath_Step struct { @@ -1061,6 +1167,7 @@ type AttributePath_Step struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Selector: + // // *AttributePath_Step_AttributeName // *AttributePath_Step_ElementKeyString // *AttributePath_Step_ElementKeyInt @@ -1070,7 +1177,7 @@ type AttributePath_Step struct { func (x *AttributePath_Step) Reset() { *x = AttributePath_Step{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[20] + mi := &file_tfplugin5_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1083,7 +1190,7 @@ func (x *AttributePath_Step) String() string { func (*AttributePath_Step) ProtoMessage() {} func (x *AttributePath_Step) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[20] + mi := &file_tfplugin5_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1162,7 +1269,7 @@ type Stop_Request struct { func (x *Stop_Request) Reset() { *x = Stop_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[21] + mi := &file_tfplugin5_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1175,7 +1282,7 @@ func (x *Stop_Request) String() string { func (*Stop_Request) ProtoMessage() {} func (x *Stop_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[21] + mi := &file_tfplugin5_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1202,7 +1309,7 @@ type Stop_Response struct { func (x *Stop_Response) Reset() { *x = Stop_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[22] + mi := &file_tfplugin5_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1215,7 +1322,7 @@ func (x *Stop_Response) String() string { func (*Stop_Response) ProtoMessage() {} func (x *Stop_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[22] + mi := &file_tfplugin5_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1254,7 +1361,7 @@ type Schema_Block struct { func (x *Schema_Block) Reset() { *x = Schema_Block{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[24] + mi := &file_tfplugin5_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1267,7 +1374,7 @@ func (x *Schema_Block) String() string { func (*Schema_Block) ProtoMessage() {} func (x *Schema_Block) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[24] + mi := &file_tfplugin5_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1344,7 +1451,7 @@ type Schema_Attribute struct { func (x *Schema_Attribute) Reset() { *x = Schema_Attribute{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[25] + mi := &file_tfplugin5_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1357,7 +1464,7 @@ func (x *Schema_Attribute) String() string { func (*Schema_Attribute) ProtoMessage() {} func (x *Schema_Attribute) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[25] + mi := &file_tfplugin5_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1451,7 +1558,7 @@ type Schema_NestedBlock struct { func (x *Schema_NestedBlock) Reset() { *x = Schema_NestedBlock{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[26] + mi := &file_tfplugin5_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1464,7 +1571,7 @@ func (x *Schema_NestedBlock) String() string { func (*Schema_NestedBlock) ProtoMessage() {} func (x *Schema_NestedBlock) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[26] + mi := &file_tfplugin5_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1515,29 +1622,29 @@ func (x *Schema_NestedBlock) GetMaxItems() int64 { return 0 } -type GetProviderSchema_Request struct { +type GetMetadata_Request struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *GetProviderSchema_Request) Reset() { - *x = GetProviderSchema_Request{} +func (x *GetMetadata_Request) Reset() { + *x = GetMetadata_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[27] + mi := &file_tfplugin5_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProviderSchema_Request) String() string { +func (x *GetMetadata_Request) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProviderSchema_Request) ProtoMessage() {} +func (*GetMetadata_Request) ProtoMessage() {} -func (x *GetProviderSchema_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[27] +func (x *GetMetadata_Request) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin5_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1548,41 +1655,39 @@ func (x *GetProviderSchema_Request) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProviderSchema_Request.ProtoReflect.Descriptor instead. -func (*GetProviderSchema_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{6, 0} +// Deprecated: Use GetMetadata_Request.ProtoReflect.Descriptor instead. +func (*GetMetadata_Request) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{7, 0} } -type GetProviderSchema_Response struct { +type GetMetadata_Response struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Provider *Schema `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` - ResourceSchemas map[string]*Schema `protobuf:"bytes,2,rep,name=resource_schemas,json=resourceSchemas,proto3" json:"resource_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - DataSourceSchemas map[string]*Schema `protobuf:"bytes,3,rep,name=data_source_schemas,json=dataSourceSchemas,proto3" json:"data_source_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Diagnostics []*Diagnostic `protobuf:"bytes,4,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` - ProviderMeta *Schema `protobuf:"bytes,5,opt,name=provider_meta,json=providerMeta,proto3" json:"provider_meta,omitempty"` - ServerCapabilities *GetProviderSchema_ServerCapabilities `protobuf:"bytes,6,opt,name=server_capabilities,json=serverCapabilities,proto3" json:"server_capabilities,omitempty"` + ServerCapabilities *ServerCapabilities `protobuf:"bytes,1,opt,name=server_capabilities,json=serverCapabilities,proto3" json:"server_capabilities,omitempty"` + Diagnostics []*Diagnostic `protobuf:"bytes,2,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` + DataSources []*GetMetadata_DataSourceMetadata `protobuf:"bytes,3,rep,name=data_sources,json=dataSources,proto3" json:"data_sources,omitempty"` + Resources []*GetMetadata_ResourceMetadata `protobuf:"bytes,4,rep,name=resources,proto3" json:"resources,omitempty"` } -func (x *GetProviderSchema_Response) Reset() { - *x = GetProviderSchema_Response{} +func (x *GetMetadata_Response) Reset() { + *x = GetMetadata_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[28] + mi := &file_tfplugin5_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProviderSchema_Response) String() string { +func (x *GetMetadata_Response) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProviderSchema_Response) ProtoMessage() {} +func (*GetMetadata_Response) ProtoMessage() {} -func (x *GetProviderSchema_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[28] +func (x *GetMetadata_Response) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin5_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1593,84 +1698,64 @@ func (x *GetProviderSchema_Response) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProviderSchema_Response.ProtoReflect.Descriptor instead. -func (*GetProviderSchema_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{6, 1} -} - -func (x *GetProviderSchema_Response) GetProvider() *Schema { - if x != nil { - return x.Provider - } - return nil -} - -func (x *GetProviderSchema_Response) GetResourceSchemas() map[string]*Schema { - if x != nil { - return x.ResourceSchemas - } - return nil +// Deprecated: Use GetMetadata_Response.ProtoReflect.Descriptor instead. +func (*GetMetadata_Response) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{7, 1} } -func (x *GetProviderSchema_Response) GetDataSourceSchemas() map[string]*Schema { +func (x *GetMetadata_Response) GetServerCapabilities() *ServerCapabilities { if x != nil { - return x.DataSourceSchemas + return x.ServerCapabilities } return nil } -func (x *GetProviderSchema_Response) GetDiagnostics() []*Diagnostic { +func (x *GetMetadata_Response) GetDiagnostics() []*Diagnostic { if x != nil { return x.Diagnostics } return nil } -func (x *GetProviderSchema_Response) GetProviderMeta() *Schema { +func (x *GetMetadata_Response) GetDataSources() []*GetMetadata_DataSourceMetadata { if x != nil { - return x.ProviderMeta + return x.DataSources } return nil } -func (x *GetProviderSchema_Response) GetServerCapabilities() *GetProviderSchema_ServerCapabilities { +func (x *GetMetadata_Response) GetResources() []*GetMetadata_ResourceMetadata { if x != nil { - return x.ServerCapabilities + return x.Resources } return nil } -// ServerCapabilities allows providers to communicate extra information -// regarding supported protocol features. This is used to indicate -// availability of certain forward-compatible changes which may be optional -// in a major protocol version, but cannot be tested for directly. -type GetProviderSchema_ServerCapabilities struct { +type GetMetadata_DataSourceMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The plan_destroy capability signals that a provider expects a call - // to PlanResourceChange when a resource is going to be destroyed. - PlanDestroy bool `protobuf:"varint,1,opt,name=plan_destroy,json=planDestroy,proto3" json:"plan_destroy,omitempty"` + TypeName string `protobuf:"bytes,1,opt,name=type_name,json=typeName,proto3" json:"type_name,omitempty"` } -func (x *GetProviderSchema_ServerCapabilities) Reset() { - *x = GetProviderSchema_ServerCapabilities{} +func (x *GetMetadata_DataSourceMetadata) Reset() { + *x = GetMetadata_DataSourceMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[29] + mi := &file_tfplugin5_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProviderSchema_ServerCapabilities) String() string { +func (x *GetMetadata_DataSourceMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProviderSchema_ServerCapabilities) ProtoMessage() {} +func (*GetMetadata_DataSourceMetadata) ProtoMessage() {} -func (x *GetProviderSchema_ServerCapabilities) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[29] +func (x *GetMetadata_DataSourceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin5_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1681,28 +1766,28 @@ func (x *GetProviderSchema_ServerCapabilities) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use GetProviderSchema_ServerCapabilities.ProtoReflect.Descriptor instead. -func (*GetProviderSchema_ServerCapabilities) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{6, 2} +// Deprecated: Use GetMetadata_DataSourceMetadata.ProtoReflect.Descriptor instead. +func (*GetMetadata_DataSourceMetadata) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{7, 2} } -func (x *GetProviderSchema_ServerCapabilities) GetPlanDestroy() bool { +func (x *GetMetadata_DataSourceMetadata) GetTypeName() string { if x != nil { - return x.PlanDestroy + return x.TypeName } - return false + return "" } -type PrepareProviderConfig_Request struct { +type GetMetadata_ResourceMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Config *DynamicValue `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + TypeName string `protobuf:"bytes,1,opt,name=type_name,json=typeName,proto3" json:"type_name,omitempty"` } -func (x *PrepareProviderConfig_Request) Reset() { - *x = PrepareProviderConfig_Request{} +func (x *GetMetadata_ResourceMetadata) Reset() { + *x = GetMetadata_ResourceMetadata{} if protoimpl.UnsafeEnabled { mi := &file_tfplugin5_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1710,13 +1795,13 @@ func (x *PrepareProviderConfig_Request) Reset() { } } -func (x *PrepareProviderConfig_Request) String() string { +func (x *GetMetadata_ResourceMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PrepareProviderConfig_Request) ProtoMessage() {} +func (*GetMetadata_ResourceMetadata) ProtoMessage() {} -func (x *PrepareProviderConfig_Request) ProtoReflect() protoreflect.Message { +func (x *GetMetadata_ResourceMetadata) ProtoReflect() protoreflect.Message { mi := &file_tfplugin5_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1728,14 +1813,186 @@ func (x *PrepareProviderConfig_Request) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PrepareProviderConfig_Request.ProtoReflect.Descriptor instead. -func (*PrepareProviderConfig_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{7, 0} +// Deprecated: Use GetMetadata_ResourceMetadata.ProtoReflect.Descriptor instead. +func (*GetMetadata_ResourceMetadata) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{7, 3} } -func (x *PrepareProviderConfig_Request) GetConfig() *DynamicValue { +func (x *GetMetadata_ResourceMetadata) GetTypeName() string { if x != nil { - return x.Config + return x.TypeName + } + return "" +} + +type GetProviderSchema_Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetProviderSchema_Request) Reset() { + *x = GetProviderSchema_Request{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin5_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetProviderSchema_Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetProviderSchema_Request) ProtoMessage() {} + +func (x *GetProviderSchema_Request) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin5_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetProviderSchema_Request.ProtoReflect.Descriptor instead. +func (*GetProviderSchema_Request) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{8, 0} +} + +type GetProviderSchema_Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provider *Schema `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` + ResourceSchemas map[string]*Schema `protobuf:"bytes,2,rep,name=resource_schemas,json=resourceSchemas,proto3" json:"resource_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + DataSourceSchemas map[string]*Schema `protobuf:"bytes,3,rep,name=data_source_schemas,json=dataSourceSchemas,proto3" json:"data_source_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Diagnostics []*Diagnostic `protobuf:"bytes,4,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` + ProviderMeta *Schema `protobuf:"bytes,5,opt,name=provider_meta,json=providerMeta,proto3" json:"provider_meta,omitempty"` + ServerCapabilities *ServerCapabilities `protobuf:"bytes,6,opt,name=server_capabilities,json=serverCapabilities,proto3" json:"server_capabilities,omitempty"` +} + +func (x *GetProviderSchema_Response) Reset() { + *x = GetProviderSchema_Response{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin5_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetProviderSchema_Response) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetProviderSchema_Response) ProtoMessage() {} + +func (x *GetProviderSchema_Response) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin5_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetProviderSchema_Response.ProtoReflect.Descriptor instead. +func (*GetProviderSchema_Response) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{8, 1} +} + +func (x *GetProviderSchema_Response) GetProvider() *Schema { + if x != nil { + return x.Provider + } + return nil +} + +func (x *GetProviderSchema_Response) GetResourceSchemas() map[string]*Schema { + if x != nil { + return x.ResourceSchemas + } + return nil +} + +func (x *GetProviderSchema_Response) GetDataSourceSchemas() map[string]*Schema { + if x != nil { + return x.DataSourceSchemas + } + return nil +} + +func (x *GetProviderSchema_Response) GetDiagnostics() []*Diagnostic { + if x != nil { + return x.Diagnostics + } + return nil +} + +func (x *GetProviderSchema_Response) GetProviderMeta() *Schema { + if x != nil { + return x.ProviderMeta + } + return nil +} + +func (x *GetProviderSchema_Response) GetServerCapabilities() *ServerCapabilities { + if x != nil { + return x.ServerCapabilities + } + return nil +} + +type PrepareProviderConfig_Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Config *DynamicValue `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` +} + +func (x *PrepareProviderConfig_Request) Reset() { + *x = PrepareProviderConfig_Request{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin5_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrepareProviderConfig_Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrepareProviderConfig_Request) ProtoMessage() {} + +func (x *PrepareProviderConfig_Request) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin5_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrepareProviderConfig_Request.ProtoReflect.Descriptor instead. +func (*PrepareProviderConfig_Request) Descriptor() ([]byte, []int) { + return file_tfplugin5_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *PrepareProviderConfig_Request) GetConfig() *DynamicValue { + if x != nil { + return x.Config } return nil } @@ -1752,7 +2009,7 @@ type PrepareProviderConfig_Response struct { func (x *PrepareProviderConfig_Response) Reset() { *x = PrepareProviderConfig_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[33] + mi := &file_tfplugin5_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1765,7 +2022,7 @@ func (x *PrepareProviderConfig_Response) String() string { func (*PrepareProviderConfig_Response) ProtoMessage() {} func (x *PrepareProviderConfig_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[33] + mi := &file_tfplugin5_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1778,7 +2035,7 @@ func (x *PrepareProviderConfig_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareProviderConfig_Response.ProtoReflect.Descriptor instead. func (*PrepareProviderConfig_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{7, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{9, 1} } func (x *PrepareProviderConfig_Response) GetPreparedConfig() *DynamicValue { @@ -1823,7 +2080,7 @@ type UpgradeResourceState_Request struct { func (x *UpgradeResourceState_Request) Reset() { *x = UpgradeResourceState_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[34] + mi := &file_tfplugin5_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1836,7 +2093,7 @@ func (x *UpgradeResourceState_Request) String() string { func (*UpgradeResourceState_Request) ProtoMessage() {} func (x *UpgradeResourceState_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[34] + mi := &file_tfplugin5_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1849,7 +2106,7 @@ func (x *UpgradeResourceState_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeResourceState_Request.ProtoReflect.Descriptor instead. func (*UpgradeResourceState_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{8, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{10, 0} } func (x *UpgradeResourceState_Request) GetTypeName() string { @@ -1891,7 +2148,7 @@ type UpgradeResourceState_Response struct { func (x *UpgradeResourceState_Response) Reset() { *x = UpgradeResourceState_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[35] + mi := &file_tfplugin5_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1904,7 +2161,7 @@ func (x *UpgradeResourceState_Response) String() string { func (*UpgradeResourceState_Response) ProtoMessage() {} func (x *UpgradeResourceState_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[35] + mi := &file_tfplugin5_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1917,7 +2174,7 @@ func (x *UpgradeResourceState_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeResourceState_Response.ProtoReflect.Descriptor instead. func (*UpgradeResourceState_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{8, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{10, 1} } func (x *UpgradeResourceState_Response) GetUpgradedState() *DynamicValue { @@ -1946,7 +2203,7 @@ type ValidateResourceTypeConfig_Request struct { func (x *ValidateResourceTypeConfig_Request) Reset() { *x = ValidateResourceTypeConfig_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[36] + mi := &file_tfplugin5_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1959,7 +2216,7 @@ func (x *ValidateResourceTypeConfig_Request) String() string { func (*ValidateResourceTypeConfig_Request) ProtoMessage() {} func (x *ValidateResourceTypeConfig_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[36] + mi := &file_tfplugin5_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1972,7 +2229,7 @@ func (x *ValidateResourceTypeConfig_Request) ProtoReflect() protoreflect.Message // Deprecated: Use ValidateResourceTypeConfig_Request.ProtoReflect.Descriptor instead. func (*ValidateResourceTypeConfig_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{9, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{11, 0} } func (x *ValidateResourceTypeConfig_Request) GetTypeName() string { @@ -2000,7 +2257,7 @@ type ValidateResourceTypeConfig_Response struct { func (x *ValidateResourceTypeConfig_Response) Reset() { *x = ValidateResourceTypeConfig_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[37] + mi := &file_tfplugin5_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2013,7 +2270,7 @@ func (x *ValidateResourceTypeConfig_Response) String() string { func (*ValidateResourceTypeConfig_Response) ProtoMessage() {} func (x *ValidateResourceTypeConfig_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[37] + mi := &file_tfplugin5_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2026,7 +2283,7 @@ func (x *ValidateResourceTypeConfig_Response) ProtoReflect() protoreflect.Messag // Deprecated: Use ValidateResourceTypeConfig_Response.ProtoReflect.Descriptor instead. func (*ValidateResourceTypeConfig_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{9, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{11, 1} } func (x *ValidateResourceTypeConfig_Response) GetDiagnostics() []*Diagnostic { @@ -2048,7 +2305,7 @@ type ValidateDataSourceConfig_Request struct { func (x *ValidateDataSourceConfig_Request) Reset() { *x = ValidateDataSourceConfig_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[38] + mi := &file_tfplugin5_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2061,7 +2318,7 @@ func (x *ValidateDataSourceConfig_Request) String() string { func (*ValidateDataSourceConfig_Request) ProtoMessage() {} func (x *ValidateDataSourceConfig_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[38] + mi := &file_tfplugin5_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2074,7 +2331,7 @@ func (x *ValidateDataSourceConfig_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateDataSourceConfig_Request.ProtoReflect.Descriptor instead. func (*ValidateDataSourceConfig_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{10, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{12, 0} } func (x *ValidateDataSourceConfig_Request) GetTypeName() string { @@ -2102,7 +2359,7 @@ type ValidateDataSourceConfig_Response struct { func (x *ValidateDataSourceConfig_Response) Reset() { *x = ValidateDataSourceConfig_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[39] + mi := &file_tfplugin5_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2115,7 +2372,7 @@ func (x *ValidateDataSourceConfig_Response) String() string { func (*ValidateDataSourceConfig_Response) ProtoMessage() {} func (x *ValidateDataSourceConfig_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[39] + mi := &file_tfplugin5_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2128,7 +2385,7 @@ func (x *ValidateDataSourceConfig_Response) ProtoReflect() protoreflect.Message // Deprecated: Use ValidateDataSourceConfig_Response.ProtoReflect.Descriptor instead. func (*ValidateDataSourceConfig_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{10, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{12, 1} } func (x *ValidateDataSourceConfig_Response) GetDiagnostics() []*Diagnostic { @@ -2150,7 +2407,7 @@ type Configure_Request struct { func (x *Configure_Request) Reset() { *x = Configure_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[40] + mi := &file_tfplugin5_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2163,7 +2420,7 @@ func (x *Configure_Request) String() string { func (*Configure_Request) ProtoMessage() {} func (x *Configure_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[40] + mi := &file_tfplugin5_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2176,7 +2433,7 @@ func (x *Configure_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use Configure_Request.ProtoReflect.Descriptor instead. func (*Configure_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{11, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{13, 0} } func (x *Configure_Request) GetTerraformVersion() string { @@ -2204,7 +2461,7 @@ type Configure_Response struct { func (x *Configure_Response) Reset() { *x = Configure_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[41] + mi := &file_tfplugin5_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2217,7 +2474,7 @@ func (x *Configure_Response) String() string { func (*Configure_Response) ProtoMessage() {} func (x *Configure_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[41] + mi := &file_tfplugin5_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2230,7 +2487,7 @@ func (x *Configure_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use Configure_Response.ProtoReflect.Descriptor instead. func (*Configure_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{11, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{13, 1} } func (x *Configure_Response) GetDiagnostics() []*Diagnostic { @@ -2262,7 +2519,7 @@ type ReadResource_Request struct { func (x *ReadResource_Request) Reset() { *x = ReadResource_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[42] + mi := &file_tfplugin5_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2275,7 +2532,7 @@ func (x *ReadResource_Request) String() string { func (*ReadResource_Request) ProtoMessage() {} func (x *ReadResource_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[42] + mi := &file_tfplugin5_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2288,7 +2545,7 @@ func (x *ReadResource_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadResource_Request.ProtoReflect.Descriptor instead. func (*ReadResource_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{12, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{14, 0} } func (x *ReadResource_Request) GetTypeName() string { @@ -2332,7 +2589,7 @@ type ReadResource_Response struct { func (x *ReadResource_Response) Reset() { *x = ReadResource_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[43] + mi := &file_tfplugin5_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2345,7 +2602,7 @@ func (x *ReadResource_Response) String() string { func (*ReadResource_Response) ProtoMessage() {} func (x *ReadResource_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[43] + mi := &file_tfplugin5_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2358,7 +2615,7 @@ func (x *ReadResource_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadResource_Response.ProtoReflect.Descriptor instead. func (*ReadResource_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{12, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{14, 1} } func (x *ReadResource_Response) GetNewState() *DynamicValue { @@ -2398,7 +2655,7 @@ type PlanResourceChange_Request struct { func (x *PlanResourceChange_Request) Reset() { *x = PlanResourceChange_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[44] + mi := &file_tfplugin5_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2411,7 +2668,7 @@ func (x *PlanResourceChange_Request) String() string { func (*PlanResourceChange_Request) ProtoMessage() {} func (x *PlanResourceChange_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[44] + mi := &file_tfplugin5_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2424,7 +2681,7 @@ func (x *PlanResourceChange_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use PlanResourceChange_Request.ProtoReflect.Descriptor instead. func (*PlanResourceChange_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{13, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{15, 0} } func (x *PlanResourceChange_Request) GetTypeName() string { @@ -2486,16 +2743,16 @@ type PlanResourceChange_Response struct { // specific details of the legacy SDK type system, and are not a general // mechanism to avoid proper type handling in providers. // - // ==== DO NOT USE THIS ==== - // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== - // ==== DO NOT USE THIS ==== + // ==== DO NOT USE THIS ==== + // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== + // ==== DO NOT USE THIS ==== LegacyTypeSystem bool `protobuf:"varint,5,opt,name=legacy_type_system,json=legacyTypeSystem,proto3" json:"legacy_type_system,omitempty"` } func (x *PlanResourceChange_Response) Reset() { *x = PlanResourceChange_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[45] + mi := &file_tfplugin5_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2508,7 +2765,7 @@ func (x *PlanResourceChange_Response) String() string { func (*PlanResourceChange_Response) ProtoMessage() {} func (x *PlanResourceChange_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[45] + mi := &file_tfplugin5_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2521,7 +2778,7 @@ func (x *PlanResourceChange_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use PlanResourceChange_Response.ProtoReflect.Descriptor instead. func (*PlanResourceChange_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{13, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{15, 1} } func (x *PlanResourceChange_Response) GetPlannedState() *DynamicValue { @@ -2575,7 +2832,7 @@ type ApplyResourceChange_Request struct { func (x *ApplyResourceChange_Request) Reset() { *x = ApplyResourceChange_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[46] + mi := &file_tfplugin5_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2588,7 +2845,7 @@ func (x *ApplyResourceChange_Request) String() string { func (*ApplyResourceChange_Request) ProtoMessage() {} func (x *ApplyResourceChange_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[46] + mi := &file_tfplugin5_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2601,7 +2858,7 @@ func (x *ApplyResourceChange_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyResourceChange_Request.ProtoReflect.Descriptor instead. func (*ApplyResourceChange_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{14, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{16, 0} } func (x *ApplyResourceChange_Request) GetTypeName() string { @@ -2662,16 +2919,16 @@ type ApplyResourceChange_Response struct { // specific details of the legacy SDK type system, and are not a general // mechanism to avoid proper type handling in providers. // - // ==== DO NOT USE THIS ==== - // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== - // ==== DO NOT USE THIS ==== + // ==== DO NOT USE THIS ==== + // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== + // ==== DO NOT USE THIS ==== LegacyTypeSystem bool `protobuf:"varint,4,opt,name=legacy_type_system,json=legacyTypeSystem,proto3" json:"legacy_type_system,omitempty"` } func (x *ApplyResourceChange_Response) Reset() { *x = ApplyResourceChange_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[47] + mi := &file_tfplugin5_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2684,7 +2941,7 @@ func (x *ApplyResourceChange_Response) String() string { func (*ApplyResourceChange_Response) ProtoMessage() {} func (x *ApplyResourceChange_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[47] + mi := &file_tfplugin5_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2697,7 +2954,7 @@ func (x *ApplyResourceChange_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyResourceChange_Response.ProtoReflect.Descriptor instead. func (*ApplyResourceChange_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{14, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{16, 1} } func (x *ApplyResourceChange_Response) GetNewState() *DynamicValue { @@ -2740,7 +2997,7 @@ type ImportResourceState_Request struct { func (x *ImportResourceState_Request) Reset() { *x = ImportResourceState_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[48] + mi := &file_tfplugin5_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2753,7 +3010,7 @@ func (x *ImportResourceState_Request) String() string { func (*ImportResourceState_Request) ProtoMessage() {} func (x *ImportResourceState_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[48] + mi := &file_tfplugin5_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2766,7 +3023,7 @@ func (x *ImportResourceState_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportResourceState_Request.ProtoReflect.Descriptor instead. func (*ImportResourceState_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{15, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{17, 0} } func (x *ImportResourceState_Request) GetTypeName() string { @@ -2796,7 +3053,7 @@ type ImportResourceState_ImportedResource struct { func (x *ImportResourceState_ImportedResource) Reset() { *x = ImportResourceState_ImportedResource{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[49] + mi := &file_tfplugin5_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2809,7 +3066,7 @@ func (x *ImportResourceState_ImportedResource) String() string { func (*ImportResourceState_ImportedResource) ProtoMessage() {} func (x *ImportResourceState_ImportedResource) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[49] + mi := &file_tfplugin5_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2822,7 +3079,7 @@ func (x *ImportResourceState_ImportedResource) ProtoReflect() protoreflect.Messa // Deprecated: Use ImportResourceState_ImportedResource.ProtoReflect.Descriptor instead. func (*ImportResourceState_ImportedResource) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{15, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{17, 1} } func (x *ImportResourceState_ImportedResource) GetTypeName() string { @@ -2858,7 +3115,7 @@ type ImportResourceState_Response struct { func (x *ImportResourceState_Response) Reset() { *x = ImportResourceState_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[50] + mi := &file_tfplugin5_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2871,7 +3128,7 @@ func (x *ImportResourceState_Response) String() string { func (*ImportResourceState_Response) ProtoMessage() {} func (x *ImportResourceState_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[50] + mi := &file_tfplugin5_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2884,7 +3141,7 @@ func (x *ImportResourceState_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportResourceState_Response.ProtoReflect.Descriptor instead. func (*ImportResourceState_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{15, 2} + return file_tfplugin5_proto_rawDescGZIP(), []int{17, 2} } func (x *ImportResourceState_Response) GetImportedResources() []*ImportResourceState_ImportedResource { @@ -2914,7 +3171,7 @@ type ReadDataSource_Request struct { func (x *ReadDataSource_Request) Reset() { *x = ReadDataSource_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[51] + mi := &file_tfplugin5_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2927,7 +3184,7 @@ func (x *ReadDataSource_Request) String() string { func (*ReadDataSource_Request) ProtoMessage() {} func (x *ReadDataSource_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[51] + mi := &file_tfplugin5_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2940,7 +3197,7 @@ func (x *ReadDataSource_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadDataSource_Request.ProtoReflect.Descriptor instead. func (*ReadDataSource_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{16, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{18, 0} } func (x *ReadDataSource_Request) GetTypeName() string { @@ -2976,7 +3233,7 @@ type ReadDataSource_Response struct { func (x *ReadDataSource_Response) Reset() { *x = ReadDataSource_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[52] + mi := &file_tfplugin5_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2989,7 +3246,7 @@ func (x *ReadDataSource_Response) String() string { func (*ReadDataSource_Response) ProtoMessage() {} func (x *ReadDataSource_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[52] + mi := &file_tfplugin5_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3002,7 +3259,7 @@ func (x *ReadDataSource_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadDataSource_Response.ProtoReflect.Descriptor instead. func (*ReadDataSource_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{16, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{18, 1} } func (x *ReadDataSource_Response) GetState() *DynamicValue { @@ -3028,7 +3285,7 @@ type GetProvisionerSchema_Request struct { func (x *GetProvisionerSchema_Request) Reset() { *x = GetProvisionerSchema_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[53] + mi := &file_tfplugin5_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3041,7 +3298,7 @@ func (x *GetProvisionerSchema_Request) String() string { func (*GetProvisionerSchema_Request) ProtoMessage() {} func (x *GetProvisionerSchema_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[53] + mi := &file_tfplugin5_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3054,7 +3311,7 @@ func (x *GetProvisionerSchema_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProvisionerSchema_Request.ProtoReflect.Descriptor instead. func (*GetProvisionerSchema_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{17, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{19, 0} } type GetProvisionerSchema_Response struct { @@ -3069,7 +3326,7 @@ type GetProvisionerSchema_Response struct { func (x *GetProvisionerSchema_Response) Reset() { *x = GetProvisionerSchema_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[54] + mi := &file_tfplugin5_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3082,7 +3339,7 @@ func (x *GetProvisionerSchema_Response) String() string { func (*GetProvisionerSchema_Response) ProtoMessage() {} func (x *GetProvisionerSchema_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[54] + mi := &file_tfplugin5_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3095,7 +3352,7 @@ func (x *GetProvisionerSchema_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProvisionerSchema_Response.ProtoReflect.Descriptor instead. func (*GetProvisionerSchema_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{17, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{19, 1} } func (x *GetProvisionerSchema_Response) GetProvisioner() *Schema { @@ -3123,7 +3380,7 @@ type ValidateProvisionerConfig_Request struct { func (x *ValidateProvisionerConfig_Request) Reset() { *x = ValidateProvisionerConfig_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[55] + mi := &file_tfplugin5_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3136,7 +3393,7 @@ func (x *ValidateProvisionerConfig_Request) String() string { func (*ValidateProvisionerConfig_Request) ProtoMessage() {} func (x *ValidateProvisionerConfig_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[55] + mi := &file_tfplugin5_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3149,7 +3406,7 @@ func (x *ValidateProvisionerConfig_Request) ProtoReflect() protoreflect.Message // Deprecated: Use ValidateProvisionerConfig_Request.ProtoReflect.Descriptor instead. func (*ValidateProvisionerConfig_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{18, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{20, 0} } func (x *ValidateProvisionerConfig_Request) GetConfig() *DynamicValue { @@ -3170,7 +3427,7 @@ type ValidateProvisionerConfig_Response struct { func (x *ValidateProvisionerConfig_Response) Reset() { *x = ValidateProvisionerConfig_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[56] + mi := &file_tfplugin5_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3183,7 +3440,7 @@ func (x *ValidateProvisionerConfig_Response) String() string { func (*ValidateProvisionerConfig_Response) ProtoMessage() {} func (x *ValidateProvisionerConfig_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[56] + mi := &file_tfplugin5_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3196,7 +3453,7 @@ func (x *ValidateProvisionerConfig_Response) ProtoReflect() protoreflect.Message // Deprecated: Use ValidateProvisionerConfig_Response.ProtoReflect.Descriptor instead. func (*ValidateProvisionerConfig_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{18, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{20, 1} } func (x *ValidateProvisionerConfig_Response) GetDiagnostics() []*Diagnostic { @@ -3218,7 +3475,7 @@ type ProvisionResource_Request struct { func (x *ProvisionResource_Request) Reset() { *x = ProvisionResource_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[57] + mi := &file_tfplugin5_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3231,7 +3488,7 @@ func (x *ProvisionResource_Request) String() string { func (*ProvisionResource_Request) ProtoMessage() {} func (x *ProvisionResource_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[57] + mi := &file_tfplugin5_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3244,7 +3501,7 @@ func (x *ProvisionResource_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ProvisionResource_Request.ProtoReflect.Descriptor instead. func (*ProvisionResource_Request) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{19, 0} + return file_tfplugin5_proto_rawDescGZIP(), []int{21, 0} } func (x *ProvisionResource_Request) GetConfig() *DynamicValue { @@ -3273,7 +3530,7 @@ type ProvisionResource_Response struct { func (x *ProvisionResource_Response) Reset() { *x = ProvisionResource_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin5_proto_msgTypes[58] + mi := &file_tfplugin5_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3286,7 +3543,7 @@ func (x *ProvisionResource_Response) String() string { func (*ProvisionResource_Response) ProtoMessage() {} func (x *ProvisionResource_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin5_proto_msgTypes[58] + mi := &file_tfplugin5_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3299,7 +3556,7 @@ func (x *ProvisionResource_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ProvisionResource_Response.ProtoReflect.Descriptor instead. func (*ProvisionResource_Response) Descriptor() ([]byte, []int) { - return file_tfplugin5_proto_rawDescGZIP(), []int{19, 1} + return file_tfplugin5_proto_rawDescGZIP(), []int{21, 1} } func (x *ProvisionResource_Response) GetOutput() string { @@ -3426,396 +3683,431 @@ var file_tfplugin5_proto_rawDesc = []byte{ 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x50, 0x10, - 0x04, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x05, 0x22, 0xeb, 0x05, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x91, 0x05, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x10, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, - 0x12, 0x6c, 0x0a, 0x13, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x64, 0x61, 0x74, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12, 0x37, - 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x04, 0x20, + 0x04, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x05, 0x22, 0x78, 0x0a, 0x12, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, + 0x6f, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x6e, 0x44, 0x65, + 0x73, 0x74, 0x72, 0x6f, 0x79, 0x12, 0x3f, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x67, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xa7, 0x03, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0xa8, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, + 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x66, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x37, + 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x36, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x12, - 0x60, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x12, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x1a, 0x55, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x16, 0x44, 0x61, 0x74, 0x61, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x37, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x5f, - 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, - 0x6c, 0x61, 0x6e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x22, 0xdb, 0x01, 0x0a, 0x15, 0x50, - 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x3a, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x1a, 0x85, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, - 0x0f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0e, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, - 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, - 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x1a, 0x72, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x35, 0x2e, 0x52, 0x61, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x61, 0x77, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x83, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0e, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x4c, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x31, 0x0a, 0x12, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x1a, + 0x2f, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0xa0, 0x05, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0xff, 0x04, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, + 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x65, 0x0a, + 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x73, 0x12, 0x6c, 0x0a, 0x13, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x3c, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x11, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, - 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x1a, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x57, 0x0a, 0x07, 0x52, 0x65, + 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x36, 0x0a, 0x0d, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, + 0x65, 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, + 0x12, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x1a, 0x55, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x16, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x35, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xdb, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x3a, 0x0a, + 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x85, 0x01, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, + 0x73, 0x22, 0x90, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x72, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x09, + 0x72, 0x61, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x52, 0x61, 0x77, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x61, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x83, + 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0e, 0x75, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x75, 0x70, + 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x1a, 0x57, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, + 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x57, + 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, + 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, + 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xb9, 0x01, 0x0a, + 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x1a, 0x67, 0x0a, 0x07, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, + 0x72, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, - 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x18, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x57, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, - 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, - 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, - 0x69, 0x63, 0x73, 0x22, 0xb9, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x65, 0x1a, 0x67, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11, - 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, - 0x72, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x61, + 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0xbc, 0x01, 0x0a, 0x07, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, - 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, - 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, - 0xe3, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x1a, 0xbc, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x75, 0x65, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x93, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, - 0x93, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, - 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, - 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x22, 0xf2, 0x04, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0xbb, 0x02, 0x0a, - 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x45, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x77, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x4e, 0x65, - 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x6f, 0x72, - 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, - 0x70, 0x72, 0x69, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, - 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x9d, 0x02, 0x0a, 0x08, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x6e, 0x6e, - 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6c, - 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, - 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, - 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x12, - 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0x92, 0x04, 0x0a, 0x13, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x1a, 0xb6, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, + 0x65, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x22, 0xf2, + 0x04, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0xbb, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, + 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, - 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, - 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, - 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x06, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x70, 0x72, + 0x69, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, - 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0xc1, 0x01, 0x0a, 0x08, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, - 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, - 0x65, 0x67, 0x61, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, - 0xed, 0x02, 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x36, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x1a, - 0x78, 0x0a, 0x10, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x1a, 0xa3, 0x01, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x12, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x11, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, - 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, - 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, - 0x9c, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x1a, 0x95, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x0d, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, - 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x72, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, - 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, - 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x9b, - 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, - 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x78, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, - 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, - 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, - 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x9c, 0x01, 0x0a, - 0x19, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x3a, 0x0a, 0x07, 0x52, 0x65, + 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, + 0x65, 0x74, 0x61, 0x1a, 0x9d, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x43, + 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x50, 0x61, + 0x74, 0x68, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x6c, + 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, + 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, + 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x22, 0x92, 0x04, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0xb6, 0x02, 0x0a, 0x07, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3c, + 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, + 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, + 0x0f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x4d, 0x65, 0x74, 0x61, 0x1a, 0xc1, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x34, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6e, + 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0xed, 0x02, 0x0a, 0x13, 0x49, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x1a, 0x36, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, + 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x78, 0x0a, 0x10, 0x49, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x1a, 0xa3, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5e, 0x0a, 0x12, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x66, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x49, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x11, 0x69, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, + 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, + 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x9c, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x61, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x95, 0x01, 0x0a, 0x07, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, + 0x65, 0x74, 0x61, 0x1a, 0x72, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, + 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, + 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x78, 0x0a, 0x08, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x0b, + 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, + 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x19, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x1a, 0x3a, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, + 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x73, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, - 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x11, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x1a, 0x73, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, - 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x5b, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, - 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, - 0x69, 0x63, 0x73, 0x2a, 0x25, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4b, 0x69, 0x6e, - 0x64, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, - 0x4d, 0x41, 0x52, 0x4b, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x32, 0x97, 0x09, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6c, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x28, 0x2e, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, - 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x7b, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x18, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2b, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x14, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x37, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, + 0x5b, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, + 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2a, 0x25, 0x0a, 0x0a, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, + 0x41, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x41, 0x52, 0x4b, 0x44, 0x4f, 0x57, + 0x4e, 0x10, 0x01, 0x32, 0xe7, 0x09, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x12, 0x4e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x1e, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x58, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x15, 0x50, 0x72, + 0x65, 0x70, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x28, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, + 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2b, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x14, + 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, - 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x1c, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x66, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x66, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x12, 0x50, - 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x25, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x65, 0x12, 0x1c, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x1f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x52, 0x65, + 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x52, + 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x25, 0x2e, 0x74, 0x66, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x66, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x35, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x35, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x21, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x35, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x04, 0x53, 0x74, 0x6f, - 0x70, 0x12, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x74, - 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x86, 0x03, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x5e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x12, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x19, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2c, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, - 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x24, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x66, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x39, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x17, 0x2e, 0x74, 0x66, 0x70, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x13, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x12, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x66, 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x49, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, 0x61, + 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x74, 0x66, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x39, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, - 0x53, 0x74, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x47, 0x5a, - 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x2d, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x66, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x76, 0x35, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x66, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x74, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x86, 0x03, + 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x5e, 0x0a, + 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x27, 0x2e, 0x74, 0x66, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, + 0x19, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x2e, 0x74, 0x66, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x24, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x04, 0x53, + 0x74, 0x6f, 0x70, 0x12, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, + 0x53, 0x74, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x74, + 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, + 0x67, 0x6f, 0x2f, 0x74, 0x66, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x76, 0x35, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x35, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3831,7 +4123,7 @@ func file_tfplugin5_proto_rawDescGZIP() []byte { } var file_tfplugin5_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_tfplugin5_proto_msgTypes = make([]protoimpl.MessageInfo, 59) +var file_tfplugin5_proto_msgTypes = make([]protoimpl.MessageInfo, 64) var file_tfplugin5_proto_goTypes = []interface{}{ (StringKind)(0), // 0: tfplugin5.StringKind (Diagnostic_Severity)(0), // 1: tfplugin5.Diagnostic.Severity @@ -3842,160 +4134,171 @@ var file_tfplugin5_proto_goTypes = []interface{}{ (*Stop)(nil), // 6: tfplugin5.Stop (*RawState)(nil), // 7: tfplugin5.RawState (*Schema)(nil), // 8: tfplugin5.Schema - (*GetProviderSchema)(nil), // 9: tfplugin5.GetProviderSchema - (*PrepareProviderConfig)(nil), // 10: tfplugin5.PrepareProviderConfig - (*UpgradeResourceState)(nil), // 11: tfplugin5.UpgradeResourceState - (*ValidateResourceTypeConfig)(nil), // 12: tfplugin5.ValidateResourceTypeConfig - (*ValidateDataSourceConfig)(nil), // 13: tfplugin5.ValidateDataSourceConfig - (*Configure)(nil), // 14: tfplugin5.Configure - (*ReadResource)(nil), // 15: tfplugin5.ReadResource - (*PlanResourceChange)(nil), // 16: tfplugin5.PlanResourceChange - (*ApplyResourceChange)(nil), // 17: tfplugin5.ApplyResourceChange - (*ImportResourceState)(nil), // 18: tfplugin5.ImportResourceState - (*ReadDataSource)(nil), // 19: tfplugin5.ReadDataSource - (*GetProvisionerSchema)(nil), // 20: tfplugin5.GetProvisionerSchema - (*ValidateProvisionerConfig)(nil), // 21: tfplugin5.ValidateProvisionerConfig - (*ProvisionResource)(nil), // 22: tfplugin5.ProvisionResource - (*AttributePath_Step)(nil), // 23: tfplugin5.AttributePath.Step - (*Stop_Request)(nil), // 24: tfplugin5.Stop.Request - (*Stop_Response)(nil), // 25: tfplugin5.Stop.Response - nil, // 26: tfplugin5.RawState.FlatmapEntry - (*Schema_Block)(nil), // 27: tfplugin5.Schema.Block - (*Schema_Attribute)(nil), // 28: tfplugin5.Schema.Attribute - (*Schema_NestedBlock)(nil), // 29: tfplugin5.Schema.NestedBlock - (*GetProviderSchema_Request)(nil), // 30: tfplugin5.GetProviderSchema.Request - (*GetProviderSchema_Response)(nil), // 31: tfplugin5.GetProviderSchema.Response - (*GetProviderSchema_ServerCapabilities)(nil), // 32: tfplugin5.GetProviderSchema.ServerCapabilities - nil, // 33: tfplugin5.GetProviderSchema.Response.ResourceSchemasEntry - nil, // 34: tfplugin5.GetProviderSchema.Response.DataSourceSchemasEntry - (*PrepareProviderConfig_Request)(nil), // 35: tfplugin5.PrepareProviderConfig.Request - (*PrepareProviderConfig_Response)(nil), // 36: tfplugin5.PrepareProviderConfig.Response - (*UpgradeResourceState_Request)(nil), // 37: tfplugin5.UpgradeResourceState.Request - (*UpgradeResourceState_Response)(nil), // 38: tfplugin5.UpgradeResourceState.Response - (*ValidateResourceTypeConfig_Request)(nil), // 39: tfplugin5.ValidateResourceTypeConfig.Request - (*ValidateResourceTypeConfig_Response)(nil), // 40: tfplugin5.ValidateResourceTypeConfig.Response - (*ValidateDataSourceConfig_Request)(nil), // 41: tfplugin5.ValidateDataSourceConfig.Request - (*ValidateDataSourceConfig_Response)(nil), // 42: tfplugin5.ValidateDataSourceConfig.Response - (*Configure_Request)(nil), // 43: tfplugin5.Configure.Request - (*Configure_Response)(nil), // 44: tfplugin5.Configure.Response - (*ReadResource_Request)(nil), // 45: tfplugin5.ReadResource.Request - (*ReadResource_Response)(nil), // 46: tfplugin5.ReadResource.Response - (*PlanResourceChange_Request)(nil), // 47: tfplugin5.PlanResourceChange.Request - (*PlanResourceChange_Response)(nil), // 48: tfplugin5.PlanResourceChange.Response - (*ApplyResourceChange_Request)(nil), // 49: tfplugin5.ApplyResourceChange.Request - (*ApplyResourceChange_Response)(nil), // 50: tfplugin5.ApplyResourceChange.Response - (*ImportResourceState_Request)(nil), // 51: tfplugin5.ImportResourceState.Request - (*ImportResourceState_ImportedResource)(nil), // 52: tfplugin5.ImportResourceState.ImportedResource - (*ImportResourceState_Response)(nil), // 53: tfplugin5.ImportResourceState.Response - (*ReadDataSource_Request)(nil), // 54: tfplugin5.ReadDataSource.Request - (*ReadDataSource_Response)(nil), // 55: tfplugin5.ReadDataSource.Response - (*GetProvisionerSchema_Request)(nil), // 56: tfplugin5.GetProvisionerSchema.Request - (*GetProvisionerSchema_Response)(nil), // 57: tfplugin5.GetProvisionerSchema.Response - (*ValidateProvisionerConfig_Request)(nil), // 58: tfplugin5.ValidateProvisionerConfig.Request - (*ValidateProvisionerConfig_Response)(nil), // 59: tfplugin5.ValidateProvisionerConfig.Response - (*ProvisionResource_Request)(nil), // 60: tfplugin5.ProvisionResource.Request - (*ProvisionResource_Response)(nil), // 61: tfplugin5.ProvisionResource.Response + (*ServerCapabilities)(nil), // 9: tfplugin5.ServerCapabilities + (*GetMetadata)(nil), // 10: tfplugin5.GetMetadata + (*GetProviderSchema)(nil), // 11: tfplugin5.GetProviderSchema + (*PrepareProviderConfig)(nil), // 12: tfplugin5.PrepareProviderConfig + (*UpgradeResourceState)(nil), // 13: tfplugin5.UpgradeResourceState + (*ValidateResourceTypeConfig)(nil), // 14: tfplugin5.ValidateResourceTypeConfig + (*ValidateDataSourceConfig)(nil), // 15: tfplugin5.ValidateDataSourceConfig + (*Configure)(nil), // 16: tfplugin5.Configure + (*ReadResource)(nil), // 17: tfplugin5.ReadResource + (*PlanResourceChange)(nil), // 18: tfplugin5.PlanResourceChange + (*ApplyResourceChange)(nil), // 19: tfplugin5.ApplyResourceChange + (*ImportResourceState)(nil), // 20: tfplugin5.ImportResourceState + (*ReadDataSource)(nil), // 21: tfplugin5.ReadDataSource + (*GetProvisionerSchema)(nil), // 22: tfplugin5.GetProvisionerSchema + (*ValidateProvisionerConfig)(nil), // 23: tfplugin5.ValidateProvisionerConfig + (*ProvisionResource)(nil), // 24: tfplugin5.ProvisionResource + (*AttributePath_Step)(nil), // 25: tfplugin5.AttributePath.Step + (*Stop_Request)(nil), // 26: tfplugin5.Stop.Request + (*Stop_Response)(nil), // 27: tfplugin5.Stop.Response + nil, // 28: tfplugin5.RawState.FlatmapEntry + (*Schema_Block)(nil), // 29: tfplugin5.Schema.Block + (*Schema_Attribute)(nil), // 30: tfplugin5.Schema.Attribute + (*Schema_NestedBlock)(nil), // 31: tfplugin5.Schema.NestedBlock + (*GetMetadata_Request)(nil), // 32: tfplugin5.GetMetadata.Request + (*GetMetadata_Response)(nil), // 33: tfplugin5.GetMetadata.Response + (*GetMetadata_DataSourceMetadata)(nil), // 34: tfplugin5.GetMetadata.DataSourceMetadata + (*GetMetadata_ResourceMetadata)(nil), // 35: tfplugin5.GetMetadata.ResourceMetadata + (*GetProviderSchema_Request)(nil), // 36: tfplugin5.GetProviderSchema.Request + (*GetProviderSchema_Response)(nil), // 37: tfplugin5.GetProviderSchema.Response + nil, // 38: tfplugin5.GetProviderSchema.Response.ResourceSchemasEntry + nil, // 39: tfplugin5.GetProviderSchema.Response.DataSourceSchemasEntry + (*PrepareProviderConfig_Request)(nil), // 40: tfplugin5.PrepareProviderConfig.Request + (*PrepareProviderConfig_Response)(nil), // 41: tfplugin5.PrepareProviderConfig.Response + (*UpgradeResourceState_Request)(nil), // 42: tfplugin5.UpgradeResourceState.Request + (*UpgradeResourceState_Response)(nil), // 43: tfplugin5.UpgradeResourceState.Response + (*ValidateResourceTypeConfig_Request)(nil), // 44: tfplugin5.ValidateResourceTypeConfig.Request + (*ValidateResourceTypeConfig_Response)(nil), // 45: tfplugin5.ValidateResourceTypeConfig.Response + (*ValidateDataSourceConfig_Request)(nil), // 46: tfplugin5.ValidateDataSourceConfig.Request + (*ValidateDataSourceConfig_Response)(nil), // 47: tfplugin5.ValidateDataSourceConfig.Response + (*Configure_Request)(nil), // 48: tfplugin5.Configure.Request + (*Configure_Response)(nil), // 49: tfplugin5.Configure.Response + (*ReadResource_Request)(nil), // 50: tfplugin5.ReadResource.Request + (*ReadResource_Response)(nil), // 51: tfplugin5.ReadResource.Response + (*PlanResourceChange_Request)(nil), // 52: tfplugin5.PlanResourceChange.Request + (*PlanResourceChange_Response)(nil), // 53: tfplugin5.PlanResourceChange.Response + (*ApplyResourceChange_Request)(nil), // 54: tfplugin5.ApplyResourceChange.Request + (*ApplyResourceChange_Response)(nil), // 55: tfplugin5.ApplyResourceChange.Response + (*ImportResourceState_Request)(nil), // 56: tfplugin5.ImportResourceState.Request + (*ImportResourceState_ImportedResource)(nil), // 57: tfplugin5.ImportResourceState.ImportedResource + (*ImportResourceState_Response)(nil), // 58: tfplugin5.ImportResourceState.Response + (*ReadDataSource_Request)(nil), // 59: tfplugin5.ReadDataSource.Request + (*ReadDataSource_Response)(nil), // 60: tfplugin5.ReadDataSource.Response + (*GetProvisionerSchema_Request)(nil), // 61: tfplugin5.GetProvisionerSchema.Request + (*GetProvisionerSchema_Response)(nil), // 62: tfplugin5.GetProvisionerSchema.Response + (*ValidateProvisionerConfig_Request)(nil), // 63: tfplugin5.ValidateProvisionerConfig.Request + (*ValidateProvisionerConfig_Response)(nil), // 64: tfplugin5.ValidateProvisionerConfig.Response + (*ProvisionResource_Request)(nil), // 65: tfplugin5.ProvisionResource.Request + (*ProvisionResource_Response)(nil), // 66: tfplugin5.ProvisionResource.Response } var file_tfplugin5_proto_depIdxs = []int32{ 1, // 0: tfplugin5.Diagnostic.severity:type_name -> tfplugin5.Diagnostic.Severity 5, // 1: tfplugin5.Diagnostic.attribute:type_name -> tfplugin5.AttributePath - 23, // 2: tfplugin5.AttributePath.steps:type_name -> tfplugin5.AttributePath.Step - 26, // 3: tfplugin5.RawState.flatmap:type_name -> tfplugin5.RawState.FlatmapEntry - 27, // 4: tfplugin5.Schema.block:type_name -> tfplugin5.Schema.Block - 28, // 5: tfplugin5.Schema.Block.attributes:type_name -> tfplugin5.Schema.Attribute - 29, // 6: tfplugin5.Schema.Block.block_types:type_name -> tfplugin5.Schema.NestedBlock + 25, // 2: tfplugin5.AttributePath.steps:type_name -> tfplugin5.AttributePath.Step + 28, // 3: tfplugin5.RawState.flatmap:type_name -> tfplugin5.RawState.FlatmapEntry + 29, // 4: tfplugin5.Schema.block:type_name -> tfplugin5.Schema.Block + 30, // 5: tfplugin5.Schema.Block.attributes:type_name -> tfplugin5.Schema.Attribute + 31, // 6: tfplugin5.Schema.Block.block_types:type_name -> tfplugin5.Schema.NestedBlock 0, // 7: tfplugin5.Schema.Block.description_kind:type_name -> tfplugin5.StringKind 0, // 8: tfplugin5.Schema.Attribute.description_kind:type_name -> tfplugin5.StringKind - 27, // 9: tfplugin5.Schema.NestedBlock.block:type_name -> tfplugin5.Schema.Block + 29, // 9: tfplugin5.Schema.NestedBlock.block:type_name -> tfplugin5.Schema.Block 2, // 10: tfplugin5.Schema.NestedBlock.nesting:type_name -> tfplugin5.Schema.NestedBlock.NestingMode - 8, // 11: tfplugin5.GetProviderSchema.Response.provider:type_name -> tfplugin5.Schema - 33, // 12: tfplugin5.GetProviderSchema.Response.resource_schemas:type_name -> tfplugin5.GetProviderSchema.Response.ResourceSchemasEntry - 34, // 13: tfplugin5.GetProviderSchema.Response.data_source_schemas:type_name -> tfplugin5.GetProviderSchema.Response.DataSourceSchemasEntry - 4, // 14: tfplugin5.GetProviderSchema.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 8, // 15: tfplugin5.GetProviderSchema.Response.provider_meta:type_name -> tfplugin5.Schema - 32, // 16: tfplugin5.GetProviderSchema.Response.server_capabilities:type_name -> tfplugin5.GetProviderSchema.ServerCapabilities - 8, // 17: tfplugin5.GetProviderSchema.Response.ResourceSchemasEntry.value:type_name -> tfplugin5.Schema - 8, // 18: tfplugin5.GetProviderSchema.Response.DataSourceSchemasEntry.value:type_name -> tfplugin5.Schema - 3, // 19: tfplugin5.PrepareProviderConfig.Request.config:type_name -> tfplugin5.DynamicValue - 3, // 20: tfplugin5.PrepareProviderConfig.Response.prepared_config:type_name -> tfplugin5.DynamicValue - 4, // 21: tfplugin5.PrepareProviderConfig.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 7, // 22: tfplugin5.UpgradeResourceState.Request.raw_state:type_name -> tfplugin5.RawState - 3, // 23: tfplugin5.UpgradeResourceState.Response.upgraded_state:type_name -> tfplugin5.DynamicValue - 4, // 24: tfplugin5.UpgradeResourceState.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 25: tfplugin5.ValidateResourceTypeConfig.Request.config:type_name -> tfplugin5.DynamicValue - 4, // 26: tfplugin5.ValidateResourceTypeConfig.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 27: tfplugin5.ValidateDataSourceConfig.Request.config:type_name -> tfplugin5.DynamicValue - 4, // 28: tfplugin5.ValidateDataSourceConfig.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 29: tfplugin5.Configure.Request.config:type_name -> tfplugin5.DynamicValue - 4, // 30: tfplugin5.Configure.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 31: tfplugin5.ReadResource.Request.current_state:type_name -> tfplugin5.DynamicValue - 3, // 32: tfplugin5.ReadResource.Request.provider_meta:type_name -> tfplugin5.DynamicValue - 3, // 33: tfplugin5.ReadResource.Response.new_state:type_name -> tfplugin5.DynamicValue - 4, // 34: tfplugin5.ReadResource.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 35: tfplugin5.PlanResourceChange.Request.prior_state:type_name -> tfplugin5.DynamicValue - 3, // 36: tfplugin5.PlanResourceChange.Request.proposed_new_state:type_name -> tfplugin5.DynamicValue - 3, // 37: tfplugin5.PlanResourceChange.Request.config:type_name -> tfplugin5.DynamicValue - 3, // 38: tfplugin5.PlanResourceChange.Request.provider_meta:type_name -> tfplugin5.DynamicValue - 3, // 39: tfplugin5.PlanResourceChange.Response.planned_state:type_name -> tfplugin5.DynamicValue - 5, // 40: tfplugin5.PlanResourceChange.Response.requires_replace:type_name -> tfplugin5.AttributePath - 4, // 41: tfplugin5.PlanResourceChange.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 42: tfplugin5.ApplyResourceChange.Request.prior_state:type_name -> tfplugin5.DynamicValue - 3, // 43: tfplugin5.ApplyResourceChange.Request.planned_state:type_name -> tfplugin5.DynamicValue - 3, // 44: tfplugin5.ApplyResourceChange.Request.config:type_name -> tfplugin5.DynamicValue - 3, // 45: tfplugin5.ApplyResourceChange.Request.provider_meta:type_name -> tfplugin5.DynamicValue - 3, // 46: tfplugin5.ApplyResourceChange.Response.new_state:type_name -> tfplugin5.DynamicValue - 4, // 47: tfplugin5.ApplyResourceChange.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 48: tfplugin5.ImportResourceState.ImportedResource.state:type_name -> tfplugin5.DynamicValue - 52, // 49: tfplugin5.ImportResourceState.Response.imported_resources:type_name -> tfplugin5.ImportResourceState.ImportedResource - 4, // 50: tfplugin5.ImportResourceState.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 51: tfplugin5.ReadDataSource.Request.config:type_name -> tfplugin5.DynamicValue - 3, // 52: tfplugin5.ReadDataSource.Request.provider_meta:type_name -> tfplugin5.DynamicValue - 3, // 53: tfplugin5.ReadDataSource.Response.state:type_name -> tfplugin5.DynamicValue - 4, // 54: tfplugin5.ReadDataSource.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 8, // 55: tfplugin5.GetProvisionerSchema.Response.provisioner:type_name -> tfplugin5.Schema - 4, // 56: tfplugin5.GetProvisionerSchema.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 57: tfplugin5.ValidateProvisionerConfig.Request.config:type_name -> tfplugin5.DynamicValue - 4, // 58: tfplugin5.ValidateProvisionerConfig.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 3, // 59: tfplugin5.ProvisionResource.Request.config:type_name -> tfplugin5.DynamicValue - 3, // 60: tfplugin5.ProvisionResource.Request.connection:type_name -> tfplugin5.DynamicValue - 4, // 61: tfplugin5.ProvisionResource.Response.diagnostics:type_name -> tfplugin5.Diagnostic - 30, // 62: tfplugin5.Provider.GetSchema:input_type -> tfplugin5.GetProviderSchema.Request - 35, // 63: tfplugin5.Provider.PrepareProviderConfig:input_type -> tfplugin5.PrepareProviderConfig.Request - 39, // 64: tfplugin5.Provider.ValidateResourceTypeConfig:input_type -> tfplugin5.ValidateResourceTypeConfig.Request - 41, // 65: tfplugin5.Provider.ValidateDataSourceConfig:input_type -> tfplugin5.ValidateDataSourceConfig.Request - 37, // 66: tfplugin5.Provider.UpgradeResourceState:input_type -> tfplugin5.UpgradeResourceState.Request - 43, // 67: tfplugin5.Provider.Configure:input_type -> tfplugin5.Configure.Request - 45, // 68: tfplugin5.Provider.ReadResource:input_type -> tfplugin5.ReadResource.Request - 47, // 69: tfplugin5.Provider.PlanResourceChange:input_type -> tfplugin5.PlanResourceChange.Request - 49, // 70: tfplugin5.Provider.ApplyResourceChange:input_type -> tfplugin5.ApplyResourceChange.Request - 51, // 71: tfplugin5.Provider.ImportResourceState:input_type -> tfplugin5.ImportResourceState.Request - 54, // 72: tfplugin5.Provider.ReadDataSource:input_type -> tfplugin5.ReadDataSource.Request - 24, // 73: tfplugin5.Provider.Stop:input_type -> tfplugin5.Stop.Request - 56, // 74: tfplugin5.Provisioner.GetSchema:input_type -> tfplugin5.GetProvisionerSchema.Request - 58, // 75: tfplugin5.Provisioner.ValidateProvisionerConfig:input_type -> tfplugin5.ValidateProvisionerConfig.Request - 60, // 76: tfplugin5.Provisioner.ProvisionResource:input_type -> tfplugin5.ProvisionResource.Request - 24, // 77: tfplugin5.Provisioner.Stop:input_type -> tfplugin5.Stop.Request - 31, // 78: tfplugin5.Provider.GetSchema:output_type -> tfplugin5.GetProviderSchema.Response - 36, // 79: tfplugin5.Provider.PrepareProviderConfig:output_type -> tfplugin5.PrepareProviderConfig.Response - 40, // 80: tfplugin5.Provider.ValidateResourceTypeConfig:output_type -> tfplugin5.ValidateResourceTypeConfig.Response - 42, // 81: tfplugin5.Provider.ValidateDataSourceConfig:output_type -> tfplugin5.ValidateDataSourceConfig.Response - 38, // 82: tfplugin5.Provider.UpgradeResourceState:output_type -> tfplugin5.UpgradeResourceState.Response - 44, // 83: tfplugin5.Provider.Configure:output_type -> tfplugin5.Configure.Response - 46, // 84: tfplugin5.Provider.ReadResource:output_type -> tfplugin5.ReadResource.Response - 48, // 85: tfplugin5.Provider.PlanResourceChange:output_type -> tfplugin5.PlanResourceChange.Response - 50, // 86: tfplugin5.Provider.ApplyResourceChange:output_type -> tfplugin5.ApplyResourceChange.Response - 53, // 87: tfplugin5.Provider.ImportResourceState:output_type -> tfplugin5.ImportResourceState.Response - 55, // 88: tfplugin5.Provider.ReadDataSource:output_type -> tfplugin5.ReadDataSource.Response - 25, // 89: tfplugin5.Provider.Stop:output_type -> tfplugin5.Stop.Response - 57, // 90: tfplugin5.Provisioner.GetSchema:output_type -> tfplugin5.GetProvisionerSchema.Response - 59, // 91: tfplugin5.Provisioner.ValidateProvisionerConfig:output_type -> tfplugin5.ValidateProvisionerConfig.Response - 61, // 92: tfplugin5.Provisioner.ProvisionResource:output_type -> tfplugin5.ProvisionResource.Response - 25, // 93: tfplugin5.Provisioner.Stop:output_type -> tfplugin5.Stop.Response - 78, // [78:94] is the sub-list for method output_type - 62, // [62:78] is the sub-list for method input_type - 62, // [62:62] is the sub-list for extension type_name - 62, // [62:62] is the sub-list for extension extendee - 0, // [0:62] is the sub-list for field type_name + 9, // 11: tfplugin5.GetMetadata.Response.server_capabilities:type_name -> tfplugin5.ServerCapabilities + 4, // 12: tfplugin5.GetMetadata.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 34, // 13: tfplugin5.GetMetadata.Response.data_sources:type_name -> tfplugin5.GetMetadata.DataSourceMetadata + 35, // 14: tfplugin5.GetMetadata.Response.resources:type_name -> tfplugin5.GetMetadata.ResourceMetadata + 8, // 15: tfplugin5.GetProviderSchema.Response.provider:type_name -> tfplugin5.Schema + 38, // 16: tfplugin5.GetProviderSchema.Response.resource_schemas:type_name -> tfplugin5.GetProviderSchema.Response.ResourceSchemasEntry + 39, // 17: tfplugin5.GetProviderSchema.Response.data_source_schemas:type_name -> tfplugin5.GetProviderSchema.Response.DataSourceSchemasEntry + 4, // 18: tfplugin5.GetProviderSchema.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 8, // 19: tfplugin5.GetProviderSchema.Response.provider_meta:type_name -> tfplugin5.Schema + 9, // 20: tfplugin5.GetProviderSchema.Response.server_capabilities:type_name -> tfplugin5.ServerCapabilities + 8, // 21: tfplugin5.GetProviderSchema.Response.ResourceSchemasEntry.value:type_name -> tfplugin5.Schema + 8, // 22: tfplugin5.GetProviderSchema.Response.DataSourceSchemasEntry.value:type_name -> tfplugin5.Schema + 3, // 23: tfplugin5.PrepareProviderConfig.Request.config:type_name -> tfplugin5.DynamicValue + 3, // 24: tfplugin5.PrepareProviderConfig.Response.prepared_config:type_name -> tfplugin5.DynamicValue + 4, // 25: tfplugin5.PrepareProviderConfig.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 7, // 26: tfplugin5.UpgradeResourceState.Request.raw_state:type_name -> tfplugin5.RawState + 3, // 27: tfplugin5.UpgradeResourceState.Response.upgraded_state:type_name -> tfplugin5.DynamicValue + 4, // 28: tfplugin5.UpgradeResourceState.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 29: tfplugin5.ValidateResourceTypeConfig.Request.config:type_name -> tfplugin5.DynamicValue + 4, // 30: tfplugin5.ValidateResourceTypeConfig.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 31: tfplugin5.ValidateDataSourceConfig.Request.config:type_name -> tfplugin5.DynamicValue + 4, // 32: tfplugin5.ValidateDataSourceConfig.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 33: tfplugin5.Configure.Request.config:type_name -> tfplugin5.DynamicValue + 4, // 34: tfplugin5.Configure.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 35: tfplugin5.ReadResource.Request.current_state:type_name -> tfplugin5.DynamicValue + 3, // 36: tfplugin5.ReadResource.Request.provider_meta:type_name -> tfplugin5.DynamicValue + 3, // 37: tfplugin5.ReadResource.Response.new_state:type_name -> tfplugin5.DynamicValue + 4, // 38: tfplugin5.ReadResource.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 39: tfplugin5.PlanResourceChange.Request.prior_state:type_name -> tfplugin5.DynamicValue + 3, // 40: tfplugin5.PlanResourceChange.Request.proposed_new_state:type_name -> tfplugin5.DynamicValue + 3, // 41: tfplugin5.PlanResourceChange.Request.config:type_name -> tfplugin5.DynamicValue + 3, // 42: tfplugin5.PlanResourceChange.Request.provider_meta:type_name -> tfplugin5.DynamicValue + 3, // 43: tfplugin5.PlanResourceChange.Response.planned_state:type_name -> tfplugin5.DynamicValue + 5, // 44: tfplugin5.PlanResourceChange.Response.requires_replace:type_name -> tfplugin5.AttributePath + 4, // 45: tfplugin5.PlanResourceChange.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 46: tfplugin5.ApplyResourceChange.Request.prior_state:type_name -> tfplugin5.DynamicValue + 3, // 47: tfplugin5.ApplyResourceChange.Request.planned_state:type_name -> tfplugin5.DynamicValue + 3, // 48: tfplugin5.ApplyResourceChange.Request.config:type_name -> tfplugin5.DynamicValue + 3, // 49: tfplugin5.ApplyResourceChange.Request.provider_meta:type_name -> tfplugin5.DynamicValue + 3, // 50: tfplugin5.ApplyResourceChange.Response.new_state:type_name -> tfplugin5.DynamicValue + 4, // 51: tfplugin5.ApplyResourceChange.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 52: tfplugin5.ImportResourceState.ImportedResource.state:type_name -> tfplugin5.DynamicValue + 57, // 53: tfplugin5.ImportResourceState.Response.imported_resources:type_name -> tfplugin5.ImportResourceState.ImportedResource + 4, // 54: tfplugin5.ImportResourceState.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 55: tfplugin5.ReadDataSource.Request.config:type_name -> tfplugin5.DynamicValue + 3, // 56: tfplugin5.ReadDataSource.Request.provider_meta:type_name -> tfplugin5.DynamicValue + 3, // 57: tfplugin5.ReadDataSource.Response.state:type_name -> tfplugin5.DynamicValue + 4, // 58: tfplugin5.ReadDataSource.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 8, // 59: tfplugin5.GetProvisionerSchema.Response.provisioner:type_name -> tfplugin5.Schema + 4, // 60: tfplugin5.GetProvisionerSchema.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 61: tfplugin5.ValidateProvisionerConfig.Request.config:type_name -> tfplugin5.DynamicValue + 4, // 62: tfplugin5.ValidateProvisionerConfig.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 3, // 63: tfplugin5.ProvisionResource.Request.config:type_name -> tfplugin5.DynamicValue + 3, // 64: tfplugin5.ProvisionResource.Request.connection:type_name -> tfplugin5.DynamicValue + 4, // 65: tfplugin5.ProvisionResource.Response.diagnostics:type_name -> tfplugin5.Diagnostic + 32, // 66: tfplugin5.Provider.GetMetadata:input_type -> tfplugin5.GetMetadata.Request + 36, // 67: tfplugin5.Provider.GetSchema:input_type -> tfplugin5.GetProviderSchema.Request + 40, // 68: tfplugin5.Provider.PrepareProviderConfig:input_type -> tfplugin5.PrepareProviderConfig.Request + 44, // 69: tfplugin5.Provider.ValidateResourceTypeConfig:input_type -> tfplugin5.ValidateResourceTypeConfig.Request + 46, // 70: tfplugin5.Provider.ValidateDataSourceConfig:input_type -> tfplugin5.ValidateDataSourceConfig.Request + 42, // 71: tfplugin5.Provider.UpgradeResourceState:input_type -> tfplugin5.UpgradeResourceState.Request + 48, // 72: tfplugin5.Provider.Configure:input_type -> tfplugin5.Configure.Request + 50, // 73: tfplugin5.Provider.ReadResource:input_type -> tfplugin5.ReadResource.Request + 52, // 74: tfplugin5.Provider.PlanResourceChange:input_type -> tfplugin5.PlanResourceChange.Request + 54, // 75: tfplugin5.Provider.ApplyResourceChange:input_type -> tfplugin5.ApplyResourceChange.Request + 56, // 76: tfplugin5.Provider.ImportResourceState:input_type -> tfplugin5.ImportResourceState.Request + 59, // 77: tfplugin5.Provider.ReadDataSource:input_type -> tfplugin5.ReadDataSource.Request + 26, // 78: tfplugin5.Provider.Stop:input_type -> tfplugin5.Stop.Request + 61, // 79: tfplugin5.Provisioner.GetSchema:input_type -> tfplugin5.GetProvisionerSchema.Request + 63, // 80: tfplugin5.Provisioner.ValidateProvisionerConfig:input_type -> tfplugin5.ValidateProvisionerConfig.Request + 65, // 81: tfplugin5.Provisioner.ProvisionResource:input_type -> tfplugin5.ProvisionResource.Request + 26, // 82: tfplugin5.Provisioner.Stop:input_type -> tfplugin5.Stop.Request + 33, // 83: tfplugin5.Provider.GetMetadata:output_type -> tfplugin5.GetMetadata.Response + 37, // 84: tfplugin5.Provider.GetSchema:output_type -> tfplugin5.GetProviderSchema.Response + 41, // 85: tfplugin5.Provider.PrepareProviderConfig:output_type -> tfplugin5.PrepareProviderConfig.Response + 45, // 86: tfplugin5.Provider.ValidateResourceTypeConfig:output_type -> tfplugin5.ValidateResourceTypeConfig.Response + 47, // 87: tfplugin5.Provider.ValidateDataSourceConfig:output_type -> tfplugin5.ValidateDataSourceConfig.Response + 43, // 88: tfplugin5.Provider.UpgradeResourceState:output_type -> tfplugin5.UpgradeResourceState.Response + 49, // 89: tfplugin5.Provider.Configure:output_type -> tfplugin5.Configure.Response + 51, // 90: tfplugin5.Provider.ReadResource:output_type -> tfplugin5.ReadResource.Response + 53, // 91: tfplugin5.Provider.PlanResourceChange:output_type -> tfplugin5.PlanResourceChange.Response + 55, // 92: tfplugin5.Provider.ApplyResourceChange:output_type -> tfplugin5.ApplyResourceChange.Response + 58, // 93: tfplugin5.Provider.ImportResourceState:output_type -> tfplugin5.ImportResourceState.Response + 60, // 94: tfplugin5.Provider.ReadDataSource:output_type -> tfplugin5.ReadDataSource.Response + 27, // 95: tfplugin5.Provider.Stop:output_type -> tfplugin5.Stop.Response + 62, // 96: tfplugin5.Provisioner.GetSchema:output_type -> tfplugin5.GetProvisionerSchema.Response + 64, // 97: tfplugin5.Provisioner.ValidateProvisionerConfig:output_type -> tfplugin5.ValidateProvisionerConfig.Response + 66, // 98: tfplugin5.Provisioner.ProvisionResource:output_type -> tfplugin5.ProvisionResource.Response + 27, // 99: tfplugin5.Provisioner.Stop:output_type -> tfplugin5.Stop.Response + 83, // [83:100] is the sub-list for method output_type + 66, // [66:83] is the sub-list for method input_type + 66, // [66:66] is the sub-list for extension type_name + 66, // [66:66] is the sub-list for extension extendee + 0, // [0:66] is the sub-list for field type_name } func init() { file_tfplugin5_proto_init() } @@ -4077,7 +4380,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderSchema); i { + switch v := v.(*ServerCapabilities); i { case 0: return &v.state case 1: @@ -4089,7 +4392,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrepareProviderConfig); i { + switch v := v.(*GetMetadata); i { case 0: return &v.state case 1: @@ -4101,7 +4404,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpgradeResourceState); i { + switch v := v.(*GetProviderSchema); i { case 0: return &v.state case 1: @@ -4113,7 +4416,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateResourceTypeConfig); i { + switch v := v.(*PrepareProviderConfig); i { case 0: return &v.state case 1: @@ -4125,7 +4428,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateDataSourceConfig); i { + switch v := v.(*UpgradeResourceState); i { case 0: return &v.state case 1: @@ -4137,7 +4440,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Configure); i { + switch v := v.(*ValidateResourceTypeConfig); i { case 0: return &v.state case 1: @@ -4149,7 +4452,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadResource); i { + switch v := v.(*ValidateDataSourceConfig); i { case 0: return &v.state case 1: @@ -4161,7 +4464,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlanResourceChange); i { + switch v := v.(*Configure); i { case 0: return &v.state case 1: @@ -4173,7 +4476,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplyResourceChange); i { + switch v := v.(*ReadResource); i { case 0: return &v.state case 1: @@ -4185,7 +4488,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImportResourceState); i { + switch v := v.(*PlanResourceChange); i { case 0: return &v.state case 1: @@ -4197,7 +4500,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadDataSource); i { + switch v := v.(*ApplyResourceChange); i { case 0: return &v.state case 1: @@ -4209,7 +4512,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProvisionerSchema); i { + switch v := v.(*ImportResourceState); i { case 0: return &v.state case 1: @@ -4221,7 +4524,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateProvisionerConfig); i { + switch v := v.(*ReadDataSource); i { case 0: return &v.state case 1: @@ -4233,7 +4536,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProvisionResource); i { + switch v := v.(*GetProvisionerSchema); i { case 0: return &v.state case 1: @@ -4245,7 +4548,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttributePath_Step); i { + switch v := v.(*ValidateProvisionerConfig); i { case 0: return &v.state case 1: @@ -4257,7 +4560,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Stop_Request); i { + switch v := v.(*ProvisionResource); i { case 0: return &v.state case 1: @@ -4269,7 +4572,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Stop_Response); i { + switch v := v.(*AttributePath_Step); i { case 0: return &v.state case 1: @@ -4280,8 +4583,8 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema_Block); i { + file_tfplugin5_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Stop_Request); i { case 0: return &v.state case 1: @@ -4292,8 +4595,8 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema_Attribute); i { + file_tfplugin5_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Stop_Response); i { case 0: return &v.state case 1: @@ -4305,7 +4608,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema_NestedBlock); i { + switch v := v.(*Schema_Block); i { case 0: return &v.state case 1: @@ -4317,7 +4620,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderSchema_Request); i { + switch v := v.(*Schema_Attribute); i { case 0: return &v.state case 1: @@ -4329,7 +4632,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderSchema_Response); i { + switch v := v.(*Schema_NestedBlock); i { case 0: return &v.state case 1: @@ -4341,7 +4644,31 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderSchema_ServerCapabilities); i { + switch v := v.(*GetMetadata_Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin5_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetadata_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin5_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetadata_DataSourceMetadata); i { case 0: return &v.state case 1: @@ -4353,7 +4680,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrepareProviderConfig_Request); i { + switch v := v.(*GetMetadata_ResourceMetadata); i { case 0: return &v.state case 1: @@ -4365,7 +4692,7 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrepareProviderConfig_Response); i { + switch v := v.(*GetProviderSchema_Request); i { case 0: return &v.state case 1: @@ -4377,6 +4704,42 @@ func file_tfplugin5_proto_init() { } } file_tfplugin5_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetProviderSchema_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin5_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrepareProviderConfig_Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin5_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrepareProviderConfig_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin5_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpgradeResourceState_Request); i { case 0: return &v.state @@ -4388,7 +4751,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpgradeResourceState_Response); i { case 0: return &v.state @@ -4400,7 +4763,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateResourceTypeConfig_Request); i { case 0: return &v.state @@ -4412,7 +4775,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateResourceTypeConfig_Response); i { case 0: return &v.state @@ -4424,7 +4787,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateDataSourceConfig_Request); i { case 0: return &v.state @@ -4436,7 +4799,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateDataSourceConfig_Response); i { case 0: return &v.state @@ -4448,7 +4811,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Configure_Request); i { case 0: return &v.state @@ -4460,7 +4823,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Configure_Response); i { case 0: return &v.state @@ -4472,7 +4835,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadResource_Request); i { case 0: return &v.state @@ -4484,7 +4847,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadResource_Response); i { case 0: return &v.state @@ -4496,7 +4859,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlanResourceChange_Request); i { case 0: return &v.state @@ -4508,7 +4871,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlanResourceChange_Response); i { case 0: return &v.state @@ -4520,7 +4883,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplyResourceChange_Request); i { case 0: return &v.state @@ -4532,7 +4895,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplyResourceChange_Response); i { case 0: return &v.state @@ -4544,7 +4907,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportResourceState_Request); i { case 0: return &v.state @@ -4556,7 +4919,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportResourceState_ImportedResource); i { case 0: return &v.state @@ -4568,7 +4931,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportResourceState_Response); i { case 0: return &v.state @@ -4580,7 +4943,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadDataSource_Request); i { case 0: return &v.state @@ -4592,7 +4955,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadDataSource_Response); i { case 0: return &v.state @@ -4604,7 +4967,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetProvisionerSchema_Request); i { case 0: return &v.state @@ -4616,7 +4979,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetProvisionerSchema_Response); i { case 0: return &v.state @@ -4628,7 +4991,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateProvisionerConfig_Request); i { case 0: return &v.state @@ -4640,7 +5003,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateProvisionerConfig_Response); i { case 0: return &v.state @@ -4652,7 +5015,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProvisionResource_Request); i { case 0: return &v.state @@ -4664,7 +5027,7 @@ func file_tfplugin5_proto_init() { return nil } } - file_tfplugin5_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin5_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProvisionResource_Response); i { case 0: return &v.state @@ -4677,7 +5040,7 @@ func file_tfplugin5_proto_init() { } } } - file_tfplugin5_proto_msgTypes[20].OneofWrappers = []interface{}{ + file_tfplugin5_proto_msgTypes[22].OneofWrappers = []interface{}{ (*AttributePath_Step_AttributeName)(nil), (*AttributePath_Step_ElementKeyString)(nil), (*AttributePath_Step_ElementKeyInt)(nil), @@ -4688,7 +5051,7 @@ func file_tfplugin5_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_tfplugin5_proto_rawDesc, NumEnums: 3, - NumMessages: 59, + NumMessages: 64, NumExtensions: 0, NumServices: 2, }, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5.proto b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5.proto index 6cdaf2c030514..639147f95503a 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5.proto +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5.proto @@ -1,6 +1,9 @@ -// Terraform Plugin RPC protocol version 5.3 +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Terraform Plugin RPC protocol version 5.4 // -// This file defines version 5.3 of the RPC protocol. To implement a plugin +// This file defines version 5.4 of the RPC protocol. To implement a plugin // against this protocol, copy this definition into your own codebase and // use protoc to generate stubs for your target language. // @@ -17,9 +20,9 @@ // branch or any other development branch. // syntax = "proto3"; +option go_package = "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5"; package tfplugin5; -option go_package = "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5"; // DynamicValue is an opaque encoding of terraform data, with the field name // indicating the encoding scheme used. @@ -125,8 +128,34 @@ message Schema { Block block = 2; } +// ServerCapabilities allows providers to communicate extra information +// regarding supported protocol features. This is used to indicate +// availability of certain forward-compatible changes which may be optional +// in a major protocol version, but cannot be tested for directly. +message ServerCapabilities { + // The plan_destroy capability signals that a provider expects a call + // to PlanResourceChange when a resource is going to be destroyed. + bool plan_destroy = 1; + + // The get_provider_schema_optional capability indicates that this + // provider does not require calling GetProviderSchema to operate + // normally, and the caller can used a cached copy of the provider's + // schema. + bool get_provider_schema_optional = 2; +} + service Provider { //////// Information about what a provider supports/expects + + // GetMetadata returns upfront information about server capabilities and + // supported resource types without requiring the server to instantiate all + // schema information, which may be memory intensive. This RPC is optional, + // where clients may receive an unimplemented RPC error. Clients should + // ignore the error and call the GetSchema RPC as a fallback. + rpc GetMetadata(GetMetadata.Request) returns (GetMetadata.Response); + + // GetSchema returns schema information for the provider, data resources, + // and managed resources. rpc GetSchema(GetProviderSchema.Request) returns (GetProviderSchema.Response); rpc PrepareProviderConfig(PrepareProviderConfig.Request) returns (PrepareProviderConfig.Response); rpc ValidateResourceTypeConfig(ValidateResourceTypeConfig.Request) returns (ValidateResourceTypeConfig.Response); @@ -148,6 +177,26 @@ service Provider { rpc Stop(Stop.Request) returns (Stop.Response); } +message GetMetadata { + message Request { + } + + message Response { + ServerCapabilities server_capabilities = 1; + repeated Diagnostic diagnostics = 2; + repeated DataSourceMetadata data_sources = 3; + repeated ResourceMetadata resources = 4; + } + + message DataSourceMetadata { + string type_name = 1; + } + + message ResourceMetadata { + string type_name = 1; + } +} + message GetProviderSchema { message Request { } @@ -159,17 +208,6 @@ message GetProviderSchema { Schema provider_meta = 5; ServerCapabilities server_capabilities = 6; } - - - // ServerCapabilities allows providers to communicate extra information - // regarding supported protocol features. This is used to indicate - // availability of certain forward-compatible changes which may be optional - // in a major protocol version, but cannot be tested for directly. - message ServerCapabilities { - // The plan_destroy capability signals that a provider expects a call - // to PlanResourceChange when a resource is going to be destroyed. - bool plan_destroy = 1; - } } message PrepareProviderConfig { diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5_grpc.pb.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5_grpc.pb.go index ddbdea31e7134..0ed31f74882e1 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5_grpc.pb.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5/tfplugin5_grpc.pb.go @@ -1,7 +1,29 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Terraform Plugin RPC protocol version 5.4 +// +// This file defines version 5.4 of the RPC protocol. To implement a plugin +// against this protocol, copy this definition into your own codebase and +// use protoc to generate stubs for your target language. +// +// This file will not be updated. Any minor versions of protocol 5 to follow +// should copy this file and modify the copy while maintaing backwards +// compatibility. Breaking changes, if any are required, will come +// in a subsequent major version with its own separate proto definition. +// +// Note that only the proto files included in a release tag of Terraform are +// official protocol releases. Proto files taken from other commits may include +// incomplete changes or features that did not make it into a final release. +// In all reasonable cases, plugin developers should take the proto file from +// the tag of the most recent release of Terraform, and not from the main +// branch or any other development branch. +// + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.19.4 +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.23.2 // source: tfplugin5.proto package tfplugin5 @@ -18,25 +40,48 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + Provider_GetMetadata_FullMethodName = "/tfplugin5.Provider/GetMetadata" + Provider_GetSchema_FullMethodName = "/tfplugin5.Provider/GetSchema" + Provider_PrepareProviderConfig_FullMethodName = "/tfplugin5.Provider/PrepareProviderConfig" + Provider_ValidateResourceTypeConfig_FullMethodName = "/tfplugin5.Provider/ValidateResourceTypeConfig" + Provider_ValidateDataSourceConfig_FullMethodName = "/tfplugin5.Provider/ValidateDataSourceConfig" + Provider_UpgradeResourceState_FullMethodName = "/tfplugin5.Provider/UpgradeResourceState" + Provider_Configure_FullMethodName = "/tfplugin5.Provider/Configure" + Provider_ReadResource_FullMethodName = "/tfplugin5.Provider/ReadResource" + Provider_PlanResourceChange_FullMethodName = "/tfplugin5.Provider/PlanResourceChange" + Provider_ApplyResourceChange_FullMethodName = "/tfplugin5.Provider/ApplyResourceChange" + Provider_ImportResourceState_FullMethodName = "/tfplugin5.Provider/ImportResourceState" + Provider_ReadDataSource_FullMethodName = "/tfplugin5.Provider/ReadDataSource" + Provider_Stop_FullMethodName = "/tfplugin5.Provider/Stop" +) + // ProviderClient is the client API for Provider service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type ProviderClient interface { - //////// Information about what a provider supports/expects + // GetMetadata returns upfront information about server capabilities and + // supported resource types without requiring the server to instantiate all + // schema information, which may be memory intensive. This RPC is optional, + // where clients may receive an unimplemented RPC error. Clients should + // ignore the error and call the GetSchema RPC as a fallback. + GetMetadata(ctx context.Context, in *GetMetadata_Request, opts ...grpc.CallOption) (*GetMetadata_Response, error) + // GetSchema returns schema information for the provider, data resources, + // and managed resources. GetSchema(ctx context.Context, in *GetProviderSchema_Request, opts ...grpc.CallOption) (*GetProviderSchema_Response, error) PrepareProviderConfig(ctx context.Context, in *PrepareProviderConfig_Request, opts ...grpc.CallOption) (*PrepareProviderConfig_Response, error) ValidateResourceTypeConfig(ctx context.Context, in *ValidateResourceTypeConfig_Request, opts ...grpc.CallOption) (*ValidateResourceTypeConfig_Response, error) ValidateDataSourceConfig(ctx context.Context, in *ValidateDataSourceConfig_Request, opts ...grpc.CallOption) (*ValidateDataSourceConfig_Response, error) UpgradeResourceState(ctx context.Context, in *UpgradeResourceState_Request, opts ...grpc.CallOption) (*UpgradeResourceState_Response, error) - //////// One-time initialization, called before other functions below + // ////// One-time initialization, called before other functions below Configure(ctx context.Context, in *Configure_Request, opts ...grpc.CallOption) (*Configure_Response, error) - //////// Managed Resource Lifecycle + // ////// Managed Resource Lifecycle ReadResource(ctx context.Context, in *ReadResource_Request, opts ...grpc.CallOption) (*ReadResource_Response, error) PlanResourceChange(ctx context.Context, in *PlanResourceChange_Request, opts ...grpc.CallOption) (*PlanResourceChange_Response, error) ApplyResourceChange(ctx context.Context, in *ApplyResourceChange_Request, opts ...grpc.CallOption) (*ApplyResourceChange_Response, error) ImportResourceState(ctx context.Context, in *ImportResourceState_Request, opts ...grpc.CallOption) (*ImportResourceState_Response, error) ReadDataSource(ctx context.Context, in *ReadDataSource_Request, opts ...grpc.CallOption) (*ReadDataSource_Response, error) - //////// Graceful Shutdown + // ////// Graceful Shutdown Stop(ctx context.Context, in *Stop_Request, opts ...grpc.CallOption) (*Stop_Response, error) } @@ -48,9 +93,18 @@ func NewProviderClient(cc grpc.ClientConnInterface) ProviderClient { return &providerClient{cc} } +func (c *providerClient) GetMetadata(ctx context.Context, in *GetMetadata_Request, opts ...grpc.CallOption) (*GetMetadata_Response, error) { + out := new(GetMetadata_Response) + err := c.cc.Invoke(ctx, Provider_GetMetadata_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *providerClient) GetSchema(ctx context.Context, in *GetProviderSchema_Request, opts ...grpc.CallOption) (*GetProviderSchema_Response, error) { out := new(GetProviderSchema_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/GetSchema", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_GetSchema_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -59,7 +113,7 @@ func (c *providerClient) GetSchema(ctx context.Context, in *GetProviderSchema_Re func (c *providerClient) PrepareProviderConfig(ctx context.Context, in *PrepareProviderConfig_Request, opts ...grpc.CallOption) (*PrepareProviderConfig_Response, error) { out := new(PrepareProviderConfig_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/PrepareProviderConfig", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_PrepareProviderConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -68,7 +122,7 @@ func (c *providerClient) PrepareProviderConfig(ctx context.Context, in *PrepareP func (c *providerClient) ValidateResourceTypeConfig(ctx context.Context, in *ValidateResourceTypeConfig_Request, opts ...grpc.CallOption) (*ValidateResourceTypeConfig_Response, error) { out := new(ValidateResourceTypeConfig_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/ValidateResourceTypeConfig", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ValidateResourceTypeConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -77,7 +131,7 @@ func (c *providerClient) ValidateResourceTypeConfig(ctx context.Context, in *Val func (c *providerClient) ValidateDataSourceConfig(ctx context.Context, in *ValidateDataSourceConfig_Request, opts ...grpc.CallOption) (*ValidateDataSourceConfig_Response, error) { out := new(ValidateDataSourceConfig_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/ValidateDataSourceConfig", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ValidateDataSourceConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -86,7 +140,7 @@ func (c *providerClient) ValidateDataSourceConfig(ctx context.Context, in *Valid func (c *providerClient) UpgradeResourceState(ctx context.Context, in *UpgradeResourceState_Request, opts ...grpc.CallOption) (*UpgradeResourceState_Response, error) { out := new(UpgradeResourceState_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/UpgradeResourceState", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_UpgradeResourceState_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -95,7 +149,7 @@ func (c *providerClient) UpgradeResourceState(ctx context.Context, in *UpgradeRe func (c *providerClient) Configure(ctx context.Context, in *Configure_Request, opts ...grpc.CallOption) (*Configure_Response, error) { out := new(Configure_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/Configure", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_Configure_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -104,7 +158,7 @@ func (c *providerClient) Configure(ctx context.Context, in *Configure_Request, o func (c *providerClient) ReadResource(ctx context.Context, in *ReadResource_Request, opts ...grpc.CallOption) (*ReadResource_Response, error) { out := new(ReadResource_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/ReadResource", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ReadResource_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -113,7 +167,7 @@ func (c *providerClient) ReadResource(ctx context.Context, in *ReadResource_Requ func (c *providerClient) PlanResourceChange(ctx context.Context, in *PlanResourceChange_Request, opts ...grpc.CallOption) (*PlanResourceChange_Response, error) { out := new(PlanResourceChange_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/PlanResourceChange", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_PlanResourceChange_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -122,7 +176,7 @@ func (c *providerClient) PlanResourceChange(ctx context.Context, in *PlanResourc func (c *providerClient) ApplyResourceChange(ctx context.Context, in *ApplyResourceChange_Request, opts ...grpc.CallOption) (*ApplyResourceChange_Response, error) { out := new(ApplyResourceChange_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/ApplyResourceChange", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ApplyResourceChange_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -131,7 +185,7 @@ func (c *providerClient) ApplyResourceChange(ctx context.Context, in *ApplyResou func (c *providerClient) ImportResourceState(ctx context.Context, in *ImportResourceState_Request, opts ...grpc.CallOption) (*ImportResourceState_Response, error) { out := new(ImportResourceState_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/ImportResourceState", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ImportResourceState_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -140,7 +194,7 @@ func (c *providerClient) ImportResourceState(ctx context.Context, in *ImportReso func (c *providerClient) ReadDataSource(ctx context.Context, in *ReadDataSource_Request, opts ...grpc.CallOption) (*ReadDataSource_Response, error) { out := new(ReadDataSource_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/ReadDataSource", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ReadDataSource_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -149,7 +203,7 @@ func (c *providerClient) ReadDataSource(ctx context.Context, in *ReadDataSource_ func (c *providerClient) Stop(ctx context.Context, in *Stop_Request, opts ...grpc.CallOption) (*Stop_Response, error) { out := new(Stop_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provider/Stop", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_Stop_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -160,21 +214,28 @@ func (c *providerClient) Stop(ctx context.Context, in *Stop_Request, opts ...grp // All implementations must embed UnimplementedProviderServer // for forward compatibility type ProviderServer interface { - //////// Information about what a provider supports/expects + // GetMetadata returns upfront information about server capabilities and + // supported resource types without requiring the server to instantiate all + // schema information, which may be memory intensive. This RPC is optional, + // where clients may receive an unimplemented RPC error. Clients should + // ignore the error and call the GetSchema RPC as a fallback. + GetMetadata(context.Context, *GetMetadata_Request) (*GetMetadata_Response, error) + // GetSchema returns schema information for the provider, data resources, + // and managed resources. GetSchema(context.Context, *GetProviderSchema_Request) (*GetProviderSchema_Response, error) PrepareProviderConfig(context.Context, *PrepareProviderConfig_Request) (*PrepareProviderConfig_Response, error) ValidateResourceTypeConfig(context.Context, *ValidateResourceTypeConfig_Request) (*ValidateResourceTypeConfig_Response, error) ValidateDataSourceConfig(context.Context, *ValidateDataSourceConfig_Request) (*ValidateDataSourceConfig_Response, error) UpgradeResourceState(context.Context, *UpgradeResourceState_Request) (*UpgradeResourceState_Response, error) - //////// One-time initialization, called before other functions below + // ////// One-time initialization, called before other functions below Configure(context.Context, *Configure_Request) (*Configure_Response, error) - //////// Managed Resource Lifecycle + // ////// Managed Resource Lifecycle ReadResource(context.Context, *ReadResource_Request) (*ReadResource_Response, error) PlanResourceChange(context.Context, *PlanResourceChange_Request) (*PlanResourceChange_Response, error) ApplyResourceChange(context.Context, *ApplyResourceChange_Request) (*ApplyResourceChange_Response, error) ImportResourceState(context.Context, *ImportResourceState_Request) (*ImportResourceState_Response, error) ReadDataSource(context.Context, *ReadDataSource_Request) (*ReadDataSource_Response, error) - //////// Graceful Shutdown + // ////// Graceful Shutdown Stop(context.Context, *Stop_Request) (*Stop_Response, error) mustEmbedUnimplementedProviderServer() } @@ -183,6 +244,9 @@ type ProviderServer interface { type UnimplementedProviderServer struct { } +func (UnimplementedProviderServer) GetMetadata(context.Context, *GetMetadata_Request) (*GetMetadata_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMetadata not implemented") +} func (UnimplementedProviderServer) GetSchema(context.Context, *GetProviderSchema_Request) (*GetProviderSchema_Response, error) { return nil, status.Errorf(codes.Unimplemented, "method GetSchema not implemented") } @@ -232,6 +296,24 @@ func RegisterProviderServer(s grpc.ServiceRegistrar, srv ProviderServer) { s.RegisterService(&Provider_ServiceDesc, srv) } +func _Provider_GetMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMetadata_Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProviderServer).GetMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Provider_GetMetadata_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProviderServer).GetMetadata(ctx, req.(*GetMetadata_Request)) + } + return interceptor(ctx, in, info, handler) +} + func _Provider_GetSchema_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetProviderSchema_Request) if err := dec(in); err != nil { @@ -242,7 +324,7 @@ func _Provider_GetSchema_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/GetSchema", + FullMethod: Provider_GetSchema_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).GetSchema(ctx, req.(*GetProviderSchema_Request)) @@ -260,7 +342,7 @@ func _Provider_PrepareProviderConfig_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/PrepareProviderConfig", + FullMethod: Provider_PrepareProviderConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).PrepareProviderConfig(ctx, req.(*PrepareProviderConfig_Request)) @@ -278,7 +360,7 @@ func _Provider_ValidateResourceTypeConfig_Handler(srv interface{}, ctx context.C } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/ValidateResourceTypeConfig", + FullMethod: Provider_ValidateResourceTypeConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ValidateResourceTypeConfig(ctx, req.(*ValidateResourceTypeConfig_Request)) @@ -296,7 +378,7 @@ func _Provider_ValidateDataSourceConfig_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/ValidateDataSourceConfig", + FullMethod: Provider_ValidateDataSourceConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ValidateDataSourceConfig(ctx, req.(*ValidateDataSourceConfig_Request)) @@ -314,7 +396,7 @@ func _Provider_UpgradeResourceState_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/UpgradeResourceState", + FullMethod: Provider_UpgradeResourceState_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).UpgradeResourceState(ctx, req.(*UpgradeResourceState_Request)) @@ -332,7 +414,7 @@ func _Provider_Configure_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/Configure", + FullMethod: Provider_Configure_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).Configure(ctx, req.(*Configure_Request)) @@ -350,7 +432,7 @@ func _Provider_ReadResource_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/ReadResource", + FullMethod: Provider_ReadResource_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ReadResource(ctx, req.(*ReadResource_Request)) @@ -368,7 +450,7 @@ func _Provider_PlanResourceChange_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/PlanResourceChange", + FullMethod: Provider_PlanResourceChange_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).PlanResourceChange(ctx, req.(*PlanResourceChange_Request)) @@ -386,7 +468,7 @@ func _Provider_ApplyResourceChange_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/ApplyResourceChange", + FullMethod: Provider_ApplyResourceChange_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ApplyResourceChange(ctx, req.(*ApplyResourceChange_Request)) @@ -404,7 +486,7 @@ func _Provider_ImportResourceState_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/ImportResourceState", + FullMethod: Provider_ImportResourceState_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ImportResourceState(ctx, req.(*ImportResourceState_Request)) @@ -422,7 +504,7 @@ func _Provider_ReadDataSource_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/ReadDataSource", + FullMethod: Provider_ReadDataSource_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ReadDataSource(ctx, req.(*ReadDataSource_Request)) @@ -440,7 +522,7 @@ func _Provider_Stop_Handler(srv interface{}, ctx context.Context, dec func(inter } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provider/Stop", + FullMethod: Provider_Stop_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).Stop(ctx, req.(*Stop_Request)) @@ -455,6 +537,10 @@ var Provider_ServiceDesc = grpc.ServiceDesc{ ServiceName: "tfplugin5.Provider", HandlerType: (*ProviderServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "GetMetadata", + Handler: _Provider_GetMetadata_Handler, + }, { MethodName: "GetSchema", Handler: _Provider_GetSchema_Handler, @@ -508,6 +594,13 @@ var Provider_ServiceDesc = grpc.ServiceDesc{ Metadata: "tfplugin5.proto", } +const ( + Provisioner_GetSchema_FullMethodName = "/tfplugin5.Provisioner/GetSchema" + Provisioner_ValidateProvisionerConfig_FullMethodName = "/tfplugin5.Provisioner/ValidateProvisionerConfig" + Provisioner_ProvisionResource_FullMethodName = "/tfplugin5.Provisioner/ProvisionResource" + Provisioner_Stop_FullMethodName = "/tfplugin5.Provisioner/Stop" +) + // ProvisionerClient is the client API for Provisioner service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. @@ -528,7 +621,7 @@ func NewProvisionerClient(cc grpc.ClientConnInterface) ProvisionerClient { func (c *provisionerClient) GetSchema(ctx context.Context, in *GetProvisionerSchema_Request, opts ...grpc.CallOption) (*GetProvisionerSchema_Response, error) { out := new(GetProvisionerSchema_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provisioner/GetSchema", in, out, opts...) + err := c.cc.Invoke(ctx, Provisioner_GetSchema_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -537,7 +630,7 @@ func (c *provisionerClient) GetSchema(ctx context.Context, in *GetProvisionerSch func (c *provisionerClient) ValidateProvisionerConfig(ctx context.Context, in *ValidateProvisionerConfig_Request, opts ...grpc.CallOption) (*ValidateProvisionerConfig_Response, error) { out := new(ValidateProvisionerConfig_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provisioner/ValidateProvisionerConfig", in, out, opts...) + err := c.cc.Invoke(ctx, Provisioner_ValidateProvisionerConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -545,7 +638,7 @@ func (c *provisionerClient) ValidateProvisionerConfig(ctx context.Context, in *V } func (c *provisionerClient) ProvisionResource(ctx context.Context, in *ProvisionResource_Request, opts ...grpc.CallOption) (Provisioner_ProvisionResourceClient, error) { - stream, err := c.cc.NewStream(ctx, &Provisioner_ServiceDesc.Streams[0], "/tfplugin5.Provisioner/ProvisionResource", opts...) + stream, err := c.cc.NewStream(ctx, &Provisioner_ServiceDesc.Streams[0], Provisioner_ProvisionResource_FullMethodName, opts...) if err != nil { return nil, err } @@ -578,7 +671,7 @@ func (x *provisionerProvisionResourceClient) Recv() (*ProvisionResource_Response func (c *provisionerClient) Stop(ctx context.Context, in *Stop_Request, opts ...grpc.CallOption) (*Stop_Response, error) { out := new(Stop_Response) - err := c.cc.Invoke(ctx, "/tfplugin5.Provisioner/Stop", in, out, opts...) + err := c.cc.Invoke(ctx, Provisioner_Stop_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -635,7 +728,7 @@ func _Provisioner_GetSchema_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provisioner/GetSchema", + FullMethod: Provisioner_GetSchema_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProvisionerServer).GetSchema(ctx, req.(*GetProvisionerSchema_Request)) @@ -653,7 +746,7 @@ func _Provisioner_ValidateProvisionerConfig_Handler(srv interface{}, ctx context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provisioner/ValidateProvisionerConfig", + FullMethod: Provisioner_ValidateProvisionerConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProvisionerServer).ValidateProvisionerConfig(ctx, req.(*ValidateProvisionerConfig_Request)) @@ -692,7 +785,7 @@ func _Provisioner_Stop_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin5.Provisioner/Stop", + FullMethod: Provisioner_Stop_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProvisionerServer).Stop(ctx, req.(*Stop_Request)) diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/data_source.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/data_source.go index 516812cd22100..e16e94fbe298f 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/data_source.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/data_source.go @@ -5,6 +5,16 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5" ) +func GetMetadata_DataSourceMetadata(in *tfprotov5.DataSourceMetadata) *tfplugin5.GetMetadata_DataSourceMetadata { + if in == nil { + return nil + } + + return &tfplugin5.GetMetadata_DataSourceMetadata{ + TypeName: in.TypeName, + } +} + func ValidateDataSourceConfig_Request(in *tfprotov5.ValidateDataSourceConfigRequest) (*tfplugin5.ValidateDataSourceConfig_Request, error) { resp := &tfplugin5.ValidateDataSourceConfig_Request{ TypeName: in.TypeName, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/provider.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/provider.go index 9b0d9ac251b03..6e29c1dd5f1b9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/provider.go @@ -7,6 +7,40 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5" ) +func GetMetadata_Request(in *tfprotov5.GetMetadataRequest) (*tfplugin5.GetMetadata_Request, error) { + return &tfplugin5.GetMetadata_Request{}, nil +} + +func GetMetadata_Response(in *tfprotov5.GetMetadataResponse) (*tfplugin5.GetMetadata_Response, error) { + if in == nil { + return nil, nil + } + + resp := &tfplugin5.GetMetadata_Response{ + DataSources: make([]*tfplugin5.GetMetadata_DataSourceMetadata, 0, len(in.DataSources)), + Resources: make([]*tfplugin5.GetMetadata_ResourceMetadata, 0, len(in.Resources)), + ServerCapabilities: ServerCapabilities(in.ServerCapabilities), + } + + for _, datasource := range in.DataSources { + resp.DataSources = append(resp.DataSources, GetMetadata_DataSourceMetadata(&datasource)) + } + + for _, resource := range in.Resources { + resp.Resources = append(resp.Resources, GetMetadata_ResourceMetadata(&resource)) + } + + diags, err := Diagnostics(in.Diagnostics) + + if err != nil { + return resp, err + } + + resp.Diagnostics = diags + + return resp, nil +} + func GetProviderSchema_Request(in *tfprotov5.GetProviderSchemaRequest) (*tfplugin5.GetProviderSchema_Request, error) { return &tfplugin5.GetProviderSchema_Request{}, nil } @@ -16,7 +50,7 @@ func GetProviderSchema_Response(in *tfprotov5.GetProviderSchemaResponse) (*tfplu return nil, nil } resp := tfplugin5.GetProviderSchema_Response{ - ServerCapabilities: GetProviderSchema_ServerCapabilities(in.ServerCapabilities), + ServerCapabilities: ServerCapabilities(in.ServerCapabilities), } if in.Provider != nil { schema, err := Schema(in.Provider) diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/resource.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/resource.go index 77eba487e6e8d..fd2d6c38ca00d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/resource.go @@ -5,6 +5,16 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5" ) +func GetMetadata_ResourceMetadata(in *tfprotov5.ResourceMetadata) *tfplugin5.GetMetadata_ResourceMetadata { + if in == nil { + return nil + } + + return &tfplugin5.GetMetadata_ResourceMetadata{ + TypeName: in.TypeName, + } +} + func ValidateResourceTypeConfig_Request(in *tfprotov5.ValidateResourceTypeConfigRequest) (*tfplugin5.ValidateResourceTypeConfig_Request, error) { resp := &tfplugin5.ValidateResourceTypeConfig_Request{ TypeName: in.TypeName, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/server_capabilities.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/server_capabilities.go index c1ff45ae41312..08ccbb3d99015 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/server_capabilities.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/toproto/server_capabilities.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package toproto import ( @@ -5,12 +8,13 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5" ) -func GetProviderSchema_ServerCapabilities(in *tfprotov5.ServerCapabilities) *tfplugin5.GetProviderSchema_ServerCapabilities { +func ServerCapabilities(in *tfprotov5.ServerCapabilities) *tfplugin5.ServerCapabilities { if in == nil { return nil } - return &tfplugin5.GetProviderSchema_ServerCapabilities{ - PlanDestroy: in.PlanDestroy, + return &tfplugin5.ServerCapabilities{ + GetProviderSchemaOptional: in.GetProviderSchemaOptional, + PlanDestroy: in.PlanDestroy, } } diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/provider.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/provider.go index 0bc84ff2630fc..20b7e44e5c2e9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 import ( @@ -7,6 +10,13 @@ import ( // ProviderServer is an interface that reflects that Terraform protocol. // Providers must implement this interface. type ProviderServer interface { + // GetMetadata returns upfront information about server capabilities and + // supported resource types without requiring the server to instantiate all + // schema information, which may be memory intensive. This RPC is optional, + // where clients may receive an unimplemented RPC error. Clients should + // ignore the error and call the GetProviderSchema RPC as a fallback. + GetMetadata(context.Context, *GetMetadataRequest) (*GetMetadataResponse, error) + // GetProviderSchema is called when Terraform needs to know what the // provider's schema is, along with the schemas of all its resources // and data sources. @@ -39,6 +49,27 @@ type ProviderServer interface { DataSourceServer } +// GetMetadataRequest represents a GetMetadata RPC request. +type GetMetadataRequest struct{} + +// GetMetadataResponse represents a GetMetadata RPC response. +type GetMetadataResponse struct { + // ServerCapabilities defines optionally supported protocol features, + // such as forward-compatible Terraform behavior changes. + ServerCapabilities *ServerCapabilities + + // Diagnostics report errors or warnings related to returning the + // provider's schemas. Returning an empty slice indicates success, with + // no errors or warnings generated. + Diagnostics []*Diagnostic + + // DataSources returns metadata for all data resources. + DataSources []DataSourceMetadata + + // Resources returns metadata for all managed resources. + Resources []ResourceMetadata +} + // GetProviderSchemaRequest represents a Terraform RPC request for the // provider's schemas. type GetProviderSchemaRequest struct{} diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/resource.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/resource.go index b86a045e957ce..fdae84f3262c6 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/resource.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 import ( @@ -6,6 +9,13 @@ import ( "github.com/hashicorp/terraform-plugin-go/tftypes" ) +// ResourceMetadata describes metadata for a managed resource in the GetMetadata +// RPC. +type ResourceMetadata struct { + // TypeName is the name of the managed resource. + TypeName string +} + // ResourceServer is an interface containing the methods a resource // implementation needs to fill. type ResourceServer interface { diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/schema.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/schema.go index b0b6dff284304..9b860275f1384 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 import "github.com/hashicorp/terraform-plugin-go/tftypes" diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/server_capabilities.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/server_capabilities.go index f87cf2f4aa3a6..9f2e79e98ecf1 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/server_capabilities.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/server_capabilities.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 // ServerCapabilities allows providers to communicate optionally supported @@ -11,4 +14,9 @@ type ServerCapabilities struct { // opt-in to prevent unexpected errors or panics since the // ProposedNewState in PlanResourceChangeRequest will be a null value. PlanDestroy bool + + // GetProviderSchemaOptional signals that this provider does not require + // having the GetProviderSchema RPC called first to operate normally. This + // means the caller can use a cached copy of the provider's schema instead. + GetProviderSchemaOptional bool } diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/state.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/state.go index 1f85dcad10615..08c118958ef8d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/state.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/string_kind.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/string_kind.go index 35d89d038c037..69169b678a804 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/string_kind.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/string_kind.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov5 const ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/doc.go index d8360a7fba34b..96089e6ba12a5 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tf5server implements a server implementation to run // tfprotov5.ProviderServers as gRPC servers. // diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/plugin.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/plugin.go index a33afd84c0ed9..602246aa3f2f6 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/plugin.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/plugin.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tf5server import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/server.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/server.go index 952b789f58555..c9fcdc75503d9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/server.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server/server.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tf5server import ( @@ -45,7 +48,7 @@ const ( // // In the future, it may be possible to include this information directly // in the protocol buffers rather than recreating a constant here. - protocolVersionMinor uint = 3 + protocolVersionMinor uint = 4 ) // protocolVersion represents the combined major and minor version numbers of @@ -483,6 +486,43 @@ func New(name string, serve tfprotov5.ProviderServer, opts ...ServeOpt) tfplugin } } +func (s *server) GetMetadata(ctx context.Context, req *tfplugin5.GetMetadata_Request) (*tfplugin5.GetMetadata_Response, error) { + rpc := "GetMetadata" + ctx = s.loggingContext(ctx) + ctx = logging.RpcContext(ctx, rpc) + ctx = s.stoppableContext(ctx) + logging.ProtocolTrace(ctx, "Received request") + defer logging.ProtocolTrace(ctx, "Served request") + + r, err := fromproto.GetMetadataRequest(req) + + if err != nil { + logging.ProtocolError(ctx, "Error converting request from protobuf", map[string]interface{}{logging.KeyError: err}) + return nil, err + } + + ctx = tf5serverlogging.DownstreamRequest(ctx) + + resp, err := s.downstream.GetMetadata(ctx, r) + + if err != nil { + logging.ProtocolError(ctx, "Error from downstream", map[string]interface{}{logging.KeyError: err}) + return nil, err + } + + tf5serverlogging.DownstreamResponse(ctx, resp.Diagnostics) + tf5serverlogging.ServerCapabilities(ctx, resp.ServerCapabilities) + + ret, err := toproto.GetMetadata_Response(resp) + + if err != nil { + logging.ProtocolError(ctx, "Error converting response to protobuf", map[string]interface{}{logging.KeyError: err}) + return nil, err + } + + return ret, nil +} + func (s *server) GetSchema(ctx context.Context, req *tfplugin5.GetProviderSchema_Request) (*tfplugin5.GetProviderSchema_Response, error) { rpc := "GetProviderSchema" ctx = s.loggingContext(ctx) @@ -502,6 +542,7 @@ func (s *server) GetSchema(ctx context.Context, req *tfplugin5.GetProviderSchema return nil, err } tf5serverlogging.DownstreamResponse(ctx, resp.Diagnostics) + tf5serverlogging.ServerCapabilities(ctx, resp.ServerCapabilities) ret, err := toproto.GetProviderSchema_Response(resp) if err != nil { logging.ProtocolError(ctx, "Error converting response to protobuf", map[string]interface{}{logging.KeyError: err}) diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/data_source.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/data_source.go index 1feb2cf34500b..ebb2cbd3dc23a 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/data_source.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/data_source.go @@ -1,9 +1,19 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 import ( "context" ) +// DataSourceMetadata describes metadata for a data resource in the GetMetadata +// RPC. +type DataSourceMetadata struct { + // TypeName is the name of the data resource. + TypeName string +} + // DataSourceServer is an interface containing the methods a data source // implementation needs to fill. type DataSourceServer interface { diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/diagnostic.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/diagnostic.go index c40d52ad07c70..8f856abbba73e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/diagnostic.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/diagnostic.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 import "github.com/hashicorp/terraform-plugin-go/tftypes" diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/doc.go index 875120cba3807..e9adfdedb69cf 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tfprotov6 provides the interfaces and types needed to build a // Terraform provider server. // diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/dynamic_value.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/dynamic_value.go index a9fd78420a30a..76bac4d5df515 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/dynamic_value.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/dynamic_value.go @@ -1,9 +1,17 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 import ( + "bytes" + "encoding/json" "errors" + "fmt" "github.com/hashicorp/terraform-plugin-go/tftypes" + msgpack "github.com/vmihailenco/msgpack/v5" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) // ErrUnknownDynamicValueType is returned when a DynamicValue has no MsgPack or @@ -35,7 +43,7 @@ func NewDynamicValue(t tftypes.Type, v tftypes.Value) (DynamicValue, error) { // DynamicValue represents a nested encoding value that came from the protocol. // The only way providers should ever interact with it is by calling its -// `Unmarshal` method to retrive a `tftypes.Value`. Although the type system +// `Unmarshal` method to retrieve a `tftypes.Value`. Although the type system // allows for other interactions, they are explicitly not supported, and will // not be considered when evaluating for breaking changes. Treat this type as // an opaque value, and *only* call its `Unmarshal` method. @@ -44,6 +52,43 @@ type DynamicValue struct { JSON []byte } +// IsNull returns true if the DynamicValue represents a null value based on the +// underlying JSON or MessagePack data. +func (d DynamicValue) IsNull() (bool, error) { + if d.JSON != nil { + decoder := json.NewDecoder(bytes.NewReader(d.JSON)) + token, err := decoder.Token() + + if err != nil { + return false, fmt.Errorf("unable to read DynamicValue JSON token: %w", err) + } + + if token != nil { + return false, nil + } + + return true, nil + } + + if d.MsgPack != nil { + decoder := msgpack.NewDecoder(bytes.NewReader(d.MsgPack)) + code, err := decoder.PeekCode() + + if err != nil { + return false, fmt.Errorf("unable to read DynamicValue MsgPack code: %w", err) + } + + // Extensions are considered unknown + if msgpcode.IsExt(code) || code != msgpcode.Nil { + return false, nil + } + + return true, nil + } + + return false, fmt.Errorf("unable to read DynamicValue: %w", ErrUnknownDynamicValueType) +} + // Unmarshal returns a `tftypes.Value` that represents the information // contained in the DynamicValue in an easy-to-interact-with way. It is the // main purpose of the DynamicValue type, and is how provider developers should diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/diag/diagnostics.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/diag/diagnostics.go index fbec5677cb1bc..29bed4540c448 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/diag/diagnostics.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/diag/diagnostics.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package diag import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/diag/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/diag/doc.go index 0c73dab12fe60..faaba2285cd07 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/diag/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/diag/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package diag contains diagnostics helpers. These implementations are // intentionally outside the public API. package diag diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/attribute_path.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/attribute_path.go index c25c3cb0d95c5..267bc223da3b5 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/attribute_path.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/attribute_path.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/data_source.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/data_source.go index 130f6a821982e..f6c3c3663eea7 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/data_source.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/data_source.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( @@ -5,6 +8,16 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6" ) +func DataSourceMetadata(in *tfplugin6.GetMetadata_DataSourceMetadata) *tfprotov6.DataSourceMetadata { + if in == nil { + return nil + } + + return &tfprotov6.DataSourceMetadata{ + TypeName: in.TypeName, + } +} + func ValidateDataResourceConfigRequest(in *tfplugin6.ValidateDataResourceConfig_Request) (*tfprotov6.ValidateDataResourceConfigRequest, error) { resp := &tfprotov6.ValidateDataResourceConfigRequest{ TypeName: in.TypeName, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/diagnostic.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/diagnostic.go index ac92796fb1fa0..21673ca0da8ce 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/diagnostic.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/diagnostic.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/provider.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/provider.go index 2000b9bb0c45e..0bf78cb8e581b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( @@ -5,6 +8,40 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6" ) +func GetMetadataRequest(in *tfplugin6.GetMetadata_Request) (*tfprotov6.GetMetadataRequest, error) { + return &tfprotov6.GetMetadataRequest{}, nil +} + +func GetMetadataResponse(in *tfplugin6.GetMetadata_Response) (*tfprotov6.GetMetadataResponse, error) { + if in == nil { + return nil, nil + } + + resp := &tfprotov6.GetMetadataResponse{ + DataSources: make([]tfprotov6.DataSourceMetadata, 0, len(in.DataSources)), + Resources: make([]tfprotov6.ResourceMetadata, 0, len(in.Resources)), + ServerCapabilities: ServerCapabilities(in.ServerCapabilities), + } + + for _, datasource := range in.DataSources { + resp.DataSources = append(resp.DataSources, *DataSourceMetadata(datasource)) + } + + for _, resource := range in.Resources { + resp.Resources = append(resp.Resources, *ResourceMetadata(resource)) + } + + diags, err := Diagnostics(in.Diagnostics) + + if err != nil { + return resp, err + } + + resp.Diagnostics = diags + + return resp, nil +} + func GetProviderSchemaRequest(in *tfplugin6.GetProviderSchema_Request) (*tfprotov6.GetProviderSchemaRequest, error) { return &tfprotov6.GetProviderSchemaRequest{}, nil } diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/resource.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/resource.go index 94addd8012511..385ef134d0b67 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/resource.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( @@ -7,6 +10,16 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6" ) +func ResourceMetadata(in *tfplugin6.GetMetadata_ResourceMetadata) *tfprotov6.ResourceMetadata { + if in == nil { + return nil + } + + return &tfprotov6.ResourceMetadata{ + TypeName: in.TypeName, + } +} + func ValidateResourceConfigRequest(in *tfplugin6.ValidateResourceConfig_Request) (*tfprotov6.ValidateResourceConfigRequest, error) { resp := &tfprotov6.ValidateResourceConfigRequest{ TypeName: in.TypeName, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/schema.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/schema.go index db720246f510b..b4cb1399facae 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/server_capabilities.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/server_capabilities.go new file mode 100644 index 0000000000000..58ba96ab5d978 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/server_capabilities.go @@ -0,0 +1,20 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package fromproto + +import ( + "github.com/hashicorp/terraform-plugin-go/tfprotov6" + "github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6" +) + +func ServerCapabilities(in *tfplugin6.ServerCapabilities) *tfprotov6.ServerCapabilities { + if in == nil { + return nil + } + + return &tfprotov6.ServerCapabilities{ + GetProviderSchemaOptional: in.GetProviderSchemaOptional, + PlanDestroy: in.PlanDestroy, + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/state.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/state.go index 0aa2a5a6a06a7..e5470b50d5244 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/state.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/string_kind.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/string_kind.go index f2b1107538ab2..bfe82ca8aa6c5 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/string_kind.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/string_kind.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/types.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/types.go index 87127f4a6df25..967256b728e9d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/types.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/types.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package fromproto import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/context_keys.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/context_keys.go index 15386cd2cc2d9..99f55e467d3e6 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/context_keys.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/context_keys.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tf6serverlogging // Context key types. diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/doc.go index 167a61825acd1..29c51245efbcd 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tf5serverlogging contains logging functionality specific to // tf5server and tfprotov5 types. package tf6serverlogging diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/downstream_request.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/downstream_request.go index 31ce386aebb3a..0fd36326e56ff 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/downstream_request.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/downstream_request.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tf6serverlogging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/server_capabilities.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/server_capabilities.go new file mode 100644 index 0000000000000..f6aaf953d99b9 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tf6serverlogging/server_capabilities.go @@ -0,0 +1,26 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tf6serverlogging + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-go/internal/logging" + "github.com/hashicorp/terraform-plugin-go/tfprotov6" +) + +// ServerCapabilities generates a TRACE "Announced server capabilities" log. +func ServerCapabilities(ctx context.Context, capabilities *tfprotov6.ServerCapabilities) { + responseFields := map[string]interface{}{ + logging.KeyServerCapabilityGetProviderSchemaOptional: false, + logging.KeyServerCapabilityPlanDestroy: false, + } + + if capabilities != nil { + responseFields[logging.KeyServerCapabilityGetProviderSchemaOptional] = capabilities.GetProviderSchemaOptional + responseFields[logging.KeyServerCapabilityPlanDestroy] = capabilities.PlanDestroy + } + + logging.ProtocolTrace(ctx, "Announced server capabilities", responseFields) +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6.pb.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6.pb.go index 817f059ccd79d..1e2cd2366a500 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6.pb.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6.pb.go @@ -1,6 +1,9 @@ -// Terraform Plugin RPC protocol version 6.3 +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Terraform Plugin RPC protocol version 6.4 // -// This file defines version 6.3 of the RPC protocol. To implement a plugin +// This file defines version 6.4 of the RPC protocol. To implement a plugin // against this protocol, copy this definition into your own codebase and // use protoc to generate stubs for your target language. // @@ -19,8 +22,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc-gen-go v1.31.0 +// protoc v4.23.2 // source: tfplugin6.proto package tfplugin6 @@ -578,6 +581,109 @@ func (x *Schema) GetBlock() *Schema_Block { return nil } +// ServerCapabilities allows providers to communicate extra information +// regarding supported protocol features. This is used to indicate +// availability of certain forward-compatible changes which may be optional +// in a major protocol version, but cannot be tested for directly. +type ServerCapabilities struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The plan_destroy capability signals that a provider expects a call + // to PlanResourceChange when a resource is going to be destroyed. + PlanDestroy bool `protobuf:"varint,1,opt,name=plan_destroy,json=planDestroy,proto3" json:"plan_destroy,omitempty"` + // The get_provider_schema_optional capability indicates that this + // provider does not require calling GetProviderSchema to operate + // normally, and the caller can used a cached copy of the provider's + // schema. + GetProviderSchemaOptional bool `protobuf:"varint,2,opt,name=get_provider_schema_optional,json=getProviderSchemaOptional,proto3" json:"get_provider_schema_optional,omitempty"` +} + +func (x *ServerCapabilities) Reset() { + *x = ServerCapabilities{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin6_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerCapabilities) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerCapabilities) ProtoMessage() {} + +func (x *ServerCapabilities) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin6_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerCapabilities.ProtoReflect.Descriptor instead. +func (*ServerCapabilities) Descriptor() ([]byte, []int) { + return file_tfplugin6_proto_rawDescGZIP(), []int{6} +} + +func (x *ServerCapabilities) GetPlanDestroy() bool { + if x != nil { + return x.PlanDestroy + } + return false +} + +func (x *ServerCapabilities) GetGetProviderSchemaOptional() bool { + if x != nil { + return x.GetProviderSchemaOptional + } + return false +} + +type GetMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetMetadata) Reset() { + *x = GetMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin6_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetadata) ProtoMessage() {} + +func (x *GetMetadata) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin6_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetadata.ProtoReflect.Descriptor instead. +func (*GetMetadata) Descriptor() ([]byte, []int) { + return file_tfplugin6_proto_rawDescGZIP(), []int{7} +} + type GetProviderSchema struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -587,7 +693,7 @@ type GetProviderSchema struct { func (x *GetProviderSchema) Reset() { *x = GetProviderSchema{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[6] + mi := &file_tfplugin6_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -600,7 +706,7 @@ func (x *GetProviderSchema) String() string { func (*GetProviderSchema) ProtoMessage() {} func (x *GetProviderSchema) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[6] + mi := &file_tfplugin6_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -613,7 +719,7 @@ func (x *GetProviderSchema) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProviderSchema.ProtoReflect.Descriptor instead. func (*GetProviderSchema) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{6} + return file_tfplugin6_proto_rawDescGZIP(), []int{8} } type ValidateProviderConfig struct { @@ -625,7 +731,7 @@ type ValidateProviderConfig struct { func (x *ValidateProviderConfig) Reset() { *x = ValidateProviderConfig{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[7] + mi := &file_tfplugin6_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -638,7 +744,7 @@ func (x *ValidateProviderConfig) String() string { func (*ValidateProviderConfig) ProtoMessage() {} func (x *ValidateProviderConfig) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[7] + mi := &file_tfplugin6_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -651,7 +757,7 @@ func (x *ValidateProviderConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateProviderConfig.ProtoReflect.Descriptor instead. func (*ValidateProviderConfig) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{7} + return file_tfplugin6_proto_rawDescGZIP(), []int{9} } type UpgradeResourceState struct { @@ -663,7 +769,7 @@ type UpgradeResourceState struct { func (x *UpgradeResourceState) Reset() { *x = UpgradeResourceState{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[8] + mi := &file_tfplugin6_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -676,7 +782,7 @@ func (x *UpgradeResourceState) String() string { func (*UpgradeResourceState) ProtoMessage() {} func (x *UpgradeResourceState) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[8] + mi := &file_tfplugin6_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -689,7 +795,7 @@ func (x *UpgradeResourceState) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeResourceState.ProtoReflect.Descriptor instead. func (*UpgradeResourceState) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{8} + return file_tfplugin6_proto_rawDescGZIP(), []int{10} } type ValidateResourceConfig struct { @@ -701,7 +807,7 @@ type ValidateResourceConfig struct { func (x *ValidateResourceConfig) Reset() { *x = ValidateResourceConfig{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[9] + mi := &file_tfplugin6_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -714,7 +820,7 @@ func (x *ValidateResourceConfig) String() string { func (*ValidateResourceConfig) ProtoMessage() {} func (x *ValidateResourceConfig) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[9] + mi := &file_tfplugin6_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -727,7 +833,7 @@ func (x *ValidateResourceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateResourceConfig.ProtoReflect.Descriptor instead. func (*ValidateResourceConfig) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{9} + return file_tfplugin6_proto_rawDescGZIP(), []int{11} } type ValidateDataResourceConfig struct { @@ -739,7 +845,7 @@ type ValidateDataResourceConfig struct { func (x *ValidateDataResourceConfig) Reset() { *x = ValidateDataResourceConfig{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[10] + mi := &file_tfplugin6_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -752,7 +858,7 @@ func (x *ValidateDataResourceConfig) String() string { func (*ValidateDataResourceConfig) ProtoMessage() {} func (x *ValidateDataResourceConfig) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[10] + mi := &file_tfplugin6_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -765,7 +871,7 @@ func (x *ValidateDataResourceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateDataResourceConfig.ProtoReflect.Descriptor instead. func (*ValidateDataResourceConfig) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{10} + return file_tfplugin6_proto_rawDescGZIP(), []int{12} } type ConfigureProvider struct { @@ -777,7 +883,7 @@ type ConfigureProvider struct { func (x *ConfigureProvider) Reset() { *x = ConfigureProvider{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[11] + mi := &file_tfplugin6_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -790,7 +896,7 @@ func (x *ConfigureProvider) String() string { func (*ConfigureProvider) ProtoMessage() {} func (x *ConfigureProvider) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[11] + mi := &file_tfplugin6_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -803,7 +909,7 @@ func (x *ConfigureProvider) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigureProvider.ProtoReflect.Descriptor instead. func (*ConfigureProvider) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{11} + return file_tfplugin6_proto_rawDescGZIP(), []int{13} } type ReadResource struct { @@ -815,7 +921,7 @@ type ReadResource struct { func (x *ReadResource) Reset() { *x = ReadResource{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[12] + mi := &file_tfplugin6_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -828,7 +934,7 @@ func (x *ReadResource) String() string { func (*ReadResource) ProtoMessage() {} func (x *ReadResource) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[12] + mi := &file_tfplugin6_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -841,7 +947,7 @@ func (x *ReadResource) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadResource.ProtoReflect.Descriptor instead. func (*ReadResource) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{12} + return file_tfplugin6_proto_rawDescGZIP(), []int{14} } type PlanResourceChange struct { @@ -853,7 +959,7 @@ type PlanResourceChange struct { func (x *PlanResourceChange) Reset() { *x = PlanResourceChange{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[13] + mi := &file_tfplugin6_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -866,7 +972,7 @@ func (x *PlanResourceChange) String() string { func (*PlanResourceChange) ProtoMessage() {} func (x *PlanResourceChange) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[13] + mi := &file_tfplugin6_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -879,7 +985,7 @@ func (x *PlanResourceChange) ProtoReflect() protoreflect.Message { // Deprecated: Use PlanResourceChange.ProtoReflect.Descriptor instead. func (*PlanResourceChange) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{13} + return file_tfplugin6_proto_rawDescGZIP(), []int{15} } type ApplyResourceChange struct { @@ -891,7 +997,7 @@ type ApplyResourceChange struct { func (x *ApplyResourceChange) Reset() { *x = ApplyResourceChange{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[14] + mi := &file_tfplugin6_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -904,7 +1010,7 @@ func (x *ApplyResourceChange) String() string { func (*ApplyResourceChange) ProtoMessage() {} func (x *ApplyResourceChange) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[14] + mi := &file_tfplugin6_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -917,7 +1023,7 @@ func (x *ApplyResourceChange) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyResourceChange.ProtoReflect.Descriptor instead. func (*ApplyResourceChange) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{14} + return file_tfplugin6_proto_rawDescGZIP(), []int{16} } type ImportResourceState struct { @@ -929,7 +1035,7 @@ type ImportResourceState struct { func (x *ImportResourceState) Reset() { *x = ImportResourceState{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[15] + mi := &file_tfplugin6_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -942,7 +1048,7 @@ func (x *ImportResourceState) String() string { func (*ImportResourceState) ProtoMessage() {} func (x *ImportResourceState) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[15] + mi := &file_tfplugin6_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -955,7 +1061,7 @@ func (x *ImportResourceState) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportResourceState.ProtoReflect.Descriptor instead. func (*ImportResourceState) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{15} + return file_tfplugin6_proto_rawDescGZIP(), []int{17} } type ReadDataSource struct { @@ -967,7 +1073,7 @@ type ReadDataSource struct { func (x *ReadDataSource) Reset() { *x = ReadDataSource{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[16] + mi := &file_tfplugin6_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -980,7 +1086,7 @@ func (x *ReadDataSource) String() string { func (*ReadDataSource) ProtoMessage() {} func (x *ReadDataSource) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[16] + mi := &file_tfplugin6_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -993,7 +1099,7 @@ func (x *ReadDataSource) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadDataSource.ProtoReflect.Descriptor instead. func (*ReadDataSource) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{16} + return file_tfplugin6_proto_rawDescGZIP(), []int{18} } type AttributePath_Step struct { @@ -1002,6 +1108,7 @@ type AttributePath_Step struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Selector: + // // *AttributePath_Step_AttributeName // *AttributePath_Step_ElementKeyString // *AttributePath_Step_ElementKeyInt @@ -1011,7 +1118,7 @@ type AttributePath_Step struct { func (x *AttributePath_Step) Reset() { *x = AttributePath_Step{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[17] + mi := &file_tfplugin6_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1024,7 +1131,7 @@ func (x *AttributePath_Step) String() string { func (*AttributePath_Step) ProtoMessage() {} func (x *AttributePath_Step) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[17] + mi := &file_tfplugin6_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1103,7 +1210,7 @@ type StopProvider_Request struct { func (x *StopProvider_Request) Reset() { *x = StopProvider_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[18] + mi := &file_tfplugin6_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1116,7 +1223,7 @@ func (x *StopProvider_Request) String() string { func (*StopProvider_Request) ProtoMessage() {} func (x *StopProvider_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[18] + mi := &file_tfplugin6_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1143,7 +1250,7 @@ type StopProvider_Response struct { func (x *StopProvider_Response) Reset() { *x = StopProvider_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[19] + mi := &file_tfplugin6_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1156,7 +1263,7 @@ func (x *StopProvider_Response) String() string { func (*StopProvider_Response) ProtoMessage() {} func (x *StopProvider_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[19] + mi := &file_tfplugin6_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1195,7 +1302,7 @@ type Schema_Block struct { func (x *Schema_Block) Reset() { *x = Schema_Block{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[21] + mi := &file_tfplugin6_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1208,7 +1315,7 @@ func (x *Schema_Block) String() string { func (*Schema_Block) ProtoMessage() {} func (x *Schema_Block) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[21] + mi := &file_tfplugin6_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1286,7 +1393,7 @@ type Schema_Attribute struct { func (x *Schema_Attribute) Reset() { *x = Schema_Attribute{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[22] + mi := &file_tfplugin6_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1299,7 +1406,7 @@ func (x *Schema_Attribute) String() string { func (*Schema_Attribute) ProtoMessage() {} func (x *Schema_Attribute) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[22] + mi := &file_tfplugin6_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1400,7 +1507,7 @@ type Schema_NestedBlock struct { func (x *Schema_NestedBlock) Reset() { *x = Schema_NestedBlock{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[23] + mi := &file_tfplugin6_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1413,7 +1520,7 @@ func (x *Schema_NestedBlock) String() string { func (*Schema_NestedBlock) ProtoMessage() {} func (x *Schema_NestedBlock) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[23] + mi := &file_tfplugin6_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1474,16 +1581,16 @@ type Schema_Object struct { // MinItems and MaxItems were never used in the protocol, and have no // effect on validation. // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in tfplugin6.proto. MinItems int64 `protobuf:"varint,4,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in tfplugin6.proto. MaxItems int64 `protobuf:"varint,5,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` } func (x *Schema_Object) Reset() { *x = Schema_Object{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[24] + mi := &file_tfplugin6_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1496,7 +1603,7 @@ func (x *Schema_Object) String() string { func (*Schema_Object) ProtoMessage() {} func (x *Schema_Object) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[24] + mi := &file_tfplugin6_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1526,7 +1633,7 @@ func (x *Schema_Object) GetNesting() Schema_Object_NestingMode { return Schema_Object_INVALID } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in tfplugin6.proto. func (x *Schema_Object) GetMinItems() int64 { if x != nil { return x.MinItems @@ -1534,7 +1641,7 @@ func (x *Schema_Object) GetMinItems() int64 { return 0 } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in tfplugin6.proto. func (x *Schema_Object) GetMaxItems() int64 { if x != nil { return x.MaxItems @@ -1542,29 +1649,29 @@ func (x *Schema_Object) GetMaxItems() int64 { return 0 } -type GetProviderSchema_Request struct { +type GetMetadata_Request struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *GetProviderSchema_Request) Reset() { - *x = GetProviderSchema_Request{} +func (x *GetMetadata_Request) Reset() { + *x = GetMetadata_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[25] + mi := &file_tfplugin6_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProviderSchema_Request) String() string { +func (x *GetMetadata_Request) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProviderSchema_Request) ProtoMessage() {} +func (*GetMetadata_Request) ProtoMessage() {} -func (x *GetProviderSchema_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[25] +func (x *GetMetadata_Request) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin6_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1575,41 +1682,39 @@ func (x *GetProviderSchema_Request) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProviderSchema_Request.ProtoReflect.Descriptor instead. -func (*GetProviderSchema_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{6, 0} +// Deprecated: Use GetMetadata_Request.ProtoReflect.Descriptor instead. +func (*GetMetadata_Request) Descriptor() ([]byte, []int) { + return file_tfplugin6_proto_rawDescGZIP(), []int{7, 0} } -type GetProviderSchema_Response struct { +type GetMetadata_Response struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Provider *Schema `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` - ResourceSchemas map[string]*Schema `protobuf:"bytes,2,rep,name=resource_schemas,json=resourceSchemas,proto3" json:"resource_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - DataSourceSchemas map[string]*Schema `protobuf:"bytes,3,rep,name=data_source_schemas,json=dataSourceSchemas,proto3" json:"data_source_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Diagnostics []*Diagnostic `protobuf:"bytes,4,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` - ProviderMeta *Schema `protobuf:"bytes,5,opt,name=provider_meta,json=providerMeta,proto3" json:"provider_meta,omitempty"` - ServerCapabilities *GetProviderSchema_ServerCapabilities `protobuf:"bytes,6,opt,name=server_capabilities,json=serverCapabilities,proto3" json:"server_capabilities,omitempty"` + ServerCapabilities *ServerCapabilities `protobuf:"bytes,1,opt,name=server_capabilities,json=serverCapabilities,proto3" json:"server_capabilities,omitempty"` + Diagnostics []*Diagnostic `protobuf:"bytes,2,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` + DataSources []*GetMetadata_DataSourceMetadata `protobuf:"bytes,3,rep,name=data_sources,json=dataSources,proto3" json:"data_sources,omitempty"` + Resources []*GetMetadata_ResourceMetadata `protobuf:"bytes,4,rep,name=resources,proto3" json:"resources,omitempty"` } -func (x *GetProviderSchema_Response) Reset() { - *x = GetProviderSchema_Response{} +func (x *GetMetadata_Response) Reset() { + *x = GetMetadata_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[26] + mi := &file_tfplugin6_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProviderSchema_Response) String() string { +func (x *GetMetadata_Response) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProviderSchema_Response) ProtoMessage() {} +func (*GetMetadata_Response) ProtoMessage() {} -func (x *GetProviderSchema_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[26] +func (x *GetMetadata_Response) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin6_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1620,84 +1725,201 @@ func (x *GetProviderSchema_Response) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProviderSchema_Response.ProtoReflect.Descriptor instead. -func (*GetProviderSchema_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{6, 1} +// Deprecated: Use GetMetadata_Response.ProtoReflect.Descriptor instead. +func (*GetMetadata_Response) Descriptor() ([]byte, []int) { + return file_tfplugin6_proto_rawDescGZIP(), []int{7, 1} } -func (x *GetProviderSchema_Response) GetProvider() *Schema { +func (x *GetMetadata_Response) GetServerCapabilities() *ServerCapabilities { if x != nil { - return x.Provider + return x.ServerCapabilities } return nil } -func (x *GetProviderSchema_Response) GetResourceSchemas() map[string]*Schema { +func (x *GetMetadata_Response) GetDiagnostics() []*Diagnostic { if x != nil { - return x.ResourceSchemas + return x.Diagnostics } return nil } -func (x *GetProviderSchema_Response) GetDataSourceSchemas() map[string]*Schema { +func (x *GetMetadata_Response) GetDataSources() []*GetMetadata_DataSourceMetadata { if x != nil { - return x.DataSourceSchemas + return x.DataSources } return nil } -func (x *GetProviderSchema_Response) GetDiagnostics() []*Diagnostic { +func (x *GetMetadata_Response) GetResources() []*GetMetadata_ResourceMetadata { if x != nil { - return x.Diagnostics + return x.Resources } return nil } -func (x *GetProviderSchema_Response) GetProviderMeta() *Schema { +type GetMetadata_DataSourceMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TypeName string `protobuf:"bytes,1,opt,name=type_name,json=typeName,proto3" json:"type_name,omitempty"` +} + +func (x *GetMetadata_DataSourceMetadata) Reset() { + *x = GetMetadata_DataSourceMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin6_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetadata_DataSourceMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetadata_DataSourceMetadata) ProtoMessage() {} + +func (x *GetMetadata_DataSourceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin6_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetadata_DataSourceMetadata.ProtoReflect.Descriptor instead. +func (*GetMetadata_DataSourceMetadata) Descriptor() ([]byte, []int) { + return file_tfplugin6_proto_rawDescGZIP(), []int{7, 2} +} + +func (x *GetMetadata_DataSourceMetadata) GetTypeName() string { if x != nil { - return x.ProviderMeta + return x.TypeName } - return nil + return "" +} + +type GetMetadata_ResourceMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TypeName string `protobuf:"bytes,1,opt,name=type_name,json=typeName,proto3" json:"type_name,omitempty"` +} + +func (x *GetMetadata_ResourceMetadata) Reset() { + *x = GetMetadata_ResourceMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin6_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetadata_ResourceMetadata) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *GetProviderSchema_Response) GetServerCapabilities() *GetProviderSchema_ServerCapabilities { +func (*GetMetadata_ResourceMetadata) ProtoMessage() {} + +func (x *GetMetadata_ResourceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin6_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetadata_ResourceMetadata.ProtoReflect.Descriptor instead. +func (*GetMetadata_ResourceMetadata) Descriptor() ([]byte, []int) { + return file_tfplugin6_proto_rawDescGZIP(), []int{7, 3} +} + +func (x *GetMetadata_ResourceMetadata) GetTypeName() string { if x != nil { - return x.ServerCapabilities + return x.TypeName } - return nil + return "" } -// ServerCapabilities allows providers to communicate extra information -// regarding supported protocol features. This is used to indicate -// availability of certain forward-compatible changes which may be optional -// in a major protocol version, but cannot be tested for directly. -type GetProviderSchema_ServerCapabilities struct { +type GetProviderSchema_Request struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields +} - // The plan_destroy capability signals that a provider expects a call - // to PlanResourceChange when a resource is going to be destroyed. - PlanDestroy bool `protobuf:"varint,1,opt,name=plan_destroy,json=planDestroy,proto3" json:"plan_destroy,omitempty"` +func (x *GetProviderSchema_Request) Reset() { + *x = GetProviderSchema_Request{} + if protoimpl.UnsafeEnabled { + mi := &file_tfplugin6_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetProviderSchema_Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetProviderSchema_Request) ProtoMessage() {} + +func (x *GetProviderSchema_Request) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin6_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (x *GetProviderSchema_ServerCapabilities) Reset() { - *x = GetProviderSchema_ServerCapabilities{} +// Deprecated: Use GetProviderSchema_Request.ProtoReflect.Descriptor instead. +func (*GetProviderSchema_Request) Descriptor() ([]byte, []int) { + return file_tfplugin6_proto_rawDescGZIP(), []int{8, 0} +} + +type GetProviderSchema_Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provider *Schema `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` + ResourceSchemas map[string]*Schema `protobuf:"bytes,2,rep,name=resource_schemas,json=resourceSchemas,proto3" json:"resource_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + DataSourceSchemas map[string]*Schema `protobuf:"bytes,3,rep,name=data_source_schemas,json=dataSourceSchemas,proto3" json:"data_source_schemas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Diagnostics []*Diagnostic `protobuf:"bytes,4,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` + ProviderMeta *Schema `protobuf:"bytes,5,opt,name=provider_meta,json=providerMeta,proto3" json:"provider_meta,omitempty"` + ServerCapabilities *ServerCapabilities `protobuf:"bytes,6,opt,name=server_capabilities,json=serverCapabilities,proto3" json:"server_capabilities,omitempty"` +} + +func (x *GetProviderSchema_Response) Reset() { + *x = GetProviderSchema_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[27] + mi := &file_tfplugin6_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProviderSchema_ServerCapabilities) String() string { +func (x *GetProviderSchema_Response) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProviderSchema_ServerCapabilities) ProtoMessage() {} +func (*GetProviderSchema_Response) ProtoMessage() {} -func (x *GetProviderSchema_ServerCapabilities) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[27] +func (x *GetProviderSchema_Response) ProtoReflect() protoreflect.Message { + mi := &file_tfplugin6_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1708,16 +1930,51 @@ func (x *GetProviderSchema_ServerCapabilities) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use GetProviderSchema_ServerCapabilities.ProtoReflect.Descriptor instead. -func (*GetProviderSchema_ServerCapabilities) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{6, 2} +// Deprecated: Use GetProviderSchema_Response.ProtoReflect.Descriptor instead. +func (*GetProviderSchema_Response) Descriptor() ([]byte, []int) { + return file_tfplugin6_proto_rawDescGZIP(), []int{8, 1} } -func (x *GetProviderSchema_ServerCapabilities) GetPlanDestroy() bool { +func (x *GetProviderSchema_Response) GetProvider() *Schema { if x != nil { - return x.PlanDestroy + return x.Provider } - return false + return nil +} + +func (x *GetProviderSchema_Response) GetResourceSchemas() map[string]*Schema { + if x != nil { + return x.ResourceSchemas + } + return nil +} + +func (x *GetProviderSchema_Response) GetDataSourceSchemas() map[string]*Schema { + if x != nil { + return x.DataSourceSchemas + } + return nil +} + +func (x *GetProviderSchema_Response) GetDiagnostics() []*Diagnostic { + if x != nil { + return x.Diagnostics + } + return nil +} + +func (x *GetProviderSchema_Response) GetProviderMeta() *Schema { + if x != nil { + return x.ProviderMeta + } + return nil +} + +func (x *GetProviderSchema_Response) GetServerCapabilities() *ServerCapabilities { + if x != nil { + return x.ServerCapabilities + } + return nil } type ValidateProviderConfig_Request struct { @@ -1731,7 +1988,7 @@ type ValidateProviderConfig_Request struct { func (x *ValidateProviderConfig_Request) Reset() { *x = ValidateProviderConfig_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[30] + mi := &file_tfplugin6_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1744,7 +2001,7 @@ func (x *ValidateProviderConfig_Request) String() string { func (*ValidateProviderConfig_Request) ProtoMessage() {} func (x *ValidateProviderConfig_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[30] + mi := &file_tfplugin6_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1757,7 +2014,7 @@ func (x *ValidateProviderConfig_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateProviderConfig_Request.ProtoReflect.Descriptor instead. func (*ValidateProviderConfig_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{7, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{9, 0} } func (x *ValidateProviderConfig_Request) GetConfig() *DynamicValue { @@ -1778,7 +2035,7 @@ type ValidateProviderConfig_Response struct { func (x *ValidateProviderConfig_Response) Reset() { *x = ValidateProviderConfig_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[31] + mi := &file_tfplugin6_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1791,7 +2048,7 @@ func (x *ValidateProviderConfig_Response) String() string { func (*ValidateProviderConfig_Response) ProtoMessage() {} func (x *ValidateProviderConfig_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[31] + mi := &file_tfplugin6_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1804,7 +2061,7 @@ func (x *ValidateProviderConfig_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateProviderConfig_Response.ProtoReflect.Descriptor instead. func (*ValidateProviderConfig_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{7, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{9, 1} } func (x *ValidateProviderConfig_Response) GetDiagnostics() []*Diagnostic { @@ -1842,7 +2099,7 @@ type UpgradeResourceState_Request struct { func (x *UpgradeResourceState_Request) Reset() { *x = UpgradeResourceState_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[32] + mi := &file_tfplugin6_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1855,7 +2112,7 @@ func (x *UpgradeResourceState_Request) String() string { func (*UpgradeResourceState_Request) ProtoMessage() {} func (x *UpgradeResourceState_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[32] + mi := &file_tfplugin6_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1868,7 +2125,7 @@ func (x *UpgradeResourceState_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeResourceState_Request.ProtoReflect.Descriptor instead. func (*UpgradeResourceState_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{8, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{10, 0} } func (x *UpgradeResourceState_Request) GetTypeName() string { @@ -1910,7 +2167,7 @@ type UpgradeResourceState_Response struct { func (x *UpgradeResourceState_Response) Reset() { *x = UpgradeResourceState_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[33] + mi := &file_tfplugin6_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1923,7 +2180,7 @@ func (x *UpgradeResourceState_Response) String() string { func (*UpgradeResourceState_Response) ProtoMessage() {} func (x *UpgradeResourceState_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[33] + mi := &file_tfplugin6_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1936,7 +2193,7 @@ func (x *UpgradeResourceState_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeResourceState_Response.ProtoReflect.Descriptor instead. func (*UpgradeResourceState_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{8, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{10, 1} } func (x *UpgradeResourceState_Response) GetUpgradedState() *DynamicValue { @@ -1965,7 +2222,7 @@ type ValidateResourceConfig_Request struct { func (x *ValidateResourceConfig_Request) Reset() { *x = ValidateResourceConfig_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[34] + mi := &file_tfplugin6_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1978,7 +2235,7 @@ func (x *ValidateResourceConfig_Request) String() string { func (*ValidateResourceConfig_Request) ProtoMessage() {} func (x *ValidateResourceConfig_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[34] + mi := &file_tfplugin6_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1991,7 +2248,7 @@ func (x *ValidateResourceConfig_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateResourceConfig_Request.ProtoReflect.Descriptor instead. func (*ValidateResourceConfig_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{9, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{11, 0} } func (x *ValidateResourceConfig_Request) GetTypeName() string { @@ -2019,7 +2276,7 @@ type ValidateResourceConfig_Response struct { func (x *ValidateResourceConfig_Response) Reset() { *x = ValidateResourceConfig_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[35] + mi := &file_tfplugin6_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2032,7 +2289,7 @@ func (x *ValidateResourceConfig_Response) String() string { func (*ValidateResourceConfig_Response) ProtoMessage() {} func (x *ValidateResourceConfig_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[35] + mi := &file_tfplugin6_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2045,7 +2302,7 @@ func (x *ValidateResourceConfig_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateResourceConfig_Response.ProtoReflect.Descriptor instead. func (*ValidateResourceConfig_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{9, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{11, 1} } func (x *ValidateResourceConfig_Response) GetDiagnostics() []*Diagnostic { @@ -2067,7 +2324,7 @@ type ValidateDataResourceConfig_Request struct { func (x *ValidateDataResourceConfig_Request) Reset() { *x = ValidateDataResourceConfig_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[36] + mi := &file_tfplugin6_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2080,7 +2337,7 @@ func (x *ValidateDataResourceConfig_Request) String() string { func (*ValidateDataResourceConfig_Request) ProtoMessage() {} func (x *ValidateDataResourceConfig_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[36] + mi := &file_tfplugin6_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2093,7 +2350,7 @@ func (x *ValidateDataResourceConfig_Request) ProtoReflect() protoreflect.Message // Deprecated: Use ValidateDataResourceConfig_Request.ProtoReflect.Descriptor instead. func (*ValidateDataResourceConfig_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{10, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{12, 0} } func (x *ValidateDataResourceConfig_Request) GetTypeName() string { @@ -2121,7 +2378,7 @@ type ValidateDataResourceConfig_Response struct { func (x *ValidateDataResourceConfig_Response) Reset() { *x = ValidateDataResourceConfig_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[37] + mi := &file_tfplugin6_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2134,7 +2391,7 @@ func (x *ValidateDataResourceConfig_Response) String() string { func (*ValidateDataResourceConfig_Response) ProtoMessage() {} func (x *ValidateDataResourceConfig_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[37] + mi := &file_tfplugin6_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2147,7 +2404,7 @@ func (x *ValidateDataResourceConfig_Response) ProtoReflect() protoreflect.Messag // Deprecated: Use ValidateDataResourceConfig_Response.ProtoReflect.Descriptor instead. func (*ValidateDataResourceConfig_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{10, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{12, 1} } func (x *ValidateDataResourceConfig_Response) GetDiagnostics() []*Diagnostic { @@ -2169,7 +2426,7 @@ type ConfigureProvider_Request struct { func (x *ConfigureProvider_Request) Reset() { *x = ConfigureProvider_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[38] + mi := &file_tfplugin6_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2182,7 +2439,7 @@ func (x *ConfigureProvider_Request) String() string { func (*ConfigureProvider_Request) ProtoMessage() {} func (x *ConfigureProvider_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[38] + mi := &file_tfplugin6_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2195,7 +2452,7 @@ func (x *ConfigureProvider_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigureProvider_Request.ProtoReflect.Descriptor instead. func (*ConfigureProvider_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{11, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{13, 0} } func (x *ConfigureProvider_Request) GetTerraformVersion() string { @@ -2223,7 +2480,7 @@ type ConfigureProvider_Response struct { func (x *ConfigureProvider_Response) Reset() { *x = ConfigureProvider_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[39] + mi := &file_tfplugin6_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2236,7 +2493,7 @@ func (x *ConfigureProvider_Response) String() string { func (*ConfigureProvider_Response) ProtoMessage() {} func (x *ConfigureProvider_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[39] + mi := &file_tfplugin6_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2249,7 +2506,7 @@ func (x *ConfigureProvider_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigureProvider_Response.ProtoReflect.Descriptor instead. func (*ConfigureProvider_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{11, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{13, 1} } func (x *ConfigureProvider_Response) GetDiagnostics() []*Diagnostic { @@ -2281,7 +2538,7 @@ type ReadResource_Request struct { func (x *ReadResource_Request) Reset() { *x = ReadResource_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[40] + mi := &file_tfplugin6_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2294,7 +2551,7 @@ func (x *ReadResource_Request) String() string { func (*ReadResource_Request) ProtoMessage() {} func (x *ReadResource_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[40] + mi := &file_tfplugin6_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2307,7 +2564,7 @@ func (x *ReadResource_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadResource_Request.ProtoReflect.Descriptor instead. func (*ReadResource_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{12, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{14, 0} } func (x *ReadResource_Request) GetTypeName() string { @@ -2351,7 +2608,7 @@ type ReadResource_Response struct { func (x *ReadResource_Response) Reset() { *x = ReadResource_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[41] + mi := &file_tfplugin6_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2364,7 +2621,7 @@ func (x *ReadResource_Response) String() string { func (*ReadResource_Response) ProtoMessage() {} func (x *ReadResource_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[41] + mi := &file_tfplugin6_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2377,7 +2634,7 @@ func (x *ReadResource_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadResource_Response.ProtoReflect.Descriptor instead. func (*ReadResource_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{12, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{14, 1} } func (x *ReadResource_Response) GetNewState() *DynamicValue { @@ -2417,7 +2674,7 @@ type PlanResourceChange_Request struct { func (x *PlanResourceChange_Request) Reset() { *x = PlanResourceChange_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[42] + mi := &file_tfplugin6_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2430,7 +2687,7 @@ func (x *PlanResourceChange_Request) String() string { func (*PlanResourceChange_Request) ProtoMessage() {} func (x *PlanResourceChange_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[42] + mi := &file_tfplugin6_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2443,7 +2700,7 @@ func (x *PlanResourceChange_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use PlanResourceChange_Request.ProtoReflect.Descriptor instead. func (*PlanResourceChange_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{13, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{15, 0} } func (x *PlanResourceChange_Request) GetTypeName() string { @@ -2505,16 +2762,16 @@ type PlanResourceChange_Response struct { // specific details of the legacy SDK type system, and are not a general // mechanism to avoid proper type handling in providers. // - // ==== DO NOT USE THIS ==== - // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== - // ==== DO NOT USE THIS ==== + // ==== DO NOT USE THIS ==== + // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== + // ==== DO NOT USE THIS ==== LegacyTypeSystem bool `protobuf:"varint,5,opt,name=legacy_type_system,json=legacyTypeSystem,proto3" json:"legacy_type_system,omitempty"` } func (x *PlanResourceChange_Response) Reset() { *x = PlanResourceChange_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[43] + mi := &file_tfplugin6_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2527,7 +2784,7 @@ func (x *PlanResourceChange_Response) String() string { func (*PlanResourceChange_Response) ProtoMessage() {} func (x *PlanResourceChange_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[43] + mi := &file_tfplugin6_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2540,7 +2797,7 @@ func (x *PlanResourceChange_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use PlanResourceChange_Response.ProtoReflect.Descriptor instead. func (*PlanResourceChange_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{13, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{15, 1} } func (x *PlanResourceChange_Response) GetPlannedState() *DynamicValue { @@ -2594,7 +2851,7 @@ type ApplyResourceChange_Request struct { func (x *ApplyResourceChange_Request) Reset() { *x = ApplyResourceChange_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[44] + mi := &file_tfplugin6_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2607,7 +2864,7 @@ func (x *ApplyResourceChange_Request) String() string { func (*ApplyResourceChange_Request) ProtoMessage() {} func (x *ApplyResourceChange_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[44] + mi := &file_tfplugin6_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2620,7 +2877,7 @@ func (x *ApplyResourceChange_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyResourceChange_Request.ProtoReflect.Descriptor instead. func (*ApplyResourceChange_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{14, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{16, 0} } func (x *ApplyResourceChange_Request) GetTypeName() string { @@ -2681,16 +2938,16 @@ type ApplyResourceChange_Response struct { // specific details of the legacy SDK type system, and are not a general // mechanism to avoid proper type handling in providers. // - // ==== DO NOT USE THIS ==== - // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== - // ==== DO NOT USE THIS ==== + // ==== DO NOT USE THIS ==== + // ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ==== + // ==== DO NOT USE THIS ==== LegacyTypeSystem bool `protobuf:"varint,4,opt,name=legacy_type_system,json=legacyTypeSystem,proto3" json:"legacy_type_system,omitempty"` } func (x *ApplyResourceChange_Response) Reset() { *x = ApplyResourceChange_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[45] + mi := &file_tfplugin6_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2703,7 +2960,7 @@ func (x *ApplyResourceChange_Response) String() string { func (*ApplyResourceChange_Response) ProtoMessage() {} func (x *ApplyResourceChange_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[45] + mi := &file_tfplugin6_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2716,7 +2973,7 @@ func (x *ApplyResourceChange_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyResourceChange_Response.ProtoReflect.Descriptor instead. func (*ApplyResourceChange_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{14, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{16, 1} } func (x *ApplyResourceChange_Response) GetNewState() *DynamicValue { @@ -2759,7 +3016,7 @@ type ImportResourceState_Request struct { func (x *ImportResourceState_Request) Reset() { *x = ImportResourceState_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[46] + mi := &file_tfplugin6_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2772,7 +3029,7 @@ func (x *ImportResourceState_Request) String() string { func (*ImportResourceState_Request) ProtoMessage() {} func (x *ImportResourceState_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[46] + mi := &file_tfplugin6_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2785,7 +3042,7 @@ func (x *ImportResourceState_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportResourceState_Request.ProtoReflect.Descriptor instead. func (*ImportResourceState_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{15, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{17, 0} } func (x *ImportResourceState_Request) GetTypeName() string { @@ -2815,7 +3072,7 @@ type ImportResourceState_ImportedResource struct { func (x *ImportResourceState_ImportedResource) Reset() { *x = ImportResourceState_ImportedResource{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[47] + mi := &file_tfplugin6_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2828,7 +3085,7 @@ func (x *ImportResourceState_ImportedResource) String() string { func (*ImportResourceState_ImportedResource) ProtoMessage() {} func (x *ImportResourceState_ImportedResource) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[47] + mi := &file_tfplugin6_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2841,7 +3098,7 @@ func (x *ImportResourceState_ImportedResource) ProtoReflect() protoreflect.Messa // Deprecated: Use ImportResourceState_ImportedResource.ProtoReflect.Descriptor instead. func (*ImportResourceState_ImportedResource) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{15, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{17, 1} } func (x *ImportResourceState_ImportedResource) GetTypeName() string { @@ -2877,7 +3134,7 @@ type ImportResourceState_Response struct { func (x *ImportResourceState_Response) Reset() { *x = ImportResourceState_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[48] + mi := &file_tfplugin6_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2890,7 +3147,7 @@ func (x *ImportResourceState_Response) String() string { func (*ImportResourceState_Response) ProtoMessage() {} func (x *ImportResourceState_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[48] + mi := &file_tfplugin6_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2903,7 +3160,7 @@ func (x *ImportResourceState_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportResourceState_Response.ProtoReflect.Descriptor instead. func (*ImportResourceState_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{15, 2} + return file_tfplugin6_proto_rawDescGZIP(), []int{17, 2} } func (x *ImportResourceState_Response) GetImportedResources() []*ImportResourceState_ImportedResource { @@ -2933,7 +3190,7 @@ type ReadDataSource_Request struct { func (x *ReadDataSource_Request) Reset() { *x = ReadDataSource_Request{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[49] + mi := &file_tfplugin6_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2946,7 +3203,7 @@ func (x *ReadDataSource_Request) String() string { func (*ReadDataSource_Request) ProtoMessage() {} func (x *ReadDataSource_Request) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[49] + mi := &file_tfplugin6_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2959,7 +3216,7 @@ func (x *ReadDataSource_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadDataSource_Request.ProtoReflect.Descriptor instead. func (*ReadDataSource_Request) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{16, 0} + return file_tfplugin6_proto_rawDescGZIP(), []int{18, 0} } func (x *ReadDataSource_Request) GetTypeName() string { @@ -2995,7 +3252,7 @@ type ReadDataSource_Response struct { func (x *ReadDataSource_Response) Reset() { *x = ReadDataSource_Response{} if protoimpl.UnsafeEnabled { - mi := &file_tfplugin6_proto_msgTypes[50] + mi := &file_tfplugin6_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3008,7 +3265,7 @@ func (x *ReadDataSource_Response) String() string { func (*ReadDataSource_Response) ProtoMessage() {} func (x *ReadDataSource_Response) ProtoReflect() protoreflect.Message { - mi := &file_tfplugin6_proto_msgTypes[50] + mi := &file_tfplugin6_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3021,7 +3278,7 @@ func (x *ReadDataSource_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadDataSource_Response.ProtoReflect.Descriptor instead. func (*ReadDataSource_Response) Descriptor() ([]byte, []int) { - return file_tfplugin6_proto_rawDescGZIP(), []int{16, 1} + return file_tfplugin6_proto_rawDescGZIP(), []int{18, 1} } func (x *ReadDataSource_Response) GetState() *DynamicValue { @@ -3169,337 +3426,372 @@ var file_tfplugin6_proto_rawDesc = []byte{ 0x74, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x53, - 0x45, 0x54, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x50, 0x10, 0x04, 0x22, 0xeb, 0x05, - 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x91, - 0x05, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x10, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x73, 0x12, 0x6c, 0x0a, 0x13, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, - 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x64, 0x61, - 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12, - 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x04, + 0x45, 0x54, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x50, 0x10, 0x04, 0x22, 0x78, 0x0a, + 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x64, 0x65, 0x73, 0x74, + 0x72, 0x6f, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x6e, 0x44, + 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x12, 0x3f, 0x0a, 0x1c, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x67, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xa7, 0x03, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0xa8, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4e, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x12, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, + 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, - 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x36, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, - 0x12, 0x60, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x12, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x1a, 0x55, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x16, 0x44, 0x61, 0x74, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, - 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x6e, - 0x5f, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x70, 0x6c, 0x61, 0x6e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x22, 0x99, 0x01, 0x0a, 0x16, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x3a, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, - 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, - 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x67, 0x72, - 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x1a, 0x72, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x36, 0x2e, 0x52, 0x61, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x61, 0x77, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x1a, 0x83, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3e, 0x0a, 0x0e, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x0d, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x16, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x57, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, - 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, - 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, - 0x69, 0x63, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x1a, 0x57, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x4c, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x31, 0x0a, + 0x12, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x1a, 0x2f, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0xa0, 0x05, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0xff, 0x04, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2d, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x65, + 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12, 0x6c, 0x0a, 0x13, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x11, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, + 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x36, 0x0a, 0x0d, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x4d, 0x65, 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x1a, 0x55, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x16, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x36, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x99, 0x01, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, + 0x3a, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, - 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, - 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x22, 0xc1, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x1a, 0x67, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, - 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, - 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, - 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, - 0x74, 0x69, 0x63, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0xbc, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, - 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, - 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x93, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x34, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, - 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6e, - 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x22, 0xf2, 0x04, 0x0a, 0x12, 0x50, - 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x1a, 0xbb, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, - 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x4e, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, - 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, - 0x9d, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0d, - 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x22, 0x90, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x72, 0x0a, 0x07, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x72, + 0x61, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x52, 0x61, 0x77, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x61, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x83, 0x01, + 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0e, 0x75, 0x70, + 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x75, 0x70, 0x67, + 0x72, 0x61, 0x64, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, + 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x57, + 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, + 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, + 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xba, 0x01, 0x0a, + 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x57, 0x0a, 0x07, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, - 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x6c, - 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x10, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, - 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0f, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, - 0x27, 0x0a, 0x0f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, - 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, - 0x65, 0x67, 0x61, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, - 0x92, 0x04, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0xb6, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x38, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, - 0x70, 0x72, 0x69, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x6c, - 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x6e, - 0x6e, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, + 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xc1, 0x01, 0x0a, 0x11, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x1a, + 0x67, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x65, + 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x43, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, + 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0xe3, 0x02, + 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0xbc, + 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, + 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, + 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x93, 0x01, + 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x6e, 0x65, + 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, + 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x22, 0xf2, 0x04, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0xbb, 0x02, 0x0a, 0x07, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6c, 0x61, - 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, + 0x12, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, - 0x1a, 0xc1, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, - 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, - 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, - 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x22, 0xed, 0x02, 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x36, 0x0a, 0x07, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x1a, 0x78, 0x0a, 0x10, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, + 0x75, 0x65, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x4e, 0x65, 0x77, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, - 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x1a, 0xa3, - 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x12, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x36, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x11, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x64, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, - 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, - 0x74, 0x69, 0x63, 0x73, 0x22, 0x9c, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x95, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, - 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, - 0x72, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, + 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x72, + 0x69, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x9d, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, + 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6c, 0x61, 0x6e, + 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0e, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0x92, 0x04, 0x0a, 0x13, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x1a, 0xb6, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x70, 0x72, 0x69, + 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, + 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, - 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, - 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, - 0x69, 0x63, 0x73, 0x2a, 0x25, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4b, 0x69, 0x6e, - 0x64, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, - 0x4d, 0x41, 0x52, 0x4b, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x32, 0xcc, 0x09, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x16, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x16, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1a, 0x56, + 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x6c, 0x61, + 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, + 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0xc1, 0x01, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, + 0x2c, 0x0a, 0x12, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6c, 0x65, 0x67, + 0x61, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x22, 0xed, 0x02, + 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x36, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x78, 0x0a, + 0x10, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x1a, 0xa3, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x12, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x49, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x11, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, + 0x52, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x9c, 0x02, + 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x1a, 0x95, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x0d, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x79, + 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x72, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, + 0x0b, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2a, 0x25, 0x0a, 0x0a, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, + 0x41, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x41, 0x52, 0x4b, 0x44, 0x4f, 0x57, + 0x4e, 0x10, 0x01, 0x32, 0x9c, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x12, 0x4e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x1e, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x36, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x66, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x74, + 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x16, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x2d, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x2e, 0x74, 0x66, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x14, 0x55, 0x70, 0x67, 0x72, - 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x55, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x66, 0x70, 0x6c, + 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x69, 0x0a, 0x14, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x36, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x36, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x6e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x25, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x11, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x24, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x36, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, + 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, + 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x20, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x52, 0x65, 0x61, 0x64, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x63, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x25, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x36, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x36, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, - 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, - 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x74, - 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, - 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, - 0x0e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x21, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x52, 0x65, 0x61, 0x64, - 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x36, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, - 0x70, 0x2f, 0x74, 0x65, 0x72, 0x72, 0x61, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, 0x66, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x76, 0x36, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x36, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x36, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, + 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x36, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x66, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x51, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, + 0x1f, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x74, 0x6f, 0x70, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x20, 0x2e, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x2e, 0x53, 0x74, 0x6f, + 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x74, 0x65, 0x72, 0x72, 0x61, + 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x67, 0x6f, 0x2f, 0x74, + 0x66, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x76, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2f, 0x74, 0x66, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x36, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -3515,7 +3807,7 @@ func file_tfplugin6_proto_rawDescGZIP() []byte { } var file_tfplugin6_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_tfplugin6_proto_msgTypes = make([]protoimpl.MessageInfo, 51) +var file_tfplugin6_proto_msgTypes = make([]protoimpl.MessageInfo, 56) var file_tfplugin6_proto_goTypes = []interface{}{ (StringKind)(0), // 0: tfplugin6.StringKind (Diagnostic_Severity)(0), // 1: tfplugin6.Diagnostic.Severity @@ -3527,139 +3819,150 @@ var file_tfplugin6_proto_goTypes = []interface{}{ (*StopProvider)(nil), // 7: tfplugin6.StopProvider (*RawState)(nil), // 8: tfplugin6.RawState (*Schema)(nil), // 9: tfplugin6.Schema - (*GetProviderSchema)(nil), // 10: tfplugin6.GetProviderSchema - (*ValidateProviderConfig)(nil), // 11: tfplugin6.ValidateProviderConfig - (*UpgradeResourceState)(nil), // 12: tfplugin6.UpgradeResourceState - (*ValidateResourceConfig)(nil), // 13: tfplugin6.ValidateResourceConfig - (*ValidateDataResourceConfig)(nil), // 14: tfplugin6.ValidateDataResourceConfig - (*ConfigureProvider)(nil), // 15: tfplugin6.ConfigureProvider - (*ReadResource)(nil), // 16: tfplugin6.ReadResource - (*PlanResourceChange)(nil), // 17: tfplugin6.PlanResourceChange - (*ApplyResourceChange)(nil), // 18: tfplugin6.ApplyResourceChange - (*ImportResourceState)(nil), // 19: tfplugin6.ImportResourceState - (*ReadDataSource)(nil), // 20: tfplugin6.ReadDataSource - (*AttributePath_Step)(nil), // 21: tfplugin6.AttributePath.Step - (*StopProvider_Request)(nil), // 22: tfplugin6.StopProvider.Request - (*StopProvider_Response)(nil), // 23: tfplugin6.StopProvider.Response - nil, // 24: tfplugin6.RawState.FlatmapEntry - (*Schema_Block)(nil), // 25: tfplugin6.Schema.Block - (*Schema_Attribute)(nil), // 26: tfplugin6.Schema.Attribute - (*Schema_NestedBlock)(nil), // 27: tfplugin6.Schema.NestedBlock - (*Schema_Object)(nil), // 28: tfplugin6.Schema.Object - (*GetProviderSchema_Request)(nil), // 29: tfplugin6.GetProviderSchema.Request - (*GetProviderSchema_Response)(nil), // 30: tfplugin6.GetProviderSchema.Response - (*GetProviderSchema_ServerCapabilities)(nil), // 31: tfplugin6.GetProviderSchema.ServerCapabilities - nil, // 32: tfplugin6.GetProviderSchema.Response.ResourceSchemasEntry - nil, // 33: tfplugin6.GetProviderSchema.Response.DataSourceSchemasEntry - (*ValidateProviderConfig_Request)(nil), // 34: tfplugin6.ValidateProviderConfig.Request - (*ValidateProviderConfig_Response)(nil), // 35: tfplugin6.ValidateProviderConfig.Response - (*UpgradeResourceState_Request)(nil), // 36: tfplugin6.UpgradeResourceState.Request - (*UpgradeResourceState_Response)(nil), // 37: tfplugin6.UpgradeResourceState.Response - (*ValidateResourceConfig_Request)(nil), // 38: tfplugin6.ValidateResourceConfig.Request - (*ValidateResourceConfig_Response)(nil), // 39: tfplugin6.ValidateResourceConfig.Response - (*ValidateDataResourceConfig_Request)(nil), // 40: tfplugin6.ValidateDataResourceConfig.Request - (*ValidateDataResourceConfig_Response)(nil), // 41: tfplugin6.ValidateDataResourceConfig.Response - (*ConfigureProvider_Request)(nil), // 42: tfplugin6.ConfigureProvider.Request - (*ConfigureProvider_Response)(nil), // 43: tfplugin6.ConfigureProvider.Response - (*ReadResource_Request)(nil), // 44: tfplugin6.ReadResource.Request - (*ReadResource_Response)(nil), // 45: tfplugin6.ReadResource.Response - (*PlanResourceChange_Request)(nil), // 46: tfplugin6.PlanResourceChange.Request - (*PlanResourceChange_Response)(nil), // 47: tfplugin6.PlanResourceChange.Response - (*ApplyResourceChange_Request)(nil), // 48: tfplugin6.ApplyResourceChange.Request - (*ApplyResourceChange_Response)(nil), // 49: tfplugin6.ApplyResourceChange.Response - (*ImportResourceState_Request)(nil), // 50: tfplugin6.ImportResourceState.Request - (*ImportResourceState_ImportedResource)(nil), // 51: tfplugin6.ImportResourceState.ImportedResource - (*ImportResourceState_Response)(nil), // 52: tfplugin6.ImportResourceState.Response - (*ReadDataSource_Request)(nil), // 53: tfplugin6.ReadDataSource.Request - (*ReadDataSource_Response)(nil), // 54: tfplugin6.ReadDataSource.Response + (*ServerCapabilities)(nil), // 10: tfplugin6.ServerCapabilities + (*GetMetadata)(nil), // 11: tfplugin6.GetMetadata + (*GetProviderSchema)(nil), // 12: tfplugin6.GetProviderSchema + (*ValidateProviderConfig)(nil), // 13: tfplugin6.ValidateProviderConfig + (*UpgradeResourceState)(nil), // 14: tfplugin6.UpgradeResourceState + (*ValidateResourceConfig)(nil), // 15: tfplugin6.ValidateResourceConfig + (*ValidateDataResourceConfig)(nil), // 16: tfplugin6.ValidateDataResourceConfig + (*ConfigureProvider)(nil), // 17: tfplugin6.ConfigureProvider + (*ReadResource)(nil), // 18: tfplugin6.ReadResource + (*PlanResourceChange)(nil), // 19: tfplugin6.PlanResourceChange + (*ApplyResourceChange)(nil), // 20: tfplugin6.ApplyResourceChange + (*ImportResourceState)(nil), // 21: tfplugin6.ImportResourceState + (*ReadDataSource)(nil), // 22: tfplugin6.ReadDataSource + (*AttributePath_Step)(nil), // 23: tfplugin6.AttributePath.Step + (*StopProvider_Request)(nil), // 24: tfplugin6.StopProvider.Request + (*StopProvider_Response)(nil), // 25: tfplugin6.StopProvider.Response + nil, // 26: tfplugin6.RawState.FlatmapEntry + (*Schema_Block)(nil), // 27: tfplugin6.Schema.Block + (*Schema_Attribute)(nil), // 28: tfplugin6.Schema.Attribute + (*Schema_NestedBlock)(nil), // 29: tfplugin6.Schema.NestedBlock + (*Schema_Object)(nil), // 30: tfplugin6.Schema.Object + (*GetMetadata_Request)(nil), // 31: tfplugin6.GetMetadata.Request + (*GetMetadata_Response)(nil), // 32: tfplugin6.GetMetadata.Response + (*GetMetadata_DataSourceMetadata)(nil), // 33: tfplugin6.GetMetadata.DataSourceMetadata + (*GetMetadata_ResourceMetadata)(nil), // 34: tfplugin6.GetMetadata.ResourceMetadata + (*GetProviderSchema_Request)(nil), // 35: tfplugin6.GetProviderSchema.Request + (*GetProviderSchema_Response)(nil), // 36: tfplugin6.GetProviderSchema.Response + nil, // 37: tfplugin6.GetProviderSchema.Response.ResourceSchemasEntry + nil, // 38: tfplugin6.GetProviderSchema.Response.DataSourceSchemasEntry + (*ValidateProviderConfig_Request)(nil), // 39: tfplugin6.ValidateProviderConfig.Request + (*ValidateProviderConfig_Response)(nil), // 40: tfplugin6.ValidateProviderConfig.Response + (*UpgradeResourceState_Request)(nil), // 41: tfplugin6.UpgradeResourceState.Request + (*UpgradeResourceState_Response)(nil), // 42: tfplugin6.UpgradeResourceState.Response + (*ValidateResourceConfig_Request)(nil), // 43: tfplugin6.ValidateResourceConfig.Request + (*ValidateResourceConfig_Response)(nil), // 44: tfplugin6.ValidateResourceConfig.Response + (*ValidateDataResourceConfig_Request)(nil), // 45: tfplugin6.ValidateDataResourceConfig.Request + (*ValidateDataResourceConfig_Response)(nil), // 46: tfplugin6.ValidateDataResourceConfig.Response + (*ConfigureProvider_Request)(nil), // 47: tfplugin6.ConfigureProvider.Request + (*ConfigureProvider_Response)(nil), // 48: tfplugin6.ConfigureProvider.Response + (*ReadResource_Request)(nil), // 49: tfplugin6.ReadResource.Request + (*ReadResource_Response)(nil), // 50: tfplugin6.ReadResource.Response + (*PlanResourceChange_Request)(nil), // 51: tfplugin6.PlanResourceChange.Request + (*PlanResourceChange_Response)(nil), // 52: tfplugin6.PlanResourceChange.Response + (*ApplyResourceChange_Request)(nil), // 53: tfplugin6.ApplyResourceChange.Request + (*ApplyResourceChange_Response)(nil), // 54: tfplugin6.ApplyResourceChange.Response + (*ImportResourceState_Request)(nil), // 55: tfplugin6.ImportResourceState.Request + (*ImportResourceState_ImportedResource)(nil), // 56: tfplugin6.ImportResourceState.ImportedResource + (*ImportResourceState_Response)(nil), // 57: tfplugin6.ImportResourceState.Response + (*ReadDataSource_Request)(nil), // 58: tfplugin6.ReadDataSource.Request + (*ReadDataSource_Response)(nil), // 59: tfplugin6.ReadDataSource.Response } var file_tfplugin6_proto_depIdxs = []int32{ 1, // 0: tfplugin6.Diagnostic.severity:type_name -> tfplugin6.Diagnostic.Severity 6, // 1: tfplugin6.Diagnostic.attribute:type_name -> tfplugin6.AttributePath - 21, // 2: tfplugin6.AttributePath.steps:type_name -> tfplugin6.AttributePath.Step - 24, // 3: tfplugin6.RawState.flatmap:type_name -> tfplugin6.RawState.FlatmapEntry - 25, // 4: tfplugin6.Schema.block:type_name -> tfplugin6.Schema.Block - 26, // 5: tfplugin6.Schema.Block.attributes:type_name -> tfplugin6.Schema.Attribute - 27, // 6: tfplugin6.Schema.Block.block_types:type_name -> tfplugin6.Schema.NestedBlock + 23, // 2: tfplugin6.AttributePath.steps:type_name -> tfplugin6.AttributePath.Step + 26, // 3: tfplugin6.RawState.flatmap:type_name -> tfplugin6.RawState.FlatmapEntry + 27, // 4: tfplugin6.Schema.block:type_name -> tfplugin6.Schema.Block + 28, // 5: tfplugin6.Schema.Block.attributes:type_name -> tfplugin6.Schema.Attribute + 29, // 6: tfplugin6.Schema.Block.block_types:type_name -> tfplugin6.Schema.NestedBlock 0, // 7: tfplugin6.Schema.Block.description_kind:type_name -> tfplugin6.StringKind - 28, // 8: tfplugin6.Schema.Attribute.nested_type:type_name -> tfplugin6.Schema.Object + 30, // 8: tfplugin6.Schema.Attribute.nested_type:type_name -> tfplugin6.Schema.Object 0, // 9: tfplugin6.Schema.Attribute.description_kind:type_name -> tfplugin6.StringKind - 25, // 10: tfplugin6.Schema.NestedBlock.block:type_name -> tfplugin6.Schema.Block + 27, // 10: tfplugin6.Schema.NestedBlock.block:type_name -> tfplugin6.Schema.Block 2, // 11: tfplugin6.Schema.NestedBlock.nesting:type_name -> tfplugin6.Schema.NestedBlock.NestingMode - 26, // 12: tfplugin6.Schema.Object.attributes:type_name -> tfplugin6.Schema.Attribute + 28, // 12: tfplugin6.Schema.Object.attributes:type_name -> tfplugin6.Schema.Attribute 3, // 13: tfplugin6.Schema.Object.nesting:type_name -> tfplugin6.Schema.Object.NestingMode - 9, // 14: tfplugin6.GetProviderSchema.Response.provider:type_name -> tfplugin6.Schema - 32, // 15: tfplugin6.GetProviderSchema.Response.resource_schemas:type_name -> tfplugin6.GetProviderSchema.Response.ResourceSchemasEntry - 33, // 16: tfplugin6.GetProviderSchema.Response.data_source_schemas:type_name -> tfplugin6.GetProviderSchema.Response.DataSourceSchemasEntry - 5, // 17: tfplugin6.GetProviderSchema.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 9, // 18: tfplugin6.GetProviderSchema.Response.provider_meta:type_name -> tfplugin6.Schema - 31, // 19: tfplugin6.GetProviderSchema.Response.server_capabilities:type_name -> tfplugin6.GetProviderSchema.ServerCapabilities - 9, // 20: tfplugin6.GetProviderSchema.Response.ResourceSchemasEntry.value:type_name -> tfplugin6.Schema - 9, // 21: tfplugin6.GetProviderSchema.Response.DataSourceSchemasEntry.value:type_name -> tfplugin6.Schema - 4, // 22: tfplugin6.ValidateProviderConfig.Request.config:type_name -> tfplugin6.DynamicValue - 5, // 23: tfplugin6.ValidateProviderConfig.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 8, // 24: tfplugin6.UpgradeResourceState.Request.raw_state:type_name -> tfplugin6.RawState - 4, // 25: tfplugin6.UpgradeResourceState.Response.upgraded_state:type_name -> tfplugin6.DynamicValue - 5, // 26: tfplugin6.UpgradeResourceState.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 4, // 27: tfplugin6.ValidateResourceConfig.Request.config:type_name -> tfplugin6.DynamicValue - 5, // 28: tfplugin6.ValidateResourceConfig.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 4, // 29: tfplugin6.ValidateDataResourceConfig.Request.config:type_name -> tfplugin6.DynamicValue - 5, // 30: tfplugin6.ValidateDataResourceConfig.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 4, // 31: tfplugin6.ConfigureProvider.Request.config:type_name -> tfplugin6.DynamicValue - 5, // 32: tfplugin6.ConfigureProvider.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 4, // 33: tfplugin6.ReadResource.Request.current_state:type_name -> tfplugin6.DynamicValue - 4, // 34: tfplugin6.ReadResource.Request.provider_meta:type_name -> tfplugin6.DynamicValue - 4, // 35: tfplugin6.ReadResource.Response.new_state:type_name -> tfplugin6.DynamicValue - 5, // 36: tfplugin6.ReadResource.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 4, // 37: tfplugin6.PlanResourceChange.Request.prior_state:type_name -> tfplugin6.DynamicValue - 4, // 38: tfplugin6.PlanResourceChange.Request.proposed_new_state:type_name -> tfplugin6.DynamicValue - 4, // 39: tfplugin6.PlanResourceChange.Request.config:type_name -> tfplugin6.DynamicValue - 4, // 40: tfplugin6.PlanResourceChange.Request.provider_meta:type_name -> tfplugin6.DynamicValue - 4, // 41: tfplugin6.PlanResourceChange.Response.planned_state:type_name -> tfplugin6.DynamicValue - 6, // 42: tfplugin6.PlanResourceChange.Response.requires_replace:type_name -> tfplugin6.AttributePath - 5, // 43: tfplugin6.PlanResourceChange.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 4, // 44: tfplugin6.ApplyResourceChange.Request.prior_state:type_name -> tfplugin6.DynamicValue - 4, // 45: tfplugin6.ApplyResourceChange.Request.planned_state:type_name -> tfplugin6.DynamicValue - 4, // 46: tfplugin6.ApplyResourceChange.Request.config:type_name -> tfplugin6.DynamicValue - 4, // 47: tfplugin6.ApplyResourceChange.Request.provider_meta:type_name -> tfplugin6.DynamicValue - 4, // 48: tfplugin6.ApplyResourceChange.Response.new_state:type_name -> tfplugin6.DynamicValue - 5, // 49: tfplugin6.ApplyResourceChange.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 4, // 50: tfplugin6.ImportResourceState.ImportedResource.state:type_name -> tfplugin6.DynamicValue - 51, // 51: tfplugin6.ImportResourceState.Response.imported_resources:type_name -> tfplugin6.ImportResourceState.ImportedResource - 5, // 52: tfplugin6.ImportResourceState.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 4, // 53: tfplugin6.ReadDataSource.Request.config:type_name -> tfplugin6.DynamicValue - 4, // 54: tfplugin6.ReadDataSource.Request.provider_meta:type_name -> tfplugin6.DynamicValue - 4, // 55: tfplugin6.ReadDataSource.Response.state:type_name -> tfplugin6.DynamicValue - 5, // 56: tfplugin6.ReadDataSource.Response.diagnostics:type_name -> tfplugin6.Diagnostic - 29, // 57: tfplugin6.Provider.GetProviderSchema:input_type -> tfplugin6.GetProviderSchema.Request - 34, // 58: tfplugin6.Provider.ValidateProviderConfig:input_type -> tfplugin6.ValidateProviderConfig.Request - 38, // 59: tfplugin6.Provider.ValidateResourceConfig:input_type -> tfplugin6.ValidateResourceConfig.Request - 40, // 60: tfplugin6.Provider.ValidateDataResourceConfig:input_type -> tfplugin6.ValidateDataResourceConfig.Request - 36, // 61: tfplugin6.Provider.UpgradeResourceState:input_type -> tfplugin6.UpgradeResourceState.Request - 42, // 62: tfplugin6.Provider.ConfigureProvider:input_type -> tfplugin6.ConfigureProvider.Request - 44, // 63: tfplugin6.Provider.ReadResource:input_type -> tfplugin6.ReadResource.Request - 46, // 64: tfplugin6.Provider.PlanResourceChange:input_type -> tfplugin6.PlanResourceChange.Request - 48, // 65: tfplugin6.Provider.ApplyResourceChange:input_type -> tfplugin6.ApplyResourceChange.Request - 50, // 66: tfplugin6.Provider.ImportResourceState:input_type -> tfplugin6.ImportResourceState.Request - 53, // 67: tfplugin6.Provider.ReadDataSource:input_type -> tfplugin6.ReadDataSource.Request - 22, // 68: tfplugin6.Provider.StopProvider:input_type -> tfplugin6.StopProvider.Request - 30, // 69: tfplugin6.Provider.GetProviderSchema:output_type -> tfplugin6.GetProviderSchema.Response - 35, // 70: tfplugin6.Provider.ValidateProviderConfig:output_type -> tfplugin6.ValidateProviderConfig.Response - 39, // 71: tfplugin6.Provider.ValidateResourceConfig:output_type -> tfplugin6.ValidateResourceConfig.Response - 41, // 72: tfplugin6.Provider.ValidateDataResourceConfig:output_type -> tfplugin6.ValidateDataResourceConfig.Response - 37, // 73: tfplugin6.Provider.UpgradeResourceState:output_type -> tfplugin6.UpgradeResourceState.Response - 43, // 74: tfplugin6.Provider.ConfigureProvider:output_type -> tfplugin6.ConfigureProvider.Response - 45, // 75: tfplugin6.Provider.ReadResource:output_type -> tfplugin6.ReadResource.Response - 47, // 76: tfplugin6.Provider.PlanResourceChange:output_type -> tfplugin6.PlanResourceChange.Response - 49, // 77: tfplugin6.Provider.ApplyResourceChange:output_type -> tfplugin6.ApplyResourceChange.Response - 52, // 78: tfplugin6.Provider.ImportResourceState:output_type -> tfplugin6.ImportResourceState.Response - 54, // 79: tfplugin6.Provider.ReadDataSource:output_type -> tfplugin6.ReadDataSource.Response - 23, // 80: tfplugin6.Provider.StopProvider:output_type -> tfplugin6.StopProvider.Response - 69, // [69:81] is the sub-list for method output_type - 57, // [57:69] is the sub-list for method input_type - 57, // [57:57] is the sub-list for extension type_name - 57, // [57:57] is the sub-list for extension extendee - 0, // [0:57] is the sub-list for field type_name + 10, // 14: tfplugin6.GetMetadata.Response.server_capabilities:type_name -> tfplugin6.ServerCapabilities + 5, // 15: tfplugin6.GetMetadata.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 33, // 16: tfplugin6.GetMetadata.Response.data_sources:type_name -> tfplugin6.GetMetadata.DataSourceMetadata + 34, // 17: tfplugin6.GetMetadata.Response.resources:type_name -> tfplugin6.GetMetadata.ResourceMetadata + 9, // 18: tfplugin6.GetProviderSchema.Response.provider:type_name -> tfplugin6.Schema + 37, // 19: tfplugin6.GetProviderSchema.Response.resource_schemas:type_name -> tfplugin6.GetProviderSchema.Response.ResourceSchemasEntry + 38, // 20: tfplugin6.GetProviderSchema.Response.data_source_schemas:type_name -> tfplugin6.GetProviderSchema.Response.DataSourceSchemasEntry + 5, // 21: tfplugin6.GetProviderSchema.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 9, // 22: tfplugin6.GetProviderSchema.Response.provider_meta:type_name -> tfplugin6.Schema + 10, // 23: tfplugin6.GetProviderSchema.Response.server_capabilities:type_name -> tfplugin6.ServerCapabilities + 9, // 24: tfplugin6.GetProviderSchema.Response.ResourceSchemasEntry.value:type_name -> tfplugin6.Schema + 9, // 25: tfplugin6.GetProviderSchema.Response.DataSourceSchemasEntry.value:type_name -> tfplugin6.Schema + 4, // 26: tfplugin6.ValidateProviderConfig.Request.config:type_name -> tfplugin6.DynamicValue + 5, // 27: tfplugin6.ValidateProviderConfig.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 8, // 28: tfplugin6.UpgradeResourceState.Request.raw_state:type_name -> tfplugin6.RawState + 4, // 29: tfplugin6.UpgradeResourceState.Response.upgraded_state:type_name -> tfplugin6.DynamicValue + 5, // 30: tfplugin6.UpgradeResourceState.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 4, // 31: tfplugin6.ValidateResourceConfig.Request.config:type_name -> tfplugin6.DynamicValue + 5, // 32: tfplugin6.ValidateResourceConfig.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 4, // 33: tfplugin6.ValidateDataResourceConfig.Request.config:type_name -> tfplugin6.DynamicValue + 5, // 34: tfplugin6.ValidateDataResourceConfig.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 4, // 35: tfplugin6.ConfigureProvider.Request.config:type_name -> tfplugin6.DynamicValue + 5, // 36: tfplugin6.ConfigureProvider.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 4, // 37: tfplugin6.ReadResource.Request.current_state:type_name -> tfplugin6.DynamicValue + 4, // 38: tfplugin6.ReadResource.Request.provider_meta:type_name -> tfplugin6.DynamicValue + 4, // 39: tfplugin6.ReadResource.Response.new_state:type_name -> tfplugin6.DynamicValue + 5, // 40: tfplugin6.ReadResource.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 4, // 41: tfplugin6.PlanResourceChange.Request.prior_state:type_name -> tfplugin6.DynamicValue + 4, // 42: tfplugin6.PlanResourceChange.Request.proposed_new_state:type_name -> tfplugin6.DynamicValue + 4, // 43: tfplugin6.PlanResourceChange.Request.config:type_name -> tfplugin6.DynamicValue + 4, // 44: tfplugin6.PlanResourceChange.Request.provider_meta:type_name -> tfplugin6.DynamicValue + 4, // 45: tfplugin6.PlanResourceChange.Response.planned_state:type_name -> tfplugin6.DynamicValue + 6, // 46: tfplugin6.PlanResourceChange.Response.requires_replace:type_name -> tfplugin6.AttributePath + 5, // 47: tfplugin6.PlanResourceChange.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 4, // 48: tfplugin6.ApplyResourceChange.Request.prior_state:type_name -> tfplugin6.DynamicValue + 4, // 49: tfplugin6.ApplyResourceChange.Request.planned_state:type_name -> tfplugin6.DynamicValue + 4, // 50: tfplugin6.ApplyResourceChange.Request.config:type_name -> tfplugin6.DynamicValue + 4, // 51: tfplugin6.ApplyResourceChange.Request.provider_meta:type_name -> tfplugin6.DynamicValue + 4, // 52: tfplugin6.ApplyResourceChange.Response.new_state:type_name -> tfplugin6.DynamicValue + 5, // 53: tfplugin6.ApplyResourceChange.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 4, // 54: tfplugin6.ImportResourceState.ImportedResource.state:type_name -> tfplugin6.DynamicValue + 56, // 55: tfplugin6.ImportResourceState.Response.imported_resources:type_name -> tfplugin6.ImportResourceState.ImportedResource + 5, // 56: tfplugin6.ImportResourceState.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 4, // 57: tfplugin6.ReadDataSource.Request.config:type_name -> tfplugin6.DynamicValue + 4, // 58: tfplugin6.ReadDataSource.Request.provider_meta:type_name -> tfplugin6.DynamicValue + 4, // 59: tfplugin6.ReadDataSource.Response.state:type_name -> tfplugin6.DynamicValue + 5, // 60: tfplugin6.ReadDataSource.Response.diagnostics:type_name -> tfplugin6.Diagnostic + 31, // 61: tfplugin6.Provider.GetMetadata:input_type -> tfplugin6.GetMetadata.Request + 35, // 62: tfplugin6.Provider.GetProviderSchema:input_type -> tfplugin6.GetProviderSchema.Request + 39, // 63: tfplugin6.Provider.ValidateProviderConfig:input_type -> tfplugin6.ValidateProviderConfig.Request + 43, // 64: tfplugin6.Provider.ValidateResourceConfig:input_type -> tfplugin6.ValidateResourceConfig.Request + 45, // 65: tfplugin6.Provider.ValidateDataResourceConfig:input_type -> tfplugin6.ValidateDataResourceConfig.Request + 41, // 66: tfplugin6.Provider.UpgradeResourceState:input_type -> tfplugin6.UpgradeResourceState.Request + 47, // 67: tfplugin6.Provider.ConfigureProvider:input_type -> tfplugin6.ConfigureProvider.Request + 49, // 68: tfplugin6.Provider.ReadResource:input_type -> tfplugin6.ReadResource.Request + 51, // 69: tfplugin6.Provider.PlanResourceChange:input_type -> tfplugin6.PlanResourceChange.Request + 53, // 70: tfplugin6.Provider.ApplyResourceChange:input_type -> tfplugin6.ApplyResourceChange.Request + 55, // 71: tfplugin6.Provider.ImportResourceState:input_type -> tfplugin6.ImportResourceState.Request + 58, // 72: tfplugin6.Provider.ReadDataSource:input_type -> tfplugin6.ReadDataSource.Request + 24, // 73: tfplugin6.Provider.StopProvider:input_type -> tfplugin6.StopProvider.Request + 32, // 74: tfplugin6.Provider.GetMetadata:output_type -> tfplugin6.GetMetadata.Response + 36, // 75: tfplugin6.Provider.GetProviderSchema:output_type -> tfplugin6.GetProviderSchema.Response + 40, // 76: tfplugin6.Provider.ValidateProviderConfig:output_type -> tfplugin6.ValidateProviderConfig.Response + 44, // 77: tfplugin6.Provider.ValidateResourceConfig:output_type -> tfplugin6.ValidateResourceConfig.Response + 46, // 78: tfplugin6.Provider.ValidateDataResourceConfig:output_type -> tfplugin6.ValidateDataResourceConfig.Response + 42, // 79: tfplugin6.Provider.UpgradeResourceState:output_type -> tfplugin6.UpgradeResourceState.Response + 48, // 80: tfplugin6.Provider.ConfigureProvider:output_type -> tfplugin6.ConfigureProvider.Response + 50, // 81: tfplugin6.Provider.ReadResource:output_type -> tfplugin6.ReadResource.Response + 52, // 82: tfplugin6.Provider.PlanResourceChange:output_type -> tfplugin6.PlanResourceChange.Response + 54, // 83: tfplugin6.Provider.ApplyResourceChange:output_type -> tfplugin6.ApplyResourceChange.Response + 57, // 84: tfplugin6.Provider.ImportResourceState:output_type -> tfplugin6.ImportResourceState.Response + 59, // 85: tfplugin6.Provider.ReadDataSource:output_type -> tfplugin6.ReadDataSource.Response + 25, // 86: tfplugin6.Provider.StopProvider:output_type -> tfplugin6.StopProvider.Response + 74, // [74:87] is the sub-list for method output_type + 61, // [61:74] is the sub-list for method input_type + 61, // [61:61] is the sub-list for extension type_name + 61, // [61:61] is the sub-list for extension extendee + 0, // [0:61] is the sub-list for field type_name } func init() { file_tfplugin6_proto_init() } @@ -3741,7 +4044,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderSchema); i { + switch v := v.(*ServerCapabilities); i { case 0: return &v.state case 1: @@ -3753,7 +4056,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateProviderConfig); i { + switch v := v.(*GetMetadata); i { case 0: return &v.state case 1: @@ -3765,7 +4068,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpgradeResourceState); i { + switch v := v.(*GetProviderSchema); i { case 0: return &v.state case 1: @@ -3777,7 +4080,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateResourceConfig); i { + switch v := v.(*ValidateProviderConfig); i { case 0: return &v.state case 1: @@ -3789,7 +4092,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateDataResourceConfig); i { + switch v := v.(*UpgradeResourceState); i { case 0: return &v.state case 1: @@ -3801,7 +4104,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConfigureProvider); i { + switch v := v.(*ValidateResourceConfig); i { case 0: return &v.state case 1: @@ -3813,7 +4116,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadResource); i { + switch v := v.(*ValidateDataResourceConfig); i { case 0: return &v.state case 1: @@ -3825,7 +4128,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PlanResourceChange); i { + switch v := v.(*ConfigureProvider); i { case 0: return &v.state case 1: @@ -3837,7 +4140,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplyResourceChange); i { + switch v := v.(*ReadResource); i { case 0: return &v.state case 1: @@ -3849,7 +4152,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImportResourceState); i { + switch v := v.(*PlanResourceChange); i { case 0: return &v.state case 1: @@ -3861,7 +4164,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadDataSource); i { + switch v := v.(*ApplyResourceChange); i { case 0: return &v.state case 1: @@ -3873,7 +4176,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttributePath_Step); i { + switch v := v.(*ImportResourceState); i { case 0: return &v.state case 1: @@ -3885,7 +4188,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopProvider_Request); i { + switch v := v.(*ReadDataSource); i { case 0: return &v.state case 1: @@ -3897,7 +4200,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopProvider_Response); i { + switch v := v.(*AttributePath_Step); i { case 0: return &v.state case 1: @@ -3908,8 +4211,8 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema_Block); i { + file_tfplugin6_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopProvider_Request); i { case 0: return &v.state case 1: @@ -3920,8 +4223,8 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema_Attribute); i { + file_tfplugin6_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopProvider_Response); i { case 0: return &v.state case 1: @@ -3933,7 +4236,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema_NestedBlock); i { + switch v := v.(*Schema_Block); i { case 0: return &v.state case 1: @@ -3945,7 +4248,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema_Object); i { + switch v := v.(*Schema_Attribute); i { case 0: return &v.state case 1: @@ -3957,7 +4260,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderSchema_Request); i { + switch v := v.(*Schema_NestedBlock); i { case 0: return &v.state case 1: @@ -3969,7 +4272,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderSchema_Response); i { + switch v := v.(*Schema_Object); i { case 0: return &v.state case 1: @@ -3981,7 +4284,31 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProviderSchema_ServerCapabilities); i { + switch v := v.(*GetMetadata_Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin6_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetadata_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin6_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetadata_DataSourceMetadata); i { case 0: return &v.state case 1: @@ -3993,7 +4320,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateProviderConfig_Request); i { + switch v := v.(*GetMetadata_ResourceMetadata); i { case 0: return &v.state case 1: @@ -4005,7 +4332,7 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateProviderConfig_Response); i { + switch v := v.(*GetProviderSchema_Request); i { case 0: return &v.state case 1: @@ -4017,6 +4344,42 @@ func file_tfplugin6_proto_init() { } } file_tfplugin6_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetProviderSchema_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin6_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateProviderConfig_Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin6_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateProviderConfig_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_tfplugin6_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpgradeResourceState_Request); i { case 0: return &v.state @@ -4028,7 +4391,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpgradeResourceState_Response); i { case 0: return &v.state @@ -4040,7 +4403,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateResourceConfig_Request); i { case 0: return &v.state @@ -4052,7 +4415,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateResourceConfig_Response); i { case 0: return &v.state @@ -4064,7 +4427,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateDataResourceConfig_Request); i { case 0: return &v.state @@ -4076,7 +4439,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateDataResourceConfig_Response); i { case 0: return &v.state @@ -4088,7 +4451,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigureProvider_Request); i { case 0: return &v.state @@ -4100,7 +4463,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigureProvider_Response); i { case 0: return &v.state @@ -4112,7 +4475,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadResource_Request); i { case 0: return &v.state @@ -4124,7 +4487,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadResource_Response); i { case 0: return &v.state @@ -4136,7 +4499,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlanResourceChange_Request); i { case 0: return &v.state @@ -4148,7 +4511,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PlanResourceChange_Response); i { case 0: return &v.state @@ -4160,7 +4523,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplyResourceChange_Request); i { case 0: return &v.state @@ -4172,7 +4535,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplyResourceChange_Response); i { case 0: return &v.state @@ -4184,7 +4547,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportResourceState_Request); i { case 0: return &v.state @@ -4196,7 +4559,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportResourceState_ImportedResource); i { case 0: return &v.state @@ -4208,7 +4571,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportResourceState_Response); i { case 0: return &v.state @@ -4220,7 +4583,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadDataSource_Request); i { case 0: return &v.state @@ -4232,7 +4595,7 @@ func file_tfplugin6_proto_init() { return nil } } - file_tfplugin6_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_tfplugin6_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadDataSource_Response); i { case 0: return &v.state @@ -4245,7 +4608,7 @@ func file_tfplugin6_proto_init() { } } } - file_tfplugin6_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_tfplugin6_proto_msgTypes[19].OneofWrappers = []interface{}{ (*AttributePath_Step_AttributeName)(nil), (*AttributePath_Step_ElementKeyString)(nil), (*AttributePath_Step_ElementKeyInt)(nil), @@ -4256,7 +4619,7 @@ func file_tfplugin6_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_tfplugin6_proto_rawDesc, NumEnums: 4, - NumMessages: 51, + NumMessages: 56, NumExtensions: 0, NumServices: 1, }, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6.proto b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6.proto index affb15fb46006..a20ee8f825527 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6.proto +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6.proto @@ -1,6 +1,9 @@ -// Terraform Plugin RPC protocol version 6.3 +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Terraform Plugin RPC protocol version 6.4 // -// This file defines version 6.3 of the RPC protocol. To implement a plugin +// This file defines version 6.4 of the RPC protocol. To implement a plugin // against this protocol, copy this definition into your own codebase and // use protoc to generate stubs for your target language. // @@ -144,8 +147,34 @@ message Schema { Block block = 2; } +// ServerCapabilities allows providers to communicate extra information +// regarding supported protocol features. This is used to indicate +// availability of certain forward-compatible changes which may be optional +// in a major protocol version, but cannot be tested for directly. +message ServerCapabilities { + // The plan_destroy capability signals that a provider expects a call + // to PlanResourceChange when a resource is going to be destroyed. + bool plan_destroy = 1; + + // The get_provider_schema_optional capability indicates that this + // provider does not require calling GetProviderSchema to operate + // normally, and the caller can used a cached copy of the provider's + // schema. + bool get_provider_schema_optional = 2; +} + service Provider { //////// Information about what a provider supports/expects + + // GetMetadata returns upfront information about server capabilities and + // supported resource types without requiring the server to instantiate all + // schema information, which may be memory intensive. This RPC is optional, + // where clients may receive an unimplemented RPC error. Clients should + // ignore the error and call the GetProviderSchema RPC as a fallback. + rpc GetMetadata(GetMetadata.Request) returns (GetMetadata.Response); + + // GetSchema returns schema information for the provider, data resources, + // and managed resources. rpc GetProviderSchema(GetProviderSchema.Request) returns (GetProviderSchema.Response); rpc ValidateProviderConfig(ValidateProviderConfig.Request) returns (ValidateProviderConfig.Response); rpc ValidateResourceConfig(ValidateResourceConfig.Request) returns (ValidateResourceConfig.Response); @@ -167,6 +196,26 @@ service Provider { rpc StopProvider(StopProvider.Request) returns (StopProvider.Response); } +message GetMetadata { + message Request { + } + + message Response { + ServerCapabilities server_capabilities = 1; + repeated Diagnostic diagnostics = 2; + repeated DataSourceMetadata data_sources = 3; + repeated ResourceMetadata resources = 4; + } + + message DataSourceMetadata { + string type_name = 1; + } + + message ResourceMetadata { + string type_name = 1; + } +} + message GetProviderSchema { message Request { } @@ -178,17 +227,6 @@ message GetProviderSchema { Schema provider_meta = 5; ServerCapabilities server_capabilities = 6; } - - - // ServerCapabilities allows providers to communicate extra information - // regarding supported protocol features. This is used to indicate - // availability of certain forward-compatible changes which may be optional - // in a major protocol version, but cannot be tested for directly. - message ServerCapabilities { - // The plan_destroy capability signals that a provider expects a call - // to PlanResourceChange when a resource is going to be destroyed. - bool plan_destroy = 1; - } } message ValidateProviderConfig { diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6_grpc.pb.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6_grpc.pb.go index a22d32dc9ed41..4e92cbf4d9090 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6_grpc.pb.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6/tfplugin6_grpc.pb.go @@ -1,7 +1,29 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Terraform Plugin RPC protocol version 6.4 +// +// This file defines version 6.4 of the RPC protocol. To implement a plugin +// against this protocol, copy this definition into your own codebase and +// use protoc to generate stubs for your target language. +// +// This file will not be updated. Any minor versions of protocol 6 to follow +// should copy this file and modify the copy while maintaing backwards +// compatibility. Breaking changes, if any are required, will come +// in a subsequent major version with its own separate proto definition. +// +// Note that only the proto files included in a release tag of Terraform are +// official protocol releases. Proto files taken from other commits may include +// incomplete changes or features that did not make it into a final release. +// In all reasonable cases, plugin developers should take the proto file from +// the tag of the most recent release of Terraform, and not from the main +// branch or any other development branch. +// + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.19.4 +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.23.2 // source: tfplugin6.proto package tfplugin6 @@ -18,25 +40,48 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + Provider_GetMetadata_FullMethodName = "/tfplugin6.Provider/GetMetadata" + Provider_GetProviderSchema_FullMethodName = "/tfplugin6.Provider/GetProviderSchema" + Provider_ValidateProviderConfig_FullMethodName = "/tfplugin6.Provider/ValidateProviderConfig" + Provider_ValidateResourceConfig_FullMethodName = "/tfplugin6.Provider/ValidateResourceConfig" + Provider_ValidateDataResourceConfig_FullMethodName = "/tfplugin6.Provider/ValidateDataResourceConfig" + Provider_UpgradeResourceState_FullMethodName = "/tfplugin6.Provider/UpgradeResourceState" + Provider_ConfigureProvider_FullMethodName = "/tfplugin6.Provider/ConfigureProvider" + Provider_ReadResource_FullMethodName = "/tfplugin6.Provider/ReadResource" + Provider_PlanResourceChange_FullMethodName = "/tfplugin6.Provider/PlanResourceChange" + Provider_ApplyResourceChange_FullMethodName = "/tfplugin6.Provider/ApplyResourceChange" + Provider_ImportResourceState_FullMethodName = "/tfplugin6.Provider/ImportResourceState" + Provider_ReadDataSource_FullMethodName = "/tfplugin6.Provider/ReadDataSource" + Provider_StopProvider_FullMethodName = "/tfplugin6.Provider/StopProvider" +) + // ProviderClient is the client API for Provider service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type ProviderClient interface { - //////// Information about what a provider supports/expects + // GetMetadata returns upfront information about server capabilities and + // supported resource types without requiring the server to instantiate all + // schema information, which may be memory intensive. This RPC is optional, + // where clients may receive an unimplemented RPC error. Clients should + // ignore the error and call the GetProviderSchema RPC as a fallback. + GetMetadata(ctx context.Context, in *GetMetadata_Request, opts ...grpc.CallOption) (*GetMetadata_Response, error) + // GetSchema returns schema information for the provider, data resources, + // and managed resources. GetProviderSchema(ctx context.Context, in *GetProviderSchema_Request, opts ...grpc.CallOption) (*GetProviderSchema_Response, error) ValidateProviderConfig(ctx context.Context, in *ValidateProviderConfig_Request, opts ...grpc.CallOption) (*ValidateProviderConfig_Response, error) ValidateResourceConfig(ctx context.Context, in *ValidateResourceConfig_Request, opts ...grpc.CallOption) (*ValidateResourceConfig_Response, error) ValidateDataResourceConfig(ctx context.Context, in *ValidateDataResourceConfig_Request, opts ...grpc.CallOption) (*ValidateDataResourceConfig_Response, error) UpgradeResourceState(ctx context.Context, in *UpgradeResourceState_Request, opts ...grpc.CallOption) (*UpgradeResourceState_Response, error) - //////// One-time initialization, called before other functions below + // ////// One-time initialization, called before other functions below ConfigureProvider(ctx context.Context, in *ConfigureProvider_Request, opts ...grpc.CallOption) (*ConfigureProvider_Response, error) - //////// Managed Resource Lifecycle + // ////// Managed Resource Lifecycle ReadResource(ctx context.Context, in *ReadResource_Request, opts ...grpc.CallOption) (*ReadResource_Response, error) PlanResourceChange(ctx context.Context, in *PlanResourceChange_Request, opts ...grpc.CallOption) (*PlanResourceChange_Response, error) ApplyResourceChange(ctx context.Context, in *ApplyResourceChange_Request, opts ...grpc.CallOption) (*ApplyResourceChange_Response, error) ImportResourceState(ctx context.Context, in *ImportResourceState_Request, opts ...grpc.CallOption) (*ImportResourceState_Response, error) ReadDataSource(ctx context.Context, in *ReadDataSource_Request, opts ...grpc.CallOption) (*ReadDataSource_Response, error) - //////// Graceful Shutdown + // ////// Graceful Shutdown StopProvider(ctx context.Context, in *StopProvider_Request, opts ...grpc.CallOption) (*StopProvider_Response, error) } @@ -48,9 +93,18 @@ func NewProviderClient(cc grpc.ClientConnInterface) ProviderClient { return &providerClient{cc} } +func (c *providerClient) GetMetadata(ctx context.Context, in *GetMetadata_Request, opts ...grpc.CallOption) (*GetMetadata_Response, error) { + out := new(GetMetadata_Response) + err := c.cc.Invoke(ctx, Provider_GetMetadata_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *providerClient) GetProviderSchema(ctx context.Context, in *GetProviderSchema_Request, opts ...grpc.CallOption) (*GetProviderSchema_Response, error) { out := new(GetProviderSchema_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/GetProviderSchema", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_GetProviderSchema_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -59,7 +113,7 @@ func (c *providerClient) GetProviderSchema(ctx context.Context, in *GetProviderS func (c *providerClient) ValidateProviderConfig(ctx context.Context, in *ValidateProviderConfig_Request, opts ...grpc.CallOption) (*ValidateProviderConfig_Response, error) { out := new(ValidateProviderConfig_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/ValidateProviderConfig", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ValidateProviderConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -68,7 +122,7 @@ func (c *providerClient) ValidateProviderConfig(ctx context.Context, in *Validat func (c *providerClient) ValidateResourceConfig(ctx context.Context, in *ValidateResourceConfig_Request, opts ...grpc.CallOption) (*ValidateResourceConfig_Response, error) { out := new(ValidateResourceConfig_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/ValidateResourceConfig", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ValidateResourceConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -77,7 +131,7 @@ func (c *providerClient) ValidateResourceConfig(ctx context.Context, in *Validat func (c *providerClient) ValidateDataResourceConfig(ctx context.Context, in *ValidateDataResourceConfig_Request, opts ...grpc.CallOption) (*ValidateDataResourceConfig_Response, error) { out := new(ValidateDataResourceConfig_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/ValidateDataResourceConfig", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ValidateDataResourceConfig_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -86,7 +140,7 @@ func (c *providerClient) ValidateDataResourceConfig(ctx context.Context, in *Val func (c *providerClient) UpgradeResourceState(ctx context.Context, in *UpgradeResourceState_Request, opts ...grpc.CallOption) (*UpgradeResourceState_Response, error) { out := new(UpgradeResourceState_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/UpgradeResourceState", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_UpgradeResourceState_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -95,7 +149,7 @@ func (c *providerClient) UpgradeResourceState(ctx context.Context, in *UpgradeRe func (c *providerClient) ConfigureProvider(ctx context.Context, in *ConfigureProvider_Request, opts ...grpc.CallOption) (*ConfigureProvider_Response, error) { out := new(ConfigureProvider_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/ConfigureProvider", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ConfigureProvider_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -104,7 +158,7 @@ func (c *providerClient) ConfigureProvider(ctx context.Context, in *ConfigurePro func (c *providerClient) ReadResource(ctx context.Context, in *ReadResource_Request, opts ...grpc.CallOption) (*ReadResource_Response, error) { out := new(ReadResource_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/ReadResource", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ReadResource_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -113,7 +167,7 @@ func (c *providerClient) ReadResource(ctx context.Context, in *ReadResource_Requ func (c *providerClient) PlanResourceChange(ctx context.Context, in *PlanResourceChange_Request, opts ...grpc.CallOption) (*PlanResourceChange_Response, error) { out := new(PlanResourceChange_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/PlanResourceChange", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_PlanResourceChange_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -122,7 +176,7 @@ func (c *providerClient) PlanResourceChange(ctx context.Context, in *PlanResourc func (c *providerClient) ApplyResourceChange(ctx context.Context, in *ApplyResourceChange_Request, opts ...grpc.CallOption) (*ApplyResourceChange_Response, error) { out := new(ApplyResourceChange_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/ApplyResourceChange", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ApplyResourceChange_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -131,7 +185,7 @@ func (c *providerClient) ApplyResourceChange(ctx context.Context, in *ApplyResou func (c *providerClient) ImportResourceState(ctx context.Context, in *ImportResourceState_Request, opts ...grpc.CallOption) (*ImportResourceState_Response, error) { out := new(ImportResourceState_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/ImportResourceState", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ImportResourceState_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -140,7 +194,7 @@ func (c *providerClient) ImportResourceState(ctx context.Context, in *ImportReso func (c *providerClient) ReadDataSource(ctx context.Context, in *ReadDataSource_Request, opts ...grpc.CallOption) (*ReadDataSource_Response, error) { out := new(ReadDataSource_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/ReadDataSource", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_ReadDataSource_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -149,7 +203,7 @@ func (c *providerClient) ReadDataSource(ctx context.Context, in *ReadDataSource_ func (c *providerClient) StopProvider(ctx context.Context, in *StopProvider_Request, opts ...grpc.CallOption) (*StopProvider_Response, error) { out := new(StopProvider_Response) - err := c.cc.Invoke(ctx, "/tfplugin6.Provider/StopProvider", in, out, opts...) + err := c.cc.Invoke(ctx, Provider_StopProvider_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -160,21 +214,28 @@ func (c *providerClient) StopProvider(ctx context.Context, in *StopProvider_Requ // All implementations must embed UnimplementedProviderServer // for forward compatibility type ProviderServer interface { - //////// Information about what a provider supports/expects + // GetMetadata returns upfront information about server capabilities and + // supported resource types without requiring the server to instantiate all + // schema information, which may be memory intensive. This RPC is optional, + // where clients may receive an unimplemented RPC error. Clients should + // ignore the error and call the GetProviderSchema RPC as a fallback. + GetMetadata(context.Context, *GetMetadata_Request) (*GetMetadata_Response, error) + // GetSchema returns schema information for the provider, data resources, + // and managed resources. GetProviderSchema(context.Context, *GetProviderSchema_Request) (*GetProviderSchema_Response, error) ValidateProviderConfig(context.Context, *ValidateProviderConfig_Request) (*ValidateProviderConfig_Response, error) ValidateResourceConfig(context.Context, *ValidateResourceConfig_Request) (*ValidateResourceConfig_Response, error) ValidateDataResourceConfig(context.Context, *ValidateDataResourceConfig_Request) (*ValidateDataResourceConfig_Response, error) UpgradeResourceState(context.Context, *UpgradeResourceState_Request) (*UpgradeResourceState_Response, error) - //////// One-time initialization, called before other functions below + // ////// One-time initialization, called before other functions below ConfigureProvider(context.Context, *ConfigureProvider_Request) (*ConfigureProvider_Response, error) - //////// Managed Resource Lifecycle + // ////// Managed Resource Lifecycle ReadResource(context.Context, *ReadResource_Request) (*ReadResource_Response, error) PlanResourceChange(context.Context, *PlanResourceChange_Request) (*PlanResourceChange_Response, error) ApplyResourceChange(context.Context, *ApplyResourceChange_Request) (*ApplyResourceChange_Response, error) ImportResourceState(context.Context, *ImportResourceState_Request) (*ImportResourceState_Response, error) ReadDataSource(context.Context, *ReadDataSource_Request) (*ReadDataSource_Response, error) - //////// Graceful Shutdown + // ////// Graceful Shutdown StopProvider(context.Context, *StopProvider_Request) (*StopProvider_Response, error) mustEmbedUnimplementedProviderServer() } @@ -183,6 +244,9 @@ type ProviderServer interface { type UnimplementedProviderServer struct { } +func (UnimplementedProviderServer) GetMetadata(context.Context, *GetMetadata_Request) (*GetMetadata_Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMetadata not implemented") +} func (UnimplementedProviderServer) GetProviderSchema(context.Context, *GetProviderSchema_Request) (*GetProviderSchema_Response, error) { return nil, status.Errorf(codes.Unimplemented, "method GetProviderSchema not implemented") } @@ -232,6 +296,24 @@ func RegisterProviderServer(s grpc.ServiceRegistrar, srv ProviderServer) { s.RegisterService(&Provider_ServiceDesc, srv) } +func _Provider_GetMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMetadata_Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProviderServer).GetMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Provider_GetMetadata_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProviderServer).GetMetadata(ctx, req.(*GetMetadata_Request)) + } + return interceptor(ctx, in, info, handler) +} + func _Provider_GetProviderSchema_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetProviderSchema_Request) if err := dec(in); err != nil { @@ -242,7 +324,7 @@ func _Provider_GetProviderSchema_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/GetProviderSchema", + FullMethod: Provider_GetProviderSchema_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).GetProviderSchema(ctx, req.(*GetProviderSchema_Request)) @@ -260,7 +342,7 @@ func _Provider_ValidateProviderConfig_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/ValidateProviderConfig", + FullMethod: Provider_ValidateProviderConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ValidateProviderConfig(ctx, req.(*ValidateProviderConfig_Request)) @@ -278,7 +360,7 @@ func _Provider_ValidateResourceConfig_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/ValidateResourceConfig", + FullMethod: Provider_ValidateResourceConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ValidateResourceConfig(ctx, req.(*ValidateResourceConfig_Request)) @@ -296,7 +378,7 @@ func _Provider_ValidateDataResourceConfig_Handler(srv interface{}, ctx context.C } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/ValidateDataResourceConfig", + FullMethod: Provider_ValidateDataResourceConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ValidateDataResourceConfig(ctx, req.(*ValidateDataResourceConfig_Request)) @@ -314,7 +396,7 @@ func _Provider_UpgradeResourceState_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/UpgradeResourceState", + FullMethod: Provider_UpgradeResourceState_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).UpgradeResourceState(ctx, req.(*UpgradeResourceState_Request)) @@ -332,7 +414,7 @@ func _Provider_ConfigureProvider_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/ConfigureProvider", + FullMethod: Provider_ConfigureProvider_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ConfigureProvider(ctx, req.(*ConfigureProvider_Request)) @@ -350,7 +432,7 @@ func _Provider_ReadResource_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/ReadResource", + FullMethod: Provider_ReadResource_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ReadResource(ctx, req.(*ReadResource_Request)) @@ -368,7 +450,7 @@ func _Provider_PlanResourceChange_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/PlanResourceChange", + FullMethod: Provider_PlanResourceChange_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).PlanResourceChange(ctx, req.(*PlanResourceChange_Request)) @@ -386,7 +468,7 @@ func _Provider_ApplyResourceChange_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/ApplyResourceChange", + FullMethod: Provider_ApplyResourceChange_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ApplyResourceChange(ctx, req.(*ApplyResourceChange_Request)) @@ -404,7 +486,7 @@ func _Provider_ImportResourceState_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/ImportResourceState", + FullMethod: Provider_ImportResourceState_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ImportResourceState(ctx, req.(*ImportResourceState_Request)) @@ -422,7 +504,7 @@ func _Provider_ReadDataSource_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/ReadDataSource", + FullMethod: Provider_ReadDataSource_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).ReadDataSource(ctx, req.(*ReadDataSource_Request)) @@ -440,7 +522,7 @@ func _Provider_StopProvider_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/tfplugin6.Provider/StopProvider", + FullMethod: Provider_StopProvider_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ProviderServer).StopProvider(ctx, req.(*StopProvider_Request)) @@ -455,6 +537,10 @@ var Provider_ServiceDesc = grpc.ServiceDesc{ ServiceName: "tfplugin6.Provider", HandlerType: (*ProviderServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "GetMetadata", + Handler: _Provider_GetMetadata_Handler, + }, { MethodName: "GetProviderSchema", Handler: _Provider_GetProviderSchema_Handler, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/data_source.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/data_source.go index 624a3bb108c95..e264d91d6aa8b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/data_source.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/data_source.go @@ -5,6 +5,16 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6" ) +func GetMetadata_DataSourceMetadata(in *tfprotov6.DataSourceMetadata) *tfplugin6.GetMetadata_DataSourceMetadata { + if in == nil { + return nil + } + + return &tfplugin6.GetMetadata_DataSourceMetadata{ + TypeName: in.TypeName, + } +} + func ValidateDataResourceConfig_Request(in *tfprotov6.ValidateDataResourceConfigRequest) (*tfplugin6.ValidateDataResourceConfig_Request, error) { resp := &tfplugin6.ValidateDataResourceConfig_Request{ TypeName: in.TypeName, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/provider.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/provider.go index ce37207f98f56..40db1bc90b74d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/provider.go @@ -7,6 +7,40 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6" ) +func GetMetadata_Request(in *tfprotov6.GetMetadataRequest) (*tfplugin6.GetMetadata_Request, error) { + return &tfplugin6.GetMetadata_Request{}, nil +} + +func GetMetadata_Response(in *tfprotov6.GetMetadataResponse) (*tfplugin6.GetMetadata_Response, error) { + if in == nil { + return nil, nil + } + + resp := &tfplugin6.GetMetadata_Response{ + DataSources: make([]*tfplugin6.GetMetadata_DataSourceMetadata, 0, len(in.DataSources)), + Resources: make([]*tfplugin6.GetMetadata_ResourceMetadata, 0, len(in.Resources)), + ServerCapabilities: ServerCapabilities(in.ServerCapabilities), + } + + for _, datasource := range in.DataSources { + resp.DataSources = append(resp.DataSources, GetMetadata_DataSourceMetadata(&datasource)) + } + + for _, resource := range in.Resources { + resp.Resources = append(resp.Resources, GetMetadata_ResourceMetadata(&resource)) + } + + diags, err := Diagnostics(in.Diagnostics) + + if err != nil { + return resp, err + } + + resp.Diagnostics = diags + + return resp, nil +} + func GetProviderSchema_Request(in *tfprotov6.GetProviderSchemaRequest) (*tfplugin6.GetProviderSchema_Request, error) { return &tfplugin6.GetProviderSchema_Request{}, nil } @@ -16,7 +50,7 @@ func GetProviderSchema_Response(in *tfprotov6.GetProviderSchemaResponse) (*tfplu return nil, nil } resp := tfplugin6.GetProviderSchema_Response{ - ServerCapabilities: GetProviderSchema_ServerCapabilities(in.ServerCapabilities), + ServerCapabilities: ServerCapabilities(in.ServerCapabilities), } if in.Provider != nil { schema, err := Schema(in.Provider) diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/resource.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/resource.go index bb09681850f46..8dd35f7809b48 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/resource.go @@ -5,6 +5,16 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6" ) +func GetMetadata_ResourceMetadata(in *tfprotov6.ResourceMetadata) *tfplugin6.GetMetadata_ResourceMetadata { + if in == nil { + return nil + } + + return &tfplugin6.GetMetadata_ResourceMetadata{ + TypeName: in.TypeName, + } +} + func ValidateResourceConfig_Request(in *tfprotov6.ValidateResourceConfigRequest) (*tfplugin6.ValidateResourceConfig_Request, error) { resp := &tfplugin6.ValidateResourceConfig_Request{ TypeName: in.TypeName, diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/server_capabilities.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/server_capabilities.go index fa335d6913e66..2c63554b40aee 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/server_capabilities.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto/server_capabilities.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package toproto import ( @@ -5,12 +8,13 @@ import ( "github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6" ) -func GetProviderSchema_ServerCapabilities(in *tfprotov6.ServerCapabilities) *tfplugin6.GetProviderSchema_ServerCapabilities { +func ServerCapabilities(in *tfprotov6.ServerCapabilities) *tfplugin6.ServerCapabilities { if in == nil { return nil } - return &tfplugin6.GetProviderSchema_ServerCapabilities{ - PlanDestroy: in.PlanDestroy, + return &tfplugin6.ServerCapabilities{ + GetProviderSchemaOptional: in.GetProviderSchemaOptional, + PlanDestroy: in.PlanDestroy, } } diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/provider.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/provider.go index 970ef8e70c2d9..6f3f9d974d4e8 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 import ( @@ -7,6 +10,13 @@ import ( // ProviderServer is an interface that reflects that Terraform protocol. // Providers must implement this interface. type ProviderServer interface { + // GetMetadata returns upfront information about server capabilities and + // supported resource types without requiring the server to instantiate all + // schema information, which may be memory intensive. This RPC is optional, + // where clients may receive an unimplemented RPC error. Clients should + // ignore the error and call the GetProviderSchema RPC as a fallback. + GetMetadata(context.Context, *GetMetadataRequest) (*GetMetadataResponse, error) + // GetProviderSchema is called when Terraform needs to know what the // provider's schema is, along with the schemas of all its resources // and data sources. @@ -39,6 +49,27 @@ type ProviderServer interface { DataSourceServer } +// GetMetadataRequest represents a GetMetadata RPC request. +type GetMetadataRequest struct{} + +// GetMetadataResponse represents a GetMetadata RPC response. +type GetMetadataResponse struct { + // ServerCapabilities defines optionally supported protocol features, + // such as forward-compatible Terraform behavior changes. + ServerCapabilities *ServerCapabilities + + // Diagnostics report errors or warnings related to returning the + // provider's schemas. Returning an empty slice indicates success, with + // no errors or warnings generated. + Diagnostics []*Diagnostic + + // DataSources returns metadata for all data resources. + DataSources []DataSourceMetadata + + // Resources returns metadata for all managed resources. + Resources []ResourceMetadata +} + // GetProviderSchemaRequest represents a Terraform RPC request for the // provider's schemas. type GetProviderSchemaRequest struct{} diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/resource.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/resource.go index 2768bb526e84e..987d9cc5e6a9b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/resource.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 import ( @@ -6,6 +9,13 @@ import ( "github.com/hashicorp/terraform-plugin-go/tftypes" ) +// ResourceMetadata describes metadata for a managed resource in the GetMetadata +// RPC. +type ResourceMetadata struct { + // TypeName is the name of the managed resource. + TypeName string +} + // ResourceServer is an interface containing the methods a resource // implementation needs to fill. type ResourceServer interface { diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/schema.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/schema.go index c17e2cceebbb1..b368c620fbc19 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 import "github.com/hashicorp/terraform-plugin-go/tftypes" diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/server_capabilities.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/server_capabilities.go index eed59219d55f4..2ea71df6d69c8 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/server_capabilities.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/server_capabilities.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 // ServerCapabilities allows providers to communicate optionally supported @@ -6,6 +9,11 @@ package tfprotov6 // This information is used in GetProviderSchemaResponse as capabilities are // static features which must be known upfront in the provider server. type ServerCapabilities struct { + // GetProviderSchemaOptional signals that this provider does not require + // having the GetProviderSchema RPC called first to operate normally. This + // means the caller can use a cached copy of the provider's schema instead. + GetProviderSchemaOptional bool + // PlanDestroy signals that a provider expects a call to // PlanResourceChange when a resource is going to be destroyed. This is // opt-in to prevent unexpected errors or panics since the diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/state.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/state.go index 41506b8d70041..5f7a14518b863 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/state.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/string_kind.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/string_kind.go index 359e036e7a31b..7f0d9131b6a06 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/string_kind.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/string_kind.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfprotov6 const ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/doc.go index 8b5313d953b94..5501d70d71381 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tf6server implements a server implementation to run // tfprotov6.ProviderServers as gRPC servers. // diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/plugin.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/plugin.go index e868d30a5ba33..c5d24ffdb495e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/plugin.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/plugin.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tf6server import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/server.go b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/server.go index 9889a93e695ec..6b42836e213a2 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/server.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server/server.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tf6server import ( @@ -45,7 +48,7 @@ const ( // // In the future, it may be possible to include this information directly // in the protocol buffers rather than recreating a constant here. - protocolVersionMinor uint = 3 + protocolVersionMinor uint = 4 ) // protocolVersion represents the combined major and minor version numbers of @@ -483,6 +486,43 @@ func New(name string, serve tfprotov6.ProviderServer, opts ...ServeOpt) tfplugin } } +func (s *server) GetMetadata(ctx context.Context, req *tfplugin6.GetMetadata_Request) (*tfplugin6.GetMetadata_Response, error) { + rpc := "GetMetadata" + ctx = s.loggingContext(ctx) + ctx = logging.RpcContext(ctx, rpc) + ctx = s.stoppableContext(ctx) + logging.ProtocolTrace(ctx, "Received request") + defer logging.ProtocolTrace(ctx, "Served request") + + r, err := fromproto.GetMetadataRequest(req) + + if err != nil { + logging.ProtocolError(ctx, "Error converting request from protobuf", map[string]interface{}{logging.KeyError: err}) + return nil, err + } + + ctx = tf6serverlogging.DownstreamRequest(ctx) + + resp, err := s.downstream.GetMetadata(ctx, r) + + if err != nil { + logging.ProtocolError(ctx, "Error from downstream", map[string]interface{}{logging.KeyError: err}) + return nil, err + } + + tf6serverlogging.DownstreamResponse(ctx, resp.Diagnostics) + tf6serverlogging.ServerCapabilities(ctx, resp.ServerCapabilities) + + ret, err := toproto.GetMetadata_Response(resp) + + if err != nil { + logging.ProtocolError(ctx, "Error converting response to protobuf", map[string]interface{}{logging.KeyError: err}) + return nil, err + } + + return ret, nil +} + func (s *server) GetProviderSchema(ctx context.Context, req *tfplugin6.GetProviderSchema_Request) (*tfplugin6.GetProviderSchema_Response, error) { rpc := "GetProviderSchema" ctx = s.loggingContext(ctx) @@ -502,6 +542,7 @@ func (s *server) GetProviderSchema(ctx context.Context, req *tfplugin6.GetProvid return nil, err } tf6serverlogging.DownstreamResponse(ctx, resp.Diagnostics) + tf6serverlogging.ServerCapabilities(ctx, resp.ServerCapabilities) ret, err := toproto.GetProviderSchema_Response(resp) if err != nil { logging.ProtocolError(ctx, "Error converting response to protobuf", map[string]interface{}{logging.KeyError: err}) @@ -578,7 +619,7 @@ func (s *server) stop() { s.stopCh = make(chan struct{}) } -func (s *server) Stop(ctx context.Context, req *tfplugin6.StopProvider_Request) (*tfplugin6.StopProvider_Response, error) { +func (s *server) StopProvider(ctx context.Context, req *tfplugin6.StopProvider_Request) (*tfplugin6.StopProvider_Response, error) { rpc := "StopProvider" ctx = s.loggingContext(ctx) ctx = logging.RpcContext(ctx, rpc) diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/attribute_path.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/attribute_path.go index d6108d4ab3355..809cc99f66695 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/attribute_path.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/attribute_path.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( @@ -77,14 +80,20 @@ func (a *AttributePath) String() string { // AttributePaths are considered equal if they have the same number of steps, // the steps are all the same types, and the steps have all the same values. func (a *AttributePath) Equal(o *AttributePath) bool { - if len(a.Steps()) == 0 && len(o.Steps()) == 0 { - return true + if a == nil { + return o == nil || len(o.steps) == 0 } - if len(a.Steps()) != len(o.Steps()) { + + if o == nil { + return len(a.steps) == 0 + } + + if len(a.steps) != len(o.steps) { return false } - for pos, aStep := range a.Steps() { - oStep := o.Steps()[pos] + + for pos, aStep := range a.steps { + oStep := o.steps[pos] if !aStep.Equal(oStep) { return false @@ -117,63 +126,112 @@ func (a *AttributePath) NewError(err error) error { } } -// LastStep returns the last step in the path. If the path was -// empty, nil is returned. +// LastStep returns the last step in the path. If the path is nil or empty, nil +// is returned. func (a *AttributePath) LastStep() AttributePathStep { - steps := a.Steps() + if a == nil || len(a.steps) == 0 { + return nil + } + + return a.steps[len(a.steps)-1] +} - if len(steps) == 0 { +// NextStep returns the next step in the path. If the path is nil or empty, nil +// is returned. +func (a *AttributePath) NextStep() AttributePathStep { + if a == nil || len(a.steps) == 0 { return nil } - return steps[len(steps)-1] + return a.steps[0] } // WithAttributeName adds an AttributeName step to `a`, using `name` as the // attribute's name. `a` is copied, not modified. func (a *AttributePath) WithAttributeName(name string) *AttributePath { - steps := a.Steps() + if a == nil { + return &AttributePath{ + steps: []AttributePathStep{AttributeName(name)}, + } + } + + // Avoid re-allocating larger slice + steps := make([]AttributePathStep, len(a.steps)+1) + copy(steps, a.steps) + steps[len(steps)-1] = AttributeName(name) + return &AttributePath{ - steps: append(steps, AttributeName(name)), + steps: steps, } } // WithElementKeyString adds an ElementKeyString step to `a`, using `key` as // the element's key. `a` is copied, not modified. func (a *AttributePath) WithElementKeyString(key string) *AttributePath { - steps := a.Steps() + if a == nil { + return &AttributePath{ + steps: []AttributePathStep{ElementKeyString(key)}, + } + } + + // Avoid re-allocating larger slice + steps := make([]AttributePathStep, len(a.steps)+1) + copy(steps, a.steps) + steps[len(steps)-1] = ElementKeyString(key) + return &AttributePath{ - steps: append(steps, ElementKeyString(key)), + steps: steps, } } // WithElementKeyInt adds an ElementKeyInt step to `a`, using `key` as the // element's key. `a` is copied, not modified. func (a *AttributePath) WithElementKeyInt(key int) *AttributePath { - steps := a.Steps() + if a == nil { + return &AttributePath{ + steps: []AttributePathStep{ElementKeyInt(key)}, + } + } + + // Avoid re-allocating larger slice + steps := make([]AttributePathStep, len(a.steps)+1) + copy(steps, a.steps) + steps[len(steps)-1] = ElementKeyInt(key) + return &AttributePath{ - steps: append(steps, ElementKeyInt(key)), + steps: steps, } } // WithElementKeyValue adds an ElementKeyValue to `a`, using `key` as the // element's key. `a` is copied, not modified. func (a *AttributePath) WithElementKeyValue(key Value) *AttributePath { - steps := a.Steps() + if a == nil { + return &AttributePath{ + steps: []AttributePathStep{ElementKeyValue(key)}, + } + } + + // Avoid re-allocating larger slice + steps := make([]AttributePathStep, len(a.steps)+1) + copy(steps, a.steps) + steps[len(steps)-1] = ElementKeyValue(key) + return &AttributePath{ - steps: append(steps, ElementKeyValue(key.Copy())), + steps: steps, } } // WithoutLastStep removes the last step, whatever kind of step it was, from // `a`. `a` is copied, not modified. func (a *AttributePath) WithoutLastStep() *AttributePath { - steps := a.Steps() - if len(steps) == 0 { + if a == nil || len(a.steps) == 0 { return nil } + return &AttributePath{ - steps: steps[:len(steps)-1], + // Paths are immutable, so this should be safe without copying. + steps: a.steps[:len(a.steps)-1], } } @@ -293,7 +351,7 @@ type AttributePathStepper interface { // types need to use the AttributePathStepper interface to tell // WalkAttributePath how to traverse themselves. func WalkAttributePath(in interface{}, path *AttributePath) (interface{}, *AttributePath, error) { - if len(path.Steps()) < 1 { + if path == nil || len(path.steps) == 0 { return in, path, nil } stepper, ok := in.(AttributePathStepper) @@ -303,11 +361,11 @@ func WalkAttributePath(in interface{}, path *AttributePath) (interface{}, *Attri return in, path, ErrNotAttributePathStepper } } - next, err := stepper.ApplyTerraform5AttributePathStep(path.Steps()[0]) + next, err := stepper.ApplyTerraform5AttributePathStep(path.NextStep()) if err != nil { return in, path, err } - return WalkAttributePath(next, &AttributePath{steps: path.Steps()[1:]}) + return WalkAttributePath(next, NewAttributePathWithSteps(path.steps[1:])) } func builtinAttributePathStepper(in interface{}) (AttributePathStepper, bool) { @@ -324,17 +382,17 @@ func builtinAttributePathStepper(in interface{}) (AttributePathStepper, bool) { type mapStringInterfaceAttributePathStepper map[string]interface{} func (m mapStringInterfaceAttributePathStepper) ApplyTerraform5AttributePathStep(step AttributePathStep) (interface{}, error) { - _, isAttributeName := step.(AttributeName) - _, isElementKeyString := step.(ElementKeyString) + attributeName, isAttributeName := step.(AttributeName) + elementKeyString, isElementKeyString := step.(ElementKeyString) if !isAttributeName && !isElementKeyString { return nil, ErrInvalidStep } var stepValue string if isAttributeName { - stepValue = string(step.(AttributeName)) + stepValue = string(attributeName) } if isElementKeyString { - stepValue = string(step.(ElementKeyString)) + stepValue = string(elementKeyString) } v, ok := m[stepValue] if !ok { diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/attribute_path_error.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/attribute_path_error.go index be0002072174e..df887c2fd612b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/attribute_path_error.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/attribute_path_error.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/diff.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/diff.go index 328b1adf67cbe..72486b65e5983 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/diff.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/diff.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( @@ -122,8 +125,10 @@ func (val1 Value) Diff(val2 Value) ([]ValueDiff, error) { return true, nil } - // convert from an interface{} to a Value - value2 := value2I.(Value) + value2, ok := value2I.(Value) + if !ok { + return false, fmt.Errorf("unexpected type %T in Diff", value2I) + } // if they're both unknown, no need to continue if !value1.IsKnown() && !value2.IsKnown() { diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/doc.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/doc.go index 414a797d96cd0..ea82da6e9061d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tftypes provides a type system for Terraform configuration and state // values. // diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/list.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/list.go index a0bc2f370095f..512c7c9004a49 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/list.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/list.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/map.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/map.go index 7c1e7d05ae0a1..0d299dcbee89f 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/map.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/map.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/object.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/object.go index ce2bf1325c637..b901c99e01e7b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/object.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/object.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/primitive.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/primitive.go index 0349f41455313..5a631baea2a89 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/primitive.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/primitive.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/set.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/set.go index 00163067ea1cc..e4549b5945bf3 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/set.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/set.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/tuple.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/tuple.go index 5ca5709a340a7..a5c5e52390fd2 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/tuple.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/tuple.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/type.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/type.go index 4f0e4af7c850c..c596599218730 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/type.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/type.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/unknown_value.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/unknown_value.go index 016d3bbe8acdb..4aefe719e4cbf 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/unknown_value.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/unknown_value.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes const ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value.go index f997347e2b2e3..b845078396339 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( @@ -8,7 +11,7 @@ import ( "strconv" "strings" - msgpack "github.com/vmihailenco/msgpack/v4" + msgpack "github.com/vmihailenco/msgpack/v5" ) // ValueConverter is an interface that provider-defined types can implement to @@ -131,15 +134,17 @@ func (val Value) ApplyTerraform5AttributePathStep(step AttributePathStep) (inter if !val.IsKnown() || val.IsNull() { return nil, ErrInvalidStep } + + // Since this logic is very hot path, it is optimized to use Value + // implementation details rather than As() to avoid memory allocations. switch s := step.(type) { case AttributeName: - if !val.Type().Is(Object{}) { + if _, ok := val.Type().(Object); !ok { return nil, ErrInvalidStep } - o := map[string]Value{} - err := val.As(&o) - if err != nil { - return nil, err + o, ok := val.value.(map[string]Value) + if !ok { + return nil, fmt.Errorf("cannot convert %T into map[string]tftypes.Value", val.value) } res, ok := o[string(s)] if !ok { @@ -147,13 +152,12 @@ func (val Value) ApplyTerraform5AttributePathStep(step AttributePathStep) (inter } return res, nil case ElementKeyString: - if !val.Type().Is(Map{}) { + if _, ok := val.Type().(Map); !ok { return nil, ErrInvalidStep } - m := map[string]Value{} - err := val.As(&m) - if err != nil { - return nil, err + m, ok := val.value.(map[string]Value) + if !ok { + return nil, fmt.Errorf("cannot convert %T into map[string]tftypes.Value", val.value) } res, ok := m[string(s)] if !ok { @@ -161,36 +165,37 @@ func (val Value) ApplyTerraform5AttributePathStep(step AttributePathStep) (inter } return res, nil case ElementKeyInt: - if !val.Type().Is(List{}) && !val.Type().Is(Tuple{}) { + _, listOk := val.Type().(List) + _, tupleOk := val.Type().(Tuple) + if !listOk && !tupleOk { return nil, ErrInvalidStep } if int64(s) < 0 { return nil, ErrInvalidStep } - sl := []Value{} - err := val.As(&sl) - if err != nil { - return nil, err + sl, ok := val.value.([]Value) + if !ok { + return nil, fmt.Errorf("cannot convert %T into []tftypes.Value", val.value) } if int64(len(sl)) <= int64(s) { return nil, ErrInvalidStep } return sl[int64(s)], nil case ElementKeyValue: - if !val.Type().Is(Set{}) { + if _, ok := val.Type().(Set); !ok { return nil, ErrInvalidStep } - sl := []Value{} - err := val.As(&sl) - if err != nil { - return nil, err + sl, ok := val.value.([]Value) + if !ok { + return nil, fmt.Errorf("cannot convert %T into []tftypes.Value", val.value) } + stepValue := Value(s) for _, el := range sl { - diffs, err := el.Diff(Value(s)) + deepEqual, err := stepValue.deepEqual(el) if err != nil { return nil, err } - if len(diffs) == 0 { + if deepEqual { return el, nil } } @@ -216,11 +221,11 @@ func (val Value) Equal(o Value) bool { if !val.Type().Equal(o.Type()) { return false } - diff, err := val.Diff(o) + deepEqual, err := val.deepEqual(o) if err != nil { panic(err) } - return len(diff) < 1 + return deepEqual } // Copy returns a defensively-copied clone of Value that shares no underlying @@ -299,57 +304,62 @@ func newValue(t Type, val interface{}) (Value, error) { } } - switch { - case t.Is(String): - v, err := valueFromString(val) - if err != nil { - return Value{}, err - } - return v, nil - case t.Is(Number): - v, err := valueFromNumber(val) - if err != nil { - return Value{}, err - } - return v, nil - case t.Is(Bool): - v, err := valueFromBool(val) - if err != nil { - return Value{}, err - } - return v, nil - case t.Is(Map{}): - v, err := valueFromMap(t.(Map).ElementType, val) - if err != nil { - return Value{}, err + switch typ := t.(type) { + case primitive: + switch typ.name { + case String.name: + v, err := valueFromString(val) + if err != nil { + return Value{}, err + } + return v, nil + case Number.name: + v, err := valueFromNumber(val) + if err != nil { + return Value{}, err + } + return v, nil + case Bool.name: + v, err := valueFromBool(val) + if err != nil { + return Value{}, err + } + return v, nil + case DynamicPseudoType.name: + v, err := valueFromDynamicPseudoType(val) + if err != nil { + return Value{}, err + } + return v, nil + default: + return Value{}, fmt.Errorf("unknown primitive type %v passed to tftypes.NewValue", typ) } - return v, nil - case t.Is(Object{}): - v, err := valueFromObject(t.(Object).AttributeTypes, t.(Object).OptionalAttributes, val) + case Map: + v, err := valueFromMap(typ.ElementType, val) if err != nil { return Value{}, err } return v, nil - case t.Is(List{}): - v, err := valueFromList(t.(List).ElementType, val) + case Object: + v, err := valueFromObject(typ.AttributeTypes, typ.OptionalAttributes, val) if err != nil { return Value{}, err } return v, nil - case t.Is(Set{}): - v, err := valueFromSet(t.(Set).ElementType, val) + case List: + v, err := valueFromList(typ.ElementType, val) if err != nil { return Value{}, err } return v, nil - case t.Is(Tuple{}): - v, err := valueFromTuple(t.(Tuple).ElementTypes, val) + case Set: + v, err := valueFromSet(typ.ElementType, val) if err != nil { return Value{}, err } return v, nil - case t.Is(DynamicPseudoType): - v, err := valueFromDynamicPseudoType(val) + case Tuple: + v, err := valueFromTuple(typ.ElementTypes, val) if err != nil { return Value{}, err } @@ -540,6 +550,7 @@ func (val Value) IsFullyKnown() bool { case primitive: return true case List, Set, Tuple: + //nolint:forcetypeassert // NewValue func validates the type for _, v := range val.value.([]Value) { if !v.IsFullyKnown() { return false @@ -547,6 +558,7 @@ func (val Value) IsFullyKnown() bool { } return true case Map, Object: + //nolint:forcetypeassert // NewValue func validates the type for _, v := range val.value.(map[string]Value) { if !v.IsFullyKnown() { return false diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_equal.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_equal.go new file mode 100644 index 0000000000000..8d326657a79a5 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_equal.go @@ -0,0 +1,213 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tftypes + +import ( + "errors" + "fmt" + "math/big" +) + +// deepEqual walks both Value to ensure any underlying Value are equal. This +// logic is essentially a duplicate of Diff, however it is intended to return +// early on any inequality and avoids memory allocations where possible. +// +// There might be ways to better share the internal logic of this method with +// Diff, however that effort is reserved for a time when the effort is justified +// over resolving the inherent compute and memory performance issues with Diff +// when only checking for inequality. +func (val1 Value) deepEqual(val2 Value) (bool, error) { + if val1.Type() == nil && val2.Type() == nil && val1.value == nil && val2.value == nil { + return false, nil + } + + if (val1.Type() == nil && val2.Type() != nil) || (val1.Type() != nil && val2.Type() == nil) { + return false, errors.New("cannot diff value missing type") + } + + if !val1.Type().Is(val2.Type()) { + return false, errors.New("Can't diff values of different types") + } + + // Capture walk differences for returning early + var hasDiff bool + + // make sure everything in val2 is also in val1 + err := Walk(val2, func(path *AttributePath, _ Value) (bool, error) { + _, _, err := val1.walkAttributePath(path) + + if err != nil && err != ErrInvalidStep { + return false, fmt.Errorf("Error walking %q: %w", path, err) + } else if err == ErrInvalidStep { + hasDiff = true + + return false, stopWalkError + } + + return true, nil + }) + + if err != nil { + return false, err + } + + if hasDiff { + return false, nil + } + + // make sure everything in val1 is also in val2 and also that it all matches + err = Walk(val1, func(path *AttributePath, value1 Value) (bool, error) { + // pull out the Value at the same path in val2 + value2, _, err := val2.walkAttributePath(path) + + if err != nil && err != ErrInvalidStep { + return false, fmt.Errorf("Error walking %q: %w", path, err) + } else if err == ErrInvalidStep { + hasDiff = true + + return false, stopWalkError + } + + // if they're both unknown, no need to continue + if !value1.IsKnown() && !value2.IsKnown() { + return false, nil + } + + if value1.IsKnown() != value2.IsKnown() { + hasDiff = true + + return false, stopWalkError + } + + // if they're both null, no need to continue + if value1.IsNull() && value2.IsNull() { + return false, nil + } + + if value1.IsNull() != value2.IsNull() { + hasDiff = true + + return false, stopWalkError + } + + // We know there are known, non-null values, time to compare them. + // Since this logic is very hot path, it is optimized to use type and + // value implementation details rather than Equal() and As() + // respectively, since both result in memory allocations. + switch typ := value1.Type().(type) { + case primitive: + switch typ.name { + case String.name: + s1, ok := value1.value.(string) + + if !ok { + return false, fmt.Errorf("cannot convert %T into string", value1.value) + } + + s2, ok := value2.value.(string) + + if !ok { + return false, fmt.Errorf("cannot convert %T into string", value2.value) + } + + if s1 != s2 { + hasDiff = true + + return false, stopWalkError + } + case Number.name: + n1, ok := value1.value.(*big.Float) + + if !ok { + return false, fmt.Errorf("cannot convert %T into *big.Float", value1.value) + } + + n2, ok := value2.value.(*big.Float) + + if !ok { + return false, fmt.Errorf("cannot convert %T into *big.Float", value2.value) + } + + if n1.Cmp(n2) != 0 { + hasDiff = true + + return false, stopWalkError + } + case Bool.name: + b1, ok := value1.value.(bool) + + if !ok { + return false, fmt.Errorf("cannot convert %T into bool", value1.value) + } + + b2, ok := value2.value.(bool) + + if !ok { + return false, fmt.Errorf("cannot convert %T into bool", value2.value) + } + + if b1 != b2 { + hasDiff = true + + return false, stopWalkError + } + case DynamicPseudoType.name: + // Let recursion from the walk check the sub-values match + return true, nil + } + + return false, nil + case List, Set, Tuple: + s1, ok := value1.value.([]Value) + + if !ok { + return false, fmt.Errorf("cannot convert %T into []tftypes.Value", value1.value) + } + + s2, ok := value2.value.([]Value) + + if !ok { + return false, fmt.Errorf("cannot convert %T into []tftypes.Value", value2.value) + } + + // we only care about if the lengths match for lists, + // sets, and tuples. If any of the elements differ, + // the recursion of the walk will find them for us. + if len(s1) != len(s2) { + hasDiff = true + + return false, stopWalkError + } + + return true, nil + case Map, Object: + m1, ok := value1.value.(map[string]Value) + + if !ok { + return false, fmt.Errorf("cannot convert %T into map[string]tftypes.Value", value1.value) + } + + m2, ok := value2.value.(map[string]Value) + + if !ok { + return false, fmt.Errorf("cannot convert %T into map[string]tftypes.Value", value2.value) + } + + // we only care about if the number of keys match for maps and + // objects. If any of the elements differ, the recursion of the walk + // will find them for us. + if len(m1) != len(m2) { + hasDiff = true + + return false, stopWalkError + } + + return true, nil + } + + return false, fmt.Errorf("unexpected type %v in Diff at %s", value1.Type(), path) + }) + + return !hasDiff, err +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_json.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_json.go index b889b3bebf500..8a61918e2cc14 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_json.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_json.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( @@ -65,14 +68,19 @@ func jsonUnmarshal(buf []byte, typ Type, p *AttributePath, opts ValueFromJSONOpt case typ.Is(DynamicPseudoType): return jsonUnmarshalDynamicPseudoType(buf, typ, p, opts) case typ.Is(List{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return jsonUnmarshalList(buf, typ.(List).ElementType, p, opts) case typ.Is(Set{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return jsonUnmarshalSet(buf, typ.(Set).ElementType, p, opts) case typ.Is(Map{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return jsonUnmarshalMap(buf, typ.(Map).ElementType, p, opts) case typ.Is(Tuple{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return jsonUnmarshalTuple(buf, typ.(Tuple).ElementTypes, p, opts) case typ.Is(Object{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return jsonUnmarshalObject(buf, typ.(Object).AttributeTypes, p, opts) } return Value{}, p.NewErrorf("unknown type %s", typ) diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_msgpack.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_msgpack.go index c4047aeab2b3d..ed03ef9833d96 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_msgpack.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_msgpack.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tftypes import ( @@ -7,8 +10,8 @@ import ( "math/big" "sort" - msgpack "github.com/vmihailenco/msgpack/v4" - msgpackCodes "github.com/vmihailenco/msgpack/v4/codes" + msgpack "github.com/vmihailenco/msgpack/v5" + msgpackCodes "github.com/vmihailenco/msgpack/v5/msgpcode" ) type msgPackUnknownType struct{} @@ -118,14 +121,19 @@ func msgpackUnmarshal(dec *msgpack.Decoder, typ Type, path *AttributePath) (Valu } return NewValue(Bool, rv), nil case typ.Is(List{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return msgpackUnmarshalList(dec, typ.(List).ElementType, path) case typ.Is(Set{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return msgpackUnmarshalSet(dec, typ.(Set).ElementType, path) case typ.Is(Map{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return msgpackUnmarshalMap(dec, typ.(Map).ElementType, path) case typ.Is(Tuple{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return msgpackUnmarshalTuple(dec, typ.(Tuple).ElementTypes, path) case typ.Is(Object{}): + //nolint:forcetypeassert // Is func above guarantees this type assertion return msgpackUnmarshalObject(dec, typ.(Object).AttributeTypes, path) } return Value{}, path.NewErrorf("unsupported type %s", typ.String()) @@ -364,15 +372,20 @@ func marshalMsgPack(val Value, typ Type, p *AttributePath, enc *msgpack.Encoder) case typ.Is(Bool): return marshalMsgPackBool(val, typ, p, enc) case typ.Is(List{}): - return marshalMsgPackList(val, typ, p, enc) + //nolint:forcetypeassert // Is func above guarantees this type assertion + return marshalMsgPackList(val, typ.(List), p, enc) case typ.Is(Set{}): - return marshalMsgPackSet(val, typ, p, enc) + //nolint:forcetypeassert // Is func above guarantees this type assertion + return marshalMsgPackSet(val, typ.(Set), p, enc) case typ.Is(Map{}): - return marshalMsgPackMap(val, typ, p, enc) + //nolint:forcetypeassert // Is func above guarantees this type assertion + return marshalMsgPackMap(val, typ.(Map), p, enc) case typ.Is(Tuple{}): - return marshalMsgPackTuple(val, typ, p, enc) + //nolint:forcetypeassert // Is func above guarantees this type assertion + return marshalMsgPackTuple(val, typ.(Tuple), p, enc) case typ.Is(Object{}): - return marshalMsgPackObject(val, typ, p, enc) + //nolint:forcetypeassert // Is func above guarantees this type assertion + return marshalMsgPackObject(val, typ.(Object), p, enc) } return fmt.Errorf("unknown type %s", typ) } @@ -459,7 +472,7 @@ func marshalMsgPackBool(val Value, typ Type, p *AttributePath, enc *msgpack.Enco return nil } -func marshalMsgPackList(val Value, typ Type, p *AttributePath, enc *msgpack.Encoder) error { +func marshalMsgPackList(val Value, typ List, p *AttributePath, enc *msgpack.Encoder) error { l, ok := val.value.([]Value) if !ok { return unexpectedValueTypeError(p, l, val.value, typ) @@ -469,7 +482,7 @@ func marshalMsgPackList(val Value, typ Type, p *AttributePath, enc *msgpack.Enco return p.NewErrorf("error encoding list length: %w", err) } for pos, i := range l { - err := marshalMsgPack(i, typ.(List).ElementType, p.WithElementKeyInt(pos), enc) + err := marshalMsgPack(i, typ.ElementType, p.WithElementKeyInt(pos), enc) if err != nil { return err } @@ -477,7 +490,7 @@ func marshalMsgPackList(val Value, typ Type, p *AttributePath, enc *msgpack.Enco return nil } -func marshalMsgPackSet(val Value, typ Type, p *AttributePath, enc *msgpack.Encoder) error { +func marshalMsgPackSet(val Value, typ Set, p *AttributePath, enc *msgpack.Encoder) error { s, ok := val.value.([]Value) if !ok { return unexpectedValueTypeError(p, s, val.value, typ) @@ -487,7 +500,7 @@ func marshalMsgPackSet(val Value, typ Type, p *AttributePath, enc *msgpack.Encod return p.NewErrorf("error encoding set length: %w", err) } for _, i := range s { - err := marshalMsgPack(i, typ.(Set).ElementType, p.WithElementKeyValue(i), enc) + err := marshalMsgPack(i, typ.ElementType, p.WithElementKeyValue(i), enc) if err != nil { return err } @@ -495,7 +508,7 @@ func marshalMsgPackSet(val Value, typ Type, p *AttributePath, enc *msgpack.Encod return nil } -func marshalMsgPackMap(val Value, typ Type, p *AttributePath, enc *msgpack.Encoder) error { +func marshalMsgPackMap(val Value, typ Map, p *AttributePath, enc *msgpack.Encoder) error { m, ok := val.value.(map[string]Value) if !ok { return unexpectedValueTypeError(p, m, val.value, typ) @@ -509,7 +522,7 @@ func marshalMsgPackMap(val Value, typ Type, p *AttributePath, enc *msgpack.Encod if err != nil { return p.NewErrorf("error encoding map key: %w", err) } - err = marshalMsgPack(v, typ.(Map).ElementType, p, enc) + err = marshalMsgPack(v, typ.ElementType, p, enc) if err != nil { return err } @@ -517,12 +530,12 @@ func marshalMsgPackMap(val Value, typ Type, p *AttributePath, enc *msgpack.Encod return nil } -func marshalMsgPackTuple(val Value, typ Type, p *AttributePath, enc *msgpack.Encoder) error { +func marshalMsgPackTuple(val Value, typ Tuple, p *AttributePath, enc *msgpack.Encoder) error { t, ok := val.value.([]Value) if !ok { return unexpectedValueTypeError(p, t, val.value, typ) } - types := typ.(Tuple).ElementTypes + types := typ.ElementTypes err := enc.EncodeArrayLen(len(types)) if err != nil { return p.NewErrorf("error encoding tuple length: %w", err) @@ -537,12 +550,12 @@ func marshalMsgPackTuple(val Value, typ Type, p *AttributePath, enc *msgpack.Enc return nil } -func marshalMsgPackObject(val Value, typ Type, p *AttributePath, enc *msgpack.Encoder) error { +func marshalMsgPackObject(val Value, typ Object, p *AttributePath, enc *msgpack.Encoder) error { o, ok := val.value.(map[string]Value) if !ok { return unexpectedValueTypeError(p, o, val.value, typ) } - types := typ.(Object).AttributeTypes + types := typ.AttributeTypes keys := make([]string, 0, len(types)) for k := range types { keys = append(keys, k) diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_walk.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_walk.go new file mode 100644 index 0000000000000..7e6abb60130b8 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/value_walk.go @@ -0,0 +1,33 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tftypes + +import "fmt" + +// walkAttributePath will return the Value that `path` is pointing to within the +// Value. If an error is returned, the AttributePath returned will indicate +// will indicate the steps that remained to be applied when the error was +// encountered. +// +// This implementation, along with one for Type, could be exported to deprecate +// the overly generic WalkAttributePath function. +func (v Value) walkAttributePath(path *AttributePath) (Value, *AttributePath, error) { + if path == nil || len(path.steps) == 0 { + return v, path, nil + } + + nextValueI, err := v.ApplyTerraform5AttributePathStep(path.NextStep()) + + if err != nil { + return Value{}, path, err + } + + nextValue, ok := nextValueI.(Value) + + if !ok { + return Value{}, path, fmt.Errorf("unknown type %T returned from tftypes.ApplyTerraform5AttributePathStep", nextValueI) + } + + return nextValue.walkAttributePath(NewAttributePathWithSteps(path.steps[1:])) +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/walk.go b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/walk.go index 6b26f8ff3ed08..e06a540abeb3b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/walk.go +++ b/vendor/github.com/hashicorp/terraform-plugin-go/tftypes/walk.go @@ -27,6 +27,18 @@ import ( "errors" ) +// stopWalkError is a well-known error for immediately stopping walk() without +// returning an actual error. +// +// The implementation of walk() will continue walking all attributes/elements +// within an object/collection since the boolean return value of the callback +// function is only intended to signal whether to stop descending into the same +// Value. Changing that behavior would be considered a breaking change. +// +// This could be considered for exporting to give external consumers better +// performance. +var stopWalkError = errors.New("walk stop requested") + // Walk traverses a Value, calling the passed function for every element and // attribute in the Value. The AttributePath passed to the callback function // will identify which attribute or element is currently being surfaced by the @@ -38,65 +50,116 @@ import ( // not matter when the Value that has been surfaced has no elements or // attributes. Walk uses a depth-first traversal. func Walk(val Value, cb func(*AttributePath, Value) (bool, error)) error { - return walk(nil, val, cb) + _, err := walk(NewAttributePath(), val, cb) + + return err } -func walk(path *AttributePath, val Value, cb func(*AttributePath, Value) (bool, error)) error { +// walk is the internal implementation of Walk(). It includes a bool return for +// whether callers should continue walking any remaining Value. +func walk(path *AttributePath, val Value, cb func(*AttributePath, Value) (bool, error)) (bool, error) { shouldContinue, err := cb(path, val) + + if errors.Is(err, stopWalkError) { + return false, nil + } + if err != nil { - return path.NewError(err) + return false, path.NewError(err) } + if !shouldContinue { - return nil + // The callback bool return is intended to signal that this Value should + // no longer be descended. Changing this behavior is a breaking change. + // A stopWalkError can be used to signal that all remaining Value can be + // skipped. + return true, nil } if val.IsNull() || !val.IsKnown() { - return nil + return true, nil } - ty := val.Type() - switch { - case ty.Is(List{}), ty.Is(Set{}), ty.Is(Tuple{}): - var v []Value - err := val.As(&v) - if err != nil { - // should never happen - return path.NewError(err) + switch val.Type().(type) { + case List, Tuple: + v, ok := val.value.([]Value) + + if !ok { + return false, path.NewErrorf("cannot convert %T into []tftypes.Value", val.value) } + for pos, el := range v { - if ty.Is(Set{}) { - path = path.WithElementKeyValue(el) - } else { - path = path.WithElementKeyInt(pos) + elementPath := path.WithElementKeyInt(pos) + shouldContinue, err := walk(elementPath, el, cb) + + if err != nil { + return false, elementPath.NewError(err) } - err = walk(path, el, cb) + + if !shouldContinue { + return false, nil + } + } + case Map: + v, ok := val.value.(map[string]Value) + + if !ok { + return false, path.NewErrorf("cannot convert %T into map[string]tftypes.Value", val.value) + } + + for k, el := range v { + elementPath := path.WithElementKeyString(k) + shouldContinue, err := walk(elementPath, el, cb) + if err != nil { - return path.NewError(err) + return false, elementPath.NewError(err) + } + + if !shouldContinue { + return false, nil } - path = path.WithoutLastStep() } - case ty.Is(Map{}), ty.Is(Object{}): - v := map[string]Value{} - err := val.As(&v) - if err != nil { - // should never happen - return err + case Object: + v, ok := val.value.(map[string]Value) + + if !ok { + return false, path.NewErrorf("cannot convert %T into map[string]tftypes.Value", val.value) } + for k, el := range v { - if ty.Is(Map{}) { - path = path.WithElementKeyString(k) - } else if ty.Is(Object{}) { - path = path.WithAttributeName(k) + attributePath := path.WithAttributeName(k) + shouldContinue, err := walk(attributePath, el, cb) + + if err != nil { + return false, attributePath.NewError(err) + } + + if !shouldContinue { + return false, nil } - err = walk(path, el, cb) + } + case Set: + v, ok := val.value.([]Value) + + if !ok { + return false, path.NewErrorf("cannot convert %T into []tftypes.Value", val.value) + } + + for _, el := range v { + elementPath := path.WithElementKeyValue(el) + shouldContinue, err := walk(elementPath, el, cb) + if err != nil { - return path.NewError(err) + return false, elementPath.NewError(err) + } + + if !shouldContinue { + return false, nil } - path = path.WithoutLastStep() } } - return nil + return true, nil } // Transform uses a callback to mutate a Value. Each element or attribute will @@ -113,85 +176,174 @@ func Transform(val Value, cb func(*AttributePath, Value) (Value, error)) (Value, } func transform(path *AttributePath, val Value, cb func(*AttributePath, Value) (Value, error)) (Value, error) { - var newVal Value - ty := val.Type() - - if ty == nil { + switch val.Type().(type) { + case nil: return val, path.NewError(errors.New("invalid transform: value missing type")) } - switch { - case val.IsNull() || !val.IsKnown(): - newVal = val - case ty.Is(List{}), ty.Is(Set{}), ty.Is(Tuple{}): - var v []Value - err := val.As(&v) - if err != nil { - return val, err - } - if len(v) == 0 { - newVal = val - } else { - elems := make([]Value, 0, len(v)) - for pos, el := range v { - if ty.Is(Set{}) { - path = path.WithElementKeyValue(el) - } else { - path = path.WithElementKeyInt(pos) - } - newEl, err := transform(path, el, cb) - if err != nil { - return val, path.NewError(err) - } - elems = append(elems, newEl) - path = path.WithoutLastStep() - } - newVal, err = newValue(ty, elems) - if err != nil { - return val, path.NewError(err) - } - } - case ty.Is(Map{}), ty.Is(Object{}): - v := map[string]Value{} - err := val.As(&v) - if err != nil { - return val, err - } - if len(v) == 0 { - newVal = val - } else { - elems := map[string]Value{} - for k, el := range v { - if ty.Is(Map{}) { - path = path.WithElementKeyString(k) - } else { - path = path.WithAttributeName(k) - } - newEl, err := transform(path, el, cb) - if err != nil { - return val, path.NewError(err) - } - elems[k] = newEl - path = path.WithoutLastStep() - } - newVal, err = newValue(ty, elems) - if err != nil { - return val, path.NewError(err) - } - } - default: - newVal = val + newVal, err := transformUnderlying(path, val, cb) + + if err != nil { + return val, err } + res, err := cb(path, newVal) + if err != nil { return res, path.NewError(err) } + newTy := newVal.Type() + if newTy == nil { return val, path.NewError(errors.New("invalid transform: new value missing type")) } - if !newTy.UsableAs(ty) { + + if !newTy.UsableAs(val.Type()) { return val, path.NewError(errors.New("invalid transform: value changed type")) } + return res, err } + +// transformUnderlying returns the Value with any underlying attribute or +// element transformations completed. +func transformUnderlying(path *AttributePath, val Value, cb func(*AttributePath, Value) (Value, error)) (Value, error) { + // If the Value is null or unknown, there is nothing to descend. + if val.IsNull() || !val.IsKnown() { + return val, nil + } + + switch val.Type().(type) { + case List, Tuple: + elements, ok := val.value.([]Value) + + if !ok { + return val, path.NewErrorf("cannot convert %T into []tftypes.Value", val.value) + } + + if len(elements) == 0 { + return val, nil + } + + newElements := make([]Value, 0, len(elements)) + + for index, element := range elements { + elementPath := path.WithElementKeyInt(index) + + newElement, err := transform(elementPath, element, cb) + + if err != nil { + return val, elementPath.NewError(err) + } + + newElements = append(newElements, newElement) + } + + newVal, err := newValue(val.Type(), newElements) + + if err != nil { + return val, path.NewError(err) + } + + return newVal, nil + case Map: + elements, ok := val.value.(map[string]Value) + + if !ok { + return val, path.NewErrorf("cannot convert %T into map[string]tftypes.Value", val.value) + } + + if len(elements) == 0 { + return val, nil + } + + newElements := make(map[string]Value, len(elements)) + + for key, element := range elements { + elementPath := path.WithElementKeyString(key) + + newElement, err := transform(elementPath, element, cb) + + if err != nil { + return val, elementPath.NewError(err) + } + + newElements[key] = newElement + } + + newVal, err := newValue(val.Type(), newElements) + + if err != nil { + return val, path.NewError(err) + } + + return newVal, nil + case Object: + attributes, ok := val.value.(map[string]Value) + + if !ok { + return val, path.NewErrorf("cannot convert %T into map[string]tftypes.Value", val.value) + } + + if len(attributes) == 0 { + return val, nil + } + + newAttributes := make(map[string]Value, len(attributes)) + + for name, attribute := range attributes { + attributePath := path.WithAttributeName(name) + + newAttribute, err := transform(attributePath, attribute, cb) + + if err != nil { + return val, attributePath.NewError(err) + } + + newAttributes[name] = newAttribute + } + + newVal, err := newValue(val.Type(), newAttributes) + + if err != nil { + return val, path.NewError(err) + } + + return newVal, nil + case Set: + elements, ok := val.value.([]Value) + + if !ok { + return val, path.NewErrorf("cannot convert %T into []tftypes.Value", val.value) + } + + if len(elements) == 0 { + return val, nil + } + + newElements := make([]Value, 0, len(elements)) + + for _, element := range elements { + elementPath := path.WithElementKeyValue(element) + + newElement, err := transform(elementPath, element, cb) + + if err != nil { + return val, elementPath.NewError(err) + } + + newElements = append(newElements, newElement) + } + + newVal, err := newValue(val.Type(), newElements) + + if err != nil { + return val, path.NewError(err) + } + + return newVal, nil + } + + return val, nil +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/levels.go b/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/levels.go new file mode 100644 index 0000000000000..ed475a13790c5 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/levels.go @@ -0,0 +1,81 @@ +package tfsdklog + +import ( + "sync" + + "github.com/hashicorp/go-hclog" +) + +var ( + // rootLevel stores the effective level of the root SDK logger during + // NewRootSDKLogger where the value is deterministically chosen based on + // environment variables, etc. This call generally happens with each new + // provider RPC request. If the environment variable values changed during + // runtime between calls, then inflight provider requests checking this + // value would receive the most up-to-date value which would potentially + // differ with the actual in-context logger level. This tradeoff would only + // effect the inflight requests and should not be an overall performance + // concern in the case of this level causing more context checks until the + // request is over. + rootLevel hclog.Level = hclog.NoLevel + + // rootLevelMutex is a read-write mutex that protects rootLevel from + // triggering the data race detector. + rootLevelMutex = sync.RWMutex{} + + // subsystemLevels stores the effective level of all subsystem SDK loggers + // during NewSubsystem where the value is deterministically chosen based on + // environment variables, etc. This call generally happens with each new + // provider RPC request. If the environment variable values changed during + // runtime between calls, then inflight provider requests checking this + // value would receive the most up-to-date value which would potentially + // differ with the actual in-context logger level. This tradeoff would only + // effect the inflight requests and should not be an overall performance + // concern in the case of this level causing more context checks until the + // request is over. + subsystemLevels map[string]hclog.Level = make(map[string]hclog.Level) + + // subsystemLevelsMutex is a read-write mutex that protects the + // subsystemLevels map from concurrent read and write panics. + subsystemLevelsMutex = sync.RWMutex{} +) + +// subsystemWouldLog returns true if the subsystem SDK logger would emit a log +// at the given level. This is performed outside the context-based logger for +// performance. +func subsystemWouldLog(subsystem string, level hclog.Level) bool { + subsystemLevelsMutex.RLock() + + setLevel, ok := subsystemLevels[subsystem] + + subsystemLevelsMutex.RUnlock() + + if !ok { + return false + } + + return wouldLog(setLevel, level) +} + +// rootWouldLog returns true if the root SDK logger would emit a log at the +// given level. This is performed outside the context-based logger for +// performance. +func rootWouldLog(level hclog.Level) bool { + rootLevelMutex.RLock() + + setLevel := rootLevel + + rootLevelMutex.RUnlock() + + return wouldLog(setLevel, level) +} + +// wouldLog returns true if the set level would emit a log at the given +// level. This is performed outside the context-based logger for performance. +func wouldLog(setLevel, checkLevel hclog.Level) bool { + if checkLevel == hclog.Off { + return false + } + + return checkLevel >= setLevel +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/sdk.go b/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/sdk.go index 2891ddf29c0b6..4ffb2cc2f53bd 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/sdk.go +++ b/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/sdk.go @@ -35,6 +35,14 @@ func NewRootSDKLogger(ctx context.Context, options ...logging.Option) context.Co if opts.Level == hclog.NoLevel { opts.Level = hclog.Trace } + + // Cache root logger level outside context for performance reasons. + rootLevelMutex.Lock() + + rootLevel = opts.Level + + rootLevelMutex.Unlock() + loggerOptions := &hclog.LoggerOptions{ Name: opts.Name, Level: opts.Level, diff --git a/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/subsystem.go b/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/subsystem.go index 4d2a1a1a54a5d..0aeb5463cab02 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/subsystem.go +++ b/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/subsystem.go @@ -58,6 +58,13 @@ func NewSubsystem(ctx context.Context, subsystem string, options ...logging.Opti subLogger = hclog.New(subLoggerOptions) } + // Cache subsystem logger level outside context for performance reasons. + subsystemLevelsMutex.Lock() + + subsystemLevels[subsystem] = subLoggerTFLoggerOpts.Level + + subsystemLevelsMutex.Unlock() + // Set the configured log level if subLoggerTFLoggerOpts.Level != hclog.NoLevel { subLogger.SetLevel(subLoggerTFLoggerOpts.Level) @@ -97,6 +104,10 @@ func SubsystemSetField(ctx context.Context, subsystem, key string, value interfa // subsystem logger, e.g. by the `SubsystemSetField()` function, and across // multiple maps. func SubsystemTrace(ctx context.Context, subsystem, msg string, additionalFields ...map[string]interface{}) { + if !subsystemWouldLog(subsystem, hclog.Trace) { + return + } + logger := logging.GetSDKSubsystemLogger(ctx, subsystem) if logger == nil { if logging.GetSDKRootLogger(ctx) == nil { @@ -122,6 +133,10 @@ func SubsystemTrace(ctx context.Context, subsystem, msg string, additionalFields // subsystem logger, e.g. by the `SubsystemSetField()` function, and across // multiple maps. func SubsystemDebug(ctx context.Context, subsystem, msg string, additionalFields ...map[string]interface{}) { + if !subsystemWouldLog(subsystem, hclog.Debug) { + return + } + logger := logging.GetSDKSubsystemLogger(ctx, subsystem) if logger == nil { if logging.GetSDKRootLogger(ctx) == nil { @@ -147,6 +162,10 @@ func SubsystemDebug(ctx context.Context, subsystem, msg string, additionalFields // subsystem logger, e.g. by the `SubsystemSetField()` function, and across // multiple maps. func SubsystemInfo(ctx context.Context, subsystem, msg string, additionalFields ...map[string]interface{}) { + if !subsystemWouldLog(subsystem, hclog.Info) { + return + } + logger := logging.GetSDKSubsystemLogger(ctx, subsystem) if logger == nil { if logging.GetSDKRootLogger(ctx) == nil { @@ -172,6 +191,10 @@ func SubsystemInfo(ctx context.Context, subsystem, msg string, additionalFields // subsystem logger, e.g. by the `SubsystemSetField()` function, and across // multiple maps. func SubsystemWarn(ctx context.Context, subsystem, msg string, additionalFields ...map[string]interface{}) { + if !subsystemWouldLog(subsystem, hclog.Warn) { + return + } + logger := logging.GetSDKSubsystemLogger(ctx, subsystem) if logger == nil { if logging.GetSDKRootLogger(ctx) == nil { @@ -197,6 +220,10 @@ func SubsystemWarn(ctx context.Context, subsystem, msg string, additionalFields // subsystem logger, e.g. by the `SubsystemSetField()` function, and across // multiple maps. func SubsystemError(ctx context.Context, subsystem, msg string, additionalFields ...map[string]interface{}) { + if !subsystemWouldLog(subsystem, hclog.Error) { + return + } + logger := logging.GetSDKSubsystemLogger(ctx, subsystem) if logger == nil { if logging.GetSDKRootLogger(ctx) == nil { diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/diag/diagnostic.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/diag/diagnostic.go index 3b1ced344f5d7..5a53304269754 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/diag/diagnostic.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/diag/diagnostic.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package diag import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/diag/helpers.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/diag/helpers.go index 08e9291784d80..4f2b7a8833209 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/diag/helpers.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/diag/helpers.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package diag import "fmt" diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/compose.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/compose.go index 4aa450199c85f..0da82ce49e645 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/compose.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/compose.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package customdiff import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/computed.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/computed.go index c65a56401cc00..f432b656815e9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/computed.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/computed.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package customdiff import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/condition.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/condition.go index 40c06e733ff03..452d3d25b3f8b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/condition.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/condition.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package customdiff import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/doc.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/doc.go index c6ad1199cdc6f..a6b39360afac1 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package customdiff provides a set of reusable and composable functions // to enable more "declarative" use of the CustomizeDiff mechanism available // for resources in package helper/schema. diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/force_new.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/force_new.go index f94257b730334..f5e35debdac6e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/force_new.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/force_new.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package customdiff import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/validate.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/validate.go index ad381fb8578ae..c8e71d01e507c 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/validate.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff/validate.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package customdiff import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/logging.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/logging.go index 74eb7f6667ae0..ea0764d13ad22 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/logging.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/logging.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/logging_http_transport.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/logging_http_transport.go index 335e1784e2248..ca8ba4ecce980 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/logging_http_transport.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/logging_http_transport.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/transport.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/transport.go index bda3813d9619f..774bc480f6984 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/transport.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging/transport.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/error.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/error.go new file mode 100644 index 0000000000000..789c712f51e10 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/error.go @@ -0,0 +1,94 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package retry + +import ( + "fmt" + "strings" + "time" +) + +type NotFoundError struct { + LastError error + LastRequest interface{} + LastResponse interface{} + Message string + Retries int +} + +func (e *NotFoundError) Error() string { + if e.Message != "" { + return e.Message + } + + if e.Retries > 0 { + return fmt.Sprintf("couldn't find resource (%d retries)", e.Retries) + } + + return "couldn't find resource" +} + +func (e *NotFoundError) Unwrap() error { + return e.LastError +} + +// UnexpectedStateError is returned when Refresh returns a state that's neither in Target nor Pending +type UnexpectedStateError struct { + LastError error + State string + ExpectedState []string +} + +func (e *UnexpectedStateError) Error() string { + return fmt.Sprintf( + "unexpected state '%s', wanted target '%s'. last error: %s", + e.State, + strings.Join(e.ExpectedState, ", "), + e.LastError, + ) +} + +func (e *UnexpectedStateError) Unwrap() error { + return e.LastError +} + +// TimeoutError is returned when WaitForState times out +type TimeoutError struct { + LastError error + LastState string + Timeout time.Duration + ExpectedState []string +} + +func (e *TimeoutError) Error() string { + expectedState := "resource to be gone" + if len(e.ExpectedState) > 0 { + expectedState = fmt.Sprintf("state to become '%s'", strings.Join(e.ExpectedState, ", ")) + } + + extraInfo := make([]string, 0) + if e.LastState != "" { + extraInfo = append(extraInfo, fmt.Sprintf("last state: '%s'", e.LastState)) + } + if e.Timeout > 0 { + extraInfo = append(extraInfo, fmt.Sprintf("timeout: %s", e.Timeout.String())) + } + + suffix := "" + if len(extraInfo) > 0 { + suffix = fmt.Sprintf(" (%s)", strings.Join(extraInfo, ", ")) + } + + if e.LastError != nil { + return fmt.Sprintf("timeout while waiting for %s%s: %s", + expectedState, suffix, e.LastError) + } + + return fmt.Sprintf("timeout while waiting for %s%s", + expectedState, suffix) +} + +func (e *TimeoutError) Unwrap() error { + return e.LastError +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/state.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/state.go new file mode 100644 index 0000000000000..4780090d9561d --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/state.go @@ -0,0 +1,283 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package retry + +import ( + "context" + "log" + "time" +) + +var refreshGracePeriod = 30 * time.Second + +// StateRefreshFunc is a function type used for StateChangeConf that is +// responsible for refreshing the item being watched for a state change. +// +// It returns three results. `result` is any object that will be returned +// as the final object after waiting for state change. This allows you to +// return the final updated object, for example an EC2 instance after refreshing +// it. A nil result represents not found. +// +// `state` is the latest state of that object. And `err` is any error that +// may have happened while refreshing the state. +type StateRefreshFunc func() (result interface{}, state string, err error) + +// StateChangeConf is the configuration struct used for `WaitForState`. +type StateChangeConf struct { + Delay time.Duration // Wait this time before starting checks + Pending []string // States that are "allowed" and will continue trying + Refresh StateRefreshFunc // Refreshes the current state + Target []string // Target state + Timeout time.Duration // The amount of time to wait before timeout + MinTimeout time.Duration // Smallest time to wait before refreshes + PollInterval time.Duration // Override MinTimeout/backoff and only poll this often + NotFoundChecks int // Number of times to allow not found (nil result from Refresh) + + // This is to work around inconsistent APIs + ContinuousTargetOccurence int // Number of times the Target state has to occur continuously +} + +// WaitForStateContext watches an object and waits for it to achieve the state +// specified in the configuration using the specified Refresh() func, +// waiting the number of seconds specified in the timeout configuration. +// +// If the Refresh function returns an error, exit immediately with that error. +// +// If the Refresh function returns a state other than the Target state or one +// listed in Pending, return immediately with an error. +// +// If the Timeout is exceeded before reaching the Target state, return an +// error. +// +// Otherwise, the result is the result of the first call to the Refresh function to +// reach the target state. +// +// Cancellation from the passed in context will cancel the refresh loop +func (conf *StateChangeConf) WaitForStateContext(ctx context.Context) (interface{}, error) { + log.Printf("[DEBUG] Waiting for state to become: %s", conf.Target) + + notfoundTick := 0 + targetOccurence := 0 + + // Set a default for times to check for not found + if conf.NotFoundChecks == 0 { + conf.NotFoundChecks = 20 + } + + if conf.ContinuousTargetOccurence == 0 { + conf.ContinuousTargetOccurence = 1 + } + + type Result struct { + Result interface{} + State string + Error error + Done bool + } + + // Read every result from the refresh loop, waiting for a positive result.Done. + resCh := make(chan Result, 1) + // cancellation channel for the refresh loop + cancelCh := make(chan struct{}) + + result := Result{} + + go func() { + defer close(resCh) + + select { + case <-time.After(conf.Delay): + case <-cancelCh: + return + } + + // start with 0 delay for the first loop + var wait time.Duration + + for { + // store the last result + resCh <- result + + // wait and watch for cancellation + select { + case <-cancelCh: + return + case <-time.After(wait): + // first round had no wait + if wait == 0 { + wait = 100 * time.Millisecond + } + } + + res, currentState, err := conf.Refresh() + result = Result{ + Result: res, + State: currentState, + Error: err, + } + + if err != nil { + resCh <- result + return + } + + // If we're waiting for the absence of a thing, then return + if res == nil && len(conf.Target) == 0 { + targetOccurence++ + if conf.ContinuousTargetOccurence == targetOccurence { + result.Done = true + resCh <- result + return + } + continue + } + + if res == nil { + // If we didn't find the resource, check if we have been + // not finding it for awhile, and if so, report an error. + notfoundTick++ + if notfoundTick > conf.NotFoundChecks { + result.Error = &NotFoundError{ + LastError: err, + Retries: notfoundTick, + } + resCh <- result + return + } + } else { + // Reset the counter for when a resource isn't found + notfoundTick = 0 + found := false + + for _, allowed := range conf.Target { + if currentState == allowed { + found = true + targetOccurence++ + if conf.ContinuousTargetOccurence == targetOccurence { + result.Done = true + resCh <- result + return + } + continue + } + } + + for _, allowed := range conf.Pending { + if currentState == allowed { + found = true + targetOccurence = 0 + break + } + } + + if !found && len(conf.Pending) > 0 { + result.Error = &UnexpectedStateError{ + LastError: err, + State: result.State, + ExpectedState: conf.Target, + } + resCh <- result + return + } + } + + // Wait between refreshes using exponential backoff, except when + // waiting for the target state to reoccur. + if targetOccurence == 0 { + wait *= 2 + } + + // If a poll interval has been specified, choose that interval. + // Otherwise bound the default value. + if conf.PollInterval > 0 && conf.PollInterval < 180*time.Second { + wait = conf.PollInterval + } else { + if wait < conf.MinTimeout { + wait = conf.MinTimeout + } else if wait > 10*time.Second { + wait = 10 * time.Second + } + } + + log.Printf("[TRACE] Waiting %s before next try", wait) + } + }() + + // store the last value result from the refresh loop + lastResult := Result{} + + timeout := time.After(conf.Timeout) + for { + select { + case r, ok := <-resCh: + // channel closed, so return the last result + if !ok { + return lastResult.Result, lastResult.Error + } + + // we reached the intended state + if r.Done { + return r.Result, r.Error + } + + // still waiting, store the last result + lastResult = r + case <-ctx.Done(): + close(cancelCh) + return nil, ctx.Err() + case <-timeout: + log.Printf("[WARN] WaitForState timeout after %s", conf.Timeout) + log.Printf("[WARN] WaitForState starting %s refresh grace period", refreshGracePeriod) + + // cancel the goroutine and start our grace period timer + close(cancelCh) + timeout := time.After(refreshGracePeriod) + + // we need a for loop and a label to break on, because we may have + // an extra response value to read, but still want to wait for the + // channel to close. + forSelect: + for { + select { + case r, ok := <-resCh: + if r.Done { + // the last refresh loop reached the desired state + return r.Result, r.Error + } + + if !ok { + // the goroutine returned + break forSelect + } + + // target state not reached, save the result for the + // TimeoutError and wait for the channel to close + lastResult = r + case <-ctx.Done(): + log.Println("[ERROR] Context cancelation detected, abandoning grace period") + break forSelect + case <-timeout: + log.Println("[ERROR] WaitForState exceeded refresh grace period") + break forSelect + } + } + + return nil, &TimeoutError{ + LastError: lastResult.Error, + LastState: lastResult.State, + Timeout: conf.Timeout, + ExpectedState: conf.Target, + } + } + } +} + +// WaitForState watches an object and waits for it to achieve the state +// specified in the configuration using the specified Refresh() func, +// waiting the number of seconds specified in the timeout configuration. +// +// Deprecated: Please use WaitForStateContext to ensure proper plugin shutdown +func (conf *StateChangeConf) WaitForState() (interface{}, error) { + return conf.WaitForStateContext(context.Background()) +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/wait.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/wait.go new file mode 100644 index 0000000000000..c8d2de1439885 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry/wait.go @@ -0,0 +1,116 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package retry + +import ( + "context" + "errors" + "sync" + "time" +) + +// RetryContext is a basic wrapper around StateChangeConf that will just retry +// a function until it no longer returns an error. +// +// Cancellation from the passed in context will propagate through to the +// underlying StateChangeConf +func RetryContext(ctx context.Context, timeout time.Duration, f RetryFunc) error { + // These are used to pull the error out of the function; need a mutex to + // avoid a data race. + var resultErr error + var resultErrMu sync.Mutex + + c := &StateChangeConf{ + Pending: []string{"retryableerror"}, + Target: []string{"success"}, + Timeout: timeout, + MinTimeout: 500 * time.Millisecond, + Refresh: func() (interface{}, string, error) { + rerr := f() + + resultErrMu.Lock() + defer resultErrMu.Unlock() + + if rerr == nil { + resultErr = nil + return 42, "success", nil + } + + resultErr = rerr.Err + + if rerr.Retryable { + return 42, "retryableerror", nil + } + return nil, "quit", rerr.Err + }, + } + + _, waitErr := c.WaitForStateContext(ctx) + + // Need to acquire the lock here to be able to avoid race using resultErr as + // the return value + resultErrMu.Lock() + defer resultErrMu.Unlock() + + // resultErr may be nil because the wait timed out and resultErr was never + // set; this is still an error + if resultErr == nil { + return waitErr + } + // resultErr takes precedence over waitErr if both are set because it is + // more likely to be useful + return resultErr +} + +// Retry is a basic wrapper around StateChangeConf that will just retry +// a function until it no longer returns an error. +// +// Deprecated: Please use RetryContext to ensure proper plugin shutdown +func Retry(timeout time.Duration, f RetryFunc) error { + return RetryContext(context.Background(), timeout, f) +} + +// RetryFunc is the function retried until it succeeds. +type RetryFunc func() *RetryError + +// RetryError is the required return type of RetryFunc. It forces client code +// to choose whether or not a given error is retryable. +type RetryError struct { + Err error + Retryable bool +} + +func (e *RetryError) Unwrap() error { + return e.Err +} + +// RetryableError is a helper to create a RetryError that's retryable from a +// given error. To prevent logic errors, will return an error when passed a +// nil error. +func RetryableError(err error) *RetryError { + if err == nil { + return &RetryError{ + Err: errors.New("empty retryable error received. " + + "This is a bug with the Terraform provider and should be " + + "reported as a GitHub issue in the provider repository."), + Retryable: false, + } + } + return &RetryError{Err: err, Retryable: true} +} + +// NonRetryableError is a helper to create a RetryError that's _not_ retryable +// from a given error. To prevent logic errors, will return an error when +// passed a nil error. +func NonRetryableError(err error) *RetryError { + if err == nil { + return &RetryError{ + Err: errors.New("empty non-retryable error received. " + + "This is a bug with the Terraform provider and should be " + + "reported as a GitHub issue in the provider repository."), + Retryable: false, + } + } + return &RetryError{Err: err, Retryable: false} +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/context.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/context.go index ed8d0964bfa8c..bced9ead54d79 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/context.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/context.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema type Key string diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/core_schema.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/core_schema.go index bb1fc1dbe5448..736af218da24c 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/core_schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/core_schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( @@ -364,5 +367,5 @@ func (r *Resource) CoreConfigSchema() *configschema.Block { } func (r *Resource) coreConfigSchema() *configschema.Block { - return schemaMap(r.Schema).CoreConfigSchema() + return schemaMap(r.SchemaMap()).CoreConfigSchema() } diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/data_source_resource_shim.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/data_source_resource_shim.go index 8d93750aede24..3a01c0f32f65d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/data_source_resource_shim.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/data_source_resource_shim.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/equal.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/equal.go index d5e20e038897e..92a02b3b3ac3c 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/equal.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/equal.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema // Equal is an interface that checks for deep equality between two objects. diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader.go index 855bc4028a161..6aae74d95b635 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( @@ -81,7 +84,7 @@ func addrToSchema(addr []string, schemaMap map[string]*Schema) []*Schema { case *Resource: current = &Schema{ Type: typeObject, - Elem: v.Schema, + Elem: v.SchemaMap(), } case *Schema: current = v diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_config.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_config.go index cd4a993a35ce5..df317c20bb0bd 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_config.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_config.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( @@ -300,7 +303,7 @@ func (r *ConfigFieldReader) hasComputedSubKeys(key string, schema *Schema) bool switch t := schema.Elem.(type) { case *Resource: - for k, schema := range t.Schema { + for k, schema := range t.SchemaMap() { if r.Config.IsComputed(prefix + k) { return true } diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_diff.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_diff.go index ca3b714b1dd5c..c9da00e911994 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_diff.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_diff.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_map.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_map.go index 6fa1915227405..6697606c6f29e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_map.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_map.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_multi.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_multi.go index 89ad3a86f2b96..da4c9c81500d5 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_multi.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_reader_multi.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_writer.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_writer.go index 9abc41b54f40b..be4fae5060eb3 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_writer.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_writer.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema // FieldWriters are responsible for writing fields by address into diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_writer_map.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_writer_map.go index 39c708b27fa0d..c9147cec191aa 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_writer_map.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/field_writer_map.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/grpc_provider.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/grpc_provider.go index 17a0de4cc63c5..7fb59e082cd39 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/grpc_provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/grpc_provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( @@ -64,14 +67,47 @@ func (s *GRPCProviderServer) StopContext(ctx context.Context) context.Context { return stoppable } +func (s *GRPCProviderServer) serverCapabilities() *tfprotov5.ServerCapabilities { + return &tfprotov5.ServerCapabilities{ + GetProviderSchemaOptional: true, + } +} + +func (s *GRPCProviderServer) GetMetadata(ctx context.Context, req *tfprotov5.GetMetadataRequest) (*tfprotov5.GetMetadataResponse, error) { + ctx = logging.InitContext(ctx) + + logging.HelperSchemaTrace(ctx, "Getting provider metadata") + + resp := &tfprotov5.GetMetadataResponse{ + DataSources: make([]tfprotov5.DataSourceMetadata, 0, len(s.provider.DataSourcesMap)), + Resources: make([]tfprotov5.ResourceMetadata, 0, len(s.provider.ResourcesMap)), + ServerCapabilities: s.serverCapabilities(), + } + + for typeName := range s.provider.DataSourcesMap { + resp.DataSources = append(resp.DataSources, tfprotov5.DataSourceMetadata{ + TypeName: typeName, + }) + } + + for typeName := range s.provider.ResourcesMap { + resp.Resources = append(resp.Resources, tfprotov5.ResourceMetadata{ + TypeName: typeName, + }) + } + + return resp, nil +} + func (s *GRPCProviderServer) GetProviderSchema(ctx context.Context, req *tfprotov5.GetProviderSchemaRequest) (*tfprotov5.GetProviderSchemaResponse, error) { ctx = logging.InitContext(ctx) logging.HelperSchemaTrace(ctx, "Getting provider schema") resp := &tfprotov5.GetProviderSchemaResponse{ - ResourceSchemas: make(map[string]*tfprotov5.Schema), - DataSourceSchemas: make(map[string]*tfprotov5.Schema), + DataSourceSchemas: make(map[string]*tfprotov5.Schema, len(s.provider.DataSourcesMap)), + ResourceSchemas: make(map[string]*tfprotov5.Schema, len(s.provider.ResourcesMap)), + ServerCapabilities: s.serverCapabilities(), } resp.Provider = &tfprotov5.Schema{ @@ -659,20 +695,23 @@ func (s *GRPCProviderServer) PlanResourceChange(ctx context.Context, req *tfprot ctx = logging.InitContext(ctx) resp := &tfprotov5.PlanResourceChangeResponse{} + res, ok := s.provider.ResourcesMap[req.TypeName] + if !ok { + resp.Diagnostics = convert.AppendProtoDiag(ctx, resp.Diagnostics, fmt.Errorf("unknown resource type: %s", req.TypeName)) + return resp, nil + } + schemaBlock := s.getResourceSchemaBlock(req.TypeName) + // This is a signal to Terraform Core that we're doing the best we can to // shim the legacy type system of the SDK onto the Terraform type system // but we need it to cut us some slack. This setting should not be taken // forward to any new SDK implementations, since setting it prevents us // from catching certain classes of provider bug that can lead to // confusing downstream errors. - resp.UnsafeToUseLegacyTypeSystem = true //nolint:staticcheck - - res, ok := s.provider.ResourcesMap[req.TypeName] - if !ok { - resp.Diagnostics = convert.AppendProtoDiag(ctx, resp.Diagnostics, fmt.Errorf("unknown resource type: %s", req.TypeName)) - return resp, nil + if !res.EnableLegacyTypeSystemPlanErrors { + //nolint:staticcheck // explicitly for this SDK + resp.UnsafeToUseLegacyTypeSystem = true } - schemaBlock := s.getResourceSchemaBlock(req.TypeName) priorStateVal, err := msgpack.Unmarshal(req.PriorState.MsgPack, schemaBlock.ImpliedType()) if err != nil { @@ -1072,7 +1111,10 @@ func (s *GRPCProviderServer) ApplyResourceChange(ctx context.Context, req *tfpro // forward to any new SDK implementations, since setting it prevents us // from catching certain classes of provider bug that can lead to // confusing downstream errors. - resp.UnsafeToUseLegacyTypeSystem = true //nolint:staticcheck + if !res.EnableLegacyTypeSystemApplyErrors { + //nolint:staticcheck // explicitly for this SDK + resp.UnsafeToUseLegacyTypeSystem = true + } return resp, nil } @@ -1300,7 +1342,7 @@ func stripResourceModifiers(r *Resource) *Resource { newResource.CustomizeDiff = nil newResource.Schema = map[string]*Schema{} - for k, s := range r.Schema { + for k, s := range r.SchemaMap() { newResource.Schema[k] = stripSchema(s) } diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/json.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/json.go index 265099a6b6f2d..8cf22a51855dc 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/json.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/json.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/provider.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/provider.go index 91a21b3890896..75e1a7c42e1a9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource.go index 28a7600b07745..7564a0aff23c9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( @@ -53,13 +56,25 @@ var ReservedResourceFields = []string{ // being implemented. type Resource struct { // Schema is the structure and type information for this component. This - // field is required for all Resource concepts. + // field, or SchemaFunc, is required for all Resource concepts. To prevent + // storing all schema information in memory for the lifecycle of a provider, + // use SchemaFunc instead. // // The keys of this map are the names used in a practitioner configuration, // such as the attribute or block name. The values describe the structure // and type information of that attribute or block. Schema map[string]*Schema + // SchemaFunc is the structure and type information for this component. This + // field, or Schema, is required for all Resource concepts. Use this field + // instead of Schema on top level Resource declarations to prevent storing + // all schema information in memory for the lifecycle of a provider. + // + // The keys of this map are the names used in a practitioner configuration, + // such as the attribute or block name. The values describe the structure + // and type information of that attribute or block. + SchemaFunc func() map[string]*Schema + // SchemaVersion is the version number for this resource's Schema // definition. This field is only valid when the Resource is a managed // resource. @@ -580,6 +595,62 @@ type Resource struct { // See github.com/hashicorp/terraform-plugin-sdk/issues/655 for more // details. UseJSONNumber bool + + // EnableLegacyTypeSystemApplyErrors when enabled will prevent the SDK from + // setting the legacy type system flag in the protocol during + // ApplyResourceChange (Create, Update, and Delete) operations. Before + // enabling this setting in a production release for a resource, the + // resource should be exhaustively acceptance tested with the setting + // enabled in an environment where it is easy to clean up resources, + // potentially outside of Terraform, since these errors may be unavoidable + // in certain cases. + // + // Disabling the legacy type system protocol flag is an unsafe operation + // when using this SDK as there are certain unavoidable behaviors imposed + // by the SDK, however this option is surfaced to allow provider developers + // to try to discover fixable data inconsistency errors more easily. + // Terraform, when encountering an enabled legacy type system protocol flag, + // will demote certain schema and data consistency errors into warning logs + // containing the text "legacy plugin SDK". Some errors for errant schema + // definitions, such as when an attribute is not marked as Computed as + // expected by Terraform, can only be resolved by migrating to + // terraform-plugin-framework since that SDK does not impose behavior + // changes with it enabled. However, data-based errors typically require + // logic fixes that should be applicable for both SDKs to be resolved. + EnableLegacyTypeSystemApplyErrors bool + + // EnableLegacyTypeSystemPlanErrors when enabled will prevent the SDK from + // setting the legacy type system flag in the protocol during + // PlanResourceChange operations. Before enabling this setting in a + // production release for a resource, the resource should be exhaustively + // acceptance tested with the setting enabled in an environment where it is + // easy to clean up resources, potentially outside of Terraform, since these + // errors may be unavoidable in certain cases. + // + // Disabling the legacy type system protocol flag is an unsafe operation + // when using this SDK as there are certain unavoidable behaviors imposed + // by the SDK, however this option is surfaced to allow provider developers + // to try to discover fixable data inconsistency errors more easily. + // Terraform, when encountering an enabled legacy type system protocol flag, + // will demote certain schema and data consistency errors into warning logs + // containing the text "legacy plugin SDK". Some errors for errant schema + // definitions, such as when an attribute is not marked as Computed as + // expected by Terraform, can only be resolved by migrating to + // terraform-plugin-framework since that SDK does not impose behavior + // changes with it enabled. However, data-based errors typically require + // logic fixes that should be applicable for both SDKs to be resolved. + EnableLegacyTypeSystemPlanErrors bool +} + +// SchemaMap returns the schema information for this Resource whether it is +// defined via the SchemaFunc field or Schema field. The SchemaFunc field, if +// defined, takes precedence over the Schema field. +func (r *Resource) SchemaMap() map[string]*Schema { + if r.SchemaFunc != nil { + return r.SchemaFunc() + } + + return r.Schema } // ShimInstanceStateFromValue converts a cty.Value to a @@ -591,7 +662,7 @@ func (r *Resource) ShimInstanceStateFromValue(state cty.Value) (*terraform.Insta // We now rebuild the state through the ResourceData, so that the set indexes // match what helper/schema expects. - data, err := schemaMap(r.Schema).Data(s, nil) + data, err := schemaMap(r.SchemaMap()).Data(s, nil) if err != nil { return nil, err } @@ -764,7 +835,8 @@ func (r *Resource) Apply( s *terraform.InstanceState, d *terraform.InstanceDiff, meta interface{}) (*terraform.InstanceState, diag.Diagnostics) { - data, err := schemaMap(r.Schema).Data(s, d) + schema := schemaMap(r.SchemaMap()) + data, err := schema.Data(s, d) if err != nil { return s, diag.FromErr(err) } @@ -821,7 +893,7 @@ func (r *Resource) Apply( } // Reset the data to be stateless since we just destroyed - data, err = schemaMap(r.Schema).Data(nil, d) + data, err = schema.Data(nil, d) if err != nil { return nil, append(diags, diag.FromErr(err)...) } @@ -865,7 +937,7 @@ func (r *Resource) Diff( return nil, fmt.Errorf("[ERR] Error decoding timeout: %s", err) } - instanceDiff, err := schemaMap(r.Schema).Diff(ctx, s, c, r.CustomizeDiff, meta, true) + instanceDiff, err := schemaMap(r.SchemaMap()).Diff(ctx, s, c, r.CustomizeDiff, meta, true) if err != nil { return instanceDiff, err } @@ -887,7 +959,7 @@ func (r *Resource) SimpleDiff( c *terraform.ResourceConfig, meta interface{}) (*terraform.InstanceDiff, error) { - instanceDiff, err := schemaMap(r.Schema).Diff(ctx, s, c, r.CustomizeDiff, meta, false) + instanceDiff, err := schemaMap(r.SchemaMap()).Diff(ctx, s, c, r.CustomizeDiff, meta, false) if err != nil { return instanceDiff, err } @@ -912,7 +984,7 @@ func (r *Resource) SimpleDiff( // Validate validates the resource configuration against the schema. func (r *Resource) Validate(c *terraform.ResourceConfig) diag.Diagnostics { - diags := schemaMap(r.Schema).Validate(c) + diags := schemaMap(r.SchemaMap()).Validate(c) if r.DeprecationMessage != "" { diags = append(diags, diag.Diagnostic{ @@ -934,7 +1006,7 @@ func (r *Resource) ReadDataApply( ) (*terraform.InstanceState, diag.Diagnostics) { // Data sources are always built completely from scratch // on each read, so the source state is always nil. - data, err := schemaMap(r.Schema).Data(nil, d) + data, err := schemaMap(r.SchemaMap()).Data(nil, d) if err != nil { return nil, diag.FromErr(err) } @@ -975,10 +1047,12 @@ func (r *Resource) RefreshWithoutUpgrade( } } + schema := schemaMap(r.SchemaMap()) + if r.Exists != nil { // Make a copy of data so that if it is modified it doesn't // affect our Read later. - data, err := schemaMap(r.Schema).Data(s, nil) + data, err := schema.Data(s, nil) if err != nil { return s, diag.FromErr(err) } @@ -1001,7 +1075,7 @@ func (r *Resource) RefreshWithoutUpgrade( } } - data, err := schemaMap(r.Schema).Data(s, nil) + data, err := schema.Data(s, nil) if err != nil { return s, diag.FromErr(err) } @@ -1020,7 +1094,7 @@ func (r *Resource) RefreshWithoutUpgrade( state = nil } - schemaMap(r.Schema).handleDiffSuppressOnRefresh(ctx, s, state) + schema.handleDiffSuppressOnRefresh(ctx, s, state) return r.recordCurrentSchemaVersion(state), diags } @@ -1066,13 +1140,14 @@ func (r *Resource) InternalValidate(topSchemaMap schemaMap, writable bool) error } } + schema := schemaMap(r.SchemaMap()) tsm := topSchemaMap if r.isTopLevel() && writable { // All non-Computed attributes must be ForceNew if Update is not defined if !r.updateFuncSet() { nonForceNewAttrs := make([]string, 0) - for k, v := range r.Schema { + for k, v := range schema { if !v.ForceNew && !v.Computed { nonForceNewAttrs = append(nonForceNewAttrs, k) } @@ -1083,19 +1158,19 @@ func (r *Resource) InternalValidate(topSchemaMap schemaMap, writable bool) error } } else { nonUpdateableAttrs := make([]string, 0) - for k, v := range r.Schema { + for k, v := range schema { if v.ForceNew || v.Computed && !v.Optional { nonUpdateableAttrs = append(nonUpdateableAttrs, k) } } - updateableAttrs := len(r.Schema) - len(nonUpdateableAttrs) + updateableAttrs := len(schema) - len(nonUpdateableAttrs) if updateableAttrs == 0 { return fmt.Errorf( "All fields are ForceNew or Computed w/out Optional, Update is superfluous") } } - tsm = schemaMap(r.Schema) + tsm = schema // Destroy, and Read are required if !r.readFuncSet() { @@ -1154,7 +1229,7 @@ func (r *Resource) InternalValidate(topSchemaMap schemaMap, writable bool) error // Data source if r.isTopLevel() && !writable { - tsm = schemaMap(r.Schema) + tsm = schema for k := range tsm { if isReservedDataSourceFieldName(k) { return fmt.Errorf("%s is a reserved field name", k) @@ -1162,6 +1237,10 @@ func (r *Resource) InternalValidate(topSchemaMap schemaMap, writable bool) error } } + if r.SchemaFunc != nil && r.Schema != nil { + return fmt.Errorf("SchemaFunc and Schema should not both be set") + } + // check context funcs are not set alongside their nonctx counterparts if r.CreateContext != nil && r.Create != nil { return fmt.Errorf("CreateContext and Create should not both be set") @@ -1204,7 +1283,7 @@ func (r *Resource) InternalValidate(topSchemaMap schemaMap, writable bool) error return fmt.Errorf("Delete and DeleteWithoutTimeout should not both be set") } - return schemaMap(r.Schema).InternalValidate(tsm) + return schema.InternalValidate(tsm) } func isReservedDataSourceFieldName(name string) bool { @@ -1251,7 +1330,7 @@ func isReservedResourceFieldName(name string) bool { // // This function is useful for unit tests and ResourceImporter functions. func (r *Resource) Data(s *terraform.InstanceState) *ResourceData { - result, err := schemaMap(r.Schema).Data(s, nil) + result, err := schemaMap(r.SchemaMap()).Data(s, nil) if err != nil { // At the time of writing, this isn't possible (Data never returns // non-nil errors). We panic to find this in the future if we have to. @@ -1278,7 +1357,7 @@ func (r *Resource) Data(s *terraform.InstanceState) *ResourceData { // TODO: May be able to be removed with the above ResourceData function. func (r *Resource) TestResourceData() *ResourceData { return &ResourceData{ - schema: r.Schema, + schema: r.SchemaMap(), } } diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_data.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_data.go index 396b5bc6f150b..b7eb7d2711f89 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_data.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_data.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_data_get_source.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_data_get_source.go index 9e4cc53e78fe5..0639540b47b1f 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_data_get_source.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_data_get_source.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema // This code was previously generated with a go:generate directive calling: diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_diff.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_diff.go index 27575b29770ab..6af9490b9e0ac 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_diff.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_diff.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_importer.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_importer.go index 3b17c8e96d4c8..ad9a5c3b9c6d2 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_importer.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_importer.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_timeout.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_timeout.go index 93f6fc243cf5b..90d29e6259a61 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_timeout.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/resource_timeout.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/schema.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/schema.go index 4a3e146b60d30..176288b0cd80c 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // schema is a high-level framework for easily writing new providers // for Terraform. Usage of schema is recommended over attempting to write // to the low-level plugin interfaces manually. @@ -88,10 +91,6 @@ type Schema struct { // Optional indicates whether the practitioner can choose to not enter // a value in the configuration for this attribute. Optional cannot be used // with Required. - // - // If also using Default or DefaultFunc, Computed should also be enabled, - // otherwise Terraform can output warning logs or "inconsistent result - // after apply" errors. Optional bool // Computed indicates whether the provider may return its own value for @@ -940,7 +939,7 @@ func (m schemaMap) internalValidate(topSchemaMap schemaMap, attrsOnly bool) erro case *Resource: attrsOnly := attrsOnly || v.ConfigMode == SchemaConfigModeAttr - if err := schemaMap(t.Schema).internalValidate(topSchemaMap, attrsOnly); err != nil { + if err := schemaMap(t.SchemaMap()).internalValidate(topSchemaMap, attrsOnly); err != nil { return err } case *Schema: @@ -1070,7 +1069,7 @@ func checkKeysAgainstSchemaFlags(k string, keys []string, topSchemaMap schemaMap return fmt.Errorf("%s configuration block reference (%s) can only be used with TypeList and MaxItems: 1 configuration blocks", k, key) } - sm = schemaMap(subResource.Schema) + sm = subResource.SchemaMap() } if target == nil { @@ -1260,7 +1259,7 @@ func (m schemaMap) diffList( case *Resource: // This is a complex resource for i := 0; i < maxLen; i++ { - for k2, schema := range t.Schema { + for k2, schema := range t.SchemaMap() { subK := fmt.Sprintf("%s.%d.%s", k, i, k2) err := m.diff(ctx, subK, schema, diff, d, all) if err != nil { @@ -1507,7 +1506,7 @@ func (m schemaMap) diffSet( switch t := schema.Elem.(type) { case *Resource: // This is a complex resource - for k2, schema := range t.Schema { + for k2, schema := range t.SchemaMap() { subK := fmt.Sprintf("%s.%s.%s", k, code, k2) err := m.diff(ctx, subK, schema, diff, d, true) if err != nil { @@ -1974,7 +1973,7 @@ func (m schemaMap) validateList( switch t := schema.Elem.(type) { case *Resource: // This is a sub-resource - diags = append(diags, m.validateObject(key, t.Schema, c, p)...) + diags = append(diags, m.validateObject(key, t.SchemaMap(), c, p)...) case *Schema: diags = append(diags, m.validateType(key, raw, t, c, p)...) } diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/serialize.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/serialize.go index 0e0e3cca9e5de..d629240fd3899 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/serialize.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/serialize.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( @@ -88,7 +91,7 @@ func SerializeResourceForHash(buf *bytes.Buffer, val interface{}, resource *Reso if val == nil { return } - sm := resource.Schema + sm := resource.SchemaMap() m := val.(map[string]interface{}) var keys []string allComputed := true diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/set.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/set.go index b937ab6e56195..e897817fd3025 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/set.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/set.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/shims.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/shims.go index 9c7f0906c64ce..e8baebd70cfbf 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/shims.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/shims.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( @@ -40,7 +43,7 @@ func diffFromValues(ctx context.Context, prior, planned, config cty.Value, res * removeConfigUnknowns(cfg.Config) removeConfigUnknowns(cfg.Raw) - diff, err := schemaMap(res.Schema).Diff(ctx, instanceState, cfg, cust, nil, false) + diff, err := schemaMap(res.SchemaMap()).Diff(ctx, instanceState, cfg, cust, nil, false) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/testing.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/testing.go index f345f83263199..bdf56d9012f43 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/testing.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/testing.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/unknown.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/unknown.go index c58d3648ab499..1089e4d2d7918 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/unknown.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/unknown.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/valuetype.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/valuetype.go index 2b355cc9ca17a..2563ff84106a4 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/valuetype.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema/valuetype.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package schema // This code was previously generated with a go:generate directive calling: diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/expand_json.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/expand_json.go index b3eb90fdff53b..520afeffcb2e1 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/expand_json.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/expand_json.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package structure import "encoding/json" diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/flatten_json.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/flatten_json.go index 578ad2eade309..d0913ac65fc01 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/flatten_json.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/flatten_json.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package structure import "encoding/json" diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/normalize_json.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/normalize_json.go index 3256b476dd0e6..0521420849b28 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/normalize_json.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/normalize_json.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package structure import "encoding/json" diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/suppress_json_diff.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/suppress_json_diff.go index c99b73846eeca..c610616374c03 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/suppress_json_diff.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure/suppress_json_diff.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package structure import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/float.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/float.go index 05a30531e2d9d..dfc261842d3b9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/float.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/float.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/int.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/int.go index f2738201cc0ba..2873897f2764e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/int.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/int.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/list.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/list.go index 75702b5b8a38a..9f0eb4b65d606 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/list.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/list.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import "fmt" diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/map.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/map.go index 9e4510b1e55f7..7c925090541f6 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/map.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/map.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/meta.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/meta.go index b0515c8d08548..941476429c225 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/meta.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/meta.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( @@ -42,6 +45,18 @@ func All(validators ...schema.SchemaValidateFunc) schema.SchemaValidateFunc { } } +// AllDiag returns a SchemaValidateDiagFunc which tests if the provided value +// passes all provided SchemaValidateDiagFunc +func AllDiag(validators ...schema.SchemaValidateDiagFunc) schema.SchemaValidateDiagFunc { + return func(i interface{}, k cty.Path) diag.Diagnostics { + var diags diag.Diagnostics + for _, validator := range validators { + diags = append(diags, validator(i, k)...) + } + return diags + } +} + // Any returns a SchemaValidateFunc which tests if the provided value // passes any of the provided SchemaValidateFunc func Any(validators ...schema.SchemaValidateFunc) schema.SchemaValidateFunc { @@ -60,6 +75,22 @@ func Any(validators ...schema.SchemaValidateFunc) schema.SchemaValidateFunc { } } +// AnyDiag returns a SchemaValidateDiagFunc which tests if the provided value +// passes any of the provided SchemaValidateDiagFunc +func AnyDiag(validators ...schema.SchemaValidateDiagFunc) schema.SchemaValidateDiagFunc { + return func(i interface{}, k cty.Path) diag.Diagnostics { + var diags diag.Diagnostics + for _, validator := range validators { + validatorDiags := validator(i, k) + if len(validatorDiags) == 0 { + return diag.Diagnostics{} + } + diags = append(diags, validatorDiags...) + } + return diags + } +} + // ToDiagFunc is a wrapper for legacy schema.SchemaValidateFunc // converting it to schema.SchemaValidateDiagFunc func ToDiagFunc(validator schema.SchemaValidateFunc) schema.SchemaValidateDiagFunc { diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/network.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/network.go index 8aa7139a004cf..9bc6da2b8eee9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/network.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/network.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( @@ -89,7 +92,7 @@ func IsCIDR(i interface{}, k string) (warnings []string, errors []error) { } if _, _, err := net.ParseCIDR(v); err != nil { - errors = append(errors, fmt.Errorf("expected %q to be a valid IPv4 Value, got %v: %v", k, i, err)) + errors = append(errors, fmt.Errorf("expected %q to be a valid CIDR Value, got %v: %v", k, i, err)) } return warnings, errors diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/strings.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/strings.go index e739a1a1bfac3..375a698f2c256 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/strings.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/strings.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( @@ -143,7 +146,7 @@ func StringInSlice(valid []string, ignoreCase bool) schema.SchemaValidateFunc { } } - errors = append(errors, fmt.Errorf("expected %s to be one of %v, got %s", k, valid, v)) + errors = append(errors, fmt.Errorf("expected %s to be one of %q, got %s", k, valid, v)) return warnings, errors } } diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/testing.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/testing.go index d861f5a2af9c7..a5aa6e0454921 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/testing.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/testing.go @@ -1,9 +1,14 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( + "fmt" "regexp" + "testing" - testing "github.com/mitchellh/go-testing-interface" + "github.com/hashicorp/go-cty/cty" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -15,23 +20,53 @@ type testCase struct { expectedErr *regexp.Regexp } -func runTestCases(t testing.T, cases []testCase) { +func runTestCases(t *testing.T, cases []testCase) { t.Helper() for i, tc := range cases { - _, errs := tc.f(tc.val, "test_property") + t.Run(fmt.Sprintf("TestCase_%d", i), func(t *testing.T) { + _, errs := tc.f(tc.val, "test_property") - if len(errs) == 0 && tc.expectedErr == nil { - continue - } + if len(errs) == 0 && tc.expectedErr == nil { + return + } - if len(errs) != 0 && tc.expectedErr == nil { - t.Fatalf("expected test case %d to produce no errors, got %v", i, errs) - } + if len(errs) != 0 && tc.expectedErr == nil { + t.Fatalf("expected test case %d to produce no errors, got %v", i, errs) + } - if !matchAnyError(errs, tc.expectedErr) { - t.Fatalf("expected test case %d to produce error matching \"%s\", got %v", i, tc.expectedErr, errs) - } + if !matchAnyError(errs, tc.expectedErr) { + t.Fatalf("expected test case %d to produce error matching \"%s\", got %v", i, tc.expectedErr, errs) + } + }) + } +} + +type diagTestCase struct { + val interface{} + f schema.SchemaValidateDiagFunc + expectedDiagSummary *regexp.Regexp +} + +func runDiagTestCases(t *testing.T, cases []diagTestCase) { + t.Helper() + + for i, tc := range cases { + t.Run(fmt.Sprintf("TestCase_%d", i), func(t *testing.T) { + diags := tc.f(tc.val, cty.GetAttrPath("test_property")) + + if len(diags) == 0 && tc.expectedDiagSummary == nil { + return + } + + if len(diags) != 0 && tc.expectedDiagSummary == nil { + t.Fatalf("expected test case %d to produce no diagnostics, got %v", i, diags) + } + + if !matchAnyDiagSummary(diags, tc.expectedDiagSummary) { + t.Fatalf("expected test case %d to produce diagnostic summary matching \"%s\", got %v", i, tc.expectedDiagSummary, diags) + } + }) } } diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/time.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/time.go index fde3a019923bc..940a9ec1cf387 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/time.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/time.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/uuid.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/uuid.go index 00783fafce850..91122ce714d47 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/uuid.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/uuid.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/web.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/web.go index 615e0feb7c131..2e875442f4d70 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/web.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation/web.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package validation import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/doc.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/doc.go index 46093314fe2ed..0d29d9f45639f 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package addrs contains types that represent "addresses", which are // references to specific objects within a Terraform configuration or // state. diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/instance_key.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/instance_key.go index 064aeda28c34d..8373297f876ba 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/instance_key.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/instance_key.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package addrs import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/module.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/module.go index 98699f46e27c4..8dbbb469d487c 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/module.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/module.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package addrs // Module is an address for a module call within configuration. This is diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/module_instance.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/module_instance.go index 113d3d675ab6a..12cd83051a703 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/module_instance.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/addrs/module_instance.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package addrs import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/coerce_value.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/coerce_value.go index 48278abed2557..d12ff8cced9be 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/coerce_value.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/coerce_value.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package configschema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/doc.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/doc.go index caf8d730c1e47..d96be9c7f0f7d 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package configschema contains types for describing the expected structure // of a configuration block whose shape is not known until runtime. // diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/empty_value.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/empty_value.go index 51b8c5d24c0e7..3c9573bc56add 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/empty_value.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/empty_value.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package configschema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/implied_type.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/implied_type.go index edc9dadccee76..4de413519f65e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/implied_type.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/implied_type.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package configschema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/schema.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/schema.go index c41751b71cac6..c445b4ba55e9f 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/configschema/schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package configschema import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/flatmap.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/flatmap.go index b96e17c585331..2bad034de94f2 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/flatmap.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/flatmap.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package hcl2shim import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/paths.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/paths.go index e557845a7032c..628a8bf686807 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/paths.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/paths.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package hcl2shim import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/values.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/values.go index 91e91547a854d..f5f5de3b259d5 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/values.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/values.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package hcl2shim import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/values_equiv.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/values_equiv.go index 87638b4e49908..6b2be2239d34e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/values_equiv.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/configs/hcl2shim/values_equiv.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package hcl2shim import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/helper/hashcode/hashcode.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/helper/hashcode/hashcode.go index 6ccc52318348b..97bc709b2a775 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/helper/hashcode/hashcode.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/helper/hashcode/hashcode.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package hashcode import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/context.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/context.go index 6036b0d04468e..0fe8002aa7a82 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/context.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/context.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/environment_variables.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/environment_variables.go index db1a27a8147b9..2ffc73eee6cbd 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/environment_variables.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/environment_variables.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging // Environment variables. diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/helper_resource.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/helper_resource.go index a889601c7c4cd..1b1459f24612c 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/helper_resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/helper_resource.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/helper_schema.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/helper_schema.go index b2fe71d15d621..0ecf6bf2e48c0 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/helper_schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/helper_schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/keys.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/keys.go index ad510721847d8..983fde437a297 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/keys.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging/keys.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package logging // Structured logging keys. diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plans/objchange/normalize_obj.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plans/objchange/normalize_obj.go index d6aabbe338214..b888237fc295b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plans/objchange/normalize_obj.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plans/objchange/normalize_obj.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package objchange import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plugin/convert/diagnostics.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plugin/convert/diagnostics.go index e02c1e4439449..672f75e6d8357 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plugin/convert/diagnostics.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plugin/convert/diagnostics.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package convert import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plugin/convert/schema.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plugin/convert/schema.go index 07d0b89783cea..e2b4e431ce967 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plugin/convert/schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/plugin/convert/schema.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package convert import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/config_traversals.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/config_traversals.go index 2201d0c0befc6..6208117cbff68 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/config_traversals.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/config_traversals.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfdiags import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/contextual.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/contextual.go index b063bc1de23f8..a9b5c7e83e8f8 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/contextual.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/contextual.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfdiags import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostic.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostic.go index 21fb177262ff9..547271346aaba 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostic.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostic.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfdiags type Diagnostic interface { diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostic_base.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostic_base.go index 348162087866d..505692ce51a37 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostic_base.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostic_base.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfdiags // diagnosticBase can be embedded in other diagnostic structs to get diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostics.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostics.go index 2e04b72a62931..4fc99c1bb7042 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostics.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/diagnostics.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfdiags import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/doc.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/doc.go index c427879ebc7cb..23be0a8bece7e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/doc.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/doc.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // Package tfdiags is a utility package for representing errors and // warnings in a manner that allows us to produce good messages for the // user. diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/error.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/error.go index b63c5d74150eb..f7c9c65d382a3 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/error.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/error.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfdiags // nativeError is a Diagnostic implementation that wraps a normal Go error diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/simple_warning.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/simple_warning.go index 0919170456cba..0c90c47889105 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/simple_warning.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags/simple_warning.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfdiags type simpleWarning string diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/meta/meta.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/meta/meta.go index 35f20f7ee53ab..494f61ce1bd2b 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/meta/meta.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/meta/meta.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + // The meta package provides a location to set the release version // and any other relevant metadata for the SDK. // diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/plugin/debug.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/plugin/debug.go index e1875e134cbac..3e33dfed6b913 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/plugin/debug.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/plugin/debug.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/plugin/serve.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/plugin/serve.go index cce6212b1591b..f089ab5215ba2 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/plugin/serve.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/plugin/serve.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package plugin import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/diff.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/diff.go index 8a2940f31e22d..7b988d9f3dc9a 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/diff.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/diff.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/instancetype.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/instancetype.go index c0d1288f00bbc..1871445819a50 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/instancetype.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/instancetype.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform // This code was previously generated with a go:generate directive calling: diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource.go index 703547745e835..0da593711b994 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_address.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_address.go index ec2665d3133ce..8d92fbb5e453a 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_address.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_address.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_mode.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_mode.go index d2a806c0ba978..2d7b10bcff752 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_mode.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_mode.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform // This code was previously generated with a go:generate directive calling: diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_provider.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_provider.go index ece8fc6604296..c8e7008c0a8df 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/resource_provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform // ResourceType is a type of resource that a resource provider can manage. diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/schemas.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/schemas.go index 07e5a84fa1d70..86ad0e7f1cfd8 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/schemas.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/schemas.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/state.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/state.go index 1a4d3d6d112bd..9357070b40160 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/state.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/state_filter.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/state_filter.go index d2229f8ce7631..caf2c79674ba8 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/state_filter.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/state_filter.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/util.go b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/util.go index 01ac810f103f9..6353ad27d952a 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/util.go +++ b/vendor/github.com/hashicorp/terraform-plugin-sdk/v2/terraform/util.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package terraform import ( diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/config/config.go b/vendor/github.com/hashicorp/terraform-plugin-testing/config/config.go new file mode 100644 index 0000000000000..4a663610fd99b --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/config/config.go @@ -0,0 +1,38 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package config + +// TestStepConfigFunc is the callback type used with acceptance tests to +// specify a string which either identifies a directory containing +// Terraform configuration files, or a file that contains Terraform +// configuration. +type TestStepConfigFunc func(TestStepConfigRequest) string + +// TestStepConfigRequest defines the request supplied to types +// implementing TestStepConfigFunc. StepNumber is one-based +// and is used in the predefined helper functions: +// +// - [config.TestStepDirectory] +// - [config.TestStepFile]. +// +// TestName is used in the predefined helper functions: +// +// - [config.TestNameDirectory] +// - [config.TestStepDirectory] +// - [config.TestNameFile] +// - [config.TestStepFile] +type TestStepConfigRequest struct { + StepNumber int + TestName string +} + +// Exec executes TestStepConfigFunc if it is not nil, otherwise an +// empty string is returned. +func (f TestStepConfigFunc) Exec(req TestStepConfigRequest) string { + if f != nil { + return f(req) + } + + return "" +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/config/directory.go b/vendor/github.com/hashicorp/terraform-plugin-testing/config/directory.go new file mode 100644 index 0000000000000..c3c9ab0c0f4a3 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/config/directory.go @@ -0,0 +1,63 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package config + +import ( + "path/filepath" + "strconv" +) + +// StaticDirectory returns the supplied directory. +func StaticDirectory(directory string) func(TestStepConfigRequest) string { + return func(_ TestStepConfigRequest) string { + return directory + } +} + +// TestNameDirectory returns the name of the test prefixed with +// "testdata". +// +// For example, given test code: +// +// func TestExampleCloudThing_basic(t *testing.T) { +// resource.Test(t, resource.TestCase{ +// Steps: []resource.TestStep{ +// { +// ConfigDirectory: config.TestNameDirectory(), +// }, +// }, +// }) +// } +// +// The testing configurations will be expected in the +// testdata/TestExampleCloudThing_basic/ directory. +func TestNameDirectory() func(TestStepConfigRequest) string { + return func(req TestStepConfigRequest) string { + return filepath.Join("testdata", req.TestName) + } +} + +// TestStepDirectory returns the name of the test suffixed with the +// test step number and prefixed with "testdata". +// +// For example, given test code: +// +// func TestExampleCloudThing_basic(t *testing.T) { +// resource.Test(t, resource.TestCase{ +// Steps: []resource.TestStep{ +// { +// ConfigDirectory: config.TestStepDirectory(), +// }, +// }, +// }) +// } +// +// The testing configurations will be expected in the +// testdata/TestExampleCloudThing_basic/1 directory as +// TestStepConfigRequest.StepNumber is one-based. +func TestStepDirectory() func(TestStepConfigRequest) string { + return func(req TestStepConfigRequest) string { + return filepath.Join("testdata", req.TestName, strconv.Itoa(req.StepNumber)) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/config/doc.go b/vendor/github.com/hashicorp/terraform-plugin-testing/config/doc.go new file mode 100644 index 0000000000000..e85d5f81c90a3 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/config/doc.go @@ -0,0 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Package config implements functionality for supporting native +// Terraform configuration and variables for testing purposes. +package config diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/config/file.go b/vendor/github.com/hashicorp/terraform-plugin-testing/config/file.go new file mode 100644 index 0000000000000..1974c40651d91 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/config/file.go @@ -0,0 +1,63 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package config + +import ( + "path/filepath" + "strconv" +) + +// StaticFile returns the supplied file. +func StaticFile(file string) func(TestStepConfigRequest) string { + return func(_ TestStepConfigRequest) string { + return file + } +} + +// TestNameFile returns the name of the test suffixed with the supplied +// file and prefixed with "testdata". +// +// For example, given test code: +// +// func TestExampleCloudThing_basic(t *testing.T) { +// resource.Test(t, resource.TestCase{ +// Steps: []resource.TestStep{ +// { +// ConfigFile: config.TestNameFile("test.tf"), +// }, +// }, +// }) +// } +// +// The testing configuration will be expected in the +// testdata/TestExampleCloudThing_basic/test.tf file. +func TestNameFile(file string) func(TestStepConfigRequest) string { + return func(req TestStepConfigRequest) string { + return filepath.Join("testdata", req.TestName, file) + } +} + +// TestStepFile returns the name of the test suffixed with the test +// step number and the supplied file, and prefixed with "testdata". +// +// For example, given test code: +// +// func TestExampleCloudThing_basic(t *testing.T) { +// resource.Test(t, resource.TestCase{ +// Steps: []resource.TestStep{ +// { +// ConfigFile: config.TestStepFile("test.tf"), +// }, +// }, +// }) +// } +// +// The testing configuration will be expected in the +// testdata/TestExampleCloudThing_basic/1/test.tf file +// as TestStepConfigRequest.StepNumber is one-based. +func TestStepFile(file string) func(TestStepConfigRequest) string { + return func(req TestStepConfigRequest) string { + return filepath.Join("testdata", req.TestName, strconv.Itoa(req.StepNumber), file) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/config/variable.go b/vendor/github.com/hashicorp/terraform-plugin-testing/config/variable.go new file mode 100644 index 0000000000000..76c2a51107260 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/config/variable.go @@ -0,0 +1,326 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package config + +import ( + "encoding/json" + "errors" + "fmt" + "os" + "path/filepath" + "reflect" + + "golang.org/x/exp/constraints" +) + +const autoTFVarsJson = "terraform-plugin-testing.auto.tfvars.json" + +// Variable interface is an alias to json.Marshaler. +type Variable interface { + json.Marshaler +} + +// Variables is a type holding a key-value map of variable names +// to types implementing the Variable interface. +type Variables map[string]Variable + +// Write creates a file in the destination supplied +// containing JSON encoded Variables. +func (v Variables) Write(dest string) error { + if len(v) == 0 { + return nil + } + + b, err := json.Marshal(v) + + if err != nil { + return fmt.Errorf("cannot marshal variables: %s", err) + } + + outFilename := filepath.Join(dest, autoTFVarsJson) + + err = os.WriteFile(outFilename, b, 0600) + + if err != nil { + return fmt.Errorf("cannot write variables file: %s", err) + } + + return nil +} + +var _ Variable = boolVariable{} + +// boolVariable supports JSON encoding of a bool. +type boolVariable struct { + value bool +} + +// MarshalJSON returns the JSON encoding of boolVariable. +func (v boolVariable) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +// BoolVariable returns boolVariable which implements Variable. +func BoolVariable(value bool) boolVariable { + return boolVariable{ + value: value, + } +} + +var _ Variable = floatVariable{} + +// floatVariable supports JSON encoding of any floating-point type. +type floatVariable struct { + value any +} + +// MarshalJSON returns the JSON encoding of floatVariable. +func (v floatVariable) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +// FloatVariable returns floatVariable which implements Variable. +func FloatVariable[T constraints.Float](value T) floatVariable { + return floatVariable{ + value: value, + } +} + +var _ Variable = integerVariable{} + +// integerVariable supports JSON encoding of any integer type. +type integerVariable struct { + value any +} + +// MarshalJSON returns the JSON encoding of integerVariable. +func (v integerVariable) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +// IntegerVariable returns integerVariable which implements Variable. +func IntegerVariable[T constraints.Integer](value T) integerVariable { + return integerVariable{ + value: value, + } +} + +var _ Variable = listVariable{} + +// listVariable supports JSON encoding of slice of Variable. +type listVariable struct { + value []Variable +} + +// MarshalJSON returns the JSON encoding of listVariable. +// Every Variable within a listVariable must be the same +// underlying type. +func (v listVariable) MarshalJSON() ([]byte, error) { + if !typesEq(v.value) { + return nil, errors.New("lists must contain the same type") + } + + return json.Marshal(v.value) +} + +// ListVariable returns listVariable which implements Variable. +func ListVariable(value ...Variable) listVariable { + return listVariable{ + value: value, + } +} + +var _ Variable = mapVariable{} + +// mapVariable supports JSON encoding of a key-value map of +// string to Variable. +type mapVariable struct { + value map[string]Variable +} + +// MarshalJSON returns the JSON encoding of mapVariable. +// Every Variable in a mapVariable must be the same +// underlying type. +func (v mapVariable) MarshalJSON() ([]byte, error) { + var variables []Variable + + for _, variable := range v.value { + variables = append(variables, variable) + } + + if !typesEq(variables) { + return nil, errors.New("maps must contain the same type") + } + + return json.Marshal(v.value) +} + +// MapVariable returns mapVariable which implements Variable. +func MapVariable(value map[string]Variable) mapVariable { + return mapVariable{ + value: value, + } +} + +var _ Variable = objectVariable{} + +// objectVariable supports JSON encoding of a key-value +// map of string to Variable in which each Variable +// can be a different underlying type. +type objectVariable struct { + value map[string]Variable +} + +// MarshalJSON returns the JSON encoding of objectVariable. +func (v objectVariable) MarshalJSON() ([]byte, error) { + b, err := json.Marshal(v.value) + + if err != nil { + innerErr := err + + // Unwrap is used here to expose the initial error, for example + // "maps must contain the same type" whilst removing any errors + // related to the implementation (i.e., the usage of + // encoding/json in this instance. + for errors.Unwrap(innerErr) != nil { + innerErr = errors.Unwrap(err) + } + + return nil, innerErr + } + + return b, nil +} + +// ObjectVariable returns objectVariable which implements Variable. +func ObjectVariable(value map[string]Variable) objectVariable { + return objectVariable{ + value: value, + } +} + +var _ Variable = setVariable{} + +// setVariable supports JSON encoding of a slice of Variable. +type setVariable struct { + value []Variable +} + +// MarshalJSON returns the JSON encoding of setVariable. +// Every Variable in a setVariable must be the same +// underlying type. +func (v setVariable) MarshalJSON() ([]byte, error) { + for kx, x := range v.value { + for ky := kx + 1; ky < len(v.value); ky++ { + y := v.value[ky] + + if _, ok := x.(setVariable); !ok { + continue + } + + if _, ok := y.(setVariable); !ok { + continue + } + + if reflect.DeepEqual(x, y) { + return nil, errors.New("sets must contain unique elements") + } + } + } + + if !typesEq(v.value) { + return nil, errors.New("sets must contain the same type") + } + + return json.Marshal(v.value) +} + +// SetVariable returns setVariable which implements Variable. +func SetVariable(value ...Variable) setVariable { + return setVariable{ + value: value, + } +} + +var _ Variable = stringVariable{} + +// stringVariable supports JSON encoding of a string. +type stringVariable struct { + value string +} + +// MarshalJSON returns the JSON encoding of stringVariable. +func (v stringVariable) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +// StringVariable returns stringVariable which implements Variable. +func StringVariable(value string) stringVariable { + return stringVariable{ + value: value, + } +} + +var _ Variable = tupleVariable{} + +// tupleVariable supports JSON encoding of a slice of Variable +// in which each element in the slice can be a different +// underlying type. +type tupleVariable struct { + value []Variable +} + +// MarshalJSON returns the JSON encoding of tupleVariable. +func (v tupleVariable) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +// TupleVariable returns tupleVariable which implements Variable. +func TupleVariable(value ...Variable) tupleVariable { + return tupleVariable{ + value: value, + } +} + +// typesEq verifies that every element in the supplied slice of Variable +// is the same underlying type. +func typesEq(variables []Variable) bool { + var t reflect.Type + + for _, variable := range variables { + switch x := variable.(type) { + case listVariable: + if !typesEq(x.value) { + return false + } + case mapVariable: + var vars []Variable + + for _, v := range x.value { + vars = append(vars, v) + } + + if !typesEq(vars) { + return false + } + case setVariable: + if !typesEq(x.value) { + return false + } + } + + typeOfVariable := reflect.TypeOf(variable) + + if t == nil { + t = typeOfVariable + continue + } + + if t != typeOfVariable { + return false + } + } + + return true +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/acctest/random.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/acctest/random.go index 7891bf2266a50..abb778aa04b80 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/acctest/random.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/acctest/random.go @@ -84,6 +84,16 @@ func RandSSHKeyPair(comment string) (string, string, error) { // RandTLSCert generates a self-signed TLS certificate with a newly created // private key, and returns both the cert and the private key PEM encoded. +// +// The private key uses RSA algorithm, 1024 bits, and has no passphrase. +// +// The certificate expires in 24 hours, has a random serial number, and is +// set for Encipherment, Digital Signature, and Server Auth key usage. +// Only the organization name of the subject is configurable. +// +// Testing with different or stricter security requirements should +// use the standard library [crypto] and [golang.org/x/crypto] packages +// directly. func RandTLSCert(orgName string) (string, string, error) { template := &x509.Certificate{ SerialNumber: big.NewInt(int64(RandInt())), diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/error.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/error.go index 517963bc89a19..3c990e35fc855 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/error.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/error.go @@ -9,6 +9,12 @@ import ( "time" ) +// NotFoundError represents when a StateRefreshFunc returns a nil result +// during a StateChangeConf waiter method and that StateChangeConf is +// configured for specific targets. +// +// Deprecated: Copy this type to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.NotFoundError. type NotFoundError struct { LastError error LastRequest interface{} @@ -17,6 +23,11 @@ type NotFoundError struct { Retries int } +// Error returns the Message string, if non-empty, or a string indicating +// the resource could not be found. +// +// Deprecated: Copy this method to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.NotFoundError. func (e *NotFoundError) Error() string { if e.Message != "" { return e.Message @@ -29,17 +40,29 @@ func (e *NotFoundError) Error() string { return "couldn't find resource" } +// Unwrap returns the LastError, compatible with errors.Unwrap. +// +// Deprecated: Copy this method to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.NotFoundError. func (e *NotFoundError) Unwrap() error { return e.LastError } // UnexpectedStateError is returned when Refresh returns a state that's neither in Target nor Pending +// +// Deprecated: Copy this type to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.UnexpectedStateError. type UnexpectedStateError struct { LastError error State string ExpectedState []string } +// Error returns a string with the unexpected state value, the desired target, +// and any last error. +// +// Deprecated: Copy this method to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.UnexpectedStateError. func (e *UnexpectedStateError) Error() string { return fmt.Sprintf( "unexpected state '%s', wanted target '%s'. last error: %s", @@ -49,11 +72,18 @@ func (e *UnexpectedStateError) Error() string { ) } +// Unwrap returns the LastError, compatible with errors.Unwrap. +// +// Deprecated: Copy this method to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.UnexpectedStateError. func (e *UnexpectedStateError) Unwrap() error { return e.LastError } // TimeoutError is returned when WaitForState times out +// +// Deprecated: Copy this type to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.TimeoutError. type TimeoutError struct { LastError error LastState string @@ -61,6 +91,10 @@ type TimeoutError struct { ExpectedState []string } +// Error returns a string with any information available. +// +// Deprecated: Copy this method to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.TimeoutError. func (e *TimeoutError) Error() string { expectedState := "resource to be gone" if len(e.ExpectedState) > 0 { @@ -89,6 +123,10 @@ func (e *TimeoutError) Error() string { expectedState, suffix) } +// Unwrap returns the LastError, compatible with errors.Unwrap. +// +// Deprecated: Copy this method to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.TimeoutError. func (e *TimeoutError) Unwrap() error { return e.LastError } diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/id.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/id.go index c02b1b5ef017d..81c1f2e8e8dc6 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/id.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/id.go @@ -10,6 +10,11 @@ import ( "time" ) +// UniqueIdPrefix is a string prefix automatically added to return values of +// the UniqueId function. +// +// Deprecated: Copy this value to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/id.UniquePrefix. const UniqueIdPrefix = `terraform-` // idCounter is a monotonic counter for generating ordered unique ids. @@ -17,6 +22,9 @@ var idMutex sync.Mutex var idCounter uint32 // Helper for a resource to generate a unique identifier w/ default prefix +// +// Deprecated: Copy this function to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/id.Unique. func UniqueId() string { return PrefixedUniqueId(UniqueIdPrefix) } @@ -24,6 +32,9 @@ func UniqueId() string { // UniqueIDSuffixLength is the string length of the suffix generated by // PrefixedUniqueId. This can be used by length validation functions to // ensure prefixes are the correct length for the target field. +// +// Deprecated: Copy this value to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/id.UniqueSuffixLength. const UniqueIDSuffixLength = 26 // Helper for a resource to generate a unique identifier w/ given prefix @@ -35,6 +46,9 @@ const UniqueIDSuffixLength = 26 // across multiple terraform executions, as long as the clock is not turned back // between calls, and as long as any given terraform execution generates fewer // than 4 billion IDs. +// +// Deprecated: Copy this function to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/id.PrefixedUnique. func PrefixedUniqueId(prefix string) string { // Be precise to 4 digits of fractional seconds, but remove the dot before the // fractional seconds. diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/plan_checks.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/plan_checks.go new file mode 100644 index 0000000000000..712e3dbdfe7ae --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/plan_checks.go @@ -0,0 +1,32 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package resource + +import ( + "context" + + tfjson "github.com/hashicorp/terraform-json" + "github.com/hashicorp/terraform-plugin-testing/internal/errorshim" + "github.com/hashicorp/terraform-plugin-testing/plancheck" + "github.com/mitchellh/go-testing-interface" +) + +func runPlanChecks(ctx context.Context, t testing.T, plan *tfjson.Plan, planChecks []plancheck.PlanCheck) error { + t.Helper() + + var result error + + for _, planCheck := range planChecks { + resp := plancheck.CheckPlanResponse{} + planCheck.CheckPlan(ctx, plancheck.CheckPlanRequest{Plan: plan}, &resp) + + if resp.Error != nil { + // TODO: Once Go 1.20 is the minimum supported version for this module, replace with `errors.Join` function + // - https://github.com/hashicorp/terraform-plugin-testing/issues/99 + result = errorshim.Join(result, resp.Error) + } + } + + return result +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/state.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/state.go index 93f6be494abf0..9ed1132703c7e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/state.go @@ -21,9 +21,15 @@ var refreshGracePeriod = 30 * time.Second // // `state` is the latest state of that object. And `err` is any error that // may have happened while refreshing the state. +// +// Deprecated: Copy this type to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.StateRefreshFunc. type StateRefreshFunc func() (result interface{}, state string, err error) // StateChangeConf is the configuration struct used for `WaitForState`. +// +// Deprecated: Copy this type to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.StateChangeConf. type StateChangeConf struct { Delay time.Duration // Wait this time before starting checks Pending []string // States that are "allowed" and will continue trying @@ -53,7 +59,10 @@ type StateChangeConf struct { // Otherwise, the result is the result of the first call to the Refresh function to // reach the target state. // -// Cancellation from the passed in context will cancel the refresh loop +// # Cancellation from the passed in context will cancel the refresh loop +// +// Deprecated: Copy this method to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.StateChangeConf. func (conf *StateChangeConf) WaitForStateContext(ctx context.Context) (interface{}, error) { log.Printf("[DEBUG] Waiting for state to become: %s", conf.Target) diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/state_shim.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/state_shim.go index 0da7824017112..c9659dc95c3d9 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/state_shim.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/state_shim.go @@ -21,7 +21,7 @@ type shimmedState struct { } func shimStateFromJson(jsonState *tfjson.State) (*terraform.State, error) { - state := terraform.NewState() + state := terraform.NewState() //nolint:staticcheck // legacy usage state.TFVersion = jsonState.TerraformVersion if jsonState.Values == nil { @@ -66,12 +66,14 @@ func shimOutputState(so *tfjson.StateOutput) (*terraform.OutputState, error) { case string: elements := make([]interface{}, len(v)) for i, el := range v { + //nolint:forcetypeassert // Guaranteed by type switch elements[i] = el.(string) } os.Value = elements case bool: elements := make([]interface{}, len(v)) for i, el := range v { + //nolint:forcetypeassert // Guaranteed by type switch elements[i] = el.(bool) } os.Value = elements @@ -79,6 +81,7 @@ func shimOutputState(so *tfjson.StateOutput) (*terraform.OutputState, error) { case json.Number: elements := make([]interface{}, len(v)) for i, el := range v { + //nolint:forcetypeassert // Guaranteed by type switch elements[i] = el.(json.Number) } os.Value = elements @@ -121,7 +124,7 @@ func (ss *shimmedState) shimStateModule(sm *tfjson.StateModule) error { } } - mod := ss.state.AddModule(path) + mod := ss.state.AddModule(path) //nolint:staticcheck // legacy usage for _, res := range sm.Resources { resourceState, err := shimResourceState(res) if err != nil { @@ -190,15 +193,36 @@ func shimResourceState(res *tfjson.StateResource) (*terraform.ResourceState, err } attributes := sf.Flatmap() - if _, ok := attributes["id"]; !ok { - return nil, fmt.Errorf("no %q found in attributes", "id") + // The instance state identifier was a Terraform versions 0.11 and earlier + // concept which helped core and the then SDK determine if the resource + // should be removed and as an identifier value in the human readable + // output. This concept unfortunately carried over to the testing logic when + // the testing logic was mostly changed to use the public, machine-readable + // JSON interface with Terraform, rather than reusing prior internal logic + // from Terraform. Using the "id" attribute value for this identifier was + // the default implementation and therefore those older versions of + // Terraform required the attribute. This is no longer necessary after + // Terraform versions 0.12 and later. + // + // If the "id" attribute is not found, set the instance state identifier to + // a synthetic value that can hopefully lead someone encountering the value + // to these comments. The prior logic used to raise an error if the + // attribute was not present, but this value should now only be present in + // legacy logic of this Go module, such as unintentionally exported logic in + // the terraform package, and not encountered during normal testing usage. + // + // Reference: https://github.com/hashicorp/terraform-plugin-testing/issues/84 + instanceStateID, ok := attributes["id"] + + if !ok { + instanceStateID = "id-attribute-not-set" } return &terraform.ResourceState{ Provider: res.ProviderName, Type: res.Type, Primary: &terraform.InstanceState{ - ID: attributes["id"], + ID: instanceStateID, Attributes: attributes, Meta: map[string]interface{}{ "schema_version": int(res.SchemaVersion), diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testcase_validate.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testcase_validate.go index 7f2425394bb3a..6640f8c84cc86 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testcase_validate.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testcase_validate.go @@ -7,9 +7,18 @@ import ( "context" "fmt" + "github.com/mitchellh/go-testing-interface" + + "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/internal/logging" + "github.com/hashicorp/terraform-plugin-testing/internal/teststep" ) +// hasProviders returns true if the TestCase has ExternalProviders set. +func (c TestCase) hasExternalProviders(_ context.Context) bool { + return len(c.ExternalProviders) > 0 +} + // hasProviders returns true if the TestCase has set any of the // ExternalProviders, ProtoV5ProviderFactories, ProtoV6ProviderFactories, // ProviderFactories, or Providers fields. @@ -42,7 +51,7 @@ func (c TestCase) hasProviders(_ context.Context) bool { // - No overlapping ExternalProviders and Providers entries // - No overlapping ExternalProviders and ProviderFactories entries // - TestStep validations performed by the (TestStep).validate() method. -func (c TestCase) validate(ctx context.Context) error { +func (c TestCase) validate(ctx context.Context, t testing.T) error { logging.HelperResourceTrace(ctx, "Validating TestCase") if len(c.Steps) == 0 { @@ -65,13 +74,30 @@ func (c TestCase) validate(ctx context.Context) error { } } + testCaseHasExternalProviders := c.hasExternalProviders(ctx) testCaseHasProviders := c.hasProviders(ctx) for stepIndex, step := range c.Steps { stepNumber := stepIndex + 1 // Use 1-based index for humans + + configRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: step.Config, + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepNumber, + TestName: t.Name(), + }, + }.Exec() + + stepConfiguration := teststep.Configuration(configRequest) + stepValidateReq := testStepValidateRequest{ - StepNumber: stepNumber, - TestCaseHasProviders: testCaseHasProviders, + StepConfiguration: stepConfiguration, + StepNumber: stepNumber, + TestCaseHasExternalProviders: testCaseHasExternalProviders, + TestCaseHasProviders: testCaseHasProviders, + TestName: t.Name(), } err := step.validate(ctx, stepValidateReq) diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing.go index 987654c6dfb4a..2c40fc3965744 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing.go @@ -23,7 +23,10 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-testing/config" + "github.com/hashicorp/terraform-plugin-testing/plancheck" "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-plugin-testing/tfversion" "github.com/hashicorp/terraform-plugin-testing/internal/addrs" "github.com/hashicorp/terraform-plugin-testing/internal/logging" @@ -31,7 +34,7 @@ import ( ) // flagSweep is a flag available when running tests on the command line. It -// contains a comma seperated list of regions to for the sweeper functions to +// contains a comma separated list of regions to for the sweeper functions to // run in. This flag bypasses the normal Test path and instead runs functions designed to // clean up any leaked resources a testing environment could have created. It is // a best effort attempt, and relies on Provider authors to implement "Sweeper" @@ -52,7 +55,7 @@ import ( var flagSweep = flag.String("sweep", "", "List of Regions to run available Sweepers") var flagSweepAllowFailures = flag.Bool("sweep-allow-failures", false, "Enable to allow Sweeper Tests to continue after failures") -var flagSweepRun = flag.String("sweep-run", "", "Comma seperated list of Sweeper Tests to run") +var flagSweepRun = flag.String("sweep-run", "", "Comma separated list of Sweeper Tests to run") var sweeperFuncs map[string]*Sweeper // SweeperFunc is a signature for a function that acts as a sweeper. It @@ -160,7 +163,7 @@ func runSweepers(regions []string, sweepers map[string]*Sweeper, allowFailures b log.Printf("Sweeper Tests for region (%s) ran successfully:\n", region) for sweeper, sweeperErr := range regionSweeperRunList { if sweeperErr == nil { - fmt.Printf("\t- %s\n", sweeper) + log.Printf("\t- %s\n", sweeper) } else { regionSweeperErrorFound = true } @@ -171,7 +174,7 @@ func runSweepers(regions []string, sweepers map[string]*Sweeper, allowFailures b log.Printf("Sweeper Tests for region (%s) ran unsuccessfully:\n", region) for sweeper, sweeperErr := range regionSweeperRunList { if sweeperErr != nil { - fmt.Printf("\t- %s: %s\n", sweeper, sweeperErr) + log.Printf("\t- %s: %s\n", sweeper, sweeperErr) } } } @@ -186,7 +189,7 @@ func runSweepers(regions []string, sweepers map[string]*Sweeper, allowFailures b return sweeperRunList, nil } -// filterSweepers takes a comma seperated string listing the names of sweepers +// filterSweepers takes a comma separated string listing the names of sweepers // to be ran, and returns a filtered set from the list of all of sweepers to // run based on the names given. func filterSweepers(f string, source map[string]*Sweeper) map[string]*Sweeper { @@ -233,7 +236,7 @@ func filterSweeperWithDependencies(name string, source map[string]*Sweeper) map[ return result } -// runSweeperWithRegion recieves a sweeper and a region, and recursively calls +// runSweeperWithRegion receives a sweeper and a region, and recursively calls // itself with that region for every dependency found for that sweeper. If there // are no dependencies, invoke the contained sweeper fun with the region, and // add the success/fail status to the sweeperRunList. @@ -322,6 +325,12 @@ type TestCase struct { // acceptance tests, such as verifying that keys are setup. PreCheck func() + // TerraformVersionChecks is a list of checks to run against + // the Terraform CLI version which is running the testing. + // Each check is executed in order, respecting the first skip + // or fail response, unless the Any() meta check is also used. + TerraformVersionChecks []tfversion.TerraformVersionCheck + // ProviderFactories can be specified for the providers that are valid. // // This can also be specified at the TestStep level to enable per-step @@ -418,6 +427,15 @@ type TestCase struct { // IDRefreshIgnore is a list of configuration keys that will be ignored // during ID-only refresh testing. IDRefreshIgnore []string + + // WorkingDir sets the base directory where testing files used by the testing + // module are generated. If WorkingDir is unset, a randomized, temporary + // directory is used. + // + // Use the TF_ACC_PERSIST_WORKING_DIR environment variable, conventionally + // set to "1", to persist any working directory files. Otherwise, this directory is + // automatically cleaned up at the end of the TestCase. + WorkingDir string } // ExternalProvider holds information about third-party providers that should @@ -473,12 +491,60 @@ type TestStep struct { // Config a string of the configuration to give to Terraform. If this // is set, then the TestCase will execute this step with the same logic - // as a `terraform apply`. + // as a `terraform apply`. If both Config and ConfigDirectory are set + // an error will be returned. // // JSON Configuration Syntax can be used and is assumed whenever Config // contains valid JSON. + // + // Only one of Config, ConfigDirectory or ConfigFile can be set + // otherwise an error will be returned. Config string + // ConfigDirectory is a function which returns a function that + // accepts config.TestStepProviderConfig and returns a string + // representing a directory that contains Terraform + // configuration files. + // + // There are helper functions in the [config] package that can be used, + // such as: + // + // - [config.StaticDirectory] + // - [config.TestNameDirectory] + // - [config.TestStepDirectory] + // + // When running Terraform operations for the test, Terraform will + // be executed with copies of the files of this directory as its + // working directory. Only one of Config, ConfigDirectory or + // ConfigFile can be set otherwise an error will be returned. + ConfigDirectory config.TestStepConfigFunc + + // ConfigFile is a function which returns a function that + // accepts config.TestStepProviderConfig and returns a string + // representing a file that contains Terraform configuration. + // + // There are helper functions in the [config] package that can be used, + // such as: + // + // - [config.StaticFile] + // - [config.TestNameFile] + // - [config.TestStepFile] + // + // When running Terraform operations for the test, Terraform will + // be executed with a copy of the file as its working directory. + // Only one of Config, ConfigDirectory or ConfigFile can be set + // otherwise an error will be returned. + ConfigFile config.TestStepConfigFunc + + // ConfigVariables is a map defining variables for use in conjunction + // with Terraform configuration. If this map is populated then it + // will be used to assemble an *.auto.tfvars.json which will be + // written into the working directory. Any variables that are + // defined within the Terraform configuration that have a matching + // variable definition in *.auto.tfvars.json will have their value + // substituted when the acceptance test is executed. + ConfigVariables config.Variables + // Check is called after the Config is applied. Use this step to // make your own API calls to check the status of things, and to // inspect the format of the ResourceState itself. @@ -501,6 +567,20 @@ type TestStep struct { // test to pass. ExpectError *regexp.Regexp + // ConfigPlanChecks allows assertions to be made against the plan file at different points of a Config (apply) test using a plan check. + // Custom plan checks can be created by implementing the [PlanCheck] interface, or by using a PlanCheck implementation from the provided [plancheck] package + // + // [PlanCheck]: https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#PlanCheck + // [plancheck]: https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck + ConfigPlanChecks ConfigPlanChecks + + // RefreshPlanChecks allows assertions to be made against the plan file at different points of a Refresh test using a plan check. + // Custom plan checks can be created by implementing the [PlanCheck] interface, or by using a PlanCheck implementation from the provided [plancheck] package + // + // [PlanCheck]: https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck#PlanCheck + // [plancheck]: https://pkg.go.dev/github.com/hashicorp/terraform-plugin-testing/plancheck + RefreshPlanChecks RefreshPlanChecks + // PlanOnly can be set to only run `plan` with this configuration, and not // actually apply it. This is useful for ensuring config changes result in // no-op plans @@ -573,10 +653,24 @@ type TestStep struct { // IDs returned by the Import. Note that this checks for strict equality // and does not respect DiffSuppressFunc or CustomizeDiff. // + // By default, the prior resource state and import resource state are + // matched by the "id" attribute. If the "id" attribute is not implemented + // or another attribute more uniquely identifies the resource, set the + // ImportStateVerifyIdentifierAttribute field to adjust the attribute for + // matching. + // + // If certain attributes cannot be correctly imported, set the + // ImportStateVerifyIgnore field. + ImportStateVerify bool + + // ImportStateVerifyIdentifierAttribute is the resource attribute for + // matching the prior resource state and import resource state during import + // verification. By default, the "id" attribute is used. + ImportStateVerifyIdentifierAttribute string + // ImportStateVerifyIgnore is a list of prefixes of fields that should // not be verified to be equal. These can be set to ephemeral fields or // fields that can't be refreshed and don't matter. - ImportStateVerify bool ImportStateVerifyIgnore []string // ImportStatePersist, if true, will update the persisted state with the @@ -670,6 +764,28 @@ type TestStep struct { ExternalProviders map[string]ExternalProvider } +// ConfigPlanChecks defines the different points in a Config TestStep when plan checks can be run. +type ConfigPlanChecks struct { + // PreApply runs all plan checks in the slice. This occurs before the apply of a Config test is run. This slice cannot be populated + // with TestStep.PlanOnly, as there is no PreApply plan run with that flag set. All errors by plan checks in this slice are aggregated, reported, and will result in a test failure. + PreApply []plancheck.PlanCheck + + // PostApplyPreRefresh runs all plan checks in the slice. This occurs after the apply and before the refresh of a Config test is run. + // All errors by plan checks in this slice are aggregated, reported, and will result in a test failure. + PostApplyPreRefresh []plancheck.PlanCheck + + // PostApplyPostRefresh runs all plan checks in the slice. This occurs after the apply and refresh of a Config test are run. + // All errors by plan checks in this slice are aggregated, reported, and will result in a test failure. + PostApplyPostRefresh []plancheck.PlanCheck +} + +// RefreshPlanChecks defines the different points in a Refresh TestStep when plan checks can be run. +type RefreshPlanChecks struct { + // PostRefresh runs all plan checks in the slice. This occurs after the refresh of the Refresh test is run. + // All errors by plan checks in this slice are aggregated, reported, and will result in a test failure. + PostRefresh []plancheck.PlanCheck +} + // ParallelTest performs an acceptance test on a resource, allowing concurrency // with other ParallelTest. The number of concurrent tests is controlled by the // "go test" command -parallel flag. @@ -721,7 +837,7 @@ func Test(t testing.T, c TestCase) { ctx := context.Background() ctx = logging.InitTestContext(ctx, t) - err := c.validate(ctx) + err := c.validate(ctx, t) if err != nil { logging.HelperResourceError(ctx, @@ -778,6 +894,17 @@ func Test(t testing.T, c TestCase) { } }(helper) + // Run the TerraformVersionChecks if we have it. + // This is done after creating the helper because a working directory is required + // to retrieve the Terraform version. + if c.TerraformVersionChecks != nil { + logging.HelperResourceDebug(ctx, "Calling TestCase Terraform version checks") + + runTFVersionChecks(ctx, t, helper.TerraformVersion(), c.TerraformVersionChecks) + + logging.HelperResourceDebug(ctx, "Called TestCase Terraform version checks") + } + runNewTest(ctx, t, c, helper) logging.HelperResourceDebug(ctx, "Finished TestCase") @@ -905,6 +1032,14 @@ func TestCheckResourceAttrSet(name, key string) TestCheckFunc { // TestCheckModuleResourceAttrSet - as per TestCheckResourceAttrSet but with // support for non-root modules +// +// Deprecated: This functionality is deprecated without replacement. The +// terraform-plugin-testing Go module is intended for provider testing, which +// should always be possible within the root module of a configuration. This +// functionality is a carryover of when this code was used within Terraform +// core to test both providers and modules. Modern testing implementations to +// verify interactions between modules should be tested in Terraform core or +// using tooling outside this Go module. func TestCheckModuleResourceAttrSet(mp []string, name string, key string) TestCheckFunc { mpt := addrs.Module(mp).UnkeyedInstanceShim() return checkIfIndexesIntoTypeSet(key, func(s *terraform.State) error { @@ -996,6 +1131,14 @@ func TestCheckResourceAttr(name, key, value string) TestCheckFunc { // TestCheckModuleResourceAttr - as per TestCheckResourceAttr but with // support for non-root modules +// +// Deprecated: This functionality is deprecated without replacement. The +// terraform-plugin-testing Go module is intended for provider testing, which +// should always be possible within the root module of a configuration. This +// functionality is a carryover of when this code was used within Terraform +// core to test both providers and modules. Modern testing implementations to +// verify interactions between modules should be tested in Terraform core or +// using tooling outside this Go module. func TestCheckModuleResourceAttr(mp []string, name string, key string, value string) TestCheckFunc { mpt := addrs.Module(mp).UnkeyedInstanceShim() return checkIfIndexesIntoTypeSet(key, func(s *terraform.State) error { @@ -1160,6 +1303,14 @@ func TestCheckNoResourceAttr(name, key string) TestCheckFunc { // TestCheckModuleNoResourceAttr - as per TestCheckNoResourceAttr but with // support for non-root modules +// +// Deprecated: This functionality is deprecated without replacement. The +// terraform-plugin-testing Go module is intended for provider testing, which +// should always be possible within the root module of a configuration. This +// functionality is a carryover of when this code was used within Terraform +// core to test both providers and modules. Modern testing implementations to +// verify interactions between modules should be tested in Terraform core or +// using tooling outside this Go module. func TestCheckModuleNoResourceAttr(mp []string, name string, key string) TestCheckFunc { mpt := addrs.Module(mp).UnkeyedInstanceShim() return checkIfIndexesIntoTypeSet(key, func(s *terraform.State) error { @@ -1256,6 +1407,14 @@ func TestMatchResourceAttr(name, key string, r *regexp.Regexp) TestCheckFunc { // TestModuleMatchResourceAttr - as per TestMatchResourceAttr but with // support for non-root modules +// +// Deprecated: This functionality is deprecated without replacement. The +// terraform-plugin-testing Go module is intended for provider testing, which +// should always be possible within the root module of a configuration. This +// functionality is a carryover of when this code was used within Terraform +// core to test both providers and modules. Modern testing implementations to +// verify interactions between modules should be tested in Terraform core or +// using tooling outside this Go module. func TestModuleMatchResourceAttr(mp []string, name string, key string, r *regexp.Regexp) TestCheckFunc { mpt := addrs.Module(mp).UnkeyedInstanceShim() return checkIfIndexesIntoTypeSet(key, func(s *terraform.State) error { @@ -1295,6 +1454,14 @@ func TestCheckResourceAttrPtr(name string, key string, value *string) TestCheckF // TestCheckModuleResourceAttrPtr - as per TestCheckResourceAttrPtr but with // support for non-root modules +// +// Deprecated: This functionality is deprecated without replacement. The +// terraform-plugin-testing Go module is intended for provider testing, which +// should always be possible within the root module of a configuration. This +// functionality is a carryover of when this code was used within Terraform +// core to test both providers and modules. Modern testing implementations to +// verify interactions between modules should be tested in Terraform core or +// using tooling outside this Go module. func TestCheckModuleResourceAttrPtr(mp []string, name string, key string, value *string) TestCheckFunc { return func(s *terraform.State) error { return TestCheckModuleResourceAttr(mp, name, key, *value)(s) @@ -1352,6 +1519,14 @@ func TestCheckResourceAttrPair(nameFirst, keyFirst, nameSecond, keySecond string // TestCheckModuleResourceAttrPair - as per TestCheckResourceAttrPair but with // support for non-root modules +// +// Deprecated: This functionality is deprecated without replacement. The +// terraform-plugin-testing Go module is intended for provider testing, which +// should always be possible within the root module of a configuration. This +// functionality is a carryover of when this code was used within Terraform +// core to test both providers and modules. Modern testing implementations to +// verify interactions between modules should be tested in Terraform core or +// using tooling outside this Go module. func TestCheckModuleResourceAttrPair(mpFirst []string, nameFirst string, keyFirst string, mpSecond []string, nameSecond string, keySecond string) TestCheckFunc { mptFirst := addrs.Module(mpFirst).UnkeyedInstanceShim() mptSecond := addrs.Module(mpSecond).UnkeyedInstanceShim() @@ -1448,7 +1623,12 @@ func TestMatchOutput(name string, r *regexp.Regexp) TestCheckFunc { return fmt.Errorf("Not found: %s", name) } - if !r.MatchString(rs.Value.(string)) { + valStr, ok := rs.Value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for resource value", rs.Value) + } + + if !r.MatchString(valStr) { return fmt.Errorf( "Output '%s': %#v didn't match %q", name, @@ -1479,7 +1659,7 @@ func modulePrimaryInstanceState(ms *terraform.ModuleState, name string) (*terraf // modulePathPrimaryInstanceState returns the primary instance state for the // given resource name in a given module path. func modulePathPrimaryInstanceState(s *terraform.State, mp addrs.ModuleInstance, name string) (*terraform.InstanceState, error) { - ms := s.ModuleByPath(mp) + ms := s.ModuleByPath(mp) //nolint:staticcheck // legacy usage if ms == nil { return nil, fmt.Errorf("No module found at: %s", mp) } @@ -1490,7 +1670,7 @@ func modulePathPrimaryInstanceState(s *terraform.State, mp addrs.ModuleInstance, // primaryInstanceState returns the primary instance state for the given // resource name in the root module. func primaryInstanceState(s *terraform.State, name string) (*terraform.InstanceState, error) { - ms := s.RootModule() + ms := s.RootModule() //nolint:staticcheck // legacy usage return modulePrimaryInstanceState(ms, name) } @@ -1509,7 +1689,7 @@ func indexesIntoTypeSet(key string) bool { func checkIfIndexesIntoTypeSet(key string, f TestCheckFunc) TestCheckFunc { return func(s *terraform.State) error { err := f(s) - if err != nil && s.IsBinaryDrivenTest && indexesIntoTypeSet(key) { + if err != nil && indexesIntoTypeSet(key) { return fmt.Errorf("Error in test check: %s\nTest check address %q likely indexes into TypeSet\nThis is currently not possible in the SDK", err, key) } return err @@ -1519,7 +1699,7 @@ func checkIfIndexesIntoTypeSet(key string, f TestCheckFunc) TestCheckFunc { func checkIfIndexesIntoTypeSetPair(keyFirst, keySecond string, f TestCheckFunc) TestCheckFunc { return func(s *terraform.State) error { err := f(s) - if err != nil && s.IsBinaryDrivenTest && (indexesIntoTypeSet(keyFirst) || indexesIntoTypeSet(keySecond)) { + if err != nil && (indexesIntoTypeSet(keyFirst) || indexesIntoTypeSet(keySecond)) { return fmt.Errorf("Error in test check: %s\nTest check address %q or %q likely indexes into TypeSet\nThis is currently not possible in the SDK", err, keyFirst, keySecond) } return err diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new.go index 86f653f8f8979..96ad3eec02829 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new.go @@ -6,17 +6,21 @@ package resource import ( "context" "fmt" + "os" + "path/filepath" "reflect" + "strconv" "strings" "github.com/google/go-cmp/cmp" tfjson "github.com/hashicorp/terraform-json" "github.com/mitchellh/go-testing-interface" - "github.com/hashicorp/terraform-plugin-testing/terraform" - + "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/internal/logging" "github.com/hashicorp/terraform-plugin-testing/internal/plugintest" + "github.com/hashicorp/terraform-plugin-testing/internal/teststep" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func runPostTestDestroy(ctx context.Context, t testing.T, c TestCase, wd *plugintest.WorkingDir, providers *providerFactories, statePreDestroy *terraform.State) error { @@ -46,7 +50,7 @@ func runPostTestDestroy(ctx context.Context, t testing.T, c TestCase, wd *plugin func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest.Helper) { t.Helper() - wd := helper.RequireNewWorkingDir(ctx, t) + wd := helper.RequireNewWorkingDir(ctx, t, c.WorkingDir) ctx = logging.TestTerraformPathContext(ctx, wd.GetHelper().TerraformExecPath()) ctx = logging.TestWorkingDirectoryContext(ctx, wd.GetHelper().WorkingDirectory()) @@ -90,8 +94,16 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest wd.Close() }() + // Return value from c.ProviderConfig() is assigned to Raw as this was previously being + // passed to wd.SetConfig() when the second argument accept a configuration string. if c.hasProviders(ctx) { - err := wd.SetConfig(ctx, c.providerConfig(ctx, false)) + config := teststep.Configuration( + teststep.ConfigurationRequest{ + Raw: teststep.Pointer(c.providerConfig(ctx, false)), + }, + ) + + err := wd.SetConfig(ctx, config, nil) if err != nil { logging.HelperResourceError(ctx, @@ -118,10 +130,28 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest // use this to track last step successfully applied // acts as default for import tests - var appliedCfg string + var appliedCfg teststep.Config + var stepNumber int for stepIndex, step := range c.Steps { - stepNumber := stepIndex + 1 // 1-based indexing for humans + if stepNumber > 0 { + copyWorkingDir(ctx, t, stepNumber, wd) + } + + stepNumber = stepIndex + 1 // 1-based indexing for humans + + configRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: step.Config, + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepNumber, + TestName: t.Name(), + }, + }.Exec() + + cfg := teststep.Configuration(configRequest) + ctx = logging.TestStepNumberContext(ctx, stepNumber) logging.HelperResourceDebug(ctx, "Starting TestStep") @@ -153,7 +183,7 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest } } - if step.Config != "" && !step.Destroy && len(step.Taint) > 0 { + if cfg != nil && !step.Destroy && len(step.Taint) > 0 { err := testStepTaint(ctx, step, wd) if err != nil { @@ -165,16 +195,55 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest } } - if step.hasProviders(ctx) { + hasProviders, err := step.hasProviders(ctx, stepIndex, t.Name()) + + if err != nil { + logging.HelperResourceError(ctx, + "TestStep error checking for providers", + map[string]interface{}{logging.KeyError: err}, + ) + t.Fatalf("TestStep %d/%d error checking for providers: %s", stepNumber, len(c.Steps), err) + } + + if hasProviders { providers = &providerFactories{ legacy: sdkProviderFactories(c.ProviderFactories).merge(step.ProviderFactories), protov5: protov5ProviderFactories(c.ProtoV5ProviderFactories).merge(step.ProtoV5ProviderFactories), protov6: protov6ProviderFactories(c.ProtoV6ProviderFactories).merge(step.ProtoV6ProviderFactories), } - providerCfg := step.providerConfig(ctx, step.configHasProviderBlock(ctx)) + var hasProviderBlock bool + + if cfg != nil { + hasProviderBlock, err = cfg.HasProviderBlock(ctx) + + if err != nil { + logging.HelperResourceError(ctx, + "TestStep error determining whether configuration contains provider block", + map[string]interface{}{logging.KeyError: err}, + ) + t.Fatalf("TestStep %d/%d error determining whether configuration contains provider block: %s", stepNumber, len(c.Steps), err) + } + } + + var testStepConfig teststep.Config + + // Return value from step.providerConfig() is assigned to Raw as this was previously being + // passed to wd.SetConfig() directly when the second argument to wd.SetConfig() accepted a + // configuration string. + confRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: step.providerConfig(ctx, hasProviderBlock), + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepIndex + 1, + TestName: t.Name(), + }, + }.Exec() + + testStepConfig = teststep.Configuration(confRequest) - err := wd.SetConfig(ctx, providerCfg) + err = wd.SetConfig(ctx, testStepConfig, step.ConfigVariables) if err != nil { logging.HelperResourceError(ctx, @@ -207,7 +276,7 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest if step.ImportState { logging.HelperResourceTrace(ctx, "TestStep is ImportState mode") - err := testStepNewImportState(ctx, t, helper, wd, step, appliedCfg, providers) + err := testStepNewImportState(ctx, t, helper, wd, step, appliedCfg, providers, stepIndex) if step.ExpectError != nil { logging.HelperResourceDebug(ctx, "Checking TestStep ExpectError") if err == nil { @@ -282,10 +351,10 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest continue } - if step.Config != "" { + if cfg != nil { logging.HelperResourceTrace(ctx, "TestStep is Config mode") - err := testStepNewConfig(ctx, t, c, wd, step, providers) + err := testStepNewConfig(ctx, t, c, wd, step, providers, stepIndex) if step.ExpectError != nil { logging.HelperResourceDebug(ctx, "Checking TestStep ExpectError") @@ -319,7 +388,44 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest } } - appliedCfg = step.mergedConfig(ctx, c) + var hasTerraformBlock bool + var hasProviderBlock bool + + if cfg != nil { + hasTerraformBlock, err = cfg.HasTerraformBlock(ctx) + + if err != nil { + logging.HelperResourceError(ctx, + "Error determining whether configuration contains terraform block", + map[string]interface{}{logging.KeyError: err}, + ) + t.Fatalf("Error determining whether configuration contains terraform block: %s", err) + } + + hasProviderBlock, err = cfg.HasProviderBlock(ctx) + + if err != nil { + logging.HelperResourceError(ctx, + "Error determining whether configuration contains provider block", + map[string]interface{}{logging.KeyError: err}, + ) + t.Fatalf("Error determining whether configuration contains provider block: %s", err) + } + } + + mergedConfig := step.mergedConfig(ctx, c, hasTerraformBlock, hasProviderBlock) + + confRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: mergedConfig, + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepIndex + 1, + TestName: t.Name(), + }, + }.Exec() + + appliedCfg = teststep.Configuration(confRequest) logging.HelperResourceDebug(ctx, "Finished TestStep") @@ -328,6 +434,10 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest t.Fatalf("Step %d/%d, unsupported test mode", stepNumber, len(c.Steps)) } + + if stepNumber > 0 { + copyWorkingDir(ctx, t, stepNumber, wd) + } } func getState(ctx context.Context, t testing.T, wd *plugintest.WorkingDir) (*terraform.State, error) { @@ -345,7 +455,7 @@ func getState(ctx context.Context, t testing.T, wd *plugintest.WorkingDir) (*ter } func stateIsEmpty(state *terraform.State) bool { - return state.Empty() || !state.HasResources() + return state.Empty() || !state.HasResources() //nolint:staticcheck // legacy usage } func planIsEmpty(plan *tfjson.Plan) bool { @@ -359,23 +469,73 @@ func planIsEmpty(plan *tfjson.Plan) bool { return true } -func testIDRefresh(ctx context.Context, t testing.T, c TestCase, wd *plugintest.WorkingDir, step TestStep, r *terraform.ResourceState, providers *providerFactories) error { +func testIDRefresh(ctx context.Context, t testing.T, c TestCase, wd *plugintest.WorkingDir, step TestStep, r *terraform.ResourceState, providers *providerFactories, stepIndex int) error { t.Helper() // Build the state. The state is just the resource with an ID. There // are no attributes. We only set what is needed to perform a refresh. - state := terraform.NewState() + state := terraform.NewState() //nolint:staticcheck // legacy usage state.RootModule().Resources = make(map[string]*terraform.ResourceState) state.RootModule().Resources[c.IDRefreshName] = &terraform.ResourceState{} + configRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: step.Config, + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepIndex + 1, + TestName: t.Name(), + }, + }.Exec() + + cfg := teststep.Configuration(configRequest) + + var hasProviderBlock bool + + if cfg != nil { + var err error + + hasProviderBlock, err = cfg.HasProviderBlock(ctx) + + if err != nil { + logging.HelperResourceError(ctx, + "Error determining whether configuration contains provider block for import test config", + map[string]interface{}{logging.KeyError: err}, + ) + t.Fatalf("Error determining whether configuration contains provider block for import test config: %s", err) + } + } + + // Return value from c.ProviderConfig() is assigned to Raw as this was previously being + // passed to wd.SetConfig() when the second argument accept a configuration string. + testStepConfig := teststep.Configuration( + teststep.ConfigurationRequest{ + Raw: teststep.Pointer(c.providerConfig(ctx, hasProviderBlock)), + }, + ) + // Temporarily set the config to a minimal provider config for the refresh // test. After the refresh we can reset it. - err := wd.SetConfig(ctx, c.providerConfig(ctx, step.configHasProviderBlock(ctx))) + err := wd.SetConfig(ctx, testStepConfig, step.ConfigVariables) if err != nil { t.Fatalf("Error setting import test config: %s", err) } + defer func() { - err = wd.SetConfig(ctx, step.Config) + confRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: step.providerConfig(ctx, hasProviderBlock), + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepIndex + 1, + TestName: t.Name(), + }, + }.Exec() + + testStepConfigDefer := teststep.Configuration(confRequest) + + err = wd.SetConfig(ctx, testStepConfigDefer, step.ConfigVariables) + if err != nil { t.Fatalf("Error resetting test config: %s", err) } @@ -442,3 +602,27 @@ func testIDRefresh(ctx context.Context, t testing.T, c TestCase, wd *plugintest. return nil } + +func copyWorkingDir(ctx context.Context, t testing.T, stepNumber int, wd *plugintest.WorkingDir) { + if os.Getenv(plugintest.EnvTfAccPersistWorkingDir) == "" { + return + } + + workingDir := wd.GetHelper().WorkingDirectory() + + dest := filepath.Join(workingDir, fmt.Sprintf("%s%s", "step_", strconv.Itoa(stepNumber))) + + baseDir := wd.BaseDir() + rootBaseDir := strings.TrimLeft(baseDir, workingDir) + + err := plugintest.CopyDir(workingDir, dest, rootBaseDir) + if err != nil { + logging.HelperResourceError(ctx, + "Unexpected error copying working directory files", + map[string]interface{}{logging.KeyError: err}, + ) + t.Fatalf("TestStep %d/%d error copying working directory files: %s", stepNumber, err) + } + + t.Logf("Working directory and files have been copied to: %s", dest) +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_config.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_config.go index 3ad3f0916512b..5df394d94cf01 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_config.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_config.go @@ -11,16 +11,71 @@ import ( tfjson "github.com/hashicorp/terraform-json" "github.com/mitchellh/go-testing-interface" + "github.com/hashicorp/terraform-plugin-testing/config" + "github.com/hashicorp/terraform-plugin-testing/internal/teststep" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-plugin-testing/internal/logging" "github.com/hashicorp/terraform-plugin-testing/internal/plugintest" ) -func testStepNewConfig(ctx context.Context, t testing.T, c TestCase, wd *plugintest.WorkingDir, step TestStep, providers *providerFactories) error { +func testStepNewConfig(ctx context.Context, t testing.T, c TestCase, wd *plugintest.WorkingDir, step TestStep, providers *providerFactories, stepIndex int) error { t.Helper() - err := wd.SetConfig(ctx, step.mergedConfig(ctx, c)) + configRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: step.Config, + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepIndex + 1, + TestName: t.Name(), + }, + }.Exec() + + cfg := teststep.Configuration(configRequest) + + var hasTerraformBlock bool + var hasProviderBlock bool + + if cfg != nil { + var err error + + hasTerraformBlock, err = cfg.HasTerraformBlock(ctx) + + if err != nil { + logging.HelperResourceError(ctx, + "Error determining whether configuration contains terraform block", + map[string]interface{}{logging.KeyError: err}, + ) + t.Fatalf("Error determining whether configuration contains terraform block: %s", err) + } + + hasProviderBlock, err = cfg.HasProviderBlock(ctx) + + if err != nil { + logging.HelperResourceError(ctx, + "Error determining whether configuration contains provider block", + map[string]interface{}{logging.KeyError: err}, + ) + t.Fatalf("Error determining whether configuration contains provider block: %s", err) + } + } + + mergedConfig := step.mergedConfig(ctx, c, hasTerraformBlock, hasProviderBlock) + + confRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: mergedConfig, + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepIndex + 1, + TestName: t.Name(), + }, + }.Exec() + + testStepConfig := teststep.Configuration(confRequest) + + err := wd.SetConfig(ctx, testStepConfig, step.ConfigVariables) if err != nil { return fmt.Errorf("Error setting config: %w", err) } @@ -51,6 +106,24 @@ func testStepNewConfig(ctx context.Context, t testing.T, c TestCase, wd *plugint return fmt.Errorf("Error running pre-apply plan: %w", err) } + // Run pre-apply plan checks + if len(step.ConfigPlanChecks.PreApply) > 0 { + var plan *tfjson.Plan + err = runProviderCommand(ctx, t, func() error { + var err error + plan, err = wd.SavedPlan(ctx) + return err + }, wd, providers) + if err != nil { + return fmt.Errorf("Error retrieving pre-apply plan: %w", err) + } + + err = runPlanChecks(ctx, t, plan, step.ConfigPlanChecks.PreApply) + if err != nil { + return fmt.Errorf("Pre-apply plan check(s) failed:\n%w", err) + } + } + // We need to keep a copy of the state prior to destroying such // that the destroy steps can verify their behavior in the // check function @@ -94,7 +167,6 @@ func testStepNewConfig(ctx context.Context, t testing.T, c TestCase, wd *plugint if step.Check != nil { logging.HelperResourceTrace(ctx, "Using TestStep Check") - state.IsBinaryDrivenTest = true if step.Destroy { if err := step.Check(stateBeforeApplication); err != nil { return fmt.Errorf("Check failed: %w", err) @@ -131,6 +203,14 @@ func testStepNewConfig(ctx context.Context, t testing.T, c TestCase, wd *plugint return fmt.Errorf("Error retrieving post-apply plan: %w", err) } + // Run post-apply, pre-refresh plan checks + if len(step.ConfigPlanChecks.PostApplyPreRefresh) > 0 { + err = runPlanChecks(ctx, t, plan, step.ConfigPlanChecks.PostApplyPreRefresh) + if err != nil { + return fmt.Errorf("Post-apply, pre-refresh plan check(s) failed:\n%w", err) + } + } + if !planIsEmpty(plan) && !step.ExpectNonEmptyPlan { var stdout string err = runProviderCommand(ctx, t, func() error { @@ -174,6 +254,14 @@ func testStepNewConfig(ctx context.Context, t testing.T, c TestCase, wd *plugint return fmt.Errorf("Error retrieving second post-apply plan: %w", err) } + // Run post-apply, post-refresh plan checks + if len(step.ConfigPlanChecks.PostApplyPostRefresh) > 0 { + err = runPlanChecks(ctx, t, plan, step.ConfigPlanChecks.PostApplyPostRefresh) + if err != nil { + return fmt.Errorf("Post-apply, post-refresh plan check(s) failed:\n%w", err) + } + } + // check if plan is empty if !planIsEmpty(plan) && !step.ExpectNonEmptyPlan { var stdout string @@ -210,6 +298,7 @@ func testStepNewConfig(ctx context.Context, t testing.T, c TestCase, wd *plugint return err } + //nolint:staticcheck // legacy usage if state.Empty() { return nil } @@ -234,7 +323,7 @@ func testStepNewConfig(ctx context.Context, t testing.T, c TestCase, wd *plugint // this fails. If refresh isn't read-only, then this will have // caught a different bug. if idRefreshCheck != nil { - if err := testIDRefresh(ctx, t, c, wd, step, idRefreshCheck, providers); err != nil { + if err := testIDRefresh(ctx, t, c, wd, step, idRefreshCheck, providers, stepIndex); err != nil { return fmt.Errorf( "[ERROR] Test: ID-only test failed: %s", err) } diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_import_state.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_import_state.go index b1124894b7613..7dbc0b800b4d0 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_import_state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_import_state.go @@ -12,15 +12,29 @@ import ( "github.com/google/go-cmp/cmp" "github.com/mitchellh/go-testing-interface" + "github.com/hashicorp/terraform-plugin-testing/config" + "github.com/hashicorp/terraform-plugin-testing/internal/teststep" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-plugin-testing/internal/logging" "github.com/hashicorp/terraform-plugin-testing/internal/plugintest" ) -func testStepNewImportState(ctx context.Context, t testing.T, helper *plugintest.Helper, wd *plugintest.WorkingDir, step TestStep, cfg string, providers *providerFactories) error { +func testStepNewImportState(ctx context.Context, t testing.T, helper *plugintest.Helper, wd *plugintest.WorkingDir, step TestStep, cfg teststep.Config, providers *providerFactories, stepIndex int) error { t.Helper() + configRequest := teststep.PrepareConfigurationRequest{ + Directory: step.ConfigDirectory, + File: step.ConfigFile, + Raw: step.Config, + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepIndex + 1, + TestName: t.Name(), + }, + }.Exec() + + testStepConfig := teststep.Configuration(configRequest) + if step.ResourceName == "" { t.Fatal("ResourceName is required for an import state test") } @@ -28,6 +42,7 @@ func testStepNewImportState(ctx context.Context, t testing.T, helper *plugintest // get state from check sequence var state *terraform.State var err error + err = runProviderCommand(ctx, t, func() error { state, err = getState(ctx, t, wd) if err != nil { @@ -79,11 +94,11 @@ func testStepNewImportState(ctx context.Context, t testing.T, helper *plugintest logging.HelperResourceTrace(ctx, fmt.Sprintf("Using import identifier: %s", importId)) // Create working directory for import tests - if step.Config == "" { + if testStepConfig == nil { logging.HelperResourceTrace(ctx, "Using prior TestStep Config for import") - step.Config = cfg - if step.Config == "" { + testStepConfig = cfg + if testStepConfig == nil { t.Fatal("Cannot import state with no specified config") } } @@ -94,11 +109,11 @@ func testStepNewImportState(ctx context.Context, t testing.T, helper *plugintest if step.ImportStatePersist { importWd = wd } else { - importWd = helper.RequireNewWorkingDir(ctx, t) + importWd = helper.RequireNewWorkingDir(ctx, t, "") defer importWd.Close() } - err = importWd.SetConfig(ctx, step.Config) + err = importWd.SetConfig(ctx, testStepConfig, step.ConfigVariables) if err != nil { t.Fatalf("Error setting test config: %s", err) } @@ -147,7 +162,7 @@ func testStepNewImportState(ctx context.Context, t testing.T, helper *plugintest continue } - is := r.Primary.DeepCopy() + is := r.Primary.DeepCopy() //nolint:staticcheck // legacy usage is.Ephemeral.Type = r.Type // otherwise the check function cannot see the type states = append(states, is) } @@ -182,12 +197,33 @@ func testStepNewImportState(ctx context.Context, t testing.T, helper *plugintest } } + identifierAttribute := step.ImportStateVerifyIdentifierAttribute + + if identifierAttribute == "" { + identifierAttribute = "id" + } + for _, r := range newResources { + rIdentifier, ok := r.Primary.Attributes[identifierAttribute] + + if !ok { + t.Fatalf("ImportStateVerify: New resource missing identifier attribute %q, ensure attribute value is properly set or use ImportStateVerifyIdentifierAttribute to choose different attribute", identifierAttribute) + } + // Find the existing resource var oldR *terraform.ResourceState for _, r2 := range oldResources { + if r2.Primary == nil || r2.Type != r.Type || r2.Provider != r.Provider { + continue + } + + r2Identifier, ok := r2.Primary.Attributes[identifierAttribute] + + if !ok { + t.Fatalf("ImportStateVerify: Old resource missing identifier attribute %q, ensure attribute value is properly set or use ImportStateVerifyIdentifierAttribute to choose different attribute", identifierAttribute) + } - if r2.Primary != nil && r2.Primary.ID == r.Primary.ID && r2.Type == r.Type && r2.Provider == r.Provider { + if r2Identifier == rIdentifier { oldR = r2 break } @@ -195,7 +231,7 @@ func testStepNewImportState(ctx context.Context, t testing.T, helper *plugintest if oldR == nil || oldR.Primary == nil { t.Fatalf( "Failed state verification, resource with ID %s not found", - r.Primary.ID) + rIdentifier) } // don't add empty flatmapped containers, so we can more easily diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_refresh_state.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_refresh_state.go index fe7b2814539f6..86073b165d14e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_refresh_state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/testing_new_refresh_state.go @@ -67,7 +67,7 @@ func testStepNewRefreshState(ctx context.Context, t testing.T, wd *plugintest.Wo return wd.CreatePlan(ctx) }, wd, providers) if err != nil { - return fmt.Errorf("Error running post-apply plan: %w", err) + return fmt.Errorf("Error running post-refresh plan: %w", err) } var plan *tfjson.Plan @@ -77,7 +77,15 @@ func testStepNewRefreshState(ctx context.Context, t testing.T, wd *plugintest.Wo return err }, wd, providers) if err != nil { - return fmt.Errorf("Error retrieving post-apply plan: %w", err) + return fmt.Errorf("Error retrieving post-refresh plan: %w", err) + } + + // Run post-refresh plan checks + if len(step.RefreshPlanChecks.PostRefresh) > 0 { + err = runPlanChecks(ctx, t, plan, step.RefreshPlanChecks.PostRefresh) + if err != nil { + return fmt.Errorf("Post-refresh plan check(s) failed:\n%w", err) + } } if !planIsEmpty(plan) && !step.ExpectNonEmptyPlan { diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/teststep_providers.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/teststep_providers.go index 9b759bde03ae3..1e2aa843effe5 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/teststep_providers.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/teststep_providers.go @@ -6,24 +6,9 @@ package resource import ( "context" "fmt" - "regexp" "strings" ) -var configProviderBlockRegex = regexp.MustCompile(`provider "?[a-zA-Z0-9_-]+"? {`) - -// configHasProviderBlock returns true if the Config has declared a provider -// configuration block, e.g. provider "examplecloud" {...} -func (s TestStep) configHasProviderBlock(_ context.Context) bool { - return configProviderBlockRegex.MatchString(s.Config) -} - -// configHasTerraformBlock returns true if the Config has declared a terraform -// configuration block, e.g. terraform {...} -func (s TestStep) configHasTerraformBlock(_ context.Context) bool { - return strings.Contains(s.Config, "terraform {") -} - // mergedConfig prepends any necessary terraform configuration blocks to the // TestStep Config. // @@ -31,21 +16,26 @@ func (s TestStep) configHasTerraformBlock(_ context.Context) bool { // TestStep, the terraform configuration block should be included with the // step configuration to prevent errors with providers outside the // registry.terraform.io hostname or outside the hashicorp namespace. -func (s TestStep) mergedConfig(ctx context.Context, testCase TestCase) string { +// This is only necessary when using TestStep.Config. +// +// When TestStep.ConfigDirectory is used, the expectation is that the +// Terraform configuration files will specify a terraform configuration +// block and/or provider blocks as necessary. +func (s TestStep) mergedConfig(ctx context.Context, testCase TestCase, configHasTerraformBlock, configHasProviderBlock bool) string { var config strings.Builder // Prevent issues with existing configurations containing the terraform // configuration block. - if s.configHasTerraformBlock(ctx) { + if configHasTerraformBlock { config.WriteString(s.Config) return config.String() } if testCase.hasProviders(ctx) { - config.WriteString(testCase.providerConfig(ctx, s.configHasProviderBlock(ctx))) + config.WriteString(testCase.providerConfig(ctx, configHasProviderBlock)) } else { - config.WriteString(s.providerConfig(ctx, s.configHasProviderBlock(ctx))) + config.WriteString(s.providerConfig(ctx, configHasProviderBlock)) } config.WriteString(s.Config) diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/teststep_validate.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/teststep_validate.go index 082d9e6dd1d3b..d63db4dc89ead 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/teststep_validate.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/teststep_validate.go @@ -7,41 +7,88 @@ import ( "context" "fmt" + "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/internal/logging" + "github.com/hashicorp/terraform-plugin-testing/internal/teststep" ) // testStepValidateRequest contains data for the (TestStep).validate() method. type testStepValidateRequest struct { + // StepConfiguration contains the TestStep configuration derived from + // TestStep.Config or TestStep.ConfigDirectory. + StepConfiguration teststep.Config + // StepNumber is the index of the TestStep in the TestCase.Steps. StepNumber int + // TestCaseHasExternalProviders is enabled if the TestCase has + // ExternalProviders. + TestCaseHasExternalProviders bool + // TestCaseHasProviders is enabled if the TestCase has set any of // ExternalProviders, ProtoV5ProviderFactories, ProtoV6ProviderFactories, // or ProviderFactories. TestCaseHasProviders bool + + // TestName is the name of the test. + TestName string +} + +// hasExternalProviders returns true if the TestStep has +// ExternalProviders set. +func (s TestStep) hasExternalProviders() bool { + return len(s.ExternalProviders) > 0 } // hasProviders returns true if the TestStep has set any of the // ExternalProviders, ProtoV5ProviderFactories, ProtoV6ProviderFactories, or -// ProviderFactories fields. -func (s TestStep) hasProviders(_ context.Context) bool { +// ProviderFactories fields. It will also return true if ConfigDirectory or +// Config contain terraform configuration which specify a provider block. +func (s TestStep) hasProviders(ctx context.Context, stepIndex int, testName string) (bool, error) { if len(s.ExternalProviders) > 0 { - return true + return true, nil } if len(s.ProtoV5ProviderFactories) > 0 { - return true + return true, nil } if len(s.ProtoV6ProviderFactories) > 0 { - return true + return true, nil } if len(s.ProviderFactories) > 0 { - return true + return true, nil + } + + configRequest := teststep.PrepareConfigurationRequest{ + Directory: s.ConfigDirectory, + File: s.ConfigFile, + TestStepConfigRequest: config.TestStepConfigRequest{ + StepNumber: stepIndex + 1, + TestName: testName, + }, + }.Exec() + + cfg := teststep.Configuration(configRequest) + + var cfgHasProviders bool + + if cfg != nil { + var err error + + cfgHasProviders, err = cfg.HasProviderBlock(ctx) + + if err != nil { + return false, err + } } - return false + if cfgHasProviders { + return true, nil + } + + return false, nil } // validate ensures the TestStep is valid based on the following criteria: @@ -59,19 +106,22 @@ func (s TestStep) hasProviders(_ context.Context) bool { // - No overlapping ExternalProviders and ProviderFactories entries // - ResourceName is not empty when ImportState is true, ImportStateIdFunc // is not set, and ImportStateId is not set. +// - ConfigPlanChecks (PreApply, PostApplyPreRefresh, PostApplyPostRefresh) are only set when Config is set. +// - ConfigPlanChecks.PreApply are only set when PlanOnly is false. +// - RefreshPlanChecks (PostRefresh) are only set when RefreshState is set. func (s TestStep) validate(ctx context.Context, req testStepValidateRequest) error { ctx = logging.TestStepNumberContext(ctx, req.StepNumber) logging.HelperResourceTrace(ctx, "Validating TestStep") - if s.Config == "" && !s.ImportState && !s.RefreshState { - err := fmt.Errorf("TestStep missing Config or ImportState or RefreshState") + if req.StepConfiguration == nil && !s.ImportState && !s.RefreshState { + err := fmt.Errorf("TestStep missing Config or ConfigDirectory or ConfigFile or ImportState or RefreshState") logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) return err } - if s.Config != "" && s.RefreshState { - err := fmt.Errorf("TestStep cannot have Config and RefreshState") + if req.StepConfiguration != nil && s.RefreshState { + err := fmt.Errorf("TestStep cannot have Config or ConfigDirectory or ConfigFile and RefreshState") logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) return err } @@ -102,7 +152,25 @@ func (s TestStep) validate(ctx context.Context, req testStepValidateRequest) err } } - hasProviders := s.hasProviders(ctx) + if req.TestCaseHasExternalProviders && req.StepConfiguration != nil && req.StepConfiguration.HasConfigurationFiles() { + err := fmt.Errorf("Providers must only be specified within the terraform configuration files when using TestStep.Config") + logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) + return err + } + + if s.hasExternalProviders() && req.StepConfiguration != nil && req.StepConfiguration.HasConfigurationFiles() { + err := fmt.Errorf("Providers must only be specified within the terraform configuration files when using TestStep.Config") + logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) + return err + } + + // We need a 0-based step index for consistency + hasProviders, err := s.hasProviders(ctx, req.StepNumber-1, req.TestName) + + if err != nil { + logging.HelperResourceError(ctx, "TestStep error checking for providers", map[string]interface{}{logging.KeyError: err}) + return err + } if req.TestCaseHasProviders && hasProviders { err := fmt.Errorf("Providers must only be specified either at the TestCase or TestStep level") @@ -110,8 +178,19 @@ func (s TestStep) validate(ctx context.Context, req testStepValidateRequest) err return err } - if !req.TestCaseHasProviders && !hasProviders { - err := fmt.Errorf("Providers must be specified at the TestCase level or in all TestStep") + var cfgHasProviderBlock bool + + if req.StepConfiguration != nil { + cfgHasProviderBlock, err = req.StepConfiguration.HasProviderBlock(ctx) + + if err != nil { + logging.HelperResourceError(ctx, "TestStep error checking for if configuration has provider block", map[string]interface{}{logging.KeyError: err}) + return err + } + } + + if !req.TestCaseHasProviders && !hasProviders && !cfgHasProviderBlock { + err := fmt.Errorf("Providers must be specified at the TestCase level, or in all TestStep, or in TestStep.ConfigDirectory or TestStep.ConfigFile") logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) return err } @@ -124,5 +203,37 @@ func (s TestStep) validate(ctx context.Context, req testStepValidateRequest) err } } + if len(s.ConfigPlanChecks.PreApply) > 0 { + if req.StepConfiguration == nil { + err := fmt.Errorf("TestStep ConfigPlanChecks.PreApply must only be specified with Config, ConfigDirectory or ConfigFile") + logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) + return err + } + + if s.PlanOnly { + err := fmt.Errorf("TestStep ConfigPlanChecks.PreApply cannot be run with PlanOnly") + logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) + return err + } + } + + if len(s.ConfigPlanChecks.PostApplyPreRefresh) > 0 && req.StepConfiguration == nil { + err := fmt.Errorf("TestStep ConfigPlanChecks.PostApplyPreRefresh must only be specified with Config, ConfigDirectory or ConfigFile") + logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) + return err + } + + if len(s.ConfigPlanChecks.PostApplyPostRefresh) > 0 && req.StepConfiguration == nil { + err := fmt.Errorf("TestStep ConfigPlanChecks.PostApplyPostRefresh must only be specified with Config, ConfigDirectory or ConfigFile") + logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) + return err + } + + if len(s.RefreshPlanChecks.PostRefresh) > 0 && !s.RefreshState { + err := fmt.Errorf("TestStep RefreshPlanChecks.PostRefresh must only be specified with RefreshState") + logging.HelperResourceError(ctx, "TestStep validation error", map[string]interface{}{logging.KeyError: err}) + return err + } + return nil } diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/tfversion_checks.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/tfversion_checks.go new file mode 100644 index 0000000000000..1bec0abd62093 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/tfversion_checks.go @@ -0,0 +1,31 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package resource + +import ( + "context" + + "github.com/hashicorp/go-version" + "github.com/mitchellh/go-testing-interface" + + "github.com/hashicorp/terraform-plugin-testing/tfversion" +) + +func runTFVersionChecks(ctx context.Context, t testing.T, terraformVersion *version.Version, terraformVersionChecks []tfversion.TerraformVersionCheck) { + t.Helper() + + for _, tfVersionCheck := range terraformVersionChecks { + resp := tfversion.CheckTerraformVersionResponse{} + tfVersionCheck.CheckTerraformVersion(ctx, tfversion.CheckTerraformVersionRequest{TerraformVersion: terraformVersion}, &resp) + + if resp.Error != nil { + t.Fatalf(resp.Error.Error()) + } + + if resp.Skip != "" { + t.Skip(resp.Skip) + } + } + +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/wait.go b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/wait.go index eff4f474a001f..332791bc91103 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/wait.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/helper/resource/wait.go @@ -15,6 +15,9 @@ import ( // // Cancellation from the passed in context will propagate through to the // underlying StateChangeConf +// +// Deprecated: Copy this function to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryContext. func RetryContext(ctx context.Context, timeout time.Duration, f RetryFunc) error { // These are used to pull the error out of the function; need a mutex to // avoid a data race. @@ -72,15 +75,25 @@ func Retry(timeout time.Duration, f RetryFunc) error { } // RetryFunc is the function retried until it succeeds. +// +// Deprecated: Copy this type to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryFunc. type RetryFunc func() *RetryError // RetryError is the required return type of RetryFunc. It forces client code // to choose whether or not a given error is retryable. +// +// Deprecated: Copy this type to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryError. type RetryError struct { Err error Retryable bool } +// Unwrap returns the Err, compatible with errors.Unwrap. +// +// Deprecated: Copy this method to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryError. func (e *RetryError) Unwrap() error { return e.Err } @@ -88,6 +101,9 @@ func (e *RetryError) Unwrap() error { // RetryableError is a helper to create a RetryError that's retryable from a // given error. To prevent logic errors, will return an error when passed a // nil error. +// +// Deprecated: Copy this function to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.RetryableError. func RetryableError(err error) *RetryError { if err == nil { return &RetryError{ @@ -103,6 +119,9 @@ func RetryableError(err error) *RetryError { // NonRetryableError is a helper to create a RetryError that's _not_ retryable // from a given error. To prevent logic errors, will return an error when // passed a nil error. +// +// Deprecated: Copy this function to the provider codebase or use +// github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry.NonRetryableError. func NonRetryableError(err error) *RetryError { if err == nil { return &RetryError{ diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/addrs/instance_key.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/addrs/instance_key.go index 8373297f876ba..56700fc057279 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/addrs/instance_key.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/addrs/instance_key.go @@ -20,7 +20,7 @@ type instanceKey interface { String() string } -// NoKey represents the absense of an instanceKey, for the single instance +// NoKey represents the absence of an instanceKey, for the single instance // of a configuration object that does not use "count" or "for_each" at all. var NoKey instanceKey diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema/empty_value.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema/empty_value.go index 3c9573bc56add..cc1107fa0bdc8 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema/empty_value.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema/empty_value.go @@ -7,12 +7,12 @@ import ( "github.com/hashicorp/go-cty/cty" ) -// EmptyValue returns the "empty value" for the recieving block, which for +// EmptyValue returns the "empty value" for the receiving block, which for // a block type is a non-null object where all of the attribute values are // the empty values of the block's attributes and nested block types. // // In other words, it returns the value that would be returned if an empty -// block were decoded against the recieving schema, assuming that no required +// block were decoded against the receiving schema, assuming that no required // attribute or block constraints were honored. func (b *Block) EmptyValue() cty.Value { vals := make(map[string]cty.Value) diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema/schema.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema/schema.go index c445b4ba55e9f..fafe3fa91ce3e 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema/schema.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema/schema.go @@ -125,7 +125,7 @@ const ( NestingSingle // NestingGroup is similar to NestingSingle in that it calls for only a - // single instance of a given block type with no labels, but it additonally + // single instance of a given block type with no labels, but it additionally // guarantees that its result will never be null, even if the block is // absent, and instead the nested attributes and blocks will be treated // as absent in that case. (Any required attributes or blocks within the diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/errorshim/error_join_shim.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/errorshim/error_join_shim.go new file mode 100644 index 0000000000000..b7371af827c6d --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/errorshim/error_join_shim.go @@ -0,0 +1,47 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// TODO: Once Go 1.20 is the minimum supported version delete this package, replace all usages with `errors` package +// - https://github.com/hashicorp/terraform-plugin-testing/issues/99 +package errorshim + +// Copied from -> https://cs.opensource.google/go/go/+/refs/tags/go1.20.2:src/errors/join.go +func Join(errs ...error) error { + n := 0 + for _, err := range errs { + if err != nil { + n++ + } + } + if n == 0 { + return nil + } + e := &joinError{ + errs: make([]error, 0, n), + } + for _, err := range errs { + if err != nil { + e.errs = append(e.errs, err) + } + } + return e +} + +type joinError struct { + errs []error +} + +func (e *joinError) Error() string { + var b []byte + for i, err := range e.errs { + if i > 0 { + b = append(b, '\n') + } + b = append(b, err.Error()...) + } + return string(b) +} + +func (e *joinError) Unwrap() []error { + return e.errs +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/environment_variables.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/environment_variables.go index 6df86f89f8c14..361de8f1e0c23 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/environment_variables.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/environment_variables.go @@ -108,4 +108,12 @@ const ( // will be installed if a binary is not found at the given path. No version // checks are performed against an existing binary. EnvTfAccTerraformPath = "TF_ACC_TERRAFORM_PATH" + + // EnvTfAccPersistWorkingDir environment variable enables persisting + // the working directory and the files generated during execution of + // TestStep(s). Default is disabled, in which case the working directory + // and the files it contains are deleted at the end of each acceptance + // test. Can be set to any value to persist the working directory and + // its contents, however "1" is conventional. + EnvTfAccPersistWorkingDir = "TF_ACC_PERSIST_WORKING_DIR" ) diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/helper.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/helper.go index cfc56fc8ad622..3c9772cfc4e77 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/helper.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/helper.go @@ -10,6 +10,7 @@ import ( "os" "strings" + "github.com/hashicorp/go-version" "github.com/hashicorp/terraform-exec/tfexec" "github.com/hashicorp/terraform-plugin-testing/internal/logging" @@ -42,6 +43,7 @@ type Helper struct { // for tests that use fixture files. sourceDir string terraformExec string + terraformVer *version.Version // execTempDir is created during DiscoverConfig to store any downloaded // binaries @@ -78,11 +80,23 @@ func InitHelper(ctx context.Context, config *Config) (*Helper, error) { return nil, fmt.Errorf("failed to create temporary directory for test helper: %s", err) } + tf, err := tfexec.NewTerraform(baseDir, config.TerraformExec) + if err != nil { + return nil, fmt.Errorf("unable to create terraform-exec instance: %w", err) + } + + tfVersion, _, err := tf.Version(ctx, false) + + if err != nil { + return nil, fmt.Errorf("error calling terraform version command: %w", err) + } + return &Helper{ baseDir: baseDir, sourceDir: config.SourceDir, terraformExec: config.TerraformExec, execTempDir: config.execTempDir, + terraformVer: tfVersion, }, nil } @@ -92,12 +106,17 @@ func InitHelper(ctx context.Context, config *Config) (*Helper, error) { // Call this before returning from TestMain to minimize the amount of detritus // left behind in the filesystem after the tests complete. func (h *Helper) Close() error { + if os.Getenv(EnvTfAccPersistWorkingDir) != "" { + return nil + } + if h.execTempDir != "" { err := os.RemoveAll(h.execTempDir) if err != nil { return err } } + return os.RemoveAll(h.baseDir) } @@ -107,8 +126,15 @@ func (h *Helper) Close() error { // If the working directory object is not itself closed by the time the test // program exits, the Close method on the helper itself will attempt to // delete it. -func (h *Helper) NewWorkingDir(ctx context.Context, t TestControl) (*WorkingDir, error) { - dir, err := os.MkdirTemp(h.baseDir, "work") +func (h *Helper) NewWorkingDir(ctx context.Context, t TestControl, wd string) (*WorkingDir, error) { + workingDir := h.baseDir + + if wd != "" { + workingDir = wd + h.baseDir = wd + } + + dir, err := os.MkdirTemp(workingDir, "work") if err != nil { return nil, err } @@ -267,10 +293,10 @@ func (h *Helper) NewWorkingDir(ctx context.Context, t TestControl) (*WorkingDir, // RequireNewWorkingDir is a variant of NewWorkingDir that takes a TestControl // object and will immediately fail the running test if the creation of the // working directory fails. -func (h *Helper) RequireNewWorkingDir(ctx context.Context, t TestControl) *WorkingDir { +func (h *Helper) RequireNewWorkingDir(ctx context.Context, t TestControl, workingDir string) *WorkingDir { t.Helper() - wd, err := h.NewWorkingDir(ctx, t) + wd, err := h.NewWorkingDir(ctx, t, workingDir) if err != nil { t := testingT{t} t.Fatalf("failed to create new working directory: %s", err) @@ -289,3 +315,8 @@ func (h *Helper) WorkingDirectory() string { func (h *Helper) TerraformExecPath() string { return h.terraformExec } + +// TerraformVersion returns the Terraform CLI version being used when running tests. +func (h *Helper) TerraformVersion() *version.Version { + return h.terraformVer +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/util.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/util.go index 0d4bbe5266764..be187a01b92a2 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/util.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/util.go @@ -5,8 +5,13 @@ package plugintest import ( "fmt" + "io" + "io/fs" "os" + "path" "path/filepath" + "strings" + "testing" ) func symlinkFile(src string, dest string) error { @@ -68,3 +73,114 @@ func symlinkDirectoriesOnly(srcDir string, destDir string) error { return nil } + +// CopyFile copies a single file from src to dest. +func CopyFile(src, dest string) error { + var srcFileInfo os.FileInfo + + srcFile, err := os.Open(src) + if err != nil { + return fmt.Errorf("unable to open file: %w", err) + } + defer srcFile.Close() + + destFile, err := os.Create(dest) + if err != nil { + return fmt.Errorf("unable to create file: %w", err) + } + defer destFile.Close() + + if _, err = io.Copy(destFile, srcFile); err != nil { + return fmt.Errorf("unable to copy: %w", err) + } + + if srcFileInfo, err = os.Stat(src); err != nil { + return fmt.Errorf("unable to stat: %w", err) + } + + return os.Chmod(dest, srcFileInfo.Mode()) +} + +// CopyDir recursively copies directories and files +// from src to dest. +func CopyDir(src, dest, baseDirName string) error { + srcInfo, err := os.Stat(src) + if err != nil { + return fmt.Errorf("unable to stat: %w", err) + } + + if err = os.MkdirAll(dest, srcInfo.Mode()); err != nil { + return fmt.Errorf("unable to create dir: %w", err) + } + + dirEntries, err := os.ReadDir(src) + if err != nil { + return fmt.Errorf("unable to read dir: %w", err) + } + + for _, dirEntry := range dirEntries { + srcFilepath := path.Join(src, dirEntry.Name()) + destFilepath := path.Join(dest, dirEntry.Name()) + + if !strings.Contains(srcFilepath, baseDirName) { + continue + } + + fi, err := dirEntry.Info() + + if err != nil { + return fmt.Errorf("unable to get dir entry info: %w", err) + } + + if dirEntry.IsDir() || fi.Mode()&fs.ModeSymlink == fs.ModeSymlink { + if err = CopyDir(srcFilepath, destFilepath, baseDirName); err != nil { + return fmt.Errorf("unable to copy directory: %w", err) + } + } else { + if err = CopyFile(srcFilepath, destFilepath); err != nil { + return fmt.Errorf("unable to copy file: %w", err) + } + } + } + + return nil +} + +// TestExpectTFatal provides a wrapper for logic which should call +// (*testing.T).Fatal() or (*testing.T).Fatalf(). +// +// Since we do not want the wrapping test to fail when an expected test error +// occurs, it is required that the testLogic passed in uses +// github.com/mitchellh/go-testing-interface.RuntimeT instead of the real +// *testing.T. +// +// If Fatal() or Fatalf() is not called in the logic, the real (*testing.T).Fatal() will +// be called to fail the test. +func TestExpectTFatal(t *testing.T, testLogic func()) { + t.Helper() + + var recoverIface interface{} + + func() { + defer func() { + recoverIface = recover() + }() + + testLogic() + }() + + if recoverIface == nil { + t.Fatalf("expected t.Fatal(), got none") + } + + recoverStr, ok := recoverIface.(string) + + if !ok { + t.Fatalf("expected string from recover(), got: %v (%T)", recoverIface, recoverIface) + } + + // this string is hardcoded in github.com/mitchellh/go-testing-interface + if !strings.HasPrefix(recoverStr, "testing.T failed, see logs for output") { + t.Fatalf("expected t.Fatal(), got: %s", recoverStr) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/working_dir.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/working_dir.go index 734b6c9b55133..a6e580812234c 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/working_dir.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/plugintest/working_dir.go @@ -5,7 +5,6 @@ package plugintest import ( "context" - "encoding/json" "fmt" "os" "path/filepath" @@ -13,13 +12,14 @@ import ( "github.com/hashicorp/terraform-exec/tfexec" tfjson "github.com/hashicorp/terraform-json" + "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/internal/logging" + "github.com/hashicorp/terraform-plugin-testing/internal/teststep" ) const ( - ConfigFileName = "terraform_plugin_test.tf" - ConfigFileNameJSON = ConfigFileName + ".json" - PlanFileName = "tfplan" + ConfigFileName = "terraform_plugin_test.tf" + PlanFileName = "tfplan" ) // WorkingDir represents a distinct working directory that can be used for @@ -47,10 +47,19 @@ type WorkingDir struct { reattachInfo tfexec.ReattachInfo } +// BaseDir returns the path to the root of the working directory tree. +func (wd *WorkingDir) BaseDir() string { + return wd.baseDir +} + // Close deletes the directories and files created to represent the receiving // working directory. After this method is called, the working directory object // is invalid and may no longer be used. func (wd *WorkingDir) Close() error { + if os.Getenv(EnvTfAccPersistWorkingDir) != "" { + return nil + } + return os.RemoveAll(wd.baseDir) } @@ -73,29 +82,71 @@ func (wd *WorkingDir) GetHelper() *Helper { // This must be called at least once before any call to Init, Plan, Apply, or // Destroy to establish the configuration. Any previously-set configuration is // discarded and any saved plan is cleared. -func (wd *WorkingDir) SetConfig(ctx context.Context, cfg string) error { +func (wd *WorkingDir) SetConfig(ctx context.Context, cfg teststep.Config, vars config.Variables) error { + // Remove old config and variables files first + d, err := os.Open(wd.baseDir) + + if err != nil { + return err + } + + defer d.Close() + + fi, err := d.Readdir(-1) + + if err != nil { + return err + } + + for _, file := range fi { + if file.Mode().IsRegular() { + if filepath.Ext(file.Name()) == ".tf" || filepath.Ext(file.Name()) == ".json" { + err = os.Remove(filepath.Join(d.Name(), file.Name())) + + if err != nil && !os.IsNotExist(err) { + return err + } + } + } + } + logging.HelperResourceTrace(ctx, "Setting Terraform configuration", map[string]any{logging.KeyTestTerraformConfiguration: cfg}) outFilename := filepath.Join(wd.baseDir, ConfigFileName) - rmFilename := filepath.Join(wd.baseDir, ConfigFileNameJSON) - bCfg := []byte(cfg) - if json.Valid(bCfg) { - outFilename, rmFilename = rmFilename, outFilename + + // This file has to be written otherwise wd.Init() will return an error. + err = os.WriteFile(outFilename, nil, 0700) + + if err != nil { + return err } - if err := os.Remove(rmFilename); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("unable to remove %q: %w", rmFilename, err) + + // wd.configFilename must be set otherwise wd.Init() will return an error. + wd.configFilename = outFilename + + // Write configuration + if cfg != nil { + err = cfg.Write(ctx, wd.baseDir) + + if err != nil { + return err + } } - err := os.WriteFile(outFilename, bCfg, 0700) + + //Write configuration variables + err = vars.Write(wd.baseDir) + if err != nil { return err } - wd.configFilename = outFilename // Changing configuration invalidates any saved plan. err = wd.ClearPlan(ctx) + if err != nil { return err } + return nil } diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/config.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/config.go new file mode 100644 index 0000000000000..6bd94d3a37266 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/config.go @@ -0,0 +1,241 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package teststep + +import ( + "context" + "fmt" + "io" + "os" + "path/filepath" + "regexp" + "strings" + + "github.com/hashicorp/terraform-plugin-testing/config" +) + +const ( + rawConfigFileName = "terraform_plugin_test.tf" + rawConfigFileNameJSON = rawConfigFileName + ".json" +) + +var ( + providerConfigBlockRegex = regexp.MustCompile(`provider "?[a-zA-Z0-9_-]+"? {`) + terraformConfigBlockRegex = regexp.MustCompile(`terraform {`) +) + +// Config defines an interface implemented by all types +// that represent Terraform configuration: +// +// - [config.configurationDirectory] +// - [config.configurationFile] +// - [config.configurationString] +type Config interface { + HasConfigurationFiles() bool + HasProviderBlock(context.Context) (bool, error) + HasTerraformBlock(context.Context) (bool, error) + Write(context.Context, string) error +} + +// PrepareConfigurationRequest is used to simplify the generation of +// a ConfigurationRequest which is required when calling the +// Configuration func. +type PrepareConfigurationRequest struct { + Directory config.TestStepConfigFunc + File config.TestStepConfigFunc + Raw string + TestStepConfigRequest config.TestStepConfigRequest +} + +// Exec returns a Configuration request which is required when +// calling the Configuration func. +func (p PrepareConfigurationRequest) Exec() ConfigurationRequest { + directory := Pointer(p.Directory.Exec(p.TestStepConfigRequest)) + file := Pointer(p.File.Exec(p.TestStepConfigRequest)) + raw := Pointer(p.Raw) + + return ConfigurationRequest{ + Directory: directory, + File: file, + Raw: raw, + } +} + +// ConfigurationRequest is used by the Configuration func to determine +// the underlying type to instantiate. +type ConfigurationRequest struct { + Directory *string + File *string + Raw *string +} + +// Validate ensures that only one of Directory, File or Raw are non-empty. +func (c ConfigurationRequest) Validate() error { + var configSet []string + + if c.Directory != nil && *c.Directory != "" { + configSet = append(configSet, "directory") + } + + if c.File != nil && *c.File != "" { + configSet = append(configSet, "file") + } + + if c.Raw != nil && *c.Raw != "" { + configSet = append(configSet, "raw") + } + + if len(configSet) > 1 { + configSetStr := strings.Join(configSet, `, `) + + i := strings.LastIndex(configSetStr, ", ") + + if i != -1 { + configSetStr = configSetStr[:i] + " and " + configSetStr[i+len(", "):] + } + + return fmt.Errorf(`%s are populated, only one of "directory", "file", or "raw" is allowed`, configSetStr) + } + + return nil +} + +// Configuration uses the supplied ConfigurationRequest to determine +// which of the types that implement Config to instantiate. If none +// of the fields in ConfigurationRequest are populated nil is returned. +func Configuration(req ConfigurationRequest) Config { + if req.Directory != nil && *req.Directory != "" { + return configurationDirectory{ + directory: *req.Directory, + } + } + + if req.File != nil && *req.File != "" { + return configurationFile{ + file: *req.File, + } + } + + if req.Raw != nil && *req.Raw != "" { + return configurationString{ + raw: *req.Raw, + } + } + + return nil +} + +// copyFiles accepts a path to a directory and a destination. Only +// files in the path directory are copied, any nested directories +// are ignored. +func copyFiles(path string, dstPath string) error { + infos, err := os.ReadDir(path) + + if err != nil { + return err + } + + for _, info := range infos { + srcPath := filepath.Join(path, info.Name()) + + if info.IsDir() { + continue + } else { + err = copyFile(srcPath, dstPath) + + if err != nil { + return err + } + } + + } + return nil +} + +// copyFile accepts a path to a file and a destination, +// copying the file from path to destination. +func copyFile(path string, dstPath string) error { + srcF, err := os.Open(path) + + if err != nil { + return err + } + + defer srcF.Close() + + di, err := os.Stat(dstPath) + + if err != nil { + return err + } + + if di.IsDir() { + _, file := filepath.Split(path) + dstPath = filepath.Join(dstPath, file) + } + + dstF, err := os.Create(dstPath) + + if err != nil { + return err + } + + defer dstF.Close() + + if _, err := io.Copy(dstF, srcF); err != nil { + return err + } + + return nil +} + +// filesContains accepts a string representing a directory and a +// regular expression. For each file that is found within the +// directory fileContains func is called. Any nested directories +// within the directory specified by dir are ignored. +func filesContains(dir string, find *regexp.Regexp) (bool, error) { + dirEntries, err := os.ReadDir(dir) + + if err != nil { + return false, err + } + + for _, dirEntry := range dirEntries { + if dirEntry.IsDir() { + continue + } + + path := filepath.Join(dir, dirEntry.Name()) + + contains, err := fileContains(path, find) + + if err != nil { + return false, err + } + + if contains { + return true, nil + } + } + + return false, nil +} + +// fileContains accepts a path and a regular expression. The +// file is read and the supplied regular expression is used +// to determine whether the file contains the specified string. +func fileContains(path string, find *regexp.Regexp) (bool, error) { + f, err := os.ReadFile(path) + + if err != nil { + return false, err + } + + return find.MatchString(string(f)), nil +} + +// Pointer returns a pointer to any type. +func Pointer[T any](in T) *T { + return &in +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/directory.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/directory.go new file mode 100644 index 0000000000000..0126e82aa0300 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/directory.go @@ -0,0 +1,94 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package teststep + +import ( + "context" + "os" + "path/filepath" +) + +var _ Config = configurationDirectory{} + +type configurationDirectory struct { + directory string +} + +// HasConfigurationFiles is used during validation to ensure that +// ExternalProviders are not declared at the TestCase or TestStep +// level when using TestStep.ConfigDirectory. +func (c configurationDirectory) HasConfigurationFiles() bool { + return true +} + +// HasProviderBlock returns true if the Config has declared a provider +// configuration block, e.g. provider "examplecloud" {...} +func (c configurationDirectory) HasProviderBlock(ctx context.Context) (bool, error) { + configDirectory := c.directory + + if !filepath.IsAbs(configDirectory) { + pwd, err := os.Getwd() + + if err != nil { + return false, err + } + + configDirectory = filepath.Join(pwd, configDirectory) + } + + contains, err := filesContains(configDirectory, providerConfigBlockRegex) + + if err != nil { + return false, err + } + + return contains, nil +} + +// HasTerraformBlock returns true if the Config has declared a terraform +// configuration block, e.g. terraform {...} +func (c configurationDirectory) HasTerraformBlock(ctx context.Context) (bool, error) { + configDirectory := c.directory + + if !filepath.IsAbs(configDirectory) { + pwd, err := os.Getwd() + + if err != nil { + return false, err + } + + configDirectory = filepath.Join(pwd, configDirectory) + } + + contains, err := filesContains(configDirectory, terraformConfigBlockRegex) + + if err != nil { + return false, err + } + + return contains, nil +} + +// Write copies all files from directory to destination. +func (c configurationDirectory) Write(ctx context.Context, dest string) error { + configDirectory := c.directory + + if !filepath.IsAbs(configDirectory) { + pwd, err := os.Getwd() + + if err != nil { + return err + } + + configDirectory = filepath.Join(pwd, configDirectory) + } + + err := copyFiles(configDirectory, dest) + + if err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/file.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/file.go new file mode 100644 index 0000000000000..6de3f0752c60a --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/file.go @@ -0,0 +1,94 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package teststep + +import ( + "context" + "os" + "path/filepath" +) + +var _ Config = configurationFile{} + +type configurationFile struct { + file string +} + +// HasConfigurationFiles is used during validation to ensure that +// ExternalProviders are not declared at the TestCase or TestStep +// level when using TestStep.ConfigFile. +func (c configurationFile) HasConfigurationFiles() bool { + return true +} + +// HasProviderBlock returns true if the Config has declared a provider +// configuration block, e.g. provider "examplecloud" {...} +func (c configurationFile) HasProviderBlock(ctx context.Context) (bool, error) { + configFile := c.file + + if !filepath.IsAbs(configFile) { + pwd, err := os.Getwd() + + if err != nil { + return false, err + } + + configFile = filepath.Join(pwd, configFile) + } + + contains, err := fileContains(configFile, providerConfigBlockRegex) + + if err != nil { + return false, err + } + + return contains, nil +} + +// HasTerraformBlock returns true if the Config has declared a terraform +// configuration block, e.g. terraform {...} +func (c configurationFile) HasTerraformBlock(ctx context.Context) (bool, error) { + configFile := c.file + + if !filepath.IsAbs(configFile) { + pwd, err := os.Getwd() + + if err != nil { + return false, err + } + + configFile = filepath.Join(pwd, configFile) + } + + contains, err := fileContains(configFile, terraformConfigBlockRegex) + + if err != nil { + return false, err + } + + return contains, nil +} + +// Write copies file from c.file to destination. +func (c configurationFile) Write(ctx context.Context, dest string) error { + configFile := c.file + + if !filepath.IsAbs(configFile) { + pwd, err := os.Getwd() + + if err != nil { + return err + } + + configFile = filepath.Join(pwd, configFile) + } + + err := copyFile(configFile, dest) + + if err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/string.go b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/string.go new file mode 100644 index 0000000000000..4143b484d8af0 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/internal/teststep/string.go @@ -0,0 +1,61 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package teststep + +import ( + "context" + "encoding/json" + "fmt" + "os" + "path/filepath" +) + +var _ Config = configurationString{} + +type configurationString struct { + raw string +} + +// HasConfigurationFiles is used during validation to allow declaration +// of ExternalProviders at the TestCase or TestStep level when using +// TestStep.Config. +func (c configurationString) HasConfigurationFiles() bool { + return false +} + +// HasProviderBlock returns true if the Config has declared a provider +// configuration block, e.g. provider "examplecloud" {...} +func (c configurationString) HasProviderBlock(ctx context.Context) (bool, error) { + return providerConfigBlockRegex.MatchString(c.raw), nil +} + +// HasTerraformBlock returns true if the Config has declared a terraform +// configuration block, e.g. terraform {...} +func (c configurationString) HasTerraformBlock(ctx context.Context) (bool, error) { + return terraformConfigBlockRegex.MatchString(c.raw), nil +} + +// Write creates a file and writes c.raw into it. +func (c configurationString) Write(ctx context.Context, dest string) error { + outFilename := filepath.Join(dest, rawConfigFileName) + rmFilename := filepath.Join(dest, rawConfigFileNameJSON) + + bCfg := []byte(c.raw) + + if json.Valid(bCfg) { + outFilename, rmFilename = rmFilename, outFilename + } + + if err := os.Remove(rmFilename); err != nil && !os.IsNotExist(err) { + return fmt.Errorf("unable to remove %q: %w", rmFilename, err) + } + + err := os.WriteFile(outFilename, bCfg, 0700) + + if err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/doc.go b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/doc.go new file mode 100644 index 0000000000000..eceda6faaf19e --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/doc.go @@ -0,0 +1,5 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Package plancheck contains the plan check interface, request/response structs, and common plan check implementations. +package plancheck diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_empty_plan.go b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_empty_plan.go new file mode 100644 index 0000000000000..92d55f465371a --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_empty_plan.go @@ -0,0 +1,36 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package plancheck + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-testing/internal/errorshim" +) + +var _ PlanCheck = expectEmptyPlan{} + +type expectEmptyPlan struct{} + +// CheckPlan implements the plan check logic. +func (e expectEmptyPlan) CheckPlan(ctx context.Context, req CheckPlanRequest, resp *CheckPlanResponse) { + var result error + + for _, rc := range req.Plan.ResourceChanges { + if !rc.Change.Actions.NoOp() { + // TODO: Once Go 1.20 is the minimum supported version for this module, replace with `errors.Join` function + // - https://github.com/hashicorp/terraform-plugin-testing/issues/99 + result = errorshim.Join(result, fmt.Errorf("expected empty plan, but %s has planned action(s): %v", rc.Address, rc.Change.Actions)) + } + } + + resp.Error = result +} + +// ExpectEmptyPlan returns a plan check that asserts that there are no resource changes in the plan. +// All resource changes found will be aggregated and returned in a plan check error. +func ExpectEmptyPlan() PlanCheck { + return expectEmptyPlan{} +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_non_empty_plan.go b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_non_empty_plan.go new file mode 100644 index 0000000000000..74acf034d2445 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_non_empty_plan.go @@ -0,0 +1,29 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package plancheck + +import ( + "context" + "errors" +) + +var _ PlanCheck = expectNonEmptyPlan{} + +type expectNonEmptyPlan struct{} + +// CheckPlan implements the plan check logic. +func (e expectNonEmptyPlan) CheckPlan(ctx context.Context, req CheckPlanRequest, resp *CheckPlanResponse) { + for _, rc := range req.Plan.ResourceChanges { + if !rc.Change.Actions.NoOp() { + return + } + } + + resp.Error = errors.New("expected a non-empty plan, but got an empty plan") +} + +// ExpectNonEmptyPlan returns a plan check that asserts there is at least one resource change in the plan. +func ExpectNonEmptyPlan() PlanCheck { + return expectNonEmptyPlan{} +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_resource_action.go b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_resource_action.go new file mode 100644 index 0000000000000..37a2336d2f356 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_resource_action.go @@ -0,0 +1,90 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package plancheck + +import ( + "context" + "fmt" +) + +var _ PlanCheck = expectResourceAction{} + +type expectResourceAction struct { + resourceAddress string + actionType ResourceActionType +} + +// CheckPlan implements the plan check logic. +func (e expectResourceAction) CheckPlan(ctx context.Context, req CheckPlanRequest, resp *CheckPlanResponse) { + foundResource := false + + for _, rc := range req.Plan.ResourceChanges { + if e.resourceAddress != rc.Address { + continue + } + + switch e.actionType { + case ResourceActionNoop: + if !rc.Change.Actions.NoOp() { + resp.Error = fmt.Errorf("'%s' - expected %s, got action(s): %v", rc.Address, e.actionType, rc.Change.Actions) + return + } + case ResourceActionCreate: + if !rc.Change.Actions.Create() { + resp.Error = fmt.Errorf("'%s' - expected %s, got action(s): %v", rc.Address, e.actionType, rc.Change.Actions) + return + } + case ResourceActionRead: + if !rc.Change.Actions.Read() { + resp.Error = fmt.Errorf("'%s' - expected %s, got action(s): %v", rc.Address, e.actionType, rc.Change.Actions) + return + } + case ResourceActionUpdate: + if !rc.Change.Actions.Update() { + resp.Error = fmt.Errorf("'%s' - expected %s, got action(s): %v", rc.Address, e.actionType, rc.Change.Actions) + return + } + case ResourceActionDestroy: + if !rc.Change.Actions.Delete() { + resp.Error = fmt.Errorf("'%s' - expected %s, got action(s): %v", rc.Address, e.actionType, rc.Change.Actions) + return + } + case ResourceActionDestroyBeforeCreate: + if !rc.Change.Actions.DestroyBeforeCreate() { + resp.Error = fmt.Errorf("'%s' - expected %s, got action(s): %v", rc.Address, e.actionType, rc.Change.Actions) + return + } + case ResourceActionCreateBeforeDestroy: + if !rc.Change.Actions.CreateBeforeDestroy() { + resp.Error = fmt.Errorf("'%s' - expected %s, got action(s): %v", rc.Address, e.actionType, rc.Change.Actions) + return + } + case ResourceActionReplace: + if !rc.Change.Actions.Replace() { + resp.Error = fmt.Errorf("%s - expected %s, got action(s): %v", rc.Address, e.actionType, rc.Change.Actions) + return + } + default: + resp.Error = fmt.Errorf("%s - unexpected ResourceActionType: %s", rc.Address, e.actionType) + return + } + + foundResource = true + break + } + + if !foundResource { + resp.Error = fmt.Errorf("%s - Resource not found in plan ResourceChanges", e.resourceAddress) + return + } +} + +// ExpectResourceAction returns a plan check that asserts that a given resource will have a specific resource change type in the plan. +// Valid actionType are an enum of type plancheck.ResourceActionType, examples: NoOp, DestroyBeforeCreate, Update (in-place), etc. +func ExpectResourceAction(resourceAddress string, actionType ResourceActionType) PlanCheck { + return expectResourceAction{ + resourceAddress: resourceAddress, + actionType: actionType, + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_sensitive_value.go b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_sensitive_value.go new file mode 100644 index 0000000000000..b6c3a51946fe6 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_sensitive_value.go @@ -0,0 +1,61 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package plancheck + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-testing/tfjsonpath" +) + +var _ PlanCheck = expectSensitiveValue{} + +type expectSensitiveValue struct { + resourceAddress string + attributePath tfjsonpath.Path +} + +// CheckPlan implements the plan check logic. +func (e expectSensitiveValue) CheckPlan(ctx context.Context, req CheckPlanRequest, resp *CheckPlanResponse) { + + for _, rc := range req.Plan.ResourceChanges { + if e.resourceAddress != rc.Address { + continue + } + + result, err := tfjsonpath.Traverse(rc.Change.AfterSensitive, e.attributePath) + if err != nil { + resp.Error = err + return + } + + isSensitive, ok := result.(bool) + if !ok { + resp.Error = fmt.Errorf("invalid path: the path value cannot be asserted as bool") + return + } + + if !isSensitive { + resp.Error = fmt.Errorf("attribute at path is not sensitive") + return + } + + return + } + + resp.Error = fmt.Errorf("%s - Resource not found in plan ResourceChanges", e.resourceAddress) +} + +// ExpectSensitiveValue returns a plan check that asserts that the specified attribute at the given resource has a sensitive value. +// +// Due to implementation differences between the terraform-plugin-sdk and the terraform-plugin-framework, representation of sensitive +// values may differ. For example, terraform-plugin-sdk based providers may have less precise representations of sensitive values, such +// as marking whole maps as sensitive rather than individual element values. +func ExpectSensitiveValue(resourceAddress string, attributePath tfjsonpath.Path) PlanCheck { + return expectSensitiveValue{ + resourceAddress: resourceAddress, + attributePath: attributePath, + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_unknown_value.go b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_unknown_value.go new file mode 100644 index 0000000000000..1569397c21d62 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/expect_unknown_value.go @@ -0,0 +1,61 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package plancheck + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-testing/tfjsonpath" +) + +var _ PlanCheck = expectUnknownValue{} + +type expectUnknownValue struct { + resourceAddress string + attributePath tfjsonpath.Path +} + +// CheckPlan implements the plan check logic. +func (e expectUnknownValue) CheckPlan(ctx context.Context, req CheckPlanRequest, resp *CheckPlanResponse) { + + for _, rc := range req.Plan.ResourceChanges { + if e.resourceAddress != rc.Address { + continue + } + + result, err := tfjsonpath.Traverse(rc.Change.AfterUnknown, e.attributePath) + if err != nil { + resp.Error = err + return + } + + isUnknown, ok := result.(bool) + if !ok { + resp.Error = fmt.Errorf("invalid path: the path value cannot be asserted as bool") + return + } + + if !isUnknown { + resp.Error = fmt.Errorf("attribute at path is known") + return + } + + return + } + + resp.Error = fmt.Errorf("%s - Resource not found in plan ResourceChanges", e.resourceAddress) +} + +// ExpectUnknownValue returns a plan check that asserts that the specified attribute at the given resource has an unknown value. +// +// Due to implementation differences between the terraform-plugin-sdk and the terraform-plugin-framework, representation of unknown +// values may differ. For example, terraform-plugin-sdk based providers may have less precise representations of unknown values, such +// as marking whole maps as unknown rather than individual element values. +func ExpectUnknownValue(resourceAddress string, attributePath tfjsonpath.Path) PlanCheck { + return expectUnknownValue{ + resourceAddress: resourceAddress, + attributePath: attributePath, + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/plan_check.go b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/plan_check.go new file mode 100644 index 0000000000000..b6ec0d1997af3 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/plan_check.go @@ -0,0 +1,30 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package plancheck + +import ( + "context" + + tfjson "github.com/hashicorp/terraform-json" +) + +// PlanCheck defines an interface for implementing test logic that checks a plan file and then returns an error +// if the plan file does not match what is expected. +type PlanCheck interface { + // CheckPlan should perform the plan check. + CheckPlan(context.Context, CheckPlanRequest, *CheckPlanResponse) +} + +// CheckPlanRequest is a request for an invoke of the CheckPlan function. +type CheckPlanRequest struct { + // Plan represents a parsed plan file, retrieved via the `terraform show -json` command. + Plan *tfjson.Plan +} + +// CheckPlanResponse is a response to an invoke of the CheckPlan function. +type CheckPlanResponse struct { + // Error is used to report the failure of a plan check assertion and is combined with other PlanCheck errors + // to be reported as a test failure. + Error error +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/resource_action.go b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/resource_action.go new file mode 100644 index 0000000000000..ff4afebcdb080 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/plancheck/resource_action.go @@ -0,0 +1,50 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package plancheck + +// ResourceActionType is a string enum type that routes to a specific terraform-json.Actions function for asserting resource changes. +// - https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions +// +// More information about expected resource behavior can be found at: https://developer.hashicorp.com/terraform/language/resources/behavior +type ResourceActionType string + +const ( + // ResourceActionNoop occurs when a resource is not planned to change (no-op). + // - Routes to: https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions.NoOp + ResourceActionNoop ResourceActionType = "NoOp" + + // ResourceActionCreate occurs when a resource is planned to be created. + // - Routes to: https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions.Create + ResourceActionCreate ResourceActionType = "Create" + + // ResourceActionRead occurs when a data source is planned to be read during the apply stage (data sources are read during plan stage when possible). + // See the data source documentation for more information on this behavior: https://developer.hashicorp.com/terraform/language/data-sources#data-resource-behavior + // - Routes to: https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions.Read + ResourceActionRead ResourceActionType = "Read" + + // ResourceActionUpdate occurs when a resource is planned to be updated in-place. + // - Routes to: https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions.Update + ResourceActionUpdate ResourceActionType = "Update" + + // ResourceActionDestroy occurs when a resource is planned to be deleted. + // - Routes to: https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions.Delete + ResourceActionDestroy ResourceActionType = "Destroy" + + // ResourceActionDestroyBeforeCreate occurs when a resource is planned to be deleted and then re-created. This is the default + // behavior when terraform must change a resource argument that cannot be updated in-place due to remote API limitations. + // - Routes to: https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions.DestroyBeforeCreate + ResourceActionDestroyBeforeCreate ResourceActionType = "DestroyBeforeCreate" + + // ResourceActionCreateBeforeDestroy occurs when a resource is planned to be created and then deleted. This is opt-in behavior that + // is enabled with the [create_before_destroy] meta-argument. + // - Routes to: https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions.CreateBeforeDestroy + // + // [create_before_destroy]: https://developer.hashicorp.com/terraform/language/meta-arguments/lifecycle#create_before_destroy + ResourceActionCreateBeforeDestroy ResourceActionType = "CreateBeforeDestroy" + + // ResourceActionReplace can be used to verify a resource is planned to be deleted and re-created (where the order of delete and create actions are not important). + // This action matches both ResourceActionDestroyBeforeCreate and ResourceActionCreateBeforeDestroy. + // - Routes to: https://pkg.go.dev/github.com/hashicorp/terraform-json#Actions.Replace + ResourceActionReplace ResourceActionType = "Replace" +) diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/diff.go b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/diff.go index 967c67944ee2c..f70e46e4d04f6 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/diff.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/diff.go @@ -35,6 +35,10 @@ const ( var multiVal = regexp.MustCompile(`\.(#|%)$`) // InstanceDiff is the diff of a resource from some state to another. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type InstanceDiff struct { mu sync.Mutex Attributes map[string]*ResourceAttrDiff @@ -53,7 +57,14 @@ type InstanceDiff struct { Meta map[string]interface{} } -func (d *InstanceDiff) Lock() { d.mu.Lock() } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. +func (d *InstanceDiff) Lock() { d.mu.Lock() } + +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) Unlock() { d.mu.Unlock() } // ApplyToValue merges the receiver into the given base value, returning a @@ -62,6 +73,10 @@ func (d *InstanceDiff) Unlock() { d.mu.Unlock() } // // This method is intended for shimming old subsystems that still use this // legacy diff type to work with the new-style types. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) ApplyToValue(base cty.Value, schema *configschema.Block) (cty.Value, error) { // Create an InstanceState attributes from our existing state. // We can use this to more easily apply the diff changes. @@ -84,6 +99,10 @@ func (d *InstanceDiff) ApplyToValue(base cty.Value, schema *configschema.Block) // // This method is intended for shimming old subsystems that still use this // legacy diff type to work with the new-style types. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) Apply(attrs map[string]string, schema *configschema.Block) (map[string]string, error) { // We always build a new value here, even if the given diff is "empty", // because we might be planning to create a new instance that happens @@ -604,6 +623,10 @@ func countFlatmapContainerValues(key string, attrs map[string]string) string { } // ResourceAttrDiff is the diff of a single attribute of a resource. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type ResourceAttrDiff struct { Old string // Old Value New string // New Value @@ -626,12 +649,19 @@ func (d *ResourceAttrDiff) GoString() string { // "private_ip". type diffAttrType byte +// Deprecated: This function is unintentionally exported by this Go module and +// not supported for external consumption. It will be removed in the next major +// version. func NewInstanceDiff() *InstanceDiff { return &InstanceDiff{Attributes: make(map[string]*ResourceAttrDiff)} } // ChangeType returns the diffChangeType represented by the diff // for this single instance. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) ChangeType() diffChangeType { if d.Empty() { return diffNone @@ -653,6 +683,10 @@ func (d *InstanceDiff) ChangeType() diffChangeType { } // Empty returns true if this diff encapsulates no changes. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) Empty() bool { if d == nil { return true @@ -693,6 +727,10 @@ func (d *InstanceDiff) GoString() string { // RequiresNew returns true if the diff requires the creation of a new // resource (implying the destruction of the old). +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) RequiresNew() bool { if d == nil { return false @@ -722,6 +760,9 @@ func (d *InstanceDiff) requiresNew() bool { return false } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) GetDestroyDeposed() bool { d.mu.Lock() defer d.mu.Unlock() @@ -729,6 +770,9 @@ func (d *InstanceDiff) GetDestroyDeposed() bool { return d.DestroyDeposed } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) GetDestroyTainted() bool { d.mu.Lock() defer d.mu.Unlock() @@ -736,6 +780,9 @@ func (d *InstanceDiff) GetDestroyTainted() bool { return d.DestroyTainted } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) GetDestroy() bool { d.mu.Lock() defer d.mu.Unlock() @@ -743,6 +790,9 @@ func (d *InstanceDiff) GetDestroy() bool { return d.Destroy } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) GetAttribute(key string) (*ResourceAttrDiff, bool) { d.mu.Lock() defer d.mu.Unlock() @@ -752,6 +802,10 @@ func (d *InstanceDiff) GetAttribute(key string) (*ResourceAttrDiff, bool) { } // Safely copies the Attributes map +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) CopyAttributes() map[string]*ResourceAttrDiff { d.mu.Lock() defer d.mu.Unlock() @@ -768,6 +822,10 @@ func (d *InstanceDiff) CopyAttributes() map[string]*ResourceAttrDiff { // we say "same", it is not necessarily exactly equal. Instead, it is // just checking that the same attributes are changing, a destroy // isn't suddenly happening, etc. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (d *InstanceDiff) Same(d2 *InstanceDiff) (bool, string) { // we can safely compare the pointers without a lock switch { @@ -892,7 +950,7 @@ func (d *InstanceDiff) Same(d2 *InstanceDiff) (bool, string) { continue } - // If the last diff was a computed value then the absense of + // If the last diff was a computed value then the absence of // that value is allowed since it may mean the value ended up // being the same. if diffOld.NewComputed { diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/resource.go b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/resource.go index 1adfe6dffc234..0541a5fff67ac 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/resource.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/resource.go @@ -20,6 +20,10 @@ import ( // InstanceInfo is used to hold information about the instance and/or // resource being modified. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type InstanceInfo struct { // Id is a unique name to represent this instance. This is not related // to InstanceState.ID in any way. @@ -36,6 +40,10 @@ type InstanceInfo struct { // ResourceConfig is a legacy type that was formerly used to represent // interpolatable configuration blocks. It is now only used to shim to old // APIs that still use this type, via NewResourceConfigShimmed. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type ResourceConfig struct { ComputedKeys []string Raw map[string]interface{} @@ -48,6 +56,10 @@ type ResourceConfig struct { // The given value may contain hcl2shim.UnknownVariableValue to signal that // something is computed, but it must not contain unprocessed interpolation // sequences as we might've seen in Terraform v0.11 and prior. +// +// Deprecated: This function is unintentionally exported by this Go module and +// not supported for external consumption. It will be removed in the next major +// version. Use real Terraform configuration instead. func NewResourceConfigRaw(raw map[string]interface{}) *ResourceConfig { v := hcl2shim.HCL2ValueFromConfigValue(raw) @@ -58,6 +70,7 @@ func NewResourceConfigRaw(raw map[string]interface{}) *ResourceConfig { // something is relying on the fact that in the old world the raw and // config maps were always distinct, and thus you could in principle mutate // one without affecting the other. (I sure hope nobody was doing that, though!) + //nolint:forcetypeassert cfg := hcl2shim.ConfigValueFromHCL2(v).(map[string]interface{}) return &ResourceConfig{ @@ -78,6 +91,10 @@ func NewResourceConfigRaw(raw map[string]interface{}) *ResourceConfig { // // If the given value is not of an object type that conforms to the given // schema then this function will panic. +// +// Deprecated: This function is unintentionally exported by this Go module and +// not supported for external consumption. It will be removed in the next major +// version. func NewResourceConfigShimmed(val cty.Value, schema *configschema.Block) *ResourceConfig { if !val.Type().IsObjectType() { panic(fmt.Errorf("NewResourceConfigShimmed given %#v; an object type is required", val.Type())) @@ -150,6 +167,10 @@ func newResourceConfigShimmedComputedKeys(val cty.Value, path string) []string { // DeepCopy performs a deep copy of the configuration. This makes it safe // to modify any of the structures that are part of the resource config without // affecting the original configuration. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (c *ResourceConfig) DeepCopy() *ResourceConfig { // DeepCopying a nil should return a nil to avoid panics if c == nil { @@ -163,7 +184,10 @@ func (c *ResourceConfig) DeepCopy() *ResourceConfig { } // Force the type - result := copiedConfig.(*ResourceConfig) + result, ok := copiedConfig.(*ResourceConfig) + if !ok { + panic(fmt.Errorf("unexpected type %T for copiedConfig", copiedConfig)) + } return result } @@ -202,6 +226,10 @@ func (c *ResourceConfig) Equal(c2 *ResourceConfig) bool { // The second return value is true if the get was successful. Get will // return the raw value if the key is computed, so you should pair this // with IsComputed. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (c *ResourceConfig) Get(k string) (interface{}, bool) { // We aim to get a value from the configuration. If it is computed, // then we return the pure raw value. @@ -218,11 +246,19 @@ func (c *ResourceConfig) Get(k string) (interface{}, bool) { // // The second return value is true if the get was successful. Get will // not succeed if the value is being computed. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (c *ResourceConfig) GetRaw(k string) (interface{}, bool) { return c.get(k, c.Raw) } // IsComputed returns whether the given key is computed or not. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (c *ResourceConfig) IsComputed(k string) bool { // The next thing we do is check the config if we get a computed // value out of it. diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/resource_provider.go b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/resource_provider.go index c8e7008c0a8df..6de283544bb96 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/resource_provider.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/resource_provider.go @@ -4,6 +4,10 @@ package terraform // ResourceType is a type of resource that a resource provider can manage. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type ResourceType struct { Name string // Name of the resource, example "instance" (no provider prefix) Importable bool // Whether this resource supports importing @@ -17,6 +21,10 @@ type ResourceType struct { } // DataSource is a data source that a resource provider implements. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type DataSource struct { Name string diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/schemas.go b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/schemas.go index a1b61f181b759..1cec2eb6fe820 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/schemas.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/schemas.go @@ -13,6 +13,10 @@ import ( // The completeness of this structure depends on how it was constructed. // When constructed for a configuration, it will generally include only // resource types and data sources used by that configuration. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type ProviderSchema struct { Provider *configschema.Block ResourceTypes map[string]*configschema.Block @@ -23,6 +27,10 @@ type ProviderSchema struct { // ProviderSchemaRequest is used to describe to a ResourceProvider which // aspects of schema are required, when calling the GetSchema method. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type ProviderSchemaRequest struct { ResourceTypes []string DataSources []string diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/state.go b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/state.go index 9041d7ae9e7b7..1e0fcb2857784 100644 --- a/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/state.go +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/terraform/state.go @@ -92,11 +92,19 @@ type State struct { // Remote is used to track the metadata required to // pull and push state files from a remote storage endpoint. + // + // Deprecated: This field is unintentionally exported by this Go module and + // external consumption is not supported. It will be removed in the next + // major version. Remote *RemoteState `json:"remote,omitempty"` // Backend tracks the configuration for the backend in use with // this state. This is used to track any changes in the backend // configuration. + // + // Deprecated: This field is unintentionally exported by this Go module and + // external consumption is not supported. It will be removed in the next + // major version. Backend *BackendState `json:"backend,omitempty"` // Modules contains all the modules in a breadth-first order @@ -106,13 +114,28 @@ type State struct { // IsBinaryDrivenTest is a special flag that assists with a binary driver // heuristic, it should not be set externally + // + // Deprecated: This field is unintentionally exported by this Go module and + // external consumption is not supported. It will be removed in the next + // major version. IsBinaryDrivenTest bool } -func (s *State) Lock() { s.mu.Lock() } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. +func (s *State) Lock() { s.mu.Lock() } + +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) Unlock() { s.mu.Unlock() } // NewState is used to initialize a blank state +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func NewState() *State { s := &State{} s.init() @@ -122,6 +145,10 @@ func NewState() *State { // Children returns the ModuleStates that are direct children of // the given path. If the path is "root", for example, then children // returned might be "root.child", but not "root.child.grandchild". +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) Children(path []string) []*ModuleState { s.Lock() defer s.Unlock() @@ -154,6 +181,10 @@ func (s *State) children(path []string) []*ModuleState { // // This should be the preferred method to add module states since it // allows us to optimize lookups later as well as control sorting. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) AddModule(path addrs.ModuleInstance) *ModuleState { s.Lock() defer s.Unlock() @@ -200,6 +231,10 @@ func (s *State) addModule(path addrs.ModuleInstance) *ModuleState { // ModuleByPath is used to lookup the module state for the given path. // This should be the preferred lookup mechanism as it allows for future // lookup optimizations. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) ModuleByPath(path addrs.ModuleInstance) *ModuleState { if s == nil { return nil @@ -227,6 +262,10 @@ func (s *State) moduleByPath(path addrs.ModuleInstance) *ModuleState { } // Empty returns true if the state is empty. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) Empty() bool { if s == nil { return true @@ -241,6 +280,10 @@ func (s *State) Empty() bool { // // This is similar to !s.Empty, but returns true also in the case where the // state has modules but all of them are devoid of resources. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) HasResources() bool { if s.Empty() { return false @@ -257,6 +300,10 @@ func (s *State) HasResources() bool { // IsRemote returns true if State represents a state that exists and is // remote. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) IsRemote() bool { if s == nil { return false @@ -283,6 +330,10 @@ func (s *State) IsRemote() bool { // // If this returns an error, then the user should be notified. The error // response will include detailed information on the nature of the error. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) Validate() error { s.Lock() defer s.Unlock() @@ -327,6 +378,10 @@ func (s *State) Validate() error { // If the address references a module state or resource, it will delete // all children as well. To check what will be deleted, use a StateFilter // first. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) Remove(addr ...string) error { s.Lock() defer s.Unlock() @@ -373,6 +428,7 @@ func (s *State) Remove(addr ...string) error { case *ResourceState: s.removeResource(path, v) case *InstanceState: + //nolint:forcetypeassert s.removeInstance(r.Parent.Value.(*ResourceState), v) default: return fmt.Errorf("unknown type to delete: %T", r.Value) @@ -436,6 +492,10 @@ func (s *State) RootModule() *ModuleState { } // Equal tests if one state is equal to another. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) Equal(other *State) bool { // If one is nil, we do a direct check if s == nil || other == nil { @@ -477,6 +537,9 @@ func (s *State) equal(other *State) bool { return true } +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type StateAgeComparison int const ( @@ -497,6 +560,10 @@ const ( // the argument, positive if the converse, and zero if they are equal. // An error is returned if the two states are not of the same lineage, // in which case the integer returned has no meaning. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) CompareAges(other *State) (StateAgeComparison, error) { // nil states are "older" than actual states switch { @@ -529,6 +596,10 @@ func (s *State) CompareAges(other *State) (StateAgeComparison, error) { // SameLineage returns true only if the state given in argument belongs // to the same "lineage" of states as the receiver. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) SameLineage(other *State) bool { s.Lock() defer s.Unlock() @@ -546,6 +617,10 @@ func (s *State) SameLineage(other *State) bool { // DeepCopy performs a deep copy of the state structure and returns // a new structure. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) DeepCopy() *State { if s == nil { return nil @@ -556,9 +631,17 @@ func (s *State) DeepCopy() *State { panic(err) } - return copiedState.(*State) + state, ok := copiedState.(*State) + if !ok { + panic(fmt.Errorf("unexpected type %T for copiedState", state)) + } + + return state } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) Init() { s.Lock() defer s.Unlock() @@ -587,6 +670,9 @@ func (s *State) init() { } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) EnsureHasLineage() { s.Lock() defer s.Unlock() @@ -612,6 +698,10 @@ func (s *State) ensureHasLineage() { } // AddModuleState insert this module state and override any existing ModuleState +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *State) AddModuleState(mod *ModuleState) { mod.init() s.Lock() @@ -703,6 +793,10 @@ func (s *State) String() string { } // BackendState stores the configuration to connect to a remote backend. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type BackendState struct { Type string `json:"type"` // Backend type ConfigRaw json.RawMessage `json:"config"` // Backend raw config @@ -711,6 +805,10 @@ type BackendState struct { // RemoteState is used to track the information about a remote // state store that we push/pull state to. +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type RemoteState struct { // Type controls the client we use for the remote state Type string `json:"type"` @@ -722,7 +820,14 @@ type RemoteState struct { mu sync.Mutex } -func (s *RemoteState) Lock() { s.mu.Lock() } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. +func (s *RemoteState) Lock() { s.mu.Lock() } + +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *RemoteState) Unlock() { s.mu.Unlock() } func (r *RemoteState) init() { @@ -734,6 +839,9 @@ func (r *RemoteState) init() { } } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (r *RemoteState) Empty() bool { if r == nil { return true @@ -759,7 +867,14 @@ type OutputState struct { mu sync.Mutex } -func (s *OutputState) Lock() { s.mu.Lock() } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. +func (s *OutputState) Lock() { s.mu.Lock() } + +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *OutputState) Unlock() { s.mu.Unlock() } func (s *OutputState) String() string { @@ -768,6 +883,10 @@ func (s *OutputState) String() string { // Equal compares two OutputState structures for equality. nil values are // considered equal. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *OutputState) Equal(other *OutputState) bool { if s == nil && other == nil { return true @@ -834,7 +953,14 @@ type ModuleState struct { mu sync.Mutex } -func (s *ModuleState) Lock() { s.mu.Lock() } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. +func (s *ModuleState) Lock() { s.mu.Lock() } + +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *ModuleState) Unlock() { s.mu.Unlock() } // Equal tests whether one module state is equal to another. @@ -1196,7 +1322,14 @@ type ResourceState struct { mu sync.Mutex } -func (s *ResourceState) Lock() { s.mu.Lock() } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. +func (s *ResourceState) Lock() { s.mu.Lock() } + +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *ResourceState) Unlock() { s.mu.Unlock() } // Equal tests whether two ResourceStates are equal. @@ -1317,7 +1450,14 @@ type InstanceState struct { mu sync.Mutex } -func (s *InstanceState) Lock() { s.mu.Lock() } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. +func (s *InstanceState) Lock() { s.mu.Lock() } + +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *InstanceState) Unlock() { s.mu.Unlock() } func (s *InstanceState) init() { @@ -1338,6 +1478,10 @@ func (s *InstanceState) init() { // legacy InstanceState representation. // // This is for shimming to old components only and should not be used in new code. +// +// Deprecated: This function is unintentionally exported by this Go module and +// not supported for external consumption. It will be removed in the next major +// version. func NewInstanceStateShimmedFromValue(state cty.Value, schemaVersion int) *InstanceState { attrs := hcl2shim.FlatmapValueFromHCL2(state) return &InstanceState{ @@ -1358,6 +1502,10 @@ func NewInstanceStateShimmedFromValue(state cty.Value, schemaVersion int) *Insta // // This is for shimming from old components only and should not be used in // new code. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *InstanceState) AttrsAsObjectValue(ty cty.Type) (cty.Value, error) { if s == nil { // if the state is nil, we need to construct a complete cty.Value with @@ -1379,6 +1527,10 @@ func (s *InstanceState) AttrsAsObjectValue(ty cty.Type) (cty.Value, error) { } // Copy all the Fields from another InstanceState +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *InstanceState) Set(from *InstanceState) { s.Lock() defer s.Unlock() @@ -1393,15 +1545,26 @@ func (s *InstanceState) Set(from *InstanceState) { s.Tainted = from.Tainted } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *InstanceState) DeepCopy() *InstanceState { copiedState, err := copystructure.Config{Lock: true}.Copy(s) if err != nil { panic(err) } - return copiedState.(*InstanceState) + instanceState, ok := copiedState.(*InstanceState) + if !ok { + panic(fmt.Errorf("unexpected type %T for copiedState", copiedState)) + } + + return instanceState } +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *InstanceState) Empty() bool { if s == nil { return true @@ -1481,6 +1644,10 @@ func (s *InstanceState) Equal(other *InstanceState) bool { // If the diff attribute requires computing the value, and hence // won't be available until apply, the value is replaced with the // computeID. +// +// Deprecated: This method is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. func (s *InstanceState) MergeDiff(d *InstanceDiff) *InstanceState { result := s.DeepCopy() if result == nil { @@ -1553,6 +1720,10 @@ func (s *InstanceState) String() string { } // EphemeralState is used for transient state that is only kept in-memory +// +// Deprecated: This type is unintentionally exported by this Go module and not +// supported for external consumption. It will be removed in the next major +// version. type EphemeralState struct { // ConnInfo is used for the providers to export information which is // used to connect to the resource for provisioning. For example, diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/doc.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/doc.go new file mode 100644 index 0000000000000..4b1a4923b93a9 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/doc.go @@ -0,0 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Package tfjsonpath implements terraform-json path functionality, which defines +// traversals into Terraform JSON data, for testing purposes. +package tfjsonpath diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/path.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/path.go new file mode 100644 index 0000000000000..ef3930dfb5f77 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/path.go @@ -0,0 +1,107 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfjsonpath + +import ( + "fmt" +) + +// Path represents exact traversal steps specifying a value inside +// Terraform JSON data. These steps always start from a MapStep with a key +// specifying the name of a top-level JSON object or array. +// +// The [terraform-json] library serves as the de facto documentation +// for JSON format of Terraform data. +// +// Use the New() function to create a Path with an initial AtMapKey() step. +// Path functionality follows a builder pattern, which allows for chaining method +// calls to construct a full path. The available traversal steps after Path +// creation are: +// +// - AtSliceIndex(): Step into a slice at a specific 0-based index +// - AtMapKey(): Step into a map at a specific key +// +// For example, to represent the first element of a JSON array +// underneath a "some_array" property of this JSON value: +// +// { +// "some_array": [true] +// } +// +// The path code would be represented by: +// +// tfjsonpath.New("some_array").AtSliceIndex(0) +// +// [terraform-json]: (https://pkg.go.dev/github.com/hashicorp/terraform-json) +type Path struct { + steps []step +} + +// New creates a new path with an initial MapStep. +func New(name string) Path { + return Path{ + steps: []step{ + MapStep(name), + }, + } +} + +// AtSliceIndex returns a copied Path with a new SliceStep at the end. +func (s Path) AtSliceIndex(index int) Path { + newSteps := append(s.steps, SliceStep(index)) + s.steps = newSteps + return s +} + +// AtMapKey returns a copied Path with a new MapStep at the end. +func (s Path) AtMapKey(key string) Path { + newSteps := append(s.steps, MapStep(key)) + s.steps = newSteps + return s +} + +// Traverse returns the element found when traversing the given +// object using the specified Path. The object is an unmarshalled +// JSON object representing Terraform data. +// +// Traverse returns an error if the value specified by the Path +// is not found in the given object or if the given object does not +// conform to format of Terraform JSON data. +func Traverse(object any, attrPath Path) (any, error) { + _, ok := object.(map[string]any) + + if !ok { + return nil, fmt.Errorf("cannot convert given object to map[string]any") + } + + result := object + + for _, step := range attrPath.steps { + switch s := step.(type) { + case MapStep: + mapObj, ok := result.(map[string]any) + if !ok { + return nil, fmt.Errorf("path not found: cannot convert object at MapStep %s to map[string]any", string(s)) + } + result, ok = mapObj[string(s)] + if !ok { + return nil, fmt.Errorf("path not found: specified key %s not found in map", string(s)) + } + + case SliceStep: + sliceObj, ok := result.([]any) + if !ok { + return nil, fmt.Errorf("path not found: cannot convert object at SliceStep %d to []any", s) + } + + if int(s) >= len(sliceObj) { + return nil, fmt.Errorf("path not found: SliceStep index %d is out of range with slice length %d", s, len(sliceObj)) + } + + result = sliceObj[s] + } + } + + return result, nil +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/step.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/step.go new file mode 100644 index 0000000000000..7b6813d60e815 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfjsonpath/step.go @@ -0,0 +1,14 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfjsonpath + +// step represents a traversal type indicating the underlying Go type +// representation for a Terraform JSON value. +type step interface{} + +// MapStep represents a traversal for map[string]any +type MapStep string + +// SliceStep represents a traversal for []any +type SliceStep int diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/all.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/all.go new file mode 100644 index 0000000000000..78e1f1780198b --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/all.go @@ -0,0 +1,45 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" +) + +// All will return the first non-nil error or non-empty skip message +// if any of the given checks return a non-nil error or non-empty skip message. +// Otherwise, it will return a nil error and empty skip message (run the test) +// +// Use of All is only necessary when used in conjunction with Any as the +// TerraformVersionChecks field automatically applies a logical AND. +func All(terraformVersionChecks ...TerraformVersionCheck) TerraformVersionCheck { + return allCheck{ + terraformVersionChecks: terraformVersionChecks, + } +} + +// allCheck implements the TerraformVersionCheck interface +type allCheck struct { + terraformVersionChecks []TerraformVersionCheck +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (a allCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + for _, subCheck := range a.terraformVersionChecks { + checkResp := CheckTerraformVersionResponse{} + + subCheck.CheckTerraformVersion(ctx, CheckTerraformVersionRequest{TerraformVersion: req.TerraformVersion}, &checkResp) + + if checkResp.Error != nil { + resp.Error = checkResp.Error + return + } + + if checkResp.Skip != "" { + resp.Skip = checkResp.Skip + return + } + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/any.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/any.go new file mode 100644 index 0000000000000..27088e1a58aa4 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/any.go @@ -0,0 +1,59 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "strings" + + "github.com/hashicorp/terraform-plugin-testing/internal/errorshim" +) + +// Any will return a nil error and empty skip message (run the test) +// if any of the given checks return a nil error and empty skip message. +// Otherwise, it will return all errors and fail the test if any of the given +// checks return a non-nil error, or it will return all skip messages +// and skip (pass) the test. +func Any(terraformVersionChecks ...TerraformVersionCheck) TerraformVersionCheck { + return anyCheck{ + terraformVersionChecks: terraformVersionChecks, + } +} + +// anyCheck implements the TerraformVersionCheck interface +type anyCheck struct { + terraformVersionChecks []TerraformVersionCheck +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (a anyCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + var joinedErrors error + strBuilder := strings.Builder{} + + for _, subCheck := range a.terraformVersionChecks { + checkResp := CheckTerraformVersionResponse{} + + subCheck.CheckTerraformVersion(ctx, CheckTerraformVersionRequest{TerraformVersion: req.TerraformVersion}, &checkResp) + + if checkResp.Error == nil && checkResp.Skip == "" { + resp.Error = nil + resp.Skip = "" + return + } + + if checkResp.Error != nil { + // TODO: Once Go 1.20 is the minimum supported version for this module, replace with `errors.Join` function + // - https://github.com/hashicorp/terraform-plugin-testing/issues/99 + joinedErrors = errorshim.Join(joinedErrors, checkResp.Error) + } + + if checkResp.Skip != "" { + strBuilder.WriteString(checkResp.Skip) + strBuilder.WriteString("\n") + } + } + + resp.Error = joinedErrors + resp.Skip = strings.TrimSpace(strBuilder.String()) +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/doc.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/doc.go new file mode 100644 index 0000000000000..d73b474d2545b --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/doc.go @@ -0,0 +1,5 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +// Package tfversion contains the Terraform version check interface, request/response structs, and common version check implementations. +package tfversion diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_above.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_above.go new file mode 100644 index 0000000000000..4734bcf6ebf25 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_above.go @@ -0,0 +1,35 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "fmt" + + "github.com/hashicorp/go-version" +) + +// RequireAbove will fail the test if the Terraform CLI +// version is below the given version. For example, if given +// version.Must(version.NewVersion("0.15.0")), then 0.14.x or +// any other prior minor versions will fail the test. +func RequireAbove(minimumVersion *version.Version) TerraformVersionCheck { + return requireAboveCheck{ + minimumVersion: minimumVersion, + } +} + +// requireAboveCheck implements the TerraformVersionCheck interface +type requireAboveCheck struct { + minimumVersion *version.Version +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (r requireAboveCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + if req.TerraformVersion.LessThan(r.minimumVersion) { + resp.Error = fmt.Errorf("expected Terraform CLI version above %s but detected version is %s", + r.minimumVersion, req.TerraformVersion) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_below.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_below.go new file mode 100644 index 0000000000000..99efa53468cb0 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_below.go @@ -0,0 +1,35 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "fmt" + + "github.com/hashicorp/go-version" +) + +// RequireBelow will fail the test if the Terraform CLI +// version is above the given version. For example, if given +// version.Must(version.NewVersion("0.15.0")), then versions 0.15.x and +// above will fail the test. +func RequireBelow(maximumVersion *version.Version) TerraformVersionCheck { + return requireBelowCheck{ + maximumVersion: maximumVersion, + } +} + +// requireBelowCheck implements the TerraformVersionCheck interface +type requireBelowCheck struct { + maximumVersion *version.Version +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (s requireBelowCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + if req.TerraformVersion.GreaterThan(s.maximumVersion) { + resp.Error = fmt.Errorf("expected Terraform CLI version below %s but detected version is %s", + s.maximumVersion, req.TerraformVersion) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_between.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_between.go new file mode 100644 index 0000000000000..b992979280ef2 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_between.go @@ -0,0 +1,38 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "fmt" + + "github.com/hashicorp/go-version" +) + +// RequireBetween will fail the test if the Terraform CLI +// version is outside the given minimum (exclusive) and maximum (inclusive). +// For example, if given a minimum version of version.Must(version.NewVersion("0.15.0")) +// and a maximum version of version.Must(version.NewVersion("1.0.0")), then 0.15.x or +// any other prior versions and versions greater than 1.0.0 will fail the test. +func RequireBetween(minimumVersion, maximumVersion *version.Version) TerraformVersionCheck { + return requireBetweenCheck{ + minimumVersion: minimumVersion, + maximumVersion: maximumVersion, + } +} + +// requireBetweenCheck implements the TerraformVersionCheck interface +type requireBetweenCheck struct { + minimumVersion *version.Version + maximumVersion *version.Version +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (s requireBetweenCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + if req.TerraformVersion.LessThan(s.minimumVersion) || req.TerraformVersion.GreaterThanOrEqual(s.maximumVersion) { + resp.Error = fmt.Errorf("expected Terraform CLI version between %s and %s but detected version is %s", + s.minimumVersion, s.maximumVersion, req.TerraformVersion) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_not.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_not.go new file mode 100644 index 0000000000000..18a9b68d13fe5 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/require_not.go @@ -0,0 +1,32 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "fmt" + + "github.com/hashicorp/go-version" +) + +// RequireNot will fail the test if the Terraform CLI +// version matches the given version. +func RequireNot(version *version.Version) TerraformVersionCheck { + return requireNotCheck{ + version: version, + } +} + +// requireNotCheck implements the TerraformVersionCheck interface +type requireNotCheck struct { + version *version.Version +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (s requireNotCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + if req.TerraformVersion.Equal(s.version) { + resp.Error = fmt.Errorf("unexpected Terraform CLI version: %s", s.version) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_above.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_above.go new file mode 100644 index 0000000000000..ffc69b857be41 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_above.go @@ -0,0 +1,35 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "fmt" + + "github.com/hashicorp/go-version" +) + +// SkipAbove will skip (pass) the test if the Terraform CLI +// version is below the given version. For example, if given +// version.Must(version.NewVersion("0.15.0")), then 0.14.x or +// any other prior minor versions will skip the test. +func SkipAbove(maximumVersion *version.Version) TerraformVersionCheck { + return skipAboveCheck{ + maximumVersion: maximumVersion, + } +} + +// skipAboveCheck implements the TerraformVersionCheck interface +type skipAboveCheck struct { + maximumVersion *version.Version +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (s skipAboveCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + if req.TerraformVersion.GreaterThan(s.maximumVersion) { + resp.Skip = fmt.Sprintf("Terraform CLI version %s is above maximum version %s: skipping test", + req.TerraformVersion, s.maximumVersion) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_below.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_below.go new file mode 100644 index 0000000000000..0b3dffddcbf41 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_below.go @@ -0,0 +1,35 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "fmt" + + "github.com/hashicorp/go-version" +) + +// SkipBelow will skip (pass) the test if the Terraform CLI +// version is below the given version. For example, if given +// version.Must(version.NewVersion("0.15.0")), then 0.14.x or +// any other prior minor versions will skip the test. +func SkipBelow(minimumVersion *version.Version) TerraformVersionCheck { + return skipBelowCheck{ + minimumVersion: minimumVersion, + } +} + +// skipBelowCheck implements the TerraformVersionCheck interface +type skipBelowCheck struct { + minimumVersion *version.Version +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (s skipBelowCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + if req.TerraformVersion.LessThan(s.minimumVersion) { + resp.Skip = fmt.Sprintf("Terraform CLI version %s is below minimum version %s: skipping test", + req.TerraformVersion, s.minimumVersion) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_between.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_between.go new file mode 100644 index 0000000000000..fb6e941082c56 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_between.go @@ -0,0 +1,38 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "fmt" + + "github.com/hashicorp/go-version" +) + +// SkipBetween will skip the test if the Terraform CLI +// version is between the given minimum (inclusive) and maximum (exclusive). +// For example, if given a minimum version of version.Must(version.NewVersion("0.15.0")) +// and a maximum version of version.Must(version.NewVersion("0.16.0")), then versions 0.15.x +// will skip the test. +func SkipBetween(minimumVersion, maximumVersion *version.Version) TerraformVersionCheck { + return skipBetweenCheck{ + minimumVersion: minimumVersion, + maximumVersion: maximumVersion, + } +} + +// skipBetweenCheck implements the TerraformVersionCheck interface +type skipBetweenCheck struct { + minimumVersion *version.Version + maximumVersion *version.Version +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (s skipBetweenCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + if req.TerraformVersion.GreaterThanOrEqual(s.minimumVersion) && req.TerraformVersion.LessThan(s.maximumVersion) { + resp.Skip = fmt.Sprintf("Terraform CLI version %s is between %s and %s: skipping test.", + req.TerraformVersion, s.minimumVersion, s.maximumVersion) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_if.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_if.go new file mode 100644 index 0000000000000..6ece5e05d502d --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/skip_if.go @@ -0,0 +1,32 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + "fmt" + + "github.com/hashicorp/go-version" +) + +// SkipIf will skip (pass) the test if the Terraform CLI +// version matches the given version. +func SkipIf(version *version.Version) TerraformVersionCheck { + return skipIfCheck{ + version: version, + } +} + +// skipIfCheck implements the TerraformVersionCheck interface +type skipIfCheck struct { + version *version.Version +} + +// CheckTerraformVersion satisfies the TerraformVersionCheck interface. +func (s skipIfCheck) CheckTerraformVersion(ctx context.Context, req CheckTerraformVersionRequest, resp *CheckTerraformVersionResponse) { + + if req.TerraformVersion.Equal(s.version) { + resp.Skip = fmt.Sprintf("Terraform CLI version is %s: skipping test.", s.version) + } +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/version_check.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/version_check.go new file mode 100644 index 0000000000000..554ec2247d652 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/version_check.go @@ -0,0 +1,39 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import ( + "context" + + "github.com/hashicorp/go-version" +) + +// TerraformVersionCheck is the interface for writing check logic against the Terraform CLI version. +// The Terraform CLI version is determined by the binary selected by the TF_ACC_TERRAFORM_PATH environment +// variable value, installed by the TF_ACC_TERRAFORM_VERSION value, or already existing based on the PATH environment +// variable. This logic is executed at the beginning of the TestCase before any TestStep is executed. +// +// This package contains some built-in functionality that implements the interface, otherwise consumers can use this +// interface for implementing their own custom logic. +type TerraformVersionCheck interface { + // CheckTerraformVersion should implement the logic to either pass, error (failing the test), or skip (passing the test). + CheckTerraformVersion(context.Context, CheckTerraformVersionRequest, *CheckTerraformVersionResponse) +} + +// CheckTerraformVersionRequest is the request received for the CheckTerraformVersion method of the +// TerraformVersionCheck interface. The response of that method is CheckTerraformVersionResponse. +type CheckTerraformVersionRequest struct { + // TerraformVersion is the version associated with the selected Terraform CLI binary. + TerraformVersion *version.Version +} + +// CheckTerraformVersionResponse is the response returned for the CheckTerraformVersion method of the +// TerraformVersionCheck interface. The request of that method is CheckTerraformVersionRequest. +type CheckTerraformVersionResponse struct { + // Error will result in failing the test with a given error message. + Error error + + // Skip will result in passing the test with a given skip message. + Skip string +} diff --git a/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/versions.go b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/versions.go new file mode 100644 index 0000000000000..6cd04b27f0a5d --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-plugin-testing/tfversion/versions.go @@ -0,0 +1,32 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package tfversion + +import "github.com/hashicorp/go-version" + +// Common use version variables to simplify provider testing implementations. +// This list is not intended to be exhaustive of all Terraform versions, +// however these should at least include cases where Terraform +// introduced new configuration language features. +var ( + // Version0_12_26 is the first Terraform CLI version supported + // by the testing code. + Version0_12_26 *version.Version = version.Must(version.NewVersion("0.12.26")) + + // Major versions + + Version1_0_0 *version.Version = version.Must(version.NewVersion("1.0.0")) + Version2_0_0 *version.Version = version.Must(version.NewVersion("2.0.0")) + + // Minor versions + + Version0_13_0 *version.Version = version.Must(version.NewVersion("0.13.0")) + Version0_14_0 *version.Version = version.Must(version.NewVersion("0.14.0")) + Version0_15_0 *version.Version = version.Must(version.NewVersion("0.15.0")) + Version1_1_0 *version.Version = version.Must(version.NewVersion("1.1.0")) + Version1_2_0 *version.Version = version.Must(version.NewVersion("1.2.0")) + Version1_3_0 *version.Version = version.Must(version.NewVersion("1.3.0")) + Version1_4_0 *version.Version = version.Must(version.NewVersion("1.4.0")) + Version1_5_0 *version.Version = version.Must(version.NewVersion("1.5.0")) +) diff --git a/vendor/github.com/hashicorp/terraform-registry-address/.copywrite.hcl b/vendor/github.com/hashicorp/terraform-registry-address/.copywrite.hcl new file mode 100644 index 0000000000000..235a80dc46287 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-registry-address/.copywrite.hcl @@ -0,0 +1,7 @@ +schema_version = 1 + +project { + license = "MPL-2.0" + copyright_year = 2021 + header_ignore = [] +} diff --git a/vendor/github.com/hashicorp/terraform-registry-address/.go-version b/vendor/github.com/hashicorp/terraform-registry-address/.go-version index adc97d8e22132..bc4493477aed1 100644 --- a/vendor/github.com/hashicorp/terraform-registry-address/.go-version +++ b/vendor/github.com/hashicorp/terraform-registry-address/.go-version @@ -1 +1 @@ -1.18 +1.19 diff --git a/vendor/github.com/hashicorp/terraform-registry-address/errors.go b/vendor/github.com/hashicorp/terraform-registry-address/errors.go index 1ca735383a6f1..cf977115a5585 100644 --- a/vendor/github.com/hashicorp/terraform-registry-address/errors.go +++ b/vendor/github.com/hashicorp/terraform-registry-address/errors.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfaddr import ( diff --git a/vendor/github.com/hashicorp/terraform-registry-address/module.go b/vendor/github.com/hashicorp/terraform-registry-address/module.go index 6af0c5976b541..f000a7410ee78 100644 --- a/vendor/github.com/hashicorp/terraform-registry-address/module.go +++ b/vendor/github.com/hashicorp/terraform-registry-address/module.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfaddr import ( diff --git a/vendor/github.com/hashicorp/terraform-registry-address/module_package.go b/vendor/github.com/hashicorp/terraform-registry-address/module_package.go index d8ad2534a0965..be065966138d6 100644 --- a/vendor/github.com/hashicorp/terraform-registry-address/module_package.go +++ b/vendor/github.com/hashicorp/terraform-registry-address/module_package.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfaddr import ( diff --git a/vendor/github.com/hashicorp/terraform-registry-address/provider.go b/vendor/github.com/hashicorp/terraform-registry-address/provider.go index 23e1e221f2f7d..7fb252ea222be 100644 --- a/vendor/github.com/hashicorp/terraform-registry-address/provider.go +++ b/vendor/github.com/hashicorp/terraform-registry-address/provider.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package tfaddr import ( diff --git a/vendor/github.com/hashicorp/terraform-svchost/CHANGELOG.md b/vendor/github.com/hashicorp/terraform-svchost/CHANGELOG.md new file mode 100644 index 0000000000000..ed9f9932a933e --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-svchost/CHANGELOG.md @@ -0,0 +1,13 @@ +## v0.1.1 + +The `disco.Disco` and `auth.CachingCredentialsSource` implementations are now safe for concurrent calls. Previously concurrent calls could potentially corrupt the internal cache maps or cause the Go runtime to panic. + +## v0.1.0 + +#### Features: + +- Adds hostname `Alias` method to service discovery, making it possible to interpret one hostname as another. + +## v0.0.1 + +Initial release diff --git a/vendor/github.com/hashicorp/terraform-svchost/CONTRIBUTING.md b/vendor/github.com/hashicorp/terraform-svchost/CONTRIBUTING.md new file mode 100644 index 0000000000000..c12e3bb41a77b --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-svchost/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# Contributing to the svchost library + +If you find an issue or would like to add a feature, please add an issue in GitHub. We welcome your contributions - fork the repo and submit a pull request. diff --git a/vendor/github.com/hashicorp/terraform-svchost/LICENSE b/vendor/github.com/hashicorp/terraform-svchost/LICENSE index 82b4de97c7e32..342bbb5bb9184 100644 --- a/vendor/github.com/hashicorp/terraform-svchost/LICENSE +++ b/vendor/github.com/hashicorp/terraform-svchost/LICENSE @@ -1,3 +1,5 @@ +Copyright (c) 2019 HashiCorp, Inc. + Mozilla Public License, version 2.0 1. Definitions diff --git a/vendor/github.com/hashicorp/terraform-svchost/README.md b/vendor/github.com/hashicorp/terraform-svchost/README.md new file mode 100644 index 0000000000000..3a12f013be494 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform-svchost/README.md @@ -0,0 +1,9 @@ +# terraform-svchost + +[![CI Tests](https://github.com/hashicorp/terraform-svchost/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/hashicorp/terraform-svchost/actions/workflows/ci.yml) +[![GitHub license](https://img.shields.io/github/license/hashicorp/terraform-svchost.svg)](https://github.com/hashicorp/terraform-svchost/blob/main/LICENSE) +[![GoDoc](https://godoc.org/github.com/hashicorp/terraform-svchost?status.svg)](https://godoc.org/github.com/hashicorp/terraform-svchost) +[![Go Report Card](https://goreportcard.com/badge/github.com/hashicorp/terraform-svchost)](https://goreportcard.com/report/github.com/hashicorp/terraform-svchost) +[![GitHub issues](https://img.shields.io/github/issues/hashicorp/terraform-svchost.svg)](https://github.com/hashicorp/terraform-svchost/issues) + +This package provides friendly hostnames, and is used by [terraform](https://github.com/hashicorp/terraform). diff --git a/vendor/github.com/hashicorp/terraform-svchost/label_iter.go b/vendor/github.com/hashicorp/terraform-svchost/label_iter.go index af8ccbab20846..eb8756814456f 100644 --- a/vendor/github.com/hashicorp/terraform-svchost/label_iter.go +++ b/vendor/github.com/hashicorp/terraform-svchost/label_iter.go @@ -1,3 +1,5 @@ +// Copyright (c) HashiCorp, Inc. + package svchost import ( diff --git a/vendor/github.com/hashicorp/terraform-svchost/svchost.go b/vendor/github.com/hashicorp/terraform-svchost/svchost.go index 4060b767e58ab..45a702978efa0 100644 --- a/vendor/github.com/hashicorp/terraform-svchost/svchost.go +++ b/vendor/github.com/hashicorp/terraform-svchost/svchost.go @@ -1,3 +1,5 @@ +// Copyright (c) HashiCorp, Inc. + // Package svchost deals with the representations of the so-called "friendly // hostnames" that we use to represent systems that provide Terraform-native // remote services, such as module registry, remote operations, etc. @@ -101,6 +103,18 @@ func ForComparison(given string) (Hostname, error) { var err error portPortion, err = normalizePortPortion(portPortion) if err != nil { + // We can get in here if someone has incorrectly specified a URL + // instead of a hostname, because normalizePortPortion will try to + // treat the colon after the scheme as the port number separator. + // We'll return a more specific error message for that situation. + given = strings.ToLower(given) + if given == "https" || given == "http" { + // Technically it's valid to have a host called "https" or "http" + // which would generate a false positive here with input like + // "http:foo", but we can only get here if the hostname exactly + // matches one of the schemes _and_ the port number is also invalid. + return Hostname(""), fmt.Errorf("need just a hostname and optional port number, not a full URL") + } return Hostname(""), err } diff --git a/vendor/github.com/hashicorp/yamux/const.go b/vendor/github.com/hashicorp/yamux/const.go index 4f52938287f46..2fdbf844a8eee 100644 --- a/vendor/github.com/hashicorp/yamux/const.go +++ b/vendor/github.com/hashicorp/yamux/const.go @@ -5,6 +5,25 @@ import ( "fmt" ) +// NetError implements net.Error +type NetError struct { + err error + timeout bool + temporary bool +} + +func (e *NetError) Error() string { + return e.err.Error() +} + +func (e *NetError) Timeout() bool { + return e.timeout +} + +func (e *NetError) Temporary() bool { + return e.temporary +} + var ( // ErrInvalidVersion means we received a frame with an // invalid version @@ -30,7 +49,13 @@ var ( ErrRecvWindowExceeded = fmt.Errorf("recv window exceeded") // ErrTimeout is used when we reach an IO deadline - ErrTimeout = fmt.Errorf("i/o deadline reached") + ErrTimeout = &NetError{ + err: fmt.Errorf("i/o deadline reached"), + + // Error should meet net.Error interface for timeouts for compatability + // with standard library expectations, such as http servers. + timeout: true, + } // ErrStreamClosed is returned when using a closed stream ErrStreamClosed = fmt.Errorf("stream closed") diff --git a/vendor/github.com/hashicorp/yamux/mux.go b/vendor/github.com/hashicorp/yamux/mux.go index a3826be9ab656..0c3e67b022a59 100644 --- a/vendor/github.com/hashicorp/yamux/mux.go +++ b/vendor/github.com/hashicorp/yamux/mux.go @@ -31,6 +31,13 @@ type Config struct { // window size that we allow for a stream. MaxStreamWindowSize uint32 + // StreamOpenTimeout is the maximum amount of time that a stream will + // be allowed to remain in pending state while waiting for an ack from the peer. + // Once the timeout is reached the session will be gracefully closed. + // A zero value disables the StreamOpenTimeout allowing unbounded + // blocking on OpenStream calls. + StreamOpenTimeout time.Duration + // StreamCloseTimeout is the maximum time that a stream will allowed to // be in a half-closed state when `Close` is called before forcibly // closing the connection. Forcibly closed connections will empty the @@ -56,6 +63,7 @@ func DefaultConfig() *Config { ConnectionWriteTimeout: 10 * time.Second, MaxStreamWindowSize: initialStreamWindow, StreamCloseTimeout: 5 * time.Minute, + StreamOpenTimeout: 75 * time.Second, LogOutput: os.Stderr, } } diff --git a/vendor/github.com/hashicorp/yamux/session.go b/vendor/github.com/hashicorp/yamux/session.go index a80ddec35ea21..38fe3ed1f062f 100644 --- a/vendor/github.com/hashicorp/yamux/session.go +++ b/vendor/github.com/hashicorp/yamux/session.go @@ -2,6 +2,7 @@ package yamux import ( "bufio" + "bytes" "fmt" "io" "io/ioutil" @@ -63,24 +64,27 @@ type Session struct { // sendCh is used to mark a stream as ready to send, // or to send a header out directly. - sendCh chan sendReady + sendCh chan *sendReady // recvDoneCh is closed when recv() exits to avoid a race // between stream registration and stream shutdown recvDoneCh chan struct{} + sendDoneCh chan struct{} // shutdown is used to safely close a session - shutdown bool - shutdownErr error - shutdownCh chan struct{} - shutdownLock sync.Mutex + shutdown bool + shutdownErr error + shutdownCh chan struct{} + shutdownLock sync.Mutex + shutdownErrLock sync.Mutex } // sendReady is used to either mark a stream as ready // or to directly send a header type sendReady struct { Hdr []byte - Body io.Reader + mu sync.Mutex // Protects Body from unsafe reads. + Body []byte Err chan error } @@ -101,8 +105,9 @@ func newSession(config *Config, conn io.ReadWriteCloser, client bool) *Session { inflight: make(map[uint32]struct{}), synCh: make(chan struct{}, config.AcceptBacklog), acceptCh: make(chan *Stream, config.AcceptBacklog), - sendCh: make(chan sendReady, 64), + sendCh: make(chan *sendReady, 64), recvDoneCh: make(chan struct{}), + sendDoneCh: make(chan struct{}), shutdownCh: make(chan struct{}), } if client { @@ -184,6 +189,10 @@ GET_ID: s.inflight[id] = struct{}{} s.streamLock.Unlock() + if s.config.StreamOpenTimeout > 0 { + go s.setOpenTimeout(stream) + } + // Send the window update to create if err := stream.sendWindowUpdate(); err != nil { select { @@ -196,6 +205,27 @@ GET_ID: return stream, nil } +// setOpenTimeout implements a timeout for streams that are opened but not established. +// If the StreamOpenTimeout is exceeded we assume the peer is unable to ACK, +// and close the session. +// The number of running timers is bounded by the capacity of the synCh. +func (s *Session) setOpenTimeout(stream *Stream) { + timer := time.NewTimer(s.config.StreamOpenTimeout) + defer timer.Stop() + + select { + case <-stream.establishCh: + return + case <-s.shutdownCh: + return + case <-timer.C: + // Timeout reached while waiting for ACK. + // Close the session to force connection re-establishment. + s.logger.Printf("[ERR] yamux: aborted stream open (destination=%s): %v", s.RemoteAddr().String(), ErrTimeout.err) + s.Close() + } +} + // Accept is used to block until the next available stream // is ready to be accepted. func (s *Session) Accept() (net.Conn, error) { @@ -230,10 +260,15 @@ func (s *Session) Close() error { return nil } s.shutdown = true + + s.shutdownErrLock.Lock() if s.shutdownErr == nil { s.shutdownErr = ErrSessionShutdown } + s.shutdownErrLock.Unlock() + close(s.shutdownCh) + s.conn.Close() <-s.recvDoneCh @@ -242,17 +277,18 @@ func (s *Session) Close() error { for _, stream := range s.streams { stream.forceClose() } + <-s.sendDoneCh return nil } // exitErr is used to handle an error that is causing the // session to terminate. func (s *Session) exitErr(err error) { - s.shutdownLock.Lock() + s.shutdownErrLock.Lock() if s.shutdownErr == nil { s.shutdownErr = err } - s.shutdownLock.Unlock() + s.shutdownErrLock.Unlock() s.Close() } @@ -327,7 +363,7 @@ func (s *Session) keepalive() { } // waitForSendErr waits to send a header, checking for a potential shutdown -func (s *Session) waitForSend(hdr header, body io.Reader) error { +func (s *Session) waitForSend(hdr header, body []byte) error { errCh := make(chan error, 1) return s.waitForSendErr(hdr, body, errCh) } @@ -335,7 +371,7 @@ func (s *Session) waitForSend(hdr header, body io.Reader) error { // waitForSendErr waits to send a header with optional data, checking for a // potential shutdown. Since there's the expectation that sends can happen // in a timely manner, we enforce the connection write timeout here. -func (s *Session) waitForSendErr(hdr header, body io.Reader, errCh chan error) error { +func (s *Session) waitForSendErr(hdr header, body []byte, errCh chan error) error { t := timerPool.Get() timer := t.(*time.Timer) timer.Reset(s.config.ConnectionWriteTimeout) @@ -348,7 +384,7 @@ func (s *Session) waitForSendErr(hdr header, body io.Reader, errCh chan error) e timerPool.Put(t) }() - ready := sendReady{Hdr: hdr, Body: body, Err: errCh} + ready := &sendReady{Hdr: hdr, Body: body, Err: errCh} select { case s.sendCh <- ready: case <-s.shutdownCh: @@ -357,12 +393,34 @@ func (s *Session) waitForSendErr(hdr header, body io.Reader, errCh chan error) e return ErrConnectionWriteTimeout } + bodyCopy := func() { + if body == nil { + return // A nil body is ignored. + } + + // In the event of session shutdown or connection write timeout, + // we need to prevent `send` from reading the body buffer after + // returning from this function since the caller may re-use the + // underlying array. + ready.mu.Lock() + defer ready.mu.Unlock() + + if ready.Body == nil { + return // Body was already copied in `send`. + } + newBody := make([]byte, len(body)) + copy(newBody, body) + ready.Body = newBody + } + select { case err := <-errCh: return err case <-s.shutdownCh: + bodyCopy() return ErrSessionShutdown case <-timer.C: + bodyCopy() return ErrConnectionWriteTimeout } } @@ -384,7 +442,7 @@ func (s *Session) sendNoWait(hdr header) error { }() select { - case s.sendCh <- sendReady{Hdr: hdr}: + case s.sendCh <- &sendReady{Hdr: hdr}: return nil case <-s.shutdownCh: return ErrSessionShutdown @@ -395,39 +453,59 @@ func (s *Session) sendNoWait(hdr header) error { // send is a long running goroutine that sends data func (s *Session) send() { + if err := s.sendLoop(); err != nil { + s.exitErr(err) + } +} + +func (s *Session) sendLoop() error { + defer close(s.sendDoneCh) + var bodyBuf bytes.Buffer for { + bodyBuf.Reset() + select { case ready := <-s.sendCh: // Send a header if ready if ready.Hdr != nil { - sent := 0 - for sent < len(ready.Hdr) { - n, err := s.conn.Write(ready.Hdr[sent:]) - if err != nil { - s.logger.Printf("[ERR] yamux: Failed to write header: %v", err) - asyncSendErr(ready.Err, err) - s.exitErr(err) - return - } - sent += n + _, err := s.conn.Write(ready.Hdr) + if err != nil { + s.logger.Printf("[ERR] yamux: Failed to write header: %v", err) + asyncSendErr(ready.Err, err) + return err } } - // Send data from a body if given + ready.mu.Lock() if ready.Body != nil { - _, err := io.Copy(s.conn, ready.Body) + // Copy the body into the buffer to avoid + // holding a mutex lock during the write. + _, err := bodyBuf.Write(ready.Body) + if err != nil { + ready.Body = nil + ready.mu.Unlock() + s.logger.Printf("[ERR] yamux: Failed to copy body into buffer: %v", err) + asyncSendErr(ready.Err, err) + return err + } + ready.Body = nil + } + ready.mu.Unlock() + + if bodyBuf.Len() > 0 { + // Send data from a body if given + _, err := s.conn.Write(bodyBuf.Bytes()) if err != nil { s.logger.Printf("[ERR] yamux: Failed to write body: %v", err) asyncSendErr(ready.Err, err) - s.exitErr(err) - return + return err } } // No error, successful send asyncSendErr(ready.Err, nil) case <-s.shutdownCh: - return + return nil } } } @@ -614,8 +692,9 @@ func (s *Session) incomingStream(id uint32) error { // Backlog exceeded! RST the stream s.logger.Printf("[WARN] yamux: backlog exceeded, forcing connection reset") delete(s.streams, id) - stream.sendHdr.encode(typeWindowUpdate, flagRST, id, 0) - return s.sendNoWait(stream.sendHdr) + hdr := header(make([]byte, headerSize)) + hdr.encode(typeWindowUpdate, flagRST, id, 0) + return s.sendNoWait(hdr) } } diff --git a/vendor/github.com/hashicorp/yamux/stream.go b/vendor/github.com/hashicorp/yamux/stream.go index 9ff5597d16d02..23d08fcc8daf9 100644 --- a/vendor/github.com/hashicorp/yamux/stream.go +++ b/vendor/github.com/hashicorp/yamux/stream.go @@ -2,6 +2,7 @@ package yamux import ( "bytes" + "errors" "io" "sync" "sync/atomic" @@ -50,6 +51,9 @@ type Stream struct { readDeadline atomic.Value // time.Time writeDeadline atomic.Value // time.Time + // establishCh is notified if the stream is established or being closed. + establishCh chan struct{} + // closeTimer is set with stateLock held to honor the StreamCloseTimeout // setting on Session. closeTimer *time.Timer @@ -70,6 +74,7 @@ func newStream(session *Session, id uint32, state streamState) *Stream { sendWindow: initialStreamWindow, recvNotifyCh: make(chan struct{}, 1), sendNotifyCh: make(chan struct{}, 1), + establishCh: make(chan struct{}, 1), } s.readDeadline.Store(time.Time{}) s.writeDeadline.Store(time.Time{}) @@ -123,6 +128,9 @@ START: // Send a window update potentially err = s.sendWindowUpdate() + if err == ErrSessionShutdown { + err = nil + } return n, err WAIT: @@ -165,7 +173,7 @@ func (s *Stream) Write(b []byte) (n int, err error) { func (s *Stream) write(b []byte) (n int, err error) { var flags uint16 var max uint32 - var body io.Reader + var body []byte START: s.stateLock.Lock() switch s.state { @@ -191,11 +199,15 @@ START: // Send up to our send window max = min(window, uint32(len(b))) - body = bytes.NewReader(b[:max]) + body = b[:max] // Send the header s.sendHdr.encode(typeData, flags, s.id, max) if err = s.session.waitForSendErr(s.sendHdr, body, s.sendErr); err != nil { + if errors.Is(err, ErrSessionShutdown) || errors.Is(err, ErrConnectionWriteTimeout) { + // Message left in ready queue, header re-use is unsafe. + s.sendHdr = header(make([]byte, headerSize)) + } return 0, err } @@ -269,6 +281,10 @@ func (s *Stream) sendWindowUpdate() error { // Send the header s.controlHdr.encode(typeWindowUpdate, flags, s.id, delta) if err := s.session.waitForSendErr(s.controlHdr, nil, s.controlErr); err != nil { + if errors.Is(err, ErrSessionShutdown) || errors.Is(err, ErrConnectionWriteTimeout) { + // Message left in ready queue, header re-use is unsafe. + s.controlHdr = header(make([]byte, headerSize)) + } return err } return nil @@ -283,6 +299,10 @@ func (s *Stream) sendClose() error { flags |= flagFIN s.controlHdr.encode(typeWindowUpdate, flags, s.id, 0) if err := s.session.waitForSendErr(s.controlHdr, nil, s.controlErr); err != nil { + if errors.Is(err, ErrSessionShutdown) || errors.Is(err, ErrConnectionWriteTimeout) { + // Message left in ready queue, header re-use is unsafe. + s.controlHdr = header(make([]byte, headerSize)) + } return err } return nil @@ -358,8 +378,9 @@ func (s *Stream) closeTimeout() { // Send a RST so the remote side closes too. s.sendLock.Lock() defer s.sendLock.Unlock() - s.sendHdr.encode(typeWindowUpdate, flagRST, s.id, 0) - s.session.sendNoWait(s.sendHdr) + hdr := header(make([]byte, headerSize)) + hdr.encode(typeWindowUpdate, flagRST, s.id, 0) + s.session.sendNoWait(hdr) } // forceClose is used for when the session is exiting @@ -393,6 +414,7 @@ func (s *Stream) processFlags(flags uint16) error { if s.state == streamSYNSent { s.state = streamEstablished } + asyncNotify(s.establishCh) s.session.establishStream(s.id) } if flags&flagFIN == flagFIN { @@ -425,6 +447,7 @@ func (s *Stream) processFlags(flags uint16) error { func (s *Stream) notifyWaiting() { asyncNotify(s.recvNotifyCh) asyncNotify(s.sendNotifyCh) + asyncNotify(s.establishCh) } // incrSendWindow updates the size of our send window @@ -459,6 +482,7 @@ func (s *Stream) readData(hdr header, flags uint16, conn io.Reader) error { if length > s.recvWindow { s.session.logger.Printf("[ERR] yamux: receive window exceeded (stream: %d, remain: %d, recv: %d)", s.id, s.recvWindow, length) + s.recvLock.Unlock() return ErrRecvWindowExceeded } @@ -467,14 +491,15 @@ func (s *Stream) readData(hdr header, flags uint16, conn io.Reader) error { // This way we can read in the whole packet without further allocations. s.recvBuf = bytes.NewBuffer(make([]byte, 0, length)) } - if _, err := io.Copy(s.recvBuf, conn); err != nil { + copiedLength, err := io.Copy(s.recvBuf, conn) + if err != nil { s.session.logger.Printf("[ERR] yamux: Failed to read stream data: %v", err) s.recvLock.Unlock() return err } // Decrement the receive window - s.recvWindow -= length + s.recvWindow -= uint32(copiedLength) s.recvLock.Unlock() // Unblock any readers diff --git a/vendor/github.com/mattn/go-isatty/isatty_bsd.go b/vendor/github.com/mattn/go-isatty/isatty_bsd.go index 39bbcf00f0c64..d569c0c949970 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_bsd.go +++ b/vendor/github.com/mattn/go-isatty/isatty_bsd.go @@ -1,5 +1,5 @@ -//go:build (darwin || freebsd || openbsd || netbsd || dragonfly) && !appengine -// +build darwin freebsd openbsd netbsd dragonfly +//go:build (darwin || freebsd || openbsd || netbsd || dragonfly || hurd) && !appengine +// +build darwin freebsd openbsd netbsd dragonfly hurd // +build !appengine package isatty diff --git a/vendor/github.com/rickb777/plural/README.md b/vendor/github.com/rickb777/plural/README.md index b73bc25666920..1085b1087ba9e 100644 --- a/vendor/github.com/rickb777/plural/README.md +++ b/vendor/github.com/rickb777/plural/README.md @@ -1,7 +1,7 @@ # plural - Simple Go API for Pluralisation. [![GoDoc](https://img.shields.io/badge/api-Godoc-blue.svg?style=flat-square)](https://godoc.org/github.com/rickb777/plural) -[![Build Status](https://travis-ci.org/rickb777/plural.svg?branch=master)](https://travis-ci.org/rickb777/plural) +[![Build Status](https://travis-ci.org/rickb777/plural.svg?branch=master)](https://travis-ci.org/rickb777/plural/builds) [![Coverage Status](https://coveralls.io/repos/github/rickb777/plural/badge.svg?branch=master&service=github)](https://coveralls.io/github/rickb777/plural?branch=master) [![Go Report Card](https://goreportcard.com/badge/github.com/rickb777/plural)](https://goreportcard.com/report/github.com/rickb777/plural) [![Issues](https://img.shields.io/github/issues/rickb777/plural.svg)](https://github.com/rickb777/plural/issues) diff --git a/vendor/github.com/rickb777/plural/build+test.sh b/vendor/github.com/rickb777/plural/build+test.sh index d4a3834206581..17b15af25661d 100644 --- a/vendor/github.com/rickb777/plural/build+test.sh +++ b/vendor/github.com/rickb777/plural/build+test.sh @@ -1,13 +1,13 @@ #!/bin/bash -e -cd $(dirname $0) -PATH=$HOME/gopath/bin:$GOPATH/bin:$PATH +cd "$(dirname $0)" +PATH=$HOME/go/bin:$PATH if ! type -p goveralls; then - echo go get github.com/mattn/goveralls - go get github.com/mattn/goveralls + echo go install github.com/mattn/goveralls + go install github.com/mattn/goveralls fi -echo date... +echo plural... go test -v -covermode=count -coverprofile=date.out . go tool cover -func=date.out [ -z "$COVERALLS_TOKEN" ] || goveralls -coverprofile=date.out -service=travis-ci -repotoken $COVERALLS_TOKEN diff --git a/vendor/github.com/vmihailenco/msgpack/v4/.golangci.yml b/vendor/github.com/vmihailenco/msgpack/v4/.golangci.yml deleted file mode 100644 index 98d6cb7797f29..0000000000000 --- a/vendor/github.com/vmihailenco/msgpack/v4/.golangci.yml +++ /dev/null @@ -1,12 +0,0 @@ -run: - concurrency: 8 - deadline: 5m - tests: false -linters: - enable-all: true - disable: - - gochecknoglobals - - gocognit - - godox - - wsl - - funlen diff --git a/vendor/github.com/vmihailenco/msgpack/v4/README.md b/vendor/github.com/vmihailenco/msgpack/v4/README.md deleted file mode 100644 index a5b1004e08c18..0000000000000 --- a/vendor/github.com/vmihailenco/msgpack/v4/README.md +++ /dev/null @@ -1,72 +0,0 @@ -# MessagePack encoding for Golang - -[![Build Status](https://travis-ci.org/vmihailenco/msgpack.svg?branch=v2)](https://travis-ci.org/vmihailenco/msgpack) -[![GoDoc](https://godoc.org/github.com/vmihailenco/msgpack?status.svg)](https://godoc.org/github.com/vmihailenco/msgpack) - -Supports: -- Primitives, arrays, maps, structs, time.Time and interface{}. -- Appengine *datastore.Key and datastore.Cursor. -- [CustomEncoder](https://godoc.org/github.com/vmihailenco/msgpack#example-CustomEncoder)/CustomDecoder interfaces for custom encoding. -- [Extensions](https://godoc.org/github.com/vmihailenco/msgpack#example-RegisterExt) to encode type information. -- Renaming fields via `msgpack:"my_field_name"` and alias via `msgpack:"alias:another_name"`. -- Omitting individual empty fields via `msgpack:",omitempty"` tag or all [empty fields in a struct](https://godoc.org/github.com/vmihailenco/msgpack#example-Marshal--OmitEmpty). -- [Map keys sorting](https://godoc.org/github.com/vmihailenco/msgpack#Encoder.SortMapKeys). -- Encoding/decoding all [structs as arrays](https://godoc.org/github.com/vmihailenco/msgpack#Encoder.UseArrayForStructs) or [individual structs](https://godoc.org/github.com/vmihailenco/msgpack#example-Marshal--AsArray). -- [Encoder.UseJSONTag](https://godoc.org/github.com/vmihailenco/msgpack#Encoder.UseJSONTag) with [Decoder.UseJSONTag](https://godoc.org/github.com/vmihailenco/msgpack#Decoder.UseJSONTag) can turn msgpack into drop-in replacement for JSON. -- Simple but very fast and efficient [queries](https://godoc.org/github.com/vmihailenco/msgpack#example-Decoder-Query). - -API docs: https://godoc.org/github.com/vmihailenco/msgpack. -Examples: https://godoc.org/github.com/vmihailenco/msgpack#pkg-examples. - -## Installation - -This project uses [Go Modules](https://github.com/golang/go/wiki/Modules) and semantic import versioning since v4: - -``` shell -go mod init github.com/my/repo -go get github.com/vmihailenco/msgpack/v4 -``` - -## Quickstart - -``` go -import "github.com/vmihailenco/msgpack/v4" - -func ExampleMarshal() { - type Item struct { - Foo string - } - - b, err := msgpack.Marshal(&Item{Foo: "bar"}) - if err != nil { - panic(err) - } - - var item Item - err = msgpack.Unmarshal(b, &item) - if err != nil { - panic(err) - } - fmt.Println(item.Foo) - // Output: bar -} -``` - -## Benchmark - -``` -BenchmarkStructVmihailencoMsgpack-4 200000 12814 ns/op 2128 B/op 26 allocs/op -BenchmarkStructUgorjiGoMsgpack-4 100000 17678 ns/op 3616 B/op 70 allocs/op -BenchmarkStructUgorjiGoCodec-4 100000 19053 ns/op 7346 B/op 23 allocs/op -BenchmarkStructJSON-4 20000 69438 ns/op 7864 B/op 26 allocs/op -BenchmarkStructGOB-4 10000 104331 ns/op 14664 B/op 278 allocs/op -``` - -## Howto - -Please go through [examples](https://godoc.org/github.com/vmihailenco/msgpack#pkg-examples) to get an idea how to use this package. - -## See also - -- [Golang PostgreSQL ORM](https://github.com/go-pg/pg) -- [Golang message task queue](https://github.com/vmihailenco/taskq) diff --git a/vendor/github.com/vmihailenco/msgpack/v4/appengine.go b/vendor/github.com/vmihailenco/msgpack/v4/appengine.go deleted file mode 100644 index e8e91e53f35d4..0000000000000 --- a/vendor/github.com/vmihailenco/msgpack/v4/appengine.go +++ /dev/null @@ -1,64 +0,0 @@ -// +build appengine - -package msgpack - -import ( - "reflect" - - ds "google.golang.org/appengine/datastore" -) - -func init() { - Register((*ds.Key)(nil), encodeDatastoreKeyValue, decodeDatastoreKeyValue) - Register((*ds.Cursor)(nil), encodeDatastoreCursorValue, decodeDatastoreCursorValue) -} - -func EncodeDatastoreKey(e *Encoder, key *ds.Key) error { - if key == nil { - return e.EncodeNil() - } - return e.EncodeString(key.Encode()) -} - -func encodeDatastoreKeyValue(e *Encoder, v reflect.Value) error { - key := v.Interface().(*ds.Key) - return EncodeDatastoreKey(e, key) -} - -func DecodeDatastoreKey(d *Decoder) (*ds.Key, error) { - v, err := d.DecodeString() - if err != nil { - return nil, err - } - if v == "" { - return nil, nil - } - return ds.DecodeKey(v) -} - -func decodeDatastoreKeyValue(d *Decoder, v reflect.Value) error { - key, err := DecodeDatastoreKey(d) - if err != nil { - return err - } - v.Set(reflect.ValueOf(key)) - return nil -} - -func encodeDatastoreCursorValue(e *Encoder, v reflect.Value) error { - cursor := v.Interface().(ds.Cursor) - return e.Encode(cursor.String()) -} - -func decodeDatastoreCursorValue(d *Decoder, v reflect.Value) error { - s, err := d.DecodeString() - if err != nil { - return err - } - cursor, err := ds.DecodeCursor(s) - if err != nil { - return err - } - v.Set(reflect.ValueOf(cursor)) - return nil -} diff --git a/vendor/github.com/vmihailenco/msgpack/v4/codes/codes.go b/vendor/github.com/vmihailenco/msgpack/v4/codes/codes.go deleted file mode 100644 index 28e0a5a88b4d9..0000000000000 --- a/vendor/github.com/vmihailenco/msgpack/v4/codes/codes.go +++ /dev/null @@ -1,90 +0,0 @@ -package codes - -type Code byte - -var ( - PosFixedNumHigh Code = 0x7f - NegFixedNumLow Code = 0xe0 - - Nil Code = 0xc0 - - False Code = 0xc2 - True Code = 0xc3 - - Float Code = 0xca - Double Code = 0xcb - - Uint8 Code = 0xcc - Uint16 Code = 0xcd - Uint32 Code = 0xce - Uint64 Code = 0xcf - - Int8 Code = 0xd0 - Int16 Code = 0xd1 - Int32 Code = 0xd2 - Int64 Code = 0xd3 - - FixedStrLow Code = 0xa0 - FixedStrHigh Code = 0xbf - FixedStrMask Code = 0x1f - Str8 Code = 0xd9 - Str16 Code = 0xda - Str32 Code = 0xdb - - Bin8 Code = 0xc4 - Bin16 Code = 0xc5 - Bin32 Code = 0xc6 - - FixedArrayLow Code = 0x90 - FixedArrayHigh Code = 0x9f - FixedArrayMask Code = 0xf - Array16 Code = 0xdc - Array32 Code = 0xdd - - FixedMapLow Code = 0x80 - FixedMapHigh Code = 0x8f - FixedMapMask Code = 0xf - Map16 Code = 0xde - Map32 Code = 0xdf - - FixExt1 Code = 0xd4 - FixExt2 Code = 0xd5 - FixExt4 Code = 0xd6 - FixExt8 Code = 0xd7 - FixExt16 Code = 0xd8 - Ext8 Code = 0xc7 - Ext16 Code = 0xc8 - Ext32 Code = 0xc9 -) - -func IsFixedNum(c Code) bool { - return c <= PosFixedNumHigh || c >= NegFixedNumLow -} - -func IsFixedMap(c Code) bool { - return c >= FixedMapLow && c <= FixedMapHigh -} - -func IsFixedArray(c Code) bool { - return c >= FixedArrayLow && c <= FixedArrayHigh -} - -func IsFixedString(c Code) bool { - return c >= FixedStrLow && c <= FixedStrHigh -} - -func IsString(c Code) bool { - return IsFixedString(c) || c == Str8 || c == Str16 || c == Str32 -} - -func IsBin(c Code) bool { - return c == Bin8 || c == Bin16 || c == Bin32 -} - -func IsFixedExt(c Code) bool { - return c >= FixExt1 && c <= FixExt16 -} - -func IsExt(c Code) bool { - return IsFixedExt(c) || c == Ext8 || c == Ext16 || c == Ext32 -} diff --git a/vendor/github.com/vmihailenco/msgpack/v4/ext.go b/vendor/github.com/vmihailenco/msgpack/v4/ext.go deleted file mode 100644 index 17e709bc8ff6a..0000000000000 --- a/vendor/github.com/vmihailenco/msgpack/v4/ext.go +++ /dev/null @@ -1,244 +0,0 @@ -package msgpack - -import ( - "bytes" - "fmt" - "reflect" - "sync" - - "github.com/vmihailenco/msgpack/v4/codes" -) - -type extInfo struct { - Type reflect.Type - Decoder decoderFunc -} - -var extTypes = make(map[int8]*extInfo) - -var bufferPool = &sync.Pool{ - New: func() interface{} { - return new(bytes.Buffer) - }, -} - -// RegisterExt records a type, identified by a value for that type, -// under the provided id. That id will identify the concrete type of a value -// sent or received as an interface variable. Only types that will be -// transferred as implementations of interface values need to be registered. -// Expecting to be used only during initialization, it panics if the mapping -// between types and ids is not a bijection. -func RegisterExt(id int8, value interface{}) { - typ := reflect.TypeOf(value) - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - } - ptr := reflect.PtrTo(typ) - - if _, ok := extTypes[id]; ok { - panic(fmt.Errorf("msgpack: ext with id=%d is already registered", id)) - } - - registerExt(id, ptr, getEncoder(ptr), getDecoder(ptr)) - registerExt(id, typ, getEncoder(typ), getDecoder(typ)) -} - -func registerExt(id int8, typ reflect.Type, enc encoderFunc, dec decoderFunc) { - if enc != nil { - typeEncMap.Store(typ, makeExtEncoder(id, enc)) - } - if dec != nil { - extTypes[id] = &extInfo{ - Type: typ, - Decoder: dec, - } - typeDecMap.Store(typ, makeExtDecoder(id, dec)) - } -} - -func (e *Encoder) EncodeExtHeader(typeID int8, length int) error { - if err := e.encodeExtLen(length); err != nil { - return err - } - if err := e.w.WriteByte(byte(typeID)); err != nil { - return err - } - return nil -} - -func makeExtEncoder(typeID int8, enc encoderFunc) encoderFunc { - return func(e *Encoder, v reflect.Value) error { - buf := bufferPool.Get().(*bytes.Buffer) - defer bufferPool.Put(buf) - buf.Reset() - - oldw := e.w - e.w = buf - err := enc(e, v) - e.w = oldw - - if err != nil { - return err - } - - err = e.EncodeExtHeader(typeID, buf.Len()) - if err != nil { - return err - } - return e.write(buf.Bytes()) - } -} - -func makeExtDecoder(typeID int8, dec decoderFunc) decoderFunc { - return func(d *Decoder, v reflect.Value) error { - c, err := d.PeekCode() - if err != nil { - return err - } - - if !codes.IsExt(c) { - return dec(d, v) - } - - id, extLen, err := d.DecodeExtHeader() - if err != nil { - return err - } - - if id != typeID { - return fmt.Errorf("msgpack: got ext type=%d, wanted %d", id, typeID) - } - - d.extLen = extLen - return dec(d, v) - } -} - -func (e *Encoder) encodeExtLen(l int) error { - switch l { - case 1: - return e.writeCode(codes.FixExt1) - case 2: - return e.writeCode(codes.FixExt2) - case 4: - return e.writeCode(codes.FixExt4) - case 8: - return e.writeCode(codes.FixExt8) - case 16: - return e.writeCode(codes.FixExt16) - } - if l < 256 { - return e.write1(codes.Ext8, uint8(l)) - } - if l < 65536 { - return e.write2(codes.Ext16, uint16(l)) - } - return e.write4(codes.Ext32, uint32(l)) -} - -func (d *Decoder) parseExtLen(c codes.Code) (int, error) { - switch c { - case codes.FixExt1: - return 1, nil - case codes.FixExt2: - return 2, nil - case codes.FixExt4: - return 4, nil - case codes.FixExt8: - return 8, nil - case codes.FixExt16: - return 16, nil - case codes.Ext8: - n, err := d.uint8() - return int(n), err - case codes.Ext16: - n, err := d.uint16() - return int(n), err - case codes.Ext32: - n, err := d.uint32() - return int(n), err - default: - return 0, fmt.Errorf("msgpack: invalid code=%x decoding ext length", c) - } -} - -func (d *Decoder) extHeader(c codes.Code) (int8, int, error) { - length, err := d.parseExtLen(c) - if err != nil { - return 0, 0, err - } - - typeID, err := d.readCode() - if err != nil { - return 0, 0, err - } - - return int8(typeID), length, nil -} - -func (d *Decoder) DecodeExtHeader() (typeID int8, length int, err error) { - c, err := d.readCode() - if err != nil { - return - } - return d.extHeader(c) -} - -func (d *Decoder) extInterface(c codes.Code) (interface{}, error) { - extID, extLen, err := d.extHeader(c) - if err != nil { - return nil, err - } - - info, ok := extTypes[extID] - if !ok { - return nil, fmt.Errorf("msgpack: unknown ext id=%d", extID) - } - - v := reflect.New(info.Type) - - d.extLen = extLen - err = info.Decoder(d, v.Elem()) - d.extLen = 0 - if err != nil { - return nil, err - } - - return v.Interface(), nil -} - -func (d *Decoder) skipExt(c codes.Code) error { - n, err := d.parseExtLen(c) - if err != nil { - return err - } - return d.skipN(n + 1) -} - -func (d *Decoder) skipExtHeader(c codes.Code) error { - // Read ext type. - _, err := d.readCode() - if err != nil { - return err - } - // Read ext body len. - for i := 0; i < extHeaderLen(c); i++ { - _, err := d.readCode() - if err != nil { - return err - } - } - return nil -} - -func extHeaderLen(c codes.Code) int { - switch c { - case codes.Ext8: - return 1 - case codes.Ext16: - return 2 - case codes.Ext32: - return 4 - } - return 0 -} diff --git a/vendor/github.com/vmihailenco/msgpack/v4/intern.go b/vendor/github.com/vmihailenco/msgpack/v4/intern.go deleted file mode 100644 index 6ca5692739ab0..0000000000000 --- a/vendor/github.com/vmihailenco/msgpack/v4/intern.go +++ /dev/null @@ -1,236 +0,0 @@ -package msgpack - -import ( - "encoding/binary" - "errors" - "fmt" - "math" - "reflect" - - "github.com/vmihailenco/msgpack/v4/codes" -) - -var internStringExtID int8 = -128 - -var errUnexpectedCode = errors.New("msgpack: unexpected code") - -func encodeInternInterfaceValue(e *Encoder, v reflect.Value) error { - if v.IsNil() { - return e.EncodeNil() - } - - v = v.Elem() - if v.Kind() == reflect.String { - return encodeInternStringValue(e, v) - } - return e.EncodeValue(v) -} - -func encodeInternStringValue(e *Encoder, v reflect.Value) error { - s := v.String() - - if s != "" { - if idx, ok := e.intern[s]; ok { - return e.internStringIndex(idx) - } - - if e.intern == nil { - e.intern = make(map[string]int) - } - - idx := len(e.intern) - e.intern[s] = idx - } - - return e.EncodeString(s) -} - -func (e *Encoder) internStringIndex(idx int) error { - if idx < math.MaxUint8 { - if err := e.writeCode(codes.FixExt1); err != nil { - return err - } - if err := e.w.WriteByte(byte(internStringExtID)); err != nil { - return err - } - return e.w.WriteByte(byte(idx)) - } - - if idx < math.MaxUint16 { - if err := e.writeCode(codes.FixExt2); err != nil { - return err - } - if err := e.w.WriteByte(byte(internStringExtID)); err != nil { - return err - } - if err := e.w.WriteByte(byte(idx >> 8)); err != nil { - return err - } - return e.w.WriteByte(byte(idx)) - } - - if int64(idx) < math.MaxUint32 { - if err := e.writeCode(codes.FixExt4); err != nil { - return err - } - if err := e.w.WriteByte(byte(internStringExtID)); err != nil { - return err - } - if err := e.w.WriteByte(byte(idx >> 24)); err != nil { - return err - } - if err := e.w.WriteByte(byte(idx >> 16)); err != nil { - return err - } - if err := e.w.WriteByte(byte(idx >> 8)); err != nil { - return err - } - return e.w.WriteByte(byte(idx)) - } - - return fmt.Errorf("msgpack: intern string index=%d is too large", idx) -} - -//------------------------------------------------------------------------------ - -func decodeInternInterfaceValue(d *Decoder, v reflect.Value) error { - c, err := d.readCode() - if err != nil { - return err - } - - s, err := d.internString(c) - if err == nil { - v.Set(reflect.ValueOf(s)) - return nil - } - if err != nil && err != errUnexpectedCode { - return err - } - - if err := d.s.UnreadByte(); err != nil { - return err - } - - return decodeInterfaceValue(d, v) -} - -func decodeInternStringValue(d *Decoder, v reflect.Value) error { - if err := mustSet(v); err != nil { - return err - } - - c, err := d.readCode() - if err != nil { - return err - } - - s, err := d.internString(c) - if err != nil { - if err == errUnexpectedCode { - return fmt.Errorf("msgpack: invalid code=%x decoding intern string", c) - } - return err - } - - v.SetString(s) - return nil -} - -func (d *Decoder) internString(c codes.Code) (string, error) { - if codes.IsFixedString(c) { - n := int(c & codes.FixedStrMask) - return d.internStringWithLen(n) - } - - switch c { - case codes.FixExt1, codes.FixExt2, codes.FixExt4: - typeID, length, err := d.extHeader(c) - if err != nil { - return "", err - } - if typeID != internStringExtID { - err := fmt.Errorf("msgpack: got ext type=%d, wanted %d", - typeID, internStringExtID) - return "", err - } - - idx, err := d.internStringIndex(length) - if err != nil { - return "", err - } - - return d.internStringAtIndex(idx) - case codes.Str8, codes.Bin8: - n, err := d.uint8() - if err != nil { - return "", err - } - return d.internStringWithLen(int(n)) - case codes.Str16, codes.Bin16: - n, err := d.uint16() - if err != nil { - return "", err - } - return d.internStringWithLen(int(n)) - case codes.Str32, codes.Bin32: - n, err := d.uint32() - if err != nil { - return "", err - } - return d.internStringWithLen(int(n)) - } - - return "", errUnexpectedCode -} - -func (d *Decoder) internStringIndex(length int) (int, error) { - switch length { - case 1: - c, err := d.s.ReadByte() - if err != nil { - return 0, err - } - return int(c), nil - case 2: - b, err := d.readN(2) - if err != nil { - return 0, err - } - n := binary.BigEndian.Uint16(b) - return int(n), nil - case 4: - b, err := d.readN(4) - if err != nil { - return 0, err - } - n := binary.BigEndian.Uint32(b) - return int(n), nil - } - - err := fmt.Errorf("msgpack: unsupported intern string index length=%d", length) - return 0, err -} - -func (d *Decoder) internStringAtIndex(idx int) (string, error) { - if idx >= len(d.intern) { - err := fmt.Errorf("msgpack: intern string with index=%d does not exist", idx) - return "", err - } - return d.intern[idx], nil -} - -func (d *Decoder) internStringWithLen(n int) (string, error) { - if n <= 0 { - return "", nil - } - - s, err := d.stringWithLen(n) - if err != nil { - return "", err - } - - d.intern = append(d.intern, s) - - return s, nil -} diff --git a/vendor/github.com/vmihailenco/msgpack/v4/msgpack.go b/vendor/github.com/vmihailenco/msgpack/v4/msgpack.go deleted file mode 100644 index 220b43c47b31e..0000000000000 --- a/vendor/github.com/vmihailenco/msgpack/v4/msgpack.go +++ /dev/null @@ -1,17 +0,0 @@ -package msgpack - -type Marshaler interface { - MarshalMsgpack() ([]byte, error) -} - -type Unmarshaler interface { - UnmarshalMsgpack([]byte) error -} - -type CustomEncoder interface { - EncodeMsgpack(*Encoder) error -} - -type CustomDecoder interface { - DecodeMsgpack(*Decoder) error -} diff --git a/vendor/github.com/vmihailenco/msgpack/v5/.prettierrc b/vendor/github.com/vmihailenco/msgpack/v5/.prettierrc new file mode 100644 index 0000000000000..8b7f044ad1f56 --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/.prettierrc @@ -0,0 +1,4 @@ +semi: false +singleQuote: true +proseWrap: always +printWidth: 100 diff --git a/vendor/github.com/vmihailenco/msgpack/v4/.travis.yml b/vendor/github.com/vmihailenco/msgpack/v5/.travis.yml similarity index 68% rename from vendor/github.com/vmihailenco/msgpack/v4/.travis.yml rename to vendor/github.com/vmihailenco/msgpack/v5/.travis.yml index b35bf5484e7c8..e2ce06c49f011 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/.travis.yml +++ b/vendor/github.com/vmihailenco/msgpack/v5/.travis.yml @@ -2,10 +2,8 @@ sudo: false language: go go: - - 1.11.x - - 1.12.x - - 1.13.x - - 1.14.x + - 1.15.x + - 1.16.x - tip matrix: @@ -18,4 +16,5 @@ env: go_import_path: github.com/vmihailenco/msgpack before_install: - - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.21.0 + - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go + env GOPATH)/bin v1.31.0 diff --git a/vendor/github.com/vmihailenco/msgpack/v4/CHANGELOG.md b/vendor/github.com/vmihailenco/msgpack/v5/CHANGELOG.md similarity index 50% rename from vendor/github.com/vmihailenco/msgpack/v4/CHANGELOG.md rename to vendor/github.com/vmihailenco/msgpack/v5/CHANGELOG.md index fac97090e4568..f6b19d5ba4074 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/CHANGELOG.md +++ b/vendor/github.com/vmihailenco/msgpack/v5/CHANGELOG.md @@ -1,8 +1,32 @@ +## [5.3.5](https://github.com/vmihailenco/msgpack/compare/v5.3.4...v5.3.5) (2021-10-22) + + + +## v5 + +### Added + +- `DecodeMap` is split into `DecodeMap`, `DecodeTypedMap`, and `DecodeUntypedMap`. +- New msgpack extensions API. + +### Changed + +- `Reset*` functions also reset flags. +- `SetMapDecodeFunc` is renamed to `SetMapDecoder`. +- `StructAsArray` is renamed to `UseArrayEncodedStructs`. +- `SortMapKeys` is renamed to `SetSortMapKeys`. + +### Removed + +- `UseJSONTag` is removed. Use `SetCustomStructTag("json")` instead. + ## v4 -- Encode, Decode, Marshal, and Unmarshal are changed to accept single argument. EncodeMulti and DecodeMulti are added as replacement. +- Encode, Decode, Marshal, and Unmarshal are changed to accept single argument. EncodeMulti and + DecodeMulti are added as replacement. - Added EncodeInt8/16/32/64 and EncodeUint8/16/32/64. -- Encoder changed to preserve type of numbers instead of chosing most compact encoding. The old behavior can be achieved with Encoder.UseCompactEncoding. +- Encoder changed to preserve type of numbers instead of chosing most compact encoding. The old + behavior can be achieved with Encoder.UseCompactEncoding. ## v3.3 @@ -16,9 +40,12 @@ - gopkg.in is not supported any more. Update import path to github.com/vmihailenco/msgpack. - Msgpack maps are decoded into map[string]interface{} by default. -- EncodeSliceLen is removed in favor of EncodeArrayLen. DecodeSliceLen is removed in favor of DecodeArrayLen. +- EncodeSliceLen is removed in favor of EncodeArrayLen. DecodeSliceLen is removed in favor of + DecodeArrayLen. - Embedded structs are automatically inlined where possible. -- Time is encoded using extension as described in https://github.com/msgpack/msgpack/pull/209. Old format is supported as well. -- EncodeInt8/16/32/64 is replaced with EncodeInt. EncodeUint8/16/32/64 is replaced with EncodeUint. There should be no performance differences. +- Time is encoded using extension as described in https://github.com/msgpack/msgpack/pull/209. Old + format is supported as well. +- EncodeInt8/16/32/64 is replaced with EncodeInt. EncodeUint8/16/32/64 is replaced with EncodeUint. + There should be no performance differences. - DecodeInterface can now return int8/16/32 and uint8/16/32. - PeekCode returns codes.Code instead of byte. diff --git a/vendor/github.com/vmihailenco/msgpack/v4/LICENSE b/vendor/github.com/vmihailenco/msgpack/v5/LICENSE similarity index 100% rename from vendor/github.com/vmihailenco/msgpack/v4/LICENSE rename to vendor/github.com/vmihailenco/msgpack/v5/LICENSE diff --git a/vendor/github.com/vmihailenco/msgpack/v4/Makefile b/vendor/github.com/vmihailenco/msgpack/v5/Makefile similarity index 84% rename from vendor/github.com/vmihailenco/msgpack/v4/Makefile rename to vendor/github.com/vmihailenco/msgpack/v5/Makefile index 57914e333a85d..e9aade78294ee 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/Makefile +++ b/vendor/github.com/vmihailenco/msgpack/v5/Makefile @@ -1,6 +1,6 @@ -all: +test: go test ./... go test ./... -short -race go test ./... -run=NONE -bench=. -benchmem env GOOS=linux GOARCH=386 go test ./... - golangci-lint run + go vet diff --git a/vendor/github.com/vmihailenco/msgpack/v5/README.md b/vendor/github.com/vmihailenco/msgpack/v5/README.md new file mode 100644 index 0000000000000..66ad98b9c8db0 --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/README.md @@ -0,0 +1,86 @@ +# MessagePack encoding for Golang + +[![Build Status](https://travis-ci.org/vmihailenco/msgpack.svg)](https://travis-ci.org/vmihailenco/msgpack) +[![PkgGoDev](https://pkg.go.dev/badge/github.com/vmihailenco/msgpack/v5)](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5) +[![Documentation](https://img.shields.io/badge/msgpack-documentation-informational)](https://msgpack.uptrace.dev/) +[![Chat](https://discordapp.com/api/guilds/752070105847955518/widget.png)](https://discord.gg/rWtp5Aj) + +> :heart: +> [**Uptrace.dev** - All-in-one tool to optimize performance and monitor errors & logs](https://uptrace.dev/?utm_source=gh-msgpack&utm_campaign=gh-msgpack-var2) + +- Join [Discord](https://discord.gg/rWtp5Aj) to ask questions. +- [Documentation](https://msgpack.uptrace.dev) +- [Reference](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5) +- [Examples](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#pkg-examples) + +Other projects you may like: + +- [Bun](https://bun.uptrace.dev) - fast and simple SQL client for PostgreSQL, MySQL, and SQLite. +- [BunRouter](https://bunrouter.uptrace.dev/) - fast and flexible HTTP router for Go. + +## Features + +- Primitives, arrays, maps, structs, time.Time and interface{}. +- Appengine \*datastore.Key and datastore.Cursor. +- [CustomEncoder]/[CustomDecoder] interfaces for custom encoding. +- [Extensions](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#example-RegisterExt) to encode + type information. +- Renaming fields via `msgpack:"my_field_name"` and alias via `msgpack:"alias:another_name"`. +- Omitting individual empty fields via `msgpack:",omitempty"` tag or all + [empty fields in a struct](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#example-Marshal-OmitEmpty). +- [Map keys sorting](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#Encoder.SetSortMapKeys). +- Encoding/decoding all + [structs as arrays](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#Encoder.UseArrayEncodedStructs) + or + [individual structs](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#example-Marshal-AsArray). +- [Encoder.SetCustomStructTag] with [Decoder.SetCustomStructTag] can turn msgpack into drop-in + replacement for any tag. +- Simple but very fast and efficient + [queries](https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#example-Decoder.Query). + +[customencoder]: https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#CustomEncoder +[customdecoder]: https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#CustomDecoder +[encoder.setcustomstructtag]: + https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#Encoder.SetCustomStructTag +[decoder.setcustomstructtag]: + https://pkg.go.dev/github.com/vmihailenco/msgpack/v5#Decoder.SetCustomStructTag + +## Installation + +msgpack supports 2 last Go versions and requires support for +[Go modules](https://github.com/golang/go/wiki/Modules). So make sure to initialize a Go module: + +```shell +go mod init github.com/my/repo +``` + +And then install msgpack/v5 (note _v5_ in the import; omitting it is a popular mistake): + +```shell +go get github.com/vmihailenco/msgpack/v5 +``` + +## Quickstart + +```go +import "github.com/vmihailenco/msgpack/v5" + +func ExampleMarshal() { + type Item struct { + Foo string + } + + b, err := msgpack.Marshal(&Item{Foo: "bar"}) + if err != nil { + panic(err) + } + + var item Item + err = msgpack.Unmarshal(b, &item) + if err != nil { + panic(err) + } + fmt.Println(item.Foo) + // Output: bar +} +``` diff --git a/vendor/github.com/vmihailenco/msgpack/v5/commitlint.config.js b/vendor/github.com/vmihailenco/msgpack/v5/commitlint.config.js new file mode 100644 index 0000000000000..4fedde6daf0b8 --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/commitlint.config.js @@ -0,0 +1 @@ +module.exports = { extends: ['@commitlint/config-conventional'] } diff --git a/vendor/github.com/vmihailenco/msgpack/v4/decode.go b/vendor/github.com/vmihailenco/msgpack/v5/decode.go similarity index 63% rename from vendor/github.com/vmihailenco/msgpack/v4/decode.go rename to vendor/github.com/vmihailenco/msgpack/v5/decode.go index 1711675e9a1ea..5df40e5d9caa2 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/decode.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/decode.go @@ -10,12 +10,11 @@ import ( "sync" "time" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) const ( - looseIfaceFlag uint32 = 1 << iota - decodeUsingJSONFlag + looseInterfaceDecodingFlag uint32 = 1 << iota disallowUnknownFieldsFlag ) @@ -38,19 +37,27 @@ var decPool = sync.Pool{ }, } +func GetDecoder() *Decoder { + return decPool.Get().(*Decoder) +} + +func PutDecoder(dec *Decoder) { + dec.r = nil + dec.s = nil + decPool.Put(dec) +} + +//------------------------------------------------------------------------------ + // Unmarshal decodes the MessagePack-encoded data and stores the result // in the value pointed to by v. func Unmarshal(data []byte, v interface{}) error { - dec := decPool.Get().(*Decoder) + dec := GetDecoder() - if r, ok := dec.r.(*bytes.Reader); ok { - r.Reset(data) - } else { - dec.Reset(bytes.NewReader(data)) - } + dec.Reset(bytes.NewReader(data)) err := dec.Decode(v) - decPool.Put(dec) + PutDecoder(dec) return err } @@ -61,18 +68,18 @@ type Decoder struct { s io.ByteScanner buf []byte - extLen int - rec []byte // accumulates read data if not nil + rec []byte // accumulates read data if not nil - intern []string - flags uint32 - decodeMapFunc func(*Decoder) (interface{}, error) + dict []string + flags uint32 + structTag string + mapDecoder func(*Decoder) (interface{}, error) } // NewDecoder returns a new decoder that reads from r. // // The decoder introduces its own buffering and may read data from r -// beyond the MessagePack values requested. Buffering can be disabled +// beyond the requested msgpack values. Buffering can be disabled // by passing a reader that implements io.ByteScanner interface. func NewDecoder(r io.Reader) *Decoder { d := new(Decoder) @@ -83,65 +90,77 @@ func NewDecoder(r io.Reader) *Decoder { // Reset discards any buffered data, resets all state, and switches the buffered // reader to read from r. func (d *Decoder) Reset(r io.Reader) { + d.ResetDict(r, nil) +} + +// ResetDict is like Reset, but also resets the dict. +func (d *Decoder) ResetDict(r io.Reader, dict []string) { + d.resetReader(r) + d.flags = 0 + d.structTag = "" + d.mapDecoder = nil + d.dict = dict +} + +func (d *Decoder) WithDict(dict []string, fn func(*Decoder) error) error { + oldDict := d.dict + d.dict = dict + err := fn(d) + d.dict = oldDict + return err +} + +func (d *Decoder) resetReader(r io.Reader) { if br, ok := r.(bufReader); ok { d.r = br d.s = br - } else if br, ok := d.r.(*bufio.Reader); ok { - br.Reset(r) } else { br := bufio.NewReader(r) d.r = br d.s = br } - - if d.intern != nil { - d.intern = d.intern[:0] - } - - //TODO: - //d.useLoose = false - //d.useJSONTag = false - //d.disallowUnknownFields = false - //d.decodeMapFunc = nil } -func (d *Decoder) SetDecodeMapFunc(fn func(*Decoder) (interface{}, error)) { - d.decodeMapFunc = fn +func (d *Decoder) SetMapDecoder(fn func(*Decoder) (interface{}, error)) { + d.mapDecoder = fn } -// UseDecodeInterfaceLoose causes decoder to use DecodeInterfaceLoose +// UseLooseInterfaceDecoding causes decoder to use DecodeInterfaceLoose // to decode msgpack value into Go interface{}. -func (d *Decoder) UseDecodeInterfaceLoose(on bool) *Decoder { +func (d *Decoder) UseLooseInterfaceDecoding(on bool) { if on { - d.flags |= looseIfaceFlag + d.flags |= looseInterfaceDecodingFlag } else { - d.flags &= ^looseIfaceFlag + d.flags &= ^looseInterfaceDecodingFlag } - return d } -// UseJSONTag causes the Decoder to use json struct tag as fallback option +// SetCustomStructTag causes the decoder to use the supplied tag as a fallback option // if there is no msgpack tag. -func (d *Decoder) UseJSONTag(on bool) *Decoder { - if on { - d.flags |= decodeUsingJSONFlag - } else { - d.flags &= ^decodeUsingJSONFlag - } - return d +func (d *Decoder) SetCustomStructTag(tag string) { + d.structTag = tag } // DisallowUnknownFields causes the Decoder to return an error when the destination // is a struct and the input contains object keys which do not match any // non-ignored, exported fields in the destination. -func (d *Decoder) DisallowUnknownFields() { - if true { +func (d *Decoder) DisallowUnknownFields(on bool) { + if on { d.flags |= disallowUnknownFieldsFlag } else { d.flags &= ^disallowUnknownFieldsFlag } } +// UseInternedStrings enables support for decoding interned strings. +func (d *Decoder) UseInternedStrings(on bool) { + if on { + d.flags |= useInternedStringsFlag + } else { + d.flags &= ^useInternedStringsFlag + } +} + // Buffered returns a reader of the data remaining in the Decoder's buffer. // The reader is valid until the next call to Decode. func (d *Decoder) Buffered() io.Reader { @@ -250,12 +269,22 @@ func (d *Decoder) Decode(v interface{}) error { return errors.New("msgpack: Decode(nil)") } if vv.Kind() != reflect.Ptr { - return fmt.Errorf("msgpack: Decode(nonsettable %T)", v) + return fmt.Errorf("msgpack: Decode(non-pointer %T)", v) + } + if vv.IsNil() { + return fmt.Errorf("msgpack: Decode(non-settable %T)", v) } + vv = vv.Elem() - if !vv.IsValid() { - return fmt.Errorf("msgpack: Decode(nonsettable %T)", v) + if vv.Kind() == reflect.Interface { + if !vv.IsNil() { + vv = vv.Elem() + if vv.Kind() != reflect.Ptr { + return fmt.Errorf("msgpack: Decode(non-pointer %s)", vv.Type().String()) + } + } } + return d.DecodeValue(vv) } @@ -269,7 +298,7 @@ func (d *Decoder) DecodeMulti(v ...interface{}) error { } func (d *Decoder) decodeInterfaceCond() (interface{}, error) { - if d.flags&looseIfaceFlag != 0 { + if d.flags&looseInterfaceDecodingFlag != 0 { return d.DecodeInterfaceLoose() } return d.DecodeInterface() @@ -285,7 +314,7 @@ func (d *Decoder) DecodeNil() error { if err != nil { return err } - if c != codes.Nil { + if c != msgpcode.Nil { return fmt.Errorf("msgpack: invalid code=%x decoding nil", c) } return nil @@ -311,11 +340,14 @@ func (d *Decoder) DecodeBool() (bool, error) { return d.bool(c) } -func (d *Decoder) bool(c codes.Code) (bool, error) { - if c == codes.False { +func (d *Decoder) bool(c byte) (bool, error) { + if c == msgpcode.Nil { + return false, nil + } + if c == msgpcode.False { return false, nil } - if c == codes.True { + if c == msgpcode.True { return true, nil } return false, fmt.Errorf("msgpack: invalid code=%x decoding bool", c) @@ -349,63 +381,63 @@ func (d *Decoder) DecodeInterface() (interface{}, error) { return nil, err } - if codes.IsFixedNum(c) { + if msgpcode.IsFixedNum(c) { return int8(c), nil } - if codes.IsFixedMap(c) { + if msgpcode.IsFixedMap(c) { err = d.s.UnreadByte() if err != nil { return nil, err } - return d.DecodeMap() + return d.decodeMapDefault() } - if codes.IsFixedArray(c) { + if msgpcode.IsFixedArray(c) { return d.decodeSlice(c) } - if codes.IsFixedString(c) { + if msgpcode.IsFixedString(c) { return d.string(c) } switch c { - case codes.Nil: + case msgpcode.Nil: return nil, nil - case codes.False, codes.True: + case msgpcode.False, msgpcode.True: return d.bool(c) - case codes.Float: + case msgpcode.Float: return d.float32(c) - case codes.Double: + case msgpcode.Double: return d.float64(c) - case codes.Uint8: + case msgpcode.Uint8: return d.uint8() - case codes.Uint16: + case msgpcode.Uint16: return d.uint16() - case codes.Uint32: + case msgpcode.Uint32: return d.uint32() - case codes.Uint64: + case msgpcode.Uint64: return d.uint64() - case codes.Int8: + case msgpcode.Int8: return d.int8() - case codes.Int16: + case msgpcode.Int16: return d.int16() - case codes.Int32: + case msgpcode.Int32: return d.int32() - case codes.Int64: + case msgpcode.Int64: return d.int64() - case codes.Bin8, codes.Bin16, codes.Bin32: + case msgpcode.Bin8, msgpcode.Bin16, msgpcode.Bin32: return d.bytes(c, nil) - case codes.Str8, codes.Str16, codes.Str32: + case msgpcode.Str8, msgpcode.Str16, msgpcode.Str32: return d.string(c) - case codes.Array16, codes.Array32: + case msgpcode.Array16, msgpcode.Array32: return d.decodeSlice(c) - case codes.Map16, codes.Map32: + case msgpcode.Map16, msgpcode.Map32: err = d.s.UnreadByte() if err != nil { return nil, err } - return d.DecodeMap() - case codes.FixExt1, codes.FixExt2, codes.FixExt4, codes.FixExt8, codes.FixExt16, - codes.Ext8, codes.Ext16, codes.Ext32: - return d.extInterface(c) + return d.decodeMapDefault() + case msgpcode.FixExt1, msgpcode.FixExt2, msgpcode.FixExt4, msgpcode.FixExt8, msgpcode.FixExt16, + msgpcode.Ext8, msgpcode.Ext16, msgpcode.Ext32: + return d.decodeInterfaceExt(c) } return 0, fmt.Errorf("msgpack: unknown code %x decoding interface{}", c) @@ -415,55 +447,55 @@ func (d *Decoder) DecodeInterface() (interface{}, error) { // - int8, int16, and int32 are converted to int64, // - uint8, uint16, and uint32 are converted to uint64, // - float32 is converted to float64. +// - []byte is converted to string. func (d *Decoder) DecodeInterfaceLoose() (interface{}, error) { c, err := d.readCode() if err != nil { return nil, err } - if codes.IsFixedNum(c) { + if msgpcode.IsFixedNum(c) { return int64(int8(c)), nil } - if codes.IsFixedMap(c) { + if msgpcode.IsFixedMap(c) { err = d.s.UnreadByte() if err != nil { return nil, err } - return d.DecodeMap() + return d.decodeMapDefault() } - if codes.IsFixedArray(c) { + if msgpcode.IsFixedArray(c) { return d.decodeSlice(c) } - if codes.IsFixedString(c) { + if msgpcode.IsFixedString(c) { return d.string(c) } switch c { - case codes.Nil: + case msgpcode.Nil: return nil, nil - case codes.False, codes.True: + case msgpcode.False, msgpcode.True: return d.bool(c) - case codes.Float, codes.Double: + case msgpcode.Float, msgpcode.Double: return d.float64(c) - case codes.Uint8, codes.Uint16, codes.Uint32, codes.Uint64: + case msgpcode.Uint8, msgpcode.Uint16, msgpcode.Uint32, msgpcode.Uint64: return d.uint(c) - case codes.Int8, codes.Int16, codes.Int32, codes.Int64: + case msgpcode.Int8, msgpcode.Int16, msgpcode.Int32, msgpcode.Int64: return d.int(c) - case codes.Bin8, codes.Bin16, codes.Bin32: - return d.bytes(c, nil) - case codes.Str8, codes.Str16, codes.Str32: + case msgpcode.Str8, msgpcode.Str16, msgpcode.Str32, + msgpcode.Bin8, msgpcode.Bin16, msgpcode.Bin32: return d.string(c) - case codes.Array16, codes.Array32: + case msgpcode.Array16, msgpcode.Array32: return d.decodeSlice(c) - case codes.Map16, codes.Map32: + case msgpcode.Map16, msgpcode.Map32: err = d.s.UnreadByte() if err != nil { return nil, err } - return d.DecodeMap() - case codes.FixExt1, codes.FixExt2, codes.FixExt4, codes.FixExt8, codes.FixExt16, - codes.Ext8, codes.Ext16, codes.Ext32: - return d.extInterface(c) + return d.decodeMapDefault() + case msgpcode.FixExt1, msgpcode.FixExt2, msgpcode.FixExt4, msgpcode.FixExt8, msgpcode.FixExt16, + msgpcode.Ext8, msgpcode.Ext16, msgpcode.Ext32: + return d.decodeInterfaceExt(c) } return 0, fmt.Errorf("msgpack: unknown code %x decoding interface{}", c) @@ -476,63 +508,78 @@ func (d *Decoder) Skip() error { return err } - if codes.IsFixedNum(c) { + if msgpcode.IsFixedNum(c) { return nil } - if codes.IsFixedMap(c) { + if msgpcode.IsFixedMap(c) { return d.skipMap(c) } - if codes.IsFixedArray(c) { + if msgpcode.IsFixedArray(c) { return d.skipSlice(c) } - if codes.IsFixedString(c) { + if msgpcode.IsFixedString(c) { return d.skipBytes(c) } switch c { - case codes.Nil, codes.False, codes.True: + case msgpcode.Nil, msgpcode.False, msgpcode.True: return nil - case codes.Uint8, codes.Int8: + case msgpcode.Uint8, msgpcode.Int8: return d.skipN(1) - case codes.Uint16, codes.Int16: + case msgpcode.Uint16, msgpcode.Int16: return d.skipN(2) - case codes.Uint32, codes.Int32, codes.Float: + case msgpcode.Uint32, msgpcode.Int32, msgpcode.Float: return d.skipN(4) - case codes.Uint64, codes.Int64, codes.Double: + case msgpcode.Uint64, msgpcode.Int64, msgpcode.Double: return d.skipN(8) - case codes.Bin8, codes.Bin16, codes.Bin32: + case msgpcode.Bin8, msgpcode.Bin16, msgpcode.Bin32: return d.skipBytes(c) - case codes.Str8, codes.Str16, codes.Str32: + case msgpcode.Str8, msgpcode.Str16, msgpcode.Str32: return d.skipBytes(c) - case codes.Array16, codes.Array32: + case msgpcode.Array16, msgpcode.Array32: return d.skipSlice(c) - case codes.Map16, codes.Map32: + case msgpcode.Map16, msgpcode.Map32: return d.skipMap(c) - case codes.FixExt1, codes.FixExt2, codes.FixExt4, codes.FixExt8, codes.FixExt16, - codes.Ext8, codes.Ext16, codes.Ext32: + case msgpcode.FixExt1, msgpcode.FixExt2, msgpcode.FixExt4, msgpcode.FixExt8, msgpcode.FixExt16, + msgpcode.Ext8, msgpcode.Ext16, msgpcode.Ext32: return d.skipExt(c) } return fmt.Errorf("msgpack: unknown code %x", c) } +func (d *Decoder) DecodeRaw() (RawMessage, error) { + d.rec = make([]byte, 0) + if err := d.Skip(); err != nil { + return nil, err + } + msg := RawMessage(d.rec) + d.rec = nil + return msg, nil +} + // PeekCode returns the next MessagePack code without advancing the reader. -// Subpackage msgpack/codes contains list of available codes. -func (d *Decoder) PeekCode() (codes.Code, error) { +// Subpackage msgpack/codes defines the list of available msgpcode. +func (d *Decoder) PeekCode() (byte, error) { c, err := d.s.ReadByte() if err != nil { return 0, err } - return codes.Code(c), d.s.UnreadByte() + return c, d.s.UnreadByte() +} + +// ReadFull reads exactly len(buf) bytes into the buf. +func (d *Decoder) ReadFull(buf []byte) error { + _, err := readN(d.r, buf, len(buf)) + return err } func (d *Decoder) hasNilCode() bool { code, err := d.PeekCode() - return err == nil && code == codes.Nil + return err == nil && code == msgpcode.Nil } -func (d *Decoder) readCode() (codes.Code, error) { - d.extLen = 0 +func (d *Decoder) readCode() (byte, error) { c, err := d.s.ReadByte() if err != nil { return 0, err @@ -540,7 +587,7 @@ func (d *Decoder) readCode() (codes.Code, error) { if d.rec != nil { d.rec = append(d.rec, c) } - return codes.Code(c), nil + return c, nil } func (d *Decoder) readFull(b []byte) error { @@ -549,7 +596,6 @@ func (d *Decoder) readFull(b []byte) error { return err } if d.rec != nil { - //TODO: read directly into d.rec? d.rec = append(d.rec, b...) } return nil @@ -562,7 +608,7 @@ func (d *Decoder) readN(n int) ([]byte, error) { return nil, err } if d.rec != nil { - //TODO: read directly into d.rec? + // TODO: read directly into d.rec? d.rec = append(d.rec, d.buf...) } return d.buf, nil diff --git a/vendor/github.com/vmihailenco/msgpack/v4/decode_map.go b/vendor/github.com/vmihailenco/msgpack/v5/decode_map.go similarity index 61% rename from vendor/github.com/vmihailenco/msgpack/v4/decode_map.go rename to vendor/github.com/vmihailenco/msgpack/v5/decode_map.go index 16c40fe77e180..52e0526cc51c2 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/decode_map.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/decode_map.go @@ -5,9 +5,11 @@ import ( "fmt" "reflect" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) +var errArrayStruct = errors.New("msgpack: number of fields in array-encoded struct has changed") + var ( mapStringStringPtrType = reflect.TypeOf((*map[string]string)(nil)) mapStringStringType = mapStringStringPtrType.Elem() @@ -19,13 +21,13 @@ var ( ) func decodeMapValue(d *Decoder, v reflect.Value) error { - size, err := d.DecodeMapLen() + n, err := d.DecodeMapLen() if err != nil { return err } typ := v.Type() - if size == -1 { + if n == -1 { v.Set(reflect.Zero(typ)) return nil } @@ -33,33 +35,18 @@ func decodeMapValue(d *Decoder, v reflect.Value) error { if v.IsNil() { v.Set(reflect.MakeMap(typ)) } - if size == 0 { + if n == 0 { return nil } - return decodeMapValueSize(d, v, size) + return d.decodeTypedMapValue(v, n) } -func decodeMapValueSize(d *Decoder, v reflect.Value, size int) error { - typ := v.Type() - keyType := typ.Key() - valueType := typ.Elem() - - for i := 0; i < size; i++ { - mk := reflect.New(keyType).Elem() - if err := d.DecodeValue(mk); err != nil { - return err - } - - mv := reflect.New(valueType).Elem() - if err := d.DecodeValue(mv); err != nil { - return err - } - - v.SetMapIndex(mk, mv) +func (d *Decoder) decodeMapDefault() (interface{}, error) { + if d.mapDecoder != nil { + return d.mapDecoder(d) } - - return nil + return d.DecodeMap() } // DecodeMapLen decodes map length. Length is -1 when map is nil. @@ -69,7 +56,7 @@ func (d *Decoder) DecodeMapLen() (int, error) { return 0, err } - if codes.IsExt(c) { + if msgpcode.IsExt(c) { if err = d.skipExtHeader(c); err != nil { return 0, err } @@ -82,37 +69,22 @@ func (d *Decoder) DecodeMapLen() (int, error) { return d.mapLen(c) } -func (d *Decoder) mapLen(c codes.Code) (int, error) { - size, err := d._mapLen(c) - err = expandInvalidCodeMapLenError(c, err) - return size, err -} - -func (d *Decoder) _mapLen(c codes.Code) (int, error) { - if c == codes.Nil { +func (d *Decoder) mapLen(c byte) (int, error) { + if c == msgpcode.Nil { return -1, nil } - if c >= codes.FixedMapLow && c <= codes.FixedMapHigh { - return int(c & codes.FixedMapMask), nil + if c >= msgpcode.FixedMapLow && c <= msgpcode.FixedMapHigh { + return int(c & msgpcode.FixedMapMask), nil } - if c == codes.Map16 { + if c == msgpcode.Map16 { size, err := d.uint16() return int(size), err } - if c == codes.Map32 { + if c == msgpcode.Map32 { size, err := d.uint32() return int(size), err } - return 0, errInvalidCode -} - -var errInvalidCode = errors.New("invalid code") - -func expandInvalidCodeMapLenError(c codes.Code, err error) error { - if err == errInvalidCode { - return fmt.Errorf("msgpack: invalid code=%x decoding map length", c) - } - return err + return 0, unexpectedCodeError{code: c, hint: "map length"} } func decodeMapStringStringValue(d *Decoder, v reflect.Value) error { @@ -157,61 +129,79 @@ func decodeMapStringInterfaceValue(d *Decoder, v reflect.Value) error { } func (d *Decoder) decodeMapStringInterfacePtr(ptr *map[string]interface{}) error { - n, err := d.DecodeMapLen() + m, err := d.DecodeMap() if err != nil { return err } - if n == -1 { - *ptr = nil - return nil + *ptr = m + return nil +} + +func (d *Decoder) DecodeMap() (map[string]interface{}, error) { + n, err := d.DecodeMapLen() + if err != nil { + return nil, err } - m := *ptr - if m == nil { - *ptr = make(map[string]interface{}, min(n, maxMapSize)) - m = *ptr + if n == -1 { + return nil, nil } + m := make(map[string]interface{}, min(n, maxMapSize)) + for i := 0; i < n; i++ { mk, err := d.DecodeString() if err != nil { - return err + return nil, err } mv, err := d.decodeInterfaceCond() if err != nil { - return err + return nil, err } m[mk] = mv } - return nil + return m, nil } -var errUnsupportedMapKey = errors.New("msgpack: unsupported map key") - -func (d *Decoder) DecodeMap() (interface{}, error) { - if d.decodeMapFunc != nil { - return d.decodeMapFunc(d) - } - - size, err := d.DecodeMapLen() +func (d *Decoder) DecodeUntypedMap() (map[interface{}]interface{}, error) { + n, err := d.DecodeMapLen() if err != nil { return nil, err } - if size == -1 { + + if n == -1 { return nil, nil } - if size == 0 { - return make(map[string]interface{}), nil + + m := make(map[interface{}]interface{}, min(n, maxMapSize)) + + for i := 0; i < n; i++ { + mk, err := d.decodeInterfaceCond() + if err != nil { + return nil, err + } + + mv, err := d.decodeInterfaceCond() + if err != nil { + return nil, err + } + + m[mk] = mv } - code, err := d.PeekCode() + return m, nil +} + +// DecodeTypedMap decodes a typed map. Typed map is a map that has a fixed type for keys and values. +// Key and value types may be different. +func (d *Decoder) DecodeTypedMap() (interface{}, error) { + n, err := d.DecodeMapLen() if err != nil { return nil, err } - - if codes.IsString(code) || codes.IsBin(code) { - return d.decodeMapStringInterfaceSize(size) + if n <= 0 { + return nil, nil } key, err := d.decodeInterfaceCond() @@ -228,40 +218,44 @@ func (d *Decoder) DecodeMap() (interface{}, error) { valueType := reflect.TypeOf(value) if !keyType.Comparable() { - return nil, errUnsupportedMapKey + return nil, fmt.Errorf("msgpack: unsupported map key: %s", keyType.String()) } mapType := reflect.MapOf(keyType, valueType) mapValue := reflect.MakeMap(mapType) - mapValue.SetMapIndex(reflect.ValueOf(key), reflect.ValueOf(value)) - size-- - err = decodeMapValueSize(d, mapValue, size) - if err != nil { + n-- + if err := d.decodeTypedMapValue(mapValue, n); err != nil { return nil, err } return mapValue.Interface(), nil } -func (d *Decoder) decodeMapStringInterfaceSize(size int) (map[string]interface{}, error) { - m := make(map[string]interface{}, min(size, maxMapSize)) - for i := 0; i < size; i++ { - mk, err := d.DecodeString() - if err != nil { - return nil, err +func (d *Decoder) decodeTypedMapValue(v reflect.Value, n int) error { + typ := v.Type() + keyType := typ.Key() + valueType := typ.Elem() + + for i := 0; i < n; i++ { + mk := reflect.New(keyType).Elem() + if err := d.DecodeValue(mk); err != nil { + return err } - mv, err := d.decodeInterfaceCond() - if err != nil { - return nil, err + + mv := reflect.New(valueType).Elem() + if err := d.DecodeValue(mv); err != nil { + return err } - m[mk] = mv + + v.SetMapIndex(mk, mv) } - return m, nil + + return nil } -func (d *Decoder) skipMap(c codes.Code) error { +func (d *Decoder) skipMap(c byte) error { n, err := d.mapLen(c) if err != nil { return err @@ -283,54 +277,45 @@ func decodeStructValue(d *Decoder, v reflect.Value) error { return err } - var isArray bool + n, err := d.mapLen(c) + if err == nil { + return d.decodeStruct(v, n) + } - n, err := d._mapLen(c) - if err != nil { - var err2 error - n, err2 = d.arrayLen(c) - if err2 != nil { - return expandInvalidCodeMapLenError(c, err) - } - isArray = true + var err2 error + n, err2 = d.arrayLen(c) + if err2 != nil { + return err } - if n == -1 { - if err = mustSet(v); err != nil { - return err - } + + if n <= 0 { v.Set(reflect.Zero(v.Type())) return nil } - var fields *fields - if d.flags&decodeUsingJSONFlag != 0 { - fields = jsonStructs.Fields(v.Type()) - } else { - fields = structs.Fields(v.Type()) + fields := structs.Fields(v.Type(), d.structTag) + if n != len(fields.List) { + return errArrayStruct } - if isArray { - for i, f := range fields.List { - if i >= n { - break - } - if err := f.DecodeValue(d, v); err != nil { - return err - } + for _, f := range fields.List { + if err := f.DecodeValue(d, v); err != nil { + return err } + } - // Skip extra values. - for i := len(fields.List); i < n; i++ { - if err := d.Skip(); err != nil { - return err - } - } + return nil +} +func (d *Decoder) decodeStruct(v reflect.Value, n int) error { + if n == -1 { + v.Set(reflect.Zero(v.Type())) return nil } + fields := structs.Fields(v.Type(), d.structTag) for i := 0; i < n; i++ { - name, err := d.DecodeString() + name, err := d.decodeStringTemp() if err != nil { return err } @@ -339,9 +324,13 @@ func decodeStructValue(d *Decoder, v reflect.Value) error { if err := f.DecodeValue(d, v); err != nil { return err } - } else if d.flags&disallowUnknownFieldsFlag != 0 { + continue + } + + if d.flags&disallowUnknownFieldsFlag != 0 { return fmt.Errorf("msgpack: unknown field %q", name) - } else if err := d.Skip(); err != nil { + } + if err := d.Skip(); err != nil { return err } } diff --git a/vendor/github.com/vmihailenco/msgpack/v4/decode_number.go b/vendor/github.com/vmihailenco/msgpack/v5/decode_number.go similarity index 83% rename from vendor/github.com/vmihailenco/msgpack/v4/decode_number.go rename to vendor/github.com/vmihailenco/msgpack/v5/decode_number.go index f6b9151f01e79..45d6a741868e9 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/decode_number.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/decode_number.go @@ -5,7 +5,7 @@ import ( "math" "reflect" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) func (d *Decoder) skipN(n int) error { @@ -18,7 +18,7 @@ func (d *Decoder) uint8() (uint8, error) { if err != nil { return 0, err } - return uint8(c), nil + return c, nil } func (d *Decoder) int8() (int8, error) { @@ -87,33 +87,33 @@ func (d *Decoder) DecodeUint64() (uint64, error) { return d.uint(c) } -func (d *Decoder) uint(c codes.Code) (uint64, error) { - if c == codes.Nil { +func (d *Decoder) uint(c byte) (uint64, error) { + if c == msgpcode.Nil { return 0, nil } - if codes.IsFixedNum(c) { + if msgpcode.IsFixedNum(c) { return uint64(int8(c)), nil } switch c { - case codes.Uint8: + case msgpcode.Uint8: n, err := d.uint8() return uint64(n), err - case codes.Int8: + case msgpcode.Int8: n, err := d.int8() return uint64(n), err - case codes.Uint16: + case msgpcode.Uint16: n, err := d.uint16() return uint64(n), err - case codes.Int16: + case msgpcode.Int16: n, err := d.int16() return uint64(n), err - case codes.Uint32: + case msgpcode.Uint32: n, err := d.uint32() return uint64(n), err - case codes.Int32: + case msgpcode.Int32: n, err := d.int32() return uint64(n), err - case codes.Uint64, codes.Int64: + case msgpcode.Uint64, msgpcode.Int64: return d.uint64() } return 0, fmt.Errorf("msgpack: invalid code=%x decoding uint64", c) @@ -129,33 +129,33 @@ func (d *Decoder) DecodeInt64() (int64, error) { return d.int(c) } -func (d *Decoder) int(c codes.Code) (int64, error) { - if c == codes.Nil { +func (d *Decoder) int(c byte) (int64, error) { + if c == msgpcode.Nil { return 0, nil } - if codes.IsFixedNum(c) { + if msgpcode.IsFixedNum(c) { return int64(int8(c)), nil } switch c { - case codes.Uint8: + case msgpcode.Uint8: n, err := d.uint8() return int64(n), err - case codes.Int8: + case msgpcode.Int8: n, err := d.uint8() return int64(int8(n)), err - case codes.Uint16: + case msgpcode.Uint16: n, err := d.uint16() return int64(n), err - case codes.Int16: + case msgpcode.Int16: n, err := d.uint16() return int64(int16(n)), err - case codes.Uint32: + case msgpcode.Uint32: n, err := d.uint32() return int64(n), err - case codes.Int32: + case msgpcode.Int32: n, err := d.uint32() return int64(int32(n)), err - case codes.Uint64, codes.Int64: + case msgpcode.Uint64, msgpcode.Int64: n, err := d.uint64() return int64(n), err } @@ -170,8 +170,8 @@ func (d *Decoder) DecodeFloat32() (float32, error) { return d.float32(c) } -func (d *Decoder) float32(c codes.Code) (float32, error) { - if c == codes.Float { +func (d *Decoder) float32(c byte) (float32, error) { + if c == msgpcode.Float { n, err := d.uint32() if err != nil { return 0, err @@ -195,15 +195,15 @@ func (d *Decoder) DecodeFloat64() (float64, error) { return d.float64(c) } -func (d *Decoder) float64(c codes.Code) (float64, error) { +func (d *Decoder) float64(c byte) (float64, error) { switch c { - case codes.Float: + case msgpcode.Float: n, err := d.float32(c) if err != nil { return 0, err } return float64(n), nil - case codes.Double: + case msgpcode.Double: n, err := d.uint64() if err != nil { return 0, err @@ -263,9 +263,6 @@ func decodeFloat32Value(d *Decoder, v reflect.Value) error { if err != nil { return err } - if err = mustSet(v); err != nil { - return err - } v.SetFloat(float64(f)) return nil } @@ -275,9 +272,6 @@ func decodeFloat64Value(d *Decoder, v reflect.Value) error { if err != nil { return err } - if err = mustSet(v); err != nil { - return err - } v.SetFloat(f) return nil } @@ -287,9 +281,6 @@ func decodeInt64Value(d *Decoder, v reflect.Value) error { if err != nil { return err } - if err = mustSet(v); err != nil { - return err - } v.SetInt(n) return nil } @@ -299,9 +290,6 @@ func decodeUint64Value(d *Decoder, v reflect.Value) error { if err != nil { return err } - if err = mustSet(v); err != nil { - return err - } v.SetUint(n) return nil } diff --git a/vendor/github.com/vmihailenco/msgpack/v4/decode_query.go b/vendor/github.com/vmihailenco/msgpack/v5/decode_query.go similarity index 89% rename from vendor/github.com/vmihailenco/msgpack/v4/decode_query.go rename to vendor/github.com/vmihailenco/msgpack/v5/decode_query.go index 80cd80e785211..c302ed1f33e4c 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/decode_query.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/decode_query.go @@ -5,7 +5,7 @@ import ( "strconv" "strings" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) type queryResult struct { @@ -57,9 +57,9 @@ func (d *Decoder) query(q *queryResult) error { } switch { - case code == codes.Map16 || code == codes.Map32 || codes.IsFixedMap(code): + case code == msgpcode.Map16 || code == msgpcode.Map32 || msgpcode.IsFixedMap(code): err = d.queryMapKey(q) - case code == codes.Array16 || code == codes.Array32 || codes.IsFixedArray(code): + case code == msgpcode.Array16 || code == msgpcode.Array32 || msgpcode.IsFixedArray(code): err = d.queryArrayIndex(q) default: err = fmt.Errorf("msgpack: unsupported code=%x decoding key=%q", code, q.key) @@ -77,12 +77,12 @@ func (d *Decoder) queryMapKey(q *queryResult) error { } for i := 0; i < n; i++ { - k, err := d.bytesNoCopy() + key, err := d.decodeStringTemp() if err != nil { return err } - if string(k) == q.key { + if key == q.key { if err := d.query(q); err != nil { return err } diff --git a/vendor/github.com/vmihailenco/msgpack/v4/decode_slice.go b/vendor/github.com/vmihailenco/msgpack/v5/decode_slice.go similarity index 88% rename from vendor/github.com/vmihailenco/msgpack/v4/decode_slice.go rename to vendor/github.com/vmihailenco/msgpack/v5/decode_slice.go index adf17ae5cfb7c..db6f7c5472d55 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/decode_slice.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/decode_slice.go @@ -4,7 +4,7 @@ import ( "fmt" "reflect" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) var sliceStringPtrType = reflect.TypeOf((*[]string)(nil)) @@ -18,17 +18,17 @@ func (d *Decoder) DecodeArrayLen() (int, error) { return d.arrayLen(c) } -func (d *Decoder) arrayLen(c codes.Code) (int, error) { - if c == codes.Nil { +func (d *Decoder) arrayLen(c byte) (int, error) { + if c == msgpcode.Nil { return -1, nil - } else if c >= codes.FixedArrayLow && c <= codes.FixedArrayHigh { - return int(c & codes.FixedArrayMask), nil + } else if c >= msgpcode.FixedArrayLow && c <= msgpcode.FixedArrayHigh { + return int(c & msgpcode.FixedArrayMask), nil } switch c { - case codes.Array16: + case msgpcode.Array16: n, err := d.uint16() return int(n), err - case codes.Array32: + case msgpcode.Array32: n, err := d.uint32() return int(n), err } @@ -154,7 +154,7 @@ func (d *Decoder) DecodeSlice() ([]interface{}, error) { return d.decodeSlice(c) } -func (d *Decoder) decodeSlice(c codes.Code) ([]interface{}, error) { +func (d *Decoder) decodeSlice(c byte) ([]interface{}, error) { n, err := d.arrayLen(c) if err != nil { return nil, err @@ -175,7 +175,7 @@ func (d *Decoder) decodeSlice(c codes.Code) ([]interface{}, error) { return s, nil } -func (d *Decoder) skipSlice(c codes.Code) error { +func (d *Decoder) skipSlice(c byte) error { n, err := d.arrayLen(c) if err != nil { return err diff --git a/vendor/github.com/vmihailenco/msgpack/v4/decode_string.go b/vendor/github.com/vmihailenco/msgpack/v5/decode_string.go similarity index 68% rename from vendor/github.com/vmihailenco/msgpack/v4/decode_string.go rename to vendor/github.com/vmihailenco/msgpack/v5/decode_string.go index c5adf3865cb91..e837e08bf14ce 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/decode_string.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/decode_string.go @@ -4,34 +4,38 @@ import ( "fmt" "reflect" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) -func (d *Decoder) bytesLen(c codes.Code) (int, error) { - if c == codes.Nil { +func (d *Decoder) bytesLen(c byte) (int, error) { + if c == msgpcode.Nil { return -1, nil } - if codes.IsFixedString(c) { - return int(c & codes.FixedStrMask), nil + if msgpcode.IsFixedString(c) { + return int(c & msgpcode.FixedStrMask), nil } switch c { - case codes.Str8, codes.Bin8: + case msgpcode.Str8, msgpcode.Bin8: n, err := d.uint8() return int(n), err - case codes.Str16, codes.Bin16: + case msgpcode.Str16, msgpcode.Bin16: n, err := d.uint16() return int(n), err - case codes.Str32, codes.Bin32: + case msgpcode.Str32, msgpcode.Bin32: n, err := d.uint32() return int(n), err } - return 0, fmt.Errorf("msgpack: invalid code=%x decoding bytes length", c) + return 0, fmt.Errorf("msgpack: invalid code=%x decoding string/bytes length", c) } func (d *Decoder) DecodeString() (string, error) { + if intern := d.flags&useInternedStringsFlag != 0; intern || len(d.dict) > 0 { + return d.decodeInternedString(intern) + } + c, err := d.readCode() if err != nil { return "", err @@ -39,7 +43,7 @@ func (d *Decoder) DecodeString() (string, error) { return d.string(c) } -func (d *Decoder) string(c codes.Code) (string, error) { +func (d *Decoder) string(c byte) (string, error) { n, err := d.bytesLen(c) if err != nil { return "", err @@ -56,15 +60,10 @@ func (d *Decoder) stringWithLen(n int) (string, error) { } func decodeStringValue(d *Decoder, v reflect.Value) error { - if err := mustSet(v); err != nil { - return err - } - s, err := d.DecodeString() if err != nil { return err } - v.SetString(s) return nil } @@ -85,7 +84,7 @@ func (d *Decoder) DecodeBytes() ([]byte, error) { return d.bytes(c, nil) } -func (d *Decoder) bytes(c codes.Code, b []byte) ([]byte, error) { +func (d *Decoder) bytes(c byte, b []byte) ([]byte, error) { n, err := d.bytesLen(c) if err != nil { return nil, err @@ -96,19 +95,30 @@ func (d *Decoder) bytes(c codes.Code, b []byte) ([]byte, error) { return readN(d.r, b, n) } -func (d *Decoder) bytesNoCopy() ([]byte, error) { +func (d *Decoder) decodeStringTemp() (string, error) { + if intern := d.flags&useInternedStringsFlag != 0; intern || len(d.dict) > 0 { + return d.decodeInternedString(intern) + } + c, err := d.readCode() if err != nil { - return nil, err + return "", err } + n, err := d.bytesLen(c) if err != nil { - return nil, err + return "", err } if n == -1 { - return nil, nil + return "", nil + } + + b, err := d.readN(n) + if err != nil { + return "", err } - return d.readN(n) + + return bytesToString(b), nil } func (d *Decoder) decodeBytesPtr(ptr *[]byte) error { @@ -119,7 +129,7 @@ func (d *Decoder) decodeBytesPtr(ptr *[]byte) error { return d.bytesPtr(c, ptr) } -func (d *Decoder) bytesPtr(c codes.Code, ptr *[]byte) error { +func (d *Decoder) bytesPtr(c byte, ptr *[]byte) error { n, err := d.bytesLen(c) if err != nil { return err @@ -133,7 +143,7 @@ func (d *Decoder) bytesPtr(c codes.Code, ptr *[]byte) error { return err } -func (d *Decoder) skipBytes(c codes.Code) error { +func (d *Decoder) skipBytes(c byte) error { n, err := d.bytesLen(c) if err != nil { return err @@ -145,10 +155,6 @@ func (d *Decoder) skipBytes(c codes.Code) error { } func decodeBytesValue(d *Decoder, v reflect.Value) error { - if err := mustSet(v); err != nil { - return err - } - c, err := d.readCode() if err != nil { return err diff --git a/vendor/github.com/vmihailenco/msgpack/v4/decode_value.go b/vendor/github.com/vmihailenco/msgpack/v5/decode_value.go similarity index 68% rename from vendor/github.com/vmihailenco/msgpack/v4/decode_value.go rename to vendor/github.com/vmihailenco/msgpack/v5/decode_value.go index 810d3be8f92cb..d2ff2aea50fa1 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/decode_value.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/decode_value.go @@ -7,8 +7,10 @@ import ( "reflect" ) -var interfaceType = reflect.TypeOf((*interface{})(nil)).Elem() -var stringType = reflect.TypeOf((*string)(nil)).Elem() +var ( + interfaceType = reflect.TypeOf((*interface{})(nil)).Elem() + stringType = reflect.TypeOf((*string)(nil)).Elem() +) var valueDecoders []decoderFunc @@ -43,13 +45,6 @@ func init() { } } -func mustSet(v reflect.Value) error { - if !v.CanSet() { - return fmt.Errorf("msgpack: Decode(nonsettable %s)", v.Type()) - } - return nil -} - func getDecoder(typ reflect.Type) decoderFunc { if v, ok := typeDecMap.Load(typ); ok { return v.(decoderFunc) @@ -62,33 +57,45 @@ func getDecoder(typ reflect.Type) decoderFunc { func _getDecoder(typ reflect.Type) decoderFunc { kind := typ.Kind() + if kind == reflect.Ptr { + if _, ok := typeDecMap.Load(typ.Elem()); ok { + return ptrValueDecoder(typ) + } + } + if typ.Implements(customDecoderType) { - return decodeCustomValue + return nilAwareDecoder(typ, decodeCustomValue) } if typ.Implements(unmarshalerType) { - return unmarshalValue + return nilAwareDecoder(typ, unmarshalValue) } if typ.Implements(binaryUnmarshalerType) { - return unmarshalBinaryValue + return nilAwareDecoder(typ, unmarshalBinaryValue) + } + if typ.Implements(textUnmarshalerType) { + return nilAwareDecoder(typ, unmarshalTextValue) } // Addressable struct field value. if kind != reflect.Ptr { ptr := reflect.PtrTo(typ) if ptr.Implements(customDecoderType) { - return decodeCustomValueAddr + return addrDecoder(nilAwareDecoder(typ, decodeCustomValue)) } if ptr.Implements(unmarshalerType) { - return unmarshalValueAddr + return addrDecoder(nilAwareDecoder(typ, unmarshalValue)) } if ptr.Implements(binaryUnmarshalerType) { - return unmarshalBinaryValueAddr + return addrDecoder(nilAwareDecoder(typ, unmarshalBinaryValue)) + } + if ptr.Implements(textUnmarshalerType) { + return addrDecoder(nilAwareDecoder(typ, unmarshalTextValue)) } } switch kind { case reflect.Ptr: - return ptrDecoderFunc(typ) + return ptrValueDecoder(typ) case reflect.Slice: elem := typ.Elem() if elem.Kind() == reflect.Uint8 { @@ -115,85 +122,50 @@ func _getDecoder(typ reflect.Type) decoderFunc { return valueDecoders[kind] } -func ptrDecoderFunc(typ reflect.Type) decoderFunc { +func ptrValueDecoder(typ reflect.Type) decoderFunc { decoder := getDecoder(typ.Elem()) return func(d *Decoder, v reflect.Value) error { if d.hasNilCode() { - if err := mustSet(v); err != nil { - return err - } if !v.IsNil() { v.Set(reflect.Zero(v.Type())) } return d.DecodeNil() } if v.IsNil() { - if err := mustSet(v); err != nil { - return err - } v.Set(reflect.New(v.Type().Elem())) } return decoder(d, v.Elem()) } } -func decodeCustomValueAddr(d *Decoder, v reflect.Value) error { - if !v.CanAddr() { - return fmt.Errorf("msgpack: Decode(nonaddressable %T)", v.Interface()) - } - return decodeCustomValue(d, v.Addr()) -} - -func decodeCustomValue(d *Decoder, v reflect.Value) error { - if d.hasNilCode() { - return d.decodeNilValue(v) - } - - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) +func addrDecoder(fn decoderFunc) decoderFunc { + return func(d *Decoder, v reflect.Value) error { + if !v.CanAddr() { + return fmt.Errorf("msgpack: Decode(nonaddressable %T)", v.Interface()) + } + return fn(d, v.Addr()) } - - decoder := v.Interface().(CustomDecoder) - return decoder.DecodeMsgpack(d) } -func unmarshalValueAddr(d *Decoder, v reflect.Value) error { - if !v.CanAddr() { - return fmt.Errorf("msgpack: Decode(nonaddressable %T)", v.Interface()) +func nilAwareDecoder(typ reflect.Type, fn decoderFunc) decoderFunc { + if nilable(typ.Kind()) { + return func(d *Decoder, v reflect.Value) error { + if d.hasNilCode() { + return d.decodeNilValue(v) + } + if v.IsNil() { + v.Set(reflect.New(v.Type().Elem())) + } + return fn(d, v) + } } - return unmarshalValue(d, v.Addr()) -} -func unmarshalValue(d *Decoder, v reflect.Value) error { - if d.extLen == 0 || d.extLen == 1 { + return func(d *Decoder, v reflect.Value) error { if d.hasNilCode() { return d.decodeNilValue(v) } + return fn(d, v) } - - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) - } - - var b []byte - - if d.extLen != 0 { - var err error - b, err = d.readN(d.extLen) - if err != nil { - return err - } - } else { - d.rec = make([]byte, 0, 64) - if err := d.Skip(); err != nil { - return err - } - b = d.rec - d.rec = nil - } - - unmarshaler := v.Interface().(Unmarshaler) - return unmarshaler.UnmarshalMsgpack(b) } func decodeBoolValue(d *Decoder, v reflect.Value) error { @@ -201,9 +173,6 @@ func decodeBoolValue(d *Decoder, v reflect.Value) error { if err != nil { return err } - if err = mustSet(v); err != nil { - return err - } v.SetBool(flag) return nil } @@ -212,16 +181,7 @@ func decodeInterfaceValue(d *Decoder, v reflect.Value) error { if v.IsNil() { return d.interfaceValue(v) } - - elem := v.Elem() - if !elem.CanAddr() { - if d.hasNilCode() { - v.Set(reflect.Zero(v.Type())) - return d.DecodeNil() - } - } - - return d.DecodeValue(elem) + return d.DecodeValue(v.Elem()) } func (d *Decoder) interfaceValue(v reflect.Value) error { @@ -250,22 +210,26 @@ func decodeUnsupportedValue(d *Decoder, v reflect.Value) error { //------------------------------------------------------------------------------ -func unmarshalBinaryValueAddr(d *Decoder, v reflect.Value) error { - if !v.CanAddr() { - return fmt.Errorf("msgpack: Decode(nonaddressable %T)", v.Interface()) - } - return unmarshalBinaryValue(d, v.Addr()) +func decodeCustomValue(d *Decoder, v reflect.Value) error { + decoder := v.Interface().(CustomDecoder) + return decoder.DecodeMsgpack(d) } -func unmarshalBinaryValue(d *Decoder, v reflect.Value) error { - if d.hasNilCode() { - return d.decodeNilValue(v) - } +func unmarshalValue(d *Decoder, v reflect.Value) error { + var b []byte - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) + d.rec = make([]byte, 0, 64) + if err := d.Skip(); err != nil { + return err } + b = d.rec + d.rec = nil + + unmarshaler := v.Interface().(Unmarshaler) + return unmarshaler.UnmarshalMsgpack(b) +} +func unmarshalBinaryValue(d *Decoder, v reflect.Value) error { data, err := d.DecodeBytes() if err != nil { return err @@ -274,3 +238,13 @@ func unmarshalBinaryValue(d *Decoder, v reflect.Value) error { unmarshaler := v.Interface().(encoding.BinaryUnmarshaler) return unmarshaler.UnmarshalBinary(data) } + +func unmarshalTextValue(d *Decoder, v reflect.Value) error { + data, err := d.DecodeBytes() + if err != nil { + return err + } + + unmarshaler := v.Interface().(encoding.TextUnmarshaler) + return unmarshaler.UnmarshalText(data) +} diff --git a/vendor/github.com/vmihailenco/msgpack/v4/encode.go b/vendor/github.com/vmihailenco/msgpack/v5/encode.go similarity index 55% rename from vendor/github.com/vmihailenco/msgpack/v4/encode.go rename to vendor/github.com/vmihailenco/msgpack/v5/encode.go index 37f098701ea00..0ef6212e63bca 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/encode.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/encode.go @@ -7,15 +7,16 @@ import ( "sync" "time" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) const ( sortMapKeysFlag uint32 = 1 << iota - structAsArrayFlag - encodeUsingJSONFlag + arrayEncodedStructsFlag useCompactIntsFlag useCompactFloatsFlag + useInternedStringsFlag + omitEmptyFlag ) type writer interface { @@ -25,23 +26,16 @@ type writer interface { type byteWriter struct { io.Writer - - buf [1]byte -} - -func newByteWriter(w io.Writer) *byteWriter { - bw := new(byteWriter) - bw.Reset(w) - return bw } -func (bw *byteWriter) Reset(w io.Writer) { - bw.Writer = w +func newByteWriter(w io.Writer) byteWriter { + return byteWriter{ + Writer: w, + } } -func (bw *byteWriter) WriteByte(c byte) error { - bw.buf[0] = c - _, err := bw.Write(bw.buf[:]) +func (bw byteWriter) WriteByte(c byte) error { + _, err := bw.Write([]byte{c}) return err } @@ -53,9 +47,18 @@ var encPool = sync.Pool{ }, } +func GetEncoder() *Encoder { + return encPool.Get().(*Encoder) +} + +func PutEncoder(enc *Encoder) { + enc.w = nil + encPool.Put(enc) +} + // Marshal returns the MessagePack encoding of v. func Marshal(v interface{}) ([]byte, error) { - enc := encPool.Get().(*Encoder) + enc := GetEncoder() var buf bytes.Buffer enc.Reset(&buf) @@ -63,7 +66,7 @@ func Marshal(v interface{}) ([]byte, error) { err := enc.Encode(v) b := buf.Bytes() - encPool.Put(enc) + PutEncoder(enc) if err != nil { return nil, err @@ -74,49 +77,63 @@ func Marshal(v interface{}) ([]byte, error) { type Encoder struct { w writer - buf []byte - timeBuf []byte - bootstrap [9 + 12]byte + buf []byte + timeBuf []byte - intern map[string]int + dict map[string]int - flags uint32 + flags uint32 + structTag string } // NewEncoder returns a new encoder that writes to w. func NewEncoder(w io.Writer) *Encoder { - e := new(Encoder) - e.buf = e.bootstrap[:9] - e.timeBuf = e.bootstrap[9 : 9+12] + e := &Encoder{ + buf: make([]byte, 9), + } e.Reset(w) return e } +// Writer returns the Encoder's writer. +func (e *Encoder) Writer() io.Writer { + return e.w +} + +// Reset discards any buffered data, resets all state, and switches the writer to write to w. func (e *Encoder) Reset(w io.Writer) { + e.ResetDict(w, nil) +} + +// ResetDict is like Reset, but also resets the dict. +func (e *Encoder) ResetDict(w io.Writer, dict map[string]int) { + e.resetWriter(w) + e.flags = 0 + e.structTag = "" + e.dict = dict +} + +func (e *Encoder) WithDict(dict map[string]int, fn func(*Encoder) error) error { + oldDict := e.dict + e.dict = dict + err := fn(e) + e.dict = oldDict + return err +} + +func (e *Encoder) resetWriter(w io.Writer) { if bw, ok := w.(writer); ok { e.w = bw - } else if bw, ok := e.w.(*byteWriter); ok { - bw.Reset(w) } else { e.w = newByteWriter(w) } - - for k := range e.intern { - delete(e.intern, k) - } - - //TODO: - //e.sortMapKeys = false - //e.structAsArray = false - //e.useJSONTag = false - //e.useCompact = false } -// SortMapKeys causes the Encoder to encode map keys in increasing order. +// SetSortMapKeys causes the Encoder to encode map keys in increasing order. // Supported map types are: // - map[string]string // - map[string]interface{} -func (e *Encoder) SortMapKeys(on bool) *Encoder { +func (e *Encoder) SetSortMapKeys(on bool) *Encoder { if on { e.flags |= sortMapKeysFlag } else { @@ -125,36 +142,38 @@ func (e *Encoder) SortMapKeys(on bool) *Encoder { return e } -// StructAsArray causes the Encoder to encode Go structs as msgpack arrays. -func (e *Encoder) StructAsArray(on bool) *Encoder { +// SetCustomStructTag causes the Encoder to use a custom struct tag as +// fallback option if there is no msgpack tag. +func (e *Encoder) SetCustomStructTag(tag string) { + e.structTag = tag +} + +// SetOmitEmpty causes the Encoder to omit empty values by default. +func (e *Encoder) SetOmitEmpty(on bool) { if on { - e.flags |= structAsArrayFlag + e.flags |= omitEmptyFlag } else { - e.flags &= ^structAsArrayFlag + e.flags &= ^omitEmptyFlag } - return e } -// UseJSONTag causes the Encoder to use json struct tag as fallback option -// if there is no msgpack tag. -func (e *Encoder) UseJSONTag(on bool) *Encoder { +// UseArrayEncodedStructs causes the Encoder to encode Go structs as msgpack arrays. +func (e *Encoder) UseArrayEncodedStructs(on bool) { if on { - e.flags |= encodeUsingJSONFlag + e.flags |= arrayEncodedStructsFlag } else { - e.flags &= ^encodeUsingJSONFlag + e.flags &= ^arrayEncodedStructsFlag } - return e } // UseCompactEncoding causes the Encoder to chose the most compact encoding. // For example, it allows to encode small Go int64 as msgpack int8 saving 7 bytes. -func (e *Encoder) UseCompactEncoding(on bool) *Encoder { +func (e *Encoder) UseCompactInts(on bool) { if on { e.flags |= useCompactIntsFlag } else { e.flags &= ^useCompactIntsFlag } - return e } // UseCompactFloats causes the Encoder to chose a compact integer encoding @@ -167,6 +186,15 @@ func (e *Encoder) UseCompactFloats(on bool) { } } +// UseInternedStrings causes the Encoder to intern strings. +func (e *Encoder) UseInternedStrings(on bool) { + if on { + e.flags |= useInternedStringsFlag + } else { + e.flags &= ^useInternedStringsFlag + } +} + func (e *Encoder) Encode(v interface{}) error { switch v := v.(type) { case nil: @@ -176,11 +204,11 @@ func (e *Encoder) Encode(v interface{}) error { case []byte: return e.EncodeBytes(v) case int: - return e.encodeInt64Cond(int64(v)) + return e.EncodeInt(int64(v)) case int64: return e.encodeInt64Cond(v) case uint: - return e.encodeUint64Cond(uint64(v)) + return e.EncodeUint(uint64(v)) case uint64: return e.encodeUint64Cond(v) case bool: @@ -212,22 +240,22 @@ func (e *Encoder) EncodeValue(v reflect.Value) error { } func (e *Encoder) EncodeNil() error { - return e.writeCode(codes.Nil) + return e.writeCode(msgpcode.Nil) } func (e *Encoder) EncodeBool(value bool) error { if value { - return e.writeCode(codes.True) + return e.writeCode(msgpcode.True) } - return e.writeCode(codes.False) + return e.writeCode(msgpcode.False) } func (e *Encoder) EncodeDuration(d time.Duration) error { return e.EncodeInt(int64(d)) } -func (e *Encoder) writeCode(c codes.Code) error { - return e.w.WriteByte(byte(c)) +func (e *Encoder) writeCode(c byte) error { + return e.w.WriteByte(c) } func (e *Encoder) write(b []byte) error { diff --git a/vendor/github.com/vmihailenco/msgpack/v4/encode_map.go b/vendor/github.com/vmihailenco/msgpack/v5/encode_map.go similarity index 70% rename from vendor/github.com/vmihailenco/msgpack/v4/encode_map.go rename to vendor/github.com/vmihailenco/msgpack/v5/encode_map.go index d9b954d8667aa..ba4c61be72d86 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/encode_map.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/encode_map.go @@ -1,10 +1,11 @@ package msgpack import ( + "math" "reflect" "sort" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) func encodeMapValue(e *Encoder, v reflect.Value) error { @@ -16,11 +17,12 @@ func encodeMapValue(e *Encoder, v reflect.Value) error { return err } - for _, key := range v.MapKeys() { - if err := e.EncodeValue(key); err != nil { + iter := v.MapRange() + for iter.Next() { + if err := e.EncodeValue(iter.Key()); err != nil { return err } - if err := e.EncodeValue(v.MapIndex(key)); err != nil { + if err := e.EncodeValue(iter.Value()); err != nil { return err } } @@ -58,16 +60,20 @@ func encodeMapStringInterfaceValue(e *Encoder, v reflect.Value) error { if v.IsNil() { return e.EncodeNil() } - - if err := e.EncodeMapLen(v.Len()); err != nil { - return err - } - m := v.Convert(mapStringInterfaceType).Interface().(map[string]interface{}) if e.flags&sortMapKeysFlag != 0 { - return e.encodeSortedMapStringInterface(m) + return e.EncodeMapSorted(m) } + return e.EncodeMap(m) +} +func (e *Encoder) EncodeMap(m map[string]interface{}) error { + if m == nil { + return e.EncodeNil() + } + if err := e.EncodeMapLen(len(m)); err != nil { + return err + } for mk, mv := range m { if err := e.EncodeString(mk); err != nil { return err @@ -76,23 +82,30 @@ func encodeMapStringInterfaceValue(e *Encoder, v reflect.Value) error { return err } } - return nil } -func (e *Encoder) encodeSortedMapStringString(m map[string]string) error { +func (e *Encoder) EncodeMapSorted(m map[string]interface{}) error { + if m == nil { + return e.EncodeNil() + } + if err := e.EncodeMapLen(len(m)); err != nil { + return err + } + keys := make([]string, 0, len(m)) + for k := range m { keys = append(keys, k) } + sort.Strings(keys) for _, k := range keys { - err := e.EncodeString(k) - if err != nil { + if err := e.EncodeString(k); err != nil { return err } - if err = e.EncodeString(m[k]); err != nil { + if err := e.Encode(m[k]); err != nil { return err } } @@ -100,7 +113,7 @@ func (e *Encoder) encodeSortedMapStringString(m map[string]string) error { return nil } -func (e *Encoder) encodeSortedMapStringInterface(m map[string]interface{}) error { +func (e *Encoder) encodeSortedMapStringString(m map[string]string) error { keys := make([]string, 0, len(m)) for k := range m { keys = append(keys, k) @@ -112,7 +125,7 @@ func (e *Encoder) encodeSortedMapStringInterface(m map[string]interface{}) error if err != nil { return err } - if err = e.Encode(m[k]); err != nil { + if err = e.EncodeString(m[k]); err != nil { return err } } @@ -122,26 +135,20 @@ func (e *Encoder) encodeSortedMapStringInterface(m map[string]interface{}) error func (e *Encoder) EncodeMapLen(l int) error { if l < 16 { - return e.writeCode(codes.FixedMapLow | codes.Code(l)) + return e.writeCode(msgpcode.FixedMapLow | byte(l)) } - if l < 65536 { - return e.write2(codes.Map16, uint16(l)) + if l <= math.MaxUint16 { + return e.write2(msgpcode.Map16, uint16(l)) } - return e.write4(codes.Map32, uint32(l)) + return e.write4(msgpcode.Map32, uint32(l)) } func encodeStructValue(e *Encoder, strct reflect.Value) error { - var structFields *fields - if e.flags&encodeUsingJSONFlag != 0 { - structFields = jsonStructs.Fields(strct.Type()) - } else { - structFields = structs.Fields(strct.Type()) - } - - if e.flags&structAsArrayFlag != 0 || structFields.AsArray { + structFields := structs.Fields(strct.Type(), e.structTag) + if e.flags&arrayEncodedStructsFlag != 0 || structFields.AsArray { return encodeStructValueAsArray(e, strct, structFields.List) } - fields := structFields.OmitEmpty(strct) + fields := structFields.OmitEmpty(strct, e.flags&omitEmptyFlag != 0) if err := e.EncodeMapLen(len(fields)); err != nil { return err diff --git a/vendor/github.com/vmihailenco/msgpack/v4/encode_number.go b/vendor/github.com/vmihailenco/msgpack/v5/encode_number.go similarity index 84% rename from vendor/github.com/vmihailenco/msgpack/v4/encode_number.go rename to vendor/github.com/vmihailenco/msgpack/v5/encode_number.go index bf3c2f851ae86..63c311bfae8c0 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/encode_number.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/encode_number.go @@ -4,12 +4,12 @@ import ( "math" "reflect" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) // EncodeUint8 encodes an uint8 in 2 bytes preserving type of the number. func (e *Encoder) EncodeUint8(n uint8) error { - return e.write1(codes.Uint8, n) + return e.write1(msgpcode.Uint8, n) } func (e *Encoder) encodeUint8Cond(n uint8) error { @@ -21,7 +21,7 @@ func (e *Encoder) encodeUint8Cond(n uint8) error { // EncodeUint16 encodes an uint16 in 3 bytes preserving type of the number. func (e *Encoder) EncodeUint16(n uint16) error { - return e.write2(codes.Uint16, n) + return e.write2(msgpcode.Uint16, n) } func (e *Encoder) encodeUint16Cond(n uint16) error { @@ -33,7 +33,7 @@ func (e *Encoder) encodeUint16Cond(n uint16) error { // EncodeUint32 encodes an uint16 in 5 bytes preserving type of the number. func (e *Encoder) EncodeUint32(n uint32) error { - return e.write4(codes.Uint32, n) + return e.write4(msgpcode.Uint32, n) } func (e *Encoder) encodeUint32Cond(n uint32) error { @@ -45,7 +45,7 @@ func (e *Encoder) encodeUint32Cond(n uint32) error { // EncodeUint64 encodes an uint16 in 9 bytes preserving type of the number. func (e *Encoder) EncodeUint64(n uint64) error { - return e.write8(codes.Uint64, n) + return e.write8(msgpcode.Uint64, n) } func (e *Encoder) encodeUint64Cond(n uint64) error { @@ -57,7 +57,7 @@ func (e *Encoder) encodeUint64Cond(n uint64) error { // EncodeInt8 encodes an int8 in 2 bytes preserving type of the number. func (e *Encoder) EncodeInt8(n int8) error { - return e.write1(codes.Int8, uint8(n)) + return e.write1(msgpcode.Int8, uint8(n)) } func (e *Encoder) encodeInt8Cond(n int8) error { @@ -69,7 +69,7 @@ func (e *Encoder) encodeInt8Cond(n int8) error { // EncodeInt16 encodes an int16 in 3 bytes preserving type of the number. func (e *Encoder) EncodeInt16(n int16) error { - return e.write2(codes.Int16, uint16(n)) + return e.write2(msgpcode.Int16, uint16(n)) } func (e *Encoder) encodeInt16Cond(n int16) error { @@ -81,7 +81,7 @@ func (e *Encoder) encodeInt16Cond(n int16) error { // EncodeInt32 encodes an int32 in 5 bytes preserving type of the number. func (e *Encoder) EncodeInt32(n int32) error { - return e.write4(codes.Int32, uint32(n)) + return e.write4(msgpcode.Int32, uint32(n)) } func (e *Encoder) encodeInt32Cond(n int32) error { @@ -93,7 +93,7 @@ func (e *Encoder) encodeInt32Cond(n int32) error { // EncodeInt64 encodes an int64 in 9 bytes preserving type of the number. func (e *Encoder) EncodeInt64(n int64) error { - return e.write8(codes.Int64, uint64(n)) + return e.write8(msgpcode.Int64, uint64(n)) } func (e *Encoder) encodeInt64Cond(n int64) error { @@ -127,7 +127,7 @@ func (e *Encoder) EncodeInt(n int64) error { if n >= 0 { return e.EncodeUint(uint64(n)) } - if n >= int64(int8(codes.NegFixedNumLow)) { + if n >= int64(int8(msgpcode.NegFixedNumLow)) { return e.w.WriteByte(byte(n)) } if n >= math.MinInt8 { @@ -148,7 +148,7 @@ func (e *Encoder) EncodeFloat32(n float32) error { return e.EncodeInt(int64(n)) } } - return e.write4(codes.Float, math.Float32bits(n)) + return e.write4(msgpcode.Float, math.Float32bits(n)) } func (e *Encoder) EncodeFloat64(n float64) error { @@ -161,27 +161,27 @@ func (e *Encoder) EncodeFloat64(n float64) error { return e.EncodeInt(int64(n)) } } - return e.write8(codes.Double, math.Float64bits(n)) + return e.write8(msgpcode.Double, math.Float64bits(n)) } -func (e *Encoder) write1(code codes.Code, n uint8) error { +func (e *Encoder) write1(code byte, n uint8) error { e.buf = e.buf[:2] - e.buf[0] = byte(code) + e.buf[0] = code e.buf[1] = n return e.write(e.buf) } -func (e *Encoder) write2(code codes.Code, n uint16) error { +func (e *Encoder) write2(code byte, n uint16) error { e.buf = e.buf[:3] - e.buf[0] = byte(code) + e.buf[0] = code e.buf[1] = byte(n >> 8) e.buf[2] = byte(n) return e.write(e.buf) } -func (e *Encoder) write4(code codes.Code, n uint32) error { +func (e *Encoder) write4(code byte, n uint32) error { e.buf = e.buf[:5] - e.buf[0] = byte(code) + e.buf[0] = code e.buf[1] = byte(n >> 24) e.buf[2] = byte(n >> 16) e.buf[3] = byte(n >> 8) @@ -189,9 +189,9 @@ func (e *Encoder) write4(code codes.Code, n uint32) error { return e.write(e.buf) } -func (e *Encoder) write8(code codes.Code, n uint64) error { +func (e *Encoder) write8(code byte, n uint64) error { e.buf = e.buf[:9] - e.buf[0] = byte(code) + e.buf[0] = code e.buf[1] = byte(n >> 56) e.buf[2] = byte(n >> 48) e.buf[3] = byte(n >> 40) @@ -203,6 +203,14 @@ func (e *Encoder) write8(code codes.Code, n uint64) error { return e.write(e.buf) } +func encodeUintValue(e *Encoder, v reflect.Value) error { + return e.EncodeUint(v.Uint()) +} + +func encodeIntValue(e *Encoder, v reflect.Value) error { + return e.EncodeInt(v.Int()) +} + func encodeUint8CondValue(e *Encoder, v reflect.Value) error { return e.encodeUint8Cond(uint8(v.Uint())) } diff --git a/vendor/github.com/vmihailenco/msgpack/v4/encode_slice.go b/vendor/github.com/vmihailenco/msgpack/v5/encode_slice.go similarity index 64% rename from vendor/github.com/vmihailenco/msgpack/v4/encode_slice.go rename to vendor/github.com/vmihailenco/msgpack/v5/encode_slice.go index 69a9618e0645b..ca46eadae5122 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/encode_slice.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/encode_slice.go @@ -1,12 +1,13 @@ package msgpack import ( + "math" "reflect" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) -var sliceStringType = reflect.TypeOf(([]string)(nil)) +var stringSliceType = reflect.TypeOf(([]string)(nil)) func encodeStringValue(e *Encoder, v reflect.Value) error { return e.EncodeString(v.String()) @@ -42,29 +43,36 @@ func grow(b []byte, n int) []byte { func (e *Encoder) EncodeBytesLen(l int) error { if l < 256 { - return e.write1(codes.Bin8, uint8(l)) + return e.write1(msgpcode.Bin8, uint8(l)) } - if l < 65536 { - return e.write2(codes.Bin16, uint16(l)) + if l <= math.MaxUint16 { + return e.write2(msgpcode.Bin16, uint16(l)) } - return e.write4(codes.Bin32, uint32(l)) + return e.write4(msgpcode.Bin32, uint32(l)) } -func (e *Encoder) encodeStrLen(l int) error { +func (e *Encoder) encodeStringLen(l int) error { if l < 32 { - return e.writeCode(codes.FixedStrLow | codes.Code(l)) + return e.writeCode(msgpcode.FixedStrLow | byte(l)) } if l < 256 { - return e.write1(codes.Str8, uint8(l)) + return e.write1(msgpcode.Str8, uint8(l)) } - if l < 65536 { - return e.write2(codes.Str16, uint16(l)) + if l <= math.MaxUint16 { + return e.write2(msgpcode.Str16, uint16(l)) } - return e.write4(codes.Str32, uint32(l)) + return e.write4(msgpcode.Str32, uint32(l)) } func (e *Encoder) EncodeString(v string) error { - if err := e.encodeStrLen(len(v)); err != nil { + if intern := e.flags&useInternedStringsFlag != 0; intern || len(e.dict) > 0 { + return e.encodeInternedString(v, intern) + } + return e.encodeNormalString(v) +} + +func (e *Encoder) encodeNormalString(v string) error { + if err := e.encodeStringLen(len(v)); err != nil { return err } return e.writeString(v) @@ -82,16 +90,16 @@ func (e *Encoder) EncodeBytes(v []byte) error { func (e *Encoder) EncodeArrayLen(l int) error { if l < 16 { - return e.writeCode(codes.FixedArrayLow | codes.Code(l)) + return e.writeCode(msgpcode.FixedArrayLow | byte(l)) } - if l < 65536 { - return e.write2(codes.Array16, uint16(l)) + if l <= math.MaxUint16 { + return e.write2(msgpcode.Array16, uint16(l)) } - return e.write4(codes.Array32, uint32(l)) + return e.write4(msgpcode.Array32, uint32(l)) } func encodeStringSliceValue(e *Encoder, v reflect.Value) error { - ss := v.Convert(sliceStringType).Interface().([]string) + ss := v.Convert(stringSliceType).Interface().([]string) return e.encodeStringSlice(ss) } diff --git a/vendor/github.com/vmihailenco/msgpack/v4/encode_value.go b/vendor/github.com/vmihailenco/msgpack/v5/encode_value.go similarity index 82% rename from vendor/github.com/vmihailenco/msgpack/v4/encode_value.go rename to vendor/github.com/vmihailenco/msgpack/v5/encode_value.go index 335fcdb7ed6cc..48cf489fa1f2e 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/encode_value.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/encode_value.go @@ -12,12 +12,12 @@ var valueEncoders []encoderFunc func init() { valueEncoders = []encoderFunc{ reflect.Bool: encodeBoolValue, - reflect.Int: encodeInt64CondValue, + reflect.Int: encodeIntValue, reflect.Int8: encodeInt8CondValue, reflect.Int16: encodeInt16CondValue, reflect.Int32: encodeInt32CondValue, reflect.Int64: encodeInt64CondValue, - reflect.Uint: encodeUint64CondValue, + reflect.Uint: encodeUintValue, reflect.Uint8: encodeUint8CondValue, reflect.Uint16: encodeUint16CondValue, reflect.Uint32: encodeUint32CondValue, @@ -66,6 +66,9 @@ func _getEncoder(typ reflect.Type) encoderFunc { if typ.Implements(binaryMarshalerType) { return marshalBinaryValue } + if typ.Implements(textMarshalerType) { + return marshalTextValue + } // Addressable struct field value. if kind != reflect.Ptr { @@ -77,7 +80,10 @@ func _getEncoder(typ reflect.Type) encoderFunc { return marshalValuePtr } if ptr.Implements(binaryMarshalerType) { - return marshalBinaryValuePtr + return marshalBinaryValueAddr + } + if ptr.Implements(textMarshalerType) { + return marshalTextValueAddr } } @@ -133,7 +139,7 @@ func encodeCustomValuePtr(e *Encoder, v reflect.Value) error { } func encodeCustomValue(e *Encoder, v reflect.Value) error { - if nilable(v) && v.IsNil() { + if nilable(v.Kind()) && v.IsNil() { return e.EncodeNil() } @@ -149,7 +155,7 @@ func marshalValuePtr(e *Encoder, v reflect.Value) error { } func marshalValue(e *Encoder, v reflect.Value) error { - if nilable(v) && v.IsNil() { + if nilable(v.Kind()) && v.IsNil() { return e.EncodeNil() } @@ -184,8 +190,8 @@ func encodeUnsupportedValue(e *Encoder, v reflect.Value) error { return fmt.Errorf("msgpack: Encode(unsupported %s)", v.Type()) } -func nilable(v reflect.Value) bool { - switch v.Kind() { +func nilable(kind reflect.Kind) bool { + switch kind { case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: return true } @@ -194,7 +200,7 @@ func nilable(v reflect.Value) bool { //------------------------------------------------------------------------------ -func marshalBinaryValuePtr(e *Encoder, v reflect.Value) error { +func marshalBinaryValueAddr(e *Encoder, v reflect.Value) error { if !v.CanAddr() { return fmt.Errorf("msgpack: Encode(non-addressable %T)", v.Interface()) } @@ -202,7 +208,7 @@ func marshalBinaryValuePtr(e *Encoder, v reflect.Value) error { } func marshalBinaryValue(e *Encoder, v reflect.Value) error { - if nilable(v) && v.IsNil() { + if nilable(v.Kind()) && v.IsNil() { return e.EncodeNil() } @@ -214,3 +220,26 @@ func marshalBinaryValue(e *Encoder, v reflect.Value) error { return e.EncodeBytes(data) } + +//------------------------------------------------------------------------------ + +func marshalTextValueAddr(e *Encoder, v reflect.Value) error { + if !v.CanAddr() { + return fmt.Errorf("msgpack: Encode(non-addressable %T)", v.Interface()) + } + return marshalTextValue(e, v.Addr()) +} + +func marshalTextValue(e *Encoder, v reflect.Value) error { + if nilable(v.Kind()) && v.IsNil() { + return e.EncodeNil() + } + + marshaler := v.Interface().(encoding.TextMarshaler) + data, err := marshaler.MarshalText() + if err != nil { + return err + } + + return e.EncodeBytes(data) +} diff --git a/vendor/github.com/vmihailenco/msgpack/v5/ext.go b/vendor/github.com/vmihailenco/msgpack/v5/ext.go new file mode 100644 index 0000000000000..76e11603d9271 --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/ext.go @@ -0,0 +1,303 @@ +package msgpack + +import ( + "fmt" + "math" + "reflect" + + "github.com/vmihailenco/msgpack/v5/msgpcode" +) + +type extInfo struct { + Type reflect.Type + Decoder func(d *Decoder, v reflect.Value, extLen int) error +} + +var extTypes = make(map[int8]*extInfo) + +type MarshalerUnmarshaler interface { + Marshaler + Unmarshaler +} + +func RegisterExt(extID int8, value MarshalerUnmarshaler) { + RegisterExtEncoder(extID, value, func(e *Encoder, v reflect.Value) ([]byte, error) { + marshaler := v.Interface().(Marshaler) + return marshaler.MarshalMsgpack() + }) + RegisterExtDecoder(extID, value, func(d *Decoder, v reflect.Value, extLen int) error { + b, err := d.readN(extLen) + if err != nil { + return err + } + return v.Interface().(Unmarshaler).UnmarshalMsgpack(b) + }) +} + +func UnregisterExt(extID int8) { + unregisterExtEncoder(extID) + unregisterExtDecoder(extID) +} + +func RegisterExtEncoder( + extID int8, + value interface{}, + encoder func(enc *Encoder, v reflect.Value) ([]byte, error), +) { + unregisterExtEncoder(extID) + + typ := reflect.TypeOf(value) + extEncoder := makeExtEncoder(extID, typ, encoder) + typeEncMap.Store(extID, typ) + typeEncMap.Store(typ, extEncoder) + if typ.Kind() == reflect.Ptr { + typeEncMap.Store(typ.Elem(), makeExtEncoderAddr(extEncoder)) + } +} + +func unregisterExtEncoder(extID int8) { + t, ok := typeEncMap.Load(extID) + if !ok { + return + } + typeEncMap.Delete(extID) + typ := t.(reflect.Type) + typeEncMap.Delete(typ) + if typ.Kind() == reflect.Ptr { + typeEncMap.Delete(typ.Elem()) + } +} + +func makeExtEncoder( + extID int8, + typ reflect.Type, + encoder func(enc *Encoder, v reflect.Value) ([]byte, error), +) encoderFunc { + nilable := typ.Kind() == reflect.Ptr + + return func(e *Encoder, v reflect.Value) error { + if nilable && v.IsNil() { + return e.EncodeNil() + } + + b, err := encoder(e, v) + if err != nil { + return err + } + + if err := e.EncodeExtHeader(extID, len(b)); err != nil { + return err + } + + return e.write(b) + } +} + +func makeExtEncoderAddr(extEncoder encoderFunc) encoderFunc { + return func(e *Encoder, v reflect.Value) error { + if !v.CanAddr() { + return fmt.Errorf("msgpack: Decode(nonaddressable %T)", v.Interface()) + } + return extEncoder(e, v.Addr()) + } +} + +func RegisterExtDecoder( + extID int8, + value interface{}, + decoder func(dec *Decoder, v reflect.Value, extLen int) error, +) { + unregisterExtDecoder(extID) + + typ := reflect.TypeOf(value) + extDecoder := makeExtDecoder(extID, typ, decoder) + extTypes[extID] = &extInfo{ + Type: typ, + Decoder: decoder, + } + + typeDecMap.Store(extID, typ) + typeDecMap.Store(typ, extDecoder) + if typ.Kind() == reflect.Ptr { + typeDecMap.Store(typ.Elem(), makeExtDecoderAddr(extDecoder)) + } +} + +func unregisterExtDecoder(extID int8) { + t, ok := typeDecMap.Load(extID) + if !ok { + return + } + typeDecMap.Delete(extID) + delete(extTypes, extID) + typ := t.(reflect.Type) + typeDecMap.Delete(typ) + if typ.Kind() == reflect.Ptr { + typeDecMap.Delete(typ.Elem()) + } +} + +func makeExtDecoder( + wantedExtID int8, + typ reflect.Type, + decoder func(d *Decoder, v reflect.Value, extLen int) error, +) decoderFunc { + return nilAwareDecoder(typ, func(d *Decoder, v reflect.Value) error { + extID, extLen, err := d.DecodeExtHeader() + if err != nil { + return err + } + if extID != wantedExtID { + return fmt.Errorf("msgpack: got ext type=%d, wanted %d", extID, wantedExtID) + } + return decoder(d, v, extLen) + }) +} + +func makeExtDecoderAddr(extDecoder decoderFunc) decoderFunc { + return func(d *Decoder, v reflect.Value) error { + if !v.CanAddr() { + return fmt.Errorf("msgpack: Decode(nonaddressable %T)", v.Interface()) + } + return extDecoder(d, v.Addr()) + } +} + +func (e *Encoder) EncodeExtHeader(extID int8, extLen int) error { + if err := e.encodeExtLen(extLen); err != nil { + return err + } + if err := e.w.WriteByte(byte(extID)); err != nil { + return err + } + return nil +} + +func (e *Encoder) encodeExtLen(l int) error { + switch l { + case 1: + return e.writeCode(msgpcode.FixExt1) + case 2: + return e.writeCode(msgpcode.FixExt2) + case 4: + return e.writeCode(msgpcode.FixExt4) + case 8: + return e.writeCode(msgpcode.FixExt8) + case 16: + return e.writeCode(msgpcode.FixExt16) + } + if l <= math.MaxUint8 { + return e.write1(msgpcode.Ext8, uint8(l)) + } + if l <= math.MaxUint16 { + return e.write2(msgpcode.Ext16, uint16(l)) + } + return e.write4(msgpcode.Ext32, uint32(l)) +} + +func (d *Decoder) DecodeExtHeader() (extID int8, extLen int, err error) { + c, err := d.readCode() + if err != nil { + return + } + return d.extHeader(c) +} + +func (d *Decoder) extHeader(c byte) (int8, int, error) { + extLen, err := d.parseExtLen(c) + if err != nil { + return 0, 0, err + } + + extID, err := d.readCode() + if err != nil { + return 0, 0, err + } + + return int8(extID), extLen, nil +} + +func (d *Decoder) parseExtLen(c byte) (int, error) { + switch c { + case msgpcode.FixExt1: + return 1, nil + case msgpcode.FixExt2: + return 2, nil + case msgpcode.FixExt4: + return 4, nil + case msgpcode.FixExt8: + return 8, nil + case msgpcode.FixExt16: + return 16, nil + case msgpcode.Ext8: + n, err := d.uint8() + return int(n), err + case msgpcode.Ext16: + n, err := d.uint16() + return int(n), err + case msgpcode.Ext32: + n, err := d.uint32() + return int(n), err + default: + return 0, fmt.Errorf("msgpack: invalid code=%x decoding ext len", c) + } +} + +func (d *Decoder) decodeInterfaceExt(c byte) (interface{}, error) { + extID, extLen, err := d.extHeader(c) + if err != nil { + return nil, err + } + + info, ok := extTypes[extID] + if !ok { + return nil, fmt.Errorf("msgpack: unknown ext id=%d", extID) + } + + v := reflect.New(info.Type).Elem() + if nilable(v.Kind()) && v.IsNil() { + v.Set(reflect.New(info.Type.Elem())) + } + + if err := info.Decoder(d, v, extLen); err != nil { + return nil, err + } + + return v.Interface(), nil +} + +func (d *Decoder) skipExt(c byte) error { + n, err := d.parseExtLen(c) + if err != nil { + return err + } + return d.skipN(n + 1) +} + +func (d *Decoder) skipExtHeader(c byte) error { + // Read ext type. + _, err := d.readCode() + if err != nil { + return err + } + // Read ext body len. + for i := 0; i < extHeaderLen(c); i++ { + _, err := d.readCode() + if err != nil { + return err + } + } + return nil +} + +func extHeaderLen(c byte) int { + switch c { + case msgpcode.Ext8: + return 1 + case msgpcode.Ext16: + return 2 + case msgpcode.Ext32: + return 4 + } + return 0 +} diff --git a/vendor/github.com/vmihailenco/msgpack/v5/intern.go b/vendor/github.com/vmihailenco/msgpack/v5/intern.go new file mode 100644 index 0000000000000..be0316a83d8d2 --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/intern.go @@ -0,0 +1,238 @@ +package msgpack + +import ( + "fmt" + "math" + "reflect" + + "github.com/vmihailenco/msgpack/v5/msgpcode" +) + +const ( + minInternedStringLen = 3 + maxDictLen = math.MaxUint16 +) + +var internedStringExtID = int8(math.MinInt8) + +func init() { + extTypes[internedStringExtID] = &extInfo{ + Type: stringType, + Decoder: decodeInternedStringExt, + } +} + +func decodeInternedStringExt(d *Decoder, v reflect.Value, extLen int) error { + idx, err := d.decodeInternedStringIndex(extLen) + if err != nil { + return err + } + + s, err := d.internedStringAtIndex(idx) + if err != nil { + return err + } + + v.SetString(s) + return nil +} + +//------------------------------------------------------------------------------ + +func encodeInternedInterfaceValue(e *Encoder, v reflect.Value) error { + if v.IsNil() { + return e.EncodeNil() + } + + v = v.Elem() + if v.Kind() == reflect.String { + return e.encodeInternedString(v.String(), true) + } + return e.EncodeValue(v) +} + +func encodeInternedStringValue(e *Encoder, v reflect.Value) error { + return e.encodeInternedString(v.String(), true) +} + +func (e *Encoder) encodeInternedString(s string, intern bool) error { + // Interned string takes at least 3 bytes. Plain string 1 byte + string len. + if len(s) >= minInternedStringLen { + if idx, ok := e.dict[s]; ok { + return e.encodeInternedStringIndex(idx) + } + + if intern && len(e.dict) < maxDictLen { + if e.dict == nil { + e.dict = make(map[string]int) + } + idx := len(e.dict) + e.dict[s] = idx + } + } + + return e.encodeNormalString(s) +} + +func (e *Encoder) encodeInternedStringIndex(idx int) error { + if idx <= math.MaxUint8 { + if err := e.writeCode(msgpcode.FixExt1); err != nil { + return err + } + return e.write1(byte(internedStringExtID), uint8(idx)) + } + + if idx <= math.MaxUint16 { + if err := e.writeCode(msgpcode.FixExt2); err != nil { + return err + } + return e.write2(byte(internedStringExtID), uint16(idx)) + } + + if uint64(idx) <= math.MaxUint32 { + if err := e.writeCode(msgpcode.FixExt4); err != nil { + return err + } + return e.write4(byte(internedStringExtID), uint32(idx)) + } + + return fmt.Errorf("msgpack: interned string index=%d is too large", idx) +} + +//------------------------------------------------------------------------------ + +func decodeInternedInterfaceValue(d *Decoder, v reflect.Value) error { + s, err := d.decodeInternedString(true) + if err == nil { + v.Set(reflect.ValueOf(s)) + return nil + } + if err != nil { + if _, ok := err.(unexpectedCodeError); !ok { + return err + } + } + + if err := d.s.UnreadByte(); err != nil { + return err + } + return decodeInterfaceValue(d, v) +} + +func decodeInternedStringValue(d *Decoder, v reflect.Value) error { + s, err := d.decodeInternedString(true) + if err != nil { + return err + } + + v.SetString(s) + return nil +} + +func (d *Decoder) decodeInternedString(intern bool) (string, error) { + c, err := d.readCode() + if err != nil { + return "", err + } + + if msgpcode.IsFixedString(c) { + n := int(c & msgpcode.FixedStrMask) + return d.decodeInternedStringWithLen(n, intern) + } + + switch c { + case msgpcode.Nil: + return "", nil + case msgpcode.FixExt1, msgpcode.FixExt2, msgpcode.FixExt4: + typeID, extLen, err := d.extHeader(c) + if err != nil { + return "", err + } + if typeID != internedStringExtID { + err := fmt.Errorf("msgpack: got ext type=%d, wanted %d", + typeID, internedStringExtID) + return "", err + } + + idx, err := d.decodeInternedStringIndex(extLen) + if err != nil { + return "", err + } + + return d.internedStringAtIndex(idx) + case msgpcode.Str8, msgpcode.Bin8: + n, err := d.uint8() + if err != nil { + return "", err + } + return d.decodeInternedStringWithLen(int(n), intern) + case msgpcode.Str16, msgpcode.Bin16: + n, err := d.uint16() + if err != nil { + return "", err + } + return d.decodeInternedStringWithLen(int(n), intern) + case msgpcode.Str32, msgpcode.Bin32: + n, err := d.uint32() + if err != nil { + return "", err + } + return d.decodeInternedStringWithLen(int(n), intern) + } + + return "", unexpectedCodeError{ + code: c, + hint: "interned string", + } +} + +func (d *Decoder) decodeInternedStringIndex(extLen int) (int, error) { + switch extLen { + case 1: + n, err := d.uint8() + if err != nil { + return 0, err + } + return int(n), nil + case 2: + n, err := d.uint16() + if err != nil { + return 0, err + } + return int(n), nil + case 4: + n, err := d.uint32() + if err != nil { + return 0, err + } + return int(n), nil + } + + err := fmt.Errorf("msgpack: unsupported ext len=%d decoding interned string", extLen) + return 0, err +} + +func (d *Decoder) internedStringAtIndex(idx int) (string, error) { + if idx >= len(d.dict) { + err := fmt.Errorf("msgpack: interned string at index=%d does not exist", idx) + return "", err + } + return d.dict[idx], nil +} + +func (d *Decoder) decodeInternedStringWithLen(n int, intern bool) (string, error) { + if n <= 0 { + return "", nil + } + + s, err := d.stringWithLen(n) + if err != nil { + return "", err + } + + if intern && len(s) >= minInternedStringLen && len(d.dict) < maxDictLen { + d.dict = append(d.dict, s) + } + + return s, nil +} diff --git a/vendor/github.com/vmihailenco/msgpack/v5/msgpack.go b/vendor/github.com/vmihailenco/msgpack/v5/msgpack.go new file mode 100644 index 0000000000000..4db2fa2c71d3f --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/msgpack.go @@ -0,0 +1,52 @@ +package msgpack + +import "fmt" + +type Marshaler interface { + MarshalMsgpack() ([]byte, error) +} + +type Unmarshaler interface { + UnmarshalMsgpack([]byte) error +} + +type CustomEncoder interface { + EncodeMsgpack(*Encoder) error +} + +type CustomDecoder interface { + DecodeMsgpack(*Decoder) error +} + +//------------------------------------------------------------------------------ + +type RawMessage []byte + +var ( + _ CustomEncoder = (RawMessage)(nil) + _ CustomDecoder = (*RawMessage)(nil) +) + +func (m RawMessage) EncodeMsgpack(enc *Encoder) error { + return enc.write(m) +} + +func (m *RawMessage) DecodeMsgpack(dec *Decoder) error { + msg, err := dec.DecodeRaw() + if err != nil { + return err + } + *m = msg + return nil +} + +//------------------------------------------------------------------------------ + +type unexpectedCodeError struct { + code byte + hint string +} + +func (err unexpectedCodeError) Error() string { + return fmt.Sprintf("msgpack: unexpected code=%x decoding %s", err.code, err.hint) +} diff --git a/vendor/github.com/vmihailenco/msgpack/v5/msgpcode/msgpcode.go b/vendor/github.com/vmihailenco/msgpack/v5/msgpcode/msgpcode.go new file mode 100644 index 0000000000000..e35389cccfe0b --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/msgpcode/msgpcode.go @@ -0,0 +1,88 @@ +package msgpcode + +var ( + PosFixedNumHigh byte = 0x7f + NegFixedNumLow byte = 0xe0 + + Nil byte = 0xc0 + + False byte = 0xc2 + True byte = 0xc3 + + Float byte = 0xca + Double byte = 0xcb + + Uint8 byte = 0xcc + Uint16 byte = 0xcd + Uint32 byte = 0xce + Uint64 byte = 0xcf + + Int8 byte = 0xd0 + Int16 byte = 0xd1 + Int32 byte = 0xd2 + Int64 byte = 0xd3 + + FixedStrLow byte = 0xa0 + FixedStrHigh byte = 0xbf + FixedStrMask byte = 0x1f + Str8 byte = 0xd9 + Str16 byte = 0xda + Str32 byte = 0xdb + + Bin8 byte = 0xc4 + Bin16 byte = 0xc5 + Bin32 byte = 0xc6 + + FixedArrayLow byte = 0x90 + FixedArrayHigh byte = 0x9f + FixedArrayMask byte = 0xf + Array16 byte = 0xdc + Array32 byte = 0xdd + + FixedMapLow byte = 0x80 + FixedMapHigh byte = 0x8f + FixedMapMask byte = 0xf + Map16 byte = 0xde + Map32 byte = 0xdf + + FixExt1 byte = 0xd4 + FixExt2 byte = 0xd5 + FixExt4 byte = 0xd6 + FixExt8 byte = 0xd7 + FixExt16 byte = 0xd8 + Ext8 byte = 0xc7 + Ext16 byte = 0xc8 + Ext32 byte = 0xc9 +) + +func IsFixedNum(c byte) bool { + return c <= PosFixedNumHigh || c >= NegFixedNumLow +} + +func IsFixedMap(c byte) bool { + return c >= FixedMapLow && c <= FixedMapHigh +} + +func IsFixedArray(c byte) bool { + return c >= FixedArrayLow && c <= FixedArrayHigh +} + +func IsFixedString(c byte) bool { + return c >= FixedStrLow && c <= FixedStrHigh +} + +func IsString(c byte) bool { + return IsFixedString(c) || c == Str8 || c == Str16 || c == Str32 +} + +func IsBin(c byte) bool { + return c == Bin8 || c == Bin16 || c == Bin32 +} + +func IsFixedExt(c byte) bool { + return c >= FixExt1 && c <= FixExt16 +} + +func IsExt(c byte) bool { + return IsFixedExt(c) || c == Ext8 || c == Ext16 || c == Ext32 +} diff --git a/vendor/github.com/vmihailenco/msgpack/v5/package.json b/vendor/github.com/vmihailenco/msgpack/v5/package.json new file mode 100644 index 0000000000000..298910d45cf07 --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/package.json @@ -0,0 +1,4 @@ +{ + "name": "msgpack", + "version": "5.3.5" +} diff --git a/vendor/github.com/vmihailenco/msgpack/v4/safe.go b/vendor/github.com/vmihailenco/msgpack/v5/safe.go similarity index 100% rename from vendor/github.com/vmihailenco/msgpack/v4/safe.go rename to vendor/github.com/vmihailenco/msgpack/v5/safe.go diff --git a/vendor/github.com/vmihailenco/msgpack/v4/time.go b/vendor/github.com/vmihailenco/msgpack/v5/time.go similarity index 60% rename from vendor/github.com/vmihailenco/msgpack/v4/time.go rename to vendor/github.com/vmihailenco/msgpack/v5/time.go index bf53eb2a36fcb..44566ec0761f9 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/time.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/time.go @@ -6,16 +6,30 @@ import ( "reflect" "time" - "github.com/vmihailenco/msgpack/v4/codes" + "github.com/vmihailenco/msgpack/v5/msgpcode" ) var timeExtID int8 = -1 -var timePtrType = reflect.TypeOf((*time.Time)(nil)) - -//nolint:gochecknoinits func init() { - registerExt(timeExtID, timePtrType.Elem(), encodeTimeValue, decodeTimeValue) + RegisterExtEncoder(timeExtID, time.Time{}, timeEncoder) + RegisterExtDecoder(timeExtID, time.Time{}, timeDecoder) +} + +func timeEncoder(e *Encoder, v reflect.Value) ([]byte, error) { + return e.encodeTime(v.Interface().(time.Time)), nil +} + +func timeDecoder(d *Decoder, v reflect.Value, extLen int) error { + tm, err := d.decodeTime(extLen) + if err != nil { + return err + } + + ptr := v.Addr().Interface().(*time.Time) + *ptr = tm + + return nil } func (e *Encoder) EncodeTime(tm time.Time) error { @@ -30,14 +44,20 @@ func (e *Encoder) EncodeTime(tm time.Time) error { } func (e *Encoder) encodeTime(tm time.Time) []byte { + if e.timeBuf == nil { + e.timeBuf = make([]byte, 12) + } + secs := uint64(tm.Unix()) if secs>>34 == 0 { data := uint64(tm.Nanosecond())<<34 | secs + if data&0xffffffff00000000 == 0 { b := e.timeBuf[:4] binary.BigEndian.PutUint32(b, uint32(data)) return b } + b := e.timeBuf[:8] binary.BigEndian.PutUint64(b, data) return b @@ -50,62 +70,56 @@ func (e *Encoder) encodeTime(tm time.Time) []byte { } func (d *Decoder) DecodeTime() (time.Time, error) { - tm, err := d.decodeTime() + c, err := d.readCode() if err != nil { - return tm, err + return time.Time{}, err } - if tm.IsZero() { - // Assume that zero time does not have timezone information. - return tm.UTC(), nil - } - return tm, nil -} - -func (d *Decoder) decodeTime() (time.Time, error) { - extLen := d.extLen - d.extLen = 0 - if extLen == 0 { - c, err := d.readCode() + // Legacy format. + if c == msgpcode.FixedArrayLow|2 { + sec, err := d.DecodeInt64() if err != nil { return time.Time{}, err } - // Legacy format. - if c == codes.FixedArrayLow|2 { - sec, err := d.DecodeInt64() - if err != nil { - return time.Time{}, err - } - - nsec, err := d.DecodeInt64() - if err != nil { - return time.Time{}, err - } - - return time.Unix(sec, nsec), nil + nsec, err := d.DecodeInt64() + if err != nil { + return time.Time{}, err } - if codes.IsString(c) { - s, err := d.string(c) - if err != nil { - return time.Time{}, err - } - return time.Parse(time.RFC3339Nano, s) - } + return time.Unix(sec, nsec), nil + } - extLen, err = d.parseExtLen(c) + if msgpcode.IsString(c) { + s, err := d.string(c) if err != nil { return time.Time{}, err } + return time.Parse(time.RFC3339Nano, s) + } - // Skip ext id. - _, err = d.s.ReadByte() - if err != nil { - return time.Time{}, nil - } + extID, extLen, err := d.extHeader(c) + if err != nil { + return time.Time{}, err + } + + if extID != timeExtID { + return time.Time{}, fmt.Errorf("msgpack: invalid time ext id=%d", extID) + } + + tm, err := d.decodeTime(extLen) + if err != nil { + return tm, err } + if tm.IsZero() { + // Zero time does not have timezone information. + return tm.UTC(), nil + } + return tm, nil +} + +func (d *Decoder) decodeTime(extLen int) (time.Time, error) { b, err := d.readN(extLen) if err != nil { return time.Time{}, err @@ -129,21 +143,3 @@ func (d *Decoder) decodeTime() (time.Time, error) { return time.Time{}, err } } - -func encodeTimeValue(e *Encoder, v reflect.Value) error { - tm := v.Interface().(time.Time) - b := e.encodeTime(tm) - return e.write(b) -} - -func decodeTimeValue(d *Decoder, v reflect.Value) error { - tm, err := d.DecodeTime() - if err != nil { - return err - } - - ptr := v.Addr().Interface().(*time.Time) - *ptr = tm - - return nil -} diff --git a/vendor/github.com/vmihailenco/msgpack/v4/types.go b/vendor/github.com/vmihailenco/msgpack/v5/types.go similarity index 73% rename from vendor/github.com/vmihailenco/msgpack/v4/types.go rename to vendor/github.com/vmihailenco/msgpack/v5/types.go index 08cf099dd2a83..69aca611b23be 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/types.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/types.go @@ -7,7 +7,7 @@ import ( "reflect" "sync" - "github.com/vmihailenco/tagparser" + "github.com/vmihailenco/tagparser/v2" ) var errorType = reflect.TypeOf((*error)(nil)).Elem() @@ -27,6 +27,11 @@ var ( binaryUnmarshalerType = reflect.TypeOf((*encoding.BinaryUnmarshaler)(nil)).Elem() ) +var ( + textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() + textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() +) + type ( encoderFunc func(*Encoder, reflect.Value) error decoderFunc func(*Decoder, reflect.Value) error @@ -39,7 +44,7 @@ var ( // Register registers encoder and decoder functions for a value. // This is low level API and in most cases you should prefer implementing -// Marshaler/CustomEncoder and Unmarshaler/CustomDecoder interfaces. +// CustomEncoder/CustomDecoder or Marshaler/Unmarshaler interfaces. func Register(value interface{}, enc encoderFunc, dec decoderFunc) { typ := reflect.TypeOf(value) if enc != nil { @@ -52,30 +57,33 @@ func Register(value interface{}, enc encoderFunc, dec decoderFunc) { //------------------------------------------------------------------------------ -var ( - structs = newStructCache(false) - jsonStructs = newStructCache(true) -) +const defaultStructTag = "msgpack" + +var structs = newStructCache() type structCache struct { m sync.Map +} - useJSONTag bool +type structCacheKey struct { + tag string + typ reflect.Type } -func newStructCache(useJSONTag bool) *structCache { - return &structCache{ - useJSONTag: useJSONTag, - } +func newStructCache() *structCache { + return new(structCache) } -func (m *structCache) Fields(typ reflect.Type) *fields { - if v, ok := m.m.Load(typ); ok { +func (m *structCache) Fields(typ reflect.Type, tag string) *fields { + key := structCacheKey{tag: tag, typ: typ} + + if v, ok := m.m.Load(key); ok { return v.(*fields) } - fs := getFields(typ, m.useJSONTag) - m.m.Store(typ, fs) + fs := getFields(typ, tag) + m.m.Store(key, fs) + return fs } @@ -89,17 +97,17 @@ type field struct { decoder decoderFunc } -func (f *field) Omit(strct reflect.Value) bool { - v, isNil := fieldByIndex(strct, f.index) - if isNil { +func (f *field) Omit(strct reflect.Value, forced bool) bool { + v, ok := fieldByIndex(strct, f.index) + if !ok { return true } - return f.omitEmpty && isEmptyValue(v) + return (f.omitEmpty || forced) && isEmptyValue(v) } func (f *field) EncodeValue(e *Encoder, strct reflect.Value) error { - v, isNil := fieldByIndex(strct, f.index) - if isNil { + v, ok := fieldByIndex(strct, f.index) + if !ok { return e.EncodeNil() } return f.encoder(e, v) @@ -144,15 +152,15 @@ func (fs *fields) warnIfFieldExists(name string) { } } -func (fs *fields) OmitEmpty(strct reflect.Value) []*field { - if !fs.hasOmitEmpty { +func (fs *fields) OmitEmpty(strct reflect.Value, forced bool) []*field { + if !fs.hasOmitEmpty && !forced { return fs.List } fields := make([]*field, 0, len(fs.List)) for _, f := range fs.List { - if !f.Omit(strct) { + if !f.Omit(strct, forced) { fields = append(fields, f) } } @@ -160,16 +168,16 @@ func (fs *fields) OmitEmpty(strct reflect.Value) []*field { return fields } -func getFields(typ reflect.Type, useJSONTag bool) *fields { +func getFields(typ reflect.Type, fallbackTag string) *fields { fs := newFields(typ) var omitEmpty bool for i := 0; i < typ.NumField(); i++ { f := typ.Field(i) - tagStr := f.Tag.Get("msgpack") - if useJSONTag && tagStr == "" { - tagStr = f.Tag.Get("json") + tagStr := f.Tag.Get(defaultStructTag) + if tagStr == "" && fallbackTag != "" { + tagStr = f.Tag.Get(fallbackTag) } tag := tagparser.Parse(tagStr) @@ -178,9 +186,7 @@ func getFields(typ reflect.Type, useJSONTag bool) *fields { } if f.Name == "_msgpack" { - if tag.HasOption("asArray") { - fs.AsArray = true - } + fs.AsArray = tag.HasOption("as_array") || tag.HasOption("asArray") if tag.HasOption("omitempty") { omitEmpty = true } @@ -199,11 +205,11 @@ func getFields(typ reflect.Type, useJSONTag bool) *fields { if tag.HasOption("intern") { switch f.Type.Kind() { case reflect.Interface: - field.encoder = encodeInternInterfaceValue - field.decoder = decodeInternInterfaceValue + field.encoder = encodeInternedInterfaceValue + field.decoder = decodeInternedInterfaceValue case reflect.String: - field.encoder = encodeInternStringValue - field.decoder = decodeInternStringValue + field.encoder = encodeInternedStringValue + field.decoder = decodeInternedStringValue default: err := fmt.Errorf("msgpack: intern strings are not supported on %s", f.Type) panic(err) @@ -220,9 +226,9 @@ func getFields(typ reflect.Type, useJSONTag bool) *fields { if f.Anonymous && !tag.HasOption("noinline") { inline := tag.HasOption("inline") if inline { - inlineFields(fs, f.Type, field, useJSONTag) + inlineFields(fs, f.Type, field, fallbackTag) } else { - inline = shouldInline(fs, f.Type, field, useJSONTag) + inline = shouldInline(fs, f.Type, field, fallbackTag) } if inline { @@ -255,8 +261,8 @@ func init() { decodeStructValuePtr = reflect.ValueOf(decodeStructValue).Pointer() } -func inlineFields(fs *fields, typ reflect.Type, f *field, useJSONTag bool) { - inlinedFields := getFields(typ, useJSONTag).List +func inlineFields(fs *fields, typ reflect.Type, f *field, tag string) { + inlinedFields := getFields(typ, tag).List for _, field := range inlinedFields { if _, ok := fs.Map[field.name]; ok { // Don't inline shadowed fields. @@ -267,7 +273,7 @@ func inlineFields(fs *fields, typ reflect.Type, f *field, useJSONTag bool) { } } -func shouldInline(fs *fields, typ reflect.Type, f *field, useJSONTag bool) bool { +func shouldInline(fs *fields, typ reflect.Type, f *field, tag string) bool { var encoder encoderFunc var decoder decoderFunc @@ -292,7 +298,7 @@ func shouldInline(fs *fields, typ reflect.Type, f *field, useJSONTag bool) bool return false } - inlinedFields := getFields(typ, useJSONTag).List + inlinedFields := getFields(typ, tag).List for _, field := range inlinedFields { if _, ok := fs.Map[field.name]; ok { // Don't auto inline if there are shadowed fields. @@ -307,8 +313,26 @@ func shouldInline(fs *fields, typ reflect.Type, f *field, useJSONTag bool) bool return true } +type isZeroer interface { + IsZero() bool +} + func isEmptyValue(v reflect.Value) bool { - switch v.Kind() { + kind := v.Kind() + + for kind == reflect.Interface { + if v.IsNil() { + return true + } + v = v.Elem() + kind = v.Kind() + } + + if z, ok := v.Interface().(isZeroer); ok { + return nilable(kind) && v.IsNil() || z.IsZero() + } + + switch kind { case reflect.Array, reflect.Map, reflect.Slice, reflect.String: return v.Len() == 0 case reflect.Bool: @@ -319,22 +343,23 @@ func isEmptyValue(v reflect.Value) bool { return v.Uint() == 0 case reflect.Float32, reflect.Float64: return v.Float() == 0 - case reflect.Interface, reflect.Ptr: + case reflect.Ptr: return v.IsNil() + default: + return false } - return false } -func fieldByIndex(v reflect.Value, index []int) (_ reflect.Value, isNil bool) { +func fieldByIndex(v reflect.Value, index []int) (_ reflect.Value, ok bool) { if len(index) == 1 { - return v.Field(index[0]), false + return v.Field(index[0]), true } for i, idx := range index { if i > 0 { if v.Kind() == reflect.Ptr { if v.IsNil() { - return v, true + return v, false } v = v.Elem() } @@ -342,7 +367,7 @@ func fieldByIndex(v reflect.Value, index []int) (_ reflect.Value, isNil bool) { v = v.Field(idx) } - return v, false + return v, true } func fieldByIndexAlloc(v reflect.Value, index []int) reflect.Value { @@ -353,7 +378,7 @@ func fieldByIndexAlloc(v reflect.Value, index []int) reflect.Value { for i, idx := range index { if i > 0 { var ok bool - v, ok = indirectNew(v) + v, ok = indirectNil(v) if !ok { return v } @@ -364,7 +389,7 @@ func fieldByIndexAlloc(v reflect.Value, index []int) reflect.Value { return v } -func indirectNew(v reflect.Value) (reflect.Value, bool) { +func indirectNil(v reflect.Value) (reflect.Value, bool) { if v.Kind() == reflect.Ptr { if v.IsNil() { if !v.CanSet() { diff --git a/vendor/github.com/vmihailenco/msgpack/v4/unsafe.go b/vendor/github.com/vmihailenco/msgpack/v5/unsafe.go similarity index 83% rename from vendor/github.com/vmihailenco/msgpack/v4/unsafe.go rename to vendor/github.com/vmihailenco/msgpack/v5/unsafe.go index 50c0da8b5be50..192ac47920dbe 100644 --- a/vendor/github.com/vmihailenco/msgpack/v4/unsafe.go +++ b/vendor/github.com/vmihailenco/msgpack/v5/unsafe.go @@ -7,7 +7,7 @@ import ( ) // bytesToString converts byte slice to string. -func bytesToString(b []byte) string { //nolint:deadcode,unused +func bytesToString(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } diff --git a/vendor/github.com/vmihailenco/msgpack/v5/version.go b/vendor/github.com/vmihailenco/msgpack/v5/version.go new file mode 100644 index 0000000000000..1d49337c359e3 --- /dev/null +++ b/vendor/github.com/vmihailenco/msgpack/v5/version.go @@ -0,0 +1,6 @@ +package msgpack + +// Version is the current release version. +func Version() string { + return "5.3.5" +} diff --git a/vendor/github.com/vmihailenco/tagparser/.travis.yml b/vendor/github.com/vmihailenco/tagparser/v2/.travis.yml similarity index 80% rename from vendor/github.com/vmihailenco/tagparser/.travis.yml rename to vendor/github.com/vmihailenco/tagparser/v2/.travis.yml index ec538452322c9..7194cd00109c9 100644 --- a/vendor/github.com/vmihailenco/tagparser/.travis.yml +++ b/vendor/github.com/vmihailenco/tagparser/v2/.travis.yml @@ -1,10 +1,9 @@ dist: xenial -sudo: false language: go go: - - 1.11.x - - 1.12.x + - 1.14.x + - 1.15.x - tip matrix: @@ -18,7 +17,3 @@ go_import_path: github.com/vmihailenco/tagparser before_install: - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.17.1 - -script: - - make - - golangci-lint run diff --git a/vendor/github.com/vmihailenco/tagparser/LICENSE b/vendor/github.com/vmihailenco/tagparser/v2/LICENSE similarity index 100% rename from vendor/github.com/vmihailenco/tagparser/LICENSE rename to vendor/github.com/vmihailenco/tagparser/v2/LICENSE diff --git a/vendor/github.com/vmihailenco/tagparser/Makefile b/vendor/github.com/vmihailenco/tagparser/v2/Makefile similarity index 91% rename from vendor/github.com/vmihailenco/tagparser/Makefile rename to vendor/github.com/vmihailenco/tagparser/v2/Makefile index fe9dc5bdbafde..0b1b59595ac1a 100644 --- a/vendor/github.com/vmihailenco/tagparser/Makefile +++ b/vendor/github.com/vmihailenco/tagparser/v2/Makefile @@ -6,3 +6,4 @@ all: go vet ./... go get github.com/gordonklaus/ineffassign ineffassign . + golangci-lint run diff --git a/vendor/github.com/vmihailenco/tagparser/README.md b/vendor/github.com/vmihailenco/tagparser/v2/README.md similarity index 92% rename from vendor/github.com/vmihailenco/tagparser/README.md rename to vendor/github.com/vmihailenco/tagparser/v2/README.md index 411aa5444dc52..c0259de56592d 100644 --- a/vendor/github.com/vmihailenco/tagparser/README.md +++ b/vendor/github.com/vmihailenco/tagparser/v2/README.md @@ -8,7 +8,7 @@ Install: ```shell -go get -u github.com/vmihailenco/tagparser +go get github.com/vmihailenco/tagparser/v2 ``` ## Quickstart diff --git a/vendor/github.com/vmihailenco/tagparser/internal/parser/parser.go b/vendor/github.com/vmihailenco/tagparser/v2/internal/parser/parser.go similarity index 95% rename from vendor/github.com/vmihailenco/tagparser/internal/parser/parser.go rename to vendor/github.com/vmihailenco/tagparser/v2/internal/parser/parser.go index 2de1c6f7bde55..21a9bc7f74785 100644 --- a/vendor/github.com/vmihailenco/tagparser/internal/parser/parser.go +++ b/vendor/github.com/vmihailenco/tagparser/v2/internal/parser/parser.go @@ -3,7 +3,7 @@ package parser import ( "bytes" - "github.com/vmihailenco/tagparser/internal" + "github.com/vmihailenco/tagparser/v2/internal" ) type Parser struct { diff --git a/vendor/github.com/vmihailenco/tagparser/internal/safe.go b/vendor/github.com/vmihailenco/tagparser/v2/internal/safe.go similarity index 100% rename from vendor/github.com/vmihailenco/tagparser/internal/safe.go rename to vendor/github.com/vmihailenco/tagparser/v2/internal/safe.go diff --git a/vendor/github.com/vmihailenco/tagparser/internal/unsafe.go b/vendor/github.com/vmihailenco/tagparser/v2/internal/unsafe.go similarity index 100% rename from vendor/github.com/vmihailenco/tagparser/internal/unsafe.go rename to vendor/github.com/vmihailenco/tagparser/v2/internal/unsafe.go diff --git a/vendor/github.com/vmihailenco/tagparser/tagparser.go b/vendor/github.com/vmihailenco/tagparser/v2/tagparser.go similarity index 88% rename from vendor/github.com/vmihailenco/tagparser/tagparser.go rename to vendor/github.com/vmihailenco/tagparser/v2/tagparser.go index 56b918011b0ba..5002e6453ea9b 100644 --- a/vendor/github.com/vmihailenco/tagparser/tagparser.go +++ b/vendor/github.com/vmihailenco/tagparser/v2/tagparser.go @@ -1,7 +1,9 @@ package tagparser import ( - "github.com/vmihailenco/tagparser/internal/parser" + "strings" + + "github.com/vmihailenco/tagparser/v2/internal/parser" ) type Tag struct { @@ -31,6 +33,9 @@ type tagParser struct { } func (p *tagParser) setTagOption(key, value string) { + key = strings.TrimSpace(key) + value = strings.TrimSpace(value) + if !p.hasName { p.hasName = true if key == "" { @@ -79,7 +84,6 @@ func (p *tagParser) parseKey() { func (p *tagParser) parseValue() { const quote = '\'' - c := p.Peek() if c == quote { p.Skip(quote) @@ -134,10 +138,7 @@ loop: func (p *tagParser) parseQuotedValue() { const quote = '\'' - var b []byte - b = append(b, quote) - for p.Valid() { bb, ok := p.ReadSep(quote) if !ok { @@ -145,6 +146,8 @@ func (p *tagParser) parseQuotedValue() { break } + // keep the escaped single-quote, and continue until we've found the + // one that isn't. if len(bb) > 0 && bb[len(bb)-1] == '\\' { b = append(b, bb[:len(bb)-1]...) b = append(b, quote) @@ -152,7 +155,6 @@ func (p *tagParser) parseQuotedValue() { } b = append(b, bb...) - b = append(b, quote) break } @@ -162,15 +164,3 @@ func (p *tagParser) parseQuotedValue() { } p.parseKey() } - -func Unquote(s string) (string, bool) { - const quote = '\'' - - if len(s) < 2 { - return s, false - } - if s[0] == quote && s[len(s)-1] == quote { - return s[1 : len(s)-1], true - } - return s, false -} diff --git a/vendor/github.com/zclconf/go-cty/cty/ctystrings/prefix.go b/vendor/github.com/zclconf/go-cty/cty/ctystrings/prefix.go index 1d9f5c5a1f925..bbf045233b425 100644 --- a/vendor/github.com/zclconf/go-cty/cty/ctystrings/prefix.go +++ b/vendor/github.com/zclconf/go-cty/cty/ctystrings/prefix.go @@ -4,7 +4,7 @@ import ( "fmt" "unicode/utf8" - "github.com/apparentlymart/go-textseg/v13/textseg" + "github.com/apparentlymart/go-textseg/v15/textseg" "golang.org/x/text/unicode/norm" ) @@ -26,10 +26,6 @@ import ( // application can guarantee that the remainder of the string will not begin // with combining marks then it is safe to instead just normalize the prefix // string with [Normalize]. -// -// Note that this function only takes into account normalization boundaries -// and does _not_ take into account grapheme cluster boundaries as defined -// by Unicode Standard Annex #29. func SafeKnownPrefix(prefix string) string { prefix = Normalize(prefix) diff --git a/vendor/github.com/zclconf/go-cty/cty/function/stdlib/format.go b/vendor/github.com/zclconf/go-cty/cty/function/stdlib/format.go index d04a5eec78b19..2339cc33a7d06 100644 --- a/vendor/github.com/zclconf/go-cty/cty/function/stdlib/format.go +++ b/vendor/github.com/zclconf/go-cty/cty/function/stdlib/format.go @@ -6,7 +6,7 @@ import ( "math/big" "strings" - "github.com/apparentlymart/go-textseg/v13/textseg" + "github.com/apparentlymart/go-textseg/v15/textseg" "github.com/zclconf/go-cty/cty" "github.com/zclconf/go-cty/cty/convert" diff --git a/vendor/github.com/zclconf/go-cty/cty/function/stdlib/string.go b/vendor/github.com/zclconf/go-cty/cty/function/stdlib/string.go index 57ebce1b4a627..f79bf98df2efc 100644 --- a/vendor/github.com/zclconf/go-cty/cty/function/stdlib/string.go +++ b/vendor/github.com/zclconf/go-cty/cty/function/stdlib/string.go @@ -6,7 +6,7 @@ import ( "sort" "strings" - "github.com/apparentlymart/go-textseg/v13/textseg" + "github.com/apparentlymart/go-textseg/v15/textseg" "github.com/zclconf/go-cty/cty" "github.com/zclconf/go-cty/cty/function" diff --git a/vendor/github.com/zclconf/go-cty/cty/path.go b/vendor/github.com/zclconf/go-cty/cty/path.go index 636e68c63dd1f..4995a8c7bfceb 100644 --- a/vendor/github.com/zclconf/go-cty/cty/path.go +++ b/vendor/github.com/zclconf/go-cty/cty/path.go @@ -225,7 +225,9 @@ func (s IndexStep) Apply(val Value) (Value, error) { return NilVal, errors.New("key value not number or string") } - has := val.HasIndex(s.Key) + // This value needs to be stripped of marks to check True(), but Index will + // apply the correct marks for the result. + has, _ := val.HasIndex(s.Key).Unmark() if !has.IsKnown() { return UnknownVal(val.Type().ElementType()), nil } diff --git a/vendor/golang.org/x/crypto/argon2/argon2.go b/vendor/golang.org/x/crypto/argon2/argon2.go new file mode 100644 index 0000000000000..29f0a2de4514b --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/argon2.go @@ -0,0 +1,283 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package argon2 implements the key derivation function Argon2. +// Argon2 was selected as the winner of the Password Hashing Competition and can +// be used to derive cryptographic keys from passwords. +// +// For a detailed specification of Argon2 see [1]. +// +// If you aren't sure which function you need, use Argon2id (IDKey) and +// the parameter recommendations for your scenario. +// +// # Argon2i +// +// Argon2i (implemented by Key) is the side-channel resistant version of Argon2. +// It uses data-independent memory access, which is preferred for password +// hashing and password-based key derivation. Argon2i requires more passes over +// memory than Argon2id to protect from trade-off attacks. The recommended +// parameters (taken from [2]) for non-interactive operations are time=3 and to +// use the maximum available memory. +// +// # Argon2id +// +// Argon2id (implemented by IDKey) is a hybrid version of Argon2 combining +// Argon2i and Argon2d. It uses data-independent memory access for the first +// half of the first iteration over the memory and data-dependent memory access +// for the rest. Argon2id is side-channel resistant and provides better brute- +// force cost savings due to time-memory tradeoffs than Argon2i. The recommended +// parameters for non-interactive operations (taken from [2]) are time=1 and to +// use the maximum available memory. +// +// [1] https://github.com/P-H-C/phc-winner-argon2/blob/master/argon2-specs.pdf +// [2] https://tools.ietf.org/html/draft-irtf-cfrg-argon2-03#section-9.3 +package argon2 + +import ( + "encoding/binary" + "sync" + + "golang.org/x/crypto/blake2b" +) + +// The Argon2 version implemented by this package. +const Version = 0x13 + +const ( + argon2d = iota + argon2i + argon2id +) + +// Key derives a key from the password, salt, and cost parameters using Argon2i +// returning a byte slice of length keyLen that can be used as cryptographic +// key. The CPU cost and parallelism degree must be greater than zero. +// +// For example, you can get a derived key for e.g. AES-256 (which needs a +// 32-byte key) by doing: +// +// key := argon2.Key([]byte("some password"), salt, 3, 32*1024, 4, 32) +// +// The draft RFC recommends[2] time=3, and memory=32*1024 is a sensible number. +// If using that amount of memory (32 MB) is not possible in some contexts then +// the time parameter can be increased to compensate. +// +// The time parameter specifies the number of passes over the memory and the +// memory parameter specifies the size of the memory in KiB. For example +// memory=32*1024 sets the memory cost to ~32 MB. The number of threads can be +// adjusted to the number of available CPUs. The cost parameters should be +// increased as memory latency and CPU parallelism increases. Remember to get a +// good random salt. +func Key(password, salt []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { + return deriveKey(argon2i, password, salt, nil, nil, time, memory, threads, keyLen) +} + +// IDKey derives a key from the password, salt, and cost parameters using +// Argon2id returning a byte slice of length keyLen that can be used as +// cryptographic key. The CPU cost and parallelism degree must be greater than +// zero. +// +// For example, you can get a derived key for e.g. AES-256 (which needs a +// 32-byte key) by doing: +// +// key := argon2.IDKey([]byte("some password"), salt, 1, 64*1024, 4, 32) +// +// The draft RFC recommends[2] time=1, and memory=64*1024 is a sensible number. +// If using that amount of memory (64 MB) is not possible in some contexts then +// the time parameter can be increased to compensate. +// +// The time parameter specifies the number of passes over the memory and the +// memory parameter specifies the size of the memory in KiB. For example +// memory=64*1024 sets the memory cost to ~64 MB. The number of threads can be +// adjusted to the numbers of available CPUs. The cost parameters should be +// increased as memory latency and CPU parallelism increases. Remember to get a +// good random salt. +func IDKey(password, salt []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { + return deriveKey(argon2id, password, salt, nil, nil, time, memory, threads, keyLen) +} + +func deriveKey(mode int, password, salt, secret, data []byte, time, memory uint32, threads uint8, keyLen uint32) []byte { + if time < 1 { + panic("argon2: number of rounds too small") + } + if threads < 1 { + panic("argon2: parallelism degree too low") + } + h0 := initHash(password, salt, secret, data, time, memory, uint32(threads), keyLen, mode) + + memory = memory / (syncPoints * uint32(threads)) * (syncPoints * uint32(threads)) + if memory < 2*syncPoints*uint32(threads) { + memory = 2 * syncPoints * uint32(threads) + } + B := initBlocks(&h0, memory, uint32(threads)) + processBlocks(B, time, memory, uint32(threads), mode) + return extractKey(B, memory, uint32(threads), keyLen) +} + +const ( + blockLength = 128 + syncPoints = 4 +) + +type block [blockLength]uint64 + +func initHash(password, salt, key, data []byte, time, memory, threads, keyLen uint32, mode int) [blake2b.Size + 8]byte { + var ( + h0 [blake2b.Size + 8]byte + params [24]byte + tmp [4]byte + ) + + b2, _ := blake2b.New512(nil) + binary.LittleEndian.PutUint32(params[0:4], threads) + binary.LittleEndian.PutUint32(params[4:8], keyLen) + binary.LittleEndian.PutUint32(params[8:12], memory) + binary.LittleEndian.PutUint32(params[12:16], time) + binary.LittleEndian.PutUint32(params[16:20], uint32(Version)) + binary.LittleEndian.PutUint32(params[20:24], uint32(mode)) + b2.Write(params[:]) + binary.LittleEndian.PutUint32(tmp[:], uint32(len(password))) + b2.Write(tmp[:]) + b2.Write(password) + binary.LittleEndian.PutUint32(tmp[:], uint32(len(salt))) + b2.Write(tmp[:]) + b2.Write(salt) + binary.LittleEndian.PutUint32(tmp[:], uint32(len(key))) + b2.Write(tmp[:]) + b2.Write(key) + binary.LittleEndian.PutUint32(tmp[:], uint32(len(data))) + b2.Write(tmp[:]) + b2.Write(data) + b2.Sum(h0[:0]) + return h0 +} + +func initBlocks(h0 *[blake2b.Size + 8]byte, memory, threads uint32) []block { + var block0 [1024]byte + B := make([]block, memory) + for lane := uint32(0); lane < threads; lane++ { + j := lane * (memory / threads) + binary.LittleEndian.PutUint32(h0[blake2b.Size+4:], lane) + + binary.LittleEndian.PutUint32(h0[blake2b.Size:], 0) + blake2bHash(block0[:], h0[:]) + for i := range B[j+0] { + B[j+0][i] = binary.LittleEndian.Uint64(block0[i*8:]) + } + + binary.LittleEndian.PutUint32(h0[blake2b.Size:], 1) + blake2bHash(block0[:], h0[:]) + for i := range B[j+1] { + B[j+1][i] = binary.LittleEndian.Uint64(block0[i*8:]) + } + } + return B +} + +func processBlocks(B []block, time, memory, threads uint32, mode int) { + lanes := memory / threads + segments := lanes / syncPoints + + processSegment := func(n, slice, lane uint32, wg *sync.WaitGroup) { + var addresses, in, zero block + if mode == argon2i || (mode == argon2id && n == 0 && slice < syncPoints/2) { + in[0] = uint64(n) + in[1] = uint64(lane) + in[2] = uint64(slice) + in[3] = uint64(memory) + in[4] = uint64(time) + in[5] = uint64(mode) + } + + index := uint32(0) + if n == 0 && slice == 0 { + index = 2 // we have already generated the first two blocks + if mode == argon2i || mode == argon2id { + in[6]++ + processBlock(&addresses, &in, &zero) + processBlock(&addresses, &addresses, &zero) + } + } + + offset := lane*lanes + slice*segments + index + var random uint64 + for index < segments { + prev := offset - 1 + if index == 0 && slice == 0 { + prev += lanes // last block in lane + } + if mode == argon2i || (mode == argon2id && n == 0 && slice < syncPoints/2) { + if index%blockLength == 0 { + in[6]++ + processBlock(&addresses, &in, &zero) + processBlock(&addresses, &addresses, &zero) + } + random = addresses[index%blockLength] + } else { + random = B[prev][0] + } + newOffset := indexAlpha(random, lanes, segments, threads, n, slice, lane, index) + processBlockXOR(&B[offset], &B[prev], &B[newOffset]) + index, offset = index+1, offset+1 + } + wg.Done() + } + + for n := uint32(0); n < time; n++ { + for slice := uint32(0); slice < syncPoints; slice++ { + var wg sync.WaitGroup + for lane := uint32(0); lane < threads; lane++ { + wg.Add(1) + go processSegment(n, slice, lane, &wg) + } + wg.Wait() + } + } + +} + +func extractKey(B []block, memory, threads, keyLen uint32) []byte { + lanes := memory / threads + for lane := uint32(0); lane < threads-1; lane++ { + for i, v := range B[(lane*lanes)+lanes-1] { + B[memory-1][i] ^= v + } + } + + var block [1024]byte + for i, v := range B[memory-1] { + binary.LittleEndian.PutUint64(block[i*8:], v) + } + key := make([]byte, keyLen) + blake2bHash(key, block[:]) + return key +} + +func indexAlpha(rand uint64, lanes, segments, threads, n, slice, lane, index uint32) uint32 { + refLane := uint32(rand>>32) % threads + if n == 0 && slice == 0 { + refLane = lane + } + m, s := 3*segments, ((slice+1)%syncPoints)*segments + if lane == refLane { + m += index + } + if n == 0 { + m, s = slice*segments, 0 + if slice == 0 || lane == refLane { + m += index + } + } + if index == 0 || lane == refLane { + m-- + } + return phi(rand, uint64(m), uint64(s), refLane, lanes) +} + +func phi(rand, m, s uint64, lane, lanes uint32) uint32 { + p := rand & 0xFFFFFFFF + p = (p * p) >> 32 + p = (p * m) >> 32 + return lane*lanes + uint32((s+m-(p+1))%uint64(lanes)) +} diff --git a/vendor/golang.org/x/crypto/argon2/blake2b.go b/vendor/golang.org/x/crypto/argon2/blake2b.go new file mode 100644 index 0000000000000..10f46948dc105 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blake2b.go @@ -0,0 +1,53 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package argon2 + +import ( + "encoding/binary" + "hash" + + "golang.org/x/crypto/blake2b" +) + +// blake2bHash computes an arbitrary long hash value of in +// and writes the hash to out. +func blake2bHash(out []byte, in []byte) { + var b2 hash.Hash + if n := len(out); n < blake2b.Size { + b2, _ = blake2b.New(n, nil) + } else { + b2, _ = blake2b.New512(nil) + } + + var buffer [blake2b.Size]byte + binary.LittleEndian.PutUint32(buffer[:4], uint32(len(out))) + b2.Write(buffer[:4]) + b2.Write(in) + + if len(out) <= blake2b.Size { + b2.Sum(out[:0]) + return + } + + outLen := len(out) + b2.Sum(buffer[:0]) + b2.Reset() + copy(out, buffer[:32]) + out = out[32:] + for len(out) > blake2b.Size { + b2.Write(buffer[:]) + b2.Sum(buffer[:0]) + copy(out, buffer[:32]) + out = out[32:] + b2.Reset() + } + + if outLen%blake2b.Size > 0 { // outLen > 64 + r := ((outLen + 31) / 32) - 2 // ⌈τ /32⌉-2 + b2, _ = blake2b.New(outLen-32*r, nil) + } + b2.Write(buffer[:]) + b2.Sum(out[:0]) +} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_amd64.go b/vendor/golang.org/x/crypto/argon2/blamka_amd64.go new file mode 100644 index 0000000000000..a014ac92aa9f3 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_amd64.go @@ -0,0 +1,61 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build amd64 && gc && !purego +// +build amd64,gc,!purego + +package argon2 + +import "golang.org/x/sys/cpu" + +func init() { + useSSE4 = cpu.X86.HasSSE41 +} + +//go:noescape +func mixBlocksSSE2(out, a, b, c *block) + +//go:noescape +func xorBlocksSSE2(out, a, b, c *block) + +//go:noescape +func blamkaSSE4(b *block) + +func processBlockSSE(out, in1, in2 *block, xor bool) { + var t block + mixBlocksSSE2(&t, in1, in2, &t) + if useSSE4 { + blamkaSSE4(&t) + } else { + for i := 0; i < blockLength; i += 16 { + blamkaGeneric( + &t[i+0], &t[i+1], &t[i+2], &t[i+3], + &t[i+4], &t[i+5], &t[i+6], &t[i+7], + &t[i+8], &t[i+9], &t[i+10], &t[i+11], + &t[i+12], &t[i+13], &t[i+14], &t[i+15], + ) + } + for i := 0; i < blockLength/8; i += 2 { + blamkaGeneric( + &t[i], &t[i+1], &t[16+i], &t[16+i+1], + &t[32+i], &t[32+i+1], &t[48+i], &t[48+i+1], + &t[64+i], &t[64+i+1], &t[80+i], &t[80+i+1], + &t[96+i], &t[96+i+1], &t[112+i], &t[112+i+1], + ) + } + } + if xor { + xorBlocksSSE2(out, in1, in2, &t) + } else { + mixBlocksSSE2(out, in1, in2, &t) + } +} + +func processBlock(out, in1, in2 *block) { + processBlockSSE(out, in1, in2, false) +} + +func processBlockXOR(out, in1, in2 *block) { + processBlockSSE(out, in1, in2, true) +} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_amd64.s b/vendor/golang.org/x/crypto/argon2/blamka_amd64.s new file mode 100644 index 0000000000000..b2cc0515049a7 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_amd64.s @@ -0,0 +1,244 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build amd64 && gc && !purego +// +build amd64,gc,!purego + +#include "textflag.h" + +DATA ·c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·c48<>(SB), (NOPTR+RODATA), $16 + +#define SHUFFLE(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v6, t1; \ + PUNPCKLQDQ v6, t2; \ + PUNPCKHQDQ v7, v6; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ v7, t2; \ + MOVO t1, v7; \ + MOVO v2, t1; \ + PUNPCKHQDQ t2, v7; \ + PUNPCKLQDQ v3, t2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v3 + +#define SHUFFLE_INV(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v2, t1; \ + PUNPCKLQDQ v2, t2; \ + PUNPCKHQDQ v3, v2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ v3, t2; \ + MOVO t1, v3; \ + MOVO v6, t1; \ + PUNPCKHQDQ t2, v3; \ + PUNPCKLQDQ v7, t2; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v7 + +#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, t0, c40, c48) \ + MOVO v0, t0; \ + PMULULQ v2, t0; \ + PADDQ v2, v0; \ + PADDQ t0, v0; \ + PADDQ t0, v0; \ + PXOR v0, v6; \ + PSHUFD $0xB1, v6, v6; \ + MOVO v4, t0; \ + PMULULQ v6, t0; \ + PADDQ v6, v4; \ + PADDQ t0, v4; \ + PADDQ t0, v4; \ + PXOR v4, v2; \ + PSHUFB c40, v2; \ + MOVO v0, t0; \ + PMULULQ v2, t0; \ + PADDQ v2, v0; \ + PADDQ t0, v0; \ + PADDQ t0, v0; \ + PXOR v0, v6; \ + PSHUFB c48, v6; \ + MOVO v4, t0; \ + PMULULQ v6, t0; \ + PADDQ v6, v4; \ + PADDQ t0, v4; \ + PADDQ t0, v4; \ + PXOR v4, v2; \ + MOVO v2, t0; \ + PADDQ v2, t0; \ + PSRLQ $63, v2; \ + PXOR t0, v2; \ + MOVO v1, t0; \ + PMULULQ v3, t0; \ + PADDQ v3, v1; \ + PADDQ t0, v1; \ + PADDQ t0, v1; \ + PXOR v1, v7; \ + PSHUFD $0xB1, v7, v7; \ + MOVO v5, t0; \ + PMULULQ v7, t0; \ + PADDQ v7, v5; \ + PADDQ t0, v5; \ + PADDQ t0, v5; \ + PXOR v5, v3; \ + PSHUFB c40, v3; \ + MOVO v1, t0; \ + PMULULQ v3, t0; \ + PADDQ v3, v1; \ + PADDQ t0, v1; \ + PADDQ t0, v1; \ + PXOR v1, v7; \ + PSHUFB c48, v7; \ + MOVO v5, t0; \ + PMULULQ v7, t0; \ + PADDQ v7, v5; \ + PADDQ t0, v5; \ + PADDQ t0, v5; \ + PXOR v5, v3; \ + MOVO v3, t0; \ + PADDQ v3, t0; \ + PSRLQ $63, v3; \ + PXOR t0, v3 + +#define LOAD_MSG_0(block, off) \ + MOVOU 8*(off+0)(block), X0; \ + MOVOU 8*(off+2)(block), X1; \ + MOVOU 8*(off+4)(block), X2; \ + MOVOU 8*(off+6)(block), X3; \ + MOVOU 8*(off+8)(block), X4; \ + MOVOU 8*(off+10)(block), X5; \ + MOVOU 8*(off+12)(block), X6; \ + MOVOU 8*(off+14)(block), X7 + +#define STORE_MSG_0(block, off) \ + MOVOU X0, 8*(off+0)(block); \ + MOVOU X1, 8*(off+2)(block); \ + MOVOU X2, 8*(off+4)(block); \ + MOVOU X3, 8*(off+6)(block); \ + MOVOU X4, 8*(off+8)(block); \ + MOVOU X5, 8*(off+10)(block); \ + MOVOU X6, 8*(off+12)(block); \ + MOVOU X7, 8*(off+14)(block) + +#define LOAD_MSG_1(block, off) \ + MOVOU 8*off+0*8(block), X0; \ + MOVOU 8*off+16*8(block), X1; \ + MOVOU 8*off+32*8(block), X2; \ + MOVOU 8*off+48*8(block), X3; \ + MOVOU 8*off+64*8(block), X4; \ + MOVOU 8*off+80*8(block), X5; \ + MOVOU 8*off+96*8(block), X6; \ + MOVOU 8*off+112*8(block), X7 + +#define STORE_MSG_1(block, off) \ + MOVOU X0, 8*off+0*8(block); \ + MOVOU X1, 8*off+16*8(block); \ + MOVOU X2, 8*off+32*8(block); \ + MOVOU X3, 8*off+48*8(block); \ + MOVOU X4, 8*off+64*8(block); \ + MOVOU X5, 8*off+80*8(block); \ + MOVOU X6, 8*off+96*8(block); \ + MOVOU X7, 8*off+112*8(block) + +#define BLAMKA_ROUND_0(block, off, t0, t1, c40, c48) \ + LOAD_MSG_0(block, off); \ + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ + SHUFFLE(X2, X3, X4, X5, X6, X7, t0, t1); \ + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, t0, t1); \ + STORE_MSG_0(block, off) + +#define BLAMKA_ROUND_1(block, off, t0, t1, c40, c48) \ + LOAD_MSG_1(block, off); \ + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ + SHUFFLE(X2, X3, X4, X5, X6, X7, t0, t1); \ + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, t0, c40, c48); \ + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, t0, t1); \ + STORE_MSG_1(block, off) + +// func blamkaSSE4(b *block) +TEXT ·blamkaSSE4(SB), 4, $0-8 + MOVQ b+0(FP), AX + + MOVOU ·c40<>(SB), X10 + MOVOU ·c48<>(SB), X11 + + BLAMKA_ROUND_0(AX, 0, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 16, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 32, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 48, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 64, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 80, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 96, X8, X9, X10, X11) + BLAMKA_ROUND_0(AX, 112, X8, X9, X10, X11) + + BLAMKA_ROUND_1(AX, 0, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 2, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 4, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 6, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 8, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 10, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 12, X8, X9, X10, X11) + BLAMKA_ROUND_1(AX, 14, X8, X9, X10, X11) + RET + +// func mixBlocksSSE2(out, a, b, c *block) +TEXT ·mixBlocksSSE2(SB), 4, $0-32 + MOVQ out+0(FP), DX + MOVQ a+8(FP), AX + MOVQ b+16(FP), BX + MOVQ a+24(FP), CX + MOVQ $128, BP + +loop: + MOVOU 0(AX), X0 + MOVOU 0(BX), X1 + MOVOU 0(CX), X2 + PXOR X1, X0 + PXOR X2, X0 + MOVOU X0, 0(DX) + ADDQ $16, AX + ADDQ $16, BX + ADDQ $16, CX + ADDQ $16, DX + SUBQ $2, BP + JA loop + RET + +// func xorBlocksSSE2(out, a, b, c *block) +TEXT ·xorBlocksSSE2(SB), 4, $0-32 + MOVQ out+0(FP), DX + MOVQ a+8(FP), AX + MOVQ b+16(FP), BX + MOVQ a+24(FP), CX + MOVQ $128, BP + +loop: + MOVOU 0(AX), X0 + MOVOU 0(BX), X1 + MOVOU 0(CX), X2 + MOVOU 0(DX), X3 + PXOR X1, X0 + PXOR X2, X0 + PXOR X3, X0 + MOVOU X0, 0(DX) + ADDQ $16, AX + ADDQ $16, BX + ADDQ $16, CX + ADDQ $16, DX + SUBQ $2, BP + JA loop + RET diff --git a/vendor/golang.org/x/crypto/argon2/blamka_generic.go b/vendor/golang.org/x/crypto/argon2/blamka_generic.go new file mode 100644 index 0000000000000..a481b2243f855 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_generic.go @@ -0,0 +1,163 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package argon2 + +var useSSE4 bool + +func processBlockGeneric(out, in1, in2 *block, xor bool) { + var t block + for i := range t { + t[i] = in1[i] ^ in2[i] + } + for i := 0; i < blockLength; i += 16 { + blamkaGeneric( + &t[i+0], &t[i+1], &t[i+2], &t[i+3], + &t[i+4], &t[i+5], &t[i+6], &t[i+7], + &t[i+8], &t[i+9], &t[i+10], &t[i+11], + &t[i+12], &t[i+13], &t[i+14], &t[i+15], + ) + } + for i := 0; i < blockLength/8; i += 2 { + blamkaGeneric( + &t[i], &t[i+1], &t[16+i], &t[16+i+1], + &t[32+i], &t[32+i+1], &t[48+i], &t[48+i+1], + &t[64+i], &t[64+i+1], &t[80+i], &t[80+i+1], + &t[96+i], &t[96+i+1], &t[112+i], &t[112+i+1], + ) + } + if xor { + for i := range t { + out[i] ^= in1[i] ^ in2[i] ^ t[i] + } + } else { + for i := range t { + out[i] = in1[i] ^ in2[i] ^ t[i] + } + } +} + +func blamkaGeneric(t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, t11, t12, t13, t14, t15 *uint64) { + v00, v01, v02, v03 := *t00, *t01, *t02, *t03 + v04, v05, v06, v07 := *t04, *t05, *t06, *t07 + v08, v09, v10, v11 := *t08, *t09, *t10, *t11 + v12, v13, v14, v15 := *t12, *t13, *t14, *t15 + + v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04)) + v12 ^= v00 + v12 = v12>>32 | v12<<32 + v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12)) + v04 ^= v08 + v04 = v04>>24 | v04<<40 + + v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04)) + v12 ^= v00 + v12 = v12>>16 | v12<<48 + v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12)) + v04 ^= v08 + v04 = v04>>63 | v04<<1 + + v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05)) + v13 ^= v01 + v13 = v13>>32 | v13<<32 + v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13)) + v05 ^= v09 + v05 = v05>>24 | v05<<40 + + v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05)) + v13 ^= v01 + v13 = v13>>16 | v13<<48 + v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13)) + v05 ^= v09 + v05 = v05>>63 | v05<<1 + + v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06)) + v14 ^= v02 + v14 = v14>>32 | v14<<32 + v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14)) + v06 ^= v10 + v06 = v06>>24 | v06<<40 + + v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06)) + v14 ^= v02 + v14 = v14>>16 | v14<<48 + v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14)) + v06 ^= v10 + v06 = v06>>63 | v06<<1 + + v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07)) + v15 ^= v03 + v15 = v15>>32 | v15<<32 + v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15)) + v07 ^= v11 + v07 = v07>>24 | v07<<40 + + v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07)) + v15 ^= v03 + v15 = v15>>16 | v15<<48 + v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15)) + v07 ^= v11 + v07 = v07>>63 | v07<<1 + + v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05)) + v15 ^= v00 + v15 = v15>>32 | v15<<32 + v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15)) + v05 ^= v10 + v05 = v05>>24 | v05<<40 + + v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05)) + v15 ^= v00 + v15 = v15>>16 | v15<<48 + v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15)) + v05 ^= v10 + v05 = v05>>63 | v05<<1 + + v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06)) + v12 ^= v01 + v12 = v12>>32 | v12<<32 + v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12)) + v06 ^= v11 + v06 = v06>>24 | v06<<40 + + v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06)) + v12 ^= v01 + v12 = v12>>16 | v12<<48 + v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12)) + v06 ^= v11 + v06 = v06>>63 | v06<<1 + + v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07)) + v13 ^= v02 + v13 = v13>>32 | v13<<32 + v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13)) + v07 ^= v08 + v07 = v07>>24 | v07<<40 + + v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07)) + v13 ^= v02 + v13 = v13>>16 | v13<<48 + v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13)) + v07 ^= v08 + v07 = v07>>63 | v07<<1 + + v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04)) + v14 ^= v03 + v14 = v14>>32 | v14<<32 + v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14)) + v04 ^= v09 + v04 = v04>>24 | v04<<40 + + v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04)) + v14 ^= v03 + v14 = v14>>16 | v14<<48 + v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14)) + v04 ^= v09 + v04 = v04>>63 | v04<<1 + + *t00, *t01, *t02, *t03 = v00, v01, v02, v03 + *t04, *t05, *t06, *t07 = v04, v05, v06, v07 + *t08, *t09, *t10, *t11 = v08, v09, v10, v11 + *t12, *t13, *t14, *t15 = v12, v13, v14, v15 +} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_ref.go b/vendor/golang.org/x/crypto/argon2/blamka_ref.go new file mode 100644 index 0000000000000..167c59d2d5ab7 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_ref.go @@ -0,0 +1,16 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !amd64 || purego || !gc +// +build !amd64 purego !gc + +package argon2 + +func processBlock(out, in1, in2 *block) { + processBlockGeneric(out, in1, in2, false) +} + +func processBlockXOR(out, in1, in2 *block) { + processBlockGeneric(out, in1, in2, true) +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b.go b/vendor/golang.org/x/crypto/blake2b/blake2b.go new file mode 100644 index 0000000000000..d2e98d4295bdb --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b.go @@ -0,0 +1,291 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 +// and the extendable output function (XOF) BLAKE2Xb. +// +// BLAKE2b is optimized for 64-bit platforms—including NEON-enabled ARMs—and +// produces digests of any size between 1 and 64 bytes. +// For a detailed specification of BLAKE2b see https://blake2.net/blake2.pdf +// and for BLAKE2Xb see https://blake2.net/blake2x.pdf +// +// If you aren't sure which function you need, use BLAKE2b (Sum512 or New512). +// If you need a secret-key MAC (message authentication code), use the New512 +// function with a non-nil key. +// +// BLAKE2X is a construction to compute hash values larger than 64 bytes. It +// can produce hash values between 0 and 4 GiB. +package blake2b + +import ( + "encoding/binary" + "errors" + "hash" +) + +const ( + // The blocksize of BLAKE2b in bytes. + BlockSize = 128 + // The hash size of BLAKE2b-512 in bytes. + Size = 64 + // The hash size of BLAKE2b-384 in bytes. + Size384 = 48 + // The hash size of BLAKE2b-256 in bytes. + Size256 = 32 +) + +var ( + useAVX2 bool + useAVX bool + useSSE4 bool +) + +var ( + errKeySize = errors.New("blake2b: invalid key size") + errHashSize = errors.New("blake2b: invalid hash size") +) + +var iv = [8]uint64{ + 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, + 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, +} + +// Sum512 returns the BLAKE2b-512 checksum of the data. +func Sum512(data []byte) [Size]byte { + var sum [Size]byte + checkSum(&sum, Size, data) + return sum +} + +// Sum384 returns the BLAKE2b-384 checksum of the data. +func Sum384(data []byte) [Size384]byte { + var sum [Size]byte + var sum384 [Size384]byte + checkSum(&sum, Size384, data) + copy(sum384[:], sum[:Size384]) + return sum384 +} + +// Sum256 returns the BLAKE2b-256 checksum of the data. +func Sum256(data []byte) [Size256]byte { + var sum [Size]byte + var sum256 [Size256]byte + checkSum(&sum, Size256, data) + copy(sum256[:], sum[:Size256]) + return sum256 +} + +// New512 returns a new hash.Hash computing the BLAKE2b-512 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New512(key []byte) (hash.Hash, error) { return newDigest(Size, key) } + +// New384 returns a new hash.Hash computing the BLAKE2b-384 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New384(key []byte) (hash.Hash, error) { return newDigest(Size384, key) } + +// New256 returns a new hash.Hash computing the BLAKE2b-256 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New256(key []byte) (hash.Hash, error) { return newDigest(Size256, key) } + +// New returns a new hash.Hash computing the BLAKE2b checksum with a custom length. +// A non-nil key turns the hash into a MAC. The key must be between zero and 64 bytes long. +// The hash size can be a value between 1 and 64 but it is highly recommended to use +// values equal or greater than: +// - 32 if BLAKE2b is used as a hash function (The key is zero bytes long). +// - 16 if BLAKE2b is used as a MAC function (The key is at least 16 bytes long). +// When the key is nil, the returned hash.Hash implements BinaryMarshaler +// and BinaryUnmarshaler for state (de)serialization as documented by hash.Hash. +func New(size int, key []byte) (hash.Hash, error) { return newDigest(size, key) } + +func newDigest(hashSize int, key []byte) (*digest, error) { + if hashSize < 1 || hashSize > Size { + return nil, errHashSize + } + if len(key) > Size { + return nil, errKeySize + } + d := &digest{ + size: hashSize, + keyLen: len(key), + } + copy(d.key[:], key) + d.Reset() + return d, nil +} + +func checkSum(sum *[Size]byte, hashSize int, data []byte) { + h := iv + h[0] ^= uint64(hashSize) | (1 << 16) | (1 << 24) + var c [2]uint64 + + if length := len(data); length > BlockSize { + n := length &^ (BlockSize - 1) + if length == n { + n -= BlockSize + } + hashBlocks(&h, &c, 0, data[:n]) + data = data[n:] + } + + var block [BlockSize]byte + offset := copy(block[:], data) + remaining := uint64(BlockSize - offset) + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) + + for i, v := range h[:(hashSize+7)/8] { + binary.LittleEndian.PutUint64(sum[8*i:], v) + } +} + +type digest struct { + h [8]uint64 + c [2]uint64 + size int + block [BlockSize]byte + offset int + + key [BlockSize]byte + keyLen int +} + +const ( + magic = "b2b" + marshaledSize = len(magic) + 8*8 + 2*8 + 1 + BlockSize + 1 +) + +func (d *digest) MarshalBinary() ([]byte, error) { + if d.keyLen != 0 { + return nil, errors.New("crypto/blake2b: cannot marshal MACs") + } + b := make([]byte, 0, marshaledSize) + b = append(b, magic...) + for i := 0; i < 8; i++ { + b = appendUint64(b, d.h[i]) + } + b = appendUint64(b, d.c[0]) + b = appendUint64(b, d.c[1]) + // Maximum value for size is 64 + b = append(b, byte(d.size)) + b = append(b, d.block[:]...) + b = append(b, byte(d.offset)) + return b, nil +} + +func (d *digest) UnmarshalBinary(b []byte) error { + if len(b) < len(magic) || string(b[:len(magic)]) != magic { + return errors.New("crypto/blake2b: invalid hash state identifier") + } + if len(b) != marshaledSize { + return errors.New("crypto/blake2b: invalid hash state size") + } + b = b[len(magic):] + for i := 0; i < 8; i++ { + b, d.h[i] = consumeUint64(b) + } + b, d.c[0] = consumeUint64(b) + b, d.c[1] = consumeUint64(b) + d.size = int(b[0]) + b = b[1:] + copy(d.block[:], b[:BlockSize]) + b = b[BlockSize:] + d.offset = int(b[0]) + return nil +} + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Size() int { return d.size } + +func (d *digest) Reset() { + d.h = iv + d.h[0] ^= uint64(d.size) | (uint64(d.keyLen) << 8) | (1 << 16) | (1 << 24) + d.offset, d.c[0], d.c[1] = 0, 0, 0 + if d.keyLen > 0 { + d.block = d.key + d.offset = BlockSize + } +} + +func (d *digest) Write(p []byte) (n int, err error) { + n = len(p) + + if d.offset > 0 { + remaining := BlockSize - d.offset + if n <= remaining { + d.offset += copy(d.block[d.offset:], p) + return + } + copy(d.block[d.offset:], p[:remaining]) + hashBlocks(&d.h, &d.c, 0, d.block[:]) + d.offset = 0 + p = p[remaining:] + } + + if length := len(p); length > BlockSize { + nn := length &^ (BlockSize - 1) + if length == nn { + nn -= BlockSize + } + hashBlocks(&d.h, &d.c, 0, p[:nn]) + p = p[nn:] + } + + if len(p) > 0 { + d.offset += copy(d.block[:], p) + } + + return +} + +func (d *digest) Sum(sum []byte) []byte { + var hash [Size]byte + d.finalize(&hash) + return append(sum, hash[:d.size]...) +} + +func (d *digest) finalize(hash *[Size]byte) { + var block [BlockSize]byte + copy(block[:], d.block[:d.offset]) + remaining := uint64(BlockSize - d.offset) + + c := d.c + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + h := d.h + hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) + + for i, v := range h { + binary.LittleEndian.PutUint64(hash[8*i:], v) + } +} + +func appendUint64(b []byte, x uint64) []byte { + var a [8]byte + binary.BigEndian.PutUint64(a[:], x) + return append(b, a[:]...) +} + +func appendUint32(b []byte, x uint32) []byte { + var a [4]byte + binary.BigEndian.PutUint32(a[:], x) + return append(b, a[:]...) +} + +func consumeUint64(b []byte) ([]byte, uint64) { + x := binary.BigEndian.Uint64(b) + return b[8:], x +} + +func consumeUint32(b []byte) ([]byte, uint32) { + x := binary.BigEndian.Uint32(b) + return b[4:], x +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go new file mode 100644 index 0000000000000..56bfaaa17da6d --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go @@ -0,0 +1,38 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.7 && amd64 && gc && !purego +// +build go1.7,amd64,gc,!purego + +package blake2b + +import "golang.org/x/sys/cpu" + +func init() { + useAVX2 = cpu.X86.HasAVX2 + useAVX = cpu.X86.HasAVX + useSSE4 = cpu.X86.HasSSE41 +} + +//go:noescape +func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +//go:noescape +func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +//go:noescape +func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + switch { + case useAVX2: + hashBlocksAVX2(h, c, flag, blocks) + case useAVX: + hashBlocksAVX(h, c, flag, blocks) + case useSSE4: + hashBlocksSSE4(h, c, flag, blocks) + default: + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s new file mode 100644 index 0000000000000..4b9daa18d9d9c --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s @@ -0,0 +1,745 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.7 && amd64 && gc && !purego +// +build go1.7,amd64,gc,!purego + +#include "textflag.h" + +DATA ·AVX2_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·AVX2_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +DATA ·AVX2_iv0<>+0x10(SB)/8, $0x3c6ef372fe94f82b +DATA ·AVX2_iv0<>+0x18(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·AVX2_iv0<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_iv1<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·AVX2_iv1<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +DATA ·AVX2_iv1<>+0x10(SB)/8, $0x1f83d9abfb41bd6b +DATA ·AVX2_iv1<>+0x18(SB)/8, $0x5be0cd19137e2179 +GLOBL ·AVX2_iv1<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·AVX2_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +DATA ·AVX2_c40<>+0x10(SB)/8, $0x0201000706050403 +DATA ·AVX2_c40<>+0x18(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·AVX2_c40<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·AVX2_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +DATA ·AVX2_c48<>+0x10(SB)/8, $0x0100070605040302 +DATA ·AVX2_c48<>+0x18(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·AVX2_c48<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·AVX_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +GLOBL ·AVX_iv0<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b +DATA ·AVX_iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·AVX_iv1<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv2<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·AVX_iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·AVX_iv2<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b +DATA ·AVX_iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 +GLOBL ·AVX_iv3<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·AVX_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·AVX_c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·AVX_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·AVX_c48<>(SB), (NOPTR+RODATA), $16 + +#define VPERMQ_0x39_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x39 +#define VPERMQ_0x93_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x93 +#define VPERMQ_0x4E_Y2_Y2 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xd2; BYTE $0x4e +#define VPERMQ_0x93_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x93 +#define VPERMQ_0x39_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x39 + +#define ROUND_AVX2(m0, m1, m2, m3, t, c40, c48) \ + VPADDQ m0, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFD $-79, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPSHUFB c40, Y1, Y1; \ + VPADDQ m1, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFB c48, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPADDQ Y1, Y1, t; \ + VPSRLQ $63, Y1, Y1; \ + VPXOR t, Y1, Y1; \ + VPERMQ_0x39_Y1_Y1; \ + VPERMQ_0x4E_Y2_Y2; \ + VPERMQ_0x93_Y3_Y3; \ + VPADDQ m2, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFD $-79, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPSHUFB c40, Y1, Y1; \ + VPADDQ m3, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFB c48, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPADDQ Y1, Y1, t; \ + VPSRLQ $63, Y1, Y1; \ + VPXOR t, Y1, Y1; \ + VPERMQ_0x39_Y3_Y3; \ + VPERMQ_0x4E_Y2_Y2; \ + VPERMQ_0x93_Y1_Y1 + +#define VMOVQ_SI_X11_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x1E +#define VMOVQ_SI_X12_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x26 +#define VMOVQ_SI_X13_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x2E +#define VMOVQ_SI_X14_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x36 +#define VMOVQ_SI_X15_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x3E + +#define VMOVQ_SI_X11(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x5E; BYTE $n +#define VMOVQ_SI_X12(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x66; BYTE $n +#define VMOVQ_SI_X13(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x6E; BYTE $n +#define VMOVQ_SI_X14(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x76; BYTE $n +#define VMOVQ_SI_X15(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x7E; BYTE $n + +#define VPINSRQ_1_SI_X11_0 BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x1E; BYTE $0x01 +#define VPINSRQ_1_SI_X12_0 BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x26; BYTE $0x01 +#define VPINSRQ_1_SI_X13_0 BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x2E; BYTE $0x01 +#define VPINSRQ_1_SI_X14_0 BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x36; BYTE $0x01 +#define VPINSRQ_1_SI_X15_0 BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x3E; BYTE $0x01 + +#define VPINSRQ_1_SI_X11(n) BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x5E; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X12(n) BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x66; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X13(n) BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x6E; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X14(n) BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x76; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X15(n) BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x7E; BYTE $n; BYTE $0x01 + +#define VMOVQ_R8_X15 BYTE $0xC4; BYTE $0x41; BYTE $0xF9; BYTE $0x6E; BYTE $0xF8 +#define VPINSRQ_1_R9_X15 BYTE $0xC4; BYTE $0x43; BYTE $0x81; BYTE $0x22; BYTE $0xF9; BYTE $0x01 + +// load msg: Y12 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y12(i0, i1, i2, i3) \ + VMOVQ_SI_X12(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X12(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y12, Y12 + +// load msg: Y13 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y13(i0, i1, i2, i3) \ + VMOVQ_SI_X13(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X13(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y13, Y13 + +// load msg: Y14 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y14(i0, i1, i2, i3) \ + VMOVQ_SI_X14(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X14(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y14, Y14 + +// load msg: Y15 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y15(i0, i1, i2, i3) \ + VMOVQ_SI_X15(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X15(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() \ + VMOVQ_SI_X12_0; \ + VMOVQ_SI_X11(4*8); \ + VPINSRQ_1_SI_X12(2*8); \ + VPINSRQ_1_SI_X11(6*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(1, 3, 5, 7); \ + LOAD_MSG_AVX2_Y14(8, 10, 12, 14); \ + LOAD_MSG_AVX2_Y15(9, 11, 13, 15) + +#define LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() \ + LOAD_MSG_AVX2_Y12(14, 4, 9, 13); \ + LOAD_MSG_AVX2_Y13(10, 8, 15, 6); \ + VMOVQ_SI_X11(11*8); \ + VPSHUFD $0x4E, 0*8(SI), X14; \ + VPINSRQ_1_SI_X11(5*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + LOAD_MSG_AVX2_Y15(12, 2, 7, 3) + +#define LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() \ + VMOVQ_SI_X11(5*8); \ + VMOVDQU 11*8(SI), X12; \ + VPINSRQ_1_SI_X11(15*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + VMOVQ_SI_X13(8*8); \ + VMOVQ_SI_X11(2*8); \ + VPINSRQ_1_SI_X13_0; \ + VPINSRQ_1_SI_X11(13*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(10, 3, 7, 9); \ + LOAD_MSG_AVX2_Y15(14, 6, 1, 4) + +#define LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() \ + LOAD_MSG_AVX2_Y12(7, 3, 13, 11); \ + LOAD_MSG_AVX2_Y13(9, 1, 12, 14); \ + LOAD_MSG_AVX2_Y14(2, 5, 4, 15); \ + VMOVQ_SI_X15(6*8); \ + VMOVQ_SI_X11_0; \ + VPINSRQ_1_SI_X15(10*8); \ + VPINSRQ_1_SI_X11(8*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() \ + LOAD_MSG_AVX2_Y12(9, 5, 2, 10); \ + VMOVQ_SI_X13_0; \ + VMOVQ_SI_X11(4*8); \ + VPINSRQ_1_SI_X13(7*8); \ + VPINSRQ_1_SI_X11(15*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(14, 11, 6, 3); \ + LOAD_MSG_AVX2_Y15(1, 12, 8, 13) + +#define LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X11_0; \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X11(8*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(12, 10, 11, 3); \ + LOAD_MSG_AVX2_Y14(4, 7, 15, 1); \ + LOAD_MSG_AVX2_Y15(13, 5, 14, 9) + +#define LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() \ + LOAD_MSG_AVX2_Y12(12, 1, 14, 4); \ + LOAD_MSG_AVX2_Y13(5, 15, 13, 10); \ + VMOVQ_SI_X14_0; \ + VPSHUFD $0x4E, 8*8(SI), X11; \ + VPINSRQ_1_SI_X14(6*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + LOAD_MSG_AVX2_Y15(7, 3, 2, 11) + +#define LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() \ + LOAD_MSG_AVX2_Y12(13, 7, 12, 3); \ + LOAD_MSG_AVX2_Y13(11, 14, 1, 9); \ + LOAD_MSG_AVX2_Y14(5, 15, 8, 2); \ + VMOVQ_SI_X15_0; \ + VMOVQ_SI_X11(6*8); \ + VPINSRQ_1_SI_X15(4*8); \ + VPINSRQ_1_SI_X11(10*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() \ + VMOVQ_SI_X12(6*8); \ + VMOVQ_SI_X11(11*8); \ + VPINSRQ_1_SI_X12(14*8); \ + VPINSRQ_1_SI_X11_0; \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(15, 9, 3, 8); \ + VMOVQ_SI_X11(1*8); \ + VMOVDQU 12*8(SI), X14; \ + VPINSRQ_1_SI_X11(10*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + VMOVQ_SI_X15(2*8); \ + VMOVDQU 4*8(SI), X11; \ + VPINSRQ_1_SI_X15(7*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() \ + LOAD_MSG_AVX2_Y12(10, 8, 7, 1); \ + VMOVQ_SI_X13(2*8); \ + VPSHUFD $0x4E, 5*8(SI), X11; \ + VPINSRQ_1_SI_X13(4*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(15, 9, 3, 13); \ + VMOVQ_SI_X15(11*8); \ + VMOVQ_SI_X11(12*8); \ + VPINSRQ_1_SI_X15(14*8); \ + VPINSRQ_1_SI_X11_0; \ + VINSERTI128 $1, X11, Y15, Y15 + +// func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksAVX2(SB), 4, $320-48 // frame size = 288 + 32 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, DX + ADDQ $31, DX + ANDQ $~31, DX + + MOVQ CX, 16(DX) + XORQ CX, CX + MOVQ CX, 24(DX) + + VMOVDQU ·AVX2_c40<>(SB), Y4 + VMOVDQU ·AVX2_c48<>(SB), Y5 + + VMOVDQU 0(AX), Y8 + VMOVDQU 32(AX), Y9 + VMOVDQU ·AVX2_iv0<>(SB), Y6 + VMOVDQU ·AVX2_iv1<>(SB), Y7 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + MOVQ R9, 8(DX) + +loop: + ADDQ $128, R8 + MOVQ R8, 0(DX) + CMPQ R8, $128 + JGE noinc + INCQ R9 + MOVQ R9, 8(DX) + +noinc: + VMOVDQA Y8, Y0 + VMOVDQA Y9, Y1 + VMOVDQA Y6, Y2 + VPXOR 0(DX), Y7, Y3 + + LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() + VMOVDQA Y12, 32(DX) + VMOVDQA Y13, 64(DX) + VMOVDQA Y14, 96(DX) + VMOVDQA Y15, 128(DX) + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() + VMOVDQA Y12, 160(DX) + VMOVDQA Y13, 192(DX) + VMOVDQA Y14, 224(DX) + VMOVDQA Y15, 256(DX) + + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + ROUND_AVX2(32(DX), 64(DX), 96(DX), 128(DX), Y10, Y4, Y5) + ROUND_AVX2(160(DX), 192(DX), 224(DX), 256(DX), Y10, Y4, Y5) + + VPXOR Y0, Y8, Y8 + VPXOR Y1, Y9, Y9 + VPXOR Y2, Y8, Y8 + VPXOR Y3, Y9, Y9 + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + + VMOVDQU Y8, 0(AX) + VMOVDQU Y9, 32(AX) + VZEROUPPER + + RET + +#define VPUNPCKLQDQ_X2_X2_X15 BYTE $0xC5; BYTE $0x69; BYTE $0x6C; BYTE $0xFA +#define VPUNPCKLQDQ_X3_X3_X15 BYTE $0xC5; BYTE $0x61; BYTE $0x6C; BYTE $0xFB +#define VPUNPCKLQDQ_X7_X7_X15 BYTE $0xC5; BYTE $0x41; BYTE $0x6C; BYTE $0xFF +#define VPUNPCKLQDQ_X13_X13_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x11; BYTE $0x6C; BYTE $0xFD +#define VPUNPCKLQDQ_X14_X14_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x09; BYTE $0x6C; BYTE $0xFE + +#define VPUNPCKHQDQ_X15_X2_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x69; BYTE $0x6D; BYTE $0xD7 +#define VPUNPCKHQDQ_X15_X3_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xDF +#define VPUNPCKHQDQ_X15_X6_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x49; BYTE $0x6D; BYTE $0xF7 +#define VPUNPCKHQDQ_X15_X7_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xFF +#define VPUNPCKHQDQ_X15_X3_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xD7 +#define VPUNPCKHQDQ_X15_X7_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xF7 +#define VPUNPCKHQDQ_X15_X13_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xDF +#define VPUNPCKHQDQ_X15_X13_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xFF + +#define SHUFFLE_AVX() \ + VMOVDQA X6, X13; \ + VMOVDQA X2, X14; \ + VMOVDQA X4, X6; \ + VPUNPCKLQDQ_X13_X13_X15; \ + VMOVDQA X5, X4; \ + VMOVDQA X6, X5; \ + VPUNPCKHQDQ_X15_X7_X6; \ + VPUNPCKLQDQ_X7_X7_X15; \ + VPUNPCKHQDQ_X15_X13_X7; \ + VPUNPCKLQDQ_X3_X3_X15; \ + VPUNPCKHQDQ_X15_X2_X2; \ + VPUNPCKLQDQ_X14_X14_X15; \ + VPUNPCKHQDQ_X15_X3_X3; \ + +#define SHUFFLE_AVX_INV() \ + VMOVDQA X2, X13; \ + VMOVDQA X4, X14; \ + VPUNPCKLQDQ_X2_X2_X15; \ + VMOVDQA X5, X4; \ + VPUNPCKHQDQ_X15_X3_X2; \ + VMOVDQA X14, X5; \ + VPUNPCKLQDQ_X3_X3_X15; \ + VMOVDQA X6, X14; \ + VPUNPCKHQDQ_X15_X13_X3; \ + VPUNPCKLQDQ_X7_X7_X15; \ + VPUNPCKHQDQ_X15_X6_X6; \ + VPUNPCKLQDQ_X14_X14_X15; \ + VPUNPCKHQDQ_X15_X7_X7; \ + +#define HALF_ROUND_AVX(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ + VPADDQ m0, v0, v0; \ + VPADDQ v2, v0, v0; \ + VPADDQ m1, v1, v1; \ + VPADDQ v3, v1, v1; \ + VPXOR v0, v6, v6; \ + VPXOR v1, v7, v7; \ + VPSHUFD $-79, v6, v6; \ + VPSHUFD $-79, v7, v7; \ + VPADDQ v6, v4, v4; \ + VPADDQ v7, v5, v5; \ + VPXOR v4, v2, v2; \ + VPXOR v5, v3, v3; \ + VPSHUFB c40, v2, v2; \ + VPSHUFB c40, v3, v3; \ + VPADDQ m2, v0, v0; \ + VPADDQ v2, v0, v0; \ + VPADDQ m3, v1, v1; \ + VPADDQ v3, v1, v1; \ + VPXOR v0, v6, v6; \ + VPXOR v1, v7, v7; \ + VPSHUFB c48, v6, v6; \ + VPSHUFB c48, v7, v7; \ + VPADDQ v6, v4, v4; \ + VPADDQ v7, v5, v5; \ + VPXOR v4, v2, v2; \ + VPXOR v5, v3, v3; \ + VPADDQ v2, v2, t0; \ + VPSRLQ $63, v2, v2; \ + VPXOR t0, v2, v2; \ + VPADDQ v3, v3, t0; \ + VPSRLQ $63, v3, v3; \ + VPXOR t0, v3, v3 + +// load msg: X12 = (i0, i1), X13 = (i2, i3), X14 = (i4, i5), X15 = (i6, i7) +// i0, i1, i2, i3, i4, i5, i6, i7 must not be 0 +#define LOAD_MSG_AVX(i0, i1, i2, i3, i4, i5, i6, i7) \ + VMOVQ_SI_X12(i0*8); \ + VMOVQ_SI_X13(i2*8); \ + VMOVQ_SI_X14(i4*8); \ + VMOVQ_SI_X15(i6*8); \ + VPINSRQ_1_SI_X12(i1*8); \ + VPINSRQ_1_SI_X13(i3*8); \ + VPINSRQ_1_SI_X14(i5*8); \ + VPINSRQ_1_SI_X15(i7*8) + +// load msg: X12 = (0, 2), X13 = (4, 6), X14 = (1, 3), X15 = (5, 7) +#define LOAD_MSG_AVX_0_2_4_6_1_3_5_7() \ + VMOVQ_SI_X12_0; \ + VMOVQ_SI_X13(4*8); \ + VMOVQ_SI_X14(1*8); \ + VMOVQ_SI_X15(5*8); \ + VPINSRQ_1_SI_X12(2*8); \ + VPINSRQ_1_SI_X13(6*8); \ + VPINSRQ_1_SI_X14(3*8); \ + VPINSRQ_1_SI_X15(7*8) + +// load msg: X12 = (1, 0), X13 = (11, 5), X14 = (12, 2), X15 = (7, 3) +#define LOAD_MSG_AVX_1_0_11_5_12_2_7_3() \ + VPSHUFD $0x4E, 0*8(SI), X12; \ + VMOVQ_SI_X13(11*8); \ + VMOVQ_SI_X14(12*8); \ + VMOVQ_SI_X15(7*8); \ + VPINSRQ_1_SI_X13(5*8); \ + VPINSRQ_1_SI_X14(2*8); \ + VPINSRQ_1_SI_X15(3*8) + +// load msg: X12 = (11, 12), X13 = (5, 15), X14 = (8, 0), X15 = (2, 13) +#define LOAD_MSG_AVX_11_12_5_15_8_0_2_13() \ + VMOVDQU 11*8(SI), X12; \ + VMOVQ_SI_X13(5*8); \ + VMOVQ_SI_X14(8*8); \ + VMOVQ_SI_X15(2*8); \ + VPINSRQ_1_SI_X13(15*8); \ + VPINSRQ_1_SI_X14_0; \ + VPINSRQ_1_SI_X15(13*8) + +// load msg: X12 = (2, 5), X13 = (4, 15), X14 = (6, 10), X15 = (0, 8) +#define LOAD_MSG_AVX_2_5_4_15_6_10_0_8() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X13(4*8); \ + VMOVQ_SI_X14(6*8); \ + VMOVQ_SI_X15_0; \ + VPINSRQ_1_SI_X12(5*8); \ + VPINSRQ_1_SI_X13(15*8); \ + VPINSRQ_1_SI_X14(10*8); \ + VPINSRQ_1_SI_X15(8*8) + +// load msg: X12 = (9, 5), X13 = (2, 10), X14 = (0, 7), X15 = (4, 15) +#define LOAD_MSG_AVX_9_5_2_10_0_7_4_15() \ + VMOVQ_SI_X12(9*8); \ + VMOVQ_SI_X13(2*8); \ + VMOVQ_SI_X14_0; \ + VMOVQ_SI_X15(4*8); \ + VPINSRQ_1_SI_X12(5*8); \ + VPINSRQ_1_SI_X13(10*8); \ + VPINSRQ_1_SI_X14(7*8); \ + VPINSRQ_1_SI_X15(15*8) + +// load msg: X12 = (2, 6), X13 = (0, 8), X14 = (12, 10), X15 = (11, 3) +#define LOAD_MSG_AVX_2_6_0_8_12_10_11_3() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X13_0; \ + VMOVQ_SI_X14(12*8); \ + VMOVQ_SI_X15(11*8); \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X13(8*8); \ + VPINSRQ_1_SI_X14(10*8); \ + VPINSRQ_1_SI_X15(3*8) + +// load msg: X12 = (0, 6), X13 = (9, 8), X14 = (7, 3), X15 = (2, 11) +#define LOAD_MSG_AVX_0_6_9_8_7_3_2_11() \ + MOVQ 0*8(SI), X12; \ + VPSHUFD $0x4E, 8*8(SI), X13; \ + MOVQ 7*8(SI), X14; \ + MOVQ 2*8(SI), X15; \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X14(3*8); \ + VPINSRQ_1_SI_X15(11*8) + +// load msg: X12 = (6, 14), X13 = (11, 0), X14 = (15, 9), X15 = (3, 8) +#define LOAD_MSG_AVX_6_14_11_0_15_9_3_8() \ + MOVQ 6*8(SI), X12; \ + MOVQ 11*8(SI), X13; \ + MOVQ 15*8(SI), X14; \ + MOVQ 3*8(SI), X15; \ + VPINSRQ_1_SI_X12(14*8); \ + VPINSRQ_1_SI_X13_0; \ + VPINSRQ_1_SI_X14(9*8); \ + VPINSRQ_1_SI_X15(8*8) + +// load msg: X12 = (5, 15), X13 = (8, 2), X14 = (0, 4), X15 = (6, 10) +#define LOAD_MSG_AVX_5_15_8_2_0_4_6_10() \ + MOVQ 5*8(SI), X12; \ + MOVQ 8*8(SI), X13; \ + MOVQ 0*8(SI), X14; \ + MOVQ 6*8(SI), X15; \ + VPINSRQ_1_SI_X12(15*8); \ + VPINSRQ_1_SI_X13(2*8); \ + VPINSRQ_1_SI_X14(4*8); \ + VPINSRQ_1_SI_X15(10*8) + +// load msg: X12 = (12, 13), X13 = (1, 10), X14 = (2, 7), X15 = (4, 5) +#define LOAD_MSG_AVX_12_13_1_10_2_7_4_5() \ + VMOVDQU 12*8(SI), X12; \ + MOVQ 1*8(SI), X13; \ + MOVQ 2*8(SI), X14; \ + VPINSRQ_1_SI_X13(10*8); \ + VPINSRQ_1_SI_X14(7*8); \ + VMOVDQU 4*8(SI), X15 + +// load msg: X12 = (15, 9), X13 = (3, 13), X14 = (11, 14), X15 = (12, 0) +#define LOAD_MSG_AVX_15_9_3_13_11_14_12_0() \ + MOVQ 15*8(SI), X12; \ + MOVQ 3*8(SI), X13; \ + MOVQ 11*8(SI), X14; \ + MOVQ 12*8(SI), X15; \ + VPINSRQ_1_SI_X12(9*8); \ + VPINSRQ_1_SI_X13(13*8); \ + VPINSRQ_1_SI_X14(14*8); \ + VPINSRQ_1_SI_X15_0 + +// func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksAVX(SB), 4, $288-48 // frame size = 272 + 16 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, R10 + ADDQ $15, R10 + ANDQ $~15, R10 + + VMOVDQU ·AVX_c40<>(SB), X0 + VMOVDQU ·AVX_c48<>(SB), X1 + VMOVDQA X0, X8 + VMOVDQA X1, X9 + + VMOVDQU ·AVX_iv3<>(SB), X0 + VMOVDQA X0, 0(R10) + XORQ CX, 0(R10) // 0(R10) = ·AVX_iv3 ^ (CX || 0) + + VMOVDQU 0(AX), X10 + VMOVDQU 16(AX), X11 + VMOVDQU 32(AX), X2 + VMOVDQU 48(AX), X3 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + +loop: + ADDQ $128, R8 + CMPQ R8, $128 + JGE noinc + INCQ R9 + +noinc: + VMOVQ_R8_X15 + VPINSRQ_1_R9_X15 + + VMOVDQA X10, X0 + VMOVDQA X11, X1 + VMOVDQU ·AVX_iv0<>(SB), X4 + VMOVDQU ·AVX_iv1<>(SB), X5 + VMOVDQU ·AVX_iv2<>(SB), X6 + + VPXOR X15, X6, X6 + VMOVDQA 0(R10), X7 + + LOAD_MSG_AVX_0_2_4_6_1_3_5_7() + VMOVDQA X12, 16(R10) + VMOVDQA X13, 32(R10) + VMOVDQA X14, 48(R10) + VMOVDQA X15, 64(R10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(8, 10, 12, 14, 9, 11, 13, 15) + VMOVDQA X12, 80(R10) + VMOVDQA X13, 96(R10) + VMOVDQA X14, 112(R10) + VMOVDQA X15, 128(R10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(14, 4, 9, 13, 10, 8, 15, 6) + VMOVDQA X12, 144(R10) + VMOVDQA X13, 160(R10) + VMOVDQA X14, 176(R10) + VMOVDQA X15, 192(R10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_1_0_11_5_12_2_7_3() + VMOVDQA X12, 208(R10) + VMOVDQA X13, 224(R10) + VMOVDQA X14, 240(R10) + VMOVDQA X15, 256(R10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_11_12_5_15_8_0_2_13() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(10, 3, 7, 9, 14, 6, 1, 4) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(7, 3, 13, 11, 9, 1, 12, 14) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_2_5_4_15_6_10_0_8() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_9_5_2_10_0_7_4_15() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(14, 11, 6, 3, 1, 12, 8, 13) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_2_6_0_8_12_10_11_3() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(4, 7, 15, 1, 13, 5, 14, 9) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(12, 1, 14, 4, 5, 15, 13, 10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_0_6_9_8_7_3_2_11() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(13, 7, 12, 3, 11, 14, 1, 9) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_5_15_8_2_0_4_6_10() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_6_14_11_0_15_9_3_8() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_12_13_1_10_2_7_4_5() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(10, 8, 7, 1, 2, 4, 6, 5) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_15_9_3_13_11_14_12_0() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 16(R10), 32(R10), 48(R10), 64(R10), X15, X8, X9) + SHUFFLE_AVX() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 80(R10), 96(R10), 112(R10), 128(R10), X15, X8, X9) + SHUFFLE_AVX_INV() + + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 144(R10), 160(R10), 176(R10), 192(R10), X15, X8, X9) + SHUFFLE_AVX() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 208(R10), 224(R10), 240(R10), 256(R10), X15, X8, X9) + SHUFFLE_AVX_INV() + + VMOVDQU 32(AX), X14 + VMOVDQU 48(AX), X15 + VPXOR X0, X10, X10 + VPXOR X1, X11, X11 + VPXOR X2, X14, X14 + VPXOR X3, X15, X15 + VPXOR X4, X10, X10 + VPXOR X5, X11, X11 + VPXOR X6, X14, X2 + VPXOR X7, X15, X3 + VMOVDQU X2, 32(AX) + VMOVDQU X3, 48(AX) + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + VMOVDQU X10, 0(AX) + VMOVDQU X11, 16(AX) + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + VZEROUPPER + + RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go new file mode 100644 index 0000000000000..5fa1b32841df3 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go @@ -0,0 +1,25 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.7 && amd64 && gc && !purego +// +build !go1.7,amd64,gc,!purego + +package blake2b + +import "golang.org/x/sys/cpu" + +func init() { + useSSE4 = cpu.X86.HasSSE41 +} + +//go:noescape +func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + if useSSE4 { + hashBlocksSSE4(h, c, flag, blocks) + } else { + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s new file mode 100644 index 0000000000000..ae75eb9afcd7a --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s @@ -0,0 +1,279 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build amd64 && gc && !purego +// +build amd64,gc,!purego + +#include "textflag.h" + +DATA ·iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +GLOBL ·iv0<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b +DATA ·iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·iv1<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv2<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·iv2<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b +DATA ·iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 +GLOBL ·iv3<>(SB), (NOPTR+RODATA), $16 + +DATA ·c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·c48<>(SB), (NOPTR+RODATA), $16 + +#define SHUFFLE(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v6, t1; \ + PUNPCKLQDQ v6, t2; \ + PUNPCKHQDQ v7, v6; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ v7, t2; \ + MOVO t1, v7; \ + MOVO v2, t1; \ + PUNPCKHQDQ t2, v7; \ + PUNPCKLQDQ v3, t2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v3 + +#define SHUFFLE_INV(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v2, t1; \ + PUNPCKLQDQ v2, t2; \ + PUNPCKHQDQ v3, v2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ v3, t2; \ + MOVO t1, v3; \ + MOVO v6, t1; \ + PUNPCKHQDQ t2, v3; \ + PUNPCKLQDQ v7, t2; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v7 + +#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ + PADDQ m0, v0; \ + PADDQ m1, v1; \ + PADDQ v2, v0; \ + PADDQ v3, v1; \ + PXOR v0, v6; \ + PXOR v1, v7; \ + PSHUFD $0xB1, v6, v6; \ + PSHUFD $0xB1, v7, v7; \ + PADDQ v6, v4; \ + PADDQ v7, v5; \ + PXOR v4, v2; \ + PXOR v5, v3; \ + PSHUFB c40, v2; \ + PSHUFB c40, v3; \ + PADDQ m2, v0; \ + PADDQ m3, v1; \ + PADDQ v2, v0; \ + PADDQ v3, v1; \ + PXOR v0, v6; \ + PXOR v1, v7; \ + PSHUFB c48, v6; \ + PSHUFB c48, v7; \ + PADDQ v6, v4; \ + PADDQ v7, v5; \ + PXOR v4, v2; \ + PXOR v5, v3; \ + MOVOU v2, t0; \ + PADDQ v2, t0; \ + PSRLQ $63, v2; \ + PXOR t0, v2; \ + MOVOU v3, t0; \ + PADDQ v3, t0; \ + PSRLQ $63, v3; \ + PXOR t0, v3 + +#define LOAD_MSG(m0, m1, m2, m3, src, i0, i1, i2, i3, i4, i5, i6, i7) \ + MOVQ i0*8(src), m0; \ + PINSRQ $1, i1*8(src), m0; \ + MOVQ i2*8(src), m1; \ + PINSRQ $1, i3*8(src), m1; \ + MOVQ i4*8(src), m2; \ + PINSRQ $1, i5*8(src), m2; \ + MOVQ i6*8(src), m3; \ + PINSRQ $1, i7*8(src), m3 + +// func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksSSE4(SB), 4, $288-48 // frame size = 272 + 16 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, R10 + ADDQ $15, R10 + ANDQ $~15, R10 + + MOVOU ·iv3<>(SB), X0 + MOVO X0, 0(R10) + XORQ CX, 0(R10) // 0(R10) = ·iv3 ^ (CX || 0) + + MOVOU ·c40<>(SB), X13 + MOVOU ·c48<>(SB), X14 + + MOVOU 0(AX), X12 + MOVOU 16(AX), X15 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + +loop: + ADDQ $128, R8 + CMPQ R8, $128 + JGE noinc + INCQ R9 + +noinc: + MOVQ R8, X8 + PINSRQ $1, R9, X8 + + MOVO X12, X0 + MOVO X15, X1 + MOVOU 32(AX), X2 + MOVOU 48(AX), X3 + MOVOU ·iv0<>(SB), X4 + MOVOU ·iv1<>(SB), X5 + MOVOU ·iv2<>(SB), X6 + + PXOR X8, X6 + MOVO 0(R10), X7 + + LOAD_MSG(X8, X9, X10, X11, SI, 0, 2, 4, 6, 1, 3, 5, 7) + MOVO X8, 16(R10) + MOVO X9, 32(R10) + MOVO X10, 48(R10) + MOVO X11, 64(R10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 8, 10, 12, 14, 9, 11, 13, 15) + MOVO X8, 80(R10) + MOVO X9, 96(R10) + MOVO X10, 112(R10) + MOVO X11, 128(R10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 14, 4, 9, 13, 10, 8, 15, 6) + MOVO X8, 144(R10) + MOVO X9, 160(R10) + MOVO X10, 176(R10) + MOVO X11, 192(R10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 1, 0, 11, 5, 12, 2, 7, 3) + MOVO X8, 208(R10) + MOVO X9, 224(R10) + MOVO X10, 240(R10) + MOVO X11, 256(R10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 11, 12, 5, 15, 8, 0, 2, 13) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 10, 3, 7, 9, 14, 6, 1, 4) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 7, 3, 13, 11, 9, 1, 12, 14) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 2, 5, 4, 15, 6, 10, 0, 8) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 9, 5, 2, 10, 0, 7, 4, 15) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 14, 11, 6, 3, 1, 12, 8, 13) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 2, 6, 0, 8, 12, 10, 11, 3) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 4, 7, 15, 1, 13, 5, 14, 9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 12, 1, 14, 4, 5, 15, 13, 10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 0, 6, 9, 8, 7, 3, 2, 11) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 13, 7, 12, 3, 11, 14, 1, 9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 5, 15, 8, 2, 0, 4, 6, 10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 6, 14, 11, 0, 15, 9, 3, 8) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 12, 13, 1, 10, 2, 7, 4, 5) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 10, 8, 7, 1, 2, 4, 6, 5) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 15, 9, 3, 13, 11, 14, 12, 0) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 16(R10), 32(R10), 48(R10), 64(R10), X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 80(R10), 96(R10), 112(R10), 128(R10), X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 144(R10), 160(R10), 176(R10), 192(R10), X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 208(R10), 224(R10), 240(R10), 256(R10), X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + MOVOU 32(AX), X10 + MOVOU 48(AX), X11 + PXOR X0, X12 + PXOR X1, X15 + PXOR X2, X10 + PXOR X3, X11 + PXOR X4, X12 + PXOR X5, X15 + PXOR X6, X10 + PXOR X7, X11 + MOVOU X10, 32(AX) + MOVOU X11, 48(AX) + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + MOVOU X12, 0(AX) + MOVOU X15, 16(AX) + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + + RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go b/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go new file mode 100644 index 0000000000000..3168a8aa3c834 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go @@ -0,0 +1,182 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2b + +import ( + "encoding/binary" + "math/bits" +) + +// the precomputed values for BLAKE2b +// there are 12 16-byte arrays - one for each round +// the entries are calculated from the sigma constants. +var precomputed = [12][16]byte{ + {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, + {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, + {11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4}, + {7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8}, + {9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13}, + {2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9}, + {12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11}, + {13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10}, + {6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5}, + {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0}, + {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, // equal to the first + {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, // equal to the second +} + +func hashBlocksGeneric(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + var m [16]uint64 + c0, c1 := c[0], c[1] + + for i := 0; i < len(blocks); { + c0 += BlockSize + if c0 < BlockSize { + c1++ + } + + v0, v1, v2, v3, v4, v5, v6, v7 := h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7] + v8, v9, v10, v11, v12, v13, v14, v15 := iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7] + v12 ^= c0 + v13 ^= c1 + v14 ^= flag + + for j := range m { + m[j] = binary.LittleEndian.Uint64(blocks[i:]) + i += 8 + } + + for j := range precomputed { + s := &(precomputed[j]) + + v0 += m[s[0]] + v0 += v4 + v12 ^= v0 + v12 = bits.RotateLeft64(v12, -32) + v8 += v12 + v4 ^= v8 + v4 = bits.RotateLeft64(v4, -24) + v1 += m[s[1]] + v1 += v5 + v13 ^= v1 + v13 = bits.RotateLeft64(v13, -32) + v9 += v13 + v5 ^= v9 + v5 = bits.RotateLeft64(v5, -24) + v2 += m[s[2]] + v2 += v6 + v14 ^= v2 + v14 = bits.RotateLeft64(v14, -32) + v10 += v14 + v6 ^= v10 + v6 = bits.RotateLeft64(v6, -24) + v3 += m[s[3]] + v3 += v7 + v15 ^= v3 + v15 = bits.RotateLeft64(v15, -32) + v11 += v15 + v7 ^= v11 + v7 = bits.RotateLeft64(v7, -24) + + v0 += m[s[4]] + v0 += v4 + v12 ^= v0 + v12 = bits.RotateLeft64(v12, -16) + v8 += v12 + v4 ^= v8 + v4 = bits.RotateLeft64(v4, -63) + v1 += m[s[5]] + v1 += v5 + v13 ^= v1 + v13 = bits.RotateLeft64(v13, -16) + v9 += v13 + v5 ^= v9 + v5 = bits.RotateLeft64(v5, -63) + v2 += m[s[6]] + v2 += v6 + v14 ^= v2 + v14 = bits.RotateLeft64(v14, -16) + v10 += v14 + v6 ^= v10 + v6 = bits.RotateLeft64(v6, -63) + v3 += m[s[7]] + v3 += v7 + v15 ^= v3 + v15 = bits.RotateLeft64(v15, -16) + v11 += v15 + v7 ^= v11 + v7 = bits.RotateLeft64(v7, -63) + + v0 += m[s[8]] + v0 += v5 + v15 ^= v0 + v15 = bits.RotateLeft64(v15, -32) + v10 += v15 + v5 ^= v10 + v5 = bits.RotateLeft64(v5, -24) + v1 += m[s[9]] + v1 += v6 + v12 ^= v1 + v12 = bits.RotateLeft64(v12, -32) + v11 += v12 + v6 ^= v11 + v6 = bits.RotateLeft64(v6, -24) + v2 += m[s[10]] + v2 += v7 + v13 ^= v2 + v13 = bits.RotateLeft64(v13, -32) + v8 += v13 + v7 ^= v8 + v7 = bits.RotateLeft64(v7, -24) + v3 += m[s[11]] + v3 += v4 + v14 ^= v3 + v14 = bits.RotateLeft64(v14, -32) + v9 += v14 + v4 ^= v9 + v4 = bits.RotateLeft64(v4, -24) + + v0 += m[s[12]] + v0 += v5 + v15 ^= v0 + v15 = bits.RotateLeft64(v15, -16) + v10 += v15 + v5 ^= v10 + v5 = bits.RotateLeft64(v5, -63) + v1 += m[s[13]] + v1 += v6 + v12 ^= v1 + v12 = bits.RotateLeft64(v12, -16) + v11 += v12 + v6 ^= v11 + v6 = bits.RotateLeft64(v6, -63) + v2 += m[s[14]] + v2 += v7 + v13 ^= v2 + v13 = bits.RotateLeft64(v13, -16) + v8 += v13 + v7 ^= v8 + v7 = bits.RotateLeft64(v7, -63) + v3 += m[s[15]] + v3 += v4 + v14 ^= v3 + v14 = bits.RotateLeft64(v14, -16) + v9 += v14 + v4 ^= v9 + v4 = bits.RotateLeft64(v4, -63) + + } + + h[0] ^= v0 ^ v8 + h[1] ^= v1 ^ v9 + h[2] ^= v2 ^ v10 + h[3] ^= v3 ^ v11 + h[4] ^= v4 ^ v12 + h[5] ^= v5 ^ v13 + h[6] ^= v6 ^ v14 + h[7] ^= v7 ^ v15 + } + c[0], c[1] = c0, c1 +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go new file mode 100644 index 0000000000000..b0137cdf025cb --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !amd64 || purego || !gc +// +build !amd64 purego !gc + +package blake2b + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + hashBlocksGeneric(h, c, flag, blocks) +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2x.go b/vendor/golang.org/x/crypto/blake2b/blake2x.go new file mode 100644 index 0000000000000..52c414db0e64d --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2x.go @@ -0,0 +1,177 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2b + +import ( + "encoding/binary" + "errors" + "io" +) + +// XOF defines the interface to hash functions that +// support arbitrary-length output. +type XOF interface { + // Write absorbs more data into the hash's state. It panics if called + // after Read. + io.Writer + + // Read reads more output from the hash. It returns io.EOF if the limit + // has been reached. + io.Reader + + // Clone returns a copy of the XOF in its current state. + Clone() XOF + + // Reset resets the XOF to its initial state. + Reset() +} + +// OutputLengthUnknown can be used as the size argument to NewXOF to indicate +// the length of the output is not known in advance. +const OutputLengthUnknown = 0 + +// magicUnknownOutputLength is a magic value for the output size that indicates +// an unknown number of output bytes. +const magicUnknownOutputLength = (1 << 32) - 1 + +// maxOutputLength is the absolute maximum number of bytes to produce when the +// number of output bytes is unknown. +const maxOutputLength = (1 << 32) * 64 + +// NewXOF creates a new variable-output-length hash. The hash either produce a +// known number of bytes (1 <= size < 2**32-1), or an unknown number of bytes +// (size == OutputLengthUnknown). In the latter case, an absolute limit of +// 256GiB applies. +// +// A non-nil key turns the hash into a MAC. The key must between +// zero and 32 bytes long. +func NewXOF(size uint32, key []byte) (XOF, error) { + if len(key) > Size { + return nil, errKeySize + } + if size == magicUnknownOutputLength { + // 2^32-1 indicates an unknown number of bytes and thus isn't a + // valid length. + return nil, errors.New("blake2b: XOF length too large") + } + if size == OutputLengthUnknown { + size = magicUnknownOutputLength + } + x := &xof{ + d: digest{ + size: Size, + keyLen: len(key), + }, + length: size, + } + copy(x.d.key[:], key) + x.Reset() + return x, nil +} + +type xof struct { + d digest + length uint32 + remaining uint64 + cfg, root, block [Size]byte + offset int + nodeOffset uint32 + readMode bool +} + +func (x *xof) Write(p []byte) (n int, err error) { + if x.readMode { + panic("blake2b: write to XOF after read") + } + return x.d.Write(p) +} + +func (x *xof) Clone() XOF { + clone := *x + return &clone +} + +func (x *xof) Reset() { + x.cfg[0] = byte(Size) + binary.LittleEndian.PutUint32(x.cfg[4:], uint32(Size)) // leaf length + binary.LittleEndian.PutUint32(x.cfg[12:], x.length) // XOF length + x.cfg[17] = byte(Size) // inner hash size + + x.d.Reset() + x.d.h[1] ^= uint64(x.length) << 32 + + x.remaining = uint64(x.length) + if x.remaining == magicUnknownOutputLength { + x.remaining = maxOutputLength + } + x.offset, x.nodeOffset = 0, 0 + x.readMode = false +} + +func (x *xof) Read(p []byte) (n int, err error) { + if !x.readMode { + x.d.finalize(&x.root) + x.readMode = true + } + + if x.remaining == 0 { + return 0, io.EOF + } + + n = len(p) + if uint64(n) > x.remaining { + n = int(x.remaining) + p = p[:n] + } + + if x.offset > 0 { + blockRemaining := Size - x.offset + if n < blockRemaining { + x.offset += copy(p, x.block[x.offset:]) + x.remaining -= uint64(n) + return + } + copy(p, x.block[x.offset:]) + p = p[blockRemaining:] + x.offset = 0 + x.remaining -= uint64(blockRemaining) + } + + for len(p) >= Size { + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + copy(p, x.block[:]) + p = p[Size:] + x.remaining -= uint64(Size) + } + + if todo := len(p); todo > 0 { + if x.remaining < uint64(Size) { + x.cfg[0] = byte(x.remaining) + } + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + x.offset = copy(p, x.block[:todo]) + x.remaining -= uint64(todo) + } + return +} + +func (d *digest) initConfig(cfg *[Size]byte) { + d.offset, d.c[0], d.c[1] = 0, 0, 0 + for i := range d.h { + d.h[i] = iv[i] ^ binary.LittleEndian.Uint64(cfg[i*8:]) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/register.go b/vendor/golang.org/x/crypto/blake2b/register.go new file mode 100644 index 0000000000000..9d8633963cb6e --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/register.go @@ -0,0 +1,33 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.9 +// +build go1.9 + +package blake2b + +import ( + "crypto" + "hash" +) + +func init() { + newHash256 := func() hash.Hash { + h, _ := New256(nil) + return h + } + newHash384 := func() hash.Hash { + h, _ := New384(nil) + return h + } + + newHash512 := func() hash.Hash { + h, _ := New512(nil) + return h + } + + crypto.RegisterHash(crypto.BLAKE2b_256, newHash256) + crypto.RegisterHash(crypto.BLAKE2b_384, newHash384) + crypto.RegisterHash(crypto.BLAKE2b_512, newHash512) +} diff --git a/vendor/golang.org/x/crypto/hkdf/hkdf.go b/vendor/golang.org/x/crypto/hkdf/hkdf.go new file mode 100644 index 0000000000000..dda3f143bec50 --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/hkdf.go @@ -0,0 +1,93 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package hkdf implements the HMAC-based Extract-and-Expand Key Derivation +// Function (HKDF) as defined in RFC 5869. +// +// HKDF is a cryptographic key derivation function (KDF) with the goal of +// expanding limited input keying material into one or more cryptographically +// strong secret keys. +package hkdf // import "golang.org/x/crypto/hkdf" + +import ( + "crypto/hmac" + "errors" + "hash" + "io" +) + +// Extract generates a pseudorandom key for use with Expand from an input secret +// and an optional independent salt. +// +// Only use this function if you need to reuse the extracted key with multiple +// Expand invocations and different context values. Most common scenarios, +// including the generation of multiple keys, should use New instead. +func Extract(hash func() hash.Hash, secret, salt []byte) []byte { + if salt == nil { + salt = make([]byte, hash().Size()) + } + extractor := hmac.New(hash, salt) + extractor.Write(secret) + return extractor.Sum(nil) +} + +type hkdf struct { + expander hash.Hash + size int + + info []byte + counter byte + + prev []byte + buf []byte +} + +func (f *hkdf) Read(p []byte) (int, error) { + // Check whether enough data can be generated + need := len(p) + remains := len(f.buf) + int(255-f.counter+1)*f.size + if remains < need { + return 0, errors.New("hkdf: entropy limit reached") + } + // Read any leftover from the buffer + n := copy(p, f.buf) + p = p[n:] + + // Fill the rest of the buffer + for len(p) > 0 { + f.expander.Reset() + f.expander.Write(f.prev) + f.expander.Write(f.info) + f.expander.Write([]byte{f.counter}) + f.prev = f.expander.Sum(f.prev[:0]) + f.counter++ + + // Copy the new batch into p + f.buf = f.prev + n = copy(p, f.buf) + p = p[n:] + } + // Save leftovers for next run + f.buf = f.buf[n:] + + return need, nil +} + +// Expand returns a Reader, from which keys can be read, using the given +// pseudorandom key and optional context info, skipping the extraction step. +// +// The pseudorandomKey should have been generated by Extract, or be a uniformly +// random or pseudorandom cryptographically strong key. See RFC 5869, Section +// 3.3. Most common scenarios will want to use New instead. +func Expand(hash func() hash.Hash, pseudorandomKey, info []byte) io.Reader { + expander := hmac.New(hash, pseudorandomKey) + return &hkdf{expander, expander.Size(), info, 1, nil, nil} +} + +// New returns a Reader, from which keys can be read, using the given hash, +// secret, salt and context info. Salt and info can be nil. +func New(hash func() hash.Hash, secret, salt, info []byte) io.Reader { + prk := Extract(hash, secret, salt) + return Expand(hash, prk, info) +} diff --git a/vendor/golang.org/x/crypto/openpgp/keys.go b/vendor/golang.org/x/crypto/openpgp/keys.go deleted file mode 100644 index d62f787e9d5a3..0000000000000 --- a/vendor/golang.org/x/crypto/openpgp/keys.go +++ /dev/null @@ -1,693 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package openpgp - -import ( - "crypto/rsa" - "io" - "time" - - "golang.org/x/crypto/openpgp/armor" - "golang.org/x/crypto/openpgp/errors" - "golang.org/x/crypto/openpgp/packet" -) - -// PublicKeyType is the armor type for a PGP public key. -var PublicKeyType = "PGP PUBLIC KEY BLOCK" - -// PrivateKeyType is the armor type for a PGP private key. -var PrivateKeyType = "PGP PRIVATE KEY BLOCK" - -// An Entity represents the components of an OpenPGP key: a primary public key -// (which must be a signing key), one or more identities claimed by that key, -// and zero or more subkeys, which may be encryption keys. -type Entity struct { - PrimaryKey *packet.PublicKey - PrivateKey *packet.PrivateKey - Identities map[string]*Identity // indexed by Identity.Name - Revocations []*packet.Signature - Subkeys []Subkey -} - -// An Identity represents an identity claimed by an Entity and zero or more -// assertions by other entities about that claim. -type Identity struct { - Name string // by convention, has the form "Full Name (comment) " - UserId *packet.UserId - SelfSignature *packet.Signature - Signatures []*packet.Signature -} - -// A Subkey is an additional public key in an Entity. Subkeys can be used for -// encryption. -type Subkey struct { - PublicKey *packet.PublicKey - PrivateKey *packet.PrivateKey - Sig *packet.Signature -} - -// A Key identifies a specific public key in an Entity. This is either the -// Entity's primary key or a subkey. -type Key struct { - Entity *Entity - PublicKey *packet.PublicKey - PrivateKey *packet.PrivateKey - SelfSignature *packet.Signature -} - -// A KeyRing provides access to public and private keys. -type KeyRing interface { - // KeysById returns the set of keys that have the given key id. - KeysById(id uint64) []Key - // KeysByIdUsage returns the set of keys with the given id - // that also meet the key usage given by requiredUsage. - // The requiredUsage is expressed as the bitwise-OR of - // packet.KeyFlag* values. - KeysByIdUsage(id uint64, requiredUsage byte) []Key - // DecryptionKeys returns all private keys that are valid for - // decryption. - DecryptionKeys() []Key -} - -// primaryIdentity returns the Identity marked as primary or the first identity -// if none are so marked. -func (e *Entity) primaryIdentity() *Identity { - var firstIdentity *Identity - for _, ident := range e.Identities { - if firstIdentity == nil { - firstIdentity = ident - } - if ident.SelfSignature.IsPrimaryId != nil && *ident.SelfSignature.IsPrimaryId { - return ident - } - } - return firstIdentity -} - -// encryptionKey returns the best candidate Key for encrypting a message to the -// given Entity. -func (e *Entity) encryptionKey(now time.Time) (Key, bool) { - candidateSubkey := -1 - - // Iterate the keys to find the newest key - var maxTime time.Time - for i, subkey := range e.Subkeys { - if subkey.Sig.FlagsValid && - subkey.Sig.FlagEncryptCommunications && - subkey.PublicKey.PubKeyAlgo.CanEncrypt() && - !subkey.Sig.KeyExpired(now) && - (maxTime.IsZero() || subkey.Sig.CreationTime.After(maxTime)) { - candidateSubkey = i - maxTime = subkey.Sig.CreationTime - } - } - - if candidateSubkey != -1 { - subkey := e.Subkeys[candidateSubkey] - return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig}, true - } - - // If we don't have any candidate subkeys for encryption and - // the primary key doesn't have any usage metadata then we - // assume that the primary key is ok. Or, if the primary key is - // marked as ok to encrypt to, then we can obviously use it. - i := e.primaryIdentity() - if !i.SelfSignature.FlagsValid || i.SelfSignature.FlagEncryptCommunications && - e.PrimaryKey.PubKeyAlgo.CanEncrypt() && - !i.SelfSignature.KeyExpired(now) { - return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature}, true - } - - // This Entity appears to be signing only. - return Key{}, false -} - -// signingKey return the best candidate Key for signing a message with this -// Entity. -func (e *Entity) signingKey(now time.Time) (Key, bool) { - candidateSubkey := -1 - - for i, subkey := range e.Subkeys { - if subkey.Sig.FlagsValid && - subkey.Sig.FlagSign && - subkey.PublicKey.PubKeyAlgo.CanSign() && - !subkey.Sig.KeyExpired(now) { - candidateSubkey = i - break - } - } - - if candidateSubkey != -1 { - subkey := e.Subkeys[candidateSubkey] - return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig}, true - } - - // If we have no candidate subkey then we assume that it's ok to sign - // with the primary key. - i := e.primaryIdentity() - if !i.SelfSignature.FlagsValid || i.SelfSignature.FlagSign && - !i.SelfSignature.KeyExpired(now) { - return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature}, true - } - - return Key{}, false -} - -// An EntityList contains one or more Entities. -type EntityList []*Entity - -// KeysById returns the set of keys that have the given key id. -func (el EntityList) KeysById(id uint64) (keys []Key) { - for _, e := range el { - if e.PrimaryKey.KeyId == id { - var selfSig *packet.Signature - for _, ident := range e.Identities { - if selfSig == nil { - selfSig = ident.SelfSignature - } else if ident.SelfSignature.IsPrimaryId != nil && *ident.SelfSignature.IsPrimaryId { - selfSig = ident.SelfSignature - break - } - } - keys = append(keys, Key{e, e.PrimaryKey, e.PrivateKey, selfSig}) - } - - for _, subKey := range e.Subkeys { - if subKey.PublicKey.KeyId == id { - keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig}) - } - } - } - return -} - -// KeysByIdUsage returns the set of keys with the given id that also meet -// the key usage given by requiredUsage. The requiredUsage is expressed as -// the bitwise-OR of packet.KeyFlag* values. -func (el EntityList) KeysByIdUsage(id uint64, requiredUsage byte) (keys []Key) { - for _, key := range el.KeysById(id) { - if len(key.Entity.Revocations) > 0 { - continue - } - - if key.SelfSignature.RevocationReason != nil { - continue - } - - if key.SelfSignature.FlagsValid && requiredUsage != 0 { - var usage byte - if key.SelfSignature.FlagCertify { - usage |= packet.KeyFlagCertify - } - if key.SelfSignature.FlagSign { - usage |= packet.KeyFlagSign - } - if key.SelfSignature.FlagEncryptCommunications { - usage |= packet.KeyFlagEncryptCommunications - } - if key.SelfSignature.FlagEncryptStorage { - usage |= packet.KeyFlagEncryptStorage - } - if usage&requiredUsage != requiredUsage { - continue - } - } - - keys = append(keys, key) - } - return -} - -// DecryptionKeys returns all private keys that are valid for decryption. -func (el EntityList) DecryptionKeys() (keys []Key) { - for _, e := range el { - for _, subKey := range e.Subkeys { - if subKey.PrivateKey != nil && (!subKey.Sig.FlagsValid || subKey.Sig.FlagEncryptStorage || subKey.Sig.FlagEncryptCommunications) { - keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig}) - } - } - } - return -} - -// ReadArmoredKeyRing reads one or more public/private keys from an armor keyring file. -func ReadArmoredKeyRing(r io.Reader) (EntityList, error) { - block, err := armor.Decode(r) - if err == io.EOF { - return nil, errors.InvalidArgumentError("no armored data found") - } - if err != nil { - return nil, err - } - if block.Type != PublicKeyType && block.Type != PrivateKeyType { - return nil, errors.InvalidArgumentError("expected public or private key block, got: " + block.Type) - } - - return ReadKeyRing(block.Body) -} - -// ReadKeyRing reads one or more public/private keys. Unsupported keys are -// ignored as long as at least a single valid key is found. -func ReadKeyRing(r io.Reader) (el EntityList, err error) { - packets := packet.NewReader(r) - var lastUnsupportedError error - - for { - var e *Entity - e, err = ReadEntity(packets) - if err != nil { - // TODO: warn about skipped unsupported/unreadable keys - if _, ok := err.(errors.UnsupportedError); ok { - lastUnsupportedError = err - err = readToNextPublicKey(packets) - } else if _, ok := err.(errors.StructuralError); ok { - // Skip unreadable, badly-formatted keys - lastUnsupportedError = err - err = readToNextPublicKey(packets) - } - if err == io.EOF { - err = nil - break - } - if err != nil { - el = nil - break - } - } else { - el = append(el, e) - } - } - - if len(el) == 0 && err == nil { - err = lastUnsupportedError - } - return -} - -// readToNextPublicKey reads packets until the start of the entity and leaves -// the first packet of the new entity in the Reader. -func readToNextPublicKey(packets *packet.Reader) (err error) { - var p packet.Packet - for { - p, err = packets.Next() - if err == io.EOF { - return - } else if err != nil { - if _, ok := err.(errors.UnsupportedError); ok { - err = nil - continue - } - return - } - - if pk, ok := p.(*packet.PublicKey); ok && !pk.IsSubkey { - packets.Unread(p) - return - } - } -} - -// ReadEntity reads an entity (public key, identities, subkeys etc) from the -// given Reader. -func ReadEntity(packets *packet.Reader) (*Entity, error) { - e := new(Entity) - e.Identities = make(map[string]*Identity) - - p, err := packets.Next() - if err != nil { - return nil, err - } - - var ok bool - if e.PrimaryKey, ok = p.(*packet.PublicKey); !ok { - if e.PrivateKey, ok = p.(*packet.PrivateKey); !ok { - packets.Unread(p) - return nil, errors.StructuralError("first packet was not a public/private key") - } - e.PrimaryKey = &e.PrivateKey.PublicKey - } - - if !e.PrimaryKey.PubKeyAlgo.CanSign() { - return nil, errors.StructuralError("primary key cannot be used for signatures") - } - - var revocations []*packet.Signature -EachPacket: - for { - p, err := packets.Next() - if err == io.EOF { - break - } else if err != nil { - return nil, err - } - - switch pkt := p.(type) { - case *packet.UserId: - if err := addUserID(e, packets, pkt); err != nil { - return nil, err - } - case *packet.Signature: - if pkt.SigType == packet.SigTypeKeyRevocation { - revocations = append(revocations, pkt) - } else if pkt.SigType == packet.SigTypeDirectSignature { - // TODO: RFC4880 5.2.1 permits signatures - // directly on keys (eg. to bind additional - // revocation keys). - } - // Else, ignoring the signature as it does not follow anything - // we would know to attach it to. - case *packet.PrivateKey: - if pkt.IsSubkey == false { - packets.Unread(p) - break EachPacket - } - err = addSubkey(e, packets, &pkt.PublicKey, pkt) - if err != nil { - return nil, err - } - case *packet.PublicKey: - if pkt.IsSubkey == false { - packets.Unread(p) - break EachPacket - } - err = addSubkey(e, packets, pkt, nil) - if err != nil { - return nil, err - } - default: - // we ignore unknown packets - } - } - - if len(e.Identities) == 0 { - return nil, errors.StructuralError("entity without any identities") - } - - for _, revocation := range revocations { - err = e.PrimaryKey.VerifyRevocationSignature(revocation) - if err == nil { - e.Revocations = append(e.Revocations, revocation) - } else { - // TODO: RFC 4880 5.2.3.15 defines revocation keys. - return nil, errors.StructuralError("revocation signature signed by alternate key") - } - } - - return e, nil -} - -func addUserID(e *Entity, packets *packet.Reader, pkt *packet.UserId) error { - // Make a new Identity object, that we might wind up throwing away. - // We'll only add it if we get a valid self-signature over this - // userID. - identity := new(Identity) - identity.Name = pkt.Id - identity.UserId = pkt - - for { - p, err := packets.Next() - if err == io.EOF { - break - } else if err != nil { - return err - } - - sig, ok := p.(*packet.Signature) - if !ok { - packets.Unread(p) - break - } - - if (sig.SigType == packet.SigTypePositiveCert || sig.SigType == packet.SigTypeGenericCert) && sig.IssuerKeyId != nil && *sig.IssuerKeyId == e.PrimaryKey.KeyId { - if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil { - return errors.StructuralError("user ID self-signature invalid: " + err.Error()) - } - identity.SelfSignature = sig - e.Identities[pkt.Id] = identity - } else { - identity.Signatures = append(identity.Signatures, sig) - } - } - - return nil -} - -func addSubkey(e *Entity, packets *packet.Reader, pub *packet.PublicKey, priv *packet.PrivateKey) error { - var subKey Subkey - subKey.PublicKey = pub - subKey.PrivateKey = priv - - for { - p, err := packets.Next() - if err == io.EOF { - break - } else if err != nil { - return errors.StructuralError("subkey signature invalid: " + err.Error()) - } - - sig, ok := p.(*packet.Signature) - if !ok { - packets.Unread(p) - break - } - - if sig.SigType != packet.SigTypeSubkeyBinding && sig.SigType != packet.SigTypeSubkeyRevocation { - return errors.StructuralError("subkey signature with wrong type") - } - - if err := e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, sig); err != nil { - return errors.StructuralError("subkey signature invalid: " + err.Error()) - } - - switch sig.SigType { - case packet.SigTypeSubkeyRevocation: - subKey.Sig = sig - case packet.SigTypeSubkeyBinding: - - if shouldReplaceSubkeySig(subKey.Sig, sig) { - subKey.Sig = sig - } - } - } - - if subKey.Sig == nil { - return errors.StructuralError("subkey packet not followed by signature") - } - - e.Subkeys = append(e.Subkeys, subKey) - - return nil -} - -func shouldReplaceSubkeySig(existingSig, potentialNewSig *packet.Signature) bool { - if potentialNewSig == nil { - return false - } - - if existingSig == nil { - return true - } - - if existingSig.SigType == packet.SigTypeSubkeyRevocation { - return false // never override a revocation signature - } - - return potentialNewSig.CreationTime.After(existingSig.CreationTime) -} - -const defaultRSAKeyBits = 2048 - -// NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a -// single identity composed of the given full name, comment and email, any of -// which may be empty but must not contain any of "()<>\x00". -// If config is nil, sensible defaults will be used. -func NewEntity(name, comment, email string, config *packet.Config) (*Entity, error) { - creationTime := config.Now() - - bits := defaultRSAKeyBits - if config != nil && config.RSABits != 0 { - bits = config.RSABits - } - - uid := packet.NewUserId(name, comment, email) - if uid == nil { - return nil, errors.InvalidArgumentError("user id field contained invalid characters") - } - signingPriv, err := rsa.GenerateKey(config.Random(), bits) - if err != nil { - return nil, err - } - encryptingPriv, err := rsa.GenerateKey(config.Random(), bits) - if err != nil { - return nil, err - } - - e := &Entity{ - PrimaryKey: packet.NewRSAPublicKey(creationTime, &signingPriv.PublicKey), - PrivateKey: packet.NewRSAPrivateKey(creationTime, signingPriv), - Identities: make(map[string]*Identity), - } - isPrimaryId := true - e.Identities[uid.Id] = &Identity{ - Name: uid.Id, - UserId: uid, - SelfSignature: &packet.Signature{ - CreationTime: creationTime, - SigType: packet.SigTypePositiveCert, - PubKeyAlgo: packet.PubKeyAlgoRSA, - Hash: config.Hash(), - IsPrimaryId: &isPrimaryId, - FlagsValid: true, - FlagSign: true, - FlagCertify: true, - IssuerKeyId: &e.PrimaryKey.KeyId, - }, - } - err = e.Identities[uid.Id].SelfSignature.SignUserId(uid.Id, e.PrimaryKey, e.PrivateKey, config) - if err != nil { - return nil, err - } - - // If the user passes in a DefaultHash via packet.Config, - // set the PreferredHash for the SelfSignature. - if config != nil && config.DefaultHash != 0 { - e.Identities[uid.Id].SelfSignature.PreferredHash = []uint8{hashToHashId(config.DefaultHash)} - } - - // Likewise for DefaultCipher. - if config != nil && config.DefaultCipher != 0 { - e.Identities[uid.Id].SelfSignature.PreferredSymmetric = []uint8{uint8(config.DefaultCipher)} - } - - e.Subkeys = make([]Subkey, 1) - e.Subkeys[0] = Subkey{ - PublicKey: packet.NewRSAPublicKey(creationTime, &encryptingPriv.PublicKey), - PrivateKey: packet.NewRSAPrivateKey(creationTime, encryptingPriv), - Sig: &packet.Signature{ - CreationTime: creationTime, - SigType: packet.SigTypeSubkeyBinding, - PubKeyAlgo: packet.PubKeyAlgoRSA, - Hash: config.Hash(), - FlagsValid: true, - FlagEncryptStorage: true, - FlagEncryptCommunications: true, - IssuerKeyId: &e.PrimaryKey.KeyId, - }, - } - e.Subkeys[0].PublicKey.IsSubkey = true - e.Subkeys[0].PrivateKey.IsSubkey = true - err = e.Subkeys[0].Sig.SignKey(e.Subkeys[0].PublicKey, e.PrivateKey, config) - if err != nil { - return nil, err - } - return e, nil -} - -// SerializePrivate serializes an Entity, including private key material, but -// excluding signatures from other entities, to the given Writer. -// Identities and subkeys are re-signed in case they changed since NewEntry. -// If config is nil, sensible defaults will be used. -func (e *Entity) SerializePrivate(w io.Writer, config *packet.Config) (err error) { - err = e.PrivateKey.Serialize(w) - if err != nil { - return - } - for _, ident := range e.Identities { - err = ident.UserId.Serialize(w) - if err != nil { - return - } - err = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey, config) - if err != nil { - return - } - err = ident.SelfSignature.Serialize(w) - if err != nil { - return - } - } - for _, subkey := range e.Subkeys { - err = subkey.PrivateKey.Serialize(w) - if err != nil { - return - } - err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config) - if err != nil { - return - } - err = subkey.Sig.Serialize(w) - if err != nil { - return - } - } - return nil -} - -// Serialize writes the public part of the given Entity to w, including -// signatures from other entities. No private key material will be output. -func (e *Entity) Serialize(w io.Writer) error { - err := e.PrimaryKey.Serialize(w) - if err != nil { - return err - } - for _, ident := range e.Identities { - err = ident.UserId.Serialize(w) - if err != nil { - return err - } - err = ident.SelfSignature.Serialize(w) - if err != nil { - return err - } - for _, sig := range ident.Signatures { - err = sig.Serialize(w) - if err != nil { - return err - } - } - } - for _, subkey := range e.Subkeys { - err = subkey.PublicKey.Serialize(w) - if err != nil { - return err - } - err = subkey.Sig.Serialize(w) - if err != nil { - return err - } - } - return nil -} - -// SignIdentity adds a signature to e, from signer, attesting that identity is -// associated with e. The provided identity must already be an element of -// e.Identities and the private key of signer must have been decrypted if -// necessary. -// If config is nil, sensible defaults will be used. -func (e *Entity) SignIdentity(identity string, signer *Entity, config *packet.Config) error { - if signer.PrivateKey == nil { - return errors.InvalidArgumentError("signing Entity must have a private key") - } - if signer.PrivateKey.Encrypted { - return errors.InvalidArgumentError("signing Entity's private key must be decrypted") - } - ident, ok := e.Identities[identity] - if !ok { - return errors.InvalidArgumentError("given identity string not found in Entity") - } - - sig := &packet.Signature{ - SigType: packet.SigTypeGenericCert, - PubKeyAlgo: signer.PrivateKey.PubKeyAlgo, - Hash: config.Hash(), - CreationTime: config.Now(), - IssuerKeyId: &signer.PrivateKey.KeyId, - } - if err := sig.SignUserId(identity, e.PrimaryKey, signer.PrivateKey, config); err != nil { - return err - } - ident.Signatures = append(ident.Signatures, sig) - return nil -} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/config.go b/vendor/golang.org/x/crypto/openpgp/packet/config.go deleted file mode 100644 index c76eecc963acd..0000000000000 --- a/vendor/golang.org/x/crypto/openpgp/packet/config.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packet - -import ( - "crypto" - "crypto/rand" - "io" - "time" -) - -// Config collects a number of parameters along with sensible defaults. -// A nil *Config is valid and results in all default values. -type Config struct { - // Rand provides the source of entropy. - // If nil, the crypto/rand Reader is used. - Rand io.Reader - // DefaultHash is the default hash function to be used. - // If zero, SHA-256 is used. - DefaultHash crypto.Hash - // DefaultCipher is the cipher to be used. - // If zero, AES-128 is used. - DefaultCipher CipherFunction - // Time returns the current time as the number of seconds since the - // epoch. If Time is nil, time.Now is used. - Time func() time.Time - // DefaultCompressionAlgo is the compression algorithm to be - // applied to the plaintext before encryption. If zero, no - // compression is done. - DefaultCompressionAlgo CompressionAlgo - // CompressionConfig configures the compression settings. - CompressionConfig *CompressionConfig - // S2KCount is only used for symmetric encryption. It - // determines the strength of the passphrase stretching when - // the said passphrase is hashed to produce a key. S2KCount - // should be between 1024 and 65011712, inclusive. If Config - // is nil or S2KCount is 0, the value 65536 used. Not all - // values in the above range can be represented. S2KCount will - // be rounded up to the next representable value if it cannot - // be encoded exactly. When set, it is strongly encrouraged to - // use a value that is at least 65536. See RFC 4880 Section - // 3.7.1.3. - S2KCount int - // RSABits is the number of bits in new RSA keys made with NewEntity. - // If zero, then 2048 bit keys are created. - RSABits int -} - -func (c *Config) Random() io.Reader { - if c == nil || c.Rand == nil { - return rand.Reader - } - return c.Rand -} - -func (c *Config) Hash() crypto.Hash { - if c == nil || uint(c.DefaultHash) == 0 { - return crypto.SHA256 - } - return c.DefaultHash -} - -func (c *Config) Cipher() CipherFunction { - if c == nil || uint8(c.DefaultCipher) == 0 { - return CipherAES128 - } - return c.DefaultCipher -} - -func (c *Config) Now() time.Time { - if c == nil || c.Time == nil { - return time.Now() - } - return c.Time() -} - -func (c *Config) Compression() CompressionAlgo { - if c == nil { - return CompressionNone - } - return c.DefaultCompressionAlgo -} - -func (c *Config) PasswordHashIterations() int { - if c == nil || c.S2KCount == 0 { - return 0 - } - return c.S2KCount -} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/private_key.go b/vendor/golang.org/x/crypto/openpgp/packet/private_key.go deleted file mode 100644 index 192aac376d1af..0000000000000 --- a/vendor/golang.org/x/crypto/openpgp/packet/private_key.go +++ /dev/null @@ -1,384 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packet - -import ( - "bytes" - "crypto" - "crypto/cipher" - "crypto/dsa" - "crypto/ecdsa" - "crypto/rsa" - "crypto/sha1" - "io" - "math/big" - "strconv" - "time" - - "golang.org/x/crypto/openpgp/elgamal" - "golang.org/x/crypto/openpgp/errors" - "golang.org/x/crypto/openpgp/s2k" -) - -// PrivateKey represents a possibly encrypted private key. See RFC 4880, -// section 5.5.3. -type PrivateKey struct { - PublicKey - Encrypted bool // if true then the private key is unavailable until Decrypt has been called. - encryptedData []byte - cipher CipherFunction - s2k func(out, in []byte) - PrivateKey interface{} // An *{rsa|dsa|ecdsa}.PrivateKey or crypto.Signer/crypto.Decrypter (Decryptor RSA only). - sha1Checksum bool - iv []byte -} - -func NewRSAPrivateKey(creationTime time.Time, priv *rsa.PrivateKey) *PrivateKey { - pk := new(PrivateKey) - pk.PublicKey = *NewRSAPublicKey(creationTime, &priv.PublicKey) - pk.PrivateKey = priv - return pk -} - -func NewDSAPrivateKey(creationTime time.Time, priv *dsa.PrivateKey) *PrivateKey { - pk := new(PrivateKey) - pk.PublicKey = *NewDSAPublicKey(creationTime, &priv.PublicKey) - pk.PrivateKey = priv - return pk -} - -func NewElGamalPrivateKey(creationTime time.Time, priv *elgamal.PrivateKey) *PrivateKey { - pk := new(PrivateKey) - pk.PublicKey = *NewElGamalPublicKey(creationTime, &priv.PublicKey) - pk.PrivateKey = priv - return pk -} - -func NewECDSAPrivateKey(creationTime time.Time, priv *ecdsa.PrivateKey) *PrivateKey { - pk := new(PrivateKey) - pk.PublicKey = *NewECDSAPublicKey(creationTime, &priv.PublicKey) - pk.PrivateKey = priv - return pk -} - -// NewSignerPrivateKey creates a PrivateKey from a crypto.Signer that -// implements RSA or ECDSA. -func NewSignerPrivateKey(creationTime time.Time, signer crypto.Signer) *PrivateKey { - pk := new(PrivateKey) - // In general, the public Keys should be used as pointers. We still - // type-switch on the values, for backwards-compatibility. - switch pubkey := signer.Public().(type) { - case *rsa.PublicKey: - pk.PublicKey = *NewRSAPublicKey(creationTime, pubkey) - case rsa.PublicKey: - pk.PublicKey = *NewRSAPublicKey(creationTime, &pubkey) - case *ecdsa.PublicKey: - pk.PublicKey = *NewECDSAPublicKey(creationTime, pubkey) - case ecdsa.PublicKey: - pk.PublicKey = *NewECDSAPublicKey(creationTime, &pubkey) - default: - panic("openpgp: unknown crypto.Signer type in NewSignerPrivateKey") - } - pk.PrivateKey = signer - return pk -} - -func (pk *PrivateKey) parse(r io.Reader) (err error) { - err = (&pk.PublicKey).parse(r) - if err != nil { - return - } - var buf [1]byte - _, err = readFull(r, buf[:]) - if err != nil { - return - } - - s2kType := buf[0] - - switch s2kType { - case 0: - pk.s2k = nil - pk.Encrypted = false - case 254, 255: - _, err = readFull(r, buf[:]) - if err != nil { - return - } - pk.cipher = CipherFunction(buf[0]) - pk.Encrypted = true - pk.s2k, err = s2k.Parse(r) - if err != nil { - return - } - if s2kType == 254 { - pk.sha1Checksum = true - } - default: - return errors.UnsupportedError("deprecated s2k function in private key") - } - - if pk.Encrypted { - blockSize := pk.cipher.blockSize() - if blockSize == 0 { - return errors.UnsupportedError("unsupported cipher in private key: " + strconv.Itoa(int(pk.cipher))) - } - pk.iv = make([]byte, blockSize) - _, err = readFull(r, pk.iv) - if err != nil { - return - } - } - - pk.encryptedData, err = io.ReadAll(r) - if err != nil { - return - } - - if !pk.Encrypted { - return pk.parsePrivateKey(pk.encryptedData) - } - - return -} - -func mod64kHash(d []byte) uint16 { - var h uint16 - for _, b := range d { - h += uint16(b) - } - return h -} - -func (pk *PrivateKey) Serialize(w io.Writer) (err error) { - // TODO(agl): support encrypted private keys - buf := bytes.NewBuffer(nil) - err = pk.PublicKey.serializeWithoutHeaders(buf) - if err != nil { - return - } - buf.WriteByte(0 /* no encryption */) - - privateKeyBuf := bytes.NewBuffer(nil) - - switch priv := pk.PrivateKey.(type) { - case *rsa.PrivateKey: - err = serializeRSAPrivateKey(privateKeyBuf, priv) - case *dsa.PrivateKey: - err = serializeDSAPrivateKey(privateKeyBuf, priv) - case *elgamal.PrivateKey: - err = serializeElGamalPrivateKey(privateKeyBuf, priv) - case *ecdsa.PrivateKey: - err = serializeECDSAPrivateKey(privateKeyBuf, priv) - default: - err = errors.InvalidArgumentError("unknown private key type") - } - if err != nil { - return - } - - ptype := packetTypePrivateKey - contents := buf.Bytes() - privateKeyBytes := privateKeyBuf.Bytes() - if pk.IsSubkey { - ptype = packetTypePrivateSubkey - } - err = serializeHeader(w, ptype, len(contents)+len(privateKeyBytes)+2) - if err != nil { - return - } - _, err = w.Write(contents) - if err != nil { - return - } - _, err = w.Write(privateKeyBytes) - if err != nil { - return - } - - checksum := mod64kHash(privateKeyBytes) - var checksumBytes [2]byte - checksumBytes[0] = byte(checksum >> 8) - checksumBytes[1] = byte(checksum) - _, err = w.Write(checksumBytes[:]) - - return -} - -func serializeRSAPrivateKey(w io.Writer, priv *rsa.PrivateKey) error { - err := writeBig(w, priv.D) - if err != nil { - return err - } - err = writeBig(w, priv.Primes[1]) - if err != nil { - return err - } - err = writeBig(w, priv.Primes[0]) - if err != nil { - return err - } - return writeBig(w, priv.Precomputed.Qinv) -} - -func serializeDSAPrivateKey(w io.Writer, priv *dsa.PrivateKey) error { - return writeBig(w, priv.X) -} - -func serializeElGamalPrivateKey(w io.Writer, priv *elgamal.PrivateKey) error { - return writeBig(w, priv.X) -} - -func serializeECDSAPrivateKey(w io.Writer, priv *ecdsa.PrivateKey) error { - return writeBig(w, priv.D) -} - -// Decrypt decrypts an encrypted private key using a passphrase. -func (pk *PrivateKey) Decrypt(passphrase []byte) error { - if !pk.Encrypted { - return nil - } - - key := make([]byte, pk.cipher.KeySize()) - pk.s2k(key, passphrase) - block := pk.cipher.new(key) - cfb := cipher.NewCFBDecrypter(block, pk.iv) - - data := make([]byte, len(pk.encryptedData)) - cfb.XORKeyStream(data, pk.encryptedData) - - if pk.sha1Checksum { - if len(data) < sha1.Size { - return errors.StructuralError("truncated private key data") - } - h := sha1.New() - h.Write(data[:len(data)-sha1.Size]) - sum := h.Sum(nil) - if !bytes.Equal(sum, data[len(data)-sha1.Size:]) { - return errors.StructuralError("private key checksum failure") - } - data = data[:len(data)-sha1.Size] - } else { - if len(data) < 2 { - return errors.StructuralError("truncated private key data") - } - var sum uint16 - for i := 0; i < len(data)-2; i++ { - sum += uint16(data[i]) - } - if data[len(data)-2] != uint8(sum>>8) || - data[len(data)-1] != uint8(sum) { - return errors.StructuralError("private key checksum failure") - } - data = data[:len(data)-2] - } - - return pk.parsePrivateKey(data) -} - -func (pk *PrivateKey) parsePrivateKey(data []byte) (err error) { - switch pk.PublicKey.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoRSAEncryptOnly: - return pk.parseRSAPrivateKey(data) - case PubKeyAlgoDSA: - return pk.parseDSAPrivateKey(data) - case PubKeyAlgoElGamal: - return pk.parseElGamalPrivateKey(data) - case PubKeyAlgoECDSA: - return pk.parseECDSAPrivateKey(data) - } - panic("impossible") -} - -func (pk *PrivateKey) parseRSAPrivateKey(data []byte) (err error) { - rsaPub := pk.PublicKey.PublicKey.(*rsa.PublicKey) - rsaPriv := new(rsa.PrivateKey) - rsaPriv.PublicKey = *rsaPub - - buf := bytes.NewBuffer(data) - d, _, err := readMPI(buf) - if err != nil { - return - } - p, _, err := readMPI(buf) - if err != nil { - return - } - q, _, err := readMPI(buf) - if err != nil { - return - } - - rsaPriv.D = new(big.Int).SetBytes(d) - rsaPriv.Primes = make([]*big.Int, 2) - rsaPriv.Primes[0] = new(big.Int).SetBytes(p) - rsaPriv.Primes[1] = new(big.Int).SetBytes(q) - if err := rsaPriv.Validate(); err != nil { - return err - } - rsaPriv.Precompute() - pk.PrivateKey = rsaPriv - pk.Encrypted = false - pk.encryptedData = nil - - return nil -} - -func (pk *PrivateKey) parseDSAPrivateKey(data []byte) (err error) { - dsaPub := pk.PublicKey.PublicKey.(*dsa.PublicKey) - dsaPriv := new(dsa.PrivateKey) - dsaPriv.PublicKey = *dsaPub - - buf := bytes.NewBuffer(data) - x, _, err := readMPI(buf) - if err != nil { - return - } - - dsaPriv.X = new(big.Int).SetBytes(x) - pk.PrivateKey = dsaPriv - pk.Encrypted = false - pk.encryptedData = nil - - return nil -} - -func (pk *PrivateKey) parseElGamalPrivateKey(data []byte) (err error) { - pub := pk.PublicKey.PublicKey.(*elgamal.PublicKey) - priv := new(elgamal.PrivateKey) - priv.PublicKey = *pub - - buf := bytes.NewBuffer(data) - x, _, err := readMPI(buf) - if err != nil { - return - } - - priv.X = new(big.Int).SetBytes(x) - pk.PrivateKey = priv - pk.Encrypted = false - pk.encryptedData = nil - - return nil -} - -func (pk *PrivateKey) parseECDSAPrivateKey(data []byte) (err error) { - ecdsaPub := pk.PublicKey.PublicKey.(*ecdsa.PublicKey) - - buf := bytes.NewBuffer(data) - d, _, err := readMPI(buf) - if err != nil { - return - } - - pk.PrivateKey = &ecdsa.PrivateKey{ - PublicKey: *ecdsaPub, - D: new(big.Int).SetBytes(d), - } - pk.Encrypted = false - pk.encryptedData = nil - - return nil -} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key.go deleted file mode 100644 index fcd5f5251963b..0000000000000 --- a/vendor/golang.org/x/crypto/openpgp/packet/public_key.go +++ /dev/null @@ -1,753 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packet - -import ( - "bytes" - "crypto" - "crypto/dsa" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rsa" - "crypto/sha1" - _ "crypto/sha256" - _ "crypto/sha512" - "encoding/binary" - "fmt" - "hash" - "io" - "math/big" - "strconv" - "time" - - "golang.org/x/crypto/openpgp/elgamal" - "golang.org/x/crypto/openpgp/errors" -) - -var ( - // NIST curve P-256 - oidCurveP256 []byte = []byte{0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07} - // NIST curve P-384 - oidCurveP384 []byte = []byte{0x2B, 0x81, 0x04, 0x00, 0x22} - // NIST curve P-521 - oidCurveP521 []byte = []byte{0x2B, 0x81, 0x04, 0x00, 0x23} -) - -const maxOIDLength = 8 - -// ecdsaKey stores the algorithm-specific fields for ECDSA keys. -// as defined in RFC 6637, Section 9. -type ecdsaKey struct { - // oid contains the OID byte sequence identifying the elliptic curve used - oid []byte - // p contains the elliptic curve point that represents the public key - p parsedMPI -} - -// parseOID reads the OID for the curve as defined in RFC 6637, Section 9. -func parseOID(r io.Reader) (oid []byte, err error) { - buf := make([]byte, maxOIDLength) - if _, err = readFull(r, buf[:1]); err != nil { - return - } - oidLen := buf[0] - if int(oidLen) > len(buf) { - err = errors.UnsupportedError("invalid oid length: " + strconv.Itoa(int(oidLen))) - return - } - oid = buf[:oidLen] - _, err = readFull(r, oid) - return -} - -func (f *ecdsaKey) parse(r io.Reader) (err error) { - if f.oid, err = parseOID(r); err != nil { - return err - } - f.p.bytes, f.p.bitLength, err = readMPI(r) - return -} - -func (f *ecdsaKey) serialize(w io.Writer) (err error) { - buf := make([]byte, maxOIDLength+1) - buf[0] = byte(len(f.oid)) - copy(buf[1:], f.oid) - if _, err = w.Write(buf[:len(f.oid)+1]); err != nil { - return - } - return writeMPIs(w, f.p) -} - -func (f *ecdsaKey) newECDSA() (*ecdsa.PublicKey, error) { - var c elliptic.Curve - if bytes.Equal(f.oid, oidCurveP256) { - c = elliptic.P256() - } else if bytes.Equal(f.oid, oidCurveP384) { - c = elliptic.P384() - } else if bytes.Equal(f.oid, oidCurveP521) { - c = elliptic.P521() - } else { - return nil, errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", f.oid)) - } - x, y := elliptic.Unmarshal(c, f.p.bytes) - if x == nil { - return nil, errors.UnsupportedError("failed to parse EC point") - } - return &ecdsa.PublicKey{Curve: c, X: x, Y: y}, nil -} - -func (f *ecdsaKey) byteLen() int { - return 1 + len(f.oid) + 2 + len(f.p.bytes) -} - -type kdfHashFunction byte -type kdfAlgorithm byte - -// ecdhKdf stores key derivation function parameters -// used for ECDH encryption. See RFC 6637, Section 9. -type ecdhKdf struct { - KdfHash kdfHashFunction - KdfAlgo kdfAlgorithm -} - -func (f *ecdhKdf) parse(r io.Reader) (err error) { - buf := make([]byte, 1) - if _, err = readFull(r, buf); err != nil { - return - } - kdfLen := int(buf[0]) - if kdfLen < 3 { - return errors.UnsupportedError("Unsupported ECDH KDF length: " + strconv.Itoa(kdfLen)) - } - buf = make([]byte, kdfLen) - if _, err = readFull(r, buf); err != nil { - return - } - reserved := int(buf[0]) - f.KdfHash = kdfHashFunction(buf[1]) - f.KdfAlgo = kdfAlgorithm(buf[2]) - if reserved != 0x01 { - return errors.UnsupportedError("Unsupported KDF reserved field: " + strconv.Itoa(reserved)) - } - return -} - -func (f *ecdhKdf) serialize(w io.Writer) (err error) { - buf := make([]byte, 4) - // See RFC 6637, Section 9, Algorithm-Specific Fields for ECDH keys. - buf[0] = byte(0x03) // Length of the following fields - buf[1] = byte(0x01) // Reserved for future extensions, must be 1 for now - buf[2] = byte(f.KdfHash) - buf[3] = byte(f.KdfAlgo) - _, err = w.Write(buf[:]) - return -} - -func (f *ecdhKdf) byteLen() int { - return 4 -} - -// PublicKey represents an OpenPGP public key. See RFC 4880, section 5.5.2. -type PublicKey struct { - CreationTime time.Time - PubKeyAlgo PublicKeyAlgorithm - PublicKey interface{} // *rsa.PublicKey, *dsa.PublicKey or *ecdsa.PublicKey - Fingerprint [20]byte - KeyId uint64 - IsSubkey bool - - n, e, p, q, g, y parsedMPI - - // RFC 6637 fields - ec *ecdsaKey - ecdh *ecdhKdf -} - -// signingKey provides a convenient abstraction over signature verification -// for v3 and v4 public keys. -type signingKey interface { - SerializeSignaturePrefix(io.Writer) - serializeWithoutHeaders(io.Writer) error -} - -func fromBig(n *big.Int) parsedMPI { - return parsedMPI{ - bytes: n.Bytes(), - bitLength: uint16(n.BitLen()), - } -} - -// NewRSAPublicKey returns a PublicKey that wraps the given rsa.PublicKey. -func NewRSAPublicKey(creationTime time.Time, pub *rsa.PublicKey) *PublicKey { - pk := &PublicKey{ - CreationTime: creationTime, - PubKeyAlgo: PubKeyAlgoRSA, - PublicKey: pub, - n: fromBig(pub.N), - e: fromBig(big.NewInt(int64(pub.E))), - } - - pk.setFingerPrintAndKeyId() - return pk -} - -// NewDSAPublicKey returns a PublicKey that wraps the given dsa.PublicKey. -func NewDSAPublicKey(creationTime time.Time, pub *dsa.PublicKey) *PublicKey { - pk := &PublicKey{ - CreationTime: creationTime, - PubKeyAlgo: PubKeyAlgoDSA, - PublicKey: pub, - p: fromBig(pub.P), - q: fromBig(pub.Q), - g: fromBig(pub.G), - y: fromBig(pub.Y), - } - - pk.setFingerPrintAndKeyId() - return pk -} - -// NewElGamalPublicKey returns a PublicKey that wraps the given elgamal.PublicKey. -func NewElGamalPublicKey(creationTime time.Time, pub *elgamal.PublicKey) *PublicKey { - pk := &PublicKey{ - CreationTime: creationTime, - PubKeyAlgo: PubKeyAlgoElGamal, - PublicKey: pub, - p: fromBig(pub.P), - g: fromBig(pub.G), - y: fromBig(pub.Y), - } - - pk.setFingerPrintAndKeyId() - return pk -} - -func NewECDSAPublicKey(creationTime time.Time, pub *ecdsa.PublicKey) *PublicKey { - pk := &PublicKey{ - CreationTime: creationTime, - PubKeyAlgo: PubKeyAlgoECDSA, - PublicKey: pub, - ec: new(ecdsaKey), - } - - switch pub.Curve { - case elliptic.P256(): - pk.ec.oid = oidCurveP256 - case elliptic.P384(): - pk.ec.oid = oidCurveP384 - case elliptic.P521(): - pk.ec.oid = oidCurveP521 - default: - panic("unknown elliptic curve") - } - - pk.ec.p.bytes = elliptic.Marshal(pub.Curve, pub.X, pub.Y) - - // The bit length is 3 (for the 0x04 specifying an uncompressed key) - // plus two field elements (for x and y), which are rounded up to the - // nearest byte. See https://tools.ietf.org/html/rfc6637#section-6 - fieldBytes := (pub.Curve.Params().BitSize + 7) & ^7 - pk.ec.p.bitLength = uint16(3 + fieldBytes + fieldBytes) - - pk.setFingerPrintAndKeyId() - return pk -} - -func (pk *PublicKey) parse(r io.Reader) (err error) { - // RFC 4880, section 5.5.2 - var buf [6]byte - _, err = readFull(r, buf[:]) - if err != nil { - return - } - if buf[0] != 4 { - return errors.UnsupportedError("public key version") - } - pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0) - pk.PubKeyAlgo = PublicKeyAlgorithm(buf[5]) - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - err = pk.parseRSA(r) - case PubKeyAlgoDSA: - err = pk.parseDSA(r) - case PubKeyAlgoElGamal: - err = pk.parseElGamal(r) - case PubKeyAlgoECDSA: - pk.ec = new(ecdsaKey) - if err = pk.ec.parse(r); err != nil { - return err - } - pk.PublicKey, err = pk.ec.newECDSA() - case PubKeyAlgoECDH: - pk.ec = new(ecdsaKey) - if err = pk.ec.parse(r); err != nil { - return - } - pk.ecdh = new(ecdhKdf) - if err = pk.ecdh.parse(r); err != nil { - return - } - // The ECDH key is stored in an ecdsa.PublicKey for convenience. - pk.PublicKey, err = pk.ec.newECDSA() - default: - err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo))) - } - if err != nil { - return - } - - pk.setFingerPrintAndKeyId() - return -} - -func (pk *PublicKey) setFingerPrintAndKeyId() { - // RFC 4880, section 12.2 - fingerPrint := sha1.New() - pk.SerializeSignaturePrefix(fingerPrint) - pk.serializeWithoutHeaders(fingerPrint) - copy(pk.Fingerprint[:], fingerPrint.Sum(nil)) - pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[12:20]) -} - -// parseRSA parses RSA public key material from the given Reader. See RFC 4880, -// section 5.5.2. -func (pk *PublicKey) parseRSA(r io.Reader) (err error) { - pk.n.bytes, pk.n.bitLength, err = readMPI(r) - if err != nil { - return - } - pk.e.bytes, pk.e.bitLength, err = readMPI(r) - if err != nil { - return - } - - if len(pk.e.bytes) > 3 { - err = errors.UnsupportedError("large public exponent") - return - } - rsa := &rsa.PublicKey{ - N: new(big.Int).SetBytes(pk.n.bytes), - E: 0, - } - for i := 0; i < len(pk.e.bytes); i++ { - rsa.E <<= 8 - rsa.E |= int(pk.e.bytes[i]) - } - pk.PublicKey = rsa - return -} - -// parseDSA parses DSA public key material from the given Reader. See RFC 4880, -// section 5.5.2. -func (pk *PublicKey) parseDSA(r io.Reader) (err error) { - pk.p.bytes, pk.p.bitLength, err = readMPI(r) - if err != nil { - return - } - pk.q.bytes, pk.q.bitLength, err = readMPI(r) - if err != nil { - return - } - pk.g.bytes, pk.g.bitLength, err = readMPI(r) - if err != nil { - return - } - pk.y.bytes, pk.y.bitLength, err = readMPI(r) - if err != nil { - return - } - - dsa := new(dsa.PublicKey) - dsa.P = new(big.Int).SetBytes(pk.p.bytes) - dsa.Q = new(big.Int).SetBytes(pk.q.bytes) - dsa.G = new(big.Int).SetBytes(pk.g.bytes) - dsa.Y = new(big.Int).SetBytes(pk.y.bytes) - pk.PublicKey = dsa - return -} - -// parseElGamal parses ElGamal public key material from the given Reader. See -// RFC 4880, section 5.5.2. -func (pk *PublicKey) parseElGamal(r io.Reader) (err error) { - pk.p.bytes, pk.p.bitLength, err = readMPI(r) - if err != nil { - return - } - pk.g.bytes, pk.g.bitLength, err = readMPI(r) - if err != nil { - return - } - pk.y.bytes, pk.y.bitLength, err = readMPI(r) - if err != nil { - return - } - - elgamal := new(elgamal.PublicKey) - elgamal.P = new(big.Int).SetBytes(pk.p.bytes) - elgamal.G = new(big.Int).SetBytes(pk.g.bytes) - elgamal.Y = new(big.Int).SetBytes(pk.y.bytes) - pk.PublicKey = elgamal - return -} - -// SerializeSignaturePrefix writes the prefix for this public key to the given Writer. -// The prefix is used when calculating a signature over this public key. See -// RFC 4880, section 5.2.4. -func (pk *PublicKey) SerializeSignaturePrefix(h io.Writer) { - var pLength uint16 - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - pLength += 2 + uint16(len(pk.n.bytes)) - pLength += 2 + uint16(len(pk.e.bytes)) - case PubKeyAlgoDSA: - pLength += 2 + uint16(len(pk.p.bytes)) - pLength += 2 + uint16(len(pk.q.bytes)) - pLength += 2 + uint16(len(pk.g.bytes)) - pLength += 2 + uint16(len(pk.y.bytes)) - case PubKeyAlgoElGamal: - pLength += 2 + uint16(len(pk.p.bytes)) - pLength += 2 + uint16(len(pk.g.bytes)) - pLength += 2 + uint16(len(pk.y.bytes)) - case PubKeyAlgoECDSA: - pLength += uint16(pk.ec.byteLen()) - case PubKeyAlgoECDH: - pLength += uint16(pk.ec.byteLen()) - pLength += uint16(pk.ecdh.byteLen()) - default: - panic("unknown public key algorithm") - } - pLength += 6 - h.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}) - return -} - -func (pk *PublicKey) Serialize(w io.Writer) (err error) { - length := 6 // 6 byte header - - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - length += 2 + len(pk.n.bytes) - length += 2 + len(pk.e.bytes) - case PubKeyAlgoDSA: - length += 2 + len(pk.p.bytes) - length += 2 + len(pk.q.bytes) - length += 2 + len(pk.g.bytes) - length += 2 + len(pk.y.bytes) - case PubKeyAlgoElGamal: - length += 2 + len(pk.p.bytes) - length += 2 + len(pk.g.bytes) - length += 2 + len(pk.y.bytes) - case PubKeyAlgoECDSA: - length += pk.ec.byteLen() - case PubKeyAlgoECDH: - length += pk.ec.byteLen() - length += pk.ecdh.byteLen() - default: - panic("unknown public key algorithm") - } - - packetType := packetTypePublicKey - if pk.IsSubkey { - packetType = packetTypePublicSubkey - } - err = serializeHeader(w, packetType, length) - if err != nil { - return - } - return pk.serializeWithoutHeaders(w) -} - -// serializeWithoutHeaders marshals the PublicKey to w in the form of an -// OpenPGP public key packet, not including the packet header. -func (pk *PublicKey) serializeWithoutHeaders(w io.Writer) (err error) { - var buf [6]byte - buf[0] = 4 - t := uint32(pk.CreationTime.Unix()) - buf[1] = byte(t >> 24) - buf[2] = byte(t >> 16) - buf[3] = byte(t >> 8) - buf[4] = byte(t) - buf[5] = byte(pk.PubKeyAlgo) - - _, err = w.Write(buf[:]) - if err != nil { - return - } - - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - return writeMPIs(w, pk.n, pk.e) - case PubKeyAlgoDSA: - return writeMPIs(w, pk.p, pk.q, pk.g, pk.y) - case PubKeyAlgoElGamal: - return writeMPIs(w, pk.p, pk.g, pk.y) - case PubKeyAlgoECDSA: - return pk.ec.serialize(w) - case PubKeyAlgoECDH: - if err = pk.ec.serialize(w); err != nil { - return - } - return pk.ecdh.serialize(w) - } - return errors.InvalidArgumentError("bad public-key algorithm") -} - -// CanSign returns true iff this public key can generate signatures -func (pk *PublicKey) CanSign() bool { - return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly && pk.PubKeyAlgo != PubKeyAlgoElGamal -} - -// VerifySignature returns nil iff sig is a valid signature, made by this -// public key, of the data hashed into signed. signed is mutated by this call. -func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err error) { - if !pk.CanSign() { - return errors.InvalidArgumentError("public key cannot generate signatures") - } - - signed.Write(sig.HashSuffix) - hashBytes := signed.Sum(nil) - - if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { - return errors.SignatureError("hash tag doesn't match") - } - - if pk.PubKeyAlgo != sig.PubKeyAlgo { - return errors.InvalidArgumentError("public key and signature use different algorithms") - } - - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: - rsaPublicKey, _ := pk.PublicKey.(*rsa.PublicKey) - err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, padToKeySize(rsaPublicKey, sig.RSASignature.bytes)) - if err != nil { - return errors.SignatureError("RSA verification failure") - } - return nil - case PubKeyAlgoDSA: - dsaPublicKey, _ := pk.PublicKey.(*dsa.PublicKey) - // Need to truncate hashBytes to match FIPS 186-3 section 4.6. - subgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8 - if len(hashBytes) > subgroupSize { - hashBytes = hashBytes[:subgroupSize] - } - if !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.bytes), new(big.Int).SetBytes(sig.DSASigS.bytes)) { - return errors.SignatureError("DSA verification failure") - } - return nil - case PubKeyAlgoECDSA: - ecdsaPublicKey := pk.PublicKey.(*ecdsa.PublicKey) - if !ecdsa.Verify(ecdsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.ECDSASigR.bytes), new(big.Int).SetBytes(sig.ECDSASigS.bytes)) { - return errors.SignatureError("ECDSA verification failure") - } - return nil - default: - return errors.SignatureError("Unsupported public key algorithm used in signature") - } -} - -// VerifySignatureV3 returns nil iff sig is a valid signature, made by this -// public key, of the data hashed into signed. signed is mutated by this call. -func (pk *PublicKey) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err error) { - if !pk.CanSign() { - return errors.InvalidArgumentError("public key cannot generate signatures") - } - - suffix := make([]byte, 5) - suffix[0] = byte(sig.SigType) - binary.BigEndian.PutUint32(suffix[1:], uint32(sig.CreationTime.Unix())) - signed.Write(suffix) - hashBytes := signed.Sum(nil) - - if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { - return errors.SignatureError("hash tag doesn't match") - } - - if pk.PubKeyAlgo != sig.PubKeyAlgo { - return errors.InvalidArgumentError("public key and signature use different algorithms") - } - - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: - rsaPublicKey := pk.PublicKey.(*rsa.PublicKey) - if err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, padToKeySize(rsaPublicKey, sig.RSASignature.bytes)); err != nil { - return errors.SignatureError("RSA verification failure") - } - return - case PubKeyAlgoDSA: - dsaPublicKey := pk.PublicKey.(*dsa.PublicKey) - // Need to truncate hashBytes to match FIPS 186-3 section 4.6. - subgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8 - if len(hashBytes) > subgroupSize { - hashBytes = hashBytes[:subgroupSize] - } - if !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.bytes), new(big.Int).SetBytes(sig.DSASigS.bytes)) { - return errors.SignatureError("DSA verification failure") - } - return nil - default: - panic("shouldn't happen") - } -} - -// keySignatureHash returns a Hash of the message that needs to be signed for -// pk to assert a subkey relationship to signed. -func keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { - if !hashFunc.Available() { - return nil, errors.UnsupportedError("hash function") - } - h = hashFunc.New() - - // RFC 4880, section 5.2.4 - pk.SerializeSignaturePrefix(h) - pk.serializeWithoutHeaders(h) - signed.SerializeSignaturePrefix(h) - signed.serializeWithoutHeaders(h) - return -} - -// VerifyKeySignature returns nil iff sig is a valid signature, made by this -// public key, of signed. -func (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error { - h, err := keySignatureHash(pk, signed, sig.Hash) - if err != nil { - return err - } - if err = pk.VerifySignature(h, sig); err != nil { - return err - } - - if sig.FlagSign { - // Signing subkeys must be cross-signed. See - // https://www.gnupg.org/faq/subkey-cross-certify.html. - if sig.EmbeddedSignature == nil { - return errors.StructuralError("signing subkey is missing cross-signature") - } - // Verify the cross-signature. This is calculated over the same - // data as the main signature, so we cannot just recursively - // call signed.VerifyKeySignature(...) - if h, err = keySignatureHash(pk, signed, sig.EmbeddedSignature.Hash); err != nil { - return errors.StructuralError("error while hashing for cross-signature: " + err.Error()) - } - if err := signed.VerifySignature(h, sig.EmbeddedSignature); err != nil { - return errors.StructuralError("error while verifying cross-signature: " + err.Error()) - } - } - - return nil -} - -func keyRevocationHash(pk signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { - if !hashFunc.Available() { - return nil, errors.UnsupportedError("hash function") - } - h = hashFunc.New() - - // RFC 4880, section 5.2.4 - pk.SerializeSignaturePrefix(h) - pk.serializeWithoutHeaders(h) - - return -} - -// VerifyRevocationSignature returns nil iff sig is a valid signature, made by this -// public key. -func (pk *PublicKey) VerifyRevocationSignature(sig *Signature) (err error) { - h, err := keyRevocationHash(pk, sig.Hash) - if err != nil { - return err - } - return pk.VerifySignature(h, sig) -} - -// userIdSignatureHash returns a Hash of the message that needs to be signed -// to assert that pk is a valid key for id. -func userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash.Hash, err error) { - if !hashFunc.Available() { - return nil, errors.UnsupportedError("hash function") - } - h = hashFunc.New() - - // RFC 4880, section 5.2.4 - pk.SerializeSignaturePrefix(h) - pk.serializeWithoutHeaders(h) - - var buf [5]byte - buf[0] = 0xb4 - buf[1] = byte(len(id) >> 24) - buf[2] = byte(len(id) >> 16) - buf[3] = byte(len(id) >> 8) - buf[4] = byte(len(id)) - h.Write(buf[:]) - h.Write([]byte(id)) - - return -} - -// VerifyUserIdSignature returns nil iff sig is a valid signature, made by this -// public key, that id is the identity of pub. -func (pk *PublicKey) VerifyUserIdSignature(id string, pub *PublicKey, sig *Signature) (err error) { - h, err := userIdSignatureHash(id, pub, sig.Hash) - if err != nil { - return err - } - return pk.VerifySignature(h, sig) -} - -// VerifyUserIdSignatureV3 returns nil iff sig is a valid signature, made by this -// public key, that id is the identity of pub. -func (pk *PublicKey) VerifyUserIdSignatureV3(id string, pub *PublicKey, sig *SignatureV3) (err error) { - h, err := userIdSignatureV3Hash(id, pub, sig.Hash) - if err != nil { - return err - } - return pk.VerifySignatureV3(h, sig) -} - -// KeyIdString returns the public key's fingerprint in capital hex -// (e.g. "6C7EE1B8621CC013"). -func (pk *PublicKey) KeyIdString() string { - return fmt.Sprintf("%X", pk.Fingerprint[12:20]) -} - -// KeyIdShortString returns the short form of public key's fingerprint -// in capital hex, as shown by gpg --list-keys (e.g. "621CC013"). -func (pk *PublicKey) KeyIdShortString() string { - return fmt.Sprintf("%X", pk.Fingerprint[16:20]) -} - -// A parsedMPI is used to store the contents of a big integer, along with the -// bit length that was specified in the original input. This allows the MPI to -// be reserialized exactly. -type parsedMPI struct { - bytes []byte - bitLength uint16 -} - -// writeMPIs is a utility function for serializing several big integers to the -// given Writer. -func writeMPIs(w io.Writer, mpis ...parsedMPI) (err error) { - for _, mpi := range mpis { - err = writeMPI(w, mpi.bitLength, mpi.bytes) - if err != nil { - return - } - } - return -} - -// BitLength returns the bit length for the given public key. -func (pk *PublicKey) BitLength() (bitLength uint16, err error) { - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - bitLength = pk.n.bitLength - case PubKeyAlgoDSA: - bitLength = pk.p.bitLength - case PubKeyAlgoElGamal: - bitLength = pk.p.bitLength - default: - err = errors.InvalidArgumentError("bad public-key algorithm") - } - return -} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go deleted file mode 100644 index 5daf7b6cfd4a0..0000000000000 --- a/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packet - -import ( - "crypto" - "crypto/md5" - "crypto/rsa" - "encoding/binary" - "fmt" - "hash" - "io" - "math/big" - "strconv" - "time" - - "golang.org/x/crypto/openpgp/errors" -) - -// PublicKeyV3 represents older, version 3 public keys. These keys are less secure and -// should not be used for signing or encrypting. They are supported here only for -// parsing version 3 key material and validating signatures. -// See RFC 4880, section 5.5.2. -type PublicKeyV3 struct { - CreationTime time.Time - DaysToExpire uint16 - PubKeyAlgo PublicKeyAlgorithm - PublicKey *rsa.PublicKey - Fingerprint [16]byte - KeyId uint64 - IsSubkey bool - - n, e parsedMPI -} - -// newRSAPublicKeyV3 returns a PublicKey that wraps the given rsa.PublicKey. -// Included here for testing purposes only. RFC 4880, section 5.5.2: -// "an implementation MUST NOT generate a V3 key, but MAY accept it." -func newRSAPublicKeyV3(creationTime time.Time, pub *rsa.PublicKey) *PublicKeyV3 { - pk := &PublicKeyV3{ - CreationTime: creationTime, - PublicKey: pub, - n: fromBig(pub.N), - e: fromBig(big.NewInt(int64(pub.E))), - } - - pk.setFingerPrintAndKeyId() - return pk -} - -func (pk *PublicKeyV3) parse(r io.Reader) (err error) { - // RFC 4880, section 5.5.2 - var buf [8]byte - if _, err = readFull(r, buf[:]); err != nil { - return - } - if buf[0] < 2 || buf[0] > 3 { - return errors.UnsupportedError("public key version") - } - pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0) - pk.DaysToExpire = binary.BigEndian.Uint16(buf[5:7]) - pk.PubKeyAlgo = PublicKeyAlgorithm(buf[7]) - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - err = pk.parseRSA(r) - default: - err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo))) - } - if err != nil { - return - } - - pk.setFingerPrintAndKeyId() - return -} - -func (pk *PublicKeyV3) setFingerPrintAndKeyId() { - // RFC 4880, section 12.2 - fingerPrint := md5.New() - fingerPrint.Write(pk.n.bytes) - fingerPrint.Write(pk.e.bytes) - fingerPrint.Sum(pk.Fingerprint[:0]) - pk.KeyId = binary.BigEndian.Uint64(pk.n.bytes[len(pk.n.bytes)-8:]) -} - -// parseRSA parses RSA public key material from the given Reader. See RFC 4880, -// section 5.5.2. -func (pk *PublicKeyV3) parseRSA(r io.Reader) (err error) { - if pk.n.bytes, pk.n.bitLength, err = readMPI(r); err != nil { - return - } - if pk.e.bytes, pk.e.bitLength, err = readMPI(r); err != nil { - return - } - - // RFC 4880 Section 12.2 requires the low 8 bytes of the - // modulus to form the key id. - if len(pk.n.bytes) < 8 { - return errors.StructuralError("v3 public key modulus is too short") - } - if len(pk.e.bytes) > 3 { - err = errors.UnsupportedError("large public exponent") - return - } - rsa := &rsa.PublicKey{N: new(big.Int).SetBytes(pk.n.bytes)} - for i := 0; i < len(pk.e.bytes); i++ { - rsa.E <<= 8 - rsa.E |= int(pk.e.bytes[i]) - } - pk.PublicKey = rsa - return -} - -// SerializeSignaturePrefix writes the prefix for this public key to the given Writer. -// The prefix is used when calculating a signature over this public key. See -// RFC 4880, section 5.2.4. -func (pk *PublicKeyV3) SerializeSignaturePrefix(w io.Writer) { - var pLength uint16 - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - pLength += 2 + uint16(len(pk.n.bytes)) - pLength += 2 + uint16(len(pk.e.bytes)) - default: - panic("unknown public key algorithm") - } - pLength += 6 - w.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}) - return -} - -func (pk *PublicKeyV3) Serialize(w io.Writer) (err error) { - length := 8 // 8 byte header - - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - length += 2 + len(pk.n.bytes) - length += 2 + len(pk.e.bytes) - default: - panic("unknown public key algorithm") - } - - packetType := packetTypePublicKey - if pk.IsSubkey { - packetType = packetTypePublicSubkey - } - if err = serializeHeader(w, packetType, length); err != nil { - return - } - return pk.serializeWithoutHeaders(w) -} - -// serializeWithoutHeaders marshals the PublicKey to w in the form of an -// OpenPGP public key packet, not including the packet header. -func (pk *PublicKeyV3) serializeWithoutHeaders(w io.Writer) (err error) { - var buf [8]byte - // Version 3 - buf[0] = 3 - // Creation time - t := uint32(pk.CreationTime.Unix()) - buf[1] = byte(t >> 24) - buf[2] = byte(t >> 16) - buf[3] = byte(t >> 8) - buf[4] = byte(t) - // Days to expire - buf[5] = byte(pk.DaysToExpire >> 8) - buf[6] = byte(pk.DaysToExpire) - // Public key algorithm - buf[7] = byte(pk.PubKeyAlgo) - - if _, err = w.Write(buf[:]); err != nil { - return - } - - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - return writeMPIs(w, pk.n, pk.e) - } - return errors.InvalidArgumentError("bad public-key algorithm") -} - -// CanSign returns true iff this public key can generate signatures -func (pk *PublicKeyV3) CanSign() bool { - return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly -} - -// VerifySignatureV3 returns nil iff sig is a valid signature, made by this -// public key, of the data hashed into signed. signed is mutated by this call. -func (pk *PublicKeyV3) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err error) { - if !pk.CanSign() { - return errors.InvalidArgumentError("public key cannot generate signatures") - } - - suffix := make([]byte, 5) - suffix[0] = byte(sig.SigType) - binary.BigEndian.PutUint32(suffix[1:], uint32(sig.CreationTime.Unix())) - signed.Write(suffix) - hashBytes := signed.Sum(nil) - - if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { - return errors.SignatureError("hash tag doesn't match") - } - - if pk.PubKeyAlgo != sig.PubKeyAlgo { - return errors.InvalidArgumentError("public key and signature use different algorithms") - } - - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: - if err = rsa.VerifyPKCS1v15(pk.PublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes); err != nil { - return errors.SignatureError("RSA verification failure") - } - return - default: - // V3 public keys only support RSA. - panic("shouldn't happen") - } -} - -// VerifyUserIdSignatureV3 returns nil iff sig is a valid signature, made by this -// public key, that id is the identity of pub. -func (pk *PublicKeyV3) VerifyUserIdSignatureV3(id string, pub *PublicKeyV3, sig *SignatureV3) (err error) { - h, err := userIdSignatureV3Hash(id, pk, sig.Hash) - if err != nil { - return err - } - return pk.VerifySignatureV3(h, sig) -} - -// VerifyKeySignatureV3 returns nil iff sig is a valid signature, made by this -// public key, of signed. -func (pk *PublicKeyV3) VerifyKeySignatureV3(signed *PublicKeyV3, sig *SignatureV3) (err error) { - h, err := keySignatureHash(pk, signed, sig.Hash) - if err != nil { - return err - } - return pk.VerifySignatureV3(h, sig) -} - -// userIdSignatureV3Hash returns a Hash of the message that needs to be signed -// to assert that pk is a valid key for id. -func userIdSignatureV3Hash(id string, pk signingKey, hfn crypto.Hash) (h hash.Hash, err error) { - if !hfn.Available() { - return nil, errors.UnsupportedError("hash function") - } - h = hfn.New() - - // RFC 4880, section 5.2.4 - pk.SerializeSignaturePrefix(h) - pk.serializeWithoutHeaders(h) - - h.Write([]byte(id)) - - return -} - -// KeyIdString returns the public key's fingerprint in capital hex -// (e.g. "6C7EE1B8621CC013"). -func (pk *PublicKeyV3) KeyIdString() string { - return fmt.Sprintf("%X", pk.KeyId) -} - -// KeyIdShortString returns the short form of public key's fingerprint -// in capital hex, as shown by gpg --list-keys (e.g. "621CC013"). -func (pk *PublicKeyV3) KeyIdShortString() string { - return fmt.Sprintf("%X", pk.KeyId&0xFFFFFFFF) -} - -// BitLength returns the bit length for the given public key. -func (pk *PublicKeyV3) BitLength() (bitLength uint16, err error) { - switch pk.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: - bitLength = pk.n.bitLength - default: - err = errors.InvalidArgumentError("bad public-key algorithm") - } - return -} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go deleted file mode 100644 index 6edff889349b3..0000000000000 --- a/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packet - -import ( - "crypto" - "encoding/binary" - "fmt" - "io" - "strconv" - "time" - - "golang.org/x/crypto/openpgp/errors" - "golang.org/x/crypto/openpgp/s2k" -) - -// SignatureV3 represents older version 3 signatures. These signatures are less secure -// than version 4 and should not be used to create new signatures. They are included -// here for backwards compatibility to read and validate with older key material. -// See RFC 4880, section 5.2.2. -type SignatureV3 struct { - SigType SignatureType - CreationTime time.Time - IssuerKeyId uint64 - PubKeyAlgo PublicKeyAlgorithm - Hash crypto.Hash - HashTag [2]byte - - RSASignature parsedMPI - DSASigR, DSASigS parsedMPI -} - -func (sig *SignatureV3) parse(r io.Reader) (err error) { - // RFC 4880, section 5.2.2 - var buf [8]byte - if _, err = readFull(r, buf[:1]); err != nil { - return - } - if buf[0] < 2 || buf[0] > 3 { - err = errors.UnsupportedError("signature packet version " + strconv.Itoa(int(buf[0]))) - return - } - if _, err = readFull(r, buf[:1]); err != nil { - return - } - if buf[0] != 5 { - err = errors.UnsupportedError( - "invalid hashed material length " + strconv.Itoa(int(buf[0]))) - return - } - - // Read hashed material: signature type + creation time - if _, err = readFull(r, buf[:5]); err != nil { - return - } - sig.SigType = SignatureType(buf[0]) - t := binary.BigEndian.Uint32(buf[1:5]) - sig.CreationTime = time.Unix(int64(t), 0) - - // Eight-octet Key ID of signer. - if _, err = readFull(r, buf[:8]); err != nil { - return - } - sig.IssuerKeyId = binary.BigEndian.Uint64(buf[:]) - - // Public-key and hash algorithm - if _, err = readFull(r, buf[:2]); err != nil { - return - } - sig.PubKeyAlgo = PublicKeyAlgorithm(buf[0]) - switch sig.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA: - default: - err = errors.UnsupportedError("public key algorithm " + strconv.Itoa(int(sig.PubKeyAlgo))) - return - } - var ok bool - if sig.Hash, ok = s2k.HashIdToHash(buf[1]); !ok { - return errors.UnsupportedError("hash function " + strconv.Itoa(int(buf[2]))) - } - - // Two-octet field holding left 16 bits of signed hash value. - if _, err = readFull(r, sig.HashTag[:2]); err != nil { - return - } - - switch sig.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: - sig.RSASignature.bytes, sig.RSASignature.bitLength, err = readMPI(r) - case PubKeyAlgoDSA: - if sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r); err != nil { - return - } - sig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r) - default: - panic("unreachable") - } - return -} - -// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been -// called first. -func (sig *SignatureV3) Serialize(w io.Writer) (err error) { - buf := make([]byte, 8) - - // Write the sig type and creation time - buf[0] = byte(sig.SigType) - binary.BigEndian.PutUint32(buf[1:5], uint32(sig.CreationTime.Unix())) - if _, err = w.Write(buf[:5]); err != nil { - return - } - - // Write the issuer long key ID - binary.BigEndian.PutUint64(buf[:8], sig.IssuerKeyId) - if _, err = w.Write(buf[:8]); err != nil { - return - } - - // Write public key algorithm, hash ID, and hash value - buf[0] = byte(sig.PubKeyAlgo) - hashId, ok := s2k.HashToHashId(sig.Hash) - if !ok { - return errors.UnsupportedError(fmt.Sprintf("hash function %v", sig.Hash)) - } - buf[1] = hashId - copy(buf[2:4], sig.HashTag[:]) - if _, err = w.Write(buf[:4]); err != nil { - return - } - - if sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil { - return errors.InvalidArgumentError("Signature: need to call Sign, SignUserId or SignKey before Serialize") - } - - switch sig.PubKeyAlgo { - case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: - err = writeMPIs(w, sig.RSASignature) - case PubKeyAlgoDSA: - err = writeMPIs(w, sig.DSASigR, sig.DSASigS) - default: - panic("impossible") - } - return -} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go deleted file mode 100644 index 744c2d2c42dc5..0000000000000 --- a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package packet - -import ( - "bytes" - "crypto/cipher" - "io" - "strconv" - - "golang.org/x/crypto/openpgp/errors" - "golang.org/x/crypto/openpgp/s2k" -) - -// This is the largest session key that we'll support. Since no 512-bit cipher -// has even been seriously used, this is comfortably large. -const maxSessionKeySizeInBytes = 64 - -// SymmetricKeyEncrypted represents a passphrase protected session key. See RFC -// 4880, section 5.3. -type SymmetricKeyEncrypted struct { - CipherFunc CipherFunction - s2k func(out, in []byte) - encryptedKey []byte -} - -const symmetricKeyEncryptedVersion = 4 - -func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error { - // RFC 4880, section 5.3. - var buf [2]byte - if _, err := readFull(r, buf[:]); err != nil { - return err - } - if buf[0] != symmetricKeyEncryptedVersion { - return errors.UnsupportedError("SymmetricKeyEncrypted version") - } - ske.CipherFunc = CipherFunction(buf[1]) - - if ske.CipherFunc.KeySize() == 0 { - return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(buf[1]))) - } - - var err error - ske.s2k, err = s2k.Parse(r) - if err != nil { - return err - } - - encryptedKey := make([]byte, maxSessionKeySizeInBytes) - // The session key may follow. We just have to try and read to find - // out. If it exists then we limit it to maxSessionKeySizeInBytes. - n, err := readFull(r, encryptedKey) - if err != nil && err != io.ErrUnexpectedEOF { - return err - } - - if n != 0 { - if n == maxSessionKeySizeInBytes { - return errors.UnsupportedError("oversized encrypted session key") - } - ske.encryptedKey = encryptedKey[:n] - } - - return nil -} - -// Decrypt attempts to decrypt an encrypted session key and returns the key and -// the cipher to use when decrypting a subsequent Symmetrically Encrypted Data -// packet. -func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, CipherFunction, error) { - key := make([]byte, ske.CipherFunc.KeySize()) - ske.s2k(key, passphrase) - - if len(ske.encryptedKey) == 0 { - return key, ske.CipherFunc, nil - } - - // the IV is all zeros - iv := make([]byte, ske.CipherFunc.blockSize()) - c := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv) - plaintextKey := make([]byte, len(ske.encryptedKey)) - c.XORKeyStream(plaintextKey, ske.encryptedKey) - cipherFunc := CipherFunction(plaintextKey[0]) - if cipherFunc.blockSize() == 0 { - return nil, ske.CipherFunc, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc))) - } - plaintextKey = plaintextKey[1:] - if l, cipherKeySize := len(plaintextKey), cipherFunc.KeySize(); l != cipherFunc.KeySize() { - return nil, cipherFunc, errors.StructuralError("length of decrypted key (" + strconv.Itoa(l) + ") " + - "not equal to cipher keysize (" + strconv.Itoa(cipherKeySize) + ")") - } - return plaintextKey, cipherFunc, nil -} - -// SerializeSymmetricKeyEncrypted serializes a symmetric key packet to w. The -// packet contains a random session key, encrypted by a key derived from the -// given passphrase. The session key is returned and must be passed to -// SerializeSymmetricallyEncrypted. -// If config is nil, sensible defaults will be used. -func SerializeSymmetricKeyEncrypted(w io.Writer, passphrase []byte, config *Config) (key []byte, err error) { - cipherFunc := config.Cipher() - keySize := cipherFunc.KeySize() - if keySize == 0 { - return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc))) - } - - s2kBuf := new(bytes.Buffer) - keyEncryptingKey := make([]byte, keySize) - // s2k.Serialize salts and stretches the passphrase, and writes the - // resulting key to keyEncryptingKey and the s2k descriptor to s2kBuf. - err = s2k.Serialize(s2kBuf, keyEncryptingKey, config.Random(), passphrase, &s2k.Config{Hash: config.Hash(), S2KCount: config.PasswordHashIterations()}) - if err != nil { - return - } - s2kBytes := s2kBuf.Bytes() - - packetLength := 2 /* header */ + len(s2kBytes) + 1 /* cipher type */ + keySize - err = serializeHeader(w, packetTypeSymmetricKeyEncrypted, packetLength) - if err != nil { - return - } - - var buf [2]byte - buf[0] = symmetricKeyEncryptedVersion - buf[1] = byte(cipherFunc) - _, err = w.Write(buf[:]) - if err != nil { - return - } - _, err = w.Write(s2kBytes) - if err != nil { - return - } - - sessionKey := make([]byte, keySize) - _, err = io.ReadFull(config.Random(), sessionKey) - if err != nil { - return - } - iv := make([]byte, cipherFunc.blockSize()) - c := cipher.NewCFBEncrypter(cipherFunc.new(keyEncryptingKey), iv) - encryptedCipherAndKey := make([]byte, keySize+1) - c.XORKeyStream(encryptedCipherAndKey, buf[1:]) - c.XORKeyStream(encryptedCipherAndKey[1:], sessionKey) - _, err = w.Write(encryptedCipherAndKey) - if err != nil { - return - } - - key = sessionKey - return -} diff --git a/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go b/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go deleted file mode 100644 index f53244a1c7b53..0000000000000 --- a/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package s2k implements the various OpenPGP string-to-key transforms as -// specified in RFC 4800 section 3.7.1. -// -// Deprecated: this package is unmaintained except for security fixes. New -// applications should consider a more focused, modern alternative to OpenPGP -// for their specific task. If you are required to interoperate with OpenPGP -// systems and need a maintained package, consider a community fork. -// See https://golang.org/issue/44226. -package s2k // import "golang.org/x/crypto/openpgp/s2k" - -import ( - "crypto" - "hash" - "io" - "strconv" - - "golang.org/x/crypto/openpgp/errors" -) - -// Config collects configuration parameters for s2k key-stretching -// transformatioms. A nil *Config is valid and results in all default -// values. Currently, Config is used only by the Serialize function in -// this package. -type Config struct { - // Hash is the default hash function to be used. If - // nil, SHA1 is used. - Hash crypto.Hash - // S2KCount is only used for symmetric encryption. It - // determines the strength of the passphrase stretching when - // the said passphrase is hashed to produce a key. S2KCount - // should be between 1024 and 65011712, inclusive. If Config - // is nil or S2KCount is 0, the value 65536 used. Not all - // values in the above range can be represented. S2KCount will - // be rounded up to the next representable value if it cannot - // be encoded exactly. When set, it is strongly encrouraged to - // use a value that is at least 65536. See RFC 4880 Section - // 3.7.1.3. - S2KCount int -} - -func (c *Config) hash() crypto.Hash { - if c == nil || uint(c.Hash) == 0 { - // SHA1 is the historical default in this package. - return crypto.SHA1 - } - - return c.Hash -} - -func (c *Config) encodedCount() uint8 { - if c == nil || c.S2KCount == 0 { - return 96 // The common case. Correspoding to 65536 - } - - i := c.S2KCount - switch { - // Behave like GPG. Should we make 65536 the lowest value used? - case i < 1024: - i = 1024 - case i > 65011712: - i = 65011712 - } - - return encodeCount(i) -} - -// encodeCount converts an iterative "count" in the range 1024 to -// 65011712, inclusive, to an encoded count. The return value is the -// octet that is actually stored in the GPG file. encodeCount panics -// if i is not in the above range (encodedCount above takes care to -// pass i in the correct range). See RFC 4880 Section 3.7.7.1. -func encodeCount(i int) uint8 { - if i < 1024 || i > 65011712 { - panic("count arg i outside the required range") - } - - for encoded := 0; encoded < 256; encoded++ { - count := decodeCount(uint8(encoded)) - if count >= i { - return uint8(encoded) - } - } - - return 255 -} - -// decodeCount returns the s2k mode 3 iterative "count" corresponding to -// the encoded octet c. -func decodeCount(c uint8) int { - return (16 + int(c&15)) << (uint32(c>>4) + 6) -} - -// Simple writes to out the result of computing the Simple S2K function (RFC -// 4880, section 3.7.1.1) using the given hash and input passphrase. -func Simple(out []byte, h hash.Hash, in []byte) { - Salted(out, h, in, nil) -} - -var zero [1]byte - -// Salted writes to out the result of computing the Salted S2K function (RFC -// 4880, section 3.7.1.2) using the given hash, input passphrase and salt. -func Salted(out []byte, h hash.Hash, in []byte, salt []byte) { - done := 0 - var digest []byte - - for i := 0; done < len(out); i++ { - h.Reset() - for j := 0; j < i; j++ { - h.Write(zero[:]) - } - h.Write(salt) - h.Write(in) - digest = h.Sum(digest[:0]) - n := copy(out[done:], digest) - done += n - } -} - -// Iterated writes to out the result of computing the Iterated and Salted S2K -// function (RFC 4880, section 3.7.1.3) using the given hash, input passphrase, -// salt and iteration count. -func Iterated(out []byte, h hash.Hash, in []byte, salt []byte, count int) { - combined := make([]byte, len(in)+len(salt)) - copy(combined, salt) - copy(combined[len(salt):], in) - - if count < len(combined) { - count = len(combined) - } - - done := 0 - var digest []byte - for i := 0; done < len(out); i++ { - h.Reset() - for j := 0; j < i; j++ { - h.Write(zero[:]) - } - written := 0 - for written < count { - if written+len(combined) > count { - todo := count - written - h.Write(combined[:todo]) - written = count - } else { - h.Write(combined) - written += len(combined) - } - } - digest = h.Sum(digest[:0]) - n := copy(out[done:], digest) - done += n - } -} - -// Parse reads a binary specification for a string-to-key transformation from r -// and returns a function which performs that transform. -func Parse(r io.Reader) (f func(out, in []byte), err error) { - var buf [9]byte - - _, err = io.ReadFull(r, buf[:2]) - if err != nil { - return - } - - hash, ok := HashIdToHash(buf[1]) - if !ok { - return nil, errors.UnsupportedError("hash for S2K function: " + strconv.Itoa(int(buf[1]))) - } - if !hash.Available() { - return nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hash))) - } - h := hash.New() - - switch buf[0] { - case 0: - f := func(out, in []byte) { - Simple(out, h, in) - } - return f, nil - case 1: - _, err = io.ReadFull(r, buf[:8]) - if err != nil { - return - } - f := func(out, in []byte) { - Salted(out, h, in, buf[:8]) - } - return f, nil - case 3: - _, err = io.ReadFull(r, buf[:9]) - if err != nil { - return - } - count := decodeCount(buf[8]) - f := func(out, in []byte) { - Iterated(out, h, in, buf[:8], count) - } - return f, nil - } - - return nil, errors.UnsupportedError("S2K function") -} - -// Serialize salts and stretches the given passphrase and writes the -// resulting key into key. It also serializes an S2K descriptor to -// w. The key stretching can be configured with c, which may be -// nil. In that case, sensible defaults will be used. -func Serialize(w io.Writer, key []byte, rand io.Reader, passphrase []byte, c *Config) error { - var buf [11]byte - buf[0] = 3 /* iterated and salted */ - buf[1], _ = HashToHashId(c.hash()) - salt := buf[2:10] - if _, err := io.ReadFull(rand, salt); err != nil { - return err - } - encodedCount := c.encodedCount() - count := decodeCount(encodedCount) - buf[10] = encodedCount - if _, err := w.Write(buf[:]); err != nil { - return err - } - - Iterated(key, c.hash().New(), passphrase, salt, count) - return nil -} - -// hashToHashIdMapping contains pairs relating OpenPGP's hash identifier with -// Go's crypto.Hash type. See RFC 4880, section 9.4. -var hashToHashIdMapping = []struct { - id byte - hash crypto.Hash - name string -}{ - {1, crypto.MD5, "MD5"}, - {2, crypto.SHA1, "SHA1"}, - {3, crypto.RIPEMD160, "RIPEMD160"}, - {8, crypto.SHA256, "SHA256"}, - {9, crypto.SHA384, "SHA384"}, - {10, crypto.SHA512, "SHA512"}, - {11, crypto.SHA224, "SHA224"}, -} - -// HashIdToHash returns a crypto.Hash which corresponds to the given OpenPGP -// hash id. -func HashIdToHash(id byte) (h crypto.Hash, ok bool) { - for _, m := range hashToHashIdMapping { - if m.id == id { - return m.hash, true - } - } - return 0, false -} - -// HashIdToString returns the name of the hash function corresponding to the -// given OpenPGP hash id. -func HashIdToString(id byte) (name string, ok bool) { - for _, m := range hashToHashIdMapping { - if m.id == id { - return m.name, true - } - } - - return "", false -} - -// HashToHashId returns an OpenPGP hash id which corresponds the given Hash. -func HashToHashId(h crypto.Hash) (id byte, ok bool) { - for _, m := range hashToHashIdMapping { - if m.hash == h { - return m.id, true - } - } - return 0, false -} diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go new file mode 100644 index 0000000000000..decd8cf9bf749 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/doc.go @@ -0,0 +1,62 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package sha3 implements the SHA-3 fixed-output-length hash functions and +// the SHAKE variable-output-length hash functions defined by FIPS-202. +// +// Both types of hash function use the "sponge" construction and the Keccak +// permutation. For a detailed specification see http://keccak.noekeon.org/ +// +// # Guidance +// +// If you aren't sure what function you need, use SHAKE256 with at least 64 +// bytes of output. The SHAKE instances are faster than the SHA3 instances; +// the latter have to allocate memory to conform to the hash.Hash interface. +// +// If you need a secret-key MAC (message authentication code), prepend the +// secret key to the input, hash with SHAKE256 and read at least 32 bytes of +// output. +// +// # Security strengths +// +// The SHA3-x (x equals 224, 256, 384, or 512) functions have a security +// strength against preimage attacks of x bits. Since they only produce "x" +// bits of output, their collision-resistance is only "x/2" bits. +// +// The SHAKE-256 and -128 functions have a generic security strength of 256 and +// 128 bits against all attacks, provided that at least 2x bits of their output +// is used. Requesting more than 64 or 32 bytes of output, respectively, does +// not increase the collision-resistance of the SHAKE functions. +// +// # The sponge construction +// +// A sponge builds a pseudo-random function from a public pseudo-random +// permutation, by applying the permutation to a state of "rate + capacity" +// bytes, but hiding "capacity" of the bytes. +// +// A sponge starts out with a zero state. To hash an input using a sponge, up +// to "rate" bytes of the input are XORed into the sponge's state. The sponge +// is then "full" and the permutation is applied to "empty" it. This process is +// repeated until all the input has been "absorbed". The input is then padded. +// The digest is "squeezed" from the sponge in the same way, except that output +// is copied out instead of input being XORed in. +// +// A sponge is parameterized by its generic security strength, which is equal +// to half its capacity; capacity + rate is equal to the permutation's width. +// Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means +// that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. +// +// # Recommendations +// +// The SHAKE functions are recommended for most new uses. They can produce +// output of arbitrary length. SHAKE256, with an output length of at least +// 64 bytes, provides 256-bit security against all attacks. The Keccak team +// recommends it for most applications upgrading from SHA2-512. (NIST chose a +// much stronger, but much slower, sponge instance for SHA3-512.) +// +// The SHA-3 functions are "drop-in" replacements for the SHA-2 functions. +// They produce output of the same length, with the same security strengths +// against all attacks. This means, in particular, that SHA3-256 only has +// 128-bit collision resistance, because its output length is 32 bytes. +package sha3 // import "golang.org/x/crypto/sha3" diff --git a/vendor/golang.org/x/crypto/sha3/hashes.go b/vendor/golang.org/x/crypto/sha3/hashes.go new file mode 100644 index 0000000000000..0d8043fd2a173 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/hashes.go @@ -0,0 +1,97 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file provides functions for creating instances of the SHA-3 +// and SHAKE hash functions, as well as utility functions for hashing +// bytes. + +import ( + "hash" +) + +// New224 creates a new SHA3-224 hash. +// Its generic security strength is 224 bits against preimage attacks, +// and 112 bits against collision attacks. +func New224() hash.Hash { + if h := new224Asm(); h != nil { + return h + } + return &state{rate: 144, outputLen: 28, dsbyte: 0x06} +} + +// New256 creates a new SHA3-256 hash. +// Its generic security strength is 256 bits against preimage attacks, +// and 128 bits against collision attacks. +func New256() hash.Hash { + if h := new256Asm(); h != nil { + return h + } + return &state{rate: 136, outputLen: 32, dsbyte: 0x06} +} + +// New384 creates a new SHA3-384 hash. +// Its generic security strength is 384 bits against preimage attacks, +// and 192 bits against collision attacks. +func New384() hash.Hash { + if h := new384Asm(); h != nil { + return h + } + return &state{rate: 104, outputLen: 48, dsbyte: 0x06} +} + +// New512 creates a new SHA3-512 hash. +// Its generic security strength is 512 bits against preimage attacks, +// and 256 bits against collision attacks. +func New512() hash.Hash { + if h := new512Asm(); h != nil { + return h + } + return &state{rate: 72, outputLen: 64, dsbyte: 0x06} +} + +// NewLegacyKeccak256 creates a new Keccak-256 hash. +// +// Only use this function if you require compatibility with an existing cryptosystem +// that uses non-standard padding. All other users should use New256 instead. +func NewLegacyKeccak256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x01} } + +// NewLegacyKeccak512 creates a new Keccak-512 hash. +// +// Only use this function if you require compatibility with an existing cryptosystem +// that uses non-standard padding. All other users should use New512 instead. +func NewLegacyKeccak512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x01} } + +// Sum224 returns the SHA3-224 digest of the data. +func Sum224(data []byte) (digest [28]byte) { + h := New224() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum256 returns the SHA3-256 digest of the data. +func Sum256(data []byte) (digest [32]byte) { + h := New256() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum384 returns the SHA3-384 digest of the data. +func Sum384(data []byte) (digest [48]byte) { + h := New384() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum512 returns the SHA3-512 digest of the data. +func Sum512(data []byte) (digest [64]byte) { + h := New512() + h.Write(data) + h.Sum(digest[:0]) + return +} diff --git a/vendor/golang.org/x/crypto/sha3/hashes_generic.go b/vendor/golang.org/x/crypto/sha3/hashes_generic.go new file mode 100644 index 0000000000000..c74fc20fcb33b --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/hashes_generic.go @@ -0,0 +1,28 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !gc || purego || !s390x +// +build !gc purego !s390x + +package sha3 + +import ( + "hash" +) + +// new224Asm returns an assembly implementation of SHA3-224 if available, +// otherwise it returns nil. +func new224Asm() hash.Hash { return nil } + +// new256Asm returns an assembly implementation of SHA3-256 if available, +// otherwise it returns nil. +func new256Asm() hash.Hash { return nil } + +// new384Asm returns an assembly implementation of SHA3-384 if available, +// otherwise it returns nil. +func new384Asm() hash.Hash { return nil } + +// new512Asm returns an assembly implementation of SHA3-512 if available, +// otherwise it returns nil. +func new512Asm() hash.Hash { return nil } diff --git a/vendor/golang.org/x/crypto/sha3/keccakf.go b/vendor/golang.org/x/crypto/sha3/keccakf.go new file mode 100644 index 0000000000000..e5faa375c04e8 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf.go @@ -0,0 +1,415 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !amd64 || purego || !gc +// +build !amd64 purego !gc + +package sha3 + +import "math/bits" + +// rc stores the round constants for use in the ι step. +var rc = [24]uint64{ + 0x0000000000000001, + 0x0000000000008082, + 0x800000000000808A, + 0x8000000080008000, + 0x000000000000808B, + 0x0000000080000001, + 0x8000000080008081, + 0x8000000000008009, + 0x000000000000008A, + 0x0000000000000088, + 0x0000000080008009, + 0x000000008000000A, + 0x000000008000808B, + 0x800000000000008B, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x000000000000800A, + 0x800000008000000A, + 0x8000000080008081, + 0x8000000000008080, + 0x0000000080000001, + 0x8000000080008008, +} + +// keccakF1600 applies the Keccak permutation to a 1600b-wide +// state represented as a slice of 25 uint64s. +func keccakF1600(a *[25]uint64) { + // Implementation translated from Keccak-inplace.c + // in the keccak reference code. + var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 + + for i := 0; i < 24; i += 4 { + // Combines the 5 steps in each round into 2 steps. + // Unrolls 4 rounds per loop and spreads some steps across rounds. + + // Round 1 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[6] ^ d1 + bc1 = bits.RotateLeft64(t, 44) + t = a[12] ^ d2 + bc2 = bits.RotateLeft64(t, 43) + t = a[18] ^ d3 + bc3 = bits.RotateLeft64(t, 21) + t = a[24] ^ d4 + bc4 = bits.RotateLeft64(t, 14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i] + a[6] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc2 = bits.RotateLeft64(t, 3) + t = a[16] ^ d1 + bc3 = bits.RotateLeft64(t, 45) + t = a[22] ^ d2 + bc4 = bits.RotateLeft64(t, 61) + t = a[3] ^ d3 + bc0 = bits.RotateLeft64(t, 28) + t = a[9] ^ d4 + bc1 = bits.RotateLeft64(t, 20) + a[10] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc4 = bits.RotateLeft64(t, 18) + t = a[1] ^ d1 + bc0 = bits.RotateLeft64(t, 1) + t = a[7] ^ d2 + bc1 = bits.RotateLeft64(t, 6) + t = a[13] ^ d3 + bc2 = bits.RotateLeft64(t, 25) + t = a[19] ^ d4 + bc3 = bits.RotateLeft64(t, 8) + a[20] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc1 = bits.RotateLeft64(t, 36) + t = a[11] ^ d1 + bc2 = bits.RotateLeft64(t, 10) + t = a[17] ^ d2 + bc3 = bits.RotateLeft64(t, 15) + t = a[23] ^ d3 + bc4 = bits.RotateLeft64(t, 56) + t = a[4] ^ d4 + bc0 = bits.RotateLeft64(t, 27) + a[5] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc3 = bits.RotateLeft64(t, 41) + t = a[21] ^ d1 + bc4 = bits.RotateLeft64(t, 2) + t = a[2] ^ d2 + bc0 = bits.RotateLeft64(t, 62) + t = a[8] ^ d3 + bc1 = bits.RotateLeft64(t, 55) + t = a[14] ^ d4 + bc2 = bits.RotateLeft64(t, 39) + a[15] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + // Round 2 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[16] ^ d1 + bc1 = bits.RotateLeft64(t, 44) + t = a[7] ^ d2 + bc2 = bits.RotateLeft64(t, 43) + t = a[23] ^ d3 + bc3 = bits.RotateLeft64(t, 21) + t = a[14] ^ d4 + bc4 = bits.RotateLeft64(t, 14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+1] + a[16] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc2 = bits.RotateLeft64(t, 3) + t = a[11] ^ d1 + bc3 = bits.RotateLeft64(t, 45) + t = a[2] ^ d2 + bc4 = bits.RotateLeft64(t, 61) + t = a[18] ^ d3 + bc0 = bits.RotateLeft64(t, 28) + t = a[9] ^ d4 + bc1 = bits.RotateLeft64(t, 20) + a[20] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc4 = bits.RotateLeft64(t, 18) + t = a[6] ^ d1 + bc0 = bits.RotateLeft64(t, 1) + t = a[22] ^ d2 + bc1 = bits.RotateLeft64(t, 6) + t = a[13] ^ d3 + bc2 = bits.RotateLeft64(t, 25) + t = a[4] ^ d4 + bc3 = bits.RotateLeft64(t, 8) + a[15] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc1 = bits.RotateLeft64(t, 36) + t = a[1] ^ d1 + bc2 = bits.RotateLeft64(t, 10) + t = a[17] ^ d2 + bc3 = bits.RotateLeft64(t, 15) + t = a[8] ^ d3 + bc4 = bits.RotateLeft64(t, 56) + t = a[24] ^ d4 + bc0 = bits.RotateLeft64(t, 27) + a[10] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc3 = bits.RotateLeft64(t, 41) + t = a[21] ^ d1 + bc4 = bits.RotateLeft64(t, 2) + t = a[12] ^ d2 + bc0 = bits.RotateLeft64(t, 62) + t = a[3] ^ d3 + bc1 = bits.RotateLeft64(t, 55) + t = a[19] ^ d4 + bc2 = bits.RotateLeft64(t, 39) + a[5] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + // Round 3 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[11] ^ d1 + bc1 = bits.RotateLeft64(t, 44) + t = a[22] ^ d2 + bc2 = bits.RotateLeft64(t, 43) + t = a[8] ^ d3 + bc3 = bits.RotateLeft64(t, 21) + t = a[19] ^ d4 + bc4 = bits.RotateLeft64(t, 14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+2] + a[11] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc2 = bits.RotateLeft64(t, 3) + t = a[1] ^ d1 + bc3 = bits.RotateLeft64(t, 45) + t = a[12] ^ d2 + bc4 = bits.RotateLeft64(t, 61) + t = a[23] ^ d3 + bc0 = bits.RotateLeft64(t, 28) + t = a[9] ^ d4 + bc1 = bits.RotateLeft64(t, 20) + a[15] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc4 = bits.RotateLeft64(t, 18) + t = a[16] ^ d1 + bc0 = bits.RotateLeft64(t, 1) + t = a[2] ^ d2 + bc1 = bits.RotateLeft64(t, 6) + t = a[13] ^ d3 + bc2 = bits.RotateLeft64(t, 25) + t = a[24] ^ d4 + bc3 = bits.RotateLeft64(t, 8) + a[5] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc1 = bits.RotateLeft64(t, 36) + t = a[6] ^ d1 + bc2 = bits.RotateLeft64(t, 10) + t = a[17] ^ d2 + bc3 = bits.RotateLeft64(t, 15) + t = a[3] ^ d3 + bc4 = bits.RotateLeft64(t, 56) + t = a[14] ^ d4 + bc0 = bits.RotateLeft64(t, 27) + a[20] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc3 = bits.RotateLeft64(t, 41) + t = a[21] ^ d1 + bc4 = bits.RotateLeft64(t, 2) + t = a[7] ^ d2 + bc0 = bits.RotateLeft64(t, 62) + t = a[18] ^ d3 + bc1 = bits.RotateLeft64(t, 55) + t = a[4] ^ d4 + bc2 = bits.RotateLeft64(t, 39) + a[10] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + // Round 4 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[1] ^ d1 + bc1 = bits.RotateLeft64(t, 44) + t = a[2] ^ d2 + bc2 = bits.RotateLeft64(t, 43) + t = a[3] ^ d3 + bc3 = bits.RotateLeft64(t, 21) + t = a[4] ^ d4 + bc4 = bits.RotateLeft64(t, 14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3] + a[1] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc2 = bits.RotateLeft64(t, 3) + t = a[6] ^ d1 + bc3 = bits.RotateLeft64(t, 45) + t = a[7] ^ d2 + bc4 = bits.RotateLeft64(t, 61) + t = a[8] ^ d3 + bc0 = bits.RotateLeft64(t, 28) + t = a[9] ^ d4 + bc1 = bits.RotateLeft64(t, 20) + a[5] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc4 = bits.RotateLeft64(t, 18) + t = a[11] ^ d1 + bc0 = bits.RotateLeft64(t, 1) + t = a[12] ^ d2 + bc1 = bits.RotateLeft64(t, 6) + t = a[13] ^ d3 + bc2 = bits.RotateLeft64(t, 25) + t = a[14] ^ d4 + bc3 = bits.RotateLeft64(t, 8) + a[10] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc1 = bits.RotateLeft64(t, 36) + t = a[16] ^ d1 + bc2 = bits.RotateLeft64(t, 10) + t = a[17] ^ d2 + bc3 = bits.RotateLeft64(t, 15) + t = a[18] ^ d3 + bc4 = bits.RotateLeft64(t, 56) + t = a[19] ^ d4 + bc0 = bits.RotateLeft64(t, 27) + a[15] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc3 = bits.RotateLeft64(t, 41) + t = a[21] ^ d1 + bc4 = bits.RotateLeft64(t, 2) + t = a[22] ^ d2 + bc0 = bits.RotateLeft64(t, 62) + t = a[23] ^ d3 + bc1 = bits.RotateLeft64(t, 55) + t = a[24] ^ d4 + bc2 = bits.RotateLeft64(t, 39) + a[20] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + } +} diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go new file mode 100644 index 0000000000000..248a38241ff9c --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go @@ -0,0 +1,14 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build amd64 && !purego && gc +// +build amd64,!purego,gc + +package sha3 + +// This function is implemented in keccakf_amd64.s. + +//go:noescape + +func keccakF1600(a *[25]uint64) diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s new file mode 100644 index 0000000000000..4cfa54383bfa8 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s @@ -0,0 +1,391 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build amd64 && !purego && gc +// +build amd64,!purego,gc + +// This code was translated into a form compatible with 6a from the public +// domain sources at https://github.com/gvanas/KeccakCodePackage + +// Offsets in state +#define _ba (0*8) +#define _be (1*8) +#define _bi (2*8) +#define _bo (3*8) +#define _bu (4*8) +#define _ga (5*8) +#define _ge (6*8) +#define _gi (7*8) +#define _go (8*8) +#define _gu (9*8) +#define _ka (10*8) +#define _ke (11*8) +#define _ki (12*8) +#define _ko (13*8) +#define _ku (14*8) +#define _ma (15*8) +#define _me (16*8) +#define _mi (17*8) +#define _mo (18*8) +#define _mu (19*8) +#define _sa (20*8) +#define _se (21*8) +#define _si (22*8) +#define _so (23*8) +#define _su (24*8) + +// Temporary registers +#define rT1 AX + +// Round vars +#define rpState DI +#define rpStack SP + +#define rDa BX +#define rDe CX +#define rDi DX +#define rDo R8 +#define rDu R9 + +#define rBa R10 +#define rBe R11 +#define rBi R12 +#define rBo R13 +#define rBu R14 + +#define rCa SI +#define rCe BP +#define rCi rBi +#define rCo rBo +#define rCu R15 + +#define MOVQ_RBI_RCE MOVQ rBi, rCe +#define XORQ_RT1_RCA XORQ rT1, rCa +#define XORQ_RT1_RCE XORQ rT1, rCe +#define XORQ_RBA_RCU XORQ rBa, rCu +#define XORQ_RBE_RCU XORQ rBe, rCu +#define XORQ_RDU_RCU XORQ rDu, rCu +#define XORQ_RDA_RCA XORQ rDa, rCa +#define XORQ_RDE_RCE XORQ rDe, rCe + +#define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \ + /* Prepare round */ \ + MOVQ rCe, rDa; \ + ROLQ $1, rDa; \ + \ + MOVQ _bi(iState), rCi; \ + XORQ _gi(iState), rDi; \ + XORQ rCu, rDa; \ + XORQ _ki(iState), rCi; \ + XORQ _mi(iState), rDi; \ + XORQ rDi, rCi; \ + \ + MOVQ rCi, rDe; \ + ROLQ $1, rDe; \ + \ + MOVQ _bo(iState), rCo; \ + XORQ _go(iState), rDo; \ + XORQ rCa, rDe; \ + XORQ _ko(iState), rCo; \ + XORQ _mo(iState), rDo; \ + XORQ rDo, rCo; \ + \ + MOVQ rCo, rDi; \ + ROLQ $1, rDi; \ + \ + MOVQ rCu, rDo; \ + XORQ rCe, rDi; \ + ROLQ $1, rDo; \ + \ + MOVQ rCa, rDu; \ + XORQ rCi, rDo; \ + ROLQ $1, rDu; \ + \ + /* Result b */ \ + MOVQ _ba(iState), rBa; \ + MOVQ _ge(iState), rBe; \ + XORQ rCo, rDu; \ + MOVQ _ki(iState), rBi; \ + MOVQ _mo(iState), rBo; \ + MOVQ _su(iState), rBu; \ + XORQ rDe, rBe; \ + ROLQ $44, rBe; \ + XORQ rDi, rBi; \ + XORQ rDa, rBa; \ + ROLQ $43, rBi; \ + \ + MOVQ rBe, rCa; \ + MOVQ rc, rT1; \ + ORQ rBi, rCa; \ + XORQ rBa, rT1; \ + XORQ rT1, rCa; \ + MOVQ rCa, _ba(oState); \ + \ + XORQ rDu, rBu; \ + ROLQ $14, rBu; \ + MOVQ rBa, rCu; \ + ANDQ rBe, rCu; \ + XORQ rBu, rCu; \ + MOVQ rCu, _bu(oState); \ + \ + XORQ rDo, rBo; \ + ROLQ $21, rBo; \ + MOVQ rBo, rT1; \ + ANDQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _bi(oState); \ + \ + NOTQ rBi; \ + ORQ rBa, rBu; \ + ORQ rBo, rBi; \ + XORQ rBo, rBu; \ + XORQ rBe, rBi; \ + MOVQ rBu, _bo(oState); \ + MOVQ rBi, _be(oState); \ + B_RBI_RCE; \ + \ + /* Result g */ \ + MOVQ _gu(iState), rBe; \ + XORQ rDu, rBe; \ + MOVQ _ka(iState), rBi; \ + ROLQ $20, rBe; \ + XORQ rDa, rBi; \ + ROLQ $3, rBi; \ + MOVQ _bo(iState), rBa; \ + MOVQ rBe, rT1; \ + ORQ rBi, rT1; \ + XORQ rDo, rBa; \ + MOVQ _me(iState), rBo; \ + MOVQ _si(iState), rBu; \ + ROLQ $28, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ga(oState); \ + G_RT1_RCA; \ + \ + XORQ rDe, rBo; \ + ROLQ $45, rBo; \ + MOVQ rBi, rT1; \ + ANDQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _ge(oState); \ + G_RT1_RCE; \ + \ + XORQ rDi, rBu; \ + ROLQ $61, rBu; \ + MOVQ rBu, rT1; \ + ORQ rBa, rT1; \ + XORQ rBo, rT1; \ + MOVQ rT1, _go(oState); \ + \ + ANDQ rBe, rBa; \ + XORQ rBu, rBa; \ + MOVQ rBa, _gu(oState); \ + NOTQ rBu; \ + G_RBA_RCU; \ + \ + ORQ rBu, rBo; \ + XORQ rBi, rBo; \ + MOVQ rBo, _gi(oState); \ + \ + /* Result k */ \ + MOVQ _be(iState), rBa; \ + MOVQ _gi(iState), rBe; \ + MOVQ _ko(iState), rBi; \ + MOVQ _mu(iState), rBo; \ + MOVQ _sa(iState), rBu; \ + XORQ rDi, rBe; \ + ROLQ $6, rBe; \ + XORQ rDo, rBi; \ + ROLQ $25, rBi; \ + MOVQ rBe, rT1; \ + ORQ rBi, rT1; \ + XORQ rDe, rBa; \ + ROLQ $1, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ka(oState); \ + K_RT1_RCA; \ + \ + XORQ rDu, rBo; \ + ROLQ $8, rBo; \ + MOVQ rBi, rT1; \ + ANDQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _ke(oState); \ + K_RT1_RCE; \ + \ + XORQ rDa, rBu; \ + ROLQ $18, rBu; \ + NOTQ rBo; \ + MOVQ rBo, rT1; \ + ANDQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _ki(oState); \ + \ + MOVQ rBu, rT1; \ + ORQ rBa, rT1; \ + XORQ rBo, rT1; \ + MOVQ rT1, _ko(oState); \ + \ + ANDQ rBe, rBa; \ + XORQ rBu, rBa; \ + MOVQ rBa, _ku(oState); \ + K_RBA_RCU; \ + \ + /* Result m */ \ + MOVQ _ga(iState), rBe; \ + XORQ rDa, rBe; \ + MOVQ _ke(iState), rBi; \ + ROLQ $36, rBe; \ + XORQ rDe, rBi; \ + MOVQ _bu(iState), rBa; \ + ROLQ $10, rBi; \ + MOVQ rBe, rT1; \ + MOVQ _mi(iState), rBo; \ + ANDQ rBi, rT1; \ + XORQ rDu, rBa; \ + MOVQ _so(iState), rBu; \ + ROLQ $27, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ma(oState); \ + M_RT1_RCA; \ + \ + XORQ rDi, rBo; \ + ROLQ $15, rBo; \ + MOVQ rBi, rT1; \ + ORQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _me(oState); \ + M_RT1_RCE; \ + \ + XORQ rDo, rBu; \ + ROLQ $56, rBu; \ + NOTQ rBo; \ + MOVQ rBo, rT1; \ + ORQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _mi(oState); \ + \ + ORQ rBa, rBe; \ + XORQ rBu, rBe; \ + MOVQ rBe, _mu(oState); \ + \ + ANDQ rBa, rBu; \ + XORQ rBo, rBu; \ + MOVQ rBu, _mo(oState); \ + M_RBE_RCU; \ + \ + /* Result s */ \ + MOVQ _bi(iState), rBa; \ + MOVQ _go(iState), rBe; \ + MOVQ _ku(iState), rBi; \ + XORQ rDi, rBa; \ + MOVQ _ma(iState), rBo; \ + ROLQ $62, rBa; \ + XORQ rDo, rBe; \ + MOVQ _se(iState), rBu; \ + ROLQ $55, rBe; \ + \ + XORQ rDu, rBi; \ + MOVQ rBa, rDu; \ + XORQ rDe, rBu; \ + ROLQ $2, rBu; \ + ANDQ rBe, rDu; \ + XORQ rBu, rDu; \ + MOVQ rDu, _su(oState); \ + \ + ROLQ $39, rBi; \ + S_RDU_RCU; \ + NOTQ rBe; \ + XORQ rDa, rBo; \ + MOVQ rBe, rDa; \ + ANDQ rBi, rDa; \ + XORQ rBa, rDa; \ + MOVQ rDa, _sa(oState); \ + S_RDA_RCA; \ + \ + ROLQ $41, rBo; \ + MOVQ rBi, rDe; \ + ORQ rBo, rDe; \ + XORQ rBe, rDe; \ + MOVQ rDe, _se(oState); \ + S_RDE_RCE; \ + \ + MOVQ rBo, rDi; \ + MOVQ rBu, rDo; \ + ANDQ rBu, rDi; \ + ORQ rBa, rDo; \ + XORQ rBi, rDi; \ + XORQ rBo, rDo; \ + MOVQ rDi, _si(oState); \ + MOVQ rDo, _so(oState) \ + +// func keccakF1600(state *[25]uint64) +TEXT ·keccakF1600(SB), 0, $200-8 + MOVQ state+0(FP), rpState + + // Convert the user state into an internal state + NOTQ _be(rpState) + NOTQ _bi(rpState) + NOTQ _go(rpState) + NOTQ _ki(rpState) + NOTQ _mi(rpState) + NOTQ _sa(rpState) + + // Execute the KeccakF permutation + MOVQ _ba(rpState), rCa + MOVQ _be(rpState), rCe + MOVQ _bu(rpState), rCu + + XORQ _ga(rpState), rCa + XORQ _ge(rpState), rCe + XORQ _gu(rpState), rCu + + XORQ _ka(rpState), rCa + XORQ _ke(rpState), rCe + XORQ _ku(rpState), rCu + + XORQ _ma(rpState), rCa + XORQ _me(rpState), rCe + XORQ _mu(rpState), rCu + + XORQ _sa(rpState), rCa + XORQ _se(rpState), rCe + MOVQ _si(rpState), rDi + MOVQ _so(rpState), rDo + XORQ _su(rpState), rCu + + mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP) + + // Revert the internal state to the user state + NOTQ _be(rpState) + NOTQ _bi(rpState) + NOTQ _go(rpState) + NOTQ _ki(rpState) + NOTQ _mi(rpState) + NOTQ _sa(rpState) + + RET diff --git a/vendor/golang.org/x/crypto/sha3/register.go b/vendor/golang.org/x/crypto/sha3/register.go new file mode 100644 index 0000000000000..8b4453aac3c33 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/register.go @@ -0,0 +1,19 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.4 +// +build go1.4 + +package sha3 + +import ( + "crypto" +) + +func init() { + crypto.RegisterHash(crypto.SHA3_224, New224) + crypto.RegisterHash(crypto.SHA3_256, New256) + crypto.RegisterHash(crypto.SHA3_384, New384) + crypto.RegisterHash(crypto.SHA3_512, New512) +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3.go b/vendor/golang.org/x/crypto/sha3/sha3.go new file mode 100644 index 0000000000000..fa182beb40b50 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3.go @@ -0,0 +1,193 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// spongeDirection indicates the direction bytes are flowing through the sponge. +type spongeDirection int + +const ( + // spongeAbsorbing indicates that the sponge is absorbing input. + spongeAbsorbing spongeDirection = iota + // spongeSqueezing indicates that the sponge is being squeezed. + spongeSqueezing +) + +const ( + // maxRate is the maximum size of the internal buffer. SHAKE-256 + // currently needs the largest buffer. + maxRate = 168 +) + +type state struct { + // Generic sponge components. + a [25]uint64 // main state of the hash + buf []byte // points into storage + rate int // the number of bytes of state to use + + // dsbyte contains the "domain separation" bits and the first bit of + // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the + // SHA-3 and SHAKE functions by appending bitstrings to the message. + // Using a little-endian bit-ordering convention, these are "01" for SHA-3 + // and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the + // padding rule from section 5.1 is applied to pad the message to a multiple + // of the rate, which involves adding a "1" bit, zero or more "0" bits, and + // a final "1" bit. We merge the first "1" bit from the padding into dsbyte, + // giving 00000110b (0x06) and 00011111b (0x1f). + // [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf + // "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and + // Extendable-Output Functions (May 2014)" + dsbyte byte + + storage storageBuf + + // Specific to SHA-3 and SHAKE. + outputLen int // the default output size in bytes + state spongeDirection // whether the sponge is absorbing or squeezing +} + +// BlockSize returns the rate of sponge underlying this hash function. +func (d *state) BlockSize() int { return d.rate } + +// Size returns the output size of the hash function in bytes. +func (d *state) Size() int { return d.outputLen } + +// Reset clears the internal state by zeroing the sponge state and +// the byte buffer, and setting Sponge.state to absorbing. +func (d *state) Reset() { + // Zero the permutation's state. + for i := range d.a { + d.a[i] = 0 + } + d.state = spongeAbsorbing + d.buf = d.storage.asBytes()[:0] +} + +func (d *state) clone() *state { + ret := *d + if ret.state == spongeAbsorbing { + ret.buf = ret.storage.asBytes()[:len(ret.buf)] + } else { + ret.buf = ret.storage.asBytes()[d.rate-cap(d.buf) : d.rate] + } + + return &ret +} + +// permute applies the KeccakF-1600 permutation. It handles +// any input-output buffering. +func (d *state) permute() { + switch d.state { + case spongeAbsorbing: + // If we're absorbing, we need to xor the input into the state + // before applying the permutation. + xorIn(d, d.buf) + d.buf = d.storage.asBytes()[:0] + keccakF1600(&d.a) + case spongeSqueezing: + // If we're squeezing, we need to apply the permutation before + // copying more output. + keccakF1600(&d.a) + d.buf = d.storage.asBytes()[:d.rate] + copyOut(d, d.buf) + } +} + +// pads appends the domain separation bits in dsbyte, applies +// the multi-bitrate 10..1 padding rule, and permutes the state. +func (d *state) padAndPermute(dsbyte byte) { + if d.buf == nil { + d.buf = d.storage.asBytes()[:0] + } + // Pad with this instance's domain-separator bits. We know that there's + // at least one byte of space in d.buf because, if it were full, + // permute would have been called to empty it. dsbyte also contains the + // first one bit for the padding. See the comment in the state struct. + d.buf = append(d.buf, dsbyte) + zerosStart := len(d.buf) + d.buf = d.storage.asBytes()[:d.rate] + for i := zerosStart; i < d.rate; i++ { + d.buf[i] = 0 + } + // This adds the final one bit for the padding. Because of the way that + // bits are numbered from the LSB upwards, the final bit is the MSB of + // the last byte. + d.buf[d.rate-1] ^= 0x80 + // Apply the permutation + d.permute() + d.state = spongeSqueezing + d.buf = d.storage.asBytes()[:d.rate] + copyOut(d, d.buf) +} + +// Write absorbs more data into the hash's state. It produces an error +// if more data is written to the ShakeHash after writing +func (d *state) Write(p []byte) (written int, err error) { + if d.state != spongeAbsorbing { + panic("sha3: write to sponge after read") + } + if d.buf == nil { + d.buf = d.storage.asBytes()[:0] + } + written = len(p) + + for len(p) > 0 { + if len(d.buf) == 0 && len(p) >= d.rate { + // The fast path; absorb a full "rate" bytes of input and apply the permutation. + xorIn(d, p[:d.rate]) + p = p[d.rate:] + keccakF1600(&d.a) + } else { + // The slow path; buffer the input until we can fill the sponge, and then xor it in. + todo := d.rate - len(d.buf) + if todo > len(p) { + todo = len(p) + } + d.buf = append(d.buf, p[:todo]...) + p = p[todo:] + + // If the sponge is full, apply the permutation. + if len(d.buf) == d.rate { + d.permute() + } + } + } + + return +} + +// Read squeezes an arbitrary number of bytes from the sponge. +func (d *state) Read(out []byte) (n int, err error) { + // If we're still absorbing, pad and apply the permutation. + if d.state == spongeAbsorbing { + d.padAndPermute(d.dsbyte) + } + + n = len(out) + + // Now, do the squeezing. + for len(out) > 0 { + n := copy(out, d.buf) + d.buf = d.buf[n:] + out = out[n:] + + // Apply the permutation if we've squeezed the sponge dry. + if len(d.buf) == 0 { + d.permute() + } + } + + return +} + +// Sum applies padding to the hash state and then squeezes out the desired +// number of output bytes. +func (d *state) Sum(in []byte) []byte { + // Make a copy of the original hash so that caller can keep writing + // and summing. + dup := d.clone() + hash := make([]byte, dup.outputLen) + dup.Read(hash) + return append(in, hash...) +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3_s390x.go b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go new file mode 100644 index 0000000000000..63a3edb4cea70 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go @@ -0,0 +1,287 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego +// +build gc,!purego + +package sha3 + +// This file contains code for using the 'compute intermediate +// message digest' (KIMD) and 'compute last message digest' (KLMD) +// instructions to compute SHA-3 and SHAKE hashes on IBM Z. + +import ( + "hash" + + "golang.org/x/sys/cpu" +) + +// codes represent 7-bit KIMD/KLMD function codes as defined in +// the Principles of Operation. +type code uint64 + +const ( + // function codes for KIMD/KLMD + sha3_224 code = 32 + sha3_256 = 33 + sha3_384 = 34 + sha3_512 = 35 + shake_128 = 36 + shake_256 = 37 + nopad = 0x100 +) + +// kimd is a wrapper for the 'compute intermediate message digest' instruction. +// src must be a multiple of the rate for the given function code. +// +//go:noescape +func kimd(function code, chain *[200]byte, src []byte) + +// klmd is a wrapper for the 'compute last message digest' instruction. +// src padding is handled by the instruction. +// +//go:noescape +func klmd(function code, chain *[200]byte, dst, src []byte) + +type asmState struct { + a [200]byte // 1600 bit state + buf []byte // care must be taken to ensure cap(buf) is a multiple of rate + rate int // equivalent to block size + storage [3072]byte // underlying storage for buf + outputLen int // output length if fixed, 0 if not + function code // KIMD/KLMD function code + state spongeDirection // whether the sponge is absorbing or squeezing +} + +func newAsmState(function code) *asmState { + var s asmState + s.function = function + switch function { + case sha3_224: + s.rate = 144 + s.outputLen = 28 + case sha3_256: + s.rate = 136 + s.outputLen = 32 + case sha3_384: + s.rate = 104 + s.outputLen = 48 + case sha3_512: + s.rate = 72 + s.outputLen = 64 + case shake_128: + s.rate = 168 + case shake_256: + s.rate = 136 + default: + panic("sha3: unrecognized function code") + } + + // limit s.buf size to a multiple of s.rate + s.resetBuf() + return &s +} + +func (s *asmState) clone() *asmState { + c := *s + c.buf = c.storage[:len(s.buf):cap(s.buf)] + return &c +} + +// copyIntoBuf copies b into buf. It will panic if there is not enough space to +// store all of b. +func (s *asmState) copyIntoBuf(b []byte) { + bufLen := len(s.buf) + s.buf = s.buf[:len(s.buf)+len(b)] + copy(s.buf[bufLen:], b) +} + +// resetBuf points buf at storage, sets the length to 0 and sets cap to be a +// multiple of the rate. +func (s *asmState) resetBuf() { + max := (cap(s.storage) / s.rate) * s.rate + s.buf = s.storage[:0:max] +} + +// Write (via the embedded io.Writer interface) adds more data to the running hash. +// It never returns an error. +func (s *asmState) Write(b []byte) (int, error) { + if s.state != spongeAbsorbing { + panic("sha3: write to sponge after read") + } + length := len(b) + for len(b) > 0 { + if len(s.buf) == 0 && len(b) >= cap(s.buf) { + // Hash the data directly and push any remaining bytes + // into the buffer. + remainder := len(b) % s.rate + kimd(s.function, &s.a, b[:len(b)-remainder]) + if remainder != 0 { + s.copyIntoBuf(b[len(b)-remainder:]) + } + return length, nil + } + + if len(s.buf) == cap(s.buf) { + // flush the buffer + kimd(s.function, &s.a, s.buf) + s.buf = s.buf[:0] + } + + // copy as much as we can into the buffer + n := len(b) + if len(b) > cap(s.buf)-len(s.buf) { + n = cap(s.buf) - len(s.buf) + } + s.copyIntoBuf(b[:n]) + b = b[n:] + } + return length, nil +} + +// Read squeezes an arbitrary number of bytes from the sponge. +func (s *asmState) Read(out []byte) (n int, err error) { + n = len(out) + + // need to pad if we were absorbing + if s.state == spongeAbsorbing { + s.state = spongeSqueezing + + // write hash directly into out if possible + if len(out)%s.rate == 0 { + klmd(s.function, &s.a, out, s.buf) // len(out) may be 0 + s.buf = s.buf[:0] + return + } + + // write hash into buffer + max := cap(s.buf) + if max > len(out) { + max = (len(out)/s.rate)*s.rate + s.rate + } + klmd(s.function, &s.a, s.buf[:max], s.buf) + s.buf = s.buf[:max] + } + + for len(out) > 0 { + // flush the buffer + if len(s.buf) != 0 { + c := copy(out, s.buf) + out = out[c:] + s.buf = s.buf[c:] + continue + } + + // write hash directly into out if possible + if len(out)%s.rate == 0 { + klmd(s.function|nopad, &s.a, out, nil) + return + } + + // write hash into buffer + s.resetBuf() + if cap(s.buf) > len(out) { + s.buf = s.buf[:(len(out)/s.rate)*s.rate+s.rate] + } + klmd(s.function|nopad, &s.a, s.buf, nil) + } + return +} + +// Sum appends the current hash to b and returns the resulting slice. +// It does not change the underlying hash state. +func (s *asmState) Sum(b []byte) []byte { + if s.outputLen == 0 { + panic("sha3: cannot call Sum on SHAKE functions") + } + + // Copy the state to preserve the original. + a := s.a + + // Hash the buffer. Note that we don't clear it because we + // aren't updating the state. + klmd(s.function, &a, nil, s.buf) + return append(b, a[:s.outputLen]...) +} + +// Reset resets the Hash to its initial state. +func (s *asmState) Reset() { + for i := range s.a { + s.a[i] = 0 + } + s.resetBuf() + s.state = spongeAbsorbing +} + +// Size returns the number of bytes Sum will return. +func (s *asmState) Size() int { + return s.outputLen +} + +// BlockSize returns the hash's underlying block size. +// The Write method must be able to accept any amount +// of data, but it may operate more efficiently if all writes +// are a multiple of the block size. +func (s *asmState) BlockSize() int { + return s.rate +} + +// Clone returns a copy of the ShakeHash in its current state. +func (s *asmState) Clone() ShakeHash { + return s.clone() +} + +// new224Asm returns an assembly implementation of SHA3-224 if available, +// otherwise it returns nil. +func new224Asm() hash.Hash { + if cpu.S390X.HasSHA3 { + return newAsmState(sha3_224) + } + return nil +} + +// new256Asm returns an assembly implementation of SHA3-256 if available, +// otherwise it returns nil. +func new256Asm() hash.Hash { + if cpu.S390X.HasSHA3 { + return newAsmState(sha3_256) + } + return nil +} + +// new384Asm returns an assembly implementation of SHA3-384 if available, +// otherwise it returns nil. +func new384Asm() hash.Hash { + if cpu.S390X.HasSHA3 { + return newAsmState(sha3_384) + } + return nil +} + +// new512Asm returns an assembly implementation of SHA3-512 if available, +// otherwise it returns nil. +func new512Asm() hash.Hash { + if cpu.S390X.HasSHA3 { + return newAsmState(sha3_512) + } + return nil +} + +// newShake128Asm returns an assembly implementation of SHAKE-128 if available, +// otherwise it returns nil. +func newShake128Asm() ShakeHash { + if cpu.S390X.HasSHA3 { + return newAsmState(shake_128) + } + return nil +} + +// newShake256Asm returns an assembly implementation of SHAKE-256 if available, +// otherwise it returns nil. +func newShake256Asm() ShakeHash { + if cpu.S390X.HasSHA3 { + return newAsmState(shake_256) + } + return nil +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3_s390x.s b/vendor/golang.org/x/crypto/sha3/sha3_s390x.s new file mode 100644 index 0000000000000..a0e051b0451e5 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3_s390x.s @@ -0,0 +1,34 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego +// +build gc,!purego + +#include "textflag.h" + +// func kimd(function code, chain *[200]byte, src []byte) +TEXT ·kimd(SB), NOFRAME|NOSPLIT, $0-40 + MOVD function+0(FP), R0 + MOVD chain+8(FP), R1 + LMG src+16(FP), R2, R3 // R2=base, R3=len + +continue: + WORD $0xB93E0002 // KIMD --, R2 + BVS continue // continue if interrupted + MOVD $0, R0 // reset R0 for pre-go1.8 compilers + RET + +// func klmd(function code, chain *[200]byte, dst, src []byte) +TEXT ·klmd(SB), NOFRAME|NOSPLIT, $0-64 + // TODO: SHAKE support + MOVD function+0(FP), R0 + MOVD chain+8(FP), R1 + LMG dst+16(FP), R2, R3 // R2=base, R3=len + LMG src+40(FP), R4, R5 // R4=base, R5=len + +continue: + WORD $0xB93F0024 // KLMD R2, R4 + BVS continue // continue if interrupted + MOVD $0, R0 // reset R0 for pre-go1.8 compilers + RET diff --git a/vendor/golang.org/x/crypto/sha3/shake.go b/vendor/golang.org/x/crypto/sha3/shake.go new file mode 100644 index 0000000000000..d7be2954ab26a --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/shake.go @@ -0,0 +1,173 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file defines the ShakeHash interface, and provides +// functions for creating SHAKE and cSHAKE instances, as well as utility +// functions for hashing bytes to arbitrary-length output. +// +// +// SHAKE implementation is based on FIPS PUB 202 [1] +// cSHAKE implementations is based on NIST SP 800-185 [2] +// +// [1] https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf +// [2] https://doi.org/10.6028/NIST.SP.800-185 + +import ( + "encoding/binary" + "io" +) + +// ShakeHash defines the interface to hash functions that +// support arbitrary-length output. +type ShakeHash interface { + // Write absorbs more data into the hash's state. It panics if input is + // written to it after output has been read from it. + io.Writer + + // Read reads more output from the hash; reading affects the hash's + // state. (ShakeHash.Read is thus very different from Hash.Sum) + // It never returns an error. + io.Reader + + // Clone returns a copy of the ShakeHash in its current state. + Clone() ShakeHash + + // Reset resets the ShakeHash to its initial state. + Reset() +} + +// cSHAKE specific context +type cshakeState struct { + *state // SHA-3 state context and Read/Write operations + + // initBlock is the cSHAKE specific initialization set of bytes. It is initialized + // by newCShake function and stores concatenation of N followed by S, encoded + // by the method specified in 3.3 of [1]. + // It is stored here in order for Reset() to be able to put context into + // initial state. + initBlock []byte +} + +// Consts for configuring initial SHA-3 state +const ( + dsbyteShake = 0x1f + dsbyteCShake = 0x04 + rate128 = 168 + rate256 = 136 +) + +func bytepad(input []byte, w int) []byte { + // leftEncode always returns max 9 bytes + buf := make([]byte, 0, 9+len(input)+w) + buf = append(buf, leftEncode(uint64(w))...) + buf = append(buf, input...) + padlen := w - (len(buf) % w) + return append(buf, make([]byte, padlen)...) +} + +func leftEncode(value uint64) []byte { + var b [9]byte + binary.BigEndian.PutUint64(b[1:], value) + // Trim all but last leading zero bytes + i := byte(1) + for i < 8 && b[i] == 0 { + i++ + } + // Prepend number of encoded bytes + b[i-1] = 9 - i + return b[i-1:] +} + +func newCShake(N, S []byte, rate int, dsbyte byte) ShakeHash { + c := cshakeState{state: &state{rate: rate, dsbyte: dsbyte}} + + // leftEncode returns max 9 bytes + c.initBlock = make([]byte, 0, 9*2+len(N)+len(S)) + c.initBlock = append(c.initBlock, leftEncode(uint64(len(N)*8))...) + c.initBlock = append(c.initBlock, N...) + c.initBlock = append(c.initBlock, leftEncode(uint64(len(S)*8))...) + c.initBlock = append(c.initBlock, S...) + c.Write(bytepad(c.initBlock, c.rate)) + return &c +} + +// Reset resets the hash to initial state. +func (c *cshakeState) Reset() { + c.state.Reset() + c.Write(bytepad(c.initBlock, c.rate)) +} + +// Clone returns copy of a cSHAKE context within its current state. +func (c *cshakeState) Clone() ShakeHash { + b := make([]byte, len(c.initBlock)) + copy(b, c.initBlock) + return &cshakeState{state: c.clone(), initBlock: b} +} + +// Clone returns copy of SHAKE context within its current state. +func (c *state) Clone() ShakeHash { + return c.clone() +} + +// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 128 bits against all attacks if at +// least 32 bytes of its output are used. +func NewShake128() ShakeHash { + if h := newShake128Asm(); h != nil { + return h + } + return &state{rate: rate128, dsbyte: dsbyteShake} +} + +// NewShake256 creates a new SHAKE256 variable-output-length ShakeHash. +// Its generic security strength is 256 bits against all attacks if +// at least 64 bytes of its output are used. +func NewShake256() ShakeHash { + if h := newShake256Asm(); h != nil { + return h + } + return &state{rate: rate256, dsbyte: dsbyteShake} +} + +// NewCShake128 creates a new instance of cSHAKE128 variable-output-length ShakeHash, +// a customizable variant of SHAKE128. +// N is used to define functions based on cSHAKE, it can be empty when plain cSHAKE is +// desired. S is a customization byte string used for domain separation - two cSHAKE +// computations on same input with different S yield unrelated outputs. +// When N and S are both empty, this is equivalent to NewShake128. +func NewCShake128(N, S []byte) ShakeHash { + if len(N) == 0 && len(S) == 0 { + return NewShake128() + } + return newCShake(N, S, rate128, dsbyteCShake) +} + +// NewCShake256 creates a new instance of cSHAKE256 variable-output-length ShakeHash, +// a customizable variant of SHAKE256. +// N is used to define functions based on cSHAKE, it can be empty when plain cSHAKE is +// desired. S is a customization byte string used for domain separation - two cSHAKE +// computations on same input with different S yield unrelated outputs. +// When N and S are both empty, this is equivalent to NewShake256. +func NewCShake256(N, S []byte) ShakeHash { + if len(N) == 0 && len(S) == 0 { + return NewShake256() + } + return newCShake(N, S, rate256, dsbyteCShake) +} + +// ShakeSum128 writes an arbitrary-length digest of data into hash. +func ShakeSum128(hash, data []byte) { + h := NewShake128() + h.Write(data) + h.Read(hash) +} + +// ShakeSum256 writes an arbitrary-length digest of data into hash. +func ShakeSum256(hash, data []byte) { + h := NewShake256() + h.Write(data) + h.Read(hash) +} diff --git a/vendor/golang.org/x/crypto/sha3/shake_generic.go b/vendor/golang.org/x/crypto/sha3/shake_generic.go new file mode 100644 index 0000000000000..5c0710ef98ff8 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/shake_generic.go @@ -0,0 +1,20 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !gc || purego || !s390x +// +build !gc purego !s390x + +package sha3 + +// newShake128Asm returns an assembly implementation of SHAKE-128 if available, +// otherwise it returns nil. +func newShake128Asm() ShakeHash { + return nil +} + +// newShake256Asm returns an assembly implementation of SHAKE-256 if available, +// otherwise it returns nil. +func newShake256Asm() ShakeHash { + return nil +} diff --git a/vendor/golang.org/x/crypto/sha3/xor.go b/vendor/golang.org/x/crypto/sha3/xor.go new file mode 100644 index 0000000000000..59c8eb94186e2 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor.go @@ -0,0 +1,24 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (!amd64 && !386 && !ppc64le) || purego +// +build !amd64,!386,!ppc64le purego + +package sha3 + +// A storageBuf is an aligned array of maxRate bytes. +type storageBuf [maxRate]byte + +func (b *storageBuf) asBytes() *[maxRate]byte { + return (*[maxRate]byte)(b) +} + +var ( + xorIn = xorInGeneric + copyOut = copyOutGeneric + xorInUnaligned = xorInGeneric + copyOutUnaligned = copyOutGeneric +) + +const xorImplementationUnaligned = "generic" diff --git a/vendor/golang.org/x/crypto/sha3/xor_generic.go b/vendor/golang.org/x/crypto/sha3/xor_generic.go new file mode 100644 index 0000000000000..8d947711272c3 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor_generic.go @@ -0,0 +1,28 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +import "encoding/binary" + +// xorInGeneric xors the bytes in buf into the state; it +// makes no non-portable assumptions about memory layout +// or alignment. +func xorInGeneric(d *state, buf []byte) { + n := len(buf) / 8 + + for i := 0; i < n; i++ { + a := binary.LittleEndian.Uint64(buf) + d.a[i] ^= a + buf = buf[8:] + } +} + +// copyOutGeneric copies uint64s to a byte buffer. +func copyOutGeneric(d *state, b []byte) { + for i := 0; len(b) >= 8; i++ { + binary.LittleEndian.PutUint64(b, d.a[i]) + b = b[8:] + } +} diff --git a/vendor/golang.org/x/crypto/sha3/xor_unaligned.go b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go new file mode 100644 index 0000000000000..1ce606246d5c2 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go @@ -0,0 +1,68 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build (amd64 || 386 || ppc64le) && !purego +// +build amd64 386 ppc64le +// +build !purego + +package sha3 + +import "unsafe" + +// A storageBuf is an aligned array of maxRate bytes. +type storageBuf [maxRate / 8]uint64 + +func (b *storageBuf) asBytes() *[maxRate]byte { + return (*[maxRate]byte)(unsafe.Pointer(b)) +} + +// xorInUnaligned uses unaligned reads and writes to update d.a to contain d.a +// XOR buf. +func xorInUnaligned(d *state, buf []byte) { + n := len(buf) + bw := (*[maxRate / 8]uint64)(unsafe.Pointer(&buf[0]))[: n/8 : n/8] + if n >= 72 { + d.a[0] ^= bw[0] + d.a[1] ^= bw[1] + d.a[2] ^= bw[2] + d.a[3] ^= bw[3] + d.a[4] ^= bw[4] + d.a[5] ^= bw[5] + d.a[6] ^= bw[6] + d.a[7] ^= bw[7] + d.a[8] ^= bw[8] + } + if n >= 104 { + d.a[9] ^= bw[9] + d.a[10] ^= bw[10] + d.a[11] ^= bw[11] + d.a[12] ^= bw[12] + } + if n >= 136 { + d.a[13] ^= bw[13] + d.a[14] ^= bw[14] + d.a[15] ^= bw[15] + d.a[16] ^= bw[16] + } + if n >= 144 { + d.a[17] ^= bw[17] + } + if n >= 168 { + d.a[18] ^= bw[18] + d.a[19] ^= bw[19] + d.a[20] ^= bw[20] + } +} + +func copyOutUnaligned(d *state, buf []byte) { + ab := (*[maxRate]uint8)(unsafe.Pointer(&d.a[0])) + copy(buf, ab[:]) +} + +var ( + xorIn = xorInUnaligned + copyOut = copyOutUnaligned +) + +const xorImplementationUnaligned = "unaligned" diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go index e6a77f26a099c..b419c761edbc1 100644 --- a/vendor/golang.org/x/crypto/ssh/common.go +++ b/vendor/golang.org/x/crypto/ssh/common.go @@ -49,7 +49,8 @@ var supportedKexAlgos = []string{ // P384 and P521 are not constant-time yet, but since we don't // reuse ephemeral keys, using them for ECDH should be OK. kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, - kexAlgoDH14SHA256, kexAlgoDH14SHA1, kexAlgoDH1SHA1, + kexAlgoDH14SHA256, kexAlgoDH16SHA512, kexAlgoDH14SHA1, + kexAlgoDH1SHA1, } // serverForbiddenKexAlgos contains key exchange algorithms, that are forbidden @@ -59,8 +60,9 @@ var serverForbiddenKexAlgos = map[string]struct{}{ kexAlgoDHGEXSHA256: {}, // server half implementation is only minimal to satisfy the automated tests } -// preferredKexAlgos specifies the default preference for key-exchange algorithms -// in preference order. +// preferredKexAlgos specifies the default preference for key-exchange +// algorithms in preference order. The diffie-hellman-group16-sha512 algorithm +// is disabled by default because it is a bit slower than the others. var preferredKexAlgos = []string{ kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH, kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, @@ -70,12 +72,12 @@ var preferredKexAlgos = []string{ // supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods // of authenticating servers) in preference order. var supportedHostKeyAlgos = []string{ - CertAlgoRSASHA512v01, CertAlgoRSASHA256v01, + CertAlgoRSASHA256v01, CertAlgoRSASHA512v01, CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, - KeyAlgoRSASHA512, KeyAlgoRSASHA256, + KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA, KeyAlgoDSA, KeyAlgoED25519, @@ -85,7 +87,7 @@ var supportedHostKeyAlgos = []string{ // This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed // because they have reached the end of their useful life. var supportedMACs = []string{ - "hmac-sha2-256-etm@openssh.com", "hmac-sha2-256", "hmac-sha1", "hmac-sha1-96", + "hmac-sha2-256-etm@openssh.com", "hmac-sha2-512-etm@openssh.com", "hmac-sha2-256", "hmac-sha2-512", "hmac-sha1", "hmac-sha1-96", } var supportedCompressions = []string{compressionNone} @@ -119,6 +121,13 @@ func algorithmsForKeyFormat(keyFormat string) []string { } } +// isRSA returns whether algo is a supported RSA algorithm, including certificate +// algorithms. +func isRSA(algo string) bool { + algos := algorithmsForKeyFormat(KeyAlgoRSA) + return contains(algos, underlyingAlgo(algo)) +} + // supportedPubKeyAuthAlgos specifies the supported client public key // authentication algorithms. Note that this doesn't include certificate types // since those use the underlying algorithm. This list is sent to the client if @@ -262,16 +271,16 @@ type Config struct { // unspecified, a size suitable for the chosen cipher is used. RekeyThreshold uint64 - // The allowed key exchanges algorithms. If unspecified then a - // default set of algorithms is used. + // The allowed key exchanges algorithms. If unspecified then a default set + // of algorithms is used. Unsupported values are silently ignored. KeyExchanges []string - // The allowed cipher algorithms. If unspecified then a sensible - // default is used. + // The allowed cipher algorithms. If unspecified then a sensible default is + // used. Unsupported values are silently ignored. Ciphers []string - // The allowed MAC algorithms. If unspecified then a sensible default - // is used. + // The allowed MAC algorithms. If unspecified then a sensible default is + // used. Unsupported values are silently ignored. MACs []string } @@ -288,7 +297,7 @@ func (c *Config) SetDefaults() { var ciphers []string for _, c := range c.Ciphers { if cipherModes[c] != nil { - // reject the cipher if we have no cipherModes definition + // Ignore the cipher if we have no cipherModes definition. ciphers = append(ciphers, c) } } @@ -297,10 +306,26 @@ func (c *Config) SetDefaults() { if c.KeyExchanges == nil { c.KeyExchanges = preferredKexAlgos } + var kexs []string + for _, k := range c.KeyExchanges { + if kexAlgoMap[k] != nil { + // Ignore the KEX if we have no kexAlgoMap definition. + kexs = append(kexs, k) + } + } + c.KeyExchanges = kexs if c.MACs == nil { c.MACs = supportedMACs } + var macs []string + for _, m := range c.MACs { + if macModes[m] != nil { + // Ignore the MAC if we have no macModes definition. + macs = append(macs, m) + } + } + c.MACs = macs if c.RekeyThreshold == 0 { // cipher specific default diff --git a/vendor/golang.org/x/crypto/ssh/kex.go b/vendor/golang.org/x/crypto/ssh/kex.go index 927a90cd46f86..8a05f79902c09 100644 --- a/vendor/golang.org/x/crypto/ssh/kex.go +++ b/vendor/golang.org/x/crypto/ssh/kex.go @@ -23,6 +23,7 @@ const ( kexAlgoDH1SHA1 = "diffie-hellman-group1-sha1" kexAlgoDH14SHA1 = "diffie-hellman-group14-sha1" kexAlgoDH14SHA256 = "diffie-hellman-group14-sha256" + kexAlgoDH16SHA512 = "diffie-hellman-group16-sha512" kexAlgoECDH256 = "ecdh-sha2-nistp256" kexAlgoECDH384 = "ecdh-sha2-nistp384" kexAlgoECDH521 = "ecdh-sha2-nistp521" @@ -430,6 +431,17 @@ func init() { hashFunc: crypto.SHA256, } + // This is the group called diffie-hellman-group16-sha512 in RFC + // 8268 and Oakley Group 16 in RFC 3526. + p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF", 16) + + kexAlgoMap[kexAlgoDH16SHA512] = &dhGroup{ + g: new(big.Int).SetInt64(2), + p: p, + pMinus1: new(big.Int).Sub(p, bigOne), + hashFunc: crypto.SHA512, + } + kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()} kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()} kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()} diff --git a/vendor/golang.org/x/crypto/ssh/mac.go b/vendor/golang.org/x/crypto/ssh/mac.go index c07a06285e666..06a1b27507ee3 100644 --- a/vendor/golang.org/x/crypto/ssh/mac.go +++ b/vendor/golang.org/x/crypto/ssh/mac.go @@ -10,6 +10,7 @@ import ( "crypto/hmac" "crypto/sha1" "crypto/sha256" + "crypto/sha512" "hash" ) @@ -46,9 +47,15 @@ func (t truncatingMAC) Size() int { func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() } var macModes = map[string]*macMode{ + "hmac-sha2-512-etm@openssh.com": {64, true, func(key []byte) hash.Hash { + return hmac.New(sha512.New, key) + }}, "hmac-sha2-256-etm@openssh.com": {32, true, func(key []byte) hash.Hash { return hmac.New(sha256.New, key) }}, + "hmac-sha2-512": {64, false, func(key []byte) hash.Hash { + return hmac.New(sha512.New, key) + }}, "hmac-sha2-256": {32, false, func(key []byte) hash.Hash { return hmac.New(sha256.New, key) }}, diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go index 9e3870292fae1..b21322affa8a7 100644 --- a/vendor/golang.org/x/crypto/ssh/server.go +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -370,6 +370,25 @@ func gssExchangeToken(gssapiConfig *GSSAPIWithMICConfig, firstToken []byte, s *c return authErr, perms, nil } +// isAlgoCompatible checks if the signature format is compatible with the +// selected algorithm taking into account edge cases that occur with old +// clients. +func isAlgoCompatible(algo, sigFormat string) bool { + // Compatibility for old clients. + // + // For certificate authentication with OpenSSH 7.2-7.7 signature format can + // be rsa-sha2-256 or rsa-sha2-512 for the algorithm + // ssh-rsa-cert-v01@openssh.com. + // + // With gpg-agent < 2.2.6 the algorithm can be rsa-sha2-256 or rsa-sha2-512 + // for signature format ssh-rsa. + if isRSA(algo) && isRSA(sigFormat) { + return true + } + // Standard case: the underlying algorithm must match the signature format. + return underlyingAlgo(algo) == sigFormat +} + // ServerAuthError represents server authentication errors and is // sometimes returned by NewServerConn. It appends any authentication // errors that may occur, and is returned if all of the authentication @@ -567,7 +586,7 @@ userAuthLoop: authErr = fmt.Errorf("ssh: algorithm %q not accepted", sig.Format) break } - if underlyingAlgo(algo) != sig.Format { + if !isAlgoCompatible(algo, sig.Format) { authErr = fmt.Errorf("ssh: signature %q not compatible with selected algorithm %q", sig.Format, algo) break } diff --git a/vendor/golang.org/x/exp/LICENSE b/vendor/golang.org/x/exp/LICENSE new file mode 100644 index 0000000000000..6a66aea5eafe0 --- /dev/null +++ b/vendor/golang.org/x/exp/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/exp/PATENTS b/vendor/golang.org/x/exp/PATENTS new file mode 100644 index 0000000000000..733099041f84f --- /dev/null +++ b/vendor/golang.org/x/exp/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/exp/constraints/constraints.go b/vendor/golang.org/x/exp/constraints/constraints.go new file mode 100644 index 0000000000000..2c033dff47e90 --- /dev/null +++ b/vendor/golang.org/x/exp/constraints/constraints.go @@ -0,0 +1,50 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package constraints defines a set of useful constraints to be used +// with type parameters. +package constraints + +// Signed is a constraint that permits any signed integer type. +// If future releases of Go add new predeclared signed integer types, +// this constraint will be modified to include them. +type Signed interface { + ~int | ~int8 | ~int16 | ~int32 | ~int64 +} + +// Unsigned is a constraint that permits any unsigned integer type. +// If future releases of Go add new predeclared unsigned integer types, +// this constraint will be modified to include them. +type Unsigned interface { + ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr +} + +// Integer is a constraint that permits any integer type. +// If future releases of Go add new predeclared integer types, +// this constraint will be modified to include them. +type Integer interface { + Signed | Unsigned +} + +// Float is a constraint that permits any floating-point type. +// If future releases of Go add new predeclared floating-point types, +// this constraint will be modified to include them. +type Float interface { + ~float32 | ~float64 +} + +// Complex is a constraint that permits any complex numeric type. +// If future releases of Go add new predeclared complex numeric types, +// this constraint will be modified to include them. +type Complex interface { + ~complex64 | ~complex128 +} + +// Ordered is a constraint that permits any ordered type: any type +// that supports the operators < <= >= >. +// If future releases of Go add new ordered types, +// this constraint will be modified to include them. +type Ordered interface { + Integer | Float | ~string +} diff --git a/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go b/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go index 2681af35af195..150f887e7a4b8 100644 --- a/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go +++ b/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go @@ -13,7 +13,7 @@ import ( "sync" ) -// Regexp is a wrapper around regexp.Regexp, where the underlying regexp will be +// Regexp is a wrapper around [regexp.Regexp], where the underlying regexp will be // compiled the first time it is needed. type Regexp struct { str string diff --git a/vendor/golang.org/x/mod/modfile/print.go b/vendor/golang.org/x/mod/modfile/print.go index 524f93022ac0a..2a0123d4b9155 100644 --- a/vendor/golang.org/x/mod/modfile/print.go +++ b/vendor/golang.org/x/mod/modfile/print.go @@ -16,7 +16,13 @@ import ( func Format(f *FileSyntax) []byte { pr := &printer{} pr.file(f) - return pr.Bytes() + + // remove trailing blank lines + b := pr.Bytes() + for len(b) > 0 && b[len(b)-1] == '\n' && (len(b) == 1 || b[len(b)-2] == '\n') { + b = b[:len(b)-1] + } + return b } // A printer collects the state during printing of a file or expression. @@ -59,7 +65,11 @@ func (p *printer) newline() { } p.trim() - p.printf("\n") + if b := p.Bytes(); len(b) == 0 || (len(b) >= 2 && b[len(b)-1] == '\n' && b[len(b)-2] == '\n') { + // skip the blank line at top of file or after a blank line + } else { + p.printf("\n") + } for i := 0; i < p.margin; i++ { p.printf("\t") } diff --git a/vendor/golang.org/x/mod/modfile/read.go b/vendor/golang.org/x/mod/modfile/read.go index a503bc2105df7..5b5bb5e115b37 100644 --- a/vendor/golang.org/x/mod/modfile/read.go +++ b/vendor/golang.org/x/mod/modfile/read.go @@ -65,7 +65,7 @@ type Comments struct { } // Comment returns the receiver. This isn't useful by itself, but -// a Comments struct is embedded into all the expression +// a [Comments] struct is embedded into all the expression // implementation types, and this gives each of those a Comment // method to satisfy the Expr interface. func (c *Comments) Comment() *Comments { diff --git a/vendor/golang.org/x/mod/modfile/rule.go b/vendor/golang.org/x/mod/modfile/rule.go index 6bcde8fabe386..930b6c59bc966 100644 --- a/vendor/golang.org/x/mod/modfile/rule.go +++ b/vendor/golang.org/x/mod/modfile/rule.go @@ -5,17 +5,17 @@ // Package modfile implements a parser and formatter for go.mod files. // // The go.mod syntax is described in -// https://golang.org/cmd/go/#hdr-The_go_mod_file. +// https://pkg.go.dev/cmd/go/#hdr-The_go_mod_file. // -// The Parse and ParseLax functions both parse a go.mod file and return an +// The [Parse] and [ParseLax] functions both parse a go.mod file and return an // abstract syntax tree. ParseLax ignores unknown statements and may be used to // parse go.mod files that may have been developed with newer versions of Go. // -// The File struct returned by Parse and ParseLax represent an abstract -// go.mod file. File has several methods like AddNewRequire and DropReplace -// that can be used to programmatically edit a file. +// The [File] struct returned by Parse and ParseLax represent an abstract +// go.mod file. File has several methods like [File.AddNewRequire] and +// [File.DropReplace] that can be used to programmatically edit a file. // -// The Format function formats a File back to a byte slice which can be +// The [Format] function formats a File back to a byte slice which can be // written to a file. package modfile @@ -35,12 +35,13 @@ import ( // A File is the parsed, interpreted form of a go.mod file. type File struct { - Module *Module - Go *Go - Require []*Require - Exclude []*Exclude - Replace []*Replace - Retract []*Retract + Module *Module + Go *Go + Toolchain *Toolchain + Require []*Require + Exclude []*Exclude + Replace []*Replace + Retract []*Retract Syntax *FileSyntax } @@ -58,6 +59,12 @@ type Go struct { Syntax *Line } +// A Toolchain is the toolchain statement. +type Toolchain struct { + Name string // "go1.21rc1" + Syntax *Line +} + // An Exclude is a single exclude statement. type Exclude struct { Mod module.Version @@ -219,7 +226,7 @@ var dontFixRetract VersionFixer = func(_, vers string) (string, error) { // data is the content of the file. // // fix is an optional function that canonicalizes module versions. -// If fix is nil, all module versions must be canonical (module.CanonicalVersion +// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] // must return the same string). func Parse(file string, data []byte, fix VersionFixer) (*File, error) { return parseToFile(file, data, fix, true) @@ -296,9 +303,13 @@ func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (parse return f, nil } -var GoVersionRE = lazyregexp.New(`^([1-9][0-9]*)\.(0|[1-9][0-9]*)$`) +var GoVersionRE = lazyregexp.New(`^([1-9][0-9]*)\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))?([a-z]+[0-9]+)?$`) var laxGoVersionRE = lazyregexp.New(`^v?(([1-9][0-9]*)\.(0|[1-9][0-9]*))([^0-9].*)$`) +// Toolchains must be named beginning with `go1`, +// like "go1.20.3" or "go1.20.3-gccgo". As a special case, "default" is also permitted. +var ToolchainRE = lazyregexp.New(`^default$|^go1($|\.)`) + func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, args []string, fix VersionFixer, strict bool) { // If strict is false, this module is a dependency. // We ignore all unknown directives as well as main-module-only @@ -364,6 +375,21 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a f.Go = &Go{Syntax: line} f.Go.Version = args[0] + case "toolchain": + if f.Toolchain != nil { + errorf("repeated toolchain statement") + return + } + if len(args) != 1 { + errorf("toolchain directive expects exactly one argument") + return + } else if strict && !ToolchainRE.MatchString(args[0]) { + errorf("invalid toolchain version '%s': must match format go1.23 or local", args[0]) + return + } + f.Toolchain = &Toolchain{Syntax: line} + f.Toolchain.Name = args[0] + case "module": if f.Module != nil { errorf("repeated module statement") @@ -612,6 +638,22 @@ func (f *WorkFile) add(errs *ErrorList, line *Line, verb string, args []string, f.Go = &Go{Syntax: line} f.Go.Version = args[0] + case "toolchain": + if f.Toolchain != nil { + errorf("repeated toolchain statement") + return + } + if len(args) != 1 { + errorf("toolchain directive expects exactly one argument") + return + } else if !ToolchainRE.MatchString(args[0]) { + errorf("invalid toolchain version '%s': must match format go1.23 or local", args[0]) + return + } + + f.Toolchain = &Toolchain{Syntax: line} + f.Toolchain.Name = args[0] + case "use": if len(args) != 1 { errorf("usage: %s local/dir", verb) @@ -881,7 +923,7 @@ func (f *File) Format() ([]byte, error) { } // Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like DropRequire +// To avoid quadratic behavior, modifications like [File.DropRequire] // clear the entry but do not remove it from the slice. // Cleanup cleans out all the cleared entries. func (f *File) Cleanup() { @@ -926,7 +968,7 @@ func (f *File) Cleanup() { func (f *File) AddGoStmt(version string) error { if !GoVersionRE.MatchString(version) { - return fmt.Errorf("invalid language version string %q", version) + return fmt.Errorf("invalid language version %q", version) } if f.Go == nil { var hint Expr @@ -944,6 +986,44 @@ func (f *File) AddGoStmt(version string) error { return nil } +// DropGoStmt deletes the go statement from the file. +func (f *File) DropGoStmt() { + if f.Go != nil { + f.Go.Syntax.markRemoved() + f.Go = nil + } +} + +// DropToolchainStmt deletes the toolchain statement from the file. +func (f *File) DropToolchainStmt() { + if f.Toolchain != nil { + f.Toolchain.Syntax.markRemoved() + f.Toolchain = nil + } +} + +func (f *File) AddToolchainStmt(name string) error { + if !ToolchainRE.MatchString(name) { + return fmt.Errorf("invalid toolchain name %q", name) + } + if f.Toolchain == nil { + var hint Expr + if f.Go != nil && f.Go.Syntax != nil { + hint = f.Go.Syntax + } else if f.Module != nil && f.Module.Syntax != nil { + hint = f.Module.Syntax + } + f.Toolchain = &Toolchain{ + Name: name, + Syntax: f.Syntax.addLine(hint, "toolchain", name), + } + } else { + f.Toolchain.Name = name + f.Syntax.updateLine(f.Toolchain.Syntax, "toolchain", name) + } + return nil +} + // AddRequire sets the first require line for path to version vers, // preserving any existing comments for that line and removing all // other lines for path. @@ -995,8 +1075,8 @@ func (f *File) AddNewRequire(path, vers string, indirect bool) { // The requirements in req must specify at most one distinct version for each // module path. // -// If any existing requirements may be removed, the caller should call Cleanup -// after all edits are complete. +// If any existing requirements may be removed, the caller should call +// [File.Cleanup] after all edits are complete. func (f *File) SetRequire(req []*Require) { type elem struct { version string @@ -1387,13 +1467,21 @@ func (f *File) DropRetract(vi VersionInterval) error { func (f *File) SortBlocks() { f.removeDups() // otherwise sorting is unsafe + // semanticSortForExcludeVersionV is the Go version (plus leading "v") at which + // lines in exclude blocks start to use semantic sort instead of lexicographic sort. + // See go.dev/issue/60028. + const semanticSortForExcludeVersionV = "v1.21" + useSemanticSortForExclude := f.Go != nil && semver.Compare("v"+f.Go.Version, semanticSortForExcludeVersionV) >= 0 + for _, stmt := range f.Syntax.Stmt { block, ok := stmt.(*LineBlock) if !ok { continue } less := lineLess - if block.Token[0] == "retract" { + if block.Token[0] == "exclude" && useSemanticSortForExclude { + less = lineExcludeLess + } else if block.Token[0] == "retract" { less = lineRetractLess } sort.SliceStable(block.Line, func(i, j int) bool { @@ -1496,6 +1584,22 @@ func lineLess(li, lj *Line) bool { return len(li.Token) < len(lj.Token) } +// lineExcludeLess reports whether li should be sorted before lj for lines in +// an "exclude" block. +func lineExcludeLess(li, lj *Line) bool { + if len(li.Token) != 2 || len(lj.Token) != 2 { + // Not a known exclude specification. + // Fall back to sorting lexicographically. + return lineLess(li, lj) + } + // An exclude specification has two tokens: ModulePath and Version. + // Compare module path by string order and version by semver rules. + if pi, pj := li.Token[0], lj.Token[0]; pi != pj { + return pi < pj + } + return semver.Compare(li.Token[1], lj.Token[1]) < 0 +} + // lineRetractLess returns whether li should be sorted before lj for lines in // a "retract" block. It treats each line as a version interval. Single versions // are compared as if they were intervals with the same low and high version. diff --git a/vendor/golang.org/x/mod/modfile/work.go b/vendor/golang.org/x/mod/modfile/work.go index 0c0e521525a9f..d7b99376ebe72 100644 --- a/vendor/golang.org/x/mod/modfile/work.go +++ b/vendor/golang.org/x/mod/modfile/work.go @@ -12,9 +12,10 @@ import ( // A WorkFile is the parsed, interpreted form of a go.work file. type WorkFile struct { - Go *Go - Use []*Use - Replace []*Replace + Go *Go + Toolchain *Toolchain + Use []*Use + Replace []*Replace Syntax *FileSyntax } @@ -33,7 +34,7 @@ type Use struct { // data is the content of the file. // // fix is an optional function that canonicalizes module versions. -// If fix is nil, all module versions must be canonical (module.CanonicalVersion +// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] // must return the same string). func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { fs, err := parse(file, data) @@ -82,7 +83,7 @@ func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { } // Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like DropRequire +// To avoid quadratic behavior, modifications like [WorkFile.DropRequire] // clear the entry but do not remove it from the slice. // Cleanup cleans out all the cleared entries. func (f *WorkFile) Cleanup() { @@ -109,7 +110,7 @@ func (f *WorkFile) Cleanup() { func (f *WorkFile) AddGoStmt(version string) error { if !GoVersionRE.MatchString(version) { - return fmt.Errorf("invalid language version string %q", version) + return fmt.Errorf("invalid language version %q", version) } if f.Go == nil { stmt := &Line{Token: []string{"go", version}} @@ -117,7 +118,7 @@ func (f *WorkFile) AddGoStmt(version string) error { Version: version, Syntax: stmt, } - // Find the first non-comment-only block that's and add + // Find the first non-comment-only block and add // the go statement before it. That will keep file comments at the top. i := 0 for i = 0; i < len(f.Syntax.Stmt); i++ { @@ -133,6 +134,56 @@ func (f *WorkFile) AddGoStmt(version string) error { return nil } +func (f *WorkFile) AddToolchainStmt(name string) error { + if !ToolchainRE.MatchString(name) { + return fmt.Errorf("invalid toolchain name %q", name) + } + if f.Toolchain == nil { + stmt := &Line{Token: []string{"toolchain", name}} + f.Toolchain = &Toolchain{ + Name: name, + Syntax: stmt, + } + // Find the go line and add the toolchain line after it. + // Or else find the first non-comment-only block and add + // the toolchain line before it. That will keep file comments at the top. + i := 0 + for i = 0; i < len(f.Syntax.Stmt); i++ { + if line, ok := f.Syntax.Stmt[i].(*Line); ok && len(line.Token) > 0 && line.Token[0] == "go" { + i++ + goto Found + } + } + for i = 0; i < len(f.Syntax.Stmt); i++ { + if _, ok := f.Syntax.Stmt[i].(*CommentBlock); !ok { + break + } + } + Found: + f.Syntax.Stmt = append(append(f.Syntax.Stmt[:i:i], stmt), f.Syntax.Stmt[i:]...) + } else { + f.Toolchain.Name = name + f.Syntax.updateLine(f.Toolchain.Syntax, "toolchain", name) + } + return nil +} + +// DropGoStmt deletes the go statement from the file. +func (f *WorkFile) DropGoStmt() { + if f.Go != nil { + f.Go.Syntax.markRemoved() + f.Go = nil + } +} + +// DropToolchainStmt deletes the toolchain statement from the file. +func (f *WorkFile) DropToolchainStmt() { + if f.Toolchain != nil { + f.Toolchain.Syntax.markRemoved() + f.Toolchain = nil + } +} + func (f *WorkFile) AddUse(diskPath, modulePath string) error { need := true for _, d := range f.Use { diff --git a/vendor/golang.org/x/mod/module/module.go b/vendor/golang.org/x/mod/module/module.go index e9dec6e61487d..2a364b229b9f9 100644 --- a/vendor/golang.org/x/mod/module/module.go +++ b/vendor/golang.org/x/mod/module/module.go @@ -4,7 +4,7 @@ // Package module defines the module.Version type along with support code. // -// The module.Version type is a simple Path, Version pair: +// The [module.Version] type is a simple Path, Version pair: // // type Version struct { // Path string @@ -12,7 +12,7 @@ // } // // There are no restrictions imposed directly by use of this structure, -// but additional checking functions, most notably Check, verify that +// but additional checking functions, most notably [Check], verify that // a particular path, version pair is valid. // // # Escaped Paths @@ -140,7 +140,7 @@ type ModuleError struct { Err error } -// VersionError returns a ModuleError derived from a Version and error, +// VersionError returns a [ModuleError] derived from a [Version] and error, // or err itself if it is already such an error. func VersionError(v Version, err error) error { var mErr *ModuleError @@ -169,7 +169,7 @@ func (e *ModuleError) Unwrap() error { return e.Err } // An InvalidVersionError indicates an error specific to a version, with the // module path unknown or specified externally. // -// A ModuleError may wrap an InvalidVersionError, but an InvalidVersionError +// A [ModuleError] may wrap an InvalidVersionError, but an InvalidVersionError // must not wrap a ModuleError. type InvalidVersionError struct { Version string @@ -193,8 +193,8 @@ func (e *InvalidVersionError) Error() string { func (e *InvalidVersionError) Unwrap() error { return e.Err } // An InvalidPathError indicates a module, import, or file path doesn't -// satisfy all naming constraints. See CheckPath, CheckImportPath, -// and CheckFilePath for specific restrictions. +// satisfy all naming constraints. See [CheckPath], [CheckImportPath], +// and [CheckFilePath] for specific restrictions. type InvalidPathError struct { Kind string // "module", "import", or "file" Path string @@ -294,7 +294,7 @@ func fileNameOK(r rune) bool { } // CheckPath checks that a module path is valid. -// A valid module path is a valid import path, as checked by CheckImportPath, +// A valid module path is a valid import path, as checked by [CheckImportPath], // with three additional constraints. // First, the leading path element (up to the first slash, if any), // by convention a domain name, must contain only lower-case ASCII letters, @@ -380,7 +380,7 @@ const ( // checkPath returns an error describing why the path is not valid. // Because these checks apply to module, import, and file paths, // and because other checks may be applied, the caller is expected to wrap -// this error with InvalidPathError. +// this error with [InvalidPathError]. func checkPath(path string, kind pathKind) error { if !utf8.ValidString(path) { return fmt.Errorf("invalid UTF-8") @@ -532,7 +532,7 @@ var badWindowsNames = []string{ // they require ".vN" instead of "/vN", and for all N, not just N >= 2. // SplitPathVersion returns with ok = false when presented with // a path whose last path element does not satisfy the constraints -// applied by CheckPath, such as "example.com/pkg/v1" or "example.com/pkg/v1.2". +// applied by [CheckPath], such as "example.com/pkg/v1" or "example.com/pkg/v1.2". func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) { if strings.HasPrefix(path, "gopkg.in/") { return splitGopkgIn(path) @@ -582,7 +582,7 @@ func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) { // MatchPathMajor reports whether the semantic version v // matches the path major version pathMajor. // -// MatchPathMajor returns true if and only if CheckPathMajor returns nil. +// MatchPathMajor returns true if and only if [CheckPathMajor] returns nil. func MatchPathMajor(v, pathMajor string) bool { return CheckPathMajor(v, pathMajor) == nil } @@ -622,7 +622,7 @@ func CheckPathMajor(v, pathMajor string) error { // PathMajorPrefix returns the major-version tag prefix implied by pathMajor. // An empty PathMajorPrefix allows either v0 or v1. // -// Note that MatchPathMajor may accept some versions that do not actually begin +// Note that [MatchPathMajor] may accept some versions that do not actually begin // with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1' // pathMajor, even though that pathMajor implies 'v1' tagging. func PathMajorPrefix(pathMajor string) string { @@ -643,7 +643,7 @@ func PathMajorPrefix(pathMajor string) string { } // CanonicalVersion returns the canonical form of the version string v. -// It is the same as semver.Canonical(v) except that it preserves the special build suffix "+incompatible". +// It is the same as [semver.Canonical] except that it preserves the special build suffix "+incompatible". func CanonicalVersion(v string) string { cv := semver.Canonical(v) if semver.Build(v) == "+incompatible" { @@ -652,8 +652,8 @@ func CanonicalVersion(v string) string { return cv } -// Sort sorts the list by Path, breaking ties by comparing Version fields. -// The Version fields are interpreted as semantic versions (using semver.Compare) +// Sort sorts the list by Path, breaking ties by comparing [Version] fields. +// The Version fields are interpreted as semantic versions (using [semver.Compare]) // optionally followed by a tie-breaking suffix introduced by a slash character, // like in "v0.0.1/go.mod". func Sort(list []Version) { @@ -793,7 +793,7 @@ func unescapeString(escaped string) (string, bool) { } // MatchPrefixPatterns reports whether any path prefix of target matches one of -// the glob patterns (as defined by path.Match) in the comma-separated globs +// the glob patterns (as defined by [path.Match]) in the comma-separated globs // list. This implements the algorithm used when matching a module path to the // GOPRIVATE environment variable, as described by 'go help module-private'. // diff --git a/vendor/golang.org/x/mod/module/pseudo.go b/vendor/golang.org/x/mod/module/pseudo.go index f04ad3788694f..9cf19d3254eb3 100644 --- a/vendor/golang.org/x/mod/module/pseudo.go +++ b/vendor/golang.org/x/mod/module/pseudo.go @@ -125,7 +125,7 @@ func IsPseudoVersion(v string) bool { } // IsZeroPseudoVersion returns whether v is a pseudo-version with a zero base, -// timestamp, and revision, as returned by ZeroPseudoVersion. +// timestamp, and revision, as returned by [ZeroPseudoVersion]. func IsZeroPseudoVersion(v string) bool { return v == ZeroPseudoVersion(semver.Major(v)) } diff --git a/vendor/golang.org/x/mod/semver/semver.go b/vendor/golang.org/x/mod/semver/semver.go index a30a22bf20f18..9a2dfd33a7704 100644 --- a/vendor/golang.org/x/mod/semver/semver.go +++ b/vendor/golang.org/x/mod/semver/semver.go @@ -140,7 +140,7 @@ func Compare(v, w string) int { // Max canonicalizes its arguments and then returns the version string // that compares greater. // -// Deprecated: use Compare instead. In most cases, returning a canonicalized +// Deprecated: use [Compare] instead. In most cases, returning a canonicalized // version is not expected or desired. func Max(v, w string) string { v = Canonical(v) @@ -151,7 +151,7 @@ func Max(v, w string) string { return w } -// ByVersion implements sort.Interface for sorting semantic version strings. +// ByVersion implements [sort.Interface] for sorting semantic version strings. type ByVersion []string func (vs ByVersion) Len() int { return len(vs) } @@ -164,7 +164,7 @@ func (vs ByVersion) Less(i, j int) bool { return vs[i] < vs[j] } -// Sort sorts a list of semantic version strings using ByVersion. +// Sort sorts a list of semantic version strings using [ByVersion]. func Sort(list []string) { sort.Sort(ByVersion(list)) } diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go deleted file mode 100644 index 37dc0cfdb5b0d..0000000000000 --- a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package ctxhttp provides helper functions for performing context-aware HTTP requests. -package ctxhttp // import "golang.org/x/net/context/ctxhttp" - -import ( - "context" - "io" - "net/http" - "net/url" - "strings" -) - -// Do sends an HTTP request with the provided http.Client and returns -// an HTTP response. -// -// If the client is nil, http.DefaultClient is used. -// -// The provided ctx must be non-nil. If it is canceled or times out, -// ctx.Err() will be returned. -func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) { - if client == nil { - client = http.DefaultClient - } - resp, err := client.Do(req.WithContext(ctx)) - // If we got an error, and the context has been canceled, - // the context's error is probably more useful. - if err != nil { - select { - case <-ctx.Done(): - err = ctx.Err() - default: - } - } - return resp, err -} - -// Get issues a GET request via the Do function. -func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) { - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return nil, err - } - return Do(ctx, client, req) -} - -// Head issues a HEAD request via the Do function. -func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) { - req, err := http.NewRequest("HEAD", url, nil) - if err != nil { - return nil, err - } - return Do(ctx, client, req) -} - -// Post issues a POST request via the Do function. -func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) { - req, err := http.NewRequest("POST", url, body) - if err != nil { - return nil, err - } - req.Header.Set("Content-Type", bodyType) - return Do(ctx, client, req) -} - -// PostForm issues a POST request via the Do function. -func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) { - return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode())) -} diff --git a/vendor/golang.org/x/net/http2/Dockerfile b/vendor/golang.org/x/net/http2/Dockerfile deleted file mode 100644 index 8512245952be2..0000000000000 --- a/vendor/golang.org/x/net/http2/Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -# -# This Dockerfile builds a recent curl with HTTP/2 client support, using -# a recent nghttp2 build. -# -# See the Makefile for how to tag it. If Docker and that image is found, the -# Go tests use this curl binary for integration tests. -# - -FROM ubuntu:trusty - -RUN apt-get update && \ - apt-get upgrade -y && \ - apt-get install -y git-core build-essential wget - -RUN apt-get install -y --no-install-recommends \ - autotools-dev libtool pkg-config zlib1g-dev \ - libcunit1-dev libssl-dev libxml2-dev libevent-dev \ - automake autoconf - -# The list of packages nghttp2 recommends for h2load: -RUN apt-get install -y --no-install-recommends make binutils \ - autoconf automake autotools-dev \ - libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev \ - libev-dev libevent-dev libjansson-dev libjemalloc-dev \ - cython python3.4-dev python-setuptools - -# Note: setting NGHTTP2_VER before the git clone, so an old git clone isn't cached: -ENV NGHTTP2_VER 895da9a -RUN cd /root && git clone https://github.com/tatsuhiro-t/nghttp2.git - -WORKDIR /root/nghttp2 -RUN git reset --hard $NGHTTP2_VER -RUN autoreconf -i -RUN automake -RUN autoconf -RUN ./configure -RUN make -RUN make install - -WORKDIR /root -RUN wget https://curl.se/download/curl-7.45.0.tar.gz -RUN tar -zxvf curl-7.45.0.tar.gz -WORKDIR /root/curl-7.45.0 -RUN ./configure --with-ssl --with-nghttp2=/usr/local -RUN make -RUN make install -RUN ldconfig - -CMD ["-h"] -ENTRYPOINT ["/usr/local/bin/curl"] - diff --git a/vendor/golang.org/x/net/http2/Makefile b/vendor/golang.org/x/net/http2/Makefile deleted file mode 100644 index 55fd826f77bd9..0000000000000 --- a/vendor/golang.org/x/net/http2/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -curlimage: - docker build -t gohttp2/curl . - diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index cd057f3982480..6d5e008874b19 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -441,7 +441,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { if s.NewWriteScheduler != nil { sc.writeSched = s.NewWriteScheduler() } else { - sc.writeSched = NewPriorityWriteScheduler(nil) + sc.writeSched = newRoundRobinWriteScheduler() } // These start at the RFC-specified defaults. If there is a higher @@ -1012,14 +1012,6 @@ func (sc *serverConn) serve() { } } -func (sc *serverConn) awaitGracefulShutdown(sharedCh <-chan struct{}, privateCh chan struct{}) { - select { - case <-sc.doneServing: - case <-sharedCh: - close(privateCh) - } -} - type serverMessage int // Message values sent to serveMsgCh. @@ -2429,7 +2421,7 @@ type requestBody struct { conn *serverConn closeOnce sync.Once // for use by Close only sawEOF bool // for use by Read only - pipe *pipe // non-nil if we have a HTTP entity message body + pipe *pipe // non-nil if we have an HTTP entity message body needsContinue bool // need to send a 100-continue } @@ -2569,7 +2561,8 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { clen = "" } } - if clen == "" && rws.handlerDone && bodyAllowedForStatus(rws.status) && (len(p) > 0 || !isHeadResp) { + _, hasContentLength := rws.snapHeader["Content-Length"] + if !hasContentLength && clen == "" && rws.handlerDone && bodyAllowedForStatus(rws.status) && (len(p) > 0 || !isHeadResp) { clen = strconv.Itoa(len(p)) } _, hasContentType := rws.snapHeader["Content-Type"] @@ -2774,7 +2767,7 @@ func (w *responseWriter) FlushError() error { err = rws.bw.Flush() } else { // The bufio.Writer won't call chunkWriter.Write - // (writeChunk with zero bytes, so we have to do it + // (writeChunk with zero bytes), so we have to do it // ourselves to force the HTTP response header and/or // final DATA frame (with END_STREAM) to be sent. _, err = chunkWriter{rws}.Write(nil) diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index ac90a2631c9e6..4515b22c4a160 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -19,6 +19,7 @@ import ( "io/fs" "log" "math" + "math/bits" mathrand "math/rand" "net" "net/http" @@ -290,8 +291,7 @@ func (t *Transport) initConnPool() { // HTTP/2 server. type ClientConn struct { t *Transport - tconn net.Conn // usually *tls.Conn, except specialized impls - tconnClosed bool + tconn net.Conn // usually *tls.Conn, except specialized impls tlsState *tls.ConnectionState // nil only for specialized impls reused uint32 // whether conn is being reused; atomic singleUse bool // whether being used for a single http.Request @@ -518,11 +518,14 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { func authorityAddr(scheme string, authority string) (addr string) { host, port, err := net.SplitHostPort(authority) if err != nil { // authority didn't have a port + host = authority + port = "" + } + if port == "" { // authority's port was empty port = "443" if scheme == "http" { port = "80" } - host = authority } if a, err := idna.ToASCII(host); err == nil { host = a @@ -1268,21 +1271,23 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { cancelRequest := func(cs *clientStream, err error) error { cs.cc.mu.Lock() - defer cs.cc.mu.Unlock() - cs.abortStreamLocked(err) - if cs.ID != 0 { - // This request may have failed because of a problem with the connection, - // or for some unrelated reason. (For example, the user might have canceled - // the request without waiting for a response.) Mark the connection as - // not reusable, since trying to reuse a dead connection is worse than - // unnecessarily creating a new one. - // - // If cs.ID is 0, then the request was never allocated a stream ID and - // whatever went wrong was unrelated to the connection. We might have - // timed out waiting for a stream slot when StrictMaxConcurrentStreams - // is set, for example, in which case retrying on a different connection - // will not help. - cs.cc.doNotReuse = true + bodyClosed := cs.reqBodyClosed + cs.cc.mu.Unlock() + // Wait for the request body to be closed. + // + // If nothing closed the body before now, abortStreamLocked + // will have started a goroutine to close it. + // + // Closing the body before returning avoids a race condition + // with net/http checking its readTrackingBody to see if the + // body was read from or closed. See golang/go#60041. + // + // The body is closed in a separate goroutine without the + // connection mutex held, but dropping the mutex before waiting + // will keep us from holding it indefinitely if the body + // close is slow for some reason. + if bodyClosed != nil { + <-bodyClosed } return err } @@ -1301,11 +1306,14 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { return handleResponseHeaders() default: waitDone() - return nil, cancelRequest(cs, cs.abortErr) + return nil, cs.abortErr } case <-ctx.Done(): - return nil, cancelRequest(cs, ctx.Err()) + err := ctx.Err() + cs.abortStream(err) + return nil, cancelRequest(cs, err) case <-cs.reqCancel: + cs.abortStream(errRequestCanceled) return nil, cancelRequest(cs, errRequestCanceled) } } @@ -1672,7 +1680,27 @@ func (cs *clientStream) frameScratchBufferLen(maxFrameSize int) int { return int(n) // doesn't truncate; max is 512K } -var bufPool sync.Pool // of *[]byte +// Seven bufPools manage different frame sizes. This helps to avoid scenarios where long-running +// streaming requests using small frame sizes occupy large buffers initially allocated for prior +// requests needing big buffers. The size ranges are as follows: +// {0 KB, 16 KB], {16 KB, 32 KB], {32 KB, 64 KB], {64 KB, 128 KB], {128 KB, 256 KB], +// {256 KB, 512 KB], {512 KB, infinity} +// In practice, the maximum scratch buffer size should not exceed 512 KB due to +// frameScratchBufferLen(maxFrameSize), thus the "infinity pool" should never be used. +// It exists mainly as a safety measure, for potential future increases in max buffer size. +var bufPools [7]sync.Pool // of *[]byte +func bufPoolIndex(size int) int { + if size <= 16384 { + return 0 + } + size -= 1 + bits := bits.Len(uint(size)) + index := bits - 14 + if index >= len(bufPools) { + return len(bufPools) - 1 + } + return index +} func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { cc := cs.cc @@ -1690,12 +1718,13 @@ func (cs *clientStream) writeRequestBody(req *http.Request) (err error) { // Scratch buffer for reading into & writing from. scratchLen := cs.frameScratchBufferLen(maxFrameSize) var buf []byte - if bp, ok := bufPool.Get().(*[]byte); ok && len(*bp) >= scratchLen { - defer bufPool.Put(bp) + index := bufPoolIndex(scratchLen) + if bp, ok := bufPools[index].Get().(*[]byte); ok && len(*bp) >= scratchLen { + defer bufPools[index].Put(bp) buf = *bp } else { buf = make([]byte, scratchLen) - defer bufPool.Put(&buf) + defer bufPools[index].Put(&buf) } var sawEOF bool @@ -1863,6 +1892,9 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail if err != nil { return nil, err } + if !httpguts.ValidHostHeader(host) { + return nil, errors.New("http2: invalid Host header") + } var path string if req.Method != "CONNECT" { @@ -1899,7 +1931,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail // 8.1.2.3 Request Pseudo-Header Fields // The :path pseudo-header field includes the path and query parts of the // target URI (the path-absolute production and optionally a '?' character - // followed by the query production (see Sections 3.3 and 3.4 of + // followed by the query production, see Sections 3.3 and 3.4 of // [RFC3986]). f(":authority", host) m := req.Method diff --git a/vendor/golang.org/x/net/http2/writesched.go b/vendor/golang.org/x/net/http2/writesched.go index c7cd0017392ef..cc893adc29afb 100644 --- a/vendor/golang.org/x/net/http2/writesched.go +++ b/vendor/golang.org/x/net/http2/writesched.go @@ -184,7 +184,8 @@ func (wr *FrameWriteRequest) replyToWriter(err error) { // writeQueue is used by implementations of WriteScheduler. type writeQueue struct { - s []FrameWriteRequest + s []FrameWriteRequest + prev, next *writeQueue } func (q *writeQueue) empty() bool { return len(q.s) == 0 } diff --git a/vendor/golang.org/x/net/http2/writesched_roundrobin.go b/vendor/golang.org/x/net/http2/writesched_roundrobin.go new file mode 100644 index 0000000000000..54fe86322d2fe --- /dev/null +++ b/vendor/golang.org/x/net/http2/writesched_roundrobin.go @@ -0,0 +1,119 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "fmt" + "math" +) + +type roundRobinWriteScheduler struct { + // control contains control frames (SETTINGS, PING, etc.). + control writeQueue + + // streams maps stream ID to a queue. + streams map[uint32]*writeQueue + + // stream queues are stored in a circular linked list. + // head is the next stream to write, or nil if there are no streams open. + head *writeQueue + + // pool of empty queues for reuse. + queuePool writeQueuePool +} + +// newRoundRobinWriteScheduler constructs a new write scheduler. +// The round robin scheduler priorizes control frames +// like SETTINGS and PING over DATA frames. +// When there are no control frames to send, it performs a round-robin +// selection from the ready streams. +func newRoundRobinWriteScheduler() WriteScheduler { + ws := &roundRobinWriteScheduler{ + streams: make(map[uint32]*writeQueue), + } + return ws +} + +func (ws *roundRobinWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) { + if ws.streams[streamID] != nil { + panic(fmt.Errorf("stream %d already opened", streamID)) + } + q := ws.queuePool.get() + ws.streams[streamID] = q + if ws.head == nil { + ws.head = q + q.next = q + q.prev = q + } else { + // Queues are stored in a ring. + // Insert the new stream before ws.head, putting it at the end of the list. + q.prev = ws.head.prev + q.next = ws.head + q.prev.next = q + q.next.prev = q + } +} + +func (ws *roundRobinWriteScheduler) CloseStream(streamID uint32) { + q := ws.streams[streamID] + if q == nil { + return + } + if q.next == q { + // This was the only open stream. + ws.head = nil + } else { + q.prev.next = q.next + q.next.prev = q.prev + if ws.head == q { + ws.head = q.next + } + } + delete(ws.streams, streamID) + ws.queuePool.put(q) +} + +func (ws *roundRobinWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {} + +func (ws *roundRobinWriteScheduler) Push(wr FrameWriteRequest) { + if wr.isControl() { + ws.control.push(wr) + return + } + q := ws.streams[wr.StreamID()] + if q == nil { + // This is a closed stream. + // wr should not be a HEADERS or DATA frame. + // We push the request onto the control queue. + if wr.DataSize() > 0 { + panic("add DATA on non-open stream") + } + ws.control.push(wr) + return + } + q.push(wr) +} + +func (ws *roundRobinWriteScheduler) Pop() (FrameWriteRequest, bool) { + // Control and RST_STREAM frames first. + if !ws.control.empty() { + return ws.control.shift(), true + } + if ws.head == nil { + return FrameWriteRequest{}, false + } + q := ws.head + for { + if wr, ok := q.consume(math.MaxInt32); ok { + ws.head = q.next + return wr, true + } + q = q.next + if q == ws.head { + break + } + } + return FrameWriteRequest{}, false +} diff --git a/vendor/golang.org/x/net/idna/idna9.0.0.go b/vendor/golang.org/x/net/idna/idna9.0.0.go index aae6aac872b31..ee1698cefbd8f 100644 --- a/vendor/golang.org/x/net/idna/idna9.0.0.go +++ b/vendor/golang.org/x/net/idna/idna9.0.0.go @@ -121,7 +121,7 @@ func CheckJoiners(enable bool) Option { } } -// StrictDomainName limits the set of permissable ASCII characters to those +// StrictDomainName limits the set of permissible ASCII characters to those // allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the // hyphen). This is set by default for MapForLookup and ValidateForRegistration, // but is only useful if ValidateLabels is set. diff --git a/vendor/golang.org/x/net/idna/tables13.0.0.go b/vendor/golang.org/x/net/idna/tables13.0.0.go index 390c5e56d2a4e..66701eadfb37c 100644 --- a/vendor/golang.org/x/net/idna/tables13.0.0.go +++ b/vendor/golang.org/x/net/idna/tables13.0.0.go @@ -1,151 +1,294 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 -// +build go1.16 +//go:build go1.16 && !go1.21 +// +build go1.16,!go1.21 package idna // UnicodeVersion is the Unicode version from which the tables in this package are derived. const UnicodeVersion = "13.0.0" -var mappings string = "" + // Size: 8188 bytes - "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + - "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + - "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + - "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + - "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + - "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + - "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + - "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + - "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + - "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + - "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + - "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + - "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + - "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + - "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + - "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + - "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + - "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + - "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + - "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + - "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + - "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + - "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + - "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + - "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + - "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + - ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + - "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + - "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + - "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + - "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + - "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + - "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + - "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + - "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + - "月\x0511月\x0512月\x02hg\x02ev\x06令和\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニ" + - "ング\x09インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー" + - "\x09ガロン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0f" + - "キロワット\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル" + - "\x0fサンチーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット" + - "\x09ハイツ\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0c" + - "フィート\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ" + - "\x0cポイント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク" + - "\x0fマンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09" + - "ユアン\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x04" + - "2点\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + - "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + - "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + - "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + - "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + - "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + - "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + - "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + - "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + - "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + - "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + - "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x02ʍ\x04𤋮\x04𢡊\x04𢡄\x04𣏕" + - "\x04𥉉\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ" + - "\x04יִ\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּ" + - "ׂ\x04אַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04" + - "ךּ\x04כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ" + - "\x04תּ\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ" + - "\x02ڤ\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ" + - "\x02ڳ\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ" + - "\x02ۅ\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02" + - "ی\x04ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04" + - "تح\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج" + - "\x04حم\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح" + - "\x04ضخ\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ" + - "\x04فم\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل" + - "\x04كم\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ" + - "\x04مم\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى" + - "\x04هي\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 " + - "ٍّ\x05 َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04ت" + - "ر\x04تز\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04" + - "ين\x04ئخ\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه" + - "\x04شم\x04شه\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي" + - "\x04سى\x04سي\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي" + - "\x04ضى\x04ضي\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06ت" + - "حج\x06تحم\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سج" + - "ح\x06سجى\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم" + - "\x06ضحى\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي" + - "\x06غمى\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح" + - "\x06محج\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم" + - "\x06نحم\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى" + - "\x06تخي\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي" + - "\x06ضحي\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي" + - "\x06كمي\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي" + - "\x06سخي\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08" + - "عليه\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:" + - "\x01!\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\" + - "\x01$\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ" + - "\x02إ\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز" + - "\x02س\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن" + - "\x02ه\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~" + - "\x02¢\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲" + - "\x08𝆹𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η" + - "\x02κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ" + - "\x02ڡ\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029," + - "\x03(a)\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)" + - "\x03(k)\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)" + - "\x03(u)\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03p" + - "pv\x02wc\x02mc\x02md\x02mr\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ" + - "\x03二\x03多\x03解\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終" + - "\x03生\x03販\x03声\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指" + - "\x03走\x03打\x03禁\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔" + - "三〕\x09〔二〕\x09〔安〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03" + - "丸\x03乁\x03你\x03侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03" + - "具\x03㒹\x03內\x03冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03" + - "㔕\x03勇\x03勉\x03勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03" + - "灰\x03及\x03叟\x03叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03" + - "啣\x03善\x03喙\x03喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03" + - "埴\x03堍\x03型\x03堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03" + - "姘\x03婦\x03㛮\x03嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03" + - "屮\x03峀\x03岍\x03嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03" + - "㡢\x03㡼\x03庰\x03庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03" + - "忍\x03志\x03忹\x03悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03" + - "憤\x03憯\x03懞\x03懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03" + - "掃\x03揤\x03搢\x03揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03" + - "書\x03晉\x03㬙\x03暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03" + - "朡\x03杞\x03杓\x03㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03" + - "槪\x03檨\x03櫛\x03㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03" + - "汧\x03洖\x03派\x03海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03" + - "淹\x03潮\x03濆\x03瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03" + - "爵\x03牐\x03犀\x03犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03" + - "㼛\x03甤\x03甾\x03異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03" + - "䂖\x03硎\x03碌\x03磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03" + - "築\x03䈧\x03糒\x03䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03" + - "罺\x03羕\x03翺\x03者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03" + - "䑫\x03芑\x03芋\x03芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03" + - "莽\x03菧\x03著\x03荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03" + - "䕫\x03虐\x03虜\x03虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03" + - "蠁\x03䗹\x03衠\x03衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03" + - "豕\x03貫\x03賁\x03贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03" + - "鈸\x03鋗\x03鋘\x03鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03" + - "䩶\x03韠\x03䪲\x03頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03" + - "鳽\x03䳎\x03䳭\x03鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" +var mappings string = "" + // Size: 6539 bytes + " ̈a ̄23 ́ ̧1o1⁄41⁄23⁄4i̇l·ʼnsdžⱥⱦhjrwy ̆ ̇ ̊ ̨ ̃ ̋lẍ́ ι; ̈́եւاٴوٴۇٴيٴक" + + "़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀྲཱྀླྀླཱ" + + "ཱྀྀྒྷྜྷྡྷྦྷྫྷྐྵвдостъѣæbdeǝgikmnȣptuɐɑəɛɜŋɔɯvβγδφχρнɒcɕðfɟɡɥɨɩɪʝɭʟɱɰɲɳ" + + "ɴɵɸʂʃƫʉʊʋʌzʐʑʒθssάέήίόύώἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧ" + + "ιὰιαιάιᾶιι ̈͂ὴιηιήιῆι ̓̀ ̓́ ̓͂ΐ ̔̀ ̔́ ̔͂ΰ ̈̀`ὼιωιώιῶι′′′′′‵‵‵‵‵!!???!!?" + + "′′′′0456789+=()rsħnoqsmtmωåאבגדπ1⁄71⁄91⁄101⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83" + + "⁄85⁄87⁄81⁄iiivviviiiixxi0⁄3∫∫∫∫∫∮∮∮∮∮1011121314151617181920(10)(11)(12" + + ")(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫==⫝̸ɫɽȿɀ. ゙ ゚よりコト(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)" + + "(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(오전" + + ")(오후)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(" + + "財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)21222324252627282930313233343" + + "5참고주의3637383940414243444546474849501月2月3月4月5月6月7月8月9月10月11月12月hgev令和アパート" + + "アルファアンペアアールイニングインチウォンエスクードエーカーオンスオームカイリカラットカロリーガロンガンマギガギニーキュリーギルダーキロキロ" + + "グラムキロメートルキロワットグラムグラムトンクルゼイロクローネケースコルナコーポサイクルサンチームシリングセンチセントダースデシドルトンナノ" + + "ノットハイツパーセントパーツバーレルピアストルピクルピコビルファラッドフィートブッシェルフランヘクタールペソペニヒヘルツペンスページベータポ" + + "イントボルトホンポンドホールホーンマイクロマイルマッハマルクマンションミクロンミリミリバールメガメガトンメートルヤードヤールユアンリットルリ" + + "ラルピールーブルレムレントゲンワット0点1点2点3点4点5点6点7点8点9点10点11点12点13点14点15点16点17点18点19点20" + + "点21点22点23点24点daauovpcdmiu平成昭和大正明治株式会社panamakakbmbgbkcalpfnfmgkghzmldlk" + + "lfmnmmmcmkmm2m3m∕sm∕s2rad∕srad∕s2psnsmspvnvmvkvpwnwmwkwbqcccdc∕kgdbgyhah" + + "pinkkktlmlnlxphprsrsvwbv∕ma∕m1日2日3日4日5日6日7日8日9日10日11日12日13日14日15日16日17日1" + + "8日19日20日21日22日23日24日25日26日27日28日29日30日31日ьɦɬʞʇœʍ𤋮𢡊𢡄𣏕𥉉𥳐𧻓fffiflstմնմեմիվնմ" + + "խיִײַעהכלםרתשׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּשּתּו" + + "ֹבֿכֿפֿאלٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھےۓڭۇۆۈۋۅۉېىئائەئوئۇئۆئۈئېئىیئجئحئم" + + "ئيبجبحبخبمبىبيتجتحتختمتىتيثجثمثىثيجحجمحجحمخجخحخمسجسحسخسمصحصمضجضحضخضمطحط" + + "مظمعجعمغجغمفجفحفخفمفىفيقحقمقىقيكاكجكحكخكلكمكىكيلجلحلخلملىليمجمحمخمممىمي" + + "نجنحنخنمنىنيهجهمهىهييجيحيخيميىييذٰرٰىٰ ٌّ ٍّ َّ ُّ ِّ ّٰئرئزئنبربزبنترت" + + "زتنثرثزثنمانرنزننيريزينئخئهبهتهصخلهنههٰيهثهسهشمشهـَّـُّـِّطىطيعىعيغىغيس" + + "ىسيشىشيحىحيجىجيخىخيصىصيضىضيشجشحشخشرسرصرضراًتجمتحجتحمتخمتمجتمحتمخجمححميح" + + "مىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمى" + + "فخمقمحقمملحملحيلحىلججلخملمحمحجمحممحيمجحمجممخجمخممجخهمجهممنحمنحىنجمنجىنم" + + "ينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمين" + + "حيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلےاللهاكبرمحمدصلعمرسولعليه" + + "وسلمصلىصلى الله عليه وسلمجل جلالهریال,:!?_{}[]#&*-<>\\$%@ـًـَـُـِـّـْءآ" + + "أؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهويلآلألإلا\x22'/^|~¢£¬¦¥𝅗𝅥𝅘𝅥𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱" + + "𝅘𝅥𝅲𝆹𝅥𝆺𝅥𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯ıȷαεζηκλμνξοστυψ∇∂ϝٮڡٯ0,1,2,3,4,5,6,7,8,9,(a)(b)(c" + + ")(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)〔s" + + "〕wzhvsdppvwcmcmdmrdjほかココサ手字双デ二多解天交映無料前後再新初終生販声吹演投捕一三遊左中右指走打禁空合満有月申割営配〔" + + "本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕得可丽丸乁你侮侻倂偺備僧像㒞免兔兤具㒹內冗冤仌冬况凵刃㓟刻剆剷㔕勇勉勤勺包匆北卉卑博即卽" + + "卿灰及叟叫叱吆咞吸呈周咢哶唐啓啣善喙喫喳嗂圖嘆圗噑噴切壮城埴堍型堲報墬売壷夆夢奢姬娛娧姘婦㛮嬈嬾寃寘寧寳寿将尢㞁屠屮峀岍嵃嵮嵫嵼巡巢㠯巽帨帽" + + "幩㡢㡼庰庳庶廊廾舁弢㣇形彫㣣徚忍志忹悁㤺㤜悔惇慈慌慎慺憎憲憤憯懞懲懶成戛扝抱拔捐挽拼捨掃揤搢揅掩㨮摩摾撝摷㩬敏敬旣書晉㬙暑㬈㫤冒冕最暜肭䏙朗" + + "望朡杞杓㭉柺枅桒梅梎栟椔㮝楂榣槪檨櫛㰘次歔㱎歲殟殺殻汎沿泍汧洖派海流浩浸涅洴港湮㴳滋滇淹潮濆瀹瀞瀛㶖灊災灷炭煅熜爨爵牐犀犕獺王㺬玥㺸瑇瑜瑱璅" + + "瓊㼛甤甾異瘐㿼䀈直眞真睊䀹瞋䁆䂖硎碌磌䃣祖福秫䄯穀穊穏䈂篆築䈧糒䊠糨糣紀絣䌁緇縂繅䌴䍙罺羕翺者聠聰䏕育脃䐋脾媵舄辞䑫芑芋芝劳花芳芽苦若茝荣莭" + + "茣莽菧著荓菊菌菜䔫蓱蓳蔖蕤䕝䕡䕫虐虜虧虩蚩蚈蜎蛢蝹蜨蝫螆蟡蠁䗹衠衣裗裞䘵裺㒻䚾䛇誠諭變豕貫賁贛起跋趼跰軔輸邔郱鄑鄛鈸鋗鋘鉼鏹鐕開䦕閷䧦雃嶲霣" + + "䩮䩶韠䪲頋頩飢䬳餩馧駂駾䯎鬒鱀鳽䳎䳭鵧䳸麻䵖黹黾鼅鼏鼖鼻" + +var mappingIndex = []uint16{ // 1650 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0001, 0x0004, 0x0005, 0x0008, 0x0009, 0x000a, + 0x000d, 0x0010, 0x0011, 0x0012, 0x0017, 0x001c, 0x0021, 0x0024, + 0x0027, 0x002a, 0x002b, 0x002e, 0x0031, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x003c, 0x003f, 0x0042, 0x0045, 0x0048, + 0x004b, 0x004c, 0x004d, 0x0051, 0x0054, 0x0055, 0x005a, 0x005e, + 0x0062, 0x0066, 0x006a, 0x006e, 0x0074, 0x007a, 0x0080, 0x0086, + 0x008c, 0x0092, 0x0098, 0x009e, 0x00a4, 0x00aa, 0x00b0, 0x00b6, + 0x00bc, 0x00c2, 0x00c8, 0x00ce, 0x00d4, 0x00da, 0x00e0, 0x00e6, + // Entry 40 - 7F + 0x00ec, 0x00f2, 0x00f8, 0x00fe, 0x0104, 0x010a, 0x0110, 0x0116, + 0x011c, 0x0122, 0x0128, 0x012e, 0x0137, 0x013d, 0x0146, 0x014c, + 0x0152, 0x0158, 0x015e, 0x0164, 0x016a, 0x0170, 0x0172, 0x0174, + 0x0176, 0x0178, 0x017a, 0x017c, 0x017e, 0x0180, 0x0181, 0x0182, + 0x0183, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018a, 0x018c, + 0x018d, 0x018e, 0x018f, 0x0191, 0x0193, 0x0195, 0x0197, 0x0199, + 0x019b, 0x019d, 0x019f, 0x01a0, 0x01a2, 0x01a4, 0x01a6, 0x01a8, + 0x01aa, 0x01ac, 0x01ae, 0x01b0, 0x01b1, 0x01b3, 0x01b5, 0x01b6, + // Entry 80 - BF + 0x01b8, 0x01ba, 0x01bc, 0x01be, 0x01c0, 0x01c2, 0x01c4, 0x01c6, + 0x01c8, 0x01ca, 0x01cc, 0x01ce, 0x01d0, 0x01d2, 0x01d4, 0x01d6, + 0x01d8, 0x01da, 0x01dc, 0x01de, 0x01e0, 0x01e2, 0x01e4, 0x01e5, + 0x01e7, 0x01e9, 0x01eb, 0x01ed, 0x01ef, 0x01f1, 0x01f3, 0x01f5, + 0x01f7, 0x01f9, 0x01fb, 0x01fd, 0x0202, 0x0207, 0x020c, 0x0211, + 0x0216, 0x021b, 0x0220, 0x0225, 0x022a, 0x022f, 0x0234, 0x0239, + 0x023e, 0x0243, 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0261, + 0x0266, 0x026b, 0x0270, 0x0275, 0x027a, 0x027e, 0x0282, 0x0287, + // Entry C0 - FF + 0x0289, 0x028e, 0x0293, 0x0297, 0x029b, 0x02a0, 0x02a5, 0x02aa, + 0x02af, 0x02b1, 0x02b6, 0x02bb, 0x02c0, 0x02c2, 0x02c7, 0x02c8, + 0x02cd, 0x02d1, 0x02d5, 0x02da, 0x02e0, 0x02e9, 0x02ef, 0x02f8, + 0x02fa, 0x02fc, 0x02fe, 0x0300, 0x030c, 0x030d, 0x030e, 0x030f, + 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, + 0x0319, 0x031b, 0x031d, 0x031e, 0x0320, 0x0322, 0x0324, 0x0326, + 0x0328, 0x032a, 0x032c, 0x032e, 0x0330, 0x0335, 0x033a, 0x0340, + 0x0345, 0x034a, 0x034f, 0x0354, 0x0359, 0x035e, 0x0363, 0x0368, + // Entry 100 - 13F + 0x036d, 0x0372, 0x0377, 0x037c, 0x0380, 0x0382, 0x0384, 0x0386, + 0x038a, 0x038c, 0x038e, 0x0393, 0x0399, 0x03a2, 0x03a8, 0x03b1, + 0x03b3, 0x03b5, 0x03b7, 0x03b9, 0x03bb, 0x03bd, 0x03bf, 0x03c1, + 0x03c3, 0x03c5, 0x03c7, 0x03cb, 0x03cf, 0x03d3, 0x03d7, 0x03db, + 0x03df, 0x03e3, 0x03e7, 0x03eb, 0x03ef, 0x03f3, 0x03ff, 0x0401, + 0x0406, 0x0408, 0x040a, 0x040c, 0x040e, 0x040f, 0x0413, 0x0417, + 0x041d, 0x0423, 0x0428, 0x042d, 0x0432, 0x0437, 0x043c, 0x0441, + 0x0446, 0x044b, 0x0450, 0x0455, 0x045a, 0x045f, 0x0464, 0x0469, + // Entry 140 - 17F + 0x046e, 0x0473, 0x0478, 0x047d, 0x0482, 0x0487, 0x048c, 0x0491, + 0x0496, 0x049b, 0x04a0, 0x04a5, 0x04aa, 0x04af, 0x04b4, 0x04bc, + 0x04c4, 0x04c9, 0x04ce, 0x04d3, 0x04d8, 0x04dd, 0x04e2, 0x04e7, + 0x04ec, 0x04f1, 0x04f6, 0x04fb, 0x0500, 0x0505, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053c, 0x0541, 0x0546, 0x054b, 0x0550, 0x0555, 0x055a, 0x055f, + 0x0564, 0x0569, 0x056e, 0x0573, 0x0578, 0x057a, 0x057c, 0x057e, + 0x0580, 0x0582, 0x0584, 0x0586, 0x0588, 0x058a, 0x058c, 0x058e, + // Entry 180 - 1BF + 0x0590, 0x0592, 0x0594, 0x0596, 0x059c, 0x05a2, 0x05a4, 0x05a6, + 0x05a8, 0x05aa, 0x05ac, 0x05ae, 0x05b0, 0x05b2, 0x05b4, 0x05b6, + 0x05b8, 0x05ba, 0x05bc, 0x05be, 0x05c0, 0x05c4, 0x05c8, 0x05cc, + 0x05d0, 0x05d4, 0x05d8, 0x05dc, 0x05e0, 0x05e4, 0x05e9, 0x05ee, + 0x05f3, 0x05f5, 0x05f7, 0x05fd, 0x0609, 0x0615, 0x0621, 0x062a, + 0x0636, 0x063f, 0x0648, 0x0657, 0x0663, 0x066c, 0x0675, 0x067e, + 0x068a, 0x0696, 0x069f, 0x06a8, 0x06ae, 0x06b7, 0x06c3, 0x06cf, + 0x06d5, 0x06e4, 0x06f6, 0x0705, 0x070e, 0x071d, 0x072c, 0x0738, + // Entry 1C0 - 1FF + 0x0741, 0x074a, 0x0753, 0x075f, 0x076e, 0x077a, 0x0783, 0x078c, + 0x0795, 0x079b, 0x07a1, 0x07a7, 0x07ad, 0x07b6, 0x07bf, 0x07ce, + 0x07d7, 0x07e3, 0x07f2, 0x07fb, 0x0801, 0x0807, 0x0816, 0x0822, + 0x0831, 0x083a, 0x0849, 0x084f, 0x0858, 0x0861, 0x086a, 0x0873, + 0x087c, 0x0888, 0x0891, 0x0897, 0x08a0, 0x08a9, 0x08b2, 0x08be, + 0x08c7, 0x08d0, 0x08d9, 0x08e8, 0x08f4, 0x08fa, 0x0909, 0x090f, + 0x091b, 0x0927, 0x0930, 0x0939, 0x0942, 0x094e, 0x0954, 0x095d, + 0x0969, 0x096f, 0x097e, 0x0987, 0x098b, 0x098f, 0x0993, 0x0997, + // Entry 200 - 23F + 0x099b, 0x099f, 0x09a3, 0x09a7, 0x09ab, 0x09af, 0x09b4, 0x09b9, + 0x09be, 0x09c3, 0x09c8, 0x09cd, 0x09d2, 0x09d7, 0x09dc, 0x09e1, + 0x09e6, 0x09eb, 0x09f0, 0x09f5, 0x09fa, 0x09fc, 0x09fe, 0x0a00, + 0x0a02, 0x0a04, 0x0a06, 0x0a0c, 0x0a12, 0x0a18, 0x0a1e, 0x0a2a, + 0x0a2c, 0x0a2e, 0x0a30, 0x0a32, 0x0a34, 0x0a36, 0x0a38, 0x0a3c, + 0x0a3e, 0x0a40, 0x0a42, 0x0a44, 0x0a46, 0x0a48, 0x0a4a, 0x0a4c, + 0x0a4e, 0x0a50, 0x0a52, 0x0a54, 0x0a56, 0x0a58, 0x0a5a, 0x0a5f, + 0x0a65, 0x0a6c, 0x0a74, 0x0a76, 0x0a78, 0x0a7a, 0x0a7c, 0x0a7e, + // Entry 240 - 27F + 0x0a80, 0x0a82, 0x0a84, 0x0a86, 0x0a88, 0x0a8a, 0x0a8c, 0x0a8e, + 0x0a90, 0x0a96, 0x0a98, 0x0a9a, 0x0a9c, 0x0a9e, 0x0aa0, 0x0aa2, + 0x0aa4, 0x0aa6, 0x0aa8, 0x0aaa, 0x0aac, 0x0aae, 0x0ab0, 0x0ab2, + 0x0ab4, 0x0ab9, 0x0abe, 0x0ac2, 0x0ac6, 0x0aca, 0x0ace, 0x0ad2, + 0x0ad6, 0x0ada, 0x0ade, 0x0ae2, 0x0ae7, 0x0aec, 0x0af1, 0x0af6, + 0x0afb, 0x0b00, 0x0b05, 0x0b0a, 0x0b0f, 0x0b14, 0x0b19, 0x0b1e, + 0x0b23, 0x0b28, 0x0b2d, 0x0b32, 0x0b37, 0x0b3c, 0x0b41, 0x0b46, + 0x0b4b, 0x0b50, 0x0b52, 0x0b54, 0x0b56, 0x0b58, 0x0b5a, 0x0b5c, + // Entry 280 - 2BF + 0x0b5e, 0x0b62, 0x0b66, 0x0b6a, 0x0b6e, 0x0b72, 0x0b76, 0x0b7a, + 0x0b7c, 0x0b7e, 0x0b80, 0x0b82, 0x0b86, 0x0b8a, 0x0b8e, 0x0b92, + 0x0b96, 0x0b9a, 0x0b9e, 0x0ba0, 0x0ba2, 0x0ba4, 0x0ba6, 0x0ba8, + 0x0baa, 0x0bac, 0x0bb0, 0x0bb4, 0x0bba, 0x0bc0, 0x0bc4, 0x0bc8, + 0x0bcc, 0x0bd0, 0x0bd4, 0x0bd8, 0x0bdc, 0x0be0, 0x0be4, 0x0be8, + 0x0bec, 0x0bf0, 0x0bf4, 0x0bf8, 0x0bfc, 0x0c00, 0x0c04, 0x0c08, + 0x0c0c, 0x0c10, 0x0c14, 0x0c18, 0x0c1c, 0x0c20, 0x0c24, 0x0c28, + 0x0c2c, 0x0c30, 0x0c34, 0x0c36, 0x0c38, 0x0c3a, 0x0c3c, 0x0c3e, + // Entry 2C0 - 2FF + 0x0c40, 0x0c42, 0x0c44, 0x0c46, 0x0c48, 0x0c4a, 0x0c4c, 0x0c4e, + 0x0c50, 0x0c52, 0x0c54, 0x0c56, 0x0c58, 0x0c5a, 0x0c5c, 0x0c5e, + 0x0c60, 0x0c62, 0x0c64, 0x0c66, 0x0c68, 0x0c6a, 0x0c6c, 0x0c6e, + 0x0c70, 0x0c72, 0x0c74, 0x0c76, 0x0c78, 0x0c7a, 0x0c7c, 0x0c7e, + 0x0c80, 0x0c82, 0x0c86, 0x0c8a, 0x0c8e, 0x0c92, 0x0c96, 0x0c9a, + 0x0c9e, 0x0ca2, 0x0ca4, 0x0ca8, 0x0cac, 0x0cb0, 0x0cb4, 0x0cb8, + 0x0cbc, 0x0cc0, 0x0cc4, 0x0cc8, 0x0ccc, 0x0cd0, 0x0cd4, 0x0cd8, + 0x0cdc, 0x0ce0, 0x0ce4, 0x0ce8, 0x0cec, 0x0cf0, 0x0cf4, 0x0cf8, + // Entry 300 - 33F + 0x0cfc, 0x0d00, 0x0d04, 0x0d08, 0x0d0c, 0x0d10, 0x0d14, 0x0d18, + 0x0d1c, 0x0d20, 0x0d24, 0x0d28, 0x0d2c, 0x0d30, 0x0d34, 0x0d38, + 0x0d3c, 0x0d40, 0x0d44, 0x0d48, 0x0d4c, 0x0d50, 0x0d54, 0x0d58, + 0x0d5c, 0x0d60, 0x0d64, 0x0d68, 0x0d6c, 0x0d70, 0x0d74, 0x0d78, + 0x0d7c, 0x0d80, 0x0d84, 0x0d88, 0x0d8c, 0x0d90, 0x0d94, 0x0d98, + 0x0d9c, 0x0da0, 0x0da4, 0x0da8, 0x0dac, 0x0db0, 0x0db4, 0x0db8, + 0x0dbc, 0x0dc0, 0x0dc4, 0x0dc8, 0x0dcc, 0x0dd0, 0x0dd4, 0x0dd8, + 0x0ddc, 0x0de0, 0x0de4, 0x0de8, 0x0dec, 0x0df0, 0x0df4, 0x0df8, + // Entry 340 - 37F + 0x0dfc, 0x0e00, 0x0e04, 0x0e08, 0x0e0c, 0x0e10, 0x0e14, 0x0e18, + 0x0e1d, 0x0e22, 0x0e27, 0x0e2c, 0x0e31, 0x0e36, 0x0e3a, 0x0e3e, + 0x0e42, 0x0e46, 0x0e4a, 0x0e4e, 0x0e52, 0x0e56, 0x0e5a, 0x0e5e, + 0x0e62, 0x0e66, 0x0e6a, 0x0e6e, 0x0e72, 0x0e76, 0x0e7a, 0x0e7e, + 0x0e82, 0x0e86, 0x0e8a, 0x0e8e, 0x0e92, 0x0e96, 0x0e9a, 0x0e9e, + 0x0ea2, 0x0ea6, 0x0eaa, 0x0eae, 0x0eb2, 0x0eb6, 0x0ebc, 0x0ec2, + 0x0ec8, 0x0ecc, 0x0ed0, 0x0ed4, 0x0ed8, 0x0edc, 0x0ee0, 0x0ee4, + 0x0ee8, 0x0eec, 0x0ef0, 0x0ef4, 0x0ef8, 0x0efc, 0x0f00, 0x0f04, + // Entry 380 - 3BF + 0x0f08, 0x0f0c, 0x0f10, 0x0f14, 0x0f18, 0x0f1c, 0x0f20, 0x0f24, + 0x0f28, 0x0f2c, 0x0f30, 0x0f34, 0x0f38, 0x0f3e, 0x0f44, 0x0f4a, + 0x0f50, 0x0f56, 0x0f5c, 0x0f62, 0x0f68, 0x0f6e, 0x0f74, 0x0f7a, + 0x0f80, 0x0f86, 0x0f8c, 0x0f92, 0x0f98, 0x0f9e, 0x0fa4, 0x0faa, + 0x0fb0, 0x0fb6, 0x0fbc, 0x0fc2, 0x0fc8, 0x0fce, 0x0fd4, 0x0fda, + 0x0fe0, 0x0fe6, 0x0fec, 0x0ff2, 0x0ff8, 0x0ffe, 0x1004, 0x100a, + 0x1010, 0x1016, 0x101c, 0x1022, 0x1028, 0x102e, 0x1034, 0x103a, + 0x1040, 0x1046, 0x104c, 0x1052, 0x1058, 0x105e, 0x1064, 0x106a, + // Entry 3C0 - 3FF + 0x1070, 0x1076, 0x107c, 0x1082, 0x1088, 0x108e, 0x1094, 0x109a, + 0x10a0, 0x10a6, 0x10ac, 0x10b2, 0x10b8, 0x10be, 0x10c4, 0x10ca, + 0x10d0, 0x10d6, 0x10dc, 0x10e2, 0x10e8, 0x10ee, 0x10f4, 0x10fa, + 0x1100, 0x1106, 0x110c, 0x1112, 0x1118, 0x111e, 0x1124, 0x112a, + 0x1130, 0x1136, 0x113c, 0x1142, 0x1148, 0x114e, 0x1154, 0x115a, + 0x1160, 0x1166, 0x116c, 0x1172, 0x1178, 0x1180, 0x1188, 0x1190, + 0x1198, 0x11a0, 0x11a8, 0x11b0, 0x11b6, 0x11d7, 0x11e6, 0x11ee, + 0x11ef, 0x11f0, 0x11f1, 0x11f2, 0x11f3, 0x11f4, 0x11f5, 0x11f6, + // Entry 400 - 43F + 0x11f7, 0x11f8, 0x11f9, 0x11fa, 0x11fb, 0x11fc, 0x11fd, 0x11fe, + 0x11ff, 0x1200, 0x1201, 0x1205, 0x1209, 0x120d, 0x1211, 0x1215, + 0x1219, 0x121b, 0x121d, 0x121f, 0x1221, 0x1223, 0x1225, 0x1227, + 0x1229, 0x122b, 0x122d, 0x122f, 0x1231, 0x1233, 0x1235, 0x1237, + 0x1239, 0x123b, 0x123d, 0x123f, 0x1241, 0x1243, 0x1245, 0x1247, + 0x1249, 0x124b, 0x124d, 0x124f, 0x1251, 0x1253, 0x1255, 0x1257, + 0x1259, 0x125b, 0x125d, 0x125f, 0x1263, 0x1267, 0x126b, 0x126f, + 0x1270, 0x1271, 0x1272, 0x1273, 0x1274, 0x1275, 0x1277, 0x1279, + // Entry 440 - 47F + 0x127b, 0x127d, 0x127f, 0x1287, 0x128f, 0x129b, 0x12a7, 0x12b3, + 0x12bf, 0x12cb, 0x12d3, 0x12db, 0x12e7, 0x12f3, 0x12ff, 0x130b, + 0x130d, 0x130f, 0x1311, 0x1313, 0x1315, 0x1317, 0x1319, 0x131b, + 0x131d, 0x131f, 0x1321, 0x1323, 0x1325, 0x1327, 0x1329, 0x132b, + 0x132e, 0x1331, 0x1333, 0x1335, 0x1337, 0x1339, 0x133b, 0x133d, + 0x133f, 0x1341, 0x1343, 0x1345, 0x1347, 0x1349, 0x134b, 0x134d, + 0x1350, 0x1353, 0x1356, 0x1359, 0x135c, 0x135f, 0x1362, 0x1365, + 0x1368, 0x136b, 0x136e, 0x1371, 0x1374, 0x1377, 0x137a, 0x137d, + // Entry 480 - 4BF + 0x1380, 0x1383, 0x1386, 0x1389, 0x138c, 0x138f, 0x1392, 0x1395, + 0x1398, 0x139b, 0x13a2, 0x13a4, 0x13a6, 0x13a8, 0x13ab, 0x13ad, + 0x13af, 0x13b1, 0x13b3, 0x13b5, 0x13bb, 0x13c1, 0x13c4, 0x13c7, + 0x13ca, 0x13cd, 0x13d0, 0x13d3, 0x13d6, 0x13d9, 0x13dc, 0x13df, + 0x13e2, 0x13e5, 0x13e8, 0x13eb, 0x13ee, 0x13f1, 0x13f4, 0x13f7, + 0x13fa, 0x13fd, 0x1400, 0x1403, 0x1406, 0x1409, 0x140c, 0x140f, + 0x1412, 0x1415, 0x1418, 0x141b, 0x141e, 0x1421, 0x1424, 0x1427, + 0x142a, 0x142d, 0x1430, 0x1433, 0x1436, 0x1439, 0x143c, 0x143f, + // Entry 4C0 - 4FF + 0x1442, 0x1445, 0x1448, 0x1451, 0x145a, 0x1463, 0x146c, 0x1475, + 0x147e, 0x1487, 0x1490, 0x1499, 0x149c, 0x149f, 0x14a2, 0x14a5, + 0x14a8, 0x14ab, 0x14ae, 0x14b1, 0x14b4, 0x14b7, 0x14ba, 0x14bd, + 0x14c0, 0x14c3, 0x14c6, 0x14c9, 0x14cc, 0x14cf, 0x14d2, 0x14d5, + 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, 0x14e7, 0x14ea, 0x14ed, + 0x14f0, 0x14f3, 0x14f6, 0x14f9, 0x14fc, 0x14ff, 0x1502, 0x1505, + 0x1508, 0x150b, 0x150e, 0x1511, 0x1514, 0x1517, 0x151a, 0x151d, + 0x1520, 0x1523, 0x1526, 0x1529, 0x152c, 0x152f, 0x1532, 0x1535, + // Entry 500 - 53F + 0x1538, 0x153b, 0x153e, 0x1541, 0x1544, 0x1547, 0x154a, 0x154d, + 0x1550, 0x1553, 0x1556, 0x1559, 0x155c, 0x155f, 0x1562, 0x1565, + 0x1568, 0x156b, 0x156e, 0x1571, 0x1574, 0x1577, 0x157a, 0x157d, + 0x1580, 0x1583, 0x1586, 0x1589, 0x158c, 0x158f, 0x1592, 0x1595, + 0x1598, 0x159b, 0x159e, 0x15a1, 0x15a4, 0x15a7, 0x15aa, 0x15ad, + 0x15b0, 0x15b3, 0x15b6, 0x15b9, 0x15bc, 0x15bf, 0x15c2, 0x15c5, + 0x15c8, 0x15cb, 0x15ce, 0x15d1, 0x15d4, 0x15d7, 0x15da, 0x15dd, + 0x15e0, 0x15e3, 0x15e6, 0x15e9, 0x15ec, 0x15ef, 0x15f2, 0x15f5, + // Entry 540 - 57F + 0x15f8, 0x15fb, 0x15fe, 0x1601, 0x1604, 0x1607, 0x160a, 0x160d, + 0x1610, 0x1613, 0x1616, 0x1619, 0x161c, 0x161f, 0x1622, 0x1625, + 0x1628, 0x162b, 0x162e, 0x1631, 0x1634, 0x1637, 0x163a, 0x163d, + 0x1640, 0x1643, 0x1646, 0x1649, 0x164c, 0x164f, 0x1652, 0x1655, + 0x1658, 0x165b, 0x165e, 0x1661, 0x1664, 0x1667, 0x166a, 0x166d, + 0x1670, 0x1673, 0x1676, 0x1679, 0x167c, 0x167f, 0x1682, 0x1685, + 0x1688, 0x168b, 0x168e, 0x1691, 0x1694, 0x1697, 0x169a, 0x169d, + 0x16a0, 0x16a3, 0x16a6, 0x16a9, 0x16ac, 0x16af, 0x16b2, 0x16b5, + // Entry 580 - 5BF + 0x16b8, 0x16bb, 0x16be, 0x16c1, 0x16c4, 0x16c7, 0x16ca, 0x16cd, + 0x16d0, 0x16d3, 0x16d6, 0x16d9, 0x16dc, 0x16df, 0x16e2, 0x16e5, + 0x16e8, 0x16eb, 0x16ee, 0x16f1, 0x16f4, 0x16f7, 0x16fa, 0x16fd, + 0x1700, 0x1703, 0x1706, 0x1709, 0x170c, 0x170f, 0x1712, 0x1715, + 0x1718, 0x171b, 0x171e, 0x1721, 0x1724, 0x1727, 0x172a, 0x172d, + 0x1730, 0x1733, 0x1736, 0x1739, 0x173c, 0x173f, 0x1742, 0x1745, + 0x1748, 0x174b, 0x174e, 0x1751, 0x1754, 0x1757, 0x175a, 0x175d, + 0x1760, 0x1763, 0x1766, 0x1769, 0x176c, 0x176f, 0x1772, 0x1775, + // Entry 5C0 - 5FF + 0x1778, 0x177b, 0x177e, 0x1781, 0x1784, 0x1787, 0x178a, 0x178d, + 0x1790, 0x1793, 0x1796, 0x1799, 0x179c, 0x179f, 0x17a2, 0x17a5, + 0x17a8, 0x17ab, 0x17ae, 0x17b1, 0x17b4, 0x17b7, 0x17ba, 0x17bd, + 0x17c0, 0x17c3, 0x17c6, 0x17c9, 0x17cc, 0x17cf, 0x17d2, 0x17d5, + 0x17d8, 0x17db, 0x17de, 0x17e1, 0x17e4, 0x17e7, 0x17ea, 0x17ed, + 0x17f0, 0x17f3, 0x17f6, 0x17f9, 0x17fc, 0x17ff, 0x1802, 0x1805, + 0x1808, 0x180b, 0x180e, 0x1811, 0x1814, 0x1817, 0x181a, 0x181d, + 0x1820, 0x1823, 0x1826, 0x1829, 0x182c, 0x182f, 0x1832, 0x1835, + // Entry 600 - 63F + 0x1838, 0x183b, 0x183e, 0x1841, 0x1844, 0x1847, 0x184a, 0x184d, + 0x1850, 0x1853, 0x1856, 0x1859, 0x185c, 0x185f, 0x1862, 0x1865, + 0x1868, 0x186b, 0x186e, 0x1871, 0x1874, 0x1877, 0x187a, 0x187d, + 0x1880, 0x1883, 0x1886, 0x1889, 0x188c, 0x188f, 0x1892, 0x1895, + 0x1898, 0x189b, 0x189e, 0x18a1, 0x18a4, 0x18a7, 0x18aa, 0x18ad, + 0x18b0, 0x18b3, 0x18b6, 0x18b9, 0x18bc, 0x18bf, 0x18c2, 0x18c5, + 0x18c8, 0x18cb, 0x18ce, 0x18d1, 0x18d4, 0x18d7, 0x18da, 0x18dd, + 0x18e0, 0x18e3, 0x18e6, 0x18e9, 0x18ec, 0x18ef, 0x18f2, 0x18f5, + // Entry 640 - 67F + 0x18f8, 0x18fb, 0x18fe, 0x1901, 0x1904, 0x1907, 0x190a, 0x190d, + 0x1910, 0x1913, 0x1916, 0x1919, 0x191c, 0x191f, 0x1922, 0x1925, + 0x1928, 0x192b, 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, + 0x1940, 0x1943, 0x1946, 0x1949, 0x194c, 0x194f, 0x1952, 0x1955, + 0x1958, 0x195b, 0x195e, 0x1961, 0x1964, 0x1967, 0x196a, 0x196d, + 0x1970, 0x1973, 0x1976, 0x1979, 0x197c, 0x197f, 0x1982, 0x1985, + 0x1988, 0x198b, +} // Size: 3324 bytes var xorData string = "" + // Size: 4862 bytes "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + @@ -547,7 +690,7 @@ func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { return 0 } -// idnaTrie. Total size: 30288 bytes (29.58 KiB). Checksum: c0cd84404a2f6f19. +// idnaTrie. Total size: 30196 bytes (29.49 KiB). Checksum: e2ae95a945f04016. type idnaTrie struct{} func newIdnaTrie(i int) *idnaTrie { @@ -600,11 +743,11 @@ var idnaValues = [8192]uint16{ 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, - 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, - 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, - 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, - 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, - 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x0012, 0xe9: 0x0018, + 0xea: 0x0019, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x0022, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0029, 0xf3: 0x0031, 0xf4: 0x003a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x0042, 0xf9: 0x0049, 0xfa: 0x0051, 0xfb: 0x0018, + 0xfc: 0x0059, 0xfd: 0x0061, 0xfe: 0x0069, 0xff: 0x0018, // Block 0x4, offset 0x100 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, @@ -614,12 +757,12 @@ var idnaValues = [8192]uint16{ 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, - 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x130: 0x0071, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, - 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0079, // Block 0x5, offset 0x140 - 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, - 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x140: 0x0079, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x0081, 0x14a: 0xe00d, 0x14b: 0x0008, 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, @@ -628,7 +771,7 @@ var idnaValues = [8192]uint16{ 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, - 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x0089, // Block 0x6, offset 0x180 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, @@ -642,8 +785,8 @@ var idnaValues = [8192]uint16{ 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, // Block 0x7, offset 0x1c0 - 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, - 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x0091, 0x1c5: 0x0091, + 0x1c6: 0x0091, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, @@ -663,22 +806,22 @@ var idnaValues = [8192]uint16{ 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, - 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, - 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0099, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x00a1, 0x23f: 0x0008, // Block 0x9, offset 0x240 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, - 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, - 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, + 0x258: 0x00d2, 0x259: 0x00da, 0x25a: 0x00e2, 0x25b: 0x00ea, 0x25c: 0x00f2, 0x25d: 0x00fa, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0101, 0x262: 0x0089, 0x263: 0x0109, 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, // Block 0xa, offset 0x280 - 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0111, 0x285: 0x040d, 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, @@ -687,10 +830,10 @@ var idnaValues = [8192]uint16{ 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, - 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, - 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x011a, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x0122, 0x2bf: 0x043d, // Block 0xb, offset 0x2c0 - 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x003a, 0x2c5: 0x012a, 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, @@ -782,8 +925,8 @@ var idnaValues = [8192]uint16{ 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, - 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429, - 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, + 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0139, + 0x4b6: 0x0141, 0x4b7: 0x0149, 0x4b8: 0x0151, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, // Block 0x13, offset 0x4c0 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, @@ -826,8 +969,8 @@ var idnaValues = [8192]uint16{ 0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008, 0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308, 0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308, - 0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1, - 0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, + 0x598: 0x0159, 0x599: 0x0161, 0x59a: 0x0169, 0x59b: 0x0171, 0x59c: 0x0179, 0x59d: 0x0181, + 0x59e: 0x0189, 0x59f: 0x0191, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, 0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, 0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008, @@ -850,8 +993,8 @@ var idnaValues = [8192]uint16{ 0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008, 0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040, 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008, - 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1, - 0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, + 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0199, 0x61d: 0x01a1, + 0x61e: 0x0040, 0x61f: 0x01a9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, 0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018, @@ -866,16 +1009,16 @@ var idnaValues = [8192]uint16{ 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, - 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008, - 0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, + 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x01b1, 0x674: 0x0040, 0x675: 0x0008, + 0x676: 0x01b9, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, 0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008, // Block 0x1a, offset 0x680 0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040, 0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308, 0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308, 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, - 0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040, - 0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, + 0x698: 0x0040, 0x699: 0x01c1, 0x69a: 0x01c9, 0x69b: 0x01d1, 0x69c: 0x0008, 0x69d: 0x0040, + 0x69e: 0x01d9, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, 0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308, @@ -922,7 +1065,7 @@ var idnaValues = [8192]uint16{ 0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008, 0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x3308, 0x796: 0x3308, 0x797: 0x3008, - 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, + 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x01e1, 0x79d: 0x01e9, 0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308, 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, @@ -998,32 +1141,32 @@ var idnaValues = [8192]uint16{ 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0008, 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, - 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308, + 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x01f9, 0x934: 0x3308, 0x935: 0x3308, 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x3b08, 0x93b: 0x3308, 0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040, // Block 0x25, offset 0x940 - 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008, + 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0211, 0x944: 0x0008, 0x945: 0x0008, 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, - 0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, - 0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79, - 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008, + 0x94c: 0x0008, 0x94d: 0x0219, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0221, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0229, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0231, 0x95d: 0x0008, 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, - 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0239, 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040, - 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59, - 0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308, + 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0241, 0x974: 0x3308, 0x975: 0x0249, + 0x976: 0x0251, 0x977: 0x0259, 0x978: 0x0261, 0x979: 0x0269, 0x97a: 0x3308, 0x97b: 0x3308, 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, // Block 0x26, offset 0x980 - 0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, + 0x980: 0x3308, 0x981: 0x0271, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, 0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, 0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308, - 0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, - 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11, - 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308, - 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308, - 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, + 0x992: 0x3308, 0x993: 0x0279, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, + 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0281, + 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0289, 0x9a3: 0x3308, + 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0291, 0x9a8: 0x3308, 0x9a9: 0x3308, + 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0299, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, - 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308, + 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x02a1, 0x9ba: 0x3308, 0x9bb: 0x3308, 0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018, // Block 0x27, offset 0x9c0 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, @@ -1033,34 +1176,34 @@ var idnaValues = [8192]uint16{ 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008, 0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008, 0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008, - 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008, - 0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41, - 0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008, - 0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269, + 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0019, 0x9ed: 0x02e1, 0x9ee: 0x02e9, 0x9ef: 0x0008, + 0x9f0: 0x02f1, 0x9f1: 0x02f9, 0x9f2: 0x0301, 0x9f3: 0x0309, 0x9f4: 0x00a9, 0x9f5: 0x0311, + 0x9f6: 0x00b1, 0x9f7: 0x0319, 0x9f8: 0x0101, 0x9f9: 0x0321, 0x9fa: 0x0329, 0x9fb: 0x0008, + 0x9fc: 0x0051, 0x9fd: 0x0331, 0x9fe: 0x0339, 0x9ff: 0x00b9, // Block 0x28, offset 0xa00 - 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1, - 0xa06: 0x05b5, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011, - 0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041, - 0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05cd, 0xa15: 0x05cd, 0xa16: 0x0f99, 0xa17: 0x0fa9, - 0xa18: 0x0fb9, 0xa19: 0x05b5, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05e5, 0xa1d: 0x1099, - 0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269, - 0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1, - 0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, + 0xa00: 0x0341, 0xa01: 0x0349, 0xa02: 0x00c1, 0xa03: 0x0019, 0xa04: 0x0351, 0xa05: 0x0359, + 0xa06: 0x05b5, 0xa07: 0x02e9, 0xa08: 0x02f1, 0xa09: 0x02f9, 0xa0a: 0x0361, 0xa0b: 0x0369, + 0xa0c: 0x0371, 0xa0d: 0x0309, 0xa0e: 0x0008, 0xa0f: 0x0319, 0xa10: 0x0321, 0xa11: 0x0379, + 0xa12: 0x0051, 0xa13: 0x0381, 0xa14: 0x05cd, 0xa15: 0x05cd, 0xa16: 0x0339, 0xa17: 0x0341, + 0xa18: 0x0349, 0xa19: 0x05b5, 0xa1a: 0x0389, 0xa1b: 0x0391, 0xa1c: 0x05e5, 0xa1d: 0x0399, + 0xa1e: 0x03a1, 0xa1f: 0x03a9, 0xa20: 0x03b1, 0xa21: 0x03b9, 0xa22: 0x0311, 0xa23: 0x00b9, + 0xa24: 0x0349, 0xa25: 0x0391, 0xa26: 0x0399, 0xa27: 0x03a1, 0xa28: 0x03c1, 0xa29: 0x03b1, + 0xa2a: 0x03b9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, - 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, + 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x03c9, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, 0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008, // Block 0x29, offset 0xa40 0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008, 0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008, 0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008, 0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, - 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169, - 0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9, - 0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05fd, 0xa68: 0x1239, 0xa69: 0x1251, - 0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9, - 0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359, - 0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x0615, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1, - 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429, + 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x03d1, 0xa5c: 0x03d9, 0xa5d: 0x03e1, + 0xa5e: 0x03e9, 0xa5f: 0x0371, 0xa60: 0x03f1, 0xa61: 0x03f9, 0xa62: 0x0401, 0xa63: 0x0409, + 0xa64: 0x0411, 0xa65: 0x0419, 0xa66: 0x0421, 0xa67: 0x05fd, 0xa68: 0x0429, 0xa69: 0x0431, + 0xa6a: 0xe17d, 0xa6b: 0x0439, 0xa6c: 0x0441, 0xa6d: 0x0449, 0xa6e: 0x0451, 0xa6f: 0x0459, + 0xa70: 0x0461, 0xa71: 0x0469, 0xa72: 0x0471, 0xa73: 0x0479, 0xa74: 0x0481, 0xa75: 0x0489, + 0xa76: 0x0491, 0xa77: 0x0499, 0xa78: 0x0615, 0xa79: 0x04a1, 0xa7a: 0x04a9, 0xa7b: 0x04b1, + 0xa7c: 0x04b9, 0xa7d: 0x04c1, 0xa7e: 0x04c9, 0xa7f: 0x04d1, // Block 0x2a, offset 0xa80 0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008, 0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008, @@ -1079,7 +1222,7 @@ var idnaValues = [8192]uint16{ 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008, 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x062d, 0xadb: 0x064d, 0xadc: 0x0008, 0xadd: 0x0008, - 0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, + 0xade: 0x04d9, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, @@ -1094,33 +1237,33 @@ var idnaValues = [8192]uint16{ 0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008, 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, 0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045, - 0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489, - 0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1, - 0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040, + 0xb30: 0x0008, 0xb31: 0x04e1, 0xb32: 0x0008, 0xb33: 0x04e9, 0xb34: 0x0008, 0xb35: 0x04f1, + 0xb36: 0x0008, 0xb37: 0x04f9, 0xb38: 0x0008, 0xb39: 0x0501, 0xb3a: 0x0008, 0xb3b: 0x0509, + 0xb3c: 0x0008, 0xb3d: 0x0511, 0xb3e: 0x0040, 0xb3f: 0x0040, // Block 0x2d, offset 0xb40 - 0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1, - 0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591, - 0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1, - 0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1, - 0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771, - 0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891, - 0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831, - 0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951, - 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040, - 0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x0665, 0xb7b: 0x1459, - 0xb7c: 0x19b1, 0xb7d: 0x067e, 0xb7e: 0x1a31, 0xb7f: 0x069e, + 0xb40: 0x0519, 0xb41: 0x0521, 0xb42: 0x0529, 0xb43: 0x0531, 0xb44: 0x0539, 0xb45: 0x0541, + 0xb46: 0x0549, 0xb47: 0x0551, 0xb48: 0x0519, 0xb49: 0x0521, 0xb4a: 0x0529, 0xb4b: 0x0531, + 0xb4c: 0x0539, 0xb4d: 0x0541, 0xb4e: 0x0549, 0xb4f: 0x0551, 0xb50: 0x0559, 0xb51: 0x0561, + 0xb52: 0x0569, 0xb53: 0x0571, 0xb54: 0x0579, 0xb55: 0x0581, 0xb56: 0x0589, 0xb57: 0x0591, + 0xb58: 0x0559, 0xb59: 0x0561, 0xb5a: 0x0569, 0xb5b: 0x0571, 0xb5c: 0x0579, 0xb5d: 0x0581, + 0xb5e: 0x0589, 0xb5f: 0x0591, 0xb60: 0x0599, 0xb61: 0x05a1, 0xb62: 0x05a9, 0xb63: 0x05b1, + 0xb64: 0x05b9, 0xb65: 0x05c1, 0xb66: 0x05c9, 0xb67: 0x05d1, 0xb68: 0x0599, 0xb69: 0x05a1, + 0xb6a: 0x05a9, 0xb6b: 0x05b1, 0xb6c: 0x05b9, 0xb6d: 0x05c1, 0xb6e: 0x05c9, 0xb6f: 0x05d1, + 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x05d9, 0xb73: 0x05e1, 0xb74: 0x05e9, 0xb75: 0x0040, + 0xb76: 0x0008, 0xb77: 0x05f1, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x0665, 0xb7b: 0x04e1, + 0xb7c: 0x05e1, 0xb7d: 0x067e, 0xb7e: 0x05f9, 0xb7f: 0x069e, // Block 0x2e, offset 0xb80 - 0xb80: 0x06be, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040, - 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06dd, 0xb89: 0x1471, 0xb8a: 0x06f5, 0xb8b: 0x1489, - 0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008, - 0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, - 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x070d, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2, - 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61, + 0xb80: 0x06be, 0xb81: 0x0602, 0xb82: 0x0609, 0xb83: 0x0611, 0xb84: 0x0619, 0xb85: 0x0040, + 0xb86: 0x0008, 0xb87: 0x0621, 0xb88: 0x06dd, 0xb89: 0x04e9, 0xb8a: 0x06f5, 0xb8b: 0x04f1, + 0xb8c: 0x0611, 0xb8d: 0x062a, 0xb8e: 0x0632, 0xb8f: 0x063a, 0xb90: 0x0008, 0xb91: 0x0008, + 0xb92: 0x0008, 0xb93: 0x0641, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, + 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x070d, 0xb9b: 0x04f9, 0xb9c: 0x0040, 0xb9d: 0x064a, + 0xb9e: 0x0652, 0xb9f: 0x065a, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x0661, 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045, - 0xbaa: 0x0725, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa, - 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040, - 0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x073d, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9, - 0xbbc: 0x1ce9, 0xbbd: 0x0756, 0xbbe: 0x0776, 0xbbf: 0x0040, + 0xbaa: 0x0725, 0xbab: 0x0509, 0xbac: 0xe04d, 0xbad: 0x066a, 0xbae: 0x012a, 0xbaf: 0x0672, + 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x0679, 0xbb3: 0x0681, 0xbb4: 0x0689, 0xbb5: 0x0040, + 0xbb6: 0x0008, 0xbb7: 0x0691, 0xbb8: 0x073d, 0xbb9: 0x0501, 0xbba: 0x0515, 0xbbb: 0x0511, + 0xbbc: 0x0681, 0xbbd: 0x0756, 0xbbe: 0x0776, 0xbbf: 0x0040, // Block 0x2f, offset 0xbc0 0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a, 0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0, @@ -1130,72 +1273,72 @@ var idnaValues = [8192]uint16{ 0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, 0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040, 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a, - 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018, - 0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, - 0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x07b6, 0xbff: 0x0018, + 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0699, 0xbf4: 0x06a1, 0xbf5: 0x0018, + 0xbf6: 0x06a9, 0xbf7: 0x06b1, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, + 0xbfc: 0x06ba, 0xbfd: 0x0018, 0xbfe: 0x07b6, 0xbff: 0x0018, // Block 0x30, offset 0xc00 0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018, - 0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018, + 0xc06: 0x0018, 0xc07: 0x06c2, 0xc08: 0x06ca, 0xc09: 0x06d2, 0xc0a: 0x0018, 0xc0b: 0x0018, 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, - 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x06d9, 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, 0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340, 0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040, 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340, - 0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61, - 0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07d5, - 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71, + 0xc30: 0x06e1, 0xc31: 0x0311, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x06e9, 0xc35: 0x06f1, + 0xc36: 0x06f9, 0xc37: 0x0701, 0xc38: 0x0709, 0xc39: 0x0711, 0xc3a: 0x071a, 0xc3b: 0x07d5, + 0xc3c: 0x0722, 0xc3d: 0x072a, 0xc3e: 0x0732, 0xc3f: 0x0329, // Block 0x31, offset 0xc40 - 0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61, - 0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07ed, - 0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09, - 0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359, - 0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040, + 0xc40: 0x06e1, 0xc41: 0x0049, 0xc42: 0x0029, 0xc43: 0x0031, 0xc44: 0x06e9, 0xc45: 0x06f1, + 0xc46: 0x06f9, 0xc47: 0x0701, 0xc48: 0x0709, 0xc49: 0x0711, 0xc4a: 0x071a, 0xc4b: 0x07ed, + 0xc4c: 0x0722, 0xc4d: 0x072a, 0xc4e: 0x0732, 0xc4f: 0x0040, 0xc50: 0x0019, 0xc51: 0x02f9, + 0xc52: 0x0051, 0xc53: 0x0109, 0xc54: 0x0361, 0xc55: 0x00a9, 0xc56: 0x0319, 0xc57: 0x0101, + 0xc58: 0x0321, 0xc59: 0x0329, 0xc5a: 0x0339, 0xc5b: 0x0089, 0xc5c: 0x0341, 0xc5d: 0x0040, 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, - 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018, + 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x0739, 0xc69: 0x0018, 0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018, 0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018, 0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018, 0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018, // Block 0x32, offset 0xc80 - 0xc80: 0x0806, 0xc81: 0x0826, 0xc82: 0x1159, 0xc83: 0x0845, 0xc84: 0x0018, 0xc85: 0x0866, - 0xc86: 0x0886, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x08a5, 0xc8a: 0x0f31, 0xc8b: 0x0249, - 0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41, - 0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018, - 0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269, - 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08c5, 0xca2: 0x2061, 0xca3: 0x0018, - 0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018, - 0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09, - 0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9, - 0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08e5, - 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109, + 0xc80: 0x0806, 0xc81: 0x0826, 0xc82: 0x03d9, 0xc83: 0x0845, 0xc84: 0x0018, 0xc85: 0x0866, + 0xc86: 0x0886, 0xc87: 0x0369, 0xc88: 0x0018, 0xc89: 0x08a5, 0xc8a: 0x0309, 0xc8b: 0x00a9, + 0xc8c: 0x00a9, 0xc8d: 0x00a9, 0xc8e: 0x00a9, 0xc8f: 0x0741, 0xc90: 0x0311, 0xc91: 0x0311, + 0xc92: 0x0101, 0xc93: 0x0101, 0xc94: 0x0018, 0xc95: 0x0329, 0xc96: 0x0749, 0xc97: 0x0018, + 0xc98: 0x0018, 0xc99: 0x0339, 0xc9a: 0x0751, 0xc9b: 0x00b9, 0xc9c: 0x00b9, 0xc9d: 0x00b9, + 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x0759, 0xca1: 0x08c5, 0xca2: 0x0761, 0xca3: 0x0018, + 0xca4: 0x04b1, 0xca5: 0x0018, 0xca6: 0x0769, 0xca7: 0x0018, 0xca8: 0x04b1, 0xca9: 0x0018, + 0xcaa: 0x0319, 0xcab: 0x0771, 0xcac: 0x02e9, 0xcad: 0x03d9, 0xcae: 0x0018, 0xcaf: 0x02f9, + 0xcb0: 0x02f9, 0xcb1: 0x03f1, 0xcb2: 0x0040, 0xcb3: 0x0321, 0xcb4: 0x0051, 0xcb5: 0x0779, + 0xcb6: 0x0781, 0xcb7: 0x0789, 0xcb8: 0x0791, 0xcb9: 0x0311, 0xcba: 0x0018, 0xcbb: 0x08e5, + 0xcbc: 0x0799, 0xcbd: 0x03a1, 0xcbe: 0x03a1, 0xcbf: 0x0799, // Block 0x33, offset 0xcc0 - 0xcc0: 0x0905, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9, - 0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018, - 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151, - 0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279, - 0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399, - 0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x091d, 0xce3: 0x2439, - 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x093d, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369, - 0xcea: 0x24a9, 0xceb: 0x095d, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61, - 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x097d, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451, - 0xcf6: 0x099d, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09bd, - 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61, + 0xcc0: 0x0905, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x02f1, + 0xcc6: 0x02f1, 0xcc7: 0x02f9, 0xcc8: 0x0311, 0xcc9: 0x00b1, 0xcca: 0x0018, 0xccb: 0x0018, + 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x07a1, 0xcd1: 0x07a9, + 0xcd2: 0x07b1, 0xcd3: 0x07b9, 0xcd4: 0x07c1, 0xcd5: 0x07c9, 0xcd6: 0x07d1, 0xcd7: 0x07d9, + 0xcd8: 0x07e1, 0xcd9: 0x07e9, 0xcda: 0x07f1, 0xcdb: 0x07f9, 0xcdc: 0x0801, 0xcdd: 0x0809, + 0xcde: 0x0811, 0xcdf: 0x0819, 0xce0: 0x0311, 0xce1: 0x0821, 0xce2: 0x091d, 0xce3: 0x0829, + 0xce4: 0x0391, 0xce5: 0x0831, 0xce6: 0x093d, 0xce7: 0x0839, 0xce8: 0x0841, 0xce9: 0x0109, + 0xcea: 0x0849, 0xceb: 0x095d, 0xcec: 0x0101, 0xced: 0x03d9, 0xcee: 0x02f1, 0xcef: 0x0321, + 0xcf0: 0x0311, 0xcf1: 0x0821, 0xcf2: 0x097d, 0xcf3: 0x0829, 0xcf4: 0x0391, 0xcf5: 0x0831, + 0xcf6: 0x099d, 0xcf7: 0x0839, 0xcf8: 0x0841, 0xcf9: 0x0109, 0xcfa: 0x0849, 0xcfb: 0x09bd, + 0xcfc: 0x0101, 0xcfd: 0x03d9, 0xcfe: 0x02f1, 0xcff: 0x0321, // Block 0x34, offset 0xd00 0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018, 0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040, 0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040, 0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040, 0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040, - 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51, - 0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601, - 0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691, - 0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a1e, 0xd35: 0x0a3e, + 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x0049, 0xd21: 0x0029, 0xd22: 0x0031, 0xd23: 0x06e9, + 0xd24: 0x06f1, 0xd25: 0x06f9, 0xd26: 0x0701, 0xd27: 0x0709, 0xd28: 0x0711, 0xd29: 0x0879, + 0xd2a: 0x0881, 0xd2b: 0x0889, 0xd2c: 0x0891, 0xd2d: 0x0899, 0xd2e: 0x08a1, 0xd2f: 0x08a9, + 0xd30: 0x08b1, 0xd31: 0x08b9, 0xd32: 0x08c1, 0xd33: 0x08c9, 0xd34: 0x0a1e, 0xd35: 0x0a3e, 0xd36: 0x0a5e, 0xd37: 0x0a7e, 0xd38: 0x0a9e, 0xd39: 0x0abe, 0xd3a: 0x0ade, 0xd3b: 0x0afe, - 0xd3c: 0x0b1e, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, + 0xd3c: 0x0b1e, 0xd3d: 0x08d2, 0xd3e: 0x08da, 0xd3f: 0x08e2, // Block 0x35, offset 0xd40 - 0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a, - 0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, + 0xd40: 0x08ea, 0xd41: 0x08f2, 0xd42: 0x08fa, 0xd43: 0x0902, 0xd44: 0x090a, 0xd45: 0x0912, + 0xd46: 0x091a, 0xd47: 0x0922, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b3e, 0xd5d: 0x0b5e, @@ -1203,17 +1346,17 @@ var idnaValues = [8192]uint16{ 0xd64: 0x0c3e, 0xd65: 0x0c5e, 0xd66: 0x0c7e, 0xd67: 0x0c9e, 0xd68: 0x0cbe, 0xd69: 0x0cde, 0xd6a: 0x0cfe, 0xd6b: 0x0d1e, 0xd6c: 0x0d3e, 0xd6d: 0x0d5e, 0xd6e: 0x0d7e, 0xd6f: 0x0d9e, 0xd70: 0x0dbe, 0xd71: 0x0dde, 0xd72: 0x0dfe, 0xd73: 0x0e1e, 0xd74: 0x0e3e, 0xd75: 0x0e5e, - 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199, - 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259, + 0xd76: 0x0019, 0xd77: 0x02e9, 0xd78: 0x03d9, 0xd79: 0x02f1, 0xd7a: 0x02f9, 0xd7b: 0x03f1, + 0xd7c: 0x0309, 0xd7d: 0x00a9, 0xd7e: 0x0311, 0xd7f: 0x00b1, // Block 0x36, offset 0xd80 - 0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99, - 0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089, - 0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9, - 0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249, - 0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71, - 0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9, - 0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1, - 0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, + 0xd80: 0x0319, 0xd81: 0x0101, 0xd82: 0x0321, 0xd83: 0x0329, 0xd84: 0x0051, 0xd85: 0x0339, + 0xd86: 0x0751, 0xd87: 0x00b9, 0xd88: 0x0089, 0xd89: 0x0341, 0xd8a: 0x0349, 0xd8b: 0x0391, + 0xd8c: 0x00c1, 0xd8d: 0x0109, 0xd8e: 0x00c9, 0xd8f: 0x04b1, 0xd90: 0x0019, 0xd91: 0x02e9, + 0xd92: 0x03d9, 0xd93: 0x02f1, 0xd94: 0x02f9, 0xd95: 0x03f1, 0xd96: 0x0309, 0xd97: 0x00a9, + 0xd98: 0x0311, 0xd99: 0x00b1, 0xd9a: 0x0319, 0xd9b: 0x0101, 0xd9c: 0x0321, 0xd9d: 0x0329, + 0xd9e: 0x0051, 0xd9f: 0x0339, 0xda0: 0x0751, 0xda1: 0x00b9, 0xda2: 0x0089, 0xda3: 0x0341, + 0xda4: 0x0349, 0xda5: 0x0391, 0xda6: 0x00c1, 0xda7: 0x0109, 0xda8: 0x00c9, 0xda9: 0x04b1, + 0xdaa: 0x06e1, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, 0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018, 0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, @@ -1223,12 +1366,12 @@ var idnaValues = [8192]uint16{ 0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008, 0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008, 0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008, - 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ed5, - 0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, - 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9, - 0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, + 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x0941, 0xde3: 0x0ed5, + 0xde4: 0x0949, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, + 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0359, 0xdee: 0x0441, 0xdef: 0x0351, + 0xdf0: 0x03d1, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, - 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, + 0xdfc: 0x00b1, 0xdfd: 0x0391, 0xdfe: 0x0951, 0xdff: 0x0959, // Block 0x38, offset 0xe00 0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008, 0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008, @@ -1254,7 +1397,7 @@ var idnaValues = [8192]uint16{ 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040, 0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040, // Block 0x3a, offset 0xe80 - 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, + 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x0961, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, 0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018, 0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018, 0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018, @@ -1290,17 +1433,17 @@ var idnaValues = [8192]uint16{ 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0008, 0xf3c: 0x0008, 0xf3d: 0x0008, 0xf3e: 0x0008, 0xf3f: 0x0008, // Block 0x3d, offset 0xf40 - 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32d5, 0xf45: 0x32f5, + 0xf40: 0x0b82, 0xf41: 0x0b8a, 0xf42: 0x0b92, 0xf43: 0x0b9a, 0xf44: 0x32d5, 0xf45: 0x32f5, 0xf46: 0x3315, 0xf47: 0x3335, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018, - 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x3355, 0xf51: 0x3761, - 0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1, - 0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881, - 0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x3375, 0xf61: 0x3395, 0xf62: 0x33b5, 0xf63: 0x33d5, + 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x3355, 0xf51: 0x0ba1, + 0xf52: 0x0ba9, 0xf53: 0x0bb1, 0xf54: 0x0bb9, 0xf55: 0x0bc1, 0xf56: 0x0bc9, 0xf57: 0x0bd1, + 0xf58: 0x0bd9, 0xf59: 0x0be1, 0xf5a: 0x0be9, 0xf5b: 0x0bf1, 0xf5c: 0x0bf9, 0xf5d: 0x0c01, + 0xf5e: 0x0c09, 0xf5f: 0x0c11, 0xf60: 0x3375, 0xf61: 0x3395, 0xf62: 0x33b5, 0xf63: 0x33d5, 0xf64: 0x33f5, 0xf65: 0x33f5, 0xf66: 0x3415, 0xf67: 0x3435, 0xf68: 0x3455, 0xf69: 0x3475, 0xf6a: 0x3495, 0xf6b: 0x34b5, 0xf6c: 0x34d5, 0xf6d: 0x34f5, 0xf6e: 0x3515, 0xf6f: 0x3535, 0xf70: 0x3555, 0xf71: 0x3575, 0xf72: 0x3595, 0xf73: 0x35b5, 0xf74: 0x35d5, 0xf75: 0x35f5, 0xf76: 0x3615, 0xf77: 0x3635, 0xf78: 0x3655, 0xf79: 0x3675, 0xf7a: 0x3695, 0xf7b: 0x36b5, - 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36d5, 0xf7f: 0x0018, + 0xf7c: 0x0c19, 0xf7d: 0x0c21, 0xf7e: 0x36d5, 0xf7f: 0x0018, // Block 0x3e, offset 0xf80 0xf80: 0x36f5, 0xf81: 0x3715, 0xf82: 0x3735, 0xf83: 0x3755, 0xf84: 0x3775, 0xf85: 0x3795, 0xf86: 0x37b5, 0xf87: 0x37d5, 0xf88: 0x37f5, 0xf89: 0x3815, 0xf8a: 0x3835, 0xf8b: 0x3855, @@ -1310,13 +1453,13 @@ var idnaValues = [8192]uint16{ 0xf9e: 0x3ab5, 0xf9f: 0x3ad5, 0xfa0: 0x3af5, 0xfa1: 0x3b15, 0xfa2: 0x3b35, 0xfa3: 0x3b55, 0xfa4: 0x3b75, 0xfa5: 0x3b95, 0xfa6: 0x1295, 0xfa7: 0x3bb5, 0xfa8: 0x3bd5, 0xfa9: 0x3bf5, 0xfaa: 0x3c15, 0xfab: 0x3c35, 0xfac: 0x3c55, 0xfad: 0x3c75, 0xfae: 0x23b5, 0xfaf: 0x3c95, - 0xfb0: 0x3cb5, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999, - 0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29, - 0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89, + 0xfb0: 0x3cb5, 0xfb1: 0x0c29, 0xfb2: 0x0c31, 0xfb3: 0x0c39, 0xfb4: 0x0c41, 0xfb5: 0x0c49, + 0xfb6: 0x0c51, 0xfb7: 0x0c59, 0xfb8: 0x0c61, 0xfb9: 0x0c69, 0xfba: 0x0c71, 0xfbb: 0x0c79, + 0xfbc: 0x0c81, 0xfbd: 0x0c89, 0xfbe: 0x0c91, 0xfbf: 0x0c99, // Block 0x3f, offset 0xfc0 - 0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69, - 0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69, - 0xfcc: 0x3c99, 0xfcd: 0x3cd5, 0xfce: 0x3cb1, 0xfcf: 0x3cf5, 0xfd0: 0x3d15, 0xfd1: 0x3d2d, + 0xfc0: 0x0ca1, 0xfc1: 0x0ca9, 0xfc2: 0x0cb1, 0xfc3: 0x0cb9, 0xfc4: 0x0cc1, 0xfc5: 0x0cc9, + 0xfc6: 0x0cd1, 0xfc7: 0x0cd9, 0xfc8: 0x0ce1, 0xfc9: 0x0ce9, 0xfca: 0x0cf1, 0xfcb: 0x0cf9, + 0xfcc: 0x0d01, 0xfcd: 0x3cd5, 0xfce: 0x0d09, 0xfcf: 0x3cf5, 0xfd0: 0x3d15, 0xfd1: 0x3d2d, 0xfd2: 0x3d45, 0xfd3: 0x3d5d, 0xfd4: 0x3d75, 0xfd5: 0x3d75, 0xfd6: 0x3d5d, 0xfd7: 0x3d8d, 0xfd8: 0x07d5, 0xfd9: 0x3da5, 0xfda: 0x3dbd, 0xfdb: 0x3dd5, 0xfdc: 0x3ded, 0xfdd: 0x3e05, 0xfde: 0x3e1d, 0xfdf: 0x3e35, 0xfe0: 0x3e4d, 0xfe1: 0x3e65, 0xfe2: 0x3e7d, 0xfe3: 0x3e95, @@ -1324,769 +1467,769 @@ var idnaValues = [8192]uint16{ 0xfea: 0x3ef5, 0xfeb: 0x3f0d, 0xfec: 0x3f25, 0xfed: 0x3f3d, 0xfee: 0x3f55, 0xfef: 0x3f55, 0xff0: 0x3f6d, 0xff1: 0x3f6d, 0xff2: 0x3f6d, 0xff3: 0x3f85, 0xff4: 0x3f9d, 0xff5: 0x3fb5, 0xff6: 0x3fcd, 0xff7: 0x3fb5, 0xff8: 0x3fe5, 0xff9: 0x3ffd, 0xffa: 0x3f85, 0xffb: 0x4015, - 0xffc: 0x402d, 0xffd: 0x402d, 0xffe: 0x402d, 0xfff: 0x3cc9, + 0xffc: 0x402d, 0xffd: 0x402d, 0xffe: 0x402d, 0xfff: 0x0d11, // Block 0x40, offset 0x1000 - 0x1000: 0x3d01, 0x1001: 0x3d69, 0x1002: 0x3dd1, 0x1003: 0x3e39, 0x1004: 0x3e89, 0x1005: 0x3ef1, - 0x1006: 0x3f41, 0x1007: 0x3f91, 0x1008: 0x4011, 0x1009: 0x4079, 0x100a: 0x40c9, 0x100b: 0x4119, - 0x100c: 0x4169, 0x100d: 0x41d1, 0x100e: 0x4239, 0x100f: 0x4289, 0x1010: 0x42d9, 0x1011: 0x4311, - 0x1012: 0x4361, 0x1013: 0x43c9, 0x1014: 0x4431, 0x1015: 0x4469, 0x1016: 0x44e9, 0x1017: 0x4581, - 0x1018: 0x4601, 0x1019: 0x4651, 0x101a: 0x46d1, 0x101b: 0x4751, 0x101c: 0x47b9, 0x101d: 0x4809, - 0x101e: 0x4859, 0x101f: 0x48a9, 0x1020: 0x4911, 0x1021: 0x4991, 0x1022: 0x49f9, 0x1023: 0x4a49, - 0x1024: 0x4a99, 0x1025: 0x4ae9, 0x1026: 0x4b21, 0x1027: 0x4b59, 0x1028: 0x4b91, 0x1029: 0x4bc9, - 0x102a: 0x4c19, 0x102b: 0x4c69, 0x102c: 0x4ce9, 0x102d: 0x4d39, 0x102e: 0x4da1, 0x102f: 0x4e21, - 0x1030: 0x4e71, 0x1031: 0x4ea9, 0x1032: 0x4ee1, 0x1033: 0x4f61, 0x1034: 0x4fc9, 0x1035: 0x5049, - 0x1036: 0x5099, 0x1037: 0x5119, 0x1038: 0x5151, 0x1039: 0x51a1, 0x103a: 0x51f1, 0x103b: 0x5241, - 0x103c: 0x5291, 0x103d: 0x52e1, 0x103e: 0x5349, 0x103f: 0x5399, + 0x1000: 0x10f9, 0x1001: 0x1101, 0x1002: 0x40a5, 0x1003: 0x1109, 0x1004: 0x1111, 0x1005: 0x1119, + 0x1006: 0x1121, 0x1007: 0x1129, 0x1008: 0x40c5, 0x1009: 0x1131, 0x100a: 0x1139, 0x100b: 0x1141, + 0x100c: 0x40e5, 0x100d: 0x40e5, 0x100e: 0x1149, 0x100f: 0x1151, 0x1010: 0x1159, 0x1011: 0x4105, + 0x1012: 0x4125, 0x1013: 0x4145, 0x1014: 0x4165, 0x1015: 0x4185, 0x1016: 0x1161, 0x1017: 0x1169, + 0x1018: 0x1171, 0x1019: 0x1179, 0x101a: 0x1181, 0x101b: 0x41a5, 0x101c: 0x1189, 0x101d: 0x1191, + 0x101e: 0x1199, 0x101f: 0x41c5, 0x1020: 0x41e5, 0x1021: 0x11a1, 0x1022: 0x4205, 0x1023: 0x4225, + 0x1024: 0x4245, 0x1025: 0x11a9, 0x1026: 0x4265, 0x1027: 0x11b1, 0x1028: 0x11b9, 0x1029: 0x10f9, + 0x102a: 0x4285, 0x102b: 0x42a5, 0x102c: 0x42c5, 0x102d: 0x42e5, 0x102e: 0x11c1, 0x102f: 0x11c9, + 0x1030: 0x11d1, 0x1031: 0x11d9, 0x1032: 0x4305, 0x1033: 0x11e1, 0x1034: 0x11e9, 0x1035: 0x11f1, + 0x1036: 0x4325, 0x1037: 0x11f9, 0x1038: 0x1201, 0x1039: 0x11f9, 0x103a: 0x1209, 0x103b: 0x1211, + 0x103c: 0x4345, 0x103d: 0x1219, 0x103e: 0x1221, 0x103f: 0x1219, // Block 0x41, offset 0x1040 - 0x1040: 0x53d1, 0x1041: 0x5421, 0x1042: 0x5471, 0x1043: 0x54c1, 0x1044: 0x5529, 0x1045: 0x5579, - 0x1046: 0x55c9, 0x1047: 0x5619, 0x1048: 0x5699, 0x1049: 0x5701, 0x104a: 0x5739, 0x104b: 0x57b9, - 0x104c: 0x57f1, 0x104d: 0x5859, 0x104e: 0x58c1, 0x104f: 0x5911, 0x1050: 0x5961, 0x1051: 0x59b1, - 0x1052: 0x5a19, 0x1053: 0x5a51, 0x1054: 0x5aa1, 0x1055: 0x5b09, 0x1056: 0x5b41, 0x1057: 0x5bc1, - 0x1058: 0x5c11, 0x1059: 0x5c39, 0x105a: 0x5c61, 0x105b: 0x5c89, 0x105c: 0x5cb1, 0x105d: 0x5cd9, - 0x105e: 0x5d01, 0x105f: 0x5d29, 0x1060: 0x5d51, 0x1061: 0x5d79, 0x1062: 0x5da1, 0x1063: 0x5dd1, - 0x1064: 0x5e01, 0x1065: 0x5e31, 0x1066: 0x5e61, 0x1067: 0x5e91, 0x1068: 0x5ec1, 0x1069: 0x5ef1, - 0x106a: 0x5f21, 0x106b: 0x5f51, 0x106c: 0x5f81, 0x106d: 0x5fb1, 0x106e: 0x5fe1, 0x106f: 0x6011, - 0x1070: 0x6041, 0x1071: 0x4045, 0x1072: 0x6071, 0x1073: 0x6089, 0x1074: 0x4065, 0x1075: 0x60a1, - 0x1076: 0x60b9, 0x1077: 0x60d1, 0x1078: 0x4085, 0x1079: 0x4085, 0x107a: 0x60e9, 0x107b: 0x6101, - 0x107c: 0x6139, 0x107d: 0x6171, 0x107e: 0x61a9, 0x107f: 0x61e1, + 0x1040: 0x4365, 0x1041: 0x4385, 0x1042: 0x0040, 0x1043: 0x1229, 0x1044: 0x1231, 0x1045: 0x1239, + 0x1046: 0x1241, 0x1047: 0x0040, 0x1048: 0x1249, 0x1049: 0x1251, 0x104a: 0x1259, 0x104b: 0x1261, + 0x104c: 0x1269, 0x104d: 0x1271, 0x104e: 0x1199, 0x104f: 0x1279, 0x1050: 0x1281, 0x1051: 0x1289, + 0x1052: 0x43a5, 0x1053: 0x1291, 0x1054: 0x1121, 0x1055: 0x43c5, 0x1056: 0x43e5, 0x1057: 0x1299, + 0x1058: 0x0040, 0x1059: 0x4405, 0x105a: 0x12a1, 0x105b: 0x12a9, 0x105c: 0x12b1, 0x105d: 0x12b9, + 0x105e: 0x12c1, 0x105f: 0x12c9, 0x1060: 0x12d1, 0x1061: 0x12d9, 0x1062: 0x12e1, 0x1063: 0x12e9, + 0x1064: 0x12f1, 0x1065: 0x12f9, 0x1066: 0x1301, 0x1067: 0x1309, 0x1068: 0x1311, 0x1069: 0x1319, + 0x106a: 0x1321, 0x106b: 0x1329, 0x106c: 0x1331, 0x106d: 0x1339, 0x106e: 0x1341, 0x106f: 0x1349, + 0x1070: 0x1351, 0x1071: 0x1359, 0x1072: 0x1361, 0x1073: 0x1369, 0x1074: 0x1371, 0x1075: 0x1379, + 0x1076: 0x1381, 0x1077: 0x1389, 0x1078: 0x1391, 0x1079: 0x1399, 0x107a: 0x13a1, 0x107b: 0x13a9, + 0x107c: 0x13b1, 0x107d: 0x13b9, 0x107e: 0x13c1, 0x107f: 0x4425, // Block 0x42, offset 0x1080 - 0x1080: 0x6249, 0x1081: 0x6261, 0x1082: 0x40a5, 0x1083: 0x6279, 0x1084: 0x6291, 0x1085: 0x62a9, - 0x1086: 0x62c1, 0x1087: 0x62d9, 0x1088: 0x40c5, 0x1089: 0x62f1, 0x108a: 0x6319, 0x108b: 0x6331, - 0x108c: 0x40e5, 0x108d: 0x40e5, 0x108e: 0x6349, 0x108f: 0x6361, 0x1090: 0x6379, 0x1091: 0x4105, - 0x1092: 0x4125, 0x1093: 0x4145, 0x1094: 0x4165, 0x1095: 0x4185, 0x1096: 0x6391, 0x1097: 0x63a9, - 0x1098: 0x63c1, 0x1099: 0x63d9, 0x109a: 0x63f1, 0x109b: 0x41a5, 0x109c: 0x6409, 0x109d: 0x6421, - 0x109e: 0x6439, 0x109f: 0x41c5, 0x10a0: 0x41e5, 0x10a1: 0x6451, 0x10a2: 0x4205, 0x10a3: 0x4225, - 0x10a4: 0x4245, 0x10a5: 0x6469, 0x10a6: 0x4265, 0x10a7: 0x6481, 0x10a8: 0x64b1, 0x10a9: 0x6249, - 0x10aa: 0x4285, 0x10ab: 0x42a5, 0x10ac: 0x42c5, 0x10ad: 0x42e5, 0x10ae: 0x64e9, 0x10af: 0x6529, - 0x10b0: 0x6571, 0x10b1: 0x6589, 0x10b2: 0x4305, 0x10b3: 0x65a1, 0x10b4: 0x65b9, 0x10b5: 0x65d1, - 0x10b6: 0x4325, 0x10b7: 0x65e9, 0x10b8: 0x6601, 0x10b9: 0x65e9, 0x10ba: 0x6619, 0x10bb: 0x6631, - 0x10bc: 0x4345, 0x10bd: 0x6649, 0x10be: 0x6661, 0x10bf: 0x6649, + 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008, + 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008, + 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008, + 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008, + 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008, + 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008, + 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008, + 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x3308, + 0x10b0: 0x3318, 0x10b1: 0x3318, 0x10b2: 0x3318, 0x10b3: 0x0018, 0x10b4: 0x3308, 0x10b5: 0x3308, + 0x10b6: 0x3308, 0x10b7: 0x3308, 0x10b8: 0x3308, 0x10b9: 0x3308, 0x10ba: 0x3308, 0x10bb: 0x3308, + 0x10bc: 0x3308, 0x10bd: 0x3308, 0x10be: 0x0018, 0x10bf: 0x0008, // Block 0x43, offset 0x10c0 - 0x10c0: 0x4365, 0x10c1: 0x4385, 0x10c2: 0x0040, 0x10c3: 0x6679, 0x10c4: 0x6691, 0x10c5: 0x66a9, - 0x10c6: 0x66c1, 0x10c7: 0x0040, 0x10c8: 0x66f9, 0x10c9: 0x6711, 0x10ca: 0x6729, 0x10cb: 0x6741, - 0x10cc: 0x6759, 0x10cd: 0x6771, 0x10ce: 0x6439, 0x10cf: 0x6789, 0x10d0: 0x67a1, 0x10d1: 0x67b9, - 0x10d2: 0x43a5, 0x10d3: 0x67d1, 0x10d4: 0x62c1, 0x10d5: 0x43c5, 0x10d6: 0x43e5, 0x10d7: 0x67e9, - 0x10d8: 0x0040, 0x10d9: 0x4405, 0x10da: 0x6801, 0x10db: 0x6819, 0x10dc: 0x6831, 0x10dd: 0x6849, - 0x10de: 0x6861, 0x10df: 0x6891, 0x10e0: 0x68c1, 0x10e1: 0x68e9, 0x10e2: 0x6911, 0x10e3: 0x6939, - 0x10e4: 0x6961, 0x10e5: 0x6989, 0x10e6: 0x69b1, 0x10e7: 0x69d9, 0x10e8: 0x6a01, 0x10e9: 0x6a29, - 0x10ea: 0x6a59, 0x10eb: 0x6a89, 0x10ec: 0x6ab9, 0x10ed: 0x6ae9, 0x10ee: 0x6b19, 0x10ef: 0x6b49, - 0x10f0: 0x6b79, 0x10f1: 0x6ba9, 0x10f2: 0x6bd9, 0x10f3: 0x6c09, 0x10f4: 0x6c39, 0x10f5: 0x6c69, - 0x10f6: 0x6c99, 0x10f7: 0x6cc9, 0x10f8: 0x6cf9, 0x10f9: 0x6d29, 0x10fa: 0x6d59, 0x10fb: 0x6d89, - 0x10fc: 0x6db9, 0x10fd: 0x6de9, 0x10fe: 0x6e19, 0x10ff: 0x4425, + 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, + 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, + 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, + 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, + 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x02d1, 0x10dd: 0x13c9, + 0x10de: 0x3308, 0x10df: 0x3308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008, + 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008, + 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008, + 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008, + 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008, + 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008, // Block 0x44, offset 0x1100 - 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, - 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, - 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, - 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, - 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008, - 0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008, + 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018, + 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018, + 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018, + 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008, + 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008, + 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008, 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, - 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308, - 0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308, - 0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308, - 0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008, + 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008, + 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008, + 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008, + 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008, // Block 0x45, offset 0x1140 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, - 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e49, - 0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008, - 0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008, - 0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008, - 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, - 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008, - 0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008, + 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008, + 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008, + 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, + 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, + 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, + 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d, + 0x117c: 0x0008, 0x117d: 0x4445, 0x117e: 0xe00d, 0x117f: 0x0008, // Block 0x46, offset 0x1180 - 0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018, - 0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018, - 0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018, - 0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008, - 0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008, - 0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, + 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d, + 0x118c: 0x0008, 0x118d: 0x0409, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, + 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, + 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, + 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, - 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, - 0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008, + 0x11aa: 0x13d1, 0x11ab: 0x0371, 0x11ac: 0x0401, 0x11ad: 0x13d9, 0x11ae: 0x0421, 0x11af: 0x0008, + 0x11b0: 0x13e1, 0x11b1: 0x13e9, 0x11b2: 0x0429, 0x11b3: 0x4465, 0x11b4: 0xe00d, 0x11b5: 0x0008, 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008, 0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008, // Block 0x47, offset 0x11c0 - 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, - 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008, - 0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, - 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, - 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, - 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, - 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, - 0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008, - 0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008, - 0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d, - 0x11fc: 0x0008, 0x11fd: 0x4445, 0x11fe: 0xe00d, 0x11ff: 0x0008, + 0x11c0: 0x650d, 0x11c1: 0x652d, 0x11c2: 0x654d, 0x11c3: 0x656d, 0x11c4: 0x658d, 0x11c5: 0x65ad, + 0x11c6: 0x65cd, 0x11c7: 0x65ed, 0x11c8: 0x660d, 0x11c9: 0x662d, 0x11ca: 0x664d, 0x11cb: 0x666d, + 0x11cc: 0x668d, 0x11cd: 0x66ad, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x66cd, 0x11d1: 0x0008, + 0x11d2: 0x66ed, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x670d, 0x11d6: 0x672d, 0x11d7: 0x674d, + 0x11d8: 0x676d, 0x11d9: 0x678d, 0x11da: 0x67ad, 0x11db: 0x67cd, 0x11dc: 0x67ed, 0x11dd: 0x680d, + 0x11de: 0x682d, 0x11df: 0x0008, 0x11e0: 0x684d, 0x11e1: 0x0008, 0x11e2: 0x686d, 0x11e3: 0x0008, + 0x11e4: 0x0008, 0x11e5: 0x688d, 0x11e6: 0x68ad, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008, + 0x11ea: 0x68cd, 0x11eb: 0x68ed, 0x11ec: 0x690d, 0x11ed: 0x692d, 0x11ee: 0x694d, 0x11ef: 0x696d, + 0x11f0: 0x698d, 0x11f1: 0x69ad, 0x11f2: 0x69cd, 0x11f3: 0x69ed, 0x11f4: 0x6a0d, 0x11f5: 0x6a2d, + 0x11f6: 0x6a4d, 0x11f7: 0x6a6d, 0x11f8: 0x6a8d, 0x11f9: 0x6aad, 0x11fa: 0x6acd, 0x11fb: 0x6aed, + 0x11fc: 0x6b0d, 0x11fd: 0x6b2d, 0x11fe: 0x6b4d, 0x11ff: 0x6b6d, // Block 0x48, offset 0x1200 - 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008, - 0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d, - 0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008, - 0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, - 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008, - 0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008, - 0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008, - 0x122a: 0x6e61, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e79, 0x122e: 0x1221, 0x122f: 0x0008, - 0x1230: 0x6e91, 0x1231: 0x6ea9, 0x1232: 0x1239, 0x1233: 0x4465, 0x1234: 0xe00d, 0x1235: 0x0008, - 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0xe00d, 0x1239: 0x0008, 0x123a: 0xe00d, 0x123b: 0x0008, - 0x123c: 0xe00d, 0x123d: 0x0008, 0x123e: 0xe00d, 0x123f: 0x0008, + 0x1200: 0x7acd, 0x1201: 0x7aed, 0x1202: 0x7b0d, 0x1203: 0x7b2d, 0x1204: 0x7b4d, 0x1205: 0x7b6d, + 0x1206: 0x7b8d, 0x1207: 0x7bad, 0x1208: 0x7bcd, 0x1209: 0x7bed, 0x120a: 0x7c0d, 0x120b: 0x7c2d, + 0x120c: 0x7c4d, 0x120d: 0x7c6d, 0x120e: 0x7c8d, 0x120f: 0x1409, 0x1210: 0x1411, 0x1211: 0x1419, + 0x1212: 0x7cad, 0x1213: 0x7ccd, 0x1214: 0x7ced, 0x1215: 0x1421, 0x1216: 0x1429, 0x1217: 0x1431, + 0x1218: 0x7d0d, 0x1219: 0x7d2d, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, + 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, + 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, + 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, + 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040, + 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, + 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, // Block 0x49, offset 0x1240 - 0x1240: 0x650d, 0x1241: 0x652d, 0x1242: 0x654d, 0x1243: 0x656d, 0x1244: 0x658d, 0x1245: 0x65ad, - 0x1246: 0x65cd, 0x1247: 0x65ed, 0x1248: 0x660d, 0x1249: 0x662d, 0x124a: 0x664d, 0x124b: 0x666d, - 0x124c: 0x668d, 0x124d: 0x66ad, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x66cd, 0x1251: 0x0008, - 0x1252: 0x66ed, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x670d, 0x1256: 0x672d, 0x1257: 0x674d, - 0x1258: 0x676d, 0x1259: 0x678d, 0x125a: 0x67ad, 0x125b: 0x67cd, 0x125c: 0x67ed, 0x125d: 0x680d, - 0x125e: 0x682d, 0x125f: 0x0008, 0x1260: 0x684d, 0x1261: 0x0008, 0x1262: 0x686d, 0x1263: 0x0008, - 0x1264: 0x0008, 0x1265: 0x688d, 0x1266: 0x68ad, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, - 0x126a: 0x68cd, 0x126b: 0x68ed, 0x126c: 0x690d, 0x126d: 0x692d, 0x126e: 0x694d, 0x126f: 0x696d, - 0x1270: 0x698d, 0x1271: 0x69ad, 0x1272: 0x69cd, 0x1273: 0x69ed, 0x1274: 0x6a0d, 0x1275: 0x6a2d, - 0x1276: 0x6a4d, 0x1277: 0x6a6d, 0x1278: 0x6a8d, 0x1279: 0x6aad, 0x127a: 0x6acd, 0x127b: 0x6aed, - 0x127c: 0x6b0d, 0x127d: 0x6b2d, 0x127e: 0x6b4d, 0x127f: 0x6b6d, + 0x1240: 0x1439, 0x1241: 0x1441, 0x1242: 0x1449, 0x1243: 0x7d4d, 0x1244: 0x7d6d, 0x1245: 0x1451, + 0x1246: 0x1451, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040, + 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040, + 0x1252: 0x0040, 0x1253: 0x1459, 0x1254: 0x1461, 0x1255: 0x1469, 0x1256: 0x1471, 0x1257: 0x1479, + 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x1481, + 0x125e: 0x3308, 0x125f: 0x1489, 0x1260: 0x1491, 0x1261: 0x0779, 0x1262: 0x0791, 0x1263: 0x1499, + 0x1264: 0x14a1, 0x1265: 0x14a9, 0x1266: 0x14b1, 0x1267: 0x14b9, 0x1268: 0x14c1, 0x1269: 0x071a, + 0x126a: 0x14c9, 0x126b: 0x14d1, 0x126c: 0x14d9, 0x126d: 0x14e1, 0x126e: 0x14e9, 0x126f: 0x14f1, + 0x1270: 0x14f9, 0x1271: 0x1501, 0x1272: 0x1509, 0x1273: 0x1511, 0x1274: 0x1519, 0x1275: 0x1521, + 0x1276: 0x1529, 0x1277: 0x0040, 0x1278: 0x1531, 0x1279: 0x1539, 0x127a: 0x1541, 0x127b: 0x1549, + 0x127c: 0x1551, 0x127d: 0x0040, 0x127e: 0x1559, 0x127f: 0x0040, // Block 0x4a, offset 0x1280 - 0x1280: 0x7acd, 0x1281: 0x7aed, 0x1282: 0x7b0d, 0x1283: 0x7b2d, 0x1284: 0x7b4d, 0x1285: 0x7b6d, - 0x1286: 0x7b8d, 0x1287: 0x7bad, 0x1288: 0x7bcd, 0x1289: 0x7bed, 0x128a: 0x7c0d, 0x128b: 0x7c2d, - 0x128c: 0x7c4d, 0x128d: 0x7c6d, 0x128e: 0x7c8d, 0x128f: 0x6f19, 0x1290: 0x6f41, 0x1291: 0x6f69, - 0x1292: 0x7cad, 0x1293: 0x7ccd, 0x1294: 0x7ced, 0x1295: 0x6f91, 0x1296: 0x6fb9, 0x1297: 0x6fe1, - 0x1298: 0x7d0d, 0x1299: 0x7d2d, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, - 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, - 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, - 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, - 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, - 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, - 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, + 0x1280: 0x1561, 0x1281: 0x1569, 0x1282: 0x0040, 0x1283: 0x1571, 0x1284: 0x1579, 0x1285: 0x0040, + 0x1286: 0x1581, 0x1287: 0x1589, 0x1288: 0x1591, 0x1289: 0x1599, 0x128a: 0x15a1, 0x128b: 0x15a9, + 0x128c: 0x15b1, 0x128d: 0x15b9, 0x128e: 0x15c1, 0x128f: 0x15c9, 0x1290: 0x15d1, 0x1291: 0x15d1, + 0x1292: 0x15d9, 0x1293: 0x15d9, 0x1294: 0x15d9, 0x1295: 0x15d9, 0x1296: 0x15e1, 0x1297: 0x15e1, + 0x1298: 0x15e1, 0x1299: 0x15e1, 0x129a: 0x15e9, 0x129b: 0x15e9, 0x129c: 0x15e9, 0x129d: 0x15e9, + 0x129e: 0x15f1, 0x129f: 0x15f1, 0x12a0: 0x15f1, 0x12a1: 0x15f1, 0x12a2: 0x15f9, 0x12a3: 0x15f9, + 0x12a4: 0x15f9, 0x12a5: 0x15f9, 0x12a6: 0x1601, 0x12a7: 0x1601, 0x12a8: 0x1601, 0x12a9: 0x1601, + 0x12aa: 0x1609, 0x12ab: 0x1609, 0x12ac: 0x1609, 0x12ad: 0x1609, 0x12ae: 0x1611, 0x12af: 0x1611, + 0x12b0: 0x1611, 0x12b1: 0x1611, 0x12b2: 0x1619, 0x12b3: 0x1619, 0x12b4: 0x1619, 0x12b5: 0x1619, + 0x12b6: 0x1621, 0x12b7: 0x1621, 0x12b8: 0x1621, 0x12b9: 0x1621, 0x12ba: 0x1629, 0x12bb: 0x1629, + 0x12bc: 0x1629, 0x12bd: 0x1629, 0x12be: 0x1631, 0x12bf: 0x1631, // Block 0x4b, offset 0x12c0 - 0x12c0: 0x7009, 0x12c1: 0x7021, 0x12c2: 0x7039, 0x12c3: 0x7d4d, 0x12c4: 0x7d6d, 0x12c5: 0x7051, - 0x12c6: 0x7051, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, - 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, - 0x12d2: 0x0040, 0x12d3: 0x7069, 0x12d4: 0x7091, 0x12d5: 0x70b9, 0x12d6: 0x70e1, 0x12d7: 0x7109, - 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x7131, - 0x12de: 0x3308, 0x12df: 0x7159, 0x12e0: 0x7181, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7199, - 0x12e4: 0x71b1, 0x12e5: 0x71c9, 0x12e6: 0x71e1, 0x12e7: 0x71f9, 0x12e8: 0x7211, 0x12e9: 0x1fb2, - 0x12ea: 0x7229, 0x12eb: 0x7251, 0x12ec: 0x7279, 0x12ed: 0x72b1, 0x12ee: 0x72e9, 0x12ef: 0x7311, - 0x12f0: 0x7339, 0x12f1: 0x7361, 0x12f2: 0x7389, 0x12f3: 0x73b1, 0x12f4: 0x73d9, 0x12f5: 0x7401, - 0x12f6: 0x7429, 0x12f7: 0x0040, 0x12f8: 0x7451, 0x12f9: 0x7479, 0x12fa: 0x74a1, 0x12fb: 0x74c9, - 0x12fc: 0x74f1, 0x12fd: 0x0040, 0x12fe: 0x7519, 0x12ff: 0x0040, + 0x12c0: 0x1631, 0x12c1: 0x1631, 0x12c2: 0x1639, 0x12c3: 0x1639, 0x12c4: 0x1641, 0x12c5: 0x1641, + 0x12c6: 0x1649, 0x12c7: 0x1649, 0x12c8: 0x1651, 0x12c9: 0x1651, 0x12ca: 0x1659, 0x12cb: 0x1659, + 0x12cc: 0x1661, 0x12cd: 0x1661, 0x12ce: 0x1669, 0x12cf: 0x1669, 0x12d0: 0x1669, 0x12d1: 0x1669, + 0x12d2: 0x1671, 0x12d3: 0x1671, 0x12d4: 0x1671, 0x12d5: 0x1671, 0x12d6: 0x1679, 0x12d7: 0x1679, + 0x12d8: 0x1679, 0x12d9: 0x1679, 0x12da: 0x1681, 0x12db: 0x1681, 0x12dc: 0x1681, 0x12dd: 0x1681, + 0x12de: 0x1689, 0x12df: 0x1689, 0x12e0: 0x1691, 0x12e1: 0x1691, 0x12e2: 0x1691, 0x12e3: 0x1691, + 0x12e4: 0x1699, 0x12e5: 0x1699, 0x12e6: 0x16a1, 0x12e7: 0x16a1, 0x12e8: 0x16a1, 0x12e9: 0x16a1, + 0x12ea: 0x16a9, 0x12eb: 0x16a9, 0x12ec: 0x16a9, 0x12ed: 0x16a9, 0x12ee: 0x16b1, 0x12ef: 0x16b1, + 0x12f0: 0x16b9, 0x12f1: 0x16b9, 0x12f2: 0x0818, 0x12f3: 0x0818, 0x12f4: 0x0818, 0x12f5: 0x0818, + 0x12f6: 0x0818, 0x12f7: 0x0818, 0x12f8: 0x0818, 0x12f9: 0x0818, 0x12fa: 0x0818, 0x12fb: 0x0818, + 0x12fc: 0x0818, 0x12fd: 0x0818, 0x12fe: 0x0818, 0x12ff: 0x0818, // Block 0x4c, offset 0x1300 - 0x1300: 0x7541, 0x1301: 0x7569, 0x1302: 0x0040, 0x1303: 0x7591, 0x1304: 0x75b9, 0x1305: 0x0040, - 0x1306: 0x75e1, 0x1307: 0x7609, 0x1308: 0x7631, 0x1309: 0x7659, 0x130a: 0x7681, 0x130b: 0x76a9, - 0x130c: 0x76d1, 0x130d: 0x76f9, 0x130e: 0x7721, 0x130f: 0x7749, 0x1310: 0x7771, 0x1311: 0x7771, - 0x1312: 0x7789, 0x1313: 0x7789, 0x1314: 0x7789, 0x1315: 0x7789, 0x1316: 0x77a1, 0x1317: 0x77a1, - 0x1318: 0x77a1, 0x1319: 0x77a1, 0x131a: 0x77b9, 0x131b: 0x77b9, 0x131c: 0x77b9, 0x131d: 0x77b9, - 0x131e: 0x77d1, 0x131f: 0x77d1, 0x1320: 0x77d1, 0x1321: 0x77d1, 0x1322: 0x77e9, 0x1323: 0x77e9, - 0x1324: 0x77e9, 0x1325: 0x77e9, 0x1326: 0x7801, 0x1327: 0x7801, 0x1328: 0x7801, 0x1329: 0x7801, - 0x132a: 0x7819, 0x132b: 0x7819, 0x132c: 0x7819, 0x132d: 0x7819, 0x132e: 0x7831, 0x132f: 0x7831, - 0x1330: 0x7831, 0x1331: 0x7831, 0x1332: 0x7849, 0x1333: 0x7849, 0x1334: 0x7849, 0x1335: 0x7849, - 0x1336: 0x7861, 0x1337: 0x7861, 0x1338: 0x7861, 0x1339: 0x7861, 0x133a: 0x7879, 0x133b: 0x7879, - 0x133c: 0x7879, 0x133d: 0x7879, 0x133e: 0x7891, 0x133f: 0x7891, + 0x1300: 0x0818, 0x1301: 0x0818, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040, + 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040, + 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040, + 0x1312: 0x0040, 0x1313: 0x16c1, 0x1314: 0x16c1, 0x1315: 0x16c1, 0x1316: 0x16c1, 0x1317: 0x16c9, + 0x1318: 0x16c9, 0x1319: 0x16d1, 0x131a: 0x16d1, 0x131b: 0x16d9, 0x131c: 0x16d9, 0x131d: 0x0149, + 0x131e: 0x16e1, 0x131f: 0x16e1, 0x1320: 0x16e9, 0x1321: 0x16e9, 0x1322: 0x16f1, 0x1323: 0x16f1, + 0x1324: 0x16f9, 0x1325: 0x16f9, 0x1326: 0x16f9, 0x1327: 0x16f9, 0x1328: 0x1701, 0x1329: 0x1701, + 0x132a: 0x1709, 0x132b: 0x1709, 0x132c: 0x1711, 0x132d: 0x1711, 0x132e: 0x1719, 0x132f: 0x1719, + 0x1330: 0x1721, 0x1331: 0x1721, 0x1332: 0x1729, 0x1333: 0x1729, 0x1334: 0x1731, 0x1335: 0x1731, + 0x1336: 0x1739, 0x1337: 0x1739, 0x1338: 0x1739, 0x1339: 0x1741, 0x133a: 0x1741, 0x133b: 0x1741, + 0x133c: 0x1749, 0x133d: 0x1749, 0x133e: 0x1749, 0x133f: 0x1749, // Block 0x4d, offset 0x1340 - 0x1340: 0x7891, 0x1341: 0x7891, 0x1342: 0x78a9, 0x1343: 0x78a9, 0x1344: 0x78c1, 0x1345: 0x78c1, - 0x1346: 0x78d9, 0x1347: 0x78d9, 0x1348: 0x78f1, 0x1349: 0x78f1, 0x134a: 0x7909, 0x134b: 0x7909, - 0x134c: 0x7921, 0x134d: 0x7921, 0x134e: 0x7939, 0x134f: 0x7939, 0x1350: 0x7939, 0x1351: 0x7939, - 0x1352: 0x7951, 0x1353: 0x7951, 0x1354: 0x7951, 0x1355: 0x7951, 0x1356: 0x7969, 0x1357: 0x7969, - 0x1358: 0x7969, 0x1359: 0x7969, 0x135a: 0x7981, 0x135b: 0x7981, 0x135c: 0x7981, 0x135d: 0x7981, - 0x135e: 0x7999, 0x135f: 0x7999, 0x1360: 0x79b1, 0x1361: 0x79b1, 0x1362: 0x79b1, 0x1363: 0x79b1, - 0x1364: 0x79c9, 0x1365: 0x79c9, 0x1366: 0x79e1, 0x1367: 0x79e1, 0x1368: 0x79e1, 0x1369: 0x79e1, - 0x136a: 0x79f9, 0x136b: 0x79f9, 0x136c: 0x79f9, 0x136d: 0x79f9, 0x136e: 0x7a11, 0x136f: 0x7a11, - 0x1370: 0x7a29, 0x1371: 0x7a29, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, - 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, - 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, + 0x1340: 0x1949, 0x1341: 0x1951, 0x1342: 0x1959, 0x1343: 0x1961, 0x1344: 0x1969, 0x1345: 0x1971, + 0x1346: 0x1979, 0x1347: 0x1981, 0x1348: 0x1989, 0x1349: 0x1991, 0x134a: 0x1999, 0x134b: 0x19a1, + 0x134c: 0x19a9, 0x134d: 0x19b1, 0x134e: 0x19b9, 0x134f: 0x19c1, 0x1350: 0x19c9, 0x1351: 0x19d1, + 0x1352: 0x19d9, 0x1353: 0x19e1, 0x1354: 0x19e9, 0x1355: 0x19f1, 0x1356: 0x19f9, 0x1357: 0x1a01, + 0x1358: 0x1a09, 0x1359: 0x1a11, 0x135a: 0x1a19, 0x135b: 0x1a21, 0x135c: 0x1a29, 0x135d: 0x1a31, + 0x135e: 0x1a3a, 0x135f: 0x1a42, 0x1360: 0x1a4a, 0x1361: 0x1a52, 0x1362: 0x1a5a, 0x1363: 0x1a62, + 0x1364: 0x1a69, 0x1365: 0x1a71, 0x1366: 0x1761, 0x1367: 0x1a79, 0x1368: 0x1741, 0x1369: 0x1769, + 0x136a: 0x1a81, 0x136b: 0x1a89, 0x136c: 0x1789, 0x136d: 0x1a91, 0x136e: 0x1791, 0x136f: 0x1799, + 0x1370: 0x1a99, 0x1371: 0x1aa1, 0x1372: 0x17b9, 0x1373: 0x1aa9, 0x1374: 0x17c1, 0x1375: 0x17c9, + 0x1376: 0x1ab1, 0x1377: 0x1ab9, 0x1378: 0x17d9, 0x1379: 0x1ac1, 0x137a: 0x17e1, 0x137b: 0x17e9, + 0x137c: 0x18d1, 0x137d: 0x18d9, 0x137e: 0x18f1, 0x137f: 0x18f9, // Block 0x4e, offset 0x1380 - 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, - 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, - 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, - 0x1392: 0x0040, 0x1393: 0x7a41, 0x1394: 0x7a41, 0x1395: 0x7a41, 0x1396: 0x7a41, 0x1397: 0x7a59, - 0x1398: 0x7a59, 0x1399: 0x7a71, 0x139a: 0x7a71, 0x139b: 0x7a89, 0x139c: 0x7a89, 0x139d: 0x0479, - 0x139e: 0x7aa1, 0x139f: 0x7aa1, 0x13a0: 0x7ab9, 0x13a1: 0x7ab9, 0x13a2: 0x7ad1, 0x13a3: 0x7ad1, - 0x13a4: 0x7ae9, 0x13a5: 0x7ae9, 0x13a6: 0x7ae9, 0x13a7: 0x7ae9, 0x13a8: 0x7b01, 0x13a9: 0x7b01, - 0x13aa: 0x7b19, 0x13ab: 0x7b19, 0x13ac: 0x7b41, 0x13ad: 0x7b41, 0x13ae: 0x7b69, 0x13af: 0x7b69, - 0x13b0: 0x7b91, 0x13b1: 0x7b91, 0x13b2: 0x7bb9, 0x13b3: 0x7bb9, 0x13b4: 0x7be1, 0x13b5: 0x7be1, - 0x13b6: 0x7c09, 0x13b7: 0x7c09, 0x13b8: 0x7c09, 0x13b9: 0x7c31, 0x13ba: 0x7c31, 0x13bb: 0x7c31, - 0x13bc: 0x7c59, 0x13bd: 0x7c59, 0x13be: 0x7c59, 0x13bf: 0x7c59, + 0x1380: 0x1901, 0x1381: 0x1921, 0x1382: 0x1929, 0x1383: 0x1931, 0x1384: 0x1939, 0x1385: 0x1959, + 0x1386: 0x1961, 0x1387: 0x1969, 0x1388: 0x1ac9, 0x1389: 0x1989, 0x138a: 0x1ad1, 0x138b: 0x1ad9, + 0x138c: 0x19b9, 0x138d: 0x1ae1, 0x138e: 0x19c1, 0x138f: 0x19c9, 0x1390: 0x1a31, 0x1391: 0x1ae9, + 0x1392: 0x1af1, 0x1393: 0x1a09, 0x1394: 0x1af9, 0x1395: 0x1a11, 0x1396: 0x1a19, 0x1397: 0x1751, + 0x1398: 0x1759, 0x1399: 0x1b01, 0x139a: 0x1761, 0x139b: 0x1b09, 0x139c: 0x1771, 0x139d: 0x1779, + 0x139e: 0x1781, 0x139f: 0x1789, 0x13a0: 0x1b11, 0x13a1: 0x17a1, 0x13a2: 0x17a9, 0x13a3: 0x17b1, + 0x13a4: 0x17b9, 0x13a5: 0x1b19, 0x13a6: 0x17d9, 0x13a7: 0x17f1, 0x13a8: 0x17f9, 0x13a9: 0x1801, + 0x13aa: 0x1809, 0x13ab: 0x1811, 0x13ac: 0x1821, 0x13ad: 0x1829, 0x13ae: 0x1831, 0x13af: 0x1839, + 0x13b0: 0x1841, 0x13b1: 0x1849, 0x13b2: 0x1b21, 0x13b3: 0x1851, 0x13b4: 0x1859, 0x13b5: 0x1861, + 0x13b6: 0x1869, 0x13b7: 0x1871, 0x13b8: 0x1879, 0x13b9: 0x1889, 0x13ba: 0x1891, 0x13bb: 0x1899, + 0x13bc: 0x18a1, 0x13bd: 0x18a9, 0x13be: 0x18b1, 0x13bf: 0x18b9, // Block 0x4f, offset 0x13c0 - 0x13c0: 0x8649, 0x13c1: 0x8671, 0x13c2: 0x8699, 0x13c3: 0x86c1, 0x13c4: 0x86e9, 0x13c5: 0x8711, - 0x13c6: 0x8739, 0x13c7: 0x8761, 0x13c8: 0x8789, 0x13c9: 0x87b1, 0x13ca: 0x87d9, 0x13cb: 0x8801, - 0x13cc: 0x8829, 0x13cd: 0x8851, 0x13ce: 0x8879, 0x13cf: 0x88a1, 0x13d0: 0x88c9, 0x13d1: 0x88f1, - 0x13d2: 0x8919, 0x13d3: 0x8941, 0x13d4: 0x8969, 0x13d5: 0x8991, 0x13d6: 0x89b9, 0x13d7: 0x89e1, - 0x13d8: 0x8a09, 0x13d9: 0x8a31, 0x13da: 0x8a59, 0x13db: 0x8a81, 0x13dc: 0x8aa9, 0x13dd: 0x8ad1, - 0x13de: 0x8afa, 0x13df: 0x8b2a, 0x13e0: 0x8b5a, 0x13e1: 0x8b8a, 0x13e2: 0x8bba, 0x13e3: 0x8bea, - 0x13e4: 0x8c19, 0x13e5: 0x8c41, 0x13e6: 0x7cc1, 0x13e7: 0x8c69, 0x13e8: 0x7c31, 0x13e9: 0x7ce9, - 0x13ea: 0x8c91, 0x13eb: 0x8cb9, 0x13ec: 0x7d89, 0x13ed: 0x8ce1, 0x13ee: 0x7db1, 0x13ef: 0x7dd9, - 0x13f0: 0x8d09, 0x13f1: 0x8d31, 0x13f2: 0x7e79, 0x13f3: 0x8d59, 0x13f4: 0x7ea1, 0x13f5: 0x7ec9, - 0x13f6: 0x8d81, 0x13f7: 0x8da9, 0x13f8: 0x7f19, 0x13f9: 0x8dd1, 0x13fa: 0x7f41, 0x13fb: 0x7f69, - 0x13fc: 0x83f1, 0x13fd: 0x8419, 0x13fe: 0x8491, 0x13ff: 0x84b9, + 0x13c0: 0x18c1, 0x13c1: 0x18c9, 0x13c2: 0x18e1, 0x13c3: 0x18e9, 0x13c4: 0x1909, 0x13c5: 0x1911, + 0x13c6: 0x1919, 0x13c7: 0x1921, 0x13c8: 0x1929, 0x13c9: 0x1941, 0x13ca: 0x1949, 0x13cb: 0x1951, + 0x13cc: 0x1959, 0x13cd: 0x1b29, 0x13ce: 0x1971, 0x13cf: 0x1979, 0x13d0: 0x1981, 0x13d1: 0x1989, + 0x13d2: 0x19a1, 0x13d3: 0x19a9, 0x13d4: 0x19b1, 0x13d5: 0x19b9, 0x13d6: 0x1b31, 0x13d7: 0x19d1, + 0x13d8: 0x19d9, 0x13d9: 0x1b39, 0x13da: 0x19f1, 0x13db: 0x19f9, 0x13dc: 0x1a01, 0x13dd: 0x1a09, + 0x13de: 0x1b41, 0x13df: 0x1761, 0x13e0: 0x1b09, 0x13e1: 0x1789, 0x13e2: 0x1b11, 0x13e3: 0x17b9, + 0x13e4: 0x1b19, 0x13e5: 0x17d9, 0x13e6: 0x1b49, 0x13e7: 0x1841, 0x13e8: 0x1b51, 0x13e9: 0x1b59, + 0x13ea: 0x1b61, 0x13eb: 0x1921, 0x13ec: 0x1929, 0x13ed: 0x1959, 0x13ee: 0x19b9, 0x13ef: 0x1b31, + 0x13f0: 0x1a09, 0x13f1: 0x1b41, 0x13f2: 0x1b69, 0x13f3: 0x1b71, 0x13f4: 0x1b79, 0x13f5: 0x1b81, + 0x13f6: 0x1b89, 0x13f7: 0x1b91, 0x13f8: 0x1b99, 0x13f9: 0x1ba1, 0x13fa: 0x1ba9, 0x13fb: 0x1bb1, + 0x13fc: 0x1bb9, 0x13fd: 0x1bc1, 0x13fe: 0x1bc9, 0x13ff: 0x1bd1, // Block 0x50, offset 0x1400 - 0x1400: 0x84e1, 0x1401: 0x8581, 0x1402: 0x85a9, 0x1403: 0x85d1, 0x1404: 0x85f9, 0x1405: 0x8699, - 0x1406: 0x86c1, 0x1407: 0x86e9, 0x1408: 0x8df9, 0x1409: 0x8789, 0x140a: 0x8e21, 0x140b: 0x8e49, - 0x140c: 0x8879, 0x140d: 0x8e71, 0x140e: 0x88a1, 0x140f: 0x88c9, 0x1410: 0x8ad1, 0x1411: 0x8e99, - 0x1412: 0x8ec1, 0x1413: 0x8a09, 0x1414: 0x8ee9, 0x1415: 0x8a31, 0x1416: 0x8a59, 0x1417: 0x7c71, - 0x1418: 0x7c99, 0x1419: 0x8f11, 0x141a: 0x7cc1, 0x141b: 0x8f39, 0x141c: 0x7d11, 0x141d: 0x7d39, - 0x141e: 0x7d61, 0x141f: 0x7d89, 0x1420: 0x8f61, 0x1421: 0x7e01, 0x1422: 0x7e29, 0x1423: 0x7e51, - 0x1424: 0x7e79, 0x1425: 0x8f89, 0x1426: 0x7f19, 0x1427: 0x7f91, 0x1428: 0x7fb9, 0x1429: 0x7fe1, - 0x142a: 0x8009, 0x142b: 0x8031, 0x142c: 0x8081, 0x142d: 0x80a9, 0x142e: 0x80d1, 0x142f: 0x80f9, - 0x1430: 0x8121, 0x1431: 0x8149, 0x1432: 0x8fb1, 0x1433: 0x8171, 0x1434: 0x8199, 0x1435: 0x81c1, - 0x1436: 0x81e9, 0x1437: 0x8211, 0x1438: 0x8239, 0x1439: 0x8289, 0x143a: 0x82b1, 0x143b: 0x82d9, - 0x143c: 0x8301, 0x143d: 0x8329, 0x143e: 0x8351, 0x143f: 0x8379, + 0x1400: 0x1bd9, 0x1401: 0x1be1, 0x1402: 0x1be9, 0x1403: 0x1bf1, 0x1404: 0x1bf9, 0x1405: 0x1c01, + 0x1406: 0x1c09, 0x1407: 0x1c11, 0x1408: 0x1c19, 0x1409: 0x1c21, 0x140a: 0x1c29, 0x140b: 0x1c31, + 0x140c: 0x1b59, 0x140d: 0x1c39, 0x140e: 0x1c41, 0x140f: 0x1c49, 0x1410: 0x1c51, 0x1411: 0x1b81, + 0x1412: 0x1b89, 0x1413: 0x1b91, 0x1414: 0x1b99, 0x1415: 0x1ba1, 0x1416: 0x1ba9, 0x1417: 0x1bb1, + 0x1418: 0x1bb9, 0x1419: 0x1bc1, 0x141a: 0x1bc9, 0x141b: 0x1bd1, 0x141c: 0x1bd9, 0x141d: 0x1be1, + 0x141e: 0x1be9, 0x141f: 0x1bf1, 0x1420: 0x1bf9, 0x1421: 0x1c01, 0x1422: 0x1c09, 0x1423: 0x1c11, + 0x1424: 0x1c19, 0x1425: 0x1c21, 0x1426: 0x1c29, 0x1427: 0x1c31, 0x1428: 0x1b59, 0x1429: 0x1c39, + 0x142a: 0x1c41, 0x142b: 0x1c49, 0x142c: 0x1c51, 0x142d: 0x1c21, 0x142e: 0x1c29, 0x142f: 0x1c31, + 0x1430: 0x1b59, 0x1431: 0x1b51, 0x1432: 0x1b61, 0x1433: 0x1881, 0x1434: 0x1829, 0x1435: 0x1831, + 0x1436: 0x1839, 0x1437: 0x1c21, 0x1438: 0x1c29, 0x1439: 0x1c31, 0x143a: 0x1881, 0x143b: 0x1889, + 0x143c: 0x1c59, 0x143d: 0x1c59, 0x143e: 0x0018, 0x143f: 0x0018, // Block 0x51, offset 0x1440 - 0x1440: 0x83a1, 0x1441: 0x83c9, 0x1442: 0x8441, 0x1443: 0x8469, 0x1444: 0x8509, 0x1445: 0x8531, - 0x1446: 0x8559, 0x1447: 0x8581, 0x1448: 0x85a9, 0x1449: 0x8621, 0x144a: 0x8649, 0x144b: 0x8671, - 0x144c: 0x8699, 0x144d: 0x8fd9, 0x144e: 0x8711, 0x144f: 0x8739, 0x1450: 0x8761, 0x1451: 0x8789, - 0x1452: 0x8801, 0x1453: 0x8829, 0x1454: 0x8851, 0x1455: 0x8879, 0x1456: 0x9001, 0x1457: 0x88f1, - 0x1458: 0x8919, 0x1459: 0x9029, 0x145a: 0x8991, 0x145b: 0x89b9, 0x145c: 0x89e1, 0x145d: 0x8a09, - 0x145e: 0x9051, 0x145f: 0x7cc1, 0x1460: 0x8f39, 0x1461: 0x7d89, 0x1462: 0x8f61, 0x1463: 0x7e79, - 0x1464: 0x8f89, 0x1465: 0x7f19, 0x1466: 0x9079, 0x1467: 0x8121, 0x1468: 0x90a1, 0x1469: 0x90c9, - 0x146a: 0x90f1, 0x146b: 0x8581, 0x146c: 0x85a9, 0x146d: 0x8699, 0x146e: 0x8879, 0x146f: 0x9001, - 0x1470: 0x8a09, 0x1471: 0x9051, 0x1472: 0x9119, 0x1473: 0x9151, 0x1474: 0x9189, 0x1475: 0x91c1, - 0x1476: 0x91e9, 0x1477: 0x9211, 0x1478: 0x9239, 0x1479: 0x9261, 0x147a: 0x9289, 0x147b: 0x92b1, - 0x147c: 0x92d9, 0x147d: 0x9301, 0x147e: 0x9329, 0x147f: 0x9351, + 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040, + 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040, + 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x1c61, 0x1451: 0x1c69, + 0x1452: 0x1c69, 0x1453: 0x1c71, 0x1454: 0x1c79, 0x1455: 0x1c81, 0x1456: 0x1c89, 0x1457: 0x1c91, + 0x1458: 0x1c99, 0x1459: 0x1c99, 0x145a: 0x1ca1, 0x145b: 0x1ca9, 0x145c: 0x1cb1, 0x145d: 0x1cb9, + 0x145e: 0x1cc1, 0x145f: 0x1cc9, 0x1460: 0x1cc9, 0x1461: 0x1cd1, 0x1462: 0x1cd9, 0x1463: 0x1cd9, + 0x1464: 0x1ce1, 0x1465: 0x1ce1, 0x1466: 0x1ce9, 0x1467: 0x1cf1, 0x1468: 0x1cf1, 0x1469: 0x1cf9, + 0x146a: 0x1d01, 0x146b: 0x1d01, 0x146c: 0x1d09, 0x146d: 0x1d09, 0x146e: 0x1d11, 0x146f: 0x1d19, + 0x1470: 0x1d19, 0x1471: 0x1d21, 0x1472: 0x1d21, 0x1473: 0x1d29, 0x1474: 0x1d31, 0x1475: 0x1d39, + 0x1476: 0x1d41, 0x1477: 0x1d41, 0x1478: 0x1d49, 0x1479: 0x1d51, 0x147a: 0x1d59, 0x147b: 0x1d61, + 0x147c: 0x1d69, 0x147d: 0x1d69, 0x147e: 0x1d71, 0x147f: 0x1d79, // Block 0x52, offset 0x1480 - 0x1480: 0x9379, 0x1481: 0x93a1, 0x1482: 0x93c9, 0x1483: 0x93f1, 0x1484: 0x9419, 0x1485: 0x9441, - 0x1486: 0x9469, 0x1487: 0x9491, 0x1488: 0x94b9, 0x1489: 0x94e1, 0x148a: 0x9509, 0x148b: 0x9531, - 0x148c: 0x90c9, 0x148d: 0x9559, 0x148e: 0x9581, 0x148f: 0x95a9, 0x1490: 0x95d1, 0x1491: 0x91c1, - 0x1492: 0x91e9, 0x1493: 0x9211, 0x1494: 0x9239, 0x1495: 0x9261, 0x1496: 0x9289, 0x1497: 0x92b1, - 0x1498: 0x92d9, 0x1499: 0x9301, 0x149a: 0x9329, 0x149b: 0x9351, 0x149c: 0x9379, 0x149d: 0x93a1, - 0x149e: 0x93c9, 0x149f: 0x93f1, 0x14a0: 0x9419, 0x14a1: 0x9441, 0x14a2: 0x9469, 0x14a3: 0x9491, - 0x14a4: 0x94b9, 0x14a5: 0x94e1, 0x14a6: 0x9509, 0x14a7: 0x9531, 0x14a8: 0x90c9, 0x14a9: 0x9559, - 0x14aa: 0x9581, 0x14ab: 0x95a9, 0x14ac: 0x95d1, 0x14ad: 0x94e1, 0x14ae: 0x9509, 0x14af: 0x9531, - 0x14b0: 0x90c9, 0x14b1: 0x90a1, 0x14b2: 0x90f1, 0x14b3: 0x8261, 0x14b4: 0x80a9, 0x14b5: 0x80d1, - 0x14b6: 0x80f9, 0x14b7: 0x94e1, 0x14b8: 0x9509, 0x14b9: 0x9531, 0x14ba: 0x8261, 0x14bb: 0x8289, - 0x14bc: 0x95f9, 0x14bd: 0x95f9, 0x14be: 0x0018, 0x14bf: 0x0018, + 0x1480: 0x1f29, 0x1481: 0x1f31, 0x1482: 0x1f39, 0x1483: 0x1f11, 0x1484: 0x1d39, 0x1485: 0x1ce9, + 0x1486: 0x1f41, 0x1487: 0x1f49, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, + 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040, + 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040, + 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040, + 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040, + 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040, + 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040, + 0x14b0: 0x1f51, 0x14b1: 0x1f59, 0x14b2: 0x1f61, 0x14b3: 0x1f69, 0x14b4: 0x1f71, 0x14b5: 0x1f79, + 0x14b6: 0x1f81, 0x14b7: 0x1f89, 0x14b8: 0x1f91, 0x14b9: 0x1f99, 0x14ba: 0x1fa2, 0x14bb: 0x1faa, + 0x14bc: 0x1fb1, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040, // Block 0x53, offset 0x14c0 - 0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040, - 0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040, - 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x9621, 0x14d1: 0x9659, - 0x14d2: 0x9659, 0x14d3: 0x9691, 0x14d4: 0x96c9, 0x14d5: 0x9701, 0x14d6: 0x9739, 0x14d7: 0x9771, - 0x14d8: 0x97a9, 0x14d9: 0x97a9, 0x14da: 0x97e1, 0x14db: 0x9819, 0x14dc: 0x9851, 0x14dd: 0x9889, - 0x14de: 0x98c1, 0x14df: 0x98f9, 0x14e0: 0x98f9, 0x14e1: 0x9931, 0x14e2: 0x9969, 0x14e3: 0x9969, - 0x14e4: 0x99a1, 0x14e5: 0x99a1, 0x14e6: 0x99d9, 0x14e7: 0x9a11, 0x14e8: 0x9a11, 0x14e9: 0x9a49, - 0x14ea: 0x9a81, 0x14eb: 0x9a81, 0x14ec: 0x9ab9, 0x14ed: 0x9ab9, 0x14ee: 0x9af1, 0x14ef: 0x9b29, - 0x14f0: 0x9b29, 0x14f1: 0x9b61, 0x14f2: 0x9b61, 0x14f3: 0x9b99, 0x14f4: 0x9bd1, 0x14f5: 0x9c09, - 0x14f6: 0x9c41, 0x14f7: 0x9c41, 0x14f8: 0x9c79, 0x14f9: 0x9cb1, 0x14fa: 0x9ce9, 0x14fb: 0x9d21, - 0x14fc: 0x9d59, 0x14fd: 0x9d59, 0x14fe: 0x9d91, 0x14ff: 0x9dc9, + 0x14c0: 0x33c0, 0x14c1: 0x33c0, 0x14c2: 0x33c0, 0x14c3: 0x33c0, 0x14c4: 0x33c0, 0x14c5: 0x33c0, + 0x14c6: 0x33c0, 0x14c7: 0x33c0, 0x14c8: 0x33c0, 0x14c9: 0x33c0, 0x14ca: 0x33c0, 0x14cb: 0x33c0, + 0x14cc: 0x33c0, 0x14cd: 0x33c0, 0x14ce: 0x33c0, 0x14cf: 0x33c0, 0x14d0: 0x1fba, 0x14d1: 0x7d8d, + 0x14d2: 0x0040, 0x14d3: 0x1fc2, 0x14d4: 0x0122, 0x14d5: 0x1fca, 0x14d6: 0x1fd2, 0x14d7: 0x7dad, + 0x14d8: 0x7dcd, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, + 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x3308, 0x14e1: 0x3308, 0x14e2: 0x3308, 0x14e3: 0x3308, + 0x14e4: 0x3308, 0x14e5: 0x3308, 0x14e6: 0x3308, 0x14e7: 0x3308, 0x14e8: 0x3308, 0x14e9: 0x3308, + 0x14ea: 0x3308, 0x14eb: 0x3308, 0x14ec: 0x3308, 0x14ed: 0x3308, 0x14ee: 0x3308, 0x14ef: 0x3308, + 0x14f0: 0x0040, 0x14f1: 0x7ded, 0x14f2: 0x7e0d, 0x14f3: 0x1fda, 0x14f4: 0x1fda, 0x14f5: 0x072a, + 0x14f6: 0x0732, 0x14f7: 0x1fe2, 0x14f8: 0x1fea, 0x14f9: 0x7e2d, 0x14fa: 0x7e4d, 0x14fb: 0x7e6d, + 0x14fc: 0x7e2d, 0x14fd: 0x7e8d, 0x14fe: 0x7ead, 0x14ff: 0x7e8d, // Block 0x54, offset 0x1500 - 0x1500: 0xa999, 0x1501: 0xa9d1, 0x1502: 0xaa09, 0x1503: 0xa8f1, 0x1504: 0x9c09, 0x1505: 0x99d9, - 0x1506: 0xaa41, 0x1507: 0xaa79, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, - 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040, - 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, - 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, - 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, - 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, - 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, - 0x1530: 0xaab1, 0x1531: 0xaae9, 0x1532: 0xab21, 0x1533: 0xab69, 0x1534: 0xabb1, 0x1535: 0xabf9, - 0x1536: 0xac41, 0x1537: 0xac89, 0x1538: 0xacd1, 0x1539: 0xad19, 0x153a: 0xad52, 0x153b: 0xae62, - 0x153c: 0xaee1, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, + 0x1500: 0x7ecd, 0x1501: 0x7eed, 0x1502: 0x7f0d, 0x1503: 0x7eed, 0x1504: 0x7f2d, 0x1505: 0x0018, + 0x1506: 0x0018, 0x1507: 0x1ff2, 0x1508: 0x1ffa, 0x1509: 0x7f4e, 0x150a: 0x7f6e, 0x150b: 0x7f8e, + 0x150c: 0x7fae, 0x150d: 0x1fda, 0x150e: 0x1fda, 0x150f: 0x1fda, 0x1510: 0x1fba, 0x1511: 0x7fcd, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0122, 0x1515: 0x1fc2, 0x1516: 0x1fd2, 0x1517: 0x1fca, + 0x1518: 0x7fed, 0x1519: 0x072a, 0x151a: 0x0732, 0x151b: 0x1fe2, 0x151c: 0x1fea, 0x151d: 0x7ecd, + 0x151e: 0x7f2d, 0x151f: 0x2002, 0x1520: 0x200a, 0x1521: 0x2012, 0x1522: 0x071a, 0x1523: 0x2019, + 0x1524: 0x2022, 0x1525: 0x202a, 0x1526: 0x0722, 0x1527: 0x0040, 0x1528: 0x2032, 0x1529: 0x203a, + 0x152a: 0x2042, 0x152b: 0x204a, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0x800e, 0x1531: 0x2051, 0x1532: 0x802e, 0x1533: 0x0808, 0x1534: 0x804e, 0x1535: 0x0040, + 0x1536: 0x806e, 0x1537: 0x2059, 0x1538: 0x808e, 0x1539: 0x2061, 0x153a: 0x80ae, 0x153b: 0x2069, + 0x153c: 0x80ce, 0x153d: 0x2071, 0x153e: 0x80ee, 0x153f: 0x2079, // Block 0x55, offset 0x1540 - 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, - 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, - 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaf2a, 0x1551: 0x7d8d, - 0x1552: 0x0040, 0x1553: 0xaf3a, 0x1554: 0x03c2, 0x1555: 0xaf4a, 0x1556: 0xaf5a, 0x1557: 0x7dad, - 0x1558: 0x7dcd, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, - 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, - 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, - 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, - 0x1570: 0x0040, 0x1571: 0x7ded, 0x1572: 0x7e0d, 0x1573: 0xaf6a, 0x1574: 0xaf6a, 0x1575: 0x1fd2, - 0x1576: 0x1fe2, 0x1577: 0xaf7a, 0x1578: 0xaf8a, 0x1579: 0x7e2d, 0x157a: 0x7e4d, 0x157b: 0x7e6d, - 0x157c: 0x7e2d, 0x157d: 0x7e8d, 0x157e: 0x7ead, 0x157f: 0x7e8d, + 0x1540: 0x2081, 0x1541: 0x2089, 0x1542: 0x2089, 0x1543: 0x2091, 0x1544: 0x2091, 0x1545: 0x2099, + 0x1546: 0x2099, 0x1547: 0x20a1, 0x1548: 0x20a1, 0x1549: 0x20a9, 0x154a: 0x20a9, 0x154b: 0x20a9, + 0x154c: 0x20a9, 0x154d: 0x20b1, 0x154e: 0x20b1, 0x154f: 0x20b9, 0x1550: 0x20b9, 0x1551: 0x20b9, + 0x1552: 0x20b9, 0x1553: 0x20c1, 0x1554: 0x20c1, 0x1555: 0x20c9, 0x1556: 0x20c9, 0x1557: 0x20c9, + 0x1558: 0x20c9, 0x1559: 0x20d1, 0x155a: 0x20d1, 0x155b: 0x20d1, 0x155c: 0x20d1, 0x155d: 0x20d9, + 0x155e: 0x20d9, 0x155f: 0x20d9, 0x1560: 0x20d9, 0x1561: 0x20e1, 0x1562: 0x20e1, 0x1563: 0x20e1, + 0x1564: 0x20e1, 0x1565: 0x20e9, 0x1566: 0x20e9, 0x1567: 0x20e9, 0x1568: 0x20e9, 0x1569: 0x20f1, + 0x156a: 0x20f1, 0x156b: 0x20f9, 0x156c: 0x20f9, 0x156d: 0x2101, 0x156e: 0x2101, 0x156f: 0x2109, + 0x1570: 0x2109, 0x1571: 0x2111, 0x1572: 0x2111, 0x1573: 0x2111, 0x1574: 0x2111, 0x1575: 0x2119, + 0x1576: 0x2119, 0x1577: 0x2119, 0x1578: 0x2119, 0x1579: 0x2121, 0x157a: 0x2121, 0x157b: 0x2121, + 0x157c: 0x2121, 0x157d: 0x2129, 0x157e: 0x2129, 0x157f: 0x2129, // Block 0x56, offset 0x1580 - 0x1580: 0x7ecd, 0x1581: 0x7eed, 0x1582: 0x7f0d, 0x1583: 0x7eed, 0x1584: 0x7f2d, 0x1585: 0x0018, - 0x1586: 0x0018, 0x1587: 0xaf9a, 0x1588: 0xafaa, 0x1589: 0x7f4e, 0x158a: 0x7f6e, 0x158b: 0x7f8e, - 0x158c: 0x7fae, 0x158d: 0xaf6a, 0x158e: 0xaf6a, 0x158f: 0xaf6a, 0x1590: 0xaf2a, 0x1591: 0x7fcd, - 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaf3a, 0x1596: 0xaf5a, 0x1597: 0xaf4a, - 0x1598: 0x7fed, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf7a, 0x159c: 0xaf8a, 0x159d: 0x7ecd, - 0x159e: 0x7f2d, 0x159f: 0xafba, 0x15a0: 0xafca, 0x15a1: 0xafda, 0x15a2: 0x1fb2, 0x15a3: 0xafe9, - 0x15a4: 0xaffa, 0x15a5: 0xb00a, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xb01a, 0x15a9: 0xb02a, - 0x15aa: 0xb03a, 0x15ab: 0xb04a, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, - 0x15b0: 0x800e, 0x15b1: 0xb059, 0x15b2: 0x802e, 0x15b3: 0x0808, 0x15b4: 0x804e, 0x15b5: 0x0040, - 0x15b6: 0x806e, 0x15b7: 0xb081, 0x15b8: 0x808e, 0x15b9: 0xb0a9, 0x15ba: 0x80ae, 0x15bb: 0xb0d1, - 0x15bc: 0x80ce, 0x15bd: 0xb0f9, 0x15be: 0x80ee, 0x15bf: 0xb121, + 0x1580: 0x2129, 0x1581: 0x2131, 0x1582: 0x2131, 0x1583: 0x2131, 0x1584: 0x2131, 0x1585: 0x2139, + 0x1586: 0x2139, 0x1587: 0x2139, 0x1588: 0x2139, 0x1589: 0x2141, 0x158a: 0x2141, 0x158b: 0x2141, + 0x158c: 0x2141, 0x158d: 0x2149, 0x158e: 0x2149, 0x158f: 0x2149, 0x1590: 0x2149, 0x1591: 0x2151, + 0x1592: 0x2151, 0x1593: 0x2151, 0x1594: 0x2151, 0x1595: 0x2159, 0x1596: 0x2159, 0x1597: 0x2159, + 0x1598: 0x2159, 0x1599: 0x2161, 0x159a: 0x2161, 0x159b: 0x2161, 0x159c: 0x2161, 0x159d: 0x2169, + 0x159e: 0x2169, 0x159f: 0x2169, 0x15a0: 0x2169, 0x15a1: 0x2171, 0x15a2: 0x2171, 0x15a3: 0x2171, + 0x15a4: 0x2171, 0x15a5: 0x2179, 0x15a6: 0x2179, 0x15a7: 0x2179, 0x15a8: 0x2179, 0x15a9: 0x2181, + 0x15aa: 0x2181, 0x15ab: 0x2181, 0x15ac: 0x2181, 0x15ad: 0x2189, 0x15ae: 0x2189, 0x15af: 0x1701, + 0x15b0: 0x1701, 0x15b1: 0x2191, 0x15b2: 0x2191, 0x15b3: 0x2191, 0x15b4: 0x2191, 0x15b5: 0x2199, + 0x15b6: 0x2199, 0x15b7: 0x21a1, 0x15b8: 0x21a1, 0x15b9: 0x21a9, 0x15ba: 0x21a9, 0x15bb: 0x21b1, + 0x15bc: 0x21b1, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0, // Block 0x57, offset 0x15c0 - 0x15c0: 0xb149, 0x15c1: 0xb161, 0x15c2: 0xb161, 0x15c3: 0xb179, 0x15c4: 0xb179, 0x15c5: 0xb191, - 0x15c6: 0xb191, 0x15c7: 0xb1a9, 0x15c8: 0xb1a9, 0x15c9: 0xb1c1, 0x15ca: 0xb1c1, 0x15cb: 0xb1c1, - 0x15cc: 0xb1c1, 0x15cd: 0xb1d9, 0x15ce: 0xb1d9, 0x15cf: 0xb1f1, 0x15d0: 0xb1f1, 0x15d1: 0xb1f1, - 0x15d2: 0xb1f1, 0x15d3: 0xb209, 0x15d4: 0xb209, 0x15d5: 0xb221, 0x15d6: 0xb221, 0x15d7: 0xb221, - 0x15d8: 0xb221, 0x15d9: 0xb239, 0x15da: 0xb239, 0x15db: 0xb239, 0x15dc: 0xb239, 0x15dd: 0xb251, - 0x15de: 0xb251, 0x15df: 0xb251, 0x15e0: 0xb251, 0x15e1: 0xb269, 0x15e2: 0xb269, 0x15e3: 0xb269, - 0x15e4: 0xb269, 0x15e5: 0xb281, 0x15e6: 0xb281, 0x15e7: 0xb281, 0x15e8: 0xb281, 0x15e9: 0xb299, - 0x15ea: 0xb299, 0x15eb: 0xb2b1, 0x15ec: 0xb2b1, 0x15ed: 0xb2c9, 0x15ee: 0xb2c9, 0x15ef: 0xb2e1, - 0x15f0: 0xb2e1, 0x15f1: 0xb2f9, 0x15f2: 0xb2f9, 0x15f3: 0xb2f9, 0x15f4: 0xb2f9, 0x15f5: 0xb311, - 0x15f6: 0xb311, 0x15f7: 0xb311, 0x15f8: 0xb311, 0x15f9: 0xb329, 0x15fa: 0xb329, 0x15fb: 0xb329, - 0x15fc: 0xb329, 0x15fd: 0xb341, 0x15fe: 0xb341, 0x15ff: 0xb341, + 0x15c0: 0x0040, 0x15c1: 0x1fca, 0x15c2: 0x21ba, 0x15c3: 0x2002, 0x15c4: 0x203a, 0x15c5: 0x2042, + 0x15c6: 0x200a, 0x15c7: 0x21c2, 0x15c8: 0x072a, 0x15c9: 0x0732, 0x15ca: 0x2012, 0x15cb: 0x071a, + 0x15cc: 0x1fba, 0x15cd: 0x2019, 0x15ce: 0x0961, 0x15cf: 0x21ca, 0x15d0: 0x06e1, 0x15d1: 0x0049, + 0x15d2: 0x0029, 0x15d3: 0x0031, 0x15d4: 0x06e9, 0x15d5: 0x06f1, 0x15d6: 0x06f9, 0x15d7: 0x0701, + 0x15d8: 0x0709, 0x15d9: 0x0711, 0x15da: 0x1fc2, 0x15db: 0x0122, 0x15dc: 0x2022, 0x15dd: 0x0722, + 0x15de: 0x202a, 0x15df: 0x1fd2, 0x15e0: 0x204a, 0x15e1: 0x0019, 0x15e2: 0x02e9, 0x15e3: 0x03d9, + 0x15e4: 0x02f1, 0x15e5: 0x02f9, 0x15e6: 0x03f1, 0x15e7: 0x0309, 0x15e8: 0x00a9, 0x15e9: 0x0311, + 0x15ea: 0x00b1, 0x15eb: 0x0319, 0x15ec: 0x0101, 0x15ed: 0x0321, 0x15ee: 0x0329, 0x15ef: 0x0051, + 0x15f0: 0x0339, 0x15f1: 0x0751, 0x15f2: 0x00b9, 0x15f3: 0x0089, 0x15f4: 0x0341, 0x15f5: 0x0349, + 0x15f6: 0x0391, 0x15f7: 0x00c1, 0x15f8: 0x0109, 0x15f9: 0x00c9, 0x15fa: 0x04b1, 0x15fb: 0x1ff2, + 0x15fc: 0x2032, 0x15fd: 0x1ffa, 0x15fe: 0x21d2, 0x15ff: 0x1fda, // Block 0x58, offset 0x1600 - 0x1600: 0xb341, 0x1601: 0xb359, 0x1602: 0xb359, 0x1603: 0xb359, 0x1604: 0xb359, 0x1605: 0xb371, - 0x1606: 0xb371, 0x1607: 0xb371, 0x1608: 0xb371, 0x1609: 0xb389, 0x160a: 0xb389, 0x160b: 0xb389, - 0x160c: 0xb389, 0x160d: 0xb3a1, 0x160e: 0xb3a1, 0x160f: 0xb3a1, 0x1610: 0xb3a1, 0x1611: 0xb3b9, - 0x1612: 0xb3b9, 0x1613: 0xb3b9, 0x1614: 0xb3b9, 0x1615: 0xb3d1, 0x1616: 0xb3d1, 0x1617: 0xb3d1, - 0x1618: 0xb3d1, 0x1619: 0xb3e9, 0x161a: 0xb3e9, 0x161b: 0xb3e9, 0x161c: 0xb3e9, 0x161d: 0xb401, - 0x161e: 0xb401, 0x161f: 0xb401, 0x1620: 0xb401, 0x1621: 0xb419, 0x1622: 0xb419, 0x1623: 0xb419, - 0x1624: 0xb419, 0x1625: 0xb431, 0x1626: 0xb431, 0x1627: 0xb431, 0x1628: 0xb431, 0x1629: 0xb449, - 0x162a: 0xb449, 0x162b: 0xb449, 0x162c: 0xb449, 0x162d: 0xb461, 0x162e: 0xb461, 0x162f: 0x7b01, - 0x1630: 0x7b01, 0x1631: 0xb479, 0x1632: 0xb479, 0x1633: 0xb479, 0x1634: 0xb479, 0x1635: 0xb491, - 0x1636: 0xb491, 0x1637: 0xb4b9, 0x1638: 0xb4b9, 0x1639: 0xb4e1, 0x163a: 0xb4e1, 0x163b: 0xb509, - 0x163c: 0xb509, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + 0x1600: 0x0672, 0x1601: 0x0019, 0x1602: 0x02e9, 0x1603: 0x03d9, 0x1604: 0x02f1, 0x1605: 0x02f9, + 0x1606: 0x03f1, 0x1607: 0x0309, 0x1608: 0x00a9, 0x1609: 0x0311, 0x160a: 0x00b1, 0x160b: 0x0319, + 0x160c: 0x0101, 0x160d: 0x0321, 0x160e: 0x0329, 0x160f: 0x0051, 0x1610: 0x0339, 0x1611: 0x0751, + 0x1612: 0x00b9, 0x1613: 0x0089, 0x1614: 0x0341, 0x1615: 0x0349, 0x1616: 0x0391, 0x1617: 0x00c1, + 0x1618: 0x0109, 0x1619: 0x00c9, 0x161a: 0x04b1, 0x161b: 0x1fe2, 0x161c: 0x21da, 0x161d: 0x1fea, + 0x161e: 0x21e2, 0x161f: 0x810d, 0x1620: 0x812d, 0x1621: 0x0961, 0x1622: 0x814d, 0x1623: 0x814d, + 0x1624: 0x816d, 0x1625: 0x818d, 0x1626: 0x81ad, 0x1627: 0x81cd, 0x1628: 0x81ed, 0x1629: 0x820d, + 0x162a: 0x822d, 0x162b: 0x824d, 0x162c: 0x826d, 0x162d: 0x828d, 0x162e: 0x82ad, 0x162f: 0x82cd, + 0x1630: 0x82ed, 0x1631: 0x830d, 0x1632: 0x832d, 0x1633: 0x834d, 0x1634: 0x836d, 0x1635: 0x838d, + 0x1636: 0x83ad, 0x1637: 0x83cd, 0x1638: 0x83ed, 0x1639: 0x840d, 0x163a: 0x842d, 0x163b: 0x844d, + 0x163c: 0x81ed, 0x163d: 0x846d, 0x163e: 0x848d, 0x163f: 0x824d, // Block 0x59, offset 0x1640 - 0x1640: 0x0040, 0x1641: 0xaf4a, 0x1642: 0xb532, 0x1643: 0xafba, 0x1644: 0xb02a, 0x1645: 0xb03a, - 0x1646: 0xafca, 0x1647: 0xb542, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xafda, 0x164b: 0x1fb2, - 0x164c: 0xaf2a, 0x164d: 0xafe9, 0x164e: 0x29d1, 0x164f: 0xb552, 0x1650: 0x1f41, 0x1651: 0x00c9, - 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, - 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaf3a, 0x165b: 0x03c2, 0x165c: 0xaffa, 0x165d: 0x1fc2, - 0x165e: 0xb00a, 0x165f: 0xaf5a, 0x1660: 0xb04a, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159, - 0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41, - 0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9, - 0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9, - 0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf9a, - 0x167c: 0xb01a, 0x167d: 0xafaa, 0x167e: 0xb562, 0x167f: 0xaf6a, + 0x1640: 0x84ad, 0x1641: 0x84cd, 0x1642: 0x84ed, 0x1643: 0x850d, 0x1644: 0x852d, 0x1645: 0x854d, + 0x1646: 0x856d, 0x1647: 0x858d, 0x1648: 0x850d, 0x1649: 0x85ad, 0x164a: 0x850d, 0x164b: 0x85cd, + 0x164c: 0x85cd, 0x164d: 0x85ed, 0x164e: 0x85ed, 0x164f: 0x860d, 0x1650: 0x854d, 0x1651: 0x862d, + 0x1652: 0x864d, 0x1653: 0x862d, 0x1654: 0x866d, 0x1655: 0x864d, 0x1656: 0x868d, 0x1657: 0x868d, + 0x1658: 0x86ad, 0x1659: 0x86ad, 0x165a: 0x86cd, 0x165b: 0x86cd, 0x165c: 0x864d, 0x165d: 0x814d, + 0x165e: 0x86ed, 0x165f: 0x870d, 0x1660: 0x0040, 0x1661: 0x872d, 0x1662: 0x874d, 0x1663: 0x876d, + 0x1664: 0x878d, 0x1665: 0x876d, 0x1666: 0x87ad, 0x1667: 0x87cd, 0x1668: 0x87ed, 0x1669: 0x87ed, + 0x166a: 0x880d, 0x166b: 0x880d, 0x166c: 0x882d, 0x166d: 0x882d, 0x166e: 0x880d, 0x166f: 0x880d, + 0x1670: 0x884d, 0x1671: 0x886d, 0x1672: 0x888d, 0x1673: 0x88ad, 0x1674: 0x88cd, 0x1675: 0x88ed, + 0x1676: 0x88ed, 0x1677: 0x88ed, 0x1678: 0x890d, 0x1679: 0x890d, 0x167a: 0x890d, 0x167b: 0x890d, + 0x167c: 0x87ed, 0x167d: 0x87ed, 0x167e: 0x87ed, 0x167f: 0x0040, // Block 0x5a, offset 0x1680 - 0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09, - 0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51, - 0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039, - 0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279, - 0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf7a, 0x169c: 0xb572, 0x169d: 0xaf8a, - 0x169e: 0xb582, 0x169f: 0x810d, 0x16a0: 0x812d, 0x16a1: 0x29d1, 0x16a2: 0x814d, 0x16a3: 0x814d, - 0x16a4: 0x816d, 0x16a5: 0x818d, 0x16a6: 0x81ad, 0x16a7: 0x81cd, 0x16a8: 0x81ed, 0x16a9: 0x820d, - 0x16aa: 0x822d, 0x16ab: 0x824d, 0x16ac: 0x826d, 0x16ad: 0x828d, 0x16ae: 0x82ad, 0x16af: 0x82cd, - 0x16b0: 0x82ed, 0x16b1: 0x830d, 0x16b2: 0x832d, 0x16b3: 0x834d, 0x16b4: 0x836d, 0x16b5: 0x838d, - 0x16b6: 0x83ad, 0x16b7: 0x83cd, 0x16b8: 0x83ed, 0x16b9: 0x840d, 0x16ba: 0x842d, 0x16bb: 0x844d, - 0x16bc: 0x81ed, 0x16bd: 0x846d, 0x16be: 0x848d, 0x16bf: 0x824d, + 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x874d, 0x1683: 0x872d, 0x1684: 0x892d, 0x1685: 0x872d, + 0x1686: 0x874d, 0x1687: 0x872d, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x894d, 0x168b: 0x874d, + 0x168c: 0x896d, 0x168d: 0x892d, 0x168e: 0x896d, 0x168f: 0x874d, 0x1690: 0x0040, 0x1691: 0x0040, + 0x1692: 0x898d, 0x1693: 0x89ad, 0x1694: 0x88ad, 0x1695: 0x896d, 0x1696: 0x892d, 0x1697: 0x896d, + 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x89cd, 0x169b: 0x89ed, 0x169c: 0x89cd, 0x169d: 0x0040, + 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0x21e9, 0x16a1: 0x21f1, 0x16a2: 0x21f9, 0x16a3: 0x8a0e, + 0x16a4: 0x2201, 0x16a5: 0x2209, 0x16a6: 0x8a2d, 0x16a7: 0x0040, 0x16a8: 0x8a4d, 0x16a9: 0x8a6d, + 0x16aa: 0x8a8d, 0x16ab: 0x8a6d, 0x16ac: 0x8aad, 0x16ad: 0x8acd, 0x16ae: 0x8aed, 0x16af: 0x0040, + 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040, + 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340, + 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040, // Block 0x5b, offset 0x16c0 - 0x16c0: 0x84ad, 0x16c1: 0x84cd, 0x16c2: 0x84ed, 0x16c3: 0x850d, 0x16c4: 0x852d, 0x16c5: 0x854d, - 0x16c6: 0x856d, 0x16c7: 0x858d, 0x16c8: 0x850d, 0x16c9: 0x85ad, 0x16ca: 0x850d, 0x16cb: 0x85cd, - 0x16cc: 0x85cd, 0x16cd: 0x85ed, 0x16ce: 0x85ed, 0x16cf: 0x860d, 0x16d0: 0x854d, 0x16d1: 0x862d, - 0x16d2: 0x864d, 0x16d3: 0x862d, 0x16d4: 0x866d, 0x16d5: 0x864d, 0x16d6: 0x868d, 0x16d7: 0x868d, - 0x16d8: 0x86ad, 0x16d9: 0x86ad, 0x16da: 0x86cd, 0x16db: 0x86cd, 0x16dc: 0x864d, 0x16dd: 0x814d, - 0x16de: 0x86ed, 0x16df: 0x870d, 0x16e0: 0x0040, 0x16e1: 0x872d, 0x16e2: 0x874d, 0x16e3: 0x876d, - 0x16e4: 0x878d, 0x16e5: 0x876d, 0x16e6: 0x87ad, 0x16e7: 0x87cd, 0x16e8: 0x87ed, 0x16e9: 0x87ed, - 0x16ea: 0x880d, 0x16eb: 0x880d, 0x16ec: 0x882d, 0x16ed: 0x882d, 0x16ee: 0x880d, 0x16ef: 0x880d, - 0x16f0: 0x884d, 0x16f1: 0x886d, 0x16f2: 0x888d, 0x16f3: 0x88ad, 0x16f4: 0x88cd, 0x16f5: 0x88ed, - 0x16f6: 0x88ed, 0x16f7: 0x88ed, 0x16f8: 0x890d, 0x16f9: 0x890d, 0x16fa: 0x890d, 0x16fb: 0x890d, - 0x16fc: 0x87ed, 0x16fd: 0x87ed, 0x16fe: 0x87ed, 0x16ff: 0x0040, + 0x16c0: 0x0a08, 0x16c1: 0x0a08, 0x16c2: 0x0a08, 0x16c3: 0x0a08, 0x16c4: 0x0a08, 0x16c5: 0x0c08, + 0x16c6: 0x0808, 0x16c7: 0x0c08, 0x16c8: 0x0818, 0x16c9: 0x0c08, 0x16ca: 0x0c08, 0x16cb: 0x0808, + 0x16cc: 0x0808, 0x16cd: 0x0908, 0x16ce: 0x0c08, 0x16cf: 0x0c08, 0x16d0: 0x0c08, 0x16d1: 0x0c08, + 0x16d2: 0x0c08, 0x16d3: 0x0a08, 0x16d4: 0x0a08, 0x16d5: 0x0a08, 0x16d6: 0x0a08, 0x16d7: 0x0908, + 0x16d8: 0x0a08, 0x16d9: 0x0a08, 0x16da: 0x0a08, 0x16db: 0x0a08, 0x16dc: 0x0a08, 0x16dd: 0x0c08, + 0x16de: 0x0a08, 0x16df: 0x0a08, 0x16e0: 0x0a08, 0x16e1: 0x0c08, 0x16e2: 0x0808, 0x16e3: 0x0808, + 0x16e4: 0x0c08, 0x16e5: 0x3308, 0x16e6: 0x3308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040, + 0x16ea: 0x0040, 0x16eb: 0x0a18, 0x16ec: 0x0a18, 0x16ed: 0x0a18, 0x16ee: 0x0a18, 0x16ef: 0x0c18, + 0x16f0: 0x0818, 0x16f1: 0x0818, 0x16f2: 0x0818, 0x16f3: 0x0818, 0x16f4: 0x0818, 0x16f5: 0x0818, + 0x16f6: 0x0818, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040, + 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, // Block 0x5c, offset 0x1700 - 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x874d, 0x1703: 0x872d, 0x1704: 0x892d, 0x1705: 0x872d, - 0x1706: 0x874d, 0x1707: 0x872d, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x894d, 0x170b: 0x874d, - 0x170c: 0x896d, 0x170d: 0x892d, 0x170e: 0x896d, 0x170f: 0x874d, 0x1710: 0x0040, 0x1711: 0x0040, - 0x1712: 0x898d, 0x1713: 0x89ad, 0x1714: 0x88ad, 0x1715: 0x896d, 0x1716: 0x892d, 0x1717: 0x896d, - 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x89cd, 0x171b: 0x89ed, 0x171c: 0x89cd, 0x171d: 0x0040, - 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb591, 0x1721: 0xb5a9, 0x1722: 0xb5c1, 0x1723: 0x8a0e, - 0x1724: 0xb5d9, 0x1725: 0xb5f1, 0x1726: 0x8a2d, 0x1727: 0x0040, 0x1728: 0x8a4d, 0x1729: 0x8a6d, - 0x172a: 0x8a8d, 0x172b: 0x8a6d, 0x172c: 0x8aad, 0x172d: 0x8acd, 0x172e: 0x8aed, 0x172f: 0x0040, + 0x1700: 0x0a08, 0x1701: 0x0c08, 0x1702: 0x0a08, 0x1703: 0x0c08, 0x1704: 0x0c08, 0x1705: 0x0c08, + 0x1706: 0x0a08, 0x1707: 0x0a08, 0x1708: 0x0a08, 0x1709: 0x0c08, 0x170a: 0x0a08, 0x170b: 0x0a08, + 0x170c: 0x0c08, 0x170d: 0x0a08, 0x170e: 0x0c08, 0x170f: 0x0c08, 0x1710: 0x0a08, 0x1711: 0x0c08, + 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040, + 0x1718: 0x0040, 0x1719: 0x0818, 0x171a: 0x0818, 0x171b: 0x0818, 0x171c: 0x0818, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040, + 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0c18, + 0x172a: 0x0c18, 0x172b: 0x0c18, 0x172c: 0x0c18, 0x172d: 0x0a18, 0x172e: 0x0a18, 0x172f: 0x0818, 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, - 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, // Block 0x5d, offset 0x1740 - 0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08, - 0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808, - 0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08, - 0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908, - 0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08, - 0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808, - 0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, - 0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18, - 0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818, - 0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040, - 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040, + 0x1740: 0x3308, 0x1741: 0x3308, 0x1742: 0x3008, 0x1743: 0x3008, 0x1744: 0x0040, 0x1745: 0x0008, + 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, + 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040, + 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, + 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, + 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, + 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040, + 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008, + 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008, + 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x3308, + 0x177c: 0x3308, 0x177d: 0x0008, 0x177e: 0x3008, 0x177f: 0x3008, // Block 0x5e, offset 0x1780 - 0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08, - 0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08, - 0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08, - 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040, - 0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040, - 0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040, - 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18, - 0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818, - 0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040, + 0x1780: 0x3308, 0x1781: 0x3008, 0x1782: 0x3008, 0x1783: 0x3008, 0x1784: 0x3008, 0x1785: 0x0040, + 0x1786: 0x0040, 0x1787: 0x3008, 0x1788: 0x3008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x3008, + 0x178c: 0x3008, 0x178d: 0x3808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040, + 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x3008, + 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008, + 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x3008, 0x17a3: 0x3008, + 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x3308, 0x17a7: 0x3308, 0x17a8: 0x3308, 0x17a9: 0x3308, + 0x17aa: 0x3308, 0x17ab: 0x3308, 0x17ac: 0x3308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040, + 0x17b0: 0x3308, 0x17b1: 0x3308, 0x17b2: 0x3308, 0x17b3: 0x3308, 0x17b4: 0x3308, 0x17b5: 0x0040, 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, // Block 0x5f, offset 0x17c0 - 0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008, - 0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008, - 0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040, - 0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008, + 0x17c0: 0x0008, 0x17c1: 0x0008, 0x17c2: 0x0008, 0x17c3: 0x0008, 0x17c4: 0x0008, 0x17c5: 0x0008, + 0x17c6: 0x0008, 0x17c7: 0x0040, 0x17c8: 0x0040, 0x17c9: 0x0008, 0x17ca: 0x0040, 0x17cb: 0x0040, + 0x17cc: 0x0008, 0x17cd: 0x0008, 0x17ce: 0x0008, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0008, + 0x17d2: 0x0008, 0x17d3: 0x0008, 0x17d4: 0x0040, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0040, 0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008, 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008, - 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040, + 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0008, 0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008, - 0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008, - 0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x3308, - 0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008, + 0x17f0: 0x3008, 0x17f1: 0x3008, 0x17f2: 0x3008, 0x17f3: 0x3008, 0x17f4: 0x3008, 0x17f5: 0x3008, + 0x17f6: 0x0040, 0x17f7: 0x3008, 0x17f8: 0x3008, 0x17f9: 0x0040, 0x17fa: 0x0040, 0x17fb: 0x3308, + 0x17fc: 0x3308, 0x17fd: 0x3808, 0x17fe: 0x3b08, 0x17ff: 0x0008, // Block 0x60, offset 0x1800 - 0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040, - 0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008, - 0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040, - 0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008, - 0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008, - 0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008, - 0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308, - 0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040, - 0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040, - 0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, - 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, + 0x1800: 0x0019, 0x1801: 0x02e9, 0x1802: 0x03d9, 0x1803: 0x02f1, 0x1804: 0x02f9, 0x1805: 0x03f1, + 0x1806: 0x0309, 0x1807: 0x00a9, 0x1808: 0x0311, 0x1809: 0x00b1, 0x180a: 0x0319, 0x180b: 0x0101, + 0x180c: 0x0321, 0x180d: 0x0329, 0x180e: 0x0051, 0x180f: 0x0339, 0x1810: 0x0751, 0x1811: 0x00b9, + 0x1812: 0x0089, 0x1813: 0x0341, 0x1814: 0x0349, 0x1815: 0x0391, 0x1816: 0x00c1, 0x1817: 0x0109, + 0x1818: 0x00c9, 0x1819: 0x04b1, 0x181a: 0x0019, 0x181b: 0x02e9, 0x181c: 0x03d9, 0x181d: 0x02f1, + 0x181e: 0x02f9, 0x181f: 0x03f1, 0x1820: 0x0309, 0x1821: 0x00a9, 0x1822: 0x0311, 0x1823: 0x00b1, + 0x1824: 0x0319, 0x1825: 0x0101, 0x1826: 0x0321, 0x1827: 0x0329, 0x1828: 0x0051, 0x1829: 0x0339, + 0x182a: 0x0751, 0x182b: 0x00b9, 0x182c: 0x0089, 0x182d: 0x0341, 0x182e: 0x0349, 0x182f: 0x0391, + 0x1830: 0x00c1, 0x1831: 0x0109, 0x1832: 0x00c9, 0x1833: 0x04b1, 0x1834: 0x0019, 0x1835: 0x02e9, + 0x1836: 0x03d9, 0x1837: 0x02f1, 0x1838: 0x02f9, 0x1839: 0x03f1, 0x183a: 0x0309, 0x183b: 0x00a9, + 0x183c: 0x0311, 0x183d: 0x00b1, 0x183e: 0x0319, 0x183f: 0x0101, // Block 0x61, offset 0x1840 - 0x1840: 0x0008, 0x1841: 0x0008, 0x1842: 0x0008, 0x1843: 0x0008, 0x1844: 0x0008, 0x1845: 0x0008, - 0x1846: 0x0008, 0x1847: 0x0040, 0x1848: 0x0040, 0x1849: 0x0008, 0x184a: 0x0040, 0x184b: 0x0040, - 0x184c: 0x0008, 0x184d: 0x0008, 0x184e: 0x0008, 0x184f: 0x0008, 0x1850: 0x0008, 0x1851: 0x0008, - 0x1852: 0x0008, 0x1853: 0x0008, 0x1854: 0x0040, 0x1855: 0x0008, 0x1856: 0x0008, 0x1857: 0x0040, - 0x1858: 0x0008, 0x1859: 0x0008, 0x185a: 0x0008, 0x185b: 0x0008, 0x185c: 0x0008, 0x185d: 0x0008, - 0x185e: 0x0008, 0x185f: 0x0008, 0x1860: 0x0008, 0x1861: 0x0008, 0x1862: 0x0008, 0x1863: 0x0008, - 0x1864: 0x0008, 0x1865: 0x0008, 0x1866: 0x0008, 0x1867: 0x0008, 0x1868: 0x0008, 0x1869: 0x0008, - 0x186a: 0x0008, 0x186b: 0x0008, 0x186c: 0x0008, 0x186d: 0x0008, 0x186e: 0x0008, 0x186f: 0x0008, - 0x1870: 0x3008, 0x1871: 0x3008, 0x1872: 0x3008, 0x1873: 0x3008, 0x1874: 0x3008, 0x1875: 0x3008, - 0x1876: 0x0040, 0x1877: 0x3008, 0x1878: 0x3008, 0x1879: 0x0040, 0x187a: 0x0040, 0x187b: 0x3308, - 0x187c: 0x3308, 0x187d: 0x3808, 0x187e: 0x3b08, 0x187f: 0x0008, + 0x1840: 0x0321, 0x1841: 0x0329, 0x1842: 0x0051, 0x1843: 0x0339, 0x1844: 0x0751, 0x1845: 0x00b9, + 0x1846: 0x0089, 0x1847: 0x0341, 0x1848: 0x0349, 0x1849: 0x0391, 0x184a: 0x00c1, 0x184b: 0x0109, + 0x184c: 0x00c9, 0x184d: 0x04b1, 0x184e: 0x0019, 0x184f: 0x02e9, 0x1850: 0x03d9, 0x1851: 0x02f1, + 0x1852: 0x02f9, 0x1853: 0x03f1, 0x1854: 0x0309, 0x1855: 0x0040, 0x1856: 0x0311, 0x1857: 0x00b1, + 0x1858: 0x0319, 0x1859: 0x0101, 0x185a: 0x0321, 0x185b: 0x0329, 0x185c: 0x0051, 0x185d: 0x0339, + 0x185e: 0x0751, 0x185f: 0x00b9, 0x1860: 0x0089, 0x1861: 0x0341, 0x1862: 0x0349, 0x1863: 0x0391, + 0x1864: 0x00c1, 0x1865: 0x0109, 0x1866: 0x00c9, 0x1867: 0x04b1, 0x1868: 0x0019, 0x1869: 0x02e9, + 0x186a: 0x03d9, 0x186b: 0x02f1, 0x186c: 0x02f9, 0x186d: 0x03f1, 0x186e: 0x0309, 0x186f: 0x00a9, + 0x1870: 0x0311, 0x1871: 0x00b1, 0x1872: 0x0319, 0x1873: 0x0101, 0x1874: 0x0321, 0x1875: 0x0329, + 0x1876: 0x0051, 0x1877: 0x0339, 0x1878: 0x0751, 0x1879: 0x00b9, 0x187a: 0x0089, 0x187b: 0x0341, + 0x187c: 0x0349, 0x187d: 0x0391, 0x187e: 0x00c1, 0x187f: 0x0109, // Block 0x62, offset 0x1880 - 0x1880: 0x0039, 0x1881: 0x0ee9, 0x1882: 0x1159, 0x1883: 0x0ef9, 0x1884: 0x0f09, 0x1885: 0x1199, - 0x1886: 0x0f31, 0x1887: 0x0249, 0x1888: 0x0f41, 0x1889: 0x0259, 0x188a: 0x0f51, 0x188b: 0x0359, - 0x188c: 0x0f61, 0x188d: 0x0f71, 0x188e: 0x00d9, 0x188f: 0x0f99, 0x1890: 0x2039, 0x1891: 0x0269, - 0x1892: 0x01d9, 0x1893: 0x0fa9, 0x1894: 0x0fb9, 0x1895: 0x1089, 0x1896: 0x0279, 0x1897: 0x0369, - 0x1898: 0x0289, 0x1899: 0x13d1, 0x189a: 0x0039, 0x189b: 0x0ee9, 0x189c: 0x1159, 0x189d: 0x0ef9, - 0x189e: 0x0f09, 0x189f: 0x1199, 0x18a0: 0x0f31, 0x18a1: 0x0249, 0x18a2: 0x0f41, 0x18a3: 0x0259, - 0x18a4: 0x0f51, 0x18a5: 0x0359, 0x18a6: 0x0f61, 0x18a7: 0x0f71, 0x18a8: 0x00d9, 0x18a9: 0x0f99, - 0x18aa: 0x2039, 0x18ab: 0x0269, 0x18ac: 0x01d9, 0x18ad: 0x0fa9, 0x18ae: 0x0fb9, 0x18af: 0x1089, - 0x18b0: 0x0279, 0x18b1: 0x0369, 0x18b2: 0x0289, 0x18b3: 0x13d1, 0x18b4: 0x0039, 0x18b5: 0x0ee9, - 0x18b6: 0x1159, 0x18b7: 0x0ef9, 0x18b8: 0x0f09, 0x18b9: 0x1199, 0x18ba: 0x0f31, 0x18bb: 0x0249, - 0x18bc: 0x0f41, 0x18bd: 0x0259, 0x18be: 0x0f51, 0x18bf: 0x0359, + 0x1880: 0x00c9, 0x1881: 0x04b1, 0x1882: 0x0019, 0x1883: 0x02e9, 0x1884: 0x03d9, 0x1885: 0x02f1, + 0x1886: 0x02f9, 0x1887: 0x03f1, 0x1888: 0x0309, 0x1889: 0x00a9, 0x188a: 0x0311, 0x188b: 0x00b1, + 0x188c: 0x0319, 0x188d: 0x0101, 0x188e: 0x0321, 0x188f: 0x0329, 0x1890: 0x0051, 0x1891: 0x0339, + 0x1892: 0x0751, 0x1893: 0x00b9, 0x1894: 0x0089, 0x1895: 0x0341, 0x1896: 0x0349, 0x1897: 0x0391, + 0x1898: 0x00c1, 0x1899: 0x0109, 0x189a: 0x00c9, 0x189b: 0x04b1, 0x189c: 0x0019, 0x189d: 0x0040, + 0x189e: 0x03d9, 0x189f: 0x02f1, 0x18a0: 0x0040, 0x18a1: 0x0040, 0x18a2: 0x0309, 0x18a3: 0x0040, + 0x18a4: 0x0040, 0x18a5: 0x00b1, 0x18a6: 0x0319, 0x18a7: 0x0040, 0x18a8: 0x0040, 0x18a9: 0x0329, + 0x18aa: 0x0051, 0x18ab: 0x0339, 0x18ac: 0x0751, 0x18ad: 0x0040, 0x18ae: 0x0089, 0x18af: 0x0341, + 0x18b0: 0x0349, 0x18b1: 0x0391, 0x18b2: 0x00c1, 0x18b3: 0x0109, 0x18b4: 0x00c9, 0x18b5: 0x04b1, + 0x18b6: 0x0019, 0x18b7: 0x02e9, 0x18b8: 0x03d9, 0x18b9: 0x02f1, 0x18ba: 0x0040, 0x18bb: 0x03f1, + 0x18bc: 0x0040, 0x18bd: 0x00a9, 0x18be: 0x0311, 0x18bf: 0x00b1, // Block 0x63, offset 0x18c0 - 0x18c0: 0x0f61, 0x18c1: 0x0f71, 0x18c2: 0x00d9, 0x18c3: 0x0f99, 0x18c4: 0x2039, 0x18c5: 0x0269, - 0x18c6: 0x01d9, 0x18c7: 0x0fa9, 0x18c8: 0x0fb9, 0x18c9: 0x1089, 0x18ca: 0x0279, 0x18cb: 0x0369, - 0x18cc: 0x0289, 0x18cd: 0x13d1, 0x18ce: 0x0039, 0x18cf: 0x0ee9, 0x18d0: 0x1159, 0x18d1: 0x0ef9, - 0x18d2: 0x0f09, 0x18d3: 0x1199, 0x18d4: 0x0f31, 0x18d5: 0x0040, 0x18d6: 0x0f41, 0x18d7: 0x0259, - 0x18d8: 0x0f51, 0x18d9: 0x0359, 0x18da: 0x0f61, 0x18db: 0x0f71, 0x18dc: 0x00d9, 0x18dd: 0x0f99, - 0x18de: 0x2039, 0x18df: 0x0269, 0x18e0: 0x01d9, 0x18e1: 0x0fa9, 0x18e2: 0x0fb9, 0x18e3: 0x1089, - 0x18e4: 0x0279, 0x18e5: 0x0369, 0x18e6: 0x0289, 0x18e7: 0x13d1, 0x18e8: 0x0039, 0x18e9: 0x0ee9, - 0x18ea: 0x1159, 0x18eb: 0x0ef9, 0x18ec: 0x0f09, 0x18ed: 0x1199, 0x18ee: 0x0f31, 0x18ef: 0x0249, - 0x18f0: 0x0f41, 0x18f1: 0x0259, 0x18f2: 0x0f51, 0x18f3: 0x0359, 0x18f4: 0x0f61, 0x18f5: 0x0f71, - 0x18f6: 0x00d9, 0x18f7: 0x0f99, 0x18f8: 0x2039, 0x18f9: 0x0269, 0x18fa: 0x01d9, 0x18fb: 0x0fa9, - 0x18fc: 0x0fb9, 0x18fd: 0x1089, 0x18fe: 0x0279, 0x18ff: 0x0369, + 0x18c0: 0x0319, 0x18c1: 0x0101, 0x18c2: 0x0321, 0x18c3: 0x0329, 0x18c4: 0x0040, 0x18c5: 0x0339, + 0x18c6: 0x0751, 0x18c7: 0x00b9, 0x18c8: 0x0089, 0x18c9: 0x0341, 0x18ca: 0x0349, 0x18cb: 0x0391, + 0x18cc: 0x00c1, 0x18cd: 0x0109, 0x18ce: 0x00c9, 0x18cf: 0x04b1, 0x18d0: 0x0019, 0x18d1: 0x02e9, + 0x18d2: 0x03d9, 0x18d3: 0x02f1, 0x18d4: 0x02f9, 0x18d5: 0x03f1, 0x18d6: 0x0309, 0x18d7: 0x00a9, + 0x18d8: 0x0311, 0x18d9: 0x00b1, 0x18da: 0x0319, 0x18db: 0x0101, 0x18dc: 0x0321, 0x18dd: 0x0329, + 0x18de: 0x0051, 0x18df: 0x0339, 0x18e0: 0x0751, 0x18e1: 0x00b9, 0x18e2: 0x0089, 0x18e3: 0x0341, + 0x18e4: 0x0349, 0x18e5: 0x0391, 0x18e6: 0x00c1, 0x18e7: 0x0109, 0x18e8: 0x00c9, 0x18e9: 0x04b1, + 0x18ea: 0x0019, 0x18eb: 0x02e9, 0x18ec: 0x03d9, 0x18ed: 0x02f1, 0x18ee: 0x02f9, 0x18ef: 0x03f1, + 0x18f0: 0x0309, 0x18f1: 0x00a9, 0x18f2: 0x0311, 0x18f3: 0x00b1, 0x18f4: 0x0319, 0x18f5: 0x0101, + 0x18f6: 0x0321, 0x18f7: 0x0329, 0x18f8: 0x0051, 0x18f9: 0x0339, 0x18fa: 0x0751, 0x18fb: 0x00b9, + 0x18fc: 0x0089, 0x18fd: 0x0341, 0x18fe: 0x0349, 0x18ff: 0x0391, // Block 0x64, offset 0x1900 - 0x1900: 0x0289, 0x1901: 0x13d1, 0x1902: 0x0039, 0x1903: 0x0ee9, 0x1904: 0x1159, 0x1905: 0x0ef9, - 0x1906: 0x0f09, 0x1907: 0x1199, 0x1908: 0x0f31, 0x1909: 0x0249, 0x190a: 0x0f41, 0x190b: 0x0259, - 0x190c: 0x0f51, 0x190d: 0x0359, 0x190e: 0x0f61, 0x190f: 0x0f71, 0x1910: 0x00d9, 0x1911: 0x0f99, - 0x1912: 0x2039, 0x1913: 0x0269, 0x1914: 0x01d9, 0x1915: 0x0fa9, 0x1916: 0x0fb9, 0x1917: 0x1089, - 0x1918: 0x0279, 0x1919: 0x0369, 0x191a: 0x0289, 0x191b: 0x13d1, 0x191c: 0x0039, 0x191d: 0x0040, - 0x191e: 0x1159, 0x191f: 0x0ef9, 0x1920: 0x0040, 0x1921: 0x0040, 0x1922: 0x0f31, 0x1923: 0x0040, - 0x1924: 0x0040, 0x1925: 0x0259, 0x1926: 0x0f51, 0x1927: 0x0040, 0x1928: 0x0040, 0x1929: 0x0f71, - 0x192a: 0x00d9, 0x192b: 0x0f99, 0x192c: 0x2039, 0x192d: 0x0040, 0x192e: 0x01d9, 0x192f: 0x0fa9, - 0x1930: 0x0fb9, 0x1931: 0x1089, 0x1932: 0x0279, 0x1933: 0x0369, 0x1934: 0x0289, 0x1935: 0x13d1, - 0x1936: 0x0039, 0x1937: 0x0ee9, 0x1938: 0x1159, 0x1939: 0x0ef9, 0x193a: 0x0040, 0x193b: 0x1199, - 0x193c: 0x0040, 0x193d: 0x0249, 0x193e: 0x0f41, 0x193f: 0x0259, + 0x1900: 0x00c1, 0x1901: 0x0109, 0x1902: 0x00c9, 0x1903: 0x04b1, 0x1904: 0x0019, 0x1905: 0x02e9, + 0x1906: 0x0040, 0x1907: 0x02f1, 0x1908: 0x02f9, 0x1909: 0x03f1, 0x190a: 0x0309, 0x190b: 0x0040, + 0x190c: 0x0040, 0x190d: 0x00b1, 0x190e: 0x0319, 0x190f: 0x0101, 0x1910: 0x0321, 0x1911: 0x0329, + 0x1912: 0x0051, 0x1913: 0x0339, 0x1914: 0x0751, 0x1915: 0x0040, 0x1916: 0x0089, 0x1917: 0x0341, + 0x1918: 0x0349, 0x1919: 0x0391, 0x191a: 0x00c1, 0x191b: 0x0109, 0x191c: 0x00c9, 0x191d: 0x0040, + 0x191e: 0x0019, 0x191f: 0x02e9, 0x1920: 0x03d9, 0x1921: 0x02f1, 0x1922: 0x02f9, 0x1923: 0x03f1, + 0x1924: 0x0309, 0x1925: 0x00a9, 0x1926: 0x0311, 0x1927: 0x00b1, 0x1928: 0x0319, 0x1929: 0x0101, + 0x192a: 0x0321, 0x192b: 0x0329, 0x192c: 0x0051, 0x192d: 0x0339, 0x192e: 0x0751, 0x192f: 0x00b9, + 0x1930: 0x0089, 0x1931: 0x0341, 0x1932: 0x0349, 0x1933: 0x0391, 0x1934: 0x00c1, 0x1935: 0x0109, + 0x1936: 0x00c9, 0x1937: 0x04b1, 0x1938: 0x0019, 0x1939: 0x02e9, 0x193a: 0x0040, 0x193b: 0x02f1, + 0x193c: 0x02f9, 0x193d: 0x03f1, 0x193e: 0x0309, 0x193f: 0x0040, // Block 0x65, offset 0x1940 - 0x1940: 0x0f51, 0x1941: 0x0359, 0x1942: 0x0f61, 0x1943: 0x0f71, 0x1944: 0x0040, 0x1945: 0x0f99, - 0x1946: 0x2039, 0x1947: 0x0269, 0x1948: 0x01d9, 0x1949: 0x0fa9, 0x194a: 0x0fb9, 0x194b: 0x1089, - 0x194c: 0x0279, 0x194d: 0x0369, 0x194e: 0x0289, 0x194f: 0x13d1, 0x1950: 0x0039, 0x1951: 0x0ee9, - 0x1952: 0x1159, 0x1953: 0x0ef9, 0x1954: 0x0f09, 0x1955: 0x1199, 0x1956: 0x0f31, 0x1957: 0x0249, - 0x1958: 0x0f41, 0x1959: 0x0259, 0x195a: 0x0f51, 0x195b: 0x0359, 0x195c: 0x0f61, 0x195d: 0x0f71, - 0x195e: 0x00d9, 0x195f: 0x0f99, 0x1960: 0x2039, 0x1961: 0x0269, 0x1962: 0x01d9, 0x1963: 0x0fa9, - 0x1964: 0x0fb9, 0x1965: 0x1089, 0x1966: 0x0279, 0x1967: 0x0369, 0x1968: 0x0289, 0x1969: 0x13d1, - 0x196a: 0x0039, 0x196b: 0x0ee9, 0x196c: 0x1159, 0x196d: 0x0ef9, 0x196e: 0x0f09, 0x196f: 0x1199, - 0x1970: 0x0f31, 0x1971: 0x0249, 0x1972: 0x0f41, 0x1973: 0x0259, 0x1974: 0x0f51, 0x1975: 0x0359, - 0x1976: 0x0f61, 0x1977: 0x0f71, 0x1978: 0x00d9, 0x1979: 0x0f99, 0x197a: 0x2039, 0x197b: 0x0269, - 0x197c: 0x01d9, 0x197d: 0x0fa9, 0x197e: 0x0fb9, 0x197f: 0x1089, + 0x1940: 0x0311, 0x1941: 0x00b1, 0x1942: 0x0319, 0x1943: 0x0101, 0x1944: 0x0321, 0x1945: 0x0040, + 0x1946: 0x0051, 0x1947: 0x0040, 0x1948: 0x0040, 0x1949: 0x0040, 0x194a: 0x0089, 0x194b: 0x0341, + 0x194c: 0x0349, 0x194d: 0x0391, 0x194e: 0x00c1, 0x194f: 0x0109, 0x1950: 0x00c9, 0x1951: 0x0040, + 0x1952: 0x0019, 0x1953: 0x02e9, 0x1954: 0x03d9, 0x1955: 0x02f1, 0x1956: 0x02f9, 0x1957: 0x03f1, + 0x1958: 0x0309, 0x1959: 0x00a9, 0x195a: 0x0311, 0x195b: 0x00b1, 0x195c: 0x0319, 0x195d: 0x0101, + 0x195e: 0x0321, 0x195f: 0x0329, 0x1960: 0x0051, 0x1961: 0x0339, 0x1962: 0x0751, 0x1963: 0x00b9, + 0x1964: 0x0089, 0x1965: 0x0341, 0x1966: 0x0349, 0x1967: 0x0391, 0x1968: 0x00c1, 0x1969: 0x0109, + 0x196a: 0x00c9, 0x196b: 0x04b1, 0x196c: 0x0019, 0x196d: 0x02e9, 0x196e: 0x03d9, 0x196f: 0x02f1, + 0x1970: 0x02f9, 0x1971: 0x03f1, 0x1972: 0x0309, 0x1973: 0x00a9, 0x1974: 0x0311, 0x1975: 0x00b1, + 0x1976: 0x0319, 0x1977: 0x0101, 0x1978: 0x0321, 0x1979: 0x0329, 0x197a: 0x0051, 0x197b: 0x0339, + 0x197c: 0x0751, 0x197d: 0x00b9, 0x197e: 0x0089, 0x197f: 0x0341, // Block 0x66, offset 0x1980 - 0x1980: 0x0279, 0x1981: 0x0369, 0x1982: 0x0289, 0x1983: 0x13d1, 0x1984: 0x0039, 0x1985: 0x0ee9, - 0x1986: 0x0040, 0x1987: 0x0ef9, 0x1988: 0x0f09, 0x1989: 0x1199, 0x198a: 0x0f31, 0x198b: 0x0040, - 0x198c: 0x0040, 0x198d: 0x0259, 0x198e: 0x0f51, 0x198f: 0x0359, 0x1990: 0x0f61, 0x1991: 0x0f71, - 0x1992: 0x00d9, 0x1993: 0x0f99, 0x1994: 0x2039, 0x1995: 0x0040, 0x1996: 0x01d9, 0x1997: 0x0fa9, - 0x1998: 0x0fb9, 0x1999: 0x1089, 0x199a: 0x0279, 0x199b: 0x0369, 0x199c: 0x0289, 0x199d: 0x0040, - 0x199e: 0x0039, 0x199f: 0x0ee9, 0x19a0: 0x1159, 0x19a1: 0x0ef9, 0x19a2: 0x0f09, 0x19a3: 0x1199, - 0x19a4: 0x0f31, 0x19a5: 0x0249, 0x19a6: 0x0f41, 0x19a7: 0x0259, 0x19a8: 0x0f51, 0x19a9: 0x0359, - 0x19aa: 0x0f61, 0x19ab: 0x0f71, 0x19ac: 0x00d9, 0x19ad: 0x0f99, 0x19ae: 0x2039, 0x19af: 0x0269, - 0x19b0: 0x01d9, 0x19b1: 0x0fa9, 0x19b2: 0x0fb9, 0x19b3: 0x1089, 0x19b4: 0x0279, 0x19b5: 0x0369, - 0x19b6: 0x0289, 0x19b7: 0x13d1, 0x19b8: 0x0039, 0x19b9: 0x0ee9, 0x19ba: 0x0040, 0x19bb: 0x0ef9, - 0x19bc: 0x0f09, 0x19bd: 0x1199, 0x19be: 0x0f31, 0x19bf: 0x0040, + 0x1980: 0x0349, 0x1981: 0x0391, 0x1982: 0x00c1, 0x1983: 0x0109, 0x1984: 0x00c9, 0x1985: 0x04b1, + 0x1986: 0x0019, 0x1987: 0x02e9, 0x1988: 0x03d9, 0x1989: 0x02f1, 0x198a: 0x02f9, 0x198b: 0x03f1, + 0x198c: 0x0309, 0x198d: 0x00a9, 0x198e: 0x0311, 0x198f: 0x00b1, 0x1990: 0x0319, 0x1991: 0x0101, + 0x1992: 0x0321, 0x1993: 0x0329, 0x1994: 0x0051, 0x1995: 0x0339, 0x1996: 0x0751, 0x1997: 0x00b9, + 0x1998: 0x0089, 0x1999: 0x0341, 0x199a: 0x0349, 0x199b: 0x0391, 0x199c: 0x00c1, 0x199d: 0x0109, + 0x199e: 0x00c9, 0x199f: 0x04b1, 0x19a0: 0x0019, 0x19a1: 0x02e9, 0x19a2: 0x03d9, 0x19a3: 0x02f1, + 0x19a4: 0x02f9, 0x19a5: 0x03f1, 0x19a6: 0x0309, 0x19a7: 0x00a9, 0x19a8: 0x0311, 0x19a9: 0x00b1, + 0x19aa: 0x0319, 0x19ab: 0x0101, 0x19ac: 0x0321, 0x19ad: 0x0329, 0x19ae: 0x0051, 0x19af: 0x0339, + 0x19b0: 0x0751, 0x19b1: 0x00b9, 0x19b2: 0x0089, 0x19b3: 0x0341, 0x19b4: 0x0349, 0x19b5: 0x0391, + 0x19b6: 0x00c1, 0x19b7: 0x0109, 0x19b8: 0x00c9, 0x19b9: 0x04b1, 0x19ba: 0x0019, 0x19bb: 0x02e9, + 0x19bc: 0x03d9, 0x19bd: 0x02f1, 0x19be: 0x02f9, 0x19bf: 0x03f1, // Block 0x67, offset 0x19c0 - 0x19c0: 0x0f41, 0x19c1: 0x0259, 0x19c2: 0x0f51, 0x19c3: 0x0359, 0x19c4: 0x0f61, 0x19c5: 0x0040, - 0x19c6: 0x00d9, 0x19c7: 0x0040, 0x19c8: 0x0040, 0x19c9: 0x0040, 0x19ca: 0x01d9, 0x19cb: 0x0fa9, - 0x19cc: 0x0fb9, 0x19cd: 0x1089, 0x19ce: 0x0279, 0x19cf: 0x0369, 0x19d0: 0x0289, 0x19d1: 0x0040, - 0x19d2: 0x0039, 0x19d3: 0x0ee9, 0x19d4: 0x1159, 0x19d5: 0x0ef9, 0x19d6: 0x0f09, 0x19d7: 0x1199, - 0x19d8: 0x0f31, 0x19d9: 0x0249, 0x19da: 0x0f41, 0x19db: 0x0259, 0x19dc: 0x0f51, 0x19dd: 0x0359, - 0x19de: 0x0f61, 0x19df: 0x0f71, 0x19e0: 0x00d9, 0x19e1: 0x0f99, 0x19e2: 0x2039, 0x19e3: 0x0269, - 0x19e4: 0x01d9, 0x19e5: 0x0fa9, 0x19e6: 0x0fb9, 0x19e7: 0x1089, 0x19e8: 0x0279, 0x19e9: 0x0369, - 0x19ea: 0x0289, 0x19eb: 0x13d1, 0x19ec: 0x0039, 0x19ed: 0x0ee9, 0x19ee: 0x1159, 0x19ef: 0x0ef9, - 0x19f0: 0x0f09, 0x19f1: 0x1199, 0x19f2: 0x0f31, 0x19f3: 0x0249, 0x19f4: 0x0f41, 0x19f5: 0x0259, - 0x19f6: 0x0f51, 0x19f7: 0x0359, 0x19f8: 0x0f61, 0x19f9: 0x0f71, 0x19fa: 0x00d9, 0x19fb: 0x0f99, - 0x19fc: 0x2039, 0x19fd: 0x0269, 0x19fe: 0x01d9, 0x19ff: 0x0fa9, + 0x19c0: 0x0309, 0x19c1: 0x00a9, 0x19c2: 0x0311, 0x19c3: 0x00b1, 0x19c4: 0x0319, 0x19c5: 0x0101, + 0x19c6: 0x0321, 0x19c7: 0x0329, 0x19c8: 0x0051, 0x19c9: 0x0339, 0x19ca: 0x0751, 0x19cb: 0x00b9, + 0x19cc: 0x0089, 0x19cd: 0x0341, 0x19ce: 0x0349, 0x19cf: 0x0391, 0x19d0: 0x00c1, 0x19d1: 0x0109, + 0x19d2: 0x00c9, 0x19d3: 0x04b1, 0x19d4: 0x0019, 0x19d5: 0x02e9, 0x19d6: 0x03d9, 0x19d7: 0x02f1, + 0x19d8: 0x02f9, 0x19d9: 0x03f1, 0x19da: 0x0309, 0x19db: 0x00a9, 0x19dc: 0x0311, 0x19dd: 0x00b1, + 0x19de: 0x0319, 0x19df: 0x0101, 0x19e0: 0x0321, 0x19e1: 0x0329, 0x19e2: 0x0051, 0x19e3: 0x0339, + 0x19e4: 0x0751, 0x19e5: 0x00b9, 0x19e6: 0x0089, 0x19e7: 0x0341, 0x19e8: 0x0349, 0x19e9: 0x0391, + 0x19ea: 0x00c1, 0x19eb: 0x0109, 0x19ec: 0x00c9, 0x19ed: 0x04b1, 0x19ee: 0x0019, 0x19ef: 0x02e9, + 0x19f0: 0x03d9, 0x19f1: 0x02f1, 0x19f2: 0x02f9, 0x19f3: 0x03f1, 0x19f4: 0x0309, 0x19f5: 0x00a9, + 0x19f6: 0x0311, 0x19f7: 0x00b1, 0x19f8: 0x0319, 0x19f9: 0x0101, 0x19fa: 0x0321, 0x19fb: 0x0329, + 0x19fc: 0x0051, 0x19fd: 0x0339, 0x19fe: 0x0751, 0x19ff: 0x00b9, // Block 0x68, offset 0x1a00 - 0x1a00: 0x0fb9, 0x1a01: 0x1089, 0x1a02: 0x0279, 0x1a03: 0x0369, 0x1a04: 0x0289, 0x1a05: 0x13d1, - 0x1a06: 0x0039, 0x1a07: 0x0ee9, 0x1a08: 0x1159, 0x1a09: 0x0ef9, 0x1a0a: 0x0f09, 0x1a0b: 0x1199, - 0x1a0c: 0x0f31, 0x1a0d: 0x0249, 0x1a0e: 0x0f41, 0x1a0f: 0x0259, 0x1a10: 0x0f51, 0x1a11: 0x0359, - 0x1a12: 0x0f61, 0x1a13: 0x0f71, 0x1a14: 0x00d9, 0x1a15: 0x0f99, 0x1a16: 0x2039, 0x1a17: 0x0269, - 0x1a18: 0x01d9, 0x1a19: 0x0fa9, 0x1a1a: 0x0fb9, 0x1a1b: 0x1089, 0x1a1c: 0x0279, 0x1a1d: 0x0369, - 0x1a1e: 0x0289, 0x1a1f: 0x13d1, 0x1a20: 0x0039, 0x1a21: 0x0ee9, 0x1a22: 0x1159, 0x1a23: 0x0ef9, - 0x1a24: 0x0f09, 0x1a25: 0x1199, 0x1a26: 0x0f31, 0x1a27: 0x0249, 0x1a28: 0x0f41, 0x1a29: 0x0259, - 0x1a2a: 0x0f51, 0x1a2b: 0x0359, 0x1a2c: 0x0f61, 0x1a2d: 0x0f71, 0x1a2e: 0x00d9, 0x1a2f: 0x0f99, - 0x1a30: 0x2039, 0x1a31: 0x0269, 0x1a32: 0x01d9, 0x1a33: 0x0fa9, 0x1a34: 0x0fb9, 0x1a35: 0x1089, - 0x1a36: 0x0279, 0x1a37: 0x0369, 0x1a38: 0x0289, 0x1a39: 0x13d1, 0x1a3a: 0x0039, 0x1a3b: 0x0ee9, - 0x1a3c: 0x1159, 0x1a3d: 0x0ef9, 0x1a3e: 0x0f09, 0x1a3f: 0x1199, + 0x1a00: 0x0089, 0x1a01: 0x0341, 0x1a02: 0x0349, 0x1a03: 0x0391, 0x1a04: 0x00c1, 0x1a05: 0x0109, + 0x1a06: 0x00c9, 0x1a07: 0x04b1, 0x1a08: 0x0019, 0x1a09: 0x02e9, 0x1a0a: 0x03d9, 0x1a0b: 0x02f1, + 0x1a0c: 0x02f9, 0x1a0d: 0x03f1, 0x1a0e: 0x0309, 0x1a0f: 0x00a9, 0x1a10: 0x0311, 0x1a11: 0x00b1, + 0x1a12: 0x0319, 0x1a13: 0x0101, 0x1a14: 0x0321, 0x1a15: 0x0329, 0x1a16: 0x0051, 0x1a17: 0x0339, + 0x1a18: 0x0751, 0x1a19: 0x00b9, 0x1a1a: 0x0089, 0x1a1b: 0x0341, 0x1a1c: 0x0349, 0x1a1d: 0x0391, + 0x1a1e: 0x00c1, 0x1a1f: 0x0109, 0x1a20: 0x00c9, 0x1a21: 0x04b1, 0x1a22: 0x0019, 0x1a23: 0x02e9, + 0x1a24: 0x03d9, 0x1a25: 0x02f1, 0x1a26: 0x02f9, 0x1a27: 0x03f1, 0x1a28: 0x0309, 0x1a29: 0x00a9, + 0x1a2a: 0x0311, 0x1a2b: 0x00b1, 0x1a2c: 0x0319, 0x1a2d: 0x0101, 0x1a2e: 0x0321, 0x1a2f: 0x0329, + 0x1a30: 0x0051, 0x1a31: 0x0339, 0x1a32: 0x0751, 0x1a33: 0x00b9, 0x1a34: 0x0089, 0x1a35: 0x0341, + 0x1a36: 0x0349, 0x1a37: 0x0391, 0x1a38: 0x00c1, 0x1a39: 0x0109, 0x1a3a: 0x00c9, 0x1a3b: 0x04b1, + 0x1a3c: 0x0019, 0x1a3d: 0x02e9, 0x1a3e: 0x03d9, 0x1a3f: 0x02f1, // Block 0x69, offset 0x1a40 - 0x1a40: 0x0f31, 0x1a41: 0x0249, 0x1a42: 0x0f41, 0x1a43: 0x0259, 0x1a44: 0x0f51, 0x1a45: 0x0359, - 0x1a46: 0x0f61, 0x1a47: 0x0f71, 0x1a48: 0x00d9, 0x1a49: 0x0f99, 0x1a4a: 0x2039, 0x1a4b: 0x0269, - 0x1a4c: 0x01d9, 0x1a4d: 0x0fa9, 0x1a4e: 0x0fb9, 0x1a4f: 0x1089, 0x1a50: 0x0279, 0x1a51: 0x0369, - 0x1a52: 0x0289, 0x1a53: 0x13d1, 0x1a54: 0x0039, 0x1a55: 0x0ee9, 0x1a56: 0x1159, 0x1a57: 0x0ef9, - 0x1a58: 0x0f09, 0x1a59: 0x1199, 0x1a5a: 0x0f31, 0x1a5b: 0x0249, 0x1a5c: 0x0f41, 0x1a5d: 0x0259, - 0x1a5e: 0x0f51, 0x1a5f: 0x0359, 0x1a60: 0x0f61, 0x1a61: 0x0f71, 0x1a62: 0x00d9, 0x1a63: 0x0f99, - 0x1a64: 0x2039, 0x1a65: 0x0269, 0x1a66: 0x01d9, 0x1a67: 0x0fa9, 0x1a68: 0x0fb9, 0x1a69: 0x1089, - 0x1a6a: 0x0279, 0x1a6b: 0x0369, 0x1a6c: 0x0289, 0x1a6d: 0x13d1, 0x1a6e: 0x0039, 0x1a6f: 0x0ee9, - 0x1a70: 0x1159, 0x1a71: 0x0ef9, 0x1a72: 0x0f09, 0x1a73: 0x1199, 0x1a74: 0x0f31, 0x1a75: 0x0249, - 0x1a76: 0x0f41, 0x1a77: 0x0259, 0x1a78: 0x0f51, 0x1a79: 0x0359, 0x1a7a: 0x0f61, 0x1a7b: 0x0f71, - 0x1a7c: 0x00d9, 0x1a7d: 0x0f99, 0x1a7e: 0x2039, 0x1a7f: 0x0269, + 0x1a40: 0x02f9, 0x1a41: 0x03f1, 0x1a42: 0x0309, 0x1a43: 0x00a9, 0x1a44: 0x0311, 0x1a45: 0x00b1, + 0x1a46: 0x0319, 0x1a47: 0x0101, 0x1a48: 0x0321, 0x1a49: 0x0329, 0x1a4a: 0x0051, 0x1a4b: 0x0339, + 0x1a4c: 0x0751, 0x1a4d: 0x00b9, 0x1a4e: 0x0089, 0x1a4f: 0x0341, 0x1a50: 0x0349, 0x1a51: 0x0391, + 0x1a52: 0x00c1, 0x1a53: 0x0109, 0x1a54: 0x00c9, 0x1a55: 0x04b1, 0x1a56: 0x0019, 0x1a57: 0x02e9, + 0x1a58: 0x03d9, 0x1a59: 0x02f1, 0x1a5a: 0x02f9, 0x1a5b: 0x03f1, 0x1a5c: 0x0309, 0x1a5d: 0x00a9, + 0x1a5e: 0x0311, 0x1a5f: 0x00b1, 0x1a60: 0x0319, 0x1a61: 0x0101, 0x1a62: 0x0321, 0x1a63: 0x0329, + 0x1a64: 0x0051, 0x1a65: 0x0339, 0x1a66: 0x0751, 0x1a67: 0x00b9, 0x1a68: 0x0089, 0x1a69: 0x0341, + 0x1a6a: 0x0349, 0x1a6b: 0x0391, 0x1a6c: 0x00c1, 0x1a6d: 0x0109, 0x1a6e: 0x00c9, 0x1a6f: 0x04b1, + 0x1a70: 0x0019, 0x1a71: 0x02e9, 0x1a72: 0x03d9, 0x1a73: 0x02f1, 0x1a74: 0x02f9, 0x1a75: 0x03f1, + 0x1a76: 0x0309, 0x1a77: 0x00a9, 0x1a78: 0x0311, 0x1a79: 0x00b1, 0x1a7a: 0x0319, 0x1a7b: 0x0101, + 0x1a7c: 0x0321, 0x1a7d: 0x0329, 0x1a7e: 0x0051, 0x1a7f: 0x0339, // Block 0x6a, offset 0x1a80 - 0x1a80: 0x01d9, 0x1a81: 0x0fa9, 0x1a82: 0x0fb9, 0x1a83: 0x1089, 0x1a84: 0x0279, 0x1a85: 0x0369, - 0x1a86: 0x0289, 0x1a87: 0x13d1, 0x1a88: 0x0039, 0x1a89: 0x0ee9, 0x1a8a: 0x1159, 0x1a8b: 0x0ef9, - 0x1a8c: 0x0f09, 0x1a8d: 0x1199, 0x1a8e: 0x0f31, 0x1a8f: 0x0249, 0x1a90: 0x0f41, 0x1a91: 0x0259, - 0x1a92: 0x0f51, 0x1a93: 0x0359, 0x1a94: 0x0f61, 0x1a95: 0x0f71, 0x1a96: 0x00d9, 0x1a97: 0x0f99, - 0x1a98: 0x2039, 0x1a99: 0x0269, 0x1a9a: 0x01d9, 0x1a9b: 0x0fa9, 0x1a9c: 0x0fb9, 0x1a9d: 0x1089, - 0x1a9e: 0x0279, 0x1a9f: 0x0369, 0x1aa0: 0x0289, 0x1aa1: 0x13d1, 0x1aa2: 0x0039, 0x1aa3: 0x0ee9, - 0x1aa4: 0x1159, 0x1aa5: 0x0ef9, 0x1aa6: 0x0f09, 0x1aa7: 0x1199, 0x1aa8: 0x0f31, 0x1aa9: 0x0249, - 0x1aaa: 0x0f41, 0x1aab: 0x0259, 0x1aac: 0x0f51, 0x1aad: 0x0359, 0x1aae: 0x0f61, 0x1aaf: 0x0f71, - 0x1ab0: 0x00d9, 0x1ab1: 0x0f99, 0x1ab2: 0x2039, 0x1ab3: 0x0269, 0x1ab4: 0x01d9, 0x1ab5: 0x0fa9, - 0x1ab6: 0x0fb9, 0x1ab7: 0x1089, 0x1ab8: 0x0279, 0x1ab9: 0x0369, 0x1aba: 0x0289, 0x1abb: 0x13d1, - 0x1abc: 0x0039, 0x1abd: 0x0ee9, 0x1abe: 0x1159, 0x1abf: 0x0ef9, + 0x1a80: 0x0751, 0x1a81: 0x00b9, 0x1a82: 0x0089, 0x1a83: 0x0341, 0x1a84: 0x0349, 0x1a85: 0x0391, + 0x1a86: 0x00c1, 0x1a87: 0x0109, 0x1a88: 0x00c9, 0x1a89: 0x04b1, 0x1a8a: 0x0019, 0x1a8b: 0x02e9, + 0x1a8c: 0x03d9, 0x1a8d: 0x02f1, 0x1a8e: 0x02f9, 0x1a8f: 0x03f1, 0x1a90: 0x0309, 0x1a91: 0x00a9, + 0x1a92: 0x0311, 0x1a93: 0x00b1, 0x1a94: 0x0319, 0x1a95: 0x0101, 0x1a96: 0x0321, 0x1a97: 0x0329, + 0x1a98: 0x0051, 0x1a99: 0x0339, 0x1a9a: 0x0751, 0x1a9b: 0x00b9, 0x1a9c: 0x0089, 0x1a9d: 0x0341, + 0x1a9e: 0x0349, 0x1a9f: 0x0391, 0x1aa0: 0x00c1, 0x1aa1: 0x0109, 0x1aa2: 0x00c9, 0x1aa3: 0x04b1, + 0x1aa4: 0x2279, 0x1aa5: 0x2281, 0x1aa6: 0x0040, 0x1aa7: 0x0040, 0x1aa8: 0x2289, 0x1aa9: 0x0399, + 0x1aaa: 0x03a1, 0x1aab: 0x03a9, 0x1aac: 0x2291, 0x1aad: 0x2299, 0x1aae: 0x22a1, 0x1aaf: 0x04d1, + 0x1ab0: 0x05f9, 0x1ab1: 0x22a9, 0x1ab2: 0x22b1, 0x1ab3: 0x22b9, 0x1ab4: 0x22c1, 0x1ab5: 0x22c9, + 0x1ab6: 0x22d1, 0x1ab7: 0x0799, 0x1ab8: 0x03c1, 0x1ab9: 0x04d1, 0x1aba: 0x22d9, 0x1abb: 0x22e1, + 0x1abc: 0x22e9, 0x1abd: 0x03b1, 0x1abe: 0x03b9, 0x1abf: 0x22f1, // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0x0f09, 0x1ac1: 0x1199, 0x1ac2: 0x0f31, 0x1ac3: 0x0249, 0x1ac4: 0x0f41, 0x1ac5: 0x0259, - 0x1ac6: 0x0f51, 0x1ac7: 0x0359, 0x1ac8: 0x0f61, 0x1ac9: 0x0f71, 0x1aca: 0x00d9, 0x1acb: 0x0f99, - 0x1acc: 0x2039, 0x1acd: 0x0269, 0x1ace: 0x01d9, 0x1acf: 0x0fa9, 0x1ad0: 0x0fb9, 0x1ad1: 0x1089, - 0x1ad2: 0x0279, 0x1ad3: 0x0369, 0x1ad4: 0x0289, 0x1ad5: 0x13d1, 0x1ad6: 0x0039, 0x1ad7: 0x0ee9, - 0x1ad8: 0x1159, 0x1ad9: 0x0ef9, 0x1ada: 0x0f09, 0x1adb: 0x1199, 0x1adc: 0x0f31, 0x1add: 0x0249, - 0x1ade: 0x0f41, 0x1adf: 0x0259, 0x1ae0: 0x0f51, 0x1ae1: 0x0359, 0x1ae2: 0x0f61, 0x1ae3: 0x0f71, - 0x1ae4: 0x00d9, 0x1ae5: 0x0f99, 0x1ae6: 0x2039, 0x1ae7: 0x0269, 0x1ae8: 0x01d9, 0x1ae9: 0x0fa9, - 0x1aea: 0x0fb9, 0x1aeb: 0x1089, 0x1aec: 0x0279, 0x1aed: 0x0369, 0x1aee: 0x0289, 0x1aef: 0x13d1, - 0x1af0: 0x0039, 0x1af1: 0x0ee9, 0x1af2: 0x1159, 0x1af3: 0x0ef9, 0x1af4: 0x0f09, 0x1af5: 0x1199, - 0x1af6: 0x0f31, 0x1af7: 0x0249, 0x1af8: 0x0f41, 0x1af9: 0x0259, 0x1afa: 0x0f51, 0x1afb: 0x0359, - 0x1afc: 0x0f61, 0x1afd: 0x0f71, 0x1afe: 0x00d9, 0x1aff: 0x0f99, + 0x1ac0: 0x0769, 0x1ac1: 0x22f9, 0x1ac2: 0x2289, 0x1ac3: 0x0399, 0x1ac4: 0x03a1, 0x1ac5: 0x03a9, + 0x1ac6: 0x2291, 0x1ac7: 0x2299, 0x1ac8: 0x22a1, 0x1ac9: 0x04d1, 0x1aca: 0x05f9, 0x1acb: 0x22a9, + 0x1acc: 0x22b1, 0x1acd: 0x22b9, 0x1ace: 0x22c1, 0x1acf: 0x22c9, 0x1ad0: 0x22d1, 0x1ad1: 0x0799, + 0x1ad2: 0x03c1, 0x1ad3: 0x22d9, 0x1ad4: 0x22d9, 0x1ad5: 0x22e1, 0x1ad6: 0x22e9, 0x1ad7: 0x03b1, + 0x1ad8: 0x03b9, 0x1ad9: 0x22f1, 0x1ada: 0x0769, 0x1adb: 0x2301, 0x1adc: 0x2291, 0x1add: 0x04d1, + 0x1ade: 0x22a9, 0x1adf: 0x03b1, 0x1ae0: 0x03c1, 0x1ae1: 0x0799, 0x1ae2: 0x2289, 0x1ae3: 0x0399, + 0x1ae4: 0x03a1, 0x1ae5: 0x03a9, 0x1ae6: 0x2291, 0x1ae7: 0x2299, 0x1ae8: 0x22a1, 0x1ae9: 0x04d1, + 0x1aea: 0x05f9, 0x1aeb: 0x22a9, 0x1aec: 0x22b1, 0x1aed: 0x22b9, 0x1aee: 0x22c1, 0x1aef: 0x22c9, + 0x1af0: 0x22d1, 0x1af1: 0x0799, 0x1af2: 0x03c1, 0x1af3: 0x04d1, 0x1af4: 0x22d9, 0x1af5: 0x22e1, + 0x1af6: 0x22e9, 0x1af7: 0x03b1, 0x1af8: 0x03b9, 0x1af9: 0x22f1, 0x1afa: 0x0769, 0x1afb: 0x22f9, + 0x1afc: 0x2289, 0x1afd: 0x0399, 0x1afe: 0x03a1, 0x1aff: 0x03a9, // Block 0x6c, offset 0x1b00 - 0x1b00: 0x2039, 0x1b01: 0x0269, 0x1b02: 0x01d9, 0x1b03: 0x0fa9, 0x1b04: 0x0fb9, 0x1b05: 0x1089, - 0x1b06: 0x0279, 0x1b07: 0x0369, 0x1b08: 0x0289, 0x1b09: 0x13d1, 0x1b0a: 0x0039, 0x1b0b: 0x0ee9, - 0x1b0c: 0x1159, 0x1b0d: 0x0ef9, 0x1b0e: 0x0f09, 0x1b0f: 0x1199, 0x1b10: 0x0f31, 0x1b11: 0x0249, - 0x1b12: 0x0f41, 0x1b13: 0x0259, 0x1b14: 0x0f51, 0x1b15: 0x0359, 0x1b16: 0x0f61, 0x1b17: 0x0f71, - 0x1b18: 0x00d9, 0x1b19: 0x0f99, 0x1b1a: 0x2039, 0x1b1b: 0x0269, 0x1b1c: 0x01d9, 0x1b1d: 0x0fa9, - 0x1b1e: 0x0fb9, 0x1b1f: 0x1089, 0x1b20: 0x0279, 0x1b21: 0x0369, 0x1b22: 0x0289, 0x1b23: 0x13d1, - 0x1b24: 0xbad1, 0x1b25: 0xbae9, 0x1b26: 0x0040, 0x1b27: 0x0040, 0x1b28: 0xbb01, 0x1b29: 0x1099, - 0x1b2a: 0x10b1, 0x1b2b: 0x10c9, 0x1b2c: 0xbb19, 0x1b2d: 0xbb31, 0x1b2e: 0xbb49, 0x1b2f: 0x1429, - 0x1b30: 0x1a31, 0x1b31: 0xbb61, 0x1b32: 0xbb79, 0x1b33: 0xbb91, 0x1b34: 0xbba9, 0x1b35: 0xbbc1, - 0x1b36: 0xbbd9, 0x1b37: 0x2109, 0x1b38: 0x1111, 0x1b39: 0x1429, 0x1b3a: 0xbbf1, 0x1b3b: 0xbc09, - 0x1b3c: 0xbc21, 0x1b3d: 0x10e1, 0x1b3e: 0x10f9, 0x1b3f: 0xbc39, + 0x1b00: 0x2291, 0x1b01: 0x2299, 0x1b02: 0x22a1, 0x1b03: 0x04d1, 0x1b04: 0x05f9, 0x1b05: 0x22a9, + 0x1b06: 0x22b1, 0x1b07: 0x22b9, 0x1b08: 0x22c1, 0x1b09: 0x22c9, 0x1b0a: 0x22d1, 0x1b0b: 0x0799, + 0x1b0c: 0x03c1, 0x1b0d: 0x22d9, 0x1b0e: 0x22d9, 0x1b0f: 0x22e1, 0x1b10: 0x22e9, 0x1b11: 0x03b1, + 0x1b12: 0x03b9, 0x1b13: 0x22f1, 0x1b14: 0x0769, 0x1b15: 0x2301, 0x1b16: 0x2291, 0x1b17: 0x04d1, + 0x1b18: 0x22a9, 0x1b19: 0x03b1, 0x1b1a: 0x03c1, 0x1b1b: 0x0799, 0x1b1c: 0x2289, 0x1b1d: 0x0399, + 0x1b1e: 0x03a1, 0x1b1f: 0x03a9, 0x1b20: 0x2291, 0x1b21: 0x2299, 0x1b22: 0x22a1, 0x1b23: 0x04d1, + 0x1b24: 0x05f9, 0x1b25: 0x22a9, 0x1b26: 0x22b1, 0x1b27: 0x22b9, 0x1b28: 0x22c1, 0x1b29: 0x22c9, + 0x1b2a: 0x22d1, 0x1b2b: 0x0799, 0x1b2c: 0x03c1, 0x1b2d: 0x04d1, 0x1b2e: 0x22d9, 0x1b2f: 0x22e1, + 0x1b30: 0x22e9, 0x1b31: 0x03b1, 0x1b32: 0x03b9, 0x1b33: 0x22f1, 0x1b34: 0x0769, 0x1b35: 0x22f9, + 0x1b36: 0x2289, 0x1b37: 0x0399, 0x1b38: 0x03a1, 0x1b39: 0x03a9, 0x1b3a: 0x2291, 0x1b3b: 0x2299, + 0x1b3c: 0x22a1, 0x1b3d: 0x04d1, 0x1b3e: 0x05f9, 0x1b3f: 0x22a9, // Block 0x6d, offset 0x1b40 - 0x1b40: 0x2079, 0x1b41: 0xbc51, 0x1b42: 0xbb01, 0x1b43: 0x1099, 0x1b44: 0x10b1, 0x1b45: 0x10c9, - 0x1b46: 0xbb19, 0x1b47: 0xbb31, 0x1b48: 0xbb49, 0x1b49: 0x1429, 0x1b4a: 0x1a31, 0x1b4b: 0xbb61, - 0x1b4c: 0xbb79, 0x1b4d: 0xbb91, 0x1b4e: 0xbba9, 0x1b4f: 0xbbc1, 0x1b50: 0xbbd9, 0x1b51: 0x2109, - 0x1b52: 0x1111, 0x1b53: 0xbbf1, 0x1b54: 0xbbf1, 0x1b55: 0xbc09, 0x1b56: 0xbc21, 0x1b57: 0x10e1, - 0x1b58: 0x10f9, 0x1b59: 0xbc39, 0x1b5a: 0x2079, 0x1b5b: 0xbc71, 0x1b5c: 0xbb19, 0x1b5d: 0x1429, - 0x1b5e: 0xbb61, 0x1b5f: 0x10e1, 0x1b60: 0x1111, 0x1b61: 0x2109, 0x1b62: 0xbb01, 0x1b63: 0x1099, - 0x1b64: 0x10b1, 0x1b65: 0x10c9, 0x1b66: 0xbb19, 0x1b67: 0xbb31, 0x1b68: 0xbb49, 0x1b69: 0x1429, - 0x1b6a: 0x1a31, 0x1b6b: 0xbb61, 0x1b6c: 0xbb79, 0x1b6d: 0xbb91, 0x1b6e: 0xbba9, 0x1b6f: 0xbbc1, - 0x1b70: 0xbbd9, 0x1b71: 0x2109, 0x1b72: 0x1111, 0x1b73: 0x1429, 0x1b74: 0xbbf1, 0x1b75: 0xbc09, - 0x1b76: 0xbc21, 0x1b77: 0x10e1, 0x1b78: 0x10f9, 0x1b79: 0xbc39, 0x1b7a: 0x2079, 0x1b7b: 0xbc51, - 0x1b7c: 0xbb01, 0x1b7d: 0x1099, 0x1b7e: 0x10b1, 0x1b7f: 0x10c9, + 0x1b40: 0x22b1, 0x1b41: 0x22b9, 0x1b42: 0x22c1, 0x1b43: 0x22c9, 0x1b44: 0x22d1, 0x1b45: 0x0799, + 0x1b46: 0x03c1, 0x1b47: 0x22d9, 0x1b48: 0x22d9, 0x1b49: 0x22e1, 0x1b4a: 0x22e9, 0x1b4b: 0x03b1, + 0x1b4c: 0x03b9, 0x1b4d: 0x22f1, 0x1b4e: 0x0769, 0x1b4f: 0x2301, 0x1b50: 0x2291, 0x1b51: 0x04d1, + 0x1b52: 0x22a9, 0x1b53: 0x03b1, 0x1b54: 0x03c1, 0x1b55: 0x0799, 0x1b56: 0x2289, 0x1b57: 0x0399, + 0x1b58: 0x03a1, 0x1b59: 0x03a9, 0x1b5a: 0x2291, 0x1b5b: 0x2299, 0x1b5c: 0x22a1, 0x1b5d: 0x04d1, + 0x1b5e: 0x05f9, 0x1b5f: 0x22a9, 0x1b60: 0x22b1, 0x1b61: 0x22b9, 0x1b62: 0x22c1, 0x1b63: 0x22c9, + 0x1b64: 0x22d1, 0x1b65: 0x0799, 0x1b66: 0x03c1, 0x1b67: 0x04d1, 0x1b68: 0x22d9, 0x1b69: 0x22e1, + 0x1b6a: 0x22e9, 0x1b6b: 0x03b1, 0x1b6c: 0x03b9, 0x1b6d: 0x22f1, 0x1b6e: 0x0769, 0x1b6f: 0x22f9, + 0x1b70: 0x2289, 0x1b71: 0x0399, 0x1b72: 0x03a1, 0x1b73: 0x03a9, 0x1b74: 0x2291, 0x1b75: 0x2299, + 0x1b76: 0x22a1, 0x1b77: 0x04d1, 0x1b78: 0x05f9, 0x1b79: 0x22a9, 0x1b7a: 0x22b1, 0x1b7b: 0x22b9, + 0x1b7c: 0x22c1, 0x1b7d: 0x22c9, 0x1b7e: 0x22d1, 0x1b7f: 0x0799, // Block 0x6e, offset 0x1b80 - 0x1b80: 0xbb19, 0x1b81: 0xbb31, 0x1b82: 0xbb49, 0x1b83: 0x1429, 0x1b84: 0x1a31, 0x1b85: 0xbb61, - 0x1b86: 0xbb79, 0x1b87: 0xbb91, 0x1b88: 0xbba9, 0x1b89: 0xbbc1, 0x1b8a: 0xbbd9, 0x1b8b: 0x2109, - 0x1b8c: 0x1111, 0x1b8d: 0xbbf1, 0x1b8e: 0xbbf1, 0x1b8f: 0xbc09, 0x1b90: 0xbc21, 0x1b91: 0x10e1, - 0x1b92: 0x10f9, 0x1b93: 0xbc39, 0x1b94: 0x2079, 0x1b95: 0xbc71, 0x1b96: 0xbb19, 0x1b97: 0x1429, - 0x1b98: 0xbb61, 0x1b99: 0x10e1, 0x1b9a: 0x1111, 0x1b9b: 0x2109, 0x1b9c: 0xbb01, 0x1b9d: 0x1099, - 0x1b9e: 0x10b1, 0x1b9f: 0x10c9, 0x1ba0: 0xbb19, 0x1ba1: 0xbb31, 0x1ba2: 0xbb49, 0x1ba3: 0x1429, - 0x1ba4: 0x1a31, 0x1ba5: 0xbb61, 0x1ba6: 0xbb79, 0x1ba7: 0xbb91, 0x1ba8: 0xbba9, 0x1ba9: 0xbbc1, - 0x1baa: 0xbbd9, 0x1bab: 0x2109, 0x1bac: 0x1111, 0x1bad: 0x1429, 0x1bae: 0xbbf1, 0x1baf: 0xbc09, - 0x1bb0: 0xbc21, 0x1bb1: 0x10e1, 0x1bb2: 0x10f9, 0x1bb3: 0xbc39, 0x1bb4: 0x2079, 0x1bb5: 0xbc51, - 0x1bb6: 0xbb01, 0x1bb7: 0x1099, 0x1bb8: 0x10b1, 0x1bb9: 0x10c9, 0x1bba: 0xbb19, 0x1bbb: 0xbb31, - 0x1bbc: 0xbb49, 0x1bbd: 0x1429, 0x1bbe: 0x1a31, 0x1bbf: 0xbb61, + 0x1b80: 0x03c1, 0x1b81: 0x22d9, 0x1b82: 0x22d9, 0x1b83: 0x22e1, 0x1b84: 0x22e9, 0x1b85: 0x03b1, + 0x1b86: 0x03b9, 0x1b87: 0x22f1, 0x1b88: 0x0769, 0x1b89: 0x2301, 0x1b8a: 0x2291, 0x1b8b: 0x04d1, + 0x1b8c: 0x22a9, 0x1b8d: 0x03b1, 0x1b8e: 0x03c1, 0x1b8f: 0x0799, 0x1b90: 0x2289, 0x1b91: 0x0399, + 0x1b92: 0x03a1, 0x1b93: 0x03a9, 0x1b94: 0x2291, 0x1b95: 0x2299, 0x1b96: 0x22a1, 0x1b97: 0x04d1, + 0x1b98: 0x05f9, 0x1b99: 0x22a9, 0x1b9a: 0x22b1, 0x1b9b: 0x22b9, 0x1b9c: 0x22c1, 0x1b9d: 0x22c9, + 0x1b9e: 0x22d1, 0x1b9f: 0x0799, 0x1ba0: 0x03c1, 0x1ba1: 0x04d1, 0x1ba2: 0x22d9, 0x1ba3: 0x22e1, + 0x1ba4: 0x22e9, 0x1ba5: 0x03b1, 0x1ba6: 0x03b9, 0x1ba7: 0x22f1, 0x1ba8: 0x0769, 0x1ba9: 0x22f9, + 0x1baa: 0x2289, 0x1bab: 0x0399, 0x1bac: 0x03a1, 0x1bad: 0x03a9, 0x1bae: 0x2291, 0x1baf: 0x2299, + 0x1bb0: 0x22a1, 0x1bb1: 0x04d1, 0x1bb2: 0x05f9, 0x1bb3: 0x22a9, 0x1bb4: 0x22b1, 0x1bb5: 0x22b9, + 0x1bb6: 0x22c1, 0x1bb7: 0x22c9, 0x1bb8: 0x22d1, 0x1bb9: 0x0799, 0x1bba: 0x03c1, 0x1bbb: 0x22d9, + 0x1bbc: 0x22d9, 0x1bbd: 0x22e1, 0x1bbe: 0x22e9, 0x1bbf: 0x03b1, // Block 0x6f, offset 0x1bc0 - 0x1bc0: 0xbb79, 0x1bc1: 0xbb91, 0x1bc2: 0xbba9, 0x1bc3: 0xbbc1, 0x1bc4: 0xbbd9, 0x1bc5: 0x2109, - 0x1bc6: 0x1111, 0x1bc7: 0xbbf1, 0x1bc8: 0xbbf1, 0x1bc9: 0xbc09, 0x1bca: 0xbc21, 0x1bcb: 0x10e1, - 0x1bcc: 0x10f9, 0x1bcd: 0xbc39, 0x1bce: 0x2079, 0x1bcf: 0xbc71, 0x1bd0: 0xbb19, 0x1bd1: 0x1429, - 0x1bd2: 0xbb61, 0x1bd3: 0x10e1, 0x1bd4: 0x1111, 0x1bd5: 0x2109, 0x1bd6: 0xbb01, 0x1bd7: 0x1099, - 0x1bd8: 0x10b1, 0x1bd9: 0x10c9, 0x1bda: 0xbb19, 0x1bdb: 0xbb31, 0x1bdc: 0xbb49, 0x1bdd: 0x1429, - 0x1bde: 0x1a31, 0x1bdf: 0xbb61, 0x1be0: 0xbb79, 0x1be1: 0xbb91, 0x1be2: 0xbba9, 0x1be3: 0xbbc1, - 0x1be4: 0xbbd9, 0x1be5: 0x2109, 0x1be6: 0x1111, 0x1be7: 0x1429, 0x1be8: 0xbbf1, 0x1be9: 0xbc09, - 0x1bea: 0xbc21, 0x1beb: 0x10e1, 0x1bec: 0x10f9, 0x1bed: 0xbc39, 0x1bee: 0x2079, 0x1bef: 0xbc51, - 0x1bf0: 0xbb01, 0x1bf1: 0x1099, 0x1bf2: 0x10b1, 0x1bf3: 0x10c9, 0x1bf4: 0xbb19, 0x1bf5: 0xbb31, - 0x1bf6: 0xbb49, 0x1bf7: 0x1429, 0x1bf8: 0x1a31, 0x1bf9: 0xbb61, 0x1bfa: 0xbb79, 0x1bfb: 0xbb91, - 0x1bfc: 0xbba9, 0x1bfd: 0xbbc1, 0x1bfe: 0xbbd9, 0x1bff: 0x2109, + 0x1bc0: 0x03b9, 0x1bc1: 0x22f1, 0x1bc2: 0x0769, 0x1bc3: 0x2301, 0x1bc4: 0x2291, 0x1bc5: 0x04d1, + 0x1bc6: 0x22a9, 0x1bc7: 0x03b1, 0x1bc8: 0x03c1, 0x1bc9: 0x0799, 0x1bca: 0x2309, 0x1bcb: 0x2309, + 0x1bcc: 0x0040, 0x1bcd: 0x0040, 0x1bce: 0x06e1, 0x1bcf: 0x0049, 0x1bd0: 0x0029, 0x1bd1: 0x0031, + 0x1bd2: 0x06e9, 0x1bd3: 0x06f1, 0x1bd4: 0x06f9, 0x1bd5: 0x0701, 0x1bd6: 0x0709, 0x1bd7: 0x0711, + 0x1bd8: 0x06e1, 0x1bd9: 0x0049, 0x1bda: 0x0029, 0x1bdb: 0x0031, 0x1bdc: 0x06e9, 0x1bdd: 0x06f1, + 0x1bde: 0x06f9, 0x1bdf: 0x0701, 0x1be0: 0x0709, 0x1be1: 0x0711, 0x1be2: 0x06e1, 0x1be3: 0x0049, + 0x1be4: 0x0029, 0x1be5: 0x0031, 0x1be6: 0x06e9, 0x1be7: 0x06f1, 0x1be8: 0x06f9, 0x1be9: 0x0701, + 0x1bea: 0x0709, 0x1beb: 0x0711, 0x1bec: 0x06e1, 0x1bed: 0x0049, 0x1bee: 0x0029, 0x1bef: 0x0031, + 0x1bf0: 0x06e9, 0x1bf1: 0x06f1, 0x1bf2: 0x06f9, 0x1bf3: 0x0701, 0x1bf4: 0x0709, 0x1bf5: 0x0711, + 0x1bf6: 0x06e1, 0x1bf7: 0x0049, 0x1bf8: 0x0029, 0x1bf9: 0x0031, 0x1bfa: 0x06e9, 0x1bfb: 0x06f1, + 0x1bfc: 0x06f9, 0x1bfd: 0x0701, 0x1bfe: 0x0709, 0x1bff: 0x0711, // Block 0x70, offset 0x1c00 - 0x1c00: 0x1111, 0x1c01: 0xbbf1, 0x1c02: 0xbbf1, 0x1c03: 0xbc09, 0x1c04: 0xbc21, 0x1c05: 0x10e1, - 0x1c06: 0x10f9, 0x1c07: 0xbc39, 0x1c08: 0x2079, 0x1c09: 0xbc71, 0x1c0a: 0xbb19, 0x1c0b: 0x1429, - 0x1c0c: 0xbb61, 0x1c0d: 0x10e1, 0x1c0e: 0x1111, 0x1c0f: 0x2109, 0x1c10: 0xbb01, 0x1c11: 0x1099, - 0x1c12: 0x10b1, 0x1c13: 0x10c9, 0x1c14: 0xbb19, 0x1c15: 0xbb31, 0x1c16: 0xbb49, 0x1c17: 0x1429, - 0x1c18: 0x1a31, 0x1c19: 0xbb61, 0x1c1a: 0xbb79, 0x1c1b: 0xbb91, 0x1c1c: 0xbba9, 0x1c1d: 0xbbc1, - 0x1c1e: 0xbbd9, 0x1c1f: 0x2109, 0x1c20: 0x1111, 0x1c21: 0x1429, 0x1c22: 0xbbf1, 0x1c23: 0xbc09, - 0x1c24: 0xbc21, 0x1c25: 0x10e1, 0x1c26: 0x10f9, 0x1c27: 0xbc39, 0x1c28: 0x2079, 0x1c29: 0xbc51, - 0x1c2a: 0xbb01, 0x1c2b: 0x1099, 0x1c2c: 0x10b1, 0x1c2d: 0x10c9, 0x1c2e: 0xbb19, 0x1c2f: 0xbb31, - 0x1c30: 0xbb49, 0x1c31: 0x1429, 0x1c32: 0x1a31, 0x1c33: 0xbb61, 0x1c34: 0xbb79, 0x1c35: 0xbb91, - 0x1c36: 0xbba9, 0x1c37: 0xbbc1, 0x1c38: 0xbbd9, 0x1c39: 0x2109, 0x1c3a: 0x1111, 0x1c3b: 0xbbf1, - 0x1c3c: 0xbbf1, 0x1c3d: 0xbc09, 0x1c3e: 0xbc21, 0x1c3f: 0x10e1, + 0x1c00: 0xe115, 0x1c01: 0xe115, 0x1c02: 0xe135, 0x1c03: 0xe135, 0x1c04: 0xe115, 0x1c05: 0xe115, + 0x1c06: 0xe175, 0x1c07: 0xe175, 0x1c08: 0xe115, 0x1c09: 0xe115, 0x1c0a: 0xe135, 0x1c0b: 0xe135, + 0x1c0c: 0xe115, 0x1c0d: 0xe115, 0x1c0e: 0xe1f5, 0x1c0f: 0xe1f5, 0x1c10: 0xe115, 0x1c11: 0xe115, + 0x1c12: 0xe135, 0x1c13: 0xe135, 0x1c14: 0xe115, 0x1c15: 0xe115, 0x1c16: 0xe175, 0x1c17: 0xe175, + 0x1c18: 0xe115, 0x1c19: 0xe115, 0x1c1a: 0xe135, 0x1c1b: 0xe135, 0x1c1c: 0xe115, 0x1c1d: 0xe115, + 0x1c1e: 0x8b3d, 0x1c1f: 0x8b3d, 0x1c20: 0x04b5, 0x1c21: 0x04b5, 0x1c22: 0x0a08, 0x1c23: 0x0a08, + 0x1c24: 0x0a08, 0x1c25: 0x0a08, 0x1c26: 0x0a08, 0x1c27: 0x0a08, 0x1c28: 0x0a08, 0x1c29: 0x0a08, + 0x1c2a: 0x0a08, 0x1c2b: 0x0a08, 0x1c2c: 0x0a08, 0x1c2d: 0x0a08, 0x1c2e: 0x0a08, 0x1c2f: 0x0a08, + 0x1c30: 0x0a08, 0x1c31: 0x0a08, 0x1c32: 0x0a08, 0x1c33: 0x0a08, 0x1c34: 0x0a08, 0x1c35: 0x0a08, + 0x1c36: 0x0a08, 0x1c37: 0x0a08, 0x1c38: 0x0a08, 0x1c39: 0x0a08, 0x1c3a: 0x0a08, 0x1c3b: 0x0a08, + 0x1c3c: 0x0a08, 0x1c3d: 0x0a08, 0x1c3e: 0x0a08, 0x1c3f: 0x0a08, // Block 0x71, offset 0x1c40 - 0x1c40: 0x10f9, 0x1c41: 0xbc39, 0x1c42: 0x2079, 0x1c43: 0xbc71, 0x1c44: 0xbb19, 0x1c45: 0x1429, - 0x1c46: 0xbb61, 0x1c47: 0x10e1, 0x1c48: 0x1111, 0x1c49: 0x2109, 0x1c4a: 0xbc91, 0x1c4b: 0xbc91, - 0x1c4c: 0x0040, 0x1c4d: 0x0040, 0x1c4e: 0x1f41, 0x1c4f: 0x00c9, 0x1c50: 0x0069, 0x1c51: 0x0079, - 0x1c52: 0x1f51, 0x1c53: 0x1f61, 0x1c54: 0x1f71, 0x1c55: 0x1f81, 0x1c56: 0x1f91, 0x1c57: 0x1fa1, - 0x1c58: 0x1f41, 0x1c59: 0x00c9, 0x1c5a: 0x0069, 0x1c5b: 0x0079, 0x1c5c: 0x1f51, 0x1c5d: 0x1f61, - 0x1c5e: 0x1f71, 0x1c5f: 0x1f81, 0x1c60: 0x1f91, 0x1c61: 0x1fa1, 0x1c62: 0x1f41, 0x1c63: 0x00c9, - 0x1c64: 0x0069, 0x1c65: 0x0079, 0x1c66: 0x1f51, 0x1c67: 0x1f61, 0x1c68: 0x1f71, 0x1c69: 0x1f81, - 0x1c6a: 0x1f91, 0x1c6b: 0x1fa1, 0x1c6c: 0x1f41, 0x1c6d: 0x00c9, 0x1c6e: 0x0069, 0x1c6f: 0x0079, - 0x1c70: 0x1f51, 0x1c71: 0x1f61, 0x1c72: 0x1f71, 0x1c73: 0x1f81, 0x1c74: 0x1f91, 0x1c75: 0x1fa1, - 0x1c76: 0x1f41, 0x1c77: 0x00c9, 0x1c78: 0x0069, 0x1c79: 0x0079, 0x1c7a: 0x1f51, 0x1c7b: 0x1f61, - 0x1c7c: 0x1f71, 0x1c7d: 0x1f81, 0x1c7e: 0x1f91, 0x1c7f: 0x1fa1, + 0x1c40: 0x20b1, 0x1c41: 0x20b9, 0x1c42: 0x20d9, 0x1c43: 0x20f1, 0x1c44: 0x0040, 0x1c45: 0x2189, + 0x1c46: 0x2109, 0x1c47: 0x20e1, 0x1c48: 0x2131, 0x1c49: 0x2191, 0x1c4a: 0x2161, 0x1c4b: 0x2169, + 0x1c4c: 0x2171, 0x1c4d: 0x2179, 0x1c4e: 0x2111, 0x1c4f: 0x2141, 0x1c50: 0x2151, 0x1c51: 0x2121, + 0x1c52: 0x2159, 0x1c53: 0x2101, 0x1c54: 0x2119, 0x1c55: 0x20c9, 0x1c56: 0x20d1, 0x1c57: 0x20e9, + 0x1c58: 0x20f9, 0x1c59: 0x2129, 0x1c5a: 0x2139, 0x1c5b: 0x2149, 0x1c5c: 0x2311, 0x1c5d: 0x1689, + 0x1c5e: 0x2319, 0x1c5f: 0x2321, 0x1c60: 0x0040, 0x1c61: 0x20b9, 0x1c62: 0x20d9, 0x1c63: 0x0040, + 0x1c64: 0x2181, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0x20e1, 0x1c68: 0x0040, 0x1c69: 0x2191, + 0x1c6a: 0x2161, 0x1c6b: 0x2169, 0x1c6c: 0x2171, 0x1c6d: 0x2179, 0x1c6e: 0x2111, 0x1c6f: 0x2141, + 0x1c70: 0x2151, 0x1c71: 0x2121, 0x1c72: 0x2159, 0x1c73: 0x0040, 0x1c74: 0x2119, 0x1c75: 0x20c9, + 0x1c76: 0x20d1, 0x1c77: 0x20e9, 0x1c78: 0x0040, 0x1c79: 0x2129, 0x1c7a: 0x0040, 0x1c7b: 0x2149, + 0x1c7c: 0x0040, 0x1c7d: 0x0040, 0x1c7e: 0x0040, 0x1c7f: 0x0040, // Block 0x72, offset 0x1c80 - 0x1c80: 0xe115, 0x1c81: 0xe115, 0x1c82: 0xe135, 0x1c83: 0xe135, 0x1c84: 0xe115, 0x1c85: 0xe115, - 0x1c86: 0xe175, 0x1c87: 0xe175, 0x1c88: 0xe115, 0x1c89: 0xe115, 0x1c8a: 0xe135, 0x1c8b: 0xe135, - 0x1c8c: 0xe115, 0x1c8d: 0xe115, 0x1c8e: 0xe1f5, 0x1c8f: 0xe1f5, 0x1c90: 0xe115, 0x1c91: 0xe115, - 0x1c92: 0xe135, 0x1c93: 0xe135, 0x1c94: 0xe115, 0x1c95: 0xe115, 0x1c96: 0xe175, 0x1c97: 0xe175, - 0x1c98: 0xe115, 0x1c99: 0xe115, 0x1c9a: 0xe135, 0x1c9b: 0xe135, 0x1c9c: 0xe115, 0x1c9d: 0xe115, - 0x1c9e: 0x8b3d, 0x1c9f: 0x8b3d, 0x1ca0: 0x04b5, 0x1ca1: 0x04b5, 0x1ca2: 0x0a08, 0x1ca3: 0x0a08, - 0x1ca4: 0x0a08, 0x1ca5: 0x0a08, 0x1ca6: 0x0a08, 0x1ca7: 0x0a08, 0x1ca8: 0x0a08, 0x1ca9: 0x0a08, - 0x1caa: 0x0a08, 0x1cab: 0x0a08, 0x1cac: 0x0a08, 0x1cad: 0x0a08, 0x1cae: 0x0a08, 0x1caf: 0x0a08, - 0x1cb0: 0x0a08, 0x1cb1: 0x0a08, 0x1cb2: 0x0a08, 0x1cb3: 0x0a08, 0x1cb4: 0x0a08, 0x1cb5: 0x0a08, - 0x1cb6: 0x0a08, 0x1cb7: 0x0a08, 0x1cb8: 0x0a08, 0x1cb9: 0x0a08, 0x1cba: 0x0a08, 0x1cbb: 0x0a08, - 0x1cbc: 0x0a08, 0x1cbd: 0x0a08, 0x1cbe: 0x0a08, 0x1cbf: 0x0a08, + 0x1c80: 0x0040, 0x1c81: 0x0040, 0x1c82: 0x20d9, 0x1c83: 0x0040, 0x1c84: 0x0040, 0x1c85: 0x0040, + 0x1c86: 0x0040, 0x1c87: 0x20e1, 0x1c88: 0x0040, 0x1c89: 0x2191, 0x1c8a: 0x0040, 0x1c8b: 0x2169, + 0x1c8c: 0x0040, 0x1c8d: 0x2179, 0x1c8e: 0x2111, 0x1c8f: 0x2141, 0x1c90: 0x0040, 0x1c91: 0x2121, + 0x1c92: 0x2159, 0x1c93: 0x0040, 0x1c94: 0x2119, 0x1c95: 0x0040, 0x1c96: 0x0040, 0x1c97: 0x20e9, + 0x1c98: 0x0040, 0x1c99: 0x2129, 0x1c9a: 0x0040, 0x1c9b: 0x2149, 0x1c9c: 0x0040, 0x1c9d: 0x1689, + 0x1c9e: 0x0040, 0x1c9f: 0x2321, 0x1ca0: 0x0040, 0x1ca1: 0x20b9, 0x1ca2: 0x20d9, 0x1ca3: 0x0040, + 0x1ca4: 0x2181, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0x20e1, 0x1ca8: 0x2131, 0x1ca9: 0x2191, + 0x1caa: 0x2161, 0x1cab: 0x0040, 0x1cac: 0x2171, 0x1cad: 0x2179, 0x1cae: 0x2111, 0x1caf: 0x2141, + 0x1cb0: 0x2151, 0x1cb1: 0x2121, 0x1cb2: 0x2159, 0x1cb3: 0x0040, 0x1cb4: 0x2119, 0x1cb5: 0x20c9, + 0x1cb6: 0x20d1, 0x1cb7: 0x20e9, 0x1cb8: 0x0040, 0x1cb9: 0x2129, 0x1cba: 0x2139, 0x1cbb: 0x2149, + 0x1cbc: 0x2311, 0x1cbd: 0x0040, 0x1cbe: 0x2319, 0x1cbf: 0x0040, // Block 0x73, offset 0x1cc0 - 0x1cc0: 0xb1d9, 0x1cc1: 0xb1f1, 0x1cc2: 0xb251, 0x1cc3: 0xb299, 0x1cc4: 0x0040, 0x1cc5: 0xb461, - 0x1cc6: 0xb2e1, 0x1cc7: 0xb269, 0x1cc8: 0xb359, 0x1cc9: 0xb479, 0x1cca: 0xb3e9, 0x1ccb: 0xb401, - 0x1ccc: 0xb419, 0x1ccd: 0xb431, 0x1cce: 0xb2f9, 0x1ccf: 0xb389, 0x1cd0: 0xb3b9, 0x1cd1: 0xb329, - 0x1cd2: 0xb3d1, 0x1cd3: 0xb2c9, 0x1cd4: 0xb311, 0x1cd5: 0xb221, 0x1cd6: 0xb239, 0x1cd7: 0xb281, - 0x1cd8: 0xb2b1, 0x1cd9: 0xb341, 0x1cda: 0xb371, 0x1cdb: 0xb3a1, 0x1cdc: 0xbca9, 0x1cdd: 0x7999, - 0x1cde: 0xbcc1, 0x1cdf: 0xbcd9, 0x1ce0: 0x0040, 0x1ce1: 0xb1f1, 0x1ce2: 0xb251, 0x1ce3: 0x0040, - 0x1ce4: 0xb449, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb269, 0x1ce8: 0x0040, 0x1ce9: 0xb479, - 0x1cea: 0xb3e9, 0x1ceb: 0xb401, 0x1cec: 0xb419, 0x1ced: 0xb431, 0x1cee: 0xb2f9, 0x1cef: 0xb389, - 0x1cf0: 0xb3b9, 0x1cf1: 0xb329, 0x1cf2: 0xb3d1, 0x1cf3: 0x0040, 0x1cf4: 0xb311, 0x1cf5: 0xb221, - 0x1cf6: 0xb239, 0x1cf7: 0xb281, 0x1cf8: 0x0040, 0x1cf9: 0xb341, 0x1cfa: 0x0040, 0x1cfb: 0xb3a1, + 0x1cc0: 0x20b1, 0x1cc1: 0x20b9, 0x1cc2: 0x20d9, 0x1cc3: 0x20f1, 0x1cc4: 0x2181, 0x1cc5: 0x2189, + 0x1cc6: 0x2109, 0x1cc7: 0x20e1, 0x1cc8: 0x2131, 0x1cc9: 0x2191, 0x1cca: 0x0040, 0x1ccb: 0x2169, + 0x1ccc: 0x2171, 0x1ccd: 0x2179, 0x1cce: 0x2111, 0x1ccf: 0x2141, 0x1cd0: 0x2151, 0x1cd1: 0x2121, + 0x1cd2: 0x2159, 0x1cd3: 0x2101, 0x1cd4: 0x2119, 0x1cd5: 0x20c9, 0x1cd6: 0x20d1, 0x1cd7: 0x20e9, + 0x1cd8: 0x20f9, 0x1cd9: 0x2129, 0x1cda: 0x2139, 0x1cdb: 0x2149, 0x1cdc: 0x0040, 0x1cdd: 0x0040, + 0x1cde: 0x0040, 0x1cdf: 0x0040, 0x1ce0: 0x0040, 0x1ce1: 0x20b9, 0x1ce2: 0x20d9, 0x1ce3: 0x20f1, + 0x1ce4: 0x0040, 0x1ce5: 0x2189, 0x1ce6: 0x2109, 0x1ce7: 0x20e1, 0x1ce8: 0x2131, 0x1ce9: 0x2191, + 0x1cea: 0x0040, 0x1ceb: 0x2169, 0x1cec: 0x2171, 0x1ced: 0x2179, 0x1cee: 0x2111, 0x1cef: 0x2141, + 0x1cf0: 0x2151, 0x1cf1: 0x2121, 0x1cf2: 0x2159, 0x1cf3: 0x2101, 0x1cf4: 0x2119, 0x1cf5: 0x20c9, + 0x1cf6: 0x20d1, 0x1cf7: 0x20e9, 0x1cf8: 0x20f9, 0x1cf9: 0x2129, 0x1cfa: 0x2139, 0x1cfb: 0x2149, 0x1cfc: 0x0040, 0x1cfd: 0x0040, 0x1cfe: 0x0040, 0x1cff: 0x0040, // Block 0x74, offset 0x1d00 - 0x1d00: 0x0040, 0x1d01: 0x0040, 0x1d02: 0xb251, 0x1d03: 0x0040, 0x1d04: 0x0040, 0x1d05: 0x0040, - 0x1d06: 0x0040, 0x1d07: 0xb269, 0x1d08: 0x0040, 0x1d09: 0xb479, 0x1d0a: 0x0040, 0x1d0b: 0xb401, - 0x1d0c: 0x0040, 0x1d0d: 0xb431, 0x1d0e: 0xb2f9, 0x1d0f: 0xb389, 0x1d10: 0x0040, 0x1d11: 0xb329, - 0x1d12: 0xb3d1, 0x1d13: 0x0040, 0x1d14: 0xb311, 0x1d15: 0x0040, 0x1d16: 0x0040, 0x1d17: 0xb281, - 0x1d18: 0x0040, 0x1d19: 0xb341, 0x1d1a: 0x0040, 0x1d1b: 0xb3a1, 0x1d1c: 0x0040, 0x1d1d: 0x7999, - 0x1d1e: 0x0040, 0x1d1f: 0xbcd9, 0x1d20: 0x0040, 0x1d21: 0xb1f1, 0x1d22: 0xb251, 0x1d23: 0x0040, - 0x1d24: 0xb449, 0x1d25: 0x0040, 0x1d26: 0x0040, 0x1d27: 0xb269, 0x1d28: 0xb359, 0x1d29: 0xb479, - 0x1d2a: 0xb3e9, 0x1d2b: 0x0040, 0x1d2c: 0xb419, 0x1d2d: 0xb431, 0x1d2e: 0xb2f9, 0x1d2f: 0xb389, - 0x1d30: 0xb3b9, 0x1d31: 0xb329, 0x1d32: 0xb3d1, 0x1d33: 0x0040, 0x1d34: 0xb311, 0x1d35: 0xb221, - 0x1d36: 0xb239, 0x1d37: 0xb281, 0x1d38: 0x0040, 0x1d39: 0xb341, 0x1d3a: 0xb371, 0x1d3b: 0xb3a1, - 0x1d3c: 0xbca9, 0x1d3d: 0x0040, 0x1d3e: 0xbcc1, 0x1d3f: 0x0040, + 0x1d00: 0x0040, 0x1d01: 0x232a, 0x1d02: 0x2332, 0x1d03: 0x233a, 0x1d04: 0x2342, 0x1d05: 0x234a, + 0x1d06: 0x2352, 0x1d07: 0x235a, 0x1d08: 0x2362, 0x1d09: 0x236a, 0x1d0a: 0x2372, 0x1d0b: 0x0018, + 0x1d0c: 0x0018, 0x1d0d: 0x0018, 0x1d0e: 0x0018, 0x1d0f: 0x0018, 0x1d10: 0x237a, 0x1d11: 0x2382, + 0x1d12: 0x238a, 0x1d13: 0x2392, 0x1d14: 0x239a, 0x1d15: 0x23a2, 0x1d16: 0x23aa, 0x1d17: 0x23b2, + 0x1d18: 0x23ba, 0x1d19: 0x23c2, 0x1d1a: 0x23ca, 0x1d1b: 0x23d2, 0x1d1c: 0x23da, 0x1d1d: 0x23e2, + 0x1d1e: 0x23ea, 0x1d1f: 0x23f2, 0x1d20: 0x23fa, 0x1d21: 0x2402, 0x1d22: 0x240a, 0x1d23: 0x2412, + 0x1d24: 0x241a, 0x1d25: 0x2422, 0x1d26: 0x242a, 0x1d27: 0x2432, 0x1d28: 0x243a, 0x1d29: 0x2442, + 0x1d2a: 0x2449, 0x1d2b: 0x03d9, 0x1d2c: 0x00b9, 0x1d2d: 0x1239, 0x1d2e: 0x2451, 0x1d2f: 0x0018, + 0x1d30: 0x0019, 0x1d31: 0x02e9, 0x1d32: 0x03d9, 0x1d33: 0x02f1, 0x1d34: 0x02f9, 0x1d35: 0x03f1, + 0x1d36: 0x0309, 0x1d37: 0x00a9, 0x1d38: 0x0311, 0x1d39: 0x00b1, 0x1d3a: 0x0319, 0x1d3b: 0x0101, + 0x1d3c: 0x0321, 0x1d3d: 0x0329, 0x1d3e: 0x0051, 0x1d3f: 0x0339, // Block 0x75, offset 0x1d40 - 0x1d40: 0xb1d9, 0x1d41: 0xb1f1, 0x1d42: 0xb251, 0x1d43: 0xb299, 0x1d44: 0xb449, 0x1d45: 0xb461, - 0x1d46: 0xb2e1, 0x1d47: 0xb269, 0x1d48: 0xb359, 0x1d49: 0xb479, 0x1d4a: 0x0040, 0x1d4b: 0xb401, - 0x1d4c: 0xb419, 0x1d4d: 0xb431, 0x1d4e: 0xb2f9, 0x1d4f: 0xb389, 0x1d50: 0xb3b9, 0x1d51: 0xb329, - 0x1d52: 0xb3d1, 0x1d53: 0xb2c9, 0x1d54: 0xb311, 0x1d55: 0xb221, 0x1d56: 0xb239, 0x1d57: 0xb281, - 0x1d58: 0xb2b1, 0x1d59: 0xb341, 0x1d5a: 0xb371, 0x1d5b: 0xb3a1, 0x1d5c: 0x0040, 0x1d5d: 0x0040, - 0x1d5e: 0x0040, 0x1d5f: 0x0040, 0x1d60: 0x0040, 0x1d61: 0xb1f1, 0x1d62: 0xb251, 0x1d63: 0xb299, - 0x1d64: 0x0040, 0x1d65: 0xb461, 0x1d66: 0xb2e1, 0x1d67: 0xb269, 0x1d68: 0xb359, 0x1d69: 0xb479, - 0x1d6a: 0x0040, 0x1d6b: 0xb401, 0x1d6c: 0xb419, 0x1d6d: 0xb431, 0x1d6e: 0xb2f9, 0x1d6f: 0xb389, - 0x1d70: 0xb3b9, 0x1d71: 0xb329, 0x1d72: 0xb3d1, 0x1d73: 0xb2c9, 0x1d74: 0xb311, 0x1d75: 0xb221, - 0x1d76: 0xb239, 0x1d77: 0xb281, 0x1d78: 0xb2b1, 0x1d79: 0xb341, 0x1d7a: 0xb371, 0x1d7b: 0xb3a1, - 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040, + 0x1d40: 0x0751, 0x1d41: 0x00b9, 0x1d42: 0x0089, 0x1d43: 0x0341, 0x1d44: 0x0349, 0x1d45: 0x0391, + 0x1d46: 0x00c1, 0x1d47: 0x0109, 0x1d48: 0x00c9, 0x1d49: 0x04b1, 0x1d4a: 0x2459, 0x1d4b: 0x11f9, + 0x1d4c: 0x2461, 0x1d4d: 0x04d9, 0x1d4e: 0x2469, 0x1d4f: 0x2471, 0x1d50: 0x0018, 0x1d51: 0x0018, + 0x1d52: 0x0018, 0x1d53: 0x0018, 0x1d54: 0x0018, 0x1d55: 0x0018, 0x1d56: 0x0018, 0x1d57: 0x0018, + 0x1d58: 0x0018, 0x1d59: 0x0018, 0x1d5a: 0x0018, 0x1d5b: 0x0018, 0x1d5c: 0x0018, 0x1d5d: 0x0018, + 0x1d5e: 0x0018, 0x1d5f: 0x0018, 0x1d60: 0x0018, 0x1d61: 0x0018, 0x1d62: 0x0018, 0x1d63: 0x0018, + 0x1d64: 0x0018, 0x1d65: 0x0018, 0x1d66: 0x0018, 0x1d67: 0x0018, 0x1d68: 0x0018, 0x1d69: 0x0018, + 0x1d6a: 0x2479, 0x1d6b: 0x2481, 0x1d6c: 0x2489, 0x1d6d: 0x0018, 0x1d6e: 0x0018, 0x1d6f: 0x0018, + 0x1d70: 0x0018, 0x1d71: 0x0018, 0x1d72: 0x0018, 0x1d73: 0x0018, 0x1d74: 0x0018, 0x1d75: 0x0018, + 0x1d76: 0x0018, 0x1d77: 0x0018, 0x1d78: 0x0018, 0x1d79: 0x0018, 0x1d7a: 0x0018, 0x1d7b: 0x0018, + 0x1d7c: 0x0018, 0x1d7d: 0x0018, 0x1d7e: 0x0018, 0x1d7f: 0x0018, // Block 0x76, offset 0x1d80 - 0x1d80: 0x0040, 0x1d81: 0xbcf2, 0x1d82: 0xbd0a, 0x1d83: 0xbd22, 0x1d84: 0xbd3a, 0x1d85: 0xbd52, - 0x1d86: 0xbd6a, 0x1d87: 0xbd82, 0x1d88: 0xbd9a, 0x1d89: 0xbdb2, 0x1d8a: 0xbdca, 0x1d8b: 0x0018, - 0x1d8c: 0x0018, 0x1d8d: 0x0018, 0x1d8e: 0x0018, 0x1d8f: 0x0018, 0x1d90: 0xbde2, 0x1d91: 0xbe02, - 0x1d92: 0xbe22, 0x1d93: 0xbe42, 0x1d94: 0xbe62, 0x1d95: 0xbe82, 0x1d96: 0xbea2, 0x1d97: 0xbec2, - 0x1d98: 0xbee2, 0x1d99: 0xbf02, 0x1d9a: 0xbf22, 0x1d9b: 0xbf42, 0x1d9c: 0xbf62, 0x1d9d: 0xbf82, - 0x1d9e: 0xbfa2, 0x1d9f: 0xbfc2, 0x1da0: 0xbfe2, 0x1da1: 0xc002, 0x1da2: 0xc022, 0x1da3: 0xc042, - 0x1da4: 0xc062, 0x1da5: 0xc082, 0x1da6: 0xc0a2, 0x1da7: 0xc0c2, 0x1da8: 0xc0e2, 0x1da9: 0xc102, - 0x1daa: 0xc121, 0x1dab: 0x1159, 0x1dac: 0x0269, 0x1dad: 0x66a9, 0x1dae: 0xc161, 0x1daf: 0x0018, - 0x1db0: 0x0039, 0x1db1: 0x0ee9, 0x1db2: 0x1159, 0x1db3: 0x0ef9, 0x1db4: 0x0f09, 0x1db5: 0x1199, - 0x1db6: 0x0f31, 0x1db7: 0x0249, 0x1db8: 0x0f41, 0x1db9: 0x0259, 0x1dba: 0x0f51, 0x1dbb: 0x0359, - 0x1dbc: 0x0f61, 0x1dbd: 0x0f71, 0x1dbe: 0x00d9, 0x1dbf: 0x0f99, + 0x1d80: 0x2499, 0x1d81: 0x24a1, 0x1d82: 0x24a9, 0x1d83: 0x0040, 0x1d84: 0x0040, 0x1d85: 0x0040, + 0x1d86: 0x0040, 0x1d87: 0x0040, 0x1d88: 0x0040, 0x1d89: 0x0040, 0x1d8a: 0x0040, 0x1d8b: 0x0040, + 0x1d8c: 0x0040, 0x1d8d: 0x0040, 0x1d8e: 0x0040, 0x1d8f: 0x0040, 0x1d90: 0x24b1, 0x1d91: 0x24b9, + 0x1d92: 0x24c1, 0x1d93: 0x24c9, 0x1d94: 0x24d1, 0x1d95: 0x24d9, 0x1d96: 0x24e1, 0x1d97: 0x24e9, + 0x1d98: 0x24f1, 0x1d99: 0x24f9, 0x1d9a: 0x2501, 0x1d9b: 0x2509, 0x1d9c: 0x2511, 0x1d9d: 0x2519, + 0x1d9e: 0x2521, 0x1d9f: 0x2529, 0x1da0: 0x2531, 0x1da1: 0x2539, 0x1da2: 0x2541, 0x1da3: 0x2549, + 0x1da4: 0x2551, 0x1da5: 0x2559, 0x1da6: 0x2561, 0x1da7: 0x2569, 0x1da8: 0x2571, 0x1da9: 0x2579, + 0x1daa: 0x2581, 0x1dab: 0x2589, 0x1dac: 0x2591, 0x1dad: 0x2599, 0x1dae: 0x25a1, 0x1daf: 0x25a9, + 0x1db0: 0x25b1, 0x1db1: 0x25b9, 0x1db2: 0x25c1, 0x1db3: 0x25c9, 0x1db4: 0x25d1, 0x1db5: 0x25d9, + 0x1db6: 0x25e1, 0x1db7: 0x25e9, 0x1db8: 0x25f1, 0x1db9: 0x25f9, 0x1dba: 0x2601, 0x1dbb: 0x2609, + 0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040, // Block 0x77, offset 0x1dc0 - 0x1dc0: 0x2039, 0x1dc1: 0x0269, 0x1dc2: 0x01d9, 0x1dc3: 0x0fa9, 0x1dc4: 0x0fb9, 0x1dc5: 0x1089, - 0x1dc6: 0x0279, 0x1dc7: 0x0369, 0x1dc8: 0x0289, 0x1dc9: 0x13d1, 0x1dca: 0xc179, 0x1dcb: 0x65e9, - 0x1dcc: 0xc191, 0x1dcd: 0x1441, 0x1dce: 0xc1a9, 0x1dcf: 0xc1c9, 0x1dd0: 0x0018, 0x1dd1: 0x0018, - 0x1dd2: 0x0018, 0x1dd3: 0x0018, 0x1dd4: 0x0018, 0x1dd5: 0x0018, 0x1dd6: 0x0018, 0x1dd7: 0x0018, - 0x1dd8: 0x0018, 0x1dd9: 0x0018, 0x1dda: 0x0018, 0x1ddb: 0x0018, 0x1ddc: 0x0018, 0x1ddd: 0x0018, - 0x1dde: 0x0018, 0x1ddf: 0x0018, 0x1de0: 0x0018, 0x1de1: 0x0018, 0x1de2: 0x0018, 0x1de3: 0x0018, - 0x1de4: 0x0018, 0x1de5: 0x0018, 0x1de6: 0x0018, 0x1de7: 0x0018, 0x1de8: 0x0018, 0x1de9: 0x0018, - 0x1dea: 0xc1e1, 0x1deb: 0xc1f9, 0x1dec: 0xc211, 0x1ded: 0x0018, 0x1dee: 0x0018, 0x1def: 0x0018, - 0x1df0: 0x0018, 0x1df1: 0x0018, 0x1df2: 0x0018, 0x1df3: 0x0018, 0x1df4: 0x0018, 0x1df5: 0x0018, - 0x1df6: 0x0018, 0x1df7: 0x0018, 0x1df8: 0x0018, 0x1df9: 0x0018, 0x1dfa: 0x0018, 0x1dfb: 0x0018, - 0x1dfc: 0x0018, 0x1dfd: 0x0018, 0x1dfe: 0x0018, 0x1dff: 0x0018, + 0x1dc0: 0x2669, 0x1dc1: 0x2671, 0x1dc2: 0x2679, 0x1dc3: 0x8b55, 0x1dc4: 0x2681, 0x1dc5: 0x2689, + 0x1dc6: 0x2691, 0x1dc7: 0x2699, 0x1dc8: 0x26a1, 0x1dc9: 0x26a9, 0x1dca: 0x26b1, 0x1dcb: 0x26b9, + 0x1dcc: 0x26c1, 0x1dcd: 0x8b75, 0x1dce: 0x26c9, 0x1dcf: 0x26d1, 0x1dd0: 0x26d9, 0x1dd1: 0x26e1, + 0x1dd2: 0x8b95, 0x1dd3: 0x26e9, 0x1dd4: 0x26f1, 0x1dd5: 0x2521, 0x1dd6: 0x8bb5, 0x1dd7: 0x26f9, + 0x1dd8: 0x2701, 0x1dd9: 0x2709, 0x1dda: 0x2711, 0x1ddb: 0x2719, 0x1ddc: 0x8bd5, 0x1ddd: 0x2721, + 0x1dde: 0x2729, 0x1ddf: 0x2731, 0x1de0: 0x2739, 0x1de1: 0x2741, 0x1de2: 0x25f9, 0x1de3: 0x2749, + 0x1de4: 0x2751, 0x1de5: 0x2759, 0x1de6: 0x2761, 0x1de7: 0x2769, 0x1de8: 0x2771, 0x1de9: 0x2779, + 0x1dea: 0x2781, 0x1deb: 0x2789, 0x1dec: 0x2791, 0x1ded: 0x2799, 0x1dee: 0x27a1, 0x1def: 0x27a9, + 0x1df0: 0x27b1, 0x1df1: 0x27b9, 0x1df2: 0x27b9, 0x1df3: 0x27b9, 0x1df4: 0x8bf5, 0x1df5: 0x27c1, + 0x1df6: 0x27c9, 0x1df7: 0x27d1, 0x1df8: 0x8c15, 0x1df9: 0x27d9, 0x1dfa: 0x27e1, 0x1dfb: 0x27e9, + 0x1dfc: 0x27f1, 0x1dfd: 0x27f9, 0x1dfe: 0x2801, 0x1dff: 0x2809, // Block 0x78, offset 0x1e00 - 0x1e00: 0xc241, 0x1e01: 0xc279, 0x1e02: 0xc2b1, 0x1e03: 0x0040, 0x1e04: 0x0040, 0x1e05: 0x0040, - 0x1e06: 0x0040, 0x1e07: 0x0040, 0x1e08: 0x0040, 0x1e09: 0x0040, 0x1e0a: 0x0040, 0x1e0b: 0x0040, - 0x1e0c: 0x0040, 0x1e0d: 0x0040, 0x1e0e: 0x0040, 0x1e0f: 0x0040, 0x1e10: 0xc2d1, 0x1e11: 0xc2f1, - 0x1e12: 0xc311, 0x1e13: 0xc331, 0x1e14: 0xc351, 0x1e15: 0xc371, 0x1e16: 0xc391, 0x1e17: 0xc3b1, - 0x1e18: 0xc3d1, 0x1e19: 0xc3f1, 0x1e1a: 0xc411, 0x1e1b: 0xc431, 0x1e1c: 0xc451, 0x1e1d: 0xc471, - 0x1e1e: 0xc491, 0x1e1f: 0xc4b1, 0x1e20: 0xc4d1, 0x1e21: 0xc4f1, 0x1e22: 0xc511, 0x1e23: 0xc531, - 0x1e24: 0xc551, 0x1e25: 0xc571, 0x1e26: 0xc591, 0x1e27: 0xc5b1, 0x1e28: 0xc5d1, 0x1e29: 0xc5f1, - 0x1e2a: 0xc611, 0x1e2b: 0xc631, 0x1e2c: 0xc651, 0x1e2d: 0xc671, 0x1e2e: 0xc691, 0x1e2f: 0xc6b1, - 0x1e30: 0xc6d1, 0x1e31: 0xc6f1, 0x1e32: 0xc711, 0x1e33: 0xc731, 0x1e34: 0xc751, 0x1e35: 0xc771, - 0x1e36: 0xc791, 0x1e37: 0xc7b1, 0x1e38: 0xc7d1, 0x1e39: 0xc7f1, 0x1e3a: 0xc811, 0x1e3b: 0xc831, - 0x1e3c: 0x0040, 0x1e3d: 0x0040, 0x1e3e: 0x0040, 0x1e3f: 0x0040, + 0x1e00: 0x2811, 0x1e01: 0x2819, 0x1e02: 0x2821, 0x1e03: 0x2829, 0x1e04: 0x2831, 0x1e05: 0x2839, + 0x1e06: 0x2839, 0x1e07: 0x2841, 0x1e08: 0x2849, 0x1e09: 0x2851, 0x1e0a: 0x2859, 0x1e0b: 0x2861, + 0x1e0c: 0x2869, 0x1e0d: 0x2871, 0x1e0e: 0x2879, 0x1e0f: 0x2881, 0x1e10: 0x2889, 0x1e11: 0x2891, + 0x1e12: 0x2899, 0x1e13: 0x28a1, 0x1e14: 0x28a9, 0x1e15: 0x28b1, 0x1e16: 0x28b9, 0x1e17: 0x28c1, + 0x1e18: 0x28c9, 0x1e19: 0x8c35, 0x1e1a: 0x28d1, 0x1e1b: 0x28d9, 0x1e1c: 0x28e1, 0x1e1d: 0x24d9, + 0x1e1e: 0x28e9, 0x1e1f: 0x28f1, 0x1e20: 0x8c55, 0x1e21: 0x8c75, 0x1e22: 0x28f9, 0x1e23: 0x2901, + 0x1e24: 0x2909, 0x1e25: 0x2911, 0x1e26: 0x2919, 0x1e27: 0x2921, 0x1e28: 0x2040, 0x1e29: 0x2929, + 0x1e2a: 0x2931, 0x1e2b: 0x2931, 0x1e2c: 0x8c95, 0x1e2d: 0x2939, 0x1e2e: 0x2941, 0x1e2f: 0x2949, + 0x1e30: 0x2951, 0x1e31: 0x8cb5, 0x1e32: 0x2959, 0x1e33: 0x2961, 0x1e34: 0x2040, 0x1e35: 0x2969, + 0x1e36: 0x2971, 0x1e37: 0x2979, 0x1e38: 0x2981, 0x1e39: 0x2989, 0x1e3a: 0x2991, 0x1e3b: 0x8cd5, + 0x1e3c: 0x2999, 0x1e3d: 0x8cf5, 0x1e3e: 0x29a1, 0x1e3f: 0x29a9, // Block 0x79, offset 0x1e40 - 0x1e40: 0xcb61, 0x1e41: 0xcb81, 0x1e42: 0xcba1, 0x1e43: 0x8b55, 0x1e44: 0xcbc1, 0x1e45: 0xcbe1, - 0x1e46: 0xcc01, 0x1e47: 0xcc21, 0x1e48: 0xcc41, 0x1e49: 0xcc61, 0x1e4a: 0xcc81, 0x1e4b: 0xcca1, - 0x1e4c: 0xccc1, 0x1e4d: 0x8b75, 0x1e4e: 0xcce1, 0x1e4f: 0xcd01, 0x1e50: 0xcd21, 0x1e51: 0xcd41, - 0x1e52: 0x8b95, 0x1e53: 0xcd61, 0x1e54: 0xcd81, 0x1e55: 0xc491, 0x1e56: 0x8bb5, 0x1e57: 0xcda1, - 0x1e58: 0xcdc1, 0x1e59: 0xcde1, 0x1e5a: 0xce01, 0x1e5b: 0xce21, 0x1e5c: 0x8bd5, 0x1e5d: 0xce41, - 0x1e5e: 0xce61, 0x1e5f: 0xce81, 0x1e60: 0xcea1, 0x1e61: 0xcec1, 0x1e62: 0xc7f1, 0x1e63: 0xcee1, - 0x1e64: 0xcf01, 0x1e65: 0xcf21, 0x1e66: 0xcf41, 0x1e67: 0xcf61, 0x1e68: 0xcf81, 0x1e69: 0xcfa1, - 0x1e6a: 0xcfc1, 0x1e6b: 0xcfe1, 0x1e6c: 0xd001, 0x1e6d: 0xd021, 0x1e6e: 0xd041, 0x1e6f: 0xd061, - 0x1e70: 0xd081, 0x1e71: 0xd0a1, 0x1e72: 0xd0a1, 0x1e73: 0xd0a1, 0x1e74: 0x8bf5, 0x1e75: 0xd0c1, - 0x1e76: 0xd0e1, 0x1e77: 0xd101, 0x1e78: 0x8c15, 0x1e79: 0xd121, 0x1e7a: 0xd141, 0x1e7b: 0xd161, - 0x1e7c: 0xd181, 0x1e7d: 0xd1a1, 0x1e7e: 0xd1c1, 0x1e7f: 0xd1e1, + 0x1e40: 0x29b1, 0x1e41: 0x29b9, 0x1e42: 0x29c1, 0x1e43: 0x29c9, 0x1e44: 0x29d1, 0x1e45: 0x29d9, + 0x1e46: 0x29e1, 0x1e47: 0x29e9, 0x1e48: 0x29f1, 0x1e49: 0x8d15, 0x1e4a: 0x29f9, 0x1e4b: 0x2a01, + 0x1e4c: 0x2a09, 0x1e4d: 0x2a11, 0x1e4e: 0x2a19, 0x1e4f: 0x8d35, 0x1e50: 0x2a21, 0x1e51: 0x8d55, + 0x1e52: 0x8d75, 0x1e53: 0x2a29, 0x1e54: 0x2a31, 0x1e55: 0x2a31, 0x1e56: 0x2a39, 0x1e57: 0x8d95, + 0x1e58: 0x8db5, 0x1e59: 0x2a41, 0x1e5a: 0x2a49, 0x1e5b: 0x2a51, 0x1e5c: 0x2a59, 0x1e5d: 0x2a61, + 0x1e5e: 0x2a69, 0x1e5f: 0x2a71, 0x1e60: 0x2a79, 0x1e61: 0x2a81, 0x1e62: 0x2a89, 0x1e63: 0x2a91, + 0x1e64: 0x8dd5, 0x1e65: 0x2a99, 0x1e66: 0x2aa1, 0x1e67: 0x2aa9, 0x1e68: 0x2ab1, 0x1e69: 0x2aa9, + 0x1e6a: 0x2ab9, 0x1e6b: 0x2ac1, 0x1e6c: 0x2ac9, 0x1e6d: 0x2ad1, 0x1e6e: 0x2ad9, 0x1e6f: 0x2ae1, + 0x1e70: 0x2ae9, 0x1e71: 0x2af1, 0x1e72: 0x2af9, 0x1e73: 0x2b01, 0x1e74: 0x2b09, 0x1e75: 0x2b11, + 0x1e76: 0x2b19, 0x1e77: 0x2b21, 0x1e78: 0x8df5, 0x1e79: 0x2b29, 0x1e7a: 0x2b31, 0x1e7b: 0x2b39, + 0x1e7c: 0x2b41, 0x1e7d: 0x2b49, 0x1e7e: 0x8e15, 0x1e7f: 0x2b51, // Block 0x7a, offset 0x1e80 - 0x1e80: 0xd201, 0x1e81: 0xd221, 0x1e82: 0xd241, 0x1e83: 0xd261, 0x1e84: 0xd281, 0x1e85: 0xd2a1, - 0x1e86: 0xd2a1, 0x1e87: 0xd2c1, 0x1e88: 0xd2e1, 0x1e89: 0xd301, 0x1e8a: 0xd321, 0x1e8b: 0xd341, - 0x1e8c: 0xd361, 0x1e8d: 0xd381, 0x1e8e: 0xd3a1, 0x1e8f: 0xd3c1, 0x1e90: 0xd3e1, 0x1e91: 0xd401, - 0x1e92: 0xd421, 0x1e93: 0xd441, 0x1e94: 0xd461, 0x1e95: 0xd481, 0x1e96: 0xd4a1, 0x1e97: 0xd4c1, - 0x1e98: 0xd4e1, 0x1e99: 0x8c35, 0x1e9a: 0xd501, 0x1e9b: 0xd521, 0x1e9c: 0xd541, 0x1e9d: 0xc371, - 0x1e9e: 0xd561, 0x1e9f: 0xd581, 0x1ea0: 0x8c55, 0x1ea1: 0x8c75, 0x1ea2: 0xd5a1, 0x1ea3: 0xd5c1, - 0x1ea4: 0xd5e1, 0x1ea5: 0xd601, 0x1ea6: 0xd621, 0x1ea7: 0xd641, 0x1ea8: 0x2040, 0x1ea9: 0xd661, - 0x1eaa: 0xd681, 0x1eab: 0xd681, 0x1eac: 0x8c95, 0x1ead: 0xd6a1, 0x1eae: 0xd6c1, 0x1eaf: 0xd6e1, - 0x1eb0: 0xd701, 0x1eb1: 0x8cb5, 0x1eb2: 0xd721, 0x1eb3: 0xd741, 0x1eb4: 0x2040, 0x1eb5: 0xd761, - 0x1eb6: 0xd781, 0x1eb7: 0xd7a1, 0x1eb8: 0xd7c1, 0x1eb9: 0xd7e1, 0x1eba: 0xd801, 0x1ebb: 0x8cd5, - 0x1ebc: 0xd821, 0x1ebd: 0x8cf5, 0x1ebe: 0xd841, 0x1ebf: 0xd861, + 0x1e80: 0x2b59, 0x1e81: 0x2b61, 0x1e82: 0x2b69, 0x1e83: 0x2b71, 0x1e84: 0x2b79, 0x1e85: 0x2b81, + 0x1e86: 0x2b89, 0x1e87: 0x2b91, 0x1e88: 0x2b99, 0x1e89: 0x2ba1, 0x1e8a: 0x8e35, 0x1e8b: 0x2ba9, + 0x1e8c: 0x2bb1, 0x1e8d: 0x2bb9, 0x1e8e: 0x2bc1, 0x1e8f: 0x2bc9, 0x1e90: 0x2bd1, 0x1e91: 0x2bd9, + 0x1e92: 0x2be1, 0x1e93: 0x2be9, 0x1e94: 0x2bf1, 0x1e95: 0x2bf9, 0x1e96: 0x2c01, 0x1e97: 0x2c09, + 0x1e98: 0x2c11, 0x1e99: 0x2c19, 0x1e9a: 0x2c21, 0x1e9b: 0x2c29, 0x1e9c: 0x2c31, 0x1e9d: 0x8e55, + 0x1e9e: 0x2c39, 0x1e9f: 0x2c41, 0x1ea0: 0x2c49, 0x1ea1: 0x2c51, 0x1ea2: 0x2c59, 0x1ea3: 0x8e75, + 0x1ea4: 0x2c61, 0x1ea5: 0x2c69, 0x1ea6: 0x2c71, 0x1ea7: 0x2c79, 0x1ea8: 0x2c81, 0x1ea9: 0x2c89, + 0x1eaa: 0x2c91, 0x1eab: 0x2c99, 0x1eac: 0x7f0d, 0x1ead: 0x2ca1, 0x1eae: 0x2ca9, 0x1eaf: 0x2cb1, + 0x1eb0: 0x8e95, 0x1eb1: 0x2cb9, 0x1eb2: 0x2cc1, 0x1eb3: 0x2cc9, 0x1eb4: 0x2cd1, 0x1eb5: 0x2cd9, + 0x1eb6: 0x2ce1, 0x1eb7: 0x8eb5, 0x1eb8: 0x8ed5, 0x1eb9: 0x8ef5, 0x1eba: 0x2ce9, 0x1ebb: 0x8f15, + 0x1ebc: 0x2cf1, 0x1ebd: 0x2cf9, 0x1ebe: 0x2d01, 0x1ebf: 0x2d09, // Block 0x7b, offset 0x1ec0 - 0x1ec0: 0xd881, 0x1ec1: 0xd8a1, 0x1ec2: 0xd8c1, 0x1ec3: 0xd8e1, 0x1ec4: 0xd901, 0x1ec5: 0xd921, - 0x1ec6: 0xd941, 0x1ec7: 0xd961, 0x1ec8: 0xd981, 0x1ec9: 0x8d15, 0x1eca: 0xd9a1, 0x1ecb: 0xd9c1, - 0x1ecc: 0xd9e1, 0x1ecd: 0xda01, 0x1ece: 0xda21, 0x1ecf: 0x8d35, 0x1ed0: 0xda41, 0x1ed1: 0x8d55, - 0x1ed2: 0x8d75, 0x1ed3: 0xda61, 0x1ed4: 0xda81, 0x1ed5: 0xda81, 0x1ed6: 0xdaa1, 0x1ed7: 0x8d95, - 0x1ed8: 0x8db5, 0x1ed9: 0xdac1, 0x1eda: 0xdae1, 0x1edb: 0xdb01, 0x1edc: 0xdb21, 0x1edd: 0xdb41, - 0x1ede: 0xdb61, 0x1edf: 0xdb81, 0x1ee0: 0xdba1, 0x1ee1: 0xdbc1, 0x1ee2: 0xdbe1, 0x1ee3: 0xdc01, - 0x1ee4: 0x8dd5, 0x1ee5: 0xdc21, 0x1ee6: 0xdc41, 0x1ee7: 0xdc61, 0x1ee8: 0xdc81, 0x1ee9: 0xdc61, - 0x1eea: 0xdca1, 0x1eeb: 0xdcc1, 0x1eec: 0xdce1, 0x1eed: 0xdd01, 0x1eee: 0xdd21, 0x1eef: 0xdd41, - 0x1ef0: 0xdd61, 0x1ef1: 0xdd81, 0x1ef2: 0xdda1, 0x1ef3: 0xddc1, 0x1ef4: 0xdde1, 0x1ef5: 0xde01, - 0x1ef6: 0xde21, 0x1ef7: 0xde41, 0x1ef8: 0x8df5, 0x1ef9: 0xde61, 0x1efa: 0xde81, 0x1efb: 0xdea1, - 0x1efc: 0xdec1, 0x1efd: 0xdee1, 0x1efe: 0x8e15, 0x1eff: 0xdf01, + 0x1ec0: 0x2d11, 0x1ec1: 0x2d19, 0x1ec2: 0x2d21, 0x1ec3: 0x2d29, 0x1ec4: 0x2d31, 0x1ec5: 0x2d39, + 0x1ec6: 0x8f35, 0x1ec7: 0x2d41, 0x1ec8: 0x2d49, 0x1ec9: 0x2d51, 0x1eca: 0x2d59, 0x1ecb: 0x2d61, + 0x1ecc: 0x2d69, 0x1ecd: 0x8f55, 0x1ece: 0x2d71, 0x1ecf: 0x2d79, 0x1ed0: 0x8f75, 0x1ed1: 0x8f95, + 0x1ed2: 0x2d81, 0x1ed3: 0x2d89, 0x1ed4: 0x2d91, 0x1ed5: 0x2d99, 0x1ed6: 0x2da1, 0x1ed7: 0x2da9, + 0x1ed8: 0x2db1, 0x1ed9: 0x2db9, 0x1eda: 0x2dc1, 0x1edb: 0x8fb5, 0x1edc: 0x2dc9, 0x1edd: 0x8fd5, + 0x1ede: 0x2dd1, 0x1edf: 0x2040, 0x1ee0: 0x2dd9, 0x1ee1: 0x2de1, 0x1ee2: 0x2de9, 0x1ee3: 0x8ff5, + 0x1ee4: 0x2df1, 0x1ee5: 0x2df9, 0x1ee6: 0x9015, 0x1ee7: 0x9035, 0x1ee8: 0x2e01, 0x1ee9: 0x2e09, + 0x1eea: 0x2e11, 0x1eeb: 0x2e19, 0x1eec: 0x2e21, 0x1eed: 0x2e21, 0x1eee: 0x2e29, 0x1eef: 0x2e31, + 0x1ef0: 0x2e39, 0x1ef1: 0x2e41, 0x1ef2: 0x2e49, 0x1ef3: 0x2e51, 0x1ef4: 0x2e59, 0x1ef5: 0x9055, + 0x1ef6: 0x2e61, 0x1ef7: 0x9075, 0x1ef8: 0x2e69, 0x1ef9: 0x9095, 0x1efa: 0x2e71, 0x1efb: 0x90b5, + 0x1efc: 0x90d5, 0x1efd: 0x90f5, 0x1efe: 0x2e79, 0x1eff: 0x2e81, // Block 0x7c, offset 0x1f00 - 0x1f00: 0xe601, 0x1f01: 0xe621, 0x1f02: 0xe641, 0x1f03: 0xe661, 0x1f04: 0xe681, 0x1f05: 0xe6a1, - 0x1f06: 0x8f35, 0x1f07: 0xe6c1, 0x1f08: 0xe6e1, 0x1f09: 0xe701, 0x1f0a: 0xe721, 0x1f0b: 0xe741, - 0x1f0c: 0xe761, 0x1f0d: 0x8f55, 0x1f0e: 0xe781, 0x1f0f: 0xe7a1, 0x1f10: 0x8f75, 0x1f11: 0x8f95, - 0x1f12: 0xe7c1, 0x1f13: 0xe7e1, 0x1f14: 0xe801, 0x1f15: 0xe821, 0x1f16: 0xe841, 0x1f17: 0xe861, - 0x1f18: 0xe881, 0x1f19: 0xe8a1, 0x1f1a: 0xe8c1, 0x1f1b: 0x8fb5, 0x1f1c: 0xe8e1, 0x1f1d: 0x8fd5, - 0x1f1e: 0xe901, 0x1f1f: 0x2040, 0x1f20: 0xe921, 0x1f21: 0xe941, 0x1f22: 0xe961, 0x1f23: 0x8ff5, - 0x1f24: 0xe981, 0x1f25: 0xe9a1, 0x1f26: 0x9015, 0x1f27: 0x9035, 0x1f28: 0xe9c1, 0x1f29: 0xe9e1, - 0x1f2a: 0xea01, 0x1f2b: 0xea21, 0x1f2c: 0xea41, 0x1f2d: 0xea41, 0x1f2e: 0xea61, 0x1f2f: 0xea81, - 0x1f30: 0xeaa1, 0x1f31: 0xeac1, 0x1f32: 0xeae1, 0x1f33: 0xeb01, 0x1f34: 0xeb21, 0x1f35: 0x9055, - 0x1f36: 0xeb41, 0x1f37: 0x9075, 0x1f38: 0xeb61, 0x1f39: 0x9095, 0x1f3a: 0xeb81, 0x1f3b: 0x90b5, - 0x1f3c: 0x90d5, 0x1f3d: 0x90f5, 0x1f3e: 0xeba1, 0x1f3f: 0xebc1, + 0x1f00: 0x2e89, 0x1f01: 0x9115, 0x1f02: 0x9135, 0x1f03: 0x9155, 0x1f04: 0x9175, 0x1f05: 0x2e91, + 0x1f06: 0x2e99, 0x1f07: 0x2e99, 0x1f08: 0x2ea1, 0x1f09: 0x2ea9, 0x1f0a: 0x2eb1, 0x1f0b: 0x2eb9, + 0x1f0c: 0x2ec1, 0x1f0d: 0x9195, 0x1f0e: 0x2ec9, 0x1f0f: 0x2ed1, 0x1f10: 0x2ed9, 0x1f11: 0x2ee1, + 0x1f12: 0x91b5, 0x1f13: 0x2ee9, 0x1f14: 0x91d5, 0x1f15: 0x91f5, 0x1f16: 0x2ef1, 0x1f17: 0x2ef9, + 0x1f18: 0x2f01, 0x1f19: 0x2f09, 0x1f1a: 0x2f11, 0x1f1b: 0x2f19, 0x1f1c: 0x9215, 0x1f1d: 0x9235, + 0x1f1e: 0x9255, 0x1f1f: 0x2040, 0x1f20: 0x2f21, 0x1f21: 0x9275, 0x1f22: 0x2f29, 0x1f23: 0x2f31, + 0x1f24: 0x2f39, 0x1f25: 0x9295, 0x1f26: 0x2f41, 0x1f27: 0x2f49, 0x1f28: 0x2f51, 0x1f29: 0x2f59, + 0x1f2a: 0x2f61, 0x1f2b: 0x92b5, 0x1f2c: 0x2f69, 0x1f2d: 0x2f71, 0x1f2e: 0x2f79, 0x1f2f: 0x2f81, + 0x1f30: 0x2f89, 0x1f31: 0x2f91, 0x1f32: 0x92d5, 0x1f33: 0x92f5, 0x1f34: 0x2f99, 0x1f35: 0x9315, + 0x1f36: 0x2fa1, 0x1f37: 0x9335, 0x1f38: 0x2fa9, 0x1f39: 0x2fb1, 0x1f3a: 0x2fb9, 0x1f3b: 0x9355, + 0x1f3c: 0x9375, 0x1f3d: 0x2fc1, 0x1f3e: 0x9395, 0x1f3f: 0x2fc9, // Block 0x7d, offset 0x1f40 - 0x1f40: 0xebe1, 0x1f41: 0x9115, 0x1f42: 0x9135, 0x1f43: 0x9155, 0x1f44: 0x9175, 0x1f45: 0xec01, - 0x1f46: 0xec21, 0x1f47: 0xec21, 0x1f48: 0xec41, 0x1f49: 0xec61, 0x1f4a: 0xec81, 0x1f4b: 0xeca1, - 0x1f4c: 0xecc1, 0x1f4d: 0x9195, 0x1f4e: 0xece1, 0x1f4f: 0xed01, 0x1f50: 0xed21, 0x1f51: 0xed41, - 0x1f52: 0x91b5, 0x1f53: 0xed61, 0x1f54: 0x91d5, 0x1f55: 0x91f5, 0x1f56: 0xed81, 0x1f57: 0xeda1, - 0x1f58: 0xedc1, 0x1f59: 0xede1, 0x1f5a: 0xee01, 0x1f5b: 0xee21, 0x1f5c: 0x9215, 0x1f5d: 0x9235, - 0x1f5e: 0x9255, 0x1f5f: 0x2040, 0x1f60: 0xee41, 0x1f61: 0x9275, 0x1f62: 0xee61, 0x1f63: 0xee81, - 0x1f64: 0xeea1, 0x1f65: 0x9295, 0x1f66: 0xeec1, 0x1f67: 0xeee1, 0x1f68: 0xef01, 0x1f69: 0xef21, - 0x1f6a: 0xef41, 0x1f6b: 0x92b5, 0x1f6c: 0xef61, 0x1f6d: 0xef81, 0x1f6e: 0xefa1, 0x1f6f: 0xefc1, - 0x1f70: 0xefe1, 0x1f71: 0xf001, 0x1f72: 0x92d5, 0x1f73: 0x92f5, 0x1f74: 0xf021, 0x1f75: 0x9315, - 0x1f76: 0xf041, 0x1f77: 0x9335, 0x1f78: 0xf061, 0x1f79: 0xf081, 0x1f7a: 0xf0a1, 0x1f7b: 0x9355, - 0x1f7c: 0x9375, 0x1f7d: 0xf0c1, 0x1f7e: 0x9395, 0x1f7f: 0xf0e1, + 0x1f40: 0x93b5, 0x1f41: 0x2fd1, 0x1f42: 0x2fd9, 0x1f43: 0x2fe1, 0x1f44: 0x2fe9, 0x1f45: 0x2ff1, + 0x1f46: 0x2ff9, 0x1f47: 0x93d5, 0x1f48: 0x93f5, 0x1f49: 0x9415, 0x1f4a: 0x9435, 0x1f4b: 0x2a29, + 0x1f4c: 0x3001, 0x1f4d: 0x3009, 0x1f4e: 0x3011, 0x1f4f: 0x3019, 0x1f50: 0x3021, 0x1f51: 0x3029, + 0x1f52: 0x3031, 0x1f53: 0x3039, 0x1f54: 0x3041, 0x1f55: 0x3049, 0x1f56: 0x3051, 0x1f57: 0x9455, + 0x1f58: 0x3059, 0x1f59: 0x3061, 0x1f5a: 0x3069, 0x1f5b: 0x3071, 0x1f5c: 0x3079, 0x1f5d: 0x3081, + 0x1f5e: 0x3089, 0x1f5f: 0x3091, 0x1f60: 0x3099, 0x1f61: 0x30a1, 0x1f62: 0x30a9, 0x1f63: 0x30b1, + 0x1f64: 0x9475, 0x1f65: 0x9495, 0x1f66: 0x94b5, 0x1f67: 0x30b9, 0x1f68: 0x30c1, 0x1f69: 0x30c9, + 0x1f6a: 0x30d1, 0x1f6b: 0x94d5, 0x1f6c: 0x30d9, 0x1f6d: 0x94f5, 0x1f6e: 0x30e1, 0x1f6f: 0x30e9, + 0x1f70: 0x9515, 0x1f71: 0x9535, 0x1f72: 0x30f1, 0x1f73: 0x30f9, 0x1f74: 0x3101, 0x1f75: 0x3109, + 0x1f76: 0x3111, 0x1f77: 0x3119, 0x1f78: 0x3121, 0x1f79: 0x3129, 0x1f7a: 0x3131, 0x1f7b: 0x3139, + 0x1f7c: 0x3141, 0x1f7d: 0x3149, 0x1f7e: 0x3151, 0x1f7f: 0x2040, // Block 0x7e, offset 0x1f80 - 0x1f80: 0xf721, 0x1f81: 0xf741, 0x1f82: 0xf761, 0x1f83: 0xf781, 0x1f84: 0xf7a1, 0x1f85: 0x9555, - 0x1f86: 0xf7c1, 0x1f87: 0xf7e1, 0x1f88: 0xf801, 0x1f89: 0xf821, 0x1f8a: 0xf841, 0x1f8b: 0x9575, - 0x1f8c: 0x9595, 0x1f8d: 0xf861, 0x1f8e: 0xf881, 0x1f8f: 0xf8a1, 0x1f90: 0xf8c1, 0x1f91: 0xf8e1, - 0x1f92: 0xf901, 0x1f93: 0x95b5, 0x1f94: 0xf921, 0x1f95: 0xf941, 0x1f96: 0xf961, 0x1f97: 0xf981, - 0x1f98: 0x95d5, 0x1f99: 0x95f5, 0x1f9a: 0xf9a1, 0x1f9b: 0xf9c1, 0x1f9c: 0xf9e1, 0x1f9d: 0x9615, - 0x1f9e: 0xfa01, 0x1f9f: 0xfa21, 0x1fa0: 0x684d, 0x1fa1: 0x9635, 0x1fa2: 0xfa41, 0x1fa3: 0xfa61, - 0x1fa4: 0xfa81, 0x1fa5: 0x9655, 0x1fa6: 0xfaa1, 0x1fa7: 0xfac1, 0x1fa8: 0xfae1, 0x1fa9: 0xfb01, - 0x1faa: 0xfb21, 0x1fab: 0xfb41, 0x1fac: 0xfb61, 0x1fad: 0x9675, 0x1fae: 0xfb81, 0x1faf: 0xfba1, - 0x1fb0: 0xfbc1, 0x1fb1: 0x9695, 0x1fb2: 0xfbe1, 0x1fb3: 0xfc01, 0x1fb4: 0xfc21, 0x1fb5: 0xfc41, - 0x1fb6: 0x7b6d, 0x1fb7: 0x96b5, 0x1fb8: 0xfc61, 0x1fb9: 0xfc81, 0x1fba: 0xfca1, 0x1fbb: 0x96d5, - 0x1fbc: 0xfcc1, 0x1fbd: 0x96f5, 0x1fbe: 0xfce1, 0x1fbf: 0xfce1, + 0x1f80: 0x3159, 0x1f81: 0x3161, 0x1f82: 0x3169, 0x1f83: 0x3171, 0x1f84: 0x3179, 0x1f85: 0x9555, + 0x1f86: 0x3181, 0x1f87: 0x3189, 0x1f88: 0x3191, 0x1f89: 0x3199, 0x1f8a: 0x31a1, 0x1f8b: 0x9575, + 0x1f8c: 0x9595, 0x1f8d: 0x31a9, 0x1f8e: 0x31b1, 0x1f8f: 0x31b9, 0x1f90: 0x31c1, 0x1f91: 0x31c9, + 0x1f92: 0x31d1, 0x1f93: 0x95b5, 0x1f94: 0x31d9, 0x1f95: 0x31e1, 0x1f96: 0x31e9, 0x1f97: 0x31f1, + 0x1f98: 0x95d5, 0x1f99: 0x95f5, 0x1f9a: 0x31f9, 0x1f9b: 0x3201, 0x1f9c: 0x3209, 0x1f9d: 0x9615, + 0x1f9e: 0x3211, 0x1f9f: 0x3219, 0x1fa0: 0x684d, 0x1fa1: 0x9635, 0x1fa2: 0x3221, 0x1fa3: 0x3229, + 0x1fa4: 0x3231, 0x1fa5: 0x9655, 0x1fa6: 0x3239, 0x1fa7: 0x3241, 0x1fa8: 0x3249, 0x1fa9: 0x3251, + 0x1faa: 0x3259, 0x1fab: 0x3261, 0x1fac: 0x3269, 0x1fad: 0x9675, 0x1fae: 0x3271, 0x1faf: 0x3279, + 0x1fb0: 0x3281, 0x1fb1: 0x9695, 0x1fb2: 0x3289, 0x1fb3: 0x3291, 0x1fb4: 0x3299, 0x1fb5: 0x32a1, + 0x1fb6: 0x7b6d, 0x1fb7: 0x96b5, 0x1fb8: 0x32a9, 0x1fb9: 0x32b1, 0x1fba: 0x32b9, 0x1fbb: 0x96d5, + 0x1fbc: 0x32c1, 0x1fbd: 0x96f5, 0x1fbe: 0x32c9, 0x1fbf: 0x32c9, // Block 0x7f, offset 0x1fc0 - 0x1fc0: 0xfd01, 0x1fc1: 0x9715, 0x1fc2: 0xfd21, 0x1fc3: 0xfd41, 0x1fc4: 0xfd61, 0x1fc5: 0xfd81, - 0x1fc6: 0xfda1, 0x1fc7: 0xfdc1, 0x1fc8: 0xfde1, 0x1fc9: 0x9735, 0x1fca: 0xfe01, 0x1fcb: 0xfe21, - 0x1fcc: 0xfe41, 0x1fcd: 0xfe61, 0x1fce: 0xfe81, 0x1fcf: 0xfea1, 0x1fd0: 0x9755, 0x1fd1: 0xfec1, - 0x1fd2: 0x9775, 0x1fd3: 0x9795, 0x1fd4: 0x97b5, 0x1fd5: 0xfee1, 0x1fd6: 0xff01, 0x1fd7: 0xff21, - 0x1fd8: 0xff41, 0x1fd9: 0xff61, 0x1fda: 0xff81, 0x1fdb: 0xffa1, 0x1fdc: 0xffc1, 0x1fdd: 0x97d5, + 0x1fc0: 0x32d1, 0x1fc1: 0x9715, 0x1fc2: 0x32d9, 0x1fc3: 0x32e1, 0x1fc4: 0x32e9, 0x1fc5: 0x32f1, + 0x1fc6: 0x32f9, 0x1fc7: 0x3301, 0x1fc8: 0x3309, 0x1fc9: 0x9735, 0x1fca: 0x3311, 0x1fcb: 0x3319, + 0x1fcc: 0x3321, 0x1fcd: 0x3329, 0x1fce: 0x3331, 0x1fcf: 0x3339, 0x1fd0: 0x9755, 0x1fd1: 0x3341, + 0x1fd2: 0x9775, 0x1fd3: 0x9795, 0x1fd4: 0x97b5, 0x1fd5: 0x3349, 0x1fd6: 0x3351, 0x1fd7: 0x3359, + 0x1fd8: 0x3361, 0x1fd9: 0x3369, 0x1fda: 0x3371, 0x1fdb: 0x3379, 0x1fdc: 0x3381, 0x1fdd: 0x97d5, 0x1fde: 0x0040, 0x1fdf: 0x0040, 0x1fe0: 0x0040, 0x1fe1: 0x0040, 0x1fe2: 0x0040, 0x1fe3: 0x0040, 0x1fe4: 0x0040, 0x1fe5: 0x0040, 0x1fe6: 0x0040, 0x1fe7: 0x0040, 0x1fe8: 0x0040, 0x1fe9: 0x0040, 0x1fea: 0x0040, 0x1feb: 0x0040, 0x1fec: 0x0040, 0x1fed: 0x0040, 0x1fee: 0x0040, 0x1fef: 0x0040, @@ -2134,7 +2277,7 @@ var idnaIndex = [2368]uint16{ 0x1b8: 0xd6, 0x1b9: 0xd7, 0x1ba: 0xd8, 0x1bb: 0xd9, 0x1bc: 0xda, 0x1bd: 0xdb, 0x1be: 0xdc, 0x1bf: 0x37, // Block 0x7, offset 0x1c0 0x1c0: 0x38, 0x1c1: 0xdd, 0x1c2: 0xde, 0x1c3: 0xdf, 0x1c4: 0xe0, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe1, - 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41, + 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0xe3, 0x1cd: 0xe4, 0x1ce: 0x3e, 0x1cf: 0x3f, 0x1d0: 0xa0, 0x1d1: 0xa0, 0x1d2: 0xa0, 0x1d3: 0xa0, 0x1d4: 0xa0, 0x1d5: 0xa0, 0x1d6: 0xa0, 0x1d7: 0xa0, 0x1d8: 0xa0, 0x1d9: 0xa0, 0x1da: 0xa0, 0x1db: 0xa0, 0x1dc: 0xa0, 0x1dd: 0xa0, 0x1de: 0xa0, 0x1df: 0xa0, 0x1e0: 0xa0, 0x1e1: 0xa0, 0x1e2: 0xa0, 0x1e3: 0xa0, 0x1e4: 0xa0, 0x1e5: 0xa0, 0x1e6: 0xa0, 0x1e7: 0xa0, @@ -2167,143 +2310,143 @@ var idnaIndex = [2368]uint16{ 0x2a0: 0xa0, 0x2a1: 0xa0, 0x2a2: 0xa0, 0x2a3: 0xa0, 0x2a4: 0xa0, 0x2a5: 0xa0, 0x2a6: 0xa0, 0x2a7: 0xa0, 0x2a8: 0xa0, 0x2a9: 0xa0, 0x2aa: 0xa0, 0x2ab: 0xa0, 0x2ac: 0xa0, 0x2ad: 0xa0, 0x2ae: 0xa0, 0x2af: 0xa0, 0x2b0: 0xa0, 0x2b1: 0xa0, 0x2b2: 0xa0, 0x2b3: 0xa0, 0x2b4: 0xa0, 0x2b5: 0xa0, 0x2b6: 0xa0, 0x2b7: 0xa0, - 0x2b8: 0xa0, 0x2b9: 0xa0, 0x2ba: 0xa0, 0x2bb: 0xa0, 0x2bc: 0xa0, 0x2bd: 0xa0, 0x2be: 0xa0, 0x2bf: 0xe3, + 0x2b8: 0xa0, 0x2b9: 0xa0, 0x2ba: 0xa0, 0x2bb: 0xa0, 0x2bc: 0xa0, 0x2bd: 0xa0, 0x2be: 0xa0, 0x2bf: 0xe5, // Block 0xb, offset 0x2c0 0x2c0: 0xa0, 0x2c1: 0xa0, 0x2c2: 0xa0, 0x2c3: 0xa0, 0x2c4: 0xa0, 0x2c5: 0xa0, 0x2c6: 0xa0, 0x2c7: 0xa0, 0x2c8: 0xa0, 0x2c9: 0xa0, 0x2ca: 0xa0, 0x2cb: 0xa0, 0x2cc: 0xa0, 0x2cd: 0xa0, 0x2ce: 0xa0, 0x2cf: 0xa0, - 0x2d0: 0xa0, 0x2d1: 0xa0, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0xa0, 0x2d5: 0xa0, 0x2d6: 0xa0, 0x2d7: 0xa0, - 0x2d8: 0xe6, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe7, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe8, - 0x2e0: 0xe9, 0x2e1: 0xea, 0x2e2: 0xeb, 0x2e3: 0xec, 0x2e4: 0xed, 0x2e5: 0xee, 0x2e6: 0xef, 0x2e7: 0xf0, - 0x2e8: 0xf1, 0x2e9: 0xf2, 0x2ea: 0xf3, 0x2eb: 0xf4, 0x2ec: 0xf5, 0x2ed: 0xf6, 0x2ee: 0xf7, 0x2ef: 0xf8, + 0x2d0: 0xa0, 0x2d1: 0xa0, 0x2d2: 0xe6, 0x2d3: 0xe7, 0x2d4: 0xa0, 0x2d5: 0xa0, 0x2d6: 0xa0, 0x2d7: 0xa0, + 0x2d8: 0xe8, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe9, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xea, + 0x2e0: 0xeb, 0x2e1: 0xec, 0x2e2: 0xed, 0x2e3: 0xee, 0x2e4: 0xef, 0x2e5: 0xf0, 0x2e6: 0xf1, 0x2e7: 0xf2, + 0x2e8: 0xf3, 0x2e9: 0xf4, 0x2ea: 0xf5, 0x2eb: 0xf6, 0x2ec: 0xf7, 0x2ed: 0xf8, 0x2ee: 0xf9, 0x2ef: 0xfa, 0x2f0: 0xa0, 0x2f1: 0xa0, 0x2f2: 0xa0, 0x2f3: 0xa0, 0x2f4: 0xa0, 0x2f5: 0xa0, 0x2f6: 0xa0, 0x2f7: 0xa0, 0x2f8: 0xa0, 0x2f9: 0xa0, 0x2fa: 0xa0, 0x2fb: 0xa0, 0x2fc: 0xa0, 0x2fd: 0xa0, 0x2fe: 0xa0, 0x2ff: 0xa0, // Block 0xc, offset 0x300 0x300: 0xa0, 0x301: 0xa0, 0x302: 0xa0, 0x303: 0xa0, 0x304: 0xa0, 0x305: 0xa0, 0x306: 0xa0, 0x307: 0xa0, 0x308: 0xa0, 0x309: 0xa0, 0x30a: 0xa0, 0x30b: 0xa0, 0x30c: 0xa0, 0x30d: 0xa0, 0x30e: 0xa0, 0x30f: 0xa0, 0x310: 0xa0, 0x311: 0xa0, 0x312: 0xa0, 0x313: 0xa0, 0x314: 0xa0, 0x315: 0xa0, 0x316: 0xa0, 0x317: 0xa0, - 0x318: 0xa0, 0x319: 0xa0, 0x31a: 0xa0, 0x31b: 0xa0, 0x31c: 0xa0, 0x31d: 0xa0, 0x31e: 0xf9, 0x31f: 0xfa, + 0x318: 0xa0, 0x319: 0xa0, 0x31a: 0xa0, 0x31b: 0xa0, 0x31c: 0xa0, 0x31d: 0xa0, 0x31e: 0xfb, 0x31f: 0xfc, // Block 0xd, offset 0x340 - 0x340: 0xfb, 0x341: 0xfb, 0x342: 0xfb, 0x343: 0xfb, 0x344: 0xfb, 0x345: 0xfb, 0x346: 0xfb, 0x347: 0xfb, - 0x348: 0xfb, 0x349: 0xfb, 0x34a: 0xfb, 0x34b: 0xfb, 0x34c: 0xfb, 0x34d: 0xfb, 0x34e: 0xfb, 0x34f: 0xfb, - 0x350: 0xfb, 0x351: 0xfb, 0x352: 0xfb, 0x353: 0xfb, 0x354: 0xfb, 0x355: 0xfb, 0x356: 0xfb, 0x357: 0xfb, - 0x358: 0xfb, 0x359: 0xfb, 0x35a: 0xfb, 0x35b: 0xfb, 0x35c: 0xfb, 0x35d: 0xfb, 0x35e: 0xfb, 0x35f: 0xfb, - 0x360: 0xfb, 0x361: 0xfb, 0x362: 0xfb, 0x363: 0xfb, 0x364: 0xfb, 0x365: 0xfb, 0x366: 0xfb, 0x367: 0xfb, - 0x368: 0xfb, 0x369: 0xfb, 0x36a: 0xfb, 0x36b: 0xfb, 0x36c: 0xfb, 0x36d: 0xfb, 0x36e: 0xfb, 0x36f: 0xfb, - 0x370: 0xfb, 0x371: 0xfb, 0x372: 0xfb, 0x373: 0xfb, 0x374: 0xfb, 0x375: 0xfb, 0x376: 0xfb, 0x377: 0xfb, - 0x378: 0xfb, 0x379: 0xfb, 0x37a: 0xfb, 0x37b: 0xfb, 0x37c: 0xfb, 0x37d: 0xfb, 0x37e: 0xfb, 0x37f: 0xfb, + 0x340: 0xfd, 0x341: 0xfd, 0x342: 0xfd, 0x343: 0xfd, 0x344: 0xfd, 0x345: 0xfd, 0x346: 0xfd, 0x347: 0xfd, + 0x348: 0xfd, 0x349: 0xfd, 0x34a: 0xfd, 0x34b: 0xfd, 0x34c: 0xfd, 0x34d: 0xfd, 0x34e: 0xfd, 0x34f: 0xfd, + 0x350: 0xfd, 0x351: 0xfd, 0x352: 0xfd, 0x353: 0xfd, 0x354: 0xfd, 0x355: 0xfd, 0x356: 0xfd, 0x357: 0xfd, + 0x358: 0xfd, 0x359: 0xfd, 0x35a: 0xfd, 0x35b: 0xfd, 0x35c: 0xfd, 0x35d: 0xfd, 0x35e: 0xfd, 0x35f: 0xfd, + 0x360: 0xfd, 0x361: 0xfd, 0x362: 0xfd, 0x363: 0xfd, 0x364: 0xfd, 0x365: 0xfd, 0x366: 0xfd, 0x367: 0xfd, + 0x368: 0xfd, 0x369: 0xfd, 0x36a: 0xfd, 0x36b: 0xfd, 0x36c: 0xfd, 0x36d: 0xfd, 0x36e: 0xfd, 0x36f: 0xfd, + 0x370: 0xfd, 0x371: 0xfd, 0x372: 0xfd, 0x373: 0xfd, 0x374: 0xfd, 0x375: 0xfd, 0x376: 0xfd, 0x377: 0xfd, + 0x378: 0xfd, 0x379: 0xfd, 0x37a: 0xfd, 0x37b: 0xfd, 0x37c: 0xfd, 0x37d: 0xfd, 0x37e: 0xfd, 0x37f: 0xfd, // Block 0xe, offset 0x380 - 0x380: 0xfb, 0x381: 0xfb, 0x382: 0xfb, 0x383: 0xfb, 0x384: 0xfb, 0x385: 0xfb, 0x386: 0xfb, 0x387: 0xfb, - 0x388: 0xfb, 0x389: 0xfb, 0x38a: 0xfb, 0x38b: 0xfb, 0x38c: 0xfb, 0x38d: 0xfb, 0x38e: 0xfb, 0x38f: 0xfb, - 0x390: 0xfb, 0x391: 0xfb, 0x392: 0xfb, 0x393: 0xfb, 0x394: 0xfb, 0x395: 0xfb, 0x396: 0xfb, 0x397: 0xfb, - 0x398: 0xfb, 0x399: 0xfb, 0x39a: 0xfb, 0x39b: 0xfb, 0x39c: 0xfb, 0x39d: 0xfb, 0x39e: 0xfb, 0x39f: 0xfb, - 0x3a0: 0xfb, 0x3a1: 0xfb, 0x3a2: 0xfb, 0x3a3: 0xfb, 0x3a4: 0xfc, 0x3a5: 0xfd, 0x3a6: 0xfe, 0x3a7: 0xff, - 0x3a8: 0x47, 0x3a9: 0x100, 0x3aa: 0x101, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, - 0x3b0: 0x102, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x103, 0x3b7: 0x52, - 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, + 0x380: 0xfd, 0x381: 0xfd, 0x382: 0xfd, 0x383: 0xfd, 0x384: 0xfd, 0x385: 0xfd, 0x386: 0xfd, 0x387: 0xfd, + 0x388: 0xfd, 0x389: 0xfd, 0x38a: 0xfd, 0x38b: 0xfd, 0x38c: 0xfd, 0x38d: 0xfd, 0x38e: 0xfd, 0x38f: 0xfd, + 0x390: 0xfd, 0x391: 0xfd, 0x392: 0xfd, 0x393: 0xfd, 0x394: 0xfd, 0x395: 0xfd, 0x396: 0xfd, 0x397: 0xfd, + 0x398: 0xfd, 0x399: 0xfd, 0x39a: 0xfd, 0x39b: 0xfd, 0x39c: 0xfd, 0x39d: 0xfd, 0x39e: 0xfd, 0x39f: 0xfd, + 0x3a0: 0xfd, 0x3a1: 0xfd, 0x3a2: 0xfd, 0x3a3: 0xfd, 0x3a4: 0xfe, 0x3a5: 0xff, 0x3a6: 0x100, 0x3a7: 0x101, + 0x3a8: 0x45, 0x3a9: 0x102, 0x3aa: 0x103, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a, + 0x3b0: 0x104, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x105, 0x3b7: 0x50, + 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58, // Block 0xf, offset 0x3c0 - 0x3c0: 0x104, 0x3c1: 0x105, 0x3c2: 0xa0, 0x3c3: 0x106, 0x3c4: 0x107, 0x3c5: 0x9c, 0x3c6: 0x108, 0x3c7: 0x109, - 0x3c8: 0xfb, 0x3c9: 0xfb, 0x3ca: 0x10a, 0x3cb: 0x10b, 0x3cc: 0x10c, 0x3cd: 0x10d, 0x3ce: 0x10e, 0x3cf: 0x10f, - 0x3d0: 0x110, 0x3d1: 0xa0, 0x3d2: 0x111, 0x3d3: 0x112, 0x3d4: 0x113, 0x3d5: 0x114, 0x3d6: 0xfb, 0x3d7: 0xfb, - 0x3d8: 0xa0, 0x3d9: 0xa0, 0x3da: 0xa0, 0x3db: 0xa0, 0x3dc: 0x115, 0x3dd: 0x116, 0x3de: 0xfb, 0x3df: 0xfb, - 0x3e0: 0x117, 0x3e1: 0x118, 0x3e2: 0x119, 0x3e3: 0x11a, 0x3e4: 0x11b, 0x3e5: 0xfb, 0x3e6: 0x11c, 0x3e7: 0x11d, - 0x3e8: 0x11e, 0x3e9: 0x11f, 0x3ea: 0x120, 0x3eb: 0x5b, 0x3ec: 0x121, 0x3ed: 0x122, 0x3ee: 0x5c, 0x3ef: 0xfb, - 0x3f0: 0x123, 0x3f1: 0x124, 0x3f2: 0x125, 0x3f3: 0x126, 0x3f4: 0x127, 0x3f5: 0xfb, 0x3f6: 0xfb, 0x3f7: 0xfb, - 0x3f8: 0xfb, 0x3f9: 0x128, 0x3fa: 0x129, 0x3fb: 0xfb, 0x3fc: 0x12a, 0x3fd: 0x12b, 0x3fe: 0x12c, 0x3ff: 0x12d, + 0x3c0: 0x106, 0x3c1: 0x107, 0x3c2: 0xa0, 0x3c3: 0x108, 0x3c4: 0x109, 0x3c5: 0x9c, 0x3c6: 0x10a, 0x3c7: 0x10b, + 0x3c8: 0xfd, 0x3c9: 0xfd, 0x3ca: 0x10c, 0x3cb: 0x10d, 0x3cc: 0x10e, 0x3cd: 0x10f, 0x3ce: 0x110, 0x3cf: 0x111, + 0x3d0: 0x112, 0x3d1: 0xa0, 0x3d2: 0x113, 0x3d3: 0x114, 0x3d4: 0x115, 0x3d5: 0x116, 0x3d6: 0xfd, 0x3d7: 0xfd, + 0x3d8: 0xa0, 0x3d9: 0xa0, 0x3da: 0xa0, 0x3db: 0xa0, 0x3dc: 0x117, 0x3dd: 0x118, 0x3de: 0xfd, 0x3df: 0xfd, + 0x3e0: 0x119, 0x3e1: 0x11a, 0x3e2: 0x11b, 0x3e3: 0x11c, 0x3e4: 0x11d, 0x3e5: 0xfd, 0x3e6: 0x11e, 0x3e7: 0x11f, + 0x3e8: 0x120, 0x3e9: 0x121, 0x3ea: 0x122, 0x3eb: 0x59, 0x3ec: 0x123, 0x3ed: 0x124, 0x3ee: 0x5a, 0x3ef: 0xfd, + 0x3f0: 0x125, 0x3f1: 0x126, 0x3f2: 0x127, 0x3f3: 0x128, 0x3f4: 0x129, 0x3f5: 0xfd, 0x3f6: 0xfd, 0x3f7: 0xfd, + 0x3f8: 0xfd, 0x3f9: 0x12a, 0x3fa: 0x12b, 0x3fb: 0xfd, 0x3fc: 0x12c, 0x3fd: 0x12d, 0x3fe: 0x12e, 0x3ff: 0x12f, // Block 0x10, offset 0x400 - 0x400: 0x12e, 0x401: 0x12f, 0x402: 0x130, 0x403: 0x131, 0x404: 0x132, 0x405: 0x133, 0x406: 0x134, 0x407: 0x135, - 0x408: 0x136, 0x409: 0xfb, 0x40a: 0x137, 0x40b: 0x138, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xfb, 0x40f: 0xfb, - 0x410: 0x139, 0x411: 0x13a, 0x412: 0x13b, 0x413: 0x13c, 0x414: 0xfb, 0x415: 0xfb, 0x416: 0x13d, 0x417: 0x13e, - 0x418: 0x13f, 0x419: 0x140, 0x41a: 0x141, 0x41b: 0x142, 0x41c: 0x143, 0x41d: 0xfb, 0x41e: 0xfb, 0x41f: 0xfb, - 0x420: 0x144, 0x421: 0xfb, 0x422: 0x145, 0x423: 0x146, 0x424: 0x5f, 0x425: 0x147, 0x426: 0x148, 0x427: 0x149, - 0x428: 0x14a, 0x429: 0x14b, 0x42a: 0x14c, 0x42b: 0x14d, 0x42c: 0xfb, 0x42d: 0xfb, 0x42e: 0xfb, 0x42f: 0xfb, - 0x430: 0x14e, 0x431: 0x14f, 0x432: 0x150, 0x433: 0xfb, 0x434: 0x151, 0x435: 0x152, 0x436: 0x153, 0x437: 0xfb, - 0x438: 0xfb, 0x439: 0xfb, 0x43a: 0xfb, 0x43b: 0x154, 0x43c: 0xfb, 0x43d: 0xfb, 0x43e: 0x155, 0x43f: 0x156, + 0x400: 0x130, 0x401: 0x131, 0x402: 0x132, 0x403: 0x133, 0x404: 0x134, 0x405: 0x135, 0x406: 0x136, 0x407: 0x137, + 0x408: 0x138, 0x409: 0xfd, 0x40a: 0x139, 0x40b: 0x13a, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xfd, 0x40f: 0xfd, + 0x410: 0x13b, 0x411: 0x13c, 0x412: 0x13d, 0x413: 0x13e, 0x414: 0xfd, 0x415: 0xfd, 0x416: 0x13f, 0x417: 0x140, + 0x418: 0x141, 0x419: 0x142, 0x41a: 0x143, 0x41b: 0x144, 0x41c: 0x145, 0x41d: 0xfd, 0x41e: 0xfd, 0x41f: 0xfd, + 0x420: 0x146, 0x421: 0xfd, 0x422: 0x147, 0x423: 0x148, 0x424: 0x5d, 0x425: 0x149, 0x426: 0x14a, 0x427: 0x14b, + 0x428: 0x14c, 0x429: 0x14d, 0x42a: 0x14e, 0x42b: 0x14f, 0x42c: 0xfd, 0x42d: 0xfd, 0x42e: 0xfd, 0x42f: 0xfd, + 0x430: 0x150, 0x431: 0x151, 0x432: 0x152, 0x433: 0xfd, 0x434: 0x153, 0x435: 0x154, 0x436: 0x155, 0x437: 0xfd, + 0x438: 0xfd, 0x439: 0xfd, 0x43a: 0xfd, 0x43b: 0x156, 0x43c: 0xfd, 0x43d: 0xfd, 0x43e: 0x157, 0x43f: 0x158, // Block 0x11, offset 0x440 0x440: 0xa0, 0x441: 0xa0, 0x442: 0xa0, 0x443: 0xa0, 0x444: 0xa0, 0x445: 0xa0, 0x446: 0xa0, 0x447: 0xa0, - 0x448: 0xa0, 0x449: 0xa0, 0x44a: 0xa0, 0x44b: 0xa0, 0x44c: 0xa0, 0x44d: 0xa0, 0x44e: 0x157, 0x44f: 0xfb, - 0x450: 0x9c, 0x451: 0x158, 0x452: 0xa0, 0x453: 0xa0, 0x454: 0xa0, 0x455: 0x159, 0x456: 0xfb, 0x457: 0xfb, - 0x458: 0xfb, 0x459: 0xfb, 0x45a: 0xfb, 0x45b: 0xfb, 0x45c: 0xfb, 0x45d: 0xfb, 0x45e: 0xfb, 0x45f: 0xfb, - 0x460: 0xfb, 0x461: 0xfb, 0x462: 0xfb, 0x463: 0xfb, 0x464: 0xfb, 0x465: 0xfb, 0x466: 0xfb, 0x467: 0xfb, - 0x468: 0xfb, 0x469: 0xfb, 0x46a: 0xfb, 0x46b: 0xfb, 0x46c: 0xfb, 0x46d: 0xfb, 0x46e: 0xfb, 0x46f: 0xfb, - 0x470: 0xfb, 0x471: 0xfb, 0x472: 0xfb, 0x473: 0xfb, 0x474: 0xfb, 0x475: 0xfb, 0x476: 0xfb, 0x477: 0xfb, - 0x478: 0xfb, 0x479: 0xfb, 0x47a: 0xfb, 0x47b: 0xfb, 0x47c: 0xfb, 0x47d: 0xfb, 0x47e: 0xfb, 0x47f: 0xfb, + 0x448: 0xa0, 0x449: 0xa0, 0x44a: 0xa0, 0x44b: 0xa0, 0x44c: 0xa0, 0x44d: 0xa0, 0x44e: 0x159, 0x44f: 0xfd, + 0x450: 0x9c, 0x451: 0x15a, 0x452: 0xa0, 0x453: 0xa0, 0x454: 0xa0, 0x455: 0x15b, 0x456: 0xfd, 0x457: 0xfd, + 0x458: 0xfd, 0x459: 0xfd, 0x45a: 0xfd, 0x45b: 0xfd, 0x45c: 0xfd, 0x45d: 0xfd, 0x45e: 0xfd, 0x45f: 0xfd, + 0x460: 0xfd, 0x461: 0xfd, 0x462: 0xfd, 0x463: 0xfd, 0x464: 0xfd, 0x465: 0xfd, 0x466: 0xfd, 0x467: 0xfd, + 0x468: 0xfd, 0x469: 0xfd, 0x46a: 0xfd, 0x46b: 0xfd, 0x46c: 0xfd, 0x46d: 0xfd, 0x46e: 0xfd, 0x46f: 0xfd, + 0x470: 0xfd, 0x471: 0xfd, 0x472: 0xfd, 0x473: 0xfd, 0x474: 0xfd, 0x475: 0xfd, 0x476: 0xfd, 0x477: 0xfd, + 0x478: 0xfd, 0x479: 0xfd, 0x47a: 0xfd, 0x47b: 0xfd, 0x47c: 0xfd, 0x47d: 0xfd, 0x47e: 0xfd, 0x47f: 0xfd, // Block 0x12, offset 0x480 0x480: 0xa0, 0x481: 0xa0, 0x482: 0xa0, 0x483: 0xa0, 0x484: 0xa0, 0x485: 0xa0, 0x486: 0xa0, 0x487: 0xa0, 0x488: 0xa0, 0x489: 0xa0, 0x48a: 0xa0, 0x48b: 0xa0, 0x48c: 0xa0, 0x48d: 0xa0, 0x48e: 0xa0, 0x48f: 0xa0, - 0x490: 0x15a, 0x491: 0xfb, 0x492: 0xfb, 0x493: 0xfb, 0x494: 0xfb, 0x495: 0xfb, 0x496: 0xfb, 0x497: 0xfb, - 0x498: 0xfb, 0x499: 0xfb, 0x49a: 0xfb, 0x49b: 0xfb, 0x49c: 0xfb, 0x49d: 0xfb, 0x49e: 0xfb, 0x49f: 0xfb, - 0x4a0: 0xfb, 0x4a1: 0xfb, 0x4a2: 0xfb, 0x4a3: 0xfb, 0x4a4: 0xfb, 0x4a5: 0xfb, 0x4a6: 0xfb, 0x4a7: 0xfb, - 0x4a8: 0xfb, 0x4a9: 0xfb, 0x4aa: 0xfb, 0x4ab: 0xfb, 0x4ac: 0xfb, 0x4ad: 0xfb, 0x4ae: 0xfb, 0x4af: 0xfb, - 0x4b0: 0xfb, 0x4b1: 0xfb, 0x4b2: 0xfb, 0x4b3: 0xfb, 0x4b4: 0xfb, 0x4b5: 0xfb, 0x4b6: 0xfb, 0x4b7: 0xfb, - 0x4b8: 0xfb, 0x4b9: 0xfb, 0x4ba: 0xfb, 0x4bb: 0xfb, 0x4bc: 0xfb, 0x4bd: 0xfb, 0x4be: 0xfb, 0x4bf: 0xfb, + 0x490: 0x15c, 0x491: 0xfd, 0x492: 0xfd, 0x493: 0xfd, 0x494: 0xfd, 0x495: 0xfd, 0x496: 0xfd, 0x497: 0xfd, + 0x498: 0xfd, 0x499: 0xfd, 0x49a: 0xfd, 0x49b: 0xfd, 0x49c: 0xfd, 0x49d: 0xfd, 0x49e: 0xfd, 0x49f: 0xfd, + 0x4a0: 0xfd, 0x4a1: 0xfd, 0x4a2: 0xfd, 0x4a3: 0xfd, 0x4a4: 0xfd, 0x4a5: 0xfd, 0x4a6: 0xfd, 0x4a7: 0xfd, + 0x4a8: 0xfd, 0x4a9: 0xfd, 0x4aa: 0xfd, 0x4ab: 0xfd, 0x4ac: 0xfd, 0x4ad: 0xfd, 0x4ae: 0xfd, 0x4af: 0xfd, + 0x4b0: 0xfd, 0x4b1: 0xfd, 0x4b2: 0xfd, 0x4b3: 0xfd, 0x4b4: 0xfd, 0x4b5: 0xfd, 0x4b6: 0xfd, 0x4b7: 0xfd, + 0x4b8: 0xfd, 0x4b9: 0xfd, 0x4ba: 0xfd, 0x4bb: 0xfd, 0x4bc: 0xfd, 0x4bd: 0xfd, 0x4be: 0xfd, 0x4bf: 0xfd, // Block 0x13, offset 0x4c0 - 0x4c0: 0xfb, 0x4c1: 0xfb, 0x4c2: 0xfb, 0x4c3: 0xfb, 0x4c4: 0xfb, 0x4c5: 0xfb, 0x4c6: 0xfb, 0x4c7: 0xfb, - 0x4c8: 0xfb, 0x4c9: 0xfb, 0x4ca: 0xfb, 0x4cb: 0xfb, 0x4cc: 0xfb, 0x4cd: 0xfb, 0x4ce: 0xfb, 0x4cf: 0xfb, + 0x4c0: 0xfd, 0x4c1: 0xfd, 0x4c2: 0xfd, 0x4c3: 0xfd, 0x4c4: 0xfd, 0x4c5: 0xfd, 0x4c6: 0xfd, 0x4c7: 0xfd, + 0x4c8: 0xfd, 0x4c9: 0xfd, 0x4ca: 0xfd, 0x4cb: 0xfd, 0x4cc: 0xfd, 0x4cd: 0xfd, 0x4ce: 0xfd, 0x4cf: 0xfd, 0x4d0: 0xa0, 0x4d1: 0xa0, 0x4d2: 0xa0, 0x4d3: 0xa0, 0x4d4: 0xa0, 0x4d5: 0xa0, 0x4d6: 0xa0, 0x4d7: 0xa0, - 0x4d8: 0xa0, 0x4d9: 0x15b, 0x4da: 0xfb, 0x4db: 0xfb, 0x4dc: 0xfb, 0x4dd: 0xfb, 0x4de: 0xfb, 0x4df: 0xfb, - 0x4e0: 0xfb, 0x4e1: 0xfb, 0x4e2: 0xfb, 0x4e3: 0xfb, 0x4e4: 0xfb, 0x4e5: 0xfb, 0x4e6: 0xfb, 0x4e7: 0xfb, - 0x4e8: 0xfb, 0x4e9: 0xfb, 0x4ea: 0xfb, 0x4eb: 0xfb, 0x4ec: 0xfb, 0x4ed: 0xfb, 0x4ee: 0xfb, 0x4ef: 0xfb, - 0x4f0: 0xfb, 0x4f1: 0xfb, 0x4f2: 0xfb, 0x4f3: 0xfb, 0x4f4: 0xfb, 0x4f5: 0xfb, 0x4f6: 0xfb, 0x4f7: 0xfb, - 0x4f8: 0xfb, 0x4f9: 0xfb, 0x4fa: 0xfb, 0x4fb: 0xfb, 0x4fc: 0xfb, 0x4fd: 0xfb, 0x4fe: 0xfb, 0x4ff: 0xfb, + 0x4d8: 0xa0, 0x4d9: 0x15d, 0x4da: 0xfd, 0x4db: 0xfd, 0x4dc: 0xfd, 0x4dd: 0xfd, 0x4de: 0xfd, 0x4df: 0xfd, + 0x4e0: 0xfd, 0x4e1: 0xfd, 0x4e2: 0xfd, 0x4e3: 0xfd, 0x4e4: 0xfd, 0x4e5: 0xfd, 0x4e6: 0xfd, 0x4e7: 0xfd, + 0x4e8: 0xfd, 0x4e9: 0xfd, 0x4ea: 0xfd, 0x4eb: 0xfd, 0x4ec: 0xfd, 0x4ed: 0xfd, 0x4ee: 0xfd, 0x4ef: 0xfd, + 0x4f0: 0xfd, 0x4f1: 0xfd, 0x4f2: 0xfd, 0x4f3: 0xfd, 0x4f4: 0xfd, 0x4f5: 0xfd, 0x4f6: 0xfd, 0x4f7: 0xfd, + 0x4f8: 0xfd, 0x4f9: 0xfd, 0x4fa: 0xfd, 0x4fb: 0xfd, 0x4fc: 0xfd, 0x4fd: 0xfd, 0x4fe: 0xfd, 0x4ff: 0xfd, // Block 0x14, offset 0x500 - 0x500: 0xfb, 0x501: 0xfb, 0x502: 0xfb, 0x503: 0xfb, 0x504: 0xfb, 0x505: 0xfb, 0x506: 0xfb, 0x507: 0xfb, - 0x508: 0xfb, 0x509: 0xfb, 0x50a: 0xfb, 0x50b: 0xfb, 0x50c: 0xfb, 0x50d: 0xfb, 0x50e: 0xfb, 0x50f: 0xfb, - 0x510: 0xfb, 0x511: 0xfb, 0x512: 0xfb, 0x513: 0xfb, 0x514: 0xfb, 0x515: 0xfb, 0x516: 0xfb, 0x517: 0xfb, - 0x518: 0xfb, 0x519: 0xfb, 0x51a: 0xfb, 0x51b: 0xfb, 0x51c: 0xfb, 0x51d: 0xfb, 0x51e: 0xfb, 0x51f: 0xfb, + 0x500: 0xfd, 0x501: 0xfd, 0x502: 0xfd, 0x503: 0xfd, 0x504: 0xfd, 0x505: 0xfd, 0x506: 0xfd, 0x507: 0xfd, + 0x508: 0xfd, 0x509: 0xfd, 0x50a: 0xfd, 0x50b: 0xfd, 0x50c: 0xfd, 0x50d: 0xfd, 0x50e: 0xfd, 0x50f: 0xfd, + 0x510: 0xfd, 0x511: 0xfd, 0x512: 0xfd, 0x513: 0xfd, 0x514: 0xfd, 0x515: 0xfd, 0x516: 0xfd, 0x517: 0xfd, + 0x518: 0xfd, 0x519: 0xfd, 0x51a: 0xfd, 0x51b: 0xfd, 0x51c: 0xfd, 0x51d: 0xfd, 0x51e: 0xfd, 0x51f: 0xfd, 0x520: 0xa0, 0x521: 0xa0, 0x522: 0xa0, 0x523: 0xa0, 0x524: 0xa0, 0x525: 0xa0, 0x526: 0xa0, 0x527: 0xa0, - 0x528: 0x14d, 0x529: 0x15c, 0x52a: 0xfb, 0x52b: 0x15d, 0x52c: 0x15e, 0x52d: 0x15f, 0x52e: 0x160, 0x52f: 0xfb, - 0x530: 0xfb, 0x531: 0xfb, 0x532: 0xfb, 0x533: 0xfb, 0x534: 0xfb, 0x535: 0xfb, 0x536: 0xfb, 0x537: 0xfb, - 0x538: 0xfb, 0x539: 0x161, 0x53a: 0x162, 0x53b: 0xfb, 0x53c: 0xa0, 0x53d: 0x163, 0x53e: 0x164, 0x53f: 0x165, + 0x528: 0x14f, 0x529: 0x15e, 0x52a: 0xfd, 0x52b: 0x15f, 0x52c: 0x160, 0x52d: 0x161, 0x52e: 0x162, 0x52f: 0xfd, + 0x530: 0xfd, 0x531: 0xfd, 0x532: 0xfd, 0x533: 0xfd, 0x534: 0xfd, 0x535: 0xfd, 0x536: 0xfd, 0x537: 0xfd, + 0x538: 0xfd, 0x539: 0x163, 0x53a: 0x164, 0x53b: 0xfd, 0x53c: 0xa0, 0x53d: 0x165, 0x53e: 0x166, 0x53f: 0x167, // Block 0x15, offset 0x540 0x540: 0xa0, 0x541: 0xa0, 0x542: 0xa0, 0x543: 0xa0, 0x544: 0xa0, 0x545: 0xa0, 0x546: 0xa0, 0x547: 0xa0, 0x548: 0xa0, 0x549: 0xa0, 0x54a: 0xa0, 0x54b: 0xa0, 0x54c: 0xa0, 0x54d: 0xa0, 0x54e: 0xa0, 0x54f: 0xa0, 0x550: 0xa0, 0x551: 0xa0, 0x552: 0xa0, 0x553: 0xa0, 0x554: 0xa0, 0x555: 0xa0, 0x556: 0xa0, 0x557: 0xa0, - 0x558: 0xa0, 0x559: 0xa0, 0x55a: 0xa0, 0x55b: 0xa0, 0x55c: 0xa0, 0x55d: 0xa0, 0x55e: 0xa0, 0x55f: 0x166, + 0x558: 0xa0, 0x559: 0xa0, 0x55a: 0xa0, 0x55b: 0xa0, 0x55c: 0xa0, 0x55d: 0xa0, 0x55e: 0xa0, 0x55f: 0x168, 0x560: 0xa0, 0x561: 0xa0, 0x562: 0xa0, 0x563: 0xa0, 0x564: 0xa0, 0x565: 0xa0, 0x566: 0xa0, 0x567: 0xa0, 0x568: 0xa0, 0x569: 0xa0, 0x56a: 0xa0, 0x56b: 0xa0, 0x56c: 0xa0, 0x56d: 0xa0, 0x56e: 0xa0, 0x56f: 0xa0, - 0x570: 0xa0, 0x571: 0xa0, 0x572: 0xa0, 0x573: 0x167, 0x574: 0x168, 0x575: 0xfb, 0x576: 0xfb, 0x577: 0xfb, - 0x578: 0xfb, 0x579: 0xfb, 0x57a: 0xfb, 0x57b: 0xfb, 0x57c: 0xfb, 0x57d: 0xfb, 0x57e: 0xfb, 0x57f: 0xfb, + 0x570: 0xa0, 0x571: 0xa0, 0x572: 0xa0, 0x573: 0x169, 0x574: 0x16a, 0x575: 0xfd, 0x576: 0xfd, 0x577: 0xfd, + 0x578: 0xfd, 0x579: 0xfd, 0x57a: 0xfd, 0x57b: 0xfd, 0x57c: 0xfd, 0x57d: 0xfd, 0x57e: 0xfd, 0x57f: 0xfd, // Block 0x16, offset 0x580 - 0x580: 0xa0, 0x581: 0xa0, 0x582: 0xa0, 0x583: 0xa0, 0x584: 0x169, 0x585: 0x16a, 0x586: 0xa0, 0x587: 0xa0, - 0x588: 0xa0, 0x589: 0xa0, 0x58a: 0xa0, 0x58b: 0x16b, 0x58c: 0xfb, 0x58d: 0xfb, 0x58e: 0xfb, 0x58f: 0xfb, - 0x590: 0xfb, 0x591: 0xfb, 0x592: 0xfb, 0x593: 0xfb, 0x594: 0xfb, 0x595: 0xfb, 0x596: 0xfb, 0x597: 0xfb, - 0x598: 0xfb, 0x599: 0xfb, 0x59a: 0xfb, 0x59b: 0xfb, 0x59c: 0xfb, 0x59d: 0xfb, 0x59e: 0xfb, 0x59f: 0xfb, - 0x5a0: 0xfb, 0x5a1: 0xfb, 0x5a2: 0xfb, 0x5a3: 0xfb, 0x5a4: 0xfb, 0x5a5: 0xfb, 0x5a6: 0xfb, 0x5a7: 0xfb, - 0x5a8: 0xfb, 0x5a9: 0xfb, 0x5aa: 0xfb, 0x5ab: 0xfb, 0x5ac: 0xfb, 0x5ad: 0xfb, 0x5ae: 0xfb, 0x5af: 0xfb, - 0x5b0: 0xa0, 0x5b1: 0x16c, 0x5b2: 0x16d, 0x5b3: 0xfb, 0x5b4: 0xfb, 0x5b5: 0xfb, 0x5b6: 0xfb, 0x5b7: 0xfb, - 0x5b8: 0xfb, 0x5b9: 0xfb, 0x5ba: 0xfb, 0x5bb: 0xfb, 0x5bc: 0xfb, 0x5bd: 0xfb, 0x5be: 0xfb, 0x5bf: 0xfb, + 0x580: 0xa0, 0x581: 0xa0, 0x582: 0xa0, 0x583: 0xa0, 0x584: 0x16b, 0x585: 0x16c, 0x586: 0xa0, 0x587: 0xa0, + 0x588: 0xa0, 0x589: 0xa0, 0x58a: 0xa0, 0x58b: 0x16d, 0x58c: 0xfd, 0x58d: 0xfd, 0x58e: 0xfd, 0x58f: 0xfd, + 0x590: 0xfd, 0x591: 0xfd, 0x592: 0xfd, 0x593: 0xfd, 0x594: 0xfd, 0x595: 0xfd, 0x596: 0xfd, 0x597: 0xfd, + 0x598: 0xfd, 0x599: 0xfd, 0x59a: 0xfd, 0x59b: 0xfd, 0x59c: 0xfd, 0x59d: 0xfd, 0x59e: 0xfd, 0x59f: 0xfd, + 0x5a0: 0xfd, 0x5a1: 0xfd, 0x5a2: 0xfd, 0x5a3: 0xfd, 0x5a4: 0xfd, 0x5a5: 0xfd, 0x5a6: 0xfd, 0x5a7: 0xfd, + 0x5a8: 0xfd, 0x5a9: 0xfd, 0x5aa: 0xfd, 0x5ab: 0xfd, 0x5ac: 0xfd, 0x5ad: 0xfd, 0x5ae: 0xfd, 0x5af: 0xfd, + 0x5b0: 0xa0, 0x5b1: 0x16e, 0x5b2: 0x16f, 0x5b3: 0xfd, 0x5b4: 0xfd, 0x5b5: 0xfd, 0x5b6: 0xfd, 0x5b7: 0xfd, + 0x5b8: 0xfd, 0x5b9: 0xfd, 0x5ba: 0xfd, 0x5bb: 0xfd, 0x5bc: 0xfd, 0x5bd: 0xfd, 0x5be: 0xfd, 0x5bf: 0xfd, // Block 0x17, offset 0x5c0 - 0x5c0: 0x9c, 0x5c1: 0x9c, 0x5c2: 0x9c, 0x5c3: 0x16e, 0x5c4: 0x16f, 0x5c5: 0x170, 0x5c6: 0x171, 0x5c7: 0x172, - 0x5c8: 0x9c, 0x5c9: 0x173, 0x5ca: 0xfb, 0x5cb: 0x174, 0x5cc: 0x9c, 0x5cd: 0x175, 0x5ce: 0xfb, 0x5cf: 0xfb, - 0x5d0: 0x60, 0x5d1: 0x61, 0x5d2: 0x62, 0x5d3: 0x63, 0x5d4: 0x64, 0x5d5: 0x65, 0x5d6: 0x66, 0x5d7: 0x67, - 0x5d8: 0x68, 0x5d9: 0x69, 0x5da: 0x6a, 0x5db: 0x6b, 0x5dc: 0x6c, 0x5dd: 0x6d, 0x5de: 0x6e, 0x5df: 0x6f, + 0x5c0: 0x9c, 0x5c1: 0x9c, 0x5c2: 0x9c, 0x5c3: 0x170, 0x5c4: 0x171, 0x5c5: 0x172, 0x5c6: 0x173, 0x5c7: 0x174, + 0x5c8: 0x9c, 0x5c9: 0x175, 0x5ca: 0xfd, 0x5cb: 0x176, 0x5cc: 0x9c, 0x5cd: 0x177, 0x5ce: 0xfd, 0x5cf: 0xfd, + 0x5d0: 0x5e, 0x5d1: 0x5f, 0x5d2: 0x60, 0x5d3: 0x61, 0x5d4: 0x62, 0x5d5: 0x63, 0x5d6: 0x64, 0x5d7: 0x65, + 0x5d8: 0x66, 0x5d9: 0x67, 0x5da: 0x68, 0x5db: 0x69, 0x5dc: 0x6a, 0x5dd: 0x6b, 0x5de: 0x6c, 0x5df: 0x6d, 0x5e0: 0x9c, 0x5e1: 0x9c, 0x5e2: 0x9c, 0x5e3: 0x9c, 0x5e4: 0x9c, 0x5e5: 0x9c, 0x5e6: 0x9c, 0x5e7: 0x9c, - 0x5e8: 0x176, 0x5e9: 0x177, 0x5ea: 0x178, 0x5eb: 0xfb, 0x5ec: 0xfb, 0x5ed: 0xfb, 0x5ee: 0xfb, 0x5ef: 0xfb, - 0x5f0: 0xfb, 0x5f1: 0xfb, 0x5f2: 0xfb, 0x5f3: 0xfb, 0x5f4: 0xfb, 0x5f5: 0xfb, 0x5f6: 0xfb, 0x5f7: 0xfb, - 0x5f8: 0xfb, 0x5f9: 0xfb, 0x5fa: 0xfb, 0x5fb: 0xfb, 0x5fc: 0xfb, 0x5fd: 0xfb, 0x5fe: 0xfb, 0x5ff: 0xfb, + 0x5e8: 0x178, 0x5e9: 0x179, 0x5ea: 0x17a, 0x5eb: 0xfd, 0x5ec: 0xfd, 0x5ed: 0xfd, 0x5ee: 0xfd, 0x5ef: 0xfd, + 0x5f0: 0xfd, 0x5f1: 0xfd, 0x5f2: 0xfd, 0x5f3: 0xfd, 0x5f4: 0xfd, 0x5f5: 0xfd, 0x5f6: 0xfd, 0x5f7: 0xfd, + 0x5f8: 0xfd, 0x5f9: 0xfd, 0x5fa: 0xfd, 0x5fb: 0xfd, 0x5fc: 0xfd, 0x5fd: 0xfd, 0x5fe: 0xfd, 0x5ff: 0xfd, // Block 0x18, offset 0x600 - 0x600: 0x179, 0x601: 0xfb, 0x602: 0xfb, 0x603: 0xfb, 0x604: 0x17a, 0x605: 0x17b, 0x606: 0xfb, 0x607: 0xfb, - 0x608: 0xfb, 0x609: 0xfb, 0x60a: 0xfb, 0x60b: 0x17c, 0x60c: 0xfb, 0x60d: 0xfb, 0x60e: 0xfb, 0x60f: 0xfb, - 0x610: 0xfb, 0x611: 0xfb, 0x612: 0xfb, 0x613: 0xfb, 0x614: 0xfb, 0x615: 0xfb, 0x616: 0xfb, 0x617: 0xfb, - 0x618: 0xfb, 0x619: 0xfb, 0x61a: 0xfb, 0x61b: 0xfb, 0x61c: 0xfb, 0x61d: 0xfb, 0x61e: 0xfb, 0x61f: 0xfb, - 0x620: 0x123, 0x621: 0x123, 0x622: 0x123, 0x623: 0x17d, 0x624: 0x70, 0x625: 0x17e, 0x626: 0xfb, 0x627: 0xfb, - 0x628: 0xfb, 0x629: 0xfb, 0x62a: 0xfb, 0x62b: 0xfb, 0x62c: 0xfb, 0x62d: 0xfb, 0x62e: 0xfb, 0x62f: 0xfb, - 0x630: 0xfb, 0x631: 0x17f, 0x632: 0x180, 0x633: 0xfb, 0x634: 0x181, 0x635: 0xfb, 0x636: 0xfb, 0x637: 0xfb, - 0x638: 0x71, 0x639: 0x72, 0x63a: 0x73, 0x63b: 0x182, 0x63c: 0xfb, 0x63d: 0xfb, 0x63e: 0xfb, 0x63f: 0xfb, + 0x600: 0x17b, 0x601: 0xfd, 0x602: 0xfd, 0x603: 0xfd, 0x604: 0x17c, 0x605: 0x17d, 0x606: 0xfd, 0x607: 0xfd, + 0x608: 0xfd, 0x609: 0xfd, 0x60a: 0xfd, 0x60b: 0x17e, 0x60c: 0xfd, 0x60d: 0xfd, 0x60e: 0xfd, 0x60f: 0xfd, + 0x610: 0xfd, 0x611: 0xfd, 0x612: 0xfd, 0x613: 0xfd, 0x614: 0xfd, 0x615: 0xfd, 0x616: 0xfd, 0x617: 0xfd, + 0x618: 0xfd, 0x619: 0xfd, 0x61a: 0xfd, 0x61b: 0xfd, 0x61c: 0xfd, 0x61d: 0xfd, 0x61e: 0xfd, 0x61f: 0xfd, + 0x620: 0x125, 0x621: 0x125, 0x622: 0x125, 0x623: 0x17f, 0x624: 0x6e, 0x625: 0x180, 0x626: 0xfd, 0x627: 0xfd, + 0x628: 0xfd, 0x629: 0xfd, 0x62a: 0xfd, 0x62b: 0xfd, 0x62c: 0xfd, 0x62d: 0xfd, 0x62e: 0xfd, 0x62f: 0xfd, + 0x630: 0xfd, 0x631: 0x181, 0x632: 0x182, 0x633: 0xfd, 0x634: 0x183, 0x635: 0xfd, 0x636: 0xfd, 0x637: 0xfd, + 0x638: 0x6f, 0x639: 0x70, 0x63a: 0x71, 0x63b: 0x184, 0x63c: 0xfd, 0x63d: 0xfd, 0x63e: 0xfd, 0x63f: 0xfd, // Block 0x19, offset 0x640 - 0x640: 0x183, 0x641: 0x9c, 0x642: 0x184, 0x643: 0x185, 0x644: 0x74, 0x645: 0x75, 0x646: 0x186, 0x647: 0x187, - 0x648: 0x76, 0x649: 0x188, 0x64a: 0xfb, 0x64b: 0xfb, 0x64c: 0x9c, 0x64d: 0x9c, 0x64e: 0x9c, 0x64f: 0x9c, + 0x640: 0x185, 0x641: 0x9c, 0x642: 0x186, 0x643: 0x187, 0x644: 0x72, 0x645: 0x73, 0x646: 0x188, 0x647: 0x189, + 0x648: 0x74, 0x649: 0x18a, 0x64a: 0xfd, 0x64b: 0xfd, 0x64c: 0x9c, 0x64d: 0x9c, 0x64e: 0x9c, 0x64f: 0x9c, 0x650: 0x9c, 0x651: 0x9c, 0x652: 0x9c, 0x653: 0x9c, 0x654: 0x9c, 0x655: 0x9c, 0x656: 0x9c, 0x657: 0x9c, - 0x658: 0x9c, 0x659: 0x9c, 0x65a: 0x9c, 0x65b: 0x189, 0x65c: 0x9c, 0x65d: 0x18a, 0x65e: 0x9c, 0x65f: 0x18b, - 0x660: 0x18c, 0x661: 0x18d, 0x662: 0x18e, 0x663: 0xfb, 0x664: 0x9c, 0x665: 0x18f, 0x666: 0x9c, 0x667: 0x190, - 0x668: 0x9c, 0x669: 0x191, 0x66a: 0x192, 0x66b: 0x193, 0x66c: 0x9c, 0x66d: 0x9c, 0x66e: 0x194, 0x66f: 0x195, - 0x670: 0xfb, 0x671: 0xfb, 0x672: 0xfb, 0x673: 0xfb, 0x674: 0xfb, 0x675: 0xfb, 0x676: 0xfb, 0x677: 0xfb, - 0x678: 0xfb, 0x679: 0xfb, 0x67a: 0xfb, 0x67b: 0xfb, 0x67c: 0xfb, 0x67d: 0xfb, 0x67e: 0xfb, 0x67f: 0xfb, + 0x658: 0x9c, 0x659: 0x9c, 0x65a: 0x9c, 0x65b: 0x18b, 0x65c: 0x9c, 0x65d: 0x18c, 0x65e: 0x9c, 0x65f: 0x18d, + 0x660: 0x18e, 0x661: 0x18f, 0x662: 0x190, 0x663: 0xfd, 0x664: 0x9c, 0x665: 0x191, 0x666: 0x9c, 0x667: 0x192, + 0x668: 0x9c, 0x669: 0x193, 0x66a: 0x194, 0x66b: 0x195, 0x66c: 0x9c, 0x66d: 0x9c, 0x66e: 0x196, 0x66f: 0x197, + 0x670: 0xfd, 0x671: 0xfd, 0x672: 0xfd, 0x673: 0xfd, 0x674: 0xfd, 0x675: 0xfd, 0x676: 0xfd, 0x677: 0xfd, + 0x678: 0xfd, 0x679: 0xfd, 0x67a: 0xfd, 0x67b: 0xfd, 0x67c: 0xfd, 0x67d: 0xfd, 0x67e: 0xfd, 0x67f: 0xfd, // Block 0x1a, offset 0x680 0x680: 0xa0, 0x681: 0xa0, 0x682: 0xa0, 0x683: 0xa0, 0x684: 0xa0, 0x685: 0xa0, 0x686: 0xa0, 0x687: 0xa0, 0x688: 0xa0, 0x689: 0xa0, 0x68a: 0xa0, 0x68b: 0xa0, 0x68c: 0xa0, 0x68d: 0xa0, 0x68e: 0xa0, 0x68f: 0xa0, 0x690: 0xa0, 0x691: 0xa0, 0x692: 0xa0, 0x693: 0xa0, 0x694: 0xa0, 0x695: 0xa0, 0x696: 0xa0, 0x697: 0xa0, - 0x698: 0xa0, 0x699: 0xa0, 0x69a: 0xa0, 0x69b: 0x196, 0x69c: 0xa0, 0x69d: 0xa0, 0x69e: 0xa0, 0x69f: 0xa0, + 0x698: 0xa0, 0x699: 0xa0, 0x69a: 0xa0, 0x69b: 0x198, 0x69c: 0xa0, 0x69d: 0xa0, 0x69e: 0xa0, 0x69f: 0xa0, 0x6a0: 0xa0, 0x6a1: 0xa0, 0x6a2: 0xa0, 0x6a3: 0xa0, 0x6a4: 0xa0, 0x6a5: 0xa0, 0x6a6: 0xa0, 0x6a7: 0xa0, 0x6a8: 0xa0, 0x6a9: 0xa0, 0x6aa: 0xa0, 0x6ab: 0xa0, 0x6ac: 0xa0, 0x6ad: 0xa0, 0x6ae: 0xa0, 0x6af: 0xa0, 0x6b0: 0xa0, 0x6b1: 0xa0, 0x6b2: 0xa0, 0x6b3: 0xa0, 0x6b4: 0xa0, 0x6b5: 0xa0, 0x6b6: 0xa0, 0x6b7: 0xa0, @@ -2312,8 +2455,8 @@ var idnaIndex = [2368]uint16{ 0x6c0: 0xa0, 0x6c1: 0xa0, 0x6c2: 0xa0, 0x6c3: 0xa0, 0x6c4: 0xa0, 0x6c5: 0xa0, 0x6c6: 0xa0, 0x6c7: 0xa0, 0x6c8: 0xa0, 0x6c9: 0xa0, 0x6ca: 0xa0, 0x6cb: 0xa0, 0x6cc: 0xa0, 0x6cd: 0xa0, 0x6ce: 0xa0, 0x6cf: 0xa0, 0x6d0: 0xa0, 0x6d1: 0xa0, 0x6d2: 0xa0, 0x6d3: 0xa0, 0x6d4: 0xa0, 0x6d5: 0xa0, 0x6d6: 0xa0, 0x6d7: 0xa0, - 0x6d8: 0xa0, 0x6d9: 0xa0, 0x6da: 0xa0, 0x6db: 0xa0, 0x6dc: 0x197, 0x6dd: 0xa0, 0x6de: 0xa0, 0x6df: 0xa0, - 0x6e0: 0x198, 0x6e1: 0xa0, 0x6e2: 0xa0, 0x6e3: 0xa0, 0x6e4: 0xa0, 0x6e5: 0xa0, 0x6e6: 0xa0, 0x6e7: 0xa0, + 0x6d8: 0xa0, 0x6d9: 0xa0, 0x6da: 0xa0, 0x6db: 0xa0, 0x6dc: 0x199, 0x6dd: 0xa0, 0x6de: 0xa0, 0x6df: 0xa0, + 0x6e0: 0x19a, 0x6e1: 0xa0, 0x6e2: 0xa0, 0x6e3: 0xa0, 0x6e4: 0xa0, 0x6e5: 0xa0, 0x6e6: 0xa0, 0x6e7: 0xa0, 0x6e8: 0xa0, 0x6e9: 0xa0, 0x6ea: 0xa0, 0x6eb: 0xa0, 0x6ec: 0xa0, 0x6ed: 0xa0, 0x6ee: 0xa0, 0x6ef: 0xa0, 0x6f0: 0xa0, 0x6f1: 0xa0, 0x6f2: 0xa0, 0x6f3: 0xa0, 0x6f4: 0xa0, 0x6f5: 0xa0, 0x6f6: 0xa0, 0x6f7: 0xa0, 0x6f8: 0xa0, 0x6f9: 0xa0, 0x6fa: 0xa0, 0x6fb: 0xa0, 0x6fc: 0xa0, 0x6fd: 0xa0, 0x6fe: 0xa0, 0x6ff: 0xa0, @@ -2325,34 +2468,34 @@ var idnaIndex = [2368]uint16{ 0x720: 0xa0, 0x721: 0xa0, 0x722: 0xa0, 0x723: 0xa0, 0x724: 0xa0, 0x725: 0xa0, 0x726: 0xa0, 0x727: 0xa0, 0x728: 0xa0, 0x729: 0xa0, 0x72a: 0xa0, 0x72b: 0xa0, 0x72c: 0xa0, 0x72d: 0xa0, 0x72e: 0xa0, 0x72f: 0xa0, 0x730: 0xa0, 0x731: 0xa0, 0x732: 0xa0, 0x733: 0xa0, 0x734: 0xa0, 0x735: 0xa0, 0x736: 0xa0, 0x737: 0xa0, - 0x738: 0xa0, 0x739: 0xa0, 0x73a: 0x199, 0x73b: 0xa0, 0x73c: 0xa0, 0x73d: 0xa0, 0x73e: 0xa0, 0x73f: 0xa0, + 0x738: 0xa0, 0x739: 0xa0, 0x73a: 0x19b, 0x73b: 0xa0, 0x73c: 0xa0, 0x73d: 0xa0, 0x73e: 0xa0, 0x73f: 0xa0, // Block 0x1d, offset 0x740 0x740: 0xa0, 0x741: 0xa0, 0x742: 0xa0, 0x743: 0xa0, 0x744: 0xa0, 0x745: 0xa0, 0x746: 0xa0, 0x747: 0xa0, 0x748: 0xa0, 0x749: 0xa0, 0x74a: 0xa0, 0x74b: 0xa0, 0x74c: 0xa0, 0x74d: 0xa0, 0x74e: 0xa0, 0x74f: 0xa0, 0x750: 0xa0, 0x751: 0xa0, 0x752: 0xa0, 0x753: 0xa0, 0x754: 0xa0, 0x755: 0xa0, 0x756: 0xa0, 0x757: 0xa0, 0x758: 0xa0, 0x759: 0xa0, 0x75a: 0xa0, 0x75b: 0xa0, 0x75c: 0xa0, 0x75d: 0xa0, 0x75e: 0xa0, 0x75f: 0xa0, 0x760: 0xa0, 0x761: 0xa0, 0x762: 0xa0, 0x763: 0xa0, 0x764: 0xa0, 0x765: 0xa0, 0x766: 0xa0, 0x767: 0xa0, - 0x768: 0xa0, 0x769: 0xa0, 0x76a: 0xa0, 0x76b: 0xa0, 0x76c: 0xa0, 0x76d: 0xa0, 0x76e: 0xa0, 0x76f: 0x19a, - 0x770: 0xfb, 0x771: 0xfb, 0x772: 0xfb, 0x773: 0xfb, 0x774: 0xfb, 0x775: 0xfb, 0x776: 0xfb, 0x777: 0xfb, - 0x778: 0xfb, 0x779: 0xfb, 0x77a: 0xfb, 0x77b: 0xfb, 0x77c: 0xfb, 0x77d: 0xfb, 0x77e: 0xfb, 0x77f: 0xfb, + 0x768: 0xa0, 0x769: 0xa0, 0x76a: 0xa0, 0x76b: 0xa0, 0x76c: 0xa0, 0x76d: 0xa0, 0x76e: 0xa0, 0x76f: 0x19c, + 0x770: 0xfd, 0x771: 0xfd, 0x772: 0xfd, 0x773: 0xfd, 0x774: 0xfd, 0x775: 0xfd, 0x776: 0xfd, 0x777: 0xfd, + 0x778: 0xfd, 0x779: 0xfd, 0x77a: 0xfd, 0x77b: 0xfd, 0x77c: 0xfd, 0x77d: 0xfd, 0x77e: 0xfd, 0x77f: 0xfd, // Block 0x1e, offset 0x780 - 0x780: 0xfb, 0x781: 0xfb, 0x782: 0xfb, 0x783: 0xfb, 0x784: 0xfb, 0x785: 0xfb, 0x786: 0xfb, 0x787: 0xfb, - 0x788: 0xfb, 0x789: 0xfb, 0x78a: 0xfb, 0x78b: 0xfb, 0x78c: 0xfb, 0x78d: 0xfb, 0x78e: 0xfb, 0x78f: 0xfb, - 0x790: 0xfb, 0x791: 0xfb, 0x792: 0xfb, 0x793: 0xfb, 0x794: 0xfb, 0x795: 0xfb, 0x796: 0xfb, 0x797: 0xfb, - 0x798: 0xfb, 0x799: 0xfb, 0x79a: 0xfb, 0x79b: 0xfb, 0x79c: 0xfb, 0x79d: 0xfb, 0x79e: 0xfb, 0x79f: 0xfb, - 0x7a0: 0x77, 0x7a1: 0x78, 0x7a2: 0x79, 0x7a3: 0x19b, 0x7a4: 0x7a, 0x7a5: 0x7b, 0x7a6: 0x19c, 0x7a7: 0x7c, - 0x7a8: 0x7d, 0x7a9: 0xfb, 0x7aa: 0xfb, 0x7ab: 0xfb, 0x7ac: 0xfb, 0x7ad: 0xfb, 0x7ae: 0xfb, 0x7af: 0xfb, - 0x7b0: 0xfb, 0x7b1: 0xfb, 0x7b2: 0xfb, 0x7b3: 0xfb, 0x7b4: 0xfb, 0x7b5: 0xfb, 0x7b6: 0xfb, 0x7b7: 0xfb, - 0x7b8: 0xfb, 0x7b9: 0xfb, 0x7ba: 0xfb, 0x7bb: 0xfb, 0x7bc: 0xfb, 0x7bd: 0xfb, 0x7be: 0xfb, 0x7bf: 0xfb, + 0x780: 0xfd, 0x781: 0xfd, 0x782: 0xfd, 0x783: 0xfd, 0x784: 0xfd, 0x785: 0xfd, 0x786: 0xfd, 0x787: 0xfd, + 0x788: 0xfd, 0x789: 0xfd, 0x78a: 0xfd, 0x78b: 0xfd, 0x78c: 0xfd, 0x78d: 0xfd, 0x78e: 0xfd, 0x78f: 0xfd, + 0x790: 0xfd, 0x791: 0xfd, 0x792: 0xfd, 0x793: 0xfd, 0x794: 0xfd, 0x795: 0xfd, 0x796: 0xfd, 0x797: 0xfd, + 0x798: 0xfd, 0x799: 0xfd, 0x79a: 0xfd, 0x79b: 0xfd, 0x79c: 0xfd, 0x79d: 0xfd, 0x79e: 0xfd, 0x79f: 0xfd, + 0x7a0: 0x75, 0x7a1: 0x76, 0x7a2: 0x77, 0x7a3: 0x78, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x7b, 0x7a7: 0x7c, + 0x7a8: 0x7d, 0x7a9: 0xfd, 0x7aa: 0xfd, 0x7ab: 0xfd, 0x7ac: 0xfd, 0x7ad: 0xfd, 0x7ae: 0xfd, 0x7af: 0xfd, + 0x7b0: 0xfd, 0x7b1: 0xfd, 0x7b2: 0xfd, 0x7b3: 0xfd, 0x7b4: 0xfd, 0x7b5: 0xfd, 0x7b6: 0xfd, 0x7b7: 0xfd, + 0x7b8: 0xfd, 0x7b9: 0xfd, 0x7ba: 0xfd, 0x7bb: 0xfd, 0x7bc: 0xfd, 0x7bd: 0xfd, 0x7be: 0xfd, 0x7bf: 0xfd, // Block 0x1f, offset 0x7c0 0x7c0: 0xa0, 0x7c1: 0xa0, 0x7c2: 0xa0, 0x7c3: 0xa0, 0x7c4: 0xa0, 0x7c5: 0xa0, 0x7c6: 0xa0, 0x7c7: 0xa0, - 0x7c8: 0xa0, 0x7c9: 0xa0, 0x7ca: 0xa0, 0x7cb: 0xa0, 0x7cc: 0xa0, 0x7cd: 0x19d, 0x7ce: 0xfb, 0x7cf: 0xfb, - 0x7d0: 0xfb, 0x7d1: 0xfb, 0x7d2: 0xfb, 0x7d3: 0xfb, 0x7d4: 0xfb, 0x7d5: 0xfb, 0x7d6: 0xfb, 0x7d7: 0xfb, - 0x7d8: 0xfb, 0x7d9: 0xfb, 0x7da: 0xfb, 0x7db: 0xfb, 0x7dc: 0xfb, 0x7dd: 0xfb, 0x7de: 0xfb, 0x7df: 0xfb, - 0x7e0: 0xfb, 0x7e1: 0xfb, 0x7e2: 0xfb, 0x7e3: 0xfb, 0x7e4: 0xfb, 0x7e5: 0xfb, 0x7e6: 0xfb, 0x7e7: 0xfb, - 0x7e8: 0xfb, 0x7e9: 0xfb, 0x7ea: 0xfb, 0x7eb: 0xfb, 0x7ec: 0xfb, 0x7ed: 0xfb, 0x7ee: 0xfb, 0x7ef: 0xfb, - 0x7f0: 0xfb, 0x7f1: 0xfb, 0x7f2: 0xfb, 0x7f3: 0xfb, 0x7f4: 0xfb, 0x7f5: 0xfb, 0x7f6: 0xfb, 0x7f7: 0xfb, - 0x7f8: 0xfb, 0x7f9: 0xfb, 0x7fa: 0xfb, 0x7fb: 0xfb, 0x7fc: 0xfb, 0x7fd: 0xfb, 0x7fe: 0xfb, 0x7ff: 0xfb, + 0x7c8: 0xa0, 0x7c9: 0xa0, 0x7ca: 0xa0, 0x7cb: 0xa0, 0x7cc: 0xa0, 0x7cd: 0x19d, 0x7ce: 0xfd, 0x7cf: 0xfd, + 0x7d0: 0xfd, 0x7d1: 0xfd, 0x7d2: 0xfd, 0x7d3: 0xfd, 0x7d4: 0xfd, 0x7d5: 0xfd, 0x7d6: 0xfd, 0x7d7: 0xfd, + 0x7d8: 0xfd, 0x7d9: 0xfd, 0x7da: 0xfd, 0x7db: 0xfd, 0x7dc: 0xfd, 0x7dd: 0xfd, 0x7de: 0xfd, 0x7df: 0xfd, + 0x7e0: 0xfd, 0x7e1: 0xfd, 0x7e2: 0xfd, 0x7e3: 0xfd, 0x7e4: 0xfd, 0x7e5: 0xfd, 0x7e6: 0xfd, 0x7e7: 0xfd, + 0x7e8: 0xfd, 0x7e9: 0xfd, 0x7ea: 0xfd, 0x7eb: 0xfd, 0x7ec: 0xfd, 0x7ed: 0xfd, 0x7ee: 0xfd, 0x7ef: 0xfd, + 0x7f0: 0xfd, 0x7f1: 0xfd, 0x7f2: 0xfd, 0x7f3: 0xfd, 0x7f4: 0xfd, 0x7f5: 0xfd, 0x7f6: 0xfd, 0x7f7: 0xfd, + 0x7f8: 0xfd, 0x7f9: 0xfd, 0x7fa: 0xfd, 0x7fb: 0xfd, 0x7fc: 0xfd, 0x7fd: 0xfd, 0x7fe: 0xfd, 0x7ff: 0xfd, // Block 0x20, offset 0x800 0x810: 0x0d, 0x811: 0x0e, 0x812: 0x0f, 0x813: 0x10, 0x814: 0x11, 0x815: 0x0b, 0x816: 0x12, 0x817: 0x07, 0x818: 0x13, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x14, 0x81c: 0x0b, 0x81d: 0x15, 0x81e: 0x16, 0x81f: 0x17, @@ -2370,14 +2513,14 @@ var idnaIndex = [2368]uint16{ 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b, 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b, // Block 0x22, offset 0x880 - 0x880: 0x19e, 0x881: 0x19f, 0x882: 0xfb, 0x883: 0xfb, 0x884: 0x1a0, 0x885: 0x1a0, 0x886: 0x1a0, 0x887: 0x1a1, - 0x888: 0xfb, 0x889: 0xfb, 0x88a: 0xfb, 0x88b: 0xfb, 0x88c: 0xfb, 0x88d: 0xfb, 0x88e: 0xfb, 0x88f: 0xfb, - 0x890: 0xfb, 0x891: 0xfb, 0x892: 0xfb, 0x893: 0xfb, 0x894: 0xfb, 0x895: 0xfb, 0x896: 0xfb, 0x897: 0xfb, - 0x898: 0xfb, 0x899: 0xfb, 0x89a: 0xfb, 0x89b: 0xfb, 0x89c: 0xfb, 0x89d: 0xfb, 0x89e: 0xfb, 0x89f: 0xfb, - 0x8a0: 0xfb, 0x8a1: 0xfb, 0x8a2: 0xfb, 0x8a3: 0xfb, 0x8a4: 0xfb, 0x8a5: 0xfb, 0x8a6: 0xfb, 0x8a7: 0xfb, - 0x8a8: 0xfb, 0x8a9: 0xfb, 0x8aa: 0xfb, 0x8ab: 0xfb, 0x8ac: 0xfb, 0x8ad: 0xfb, 0x8ae: 0xfb, 0x8af: 0xfb, - 0x8b0: 0xfb, 0x8b1: 0xfb, 0x8b2: 0xfb, 0x8b3: 0xfb, 0x8b4: 0xfb, 0x8b5: 0xfb, 0x8b6: 0xfb, 0x8b7: 0xfb, - 0x8b8: 0xfb, 0x8b9: 0xfb, 0x8ba: 0xfb, 0x8bb: 0xfb, 0x8bc: 0xfb, 0x8bd: 0xfb, 0x8be: 0xfb, 0x8bf: 0xfb, + 0x880: 0x19e, 0x881: 0x19f, 0x882: 0xfd, 0x883: 0xfd, 0x884: 0x1a0, 0x885: 0x1a0, 0x886: 0x1a0, 0x887: 0x1a1, + 0x888: 0xfd, 0x889: 0xfd, 0x88a: 0xfd, 0x88b: 0xfd, 0x88c: 0xfd, 0x88d: 0xfd, 0x88e: 0xfd, 0x88f: 0xfd, + 0x890: 0xfd, 0x891: 0xfd, 0x892: 0xfd, 0x893: 0xfd, 0x894: 0xfd, 0x895: 0xfd, 0x896: 0xfd, 0x897: 0xfd, + 0x898: 0xfd, 0x899: 0xfd, 0x89a: 0xfd, 0x89b: 0xfd, 0x89c: 0xfd, 0x89d: 0xfd, 0x89e: 0xfd, 0x89f: 0xfd, + 0x8a0: 0xfd, 0x8a1: 0xfd, 0x8a2: 0xfd, 0x8a3: 0xfd, 0x8a4: 0xfd, 0x8a5: 0xfd, 0x8a6: 0xfd, 0x8a7: 0xfd, + 0x8a8: 0xfd, 0x8a9: 0xfd, 0x8aa: 0xfd, 0x8ab: 0xfd, 0x8ac: 0xfd, 0x8ad: 0xfd, 0x8ae: 0xfd, 0x8af: 0xfd, + 0x8b0: 0xfd, 0x8b1: 0xfd, 0x8b2: 0xfd, 0x8b3: 0xfd, 0x8b4: 0xfd, 0x8b5: 0xfd, 0x8b6: 0xfd, 0x8b7: 0xfd, + 0x8b8: 0xfd, 0x8b9: 0xfd, 0x8ba: 0xfd, 0x8bb: 0xfd, 0x8bc: 0xfd, 0x8bd: 0xfd, 0x8be: 0xfd, 0x8bf: 0xfd, // Block 0x23, offset 0x8c0 0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b, 0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b, @@ -2393,10 +2536,10 @@ var idnaIndex = [2368]uint16{ } // idnaSparseOffset: 292 entries, 584 bytes -var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x85, 0x8b, 0x94, 0xa4, 0xb2, 0xbd, 0xca, 0xdb, 0xe5, 0xec, 0xf9, 0x10a, 0x111, 0x11c, 0x12b, 0x139, 0x143, 0x145, 0x14a, 0x14d, 0x150, 0x152, 0x15e, 0x169, 0x171, 0x177, 0x17d, 0x182, 0x187, 0x18a, 0x18e, 0x194, 0x199, 0x1a5, 0x1af, 0x1b5, 0x1c6, 0x1d0, 0x1d3, 0x1db, 0x1de, 0x1eb, 0x1f3, 0x1f7, 0x1fe, 0x206, 0x216, 0x222, 0x225, 0x22f, 0x23b, 0x247, 0x253, 0x25b, 0x260, 0x26d, 0x27e, 0x282, 0x28d, 0x291, 0x29a, 0x2a2, 0x2a8, 0x2ad, 0x2b0, 0x2b4, 0x2ba, 0x2be, 0x2c2, 0x2c6, 0x2cc, 0x2d4, 0x2db, 0x2e6, 0x2f0, 0x2f4, 0x2f7, 0x2fd, 0x301, 0x303, 0x306, 0x308, 0x30b, 0x315, 0x318, 0x327, 0x32b, 0x330, 0x333, 0x337, 0x33c, 0x341, 0x347, 0x358, 0x368, 0x36e, 0x372, 0x381, 0x386, 0x38e, 0x398, 0x3a3, 0x3ab, 0x3bc, 0x3c5, 0x3d5, 0x3e2, 0x3ee, 0x3f3, 0x400, 0x404, 0x409, 0x40b, 0x40d, 0x411, 0x413, 0x417, 0x420, 0x426, 0x42a, 0x43a, 0x444, 0x449, 0x44c, 0x452, 0x459, 0x45e, 0x462, 0x468, 0x46d, 0x476, 0x47b, 0x481, 0x488, 0x48f, 0x496, 0x49a, 0x49f, 0x4a2, 0x4a7, 0x4b3, 0x4b9, 0x4be, 0x4c5, 0x4cd, 0x4d2, 0x4d6, 0x4e6, 0x4ed, 0x4f1, 0x4f5, 0x4fc, 0x4fe, 0x501, 0x504, 0x508, 0x511, 0x515, 0x51d, 0x525, 0x52d, 0x539, 0x545, 0x54b, 0x554, 0x560, 0x567, 0x570, 0x57b, 0x582, 0x591, 0x59e, 0x5ab, 0x5b4, 0x5b8, 0x5c7, 0x5cf, 0x5da, 0x5e3, 0x5e9, 0x5f1, 0x5fa, 0x605, 0x608, 0x614, 0x61d, 0x620, 0x625, 0x62e, 0x633, 0x640, 0x64b, 0x654, 0x65e, 0x661, 0x66b, 0x674, 0x680, 0x68d, 0x69a, 0x6a8, 0x6af, 0x6b3, 0x6b7, 0x6ba, 0x6bf, 0x6c2, 0x6c7, 0x6ca, 0x6d1, 0x6d8, 0x6dc, 0x6e7, 0x6ea, 0x6ed, 0x6f0, 0x6f6, 0x6fc, 0x705, 0x708, 0x70b, 0x70e, 0x711, 0x718, 0x71b, 0x720, 0x72a, 0x72d, 0x731, 0x740, 0x74c, 0x750, 0x755, 0x759, 0x75e, 0x762, 0x767, 0x770, 0x77b, 0x781, 0x787, 0x78d, 0x793, 0x79c, 0x79f, 0x7a2, 0x7a6, 0x7aa, 0x7ae, 0x7b4, 0x7ba, 0x7bf, 0x7c2, 0x7d2, 0x7d9, 0x7dc, 0x7e1, 0x7e5, 0x7eb, 0x7f2, 0x7f6, 0x7fa, 0x803, 0x80a, 0x80f, 0x813, 0x821, 0x824, 0x827, 0x82b, 0x82f, 0x832, 0x842, 0x853, 0x856, 0x85b, 0x85d, 0x85f} +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x85, 0x8b, 0x94, 0xa4, 0xb2, 0xbd, 0xca, 0xdb, 0xe5, 0xec, 0xf9, 0x10a, 0x111, 0x11c, 0x12b, 0x139, 0x143, 0x145, 0x14a, 0x14d, 0x150, 0x152, 0x15e, 0x169, 0x171, 0x177, 0x17d, 0x182, 0x187, 0x18a, 0x18e, 0x194, 0x199, 0x1a5, 0x1af, 0x1b5, 0x1c6, 0x1d0, 0x1d3, 0x1db, 0x1de, 0x1eb, 0x1f3, 0x1f7, 0x1fe, 0x206, 0x216, 0x222, 0x225, 0x22f, 0x23b, 0x247, 0x253, 0x25b, 0x260, 0x26d, 0x27e, 0x282, 0x28d, 0x291, 0x29a, 0x2a2, 0x2a8, 0x2ad, 0x2b0, 0x2b4, 0x2ba, 0x2be, 0x2c2, 0x2c6, 0x2cc, 0x2d4, 0x2db, 0x2e6, 0x2f0, 0x2f4, 0x2f7, 0x2fd, 0x301, 0x303, 0x306, 0x308, 0x30b, 0x315, 0x318, 0x327, 0x32b, 0x32f, 0x331, 0x33a, 0x33d, 0x341, 0x346, 0x34b, 0x351, 0x362, 0x372, 0x378, 0x37c, 0x38b, 0x390, 0x398, 0x3a2, 0x3ad, 0x3b5, 0x3c6, 0x3cf, 0x3df, 0x3ec, 0x3f8, 0x3fd, 0x40a, 0x40e, 0x413, 0x415, 0x417, 0x41b, 0x41d, 0x421, 0x42a, 0x430, 0x434, 0x444, 0x44e, 0x453, 0x456, 0x45c, 0x463, 0x468, 0x46c, 0x472, 0x477, 0x480, 0x485, 0x48b, 0x492, 0x499, 0x4a0, 0x4a4, 0x4a9, 0x4ac, 0x4b1, 0x4bd, 0x4c3, 0x4c8, 0x4cf, 0x4d7, 0x4dc, 0x4e0, 0x4f0, 0x4f7, 0x4fb, 0x4ff, 0x506, 0x508, 0x50b, 0x50e, 0x512, 0x51b, 0x51f, 0x527, 0x52f, 0x537, 0x543, 0x54f, 0x555, 0x55e, 0x56a, 0x571, 0x57a, 0x585, 0x58c, 0x59b, 0x5a8, 0x5b5, 0x5be, 0x5c2, 0x5d1, 0x5d9, 0x5e4, 0x5ed, 0x5f3, 0x5fb, 0x604, 0x60f, 0x612, 0x61e, 0x627, 0x62a, 0x62f, 0x638, 0x63d, 0x64a, 0x655, 0x65e, 0x668, 0x66b, 0x675, 0x67e, 0x68a, 0x697, 0x6a4, 0x6b2, 0x6b9, 0x6bd, 0x6c1, 0x6c4, 0x6c9, 0x6cc, 0x6d1, 0x6d4, 0x6db, 0x6e2, 0x6e6, 0x6f1, 0x6f4, 0x6f7, 0x6fa, 0x700, 0x706, 0x70f, 0x712, 0x715, 0x718, 0x71b, 0x722, 0x725, 0x72a, 0x734, 0x737, 0x73b, 0x74a, 0x756, 0x75a, 0x75f, 0x763, 0x768, 0x76c, 0x771, 0x77a, 0x785, 0x78b, 0x791, 0x797, 0x79d, 0x7a6, 0x7a9, 0x7ac, 0x7b0, 0x7b4, 0x7b8, 0x7be, 0x7c4, 0x7c9, 0x7cc, 0x7dc, 0x7e3, 0x7e6, 0x7eb, 0x7ef, 0x7f5, 0x7fc, 0x800, 0x804, 0x80d, 0x814, 0x819, 0x81d, 0x82b, 0x82e, 0x831, 0x835, 0x839, 0x83c, 0x83f, 0x844, 0x846, 0x848} -// idnaSparseValues: 2146 entries, 8584 bytes -var idnaSparseValues = [2146]valueRange{ +// idnaSparseValues: 2123 entries, 8492 bytes +var idnaSparseValues = [2123]valueRange{ // Block 0x0, offset 0x0 {value: 0x0000, lo: 0x07}, {value: 0xe105, lo: 0x80, hi: 0x96}, @@ -2427,15 +2570,15 @@ var idnaSparseValues = [2146]valueRange{ // Block 0x2, offset 0x19 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x00a9, lo: 0xb0, hi: 0xb0}, {value: 0x037d, lo: 0xb1, hi: 0xb1}, - {value: 0x0259, lo: 0xb2, hi: 0xb2}, - {value: 0x0269, lo: 0xb3, hi: 0xb3}, + {value: 0x00b1, lo: 0xb2, hi: 0xb2}, + {value: 0x00b9, lo: 0xb3, hi: 0xb3}, {value: 0x034d, lo: 0xb4, hi: 0xb4}, {value: 0x0395, lo: 0xb5, hi: 0xb5}, {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, - {value: 0x0279, lo: 0xb7, hi: 0xb7}, - {value: 0x0289, lo: 0xb8, hi: 0xb8}, + {value: 0x00c1, lo: 0xb7, hi: 0xb7}, + {value: 0x00c9, lo: 0xb8, hi: 0xb8}, {value: 0x0008, lo: 0xb9, hi: 0xbf}, // Block 0x3, offset 0x25 {value: 0x0000, lo: 0x01}, @@ -2457,7 +2600,7 @@ var idnaSparseValues = [2146]valueRange{ // Block 0x6, offset 0x33 {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0131, lo: 0x87, hi: 0x87}, {value: 0x0008, lo: 0x88, hi: 0x88}, {value: 0x0018, lo: 0x89, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0x8c}, @@ -2643,7 +2786,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0x81, hi: 0xb0}, {value: 0x3308, lo: 0xb1, hi: 0xb1}, {value: 0x0008, lo: 0xb2, hi: 0xb2}, - {value: 0x08f1, lo: 0xb3, hi: 0xb3}, + {value: 0x01f1, lo: 0xb3, hi: 0xb3}, {value: 0x3308, lo: 0xb4, hi: 0xb9}, {value: 0x3b08, lo: 0xba, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbe}, @@ -2666,8 +2809,8 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9b}, - {value: 0x0961, lo: 0x9c, hi: 0x9c}, - {value: 0x0999, lo: 0x9d, hi: 0x9d}, + {value: 0x0201, lo: 0x9c, hi: 0x9c}, + {value: 0x0209, lo: 0x9d, hi: 0x9d}, {value: 0x0008, lo: 0x9e, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, // Block 0x18, offset 0xf9 @@ -3075,13 +3218,13 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xbe, hi: 0xbf}, // Block 0x44, offset 0x260 {value: 0x0000, lo: 0x0c}, - {value: 0x0e29, lo: 0x80, hi: 0x80}, - {value: 0x0e41, lo: 0x81, hi: 0x81}, - {value: 0x0e59, lo: 0x82, hi: 0x82}, - {value: 0x0e71, lo: 0x83, hi: 0x83}, - {value: 0x0e89, lo: 0x84, hi: 0x85}, - {value: 0x0ea1, lo: 0x86, hi: 0x86}, - {value: 0x0eb9, lo: 0x87, hi: 0x87}, + {value: 0x02a9, lo: 0x80, hi: 0x80}, + {value: 0x02b1, lo: 0x81, hi: 0x81}, + {value: 0x02b9, lo: 0x82, hi: 0x82}, + {value: 0x02c1, lo: 0x83, hi: 0x83}, + {value: 0x02c9, lo: 0x84, hi: 0x85}, + {value: 0x02d1, lo: 0x86, hi: 0x86}, + {value: 0x02d9, lo: 0x87, hi: 0x87}, {value: 0x057d, lo: 0x88, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, {value: 0x059d, lo: 0x90, hi: 0xba}, @@ -3133,18 +3276,18 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x83, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0x84}, {value: 0x0018, lo: 0x85, hi: 0x88}, - {value: 0x24c1, lo: 0x89, hi: 0x89}, + {value: 0x0851, lo: 0x89, hi: 0x89}, {value: 0x0018, lo: 0x8a, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, // Block 0x4a, offset 0x29a {value: 0x0000, lo: 0x07}, {value: 0x0018, lo: 0x80, hi: 0xab}, - {value: 0x24f1, lo: 0xac, hi: 0xac}, - {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0859, lo: 0xac, hi: 0xac}, + {value: 0x0861, lo: 0xad, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xae}, - {value: 0x2579, lo: 0xaf, hi: 0xaf}, - {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0869, lo: 0xaf, hi: 0xaf}, + {value: 0x0871, lo: 0xb0, hi: 0xb0}, {value: 0x0018, lo: 0xb1, hi: 0xbf}, // Block 0x4b, offset 0x2a2 {value: 0x0000, lo: 0x05}, @@ -3166,19 +3309,19 @@ var idnaSparseValues = [2146]valueRange{ // Block 0x4e, offset 0x2b0 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x8b}, - {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0929, lo: 0x8c, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0xbf}, // Block 0x4f, offset 0x2b4 {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0xb3}, {value: 0x0e7e, lo: 0xb4, hi: 0xb4}, - {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0932, lo: 0xb5, hi: 0xb5}, {value: 0x0e9e, lo: 0xb6, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, // Block 0x50, offset 0x2ba {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x9b}, - {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0939, lo: 0x9c, hi: 0x9c}, {value: 0x0018, lo: 0x9d, hi: 0xbf}, // Block 0x51, offset 0x2be {value: 0x0000, lo: 0x03}, @@ -3277,16 +3420,16 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0x80, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x98}, {value: 0x3308, lo: 0x99, hi: 0x9a}, - {value: 0x29e2, lo: 0x9b, hi: 0x9b}, - {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, + {value: 0x096a, lo: 0x9b, hi: 0x9b}, + {value: 0x0972, lo: 0x9c, hi: 0x9c}, {value: 0x0008, lo: 0x9d, hi: 0x9e}, - {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0979, lo: 0x9f, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa0}, {value: 0x0008, lo: 0xa1, hi: 0xbf}, // Block 0x61, offset 0x315 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xbe}, - {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + {value: 0x0981, lo: 0xbf, hi: 0xbf}, // Block 0x62, offset 0x318 {value: 0x0000, lo: 0x0e}, {value: 0x0040, lo: 0x80, hi: 0x84}, @@ -3309,46 +3452,58 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa4, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, // Block 0x64, offset 0x32b - {value: 0x0030, lo: 0x04}, - {value: 0x2aa2, lo: 0x80, hi: 0x9d}, - {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x03}, + {value: 0x098a, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x30a2, lo: 0xa0, hi: 0xbf}, - // Block 0x65, offset 0x330 + {value: 0x0a82, lo: 0xa0, hi: 0xbf}, + // Block 0x65, offset 0x32f + {value: 0x0008, lo: 0x01}, + {value: 0x0d19, lo: 0x80, hi: 0xbf}, + // Block 0x66, offset 0x331 + {value: 0x0008, lo: 0x08}, + {value: 0x0f19, lo: 0x80, hi: 0xb0}, + {value: 0x4045, lo: 0xb1, hi: 0xb1}, + {value: 0x10a1, lo: 0xb2, hi: 0xb3}, + {value: 0x4065, lo: 0xb4, hi: 0xb4}, + {value: 0x10b1, lo: 0xb5, hi: 0xb7}, + {value: 0x4085, lo: 0xb8, hi: 0xb8}, + {value: 0x4085, lo: 0xb9, hi: 0xb9}, + {value: 0x10c9, lo: 0xba, hi: 0xbf}, + // Block 0x67, offset 0x33a {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x66, offset 0x333 + // Block 0x68, offset 0x33d {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x8c}, {value: 0x0040, lo: 0x8d, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x67, offset 0x337 + // Block 0x69, offset 0x341 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xbd}, {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0x68, offset 0x33c + // Block 0x6a, offset 0x346 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xbf}, - // Block 0x69, offset 0x341 + // Block 0x6b, offset 0x34b {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0xa5}, {value: 0x0018, lo: 0xa6, hi: 0xaf}, {value: 0x3308, lo: 0xb0, hi: 0xb1}, {value: 0x0018, lo: 0xb2, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x6a, offset 0x347 + // Block 0x6c, offset 0x351 {value: 0x0000, lo: 0x10}, {value: 0x0040, lo: 0x80, hi: 0x81}, {value: 0xe00d, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0x83}, {value: 0x03f5, lo: 0x84, hi: 0x84}, - {value: 0x1329, lo: 0x85, hi: 0x85}, + {value: 0x0479, lo: 0x85, hi: 0x85}, {value: 0x447d, lo: 0x86, hi: 0x86}, {value: 0xe07d, lo: 0x87, hi: 0x87}, {value: 0x0008, lo: 0x88, hi: 0x88}, @@ -3357,10 +3512,10 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x8b, hi: 0xb4}, {value: 0xe01d, lo: 0xb5, hi: 0xb5}, {value: 0x0008, lo: 0xb6, hi: 0xb7}, - {value: 0x2009, lo: 0xb8, hi: 0xb8}, - {value: 0x6ec1, lo: 0xb9, hi: 0xb9}, + {value: 0x0741, lo: 0xb8, hi: 0xb8}, + {value: 0x13f1, lo: 0xb9, hi: 0xb9}, {value: 0x0008, lo: 0xba, hi: 0xbf}, - // Block 0x6b, offset 0x358 + // Block 0x6d, offset 0x362 {value: 0x0000, lo: 0x0f}, {value: 0x0008, lo: 0x80, hi: 0x81}, {value: 0x3308, lo: 0x82, hi: 0x82}, @@ -3377,19 +3532,19 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x6c, offset 0x368 + // Block 0x6e, offset 0x372 {value: 0x0000, lo: 0x05}, {value: 0x0208, lo: 0x80, hi: 0xb1}, {value: 0x0108, lo: 0xb2, hi: 0xb2}, {value: 0x0008, lo: 0xb3, hi: 0xb3}, {value: 0x0018, lo: 0xb4, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x6d, offset 0x36e + // Block 0x6f, offset 0x378 {value: 0x0000, lo: 0x03}, {value: 0x3008, lo: 0x80, hi: 0x81}, {value: 0x0008, lo: 0x82, hi: 0xb3}, {value: 0x3008, lo: 0xb4, hi: 0xbf}, - // Block 0x6e, offset 0x372 + // Block 0x70, offset 0x37c {value: 0x0000, lo: 0x0e}, {value: 0x3008, lo: 0x80, hi: 0x83}, {value: 0x3b08, lo: 0x84, hi: 0x84}, @@ -3405,13 +3560,13 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xbc, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbe}, {value: 0x3308, lo: 0xbf, hi: 0xbf}, - // Block 0x6f, offset 0x381 + // Block 0x71, offset 0x38b {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa5}, {value: 0x3308, lo: 0xa6, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x70, offset 0x386 + // Block 0x72, offset 0x390 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x3308, lo: 0x87, hi: 0x91}, @@ -3420,7 +3575,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x94, hi: 0x9e}, {value: 0x0018, lo: 0x9f, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x71, offset 0x38e + // Block 0x73, offset 0x398 {value: 0x0000, lo: 0x09}, {value: 0x3308, lo: 0x80, hi: 0x82}, {value: 0x3008, lo: 0x83, hi: 0x83}, @@ -3431,7 +3586,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xba, hi: 0xbb}, {value: 0x3308, lo: 0xbc, hi: 0xbd}, {value: 0x3008, lo: 0xbe, hi: 0xbf}, - // Block 0x72, offset 0x398 + // Block 0x74, offset 0x3a2 {value: 0x0000, lo: 0x0a}, {value: 0x3808, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x8d}, @@ -3443,7 +3598,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xa5, hi: 0xa5}, {value: 0x0008, lo: 0xa6, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x73, offset 0x3a3 + // Block 0x75, offset 0x3ad {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xa8}, {value: 0x3308, lo: 0xa9, hi: 0xae}, @@ -3452,7 +3607,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb3, hi: 0xb4}, {value: 0x3308, lo: 0xb5, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x74, offset 0x3ab + // Block 0x76, offset 0x3b5 {value: 0x0000, lo: 0x10}, {value: 0x0008, lo: 0x80, hi: 0x82}, {value: 0x3308, lo: 0x83, hi: 0x83}, @@ -3470,7 +3625,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xbc, hi: 0xbc}, {value: 0x3008, lo: 0xbd, hi: 0xbd}, {value: 0x0008, lo: 0xbe, hi: 0xbf}, - // Block 0x75, offset 0x3bc + // Block 0x77, offset 0x3c6 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0xaf}, {value: 0x3308, lo: 0xb0, hi: 0xb0}, @@ -3480,7 +3635,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb7, hi: 0xb8}, {value: 0x0008, lo: 0xb9, hi: 0xbd}, {value: 0x3308, lo: 0xbe, hi: 0xbf}, - // Block 0x76, offset 0x3c5 + // Block 0x78, offset 0x3cf {value: 0x0000, lo: 0x0f}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x3308, lo: 0x81, hi: 0x81}, @@ -3497,7 +3652,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb5, hi: 0xb5}, {value: 0x3b08, lo: 0xb6, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x77, offset 0x3d5 + // Block 0x79, offset 0x3df {value: 0x0000, lo: 0x0c}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x86}, @@ -3511,26 +3666,26 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa8, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x78, offset 0x3e2 + // Block 0x7a, offset 0x3ec {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x9a}, {value: 0x0018, lo: 0x9b, hi: 0x9b}, {value: 0x449d, lo: 0x9c, hi: 0x9c}, {value: 0x44b5, lo: 0x9d, hi: 0x9d}, - {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0x0941, lo: 0x9e, hi: 0x9e}, {value: 0xe06d, lo: 0x9f, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa8}, - {value: 0x6ed9, lo: 0xa9, hi: 0xa9}, + {value: 0x13f9, lo: 0xa9, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x44cd, lo: 0xb0, hi: 0xbf}, - // Block 0x79, offset 0x3ee + // Block 0x7b, offset 0x3f8 {value: 0x0000, lo: 0x04}, {value: 0x44ed, lo: 0x80, hi: 0x8f}, {value: 0x450d, lo: 0x90, hi: 0x9f}, {value: 0x452d, lo: 0xa0, hi: 0xaf}, {value: 0x450d, lo: 0xb0, hi: 0xbf}, - // Block 0x7a, offset 0x3f3 + // Block 0x7c, offset 0x3fd {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0xa2}, {value: 0x3008, lo: 0xa3, hi: 0xa4}, @@ -3544,76 +3699,76 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x7b, offset 0x400 + // Block 0x7d, offset 0x40a {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x7c, offset 0x404 + // Block 0x7e, offset 0x40e {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8a}, {value: 0x0018, lo: 0x8b, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x7d, offset 0x409 + // Block 0x7f, offset 0x413 {value: 0x0000, lo: 0x01}, {value: 0x0040, lo: 0x80, hi: 0xbf}, - // Block 0x7e, offset 0x40b + // Block 0x80, offset 0x415 {value: 0x0020, lo: 0x01}, {value: 0x454d, lo: 0x80, hi: 0xbf}, - // Block 0x7f, offset 0x40d + // Block 0x81, offset 0x417 {value: 0x0020, lo: 0x03}, {value: 0x4d4d, lo: 0x80, hi: 0x94}, {value: 0x4b0d, lo: 0x95, hi: 0x95}, {value: 0x4fed, lo: 0x96, hi: 0xbf}, - // Block 0x80, offset 0x411 + // Block 0x82, offset 0x41b {value: 0x0020, lo: 0x01}, {value: 0x552d, lo: 0x80, hi: 0xbf}, - // Block 0x81, offset 0x413 + // Block 0x83, offset 0x41d {value: 0x0020, lo: 0x03}, {value: 0x5d2d, lo: 0x80, hi: 0x84}, {value: 0x568d, lo: 0x85, hi: 0x85}, {value: 0x5dcd, lo: 0x86, hi: 0xbf}, - // Block 0x82, offset 0x417 + // Block 0x84, offset 0x421 {value: 0x0020, lo: 0x08}, {value: 0x6b8d, lo: 0x80, hi: 0x8f}, {value: 0x6d4d, lo: 0x90, hi: 0x90}, {value: 0x6d8d, lo: 0x91, hi: 0xab}, - {value: 0x6ef1, lo: 0xac, hi: 0xac}, + {value: 0x1401, lo: 0xac, hi: 0xac}, {value: 0x70ed, lo: 0xad, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x710d, lo: 0xb0, hi: 0xbf}, - // Block 0x83, offset 0x420 + // Block 0x85, offset 0x42a {value: 0x0020, lo: 0x05}, {value: 0x730d, lo: 0x80, hi: 0xad}, {value: 0x656d, lo: 0xae, hi: 0xae}, {value: 0x78cd, lo: 0xaf, hi: 0xb5}, {value: 0x6f8d, lo: 0xb6, hi: 0xb6}, {value: 0x79ad, lo: 0xb7, hi: 0xbf}, - // Block 0x84, offset 0x426 - {value: 0x0028, lo: 0x03}, - {value: 0x7c71, lo: 0x80, hi: 0x82}, - {value: 0x7c31, lo: 0x83, hi: 0x83}, - {value: 0x7ce9, lo: 0x84, hi: 0xbf}, - // Block 0x85, offset 0x42a - {value: 0x0038, lo: 0x0f}, - {value: 0x9e01, lo: 0x80, hi: 0x83}, - {value: 0x9ea9, lo: 0x84, hi: 0x85}, - {value: 0x9ee1, lo: 0x86, hi: 0x87}, - {value: 0x9f19, lo: 0x88, hi: 0x8f}, + // Block 0x86, offset 0x430 + {value: 0x0008, lo: 0x03}, + {value: 0x1751, lo: 0x80, hi: 0x82}, + {value: 0x1741, lo: 0x83, hi: 0x83}, + {value: 0x1769, lo: 0x84, hi: 0xbf}, + // Block 0x87, offset 0x434 + {value: 0x0008, lo: 0x0f}, + {value: 0x1d81, lo: 0x80, hi: 0x83}, + {value: 0x1d99, lo: 0x84, hi: 0x85}, + {value: 0x1da1, lo: 0x86, hi: 0x87}, + {value: 0x1da9, lo: 0x88, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x90}, {value: 0x0040, lo: 0x91, hi: 0x91}, - {value: 0xa0d9, lo: 0x92, hi: 0x97}, - {value: 0xa1f1, lo: 0x98, hi: 0x9c}, - {value: 0xa2d1, lo: 0x9d, hi: 0xb3}, - {value: 0x9d91, lo: 0xb4, hi: 0xb4}, - {value: 0x9e01, lo: 0xb5, hi: 0xb5}, - {value: 0xa7d9, lo: 0xb6, hi: 0xbb}, - {value: 0xa8b9, lo: 0xbc, hi: 0xbc}, - {value: 0xa849, lo: 0xbd, hi: 0xbd}, - {value: 0xa929, lo: 0xbe, hi: 0xbf}, - // Block 0x86, offset 0x43a + {value: 0x1de9, lo: 0x92, hi: 0x97}, + {value: 0x1e11, lo: 0x98, hi: 0x9c}, + {value: 0x1e31, lo: 0x9d, hi: 0xb3}, + {value: 0x1d71, lo: 0xb4, hi: 0xb4}, + {value: 0x1d81, lo: 0xb5, hi: 0xb5}, + {value: 0x1ee9, lo: 0xb6, hi: 0xbb}, + {value: 0x1f09, lo: 0xbc, hi: 0xbc}, + {value: 0x1ef9, lo: 0xbd, hi: 0xbd}, + {value: 0x1f19, lo: 0xbe, hi: 0xbf}, + // Block 0x88, offset 0x444 {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8c}, @@ -3624,24 +3779,24 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xbc, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbe}, {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0x87, offset 0x444 + // Block 0x89, offset 0x44e {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0x88, offset 0x449 + // Block 0x8a, offset 0x453 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x89, offset 0x44c + // Block 0x8b, offset 0x456 {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x82}, {value: 0x0040, lo: 0x83, hi: 0x86}, {value: 0x0018, lo: 0x87, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x8a, offset 0x452 + // Block 0x8c, offset 0x45c {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x8e}, {value: 0x0040, lo: 0x8f, hi: 0x8f}, @@ -3649,31 +3804,31 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x9d, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa0}, {value: 0x0040, lo: 0xa1, hi: 0xbf}, - // Block 0x8b, offset 0x459 + // Block 0x8d, offset 0x463 {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbc}, {value: 0x3308, lo: 0xbd, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x8c, offset 0x45e + // Block 0x8e, offset 0x468 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x9c}, {value: 0x0040, lo: 0x9d, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x8d, offset 0x462 + // Block 0x8f, offset 0x46c {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x90}, {value: 0x0040, lo: 0x91, hi: 0x9f}, {value: 0x3308, lo: 0xa0, hi: 0xa0}, {value: 0x0018, lo: 0xa1, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x8e, offset 0x468 + // Block 0x90, offset 0x472 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xac}, {value: 0x0008, lo: 0xad, hi: 0xbf}, - // Block 0x8f, offset 0x46d + // Block 0x91, offset 0x477 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x81}, @@ -3683,20 +3838,20 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0x90, hi: 0xb5}, {value: 0x3308, lo: 0xb6, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x90, offset 0x476 + // Block 0x92, offset 0x480 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9e}, {value: 0x0018, lo: 0x9f, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x91, offset 0x47b + // Block 0x93, offset 0x485 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0x87}, {value: 0x0008, lo: 0x88, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0xbf}, - // Block 0x92, offset 0x481 + // Block 0x94, offset 0x48b {value: 0x0000, lo: 0x06}, {value: 0xe145, lo: 0x80, hi: 0x87}, {value: 0xe1c5, lo: 0x88, hi: 0x8f}, @@ -3704,7 +3859,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x8b0d, lo: 0x98, hi: 0x9f}, {value: 0x8b25, lo: 0xa0, hi: 0xa7}, {value: 0x0008, lo: 0xa8, hi: 0xbf}, - // Block 0x93, offset 0x488 + // Block 0x95, offset 0x492 {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9f}, @@ -3712,7 +3867,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xaa, hi: 0xaf}, {value: 0x8b25, lo: 0xb0, hi: 0xb7}, {value: 0x8b0d, lo: 0xb8, hi: 0xbf}, - // Block 0x94, offset 0x48f + // Block 0x96, offset 0x499 {value: 0x0000, lo: 0x06}, {value: 0xe145, lo: 0x80, hi: 0x87}, {value: 0xe1c5, lo: 0x88, hi: 0x8f}, @@ -3720,28 +3875,28 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x94, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x95, offset 0x496 + // Block 0x97, offset 0x4a0 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x96, offset 0x49a + // Block 0x98, offset 0x4a4 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xae}, {value: 0x0018, lo: 0xaf, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x97, offset 0x49f + // Block 0x99, offset 0x4a9 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x98, offset 0x4a2 + // Block 0x9a, offset 0x4ac {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xbf}, - // Block 0x99, offset 0x4a7 + // Block 0x9b, offset 0x4b1 {value: 0x0000, lo: 0x0b}, {value: 0x0808, lo: 0x80, hi: 0x85}, {value: 0x0040, lo: 0x86, hi: 0x87}, @@ -3754,20 +3909,20 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0808, lo: 0xbc, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbe}, {value: 0x0808, lo: 0xbf, hi: 0xbf}, - // Block 0x9a, offset 0x4b3 + // Block 0x9c, offset 0x4bd {value: 0x0000, lo: 0x05}, {value: 0x0808, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x96}, {value: 0x0818, lo: 0x97, hi: 0x9f}, {value: 0x0808, lo: 0xa0, hi: 0xb6}, {value: 0x0818, lo: 0xb7, hi: 0xbf}, - // Block 0x9b, offset 0x4b9 + // Block 0x9d, offset 0x4c3 {value: 0x0000, lo: 0x04}, {value: 0x0808, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0xa6}, {value: 0x0818, lo: 0xa7, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x9c, offset 0x4be + // Block 0x9e, offset 0x4c8 {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0808, lo: 0xa0, hi: 0xb2}, @@ -3775,7 +3930,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0808, lo: 0xb4, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xba}, {value: 0x0818, lo: 0xbb, hi: 0xbf}, - // Block 0x9d, offset 0x4c5 + // Block 0x9f, offset 0x4cf {value: 0x0000, lo: 0x07}, {value: 0x0808, lo: 0x80, hi: 0x95}, {value: 0x0818, lo: 0x96, hi: 0x9b}, @@ -3784,18 +3939,18 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0808, lo: 0xa0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbe}, {value: 0x0818, lo: 0xbf, hi: 0xbf}, - // Block 0x9e, offset 0x4cd + // Block 0xa0, offset 0x4d7 {value: 0x0000, lo: 0x04}, {value: 0x0808, lo: 0x80, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbb}, {value: 0x0818, lo: 0xbc, hi: 0xbd}, {value: 0x0808, lo: 0xbe, hi: 0xbf}, - // Block 0x9f, offset 0x4d2 + // Block 0xa1, offset 0x4dc {value: 0x0000, lo: 0x03}, {value: 0x0818, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x91}, {value: 0x0818, lo: 0x92, hi: 0xbf}, - // Block 0xa0, offset 0x4d6 + // Block 0xa2, offset 0x4e0 {value: 0x0000, lo: 0x0f}, {value: 0x0808, lo: 0x80, hi: 0x80}, {value: 0x3308, lo: 0x81, hi: 0x83}, @@ -3812,7 +3967,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb8, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xa1, offset 0x4e6 + // Block 0xa3, offset 0x4f0 {value: 0x0000, lo: 0x06}, {value: 0x0818, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, @@ -3820,17 +3975,17 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x99, hi: 0x9f}, {value: 0x0808, lo: 0xa0, hi: 0xbc}, {value: 0x0818, lo: 0xbd, hi: 0xbf}, - // Block 0xa2, offset 0x4ed + // Block 0xa4, offset 0x4f7 {value: 0x0000, lo: 0x03}, {value: 0x0808, lo: 0x80, hi: 0x9c}, {value: 0x0818, lo: 0x9d, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xa3, offset 0x4f1 + // Block 0xa5, offset 0x4fb {value: 0x0000, lo: 0x03}, {value: 0x0808, lo: 0x80, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xb8}, {value: 0x0018, lo: 0xb9, hi: 0xbf}, - // Block 0xa4, offset 0x4f5 + // Block 0xa6, offset 0x4ff {value: 0x0000, lo: 0x06}, {value: 0x0808, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x97}, @@ -3838,23 +3993,23 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0808, lo: 0xa0, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xb7}, {value: 0x0818, lo: 0xb8, hi: 0xbf}, - // Block 0xa5, offset 0x4fc + // Block 0xa7, offset 0x506 {value: 0x0000, lo: 0x01}, {value: 0x0808, lo: 0x80, hi: 0xbf}, - // Block 0xa6, offset 0x4fe + // Block 0xa8, offset 0x508 {value: 0x0000, lo: 0x02}, {value: 0x0808, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0xbf}, - // Block 0xa7, offset 0x501 + // Block 0xa9, offset 0x50b {value: 0x0000, lo: 0x02}, {value: 0x03dd, lo: 0x80, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xbf}, - // Block 0xa8, offset 0x504 + // Block 0xaa, offset 0x50e {value: 0x0000, lo: 0x03}, {value: 0x0808, lo: 0x80, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xb9}, {value: 0x0818, lo: 0xba, hi: 0xbf}, - // Block 0xa9, offset 0x508 + // Block 0xab, offset 0x512 {value: 0x0000, lo: 0x08}, {value: 0x0908, lo: 0x80, hi: 0x80}, {value: 0x0a08, lo: 0x81, hi: 0xa1}, @@ -3864,12 +4019,12 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa8, hi: 0xaf}, {value: 0x0808, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xaa, offset 0x511 + // Block 0xac, offset 0x51b {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0818, lo: 0xa0, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xab, offset 0x515 + // Block 0xad, offset 0x51f {value: 0x0000, lo: 0x07}, {value: 0x0808, lo: 0x80, hi: 0xa9}, {value: 0x0040, lo: 0xaa, hi: 0xaa}, @@ -3878,7 +4033,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0808, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xac, offset 0x51d + // Block 0xae, offset 0x527 {value: 0x0000, lo: 0x07}, {value: 0x0808, lo: 0x80, hi: 0x9c}, {value: 0x0818, lo: 0x9d, hi: 0xa6}, @@ -3887,7 +4042,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0a08, lo: 0xb0, hi: 0xb2}, {value: 0x0c08, lo: 0xb3, hi: 0xb3}, {value: 0x0a08, lo: 0xb4, hi: 0xbf}, - // Block 0xad, offset 0x525 + // Block 0xaf, offset 0x52f {value: 0x0000, lo: 0x07}, {value: 0x0a08, lo: 0x80, hi: 0x84}, {value: 0x0808, lo: 0x85, hi: 0x85}, @@ -3896,7 +4051,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0c18, lo: 0x94, hi: 0x94}, {value: 0x0818, lo: 0x95, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xae, offset 0x52d + // Block 0xb0, offset 0x537 {value: 0x0000, lo: 0x0b}, {value: 0x0040, lo: 0x80, hi: 0xaf}, {value: 0x0a08, lo: 0xb0, hi: 0xb0}, @@ -3909,7 +4064,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0a08, lo: 0xbb, hi: 0xbc}, {value: 0x0c08, lo: 0xbd, hi: 0xbd}, {value: 0x0a08, lo: 0xbe, hi: 0xbf}, - // Block 0xaf, offset 0x539 + // Block 0xb1, offset 0x543 {value: 0x0000, lo: 0x0b}, {value: 0x0808, lo: 0x80, hi: 0x80}, {value: 0x0a08, lo: 0x81, hi: 0x81}, @@ -3922,14 +4077,14 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x8c, hi: 0x9f}, {value: 0x0808, lo: 0xa0, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xb0, offset 0x545 + // Block 0xb2, offset 0x54f {value: 0x0000, lo: 0x05}, {value: 0x3008, lo: 0x80, hi: 0x80}, {value: 0x3308, lo: 0x81, hi: 0x81}, {value: 0x3008, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xb7}, {value: 0x3308, lo: 0xb8, hi: 0xbf}, - // Block 0xb1, offset 0x54b + // Block 0xb3, offset 0x555 {value: 0x0000, lo: 0x08}, {value: 0x3308, lo: 0x80, hi: 0x85}, {value: 0x3b08, lo: 0x86, hi: 0x86}, @@ -3939,7 +4094,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa6, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xb2, offset 0x554 + // Block 0xb4, offset 0x55e {value: 0x0000, lo: 0x0b}, {value: 0x3308, lo: 0x80, hi: 0x81}, {value: 0x3008, lo: 0x82, hi: 0x82}, @@ -3952,7 +4107,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xbb, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbd}, {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0xb3, offset 0x560 + // Block 0xb5, offset 0x56a {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x81}, {value: 0x0040, lo: 0x82, hi: 0x8f}, @@ -3960,7 +4115,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa9, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xb4, offset 0x567 + // Block 0xb6, offset 0x571 {value: 0x0000, lo: 0x08}, {value: 0x3308, lo: 0x80, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xa6}, @@ -3970,7 +4125,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3b08, lo: 0xb3, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xb5}, {value: 0x0008, lo: 0xb6, hi: 0xbf}, - // Block 0xb5, offset 0x570 + // Block 0xb7, offset 0x57a {value: 0x0000, lo: 0x0a}, {value: 0x0018, lo: 0x80, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0x84}, @@ -3982,7 +4137,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xb4, hi: 0xb5}, {value: 0x0008, lo: 0xb6, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xb6, offset 0x57b + // Block 0xb8, offset 0x585 {value: 0x0000, lo: 0x06}, {value: 0x3308, lo: 0x80, hi: 0x81}, {value: 0x3008, lo: 0x82, hi: 0x82}, @@ -3990,7 +4145,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb3, hi: 0xb5}, {value: 0x3308, lo: 0xb6, hi: 0xbe}, {value: 0x3008, lo: 0xbf, hi: 0xbf}, - // Block 0xb7, offset 0x582 + // Block 0xb9, offset 0x58c {value: 0x0000, lo: 0x0e}, {value: 0x3808, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x84}, @@ -4006,7 +4161,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa0, hi: 0xa0}, {value: 0x0018, lo: 0xa1, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xb8, offset 0x591 + // Block 0xba, offset 0x59b {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x91}, {value: 0x0040, lo: 0x92, hi: 0x92}, @@ -4020,7 +4175,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xb8, hi: 0xbd}, {value: 0x3308, lo: 0xbe, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xb9, offset 0x59e + // Block 0xbb, offset 0x5a8 {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, @@ -4034,7 +4189,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0xa9, hi: 0xa9}, {value: 0x0040, lo: 0xaa, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0xba, offset 0x5ab + // Block 0xbc, offset 0x5b5 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x9e}, {value: 0x3308, lo: 0x9f, hi: 0x9f}, @@ -4044,12 +4199,12 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xab, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xbb, offset 0x5b4 + // Block 0xbd, offset 0x5be {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xb4}, {value: 0x3008, lo: 0xb5, hi: 0xb7}, {value: 0x3308, lo: 0xb8, hi: 0xbf}, - // Block 0xbc, offset 0x5b8 + // Block 0xbe, offset 0x5c2 {value: 0x0000, lo: 0x0e}, {value: 0x3008, lo: 0x80, hi: 0x81}, {value: 0x3b08, lo: 0x82, hi: 0x82}, @@ -4065,7 +4220,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0x9e, hi: 0x9e}, {value: 0x0008, lo: 0x9f, hi: 0xa1}, {value: 0x0040, lo: 0xa2, hi: 0xbf}, - // Block 0xbd, offset 0x5c7 + // Block 0xbf, offset 0x5d1 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xaf}, {value: 0x3008, lo: 0xb0, hi: 0xb2}, @@ -4074,7 +4229,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xba, hi: 0xba}, {value: 0x3008, lo: 0xbb, hi: 0xbe}, {value: 0x3308, lo: 0xbf, hi: 0xbf}, - // Block 0xbe, offset 0x5cf + // Block 0xc0, offset 0x5d9 {value: 0x0000, lo: 0x0a}, {value: 0x3308, lo: 0x80, hi: 0x80}, {value: 0x3008, lo: 0x81, hi: 0x81}, @@ -4086,7 +4241,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x88, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xbf, offset 0x5da + // Block 0xc1, offset 0x5e4 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0xae}, {value: 0x3008, lo: 0xaf, hi: 0xb1}, @@ -4096,14 +4251,14 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xbc, hi: 0xbd}, {value: 0x3008, lo: 0xbe, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xc0, offset 0x5e3 + // Block 0xc2, offset 0x5ed {value: 0x0000, lo: 0x05}, {value: 0x3308, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0x9b}, {value: 0x3308, lo: 0x9c, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0xc1, offset 0x5e9 + // Block 0xc3, offset 0x5f3 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xaf}, {value: 0x3008, lo: 0xb0, hi: 0xb2}, @@ -4112,7 +4267,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xbd, hi: 0xbd}, {value: 0x3008, lo: 0xbe, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xc2, offset 0x5f1 + // Block 0xc4, offset 0x5fb {value: 0x0000, lo: 0x08}, {value: 0x3308, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x83}, @@ -4122,7 +4277,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x9a, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xbf}, - // Block 0xc3, offset 0x5fa + // Block 0xc5, offset 0x604 {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0xaa}, {value: 0x3308, lo: 0xab, hi: 0xab}, @@ -4134,11 +4289,11 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb7, hi: 0xb7}, {value: 0x0008, lo: 0xb8, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xc4, offset 0x605 + // Block 0xc6, offset 0x60f {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0040, lo: 0x8a, hi: 0xbf}, - // Block 0xc5, offset 0x608 + // Block 0xc7, offset 0x612 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x9a}, {value: 0x0040, lo: 0x9b, hi: 0x9c}, @@ -4151,7 +4306,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0018, lo: 0xba, hi: 0xbf}, - // Block 0xc6, offset 0x614 + // Block 0xc8, offset 0x61e {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0xab}, {value: 0x3008, lo: 0xac, hi: 0xae}, @@ -4161,17 +4316,17 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xba, hi: 0xba}, {value: 0x0018, lo: 0xbb, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0xc7, offset 0x61d + // Block 0xc9, offset 0x627 {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x049d, lo: 0xa0, hi: 0xbf}, - // Block 0xc8, offset 0x620 + // Block 0xca, offset 0x62a {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xbe}, {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0xc9, offset 0x625 + // Block 0xcb, offset 0x62f {value: 0x0000, lo: 0x08}, {value: 0x3008, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x81}, @@ -4181,13 +4336,13 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x87, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xca, offset 0x62e + // Block 0xcc, offset 0x638 {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xa9}, {value: 0x0008, lo: 0xaa, hi: 0xbf}, - // Block 0xcb, offset 0x633 + // Block 0xcd, offset 0x63d {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x90}, {value: 0x3008, lo: 0x91, hi: 0x93}, @@ -4201,7 +4356,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa3, hi: 0xa3}, {value: 0x3008, lo: 0xa4, hi: 0xa4}, {value: 0x0040, lo: 0xa5, hi: 0xbf}, - // Block 0xcc, offset 0x640 + // Block 0xce, offset 0x64a {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x3308, lo: 0x81, hi: 0x8a}, @@ -4213,7 +4368,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xba, hi: 0xba}, {value: 0x3308, lo: 0xbb, hi: 0xbe}, {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0xcd, offset 0x64b + // Block 0xcf, offset 0x655 {value: 0x0000, lo: 0x08}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x3b08, lo: 0x87, hi: 0x87}, @@ -4223,7 +4378,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0x97, hi: 0x98}, {value: 0x3308, lo: 0x99, hi: 0x9b}, {value: 0x0008, lo: 0x9c, hi: 0xbf}, - // Block 0xce, offset 0x654 + // Block 0xd0, offset 0x65e {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x3308, lo: 0x8a, hi: 0x96}, @@ -4234,11 +4389,11 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0x9d, hi: 0x9d}, {value: 0x0018, lo: 0x9e, hi: 0xa2}, {value: 0x0040, lo: 0xa3, hi: 0xbf}, - // Block 0xcf, offset 0x65e + // Block 0xd1, offset 0x668 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xd0, offset 0x661 + // Block 0xd2, offset 0x66b {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x89}, @@ -4249,7 +4404,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb8, hi: 0xbd}, {value: 0x3008, lo: 0xbe, hi: 0xbe}, {value: 0x3b08, lo: 0xbf, hi: 0xbf}, - // Block 0xd1, offset 0x66b + // Block 0xd3, offset 0x675 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x85}, @@ -4259,7 +4414,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0008, lo: 0xb2, hi: 0xbf}, - // Block 0xd2, offset 0x674 + // Block 0xd4, offset 0x67e {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x91}, @@ -4272,7 +4427,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb4, hi: 0xb4}, {value: 0x3308, lo: 0xb5, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xd3, offset 0x680 + // Block 0xd5, offset 0x68a {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, @@ -4286,7 +4441,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xbc, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbe}, {value: 0x3308, lo: 0xbf, hi: 0xbf}, - // Block 0xd4, offset 0x68d + // Block 0xd6, offset 0x697 {value: 0x0000, lo: 0x0c}, {value: 0x3308, lo: 0x80, hi: 0x83}, {value: 0x3b08, lo: 0x84, hi: 0x85}, @@ -4300,7 +4455,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa7, hi: 0xa8}, {value: 0x0040, lo: 0xa9, hi: 0xa9}, {value: 0x0008, lo: 0xaa, hi: 0xbf}, - // Block 0xd5, offset 0x69a + // Block 0xd7, offset 0x6a4 {value: 0x0000, lo: 0x0d}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x3008, lo: 0x8a, hi: 0x8e}, @@ -4315,7 +4470,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x99, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa9}, {value: 0x0040, lo: 0xaa, hi: 0xbf}, - // Block 0xd6, offset 0x6a8 + // Block 0xd8, offset 0x6b2 {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xb2}, @@ -4323,41 +4478,41 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3008, lo: 0xb5, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xd7, offset 0x6af + // Block 0xd9, offset 0x6b9 {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb0}, {value: 0x0040, lo: 0xb1, hi: 0xbf}, - // Block 0xd8, offset 0x6b3 + // Block 0xda, offset 0x6bd {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbe}, {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0xd9, offset 0x6b7 + // Block 0xdb, offset 0x6c1 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xda, offset 0x6ba + // Block 0xdc, offset 0x6c4 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xdb, offset 0x6bf + // Block 0xdd, offset 0x6c9 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0xbf}, - // Block 0xdc, offset 0x6c2 + // Block 0xde, offset 0x6cc {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0340, lo: 0xb0, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xdd, offset 0x6c7 + // Block 0xdf, offset 0x6d1 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0xbf}, - // Block 0xde, offset 0x6ca + // Block 0xe0, offset 0x6d4 {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, @@ -4365,7 +4520,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xaa, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0xdf, offset 0x6d1 + // Block 0xe1, offset 0x6db {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xad}, @@ -4373,12 +4528,12 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x3308, lo: 0xb0, hi: 0xb4}, {value: 0x0018, lo: 0xb5, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xe0, offset 0x6d8 + // Block 0xe2, offset 0x6e2 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xaf}, {value: 0x3308, lo: 0xb0, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0xe1, offset 0x6dc + // Block 0xe3, offset 0x6e6 {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0018, lo: 0x84, hi: 0x85}, @@ -4390,33 +4545,33 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa3, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbf}, - // Block 0xe2, offset 0x6e7 + // Block 0xe4, offset 0x6f1 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0xbf}, - // Block 0xe3, offset 0x6ea + // Block 0xe5, offset 0x6f4 {value: 0x0000, lo: 0x02}, {value: 0xe105, lo: 0x80, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0xe4, offset 0x6ed + // Block 0xe6, offset 0x6f7 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0x9a}, {value: 0x0040, lo: 0x9b, hi: 0xbf}, - // Block 0xe5, offset 0x6f0 + // Block 0xe7, offset 0x6fa {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0x8e}, {value: 0x3308, lo: 0x8f, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x90}, {value: 0x3008, lo: 0x91, hi: 0xbf}, - // Block 0xe6, offset 0x6f6 + // Block 0xe8, offset 0x700 {value: 0x0000, lo: 0x05}, {value: 0x3008, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8e}, {value: 0x3308, lo: 0x8f, hi: 0x92}, {value: 0x0008, lo: 0x93, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xe7, offset 0x6fc + // Block 0xe9, offset 0x706 {value: 0x0000, lo: 0x08}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa1}, @@ -4426,23 +4581,23 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa5, hi: 0xaf}, {value: 0x3008, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xe8, offset 0x705 + // Block 0xea, offset 0x70f {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0xe9, offset 0x708 + // Block 0xeb, offset 0x712 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0xbf}, - // Block 0xea, offset 0x70b + // Block 0xec, offset 0x715 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0xbf}, - // Block 0xeb, offset 0x70e + // Block 0xed, offset 0x718 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0xbf}, - // Block 0xec, offset 0x711 + // Block 0xee, offset 0x71b {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x92}, @@ -4450,17 +4605,17 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0008, lo: 0xa4, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0xed, offset 0x718 + // Block 0xef, offset 0x722 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0xee, offset 0x71b + // Block 0xf0, offset 0x725 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0xef, offset 0x720 + // Block 0xf1, offset 0x72a {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, @@ -4471,32 +4626,32 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0x9f, hi: 0x9f}, {value: 0x03c0, lo: 0xa0, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xbf}, - // Block 0xf0, offset 0x72a + // Block 0xf2, offset 0x734 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xf1, offset 0x72d + // Block 0xf3, offset 0x737 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xa6}, {value: 0x0040, lo: 0xa7, hi: 0xa8}, {value: 0x0018, lo: 0xa9, hi: 0xbf}, - // Block 0xf2, offset 0x731 + // Block 0xf4, offset 0x73b {value: 0x0000, lo: 0x0e}, {value: 0x0018, lo: 0x80, hi: 0x9d}, - {value: 0xb609, lo: 0x9e, hi: 0x9e}, - {value: 0xb651, lo: 0x9f, hi: 0x9f}, - {value: 0xb699, lo: 0xa0, hi: 0xa0}, - {value: 0xb701, lo: 0xa1, hi: 0xa1}, - {value: 0xb769, lo: 0xa2, hi: 0xa2}, - {value: 0xb7d1, lo: 0xa3, hi: 0xa3}, - {value: 0xb839, lo: 0xa4, hi: 0xa4}, + {value: 0x2211, lo: 0x9e, hi: 0x9e}, + {value: 0x2219, lo: 0x9f, hi: 0x9f}, + {value: 0x2221, lo: 0xa0, hi: 0xa0}, + {value: 0x2229, lo: 0xa1, hi: 0xa1}, + {value: 0x2231, lo: 0xa2, hi: 0xa2}, + {value: 0x2239, lo: 0xa3, hi: 0xa3}, + {value: 0x2241, lo: 0xa4, hi: 0xa4}, {value: 0x3018, lo: 0xa5, hi: 0xa6}, {value: 0x3318, lo: 0xa7, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xac}, {value: 0x3018, lo: 0xad, hi: 0xb2}, {value: 0x0340, lo: 0xb3, hi: 0xba}, {value: 0x3318, lo: 0xbb, hi: 0xbf}, - // Block 0xf3, offset 0x740 + // Block 0xf5, offset 0x74a {value: 0x0000, lo: 0x0b}, {value: 0x3318, lo: 0x80, hi: 0x82}, {value: 0x0018, lo: 0x83, hi: 0x84}, @@ -4504,45 +4659,45 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0018, lo: 0x8c, hi: 0xa9}, {value: 0x3318, lo: 0xaa, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xba}, - {value: 0xb8a1, lo: 0xbb, hi: 0xbb}, - {value: 0xb8e9, lo: 0xbc, hi: 0xbc}, - {value: 0xb931, lo: 0xbd, hi: 0xbd}, - {value: 0xb999, lo: 0xbe, hi: 0xbe}, - {value: 0xba01, lo: 0xbf, hi: 0xbf}, - // Block 0xf4, offset 0x74c + {value: 0x2249, lo: 0xbb, hi: 0xbb}, + {value: 0x2251, lo: 0xbc, hi: 0xbc}, + {value: 0x2259, lo: 0xbd, hi: 0xbd}, + {value: 0x2261, lo: 0xbe, hi: 0xbe}, + {value: 0x2269, lo: 0xbf, hi: 0xbf}, + // Block 0xf6, offset 0x756 {value: 0x0000, lo: 0x03}, - {value: 0xba69, lo: 0x80, hi: 0x80}, + {value: 0x2271, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0xa8}, {value: 0x0040, lo: 0xa9, hi: 0xbf}, - // Block 0xf5, offset 0x750 + // Block 0xf7, offset 0x75a {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x81}, {value: 0x3318, lo: 0x82, hi: 0x84}, {value: 0x0018, lo: 0x85, hi: 0x85}, {value: 0x0040, lo: 0x86, hi: 0xbf}, - // Block 0xf6, offset 0x755 + // Block 0xf8, offset 0x75f {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0xf7, offset 0x759 + // Block 0xf9, offset 0x763 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xf8, offset 0x75e + // Block 0xfa, offset 0x768 {value: 0x0000, lo: 0x03}, {value: 0x3308, lo: 0x80, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xba}, {value: 0x3308, lo: 0xbb, hi: 0xbf}, - // Block 0xf9, offset 0x762 + // Block 0xfb, offset 0x76c {value: 0x0000, lo: 0x04}, {value: 0x3308, lo: 0x80, hi: 0xac}, {value: 0x0018, lo: 0xad, hi: 0xb4}, {value: 0x3308, lo: 0xb5, hi: 0xb5}, {value: 0x0018, lo: 0xb6, hi: 0xbf}, - // Block 0xfa, offset 0x767 + // Block 0xfc, offset 0x771 {value: 0x0000, lo: 0x08}, {value: 0x0018, lo: 0x80, hi: 0x83}, {value: 0x3308, lo: 0x84, hi: 0x84}, @@ -4552,7 +4707,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa0, hi: 0xa0}, {value: 0x3308, lo: 0xa1, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0xfb, offset 0x770 + // Block 0xfd, offset 0x77a {value: 0x0000, lo: 0x0a}, {value: 0x3308, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, @@ -4564,35 +4719,35 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa5, hi: 0xa5}, {value: 0x3308, lo: 0xa6, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xbf}, - // Block 0xfc, offset 0x77b + // Block 0xfe, offset 0x785 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x3308, lo: 0xb0, hi: 0xb6}, {value: 0x0008, lo: 0xb7, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0xfd, offset 0x781 + // Block 0xff, offset 0x78b {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0040, lo: 0x8a, hi: 0x8d}, {value: 0x0008, lo: 0x8e, hi: 0x8e}, {value: 0x0018, lo: 0x8f, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0xbf}, - // Block 0xfe, offset 0x787 + // Block 0x100, offset 0x791 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0xab}, {value: 0x3308, lo: 0xac, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbe}, {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0xff, offset 0x78d + // Block 0x101, offset 0x797 {value: 0x0000, lo: 0x05}, {value: 0x0808, lo: 0x80, hi: 0x84}, {value: 0x0040, lo: 0x85, hi: 0x86}, {value: 0x0818, lo: 0x87, hi: 0x8f}, {value: 0x3308, lo: 0x90, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0xbf}, - // Block 0x100, offset 0x793 + // Block 0x102, offset 0x79d {value: 0x0000, lo: 0x08}, {value: 0x0a08, lo: 0x80, hi: 0x83}, {value: 0x3308, lo: 0x84, hi: 0x8a}, @@ -4602,71 +4757,71 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0x9a, hi: 0x9d}, {value: 0x0818, lo: 0x9e, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0x101, offset 0x79c + // Block 0x103, offset 0x7a6 {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0xb0}, {value: 0x0818, lo: 0xb1, hi: 0xbf}, - // Block 0x102, offset 0x79f + // Block 0x104, offset 0x7a9 {value: 0x0000, lo: 0x02}, {value: 0x0818, lo: 0x80, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x103, offset 0x7a2 + // Block 0x105, offset 0x7ac {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0818, lo: 0x81, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x104, offset 0x7a6 + // Block 0x106, offset 0x7b0 {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0x105, offset 0x7aa + // Block 0x107, offset 0x7b4 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x106, offset 0x7ae + // Block 0x108, offset 0x7b8 {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x93}, {value: 0x0040, lo: 0x94, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xb0}, {value: 0x0018, lo: 0xb1, hi: 0xbf}, - // Block 0x107, offset 0x7b4 + // Block 0x109, offset 0x7be {value: 0x0000, lo: 0x05}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x90}, {value: 0x0018, lo: 0x91, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0x108, offset 0x7ba + // Block 0x10a, offset 0x7c4 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x8f}, - {value: 0xc229, lo: 0x90, hi: 0x90}, + {value: 0x2491, lo: 0x90, hi: 0x90}, {value: 0x0018, lo: 0x91, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xbf}, - // Block 0x109, offset 0x7bf + // Block 0x10b, offset 0x7c9 {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0xa5}, {value: 0x0018, lo: 0xa6, hi: 0xbf}, - // Block 0x10a, offset 0x7c2 + // Block 0x10c, offset 0x7cc {value: 0x0000, lo: 0x0f}, - {value: 0xc851, lo: 0x80, hi: 0x80}, - {value: 0xc8a1, lo: 0x81, hi: 0x81}, - {value: 0xc8f1, lo: 0x82, hi: 0x82}, - {value: 0xc941, lo: 0x83, hi: 0x83}, - {value: 0xc991, lo: 0x84, hi: 0x84}, - {value: 0xc9e1, lo: 0x85, hi: 0x85}, - {value: 0xca31, lo: 0x86, hi: 0x86}, - {value: 0xca81, lo: 0x87, hi: 0x87}, - {value: 0xcad1, lo: 0x88, hi: 0x88}, + {value: 0x2611, lo: 0x80, hi: 0x80}, + {value: 0x2619, lo: 0x81, hi: 0x81}, + {value: 0x2621, lo: 0x82, hi: 0x82}, + {value: 0x2629, lo: 0x83, hi: 0x83}, + {value: 0x2631, lo: 0x84, hi: 0x84}, + {value: 0x2639, lo: 0x85, hi: 0x85}, + {value: 0x2641, lo: 0x86, hi: 0x86}, + {value: 0x2649, lo: 0x87, hi: 0x87}, + {value: 0x2651, lo: 0x88, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, - {value: 0xcb21, lo: 0x90, hi: 0x90}, - {value: 0xcb41, lo: 0x91, hi: 0x91}, + {value: 0x2659, lo: 0x90, hi: 0x90}, + {value: 0x2661, lo: 0x91, hi: 0x91}, {value: 0x0040, lo: 0x92, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa5}, {value: 0x0040, lo: 0xa6, hi: 0xbf}, - // Block 0x10b, offset 0x7d2 + // Block 0x10d, offset 0x7dc {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x97}, {value: 0x0040, lo: 0x98, hi: 0x9f}, @@ -4674,29 +4829,29 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x10c, offset 0x7d9 + // Block 0x10e, offset 0x7e3 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0x10d, offset 0x7dc + // Block 0x10f, offset 0x7e6 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x98}, {value: 0x0040, lo: 0x99, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xbf}, - // Block 0x10e, offset 0x7e1 + // Block 0x110, offset 0x7eb {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x10f, offset 0x7e5 + // Block 0x111, offset 0x7ef {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xbf}, - // Block 0x110, offset 0x7eb + // Block 0x112, offset 0x7f5 {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, @@ -4704,17 +4859,17 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0x111, offset 0x7f2 + // Block 0x113, offset 0x7fc {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xb9}, {value: 0x0018, lo: 0xba, hi: 0xbf}, - // Block 0x112, offset 0x7f6 + // Block 0x114, offset 0x800 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0xbf}, - // Block 0x113, offset 0x7fa + // Block 0x115, offset 0x804 {value: 0x0000, lo: 0x08}, {value: 0x0018, lo: 0x80, hi: 0x93}, {value: 0x0040, lo: 0x94, hi: 0x9f}, @@ -4724,7 +4879,7 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xb5, hi: 0xb7}, {value: 0x0018, lo: 0xb8, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x114, offset 0x803 + // Block 0x116, offset 0x80d {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8f}, @@ -4732,109 +4887,74 @@ var idnaSparseValues = [2146]valueRange{ {value: 0x0040, lo: 0xa9, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x115, offset 0x80a + // Block 0x117, offset 0x814 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x82}, {value: 0x0040, lo: 0x83, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0xbf}, - // Block 0x116, offset 0x80f + // Block 0x118, offset 0x819 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x92}, {value: 0x0040, lo: 0x93, hi: 0x93}, {value: 0x0018, lo: 0x94, hi: 0xbf}, - // Block 0x117, offset 0x813 + // Block 0x119, offset 0x81d {value: 0x0000, lo: 0x0d}, {value: 0x0018, lo: 0x80, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0xaf}, - {value: 0x1f41, lo: 0xb0, hi: 0xb0}, - {value: 0x00c9, lo: 0xb1, hi: 0xb1}, - {value: 0x0069, lo: 0xb2, hi: 0xb2}, - {value: 0x0079, lo: 0xb3, hi: 0xb3}, - {value: 0x1f51, lo: 0xb4, hi: 0xb4}, - {value: 0x1f61, lo: 0xb5, hi: 0xb5}, - {value: 0x1f71, lo: 0xb6, hi: 0xb6}, - {value: 0x1f81, lo: 0xb7, hi: 0xb7}, - {value: 0x1f91, lo: 0xb8, hi: 0xb8}, - {value: 0x1fa1, lo: 0xb9, hi: 0xb9}, + {value: 0x06e1, lo: 0xb0, hi: 0xb0}, + {value: 0x0049, lo: 0xb1, hi: 0xb1}, + {value: 0x0029, lo: 0xb2, hi: 0xb2}, + {value: 0x0031, lo: 0xb3, hi: 0xb3}, + {value: 0x06e9, lo: 0xb4, hi: 0xb4}, + {value: 0x06f1, lo: 0xb5, hi: 0xb5}, + {value: 0x06f9, lo: 0xb6, hi: 0xb6}, + {value: 0x0701, lo: 0xb7, hi: 0xb7}, + {value: 0x0709, lo: 0xb8, hi: 0xb8}, + {value: 0x0711, lo: 0xb9, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x118, offset 0x821 + // Block 0x11a, offset 0x82b {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0x119, offset 0x824 + // Block 0x11b, offset 0x82e {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x11a, offset 0x827 + // Block 0x11c, offset 0x831 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x11b, offset 0x82b + // Block 0x11d, offset 0x835 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa1}, {value: 0x0040, lo: 0xa2, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x11c, offset 0x82f + // Block 0x11e, offset 0x839 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xa0}, {value: 0x0040, lo: 0xa1, hi: 0xbf}, - // Block 0x11d, offset 0x832 - {value: 0x0020, lo: 0x0f}, - {value: 0xdf21, lo: 0x80, hi: 0x89}, - {value: 0x8e35, lo: 0x8a, hi: 0x8a}, - {value: 0xe061, lo: 0x8b, hi: 0x9c}, - {value: 0x8e55, lo: 0x9d, hi: 0x9d}, - {value: 0xe2a1, lo: 0x9e, hi: 0xa2}, - {value: 0x8e75, lo: 0xa3, hi: 0xa3}, - {value: 0xe341, lo: 0xa4, hi: 0xab}, - {value: 0x7f0d, lo: 0xac, hi: 0xac}, - {value: 0xe441, lo: 0xad, hi: 0xaf}, - {value: 0x8e95, lo: 0xb0, hi: 0xb0}, - {value: 0xe4a1, lo: 0xb1, hi: 0xb6}, - {value: 0x8eb5, lo: 0xb7, hi: 0xb9}, - {value: 0xe561, lo: 0xba, hi: 0xba}, - {value: 0x8f15, lo: 0xbb, hi: 0xbb}, - {value: 0xe581, lo: 0xbc, hi: 0xbf}, - // Block 0x11e, offset 0x842 - {value: 0x0020, lo: 0x10}, - {value: 0x93b5, lo: 0x80, hi: 0x80}, - {value: 0xf101, lo: 0x81, hi: 0x86}, - {value: 0x93d5, lo: 0x87, hi: 0x8a}, - {value: 0xda61, lo: 0x8b, hi: 0x8b}, - {value: 0xf1c1, lo: 0x8c, hi: 0x96}, - {value: 0x9455, lo: 0x97, hi: 0x97}, - {value: 0xf321, lo: 0x98, hi: 0xa3}, - {value: 0x9475, lo: 0xa4, hi: 0xa6}, - {value: 0xf4a1, lo: 0xa7, hi: 0xaa}, - {value: 0x94d5, lo: 0xab, hi: 0xab}, - {value: 0xf521, lo: 0xac, hi: 0xac}, - {value: 0x94f5, lo: 0xad, hi: 0xad}, - {value: 0xf541, lo: 0xae, hi: 0xaf}, - {value: 0x9515, lo: 0xb0, hi: 0xb1}, - {value: 0xf581, lo: 0xb2, hi: 0xbe}, - {value: 0x2040, lo: 0xbf, hi: 0xbf}, - // Block 0x11f, offset 0x853 + // Block 0x11f, offset 0x83c {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0xbf}, - // Block 0x120, offset 0x856 + // Block 0x120, offset 0x83f {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0340, lo: 0x81, hi: 0x81}, {value: 0x0040, lo: 0x82, hi: 0x9f}, {value: 0x0340, lo: 0xa0, hi: 0xbf}, - // Block 0x121, offset 0x85b + // Block 0x121, offset 0x844 {value: 0x0000, lo: 0x01}, {value: 0x0340, lo: 0x80, hi: 0xbf}, - // Block 0x122, offset 0x85d + // Block 0x122, offset 0x846 {value: 0x0000, lo: 0x01}, {value: 0x33c0, lo: 0x80, hi: 0xbf}, - // Block 0x123, offset 0x85f + // Block 0x123, offset 0x848 {value: 0x0000, lo: 0x02}, {value: 0x33c0, lo: 0x80, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, } -// Total table size 43370 bytes (42KiB); checksum: EBD909C0 +// Total table size 44953 bytes (43KiB); checksum: D51909DD diff --git a/vendor/golang.org/x/net/idna/tables15.0.0.go b/vendor/golang.org/x/net/idna/tables15.0.0.go new file mode 100644 index 0000000000000..40033778f01f3 --- /dev/null +++ b/vendor/golang.org/x/net/idna/tables15.0.0.go @@ -0,0 +1,5145 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.21 +// +build go1.21 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "15.0.0" + +var mappings string = "" + // Size: 6704 bytes + " ̈a ̄23 ́ ̧1o1⁄41⁄23⁄4i̇l·ʼnsdžⱥⱦhjrwy ̆ ̇ ̊ ̨ ̃ ̋lẍ́ ι; ̈́եւاٴوٴۇٴيٴक" + + "़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀྲཱྀླྀླཱ" + + "ཱྀྀྒྷྜྷྡྷྦྷྫྷྐྵвдостъѣæbdeǝgikmnȣptuɐɑəɛɜŋɔɯvβγδφχρнɒcɕðfɟɡɥɨɩɪʝɭʟɱɰɲɳ" + + "ɴɵɸʂʃƫʉʊʋʌzʐʑʒθssάέήίόύώἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧ" + + "ιὰιαιάιᾶιι ̈͂ὴιηιήιῆι ̓̀ ̓́ ̓͂ΐ ̔̀ ̔́ ̔͂ΰ ̈̀`ὼιωιώιῶι′′′′′‵‵‵‵‵!!???!!?" + + "′′′′0456789+=()rsħnoqsmtmωåאבגדπ1⁄71⁄91⁄101⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83" + + "⁄85⁄87⁄81⁄iiivviviiiixxi0⁄3∫∫∫∫∫∮∮∮∮∮1011121314151617181920(10)(11)(12" + + ")(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫==⫝̸ɫɽȿɀ. ゙ ゚よりコト(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)" + + "(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(오전" + + ")(오후)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(" + + "財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)21222324252627282930313233343" + + "5참고주의3637383940414243444546474849501月2月3月4月5月6月7月8月9月10月11月12月hgev令和アパート" + + "アルファアンペアアールイニングインチウォンエスクードエーカーオンスオームカイリカラットカロリーガロンガンマギガギニーキュリーギルダーキロキロ" + + "グラムキロメートルキロワットグラムグラムトンクルゼイロクローネケースコルナコーポサイクルサンチームシリングセンチセントダースデシドルトンナノ" + + "ノットハイツパーセントパーツバーレルピアストルピクルピコビルファラッドフィートブッシェルフランヘクタールペソペニヒヘルツペンスページベータポ" + + "イントボルトホンポンドホールホーンマイクロマイルマッハマルクマンションミクロンミリミリバールメガメガトンメートルヤードヤールユアンリットルリ" + + "ラルピールーブルレムレントゲンワット0点1点2点3点4点5点6点7点8点9点10点11点12点13点14点15点16点17点18点19点20" + + "点21点22点23点24点daauovpcdmiu平成昭和大正明治株式会社panamakakbmbgbkcalpfnfmgkghzmldlk" + + "lfmnmmmcmkmm2m3m∕sm∕s2rad∕srad∕s2psnsmspvnvmvkvpwnwmwkwbqcccdc∕kgdbgyhah" + + "pinkkktlmlnlxphprsrsvwbv∕ma∕m1日2日3日4日5日6日7日8日9日10日11日12日13日14日15日16日17日1" + + "8日19日20日21日22日23日24日25日26日27日28日29日30日31日ьɦɬʞʇœʍ𤋮𢡊𢡄𣏕𥉉𥳐𧻓fffiflstմնմեմիվնմ" + + "խיִײַעהכלםרתשׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּשּתּו" + + "ֹבֿכֿפֿאלٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھےۓڭۇۆۈۋۅۉېىئائەئوئۇئۆئۈئېئىیئجئحئم" + + "ئيبجبحبخبمبىبيتجتحتختمتىتيثجثمثىثيجحجمحجحمخجخحخمسجسحسخسمصحصمضجضحضخضمطحط" + + "مظمعجعمغجغمفجفحفخفمفىفيقحقمقىقيكاكجكحكخكلكمكىكيلجلحلخلملىليمجمحمخمممىمي" + + "نجنحنخنمنىنيهجهمهىهييجيحيخيميىييذٰرٰىٰ ٌّ ٍّ َّ ُّ ِّ ّٰئرئزئنبربزبنترت" + + "زتنثرثزثنمانرنزننيريزينئخئهبهتهصخلهنههٰيهثهسهشمشهـَّـُّـِّطىطيعىعيغىغيس" + + "ىسيشىشيحىحيجىجيخىخيصىصيضىضيشجشحشخشرسرصرضراًتجمتحجتحمتخمتمجتمحتمخجمححميح" + + "مىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمى" + + "فخمقمحقمملحملحيلحىلججلخملمحمحجمحممحيمجحمجممخجمخممجخهمجهممنحمنحىنجمنجىنم" + + "ينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمين" + + "حيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلےاللهاكبرمحمدصلعمرسولعليه" + + "وسلمصلىصلى الله عليه وسلمجل جلالهریال,:!?_{}[]#&*-<>\\$%@ـًـَـُـِـّـْءآ" + + "أؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهويلآلألإلا\x22'/^|~¢£¬¦¥ːˑʙɓʣꭦʥʤɖɗᶑɘɞʩɤɢ" + + "ɠʛʜɧʄʪʫꞎɮʎøɶɷɺɾʀʨʦꭧʧʈⱱʏʡʢʘǀǁǂ𝅗𝅥𝅘𝅥𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱𝅘𝅥𝅲𝆹𝅥𝆺𝅥𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯ıȷαεζηκ" + + "λμνξοστυψ∇∂ϝабгежзиклмпруфхцчшыэюꚉәіјөүӏґѕџҫꙑұٮڡٯ0,1,2,3,4,5,6,7,8,9,(a" + + ")(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y" + + ")(z)〔s〕wzhvsdppvwcmcmdmrdjほかココサ手字双デ二多解天交映無料前後再新初終生販声吹演投捕一三遊左中右指走打禁空合満有月申" + + "割営配〔本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕得可丽丸乁你侮侻倂偺備僧像㒞免兔兤具㒹內冗冤仌冬况凵刃㓟刻剆剷㔕勇勉勤勺包匆北卉" + + "卑博即卽卿灰及叟叫叱吆咞吸呈周咢哶唐啓啣善喙喫喳嗂圖嘆圗噑噴切壮城埴堍型堲報墬売壷夆夢奢姬娛娧姘婦㛮嬈嬾寃寘寧寳寿将尢㞁屠屮峀岍嵃嵮嵫嵼巡巢" + + "㠯巽帨帽幩㡢㡼庰庳庶廊廾舁弢㣇形彫㣣徚忍志忹悁㤺㤜悔惇慈慌慎慺憎憲憤憯懞懲懶成戛扝抱拔捐挽拼捨掃揤搢揅掩㨮摩摾撝摷㩬敏敬旣書晉㬙暑㬈㫤冒冕最" + + "暜肭䏙朗望朡杞杓㭉柺枅桒梅梎栟椔㮝楂榣槪檨櫛㰘次歔㱎歲殟殺殻汎沿泍汧洖派海流浩浸涅洴港湮㴳滋滇淹潮濆瀹瀞瀛㶖灊災灷炭煅熜爨爵牐犀犕獺王㺬玥㺸" + + "瑇瑜瑱璅瓊㼛甤甾異瘐㿼䀈直眞真睊䀹瞋䁆䂖硎碌磌䃣祖福秫䄯穀穊穏䈂篆築䈧糒䊠糨糣紀絣䌁緇縂繅䌴䍙罺羕翺者聠聰䏕育脃䐋脾媵舄辞䑫芑芋芝劳花芳芽苦" + + "若茝荣莭茣莽菧著荓菊菌菜䔫蓱蓳蔖蕤䕝䕡䕫虐虜虧虩蚩蚈蜎蛢蝹蜨蝫螆蟡蠁䗹衠衣裗裞䘵裺㒻䚾䛇誠諭變豕貫賁贛起跋趼跰軔輸邔郱鄑鄛鈸鋗鋘鉼鏹鐕開䦕閷" + + "䧦雃嶲霣䩮䩶韠䪲頋頩飢䬳餩馧駂駾䯎鬒鱀鳽䳎䳭鵧䳸麻䵖黹黾鼅鼏鼖鼻" + +var mappingIndex = []uint16{ // 1729 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0001, 0x0004, 0x0005, 0x0008, 0x0009, 0x000a, + 0x000d, 0x0010, 0x0011, 0x0012, 0x0017, 0x001c, 0x0021, 0x0024, + 0x0027, 0x002a, 0x002b, 0x002e, 0x0031, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x003c, 0x003f, 0x0042, 0x0045, 0x0048, + 0x004b, 0x004c, 0x004d, 0x0051, 0x0054, 0x0055, 0x005a, 0x005e, + 0x0062, 0x0066, 0x006a, 0x006e, 0x0074, 0x007a, 0x0080, 0x0086, + 0x008c, 0x0092, 0x0098, 0x009e, 0x00a4, 0x00aa, 0x00b0, 0x00b6, + 0x00bc, 0x00c2, 0x00c8, 0x00ce, 0x00d4, 0x00da, 0x00e0, 0x00e6, + // Entry 40 - 7F + 0x00ec, 0x00f2, 0x00f8, 0x00fe, 0x0104, 0x010a, 0x0110, 0x0116, + 0x011c, 0x0122, 0x0128, 0x012e, 0x0137, 0x013d, 0x0146, 0x014c, + 0x0152, 0x0158, 0x015e, 0x0164, 0x016a, 0x0170, 0x0172, 0x0174, + 0x0176, 0x0178, 0x017a, 0x017c, 0x017e, 0x0180, 0x0181, 0x0182, + 0x0183, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018a, 0x018c, + 0x018d, 0x018e, 0x018f, 0x0191, 0x0193, 0x0195, 0x0197, 0x0199, + 0x019b, 0x019d, 0x019f, 0x01a0, 0x01a2, 0x01a4, 0x01a6, 0x01a8, + 0x01aa, 0x01ac, 0x01ae, 0x01b0, 0x01b1, 0x01b3, 0x01b5, 0x01b6, + // Entry 80 - BF + 0x01b8, 0x01ba, 0x01bc, 0x01be, 0x01c0, 0x01c2, 0x01c4, 0x01c6, + 0x01c8, 0x01ca, 0x01cc, 0x01ce, 0x01d0, 0x01d2, 0x01d4, 0x01d6, + 0x01d8, 0x01da, 0x01dc, 0x01de, 0x01e0, 0x01e2, 0x01e4, 0x01e5, + 0x01e7, 0x01e9, 0x01eb, 0x01ed, 0x01ef, 0x01f1, 0x01f3, 0x01f5, + 0x01f7, 0x01f9, 0x01fb, 0x01fd, 0x0202, 0x0207, 0x020c, 0x0211, + 0x0216, 0x021b, 0x0220, 0x0225, 0x022a, 0x022f, 0x0234, 0x0239, + 0x023e, 0x0243, 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0261, + 0x0266, 0x026b, 0x0270, 0x0275, 0x027a, 0x027e, 0x0282, 0x0287, + // Entry C0 - FF + 0x0289, 0x028e, 0x0293, 0x0297, 0x029b, 0x02a0, 0x02a5, 0x02aa, + 0x02af, 0x02b1, 0x02b6, 0x02bb, 0x02c0, 0x02c2, 0x02c7, 0x02c8, + 0x02cd, 0x02d1, 0x02d5, 0x02da, 0x02e0, 0x02e9, 0x02ef, 0x02f8, + 0x02fa, 0x02fc, 0x02fe, 0x0300, 0x030c, 0x030d, 0x030e, 0x030f, + 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, + 0x0319, 0x031b, 0x031d, 0x031e, 0x0320, 0x0322, 0x0324, 0x0326, + 0x0328, 0x032a, 0x032c, 0x032e, 0x0330, 0x0335, 0x033a, 0x0340, + 0x0345, 0x034a, 0x034f, 0x0354, 0x0359, 0x035e, 0x0363, 0x0368, + // Entry 100 - 13F + 0x036d, 0x0372, 0x0377, 0x037c, 0x0380, 0x0382, 0x0384, 0x0386, + 0x038a, 0x038c, 0x038e, 0x0393, 0x0399, 0x03a2, 0x03a8, 0x03b1, + 0x03b3, 0x03b5, 0x03b7, 0x03b9, 0x03bb, 0x03bd, 0x03bf, 0x03c1, + 0x03c3, 0x03c5, 0x03c7, 0x03cb, 0x03cf, 0x03d3, 0x03d7, 0x03db, + 0x03df, 0x03e3, 0x03e7, 0x03eb, 0x03ef, 0x03f3, 0x03ff, 0x0401, + 0x0406, 0x0408, 0x040a, 0x040c, 0x040e, 0x040f, 0x0413, 0x0417, + 0x041d, 0x0423, 0x0428, 0x042d, 0x0432, 0x0437, 0x043c, 0x0441, + 0x0446, 0x044b, 0x0450, 0x0455, 0x045a, 0x045f, 0x0464, 0x0469, + // Entry 140 - 17F + 0x046e, 0x0473, 0x0478, 0x047d, 0x0482, 0x0487, 0x048c, 0x0491, + 0x0496, 0x049b, 0x04a0, 0x04a5, 0x04aa, 0x04af, 0x04b4, 0x04bc, + 0x04c4, 0x04c9, 0x04ce, 0x04d3, 0x04d8, 0x04dd, 0x04e2, 0x04e7, + 0x04ec, 0x04f1, 0x04f6, 0x04fb, 0x0500, 0x0505, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053c, 0x0541, 0x0546, 0x054b, 0x0550, 0x0555, 0x055a, 0x055f, + 0x0564, 0x0569, 0x056e, 0x0573, 0x0578, 0x057a, 0x057c, 0x057e, + 0x0580, 0x0582, 0x0584, 0x0586, 0x0588, 0x058a, 0x058c, 0x058e, + // Entry 180 - 1BF + 0x0590, 0x0592, 0x0594, 0x0596, 0x059c, 0x05a2, 0x05a4, 0x05a6, + 0x05a8, 0x05aa, 0x05ac, 0x05ae, 0x05b0, 0x05b2, 0x05b4, 0x05b6, + 0x05b8, 0x05ba, 0x05bc, 0x05be, 0x05c0, 0x05c4, 0x05c8, 0x05cc, + 0x05d0, 0x05d4, 0x05d8, 0x05dc, 0x05e0, 0x05e4, 0x05e9, 0x05ee, + 0x05f3, 0x05f5, 0x05f7, 0x05fd, 0x0609, 0x0615, 0x0621, 0x062a, + 0x0636, 0x063f, 0x0648, 0x0657, 0x0663, 0x066c, 0x0675, 0x067e, + 0x068a, 0x0696, 0x069f, 0x06a8, 0x06ae, 0x06b7, 0x06c3, 0x06cf, + 0x06d5, 0x06e4, 0x06f6, 0x0705, 0x070e, 0x071d, 0x072c, 0x0738, + // Entry 1C0 - 1FF + 0x0741, 0x074a, 0x0753, 0x075f, 0x076e, 0x077a, 0x0783, 0x078c, + 0x0795, 0x079b, 0x07a1, 0x07a7, 0x07ad, 0x07b6, 0x07bf, 0x07ce, + 0x07d7, 0x07e3, 0x07f2, 0x07fb, 0x0801, 0x0807, 0x0816, 0x0822, + 0x0831, 0x083a, 0x0849, 0x084f, 0x0858, 0x0861, 0x086a, 0x0873, + 0x087c, 0x0888, 0x0891, 0x0897, 0x08a0, 0x08a9, 0x08b2, 0x08be, + 0x08c7, 0x08d0, 0x08d9, 0x08e8, 0x08f4, 0x08fa, 0x0909, 0x090f, + 0x091b, 0x0927, 0x0930, 0x0939, 0x0942, 0x094e, 0x0954, 0x095d, + 0x0969, 0x096f, 0x097e, 0x0987, 0x098b, 0x098f, 0x0993, 0x0997, + // Entry 200 - 23F + 0x099b, 0x099f, 0x09a3, 0x09a7, 0x09ab, 0x09af, 0x09b4, 0x09b9, + 0x09be, 0x09c3, 0x09c8, 0x09cd, 0x09d2, 0x09d7, 0x09dc, 0x09e1, + 0x09e6, 0x09eb, 0x09f0, 0x09f5, 0x09fa, 0x09fc, 0x09fe, 0x0a00, + 0x0a02, 0x0a04, 0x0a06, 0x0a0c, 0x0a12, 0x0a18, 0x0a1e, 0x0a2a, + 0x0a2c, 0x0a2e, 0x0a30, 0x0a32, 0x0a34, 0x0a36, 0x0a38, 0x0a3c, + 0x0a3e, 0x0a40, 0x0a42, 0x0a44, 0x0a46, 0x0a48, 0x0a4a, 0x0a4c, + 0x0a4e, 0x0a50, 0x0a52, 0x0a54, 0x0a56, 0x0a58, 0x0a5a, 0x0a5f, + 0x0a65, 0x0a6c, 0x0a74, 0x0a76, 0x0a78, 0x0a7a, 0x0a7c, 0x0a7e, + // Entry 240 - 27F + 0x0a80, 0x0a82, 0x0a84, 0x0a86, 0x0a88, 0x0a8a, 0x0a8c, 0x0a8e, + 0x0a90, 0x0a96, 0x0a98, 0x0a9a, 0x0a9c, 0x0a9e, 0x0aa0, 0x0aa2, + 0x0aa4, 0x0aa6, 0x0aa8, 0x0aaa, 0x0aac, 0x0aae, 0x0ab0, 0x0ab2, + 0x0ab4, 0x0ab9, 0x0abe, 0x0ac2, 0x0ac6, 0x0aca, 0x0ace, 0x0ad2, + 0x0ad6, 0x0ada, 0x0ade, 0x0ae2, 0x0ae7, 0x0aec, 0x0af1, 0x0af6, + 0x0afb, 0x0b00, 0x0b05, 0x0b0a, 0x0b0f, 0x0b14, 0x0b19, 0x0b1e, + 0x0b23, 0x0b28, 0x0b2d, 0x0b32, 0x0b37, 0x0b3c, 0x0b41, 0x0b46, + 0x0b4b, 0x0b50, 0x0b52, 0x0b54, 0x0b56, 0x0b58, 0x0b5a, 0x0b5c, + // Entry 280 - 2BF + 0x0b5e, 0x0b62, 0x0b66, 0x0b6a, 0x0b6e, 0x0b72, 0x0b76, 0x0b7a, + 0x0b7c, 0x0b7e, 0x0b80, 0x0b82, 0x0b86, 0x0b8a, 0x0b8e, 0x0b92, + 0x0b96, 0x0b9a, 0x0b9e, 0x0ba0, 0x0ba2, 0x0ba4, 0x0ba6, 0x0ba8, + 0x0baa, 0x0bac, 0x0bb0, 0x0bb4, 0x0bba, 0x0bc0, 0x0bc4, 0x0bc8, + 0x0bcc, 0x0bd0, 0x0bd4, 0x0bd8, 0x0bdc, 0x0be0, 0x0be4, 0x0be8, + 0x0bec, 0x0bf0, 0x0bf4, 0x0bf8, 0x0bfc, 0x0c00, 0x0c04, 0x0c08, + 0x0c0c, 0x0c10, 0x0c14, 0x0c18, 0x0c1c, 0x0c20, 0x0c24, 0x0c28, + 0x0c2c, 0x0c30, 0x0c34, 0x0c36, 0x0c38, 0x0c3a, 0x0c3c, 0x0c3e, + // Entry 2C0 - 2FF + 0x0c40, 0x0c42, 0x0c44, 0x0c46, 0x0c48, 0x0c4a, 0x0c4c, 0x0c4e, + 0x0c50, 0x0c52, 0x0c54, 0x0c56, 0x0c58, 0x0c5a, 0x0c5c, 0x0c5e, + 0x0c60, 0x0c62, 0x0c64, 0x0c66, 0x0c68, 0x0c6a, 0x0c6c, 0x0c6e, + 0x0c70, 0x0c72, 0x0c74, 0x0c76, 0x0c78, 0x0c7a, 0x0c7c, 0x0c7e, + 0x0c80, 0x0c82, 0x0c86, 0x0c8a, 0x0c8e, 0x0c92, 0x0c96, 0x0c9a, + 0x0c9e, 0x0ca2, 0x0ca4, 0x0ca8, 0x0cac, 0x0cb0, 0x0cb4, 0x0cb8, + 0x0cbc, 0x0cc0, 0x0cc4, 0x0cc8, 0x0ccc, 0x0cd0, 0x0cd4, 0x0cd8, + 0x0cdc, 0x0ce0, 0x0ce4, 0x0ce8, 0x0cec, 0x0cf0, 0x0cf4, 0x0cf8, + // Entry 300 - 33F + 0x0cfc, 0x0d00, 0x0d04, 0x0d08, 0x0d0c, 0x0d10, 0x0d14, 0x0d18, + 0x0d1c, 0x0d20, 0x0d24, 0x0d28, 0x0d2c, 0x0d30, 0x0d34, 0x0d38, + 0x0d3c, 0x0d40, 0x0d44, 0x0d48, 0x0d4c, 0x0d50, 0x0d54, 0x0d58, + 0x0d5c, 0x0d60, 0x0d64, 0x0d68, 0x0d6c, 0x0d70, 0x0d74, 0x0d78, + 0x0d7c, 0x0d80, 0x0d84, 0x0d88, 0x0d8c, 0x0d90, 0x0d94, 0x0d98, + 0x0d9c, 0x0da0, 0x0da4, 0x0da8, 0x0dac, 0x0db0, 0x0db4, 0x0db8, + 0x0dbc, 0x0dc0, 0x0dc4, 0x0dc8, 0x0dcc, 0x0dd0, 0x0dd4, 0x0dd8, + 0x0ddc, 0x0de0, 0x0de4, 0x0de8, 0x0dec, 0x0df0, 0x0df4, 0x0df8, + // Entry 340 - 37F + 0x0dfc, 0x0e00, 0x0e04, 0x0e08, 0x0e0c, 0x0e10, 0x0e14, 0x0e18, + 0x0e1d, 0x0e22, 0x0e27, 0x0e2c, 0x0e31, 0x0e36, 0x0e3a, 0x0e3e, + 0x0e42, 0x0e46, 0x0e4a, 0x0e4e, 0x0e52, 0x0e56, 0x0e5a, 0x0e5e, + 0x0e62, 0x0e66, 0x0e6a, 0x0e6e, 0x0e72, 0x0e76, 0x0e7a, 0x0e7e, + 0x0e82, 0x0e86, 0x0e8a, 0x0e8e, 0x0e92, 0x0e96, 0x0e9a, 0x0e9e, + 0x0ea2, 0x0ea6, 0x0eaa, 0x0eae, 0x0eb2, 0x0eb6, 0x0ebc, 0x0ec2, + 0x0ec8, 0x0ecc, 0x0ed0, 0x0ed4, 0x0ed8, 0x0edc, 0x0ee0, 0x0ee4, + 0x0ee8, 0x0eec, 0x0ef0, 0x0ef4, 0x0ef8, 0x0efc, 0x0f00, 0x0f04, + // Entry 380 - 3BF + 0x0f08, 0x0f0c, 0x0f10, 0x0f14, 0x0f18, 0x0f1c, 0x0f20, 0x0f24, + 0x0f28, 0x0f2c, 0x0f30, 0x0f34, 0x0f38, 0x0f3e, 0x0f44, 0x0f4a, + 0x0f50, 0x0f56, 0x0f5c, 0x0f62, 0x0f68, 0x0f6e, 0x0f74, 0x0f7a, + 0x0f80, 0x0f86, 0x0f8c, 0x0f92, 0x0f98, 0x0f9e, 0x0fa4, 0x0faa, + 0x0fb0, 0x0fb6, 0x0fbc, 0x0fc2, 0x0fc8, 0x0fce, 0x0fd4, 0x0fda, + 0x0fe0, 0x0fe6, 0x0fec, 0x0ff2, 0x0ff8, 0x0ffe, 0x1004, 0x100a, + 0x1010, 0x1016, 0x101c, 0x1022, 0x1028, 0x102e, 0x1034, 0x103a, + 0x1040, 0x1046, 0x104c, 0x1052, 0x1058, 0x105e, 0x1064, 0x106a, + // Entry 3C0 - 3FF + 0x1070, 0x1076, 0x107c, 0x1082, 0x1088, 0x108e, 0x1094, 0x109a, + 0x10a0, 0x10a6, 0x10ac, 0x10b2, 0x10b8, 0x10be, 0x10c4, 0x10ca, + 0x10d0, 0x10d6, 0x10dc, 0x10e2, 0x10e8, 0x10ee, 0x10f4, 0x10fa, + 0x1100, 0x1106, 0x110c, 0x1112, 0x1118, 0x111e, 0x1124, 0x112a, + 0x1130, 0x1136, 0x113c, 0x1142, 0x1148, 0x114e, 0x1154, 0x115a, + 0x1160, 0x1166, 0x116c, 0x1172, 0x1178, 0x1180, 0x1188, 0x1190, + 0x1198, 0x11a0, 0x11a8, 0x11b0, 0x11b6, 0x11d7, 0x11e6, 0x11ee, + 0x11ef, 0x11f0, 0x11f1, 0x11f2, 0x11f3, 0x11f4, 0x11f5, 0x11f6, + // Entry 400 - 43F + 0x11f7, 0x11f8, 0x11f9, 0x11fa, 0x11fb, 0x11fc, 0x11fd, 0x11fe, + 0x11ff, 0x1200, 0x1201, 0x1205, 0x1209, 0x120d, 0x1211, 0x1215, + 0x1219, 0x121b, 0x121d, 0x121f, 0x1221, 0x1223, 0x1225, 0x1227, + 0x1229, 0x122b, 0x122d, 0x122f, 0x1231, 0x1233, 0x1235, 0x1237, + 0x1239, 0x123b, 0x123d, 0x123f, 0x1241, 0x1243, 0x1245, 0x1247, + 0x1249, 0x124b, 0x124d, 0x124f, 0x1251, 0x1253, 0x1255, 0x1257, + 0x1259, 0x125b, 0x125d, 0x125f, 0x1263, 0x1267, 0x126b, 0x126f, + 0x1270, 0x1271, 0x1272, 0x1273, 0x1274, 0x1275, 0x1277, 0x1279, + // Entry 440 - 47F + 0x127b, 0x127d, 0x127f, 0x1281, 0x1283, 0x1285, 0x1287, 0x1289, + 0x128c, 0x128e, 0x1290, 0x1292, 0x1294, 0x1297, 0x1299, 0x129b, + 0x129d, 0x129f, 0x12a1, 0x12a3, 0x12a5, 0x12a7, 0x12a9, 0x12ab, + 0x12ad, 0x12af, 0x12b2, 0x12b4, 0x12b6, 0x12b8, 0x12ba, 0x12bc, + 0x12be, 0x12c0, 0x12c2, 0x12c4, 0x12c6, 0x12c9, 0x12cb, 0x12cd, + 0x12d0, 0x12d2, 0x12d4, 0x12d6, 0x12d8, 0x12da, 0x12dc, 0x12de, + 0x12e6, 0x12ee, 0x12fa, 0x1306, 0x1312, 0x131e, 0x132a, 0x1332, + 0x133a, 0x1346, 0x1352, 0x135e, 0x136a, 0x136c, 0x136e, 0x1370, + // Entry 480 - 4BF + 0x1372, 0x1374, 0x1376, 0x1378, 0x137a, 0x137c, 0x137e, 0x1380, + 0x1382, 0x1384, 0x1386, 0x1388, 0x138a, 0x138d, 0x1390, 0x1392, + 0x1394, 0x1396, 0x1398, 0x139a, 0x139c, 0x139e, 0x13a0, 0x13a2, + 0x13a4, 0x13a6, 0x13a8, 0x13aa, 0x13ac, 0x13ae, 0x13b0, 0x13b2, + 0x13b4, 0x13b6, 0x13b8, 0x13ba, 0x13bc, 0x13bf, 0x13c1, 0x13c3, + 0x13c5, 0x13c7, 0x13c9, 0x13cb, 0x13cd, 0x13cf, 0x13d1, 0x13d3, + 0x13d6, 0x13d8, 0x13da, 0x13dc, 0x13de, 0x13e0, 0x13e2, 0x13e4, + 0x13e6, 0x13e8, 0x13ea, 0x13ec, 0x13ee, 0x13f0, 0x13f2, 0x13f5, + // Entry 4C0 - 4FF + 0x13f8, 0x13fb, 0x13fe, 0x1401, 0x1404, 0x1407, 0x140a, 0x140d, + 0x1410, 0x1413, 0x1416, 0x1419, 0x141c, 0x141f, 0x1422, 0x1425, + 0x1428, 0x142b, 0x142e, 0x1431, 0x1434, 0x1437, 0x143a, 0x143d, + 0x1440, 0x1447, 0x1449, 0x144b, 0x144d, 0x1450, 0x1452, 0x1454, + 0x1456, 0x1458, 0x145a, 0x1460, 0x1466, 0x1469, 0x146c, 0x146f, + 0x1472, 0x1475, 0x1478, 0x147b, 0x147e, 0x1481, 0x1484, 0x1487, + 0x148a, 0x148d, 0x1490, 0x1493, 0x1496, 0x1499, 0x149c, 0x149f, + 0x14a2, 0x14a5, 0x14a8, 0x14ab, 0x14ae, 0x14b1, 0x14b4, 0x14b7, + // Entry 500 - 53F + 0x14ba, 0x14bd, 0x14c0, 0x14c3, 0x14c6, 0x14c9, 0x14cc, 0x14cf, + 0x14d2, 0x14d5, 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, 0x14e7, + 0x14ea, 0x14ed, 0x14f6, 0x14ff, 0x1508, 0x1511, 0x151a, 0x1523, + 0x152c, 0x1535, 0x153e, 0x1541, 0x1544, 0x1547, 0x154a, 0x154d, + 0x1550, 0x1553, 0x1556, 0x1559, 0x155c, 0x155f, 0x1562, 0x1565, + 0x1568, 0x156b, 0x156e, 0x1571, 0x1574, 0x1577, 0x157a, 0x157d, + 0x1580, 0x1583, 0x1586, 0x1589, 0x158c, 0x158f, 0x1592, 0x1595, + 0x1598, 0x159b, 0x159e, 0x15a1, 0x15a4, 0x15a7, 0x15aa, 0x15ad, + // Entry 540 - 57F + 0x15b0, 0x15b3, 0x15b6, 0x15b9, 0x15bc, 0x15bf, 0x15c2, 0x15c5, + 0x15c8, 0x15cb, 0x15ce, 0x15d1, 0x15d4, 0x15d7, 0x15da, 0x15dd, + 0x15e0, 0x15e3, 0x15e6, 0x15e9, 0x15ec, 0x15ef, 0x15f2, 0x15f5, + 0x15f8, 0x15fb, 0x15fe, 0x1601, 0x1604, 0x1607, 0x160a, 0x160d, + 0x1610, 0x1613, 0x1616, 0x1619, 0x161c, 0x161f, 0x1622, 0x1625, + 0x1628, 0x162b, 0x162e, 0x1631, 0x1634, 0x1637, 0x163a, 0x163d, + 0x1640, 0x1643, 0x1646, 0x1649, 0x164c, 0x164f, 0x1652, 0x1655, + 0x1658, 0x165b, 0x165e, 0x1661, 0x1664, 0x1667, 0x166a, 0x166d, + // Entry 580 - 5BF + 0x1670, 0x1673, 0x1676, 0x1679, 0x167c, 0x167f, 0x1682, 0x1685, + 0x1688, 0x168b, 0x168e, 0x1691, 0x1694, 0x1697, 0x169a, 0x169d, + 0x16a0, 0x16a3, 0x16a6, 0x16a9, 0x16ac, 0x16af, 0x16b2, 0x16b5, + 0x16b8, 0x16bb, 0x16be, 0x16c1, 0x16c4, 0x16c7, 0x16ca, 0x16cd, + 0x16d0, 0x16d3, 0x16d6, 0x16d9, 0x16dc, 0x16df, 0x16e2, 0x16e5, + 0x16e8, 0x16eb, 0x16ee, 0x16f1, 0x16f4, 0x16f7, 0x16fa, 0x16fd, + 0x1700, 0x1703, 0x1706, 0x1709, 0x170c, 0x170f, 0x1712, 0x1715, + 0x1718, 0x171b, 0x171e, 0x1721, 0x1724, 0x1727, 0x172a, 0x172d, + // Entry 5C0 - 5FF + 0x1730, 0x1733, 0x1736, 0x1739, 0x173c, 0x173f, 0x1742, 0x1745, + 0x1748, 0x174b, 0x174e, 0x1751, 0x1754, 0x1757, 0x175a, 0x175d, + 0x1760, 0x1763, 0x1766, 0x1769, 0x176c, 0x176f, 0x1772, 0x1775, + 0x1778, 0x177b, 0x177e, 0x1781, 0x1784, 0x1787, 0x178a, 0x178d, + 0x1790, 0x1793, 0x1796, 0x1799, 0x179c, 0x179f, 0x17a2, 0x17a5, + 0x17a8, 0x17ab, 0x17ae, 0x17b1, 0x17b4, 0x17b7, 0x17ba, 0x17bd, + 0x17c0, 0x17c3, 0x17c6, 0x17c9, 0x17cc, 0x17cf, 0x17d2, 0x17d5, + 0x17d8, 0x17db, 0x17de, 0x17e1, 0x17e4, 0x17e7, 0x17ea, 0x17ed, + // Entry 600 - 63F + 0x17f0, 0x17f3, 0x17f6, 0x17f9, 0x17fc, 0x17ff, 0x1802, 0x1805, + 0x1808, 0x180b, 0x180e, 0x1811, 0x1814, 0x1817, 0x181a, 0x181d, + 0x1820, 0x1823, 0x1826, 0x1829, 0x182c, 0x182f, 0x1832, 0x1835, + 0x1838, 0x183b, 0x183e, 0x1841, 0x1844, 0x1847, 0x184a, 0x184d, + 0x1850, 0x1853, 0x1856, 0x1859, 0x185c, 0x185f, 0x1862, 0x1865, + 0x1868, 0x186b, 0x186e, 0x1871, 0x1874, 0x1877, 0x187a, 0x187d, + 0x1880, 0x1883, 0x1886, 0x1889, 0x188c, 0x188f, 0x1892, 0x1895, + 0x1898, 0x189b, 0x189e, 0x18a1, 0x18a4, 0x18a7, 0x18aa, 0x18ad, + // Entry 640 - 67F + 0x18b0, 0x18b3, 0x18b6, 0x18b9, 0x18bc, 0x18bf, 0x18c2, 0x18c5, + 0x18c8, 0x18cb, 0x18ce, 0x18d1, 0x18d4, 0x18d7, 0x18da, 0x18dd, + 0x18e0, 0x18e3, 0x18e6, 0x18e9, 0x18ec, 0x18ef, 0x18f2, 0x18f5, + 0x18f8, 0x18fb, 0x18fe, 0x1901, 0x1904, 0x1907, 0x190a, 0x190d, + 0x1910, 0x1913, 0x1916, 0x1919, 0x191c, 0x191f, 0x1922, 0x1925, + 0x1928, 0x192b, 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, + 0x1940, 0x1943, 0x1946, 0x1949, 0x194c, 0x194f, 0x1952, 0x1955, + 0x1958, 0x195b, 0x195e, 0x1961, 0x1964, 0x1967, 0x196a, 0x196d, + // Entry 680 - 6BF + 0x1970, 0x1973, 0x1976, 0x1979, 0x197c, 0x197f, 0x1982, 0x1985, + 0x1988, 0x198b, 0x198e, 0x1991, 0x1994, 0x1997, 0x199a, 0x199d, + 0x19a0, 0x19a3, 0x19a6, 0x19a9, 0x19ac, 0x19af, 0x19b2, 0x19b5, + 0x19b8, 0x19bb, 0x19be, 0x19c1, 0x19c4, 0x19c7, 0x19ca, 0x19cd, + 0x19d0, 0x19d3, 0x19d6, 0x19d9, 0x19dc, 0x19df, 0x19e2, 0x19e5, + 0x19e8, 0x19eb, 0x19ee, 0x19f1, 0x19f4, 0x19f7, 0x19fa, 0x19fd, + 0x1a00, 0x1a03, 0x1a06, 0x1a09, 0x1a0c, 0x1a0f, 0x1a12, 0x1a15, + 0x1a18, 0x1a1b, 0x1a1e, 0x1a21, 0x1a24, 0x1a27, 0x1a2a, 0x1a2d, + // Entry 6C0 - 6FF + 0x1a30, +} // Size: 3482 bytes + +var xorData string = "" + // Size: 4907 bytes + "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + + "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + + "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + + "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + + "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + + "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + + "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + + "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + + "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + + "\x03\x037 \x03\x0b+\x03\x021\x00\x02\x01\x04\x02\x01\x02\x02\x019\x02" + + "\x03\x1c\x02\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03" + + "\xc1r\x02\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<" + + "\x03\xc1s*\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03" + + "\x83\xab\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96" + + "\xe1\xcd\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03" + + "\x9a\xec\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c" + + "!\x03\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03" + + "ʦ\x93\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7" + + "\x03\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca" + + "\xfa\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e" + + "\x03\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca" + + "\xe3\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99" + + "\x03\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca" + + "\xe8\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03" + + "\x0b\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06" + + "\x05\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03" + + "\x0786\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/" + + "\x03\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f" + + "\x03\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-" + + "\x03\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03" + + "\x07\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03" + + "\x07\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03" + + "\x07\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b" + + "\x0a\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03" + + "\x07\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+" + + "\x03\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03" + + "\x044\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03" + + "\x04+ \x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!" + + "\x22\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04" + + "\x03\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>" + + "\x03\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03" + + "\x054\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03" + + "\x05):\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$" + + "\x1e\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226" + + "\x03\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05" + + "\x1b\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05" + + "\x03\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03" + + "\x06\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08" + + "\x03\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03" + + "\x0a6\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a" + + "\x1f\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03" + + "\x0a\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f" + + "\x02\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/" + + "\x03\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a" + + "\x00\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+" + + "\x10\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#" + + "<\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!" + + "\x00\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18." + + "\x03\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15" + + "\x22\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b" + + "\x12\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05" + + "<\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + + "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + + "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + + "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + + "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + + "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + + "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + + "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + + "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + + "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + + "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + + "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + + "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + + "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + + "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + + "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + + "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + + "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + + "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + + "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + + "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + + "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + + "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + + "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + + "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + + "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + + "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + + "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + + "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + + "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + + "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + + "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + + ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + + "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + + "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + + "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + + "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + + "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + + "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + + "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + + "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + + "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + + "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + + "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + + "(\x04\x023 \x03\x0b)\x08\x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!" + + "\x10\x03\x0b!0\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b" + + "\x03\x09\x1f\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14" + + "\x03\x0a\x01\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03" + + "\x08='\x03\x08\x1a\x0a\x03\x07\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07" + + "\x01\x00\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03" + + "\x09\x11\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03" + + "\x0a/1\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03" + + "\x07<3\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06" + + "\x13\x00\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(" + + ";\x03\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08" + + "\x14$\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03" + + "\x0a\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19" + + "\x01\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18" + + "\x03\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03" + + "\x07\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03" + + "\x0a\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03" + + "\x0b\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03" + + "\x08\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05" + + "\x03\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11" + + "\x03\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03" + + "\x09\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a" + + ".\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + + "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + + "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + + "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + + "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + + "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + + "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + + "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + + "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + + "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + + "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + + "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + + "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + + "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + + "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + + "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + + "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + + "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + + "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + + "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + + "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + + "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + + "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + + "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + + "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + + "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + + "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + + "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + + "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + + "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + + "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + + "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + + "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + + "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + + "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + + "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + + "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + + "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + + "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + + "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + + "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + + "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + + "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + + "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + + "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + + "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + + "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + + "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + + "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + + "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + + "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + + "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + + "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + + "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + + "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + + "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + + "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + + "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + + "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + + "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + + "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + + "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + + "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + + "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + + "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + + "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + + "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + + "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + + "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + + "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + + "\x04\x03\x0c?\x05\x03\x0c" + + "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + + "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + + "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + + "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + + "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + + "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x03'\x02\x03)\x02\x03+" + + "\x02\x03/\x02\x03\x19\x02\x03\x1b\x02\x03\x1f\x03\x0d\x22\x18\x03\x0d" + + "\x22\x1a\x03\x0d\x22'\x03\x0d\x22/\x03\x0d\x223\x03\x0d\x22$\x02\x01\x1e" + + "\x03\x0f$!\x03\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08" + + "\x18\x03\x0f\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$" + + "\x03\x0e\x0d)\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d" + + "\x03\x0d. \x03\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03" + + "\x0d\x0d\x0f\x03\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03" + + "\x0c\x09:\x03\x0e\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18" + + "\x03\x0c\x1f\x1c\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03" + + "\x0b<+\x03\x0b8\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d" + + "\x22&\x03\x0b\x1a\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03" + + "\x0a!\x1a\x03\x0a!7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03" + + "\x0a\x00 \x03\x0a\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a" + + "\x1b-\x03\x09-\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091" + + "\x1f\x03\x093\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(" + + "\x16\x03\x09\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!" + + "\x03\x09\x1a\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03" + + "\x08\x02*\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03" + + "\x070\x0c\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x06" + + "71\x03\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 " + + "\x1d\x03\x05\x22\x05\x03\x050\x1d" + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *idnaTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = idnaIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *idnaTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *idnaTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := idnaIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = idnaIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = idnaIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// idnaTrie. Total size: 31598 bytes (30.86 KiB). Checksum: d3118eda0d6b5360. +type idnaTrie struct{} + +func newIdnaTrie(i int) *idnaTrie { + return &idnaTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 133: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 133 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 135 blocks, 8640 entries, 17280 bytes +// The third block is the zero block. +var idnaValues = [8640]uint16{ + // Block 0x0, offset 0x0 + 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, + 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, + 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, + 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, + 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, + 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, + 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, + 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, + 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, + 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, + 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, + // Block 0x1, offset 0x40 + 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, + 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, + 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, + 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, + 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, + 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, + 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, + 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, + 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, + 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, + 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x0012, 0xe9: 0x0018, + 0xea: 0x0019, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x0022, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0029, 0xf3: 0x0031, 0xf4: 0x003a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x0042, 0xf9: 0x0049, 0xfa: 0x0051, 0xfb: 0x0018, + 0xfc: 0x0059, 0xfd: 0x0061, 0xfe: 0x0069, 0xff: 0x0018, + // Block 0x4, offset 0x100 + 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, + 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, + 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, + 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, + 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, + 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, + 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, + 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, + 0x130: 0x0071, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0079, + // Block 0x5, offset 0x140 + 0x140: 0x0079, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x0081, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, + 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, + 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, + 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, + 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, + 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, + 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, + 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x0089, + // Block 0x6, offset 0x180 + 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, + 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, + 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, + 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, + 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, + 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, + 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, + 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, + 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, + 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, + 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x0091, 0x1c5: 0x0091, + 0x1c6: 0x0091, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, + 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, + 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, + 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, + 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, + 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, + 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, + 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, + 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, + // Block 0x8, offset 0x200 + 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, + 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, + 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, + 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, + 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, + 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, + 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, + 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, + 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0099, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x00a1, 0x23f: 0x0008, + // Block 0x9, offset 0x240 + 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, + 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, + 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, + 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, + 0x258: 0x00d2, 0x259: 0x00da, 0x25a: 0x00e2, 0x25b: 0x00ea, 0x25c: 0x00f2, 0x25d: 0x00fa, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0101, 0x262: 0x0089, 0x263: 0x0109, + 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, + 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, + 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, + 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, + 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, + // Block 0xa, offset 0x280 + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0111, 0x285: 0x040d, + 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, + 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, + 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, + 0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308, + 0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308, + 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, + 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, + 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x011a, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x0122, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x003a, 0x2c5: 0x012a, + 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, + 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, + 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, + 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, + 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, + 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, + 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, + 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, + 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, + 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, + // Block 0xc, offset 0x300 + 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, + 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, + 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, + 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, + 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, + 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, + 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, + 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, + 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, + 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, + 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, + // Block 0xd, offset 0x340 + 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, + 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, + 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, + 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, + 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, + 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, + 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, + 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, + 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, + 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, + 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, + // Block 0xe, offset 0x380 + 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308, + 0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008, + 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, + 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, + 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, + 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, + 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, + 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, + 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, + 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, + 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, + 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, + 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, + 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, + 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, + 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, + 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, + 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, + 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, + 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, + 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, + // Block 0x10, offset 0x400 + 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, + 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, + 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, + 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, + 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, + 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, + 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, + 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, + 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, + 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, + 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, + // Block 0x11, offset 0x440 + 0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840, + 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818, + 0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308, + 0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308, + 0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0818, + 0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08, + 0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08, + 0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08, + 0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08, + 0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08, + 0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08, + // Block 0x12, offset 0x480 + 0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08, + 0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308, + 0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308, + 0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308, + 0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308, + 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, + 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, + 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, + 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0139, + 0x4b6: 0x0141, 0x4b7: 0x0149, 0x4b8: 0x0151, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, + 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, + 0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08, + 0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08, + 0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308, + 0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840, + 0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308, + 0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018, + 0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08, + 0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008, + 0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08, + 0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08, + // Block 0x14, offset 0x500 + 0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818, + 0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818, + 0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308, + 0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08, + 0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08, + 0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08, + 0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08, + 0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08, + 0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308, + 0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308, + 0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308, + // Block 0x15, offset 0x540 + 0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08, + 0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08, + 0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08, + 0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0c08, 0x557: 0x0c08, + 0x558: 0x0c08, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040, + 0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08, + 0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08, + 0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040, + 0x570: 0x0c08, 0x571: 0x0c08, 0x572: 0x0c08, 0x573: 0x0c08, 0x574: 0x0c08, 0x575: 0x0c08, + 0x576: 0x0c08, 0x577: 0x0c08, 0x578: 0x0c08, 0x579: 0x0c08, 0x57a: 0x0c08, 0x57b: 0x0c08, + 0x57c: 0x0c08, 0x57d: 0x0c08, 0x57e: 0x0c08, 0x57f: 0x0c08, + // Block 0x16, offset 0x580 + 0x580: 0x0c08, 0x581: 0x0c08, 0x582: 0x0c08, 0x583: 0x0808, 0x584: 0x0808, 0x585: 0x0808, + 0x586: 0x0a08, 0x587: 0x0808, 0x588: 0x0818, 0x589: 0x0a08, 0x58a: 0x0a08, 0x58b: 0x0a08, + 0x58c: 0x0a08, 0x58d: 0x0a08, 0x58e: 0x0c08, 0x58f: 0x0040, 0x590: 0x0840, 0x591: 0x0840, + 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x0040, + 0x598: 0x3308, 0x599: 0x3308, 0x59a: 0x3308, 0x59b: 0x3308, 0x59c: 0x3308, 0x59d: 0x3308, + 0x59e: 0x3308, 0x59f: 0x3308, 0x5a0: 0x0a08, 0x5a1: 0x0a08, 0x5a2: 0x0a08, 0x5a3: 0x0a08, + 0x5a4: 0x0a08, 0x5a5: 0x0a08, 0x5a6: 0x0a08, 0x5a7: 0x0a08, 0x5a8: 0x0a08, 0x5a9: 0x0a08, + 0x5aa: 0x0c08, 0x5ab: 0x0c08, 0x5ac: 0x0c08, 0x5ad: 0x0808, 0x5ae: 0x0c08, 0x5af: 0x0a08, + 0x5b0: 0x0a08, 0x5b1: 0x0c08, 0x5b2: 0x0c08, 0x5b3: 0x0a08, 0x5b4: 0x0a08, 0x5b5: 0x0a08, + 0x5b6: 0x0a08, 0x5b7: 0x0a08, 0x5b8: 0x0a08, 0x5b9: 0x0c08, 0x5ba: 0x0a08, 0x5bb: 0x0a08, + 0x5bc: 0x0a08, 0x5bd: 0x0a08, 0x5be: 0x0a08, 0x5bf: 0x0a08, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x3008, 0x5c1: 0x3308, 0x5c2: 0x3308, 0x5c3: 0x3308, 0x5c4: 0x3308, 0x5c5: 0x3308, + 0x5c6: 0x3308, 0x5c7: 0x3308, 0x5c8: 0x3308, 0x5c9: 0x3008, 0x5ca: 0x3008, 0x5cb: 0x3008, + 0x5cc: 0x3008, 0x5cd: 0x3b08, 0x5ce: 0x3008, 0x5cf: 0x3008, 0x5d0: 0x0008, 0x5d1: 0x3308, + 0x5d2: 0x3308, 0x5d3: 0x3308, 0x5d4: 0x3308, 0x5d5: 0x3308, 0x5d6: 0x3308, 0x5d7: 0x3308, + 0x5d8: 0x0159, 0x5d9: 0x0161, 0x5da: 0x0169, 0x5db: 0x0171, 0x5dc: 0x0179, 0x5dd: 0x0181, + 0x5de: 0x0189, 0x5df: 0x0191, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x3308, 0x5e3: 0x3308, + 0x5e4: 0x0018, 0x5e5: 0x0018, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0008, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0018, 0x5f1: 0x0008, 0x5f2: 0x0008, 0x5f3: 0x0008, 0x5f4: 0x0008, 0x5f5: 0x0008, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0008, 0x5fb: 0x0008, + 0x5fc: 0x0008, 0x5fd: 0x0008, 0x5fe: 0x0008, 0x5ff: 0x0008, + // Block 0x18, offset 0x600 + 0x600: 0x0008, 0x601: 0x3308, 0x602: 0x3008, 0x603: 0x3008, 0x604: 0x0040, 0x605: 0x0008, + 0x606: 0x0008, 0x607: 0x0008, 0x608: 0x0008, 0x609: 0x0008, 0x60a: 0x0008, 0x60b: 0x0008, + 0x60c: 0x0008, 0x60d: 0x0040, 0x60e: 0x0040, 0x60f: 0x0008, 0x610: 0x0008, 0x611: 0x0040, + 0x612: 0x0040, 0x613: 0x0008, 0x614: 0x0008, 0x615: 0x0008, 0x616: 0x0008, 0x617: 0x0008, + 0x618: 0x0008, 0x619: 0x0008, 0x61a: 0x0008, 0x61b: 0x0008, 0x61c: 0x0008, 0x61d: 0x0008, + 0x61e: 0x0008, 0x61f: 0x0008, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x0008, 0x623: 0x0008, + 0x624: 0x0008, 0x625: 0x0008, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0040, + 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, + 0x630: 0x0008, 0x631: 0x0040, 0x632: 0x0008, 0x633: 0x0040, 0x634: 0x0040, 0x635: 0x0040, + 0x636: 0x0008, 0x637: 0x0008, 0x638: 0x0008, 0x639: 0x0008, 0x63a: 0x0040, 0x63b: 0x0040, + 0x63c: 0x3308, 0x63d: 0x0008, 0x63e: 0x3008, 0x63f: 0x3008, + // Block 0x19, offset 0x640 + 0x640: 0x3008, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3308, 0x644: 0x3308, 0x645: 0x0040, + 0x646: 0x0040, 0x647: 0x3008, 0x648: 0x3008, 0x649: 0x0040, 0x64a: 0x0040, 0x64b: 0x3008, + 0x64c: 0x3008, 0x64d: 0x3b08, 0x64e: 0x0008, 0x64f: 0x0040, 0x650: 0x0040, 0x651: 0x0040, + 0x652: 0x0040, 0x653: 0x0040, 0x654: 0x0040, 0x655: 0x0040, 0x656: 0x0040, 0x657: 0x3008, + 0x658: 0x0040, 0x659: 0x0040, 0x65a: 0x0040, 0x65b: 0x0040, 0x65c: 0x0199, 0x65d: 0x01a1, + 0x65e: 0x0040, 0x65f: 0x01a9, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x3308, 0x663: 0x3308, + 0x664: 0x0040, 0x665: 0x0040, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0008, + 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, + 0x670: 0x0008, 0x671: 0x0008, 0x672: 0x0018, 0x673: 0x0018, 0x674: 0x0018, 0x675: 0x0018, + 0x676: 0x0018, 0x677: 0x0018, 0x678: 0x0018, 0x679: 0x0018, 0x67a: 0x0018, 0x67b: 0x0018, + 0x67c: 0x0008, 0x67d: 0x0018, 0x67e: 0x3308, 0x67f: 0x0040, + // Block 0x1a, offset 0x680 + 0x680: 0x0040, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x3008, 0x684: 0x0040, 0x685: 0x0008, + 0x686: 0x0008, 0x687: 0x0008, 0x688: 0x0008, 0x689: 0x0008, 0x68a: 0x0008, 0x68b: 0x0040, + 0x68c: 0x0040, 0x68d: 0x0040, 0x68e: 0x0040, 0x68f: 0x0008, 0x690: 0x0008, 0x691: 0x0040, + 0x692: 0x0040, 0x693: 0x0008, 0x694: 0x0008, 0x695: 0x0008, 0x696: 0x0008, 0x697: 0x0008, + 0x698: 0x0008, 0x699: 0x0008, 0x69a: 0x0008, 0x69b: 0x0008, 0x69c: 0x0008, 0x69d: 0x0008, + 0x69e: 0x0008, 0x69f: 0x0008, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x0008, 0x6a3: 0x0008, + 0x6a4: 0x0008, 0x6a5: 0x0008, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0040, + 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, + 0x6b0: 0x0008, 0x6b1: 0x0040, 0x6b2: 0x0008, 0x6b3: 0x01b1, 0x6b4: 0x0040, 0x6b5: 0x0008, + 0x6b6: 0x01b9, 0x6b7: 0x0040, 0x6b8: 0x0008, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x3308, 0x6bd: 0x0040, 0x6be: 0x3008, 0x6bf: 0x3008, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3008, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x0040, 0x6c4: 0x0040, 0x6c5: 0x0040, + 0x6c6: 0x0040, 0x6c7: 0x3308, 0x6c8: 0x3308, 0x6c9: 0x0040, 0x6ca: 0x0040, 0x6cb: 0x3308, + 0x6cc: 0x3308, 0x6cd: 0x3b08, 0x6ce: 0x0040, 0x6cf: 0x0040, 0x6d0: 0x0040, 0x6d1: 0x3308, + 0x6d2: 0x0040, 0x6d3: 0x0040, 0x6d4: 0x0040, 0x6d5: 0x0040, 0x6d6: 0x0040, 0x6d7: 0x0040, + 0x6d8: 0x0040, 0x6d9: 0x01c1, 0x6da: 0x01c9, 0x6db: 0x01d1, 0x6dc: 0x0008, 0x6dd: 0x0040, + 0x6de: 0x01d9, 0x6df: 0x0040, 0x6e0: 0x0040, 0x6e1: 0x0040, 0x6e2: 0x0040, 0x6e3: 0x0040, + 0x6e4: 0x0040, 0x6e5: 0x0040, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0008, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x3308, 0x6f1: 0x3308, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0008, 0x6f5: 0x3308, + 0x6f6: 0x0018, 0x6f7: 0x0040, 0x6f8: 0x0040, 0x6f9: 0x0040, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x0040, 0x6fd: 0x0040, 0x6fe: 0x0040, 0x6ff: 0x0040, + // Block 0x1c, offset 0x700 + 0x700: 0x0040, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3008, 0x704: 0x0040, 0x705: 0x0008, + 0x706: 0x0008, 0x707: 0x0008, 0x708: 0x0008, 0x709: 0x0008, 0x70a: 0x0008, 0x70b: 0x0008, + 0x70c: 0x0008, 0x70d: 0x0008, 0x70e: 0x0040, 0x70f: 0x0008, 0x710: 0x0008, 0x711: 0x0008, + 0x712: 0x0040, 0x713: 0x0008, 0x714: 0x0008, 0x715: 0x0008, 0x716: 0x0008, 0x717: 0x0008, + 0x718: 0x0008, 0x719: 0x0008, 0x71a: 0x0008, 0x71b: 0x0008, 0x71c: 0x0008, 0x71d: 0x0008, + 0x71e: 0x0008, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x0008, 0x723: 0x0008, + 0x724: 0x0008, 0x725: 0x0008, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0040, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0008, 0x731: 0x0040, 0x732: 0x0008, 0x733: 0x0008, 0x734: 0x0040, 0x735: 0x0008, + 0x736: 0x0008, 0x737: 0x0008, 0x738: 0x0008, 0x739: 0x0008, 0x73a: 0x0040, 0x73b: 0x0040, + 0x73c: 0x3308, 0x73d: 0x0008, 0x73e: 0x3008, 0x73f: 0x3008, + // Block 0x1d, offset 0x740 + 0x740: 0x3008, 0x741: 0x3308, 0x742: 0x3308, 0x743: 0x3308, 0x744: 0x3308, 0x745: 0x3308, + 0x746: 0x0040, 0x747: 0x3308, 0x748: 0x3308, 0x749: 0x3008, 0x74a: 0x0040, 0x74b: 0x3008, + 0x74c: 0x3008, 0x74d: 0x3b08, 0x74e: 0x0040, 0x74f: 0x0040, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0040, 0x754: 0x0040, 0x755: 0x0040, 0x756: 0x0040, 0x757: 0x0040, + 0x758: 0x0040, 0x759: 0x0040, 0x75a: 0x0040, 0x75b: 0x0040, 0x75c: 0x0040, 0x75d: 0x0040, + 0x75e: 0x0040, 0x75f: 0x0040, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x3308, 0x763: 0x3308, + 0x764: 0x0040, 0x765: 0x0040, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0008, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0018, 0x771: 0x0018, 0x772: 0x0040, 0x773: 0x0040, 0x774: 0x0040, 0x775: 0x0040, + 0x776: 0x0040, 0x777: 0x0040, 0x778: 0x0040, 0x779: 0x0008, 0x77a: 0x3308, 0x77b: 0x3308, + 0x77c: 0x3308, 0x77d: 0x3308, 0x77e: 0x3308, 0x77f: 0x3308, + // Block 0x1e, offset 0x780 + 0x780: 0x0040, 0x781: 0x3308, 0x782: 0x3008, 0x783: 0x3008, 0x784: 0x0040, 0x785: 0x0008, + 0x786: 0x0008, 0x787: 0x0008, 0x788: 0x0008, 0x789: 0x0008, 0x78a: 0x0008, 0x78b: 0x0008, + 0x78c: 0x0008, 0x78d: 0x0040, 0x78e: 0x0040, 0x78f: 0x0008, 0x790: 0x0008, 0x791: 0x0040, + 0x792: 0x0040, 0x793: 0x0008, 0x794: 0x0008, 0x795: 0x0008, 0x796: 0x0008, 0x797: 0x0008, + 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0008, 0x79c: 0x0008, 0x79d: 0x0008, + 0x79e: 0x0008, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x0008, 0x7a3: 0x0008, + 0x7a4: 0x0008, 0x7a5: 0x0008, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0040, + 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, + 0x7b0: 0x0008, 0x7b1: 0x0040, 0x7b2: 0x0008, 0x7b3: 0x0008, 0x7b4: 0x0040, 0x7b5: 0x0008, + 0x7b6: 0x0008, 0x7b7: 0x0008, 0x7b8: 0x0008, 0x7b9: 0x0008, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x3308, 0x7bd: 0x0008, 0x7be: 0x3008, 0x7bf: 0x3308, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x3008, 0x7c1: 0x3308, 0x7c2: 0x3308, 0x7c3: 0x3308, 0x7c4: 0x3308, 0x7c5: 0x0040, + 0x7c6: 0x0040, 0x7c7: 0x3008, 0x7c8: 0x3008, 0x7c9: 0x0040, 0x7ca: 0x0040, 0x7cb: 0x3008, + 0x7cc: 0x3008, 0x7cd: 0x3b08, 0x7ce: 0x0040, 0x7cf: 0x0040, 0x7d0: 0x0040, 0x7d1: 0x0040, + 0x7d2: 0x0040, 0x7d3: 0x0040, 0x7d4: 0x0040, 0x7d5: 0x3308, 0x7d6: 0x3308, 0x7d7: 0x3008, + 0x7d8: 0x0040, 0x7d9: 0x0040, 0x7da: 0x0040, 0x7db: 0x0040, 0x7dc: 0x01e1, 0x7dd: 0x01e9, + 0x7de: 0x0040, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x3308, 0x7e3: 0x3308, + 0x7e4: 0x0040, 0x7e5: 0x0040, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0018, 0x7f1: 0x0008, 0x7f2: 0x0018, 0x7f3: 0x0018, 0x7f4: 0x0018, 0x7f5: 0x0018, + 0x7f6: 0x0018, 0x7f7: 0x0018, 0x7f8: 0x0040, 0x7f9: 0x0040, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x0040, 0x7ff: 0x0040, + // Block 0x20, offset 0x800 + 0x800: 0x0040, 0x801: 0x0040, 0x802: 0x3308, 0x803: 0x0008, 0x804: 0x0040, 0x805: 0x0008, + 0x806: 0x0008, 0x807: 0x0008, 0x808: 0x0008, 0x809: 0x0008, 0x80a: 0x0008, 0x80b: 0x0040, + 0x80c: 0x0040, 0x80d: 0x0040, 0x80e: 0x0008, 0x80f: 0x0008, 0x810: 0x0008, 0x811: 0x0040, + 0x812: 0x0008, 0x813: 0x0008, 0x814: 0x0008, 0x815: 0x0008, 0x816: 0x0040, 0x817: 0x0040, + 0x818: 0x0040, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0008, 0x81d: 0x0040, + 0x81e: 0x0008, 0x81f: 0x0008, 0x820: 0x0040, 0x821: 0x0040, 0x822: 0x0040, 0x823: 0x0008, + 0x824: 0x0008, 0x825: 0x0040, 0x826: 0x0040, 0x827: 0x0040, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0040, 0x82c: 0x0040, 0x82d: 0x0040, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0008, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0008, 0x834: 0x0008, 0x835: 0x0008, + 0x836: 0x0008, 0x837: 0x0008, 0x838: 0x0008, 0x839: 0x0008, 0x83a: 0x0040, 0x83b: 0x0040, + 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x3008, 0x83f: 0x3008, + // Block 0x21, offset 0x840 + 0x840: 0x3308, 0x841: 0x3008, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x3008, 0x845: 0x0040, + 0x846: 0x3308, 0x847: 0x3308, 0x848: 0x3308, 0x849: 0x0040, 0x84a: 0x3308, 0x84b: 0x3308, + 0x84c: 0x3308, 0x84d: 0x3b08, 0x84e: 0x0040, 0x84f: 0x0040, 0x850: 0x0040, 0x851: 0x0040, + 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0040, 0x855: 0x3308, 0x856: 0x3308, 0x857: 0x0040, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0040, 0x85c: 0x0040, 0x85d: 0x0008, + 0x85e: 0x0040, 0x85f: 0x0040, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x3308, 0x863: 0x3308, + 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0040, 0x871: 0x0040, 0x872: 0x0040, 0x873: 0x0040, 0x874: 0x0040, 0x875: 0x0040, + 0x876: 0x0040, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0018, 0x87b: 0x0018, + 0x87c: 0x0018, 0x87d: 0x0018, 0x87e: 0x0018, 0x87f: 0x0018, + // Block 0x22, offset 0x880 + 0x880: 0x0008, 0x881: 0x3308, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x0018, 0x885: 0x0008, + 0x886: 0x0008, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0008, 0x88a: 0x0008, 0x88b: 0x0008, + 0x88c: 0x0008, 0x88d: 0x0040, 0x88e: 0x0008, 0x88f: 0x0008, 0x890: 0x0008, 0x891: 0x0040, + 0x892: 0x0008, 0x893: 0x0008, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008, + 0x898: 0x0008, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008, + 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008, + 0x8a4: 0x0008, 0x8a5: 0x0008, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0040, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0008, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0008, 0x8b4: 0x0040, 0x8b5: 0x0008, + 0x8b6: 0x0008, 0x8b7: 0x0008, 0x8b8: 0x0008, 0x8b9: 0x0008, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x3308, 0x8bd: 0x0008, 0x8be: 0x3008, 0x8bf: 0x3308, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x3008, 0x8c1: 0x3008, 0x8c2: 0x3008, 0x8c3: 0x3008, 0x8c4: 0x3008, 0x8c5: 0x0040, + 0x8c6: 0x3308, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3308, 0x8cd: 0x3b08, 0x8ce: 0x0040, 0x8cf: 0x0040, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0040, 0x8d5: 0x3008, 0x8d6: 0x3008, 0x8d7: 0x0040, + 0x8d8: 0x0040, 0x8d9: 0x0040, 0x8da: 0x0040, 0x8db: 0x0040, 0x8dc: 0x0040, 0x8dd: 0x0008, + 0x8de: 0x0008, 0x8df: 0x0040, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308, + 0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008, + 0x8f0: 0x0040, 0x8f1: 0x0008, 0x8f2: 0x0008, 0x8f3: 0x3008, 0x8f4: 0x0040, 0x8f5: 0x0040, + 0x8f6: 0x0040, 0x8f7: 0x0040, 0x8f8: 0x0040, 0x8f9: 0x0040, 0x8fa: 0x0040, 0x8fb: 0x0040, + 0x8fc: 0x0040, 0x8fd: 0x0040, 0x8fe: 0x0040, 0x8ff: 0x0040, + // Block 0x24, offset 0x900 + 0x900: 0x3008, 0x901: 0x3308, 0x902: 0x3308, 0x903: 0x3308, 0x904: 0x3308, 0x905: 0x0040, + 0x906: 0x3008, 0x907: 0x3008, 0x908: 0x3008, 0x909: 0x0040, 0x90a: 0x3008, 0x90b: 0x3008, + 0x90c: 0x3008, 0x90d: 0x3b08, 0x90e: 0x0008, 0x90f: 0x0018, 0x910: 0x0040, 0x911: 0x0040, + 0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x3008, + 0x918: 0x0018, 0x919: 0x0018, 0x91a: 0x0018, 0x91b: 0x0018, 0x91c: 0x0018, 0x91d: 0x0018, + 0x91e: 0x0018, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x3308, 0x923: 0x3308, + 0x924: 0x0040, 0x925: 0x0040, 0x926: 0x0008, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0008, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, + 0x930: 0x0018, 0x931: 0x0018, 0x932: 0x0018, 0x933: 0x0018, 0x934: 0x0018, 0x935: 0x0018, + 0x936: 0x0018, 0x937: 0x0018, 0x938: 0x0018, 0x939: 0x0018, 0x93a: 0x0008, 0x93b: 0x0008, + 0x93c: 0x0008, 0x93d: 0x0008, 0x93e: 0x0008, 0x93f: 0x0008, + // Block 0x25, offset 0x940 + 0x940: 0x0040, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0040, 0x944: 0x0008, 0x945: 0x0040, + 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0040, + 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0040, 0x965: 0x0008, 0x966: 0x0040, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008, + 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0008, 0x96e: 0x0008, 0x96f: 0x0008, + 0x970: 0x0008, 0x971: 0x3308, 0x972: 0x0008, 0x973: 0x01f9, 0x974: 0x3308, 0x975: 0x3308, + 0x976: 0x3308, 0x977: 0x3308, 0x978: 0x3308, 0x979: 0x3308, 0x97a: 0x3b08, 0x97b: 0x3308, + 0x97c: 0x3308, 0x97d: 0x0008, 0x97e: 0x0040, 0x97f: 0x0040, + // Block 0x26, offset 0x980 + 0x980: 0x0008, 0x981: 0x0008, 0x982: 0x0008, 0x983: 0x0211, 0x984: 0x0008, 0x985: 0x0008, + 0x986: 0x0008, 0x987: 0x0008, 0x988: 0x0040, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, + 0x98c: 0x0008, 0x98d: 0x0219, 0x98e: 0x0008, 0x98f: 0x0008, 0x990: 0x0008, 0x991: 0x0008, + 0x992: 0x0221, 0x993: 0x0008, 0x994: 0x0008, 0x995: 0x0008, 0x996: 0x0008, 0x997: 0x0229, + 0x998: 0x0008, 0x999: 0x0008, 0x99a: 0x0008, 0x99b: 0x0008, 0x99c: 0x0231, 0x99d: 0x0008, + 0x99e: 0x0008, 0x99f: 0x0008, 0x9a0: 0x0008, 0x9a1: 0x0008, 0x9a2: 0x0008, 0x9a3: 0x0008, + 0x9a4: 0x0008, 0x9a5: 0x0008, 0x9a6: 0x0008, 0x9a7: 0x0008, 0x9a8: 0x0008, 0x9a9: 0x0239, + 0x9aa: 0x0008, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0040, 0x9ae: 0x0040, 0x9af: 0x0040, + 0x9b0: 0x0040, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x0241, 0x9b4: 0x3308, 0x9b5: 0x0249, + 0x9b6: 0x0251, 0x9b7: 0x0259, 0x9b8: 0x0261, 0x9b9: 0x0269, 0x9ba: 0x3308, 0x9bb: 0x3308, + 0x9bc: 0x3308, 0x9bd: 0x3308, 0x9be: 0x3308, 0x9bf: 0x3008, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x3308, 0x9c1: 0x0271, 0x9c2: 0x3308, 0x9c3: 0x3308, 0x9c4: 0x3b08, 0x9c5: 0x0018, + 0x9c6: 0x3308, 0x9c7: 0x3308, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x3308, 0x9ce: 0x3308, 0x9cf: 0x3308, 0x9d0: 0x3308, 0x9d1: 0x3308, + 0x9d2: 0x3308, 0x9d3: 0x0279, 0x9d4: 0x3308, 0x9d5: 0x3308, 0x9d6: 0x3308, 0x9d7: 0x3308, + 0x9d8: 0x0040, 0x9d9: 0x3308, 0x9da: 0x3308, 0x9db: 0x3308, 0x9dc: 0x3308, 0x9dd: 0x0281, + 0x9de: 0x3308, 0x9df: 0x3308, 0x9e0: 0x3308, 0x9e1: 0x3308, 0x9e2: 0x0289, 0x9e3: 0x3308, + 0x9e4: 0x3308, 0x9e5: 0x3308, 0x9e6: 0x3308, 0x9e7: 0x0291, 0x9e8: 0x3308, 0x9e9: 0x3308, + 0x9ea: 0x3308, 0x9eb: 0x3308, 0x9ec: 0x0299, 0x9ed: 0x3308, 0x9ee: 0x3308, 0x9ef: 0x3308, + 0x9f0: 0x3308, 0x9f1: 0x3308, 0x9f2: 0x3308, 0x9f3: 0x3308, 0x9f4: 0x3308, 0x9f5: 0x3308, + 0x9f6: 0x3308, 0x9f7: 0x3308, 0x9f8: 0x3308, 0x9f9: 0x02a1, 0x9fa: 0x3308, 0x9fb: 0x3308, + 0x9fc: 0x3308, 0x9fd: 0x0040, 0x9fe: 0x0018, 0x9ff: 0x0018, + // Block 0x28, offset 0xa00 + 0xa00: 0x0008, 0xa01: 0x0008, 0xa02: 0x0008, 0xa03: 0x0008, 0xa04: 0x0008, 0xa05: 0x0008, + 0xa06: 0x0008, 0xa07: 0x0008, 0xa08: 0x0008, 0xa09: 0x0008, 0xa0a: 0x0008, 0xa0b: 0x0008, + 0xa0c: 0x0008, 0xa0d: 0x0008, 0xa0e: 0x0008, 0xa0f: 0x0008, 0xa10: 0x0008, 0xa11: 0x0008, + 0xa12: 0x0008, 0xa13: 0x0008, 0xa14: 0x0008, 0xa15: 0x0008, 0xa16: 0x0008, 0xa17: 0x0008, + 0xa18: 0x0008, 0xa19: 0x0008, 0xa1a: 0x0008, 0xa1b: 0x0008, 0xa1c: 0x0008, 0xa1d: 0x0008, + 0xa1e: 0x0008, 0xa1f: 0x0008, 0xa20: 0x0008, 0xa21: 0x0008, 0xa22: 0x0008, 0xa23: 0x0008, + 0xa24: 0x0008, 0xa25: 0x0008, 0xa26: 0x0008, 0xa27: 0x0008, 0xa28: 0x0008, 0xa29: 0x0008, + 0xa2a: 0x0008, 0xa2b: 0x0008, 0xa2c: 0x0019, 0xa2d: 0x02e1, 0xa2e: 0x02e9, 0xa2f: 0x0008, + 0xa30: 0x02f1, 0xa31: 0x02f9, 0xa32: 0x0301, 0xa33: 0x0309, 0xa34: 0x00a9, 0xa35: 0x0311, + 0xa36: 0x00b1, 0xa37: 0x0319, 0xa38: 0x0101, 0xa39: 0x0321, 0xa3a: 0x0329, 0xa3b: 0x0008, + 0xa3c: 0x0051, 0xa3d: 0x0331, 0xa3e: 0x0339, 0xa3f: 0x00b9, + // Block 0x29, offset 0xa40 + 0xa40: 0x0341, 0xa41: 0x0349, 0xa42: 0x00c1, 0xa43: 0x0019, 0xa44: 0x0351, 0xa45: 0x0359, + 0xa46: 0x05b5, 0xa47: 0x02e9, 0xa48: 0x02f1, 0xa49: 0x02f9, 0xa4a: 0x0361, 0xa4b: 0x0369, + 0xa4c: 0x0371, 0xa4d: 0x0309, 0xa4e: 0x0008, 0xa4f: 0x0319, 0xa50: 0x0321, 0xa51: 0x0379, + 0xa52: 0x0051, 0xa53: 0x0381, 0xa54: 0x05cd, 0xa55: 0x05cd, 0xa56: 0x0339, 0xa57: 0x0341, + 0xa58: 0x0349, 0xa59: 0x05b5, 0xa5a: 0x0389, 0xa5b: 0x0391, 0xa5c: 0x05e5, 0xa5d: 0x0399, + 0xa5e: 0x03a1, 0xa5f: 0x03a9, 0xa60: 0x03b1, 0xa61: 0x03b9, 0xa62: 0x0311, 0xa63: 0x00b9, + 0xa64: 0x0349, 0xa65: 0x0391, 0xa66: 0x0399, 0xa67: 0x03a1, 0xa68: 0x03c1, 0xa69: 0x03b1, + 0xa6a: 0x03b9, 0xa6b: 0x0008, 0xa6c: 0x0008, 0xa6d: 0x0008, 0xa6e: 0x0008, 0xa6f: 0x0008, + 0xa70: 0x0008, 0xa71: 0x0008, 0xa72: 0x0008, 0xa73: 0x0008, 0xa74: 0x0008, 0xa75: 0x0008, + 0xa76: 0x0008, 0xa77: 0x0008, 0xa78: 0x03c9, 0xa79: 0x0008, 0xa7a: 0x0008, 0xa7b: 0x0008, + 0xa7c: 0x0008, 0xa7d: 0x0008, 0xa7e: 0x0008, 0xa7f: 0x0008, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008, + 0xa86: 0x0008, 0xa87: 0x0008, 0xa88: 0x0008, 0xa89: 0x0008, 0xa8a: 0x0008, 0xa8b: 0x0008, + 0xa8c: 0x0008, 0xa8d: 0x0008, 0xa8e: 0x0008, 0xa8f: 0x0008, 0xa90: 0x0008, 0xa91: 0x0008, + 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, + 0xa98: 0x0008, 0xa99: 0x0008, 0xa9a: 0x0008, 0xa9b: 0x03d1, 0xa9c: 0x03d9, 0xa9d: 0x03e1, + 0xa9e: 0x03e9, 0xa9f: 0x0371, 0xaa0: 0x03f1, 0xaa1: 0x03f9, 0xaa2: 0x0401, 0xaa3: 0x0409, + 0xaa4: 0x0411, 0xaa5: 0x0419, 0xaa6: 0x0421, 0xaa7: 0x05fd, 0xaa8: 0x0429, 0xaa9: 0x0431, + 0xaaa: 0xe17d, 0xaab: 0x0439, 0xaac: 0x0441, 0xaad: 0x0449, 0xaae: 0x0451, 0xaaf: 0x0459, + 0xab0: 0x0461, 0xab1: 0x0469, 0xab2: 0x0471, 0xab3: 0x0479, 0xab4: 0x0481, 0xab5: 0x0489, + 0xab6: 0x0491, 0xab7: 0x0499, 0xab8: 0x0615, 0xab9: 0x04a1, 0xaba: 0x04a9, 0xabb: 0x04b1, + 0xabc: 0x04b9, 0xabd: 0x04c1, 0xabe: 0x04c9, 0xabf: 0x04d1, + // Block 0x2b, offset 0xac0 + 0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008, + 0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008, + 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, + 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0xe00d, 0xad7: 0x0008, + 0xad8: 0xe00d, 0xad9: 0x0008, 0xada: 0xe00d, 0xadb: 0x0008, 0xadc: 0xe00d, 0xadd: 0x0008, + 0xade: 0xe00d, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, + 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, + 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, + 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, + 0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008, + 0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008, + // Block 0x2c, offset 0xb00 + 0xb00: 0xe00d, 0xb01: 0x0008, 0xb02: 0xe00d, 0xb03: 0x0008, 0xb04: 0xe00d, 0xb05: 0x0008, + 0xb06: 0xe00d, 0xb07: 0x0008, 0xb08: 0xe00d, 0xb09: 0x0008, 0xb0a: 0xe00d, 0xb0b: 0x0008, + 0xb0c: 0xe00d, 0xb0d: 0x0008, 0xb0e: 0xe00d, 0xb0f: 0x0008, 0xb10: 0xe00d, 0xb11: 0x0008, + 0xb12: 0xe00d, 0xb13: 0x0008, 0xb14: 0xe00d, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0008, 0xb19: 0x0008, 0xb1a: 0x062d, 0xb1b: 0x064d, 0xb1c: 0x0008, 0xb1d: 0x0008, + 0xb1e: 0x04d9, 0xb1f: 0x0008, 0xb20: 0xe00d, 0xb21: 0x0008, 0xb22: 0xe00d, 0xb23: 0x0008, + 0xb24: 0xe00d, 0xb25: 0x0008, 0xb26: 0xe00d, 0xb27: 0x0008, 0xb28: 0xe00d, 0xb29: 0x0008, + 0xb2a: 0xe00d, 0xb2b: 0x0008, 0xb2c: 0xe00d, 0xb2d: 0x0008, 0xb2e: 0xe00d, 0xb2f: 0x0008, + 0xb30: 0xe00d, 0xb31: 0x0008, 0xb32: 0xe00d, 0xb33: 0x0008, 0xb34: 0xe00d, 0xb35: 0x0008, + 0xb36: 0xe00d, 0xb37: 0x0008, 0xb38: 0xe00d, 0xb39: 0x0008, 0xb3a: 0xe00d, 0xb3b: 0x0008, + 0xb3c: 0xe00d, 0xb3d: 0x0008, 0xb3e: 0xe00d, 0xb3f: 0x0008, + // Block 0x2d, offset 0xb40 + 0xb40: 0x0008, 0xb41: 0x0008, 0xb42: 0x0008, 0xb43: 0x0008, 0xb44: 0x0008, 0xb45: 0x0008, + 0xb46: 0x0040, 0xb47: 0x0040, 0xb48: 0xe045, 0xb49: 0xe045, 0xb4a: 0xe045, 0xb4b: 0xe045, + 0xb4c: 0xe045, 0xb4d: 0xe045, 0xb4e: 0x0040, 0xb4f: 0x0040, 0xb50: 0x0008, 0xb51: 0x0008, + 0xb52: 0x0008, 0xb53: 0x0008, 0xb54: 0x0008, 0xb55: 0x0008, 0xb56: 0x0008, 0xb57: 0x0008, + 0xb58: 0x0040, 0xb59: 0xe045, 0xb5a: 0x0040, 0xb5b: 0xe045, 0xb5c: 0x0040, 0xb5d: 0xe045, + 0xb5e: 0x0040, 0xb5f: 0xe045, 0xb60: 0x0008, 0xb61: 0x0008, 0xb62: 0x0008, 0xb63: 0x0008, + 0xb64: 0x0008, 0xb65: 0x0008, 0xb66: 0x0008, 0xb67: 0x0008, 0xb68: 0xe045, 0xb69: 0xe045, + 0xb6a: 0xe045, 0xb6b: 0xe045, 0xb6c: 0xe045, 0xb6d: 0xe045, 0xb6e: 0xe045, 0xb6f: 0xe045, + 0xb70: 0x0008, 0xb71: 0x04e1, 0xb72: 0x0008, 0xb73: 0x04e9, 0xb74: 0x0008, 0xb75: 0x04f1, + 0xb76: 0x0008, 0xb77: 0x04f9, 0xb78: 0x0008, 0xb79: 0x0501, 0xb7a: 0x0008, 0xb7b: 0x0509, + 0xb7c: 0x0008, 0xb7d: 0x0511, 0xb7e: 0x0040, 0xb7f: 0x0040, + // Block 0x2e, offset 0xb80 + 0xb80: 0x0519, 0xb81: 0x0521, 0xb82: 0x0529, 0xb83: 0x0531, 0xb84: 0x0539, 0xb85: 0x0541, + 0xb86: 0x0549, 0xb87: 0x0551, 0xb88: 0x0519, 0xb89: 0x0521, 0xb8a: 0x0529, 0xb8b: 0x0531, + 0xb8c: 0x0539, 0xb8d: 0x0541, 0xb8e: 0x0549, 0xb8f: 0x0551, 0xb90: 0x0559, 0xb91: 0x0561, + 0xb92: 0x0569, 0xb93: 0x0571, 0xb94: 0x0579, 0xb95: 0x0581, 0xb96: 0x0589, 0xb97: 0x0591, + 0xb98: 0x0559, 0xb99: 0x0561, 0xb9a: 0x0569, 0xb9b: 0x0571, 0xb9c: 0x0579, 0xb9d: 0x0581, + 0xb9e: 0x0589, 0xb9f: 0x0591, 0xba0: 0x0599, 0xba1: 0x05a1, 0xba2: 0x05a9, 0xba3: 0x05b1, + 0xba4: 0x05b9, 0xba5: 0x05c1, 0xba6: 0x05c9, 0xba7: 0x05d1, 0xba8: 0x0599, 0xba9: 0x05a1, + 0xbaa: 0x05a9, 0xbab: 0x05b1, 0xbac: 0x05b9, 0xbad: 0x05c1, 0xbae: 0x05c9, 0xbaf: 0x05d1, + 0xbb0: 0x0008, 0xbb1: 0x0008, 0xbb2: 0x05d9, 0xbb3: 0x05e1, 0xbb4: 0x05e9, 0xbb5: 0x0040, + 0xbb6: 0x0008, 0xbb7: 0x05f1, 0xbb8: 0xe045, 0xbb9: 0xe045, 0xbba: 0x0665, 0xbbb: 0x04e1, + 0xbbc: 0x05e1, 0xbbd: 0x067e, 0xbbe: 0x05f9, 0xbbf: 0x069e, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x06be, 0xbc1: 0x0602, 0xbc2: 0x0609, 0xbc3: 0x0611, 0xbc4: 0x0619, 0xbc5: 0x0040, + 0xbc6: 0x0008, 0xbc7: 0x0621, 0xbc8: 0x06dd, 0xbc9: 0x04e9, 0xbca: 0x06f5, 0xbcb: 0x04f1, + 0xbcc: 0x0611, 0xbcd: 0x062a, 0xbce: 0x0632, 0xbcf: 0x063a, 0xbd0: 0x0008, 0xbd1: 0x0008, + 0xbd2: 0x0008, 0xbd3: 0x0641, 0xbd4: 0x0040, 0xbd5: 0x0040, 0xbd6: 0x0008, 0xbd7: 0x0008, + 0xbd8: 0xe045, 0xbd9: 0xe045, 0xbda: 0x070d, 0xbdb: 0x04f9, 0xbdc: 0x0040, 0xbdd: 0x064a, + 0xbde: 0x0652, 0xbdf: 0x065a, 0xbe0: 0x0008, 0xbe1: 0x0008, 0xbe2: 0x0008, 0xbe3: 0x0661, + 0xbe4: 0x0008, 0xbe5: 0x0008, 0xbe6: 0x0008, 0xbe7: 0x0008, 0xbe8: 0xe045, 0xbe9: 0xe045, + 0xbea: 0x0725, 0xbeb: 0x0509, 0xbec: 0xe04d, 0xbed: 0x066a, 0xbee: 0x012a, 0xbef: 0x0672, + 0xbf0: 0x0040, 0xbf1: 0x0040, 0xbf2: 0x0679, 0xbf3: 0x0681, 0xbf4: 0x0689, 0xbf5: 0x0040, + 0xbf6: 0x0008, 0xbf7: 0x0691, 0xbf8: 0x073d, 0xbf9: 0x0501, 0xbfa: 0x0515, 0xbfb: 0x0511, + 0xbfc: 0x0681, 0xbfd: 0x0756, 0xbfe: 0x0776, 0xbff: 0x0040, + // Block 0x30, offset 0xc00 + 0xc00: 0x000a, 0xc01: 0x000a, 0xc02: 0x000a, 0xc03: 0x000a, 0xc04: 0x000a, 0xc05: 0x000a, + 0xc06: 0x000a, 0xc07: 0x000a, 0xc08: 0x000a, 0xc09: 0x000a, 0xc0a: 0x000a, 0xc0b: 0x03c0, + 0xc0c: 0x0003, 0xc0d: 0x0003, 0xc0e: 0x0340, 0xc0f: 0x0b40, 0xc10: 0x0018, 0xc11: 0xe00d, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x0796, + 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, + 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x0018, 0xc21: 0x0018, 0xc22: 0x0018, 0xc23: 0x0018, + 0xc24: 0x0040, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0018, 0xc28: 0x0040, 0xc29: 0x0040, + 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x000a, + 0xc30: 0x0018, 0xc31: 0x0018, 0xc32: 0x0018, 0xc33: 0x0699, 0xc34: 0x06a1, 0xc35: 0x0018, + 0xc36: 0x06a9, 0xc37: 0x06b1, 0xc38: 0x0018, 0xc39: 0x0018, 0xc3a: 0x0018, 0xc3b: 0x0018, + 0xc3c: 0x06ba, 0xc3d: 0x0018, 0xc3e: 0x07b6, 0xc3f: 0x0018, + // Block 0x31, offset 0xc40 + 0xc40: 0x0018, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0018, + 0xc46: 0x0018, 0xc47: 0x06c2, 0xc48: 0x06ca, 0xc49: 0x06d2, 0xc4a: 0x0018, 0xc4b: 0x0018, + 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0018, 0xc4f: 0x0018, 0xc50: 0x0018, 0xc51: 0x0018, + 0xc52: 0x0018, 0xc53: 0x0018, 0xc54: 0x0018, 0xc55: 0x0018, 0xc56: 0x0018, 0xc57: 0x06d9, + 0xc58: 0x0018, 0xc59: 0x0018, 0xc5a: 0x0018, 0xc5b: 0x0018, 0xc5c: 0x0018, 0xc5d: 0x0018, + 0xc5e: 0x0018, 0xc5f: 0x000a, 0xc60: 0x03c0, 0xc61: 0x0340, 0xc62: 0x0340, 0xc63: 0x0340, + 0xc64: 0x03c0, 0xc65: 0x0040, 0xc66: 0x0040, 0xc67: 0x0040, 0xc68: 0x0040, 0xc69: 0x0040, + 0xc6a: 0x0340, 0xc6b: 0x0340, 0xc6c: 0x0340, 0xc6d: 0x0340, 0xc6e: 0x0340, 0xc6f: 0x0340, + 0xc70: 0x06e1, 0xc71: 0x0311, 0xc72: 0x0040, 0xc73: 0x0040, 0xc74: 0x06e9, 0xc75: 0x06f1, + 0xc76: 0x06f9, 0xc77: 0x0701, 0xc78: 0x0709, 0xc79: 0x0711, 0xc7a: 0x071a, 0xc7b: 0x07d5, + 0xc7c: 0x0722, 0xc7d: 0x072a, 0xc7e: 0x0732, 0xc7f: 0x0329, + // Block 0x32, offset 0xc80 + 0xc80: 0x06e1, 0xc81: 0x0049, 0xc82: 0x0029, 0xc83: 0x0031, 0xc84: 0x06e9, 0xc85: 0x06f1, + 0xc86: 0x06f9, 0xc87: 0x0701, 0xc88: 0x0709, 0xc89: 0x0711, 0xc8a: 0x071a, 0xc8b: 0x07ed, + 0xc8c: 0x0722, 0xc8d: 0x072a, 0xc8e: 0x0732, 0xc8f: 0x0040, 0xc90: 0x0019, 0xc91: 0x02f9, + 0xc92: 0x0051, 0xc93: 0x0109, 0xc94: 0x0361, 0xc95: 0x00a9, 0xc96: 0x0319, 0xc97: 0x0101, + 0xc98: 0x0321, 0xc99: 0x0329, 0xc9a: 0x0339, 0xc9b: 0x0089, 0xc9c: 0x0341, 0xc9d: 0x0040, + 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x0018, 0xca1: 0x0018, 0xca2: 0x0018, 0xca3: 0x0018, + 0xca4: 0x0018, 0xca5: 0x0018, 0xca6: 0x0018, 0xca7: 0x0018, 0xca8: 0x0739, 0xca9: 0x0018, + 0xcaa: 0x0018, 0xcab: 0x0018, 0xcac: 0x0018, 0xcad: 0x0018, 0xcae: 0x0018, 0xcaf: 0x0018, + 0xcb0: 0x0018, 0xcb1: 0x0018, 0xcb2: 0x0018, 0xcb3: 0x0018, 0xcb4: 0x0018, 0xcb5: 0x0018, + 0xcb6: 0x0018, 0xcb7: 0x0018, 0xcb8: 0x0018, 0xcb9: 0x0018, 0xcba: 0x0018, 0xcbb: 0x0018, + 0xcbc: 0x0018, 0xcbd: 0x0018, 0xcbe: 0x0018, 0xcbf: 0x0018, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x0806, 0xcc1: 0x0826, 0xcc2: 0x03d9, 0xcc3: 0x0845, 0xcc4: 0x0018, 0xcc5: 0x0866, + 0xcc6: 0x0886, 0xcc7: 0x0369, 0xcc8: 0x0018, 0xcc9: 0x08a5, 0xcca: 0x0309, 0xccb: 0x00a9, + 0xccc: 0x00a9, 0xccd: 0x00a9, 0xcce: 0x00a9, 0xccf: 0x0741, 0xcd0: 0x0311, 0xcd1: 0x0311, + 0xcd2: 0x0101, 0xcd3: 0x0101, 0xcd4: 0x0018, 0xcd5: 0x0329, 0xcd6: 0x0749, 0xcd7: 0x0018, + 0xcd8: 0x0018, 0xcd9: 0x0339, 0xcda: 0x0751, 0xcdb: 0x00b9, 0xcdc: 0x00b9, 0xcdd: 0x00b9, + 0xcde: 0x0018, 0xcdf: 0x0018, 0xce0: 0x0759, 0xce1: 0x08c5, 0xce2: 0x0761, 0xce3: 0x0018, + 0xce4: 0x04b1, 0xce5: 0x0018, 0xce6: 0x0769, 0xce7: 0x0018, 0xce8: 0x04b1, 0xce9: 0x0018, + 0xcea: 0x0319, 0xceb: 0x0771, 0xcec: 0x02e9, 0xced: 0x03d9, 0xcee: 0x0018, 0xcef: 0x02f9, + 0xcf0: 0x02f9, 0xcf1: 0x03f1, 0xcf2: 0x0040, 0xcf3: 0x0321, 0xcf4: 0x0051, 0xcf5: 0x0779, + 0xcf6: 0x0781, 0xcf7: 0x0789, 0xcf8: 0x0791, 0xcf9: 0x0311, 0xcfa: 0x0018, 0xcfb: 0x08e5, + 0xcfc: 0x0799, 0xcfd: 0x03a1, 0xcfe: 0x03a1, 0xcff: 0x0799, + // Block 0x34, offset 0xd00 + 0xd00: 0x0905, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x02f1, + 0xd06: 0x02f1, 0xd07: 0x02f9, 0xd08: 0x0311, 0xd09: 0x00b1, 0xd0a: 0x0018, 0xd0b: 0x0018, + 0xd0c: 0x0018, 0xd0d: 0x0018, 0xd0e: 0x0008, 0xd0f: 0x0018, 0xd10: 0x07a1, 0xd11: 0x07a9, + 0xd12: 0x07b1, 0xd13: 0x07b9, 0xd14: 0x07c1, 0xd15: 0x07c9, 0xd16: 0x07d1, 0xd17: 0x07d9, + 0xd18: 0x07e1, 0xd19: 0x07e9, 0xd1a: 0x07f1, 0xd1b: 0x07f9, 0xd1c: 0x0801, 0xd1d: 0x0809, + 0xd1e: 0x0811, 0xd1f: 0x0819, 0xd20: 0x0311, 0xd21: 0x0821, 0xd22: 0x091d, 0xd23: 0x0829, + 0xd24: 0x0391, 0xd25: 0x0831, 0xd26: 0x093d, 0xd27: 0x0839, 0xd28: 0x0841, 0xd29: 0x0109, + 0xd2a: 0x0849, 0xd2b: 0x095d, 0xd2c: 0x0101, 0xd2d: 0x03d9, 0xd2e: 0x02f1, 0xd2f: 0x0321, + 0xd30: 0x0311, 0xd31: 0x0821, 0xd32: 0x097d, 0xd33: 0x0829, 0xd34: 0x0391, 0xd35: 0x0831, + 0xd36: 0x099d, 0xd37: 0x0839, 0xd38: 0x0841, 0xd39: 0x0109, 0xd3a: 0x0849, 0xd3b: 0x09bd, + 0xd3c: 0x0101, 0xd3d: 0x03d9, 0xd3e: 0x02f1, 0xd3f: 0x0321, + // Block 0x35, offset 0xd40 + 0xd40: 0x0018, 0xd41: 0x0018, 0xd42: 0x0018, 0xd43: 0x0018, 0xd44: 0x0018, 0xd45: 0x0018, + 0xd46: 0x0018, 0xd47: 0x0018, 0xd48: 0x0018, 0xd49: 0x0018, 0xd4a: 0x0018, 0xd4b: 0x0040, + 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, + 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, + 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0040, 0xd5d: 0x0040, + 0xd5e: 0x0040, 0xd5f: 0x0040, 0xd60: 0x0049, 0xd61: 0x0029, 0xd62: 0x0031, 0xd63: 0x06e9, + 0xd64: 0x06f1, 0xd65: 0x06f9, 0xd66: 0x0701, 0xd67: 0x0709, 0xd68: 0x0711, 0xd69: 0x0879, + 0xd6a: 0x0881, 0xd6b: 0x0889, 0xd6c: 0x0891, 0xd6d: 0x0899, 0xd6e: 0x08a1, 0xd6f: 0x08a9, + 0xd70: 0x08b1, 0xd71: 0x08b9, 0xd72: 0x08c1, 0xd73: 0x08c9, 0xd74: 0x0a1e, 0xd75: 0x0a3e, + 0xd76: 0x0a5e, 0xd77: 0x0a7e, 0xd78: 0x0a9e, 0xd79: 0x0abe, 0xd7a: 0x0ade, 0xd7b: 0x0afe, + 0xd7c: 0x0b1e, 0xd7d: 0x08d2, 0xd7e: 0x08da, 0xd7f: 0x08e2, + // Block 0x36, offset 0xd80 + 0xd80: 0x08ea, 0xd81: 0x08f2, 0xd82: 0x08fa, 0xd83: 0x0902, 0xd84: 0x090a, 0xd85: 0x0912, + 0xd86: 0x091a, 0xd87: 0x0922, 0xd88: 0x0040, 0xd89: 0x0040, 0xd8a: 0x0040, 0xd8b: 0x0040, + 0xd8c: 0x0040, 0xd8d: 0x0040, 0xd8e: 0x0040, 0xd8f: 0x0040, 0xd90: 0x0040, 0xd91: 0x0040, + 0xd92: 0x0040, 0xd93: 0x0040, 0xd94: 0x0040, 0xd95: 0x0040, 0xd96: 0x0040, 0xd97: 0x0040, + 0xd98: 0x0040, 0xd99: 0x0040, 0xd9a: 0x0040, 0xd9b: 0x0040, 0xd9c: 0x0b3e, 0xd9d: 0x0b5e, + 0xd9e: 0x0b7e, 0xd9f: 0x0b9e, 0xda0: 0x0bbe, 0xda1: 0x0bde, 0xda2: 0x0bfe, 0xda3: 0x0c1e, + 0xda4: 0x0c3e, 0xda5: 0x0c5e, 0xda6: 0x0c7e, 0xda7: 0x0c9e, 0xda8: 0x0cbe, 0xda9: 0x0cde, + 0xdaa: 0x0cfe, 0xdab: 0x0d1e, 0xdac: 0x0d3e, 0xdad: 0x0d5e, 0xdae: 0x0d7e, 0xdaf: 0x0d9e, + 0xdb0: 0x0dbe, 0xdb1: 0x0dde, 0xdb2: 0x0dfe, 0xdb3: 0x0e1e, 0xdb4: 0x0e3e, 0xdb5: 0x0e5e, + 0xdb6: 0x0019, 0xdb7: 0x02e9, 0xdb8: 0x03d9, 0xdb9: 0x02f1, 0xdba: 0x02f9, 0xdbb: 0x03f1, + 0xdbc: 0x0309, 0xdbd: 0x00a9, 0xdbe: 0x0311, 0xdbf: 0x00b1, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0319, 0xdc1: 0x0101, 0xdc2: 0x0321, 0xdc3: 0x0329, 0xdc4: 0x0051, 0xdc5: 0x0339, + 0xdc6: 0x0751, 0xdc7: 0x00b9, 0xdc8: 0x0089, 0xdc9: 0x0341, 0xdca: 0x0349, 0xdcb: 0x0391, + 0xdcc: 0x00c1, 0xdcd: 0x0109, 0xdce: 0x00c9, 0xdcf: 0x04b1, 0xdd0: 0x0019, 0xdd1: 0x02e9, + 0xdd2: 0x03d9, 0xdd3: 0x02f1, 0xdd4: 0x02f9, 0xdd5: 0x03f1, 0xdd6: 0x0309, 0xdd7: 0x00a9, + 0xdd8: 0x0311, 0xdd9: 0x00b1, 0xdda: 0x0319, 0xddb: 0x0101, 0xddc: 0x0321, 0xddd: 0x0329, + 0xdde: 0x0051, 0xddf: 0x0339, 0xde0: 0x0751, 0xde1: 0x00b9, 0xde2: 0x0089, 0xde3: 0x0341, + 0xde4: 0x0349, 0xde5: 0x0391, 0xde6: 0x00c1, 0xde7: 0x0109, 0xde8: 0x00c9, 0xde9: 0x04b1, + 0xdea: 0x06e1, 0xdeb: 0x0018, 0xdec: 0x0018, 0xded: 0x0018, 0xdee: 0x0018, 0xdef: 0x0018, + 0xdf0: 0x0018, 0xdf1: 0x0018, 0xdf2: 0x0018, 0xdf3: 0x0018, 0xdf4: 0x0018, 0xdf5: 0x0018, + 0xdf6: 0x0018, 0xdf7: 0x0018, 0xdf8: 0x0018, 0xdf9: 0x0018, 0xdfa: 0x0018, 0xdfb: 0x0018, + 0xdfc: 0x0018, 0xdfd: 0x0018, 0xdfe: 0x0018, 0xdff: 0x0018, + // Block 0x38, offset 0xe00 + 0xe00: 0x0008, 0xe01: 0x0008, 0xe02: 0x0008, 0xe03: 0x0008, 0xe04: 0x0008, 0xe05: 0x0008, + 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0008, 0xe09: 0x0008, 0xe0a: 0x0008, 0xe0b: 0x0008, + 0xe0c: 0x0008, 0xe0d: 0x0008, 0xe0e: 0x0008, 0xe0f: 0x0008, 0xe10: 0x0008, 0xe11: 0x0008, + 0xe12: 0x0008, 0xe13: 0x0008, 0xe14: 0x0008, 0xe15: 0x0008, 0xe16: 0x0008, 0xe17: 0x0008, + 0xe18: 0x0008, 0xe19: 0x0008, 0xe1a: 0x0008, 0xe1b: 0x0008, 0xe1c: 0x0008, 0xe1d: 0x0008, + 0xe1e: 0x0008, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0x0941, 0xe23: 0x0ed5, + 0xe24: 0x0949, 0xe25: 0x0008, 0xe26: 0x0008, 0xe27: 0xe07d, 0xe28: 0x0008, 0xe29: 0xe01d, + 0xe2a: 0x0008, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0x0359, 0xe2e: 0x0441, 0xe2f: 0x0351, + 0xe30: 0x03d1, 0xe31: 0x0008, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0008, 0xe35: 0xe01d, + 0xe36: 0x0008, 0xe37: 0x0008, 0xe38: 0x0008, 0xe39: 0x0008, 0xe3a: 0x0008, 0xe3b: 0x0008, + 0xe3c: 0x00b1, 0xe3d: 0x0391, 0xe3e: 0x0951, 0xe3f: 0x0959, + // Block 0x39, offset 0xe40 + 0xe40: 0xe00d, 0xe41: 0x0008, 0xe42: 0xe00d, 0xe43: 0x0008, 0xe44: 0xe00d, 0xe45: 0x0008, + 0xe46: 0xe00d, 0xe47: 0x0008, 0xe48: 0xe00d, 0xe49: 0x0008, 0xe4a: 0xe00d, 0xe4b: 0x0008, + 0xe4c: 0xe00d, 0xe4d: 0x0008, 0xe4e: 0xe00d, 0xe4f: 0x0008, 0xe50: 0xe00d, 0xe51: 0x0008, + 0xe52: 0xe00d, 0xe53: 0x0008, 0xe54: 0xe00d, 0xe55: 0x0008, 0xe56: 0xe00d, 0xe57: 0x0008, + 0xe58: 0xe00d, 0xe59: 0x0008, 0xe5a: 0xe00d, 0xe5b: 0x0008, 0xe5c: 0xe00d, 0xe5d: 0x0008, + 0xe5e: 0xe00d, 0xe5f: 0x0008, 0xe60: 0xe00d, 0xe61: 0x0008, 0xe62: 0xe00d, 0xe63: 0x0008, + 0xe64: 0x0008, 0xe65: 0x0018, 0xe66: 0x0018, 0xe67: 0x0018, 0xe68: 0x0018, 0xe69: 0x0018, + 0xe6a: 0x0018, 0xe6b: 0xe03d, 0xe6c: 0x0008, 0xe6d: 0xe01d, 0xe6e: 0x0008, 0xe6f: 0x3308, + 0xe70: 0x3308, 0xe71: 0x3308, 0xe72: 0xe00d, 0xe73: 0x0008, 0xe74: 0x0040, 0xe75: 0x0040, + 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0018, 0xe7a: 0x0018, 0xe7b: 0x0018, + 0xe7c: 0x0018, 0xe7d: 0x0018, 0xe7e: 0x0018, 0xe7f: 0x0018, + // Block 0x3a, offset 0xe80 + 0xe80: 0x2715, 0xe81: 0x2735, 0xe82: 0x2755, 0xe83: 0x2775, 0xe84: 0x2795, 0xe85: 0x27b5, + 0xe86: 0x27d5, 0xe87: 0x27f5, 0xe88: 0x2815, 0xe89: 0x2835, 0xe8a: 0x2855, 0xe8b: 0x2875, + 0xe8c: 0x2895, 0xe8d: 0x28b5, 0xe8e: 0x28d5, 0xe8f: 0x28f5, 0xe90: 0x2915, 0xe91: 0x2935, + 0xe92: 0x2955, 0xe93: 0x2975, 0xe94: 0x2995, 0xe95: 0x29b5, 0xe96: 0x0040, 0xe97: 0x0040, + 0xe98: 0x0040, 0xe99: 0x0040, 0xe9a: 0x0040, 0xe9b: 0x0040, 0xe9c: 0x0040, 0xe9d: 0x0040, + 0xe9e: 0x0040, 0xe9f: 0x0040, 0xea0: 0x0040, 0xea1: 0x0040, 0xea2: 0x0040, 0xea3: 0x0040, + 0xea4: 0x0040, 0xea5: 0x0040, 0xea6: 0x0040, 0xea7: 0x0040, 0xea8: 0x0040, 0xea9: 0x0040, + 0xeaa: 0x0040, 0xeab: 0x0040, 0xeac: 0x0040, 0xead: 0x0040, 0xeae: 0x0040, 0xeaf: 0x0040, + 0xeb0: 0x0040, 0xeb1: 0x0040, 0xeb2: 0x0040, 0xeb3: 0x0040, 0xeb4: 0x0040, 0xeb5: 0x0040, + 0xeb6: 0x0040, 0xeb7: 0x0040, 0xeb8: 0x0040, 0xeb9: 0x0040, 0xeba: 0x0040, 0xebb: 0x0040, + 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040, + // Block 0x3b, offset 0xec0 + 0xec0: 0x000a, 0xec1: 0x0018, 0xec2: 0x0961, 0xec3: 0x0018, 0xec4: 0x0018, 0xec5: 0x0008, + 0xec6: 0x0008, 0xec7: 0x0008, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018, + 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x0018, 0xed1: 0x0018, + 0xed2: 0x0018, 0xed3: 0x0018, 0xed4: 0x0018, 0xed5: 0x0018, 0xed6: 0x0018, 0xed7: 0x0018, + 0xed8: 0x0018, 0xed9: 0x0018, 0xeda: 0x0018, 0xedb: 0x0018, 0xedc: 0x0018, 0xedd: 0x0018, + 0xede: 0x0018, 0xedf: 0x0018, 0xee0: 0x0018, 0xee1: 0x0018, 0xee2: 0x0018, 0xee3: 0x0018, + 0xee4: 0x0018, 0xee5: 0x0018, 0xee6: 0x0018, 0xee7: 0x0018, 0xee8: 0x0018, 0xee9: 0x0018, + 0xeea: 0x3308, 0xeeb: 0x3308, 0xeec: 0x3308, 0xeed: 0x3308, 0xeee: 0x3018, 0xeef: 0x3018, + 0xef0: 0x0018, 0xef1: 0x0018, 0xef2: 0x0018, 0xef3: 0x0018, 0xef4: 0x0018, 0xef5: 0x0018, + 0xef6: 0xe125, 0xef7: 0x0018, 0xef8: 0x29d5, 0xef9: 0x29f5, 0xefa: 0x2a15, 0xefb: 0x0018, + 0xefc: 0x0008, 0xefd: 0x0018, 0xefe: 0x0018, 0xeff: 0x0018, + // Block 0x3c, offset 0xf00 + 0xf00: 0x2b55, 0xf01: 0x2b75, 0xf02: 0x2b95, 0xf03: 0x2bb5, 0xf04: 0x2bd5, 0xf05: 0x2bf5, + 0xf06: 0x2bf5, 0xf07: 0x2bf5, 0xf08: 0x2c15, 0xf09: 0x2c15, 0xf0a: 0x2c15, 0xf0b: 0x2c15, + 0xf0c: 0x2c35, 0xf0d: 0x2c35, 0xf0e: 0x2c35, 0xf0f: 0x2c55, 0xf10: 0x2c75, 0xf11: 0x2c75, + 0xf12: 0x2a95, 0xf13: 0x2a95, 0xf14: 0x2c75, 0xf15: 0x2c75, 0xf16: 0x2c95, 0xf17: 0x2c95, + 0xf18: 0x2c75, 0xf19: 0x2c75, 0xf1a: 0x2a95, 0xf1b: 0x2a95, 0xf1c: 0x2c75, 0xf1d: 0x2c75, + 0xf1e: 0x2c55, 0xf1f: 0x2c55, 0xf20: 0x2cb5, 0xf21: 0x2cb5, 0xf22: 0x2cd5, 0xf23: 0x2cd5, + 0xf24: 0x0040, 0xf25: 0x2cf5, 0xf26: 0x2d15, 0xf27: 0x2d35, 0xf28: 0x2d35, 0xf29: 0x2d55, + 0xf2a: 0x2d75, 0xf2b: 0x2d95, 0xf2c: 0x2db5, 0xf2d: 0x2dd5, 0xf2e: 0x2df5, 0xf2f: 0x2e15, + 0xf30: 0x2e35, 0xf31: 0x2e55, 0xf32: 0x2e55, 0xf33: 0x2e75, 0xf34: 0x2e95, 0xf35: 0x2e95, + 0xf36: 0x2eb5, 0xf37: 0x2ed5, 0xf38: 0x2e75, 0xf39: 0x2ef5, 0xf3a: 0x2f15, 0xf3b: 0x2ef5, + 0xf3c: 0x2e75, 0xf3d: 0x2f35, 0xf3e: 0x2f55, 0xf3f: 0x2f75, + // Block 0x3d, offset 0xf40 + 0xf40: 0x2f95, 0xf41: 0x2fb5, 0xf42: 0x2d15, 0xf43: 0x2cf5, 0xf44: 0x2fd5, 0xf45: 0x2ff5, + 0xf46: 0x3015, 0xf47: 0x3035, 0xf48: 0x3055, 0xf49: 0x3075, 0xf4a: 0x3095, 0xf4b: 0x30b5, + 0xf4c: 0x30d5, 0xf4d: 0x30f5, 0xf4e: 0x3115, 0xf4f: 0x0040, 0xf50: 0x0018, 0xf51: 0x0018, + 0xf52: 0x3135, 0xf53: 0x3155, 0xf54: 0x3175, 0xf55: 0x3195, 0xf56: 0x31b5, 0xf57: 0x31d5, + 0xf58: 0x31f5, 0xf59: 0x3215, 0xf5a: 0x3235, 0xf5b: 0x3255, 0xf5c: 0x3175, 0xf5d: 0x3275, + 0xf5e: 0x3295, 0xf5f: 0x32b5, 0xf60: 0x0008, 0xf61: 0x0008, 0xf62: 0x0008, 0xf63: 0x0008, + 0xf64: 0x0008, 0xf65: 0x0008, 0xf66: 0x0008, 0xf67: 0x0008, 0xf68: 0x0008, 0xf69: 0x0008, + 0xf6a: 0x0008, 0xf6b: 0x0008, 0xf6c: 0x0008, 0xf6d: 0x0008, 0xf6e: 0x0008, 0xf6f: 0x0008, + 0xf70: 0x0008, 0xf71: 0x0008, 0xf72: 0x0008, 0xf73: 0x0008, 0xf74: 0x0008, 0xf75: 0x0008, + 0xf76: 0x0008, 0xf77: 0x0008, 0xf78: 0x0008, 0xf79: 0x0008, 0xf7a: 0x0008, 0xf7b: 0x0008, + 0xf7c: 0x0008, 0xf7d: 0x0008, 0xf7e: 0x0008, 0xf7f: 0x0008, + // Block 0x3e, offset 0xf80 + 0xf80: 0x0b82, 0xf81: 0x0b8a, 0xf82: 0x0b92, 0xf83: 0x0b9a, 0xf84: 0x32d5, 0xf85: 0x32f5, + 0xf86: 0x3315, 0xf87: 0x3335, 0xf88: 0x0018, 0xf89: 0x0018, 0xf8a: 0x0018, 0xf8b: 0x0018, + 0xf8c: 0x0018, 0xf8d: 0x0018, 0xf8e: 0x0018, 0xf8f: 0x0018, 0xf90: 0x3355, 0xf91: 0x0ba1, + 0xf92: 0x0ba9, 0xf93: 0x0bb1, 0xf94: 0x0bb9, 0xf95: 0x0bc1, 0xf96: 0x0bc9, 0xf97: 0x0bd1, + 0xf98: 0x0bd9, 0xf99: 0x0be1, 0xf9a: 0x0be9, 0xf9b: 0x0bf1, 0xf9c: 0x0bf9, 0xf9d: 0x0c01, + 0xf9e: 0x0c09, 0xf9f: 0x0c11, 0xfa0: 0x3375, 0xfa1: 0x3395, 0xfa2: 0x33b5, 0xfa3: 0x33d5, + 0xfa4: 0x33f5, 0xfa5: 0x33f5, 0xfa6: 0x3415, 0xfa7: 0x3435, 0xfa8: 0x3455, 0xfa9: 0x3475, + 0xfaa: 0x3495, 0xfab: 0x34b5, 0xfac: 0x34d5, 0xfad: 0x34f5, 0xfae: 0x3515, 0xfaf: 0x3535, + 0xfb0: 0x3555, 0xfb1: 0x3575, 0xfb2: 0x3595, 0xfb3: 0x35b5, 0xfb4: 0x35d5, 0xfb5: 0x35f5, + 0xfb6: 0x3615, 0xfb7: 0x3635, 0xfb8: 0x3655, 0xfb9: 0x3675, 0xfba: 0x3695, 0xfbb: 0x36b5, + 0xfbc: 0x0c19, 0xfbd: 0x0c21, 0xfbe: 0x36d5, 0xfbf: 0x0018, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x36f5, 0xfc1: 0x3715, 0xfc2: 0x3735, 0xfc3: 0x3755, 0xfc4: 0x3775, 0xfc5: 0x3795, + 0xfc6: 0x37b5, 0xfc7: 0x37d5, 0xfc8: 0x37f5, 0xfc9: 0x3815, 0xfca: 0x3835, 0xfcb: 0x3855, + 0xfcc: 0x3875, 0xfcd: 0x3895, 0xfce: 0x38b5, 0xfcf: 0x38d5, 0xfd0: 0x38f5, 0xfd1: 0x3915, + 0xfd2: 0x3935, 0xfd3: 0x3955, 0xfd4: 0x3975, 0xfd5: 0x3995, 0xfd6: 0x39b5, 0xfd7: 0x39d5, + 0xfd8: 0x39f5, 0xfd9: 0x3a15, 0xfda: 0x3a35, 0xfdb: 0x3a55, 0xfdc: 0x3a75, 0xfdd: 0x3a95, + 0xfde: 0x3ab5, 0xfdf: 0x3ad5, 0xfe0: 0x3af5, 0xfe1: 0x3b15, 0xfe2: 0x3b35, 0xfe3: 0x3b55, + 0xfe4: 0x3b75, 0xfe5: 0x3b95, 0xfe6: 0x1295, 0xfe7: 0x3bb5, 0xfe8: 0x3bd5, 0xfe9: 0x3bf5, + 0xfea: 0x3c15, 0xfeb: 0x3c35, 0xfec: 0x3c55, 0xfed: 0x3c75, 0xfee: 0x23b5, 0xfef: 0x3c95, + 0xff0: 0x3cb5, 0xff1: 0x0c29, 0xff2: 0x0c31, 0xff3: 0x0c39, 0xff4: 0x0c41, 0xff5: 0x0c49, + 0xff6: 0x0c51, 0xff7: 0x0c59, 0xff8: 0x0c61, 0xff9: 0x0c69, 0xffa: 0x0c71, 0xffb: 0x0c79, + 0xffc: 0x0c81, 0xffd: 0x0c89, 0xffe: 0x0c91, 0xfff: 0x0c99, + // Block 0x40, offset 0x1000 + 0x1000: 0x0ca1, 0x1001: 0x0ca9, 0x1002: 0x0cb1, 0x1003: 0x0cb9, 0x1004: 0x0cc1, 0x1005: 0x0cc9, + 0x1006: 0x0cd1, 0x1007: 0x0cd9, 0x1008: 0x0ce1, 0x1009: 0x0ce9, 0x100a: 0x0cf1, 0x100b: 0x0cf9, + 0x100c: 0x0d01, 0x100d: 0x3cd5, 0x100e: 0x0d09, 0x100f: 0x3cf5, 0x1010: 0x3d15, 0x1011: 0x3d2d, + 0x1012: 0x3d45, 0x1013: 0x3d5d, 0x1014: 0x3d75, 0x1015: 0x3d75, 0x1016: 0x3d5d, 0x1017: 0x3d8d, + 0x1018: 0x07d5, 0x1019: 0x3da5, 0x101a: 0x3dbd, 0x101b: 0x3dd5, 0x101c: 0x3ded, 0x101d: 0x3e05, + 0x101e: 0x3e1d, 0x101f: 0x3e35, 0x1020: 0x3e4d, 0x1021: 0x3e65, 0x1022: 0x3e7d, 0x1023: 0x3e95, + 0x1024: 0x3ead, 0x1025: 0x3ead, 0x1026: 0x3ec5, 0x1027: 0x3ec5, 0x1028: 0x3edd, 0x1029: 0x3edd, + 0x102a: 0x3ef5, 0x102b: 0x3f0d, 0x102c: 0x3f25, 0x102d: 0x3f3d, 0x102e: 0x3f55, 0x102f: 0x3f55, + 0x1030: 0x3f6d, 0x1031: 0x3f6d, 0x1032: 0x3f6d, 0x1033: 0x3f85, 0x1034: 0x3f9d, 0x1035: 0x3fb5, + 0x1036: 0x3fcd, 0x1037: 0x3fb5, 0x1038: 0x3fe5, 0x1039: 0x3ffd, 0x103a: 0x3f85, 0x103b: 0x4015, + 0x103c: 0x402d, 0x103d: 0x402d, 0x103e: 0x402d, 0x103f: 0x0d11, + // Block 0x41, offset 0x1040 + 0x1040: 0x10f9, 0x1041: 0x1101, 0x1042: 0x40a5, 0x1043: 0x1109, 0x1044: 0x1111, 0x1045: 0x1119, + 0x1046: 0x1121, 0x1047: 0x1129, 0x1048: 0x40c5, 0x1049: 0x1131, 0x104a: 0x1139, 0x104b: 0x1141, + 0x104c: 0x40e5, 0x104d: 0x40e5, 0x104e: 0x1149, 0x104f: 0x1151, 0x1050: 0x1159, 0x1051: 0x4105, + 0x1052: 0x4125, 0x1053: 0x4145, 0x1054: 0x4165, 0x1055: 0x4185, 0x1056: 0x1161, 0x1057: 0x1169, + 0x1058: 0x1171, 0x1059: 0x1179, 0x105a: 0x1181, 0x105b: 0x41a5, 0x105c: 0x1189, 0x105d: 0x1191, + 0x105e: 0x1199, 0x105f: 0x41c5, 0x1060: 0x41e5, 0x1061: 0x11a1, 0x1062: 0x4205, 0x1063: 0x4225, + 0x1064: 0x4245, 0x1065: 0x11a9, 0x1066: 0x4265, 0x1067: 0x11b1, 0x1068: 0x11b9, 0x1069: 0x10f9, + 0x106a: 0x4285, 0x106b: 0x42a5, 0x106c: 0x42c5, 0x106d: 0x42e5, 0x106e: 0x11c1, 0x106f: 0x11c9, + 0x1070: 0x11d1, 0x1071: 0x11d9, 0x1072: 0x4305, 0x1073: 0x11e1, 0x1074: 0x11e9, 0x1075: 0x11f1, + 0x1076: 0x4325, 0x1077: 0x11f9, 0x1078: 0x1201, 0x1079: 0x11f9, 0x107a: 0x1209, 0x107b: 0x1211, + 0x107c: 0x4345, 0x107d: 0x1219, 0x107e: 0x1221, 0x107f: 0x1219, + // Block 0x42, offset 0x1080 + 0x1080: 0x4365, 0x1081: 0x4385, 0x1082: 0x0040, 0x1083: 0x1229, 0x1084: 0x1231, 0x1085: 0x1239, + 0x1086: 0x1241, 0x1087: 0x0040, 0x1088: 0x1249, 0x1089: 0x1251, 0x108a: 0x1259, 0x108b: 0x1261, + 0x108c: 0x1269, 0x108d: 0x1271, 0x108e: 0x1199, 0x108f: 0x1279, 0x1090: 0x1281, 0x1091: 0x1289, + 0x1092: 0x43a5, 0x1093: 0x1291, 0x1094: 0x1121, 0x1095: 0x43c5, 0x1096: 0x43e5, 0x1097: 0x1299, + 0x1098: 0x0040, 0x1099: 0x4405, 0x109a: 0x12a1, 0x109b: 0x12a9, 0x109c: 0x12b1, 0x109d: 0x12b9, + 0x109e: 0x12c1, 0x109f: 0x12c9, 0x10a0: 0x12d1, 0x10a1: 0x12d9, 0x10a2: 0x12e1, 0x10a3: 0x12e9, + 0x10a4: 0x12f1, 0x10a5: 0x12f9, 0x10a6: 0x1301, 0x10a7: 0x1309, 0x10a8: 0x1311, 0x10a9: 0x1319, + 0x10aa: 0x1321, 0x10ab: 0x1329, 0x10ac: 0x1331, 0x10ad: 0x1339, 0x10ae: 0x1341, 0x10af: 0x1349, + 0x10b0: 0x1351, 0x10b1: 0x1359, 0x10b2: 0x1361, 0x10b3: 0x1369, 0x10b4: 0x1371, 0x10b5: 0x1379, + 0x10b6: 0x1381, 0x10b7: 0x1389, 0x10b8: 0x1391, 0x10b9: 0x1399, 0x10ba: 0x13a1, 0x10bb: 0x13a9, + 0x10bc: 0x13b1, 0x10bd: 0x13b9, 0x10be: 0x13c1, 0x10bf: 0x4425, + // Block 0x43, offset 0x10c0 + 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, + 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, + 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, + 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, + 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0xe00d, 0x10dd: 0x0008, + 0x10de: 0xe00d, 0x10df: 0x0008, 0x10e0: 0xe00d, 0x10e1: 0x0008, 0x10e2: 0xe00d, 0x10e3: 0x0008, + 0x10e4: 0xe00d, 0x10e5: 0x0008, 0x10e6: 0xe00d, 0x10e7: 0x0008, 0x10e8: 0xe00d, 0x10e9: 0x0008, + 0x10ea: 0xe00d, 0x10eb: 0x0008, 0x10ec: 0xe00d, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x3308, + 0x10f0: 0x3318, 0x10f1: 0x3318, 0x10f2: 0x3318, 0x10f3: 0x0018, 0x10f4: 0x3308, 0x10f5: 0x3308, + 0x10f6: 0x3308, 0x10f7: 0x3308, 0x10f8: 0x3308, 0x10f9: 0x3308, 0x10fa: 0x3308, 0x10fb: 0x3308, + 0x10fc: 0x3308, 0x10fd: 0x3308, 0x10fe: 0x0018, 0x10ff: 0x0008, + // Block 0x44, offset 0x1100 + 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, + 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, + 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, + 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, + 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0x02d1, 0x111d: 0x13c9, + 0x111e: 0x3308, 0x111f: 0x3308, 0x1120: 0x0008, 0x1121: 0x0008, 0x1122: 0x0008, 0x1123: 0x0008, + 0x1124: 0x0008, 0x1125: 0x0008, 0x1126: 0x0008, 0x1127: 0x0008, 0x1128: 0x0008, 0x1129: 0x0008, + 0x112a: 0x0008, 0x112b: 0x0008, 0x112c: 0x0008, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x0008, + 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0x0008, 0x1133: 0x0008, 0x1134: 0x0008, 0x1135: 0x0008, + 0x1136: 0x0008, 0x1137: 0x0008, 0x1138: 0x0008, 0x1139: 0x0008, 0x113a: 0x0008, 0x113b: 0x0008, + 0x113c: 0x0008, 0x113d: 0x0008, 0x113e: 0x0008, 0x113f: 0x0008, + // Block 0x45, offset 0x1140 + 0x1140: 0x0018, 0x1141: 0x0018, 0x1142: 0x0018, 0x1143: 0x0018, 0x1144: 0x0018, 0x1145: 0x0018, + 0x1146: 0x0018, 0x1147: 0x0018, 0x1148: 0x0018, 0x1149: 0x0018, 0x114a: 0x0018, 0x114b: 0x0018, + 0x114c: 0x0018, 0x114d: 0x0018, 0x114e: 0x0018, 0x114f: 0x0018, 0x1150: 0x0018, 0x1151: 0x0018, + 0x1152: 0x0018, 0x1153: 0x0018, 0x1154: 0x0018, 0x1155: 0x0018, 0x1156: 0x0018, 0x1157: 0x0008, + 0x1158: 0x0008, 0x1159: 0x0008, 0x115a: 0x0008, 0x115b: 0x0008, 0x115c: 0x0008, 0x115d: 0x0008, + 0x115e: 0x0008, 0x115f: 0x0008, 0x1160: 0x0018, 0x1161: 0x0018, 0x1162: 0xe00d, 0x1163: 0x0008, + 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, + 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, + 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0xe00d, 0x1173: 0x0008, 0x1174: 0xe00d, 0x1175: 0x0008, + 0x1176: 0xe00d, 0x1177: 0x0008, 0x1178: 0xe00d, 0x1179: 0x0008, 0x117a: 0xe00d, 0x117b: 0x0008, + 0x117c: 0xe00d, 0x117d: 0x0008, 0x117e: 0xe00d, 0x117f: 0x0008, + // Block 0x46, offset 0x1180 + 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, + 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0xe00d, 0x1189: 0x0008, 0x118a: 0xe00d, 0x118b: 0x0008, + 0x118c: 0xe00d, 0x118d: 0x0008, 0x118e: 0xe00d, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, + 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0xe00d, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, + 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, + 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, + 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, + 0x11b0: 0xe0fd, 0x11b1: 0x0008, 0x11b2: 0x0008, 0x11b3: 0x0008, 0x11b4: 0x0008, 0x11b5: 0x0008, + 0x11b6: 0x0008, 0x11b7: 0x0008, 0x11b8: 0x0008, 0x11b9: 0xe01d, 0x11ba: 0x0008, 0x11bb: 0xe03d, + 0x11bc: 0x0008, 0x11bd: 0x4445, 0x11be: 0xe00d, 0x11bf: 0x0008, + // Block 0x47, offset 0x11c0 + 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, + 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0x0008, 0x11c9: 0x0018, 0x11ca: 0x0018, 0x11cb: 0xe03d, + 0x11cc: 0x0008, 0x11cd: 0x0409, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, + 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, + 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, + 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, + 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, + 0x11ea: 0x13d1, 0x11eb: 0x0371, 0x11ec: 0x0401, 0x11ed: 0x13d9, 0x11ee: 0x0421, 0x11ef: 0x0008, + 0x11f0: 0x13e1, 0x11f1: 0x13e9, 0x11f2: 0x0429, 0x11f3: 0x4465, 0x11f4: 0xe00d, 0x11f5: 0x0008, + 0x11f6: 0xe00d, 0x11f7: 0x0008, 0x11f8: 0xe00d, 0x11f9: 0x0008, 0x11fa: 0xe00d, 0x11fb: 0x0008, + 0x11fc: 0xe00d, 0x11fd: 0x0008, 0x11fe: 0xe00d, 0x11ff: 0x0008, + // Block 0x48, offset 0x1200 + 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0x03f5, 0x1205: 0x0479, + 0x1206: 0x447d, 0x1207: 0xe07d, 0x1208: 0x0008, 0x1209: 0xe01d, 0x120a: 0x0008, 0x120b: 0x0040, + 0x120c: 0x0040, 0x120d: 0x0040, 0x120e: 0x0040, 0x120f: 0x0040, 0x1210: 0xe00d, 0x1211: 0x0008, + 0x1212: 0x0040, 0x1213: 0x0008, 0x1214: 0x0040, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, + 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, + 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, + 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, + 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, + 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x03d9, 0x1233: 0x03f1, 0x1234: 0x0751, 0x1235: 0xe01d, + 0x1236: 0x0008, 0x1237: 0x0008, 0x1238: 0x0741, 0x1239: 0x13f1, 0x123a: 0x0008, 0x123b: 0x0008, + 0x123c: 0x0008, 0x123d: 0x0008, 0x123e: 0x0008, 0x123f: 0x0008, + // Block 0x49, offset 0x1240 + 0x1240: 0x650d, 0x1241: 0x652d, 0x1242: 0x654d, 0x1243: 0x656d, 0x1244: 0x658d, 0x1245: 0x65ad, + 0x1246: 0x65cd, 0x1247: 0x65ed, 0x1248: 0x660d, 0x1249: 0x662d, 0x124a: 0x664d, 0x124b: 0x666d, + 0x124c: 0x668d, 0x124d: 0x66ad, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x66cd, 0x1251: 0x0008, + 0x1252: 0x66ed, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x670d, 0x1256: 0x672d, 0x1257: 0x674d, + 0x1258: 0x676d, 0x1259: 0x678d, 0x125a: 0x67ad, 0x125b: 0x67cd, 0x125c: 0x67ed, 0x125d: 0x680d, + 0x125e: 0x682d, 0x125f: 0x0008, 0x1260: 0x684d, 0x1261: 0x0008, 0x1262: 0x686d, 0x1263: 0x0008, + 0x1264: 0x0008, 0x1265: 0x688d, 0x1266: 0x68ad, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, + 0x126a: 0x68cd, 0x126b: 0x68ed, 0x126c: 0x690d, 0x126d: 0x692d, 0x126e: 0x694d, 0x126f: 0x696d, + 0x1270: 0x698d, 0x1271: 0x69ad, 0x1272: 0x69cd, 0x1273: 0x69ed, 0x1274: 0x6a0d, 0x1275: 0x6a2d, + 0x1276: 0x6a4d, 0x1277: 0x6a6d, 0x1278: 0x6a8d, 0x1279: 0x6aad, 0x127a: 0x6acd, 0x127b: 0x6aed, + 0x127c: 0x6b0d, 0x127d: 0x6b2d, 0x127e: 0x6b4d, 0x127f: 0x6b6d, + // Block 0x4a, offset 0x1280 + 0x1280: 0x7acd, 0x1281: 0x7aed, 0x1282: 0x7b0d, 0x1283: 0x7b2d, 0x1284: 0x7b4d, 0x1285: 0x7b6d, + 0x1286: 0x7b8d, 0x1287: 0x7bad, 0x1288: 0x7bcd, 0x1289: 0x7bed, 0x128a: 0x7c0d, 0x128b: 0x7c2d, + 0x128c: 0x7c4d, 0x128d: 0x7c6d, 0x128e: 0x7c8d, 0x128f: 0x1409, 0x1290: 0x1411, 0x1291: 0x1419, + 0x1292: 0x7cad, 0x1293: 0x7ccd, 0x1294: 0x7ced, 0x1295: 0x1421, 0x1296: 0x1429, 0x1297: 0x1431, + 0x1298: 0x7d0d, 0x1299: 0x7d2d, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, + 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, + 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, + 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, + 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, + 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, + 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x1439, 0x12c1: 0x1441, 0x12c2: 0x1449, 0x12c3: 0x7d4d, 0x12c4: 0x7d6d, 0x12c5: 0x1451, + 0x12c6: 0x1451, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, + 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, + 0x12d2: 0x0040, 0x12d3: 0x1459, 0x12d4: 0x1461, 0x12d5: 0x1469, 0x12d6: 0x1471, 0x12d7: 0x1479, + 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x1481, + 0x12de: 0x3308, 0x12df: 0x1489, 0x12e0: 0x1491, 0x12e1: 0x0779, 0x12e2: 0x0791, 0x12e3: 0x1499, + 0x12e4: 0x14a1, 0x12e5: 0x14a9, 0x12e6: 0x14b1, 0x12e7: 0x14b9, 0x12e8: 0x14c1, 0x12e9: 0x071a, + 0x12ea: 0x14c9, 0x12eb: 0x14d1, 0x12ec: 0x14d9, 0x12ed: 0x14e1, 0x12ee: 0x14e9, 0x12ef: 0x14f1, + 0x12f0: 0x14f9, 0x12f1: 0x1501, 0x12f2: 0x1509, 0x12f3: 0x1511, 0x12f4: 0x1519, 0x12f5: 0x1521, + 0x12f6: 0x1529, 0x12f7: 0x0040, 0x12f8: 0x1531, 0x12f9: 0x1539, 0x12fa: 0x1541, 0x12fb: 0x1549, + 0x12fc: 0x1551, 0x12fd: 0x0040, 0x12fe: 0x1559, 0x12ff: 0x0040, + // Block 0x4c, offset 0x1300 + 0x1300: 0x1561, 0x1301: 0x1569, 0x1302: 0x0040, 0x1303: 0x1571, 0x1304: 0x1579, 0x1305: 0x0040, + 0x1306: 0x1581, 0x1307: 0x1589, 0x1308: 0x1591, 0x1309: 0x1599, 0x130a: 0x15a1, 0x130b: 0x15a9, + 0x130c: 0x15b1, 0x130d: 0x15b9, 0x130e: 0x15c1, 0x130f: 0x15c9, 0x1310: 0x15d1, 0x1311: 0x15d1, + 0x1312: 0x15d9, 0x1313: 0x15d9, 0x1314: 0x15d9, 0x1315: 0x15d9, 0x1316: 0x15e1, 0x1317: 0x15e1, + 0x1318: 0x15e1, 0x1319: 0x15e1, 0x131a: 0x15e9, 0x131b: 0x15e9, 0x131c: 0x15e9, 0x131d: 0x15e9, + 0x131e: 0x15f1, 0x131f: 0x15f1, 0x1320: 0x15f1, 0x1321: 0x15f1, 0x1322: 0x15f9, 0x1323: 0x15f9, + 0x1324: 0x15f9, 0x1325: 0x15f9, 0x1326: 0x1601, 0x1327: 0x1601, 0x1328: 0x1601, 0x1329: 0x1601, + 0x132a: 0x1609, 0x132b: 0x1609, 0x132c: 0x1609, 0x132d: 0x1609, 0x132e: 0x1611, 0x132f: 0x1611, + 0x1330: 0x1611, 0x1331: 0x1611, 0x1332: 0x1619, 0x1333: 0x1619, 0x1334: 0x1619, 0x1335: 0x1619, + 0x1336: 0x1621, 0x1337: 0x1621, 0x1338: 0x1621, 0x1339: 0x1621, 0x133a: 0x1629, 0x133b: 0x1629, + 0x133c: 0x1629, 0x133d: 0x1629, 0x133e: 0x1631, 0x133f: 0x1631, + // Block 0x4d, offset 0x1340 + 0x1340: 0x1631, 0x1341: 0x1631, 0x1342: 0x1639, 0x1343: 0x1639, 0x1344: 0x1641, 0x1345: 0x1641, + 0x1346: 0x1649, 0x1347: 0x1649, 0x1348: 0x1651, 0x1349: 0x1651, 0x134a: 0x1659, 0x134b: 0x1659, + 0x134c: 0x1661, 0x134d: 0x1661, 0x134e: 0x1669, 0x134f: 0x1669, 0x1350: 0x1669, 0x1351: 0x1669, + 0x1352: 0x1671, 0x1353: 0x1671, 0x1354: 0x1671, 0x1355: 0x1671, 0x1356: 0x1679, 0x1357: 0x1679, + 0x1358: 0x1679, 0x1359: 0x1679, 0x135a: 0x1681, 0x135b: 0x1681, 0x135c: 0x1681, 0x135d: 0x1681, + 0x135e: 0x1689, 0x135f: 0x1689, 0x1360: 0x1691, 0x1361: 0x1691, 0x1362: 0x1691, 0x1363: 0x1691, + 0x1364: 0x1699, 0x1365: 0x1699, 0x1366: 0x16a1, 0x1367: 0x16a1, 0x1368: 0x16a1, 0x1369: 0x16a1, + 0x136a: 0x16a9, 0x136b: 0x16a9, 0x136c: 0x16a9, 0x136d: 0x16a9, 0x136e: 0x16b1, 0x136f: 0x16b1, + 0x1370: 0x16b9, 0x1371: 0x16b9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, + 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, + 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, + // Block 0x4e, offset 0x1380 + 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0818, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, + 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, + 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, + 0x1392: 0x0040, 0x1393: 0x16c1, 0x1394: 0x16c1, 0x1395: 0x16c1, 0x1396: 0x16c1, 0x1397: 0x16c9, + 0x1398: 0x16c9, 0x1399: 0x16d1, 0x139a: 0x16d1, 0x139b: 0x16d9, 0x139c: 0x16d9, 0x139d: 0x0149, + 0x139e: 0x16e1, 0x139f: 0x16e1, 0x13a0: 0x16e9, 0x13a1: 0x16e9, 0x13a2: 0x16f1, 0x13a3: 0x16f1, + 0x13a4: 0x16f9, 0x13a5: 0x16f9, 0x13a6: 0x16f9, 0x13a7: 0x16f9, 0x13a8: 0x1701, 0x13a9: 0x1701, + 0x13aa: 0x1709, 0x13ab: 0x1709, 0x13ac: 0x1711, 0x13ad: 0x1711, 0x13ae: 0x1719, 0x13af: 0x1719, + 0x13b0: 0x1721, 0x13b1: 0x1721, 0x13b2: 0x1729, 0x13b3: 0x1729, 0x13b4: 0x1731, 0x13b5: 0x1731, + 0x13b6: 0x1739, 0x13b7: 0x1739, 0x13b8: 0x1739, 0x13b9: 0x1741, 0x13ba: 0x1741, 0x13bb: 0x1741, + 0x13bc: 0x1749, 0x13bd: 0x1749, 0x13be: 0x1749, 0x13bf: 0x1749, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x1949, 0x13c1: 0x1951, 0x13c2: 0x1959, 0x13c3: 0x1961, 0x13c4: 0x1969, 0x13c5: 0x1971, + 0x13c6: 0x1979, 0x13c7: 0x1981, 0x13c8: 0x1989, 0x13c9: 0x1991, 0x13ca: 0x1999, 0x13cb: 0x19a1, + 0x13cc: 0x19a9, 0x13cd: 0x19b1, 0x13ce: 0x19b9, 0x13cf: 0x19c1, 0x13d0: 0x19c9, 0x13d1: 0x19d1, + 0x13d2: 0x19d9, 0x13d3: 0x19e1, 0x13d4: 0x19e9, 0x13d5: 0x19f1, 0x13d6: 0x19f9, 0x13d7: 0x1a01, + 0x13d8: 0x1a09, 0x13d9: 0x1a11, 0x13da: 0x1a19, 0x13db: 0x1a21, 0x13dc: 0x1a29, 0x13dd: 0x1a31, + 0x13de: 0x1a3a, 0x13df: 0x1a42, 0x13e0: 0x1a4a, 0x13e1: 0x1a52, 0x13e2: 0x1a5a, 0x13e3: 0x1a62, + 0x13e4: 0x1a69, 0x13e5: 0x1a71, 0x13e6: 0x1761, 0x13e7: 0x1a79, 0x13e8: 0x1741, 0x13e9: 0x1769, + 0x13ea: 0x1a81, 0x13eb: 0x1a89, 0x13ec: 0x1789, 0x13ed: 0x1a91, 0x13ee: 0x1791, 0x13ef: 0x1799, + 0x13f0: 0x1a99, 0x13f1: 0x1aa1, 0x13f2: 0x17b9, 0x13f3: 0x1aa9, 0x13f4: 0x17c1, 0x13f5: 0x17c9, + 0x13f6: 0x1ab1, 0x13f7: 0x1ab9, 0x13f8: 0x17d9, 0x13f9: 0x1ac1, 0x13fa: 0x17e1, 0x13fb: 0x17e9, + 0x13fc: 0x18d1, 0x13fd: 0x18d9, 0x13fe: 0x18f1, 0x13ff: 0x18f9, + // Block 0x50, offset 0x1400 + 0x1400: 0x1901, 0x1401: 0x1921, 0x1402: 0x1929, 0x1403: 0x1931, 0x1404: 0x1939, 0x1405: 0x1959, + 0x1406: 0x1961, 0x1407: 0x1969, 0x1408: 0x1ac9, 0x1409: 0x1989, 0x140a: 0x1ad1, 0x140b: 0x1ad9, + 0x140c: 0x19b9, 0x140d: 0x1ae1, 0x140e: 0x19c1, 0x140f: 0x19c9, 0x1410: 0x1a31, 0x1411: 0x1ae9, + 0x1412: 0x1af1, 0x1413: 0x1a09, 0x1414: 0x1af9, 0x1415: 0x1a11, 0x1416: 0x1a19, 0x1417: 0x1751, + 0x1418: 0x1759, 0x1419: 0x1b01, 0x141a: 0x1761, 0x141b: 0x1b09, 0x141c: 0x1771, 0x141d: 0x1779, + 0x141e: 0x1781, 0x141f: 0x1789, 0x1420: 0x1b11, 0x1421: 0x17a1, 0x1422: 0x17a9, 0x1423: 0x17b1, + 0x1424: 0x17b9, 0x1425: 0x1b19, 0x1426: 0x17d9, 0x1427: 0x17f1, 0x1428: 0x17f9, 0x1429: 0x1801, + 0x142a: 0x1809, 0x142b: 0x1811, 0x142c: 0x1821, 0x142d: 0x1829, 0x142e: 0x1831, 0x142f: 0x1839, + 0x1430: 0x1841, 0x1431: 0x1849, 0x1432: 0x1b21, 0x1433: 0x1851, 0x1434: 0x1859, 0x1435: 0x1861, + 0x1436: 0x1869, 0x1437: 0x1871, 0x1438: 0x1879, 0x1439: 0x1889, 0x143a: 0x1891, 0x143b: 0x1899, + 0x143c: 0x18a1, 0x143d: 0x18a9, 0x143e: 0x18b1, 0x143f: 0x18b9, + // Block 0x51, offset 0x1440 + 0x1440: 0x18c1, 0x1441: 0x18c9, 0x1442: 0x18e1, 0x1443: 0x18e9, 0x1444: 0x1909, 0x1445: 0x1911, + 0x1446: 0x1919, 0x1447: 0x1921, 0x1448: 0x1929, 0x1449: 0x1941, 0x144a: 0x1949, 0x144b: 0x1951, + 0x144c: 0x1959, 0x144d: 0x1b29, 0x144e: 0x1971, 0x144f: 0x1979, 0x1450: 0x1981, 0x1451: 0x1989, + 0x1452: 0x19a1, 0x1453: 0x19a9, 0x1454: 0x19b1, 0x1455: 0x19b9, 0x1456: 0x1b31, 0x1457: 0x19d1, + 0x1458: 0x19d9, 0x1459: 0x1b39, 0x145a: 0x19f1, 0x145b: 0x19f9, 0x145c: 0x1a01, 0x145d: 0x1a09, + 0x145e: 0x1b41, 0x145f: 0x1761, 0x1460: 0x1b09, 0x1461: 0x1789, 0x1462: 0x1b11, 0x1463: 0x17b9, + 0x1464: 0x1b19, 0x1465: 0x17d9, 0x1466: 0x1b49, 0x1467: 0x1841, 0x1468: 0x1b51, 0x1469: 0x1b59, + 0x146a: 0x1b61, 0x146b: 0x1921, 0x146c: 0x1929, 0x146d: 0x1959, 0x146e: 0x19b9, 0x146f: 0x1b31, + 0x1470: 0x1a09, 0x1471: 0x1b41, 0x1472: 0x1b69, 0x1473: 0x1b71, 0x1474: 0x1b79, 0x1475: 0x1b81, + 0x1476: 0x1b89, 0x1477: 0x1b91, 0x1478: 0x1b99, 0x1479: 0x1ba1, 0x147a: 0x1ba9, 0x147b: 0x1bb1, + 0x147c: 0x1bb9, 0x147d: 0x1bc1, 0x147e: 0x1bc9, 0x147f: 0x1bd1, + // Block 0x52, offset 0x1480 + 0x1480: 0x1bd9, 0x1481: 0x1be1, 0x1482: 0x1be9, 0x1483: 0x1bf1, 0x1484: 0x1bf9, 0x1485: 0x1c01, + 0x1486: 0x1c09, 0x1487: 0x1c11, 0x1488: 0x1c19, 0x1489: 0x1c21, 0x148a: 0x1c29, 0x148b: 0x1c31, + 0x148c: 0x1b59, 0x148d: 0x1c39, 0x148e: 0x1c41, 0x148f: 0x1c49, 0x1490: 0x1c51, 0x1491: 0x1b81, + 0x1492: 0x1b89, 0x1493: 0x1b91, 0x1494: 0x1b99, 0x1495: 0x1ba1, 0x1496: 0x1ba9, 0x1497: 0x1bb1, + 0x1498: 0x1bb9, 0x1499: 0x1bc1, 0x149a: 0x1bc9, 0x149b: 0x1bd1, 0x149c: 0x1bd9, 0x149d: 0x1be1, + 0x149e: 0x1be9, 0x149f: 0x1bf1, 0x14a0: 0x1bf9, 0x14a1: 0x1c01, 0x14a2: 0x1c09, 0x14a3: 0x1c11, + 0x14a4: 0x1c19, 0x14a5: 0x1c21, 0x14a6: 0x1c29, 0x14a7: 0x1c31, 0x14a8: 0x1b59, 0x14a9: 0x1c39, + 0x14aa: 0x1c41, 0x14ab: 0x1c49, 0x14ac: 0x1c51, 0x14ad: 0x1c21, 0x14ae: 0x1c29, 0x14af: 0x1c31, + 0x14b0: 0x1b59, 0x14b1: 0x1b51, 0x14b2: 0x1b61, 0x14b3: 0x1881, 0x14b4: 0x1829, 0x14b5: 0x1831, + 0x14b6: 0x1839, 0x14b7: 0x1c21, 0x14b8: 0x1c29, 0x14b9: 0x1c31, 0x14ba: 0x1881, 0x14bb: 0x1889, + 0x14bc: 0x1c59, 0x14bd: 0x1c59, 0x14be: 0x0018, 0x14bf: 0x0018, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0018, 0x14c1: 0x0018, 0x14c2: 0x0018, 0x14c3: 0x0018, 0x14c4: 0x0018, 0x14c5: 0x0018, + 0x14c6: 0x0018, 0x14c7: 0x0018, 0x14c8: 0x0018, 0x14c9: 0x0018, 0x14ca: 0x0018, 0x14cb: 0x0018, + 0x14cc: 0x0018, 0x14cd: 0x0018, 0x14ce: 0x0018, 0x14cf: 0x0018, 0x14d0: 0x1c61, 0x14d1: 0x1c69, + 0x14d2: 0x1c69, 0x14d3: 0x1c71, 0x14d4: 0x1c79, 0x14d5: 0x1c81, 0x14d6: 0x1c89, 0x14d7: 0x1c91, + 0x14d8: 0x1c99, 0x14d9: 0x1c99, 0x14da: 0x1ca1, 0x14db: 0x1ca9, 0x14dc: 0x1cb1, 0x14dd: 0x1cb9, + 0x14de: 0x1cc1, 0x14df: 0x1cc9, 0x14e0: 0x1cc9, 0x14e1: 0x1cd1, 0x14e2: 0x1cd9, 0x14e3: 0x1cd9, + 0x14e4: 0x1ce1, 0x14e5: 0x1ce1, 0x14e6: 0x1ce9, 0x14e7: 0x1cf1, 0x14e8: 0x1cf1, 0x14e9: 0x1cf9, + 0x14ea: 0x1d01, 0x14eb: 0x1d01, 0x14ec: 0x1d09, 0x14ed: 0x1d09, 0x14ee: 0x1d11, 0x14ef: 0x1d19, + 0x14f0: 0x1d19, 0x14f1: 0x1d21, 0x14f2: 0x1d21, 0x14f3: 0x1d29, 0x14f4: 0x1d31, 0x14f5: 0x1d39, + 0x14f6: 0x1d41, 0x14f7: 0x1d41, 0x14f8: 0x1d49, 0x14f9: 0x1d51, 0x14fa: 0x1d59, 0x14fb: 0x1d61, + 0x14fc: 0x1d69, 0x14fd: 0x1d69, 0x14fe: 0x1d71, 0x14ff: 0x1d79, + // Block 0x54, offset 0x1500 + 0x1500: 0x1f29, 0x1501: 0x1f31, 0x1502: 0x1f39, 0x1503: 0x1f11, 0x1504: 0x1d39, 0x1505: 0x1ce9, + 0x1506: 0x1f41, 0x1507: 0x1f49, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, + 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0018, 0x1510: 0x0040, 0x1511: 0x0040, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, + 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, + 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, + 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, + 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0x1f51, 0x1531: 0x1f59, 0x1532: 0x1f61, 0x1533: 0x1f69, 0x1534: 0x1f71, 0x1535: 0x1f79, + 0x1536: 0x1f81, 0x1537: 0x1f89, 0x1538: 0x1f91, 0x1539: 0x1f99, 0x153a: 0x1fa2, 0x153b: 0x1faa, + 0x153c: 0x1fb1, 0x153d: 0x0018, 0x153e: 0x0018, 0x153f: 0x0018, + // Block 0x55, offset 0x1540 + 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, + 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, + 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0x1fba, 0x1551: 0x7d8d, + 0x1552: 0x0040, 0x1553: 0x1fc2, 0x1554: 0x0122, 0x1555: 0x1fca, 0x1556: 0x1fd2, 0x1557: 0x7dad, + 0x1558: 0x7dcd, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, + 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, + 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, + 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, + 0x1570: 0x0040, 0x1571: 0x7ded, 0x1572: 0x7e0d, 0x1573: 0x1fda, 0x1574: 0x1fda, 0x1575: 0x072a, + 0x1576: 0x0732, 0x1577: 0x1fe2, 0x1578: 0x1fea, 0x1579: 0x7e2d, 0x157a: 0x7e4d, 0x157b: 0x7e6d, + 0x157c: 0x7e2d, 0x157d: 0x7e8d, 0x157e: 0x7ead, 0x157f: 0x7e8d, + // Block 0x56, offset 0x1580 + 0x1580: 0x7ecd, 0x1581: 0x7eed, 0x1582: 0x7f0d, 0x1583: 0x7eed, 0x1584: 0x7f2d, 0x1585: 0x0018, + 0x1586: 0x0018, 0x1587: 0x1ff2, 0x1588: 0x1ffa, 0x1589: 0x7f4e, 0x158a: 0x7f6e, 0x158b: 0x7f8e, + 0x158c: 0x7fae, 0x158d: 0x1fda, 0x158e: 0x1fda, 0x158f: 0x1fda, 0x1590: 0x1fba, 0x1591: 0x7fcd, + 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x0122, 0x1595: 0x1fc2, 0x1596: 0x1fd2, 0x1597: 0x1fca, + 0x1598: 0x7fed, 0x1599: 0x072a, 0x159a: 0x0732, 0x159b: 0x1fe2, 0x159c: 0x1fea, 0x159d: 0x7ecd, + 0x159e: 0x7f2d, 0x159f: 0x2002, 0x15a0: 0x200a, 0x15a1: 0x2012, 0x15a2: 0x071a, 0x15a3: 0x2019, + 0x15a4: 0x2022, 0x15a5: 0x202a, 0x15a6: 0x0722, 0x15a7: 0x0040, 0x15a8: 0x2032, 0x15a9: 0x203a, + 0x15aa: 0x2042, 0x15ab: 0x204a, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, + 0x15b0: 0x800e, 0x15b1: 0x2051, 0x15b2: 0x802e, 0x15b3: 0x0808, 0x15b4: 0x804e, 0x15b5: 0x0040, + 0x15b6: 0x806e, 0x15b7: 0x2059, 0x15b8: 0x808e, 0x15b9: 0x2061, 0x15ba: 0x80ae, 0x15bb: 0x2069, + 0x15bc: 0x80ce, 0x15bd: 0x2071, 0x15be: 0x80ee, 0x15bf: 0x2079, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x2081, 0x15c1: 0x2089, 0x15c2: 0x2089, 0x15c3: 0x2091, 0x15c4: 0x2091, 0x15c5: 0x2099, + 0x15c6: 0x2099, 0x15c7: 0x20a1, 0x15c8: 0x20a1, 0x15c9: 0x20a9, 0x15ca: 0x20a9, 0x15cb: 0x20a9, + 0x15cc: 0x20a9, 0x15cd: 0x20b1, 0x15ce: 0x20b1, 0x15cf: 0x20b9, 0x15d0: 0x20b9, 0x15d1: 0x20b9, + 0x15d2: 0x20b9, 0x15d3: 0x20c1, 0x15d4: 0x20c1, 0x15d5: 0x20c9, 0x15d6: 0x20c9, 0x15d7: 0x20c9, + 0x15d8: 0x20c9, 0x15d9: 0x20d1, 0x15da: 0x20d1, 0x15db: 0x20d1, 0x15dc: 0x20d1, 0x15dd: 0x20d9, + 0x15de: 0x20d9, 0x15df: 0x20d9, 0x15e0: 0x20d9, 0x15e1: 0x20e1, 0x15e2: 0x20e1, 0x15e3: 0x20e1, + 0x15e4: 0x20e1, 0x15e5: 0x20e9, 0x15e6: 0x20e9, 0x15e7: 0x20e9, 0x15e8: 0x20e9, 0x15e9: 0x20f1, + 0x15ea: 0x20f1, 0x15eb: 0x20f9, 0x15ec: 0x20f9, 0x15ed: 0x2101, 0x15ee: 0x2101, 0x15ef: 0x2109, + 0x15f0: 0x2109, 0x15f1: 0x2111, 0x15f2: 0x2111, 0x15f3: 0x2111, 0x15f4: 0x2111, 0x15f5: 0x2119, + 0x15f6: 0x2119, 0x15f7: 0x2119, 0x15f8: 0x2119, 0x15f9: 0x2121, 0x15fa: 0x2121, 0x15fb: 0x2121, + 0x15fc: 0x2121, 0x15fd: 0x2129, 0x15fe: 0x2129, 0x15ff: 0x2129, + // Block 0x58, offset 0x1600 + 0x1600: 0x2129, 0x1601: 0x2131, 0x1602: 0x2131, 0x1603: 0x2131, 0x1604: 0x2131, 0x1605: 0x2139, + 0x1606: 0x2139, 0x1607: 0x2139, 0x1608: 0x2139, 0x1609: 0x2141, 0x160a: 0x2141, 0x160b: 0x2141, + 0x160c: 0x2141, 0x160d: 0x2149, 0x160e: 0x2149, 0x160f: 0x2149, 0x1610: 0x2149, 0x1611: 0x2151, + 0x1612: 0x2151, 0x1613: 0x2151, 0x1614: 0x2151, 0x1615: 0x2159, 0x1616: 0x2159, 0x1617: 0x2159, + 0x1618: 0x2159, 0x1619: 0x2161, 0x161a: 0x2161, 0x161b: 0x2161, 0x161c: 0x2161, 0x161d: 0x2169, + 0x161e: 0x2169, 0x161f: 0x2169, 0x1620: 0x2169, 0x1621: 0x2171, 0x1622: 0x2171, 0x1623: 0x2171, + 0x1624: 0x2171, 0x1625: 0x2179, 0x1626: 0x2179, 0x1627: 0x2179, 0x1628: 0x2179, 0x1629: 0x2181, + 0x162a: 0x2181, 0x162b: 0x2181, 0x162c: 0x2181, 0x162d: 0x2189, 0x162e: 0x2189, 0x162f: 0x1701, + 0x1630: 0x1701, 0x1631: 0x2191, 0x1632: 0x2191, 0x1633: 0x2191, 0x1634: 0x2191, 0x1635: 0x2199, + 0x1636: 0x2199, 0x1637: 0x21a1, 0x1638: 0x21a1, 0x1639: 0x21a9, 0x163a: 0x21a9, 0x163b: 0x21b1, + 0x163c: 0x21b1, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x0040, 0x1641: 0x1fca, 0x1642: 0x21ba, 0x1643: 0x2002, 0x1644: 0x203a, 0x1645: 0x2042, + 0x1646: 0x200a, 0x1647: 0x21c2, 0x1648: 0x072a, 0x1649: 0x0732, 0x164a: 0x2012, 0x164b: 0x071a, + 0x164c: 0x1fba, 0x164d: 0x2019, 0x164e: 0x0961, 0x164f: 0x21ca, 0x1650: 0x06e1, 0x1651: 0x0049, + 0x1652: 0x0029, 0x1653: 0x0031, 0x1654: 0x06e9, 0x1655: 0x06f1, 0x1656: 0x06f9, 0x1657: 0x0701, + 0x1658: 0x0709, 0x1659: 0x0711, 0x165a: 0x1fc2, 0x165b: 0x0122, 0x165c: 0x2022, 0x165d: 0x0722, + 0x165e: 0x202a, 0x165f: 0x1fd2, 0x1660: 0x204a, 0x1661: 0x0019, 0x1662: 0x02e9, 0x1663: 0x03d9, + 0x1664: 0x02f1, 0x1665: 0x02f9, 0x1666: 0x03f1, 0x1667: 0x0309, 0x1668: 0x00a9, 0x1669: 0x0311, + 0x166a: 0x00b1, 0x166b: 0x0319, 0x166c: 0x0101, 0x166d: 0x0321, 0x166e: 0x0329, 0x166f: 0x0051, + 0x1670: 0x0339, 0x1671: 0x0751, 0x1672: 0x00b9, 0x1673: 0x0089, 0x1674: 0x0341, 0x1675: 0x0349, + 0x1676: 0x0391, 0x1677: 0x00c1, 0x1678: 0x0109, 0x1679: 0x00c9, 0x167a: 0x04b1, 0x167b: 0x1ff2, + 0x167c: 0x2032, 0x167d: 0x1ffa, 0x167e: 0x21d2, 0x167f: 0x1fda, + // Block 0x5a, offset 0x1680 + 0x1680: 0x0672, 0x1681: 0x0019, 0x1682: 0x02e9, 0x1683: 0x03d9, 0x1684: 0x02f1, 0x1685: 0x02f9, + 0x1686: 0x03f1, 0x1687: 0x0309, 0x1688: 0x00a9, 0x1689: 0x0311, 0x168a: 0x00b1, 0x168b: 0x0319, + 0x168c: 0x0101, 0x168d: 0x0321, 0x168e: 0x0329, 0x168f: 0x0051, 0x1690: 0x0339, 0x1691: 0x0751, + 0x1692: 0x00b9, 0x1693: 0x0089, 0x1694: 0x0341, 0x1695: 0x0349, 0x1696: 0x0391, 0x1697: 0x00c1, + 0x1698: 0x0109, 0x1699: 0x00c9, 0x169a: 0x04b1, 0x169b: 0x1fe2, 0x169c: 0x21da, 0x169d: 0x1fea, + 0x169e: 0x21e2, 0x169f: 0x810d, 0x16a0: 0x812d, 0x16a1: 0x0961, 0x16a2: 0x814d, 0x16a3: 0x814d, + 0x16a4: 0x816d, 0x16a5: 0x818d, 0x16a6: 0x81ad, 0x16a7: 0x81cd, 0x16a8: 0x81ed, 0x16a9: 0x820d, + 0x16aa: 0x822d, 0x16ab: 0x824d, 0x16ac: 0x826d, 0x16ad: 0x828d, 0x16ae: 0x82ad, 0x16af: 0x82cd, + 0x16b0: 0x82ed, 0x16b1: 0x830d, 0x16b2: 0x832d, 0x16b3: 0x834d, 0x16b4: 0x836d, 0x16b5: 0x838d, + 0x16b6: 0x83ad, 0x16b7: 0x83cd, 0x16b8: 0x83ed, 0x16b9: 0x840d, 0x16ba: 0x842d, 0x16bb: 0x844d, + 0x16bc: 0x81ed, 0x16bd: 0x846d, 0x16be: 0x848d, 0x16bf: 0x824d, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x84ad, 0x16c1: 0x84cd, 0x16c2: 0x84ed, 0x16c3: 0x850d, 0x16c4: 0x852d, 0x16c5: 0x854d, + 0x16c6: 0x856d, 0x16c7: 0x858d, 0x16c8: 0x850d, 0x16c9: 0x85ad, 0x16ca: 0x850d, 0x16cb: 0x85cd, + 0x16cc: 0x85cd, 0x16cd: 0x85ed, 0x16ce: 0x85ed, 0x16cf: 0x860d, 0x16d0: 0x854d, 0x16d1: 0x862d, + 0x16d2: 0x864d, 0x16d3: 0x862d, 0x16d4: 0x866d, 0x16d5: 0x864d, 0x16d6: 0x868d, 0x16d7: 0x868d, + 0x16d8: 0x86ad, 0x16d9: 0x86ad, 0x16da: 0x86cd, 0x16db: 0x86cd, 0x16dc: 0x864d, 0x16dd: 0x814d, + 0x16de: 0x86ed, 0x16df: 0x870d, 0x16e0: 0x0040, 0x16e1: 0x872d, 0x16e2: 0x874d, 0x16e3: 0x876d, + 0x16e4: 0x878d, 0x16e5: 0x876d, 0x16e6: 0x87ad, 0x16e7: 0x87cd, 0x16e8: 0x87ed, 0x16e9: 0x87ed, + 0x16ea: 0x880d, 0x16eb: 0x880d, 0x16ec: 0x882d, 0x16ed: 0x882d, 0x16ee: 0x880d, 0x16ef: 0x880d, + 0x16f0: 0x884d, 0x16f1: 0x886d, 0x16f2: 0x888d, 0x16f3: 0x88ad, 0x16f4: 0x88cd, 0x16f5: 0x88ed, + 0x16f6: 0x88ed, 0x16f7: 0x88ed, 0x16f8: 0x890d, 0x16f9: 0x890d, 0x16fa: 0x890d, 0x16fb: 0x890d, + 0x16fc: 0x87ed, 0x16fd: 0x87ed, 0x16fe: 0x87ed, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x874d, 0x1703: 0x872d, 0x1704: 0x892d, 0x1705: 0x872d, + 0x1706: 0x874d, 0x1707: 0x872d, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x894d, 0x170b: 0x874d, + 0x170c: 0x896d, 0x170d: 0x892d, 0x170e: 0x896d, 0x170f: 0x874d, 0x1710: 0x0040, 0x1711: 0x0040, + 0x1712: 0x898d, 0x1713: 0x89ad, 0x1714: 0x88ad, 0x1715: 0x896d, 0x1716: 0x892d, 0x1717: 0x896d, + 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x89cd, 0x171b: 0x89ed, 0x171c: 0x89cd, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x21e9, 0x1721: 0x21f1, 0x1722: 0x21f9, 0x1723: 0x8a0e, + 0x1724: 0x2201, 0x1725: 0x2209, 0x1726: 0x8a2d, 0x1727: 0x0040, 0x1728: 0x8a4d, 0x1729: 0x8a6d, + 0x172a: 0x8a8d, 0x172b: 0x8a6d, 0x172c: 0x8aad, 0x172d: 0x8acd, 0x172e: 0x8aed, 0x172f: 0x0040, + 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, + 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, + // Block 0x5d, offset 0x1740 + 0x1740: 0x0008, 0x1741: 0x0008, 0x1742: 0x0008, 0x1743: 0x0008, 0x1744: 0x0008, 0x1745: 0x0008, + 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, + 0x174c: 0x0008, 0x174d: 0x0008, 0x174e: 0x0008, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0008, + 0x1752: 0x0008, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, + 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, + 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, + 0x1764: 0x0040, 0x1765: 0x0040, 0x1766: 0x0040, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, + 0x176a: 0x0040, 0x176b: 0x0040, 0x176c: 0x0040, 0x176d: 0x0040, 0x176e: 0x0040, 0x176f: 0x0018, + 0x1770: 0x8b3d, 0x1771: 0x8b55, 0x1772: 0x8b6d, 0x1773: 0x8b55, 0x1774: 0x8b85, 0x1775: 0x8b55, + 0x1776: 0x8b6d, 0x1777: 0x8b55, 0x1778: 0x8b3d, 0x1779: 0x8b9d, 0x177a: 0x8bb5, 0x177b: 0x0040, + 0x177c: 0x8bcd, 0x177d: 0x8b9d, 0x177e: 0x8bb5, 0x177f: 0x8b9d, + // Block 0x5e, offset 0x1780 + 0x1780: 0xe13d, 0x1781: 0xe14d, 0x1782: 0xe15d, 0x1783: 0xe14d, 0x1784: 0xe17d, 0x1785: 0xe14d, + 0x1786: 0xe15d, 0x1787: 0xe14d, 0x1788: 0xe13d, 0x1789: 0xe1cd, 0x178a: 0xe1dd, 0x178b: 0x0040, + 0x178c: 0xe1fd, 0x178d: 0xe1cd, 0x178e: 0xe1dd, 0x178f: 0xe1cd, 0x1790: 0xe13d, 0x1791: 0xe14d, + 0x1792: 0xe15d, 0x1793: 0x0040, 0x1794: 0xe17d, 0x1795: 0xe14d, 0x1796: 0x0040, 0x1797: 0x0008, + 0x1798: 0x0008, 0x1799: 0x0008, 0x179a: 0x0008, 0x179b: 0x0008, 0x179c: 0x0008, 0x179d: 0x0008, + 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x0040, 0x17a3: 0x0008, + 0x17a4: 0x0008, 0x17a5: 0x0008, 0x17a6: 0x0008, 0x17a7: 0x0008, 0x17a8: 0x0008, 0x17a9: 0x0008, + 0x17aa: 0x0008, 0x17ab: 0x0008, 0x17ac: 0x0008, 0x17ad: 0x0008, 0x17ae: 0x0008, 0x17af: 0x0008, + 0x17b0: 0x0008, 0x17b1: 0x0008, 0x17b2: 0x0040, 0x17b3: 0x0008, 0x17b4: 0x0008, 0x17b5: 0x0008, + 0x17b6: 0x0008, 0x17b7: 0x0008, 0x17b8: 0x0008, 0x17b9: 0x0008, 0x17ba: 0x0040, 0x17bb: 0x0008, + 0x17bc: 0x0008, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x0008, 0x17c1: 0x2211, 0x17c2: 0x2219, 0x17c3: 0x02e1, 0x17c4: 0x2221, 0x17c5: 0x2229, + 0x17c6: 0x0040, 0x17c7: 0x2231, 0x17c8: 0x2239, 0x17c9: 0x2241, 0x17ca: 0x2249, 0x17cb: 0x2251, + 0x17cc: 0x2259, 0x17cd: 0x2261, 0x17ce: 0x2269, 0x17cf: 0x2271, 0x17d0: 0x2279, 0x17d1: 0x2281, + 0x17d2: 0x2289, 0x17d3: 0x2291, 0x17d4: 0x2299, 0x17d5: 0x0741, 0x17d6: 0x22a1, 0x17d7: 0x22a9, + 0x17d8: 0x22b1, 0x17d9: 0x22b9, 0x17da: 0x22c1, 0x17db: 0x13d9, 0x17dc: 0x8be5, 0x17dd: 0x22c9, + 0x17de: 0x22d1, 0x17df: 0x8c05, 0x17e0: 0x22d9, 0x17e1: 0x8c25, 0x17e2: 0x22e1, 0x17e3: 0x22e9, + 0x17e4: 0x22f1, 0x17e5: 0x0751, 0x17e6: 0x22f9, 0x17e7: 0x8c45, 0x17e8: 0x0949, 0x17e9: 0x2301, + 0x17ea: 0x2309, 0x17eb: 0x2311, 0x17ec: 0x2319, 0x17ed: 0x2321, 0x17ee: 0x2329, 0x17ef: 0x2331, + 0x17f0: 0x2339, 0x17f1: 0x0040, 0x17f2: 0x2341, 0x17f3: 0x2349, 0x17f4: 0x2351, 0x17f5: 0x2359, + 0x17f6: 0x2361, 0x17f7: 0x2369, 0x17f8: 0x2371, 0x17f9: 0x8c65, 0x17fa: 0x8c85, 0x17fb: 0x0040, + 0x17fc: 0x0040, 0x17fd: 0x0040, 0x17fe: 0x0040, 0x17ff: 0x0040, + // Block 0x60, offset 0x1800 + 0x1800: 0x0a08, 0x1801: 0x0a08, 0x1802: 0x0a08, 0x1803: 0x0a08, 0x1804: 0x0a08, 0x1805: 0x0c08, + 0x1806: 0x0808, 0x1807: 0x0c08, 0x1808: 0x0818, 0x1809: 0x0c08, 0x180a: 0x0c08, 0x180b: 0x0808, + 0x180c: 0x0808, 0x180d: 0x0908, 0x180e: 0x0c08, 0x180f: 0x0c08, 0x1810: 0x0c08, 0x1811: 0x0c08, + 0x1812: 0x0c08, 0x1813: 0x0a08, 0x1814: 0x0a08, 0x1815: 0x0a08, 0x1816: 0x0a08, 0x1817: 0x0908, + 0x1818: 0x0a08, 0x1819: 0x0a08, 0x181a: 0x0a08, 0x181b: 0x0a08, 0x181c: 0x0a08, 0x181d: 0x0c08, + 0x181e: 0x0a08, 0x181f: 0x0a08, 0x1820: 0x0a08, 0x1821: 0x0c08, 0x1822: 0x0808, 0x1823: 0x0808, + 0x1824: 0x0c08, 0x1825: 0x3308, 0x1826: 0x3308, 0x1827: 0x0040, 0x1828: 0x0040, 0x1829: 0x0040, + 0x182a: 0x0040, 0x182b: 0x0a18, 0x182c: 0x0a18, 0x182d: 0x0a18, 0x182e: 0x0a18, 0x182f: 0x0c18, + 0x1830: 0x0818, 0x1831: 0x0818, 0x1832: 0x0818, 0x1833: 0x0818, 0x1834: 0x0818, 0x1835: 0x0818, + 0x1836: 0x0818, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, + 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, + // Block 0x61, offset 0x1840 + 0x1840: 0x0a08, 0x1841: 0x0c08, 0x1842: 0x0a08, 0x1843: 0x0c08, 0x1844: 0x0c08, 0x1845: 0x0c08, + 0x1846: 0x0a08, 0x1847: 0x0a08, 0x1848: 0x0a08, 0x1849: 0x0c08, 0x184a: 0x0a08, 0x184b: 0x0a08, + 0x184c: 0x0c08, 0x184d: 0x0a08, 0x184e: 0x0c08, 0x184f: 0x0c08, 0x1850: 0x0a08, 0x1851: 0x0c08, + 0x1852: 0x0040, 0x1853: 0x0040, 0x1854: 0x0040, 0x1855: 0x0040, 0x1856: 0x0040, 0x1857: 0x0040, + 0x1858: 0x0040, 0x1859: 0x0818, 0x185a: 0x0818, 0x185b: 0x0818, 0x185c: 0x0818, 0x185d: 0x0040, + 0x185e: 0x0040, 0x185f: 0x0040, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0040, 0x1863: 0x0040, + 0x1864: 0x0040, 0x1865: 0x0040, 0x1866: 0x0040, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0c18, + 0x186a: 0x0c18, 0x186b: 0x0c18, 0x186c: 0x0c18, 0x186d: 0x0a18, 0x186e: 0x0a18, 0x186f: 0x0818, + 0x1870: 0x0040, 0x1871: 0x0040, 0x1872: 0x0040, 0x1873: 0x0040, 0x1874: 0x0040, 0x1875: 0x0040, + 0x1876: 0x0040, 0x1877: 0x0040, 0x1878: 0x0040, 0x1879: 0x0040, 0x187a: 0x0040, 0x187b: 0x0040, + 0x187c: 0x0040, 0x187d: 0x0040, 0x187e: 0x0040, 0x187f: 0x0040, + // Block 0x62, offset 0x1880 + 0x1880: 0x3308, 0x1881: 0x3308, 0x1882: 0x3008, 0x1883: 0x3008, 0x1884: 0x0040, 0x1885: 0x0008, + 0x1886: 0x0008, 0x1887: 0x0008, 0x1888: 0x0008, 0x1889: 0x0008, 0x188a: 0x0008, 0x188b: 0x0008, + 0x188c: 0x0008, 0x188d: 0x0040, 0x188e: 0x0040, 0x188f: 0x0008, 0x1890: 0x0008, 0x1891: 0x0040, + 0x1892: 0x0040, 0x1893: 0x0008, 0x1894: 0x0008, 0x1895: 0x0008, 0x1896: 0x0008, 0x1897: 0x0008, + 0x1898: 0x0008, 0x1899: 0x0008, 0x189a: 0x0008, 0x189b: 0x0008, 0x189c: 0x0008, 0x189d: 0x0008, + 0x189e: 0x0008, 0x189f: 0x0008, 0x18a0: 0x0008, 0x18a1: 0x0008, 0x18a2: 0x0008, 0x18a3: 0x0008, + 0x18a4: 0x0008, 0x18a5: 0x0008, 0x18a6: 0x0008, 0x18a7: 0x0008, 0x18a8: 0x0008, 0x18a9: 0x0040, + 0x18aa: 0x0008, 0x18ab: 0x0008, 0x18ac: 0x0008, 0x18ad: 0x0008, 0x18ae: 0x0008, 0x18af: 0x0008, + 0x18b0: 0x0008, 0x18b1: 0x0040, 0x18b2: 0x0008, 0x18b3: 0x0008, 0x18b4: 0x0040, 0x18b5: 0x0008, + 0x18b6: 0x0008, 0x18b7: 0x0008, 0x18b8: 0x0008, 0x18b9: 0x0008, 0x18ba: 0x0040, 0x18bb: 0x3308, + 0x18bc: 0x3308, 0x18bd: 0x0008, 0x18be: 0x3008, 0x18bf: 0x3008, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x3308, 0x18c1: 0x3008, 0x18c2: 0x3008, 0x18c3: 0x3008, 0x18c4: 0x3008, 0x18c5: 0x0040, + 0x18c6: 0x0040, 0x18c7: 0x3008, 0x18c8: 0x3008, 0x18c9: 0x0040, 0x18ca: 0x0040, 0x18cb: 0x3008, + 0x18cc: 0x3008, 0x18cd: 0x3808, 0x18ce: 0x0040, 0x18cf: 0x0040, 0x18d0: 0x0008, 0x18d1: 0x0040, + 0x18d2: 0x0040, 0x18d3: 0x0040, 0x18d4: 0x0040, 0x18d5: 0x0040, 0x18d6: 0x0040, 0x18d7: 0x3008, + 0x18d8: 0x0040, 0x18d9: 0x0040, 0x18da: 0x0040, 0x18db: 0x0040, 0x18dc: 0x0040, 0x18dd: 0x0008, + 0x18de: 0x0008, 0x18df: 0x0008, 0x18e0: 0x0008, 0x18e1: 0x0008, 0x18e2: 0x3008, 0x18e3: 0x3008, + 0x18e4: 0x0040, 0x18e5: 0x0040, 0x18e6: 0x3308, 0x18e7: 0x3308, 0x18e8: 0x3308, 0x18e9: 0x3308, + 0x18ea: 0x3308, 0x18eb: 0x3308, 0x18ec: 0x3308, 0x18ed: 0x0040, 0x18ee: 0x0040, 0x18ef: 0x0040, + 0x18f0: 0x3308, 0x18f1: 0x3308, 0x18f2: 0x3308, 0x18f3: 0x3308, 0x18f4: 0x3308, 0x18f5: 0x0040, + 0x18f6: 0x0040, 0x18f7: 0x0040, 0x18f8: 0x0040, 0x18f9: 0x0040, 0x18fa: 0x0040, 0x18fb: 0x0040, + 0x18fc: 0x0040, 0x18fd: 0x0040, 0x18fe: 0x0040, 0x18ff: 0x0040, + // Block 0x64, offset 0x1900 + 0x1900: 0x0008, 0x1901: 0x0008, 0x1902: 0x0008, 0x1903: 0x0008, 0x1904: 0x0008, 0x1905: 0x0008, + 0x1906: 0x0008, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0008, 0x190a: 0x0040, 0x190b: 0x0040, + 0x190c: 0x0008, 0x190d: 0x0008, 0x190e: 0x0008, 0x190f: 0x0008, 0x1910: 0x0008, 0x1911: 0x0008, + 0x1912: 0x0008, 0x1913: 0x0008, 0x1914: 0x0040, 0x1915: 0x0008, 0x1916: 0x0008, 0x1917: 0x0040, + 0x1918: 0x0008, 0x1919: 0x0008, 0x191a: 0x0008, 0x191b: 0x0008, 0x191c: 0x0008, 0x191d: 0x0008, + 0x191e: 0x0008, 0x191f: 0x0008, 0x1920: 0x0008, 0x1921: 0x0008, 0x1922: 0x0008, 0x1923: 0x0008, + 0x1924: 0x0008, 0x1925: 0x0008, 0x1926: 0x0008, 0x1927: 0x0008, 0x1928: 0x0008, 0x1929: 0x0008, + 0x192a: 0x0008, 0x192b: 0x0008, 0x192c: 0x0008, 0x192d: 0x0008, 0x192e: 0x0008, 0x192f: 0x0008, + 0x1930: 0x3008, 0x1931: 0x3008, 0x1932: 0x3008, 0x1933: 0x3008, 0x1934: 0x3008, 0x1935: 0x3008, + 0x1936: 0x0040, 0x1937: 0x3008, 0x1938: 0x3008, 0x1939: 0x0040, 0x193a: 0x0040, 0x193b: 0x3308, + 0x193c: 0x3308, 0x193d: 0x3808, 0x193e: 0x3b08, 0x193f: 0x0008, + // Block 0x65, offset 0x1940 + 0x1940: 0x0019, 0x1941: 0x02e9, 0x1942: 0x03d9, 0x1943: 0x02f1, 0x1944: 0x02f9, 0x1945: 0x03f1, + 0x1946: 0x0309, 0x1947: 0x00a9, 0x1948: 0x0311, 0x1949: 0x00b1, 0x194a: 0x0319, 0x194b: 0x0101, + 0x194c: 0x0321, 0x194d: 0x0329, 0x194e: 0x0051, 0x194f: 0x0339, 0x1950: 0x0751, 0x1951: 0x00b9, + 0x1952: 0x0089, 0x1953: 0x0341, 0x1954: 0x0349, 0x1955: 0x0391, 0x1956: 0x00c1, 0x1957: 0x0109, + 0x1958: 0x00c9, 0x1959: 0x04b1, 0x195a: 0x0019, 0x195b: 0x02e9, 0x195c: 0x03d9, 0x195d: 0x02f1, + 0x195e: 0x02f9, 0x195f: 0x03f1, 0x1960: 0x0309, 0x1961: 0x00a9, 0x1962: 0x0311, 0x1963: 0x00b1, + 0x1964: 0x0319, 0x1965: 0x0101, 0x1966: 0x0321, 0x1967: 0x0329, 0x1968: 0x0051, 0x1969: 0x0339, + 0x196a: 0x0751, 0x196b: 0x00b9, 0x196c: 0x0089, 0x196d: 0x0341, 0x196e: 0x0349, 0x196f: 0x0391, + 0x1970: 0x00c1, 0x1971: 0x0109, 0x1972: 0x00c9, 0x1973: 0x04b1, 0x1974: 0x0019, 0x1975: 0x02e9, + 0x1976: 0x03d9, 0x1977: 0x02f1, 0x1978: 0x02f9, 0x1979: 0x03f1, 0x197a: 0x0309, 0x197b: 0x00a9, + 0x197c: 0x0311, 0x197d: 0x00b1, 0x197e: 0x0319, 0x197f: 0x0101, + // Block 0x66, offset 0x1980 + 0x1980: 0x0321, 0x1981: 0x0329, 0x1982: 0x0051, 0x1983: 0x0339, 0x1984: 0x0751, 0x1985: 0x00b9, + 0x1986: 0x0089, 0x1987: 0x0341, 0x1988: 0x0349, 0x1989: 0x0391, 0x198a: 0x00c1, 0x198b: 0x0109, + 0x198c: 0x00c9, 0x198d: 0x04b1, 0x198e: 0x0019, 0x198f: 0x02e9, 0x1990: 0x03d9, 0x1991: 0x02f1, + 0x1992: 0x02f9, 0x1993: 0x03f1, 0x1994: 0x0309, 0x1995: 0x0040, 0x1996: 0x0311, 0x1997: 0x00b1, + 0x1998: 0x0319, 0x1999: 0x0101, 0x199a: 0x0321, 0x199b: 0x0329, 0x199c: 0x0051, 0x199d: 0x0339, + 0x199e: 0x0751, 0x199f: 0x00b9, 0x19a0: 0x0089, 0x19a1: 0x0341, 0x19a2: 0x0349, 0x19a3: 0x0391, + 0x19a4: 0x00c1, 0x19a5: 0x0109, 0x19a6: 0x00c9, 0x19a7: 0x04b1, 0x19a8: 0x0019, 0x19a9: 0x02e9, + 0x19aa: 0x03d9, 0x19ab: 0x02f1, 0x19ac: 0x02f9, 0x19ad: 0x03f1, 0x19ae: 0x0309, 0x19af: 0x00a9, + 0x19b0: 0x0311, 0x19b1: 0x00b1, 0x19b2: 0x0319, 0x19b3: 0x0101, 0x19b4: 0x0321, 0x19b5: 0x0329, + 0x19b6: 0x0051, 0x19b7: 0x0339, 0x19b8: 0x0751, 0x19b9: 0x00b9, 0x19ba: 0x0089, 0x19bb: 0x0341, + 0x19bc: 0x0349, 0x19bd: 0x0391, 0x19be: 0x00c1, 0x19bf: 0x0109, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x00c9, 0x19c1: 0x04b1, 0x19c2: 0x0019, 0x19c3: 0x02e9, 0x19c4: 0x03d9, 0x19c5: 0x02f1, + 0x19c6: 0x02f9, 0x19c7: 0x03f1, 0x19c8: 0x0309, 0x19c9: 0x00a9, 0x19ca: 0x0311, 0x19cb: 0x00b1, + 0x19cc: 0x0319, 0x19cd: 0x0101, 0x19ce: 0x0321, 0x19cf: 0x0329, 0x19d0: 0x0051, 0x19d1: 0x0339, + 0x19d2: 0x0751, 0x19d3: 0x00b9, 0x19d4: 0x0089, 0x19d5: 0x0341, 0x19d6: 0x0349, 0x19d7: 0x0391, + 0x19d8: 0x00c1, 0x19d9: 0x0109, 0x19da: 0x00c9, 0x19db: 0x04b1, 0x19dc: 0x0019, 0x19dd: 0x0040, + 0x19de: 0x03d9, 0x19df: 0x02f1, 0x19e0: 0x0040, 0x19e1: 0x0040, 0x19e2: 0x0309, 0x19e3: 0x0040, + 0x19e4: 0x0040, 0x19e5: 0x00b1, 0x19e6: 0x0319, 0x19e7: 0x0040, 0x19e8: 0x0040, 0x19e9: 0x0329, + 0x19ea: 0x0051, 0x19eb: 0x0339, 0x19ec: 0x0751, 0x19ed: 0x0040, 0x19ee: 0x0089, 0x19ef: 0x0341, + 0x19f0: 0x0349, 0x19f1: 0x0391, 0x19f2: 0x00c1, 0x19f3: 0x0109, 0x19f4: 0x00c9, 0x19f5: 0x04b1, + 0x19f6: 0x0019, 0x19f7: 0x02e9, 0x19f8: 0x03d9, 0x19f9: 0x02f1, 0x19fa: 0x0040, 0x19fb: 0x03f1, + 0x19fc: 0x0040, 0x19fd: 0x00a9, 0x19fe: 0x0311, 0x19ff: 0x00b1, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0319, 0x1a01: 0x0101, 0x1a02: 0x0321, 0x1a03: 0x0329, 0x1a04: 0x0040, 0x1a05: 0x0339, + 0x1a06: 0x0751, 0x1a07: 0x00b9, 0x1a08: 0x0089, 0x1a09: 0x0341, 0x1a0a: 0x0349, 0x1a0b: 0x0391, + 0x1a0c: 0x00c1, 0x1a0d: 0x0109, 0x1a0e: 0x00c9, 0x1a0f: 0x04b1, 0x1a10: 0x0019, 0x1a11: 0x02e9, + 0x1a12: 0x03d9, 0x1a13: 0x02f1, 0x1a14: 0x02f9, 0x1a15: 0x03f1, 0x1a16: 0x0309, 0x1a17: 0x00a9, + 0x1a18: 0x0311, 0x1a19: 0x00b1, 0x1a1a: 0x0319, 0x1a1b: 0x0101, 0x1a1c: 0x0321, 0x1a1d: 0x0329, + 0x1a1e: 0x0051, 0x1a1f: 0x0339, 0x1a20: 0x0751, 0x1a21: 0x00b9, 0x1a22: 0x0089, 0x1a23: 0x0341, + 0x1a24: 0x0349, 0x1a25: 0x0391, 0x1a26: 0x00c1, 0x1a27: 0x0109, 0x1a28: 0x00c9, 0x1a29: 0x04b1, + 0x1a2a: 0x0019, 0x1a2b: 0x02e9, 0x1a2c: 0x03d9, 0x1a2d: 0x02f1, 0x1a2e: 0x02f9, 0x1a2f: 0x03f1, + 0x1a30: 0x0309, 0x1a31: 0x00a9, 0x1a32: 0x0311, 0x1a33: 0x00b1, 0x1a34: 0x0319, 0x1a35: 0x0101, + 0x1a36: 0x0321, 0x1a37: 0x0329, 0x1a38: 0x0051, 0x1a39: 0x0339, 0x1a3a: 0x0751, 0x1a3b: 0x00b9, + 0x1a3c: 0x0089, 0x1a3d: 0x0341, 0x1a3e: 0x0349, 0x1a3f: 0x0391, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x00c1, 0x1a41: 0x0109, 0x1a42: 0x00c9, 0x1a43: 0x04b1, 0x1a44: 0x0019, 0x1a45: 0x02e9, + 0x1a46: 0x0040, 0x1a47: 0x02f1, 0x1a48: 0x02f9, 0x1a49: 0x03f1, 0x1a4a: 0x0309, 0x1a4b: 0x0040, + 0x1a4c: 0x0040, 0x1a4d: 0x00b1, 0x1a4e: 0x0319, 0x1a4f: 0x0101, 0x1a50: 0x0321, 0x1a51: 0x0329, + 0x1a52: 0x0051, 0x1a53: 0x0339, 0x1a54: 0x0751, 0x1a55: 0x0040, 0x1a56: 0x0089, 0x1a57: 0x0341, + 0x1a58: 0x0349, 0x1a59: 0x0391, 0x1a5a: 0x00c1, 0x1a5b: 0x0109, 0x1a5c: 0x00c9, 0x1a5d: 0x0040, + 0x1a5e: 0x0019, 0x1a5f: 0x02e9, 0x1a60: 0x03d9, 0x1a61: 0x02f1, 0x1a62: 0x02f9, 0x1a63: 0x03f1, + 0x1a64: 0x0309, 0x1a65: 0x00a9, 0x1a66: 0x0311, 0x1a67: 0x00b1, 0x1a68: 0x0319, 0x1a69: 0x0101, + 0x1a6a: 0x0321, 0x1a6b: 0x0329, 0x1a6c: 0x0051, 0x1a6d: 0x0339, 0x1a6e: 0x0751, 0x1a6f: 0x00b9, + 0x1a70: 0x0089, 0x1a71: 0x0341, 0x1a72: 0x0349, 0x1a73: 0x0391, 0x1a74: 0x00c1, 0x1a75: 0x0109, + 0x1a76: 0x00c9, 0x1a77: 0x04b1, 0x1a78: 0x0019, 0x1a79: 0x02e9, 0x1a7a: 0x0040, 0x1a7b: 0x02f1, + 0x1a7c: 0x02f9, 0x1a7d: 0x03f1, 0x1a7e: 0x0309, 0x1a7f: 0x0040, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x0311, 0x1a81: 0x00b1, 0x1a82: 0x0319, 0x1a83: 0x0101, 0x1a84: 0x0321, 0x1a85: 0x0040, + 0x1a86: 0x0051, 0x1a87: 0x0040, 0x1a88: 0x0040, 0x1a89: 0x0040, 0x1a8a: 0x0089, 0x1a8b: 0x0341, + 0x1a8c: 0x0349, 0x1a8d: 0x0391, 0x1a8e: 0x00c1, 0x1a8f: 0x0109, 0x1a90: 0x00c9, 0x1a91: 0x0040, + 0x1a92: 0x0019, 0x1a93: 0x02e9, 0x1a94: 0x03d9, 0x1a95: 0x02f1, 0x1a96: 0x02f9, 0x1a97: 0x03f1, + 0x1a98: 0x0309, 0x1a99: 0x00a9, 0x1a9a: 0x0311, 0x1a9b: 0x00b1, 0x1a9c: 0x0319, 0x1a9d: 0x0101, + 0x1a9e: 0x0321, 0x1a9f: 0x0329, 0x1aa0: 0x0051, 0x1aa1: 0x0339, 0x1aa2: 0x0751, 0x1aa3: 0x00b9, + 0x1aa4: 0x0089, 0x1aa5: 0x0341, 0x1aa6: 0x0349, 0x1aa7: 0x0391, 0x1aa8: 0x00c1, 0x1aa9: 0x0109, + 0x1aaa: 0x00c9, 0x1aab: 0x04b1, 0x1aac: 0x0019, 0x1aad: 0x02e9, 0x1aae: 0x03d9, 0x1aaf: 0x02f1, + 0x1ab0: 0x02f9, 0x1ab1: 0x03f1, 0x1ab2: 0x0309, 0x1ab3: 0x00a9, 0x1ab4: 0x0311, 0x1ab5: 0x00b1, + 0x1ab6: 0x0319, 0x1ab7: 0x0101, 0x1ab8: 0x0321, 0x1ab9: 0x0329, 0x1aba: 0x0051, 0x1abb: 0x0339, + 0x1abc: 0x0751, 0x1abd: 0x00b9, 0x1abe: 0x0089, 0x1abf: 0x0341, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x0349, 0x1ac1: 0x0391, 0x1ac2: 0x00c1, 0x1ac3: 0x0109, 0x1ac4: 0x00c9, 0x1ac5: 0x04b1, + 0x1ac6: 0x0019, 0x1ac7: 0x02e9, 0x1ac8: 0x03d9, 0x1ac9: 0x02f1, 0x1aca: 0x02f9, 0x1acb: 0x03f1, + 0x1acc: 0x0309, 0x1acd: 0x00a9, 0x1ace: 0x0311, 0x1acf: 0x00b1, 0x1ad0: 0x0319, 0x1ad1: 0x0101, + 0x1ad2: 0x0321, 0x1ad3: 0x0329, 0x1ad4: 0x0051, 0x1ad5: 0x0339, 0x1ad6: 0x0751, 0x1ad7: 0x00b9, + 0x1ad8: 0x0089, 0x1ad9: 0x0341, 0x1ada: 0x0349, 0x1adb: 0x0391, 0x1adc: 0x00c1, 0x1add: 0x0109, + 0x1ade: 0x00c9, 0x1adf: 0x04b1, 0x1ae0: 0x0019, 0x1ae1: 0x02e9, 0x1ae2: 0x03d9, 0x1ae3: 0x02f1, + 0x1ae4: 0x02f9, 0x1ae5: 0x03f1, 0x1ae6: 0x0309, 0x1ae7: 0x00a9, 0x1ae8: 0x0311, 0x1ae9: 0x00b1, + 0x1aea: 0x0319, 0x1aeb: 0x0101, 0x1aec: 0x0321, 0x1aed: 0x0329, 0x1aee: 0x0051, 0x1aef: 0x0339, + 0x1af0: 0x0751, 0x1af1: 0x00b9, 0x1af2: 0x0089, 0x1af3: 0x0341, 0x1af4: 0x0349, 0x1af5: 0x0391, + 0x1af6: 0x00c1, 0x1af7: 0x0109, 0x1af8: 0x00c9, 0x1af9: 0x04b1, 0x1afa: 0x0019, 0x1afb: 0x02e9, + 0x1afc: 0x03d9, 0x1afd: 0x02f1, 0x1afe: 0x02f9, 0x1aff: 0x03f1, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x0309, 0x1b01: 0x00a9, 0x1b02: 0x0311, 0x1b03: 0x00b1, 0x1b04: 0x0319, 0x1b05: 0x0101, + 0x1b06: 0x0321, 0x1b07: 0x0329, 0x1b08: 0x0051, 0x1b09: 0x0339, 0x1b0a: 0x0751, 0x1b0b: 0x00b9, + 0x1b0c: 0x0089, 0x1b0d: 0x0341, 0x1b0e: 0x0349, 0x1b0f: 0x0391, 0x1b10: 0x00c1, 0x1b11: 0x0109, + 0x1b12: 0x00c9, 0x1b13: 0x04b1, 0x1b14: 0x0019, 0x1b15: 0x02e9, 0x1b16: 0x03d9, 0x1b17: 0x02f1, + 0x1b18: 0x02f9, 0x1b19: 0x03f1, 0x1b1a: 0x0309, 0x1b1b: 0x00a9, 0x1b1c: 0x0311, 0x1b1d: 0x00b1, + 0x1b1e: 0x0319, 0x1b1f: 0x0101, 0x1b20: 0x0321, 0x1b21: 0x0329, 0x1b22: 0x0051, 0x1b23: 0x0339, + 0x1b24: 0x0751, 0x1b25: 0x00b9, 0x1b26: 0x0089, 0x1b27: 0x0341, 0x1b28: 0x0349, 0x1b29: 0x0391, + 0x1b2a: 0x00c1, 0x1b2b: 0x0109, 0x1b2c: 0x00c9, 0x1b2d: 0x04b1, 0x1b2e: 0x0019, 0x1b2f: 0x02e9, + 0x1b30: 0x03d9, 0x1b31: 0x02f1, 0x1b32: 0x02f9, 0x1b33: 0x03f1, 0x1b34: 0x0309, 0x1b35: 0x00a9, + 0x1b36: 0x0311, 0x1b37: 0x00b1, 0x1b38: 0x0319, 0x1b39: 0x0101, 0x1b3a: 0x0321, 0x1b3b: 0x0329, + 0x1b3c: 0x0051, 0x1b3d: 0x0339, 0x1b3e: 0x0751, 0x1b3f: 0x00b9, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x0089, 0x1b41: 0x0341, 0x1b42: 0x0349, 0x1b43: 0x0391, 0x1b44: 0x00c1, 0x1b45: 0x0109, + 0x1b46: 0x00c9, 0x1b47: 0x04b1, 0x1b48: 0x0019, 0x1b49: 0x02e9, 0x1b4a: 0x03d9, 0x1b4b: 0x02f1, + 0x1b4c: 0x02f9, 0x1b4d: 0x03f1, 0x1b4e: 0x0309, 0x1b4f: 0x00a9, 0x1b50: 0x0311, 0x1b51: 0x00b1, + 0x1b52: 0x0319, 0x1b53: 0x0101, 0x1b54: 0x0321, 0x1b55: 0x0329, 0x1b56: 0x0051, 0x1b57: 0x0339, + 0x1b58: 0x0751, 0x1b59: 0x00b9, 0x1b5a: 0x0089, 0x1b5b: 0x0341, 0x1b5c: 0x0349, 0x1b5d: 0x0391, + 0x1b5e: 0x00c1, 0x1b5f: 0x0109, 0x1b60: 0x00c9, 0x1b61: 0x04b1, 0x1b62: 0x0019, 0x1b63: 0x02e9, + 0x1b64: 0x03d9, 0x1b65: 0x02f1, 0x1b66: 0x02f9, 0x1b67: 0x03f1, 0x1b68: 0x0309, 0x1b69: 0x00a9, + 0x1b6a: 0x0311, 0x1b6b: 0x00b1, 0x1b6c: 0x0319, 0x1b6d: 0x0101, 0x1b6e: 0x0321, 0x1b6f: 0x0329, + 0x1b70: 0x0051, 0x1b71: 0x0339, 0x1b72: 0x0751, 0x1b73: 0x00b9, 0x1b74: 0x0089, 0x1b75: 0x0341, + 0x1b76: 0x0349, 0x1b77: 0x0391, 0x1b78: 0x00c1, 0x1b79: 0x0109, 0x1b7a: 0x00c9, 0x1b7b: 0x04b1, + 0x1b7c: 0x0019, 0x1b7d: 0x02e9, 0x1b7e: 0x03d9, 0x1b7f: 0x02f1, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x02f9, 0x1b81: 0x03f1, 0x1b82: 0x0309, 0x1b83: 0x00a9, 0x1b84: 0x0311, 0x1b85: 0x00b1, + 0x1b86: 0x0319, 0x1b87: 0x0101, 0x1b88: 0x0321, 0x1b89: 0x0329, 0x1b8a: 0x0051, 0x1b8b: 0x0339, + 0x1b8c: 0x0751, 0x1b8d: 0x00b9, 0x1b8e: 0x0089, 0x1b8f: 0x0341, 0x1b90: 0x0349, 0x1b91: 0x0391, + 0x1b92: 0x00c1, 0x1b93: 0x0109, 0x1b94: 0x00c9, 0x1b95: 0x04b1, 0x1b96: 0x0019, 0x1b97: 0x02e9, + 0x1b98: 0x03d9, 0x1b99: 0x02f1, 0x1b9a: 0x02f9, 0x1b9b: 0x03f1, 0x1b9c: 0x0309, 0x1b9d: 0x00a9, + 0x1b9e: 0x0311, 0x1b9f: 0x00b1, 0x1ba0: 0x0319, 0x1ba1: 0x0101, 0x1ba2: 0x0321, 0x1ba3: 0x0329, + 0x1ba4: 0x0051, 0x1ba5: 0x0339, 0x1ba6: 0x0751, 0x1ba7: 0x00b9, 0x1ba8: 0x0089, 0x1ba9: 0x0341, + 0x1baa: 0x0349, 0x1bab: 0x0391, 0x1bac: 0x00c1, 0x1bad: 0x0109, 0x1bae: 0x00c9, 0x1baf: 0x04b1, + 0x1bb0: 0x0019, 0x1bb1: 0x02e9, 0x1bb2: 0x03d9, 0x1bb3: 0x02f1, 0x1bb4: 0x02f9, 0x1bb5: 0x03f1, + 0x1bb6: 0x0309, 0x1bb7: 0x00a9, 0x1bb8: 0x0311, 0x1bb9: 0x00b1, 0x1bba: 0x0319, 0x1bbb: 0x0101, + 0x1bbc: 0x0321, 0x1bbd: 0x0329, 0x1bbe: 0x0051, 0x1bbf: 0x0339, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x0751, 0x1bc1: 0x00b9, 0x1bc2: 0x0089, 0x1bc3: 0x0341, 0x1bc4: 0x0349, 0x1bc5: 0x0391, + 0x1bc6: 0x00c1, 0x1bc7: 0x0109, 0x1bc8: 0x00c9, 0x1bc9: 0x04b1, 0x1bca: 0x0019, 0x1bcb: 0x02e9, + 0x1bcc: 0x03d9, 0x1bcd: 0x02f1, 0x1bce: 0x02f9, 0x1bcf: 0x03f1, 0x1bd0: 0x0309, 0x1bd1: 0x00a9, + 0x1bd2: 0x0311, 0x1bd3: 0x00b1, 0x1bd4: 0x0319, 0x1bd5: 0x0101, 0x1bd6: 0x0321, 0x1bd7: 0x0329, + 0x1bd8: 0x0051, 0x1bd9: 0x0339, 0x1bda: 0x0751, 0x1bdb: 0x00b9, 0x1bdc: 0x0089, 0x1bdd: 0x0341, + 0x1bde: 0x0349, 0x1bdf: 0x0391, 0x1be0: 0x00c1, 0x1be1: 0x0109, 0x1be2: 0x00c9, 0x1be3: 0x04b1, + 0x1be4: 0x23e1, 0x1be5: 0x23e9, 0x1be6: 0x0040, 0x1be7: 0x0040, 0x1be8: 0x23f1, 0x1be9: 0x0399, + 0x1bea: 0x03a1, 0x1beb: 0x03a9, 0x1bec: 0x23f9, 0x1bed: 0x2401, 0x1bee: 0x2409, 0x1bef: 0x04d1, + 0x1bf0: 0x05f9, 0x1bf1: 0x2411, 0x1bf2: 0x2419, 0x1bf3: 0x2421, 0x1bf4: 0x2429, 0x1bf5: 0x2431, + 0x1bf6: 0x2439, 0x1bf7: 0x0799, 0x1bf8: 0x03c1, 0x1bf9: 0x04d1, 0x1bfa: 0x2441, 0x1bfb: 0x2449, + 0x1bfc: 0x2451, 0x1bfd: 0x03b1, 0x1bfe: 0x03b9, 0x1bff: 0x2459, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0769, 0x1c01: 0x2461, 0x1c02: 0x23f1, 0x1c03: 0x0399, 0x1c04: 0x03a1, 0x1c05: 0x03a9, + 0x1c06: 0x23f9, 0x1c07: 0x2401, 0x1c08: 0x2409, 0x1c09: 0x04d1, 0x1c0a: 0x05f9, 0x1c0b: 0x2411, + 0x1c0c: 0x2419, 0x1c0d: 0x2421, 0x1c0e: 0x2429, 0x1c0f: 0x2431, 0x1c10: 0x2439, 0x1c11: 0x0799, + 0x1c12: 0x03c1, 0x1c13: 0x2441, 0x1c14: 0x2441, 0x1c15: 0x2449, 0x1c16: 0x2451, 0x1c17: 0x03b1, + 0x1c18: 0x03b9, 0x1c19: 0x2459, 0x1c1a: 0x0769, 0x1c1b: 0x2469, 0x1c1c: 0x23f9, 0x1c1d: 0x04d1, + 0x1c1e: 0x2411, 0x1c1f: 0x03b1, 0x1c20: 0x03c1, 0x1c21: 0x0799, 0x1c22: 0x23f1, 0x1c23: 0x0399, + 0x1c24: 0x03a1, 0x1c25: 0x03a9, 0x1c26: 0x23f9, 0x1c27: 0x2401, 0x1c28: 0x2409, 0x1c29: 0x04d1, + 0x1c2a: 0x05f9, 0x1c2b: 0x2411, 0x1c2c: 0x2419, 0x1c2d: 0x2421, 0x1c2e: 0x2429, 0x1c2f: 0x2431, + 0x1c30: 0x2439, 0x1c31: 0x0799, 0x1c32: 0x03c1, 0x1c33: 0x04d1, 0x1c34: 0x2441, 0x1c35: 0x2449, + 0x1c36: 0x2451, 0x1c37: 0x03b1, 0x1c38: 0x03b9, 0x1c39: 0x2459, 0x1c3a: 0x0769, 0x1c3b: 0x2461, + 0x1c3c: 0x23f1, 0x1c3d: 0x0399, 0x1c3e: 0x03a1, 0x1c3f: 0x03a9, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x23f9, 0x1c41: 0x2401, 0x1c42: 0x2409, 0x1c43: 0x04d1, 0x1c44: 0x05f9, 0x1c45: 0x2411, + 0x1c46: 0x2419, 0x1c47: 0x2421, 0x1c48: 0x2429, 0x1c49: 0x2431, 0x1c4a: 0x2439, 0x1c4b: 0x0799, + 0x1c4c: 0x03c1, 0x1c4d: 0x2441, 0x1c4e: 0x2441, 0x1c4f: 0x2449, 0x1c50: 0x2451, 0x1c51: 0x03b1, + 0x1c52: 0x03b9, 0x1c53: 0x2459, 0x1c54: 0x0769, 0x1c55: 0x2469, 0x1c56: 0x23f9, 0x1c57: 0x04d1, + 0x1c58: 0x2411, 0x1c59: 0x03b1, 0x1c5a: 0x03c1, 0x1c5b: 0x0799, 0x1c5c: 0x23f1, 0x1c5d: 0x0399, + 0x1c5e: 0x03a1, 0x1c5f: 0x03a9, 0x1c60: 0x23f9, 0x1c61: 0x2401, 0x1c62: 0x2409, 0x1c63: 0x04d1, + 0x1c64: 0x05f9, 0x1c65: 0x2411, 0x1c66: 0x2419, 0x1c67: 0x2421, 0x1c68: 0x2429, 0x1c69: 0x2431, + 0x1c6a: 0x2439, 0x1c6b: 0x0799, 0x1c6c: 0x03c1, 0x1c6d: 0x04d1, 0x1c6e: 0x2441, 0x1c6f: 0x2449, + 0x1c70: 0x2451, 0x1c71: 0x03b1, 0x1c72: 0x03b9, 0x1c73: 0x2459, 0x1c74: 0x0769, 0x1c75: 0x2461, + 0x1c76: 0x23f1, 0x1c77: 0x0399, 0x1c78: 0x03a1, 0x1c79: 0x03a9, 0x1c7a: 0x23f9, 0x1c7b: 0x2401, + 0x1c7c: 0x2409, 0x1c7d: 0x04d1, 0x1c7e: 0x05f9, 0x1c7f: 0x2411, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x2419, 0x1c81: 0x2421, 0x1c82: 0x2429, 0x1c83: 0x2431, 0x1c84: 0x2439, 0x1c85: 0x0799, + 0x1c86: 0x03c1, 0x1c87: 0x2441, 0x1c88: 0x2441, 0x1c89: 0x2449, 0x1c8a: 0x2451, 0x1c8b: 0x03b1, + 0x1c8c: 0x03b9, 0x1c8d: 0x2459, 0x1c8e: 0x0769, 0x1c8f: 0x2469, 0x1c90: 0x23f9, 0x1c91: 0x04d1, + 0x1c92: 0x2411, 0x1c93: 0x03b1, 0x1c94: 0x03c1, 0x1c95: 0x0799, 0x1c96: 0x23f1, 0x1c97: 0x0399, + 0x1c98: 0x03a1, 0x1c99: 0x03a9, 0x1c9a: 0x23f9, 0x1c9b: 0x2401, 0x1c9c: 0x2409, 0x1c9d: 0x04d1, + 0x1c9e: 0x05f9, 0x1c9f: 0x2411, 0x1ca0: 0x2419, 0x1ca1: 0x2421, 0x1ca2: 0x2429, 0x1ca3: 0x2431, + 0x1ca4: 0x2439, 0x1ca5: 0x0799, 0x1ca6: 0x03c1, 0x1ca7: 0x04d1, 0x1ca8: 0x2441, 0x1ca9: 0x2449, + 0x1caa: 0x2451, 0x1cab: 0x03b1, 0x1cac: 0x03b9, 0x1cad: 0x2459, 0x1cae: 0x0769, 0x1caf: 0x2461, + 0x1cb0: 0x23f1, 0x1cb1: 0x0399, 0x1cb2: 0x03a1, 0x1cb3: 0x03a9, 0x1cb4: 0x23f9, 0x1cb5: 0x2401, + 0x1cb6: 0x2409, 0x1cb7: 0x04d1, 0x1cb8: 0x05f9, 0x1cb9: 0x2411, 0x1cba: 0x2419, 0x1cbb: 0x2421, + 0x1cbc: 0x2429, 0x1cbd: 0x2431, 0x1cbe: 0x2439, 0x1cbf: 0x0799, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x03c1, 0x1cc1: 0x2441, 0x1cc2: 0x2441, 0x1cc3: 0x2449, 0x1cc4: 0x2451, 0x1cc5: 0x03b1, + 0x1cc6: 0x03b9, 0x1cc7: 0x2459, 0x1cc8: 0x0769, 0x1cc9: 0x2469, 0x1cca: 0x23f9, 0x1ccb: 0x04d1, + 0x1ccc: 0x2411, 0x1ccd: 0x03b1, 0x1cce: 0x03c1, 0x1ccf: 0x0799, 0x1cd0: 0x23f1, 0x1cd1: 0x0399, + 0x1cd2: 0x03a1, 0x1cd3: 0x03a9, 0x1cd4: 0x23f9, 0x1cd5: 0x2401, 0x1cd6: 0x2409, 0x1cd7: 0x04d1, + 0x1cd8: 0x05f9, 0x1cd9: 0x2411, 0x1cda: 0x2419, 0x1cdb: 0x2421, 0x1cdc: 0x2429, 0x1cdd: 0x2431, + 0x1cde: 0x2439, 0x1cdf: 0x0799, 0x1ce0: 0x03c1, 0x1ce1: 0x04d1, 0x1ce2: 0x2441, 0x1ce3: 0x2449, + 0x1ce4: 0x2451, 0x1ce5: 0x03b1, 0x1ce6: 0x03b9, 0x1ce7: 0x2459, 0x1ce8: 0x0769, 0x1ce9: 0x2461, + 0x1cea: 0x23f1, 0x1ceb: 0x0399, 0x1cec: 0x03a1, 0x1ced: 0x03a9, 0x1cee: 0x23f9, 0x1cef: 0x2401, + 0x1cf0: 0x2409, 0x1cf1: 0x04d1, 0x1cf2: 0x05f9, 0x1cf3: 0x2411, 0x1cf4: 0x2419, 0x1cf5: 0x2421, + 0x1cf6: 0x2429, 0x1cf7: 0x2431, 0x1cf8: 0x2439, 0x1cf9: 0x0799, 0x1cfa: 0x03c1, 0x1cfb: 0x2441, + 0x1cfc: 0x2441, 0x1cfd: 0x2449, 0x1cfe: 0x2451, 0x1cff: 0x03b1, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x03b9, 0x1d01: 0x2459, 0x1d02: 0x0769, 0x1d03: 0x2469, 0x1d04: 0x23f9, 0x1d05: 0x04d1, + 0x1d06: 0x2411, 0x1d07: 0x03b1, 0x1d08: 0x03c1, 0x1d09: 0x0799, 0x1d0a: 0x2471, 0x1d0b: 0x2471, + 0x1d0c: 0x0040, 0x1d0d: 0x0040, 0x1d0e: 0x06e1, 0x1d0f: 0x0049, 0x1d10: 0x0029, 0x1d11: 0x0031, + 0x1d12: 0x06e9, 0x1d13: 0x06f1, 0x1d14: 0x06f9, 0x1d15: 0x0701, 0x1d16: 0x0709, 0x1d17: 0x0711, + 0x1d18: 0x06e1, 0x1d19: 0x0049, 0x1d1a: 0x0029, 0x1d1b: 0x0031, 0x1d1c: 0x06e9, 0x1d1d: 0x06f1, + 0x1d1e: 0x06f9, 0x1d1f: 0x0701, 0x1d20: 0x0709, 0x1d21: 0x0711, 0x1d22: 0x06e1, 0x1d23: 0x0049, + 0x1d24: 0x0029, 0x1d25: 0x0031, 0x1d26: 0x06e9, 0x1d27: 0x06f1, 0x1d28: 0x06f9, 0x1d29: 0x0701, + 0x1d2a: 0x0709, 0x1d2b: 0x0711, 0x1d2c: 0x06e1, 0x1d2d: 0x0049, 0x1d2e: 0x0029, 0x1d2f: 0x0031, + 0x1d30: 0x06e9, 0x1d31: 0x06f1, 0x1d32: 0x06f9, 0x1d33: 0x0701, 0x1d34: 0x0709, 0x1d35: 0x0711, + 0x1d36: 0x06e1, 0x1d37: 0x0049, 0x1d38: 0x0029, 0x1d39: 0x0031, 0x1d3a: 0x06e9, 0x1d3b: 0x06f1, + 0x1d3c: 0x06f9, 0x1d3d: 0x0701, 0x1d3e: 0x0709, 0x1d3f: 0x0711, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x3308, 0x1d41: 0x3308, 0x1d42: 0x3308, 0x1d43: 0x3308, 0x1d44: 0x3308, 0x1d45: 0x3308, + 0x1d46: 0x3308, 0x1d47: 0x0040, 0x1d48: 0x3308, 0x1d49: 0x3308, 0x1d4a: 0x3308, 0x1d4b: 0x3308, + 0x1d4c: 0x3308, 0x1d4d: 0x3308, 0x1d4e: 0x3308, 0x1d4f: 0x3308, 0x1d50: 0x3308, 0x1d51: 0x3308, + 0x1d52: 0x3308, 0x1d53: 0x3308, 0x1d54: 0x3308, 0x1d55: 0x3308, 0x1d56: 0x3308, 0x1d57: 0x3308, + 0x1d58: 0x3308, 0x1d59: 0x0040, 0x1d5a: 0x0040, 0x1d5b: 0x3308, 0x1d5c: 0x3308, 0x1d5d: 0x3308, + 0x1d5e: 0x3308, 0x1d5f: 0x3308, 0x1d60: 0x3308, 0x1d61: 0x3308, 0x1d62: 0x0040, 0x1d63: 0x3308, + 0x1d64: 0x3308, 0x1d65: 0x0040, 0x1d66: 0x3308, 0x1d67: 0x3308, 0x1d68: 0x3308, 0x1d69: 0x3308, + 0x1d6a: 0x3308, 0x1d6b: 0x0040, 0x1d6c: 0x0040, 0x1d6d: 0x0040, 0x1d6e: 0x0040, 0x1d6f: 0x0040, + 0x1d70: 0x2479, 0x1d71: 0x2481, 0x1d72: 0x02a9, 0x1d73: 0x2489, 0x1d74: 0x02b1, 0x1d75: 0x2491, + 0x1d76: 0x2499, 0x1d77: 0x24a1, 0x1d78: 0x24a9, 0x1d79: 0x24b1, 0x1d7a: 0x24b9, 0x1d7b: 0x24c1, + 0x1d7c: 0x02b9, 0x1d7d: 0x24c9, 0x1d7e: 0x24d1, 0x1d7f: 0x02c1, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x02c9, 0x1d81: 0x24d9, 0x1d82: 0x24e1, 0x1d83: 0x24e9, 0x1d84: 0x24f1, 0x1d85: 0x24f9, + 0x1d86: 0x2501, 0x1d87: 0x2509, 0x1d88: 0x2511, 0x1d89: 0x2519, 0x1d8a: 0x2521, 0x1d8b: 0x2529, + 0x1d8c: 0x2531, 0x1d8d: 0x2539, 0x1d8e: 0x2541, 0x1d8f: 0x2549, 0x1d90: 0x2551, 0x1d91: 0x2479, + 0x1d92: 0x2481, 0x1d93: 0x02a9, 0x1d94: 0x2489, 0x1d95: 0x02b1, 0x1d96: 0x2491, 0x1d97: 0x2499, + 0x1d98: 0x24a1, 0x1d99: 0x24a9, 0x1d9a: 0x24b1, 0x1d9b: 0x24b9, 0x1d9c: 0x02b9, 0x1d9d: 0x24c9, + 0x1d9e: 0x02c1, 0x1d9f: 0x24d9, 0x1da0: 0x24e1, 0x1da1: 0x24e9, 0x1da2: 0x24f1, 0x1da3: 0x24f9, + 0x1da4: 0x2501, 0x1da5: 0x02d1, 0x1da6: 0x2509, 0x1da7: 0x2559, 0x1da8: 0x2531, 0x1da9: 0x2561, + 0x1daa: 0x2569, 0x1dab: 0x2571, 0x1dac: 0x2579, 0x1dad: 0x2581, 0x1dae: 0x0040, 0x1daf: 0x0040, + 0x1db0: 0x0040, 0x1db1: 0x0040, 0x1db2: 0x0040, 0x1db3: 0x0040, 0x1db4: 0x0040, 0x1db5: 0x0040, + 0x1db6: 0x0040, 0x1db7: 0x0040, 0x1db8: 0x0040, 0x1db9: 0x0040, 0x1dba: 0x0040, 0x1dbb: 0x0040, + 0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xe115, 0x1dc1: 0xe115, 0x1dc2: 0xe135, 0x1dc3: 0xe135, 0x1dc4: 0xe115, 0x1dc5: 0xe115, + 0x1dc6: 0xe175, 0x1dc7: 0xe175, 0x1dc8: 0xe115, 0x1dc9: 0xe115, 0x1dca: 0xe135, 0x1dcb: 0xe135, + 0x1dcc: 0xe115, 0x1dcd: 0xe115, 0x1dce: 0xe1f5, 0x1dcf: 0xe1f5, 0x1dd0: 0xe115, 0x1dd1: 0xe115, + 0x1dd2: 0xe135, 0x1dd3: 0xe135, 0x1dd4: 0xe115, 0x1dd5: 0xe115, 0x1dd6: 0xe175, 0x1dd7: 0xe175, + 0x1dd8: 0xe115, 0x1dd9: 0xe115, 0x1dda: 0xe135, 0x1ddb: 0xe135, 0x1ddc: 0xe115, 0x1ddd: 0xe115, + 0x1dde: 0x8ca5, 0x1ddf: 0x8ca5, 0x1de0: 0x04b5, 0x1de1: 0x04b5, 0x1de2: 0x0a08, 0x1de3: 0x0a08, + 0x1de4: 0x0a08, 0x1de5: 0x0a08, 0x1de6: 0x0a08, 0x1de7: 0x0a08, 0x1de8: 0x0a08, 0x1de9: 0x0a08, + 0x1dea: 0x0a08, 0x1deb: 0x0a08, 0x1dec: 0x0a08, 0x1ded: 0x0a08, 0x1dee: 0x0a08, 0x1def: 0x0a08, + 0x1df0: 0x0a08, 0x1df1: 0x0a08, 0x1df2: 0x0a08, 0x1df3: 0x0a08, 0x1df4: 0x0a08, 0x1df5: 0x0a08, + 0x1df6: 0x0a08, 0x1df7: 0x0a08, 0x1df8: 0x0a08, 0x1df9: 0x0a08, 0x1dfa: 0x0a08, 0x1dfb: 0x0a08, + 0x1dfc: 0x0a08, 0x1dfd: 0x0a08, 0x1dfe: 0x0a08, 0x1dff: 0x0a08, + // Block 0x78, offset 0x1e00 + 0x1e00: 0x20b1, 0x1e01: 0x20b9, 0x1e02: 0x20d9, 0x1e03: 0x20f1, 0x1e04: 0x0040, 0x1e05: 0x2189, + 0x1e06: 0x2109, 0x1e07: 0x20e1, 0x1e08: 0x2131, 0x1e09: 0x2191, 0x1e0a: 0x2161, 0x1e0b: 0x2169, + 0x1e0c: 0x2171, 0x1e0d: 0x2179, 0x1e0e: 0x2111, 0x1e0f: 0x2141, 0x1e10: 0x2151, 0x1e11: 0x2121, + 0x1e12: 0x2159, 0x1e13: 0x2101, 0x1e14: 0x2119, 0x1e15: 0x20c9, 0x1e16: 0x20d1, 0x1e17: 0x20e9, + 0x1e18: 0x20f9, 0x1e19: 0x2129, 0x1e1a: 0x2139, 0x1e1b: 0x2149, 0x1e1c: 0x2589, 0x1e1d: 0x1689, + 0x1e1e: 0x2591, 0x1e1f: 0x2599, 0x1e20: 0x0040, 0x1e21: 0x20b9, 0x1e22: 0x20d9, 0x1e23: 0x0040, + 0x1e24: 0x2181, 0x1e25: 0x0040, 0x1e26: 0x0040, 0x1e27: 0x20e1, 0x1e28: 0x0040, 0x1e29: 0x2191, + 0x1e2a: 0x2161, 0x1e2b: 0x2169, 0x1e2c: 0x2171, 0x1e2d: 0x2179, 0x1e2e: 0x2111, 0x1e2f: 0x2141, + 0x1e30: 0x2151, 0x1e31: 0x2121, 0x1e32: 0x2159, 0x1e33: 0x0040, 0x1e34: 0x2119, 0x1e35: 0x20c9, + 0x1e36: 0x20d1, 0x1e37: 0x20e9, 0x1e38: 0x0040, 0x1e39: 0x2129, 0x1e3a: 0x0040, 0x1e3b: 0x2149, + 0x1e3c: 0x0040, 0x1e3d: 0x0040, 0x1e3e: 0x0040, 0x1e3f: 0x0040, + // Block 0x79, offset 0x1e40 + 0x1e40: 0x0040, 0x1e41: 0x0040, 0x1e42: 0x20d9, 0x1e43: 0x0040, 0x1e44: 0x0040, 0x1e45: 0x0040, + 0x1e46: 0x0040, 0x1e47: 0x20e1, 0x1e48: 0x0040, 0x1e49: 0x2191, 0x1e4a: 0x0040, 0x1e4b: 0x2169, + 0x1e4c: 0x0040, 0x1e4d: 0x2179, 0x1e4e: 0x2111, 0x1e4f: 0x2141, 0x1e50: 0x0040, 0x1e51: 0x2121, + 0x1e52: 0x2159, 0x1e53: 0x0040, 0x1e54: 0x2119, 0x1e55: 0x0040, 0x1e56: 0x0040, 0x1e57: 0x20e9, + 0x1e58: 0x0040, 0x1e59: 0x2129, 0x1e5a: 0x0040, 0x1e5b: 0x2149, 0x1e5c: 0x0040, 0x1e5d: 0x1689, + 0x1e5e: 0x0040, 0x1e5f: 0x2599, 0x1e60: 0x0040, 0x1e61: 0x20b9, 0x1e62: 0x20d9, 0x1e63: 0x0040, + 0x1e64: 0x2181, 0x1e65: 0x0040, 0x1e66: 0x0040, 0x1e67: 0x20e1, 0x1e68: 0x2131, 0x1e69: 0x2191, + 0x1e6a: 0x2161, 0x1e6b: 0x0040, 0x1e6c: 0x2171, 0x1e6d: 0x2179, 0x1e6e: 0x2111, 0x1e6f: 0x2141, + 0x1e70: 0x2151, 0x1e71: 0x2121, 0x1e72: 0x2159, 0x1e73: 0x0040, 0x1e74: 0x2119, 0x1e75: 0x20c9, + 0x1e76: 0x20d1, 0x1e77: 0x20e9, 0x1e78: 0x0040, 0x1e79: 0x2129, 0x1e7a: 0x2139, 0x1e7b: 0x2149, + 0x1e7c: 0x2589, 0x1e7d: 0x0040, 0x1e7e: 0x2591, 0x1e7f: 0x0040, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x20b1, 0x1e81: 0x20b9, 0x1e82: 0x20d9, 0x1e83: 0x20f1, 0x1e84: 0x2181, 0x1e85: 0x2189, + 0x1e86: 0x2109, 0x1e87: 0x20e1, 0x1e88: 0x2131, 0x1e89: 0x2191, 0x1e8a: 0x0040, 0x1e8b: 0x2169, + 0x1e8c: 0x2171, 0x1e8d: 0x2179, 0x1e8e: 0x2111, 0x1e8f: 0x2141, 0x1e90: 0x2151, 0x1e91: 0x2121, + 0x1e92: 0x2159, 0x1e93: 0x2101, 0x1e94: 0x2119, 0x1e95: 0x20c9, 0x1e96: 0x20d1, 0x1e97: 0x20e9, + 0x1e98: 0x20f9, 0x1e99: 0x2129, 0x1e9a: 0x2139, 0x1e9b: 0x2149, 0x1e9c: 0x0040, 0x1e9d: 0x0040, + 0x1e9e: 0x0040, 0x1e9f: 0x0040, 0x1ea0: 0x0040, 0x1ea1: 0x20b9, 0x1ea2: 0x20d9, 0x1ea3: 0x20f1, + 0x1ea4: 0x0040, 0x1ea5: 0x2189, 0x1ea6: 0x2109, 0x1ea7: 0x20e1, 0x1ea8: 0x2131, 0x1ea9: 0x2191, + 0x1eaa: 0x0040, 0x1eab: 0x2169, 0x1eac: 0x2171, 0x1ead: 0x2179, 0x1eae: 0x2111, 0x1eaf: 0x2141, + 0x1eb0: 0x2151, 0x1eb1: 0x2121, 0x1eb2: 0x2159, 0x1eb3: 0x2101, 0x1eb4: 0x2119, 0x1eb5: 0x20c9, + 0x1eb6: 0x20d1, 0x1eb7: 0x20e9, 0x1eb8: 0x20f9, 0x1eb9: 0x2129, 0x1eba: 0x2139, 0x1ebb: 0x2149, + 0x1ebc: 0x0040, 0x1ebd: 0x0040, 0x1ebe: 0x0040, 0x1ebf: 0x0040, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x0040, 0x1ec1: 0x25a2, 0x1ec2: 0x25aa, 0x1ec3: 0x25b2, 0x1ec4: 0x25ba, 0x1ec5: 0x25c2, + 0x1ec6: 0x25ca, 0x1ec7: 0x25d2, 0x1ec8: 0x25da, 0x1ec9: 0x25e2, 0x1eca: 0x25ea, 0x1ecb: 0x0018, + 0x1ecc: 0x0018, 0x1ecd: 0x0018, 0x1ece: 0x0018, 0x1ecf: 0x0018, 0x1ed0: 0x25f2, 0x1ed1: 0x25fa, + 0x1ed2: 0x2602, 0x1ed3: 0x260a, 0x1ed4: 0x2612, 0x1ed5: 0x261a, 0x1ed6: 0x2622, 0x1ed7: 0x262a, + 0x1ed8: 0x2632, 0x1ed9: 0x263a, 0x1eda: 0x2642, 0x1edb: 0x264a, 0x1edc: 0x2652, 0x1edd: 0x265a, + 0x1ede: 0x2662, 0x1edf: 0x266a, 0x1ee0: 0x2672, 0x1ee1: 0x267a, 0x1ee2: 0x2682, 0x1ee3: 0x268a, + 0x1ee4: 0x2692, 0x1ee5: 0x269a, 0x1ee6: 0x26a2, 0x1ee7: 0x26aa, 0x1ee8: 0x26b2, 0x1ee9: 0x26ba, + 0x1eea: 0x26c1, 0x1eeb: 0x03d9, 0x1eec: 0x00b9, 0x1eed: 0x1239, 0x1eee: 0x26c9, 0x1eef: 0x0018, + 0x1ef0: 0x0019, 0x1ef1: 0x02e9, 0x1ef2: 0x03d9, 0x1ef3: 0x02f1, 0x1ef4: 0x02f9, 0x1ef5: 0x03f1, + 0x1ef6: 0x0309, 0x1ef7: 0x00a9, 0x1ef8: 0x0311, 0x1ef9: 0x00b1, 0x1efa: 0x0319, 0x1efb: 0x0101, + 0x1efc: 0x0321, 0x1efd: 0x0329, 0x1efe: 0x0051, 0x1eff: 0x0339, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0x0751, 0x1f01: 0x00b9, 0x1f02: 0x0089, 0x1f03: 0x0341, 0x1f04: 0x0349, 0x1f05: 0x0391, + 0x1f06: 0x00c1, 0x1f07: 0x0109, 0x1f08: 0x00c9, 0x1f09: 0x04b1, 0x1f0a: 0x26d1, 0x1f0b: 0x11f9, + 0x1f0c: 0x26d9, 0x1f0d: 0x04d9, 0x1f0e: 0x26e1, 0x1f0f: 0x26e9, 0x1f10: 0x0018, 0x1f11: 0x0018, + 0x1f12: 0x0018, 0x1f13: 0x0018, 0x1f14: 0x0018, 0x1f15: 0x0018, 0x1f16: 0x0018, 0x1f17: 0x0018, + 0x1f18: 0x0018, 0x1f19: 0x0018, 0x1f1a: 0x0018, 0x1f1b: 0x0018, 0x1f1c: 0x0018, 0x1f1d: 0x0018, + 0x1f1e: 0x0018, 0x1f1f: 0x0018, 0x1f20: 0x0018, 0x1f21: 0x0018, 0x1f22: 0x0018, 0x1f23: 0x0018, + 0x1f24: 0x0018, 0x1f25: 0x0018, 0x1f26: 0x0018, 0x1f27: 0x0018, 0x1f28: 0x0018, 0x1f29: 0x0018, + 0x1f2a: 0x26f1, 0x1f2b: 0x26f9, 0x1f2c: 0x2701, 0x1f2d: 0x0018, 0x1f2e: 0x0018, 0x1f2f: 0x0018, + 0x1f30: 0x0018, 0x1f31: 0x0018, 0x1f32: 0x0018, 0x1f33: 0x0018, 0x1f34: 0x0018, 0x1f35: 0x0018, + 0x1f36: 0x0018, 0x1f37: 0x0018, 0x1f38: 0x0018, 0x1f39: 0x0018, 0x1f3a: 0x0018, 0x1f3b: 0x0018, + 0x1f3c: 0x0018, 0x1f3d: 0x0018, 0x1f3e: 0x0018, 0x1f3f: 0x0018, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0x2711, 0x1f41: 0x2719, 0x1f42: 0x2721, 0x1f43: 0x0040, 0x1f44: 0x0040, 0x1f45: 0x0040, + 0x1f46: 0x0040, 0x1f47: 0x0040, 0x1f48: 0x0040, 0x1f49: 0x0040, 0x1f4a: 0x0040, 0x1f4b: 0x0040, + 0x1f4c: 0x0040, 0x1f4d: 0x0040, 0x1f4e: 0x0040, 0x1f4f: 0x0040, 0x1f50: 0x2729, 0x1f51: 0x2731, + 0x1f52: 0x2739, 0x1f53: 0x2741, 0x1f54: 0x2749, 0x1f55: 0x2751, 0x1f56: 0x2759, 0x1f57: 0x2761, + 0x1f58: 0x2769, 0x1f59: 0x2771, 0x1f5a: 0x2779, 0x1f5b: 0x2781, 0x1f5c: 0x2789, 0x1f5d: 0x2791, + 0x1f5e: 0x2799, 0x1f5f: 0x27a1, 0x1f60: 0x27a9, 0x1f61: 0x27b1, 0x1f62: 0x27b9, 0x1f63: 0x27c1, + 0x1f64: 0x27c9, 0x1f65: 0x27d1, 0x1f66: 0x27d9, 0x1f67: 0x27e1, 0x1f68: 0x27e9, 0x1f69: 0x27f1, + 0x1f6a: 0x27f9, 0x1f6b: 0x2801, 0x1f6c: 0x2809, 0x1f6d: 0x2811, 0x1f6e: 0x2819, 0x1f6f: 0x2821, + 0x1f70: 0x2829, 0x1f71: 0x2831, 0x1f72: 0x2839, 0x1f73: 0x2841, 0x1f74: 0x2849, 0x1f75: 0x2851, + 0x1f76: 0x2859, 0x1f77: 0x2861, 0x1f78: 0x2869, 0x1f79: 0x2871, 0x1f7a: 0x2879, 0x1f7b: 0x2881, + 0x1f7c: 0x0040, 0x1f7d: 0x0040, 0x1f7e: 0x0040, 0x1f7f: 0x0040, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x28e1, 0x1f81: 0x28e9, 0x1f82: 0x28f1, 0x1f83: 0x8cbd, 0x1f84: 0x28f9, 0x1f85: 0x2901, + 0x1f86: 0x2909, 0x1f87: 0x2911, 0x1f88: 0x2919, 0x1f89: 0x2921, 0x1f8a: 0x2929, 0x1f8b: 0x2931, + 0x1f8c: 0x2939, 0x1f8d: 0x8cdd, 0x1f8e: 0x2941, 0x1f8f: 0x2949, 0x1f90: 0x2951, 0x1f91: 0x2959, + 0x1f92: 0x8cfd, 0x1f93: 0x2961, 0x1f94: 0x2969, 0x1f95: 0x2799, 0x1f96: 0x8d1d, 0x1f97: 0x2971, + 0x1f98: 0x2979, 0x1f99: 0x2981, 0x1f9a: 0x2989, 0x1f9b: 0x2991, 0x1f9c: 0x8d3d, 0x1f9d: 0x2999, + 0x1f9e: 0x29a1, 0x1f9f: 0x29a9, 0x1fa0: 0x29b1, 0x1fa1: 0x29b9, 0x1fa2: 0x2871, 0x1fa3: 0x29c1, + 0x1fa4: 0x29c9, 0x1fa5: 0x29d1, 0x1fa6: 0x29d9, 0x1fa7: 0x29e1, 0x1fa8: 0x29e9, 0x1fa9: 0x29f1, + 0x1faa: 0x29f9, 0x1fab: 0x2a01, 0x1fac: 0x2a09, 0x1fad: 0x2a11, 0x1fae: 0x2a19, 0x1faf: 0x2a21, + 0x1fb0: 0x2a29, 0x1fb1: 0x2a31, 0x1fb2: 0x2a31, 0x1fb3: 0x2a31, 0x1fb4: 0x8d5d, 0x1fb5: 0x2a39, + 0x1fb6: 0x2a41, 0x1fb7: 0x2a49, 0x1fb8: 0x8d7d, 0x1fb9: 0x2a51, 0x1fba: 0x2a59, 0x1fbb: 0x2a61, + 0x1fbc: 0x2a69, 0x1fbd: 0x2a71, 0x1fbe: 0x2a79, 0x1fbf: 0x2a81, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x2a89, 0x1fc1: 0x2a91, 0x1fc2: 0x2a99, 0x1fc3: 0x2aa1, 0x1fc4: 0x2aa9, 0x1fc5: 0x2ab1, + 0x1fc6: 0x2ab1, 0x1fc7: 0x2ab9, 0x1fc8: 0x2ac1, 0x1fc9: 0x2ac9, 0x1fca: 0x2ad1, 0x1fcb: 0x2ad9, + 0x1fcc: 0x2ae1, 0x1fcd: 0x2ae9, 0x1fce: 0x2af1, 0x1fcf: 0x2af9, 0x1fd0: 0x2b01, 0x1fd1: 0x2b09, + 0x1fd2: 0x2b11, 0x1fd3: 0x2b19, 0x1fd4: 0x2b21, 0x1fd5: 0x2b29, 0x1fd6: 0x2b31, 0x1fd7: 0x2b39, + 0x1fd8: 0x2b41, 0x1fd9: 0x8d9d, 0x1fda: 0x2b49, 0x1fdb: 0x2b51, 0x1fdc: 0x2b59, 0x1fdd: 0x2751, + 0x1fde: 0x2b61, 0x1fdf: 0x2b69, 0x1fe0: 0x8dbd, 0x1fe1: 0x8ddd, 0x1fe2: 0x2b71, 0x1fe3: 0x2b79, + 0x1fe4: 0x2b81, 0x1fe5: 0x2b89, 0x1fe6: 0x2b91, 0x1fe7: 0x2b99, 0x1fe8: 0x2040, 0x1fe9: 0x2ba1, + 0x1fea: 0x2ba9, 0x1feb: 0x2ba9, 0x1fec: 0x8dfd, 0x1fed: 0x2bb1, 0x1fee: 0x2bb9, 0x1fef: 0x2bc1, + 0x1ff0: 0x2bc9, 0x1ff1: 0x8e1d, 0x1ff2: 0x2bd1, 0x1ff3: 0x2bd9, 0x1ff4: 0x2040, 0x1ff5: 0x2be1, + 0x1ff6: 0x2be9, 0x1ff7: 0x2bf1, 0x1ff8: 0x2bf9, 0x1ff9: 0x2c01, 0x1ffa: 0x2c09, 0x1ffb: 0x8e3d, + 0x1ffc: 0x2c11, 0x1ffd: 0x8e5d, 0x1ffe: 0x2c19, 0x1fff: 0x2c21, + // Block 0x80, offset 0x2000 + 0x2000: 0x2c29, 0x2001: 0x2c31, 0x2002: 0x2c39, 0x2003: 0x2c41, 0x2004: 0x2c49, 0x2005: 0x2c51, + 0x2006: 0x2c59, 0x2007: 0x2c61, 0x2008: 0x2c69, 0x2009: 0x8e7d, 0x200a: 0x2c71, 0x200b: 0x2c79, + 0x200c: 0x2c81, 0x200d: 0x2c89, 0x200e: 0x2c91, 0x200f: 0x8e9d, 0x2010: 0x2c99, 0x2011: 0x8ebd, + 0x2012: 0x8edd, 0x2013: 0x2ca1, 0x2014: 0x2ca9, 0x2015: 0x2ca9, 0x2016: 0x2cb1, 0x2017: 0x8efd, + 0x2018: 0x8f1d, 0x2019: 0x2cb9, 0x201a: 0x2cc1, 0x201b: 0x2cc9, 0x201c: 0x2cd1, 0x201d: 0x2cd9, + 0x201e: 0x2ce1, 0x201f: 0x2ce9, 0x2020: 0x2cf1, 0x2021: 0x2cf9, 0x2022: 0x2d01, 0x2023: 0x2d09, + 0x2024: 0x8f3d, 0x2025: 0x2d11, 0x2026: 0x2d19, 0x2027: 0x2d21, 0x2028: 0x2d29, 0x2029: 0x2d21, + 0x202a: 0x2d31, 0x202b: 0x2d39, 0x202c: 0x2d41, 0x202d: 0x2d49, 0x202e: 0x2d51, 0x202f: 0x2d59, + 0x2030: 0x2d61, 0x2031: 0x2d69, 0x2032: 0x2d71, 0x2033: 0x2d79, 0x2034: 0x2d81, 0x2035: 0x2d89, + 0x2036: 0x2d91, 0x2037: 0x2d99, 0x2038: 0x8f5d, 0x2039: 0x2da1, 0x203a: 0x2da9, 0x203b: 0x2db1, + 0x203c: 0x2db9, 0x203d: 0x2dc1, 0x203e: 0x8f7d, 0x203f: 0x2dc9, + // Block 0x81, offset 0x2040 + 0x2040: 0x2dd1, 0x2041: 0x2dd9, 0x2042: 0x2de1, 0x2043: 0x2de9, 0x2044: 0x2df1, 0x2045: 0x2df9, + 0x2046: 0x2e01, 0x2047: 0x2e09, 0x2048: 0x2e11, 0x2049: 0x2e19, 0x204a: 0x8f9d, 0x204b: 0x2e21, + 0x204c: 0x2e29, 0x204d: 0x2e31, 0x204e: 0x2e39, 0x204f: 0x2e41, 0x2050: 0x2e49, 0x2051: 0x2e51, + 0x2052: 0x2e59, 0x2053: 0x2e61, 0x2054: 0x2e69, 0x2055: 0x2e71, 0x2056: 0x2e79, 0x2057: 0x2e81, + 0x2058: 0x2e89, 0x2059: 0x2e91, 0x205a: 0x2e99, 0x205b: 0x2ea1, 0x205c: 0x2ea9, 0x205d: 0x8fbd, + 0x205e: 0x2eb1, 0x205f: 0x2eb9, 0x2060: 0x2ec1, 0x2061: 0x2ec9, 0x2062: 0x2ed1, 0x2063: 0x8fdd, + 0x2064: 0x2ed9, 0x2065: 0x2ee1, 0x2066: 0x2ee9, 0x2067: 0x2ef1, 0x2068: 0x2ef9, 0x2069: 0x2f01, + 0x206a: 0x2f09, 0x206b: 0x2f11, 0x206c: 0x7f0d, 0x206d: 0x2f19, 0x206e: 0x2f21, 0x206f: 0x2f29, + 0x2070: 0x8ffd, 0x2071: 0x2f31, 0x2072: 0x2f39, 0x2073: 0x2f41, 0x2074: 0x2f49, 0x2075: 0x2f51, + 0x2076: 0x2f59, 0x2077: 0x901d, 0x2078: 0x903d, 0x2079: 0x905d, 0x207a: 0x2f61, 0x207b: 0x907d, + 0x207c: 0x2f69, 0x207d: 0x2f71, 0x207e: 0x2f79, 0x207f: 0x2f81, + // Block 0x82, offset 0x2080 + 0x2080: 0x2f89, 0x2081: 0x2f91, 0x2082: 0x2f99, 0x2083: 0x2fa1, 0x2084: 0x2fa9, 0x2085: 0x2fb1, + 0x2086: 0x909d, 0x2087: 0x2fb9, 0x2088: 0x2fc1, 0x2089: 0x2fc9, 0x208a: 0x2fd1, 0x208b: 0x2fd9, + 0x208c: 0x2fe1, 0x208d: 0x90bd, 0x208e: 0x2fe9, 0x208f: 0x2ff1, 0x2090: 0x90dd, 0x2091: 0x90fd, + 0x2092: 0x2ff9, 0x2093: 0x3001, 0x2094: 0x3009, 0x2095: 0x3011, 0x2096: 0x3019, 0x2097: 0x3021, + 0x2098: 0x3029, 0x2099: 0x3031, 0x209a: 0x3039, 0x209b: 0x911d, 0x209c: 0x3041, 0x209d: 0x913d, + 0x209e: 0x3049, 0x209f: 0x2040, 0x20a0: 0x3051, 0x20a1: 0x3059, 0x20a2: 0x3061, 0x20a3: 0x915d, + 0x20a4: 0x3069, 0x20a5: 0x3071, 0x20a6: 0x917d, 0x20a7: 0x919d, 0x20a8: 0x3079, 0x20a9: 0x3081, + 0x20aa: 0x3089, 0x20ab: 0x3091, 0x20ac: 0x3099, 0x20ad: 0x3099, 0x20ae: 0x30a1, 0x20af: 0x30a9, + 0x20b0: 0x30b1, 0x20b1: 0x30b9, 0x20b2: 0x30c1, 0x20b3: 0x30c9, 0x20b4: 0x30d1, 0x20b5: 0x91bd, + 0x20b6: 0x30d9, 0x20b7: 0x91dd, 0x20b8: 0x30e1, 0x20b9: 0x91fd, 0x20ba: 0x30e9, 0x20bb: 0x921d, + 0x20bc: 0x923d, 0x20bd: 0x925d, 0x20be: 0x30f1, 0x20bf: 0x30f9, + // Block 0x83, offset 0x20c0 + 0x20c0: 0x3101, 0x20c1: 0x927d, 0x20c2: 0x929d, 0x20c3: 0x92bd, 0x20c4: 0x92dd, 0x20c5: 0x3109, + 0x20c6: 0x3111, 0x20c7: 0x3111, 0x20c8: 0x3119, 0x20c9: 0x3121, 0x20ca: 0x3129, 0x20cb: 0x3131, + 0x20cc: 0x3139, 0x20cd: 0x92fd, 0x20ce: 0x3141, 0x20cf: 0x3149, 0x20d0: 0x3151, 0x20d1: 0x3159, + 0x20d2: 0x931d, 0x20d3: 0x3161, 0x20d4: 0x933d, 0x20d5: 0x935d, 0x20d6: 0x3169, 0x20d7: 0x3171, + 0x20d8: 0x3179, 0x20d9: 0x3181, 0x20da: 0x3189, 0x20db: 0x3191, 0x20dc: 0x937d, 0x20dd: 0x939d, + 0x20de: 0x93bd, 0x20df: 0x2040, 0x20e0: 0x3199, 0x20e1: 0x93dd, 0x20e2: 0x31a1, 0x20e3: 0x31a9, + 0x20e4: 0x31b1, 0x20e5: 0x93fd, 0x20e6: 0x31b9, 0x20e7: 0x31c1, 0x20e8: 0x31c9, 0x20e9: 0x31d1, + 0x20ea: 0x31d9, 0x20eb: 0x941d, 0x20ec: 0x31e1, 0x20ed: 0x31e9, 0x20ee: 0x31f1, 0x20ef: 0x31f9, + 0x20f0: 0x3201, 0x20f1: 0x3209, 0x20f2: 0x943d, 0x20f3: 0x945d, 0x20f4: 0x3211, 0x20f5: 0x947d, + 0x20f6: 0x3219, 0x20f7: 0x949d, 0x20f8: 0x3221, 0x20f9: 0x3229, 0x20fa: 0x3231, 0x20fb: 0x94bd, + 0x20fc: 0x94dd, 0x20fd: 0x3239, 0x20fe: 0x94fd, 0x20ff: 0x3241, + // Block 0x84, offset 0x2100 + 0x2100: 0x951d, 0x2101: 0x3249, 0x2102: 0x3251, 0x2103: 0x3259, 0x2104: 0x3261, 0x2105: 0x3269, + 0x2106: 0x3271, 0x2107: 0x953d, 0x2108: 0x955d, 0x2109: 0x957d, 0x210a: 0x959d, 0x210b: 0x2ca1, + 0x210c: 0x3279, 0x210d: 0x3281, 0x210e: 0x3289, 0x210f: 0x3291, 0x2110: 0x3299, 0x2111: 0x32a1, + 0x2112: 0x32a9, 0x2113: 0x32b1, 0x2114: 0x32b9, 0x2115: 0x32c1, 0x2116: 0x32c9, 0x2117: 0x95bd, + 0x2118: 0x32d1, 0x2119: 0x32d9, 0x211a: 0x32e1, 0x211b: 0x32e9, 0x211c: 0x32f1, 0x211d: 0x32f9, + 0x211e: 0x3301, 0x211f: 0x3309, 0x2120: 0x3311, 0x2121: 0x3319, 0x2122: 0x3321, 0x2123: 0x3329, + 0x2124: 0x95dd, 0x2125: 0x95fd, 0x2126: 0x961d, 0x2127: 0x3331, 0x2128: 0x3339, 0x2129: 0x3341, + 0x212a: 0x3349, 0x212b: 0x963d, 0x212c: 0x3351, 0x212d: 0x965d, 0x212e: 0x3359, 0x212f: 0x3361, + 0x2130: 0x967d, 0x2131: 0x969d, 0x2132: 0x3369, 0x2133: 0x3371, 0x2134: 0x3379, 0x2135: 0x3381, + 0x2136: 0x3389, 0x2137: 0x3391, 0x2138: 0x3399, 0x2139: 0x33a1, 0x213a: 0x33a9, 0x213b: 0x33b1, + 0x213c: 0x33b9, 0x213d: 0x33c1, 0x213e: 0x33c9, 0x213f: 0x2040, + // Block 0x85, offset 0x2140 + 0x2140: 0x33d1, 0x2141: 0x33d9, 0x2142: 0x33e1, 0x2143: 0x33e9, 0x2144: 0x33f1, 0x2145: 0x96bd, + 0x2146: 0x33f9, 0x2147: 0x3401, 0x2148: 0x3409, 0x2149: 0x3411, 0x214a: 0x3419, 0x214b: 0x96dd, + 0x214c: 0x96fd, 0x214d: 0x3421, 0x214e: 0x3429, 0x214f: 0x3431, 0x2150: 0x3439, 0x2151: 0x3441, + 0x2152: 0x3449, 0x2153: 0x971d, 0x2154: 0x3451, 0x2155: 0x3459, 0x2156: 0x3461, 0x2157: 0x3469, + 0x2158: 0x973d, 0x2159: 0x975d, 0x215a: 0x3471, 0x215b: 0x3479, 0x215c: 0x3481, 0x215d: 0x977d, + 0x215e: 0x3489, 0x215f: 0x3491, 0x2160: 0x684d, 0x2161: 0x979d, 0x2162: 0x3499, 0x2163: 0x34a1, + 0x2164: 0x34a9, 0x2165: 0x97bd, 0x2166: 0x34b1, 0x2167: 0x34b9, 0x2168: 0x34c1, 0x2169: 0x34c9, + 0x216a: 0x34d1, 0x216b: 0x34d9, 0x216c: 0x34e1, 0x216d: 0x97dd, 0x216e: 0x34e9, 0x216f: 0x34f1, + 0x2170: 0x34f9, 0x2171: 0x97fd, 0x2172: 0x3501, 0x2173: 0x3509, 0x2174: 0x3511, 0x2175: 0x3519, + 0x2176: 0x7b6d, 0x2177: 0x981d, 0x2178: 0x3521, 0x2179: 0x3529, 0x217a: 0x3531, 0x217b: 0x983d, + 0x217c: 0x3539, 0x217d: 0x985d, 0x217e: 0x3541, 0x217f: 0x3541, + // Block 0x86, offset 0x2180 + 0x2180: 0x3549, 0x2181: 0x987d, 0x2182: 0x3551, 0x2183: 0x3559, 0x2184: 0x3561, 0x2185: 0x3569, + 0x2186: 0x3571, 0x2187: 0x3579, 0x2188: 0x3581, 0x2189: 0x989d, 0x218a: 0x3589, 0x218b: 0x3591, + 0x218c: 0x3599, 0x218d: 0x35a1, 0x218e: 0x35a9, 0x218f: 0x35b1, 0x2190: 0x98bd, 0x2191: 0x35b9, + 0x2192: 0x98dd, 0x2193: 0x98fd, 0x2194: 0x991d, 0x2195: 0x35c1, 0x2196: 0x35c9, 0x2197: 0x35d1, + 0x2198: 0x35d9, 0x2199: 0x35e1, 0x219a: 0x35e9, 0x219b: 0x35f1, 0x219c: 0x35f9, 0x219d: 0x993d, + 0x219e: 0x0040, 0x219f: 0x0040, 0x21a0: 0x0040, 0x21a1: 0x0040, 0x21a2: 0x0040, 0x21a3: 0x0040, + 0x21a4: 0x0040, 0x21a5: 0x0040, 0x21a6: 0x0040, 0x21a7: 0x0040, 0x21a8: 0x0040, 0x21a9: 0x0040, + 0x21aa: 0x0040, 0x21ab: 0x0040, 0x21ac: 0x0040, 0x21ad: 0x0040, 0x21ae: 0x0040, 0x21af: 0x0040, + 0x21b0: 0x0040, 0x21b1: 0x0040, 0x21b2: 0x0040, 0x21b3: 0x0040, 0x21b4: 0x0040, 0x21b5: 0x0040, + 0x21b6: 0x0040, 0x21b7: 0x0040, 0x21b8: 0x0040, 0x21b9: 0x0040, 0x21ba: 0x0040, 0x21bb: 0x0040, + 0x21bc: 0x0040, 0x21bd: 0x0040, 0x21be: 0x0040, 0x21bf: 0x0040, +} + +// idnaIndex: 39 blocks, 2496 entries, 4992 bytes +// Block 0 is the zero block. +var idnaIndex = [2496]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x85, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x86, 0xca: 0x87, 0xcb: 0x07, 0xcc: 0x88, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x89, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x8a, 0xd6: 0x8b, 0xd7: 0x8c, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x8d, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x8e, 0xde: 0x8f, 0xdf: 0x90, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x07, 0xea: 0x08, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x09, 0xee: 0x0a, 0xef: 0x0b, + 0xf0: 0x20, 0xf1: 0x21, 0xf2: 0x21, 0xf3: 0x23, 0xf4: 0x24, + // Block 0x4, offset 0x100 + 0x120: 0x91, 0x121: 0x13, 0x122: 0x14, 0x123: 0x92, 0x124: 0x93, 0x125: 0x15, 0x126: 0x16, 0x127: 0x17, + 0x128: 0x18, 0x129: 0x19, 0x12a: 0x1a, 0x12b: 0x1b, 0x12c: 0x1c, 0x12d: 0x1d, 0x12e: 0x1e, 0x12f: 0x94, + 0x130: 0x95, 0x131: 0x1f, 0x132: 0x20, 0x133: 0x21, 0x134: 0x96, 0x135: 0x22, 0x136: 0x97, 0x137: 0x98, + 0x138: 0x99, 0x139: 0x9a, 0x13a: 0x23, 0x13b: 0x9b, 0x13c: 0x9c, 0x13d: 0x24, 0x13e: 0x25, 0x13f: 0x9d, + // Block 0x5, offset 0x140 + 0x140: 0x9e, 0x141: 0x9f, 0x142: 0xa0, 0x143: 0xa1, 0x144: 0xa2, 0x145: 0xa3, 0x146: 0xa4, 0x147: 0xa5, + 0x148: 0xa6, 0x149: 0xa7, 0x14a: 0xa8, 0x14b: 0xa9, 0x14c: 0xaa, 0x14d: 0xab, 0x14e: 0xac, 0x14f: 0xad, + 0x150: 0xae, 0x151: 0xa6, 0x152: 0xa6, 0x153: 0xa6, 0x154: 0xa6, 0x155: 0xa6, 0x156: 0xa6, 0x157: 0xa6, + 0x158: 0xa6, 0x159: 0xaf, 0x15a: 0xb0, 0x15b: 0xb1, 0x15c: 0xb2, 0x15d: 0xb3, 0x15e: 0xb4, 0x15f: 0xb5, + 0x160: 0xb6, 0x161: 0xb7, 0x162: 0xb8, 0x163: 0xb9, 0x164: 0xba, 0x165: 0xbb, 0x166: 0xbc, 0x167: 0xbd, + 0x168: 0xbe, 0x169: 0xbf, 0x16a: 0xc0, 0x16b: 0xc1, 0x16c: 0xc2, 0x16d: 0xc3, 0x16e: 0xc4, 0x16f: 0xc5, + 0x170: 0xc6, 0x171: 0xc7, 0x172: 0xc8, 0x173: 0xc9, 0x174: 0x26, 0x175: 0x27, 0x176: 0x28, 0x177: 0x88, + 0x178: 0x29, 0x179: 0x29, 0x17a: 0x2a, 0x17b: 0x29, 0x17c: 0xca, 0x17d: 0x2b, 0x17e: 0x2c, 0x17f: 0x2d, + // Block 0x6, offset 0x180 + 0x180: 0x2e, 0x181: 0x2f, 0x182: 0x30, 0x183: 0xcb, 0x184: 0x31, 0x185: 0x32, 0x186: 0xcc, 0x187: 0xa2, + 0x188: 0xcd, 0x189: 0xce, 0x18a: 0xa2, 0x18b: 0xa2, 0x18c: 0xcf, 0x18d: 0xa2, 0x18e: 0xa2, 0x18f: 0xa2, + 0x190: 0xd0, 0x191: 0x33, 0x192: 0x34, 0x193: 0x35, 0x194: 0xa2, 0x195: 0xa2, 0x196: 0xa2, 0x197: 0xa2, + 0x198: 0xa2, 0x199: 0xa2, 0x19a: 0xa2, 0x19b: 0xa2, 0x19c: 0xa2, 0x19d: 0xa2, 0x19e: 0xa2, 0x19f: 0xa2, + 0x1a0: 0xa2, 0x1a1: 0xa2, 0x1a2: 0xa2, 0x1a3: 0xa2, 0x1a4: 0xa2, 0x1a5: 0xa2, 0x1a6: 0xa2, 0x1a7: 0xa2, + 0x1a8: 0xd1, 0x1a9: 0xd2, 0x1aa: 0xa2, 0x1ab: 0xd3, 0x1ac: 0xa2, 0x1ad: 0xd4, 0x1ae: 0xd5, 0x1af: 0xa2, + 0x1b0: 0xd6, 0x1b1: 0x36, 0x1b2: 0x29, 0x1b3: 0x37, 0x1b4: 0xd7, 0x1b5: 0xd8, 0x1b6: 0xd9, 0x1b7: 0xda, + 0x1b8: 0xdb, 0x1b9: 0xdc, 0x1ba: 0xdd, 0x1bb: 0xde, 0x1bc: 0xdf, 0x1bd: 0xe0, 0x1be: 0xe1, 0x1bf: 0x38, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x39, 0x1c1: 0xe2, 0x1c2: 0xe3, 0x1c3: 0xe4, 0x1c4: 0xe5, 0x1c5: 0x3a, 0x1c6: 0x3b, 0x1c7: 0xe6, + 0x1c8: 0xe7, 0x1c9: 0x3c, 0x1ca: 0x3d, 0x1cb: 0x3e, 0x1cc: 0xe8, 0x1cd: 0xe9, 0x1ce: 0x3f, 0x1cf: 0x40, + 0x1d0: 0xa6, 0x1d1: 0xa6, 0x1d2: 0xa6, 0x1d3: 0xa6, 0x1d4: 0xa6, 0x1d5: 0xa6, 0x1d6: 0xa6, 0x1d7: 0xa6, + 0x1d8: 0xa6, 0x1d9: 0xa6, 0x1da: 0xa6, 0x1db: 0xa6, 0x1dc: 0xa6, 0x1dd: 0xa6, 0x1de: 0xa6, 0x1df: 0xa6, + 0x1e0: 0xa6, 0x1e1: 0xa6, 0x1e2: 0xa6, 0x1e3: 0xa6, 0x1e4: 0xa6, 0x1e5: 0xa6, 0x1e6: 0xa6, 0x1e7: 0xa6, + 0x1e8: 0xa6, 0x1e9: 0xa6, 0x1ea: 0xa6, 0x1eb: 0xa6, 0x1ec: 0xa6, 0x1ed: 0xa6, 0x1ee: 0xa6, 0x1ef: 0xa6, + 0x1f0: 0xa6, 0x1f1: 0xa6, 0x1f2: 0xa6, 0x1f3: 0xa6, 0x1f4: 0xa6, 0x1f5: 0xa6, 0x1f6: 0xa6, 0x1f7: 0xa6, + 0x1f8: 0xa6, 0x1f9: 0xa6, 0x1fa: 0xa6, 0x1fb: 0xa6, 0x1fc: 0xa6, 0x1fd: 0xa6, 0x1fe: 0xa6, 0x1ff: 0xa6, + // Block 0x8, offset 0x200 + 0x200: 0xa6, 0x201: 0xa6, 0x202: 0xa6, 0x203: 0xa6, 0x204: 0xa6, 0x205: 0xa6, 0x206: 0xa6, 0x207: 0xa6, + 0x208: 0xa6, 0x209: 0xa6, 0x20a: 0xa6, 0x20b: 0xa6, 0x20c: 0xa6, 0x20d: 0xa6, 0x20e: 0xa6, 0x20f: 0xa6, + 0x210: 0xa6, 0x211: 0xa6, 0x212: 0xa6, 0x213: 0xa6, 0x214: 0xa6, 0x215: 0xa6, 0x216: 0xa6, 0x217: 0xa6, + 0x218: 0xa6, 0x219: 0xa6, 0x21a: 0xa6, 0x21b: 0xa6, 0x21c: 0xa6, 0x21d: 0xa6, 0x21e: 0xa6, 0x21f: 0xa6, + 0x220: 0xa6, 0x221: 0xa6, 0x222: 0xa6, 0x223: 0xa6, 0x224: 0xa6, 0x225: 0xa6, 0x226: 0xa6, 0x227: 0xa6, + 0x228: 0xa6, 0x229: 0xa6, 0x22a: 0xa6, 0x22b: 0xa6, 0x22c: 0xa6, 0x22d: 0xa6, 0x22e: 0xa6, 0x22f: 0xa6, + 0x230: 0xa6, 0x231: 0xa6, 0x232: 0xa6, 0x233: 0xa6, 0x234: 0xa6, 0x235: 0xa6, 0x236: 0xa6, 0x237: 0xa2, + 0x238: 0xa6, 0x239: 0xa6, 0x23a: 0xa6, 0x23b: 0xa6, 0x23c: 0xa6, 0x23d: 0xa6, 0x23e: 0xa6, 0x23f: 0xa6, + // Block 0x9, offset 0x240 + 0x240: 0xa6, 0x241: 0xa6, 0x242: 0xa6, 0x243: 0xa6, 0x244: 0xa6, 0x245: 0xa6, 0x246: 0xa6, 0x247: 0xa6, + 0x248: 0xa6, 0x249: 0xa6, 0x24a: 0xa6, 0x24b: 0xa6, 0x24c: 0xa6, 0x24d: 0xa6, 0x24e: 0xa6, 0x24f: 0xa6, + 0x250: 0xa6, 0x251: 0xa6, 0x252: 0xa6, 0x253: 0xa6, 0x254: 0xa6, 0x255: 0xa6, 0x256: 0xa6, 0x257: 0xa6, + 0x258: 0xa6, 0x259: 0xa6, 0x25a: 0xa6, 0x25b: 0xa6, 0x25c: 0xa6, 0x25d: 0xa6, 0x25e: 0xa6, 0x25f: 0xa6, + 0x260: 0xa6, 0x261: 0xa6, 0x262: 0xa6, 0x263: 0xa6, 0x264: 0xa6, 0x265: 0xa6, 0x266: 0xa6, 0x267: 0xa6, + 0x268: 0xa6, 0x269: 0xa6, 0x26a: 0xa6, 0x26b: 0xa6, 0x26c: 0xa6, 0x26d: 0xa6, 0x26e: 0xa6, 0x26f: 0xa6, + 0x270: 0xa6, 0x271: 0xa6, 0x272: 0xa6, 0x273: 0xa6, 0x274: 0xa6, 0x275: 0xa6, 0x276: 0xa6, 0x277: 0xa6, + 0x278: 0xa6, 0x279: 0xa6, 0x27a: 0xa6, 0x27b: 0xa6, 0x27c: 0xa6, 0x27d: 0xa6, 0x27e: 0xa6, 0x27f: 0xa6, + // Block 0xa, offset 0x280 + 0x280: 0xa6, 0x281: 0xa6, 0x282: 0xa6, 0x283: 0xa6, 0x284: 0xa6, 0x285: 0xa6, 0x286: 0xa6, 0x287: 0xa6, + 0x288: 0xa6, 0x289: 0xa6, 0x28a: 0xa6, 0x28b: 0xa6, 0x28c: 0xa6, 0x28d: 0xa6, 0x28e: 0xa6, 0x28f: 0xa6, + 0x290: 0xa6, 0x291: 0xa6, 0x292: 0xea, 0x293: 0xeb, 0x294: 0xa6, 0x295: 0xa6, 0x296: 0xa6, 0x297: 0xa6, + 0x298: 0xec, 0x299: 0x41, 0x29a: 0x42, 0x29b: 0xed, 0x29c: 0x43, 0x29d: 0x44, 0x29e: 0x45, 0x29f: 0x46, + 0x2a0: 0xee, 0x2a1: 0xef, 0x2a2: 0xf0, 0x2a3: 0xf1, 0x2a4: 0xf2, 0x2a5: 0xf3, 0x2a6: 0xf4, 0x2a7: 0xf5, + 0x2a8: 0xf6, 0x2a9: 0xf7, 0x2aa: 0xf8, 0x2ab: 0xf9, 0x2ac: 0xfa, 0x2ad: 0xfb, 0x2ae: 0xfc, 0x2af: 0xfd, + 0x2b0: 0xa6, 0x2b1: 0xa6, 0x2b2: 0xa6, 0x2b3: 0xa6, 0x2b4: 0xa6, 0x2b5: 0xa6, 0x2b6: 0xa6, 0x2b7: 0xa6, + 0x2b8: 0xa6, 0x2b9: 0xa6, 0x2ba: 0xa6, 0x2bb: 0xa6, 0x2bc: 0xa6, 0x2bd: 0xa6, 0x2be: 0xa6, 0x2bf: 0xa6, + // Block 0xb, offset 0x2c0 + 0x2c0: 0xa6, 0x2c1: 0xa6, 0x2c2: 0xa6, 0x2c3: 0xa6, 0x2c4: 0xa6, 0x2c5: 0xa6, 0x2c6: 0xa6, 0x2c7: 0xa6, + 0x2c8: 0xa6, 0x2c9: 0xa6, 0x2ca: 0xa6, 0x2cb: 0xa6, 0x2cc: 0xa6, 0x2cd: 0xa6, 0x2ce: 0xa6, 0x2cf: 0xa6, + 0x2d0: 0xa6, 0x2d1: 0xa6, 0x2d2: 0xa6, 0x2d3: 0xa6, 0x2d4: 0xa6, 0x2d5: 0xa6, 0x2d6: 0xa6, 0x2d7: 0xa6, + 0x2d8: 0xa6, 0x2d9: 0xa6, 0x2da: 0xa6, 0x2db: 0xa6, 0x2dc: 0xa6, 0x2dd: 0xa6, 0x2de: 0xfe, 0x2df: 0xff, + // Block 0xc, offset 0x300 + 0x300: 0x100, 0x301: 0x100, 0x302: 0x100, 0x303: 0x100, 0x304: 0x100, 0x305: 0x100, 0x306: 0x100, 0x307: 0x100, + 0x308: 0x100, 0x309: 0x100, 0x30a: 0x100, 0x30b: 0x100, 0x30c: 0x100, 0x30d: 0x100, 0x30e: 0x100, 0x30f: 0x100, + 0x310: 0x100, 0x311: 0x100, 0x312: 0x100, 0x313: 0x100, 0x314: 0x100, 0x315: 0x100, 0x316: 0x100, 0x317: 0x100, + 0x318: 0x100, 0x319: 0x100, 0x31a: 0x100, 0x31b: 0x100, 0x31c: 0x100, 0x31d: 0x100, 0x31e: 0x100, 0x31f: 0x100, + 0x320: 0x100, 0x321: 0x100, 0x322: 0x100, 0x323: 0x100, 0x324: 0x100, 0x325: 0x100, 0x326: 0x100, 0x327: 0x100, + 0x328: 0x100, 0x329: 0x100, 0x32a: 0x100, 0x32b: 0x100, 0x32c: 0x100, 0x32d: 0x100, 0x32e: 0x100, 0x32f: 0x100, + 0x330: 0x100, 0x331: 0x100, 0x332: 0x100, 0x333: 0x100, 0x334: 0x100, 0x335: 0x100, 0x336: 0x100, 0x337: 0x100, + 0x338: 0x100, 0x339: 0x100, 0x33a: 0x100, 0x33b: 0x100, 0x33c: 0x100, 0x33d: 0x100, 0x33e: 0x100, 0x33f: 0x100, + // Block 0xd, offset 0x340 + 0x340: 0x100, 0x341: 0x100, 0x342: 0x100, 0x343: 0x100, 0x344: 0x100, 0x345: 0x100, 0x346: 0x100, 0x347: 0x100, + 0x348: 0x100, 0x349: 0x100, 0x34a: 0x100, 0x34b: 0x100, 0x34c: 0x100, 0x34d: 0x100, 0x34e: 0x100, 0x34f: 0x100, + 0x350: 0x100, 0x351: 0x100, 0x352: 0x100, 0x353: 0x100, 0x354: 0x100, 0x355: 0x100, 0x356: 0x100, 0x357: 0x100, + 0x358: 0x100, 0x359: 0x100, 0x35a: 0x100, 0x35b: 0x100, 0x35c: 0x100, 0x35d: 0x100, 0x35e: 0x100, 0x35f: 0x100, + 0x360: 0x100, 0x361: 0x100, 0x362: 0x100, 0x363: 0x100, 0x364: 0x101, 0x365: 0x102, 0x366: 0x103, 0x367: 0x104, + 0x368: 0x47, 0x369: 0x105, 0x36a: 0x106, 0x36b: 0x48, 0x36c: 0x49, 0x36d: 0x4a, 0x36e: 0x4b, 0x36f: 0x4c, + 0x370: 0x107, 0x371: 0x4d, 0x372: 0x4e, 0x373: 0x4f, 0x374: 0x50, 0x375: 0x51, 0x376: 0x108, 0x377: 0x52, + 0x378: 0x53, 0x379: 0x54, 0x37a: 0x55, 0x37b: 0x56, 0x37c: 0x57, 0x37d: 0x58, 0x37e: 0x59, 0x37f: 0x5a, + // Block 0xe, offset 0x380 + 0x380: 0x109, 0x381: 0x10a, 0x382: 0xa6, 0x383: 0x10b, 0x384: 0x10c, 0x385: 0xa2, 0x386: 0x10d, 0x387: 0x10e, + 0x388: 0x100, 0x389: 0x100, 0x38a: 0x10f, 0x38b: 0x110, 0x38c: 0x111, 0x38d: 0x112, 0x38e: 0x113, 0x38f: 0x114, + 0x390: 0x115, 0x391: 0xa6, 0x392: 0x116, 0x393: 0x117, 0x394: 0x118, 0x395: 0x5b, 0x396: 0x5c, 0x397: 0x100, + 0x398: 0xa6, 0x399: 0xa6, 0x39a: 0xa6, 0x39b: 0xa6, 0x39c: 0x119, 0x39d: 0x11a, 0x39e: 0x5d, 0x39f: 0x100, + 0x3a0: 0x11b, 0x3a1: 0x11c, 0x3a2: 0x11d, 0x3a3: 0x11e, 0x3a4: 0x11f, 0x3a5: 0x100, 0x3a6: 0x120, 0x3a7: 0x121, + 0x3a8: 0x122, 0x3a9: 0x123, 0x3aa: 0x124, 0x3ab: 0x5e, 0x3ac: 0x125, 0x3ad: 0x126, 0x3ae: 0x5f, 0x3af: 0x100, + 0x3b0: 0x127, 0x3b1: 0x128, 0x3b2: 0x129, 0x3b3: 0x12a, 0x3b4: 0x12b, 0x3b5: 0x100, 0x3b6: 0x100, 0x3b7: 0x100, + 0x3b8: 0x100, 0x3b9: 0x12c, 0x3ba: 0x12d, 0x3bb: 0x12e, 0x3bc: 0x12f, 0x3bd: 0x130, 0x3be: 0x131, 0x3bf: 0x132, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x133, 0x3c1: 0x134, 0x3c2: 0x135, 0x3c3: 0x136, 0x3c4: 0x137, 0x3c5: 0x138, 0x3c6: 0x139, 0x3c7: 0x13a, + 0x3c8: 0x13b, 0x3c9: 0x13c, 0x3ca: 0x13d, 0x3cb: 0x13e, 0x3cc: 0x60, 0x3cd: 0x61, 0x3ce: 0x100, 0x3cf: 0x100, + 0x3d0: 0x13f, 0x3d1: 0x140, 0x3d2: 0x141, 0x3d3: 0x142, 0x3d4: 0x100, 0x3d5: 0x100, 0x3d6: 0x143, 0x3d7: 0x144, + 0x3d8: 0x145, 0x3d9: 0x146, 0x3da: 0x147, 0x3db: 0x148, 0x3dc: 0x149, 0x3dd: 0x14a, 0x3de: 0x100, 0x3df: 0x100, + 0x3e0: 0x14b, 0x3e1: 0x100, 0x3e2: 0x14c, 0x3e3: 0x14d, 0x3e4: 0x62, 0x3e5: 0x14e, 0x3e6: 0x14f, 0x3e7: 0x150, + 0x3e8: 0x151, 0x3e9: 0x152, 0x3ea: 0x153, 0x3eb: 0x154, 0x3ec: 0x155, 0x3ed: 0x100, 0x3ee: 0x100, 0x3ef: 0x100, + 0x3f0: 0x156, 0x3f1: 0x157, 0x3f2: 0x158, 0x3f3: 0x100, 0x3f4: 0x159, 0x3f5: 0x15a, 0x3f6: 0x15b, 0x3f7: 0x100, + 0x3f8: 0x100, 0x3f9: 0x100, 0x3fa: 0x100, 0x3fb: 0x15c, 0x3fc: 0x15d, 0x3fd: 0x15e, 0x3fe: 0x15f, 0x3ff: 0x160, + // Block 0x10, offset 0x400 + 0x400: 0xa6, 0x401: 0xa6, 0x402: 0xa6, 0x403: 0xa6, 0x404: 0xa6, 0x405: 0xa6, 0x406: 0xa6, 0x407: 0xa6, + 0x408: 0xa6, 0x409: 0xa6, 0x40a: 0xa6, 0x40b: 0xa6, 0x40c: 0xa6, 0x40d: 0xa6, 0x40e: 0x161, 0x40f: 0x100, + 0x410: 0xa2, 0x411: 0x162, 0x412: 0xa6, 0x413: 0xa6, 0x414: 0xa6, 0x415: 0x163, 0x416: 0x100, 0x417: 0x100, + 0x418: 0x100, 0x419: 0x100, 0x41a: 0x100, 0x41b: 0x100, 0x41c: 0x100, 0x41d: 0x100, 0x41e: 0x100, 0x41f: 0x100, + 0x420: 0x100, 0x421: 0x100, 0x422: 0x100, 0x423: 0x100, 0x424: 0x100, 0x425: 0x100, 0x426: 0x100, 0x427: 0x100, + 0x428: 0x100, 0x429: 0x100, 0x42a: 0x100, 0x42b: 0x100, 0x42c: 0x100, 0x42d: 0x100, 0x42e: 0x100, 0x42f: 0x100, + 0x430: 0x100, 0x431: 0x100, 0x432: 0x100, 0x433: 0x100, 0x434: 0x100, 0x435: 0x100, 0x436: 0x100, 0x437: 0x100, + 0x438: 0x100, 0x439: 0x100, 0x43a: 0x100, 0x43b: 0x100, 0x43c: 0x100, 0x43d: 0x100, 0x43e: 0x164, 0x43f: 0x165, + // Block 0x11, offset 0x440 + 0x440: 0xa6, 0x441: 0xa6, 0x442: 0xa6, 0x443: 0xa6, 0x444: 0xa6, 0x445: 0xa6, 0x446: 0xa6, 0x447: 0xa6, + 0x448: 0xa6, 0x449: 0xa6, 0x44a: 0xa6, 0x44b: 0xa6, 0x44c: 0xa6, 0x44d: 0xa6, 0x44e: 0xa6, 0x44f: 0xa6, + 0x450: 0x166, 0x451: 0x167, 0x452: 0x100, 0x453: 0x100, 0x454: 0x100, 0x455: 0x100, 0x456: 0x100, 0x457: 0x100, + 0x458: 0x100, 0x459: 0x100, 0x45a: 0x100, 0x45b: 0x100, 0x45c: 0x100, 0x45d: 0x100, 0x45e: 0x100, 0x45f: 0x100, + 0x460: 0x100, 0x461: 0x100, 0x462: 0x100, 0x463: 0x100, 0x464: 0x100, 0x465: 0x100, 0x466: 0x100, 0x467: 0x100, + 0x468: 0x100, 0x469: 0x100, 0x46a: 0x100, 0x46b: 0x100, 0x46c: 0x100, 0x46d: 0x100, 0x46e: 0x100, 0x46f: 0x100, + 0x470: 0x100, 0x471: 0x100, 0x472: 0x100, 0x473: 0x100, 0x474: 0x100, 0x475: 0x100, 0x476: 0x100, 0x477: 0x100, + 0x478: 0x100, 0x479: 0x100, 0x47a: 0x100, 0x47b: 0x100, 0x47c: 0x100, 0x47d: 0x100, 0x47e: 0x100, 0x47f: 0x100, + // Block 0x12, offset 0x480 + 0x480: 0x100, 0x481: 0x100, 0x482: 0x100, 0x483: 0x100, 0x484: 0x100, 0x485: 0x100, 0x486: 0x100, 0x487: 0x100, + 0x488: 0x100, 0x489: 0x100, 0x48a: 0x100, 0x48b: 0x100, 0x48c: 0x100, 0x48d: 0x100, 0x48e: 0x100, 0x48f: 0x100, + 0x490: 0xa6, 0x491: 0xa6, 0x492: 0xa6, 0x493: 0xa6, 0x494: 0xa6, 0x495: 0xa6, 0x496: 0xa6, 0x497: 0xa6, + 0x498: 0xa6, 0x499: 0x14a, 0x49a: 0x100, 0x49b: 0x100, 0x49c: 0x100, 0x49d: 0x100, 0x49e: 0x100, 0x49f: 0x100, + 0x4a0: 0x100, 0x4a1: 0x100, 0x4a2: 0x100, 0x4a3: 0x100, 0x4a4: 0x100, 0x4a5: 0x100, 0x4a6: 0x100, 0x4a7: 0x100, + 0x4a8: 0x100, 0x4a9: 0x100, 0x4aa: 0x100, 0x4ab: 0x100, 0x4ac: 0x100, 0x4ad: 0x100, 0x4ae: 0x100, 0x4af: 0x100, + 0x4b0: 0x100, 0x4b1: 0x100, 0x4b2: 0x100, 0x4b3: 0x100, 0x4b4: 0x100, 0x4b5: 0x100, 0x4b6: 0x100, 0x4b7: 0x100, + 0x4b8: 0x100, 0x4b9: 0x100, 0x4ba: 0x100, 0x4bb: 0x100, 0x4bc: 0x100, 0x4bd: 0x100, 0x4be: 0x100, 0x4bf: 0x100, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x100, 0x4c1: 0x100, 0x4c2: 0x100, 0x4c3: 0x100, 0x4c4: 0x100, 0x4c5: 0x100, 0x4c6: 0x100, 0x4c7: 0x100, + 0x4c8: 0x100, 0x4c9: 0x100, 0x4ca: 0x100, 0x4cb: 0x100, 0x4cc: 0x100, 0x4cd: 0x100, 0x4ce: 0x100, 0x4cf: 0x100, + 0x4d0: 0x100, 0x4d1: 0x100, 0x4d2: 0x100, 0x4d3: 0x100, 0x4d4: 0x100, 0x4d5: 0x100, 0x4d6: 0x100, 0x4d7: 0x100, + 0x4d8: 0x100, 0x4d9: 0x100, 0x4da: 0x100, 0x4db: 0x100, 0x4dc: 0x100, 0x4dd: 0x100, 0x4de: 0x100, 0x4df: 0x100, + 0x4e0: 0xa6, 0x4e1: 0xa6, 0x4e2: 0xa6, 0x4e3: 0xa6, 0x4e4: 0xa6, 0x4e5: 0xa6, 0x4e6: 0xa6, 0x4e7: 0xa6, + 0x4e8: 0x154, 0x4e9: 0x168, 0x4ea: 0x169, 0x4eb: 0x16a, 0x4ec: 0x16b, 0x4ed: 0x16c, 0x4ee: 0x16d, 0x4ef: 0x100, + 0x4f0: 0x100, 0x4f1: 0x100, 0x4f2: 0x100, 0x4f3: 0x100, 0x4f4: 0x100, 0x4f5: 0x100, 0x4f6: 0x100, 0x4f7: 0x100, + 0x4f8: 0x100, 0x4f9: 0x16e, 0x4fa: 0x16f, 0x4fb: 0x100, 0x4fc: 0xa6, 0x4fd: 0x170, 0x4fe: 0x171, 0x4ff: 0x172, + // Block 0x14, offset 0x500 + 0x500: 0xa6, 0x501: 0xa6, 0x502: 0xa6, 0x503: 0xa6, 0x504: 0xa6, 0x505: 0xa6, 0x506: 0xa6, 0x507: 0xa6, + 0x508: 0xa6, 0x509: 0xa6, 0x50a: 0xa6, 0x50b: 0xa6, 0x50c: 0xa6, 0x50d: 0xa6, 0x50e: 0xa6, 0x50f: 0xa6, + 0x510: 0xa6, 0x511: 0xa6, 0x512: 0xa6, 0x513: 0xa6, 0x514: 0xa6, 0x515: 0xa6, 0x516: 0xa6, 0x517: 0xa6, + 0x518: 0xa6, 0x519: 0xa6, 0x51a: 0xa6, 0x51b: 0xa6, 0x51c: 0xa6, 0x51d: 0xa6, 0x51e: 0xa6, 0x51f: 0x173, + 0x520: 0xa6, 0x521: 0xa6, 0x522: 0xa6, 0x523: 0xa6, 0x524: 0xa6, 0x525: 0xa6, 0x526: 0xa6, 0x527: 0xa6, + 0x528: 0xa6, 0x529: 0xa6, 0x52a: 0xa6, 0x52b: 0xa6, 0x52c: 0xa6, 0x52d: 0xa6, 0x52e: 0xa6, 0x52f: 0xa6, + 0x530: 0xa6, 0x531: 0xa6, 0x532: 0xa6, 0x533: 0x174, 0x534: 0x175, 0x535: 0x100, 0x536: 0x100, 0x537: 0x100, + 0x538: 0x100, 0x539: 0x100, 0x53a: 0x100, 0x53b: 0x100, 0x53c: 0x100, 0x53d: 0x100, 0x53e: 0x100, 0x53f: 0x100, + // Block 0x15, offset 0x540 + 0x540: 0x100, 0x541: 0x100, 0x542: 0x100, 0x543: 0x100, 0x544: 0x100, 0x545: 0x100, 0x546: 0x100, 0x547: 0x100, + 0x548: 0x100, 0x549: 0x100, 0x54a: 0x100, 0x54b: 0x100, 0x54c: 0x100, 0x54d: 0x100, 0x54e: 0x100, 0x54f: 0x100, + 0x550: 0x100, 0x551: 0x100, 0x552: 0x100, 0x553: 0x100, 0x554: 0x100, 0x555: 0x100, 0x556: 0x100, 0x557: 0x100, + 0x558: 0x100, 0x559: 0x100, 0x55a: 0x100, 0x55b: 0x100, 0x55c: 0x100, 0x55d: 0x100, 0x55e: 0x100, 0x55f: 0x100, + 0x560: 0x100, 0x561: 0x100, 0x562: 0x100, 0x563: 0x100, 0x564: 0x100, 0x565: 0x100, 0x566: 0x100, 0x567: 0x100, + 0x568: 0x100, 0x569: 0x100, 0x56a: 0x100, 0x56b: 0x100, 0x56c: 0x100, 0x56d: 0x100, 0x56e: 0x100, 0x56f: 0x100, + 0x570: 0x100, 0x571: 0x100, 0x572: 0x100, 0x573: 0x100, 0x574: 0x100, 0x575: 0x100, 0x576: 0x100, 0x577: 0x100, + 0x578: 0x100, 0x579: 0x100, 0x57a: 0x100, 0x57b: 0x100, 0x57c: 0x100, 0x57d: 0x100, 0x57e: 0x100, 0x57f: 0x176, + // Block 0x16, offset 0x580 + 0x580: 0xa6, 0x581: 0xa6, 0x582: 0xa6, 0x583: 0xa6, 0x584: 0x177, 0x585: 0x178, 0x586: 0xa6, 0x587: 0xa6, + 0x588: 0xa6, 0x589: 0xa6, 0x58a: 0xa6, 0x58b: 0x179, 0x58c: 0x100, 0x58d: 0x100, 0x58e: 0x100, 0x58f: 0x100, + 0x590: 0x100, 0x591: 0x100, 0x592: 0x100, 0x593: 0x100, 0x594: 0x100, 0x595: 0x100, 0x596: 0x100, 0x597: 0x100, + 0x598: 0x100, 0x599: 0x100, 0x59a: 0x100, 0x59b: 0x100, 0x59c: 0x100, 0x59d: 0x100, 0x59e: 0x100, 0x59f: 0x100, + 0x5a0: 0x100, 0x5a1: 0x100, 0x5a2: 0x100, 0x5a3: 0x100, 0x5a4: 0x100, 0x5a5: 0x100, 0x5a6: 0x100, 0x5a7: 0x100, + 0x5a8: 0x100, 0x5a9: 0x100, 0x5aa: 0x100, 0x5ab: 0x100, 0x5ac: 0x100, 0x5ad: 0x100, 0x5ae: 0x100, 0x5af: 0x100, + 0x5b0: 0xa6, 0x5b1: 0x17a, 0x5b2: 0x17b, 0x5b3: 0x100, 0x5b4: 0x100, 0x5b5: 0x100, 0x5b6: 0x100, 0x5b7: 0x100, + 0x5b8: 0x100, 0x5b9: 0x100, 0x5ba: 0x100, 0x5bb: 0x100, 0x5bc: 0x100, 0x5bd: 0x100, 0x5be: 0x100, 0x5bf: 0x100, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x100, 0x5c1: 0x100, 0x5c2: 0x100, 0x5c3: 0x100, 0x5c4: 0x100, 0x5c5: 0x100, 0x5c6: 0x100, 0x5c7: 0x100, + 0x5c8: 0x100, 0x5c9: 0x100, 0x5ca: 0x100, 0x5cb: 0x100, 0x5cc: 0x100, 0x5cd: 0x100, 0x5ce: 0x100, 0x5cf: 0x100, + 0x5d0: 0x100, 0x5d1: 0x100, 0x5d2: 0x100, 0x5d3: 0x100, 0x5d4: 0x100, 0x5d5: 0x100, 0x5d6: 0x100, 0x5d7: 0x100, + 0x5d8: 0x100, 0x5d9: 0x100, 0x5da: 0x100, 0x5db: 0x100, 0x5dc: 0x100, 0x5dd: 0x100, 0x5de: 0x100, 0x5df: 0x100, + 0x5e0: 0x100, 0x5e1: 0x100, 0x5e2: 0x100, 0x5e3: 0x100, 0x5e4: 0x100, 0x5e5: 0x100, 0x5e6: 0x100, 0x5e7: 0x100, + 0x5e8: 0x100, 0x5e9: 0x100, 0x5ea: 0x100, 0x5eb: 0x100, 0x5ec: 0x100, 0x5ed: 0x100, 0x5ee: 0x100, 0x5ef: 0x100, + 0x5f0: 0x100, 0x5f1: 0x100, 0x5f2: 0x100, 0x5f3: 0x100, 0x5f4: 0x100, 0x5f5: 0x100, 0x5f6: 0x100, 0x5f7: 0x100, + 0x5f8: 0x100, 0x5f9: 0x100, 0x5fa: 0x100, 0x5fb: 0x100, 0x5fc: 0x17c, 0x5fd: 0x17d, 0x5fe: 0xa2, 0x5ff: 0x17e, + // Block 0x18, offset 0x600 + 0x600: 0xa2, 0x601: 0xa2, 0x602: 0xa2, 0x603: 0x17f, 0x604: 0x180, 0x605: 0x181, 0x606: 0x182, 0x607: 0x183, + 0x608: 0xa2, 0x609: 0x184, 0x60a: 0x100, 0x60b: 0x185, 0x60c: 0xa2, 0x60d: 0x186, 0x60e: 0x100, 0x60f: 0x100, + 0x610: 0x63, 0x611: 0x64, 0x612: 0x65, 0x613: 0x66, 0x614: 0x67, 0x615: 0x68, 0x616: 0x69, 0x617: 0x6a, + 0x618: 0x6b, 0x619: 0x6c, 0x61a: 0x6d, 0x61b: 0x6e, 0x61c: 0x6f, 0x61d: 0x70, 0x61e: 0x71, 0x61f: 0x72, + 0x620: 0xa2, 0x621: 0xa2, 0x622: 0xa2, 0x623: 0xa2, 0x624: 0xa2, 0x625: 0xa2, 0x626: 0xa2, 0x627: 0xa2, + 0x628: 0x187, 0x629: 0x188, 0x62a: 0x189, 0x62b: 0x100, 0x62c: 0x100, 0x62d: 0x100, 0x62e: 0x100, 0x62f: 0x100, + 0x630: 0x100, 0x631: 0x100, 0x632: 0x100, 0x633: 0x100, 0x634: 0x100, 0x635: 0x100, 0x636: 0x100, 0x637: 0x100, + 0x638: 0x100, 0x639: 0x100, 0x63a: 0x100, 0x63b: 0x100, 0x63c: 0x18a, 0x63d: 0x100, 0x63e: 0x100, 0x63f: 0x100, + // Block 0x19, offset 0x640 + 0x640: 0x73, 0x641: 0x74, 0x642: 0x18b, 0x643: 0x100, 0x644: 0x18c, 0x645: 0x18d, 0x646: 0x100, 0x647: 0x100, + 0x648: 0x100, 0x649: 0x100, 0x64a: 0x18e, 0x64b: 0x18f, 0x64c: 0x100, 0x64d: 0x100, 0x64e: 0x100, 0x64f: 0x100, + 0x650: 0x100, 0x651: 0x100, 0x652: 0x100, 0x653: 0x190, 0x654: 0x100, 0x655: 0x100, 0x656: 0x100, 0x657: 0x100, + 0x658: 0x100, 0x659: 0x100, 0x65a: 0x100, 0x65b: 0x100, 0x65c: 0x100, 0x65d: 0x100, 0x65e: 0x100, 0x65f: 0x191, + 0x660: 0x127, 0x661: 0x127, 0x662: 0x127, 0x663: 0x192, 0x664: 0x75, 0x665: 0x193, 0x666: 0x100, 0x667: 0x100, + 0x668: 0x100, 0x669: 0x100, 0x66a: 0x100, 0x66b: 0x100, 0x66c: 0x100, 0x66d: 0x100, 0x66e: 0x100, 0x66f: 0x100, + 0x670: 0x100, 0x671: 0x194, 0x672: 0x195, 0x673: 0x100, 0x674: 0x196, 0x675: 0x100, 0x676: 0x100, 0x677: 0x100, + 0x678: 0x76, 0x679: 0x77, 0x67a: 0x78, 0x67b: 0x197, 0x67c: 0x100, 0x67d: 0x100, 0x67e: 0x100, 0x67f: 0x100, + // Block 0x1a, offset 0x680 + 0x680: 0x198, 0x681: 0xa2, 0x682: 0x199, 0x683: 0x19a, 0x684: 0x79, 0x685: 0x7a, 0x686: 0x19b, 0x687: 0x19c, + 0x688: 0x7b, 0x689: 0x19d, 0x68a: 0x100, 0x68b: 0x100, 0x68c: 0xa2, 0x68d: 0xa2, 0x68e: 0xa2, 0x68f: 0xa2, + 0x690: 0xa2, 0x691: 0xa2, 0x692: 0xa2, 0x693: 0xa2, 0x694: 0xa2, 0x695: 0xa2, 0x696: 0xa2, 0x697: 0xa2, + 0x698: 0xa2, 0x699: 0xa2, 0x69a: 0xa2, 0x69b: 0x19e, 0x69c: 0xa2, 0x69d: 0x19f, 0x69e: 0xa2, 0x69f: 0x1a0, + 0x6a0: 0x1a1, 0x6a1: 0x1a2, 0x6a2: 0x1a3, 0x6a3: 0x100, 0x6a4: 0xa2, 0x6a5: 0xa2, 0x6a6: 0xa2, 0x6a7: 0xa2, + 0x6a8: 0xa2, 0x6a9: 0x1a4, 0x6aa: 0x1a5, 0x6ab: 0x1a6, 0x6ac: 0xa2, 0x6ad: 0xa2, 0x6ae: 0x1a7, 0x6af: 0x1a8, + 0x6b0: 0x100, 0x6b1: 0x100, 0x6b2: 0x100, 0x6b3: 0x100, 0x6b4: 0x100, 0x6b5: 0x100, 0x6b6: 0x100, 0x6b7: 0x100, + 0x6b8: 0x100, 0x6b9: 0x100, 0x6ba: 0x100, 0x6bb: 0x100, 0x6bc: 0x100, 0x6bd: 0x100, 0x6be: 0x100, 0x6bf: 0x100, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0xa6, 0x6c1: 0xa6, 0x6c2: 0xa6, 0x6c3: 0xa6, 0x6c4: 0xa6, 0x6c5: 0xa6, 0x6c6: 0xa6, 0x6c7: 0xa6, + 0x6c8: 0xa6, 0x6c9: 0xa6, 0x6ca: 0xa6, 0x6cb: 0xa6, 0x6cc: 0xa6, 0x6cd: 0xa6, 0x6ce: 0xa6, 0x6cf: 0xa6, + 0x6d0: 0xa6, 0x6d1: 0xa6, 0x6d2: 0xa6, 0x6d3: 0xa6, 0x6d4: 0xa6, 0x6d5: 0xa6, 0x6d6: 0xa6, 0x6d7: 0xa6, + 0x6d8: 0xa6, 0x6d9: 0xa6, 0x6da: 0xa6, 0x6db: 0x1a9, 0x6dc: 0xa6, 0x6dd: 0xa6, 0x6de: 0xa6, 0x6df: 0xa6, + 0x6e0: 0xa6, 0x6e1: 0xa6, 0x6e2: 0xa6, 0x6e3: 0xa6, 0x6e4: 0xa6, 0x6e5: 0xa6, 0x6e6: 0xa6, 0x6e7: 0xa6, + 0x6e8: 0xa6, 0x6e9: 0xa6, 0x6ea: 0xa6, 0x6eb: 0xa6, 0x6ec: 0xa6, 0x6ed: 0xa6, 0x6ee: 0xa6, 0x6ef: 0xa6, + 0x6f0: 0xa6, 0x6f1: 0xa6, 0x6f2: 0xa6, 0x6f3: 0xa6, 0x6f4: 0xa6, 0x6f5: 0xa6, 0x6f6: 0xa6, 0x6f7: 0xa6, + 0x6f8: 0xa6, 0x6f9: 0xa6, 0x6fa: 0xa6, 0x6fb: 0xa6, 0x6fc: 0xa6, 0x6fd: 0xa6, 0x6fe: 0xa6, 0x6ff: 0xa6, + // Block 0x1c, offset 0x700 + 0x700: 0xa6, 0x701: 0xa6, 0x702: 0xa6, 0x703: 0xa6, 0x704: 0xa6, 0x705: 0xa6, 0x706: 0xa6, 0x707: 0xa6, + 0x708: 0xa6, 0x709: 0xa6, 0x70a: 0xa6, 0x70b: 0xa6, 0x70c: 0xa6, 0x70d: 0xa6, 0x70e: 0xa6, 0x70f: 0xa6, + 0x710: 0xa6, 0x711: 0xa6, 0x712: 0xa6, 0x713: 0xa6, 0x714: 0xa6, 0x715: 0xa6, 0x716: 0xa6, 0x717: 0xa6, + 0x718: 0xa6, 0x719: 0xa6, 0x71a: 0xa6, 0x71b: 0xa6, 0x71c: 0x1aa, 0x71d: 0xa6, 0x71e: 0xa6, 0x71f: 0xa6, + 0x720: 0x1ab, 0x721: 0xa6, 0x722: 0xa6, 0x723: 0xa6, 0x724: 0xa6, 0x725: 0xa6, 0x726: 0xa6, 0x727: 0xa6, + 0x728: 0xa6, 0x729: 0xa6, 0x72a: 0xa6, 0x72b: 0xa6, 0x72c: 0xa6, 0x72d: 0xa6, 0x72e: 0xa6, 0x72f: 0xa6, + 0x730: 0xa6, 0x731: 0xa6, 0x732: 0xa6, 0x733: 0xa6, 0x734: 0xa6, 0x735: 0xa6, 0x736: 0xa6, 0x737: 0xa6, + 0x738: 0xa6, 0x739: 0xa6, 0x73a: 0xa6, 0x73b: 0xa6, 0x73c: 0xa6, 0x73d: 0xa6, 0x73e: 0xa6, 0x73f: 0xa6, + // Block 0x1d, offset 0x740 + 0x740: 0xa6, 0x741: 0xa6, 0x742: 0xa6, 0x743: 0xa6, 0x744: 0xa6, 0x745: 0xa6, 0x746: 0xa6, 0x747: 0xa6, + 0x748: 0xa6, 0x749: 0xa6, 0x74a: 0xa6, 0x74b: 0xa6, 0x74c: 0xa6, 0x74d: 0xa6, 0x74e: 0xa6, 0x74f: 0xa6, + 0x750: 0xa6, 0x751: 0xa6, 0x752: 0xa6, 0x753: 0xa6, 0x754: 0xa6, 0x755: 0xa6, 0x756: 0xa6, 0x757: 0xa6, + 0x758: 0xa6, 0x759: 0xa6, 0x75a: 0xa6, 0x75b: 0xa6, 0x75c: 0xa6, 0x75d: 0xa6, 0x75e: 0xa6, 0x75f: 0xa6, + 0x760: 0xa6, 0x761: 0xa6, 0x762: 0xa6, 0x763: 0xa6, 0x764: 0xa6, 0x765: 0xa6, 0x766: 0xa6, 0x767: 0xa6, + 0x768: 0xa6, 0x769: 0xa6, 0x76a: 0xa6, 0x76b: 0xa6, 0x76c: 0xa6, 0x76d: 0xa6, 0x76e: 0xa6, 0x76f: 0xa6, + 0x770: 0xa6, 0x771: 0xa6, 0x772: 0xa6, 0x773: 0xa6, 0x774: 0xa6, 0x775: 0xa6, 0x776: 0xa6, 0x777: 0xa6, + 0x778: 0xa6, 0x779: 0xa6, 0x77a: 0x1ac, 0x77b: 0xa6, 0x77c: 0xa6, 0x77d: 0xa6, 0x77e: 0xa6, 0x77f: 0xa6, + // Block 0x1e, offset 0x780 + 0x780: 0xa6, 0x781: 0xa6, 0x782: 0xa6, 0x783: 0xa6, 0x784: 0xa6, 0x785: 0xa6, 0x786: 0xa6, 0x787: 0xa6, + 0x788: 0xa6, 0x789: 0xa6, 0x78a: 0xa6, 0x78b: 0xa6, 0x78c: 0xa6, 0x78d: 0xa6, 0x78e: 0xa6, 0x78f: 0xa6, + 0x790: 0xa6, 0x791: 0xa6, 0x792: 0xa6, 0x793: 0xa6, 0x794: 0xa6, 0x795: 0xa6, 0x796: 0xa6, 0x797: 0xa6, + 0x798: 0xa6, 0x799: 0xa6, 0x79a: 0xa6, 0x79b: 0xa6, 0x79c: 0xa6, 0x79d: 0xa6, 0x79e: 0xa6, 0x79f: 0xa6, + 0x7a0: 0xa6, 0x7a1: 0xa6, 0x7a2: 0xa6, 0x7a3: 0xa6, 0x7a4: 0xa6, 0x7a5: 0xa6, 0x7a6: 0xa6, 0x7a7: 0xa6, + 0x7a8: 0xa6, 0x7a9: 0xa6, 0x7aa: 0xa6, 0x7ab: 0xa6, 0x7ac: 0xa6, 0x7ad: 0xa6, 0x7ae: 0xa6, 0x7af: 0x1ad, + 0x7b0: 0x100, 0x7b1: 0x100, 0x7b2: 0x100, 0x7b3: 0x100, 0x7b4: 0x100, 0x7b5: 0x100, 0x7b6: 0x100, 0x7b7: 0x100, + 0x7b8: 0x100, 0x7b9: 0x100, 0x7ba: 0x100, 0x7bb: 0x100, 0x7bc: 0x100, 0x7bd: 0x100, 0x7be: 0x100, 0x7bf: 0x100, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x100, 0x7c1: 0x100, 0x7c2: 0x100, 0x7c3: 0x100, 0x7c4: 0x100, 0x7c5: 0x100, 0x7c6: 0x100, 0x7c7: 0x100, + 0x7c8: 0x100, 0x7c9: 0x100, 0x7ca: 0x100, 0x7cb: 0x100, 0x7cc: 0x100, 0x7cd: 0x100, 0x7ce: 0x100, 0x7cf: 0x100, + 0x7d0: 0x100, 0x7d1: 0x100, 0x7d2: 0x100, 0x7d3: 0x100, 0x7d4: 0x100, 0x7d5: 0x100, 0x7d6: 0x100, 0x7d7: 0x100, + 0x7d8: 0x100, 0x7d9: 0x100, 0x7da: 0x100, 0x7db: 0x100, 0x7dc: 0x100, 0x7dd: 0x100, 0x7de: 0x100, 0x7df: 0x100, + 0x7e0: 0x7c, 0x7e1: 0x7d, 0x7e2: 0x7e, 0x7e3: 0x7f, 0x7e4: 0x80, 0x7e5: 0x81, 0x7e6: 0x82, 0x7e7: 0x83, + 0x7e8: 0x84, 0x7e9: 0x100, 0x7ea: 0x100, 0x7eb: 0x100, 0x7ec: 0x100, 0x7ed: 0x100, 0x7ee: 0x100, 0x7ef: 0x100, + 0x7f0: 0x100, 0x7f1: 0x100, 0x7f2: 0x100, 0x7f3: 0x100, 0x7f4: 0x100, 0x7f5: 0x100, 0x7f6: 0x100, 0x7f7: 0x100, + 0x7f8: 0x100, 0x7f9: 0x100, 0x7fa: 0x100, 0x7fb: 0x100, 0x7fc: 0x100, 0x7fd: 0x100, 0x7fe: 0x100, 0x7ff: 0x100, + // Block 0x20, offset 0x800 + 0x800: 0xa6, 0x801: 0xa6, 0x802: 0xa6, 0x803: 0xa6, 0x804: 0xa6, 0x805: 0xa6, 0x806: 0xa6, 0x807: 0xa6, + 0x808: 0xa6, 0x809: 0xa6, 0x80a: 0xa6, 0x80b: 0xa6, 0x80c: 0xa6, 0x80d: 0x1ae, 0x80e: 0xa6, 0x80f: 0xa6, + 0x810: 0xa6, 0x811: 0xa6, 0x812: 0xa6, 0x813: 0xa6, 0x814: 0xa6, 0x815: 0xa6, 0x816: 0xa6, 0x817: 0xa6, + 0x818: 0xa6, 0x819: 0xa6, 0x81a: 0xa6, 0x81b: 0xa6, 0x81c: 0xa6, 0x81d: 0xa6, 0x81e: 0xa6, 0x81f: 0xa6, + 0x820: 0xa6, 0x821: 0xa6, 0x822: 0xa6, 0x823: 0xa6, 0x824: 0xa6, 0x825: 0xa6, 0x826: 0xa6, 0x827: 0xa6, + 0x828: 0xa6, 0x829: 0xa6, 0x82a: 0xa6, 0x82b: 0xa6, 0x82c: 0xa6, 0x82d: 0xa6, 0x82e: 0xa6, 0x82f: 0xa6, + 0x830: 0xa6, 0x831: 0xa6, 0x832: 0xa6, 0x833: 0xa6, 0x834: 0xa6, 0x835: 0xa6, 0x836: 0xa6, 0x837: 0xa6, + 0x838: 0xa6, 0x839: 0xa6, 0x83a: 0xa6, 0x83b: 0xa6, 0x83c: 0xa6, 0x83d: 0xa6, 0x83e: 0xa6, 0x83f: 0xa6, + // Block 0x21, offset 0x840 + 0x840: 0xa6, 0x841: 0xa6, 0x842: 0xa6, 0x843: 0xa6, 0x844: 0xa6, 0x845: 0xa6, 0x846: 0xa6, 0x847: 0xa6, + 0x848: 0xa6, 0x849: 0xa6, 0x84a: 0xa6, 0x84b: 0xa6, 0x84c: 0xa6, 0x84d: 0xa6, 0x84e: 0x1af, 0x84f: 0x100, + 0x850: 0x100, 0x851: 0x100, 0x852: 0x100, 0x853: 0x100, 0x854: 0x100, 0x855: 0x100, 0x856: 0x100, 0x857: 0x100, + 0x858: 0x100, 0x859: 0x100, 0x85a: 0x100, 0x85b: 0x100, 0x85c: 0x100, 0x85d: 0x100, 0x85e: 0x100, 0x85f: 0x100, + 0x860: 0x100, 0x861: 0x100, 0x862: 0x100, 0x863: 0x100, 0x864: 0x100, 0x865: 0x100, 0x866: 0x100, 0x867: 0x100, + 0x868: 0x100, 0x869: 0x100, 0x86a: 0x100, 0x86b: 0x100, 0x86c: 0x100, 0x86d: 0x100, 0x86e: 0x100, 0x86f: 0x100, + 0x870: 0x100, 0x871: 0x100, 0x872: 0x100, 0x873: 0x100, 0x874: 0x100, 0x875: 0x100, 0x876: 0x100, 0x877: 0x100, + 0x878: 0x100, 0x879: 0x100, 0x87a: 0x100, 0x87b: 0x100, 0x87c: 0x100, 0x87d: 0x100, 0x87e: 0x100, 0x87f: 0x100, + // Block 0x22, offset 0x880 + 0x890: 0x0c, 0x891: 0x0d, 0x892: 0x0e, 0x893: 0x0f, 0x894: 0x10, 0x895: 0x0a, 0x896: 0x11, 0x897: 0x07, + 0x898: 0x12, 0x899: 0x0a, 0x89a: 0x13, 0x89b: 0x14, 0x89c: 0x15, 0x89d: 0x16, 0x89e: 0x17, 0x89f: 0x18, + 0x8a0: 0x07, 0x8a1: 0x07, 0x8a2: 0x07, 0x8a3: 0x07, 0x8a4: 0x07, 0x8a5: 0x07, 0x8a6: 0x07, 0x8a7: 0x07, + 0x8a8: 0x07, 0x8a9: 0x07, 0x8aa: 0x19, 0x8ab: 0x1a, 0x8ac: 0x1b, 0x8ad: 0x07, 0x8ae: 0x1c, 0x8af: 0x1d, + 0x8b0: 0x07, 0x8b1: 0x1e, 0x8b2: 0x1f, 0x8b3: 0x0a, 0x8b4: 0x0a, 0x8b5: 0x0a, 0x8b6: 0x0a, 0x8b7: 0x0a, + 0x8b8: 0x0a, 0x8b9: 0x0a, 0x8ba: 0x0a, 0x8bb: 0x0a, 0x8bc: 0x0a, 0x8bd: 0x0a, 0x8be: 0x0a, 0x8bf: 0x0a, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0a, 0x8c1: 0x0a, 0x8c2: 0x0a, 0x8c3: 0x0a, 0x8c4: 0x0a, 0x8c5: 0x0a, 0x8c6: 0x0a, 0x8c7: 0x0a, + 0x8c8: 0x0a, 0x8c9: 0x0a, 0x8ca: 0x0a, 0x8cb: 0x0a, 0x8cc: 0x0a, 0x8cd: 0x0a, 0x8ce: 0x0a, 0x8cf: 0x0a, + 0x8d0: 0x0a, 0x8d1: 0x0a, 0x8d2: 0x0a, 0x8d3: 0x0a, 0x8d4: 0x0a, 0x8d5: 0x0a, 0x8d6: 0x0a, 0x8d7: 0x0a, + 0x8d8: 0x0a, 0x8d9: 0x0a, 0x8da: 0x0a, 0x8db: 0x0a, 0x8dc: 0x0a, 0x8dd: 0x0a, 0x8de: 0x0a, 0x8df: 0x0a, + 0x8e0: 0x0a, 0x8e1: 0x0a, 0x8e2: 0x0a, 0x8e3: 0x0a, 0x8e4: 0x0a, 0x8e5: 0x0a, 0x8e6: 0x0a, 0x8e7: 0x0a, + 0x8e8: 0x0a, 0x8e9: 0x0a, 0x8ea: 0x0a, 0x8eb: 0x0a, 0x8ec: 0x0a, 0x8ed: 0x0a, 0x8ee: 0x0a, 0x8ef: 0x0a, + 0x8f0: 0x0a, 0x8f1: 0x0a, 0x8f2: 0x0a, 0x8f3: 0x0a, 0x8f4: 0x0a, 0x8f5: 0x0a, 0x8f6: 0x0a, 0x8f7: 0x0a, + 0x8f8: 0x0a, 0x8f9: 0x0a, 0x8fa: 0x0a, 0x8fb: 0x0a, 0x8fc: 0x0a, 0x8fd: 0x0a, 0x8fe: 0x0a, 0x8ff: 0x0a, + // Block 0x24, offset 0x900 + 0x900: 0x1b0, 0x901: 0x1b1, 0x902: 0x100, 0x903: 0x100, 0x904: 0x1b2, 0x905: 0x1b2, 0x906: 0x1b2, 0x907: 0x1b3, + 0x908: 0x100, 0x909: 0x100, 0x90a: 0x100, 0x90b: 0x100, 0x90c: 0x100, 0x90d: 0x100, 0x90e: 0x100, 0x90f: 0x100, + 0x910: 0x100, 0x911: 0x100, 0x912: 0x100, 0x913: 0x100, 0x914: 0x100, 0x915: 0x100, 0x916: 0x100, 0x917: 0x100, + 0x918: 0x100, 0x919: 0x100, 0x91a: 0x100, 0x91b: 0x100, 0x91c: 0x100, 0x91d: 0x100, 0x91e: 0x100, 0x91f: 0x100, + 0x920: 0x100, 0x921: 0x100, 0x922: 0x100, 0x923: 0x100, 0x924: 0x100, 0x925: 0x100, 0x926: 0x100, 0x927: 0x100, + 0x928: 0x100, 0x929: 0x100, 0x92a: 0x100, 0x92b: 0x100, 0x92c: 0x100, 0x92d: 0x100, 0x92e: 0x100, 0x92f: 0x100, + 0x930: 0x100, 0x931: 0x100, 0x932: 0x100, 0x933: 0x100, 0x934: 0x100, 0x935: 0x100, 0x936: 0x100, 0x937: 0x100, + 0x938: 0x100, 0x939: 0x100, 0x93a: 0x100, 0x93b: 0x100, 0x93c: 0x100, 0x93d: 0x100, 0x93e: 0x100, 0x93f: 0x100, + // Block 0x25, offset 0x940 + 0x940: 0x0a, 0x941: 0x0a, 0x942: 0x0a, 0x943: 0x0a, 0x944: 0x0a, 0x945: 0x0a, 0x946: 0x0a, 0x947: 0x0a, + 0x948: 0x0a, 0x949: 0x0a, 0x94a: 0x0a, 0x94b: 0x0a, 0x94c: 0x0a, 0x94d: 0x0a, 0x94e: 0x0a, 0x94f: 0x0a, + 0x950: 0x0a, 0x951: 0x0a, 0x952: 0x0a, 0x953: 0x0a, 0x954: 0x0a, 0x955: 0x0a, 0x956: 0x0a, 0x957: 0x0a, + 0x958: 0x0a, 0x959: 0x0a, 0x95a: 0x0a, 0x95b: 0x0a, 0x95c: 0x0a, 0x95d: 0x0a, 0x95e: 0x0a, 0x95f: 0x0a, + 0x960: 0x22, 0x961: 0x0a, 0x962: 0x0a, 0x963: 0x0a, 0x964: 0x0a, 0x965: 0x0a, 0x966: 0x0a, 0x967: 0x0a, + 0x968: 0x0a, 0x969: 0x0a, 0x96a: 0x0a, 0x96b: 0x0a, 0x96c: 0x0a, 0x96d: 0x0a, 0x96e: 0x0a, 0x96f: 0x0a, + 0x970: 0x0a, 0x971: 0x0a, 0x972: 0x0a, 0x973: 0x0a, 0x974: 0x0a, 0x975: 0x0a, 0x976: 0x0a, 0x977: 0x0a, + 0x978: 0x0a, 0x979: 0x0a, 0x97a: 0x0a, 0x97b: 0x0a, 0x97c: 0x0a, 0x97d: 0x0a, 0x97e: 0x0a, 0x97f: 0x0a, + // Block 0x26, offset 0x980 + 0x980: 0x0a, 0x981: 0x0a, 0x982: 0x0a, 0x983: 0x0a, 0x984: 0x0a, 0x985: 0x0a, 0x986: 0x0a, 0x987: 0x0a, + 0x988: 0x0a, 0x989: 0x0a, 0x98a: 0x0a, 0x98b: 0x0a, 0x98c: 0x0a, 0x98d: 0x0a, 0x98e: 0x0a, 0x98f: 0x0a, +} + +// idnaSparseOffset: 303 entries, 606 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x7e, 0x87, 0x97, 0xa6, 0xb1, 0xbe, 0xcf, 0xd9, 0xe0, 0xed, 0xfe, 0x105, 0x110, 0x11f, 0x12d, 0x137, 0x139, 0x13e, 0x141, 0x144, 0x146, 0x152, 0x15d, 0x165, 0x16b, 0x171, 0x176, 0x17b, 0x17e, 0x182, 0x188, 0x18d, 0x198, 0x1a2, 0x1a8, 0x1b9, 0x1c4, 0x1c7, 0x1cf, 0x1d2, 0x1df, 0x1e7, 0x1eb, 0x1f2, 0x1fa, 0x20a, 0x216, 0x219, 0x223, 0x22f, 0x23b, 0x247, 0x24f, 0x254, 0x261, 0x272, 0x27d, 0x282, 0x28b, 0x293, 0x299, 0x29e, 0x2a1, 0x2a5, 0x2ab, 0x2af, 0x2b3, 0x2b7, 0x2bc, 0x2c4, 0x2cb, 0x2d6, 0x2e0, 0x2e4, 0x2e7, 0x2ed, 0x2f1, 0x2f3, 0x2f6, 0x2f8, 0x2fb, 0x305, 0x308, 0x317, 0x31b, 0x31f, 0x321, 0x32a, 0x32e, 0x333, 0x338, 0x33e, 0x34e, 0x354, 0x358, 0x367, 0x36c, 0x374, 0x37e, 0x389, 0x391, 0x3a2, 0x3ab, 0x3bb, 0x3c8, 0x3d4, 0x3d9, 0x3e6, 0x3ea, 0x3ef, 0x3f1, 0x3f3, 0x3f7, 0x3f9, 0x3fd, 0x406, 0x40c, 0x410, 0x420, 0x42a, 0x42f, 0x432, 0x438, 0x43f, 0x444, 0x448, 0x44e, 0x453, 0x45c, 0x461, 0x467, 0x46e, 0x475, 0x47c, 0x480, 0x483, 0x488, 0x494, 0x49a, 0x49f, 0x4a6, 0x4ae, 0x4b3, 0x4b7, 0x4c7, 0x4ce, 0x4d2, 0x4d6, 0x4dd, 0x4df, 0x4e2, 0x4e5, 0x4e9, 0x4f2, 0x4f6, 0x4fe, 0x501, 0x509, 0x514, 0x523, 0x52f, 0x535, 0x542, 0x54e, 0x556, 0x55f, 0x56a, 0x571, 0x580, 0x58d, 0x591, 0x59e, 0x5a7, 0x5ab, 0x5ba, 0x5c2, 0x5cd, 0x5d6, 0x5dc, 0x5e4, 0x5ed, 0x5f9, 0x5fc, 0x608, 0x60b, 0x614, 0x617, 0x61c, 0x625, 0x62a, 0x637, 0x642, 0x64b, 0x656, 0x659, 0x65c, 0x666, 0x66f, 0x67b, 0x688, 0x695, 0x6a3, 0x6aa, 0x6b5, 0x6bc, 0x6c0, 0x6c4, 0x6c7, 0x6cc, 0x6cf, 0x6d2, 0x6d6, 0x6d9, 0x6de, 0x6e5, 0x6e8, 0x6f0, 0x6f4, 0x6ff, 0x702, 0x705, 0x708, 0x70e, 0x714, 0x71d, 0x720, 0x723, 0x726, 0x72e, 0x733, 0x73c, 0x73f, 0x744, 0x74e, 0x752, 0x756, 0x759, 0x75c, 0x760, 0x76f, 0x77b, 0x77f, 0x784, 0x789, 0x78e, 0x792, 0x797, 0x7a0, 0x7a5, 0x7a9, 0x7af, 0x7b5, 0x7ba, 0x7c0, 0x7c6, 0x7d0, 0x7d6, 0x7df, 0x7e2, 0x7e5, 0x7e9, 0x7ed, 0x7f1, 0x7f7, 0x7fd, 0x802, 0x805, 0x815, 0x81c, 0x820, 0x827, 0x82b, 0x831, 0x838, 0x83f, 0x845, 0x84e, 0x852, 0x860, 0x863, 0x866, 0x86a, 0x86e, 0x871, 0x875, 0x878, 0x87d, 0x87f, 0x881} + +// idnaSparseValues: 2180 entries, 8720 bytes +var idnaSparseValues = [2180]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x07}, + {value: 0xe105, lo: 0x80, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x97}, + {value: 0xe105, lo: 0x98, hi: 0x9e}, + {value: 0x001f, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbf}, + // Block 0x1, offset 0x8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0xe01d, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0335, lo: 0x83, hi: 0x83}, + {value: 0x034d, lo: 0x84, hi: 0x84}, + {value: 0x0365, lo: 0x85, hi: 0x85}, + {value: 0xe00d, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0xe00d, lo: 0x88, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x89}, + {value: 0xe00d, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe00d, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0x8d}, + {value: 0xe00d, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0xbf}, + // Block 0x2, offset 0x19 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x00a9, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x00b1, lo: 0xb2, hi: 0xb2}, + {value: 0x00b9, lo: 0xb3, hi: 0xb3}, + {value: 0x034d, lo: 0xb4, hi: 0xb4}, + {value: 0x0395, lo: 0xb5, hi: 0xb5}, + {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, + {value: 0x00c1, lo: 0xb7, hi: 0xb7}, + {value: 0x00c9, lo: 0xb8, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbf}, + // Block 0x3, offset 0x25 + {value: 0x0000, lo: 0x01}, + {value: 0x3308, lo: 0x80, hi: 0xbf}, + // Block 0x4, offset 0x27 + {value: 0x0000, lo: 0x04}, + {value: 0x03f5, lo: 0x80, hi: 0x8f}, + {value: 0xe105, lo: 0x90, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x5, offset 0x2c + {value: 0x0000, lo: 0x06}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x0545, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x6, offset 0x33 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0131, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0018, lo: 0x89, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x7, offset 0x3e + {value: 0x0000, lo: 0x0b}, + {value: 0x0818, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x82}, + {value: 0x0818, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x85}, + {value: 0x0818, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xae}, + {value: 0x0808, lo: 0xaf, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4a + {value: 0x0000, lo: 0x03}, + {value: 0x0a08, lo: 0x80, hi: 0x87}, + {value: 0x0c08, lo: 0x88, hi: 0x99}, + {value: 0x0a08, lo: 0x9a, hi: 0xbf}, + // Block 0x9, offset 0x4e + {value: 0x0000, lo: 0x0e}, + {value: 0x3308, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0c08, lo: 0x8d, hi: 0x8d}, + {value: 0x0a08, lo: 0x8e, hi: 0x98}, + {value: 0x0c08, lo: 0x99, hi: 0x9b}, + {value: 0x0a08, lo: 0x9c, hi: 0xaa}, + {value: 0x0c08, lo: 0xab, hi: 0xac}, + {value: 0x0a08, lo: 0xad, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb1}, + {value: 0x0a08, lo: 0xb2, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb4}, + {value: 0x0a08, lo: 0xb5, hi: 0xb7}, + {value: 0x0c08, lo: 0xb8, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbf}, + // Block 0xa, offset 0x5d + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xb0}, + {value: 0x0808, lo: 0xb1, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xb, offset 0x62 + {value: 0x0000, lo: 0x09}, + {value: 0x0808, lo: 0x80, hi: 0x89}, + {value: 0x0a08, lo: 0x8a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbf}, + // Block 0xc, offset 0x6c + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x99}, + {value: 0x0808, lo: 0x9a, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa3}, + {value: 0x0808, lo: 0xa4, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa7}, + {value: 0x0808, lo: 0xa8, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0818, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd, offset 0x78 + {value: 0x0000, lo: 0x05}, + {value: 0x0a08, lo: 0x80, hi: 0x88}, + {value: 0x0808, lo: 0x89, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xe, offset 0x7e + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0xf, offset 0x87 + {value: 0x0000, lo: 0x0f}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x85}, + {value: 0x3008, lo: 0x86, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x3008, lo: 0x8a, hi: 0x8c}, + {value: 0x3b08, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x10, offset 0x97 + {value: 0x0000, lo: 0x0e}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x11, offset 0xa6 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xba}, + {value: 0x3b08, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbe + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x89}, + {value: 0x3b08, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x3008, lo: 0x98, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x14, offset 0xcf + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x01f1, lo: 0xb3, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb9}, + {value: 0x3b08, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x15, offset 0xd9 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0xbf}, + // Block 0x16, offset 0xe0 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0201, lo: 0x9c, hi: 0x9c}, + {value: 0x0209, lo: 0x9d, hi: 0x9d}, + {value: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x17, offset 0xed + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe03d, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x18, offset 0xfe + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0x19, offset 0x105 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x1a, offset 0x110 + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x3008, lo: 0x96, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x3008, lo: 0xa2, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbf}, + // Block 0x1b, offset 0x11f + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x8c}, + {value: 0x3308, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x3008, lo: 0x9a, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1c, offset 0x12d + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x86}, + {value: 0x055d, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8c}, + {value: 0x055d, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0xe105, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0x1d, offset 0x137 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x1e, offset 0x139 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa0}, + {value: 0x2018, lo: 0xa1, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x1f, offset 0x13e + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x20, offset 0x141 + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x21, offset 0x144 + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x22, offset 0x146 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x23, offset 0x152 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x24, offset 0x15d + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x25, offset 0x165 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x26, offset 0x16b + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x27, offset 0x171 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x28, offset 0x176 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x29, offset 0x17b + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2a, offset 0x17e + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2b, offset 0x182 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x2c, offset 0x188 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x2d, offset 0x18d + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x3808, lo: 0x95, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3808, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2e, offset 0x198 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x2f, offset 0x1a2 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xb3}, + {value: 0x3340, lo: 0xb4, hi: 0xb5}, + {value: 0x3008, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x30, offset 0x1a8 + {value: 0x0000, lo: 0x10}, + {value: 0x3008, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x91}, + {value: 0x3b08, lo: 0x92, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0x96}, + {value: 0x0008, lo: 0x97, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x31, offset 0x1b9 + {value: 0x0000, lo: 0x0a}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x86}, + {value: 0x0218, lo: 0x87, hi: 0x87}, + {value: 0x0018, lo: 0x88, hi: 0x8a}, + {value: 0x33c0, lo: 0x8b, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x33c0, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x32, offset 0x1c4 + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x33, offset 0x1c7 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0208, lo: 0x87, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xa9}, + {value: 0x0208, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x34, offset 0x1cf + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x35, offset 0x1d2 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x36, offset 0x1df + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x37, offset 0x1e7 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x38, offset 0x1eb + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0028, lo: 0x9a, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xbf}, + // Block 0x39, offset 0x1f2 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x3308, lo: 0x97, hi: 0x98}, + {value: 0x3008, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x3a, offset 0x1fa + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x94}, + {value: 0x3008, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xac}, + {value: 0x3008, lo: 0xad, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x3b, offset 0x20a + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xbd}, + {value: 0x3318, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x3c, offset 0x216 + {value: 0x0000, lo: 0x02}, + {value: 0x3308, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0xbf}, + // Block 0x3d, offset 0x219 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3008, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x3e, offset 0x223 + {value: 0x0000, lo: 0x0b}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x3808, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3f, offset 0x22f + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3808, lo: 0xaa, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xbf}, + // Block 0x40, offset 0x23b + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3008, lo: 0xaa, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3808, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbf}, + // Block 0x41, offset 0x247 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x3008, lo: 0xa4, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x42, offset 0x24f + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x43, offset 0x254 + {value: 0x0000, lo: 0x0c}, + {value: 0x02a9, lo: 0x80, hi: 0x80}, + {value: 0x02b1, lo: 0x81, hi: 0x81}, + {value: 0x02b9, lo: 0x82, hi: 0x82}, + {value: 0x02c1, lo: 0x83, hi: 0x83}, + {value: 0x02c9, lo: 0x84, hi: 0x85}, + {value: 0x02d1, lo: 0x86, hi: 0x86}, + {value: 0x02d9, lo: 0x87, hi: 0x87}, + {value: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x059d, lo: 0x90, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x059d, lo: 0xbd, hi: 0xbf}, + // Block 0x44, offset 0x261 + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x92}, + {value: 0x0018, lo: 0x93, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa8}, + {value: 0x0008, lo: 0xa9, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x45, offset 0x272 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x87}, + {value: 0xe045, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0xe045, lo: 0x98, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0xe045, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbf}, + // Block 0x46, offset 0x27d + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x47, offset 0x282 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x0851, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x48, offset 0x28b + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0859, lo: 0xac, hi: 0xac}, + {value: 0x0861, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x0869, lo: 0xaf, hi: 0xaf}, + {value: 0x0871, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x293 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x9f}, + {value: 0x0080, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xad}, + {value: 0x0080, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x4a, offset 0x299 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09dd, lo: 0xa9, hi: 0xa9}, + {value: 0x09fd, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4b, offset 0x29e + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4c, offset 0x2a1 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0929, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x4d, offset 0x2a5 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e7e, lo: 0xb4, hi: 0xb4}, + {value: 0x0932, lo: 0xb5, hi: 0xb5}, + {value: 0x0e9e, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x4e, offset 0x2ab + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x0939, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x4f, offset 0x2af + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x50, offset 0x2b3 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0xbf}, + // Block 0x51, offset 0x2b7 + {value: 0x0000, lo: 0x04}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ebd, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x52, offset 0x2bc + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x53, offset 0x2c4 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xae}, + {value: 0xe075, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0x54, offset 0x2cb + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x55, offset 0x2d6 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xbf}, + // Block 0x56, offset 0x2e0 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x57, offset 0x2e4 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x58, offset 0x2e7 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0ef5, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x59, offset 0x2ed + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0f15, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5a, offset 0x2f1 + {value: 0x0020, lo: 0x01}, + {value: 0x0f35, lo: 0x80, hi: 0xbf}, + // Block 0x5b, offset 0x2f3 + {value: 0x0020, lo: 0x02}, + {value: 0x1735, lo: 0x80, hi: 0x8f}, + {value: 0x1915, lo: 0x90, hi: 0xbf}, + // Block 0x5c, offset 0x2f6 + {value: 0x0020, lo: 0x01}, + {value: 0x1f15, lo: 0x80, hi: 0xbf}, + // Block 0x5d, offset 0x2f8 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x5e, offset 0x2fb + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9a}, + {value: 0x096a, lo: 0x9b, hi: 0x9b}, + {value: 0x0972, lo: 0x9c, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x0979, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x5f, offset 0x305 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x0981, lo: 0xbf, hi: 0xbf}, + // Block 0x60, offset 0x308 + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb0}, + {value: 0x2a35, lo: 0xb1, hi: 0xb1}, + {value: 0x2a55, lo: 0xb2, hi: 0xb2}, + {value: 0x2a75, lo: 0xb3, hi: 0xb3}, + {value: 0x2a95, lo: 0xb4, hi: 0xb4}, + {value: 0x2a75, lo: 0xb5, hi: 0xb5}, + {value: 0x2ab5, lo: 0xb6, hi: 0xb6}, + {value: 0x2ad5, lo: 0xb7, hi: 0xb7}, + {value: 0x2af5, lo: 0xb8, hi: 0xb9}, + {value: 0x2b15, lo: 0xba, hi: 0xbb}, + {value: 0x2b35, lo: 0xbc, hi: 0xbd}, + {value: 0x2b15, lo: 0xbe, hi: 0xbf}, + // Block 0x61, offset 0x317 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x62, offset 0x31b + {value: 0x0008, lo: 0x03}, + {value: 0x098a, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0a82, lo: 0xa0, hi: 0xbf}, + // Block 0x63, offset 0x31f + {value: 0x0008, lo: 0x01}, + {value: 0x0d19, lo: 0x80, hi: 0xbf}, + // Block 0x64, offset 0x321 + {value: 0x0008, lo: 0x08}, + {value: 0x0f19, lo: 0x80, hi: 0xb0}, + {value: 0x4045, lo: 0xb1, hi: 0xb1}, + {value: 0x10a1, lo: 0xb2, hi: 0xb3}, + {value: 0x4065, lo: 0xb4, hi: 0xb4}, + {value: 0x10b1, lo: 0xb5, hi: 0xb7}, + {value: 0x4085, lo: 0xb8, hi: 0xb8}, + {value: 0x4085, lo: 0xb9, hi: 0xb9}, + {value: 0x10c9, lo: 0xba, hi: 0xbf}, + // Block 0x65, offset 0x32a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x66, offset 0x32e + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x67, offset 0x333 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0x68, offset 0x338 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb1}, + {value: 0x0018, lo: 0xb2, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x69, offset 0x33e + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x3308, lo: 0x8b, hi: 0x8b}, + {value: 0x0008, lo: 0x8c, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xab}, + {value: 0x3b08, lo: 0xac, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6a, offset 0x34e + {value: 0x0000, lo: 0x05}, + {value: 0x0208, lo: 0x80, hi: 0xb1}, + {value: 0x0108, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6b, offset 0x354 + {value: 0x0000, lo: 0x03}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xbf}, + // Block 0x6c, offset 0x358 + {value: 0x0000, lo: 0x0e}, + {value: 0x3008, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0008, lo: 0xbb, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x6d, offset 0x367 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x6e, offset 0x36c + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x91}, + {value: 0x3008, lo: 0x92, hi: 0x92}, + {value: 0x3808, lo: 0x93, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x6f, offset 0x374 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb9}, + {value: 0x3008, lo: 0xba, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x70, offset 0x37e + {value: 0x0000, lo: 0x0a}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x71, offset 0x389 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x72, offset 0x391 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8c}, + {value: 0x3008, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0x73, offset 0x3a2 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x74, offset 0x3ab + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x9a}, + {value: 0x0008, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3b08, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x75, offset 0x3bb + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x90}, + {value: 0x0008, lo: 0x91, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x76, offset 0x3c8 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x449d, lo: 0x9c, hi: 0x9c}, + {value: 0x44b5, lo: 0x9d, hi: 0x9d}, + {value: 0x0941, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa8}, + {value: 0x13f9, lo: 0xa9, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x44cd, lo: 0xb0, hi: 0xbf}, + // Block 0x77, offset 0x3d4 + {value: 0x0000, lo: 0x04}, + {value: 0x44ed, lo: 0x80, hi: 0x8f}, + {value: 0x450d, lo: 0x90, hi: 0x9f}, + {value: 0x452d, lo: 0xa0, hi: 0xaf}, + {value: 0x450d, lo: 0xb0, hi: 0xbf}, + // Block 0x78, offset 0x3d9 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3b08, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x79, offset 0x3e6 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7a, offset 0x3ea + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x7b, offset 0x3ef + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x7c, offset 0x3f1 + {value: 0x0020, lo: 0x01}, + {value: 0x454d, lo: 0x80, hi: 0xbf}, + // Block 0x7d, offset 0x3f3 + {value: 0x0020, lo: 0x03}, + {value: 0x4d4d, lo: 0x80, hi: 0x94}, + {value: 0x4b0d, lo: 0x95, hi: 0x95}, + {value: 0x4fed, lo: 0x96, hi: 0xbf}, + // Block 0x7e, offset 0x3f7 + {value: 0x0020, lo: 0x01}, + {value: 0x552d, lo: 0x80, hi: 0xbf}, + // Block 0x7f, offset 0x3f9 + {value: 0x0020, lo: 0x03}, + {value: 0x5d2d, lo: 0x80, hi: 0x84}, + {value: 0x568d, lo: 0x85, hi: 0x85}, + {value: 0x5dcd, lo: 0x86, hi: 0xbf}, + // Block 0x80, offset 0x3fd + {value: 0x0020, lo: 0x08}, + {value: 0x6b8d, lo: 0x80, hi: 0x8f}, + {value: 0x6d4d, lo: 0x90, hi: 0x90}, + {value: 0x6d8d, lo: 0x91, hi: 0xab}, + {value: 0x1401, lo: 0xac, hi: 0xac}, + {value: 0x70ed, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x710d, lo: 0xb0, hi: 0xbf}, + // Block 0x81, offset 0x406 + {value: 0x0020, lo: 0x05}, + {value: 0x730d, lo: 0x80, hi: 0xad}, + {value: 0x656d, lo: 0xae, hi: 0xae}, + {value: 0x78cd, lo: 0xaf, hi: 0xb5}, + {value: 0x6f8d, lo: 0xb6, hi: 0xb6}, + {value: 0x79ad, lo: 0xb7, hi: 0xbf}, + // Block 0x82, offset 0x40c + {value: 0x0008, lo: 0x03}, + {value: 0x1751, lo: 0x80, hi: 0x82}, + {value: 0x1741, lo: 0x83, hi: 0x83}, + {value: 0x1769, lo: 0x84, hi: 0xbf}, + // Block 0x83, offset 0x410 + {value: 0x0008, lo: 0x0f}, + {value: 0x1d81, lo: 0x80, hi: 0x83}, + {value: 0x1d99, lo: 0x84, hi: 0x85}, + {value: 0x1da1, lo: 0x86, hi: 0x87}, + {value: 0x1da9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x1de9, lo: 0x92, hi: 0x97}, + {value: 0x1e11, lo: 0x98, hi: 0x9c}, + {value: 0x1e31, lo: 0x9d, hi: 0xb3}, + {value: 0x1d71, lo: 0xb4, hi: 0xb4}, + {value: 0x1d81, lo: 0xb5, hi: 0xb5}, + {value: 0x1ee9, lo: 0xb6, hi: 0xbb}, + {value: 0x1f09, lo: 0xbc, hi: 0xbc}, + {value: 0x1ef9, lo: 0xbd, hi: 0xbd}, + {value: 0x1f19, lo: 0xbe, hi: 0xbf}, + // Block 0x84, offset 0x420 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x85, offset 0x42a + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x86, offset 0x42f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x87, offset 0x432 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x88, offset 0x438 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x89, offset 0x43f + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x8a, offset 0x444 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8b, offset 0x448 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x8c, offset 0x44e + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xbf}, + // Block 0x8d, offset 0x453 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x8e, offset 0x45c + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8f, offset 0x461 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x90, offset 0x467 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8b0d, lo: 0x98, hi: 0x9f}, + {value: 0x8b25, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x91, offset 0x46e + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x8b25, lo: 0xb0, hi: 0xb7}, + {value: 0x8b0d, lo: 0xb8, hi: 0xbf}, + // Block 0x92, offset 0x475 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x93, offset 0x47c + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x94, offset 0x480 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x95, offset 0x483 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xbf}, + // Block 0x96, offset 0x488 + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0808, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0808, lo: 0x8a, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb6}, + {value: 0x0808, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbb}, + {value: 0x0808, lo: 0xbc, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x0808, lo: 0xbf, hi: 0xbf}, + // Block 0x97, offset 0x494 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0818, lo: 0x97, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0818, lo: 0xb7, hi: 0xbf}, + // Block 0x98, offset 0x49a + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa6}, + {value: 0x0818, lo: 0xa7, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x99, offset 0x49f + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x0818, lo: 0xbb, hi: 0xbf}, + // Block 0x9a, offset 0x4a6 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0818, lo: 0x96, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0818, lo: 0xbf, hi: 0xbf}, + // Block 0x9b, offset 0x4ae + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbb}, + {value: 0x0818, lo: 0xbc, hi: 0xbd}, + {value: 0x0808, lo: 0xbe, hi: 0xbf}, + // Block 0x9c, offset 0x4b3 + {value: 0x0000, lo: 0x03}, + {value: 0x0818, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0818, lo: 0x92, hi: 0xbf}, + // Block 0x9d, offset 0x4b7 + {value: 0x0000, lo: 0x0f}, + {value: 0x0808, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x94}, + {value: 0x0808, lo: 0x95, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x98}, + {value: 0x0808, lo: 0x99, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0x9e, offset 0x4c7 + {value: 0x0000, lo: 0x06}, + {value: 0x0818, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0818, lo: 0x90, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xbc}, + {value: 0x0818, lo: 0xbd, hi: 0xbf}, + // Block 0x9f, offset 0x4ce + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa0, offset 0x4d2 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa1, offset 0x4d6 + {value: 0x0000, lo: 0x06}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0818, lo: 0x98, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb7}, + {value: 0x0818, lo: 0xb8, hi: 0xbf}, + // Block 0xa2, offset 0x4dd + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa3, offset 0x4df + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa4, offset 0x4e2 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa5, offset 0x4e5 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xbf}, + // Block 0xa6, offset 0x4e9 + {value: 0x0000, lo: 0x08}, + {value: 0x0908, lo: 0x80, hi: 0x80}, + {value: 0x0a08, lo: 0x81, hi: 0xa1}, + {value: 0x0c08, lo: 0xa2, hi: 0xa2}, + {value: 0x0a08, lo: 0xa3, hi: 0xa3}, + {value: 0x3308, lo: 0xa4, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xa7, offset 0x4f2 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xa8, offset 0x4f6 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xac}, + {value: 0x0818, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xa9, offset 0x4fe + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbf}, + // Block 0xaa, offset 0x501 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0xa6}, + {value: 0x0808, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0a08, lo: 0xb0, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb3}, + {value: 0x0a08, lo: 0xb4, hi: 0xbf}, + // Block 0xab, offset 0x509 + {value: 0x0000, lo: 0x0a}, + {value: 0x0a08, lo: 0x80, hi: 0x84}, + {value: 0x0808, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x90}, + {value: 0x0a18, lo: 0x91, hi: 0x93}, + {value: 0x0c18, lo: 0x94, hi: 0x94}, + {value: 0x0818, lo: 0x95, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xaf}, + {value: 0x0a08, lo: 0xb0, hi: 0xb3}, + {value: 0x0c08, lo: 0xb4, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xbf}, + // Block 0xac, offset 0x514 + {value: 0x0000, lo: 0x0e}, + {value: 0x0a08, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x85}, + {value: 0x0818, lo: 0x86, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xaf}, + {value: 0x0a08, lo: 0xb0, hi: 0xb0}, + {value: 0x0808, lo: 0xb1, hi: 0xb1}, + {value: 0x0a08, lo: 0xb2, hi: 0xb3}, + {value: 0x0c08, lo: 0xb4, hi: 0xb6}, + {value: 0x0808, lo: 0xb7, hi: 0xb7}, + {value: 0x0a08, lo: 0xb8, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xba}, + {value: 0x0a08, lo: 0xbb, hi: 0xbc}, + {value: 0x0c08, lo: 0xbd, hi: 0xbd}, + {value: 0x0a08, lo: 0xbe, hi: 0xbf}, + // Block 0xad, offset 0x523 + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x80}, + {value: 0x0a08, lo: 0x81, hi: 0x81}, + {value: 0x0c08, lo: 0x82, hi: 0x83}, + {value: 0x0a08, lo: 0x84, hi: 0x84}, + {value: 0x0818, lo: 0x85, hi: 0x88}, + {value: 0x0c18, lo: 0x89, hi: 0x89}, + {value: 0x0a18, lo: 0x8a, hi: 0x8a}, + {value: 0x0918, lo: 0x8b, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xae, offset 0x52f + {value: 0x0000, lo: 0x05}, + {value: 0x3008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xaf, offset 0x535 + {value: 0x0000, lo: 0x0c}, + {value: 0x3308, lo: 0x80, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x3b08, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xb0, offset 0x542 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xb1, offset 0x54e + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb2, offset 0x556 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb2}, + {value: 0x3b08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xbf}, + // Block 0xb3, offset 0x55f + {value: 0x0000, lo: 0x0a}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xb4, offset 0x56a + {value: 0x0000, lo: 0x06}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xbe}, + {value: 0x3008, lo: 0xbf, hi: 0xbf}, + // Block 0xb5, offset 0x571 + {value: 0x0000, lo: 0x0e}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x3008, lo: 0x8e, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xb6, offset 0x580 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3808, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xb7, offset 0x58d + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0xbf}, + // Block 0xb8, offset 0x591 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xb9, offset 0x59e + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x3308, lo: 0x9f, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa9}, + {value: 0x3b08, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xba, offset 0x5a7 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xbb, offset 0x5ab + {value: 0x0000, lo: 0x0e}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xbc, offset 0x5ba + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xbd, offset 0x5c2 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xbe, offset 0x5cd + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbf, offset 0x5d6 + {value: 0x0000, lo: 0x05}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9b}, + {value: 0x3308, lo: 0x9c, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xc0, offset 0x5dc + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xc1, offset 0x5e4 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xc2, offset 0x5ed + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb5}, + {value: 0x3808, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xc3, offset 0x5f9 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xc4, offset 0x5fc + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xc5, offset 0x608 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xc6, offset 0x60b + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xc7, offset 0x614 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc8, offset 0x617 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xc9, offset 0x61c + {value: 0x0000, lo: 0x08}, + {value: 0x3008, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xca, offset 0x625 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xbf}, + // Block 0xcb, offset 0x62a + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x99}, + {value: 0x3308, lo: 0x9a, hi: 0x9b}, + {value: 0x3008, lo: 0x9c, hi: 0x9f}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x0018, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xa3}, + {value: 0x3008, lo: 0xa4, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xbf}, + // Block 0xcc, offset 0x637 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xcd, offset 0x642 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x3b08, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0xbf}, + // Block 0xce, offset 0x64b + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x98}, + {value: 0x3b08, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xcf, offset 0x656 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xd0, offset 0x659 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xd1, offset 0x65c + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xd2, offset 0x666 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xbf}, + // Block 0xd3, offset 0x66f + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xa9}, + {value: 0x3308, lo: 0xaa, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xd4, offset 0x67b + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xd5, offset 0x688 + {value: 0x0000, lo: 0x0c}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xbf}, + // Block 0xd6, offset 0x695 + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x3008, lo: 0x8a, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x3008, lo: 0x93, hi: 0x94}, + {value: 0x3308, lo: 0x95, hi: 0x95}, + {value: 0x3008, lo: 0x96, hi: 0x96}, + {value: 0x3b08, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xbf}, + // Block 0xd7, offset 0x6a3 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xd8, offset 0x6aa + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0xd9, offset 0x6b5 + {value: 0x0000, lo: 0x06}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3808, lo: 0x81, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xda, offset 0x6bc + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0xdb, offset 0x6c0 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xdc, offset 0x6c4 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xdd, offset 0x6c7 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xde, offset 0x6cc + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xdf, offset 0x6cf + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbf}, + // Block 0xe0, offset 0x6d2 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xe1, offset 0x6d6 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0340, lo: 0xb0, hi: 0xbf}, + // Block 0xe2, offset 0x6d9 + {value: 0x0000, lo: 0x04}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0xe3, offset 0x6de + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xe4, offset 0x6e5 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xe5, offset 0x6e8 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xe6, offset 0x6f0 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xe7, offset 0x6f4 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0xe8, offset 0x6ff + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xe9, offset 0x702 + {value: 0x0000, lo: 0x02}, + {value: 0xe105, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xea, offset 0x705 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0xeb, offset 0x708 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0xbf}, + // Block 0xec, offset 0x70e + {value: 0x0000, lo: 0x05}, + {value: 0x3008, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xed, offset 0x714 + {value: 0x0000, lo: 0x08}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa1}, + {value: 0x0018, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xa3}, + {value: 0x3308, lo: 0xa4, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xee, offset 0x71d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xef, offset 0x720 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0xf0, offset 0x723 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xf1, offset 0x726 + {value: 0x0000, lo: 0x07}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xf2, offset 0x72e + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xf3, offset 0x733 + {value: 0x0000, lo: 0x08}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0x94}, + {value: 0x0008, lo: 0x95, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xa3}, + {value: 0x0008, lo: 0xa4, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xf4, offset 0x73c + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xf5, offset 0x73f + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0xf6, offset 0x744 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x03c0, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xf7, offset 0x74e + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xbf}, + // Block 0xf8, offset 0x752 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0xf9, offset 0x756 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xfa, offset 0x759 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xfb, offset 0x75c + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xfc, offset 0x760 + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0x2379, lo: 0x9e, hi: 0x9e}, + {value: 0x2381, lo: 0x9f, hi: 0x9f}, + {value: 0x2389, lo: 0xa0, hi: 0xa0}, + {value: 0x2391, lo: 0xa1, hi: 0xa1}, + {value: 0x2399, lo: 0xa2, hi: 0xa2}, + {value: 0x23a1, lo: 0xa3, hi: 0xa3}, + {value: 0x23a9, lo: 0xa4, hi: 0xa4}, + {value: 0x3018, lo: 0xa5, hi: 0xa6}, + {value: 0x3318, lo: 0xa7, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xac}, + {value: 0x3018, lo: 0xad, hi: 0xb2}, + {value: 0x0340, lo: 0xb3, hi: 0xba}, + {value: 0x3318, lo: 0xbb, hi: 0xbf}, + // Block 0xfd, offset 0x76f + {value: 0x0000, lo: 0x0b}, + {value: 0x3318, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x84}, + {value: 0x3318, lo: 0x85, hi: 0x8b}, + {value: 0x0018, lo: 0x8c, hi: 0xa9}, + {value: 0x3318, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xba}, + {value: 0x23b1, lo: 0xbb, hi: 0xbb}, + {value: 0x23b9, lo: 0xbc, hi: 0xbc}, + {value: 0x23c1, lo: 0xbd, hi: 0xbd}, + {value: 0x23c9, lo: 0xbe, hi: 0xbe}, + {value: 0x23d1, lo: 0xbf, hi: 0xbf}, + // Block 0xfe, offset 0x77b + {value: 0x0000, lo: 0x03}, + {value: 0x23d9, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xff, offset 0x77f + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x3318, lo: 0x82, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0xbf}, + // Block 0x100, offset 0x784 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x101, offset 0x789 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x102, offset 0x78e + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x103, offset 0x792 + {value: 0x0000, lo: 0x04}, + {value: 0x3308, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x104, offset 0x797 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x3308, lo: 0xa1, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x105, offset 0x7a0 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0x106, offset 0x7a5 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0x107, offset 0x7a9 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x108, offset 0x7af + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0x109, offset 0x7b5 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x3308, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0x10a, offset 0x7ba + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x10b, offset 0x7c0 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x10c, offset 0x7c6 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x10d, offset 0x7d0 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x86}, + {value: 0x0818, lo: 0x87, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0x10e, offset 0x7d6 + {value: 0x0000, lo: 0x08}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, + {value: 0x0b08, lo: 0x8b, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0818, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x10f, offset 0x7df + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xb0}, + {value: 0x0818, lo: 0xb1, hi: 0xbf}, + // Block 0x110, offset 0x7e2 + {value: 0x0000, lo: 0x02}, + {value: 0x0818, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x111, offset 0x7e5 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0818, lo: 0x81, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x112, offset 0x7e9 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0x113, offset 0x7ed + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x114, offset 0x7f1 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x115, offset 0x7f7 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x116, offset 0x7fd + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0x2709, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0x117, offset 0x802 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0x118, offset 0x805 + {value: 0x0000, lo: 0x0f}, + {value: 0x2889, lo: 0x80, hi: 0x80}, + {value: 0x2891, lo: 0x81, hi: 0x81}, + {value: 0x2899, lo: 0x82, hi: 0x82}, + {value: 0x28a1, lo: 0x83, hi: 0x83}, + {value: 0x28a9, lo: 0x84, hi: 0x84}, + {value: 0x28b1, lo: 0x85, hi: 0x85}, + {value: 0x28b9, lo: 0x86, hi: 0x86}, + {value: 0x28c1, lo: 0x87, hi: 0x87}, + {value: 0x28c9, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x28d1, lo: 0x90, hi: 0x90}, + {value: 0x28d9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xbf}, + // Block 0x119, offset 0x815 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x11a, offset 0x81c + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x11b, offset 0x820 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x11c, offset 0x827 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x11d, offset 0x82b + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x11e, offset 0x831 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0x11f, offset 0x838 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x120, offset 0x83f + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x121, offset 0x845 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x122, offset 0x84e + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0xbf}, + // Block 0x123, offset 0x852 + {value: 0x0000, lo: 0x0d}, + {value: 0x0018, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0xaf}, + {value: 0x06e1, lo: 0xb0, hi: 0xb0}, + {value: 0x0049, lo: 0xb1, hi: 0xb1}, + {value: 0x0029, lo: 0xb2, hi: 0xb2}, + {value: 0x0031, lo: 0xb3, hi: 0xb3}, + {value: 0x06e9, lo: 0xb4, hi: 0xb4}, + {value: 0x06f1, lo: 0xb5, hi: 0xb5}, + {value: 0x06f9, lo: 0xb6, hi: 0xb6}, + {value: 0x0701, lo: 0xb7, hi: 0xb7}, + {value: 0x0709, lo: 0xb8, hi: 0xb8}, + {value: 0x0711, lo: 0xb9, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x124, offset 0x860 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x125, offset 0x863 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x126, offset 0x866 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x127, offset 0x86a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x128, offset 0x86e + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x129, offset 0x871 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbf}, + // Block 0x12a, offset 0x875 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x12b, offset 0x878 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0340, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x9f}, + {value: 0x0340, lo: 0xa0, hi: 0xbf}, + // Block 0x12c, offset 0x87d + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x12d, offset 0x87f + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x12e, offset 0x881 + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 46723 bytes (45KiB); checksum: 4CF3143A diff --git a/vendor/golang.org/x/net/idna/trie.go b/vendor/golang.org/x/net/idna/trie.go index c4ef847e7a37d..4212741728747 100644 --- a/vendor/golang.org/x/net/idna/trie.go +++ b/vendor/golang.org/x/net/idna/trie.go @@ -6,27 +6,6 @@ package idna -// appendMapping appends the mapping for the respective rune. isMapped must be -// true. A mapping is a categorization of a rune as defined in UTS #46. -func (c info) appendMapping(b []byte, s string) []byte { - index := int(c >> indexShift) - if c&xorBit == 0 { - s := mappings[index:] - return append(b, s[1:s[0]+1]...) - } - b = append(b, s...) - if c&inlineXOR == inlineXOR { - // TODO: support and handle two-byte inline masks - b[len(b)-1] ^= byte(index) - } else { - for p := len(b) - int(xorData[index]); p < len(b); p++ { - index++ - b[p] ^= xorData[index] - } - } - return b -} - // Sparse block handling code. type valueRange struct { diff --git a/vendor/golang.org/x/net/idna/trie12.0.0.go b/vendor/golang.org/x/net/idna/trie12.0.0.go new file mode 100644 index 0000000000000..bb63f904b379a --- /dev/null +++ b/vendor/golang.org/x/net/idna/trie12.0.0.go @@ -0,0 +1,31 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.16 +// +build !go1.16 + +package idna + +// appendMapping appends the mapping for the respective rune. isMapped must be +// true. A mapping is a categorization of a rune as defined in UTS #46. +func (c info) appendMapping(b []byte, s string) []byte { + index := int(c >> indexShift) + if c&xorBit == 0 { + s := mappings[index:] + return append(b, s[1:s[0]+1]...) + } + b = append(b, s...) + if c&inlineXOR == inlineXOR { + // TODO: support and handle two-byte inline masks + b[len(b)-1] ^= byte(index) + } else { + for p := len(b) - int(xorData[index]); p < len(b); p++ { + index++ + b[p] ^= xorData[index] + } + } + return b +} diff --git a/vendor/golang.org/x/net/idna/trie13.0.0.go b/vendor/golang.org/x/net/idna/trie13.0.0.go new file mode 100644 index 0000000000000..7d68a8dc13cbb --- /dev/null +++ b/vendor/golang.org/x/net/idna/trie13.0.0.go @@ -0,0 +1,31 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.16 +// +build go1.16 + +package idna + +// appendMapping appends the mapping for the respective rune. isMapped must be +// true. A mapping is a categorization of a rune as defined in UTS #46. +func (c info) appendMapping(b []byte, s string) []byte { + index := int(c >> indexShift) + if c&xorBit == 0 { + p := index + return append(b, mappings[mappingIndex[p]:mappingIndex[p+1]]...) + } + b = append(b, s...) + if c&inlineXOR == inlineXOR { + // TODO: support and handle two-byte inline masks + b[len(b)-1] ^= byte(index) + } else { + for p := len(b) - int(xorData[index]); p < len(b); p++ { + index++ + b[p] ^= xorData[index] + } + } + return b +} diff --git a/vendor/golang.org/x/oauth2/README.md b/vendor/golang.org/x/oauth2/README.md index 1473e1296d09c..781770c204649 100644 --- a/vendor/golang.org/x/oauth2/README.md +++ b/vendor/golang.org/x/oauth2/README.md @@ -19,7 +19,7 @@ See pkg.go.dev for further documentation and examples. * [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2) * [pkg.go.dev/golang.org/x/oauth2/google](https://pkg.go.dev/golang.org/x/oauth2/google) -## Policy for new packages +## Policy for new endpoints We no longer accept new provider-specific packages in this repo if all they do is add a single endpoint variable. If you just want to add a @@ -29,8 +29,12 @@ package. ## Report Issues / Send Patches -This repository uses Gerrit for code changes. To learn how to submit changes to -this repository, see https://golang.org/doc/contribute.html. - The main issue tracker for the oauth2 repository is located at https://github.com/golang/oauth2/issues. + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. In particular: + +* Excluding trivial changes, all contributions should be connected to an existing issue. +* API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted. +* The code owners are listed at [dev.golang.org/owners](https://dev.golang.org/owners#:~:text=x/oauth2). diff --git a/vendor/golang.org/x/oauth2/internal/client_appengine.go b/vendor/golang.org/x/oauth2/internal/client_appengine.go index e1755d1d9acf4..d28140f789ec9 100644 --- a/vendor/golang.org/x/oauth2/internal/client_appengine.go +++ b/vendor/golang.org/x/oauth2/internal/client_appengine.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. //go:build appengine -// +build appengine package internal diff --git a/vendor/golang.org/x/oauth2/internal/oauth2.go b/vendor/golang.org/x/oauth2/internal/oauth2.go index c0ab196cf461c..14989beaf493a 100644 --- a/vendor/golang.org/x/oauth2/internal/oauth2.go +++ b/vendor/golang.org/x/oauth2/internal/oauth2.go @@ -14,7 +14,7 @@ import ( // ParseKey converts the binary contents of a private key file // to an *rsa.PrivateKey. It detects whether the private key is in a -// PEM container or not. If so, it extracts the the private key +// PEM container or not. If so, it extracts the private key // from PEM container before conversion. It only supports PEM // containers with no passphrase. func ParseKey(key []byte) (*rsa.PrivateKey, error) { diff --git a/vendor/golang.org/x/oauth2/internal/token.go b/vendor/golang.org/x/oauth2/internal/token.go index 355c386961dd4..e83ddeef0fc29 100644 --- a/vendor/golang.org/x/oauth2/internal/token.go +++ b/vendor/golang.org/x/oauth2/internal/token.go @@ -18,9 +18,8 @@ import ( "strconv" "strings" "sync" + "sync/atomic" "time" - - "golang.org/x/net/context/ctxhttp" ) // Token represents the credentials used to authorize @@ -57,12 +56,18 @@ type Token struct { } // tokenJSON is the struct representing the HTTP response from OAuth2 -// providers returning a token in JSON form. +// providers returning a token or error in JSON form. +// https://datatracker.ietf.org/doc/html/rfc6749#section-5.1 type tokenJSON struct { AccessToken string `json:"access_token"` TokenType string `json:"token_type"` RefreshToken string `json:"refresh_token"` ExpiresIn expirationTime `json:"expires_in"` // at least PayPal returns string, while most return number + // error fields + // https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 + ErrorCode string `json:"error"` + ErrorDescription string `json:"error_description"` + ErrorURI string `json:"error_uri"` } func (e *tokenJSON) expiry() (t time.Time) { @@ -111,41 +116,60 @@ const ( AuthStyleInHeader AuthStyle = 2 ) -// authStyleCache is the set of tokenURLs we've successfully used via +// LazyAuthStyleCache is a backwards compatibility compromise to let Configs +// have a lazily-initialized AuthStyleCache. +// +// The two users of this, oauth2.Config and oauth2/clientcredentials.Config, +// both would ideally just embed an unexported AuthStyleCache but because both +// were historically allowed to be copied by value we can't retroactively add an +// uncopyable Mutex to them. +// +// We could use an atomic.Pointer, but that was added recently enough (in Go +// 1.18) that we'd break Go 1.17 users where the tests as of 2023-08-03 +// still pass. By using an atomic.Value, it supports both Go 1.17 and +// copying by value, even if that's not ideal. +type LazyAuthStyleCache struct { + v atomic.Value // of *AuthStyleCache +} + +func (lc *LazyAuthStyleCache) Get() *AuthStyleCache { + if c, ok := lc.v.Load().(*AuthStyleCache); ok { + return c + } + c := new(AuthStyleCache) + if !lc.v.CompareAndSwap(nil, c) { + c = lc.v.Load().(*AuthStyleCache) + } + return c +} + +// AuthStyleCache is the set of tokenURLs we've successfully used via // RetrieveToken and which style auth we ended up using. // It's called a cache, but it doesn't (yet?) shrink. It's expected that // the set of OAuth2 servers a program contacts over time is fixed and // small. -var authStyleCache struct { - sync.Mutex - m map[string]AuthStyle // keyed by tokenURL -} - -// ResetAuthCache resets the global authentication style cache used -// for AuthStyleUnknown token requests. -func ResetAuthCache() { - authStyleCache.Lock() - defer authStyleCache.Unlock() - authStyleCache.m = nil +type AuthStyleCache struct { + mu sync.Mutex + m map[string]AuthStyle // keyed by tokenURL } // lookupAuthStyle reports which auth style we last used with tokenURL // when calling RetrieveToken and whether we have ever done so. -func lookupAuthStyle(tokenURL string) (style AuthStyle, ok bool) { - authStyleCache.Lock() - defer authStyleCache.Unlock() - style, ok = authStyleCache.m[tokenURL] +func (c *AuthStyleCache) lookupAuthStyle(tokenURL string) (style AuthStyle, ok bool) { + c.mu.Lock() + defer c.mu.Unlock() + style, ok = c.m[tokenURL] return } // setAuthStyle adds an entry to authStyleCache, documented above. -func setAuthStyle(tokenURL string, v AuthStyle) { - authStyleCache.Lock() - defer authStyleCache.Unlock() - if authStyleCache.m == nil { - authStyleCache.m = make(map[string]AuthStyle) +func (c *AuthStyleCache) setAuthStyle(tokenURL string, v AuthStyle) { + c.mu.Lock() + defer c.mu.Unlock() + if c.m == nil { + c.m = make(map[string]AuthStyle) } - authStyleCache.m[tokenURL] = v + c.m[tokenURL] = v } // newTokenRequest returns a new *http.Request to retrieve a new token @@ -185,10 +209,10 @@ func cloneURLValues(v url.Values) url.Values { return v2 } -func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, v url.Values, authStyle AuthStyle) (*Token, error) { +func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, v url.Values, authStyle AuthStyle, styleCache *AuthStyleCache) (*Token, error) { needsAuthStyleProbe := authStyle == 0 if needsAuthStyleProbe { - if style, ok := lookupAuthStyle(tokenURL); ok { + if style, ok := styleCache.lookupAuthStyle(tokenURL); ok { authStyle = style needsAuthStyleProbe = false } else { @@ -218,7 +242,7 @@ func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, token, err = doTokenRoundTrip(ctx, req) } if needsAuthStyleProbe && err == nil { - setAuthStyle(tokenURL, authStyle) + styleCache.setAuthStyle(tokenURL, authStyle) } // Don't overwrite `RefreshToken` with an empty value // if this was a token refreshing request. @@ -229,7 +253,7 @@ func RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, } func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { - r, err := ctxhttp.Do(ctx, ContextClient(ctx), req) + r, err := ContextClient(ctx).Do(req.WithContext(ctx)) if err != nil { return nil, err } @@ -238,21 +262,29 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { if err != nil { return nil, fmt.Errorf("oauth2: cannot fetch token: %v", err) } - if code := r.StatusCode; code < 200 || code > 299 { - return nil, &RetrieveError{ - Response: r, - Body: body, - } + + failureStatus := r.StatusCode < 200 || r.StatusCode > 299 + retrieveError := &RetrieveError{ + Response: r, + Body: body, + // attempt to populate error detail below } var token *Token content, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type")) switch content { case "application/x-www-form-urlencoded", "text/plain": + // some endpoints return a query string vals, err := url.ParseQuery(string(body)) if err != nil { - return nil, err + if failureStatus { + return nil, retrieveError + } + return nil, fmt.Errorf("oauth2: cannot parse response: %v", err) } + retrieveError.ErrorCode = vals.Get("error") + retrieveError.ErrorDescription = vals.Get("error_description") + retrieveError.ErrorURI = vals.Get("error_uri") token = &Token{ AccessToken: vals.Get("access_token"), TokenType: vals.Get("token_type"), @@ -267,8 +299,14 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { default: var tj tokenJSON if err = json.Unmarshal(body, &tj); err != nil { - return nil, err + if failureStatus { + return nil, retrieveError + } + return nil, fmt.Errorf("oauth2: cannot parse json: %v", err) } + retrieveError.ErrorCode = tj.ErrorCode + retrieveError.ErrorDescription = tj.ErrorDescription + retrieveError.ErrorURI = tj.ErrorURI token = &Token{ AccessToken: tj.AccessToken, TokenType: tj.TokenType, @@ -278,17 +316,37 @@ func doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) { } json.Unmarshal(body, &token.Raw) // no error checks for optional fields } + // according to spec, servers should respond status 400 in error case + // https://www.rfc-editor.org/rfc/rfc6749#section-5.2 + // but some unorthodox servers respond 200 in error case + if failureStatus || retrieveError.ErrorCode != "" { + return nil, retrieveError + } if token.AccessToken == "" { return nil, errors.New("oauth2: server response missing access_token") } return token, nil } +// mirrors oauth2.RetrieveError type RetrieveError struct { - Response *http.Response - Body []byte + Response *http.Response + Body []byte + ErrorCode string + ErrorDescription string + ErrorURI string } func (r *RetrieveError) Error() string { + if r.ErrorCode != "" { + s := fmt.Sprintf("oauth2: %q", r.ErrorCode) + if r.ErrorDescription != "" { + s += fmt.Sprintf(" %q", r.ErrorDescription) + } + if r.ErrorURI != "" { + s += fmt.Sprintf(" %q", r.ErrorURI) + } + return s + } return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body) } diff --git a/vendor/golang.org/x/oauth2/oauth2.go b/vendor/golang.org/x/oauth2/oauth2.go index 291df5c833f96..cc7c98c25ddf0 100644 --- a/vendor/golang.org/x/oauth2/oauth2.go +++ b/vendor/golang.org/x/oauth2/oauth2.go @@ -16,6 +16,7 @@ import ( "net/url" "strings" "sync" + "time" "golang.org/x/oauth2/internal" ) @@ -57,6 +58,10 @@ type Config struct { // Scope specifies optional requested permissions. Scopes []string + + // authStyleCache caches which auth style to use when Endpoint.AuthStyle is + // the zero value (AuthStyleAutoDetect). + authStyleCache internal.LazyAuthStyleCache } // A TokenSource is anything that can return a token. @@ -140,7 +145,7 @@ func SetAuthURLParam(key, value string) AuthCodeOption { // // State is a token to protect the user from CSRF attacks. You must // always provide a non-empty string and validate that it matches the -// the state query parameter on your redirect callback. +// state query parameter on your redirect callback. // See http://tools.ietf.org/html/rfc6749#section-10.12 for more info. // // Opts may include AccessTypeOnline or AccessTypeOffline, as well @@ -290,6 +295,8 @@ type reuseTokenSource struct { mu sync.Mutex // guards t t *Token + + expiryDelta time.Duration } // Token returns the current token if it's still valid, else will @@ -305,6 +312,7 @@ func (s *reuseTokenSource) Token() (*Token, error) { if err != nil { return nil, err } + t.expiryDelta = s.expiryDelta s.t = t return t, nil } @@ -379,3 +387,30 @@ func ReuseTokenSource(t *Token, src TokenSource) TokenSource { new: src, } } + +// ReuseTokenSource returns a TokenSource that acts in the same manner as the +// TokenSource returned by ReuseTokenSource, except the expiry buffer is +// configurable. The expiration time of a token is calculated as +// t.Expiry.Add(-earlyExpiry). +func ReuseTokenSourceWithExpiry(t *Token, src TokenSource, earlyExpiry time.Duration) TokenSource { + // Don't wrap a reuseTokenSource in itself. That would work, + // but cause an unnecessary number of mutex operations. + // Just build the equivalent one. + if rt, ok := src.(*reuseTokenSource); ok { + if t == nil { + // Just use it directly, but set the expiryDelta to earlyExpiry, + // so the behavior matches what the user expects. + rt.expiryDelta = earlyExpiry + return rt + } + src = rt.new + } + if t != nil { + t.expiryDelta = earlyExpiry + } + return &reuseTokenSource{ + t: t, + new: src, + expiryDelta: earlyExpiry, + } +} diff --git a/vendor/golang.org/x/oauth2/token.go b/vendor/golang.org/x/oauth2/token.go index 822720341af14..5bbb332174885 100644 --- a/vendor/golang.org/x/oauth2/token.go +++ b/vendor/golang.org/x/oauth2/token.go @@ -16,10 +16,10 @@ import ( "golang.org/x/oauth2/internal" ) -// expiryDelta determines how earlier a token should be considered +// defaultExpiryDelta determines how earlier a token should be considered // expired than its actual expiration time. It is used to avoid late // expirations due to client-server time mismatches. -const expiryDelta = 10 * time.Second +const defaultExpiryDelta = 10 * time.Second // Token represents the credentials used to authorize // the requests to access protected resources on the OAuth 2.0 @@ -52,6 +52,11 @@ type Token struct { // raw optionally contains extra metadata from the server // when updating a token. raw interface{} + + // expiryDelta is used to calculate when a token is considered + // expired, by subtracting from Expiry. If zero, defaultExpiryDelta + // is used. + expiryDelta time.Duration } // Type returns t.TokenType if non-empty, else "Bearer". @@ -127,6 +132,11 @@ func (t *Token) expired() bool { if t.Expiry.IsZero() { return false } + + expiryDelta := defaultExpiryDelta + if t.expiryDelta != 0 { + expiryDelta = t.expiryDelta + } return t.Expiry.Round(0).Add(-expiryDelta).Before(timeNow()) } @@ -154,7 +164,7 @@ func tokenFromInternal(t *internal.Token) *Token { // This token is then mapped from *internal.Token into an *oauth2.Token which is returned along // with an error.. func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error) { - tk, err := internal.RetrieveToken(ctx, c.ClientID, c.ClientSecret, c.Endpoint.TokenURL, v, internal.AuthStyle(c.Endpoint.AuthStyle)) + tk, err := internal.RetrieveToken(ctx, c.ClientID, c.ClientSecret, c.Endpoint.TokenURL, v, internal.AuthStyle(c.Endpoint.AuthStyle), c.authStyleCache.Get()) if err != nil { if rErr, ok := err.(*internal.RetrieveError); ok { return nil, (*RetrieveError)(rErr) @@ -165,14 +175,31 @@ func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error) } // RetrieveError is the error returned when the token endpoint returns a -// non-2XX HTTP status code. +// non-2XX HTTP status code or populates RFC 6749's 'error' parameter. +// https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 type RetrieveError struct { Response *http.Response // Body is the body that was consumed by reading Response.Body. // It may be truncated. Body []byte + // ErrorCode is RFC 6749's 'error' parameter. + ErrorCode string + // ErrorDescription is RFC 6749's 'error_description' parameter. + ErrorDescription string + // ErrorURI is RFC 6749's 'error_uri' parameter. + ErrorURI string } func (r *RetrieveError) Error() string { + if r.ErrorCode != "" { + s := fmt.Sprintf("oauth2: %q", r.ErrorCode) + if r.ErrorDescription != "" { + s += fmt.Sprintf(" %q", r.ErrorDescription) + } + if r.ErrorURI != "" { + s += fmt.Sprintf(" %q", r.ErrorURI) + } + return s + } return fmt.Sprintf("oauth2: cannot fetch token: %v\nResponse: %s", r.Response.Status, r.Body) } diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index 83f112c4c808c..4756ad5f79519 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -38,7 +38,7 @@ var X86 struct { HasAVX512F bool // Advanced vector extension 512 Foundation Instructions HasAVX512CD bool // Advanced vector extension 512 Conflict Detection Instructions HasAVX512ER bool // Advanced vector extension 512 Exponential and Reciprocal Instructions - HasAVX512PF bool // Advanced vector extension 512 Prefetch Instructions Instructions + HasAVX512PF bool // Advanced vector extension 512 Prefetch Instructions HasAVX512VL bool // Advanced vector extension 512 Vector Length Extensions HasAVX512BW bool // Advanced vector extension 512 Byte and Word Instructions HasAVX512DQ bool // Advanced vector extension 512 Doubleword and Quadword Instructions @@ -54,6 +54,9 @@ var X86 struct { HasAVX512VBMI2 bool // Advanced vector extension 512 Vector Byte Manipulation Instructions 2 HasAVX512BITALG bool // Advanced vector extension 512 Bit Algorithms HasAVX512BF16 bool // Advanced vector extension 512 BFloat16 Instructions + HasAMXTile bool // Advanced Matrix Extension Tile instructions + HasAMXInt8 bool // Advanced Matrix Extension Int8 instructions + HasAMXBF16 bool // Advanced Matrix Extension BFloat16 instructions HasBMI1 bool // Bit manipulation instruction set 1 HasBMI2 bool // Bit manipulation instruction set 2 HasCX16 bool // Compare and exchange 16 Bytes diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go index f5aacfc825d5b..2dcde8285d59b 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -37,6 +37,9 @@ func initOptions() { {Name: "avx512vbmi2", Feature: &X86.HasAVX512VBMI2}, {Name: "avx512bitalg", Feature: &X86.HasAVX512BITALG}, {Name: "avx512bf16", Feature: &X86.HasAVX512BF16}, + {Name: "amxtile", Feature: &X86.HasAMXTile}, + {Name: "amxint8", Feature: &X86.HasAMXInt8}, + {Name: "amxbf16", Feature: &X86.HasAMXBF16}, {Name: "bmi1", Feature: &X86.HasBMI1}, {Name: "bmi2", Feature: &X86.HasBMI2}, {Name: "cx16", Feature: &X86.HasCX16}, @@ -138,6 +141,10 @@ func archInit() { eax71, _, _, _ := cpuid(7, 1) X86.HasAVX512BF16 = isSet(5, eax71) } + + X86.HasAMXTile = isSet(24, edx7) + X86.HasAMXInt8 = isSet(25, edx7) + X86.HasAMXBF16 = isSet(22, edx7) } func isSet(bitpos uint, value uint32) bool { diff --git a/vendor/golang.org/x/sys/cpu/endian_little.go b/vendor/golang.org/x/sys/cpu/endian_little.go index fe545966b6150..55db853efbec4 100644 --- a/vendor/golang.org/x/sys/cpu/endian_little.go +++ b/vendor/golang.org/x/sys/cpu/endian_little.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh -// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh +//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh || wasm +// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh wasm package cpu diff --git a/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go b/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go new file mode 100644 index 0000000000000..e07899b909bb0 --- /dev/null +++ b/vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go @@ -0,0 +1,30 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package unsafeheader contains header declarations for the Go runtime's +// slice and string implementations. +// +// This package allows x/sys to use types equivalent to +// reflect.SliceHeader and reflect.StringHeader without introducing +// a dependency on the (relatively heavy) "reflect" package. +package unsafeheader + +import ( + "unsafe" +) + +// Slice is the runtime representation of a slice. +// It cannot be used safely or portably and its representation may change in a later release. +type Slice struct { + Data unsafe.Pointer + Len int + Cap int +} + +// String is the runtime representation of a string. +// It cannot be used safely or portably and its representation may change in a later release. +type String struct { + Data unsafe.Pointer + Len int +} diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh index 8e3947c3686c0..e6f31d374df52 100644 --- a/vendor/golang.org/x/sys/unix/mkall.sh +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -50,7 +50,7 @@ if [[ "$GOOS" = "linux" ]]; then # Use the Docker-based build system # Files generated through docker (use $cmd so you can Ctl-C the build or run) $cmd docker build --tag generate:$GOOS $GOOS - $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && /bin/pwd):/build generate:$GOOS + $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && pwd):/build generate:$GOOS exit fi diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index be0423e6856b3..47fa6a7ebd45d 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -519,7 +519,7 @@ ccflags="$@" $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || $2 ~ /^LO_(KEY|NAME)_SIZE$/ || $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || $2 ~ /^NFC_.*_(MAX)?SIZE$/ || $2 ~ /^RAW_PAYLOAD_/ || @@ -583,6 +583,7 @@ ccflags="$@" $2 ~ /^PERF_/ || $2 ~ /^SECCOMP_MODE_/ || $2 ~ /^SEEK_/ || + $2 ~ /^SCHED_/ || $2 ~ /^SPLICE_/ || $2 ~ /^SYNC_FILE_RANGE_/ || $2 !~ /IOC_MAGIC/ && @@ -624,7 +625,7 @@ ccflags="$@" $2 ~ /^MEM/ || $2 ~ /^WG/ || $2 ~ /^FIB_RULE_/ || - $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE|IOMIN$|IOOPT$|ALIGNOFF$|DISCARD|ROTATIONAL$|ZEROOUT$|GETDISKSEQ$)/ {printf("\t%s = C.%s\n", $2, $2)} $2 ~ /^__WCOREFLAG$/ {next} $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} @@ -741,7 +742,8 @@ main(void) e = errors[i].num; if(i > 0 && errors[i-1].num == e) continue; - strcpy(buf, strerror(e)); + strncpy(buf, strerror(e), sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; // lowercase first letter: Bad -> bad, but STREAM -> STREAM. if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) buf[0] += a - A; @@ -760,7 +762,8 @@ main(void) e = signals[i].num; if(i > 0 && signals[i-1].num == e) continue; - strcpy(buf, strsignal(e)); + strncpy(buf, strsignal(e), sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; // lowercase first letter: Bad -> bad, but STREAM -> STREAM. if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) buf[0] += a - A; diff --git a/vendor/golang.org/x/sys/unix/mmap_nomremap.go b/vendor/golang.org/x/sys/unix/mmap_nomremap.go new file mode 100644 index 0000000000000..ca0513632ee33 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mmap_nomremap.go @@ -0,0 +1,14 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris +// +build aix darwin dragonfly freebsd openbsd solaris + +package unix + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} diff --git a/vendor/golang.org/x/sys/unix/mremap.go b/vendor/golang.org/x/sys/unix/mremap.go new file mode 100644 index 0000000000000..fa93d0aa90454 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mremap.go @@ -0,0 +1,53 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux || netbsd +// +build linux netbsd + +package unix + +import "unsafe" + +type mremapMmapper struct { + mmapper + mremap func(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) +} + +var mapper = &mremapMmapper{ + mmapper: mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, + }, + mremap: mremap, +} + +func (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { + if newLength <= 0 || len(oldData) == 0 || len(oldData) != cap(oldData) || flags&mremapFixed != 0 { + return nil, EINVAL + } + + pOld := &oldData[cap(oldData)-1] + m.Lock() + defer m.Unlock() + bOld := m.active[pOld] + if bOld == nil || &bOld[0] != &oldData[0] { + return nil, EINVAL + } + newAddr, errno := m.mremap(uintptr(unsafe.Pointer(&bOld[0])), uintptr(len(bOld)), uintptr(newLength), flags, 0) + if errno != nil { + return nil, errno + } + bNew := unsafe.Slice((*byte)(unsafe.Pointer(newAddr)), newLength) + pNew := &bNew[cap(bNew)-1] + if flags&mremapDontunmap == 0 { + delete(m.active, pOld) + } + m.active[pNew] = bNew + return bNew, nil +} + +func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { + return mapper.Mremap(oldData, newLength, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index c406ae00f417f..9a6e5acacbf1b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -535,21 +535,6 @@ func Fsync(fd int) error { //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg //sys munmap(addr uintptr, length uintptr) (err error) - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Madvise(b []byte, advice int) (err error) //sys Mprotect(b []byte, prot int) (err error) //sys Mlock(b []byte) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go index 7705c3270b5ec..4217de518bc8a 100644 --- a/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -601,20 +601,6 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { // Gethostuuid(uuid *byte, timeout *Timespec) (err error) // Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Madvise(b []byte, behav int) (err error) //sys Mlock(b []byte) (err error) //sys Mlockall(flags int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 206921504cb6b..135cc3cd75baf 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -510,30 +510,36 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { return nil, err } - // Find size. - n := uintptr(0) - if err := sysctl(mib, nil, &n, nil, 0); err != nil { - return nil, err - } - if n == 0 { - return nil, nil - } - if n%SizeofKinfoProc != 0 { - return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) - } + for { + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } - // Read into buffer of that size. - buf := make([]KinfoProc, n/SizeofKinfoProc) - if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { - return nil, err - } - if n%SizeofKinfoProc != 0 { - return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) - } + // Read into buffer of that size. + buf := make([]KinfoProc, n/SizeofKinfoProc) + if err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil { + if err == ENOMEM { + // Process table grew. Try again. + continue + } + return nil, err + } + if n%SizeofKinfoProc != 0 { + return nil, fmt.Errorf("sysctl() returned a size of %d, which is not a multiple of %d", n, SizeofKinfoProc) + } - // The actual call may return less than the original reported required - // size so ensure we deal with that. - return buf[:n/SizeofKinfoProc], nil + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n/SizeofKinfoProc], nil + } } //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index fbaeb5fff1484..0ba030197f2a7 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1699,12 +1699,23 @@ func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data) } +// elfNT_PRSTATUS is a copy of the debug/elf.NT_PRSTATUS constant so +// x/sys/unix doesn't need to depend on debug/elf and thus +// compress/zlib, debug/dwarf, and other packages. +const elfNT_PRSTATUS = 1 + func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { - return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout)) + var iov Iovec + iov.Base = (*byte)(unsafe.Pointer(regsout)) + iov.SetLen(int(unsafe.Sizeof(*regsout))) + return ptracePtr(PTRACE_GETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov)) } func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { - return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs)) + var iov Iovec + iov.Base = (*byte)(unsafe.Pointer(regs)) + iov.SetLen(int(unsafe.Sizeof(*regs))) + return ptracePtr(PTRACE_SETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov)) } func PtraceSetOptions(pid int, options int) (err error) { @@ -1874,7 +1885,7 @@ func Getpgrp() (pid int) { //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) -//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 +//sys pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Removexattr(path string, attr string) (err error) //sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) @@ -2113,21 +2124,7 @@ func writevRacedetect(iovecs []Iovec, n int) { // mmap varies by architecture; see syscall_linux_*.go. //sys munmap(addr uintptr, length uintptr) (err error) - -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - +//sys mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) //sys Madvise(b []byte, advice int) (err error) //sys Mprotect(b []byte, prot int) (err error) //sys Mlock(b []byte) (err error) @@ -2136,6 +2133,12 @@ func Munmap(b []byte) (err error) { //sys Munlock(b []byte) (err error) //sys Munlockall() (err error) +const ( + mremapFixed = MREMAP_FIXED + mremapDontunmap = MREMAP_DONTUNMAP + mremapMaymove = MREMAP_MAYMOVE +) + // Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, // using the specified flags. func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { @@ -2420,6 +2423,77 @@ func PthreadSigmask(how int, set, oldset *Sigset_t) error { return rtSigprocmask(how, set, oldset, _C__NSIG/8) } +//sysnb getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) +//sysnb getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) + +func Getresuid() (ruid, euid, suid int) { + var r, e, s _C_int + getresuid(&r, &e, &s) + return int(r), int(e), int(s) +} + +func Getresgid() (rgid, egid, sgid int) { + var r, e, s _C_int + getresgid(&r, &e, &s) + return int(r), int(e), int(s) +} + +// Pselect is a wrapper around the Linux pselect6 system call. +// This version does not modify the timeout argument. +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + // Per https://man7.org/linux/man-pages/man2/select.2.html#NOTES, + // The Linux pselect6() system call modifies its timeout argument. + // [Not modifying the argument] is the behavior required by POSIX.1-2001. + var mutableTimeout *Timespec + if timeout != nil { + mutableTimeout = new(Timespec) + *mutableTimeout = *timeout + } + + // The final argument of the pselect6() system call is not a + // sigset_t * pointer, but is instead a structure + var kernelMask *sigset_argpack + if sigmask != nil { + wordBits := 32 << (^uintptr(0) >> 63) // see math.intSize + + // A sigset stores one bit per signal, + // offset by 1 (because signal 0 does not exist). + // So the number of words needed is ⌈__C_NSIG - 1 / wordBits⌉. + sigsetWords := (_C__NSIG - 1 + wordBits - 1) / (wordBits) + + sigsetBytes := uintptr(sigsetWords * (wordBits / 8)) + kernelMask = &sigset_argpack{ + ss: sigmask, + ssLen: sigsetBytes, + } + } + + return pselect6(nfd, r, w, e, mutableTimeout, kernelMask) +} + +//sys schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) +//sys schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) + +// SchedSetAttr is a wrapper for sched_setattr(2) syscall. +// https://man7.org/linux/man-pages/man2/sched_setattr.2.html +func SchedSetAttr(pid int, attr *SchedAttr, flags uint) error { + if attr == nil { + return EINVAL + } + attr.Size = SizeofSchedAttr + return schedSetattr(pid, attr, flags) +} + +// SchedGetAttr is a wrapper for sched_getattr(2) syscall. +// https://man7.org/linux/man-pages/man2/sched_getattr.2.html +func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) { + attr := &SchedAttr{} + if err := schedGetattr(pid, attr, SizeofSchedAttr, flags); err != nil { + return nil, err + } + return attr, nil +} + /* * Unimplemented */ @@ -2461,7 +2535,6 @@ func PthreadSigmask(how int, set, oldset *Sigset_t) error { // MqTimedreceive // MqTimedsend // MqUnlink -// Mremap // Msgctl // Msgget // Msgrcv diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index 5b21fcfd75393..70601ce3692c0 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -40,7 +40,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index a81f5742b8a58..f5266689af0eb 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -33,7 +33,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go index 69d2d7c3db7a4..f6ab02ec15015 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -28,7 +28,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index 76d564095ef49..93fe59d25d9f5 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -31,7 +31,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 35851ef70b8d1..5e6ceee129fb2 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -32,7 +32,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err if timeout != nil { ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} } - return Pselect(nfd, r, w, e, ts, nil) + return pselect6(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) @@ -177,3 +177,14 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +//sys riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) + +func RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error) { + var setSize uintptr + + if set != nil { + setSize = uintptr(unsafe.Sizeof(*set)) + } + return riscvHWProbe(pairs, setSize, set, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 018d7d47822f7..ddd1ac8534122 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -360,6 +360,18 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) +const ( + mremapFixed = MAP_FIXED + mremapDontunmap = 0 + mremapMaymove = 0 +) + +//sys mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) = SYS_MREMAP + +func mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (uintptr, error) { + return mremapNetBSD(oldaddr, oldlength, newaddr, newlength, flags) +} + /* * Unimplemented */ @@ -564,7 +576,6 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { // mq_timedreceive // mq_timedsend // mq_unlink -// mremap // msgget // msgrcv // msgsnd diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index f9c7a9663c6a6..c5f166a115260 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -151,6 +151,21 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } +//sysnb getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) +//sysnb getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) + +func Getresuid() (ruid, euid, suid int) { + var r, e, s _C_int + getresuid(&r, &e, &s) + return int(r), int(e), int(s) +} + +func Getresgid() (rgid, egid, sgid int) { + var r, e, s _C_int + getresgid(&r, &e, &s) + return int(r), int(e), int(s) +} + //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL @@ -338,8 +353,6 @@ func Uname(uname *Utsname) error { // getgid // getitimer // getlogin -// getresgid -// getresuid // getthrid // ktrace // lfs_bmapv diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index b600a289d3386..72d23575fa435 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -716,20 +716,6 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { return } -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - // Event Ports type fileObjCookie struct { diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index 8e48c29ec332d..f6eda27050dab 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -147,6 +147,14 @@ func (m *mmapper) Munmap(data []byte) (err error) { return nil } +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + func Read(fd int, p []byte) (n int, err error) { n, err = read(fd, p) if raceenabled { @@ -541,6 +549,9 @@ func SetNonblock(fd int, nonblocking bool) (err error) { if err != nil { return err } + if (flag&O_NONBLOCK != 0) == nonblocking { + return nil + } if nonblocking { flag |= O_NONBLOCK } else { diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index d3d49ec3ed759..44e72edb42d35 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -285,25 +285,11 @@ func Close(fd int) (err error) { return } -var mapper = &mmapper{ - active: make(map[*byte][]byte), - mmap: mmap, - munmap: munmap, -} - // Dummy function: there are no semantics for Madvise on z/OS func Madvise(b []byte, advice int) (err error) { return } -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - //sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A //sysnb Getegid() (egid int) //sysnb Geteuid() (uid int) diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index de936b677b6aa..0787a043be12e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -493,6 +493,7 @@ const ( BPF_F_TEST_RUN_ON_CPU = 0x1 BPF_F_TEST_STATE_FREQ = 0x8 BPF_F_TEST_XDP_LIVE_FRAMES = 0x2 + BPF_F_XDP_DEV_BOUND_ONLY = 0x40 BPF_F_XDP_HAS_FRAGS = 0x20 BPF_H = 0x8 BPF_IMM = 0x0 @@ -826,9 +827,9 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2022-07-28)" + DM_VERSION_EXTRA = "-ioctl (2023-03-01)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x2f + DM_VERSION_MINOR = 0x30 DM_VERSION_PATCHLEVEL = 0x0 DT_BLK = 0x6 DT_CHR = 0x2 @@ -1197,6 +1198,7 @@ const ( FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 FAN_FS_ERROR = 0x8000 + FAN_INFO = 0x20 FAN_MARK_ADD = 0x1 FAN_MARK_DONT_FOLLOW = 0x4 FAN_MARK_EVICTABLE = 0x200 @@ -1233,6 +1235,8 @@ const ( FAN_REPORT_PIDFD = 0x80 FAN_REPORT_TARGET_FID = 0x1000 FAN_REPORT_TID = 0x100 + FAN_RESPONSE_INFO_AUDIT_RULE = 0x1 + FAN_RESPONSE_INFO_NONE = 0x0 FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 @@ -1860,6 +1864,7 @@ const ( MEMWRITEOOB64 = 0xc0184d15 MFD_ALLOW_SEALING = 0x2 MFD_CLOEXEC = 0x1 + MFD_EXEC = 0x10 MFD_HUGETLB = 0x4 MFD_HUGE_16GB = 0x88000000 MFD_HUGE_16MB = 0x60000000 @@ -1875,6 +1880,7 @@ const ( MFD_HUGE_8MB = 0x5c000000 MFD_HUGE_MASK = 0x3f MFD_HUGE_SHIFT = 0x1a + MFD_NOEXEC_SEAL = 0x8 MINIX2_SUPER_MAGIC = 0x2468 MINIX2_SUPER_MAGIC2 = 0x2478 MINIX3_SUPER_MAGIC = 0x4d5a @@ -1898,6 +1904,9 @@ const ( MOUNT_ATTR_SIZE_VER0 = 0x20 MOUNT_ATTR_STRICTATIME = 0x20 MOUNT_ATTR__ATIME = 0x70 + MREMAP_DONTUNMAP = 0x4 + MREMAP_FIXED = 0x2 + MREMAP_MAYMOVE = 0x1 MSDOS_SUPER_MAGIC = 0x4d44 MSG_BATCH = 0x40000 MSG_CMSG_CLOEXEC = 0x40000000 @@ -2204,6 +2213,7 @@ const ( PACKET_USER = 0x6 PACKET_VERSION = 0xa PACKET_VNET_HDR = 0xf + PACKET_VNET_HDR_SZ = 0x18 PARITY_CRC16_PR0 = 0x2 PARITY_CRC16_PR0_CCITT = 0x4 PARITY_CRC16_PR1 = 0x3 @@ -2221,6 +2231,7 @@ const ( PERF_ATTR_SIZE_VER5 = 0x70 PERF_ATTR_SIZE_VER6 = 0x78 PERF_ATTR_SIZE_VER7 = 0x80 + PERF_ATTR_SIZE_VER8 = 0x88 PERF_AUX_FLAG_COLLISION = 0x8 PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0 PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100 @@ -2361,6 +2372,7 @@ const ( PR_FP_EXC_UND = 0x40000 PR_FP_MODE_FR = 0x1 PR_FP_MODE_FRE = 0x2 + PR_GET_AUXV = 0x41555856 PR_GET_CHILD_SUBREAPER = 0x25 PR_GET_DUMPABLE = 0x3 PR_GET_ENDIAN = 0x13 @@ -2369,6 +2381,8 @@ const ( PR_GET_FP_MODE = 0x2e PR_GET_IO_FLUSHER = 0x3a PR_GET_KEEPCAPS = 0x7 + PR_GET_MDWE = 0x42 + PR_GET_MEMORY_MERGE = 0x44 PR_GET_NAME = 0x10 PR_GET_NO_NEW_PRIVS = 0x27 PR_GET_PDEATHSIG = 0x2 @@ -2389,6 +2403,7 @@ const ( PR_MCE_KILL_GET = 0x22 PR_MCE_KILL_LATE = 0x0 PR_MCE_KILL_SET = 0x1 + PR_MDWE_REFUSE_EXEC_GAIN = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b PR_MTE_TAG_MASK = 0x7fff8 @@ -2423,6 +2438,8 @@ const ( PR_SET_FP_MODE = 0x2d PR_SET_IO_FLUSHER = 0x39 PR_SET_KEEPCAPS = 0x8 + PR_SET_MDWE = 0x41 + PR_SET_MEMORY_MERGE = 0x43 PR_SET_MM = 0x23 PR_SET_MM_ARG_END = 0x9 PR_SET_MM_ARG_START = 0x8 @@ -2506,6 +2523,7 @@ const ( PTRACE_GETSIGMASK = 0x420a PTRACE_GET_RSEQ_CONFIGURATION = 0x420f PTRACE_GET_SYSCALL_INFO = 0x420e + PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG = 0x4211 PTRACE_INTERRUPT = 0x4207 PTRACE_KILL = 0x8 PTRACE_LISTEN = 0x4208 @@ -2536,6 +2554,7 @@ const ( PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG = 0x4210 PTRACE_SINGLESTEP = 0x9 PTRACE_SYSCALL = 0x18 PTRACE_SYSCALL_INFO_ENTRY = 0x1 @@ -2802,6 +2821,23 @@ const ( RWF_SUPPORTED = 0x1f RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 + SCHED_BATCH = 0x3 + SCHED_DEADLINE = 0x6 + SCHED_FIFO = 0x1 + SCHED_FLAG_ALL = 0x7f + SCHED_FLAG_DL_OVERRUN = 0x4 + SCHED_FLAG_KEEP_ALL = 0x18 + SCHED_FLAG_KEEP_PARAMS = 0x10 + SCHED_FLAG_KEEP_POLICY = 0x8 + SCHED_FLAG_RECLAIM = 0x2 + SCHED_FLAG_RESET_ON_FORK = 0x1 + SCHED_FLAG_UTIL_CLAMP = 0x60 + SCHED_FLAG_UTIL_CLAMP_MAX = 0x40 + SCHED_FLAG_UTIL_CLAMP_MIN = 0x20 + SCHED_IDLE = 0x5 + SCHED_NORMAL = 0x0 + SCHED_RESET_ON_FORK = 0x40000000 + SCHED_RR = 0x2 SCM_CREDENTIALS = 0x2 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x1d @@ -3072,7 +3108,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xd + TASKSTATS_VERSION = 0xe TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 @@ -3238,6 +3274,7 @@ const ( TP_STATUS_COPY = 0x2 TP_STATUS_CSUMNOTREADY = 0x8 TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_GSO_TCP = 0x100 TP_STATUS_KERNEL = 0x0 TP_STATUS_LOSING = 0x4 TP_STATUS_SENDING = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index a46df0f1e57ab..cfb1430018629 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80041272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 6cd4a3ea9d331..df64f2d590a07 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index c7ebee24df3f0..3025cd5b2d95f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80041272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 9d5352c3e45e8..09e1ffbef909f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 @@ -443,6 +452,7 @@ const ( TIOCSWINSZ = 0x5414 TIOCVHANGUP = 0x5437 TOSTOP = 0x100 + TPIDR2_MAGIC = 0x54504902 TUNATTACHFILTER = 0x401054d5 TUNDETACHFILTER = 0x401054d6 TUNGETDEVNETNS = 0x54e3 @@ -515,6 +525,7 @@ const ( XCASE = 0x4 XTABS = 0x1800 ZA_MAGIC = 0x54366345 + ZT_MAGIC = 0x5a544e01 _HIDIOCGRAWNAME = 0x80804804 _HIDIOCGRAWPHYS = 0x80404805 _HIDIOCGRAWUNIQ = 0x80404808 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index f26a164f4aab9..a4572354079c4 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 890bc3c9b7064..fee7dfb819dbc 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 549f26ac64667..a5b2373aea064 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index e0365e32c1746..5dde82c98ab39 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index fdccce15ca209..2e80ea6b33fcc 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index b2205c83faa16..a65dcd7cbe300 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40041272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 81aa5ad0f695a..cbd34e3d89a01 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 76807a1fd4f7d..e4afa7a3178f6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -27,22 +27,31 @@ const ( B57600 = 0x10 B576000 = 0x15 B921600 = 0x16 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1f BS1 = 0x8000 BSDLY = 0x8000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index d4a5ab9e4e06a..44f45a039d9b7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 66e65db951927..74733e260f7e7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -27,22 +27,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x127a BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 + BLKDISCARD = 0x1277 + BLKDISCARDZEROES = 0x127c BLKFLSBUF = 0x1261 BLKFRAGET = 0x1265 BLKFRASET = 0x1264 + BLKGETDISKSEQ = 0x80081280 BLKGETSIZE = 0x1260 BLKGETSIZE64 = 0x80081272 + BLKIOMIN = 0x1278 + BLKIOOPT = 0x1279 BLKPBSZGET = 0x127b BLKRAGET = 0x1263 BLKRASET = 0x1262 BLKROGET = 0x125e BLKROSET = 0x125d + BLKROTATIONAL = 0x127e BLKRRPART = 0x125f + BLKSECDISCARD = 0x127d BLKSECTGET = 0x1267 BLKSECTSET = 0x1266 BLKSSZGET = 0x1268 + BLKZEROOUT = 0x127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index f619252691e2a..f5f3934b1a9f6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -30,22 +30,31 @@ const ( B57600 = 0x1001 B576000 = 0x1006 B921600 = 0x1007 + BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 + BLKDISCARD = 0x20001277 + BLKDISCARDZEROES = 0x2000127c BLKFLSBUF = 0x20001261 BLKFRAGET = 0x20001265 BLKFRASET = 0x20001264 + BLKGETDISKSEQ = 0x40081280 BLKGETSIZE = 0x20001260 BLKGETSIZE64 = 0x40081272 + BLKIOMIN = 0x20001278 + BLKIOOPT = 0x20001279 BLKPBSZGET = 0x2000127b BLKRAGET = 0x20001263 BLKRASET = 0x20001262 BLKROGET = 0x2000125e BLKROSET = 0x2000125d + BLKROTATIONAL = 0x2000127e BLKRRPART = 0x2000125f + BLKSECDISCARD = 0x2000127d BLKSECTGET = 0x20001267 BLKSECTSET = 0x20001266 BLKSSZGET = 0x20001268 + BLKZEROOUT = 0x2000127f BOTHER = 0x1000 BS1 = 0x2000 BSDLY = 0x2000 @@ -329,6 +338,54 @@ const ( SCM_WIFI_STATUS = 0x25 SFD_CLOEXEC = 0x400000 SFD_NONBLOCK = 0x4000 + SF_FP = 0x38 + SF_I0 = 0x20 + SF_I1 = 0x24 + SF_I2 = 0x28 + SF_I3 = 0x2c + SF_I4 = 0x30 + SF_I5 = 0x34 + SF_L0 = 0x0 + SF_L1 = 0x4 + SF_L2 = 0x8 + SF_L3 = 0xc + SF_L4 = 0x10 + SF_L5 = 0x14 + SF_L6 = 0x18 + SF_L7 = 0x1c + SF_PC = 0x3c + SF_RETP = 0x40 + SF_V9_FP = 0x70 + SF_V9_I0 = 0x40 + SF_V9_I1 = 0x48 + SF_V9_I2 = 0x50 + SF_V9_I3 = 0x58 + SF_V9_I4 = 0x60 + SF_V9_I5 = 0x68 + SF_V9_L0 = 0x0 + SF_V9_L1 = 0x8 + SF_V9_L2 = 0x10 + SF_V9_L3 = 0x18 + SF_V9_L4 = 0x20 + SF_V9_L5 = 0x28 + SF_V9_L6 = 0x30 + SF_V9_L7 = 0x38 + SF_V9_PC = 0x78 + SF_V9_RETP = 0x80 + SF_V9_XARG0 = 0x88 + SF_V9_XARG1 = 0x90 + SF_V9_XARG2 = 0x98 + SF_V9_XARG3 = 0xa0 + SF_V9_XARG4 = 0xa8 + SF_V9_XARG5 = 0xb0 + SF_V9_XXARG = 0xb8 + SF_XARG0 = 0x44 + SF_XARG1 = 0x48 + SF_XARG2 = 0x4c + SF_XARG3 = 0x50 + SF_XARG4 = 0x54 + SF_XARG5 = 0x58 + SF_XXARG = 0x5c SIOCATMARK = 0x8905 SIOCGPGRP = 0x8904 SIOCGSTAMPNS_NEW = 0x40108907 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index da63d9d7822ff..14ab34a56514c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -1356,7 +1356,7 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { +func pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) { r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) n = int(r0) if e1 != 0 { @@ -1868,6 +1868,17 @@ func munmap(addr uintptr, length uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldaddr), uintptr(oldlength), uintptr(newlength), uintptr(flags), uintptr(newaddr), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Madvise(b []byte, advice int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { @@ -2172,3 +2183,37 @@ func rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { + RawSyscallNoError(SYS_GETRESUID, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { + RawSyscallNoError(SYS_GETRESGID, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) { + _, _, e1 := Syscall(SYS_SCHED_SETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) { + _, _, e1 := Syscall6(SYS_SCHED_GETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(size), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index 0b29239583b95..0ab4f2ed72064 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -531,3 +531,19 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) { + var _p0 unsafe.Pointer + if len(pairs) > 0 { + _p0 = unsafe.Pointer(&pairs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_RISCV_HWPROBE, uintptr(_p0), uintptr(len(pairs)), uintptr(cpuCount), uintptr(unsafe.Pointer(cpus)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index cdb2af5ae0f4a..35f499b32a3be 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index 9d25f76b0bfdc..3cda65b0da371 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index d3f8035169f06..1e1fea902be4a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index 887188a529e28..3b77da1107981 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -1858,3 +1858,14 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 6699a783e1f0b..9ab9abf7215fe 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { + syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) + return +} + +var libc_getresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { + syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) + return +} + +var libc_getresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s index 04f0de34b2e59..3dcacd30d7e4b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -158,6 +158,16 @@ TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $4 DATA ·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB) +TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresuid(SB) +GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getresuid_trampoline_addr(SB)/4, $libc_getresuid_trampoline<>(SB) + +TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresgid(SB) +GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getresgid_trampoline_addr(SB)/4, $libc_getresgid_trampoline<>(SB) + TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ioctl(SB) GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 1e775fe05718c..915761eab7783 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { + syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) + return +} + +var libc_getresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { + syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) + return +} + +var libc_getresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -527,6 +549,12 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { return } +var libc_ioctl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -535,10 +563,6 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { return } -var libc_ioctl_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" - // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s index 27b6f4df74f1c..2763620b01ad0 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -158,6 +158,16 @@ TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) +TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresuid(SB) +GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) + +TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresgid(SB) +GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) + TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ioctl(SB) GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index 7f6427899a5be..8e87fdf153f3e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { + syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) + return +} + +var libc_getresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { + syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) + return +} + +var libc_getresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s index b797045fd2d1d..c922314048f66 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -158,6 +158,16 @@ TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $4 DATA ·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB) +TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresuid(SB) +GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getresuid_trampoline_addr(SB)/4, $libc_getresuid_trampoline<>(SB) + +TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresgid(SB) +GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getresgid_trampoline_addr(SB)/4, $libc_getresgid_trampoline<>(SB) + TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ioctl(SB) GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index 756ef7b173620..12a7a2160e09a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { + syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) + return +} + +var libc_getresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { + syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) + return +} + +var libc_getresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s index a871266221e47..a6bc32c922049 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -158,6 +158,16 @@ TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) +TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresuid(SB) +GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) + +TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresgid(SB) +GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) + TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ioctl(SB) GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index 7bc2e24eb95f5..b19e8aa031db0 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { + syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) + return +} + +var libc_getresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { + syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) + return +} + +var libc_getresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s index 05d4bffd791ea..b4e7bceabf35b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s @@ -158,6 +158,16 @@ TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) +TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresuid(SB) +GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) + +TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresgid(SB) +GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) + TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ioctl(SB) GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go index 739be6217a376..fb99594c93748 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go @@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { + syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) + return +} + +var libc_getresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { + syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) + return +} + +var libc_getresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s index 74a25f8d64380..ca3f766009c34 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s @@ -189,6 +189,18 @@ TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) +TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_getresuid(SB) + RET +GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) + +TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_getresgid(SB) + RET +GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) + TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_ioctl(SB) RET diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go index 7d95a1978033c..32cbbbc52b51b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go @@ -519,6 +519,28 @@ var libc_getcwd_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) { + syscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid))) + return +} + +var libc_getresuid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresuid getresuid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) { + syscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid))) + return +} + +var libc_getresgid_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getresgid getresgid "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s index 990be2457404c..477a7d5b21e97 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s @@ -158,6 +158,16 @@ TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) +TEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresuid(SB) +GLOBL ·libc_getresuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB) + +TEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getresgid(SB) +GLOBL ·libc_getresgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB) + TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ioctl(SB) GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 3e594a8c09102..ef285c567b641 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -251,6 +251,8 @@ const ( SYS_ACCEPT4 = 242 SYS_RECVMMSG = 243 SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_RISCV_HWPROBE = 258 + SYS_RISCV_FLUSH_ICACHE = 259 SYS_WAIT4 = 260 SYS_PRLIMIT64 = 261 SYS_FANOTIFY_INIT = 262 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 7ea465204b7c4..e6ed7d637d063 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -372,6 +372,7 @@ const ( SYS_LANDLOCK_CREATE_RULESET = 444 SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index ca84727cfe804..494493c78c9d2 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -866,6 +866,11 @@ const ( POLLNVAL = 0x20 ) +type sigset_argpack struct { + ss *Sigset_t + ssLen uintptr +} + type SignalfdSiginfo struct { Signo uint32 Errno int32 @@ -1538,6 +1543,10 @@ const ( IFLA_GRO_MAX_SIZE = 0x3a IFLA_TSO_MAX_SIZE = 0x3b IFLA_TSO_MAX_SEGS = 0x3c + IFLA_ALLMULTI = 0x3d + IFLA_DEVLINK_PORT = 0x3e + IFLA_GSO_IPV4_MAX_SIZE = 0x3f + IFLA_GRO_IPV4_MAX_SIZE = 0x40 IFLA_PROTO_DOWN_REASON_UNSPEC = 0x0 IFLA_PROTO_DOWN_REASON_MASK = 0x1 IFLA_PROTO_DOWN_REASON_VALUE = 0x2 @@ -1968,7 +1977,7 @@ const ( NFT_MSG_GETFLOWTABLE = 0x17 NFT_MSG_DELFLOWTABLE = 0x18 NFT_MSG_GETRULE_RESET = 0x19 - NFT_MSG_MAX = 0x1a + NFT_MSG_MAX = 0x21 NFTA_LIST_UNSPEC = 0x0 NFTA_LIST_ELEM = 0x1 NFTA_HOOK_UNSPEC = 0x0 @@ -2555,6 +2564,11 @@ const ( BPF_REG_8 = 0x8 BPF_REG_9 = 0x9 BPF_REG_10 = 0xa + BPF_CGROUP_ITER_ORDER_UNSPEC = 0x0 + BPF_CGROUP_ITER_SELF_ONLY = 0x1 + BPF_CGROUP_ITER_DESCENDANTS_PRE = 0x2 + BPF_CGROUP_ITER_DESCENDANTS_POST = 0x3 + BPF_CGROUP_ITER_ANCESTORS_UP = 0x4 BPF_MAP_CREATE = 0x0 BPF_MAP_LOOKUP_ELEM = 0x1 BPF_MAP_UPDATE_ELEM = 0x2 @@ -2566,6 +2580,7 @@ const ( BPF_PROG_ATTACH = 0x8 BPF_PROG_DETACH = 0x9 BPF_PROG_TEST_RUN = 0xa + BPF_PROG_RUN = 0xa BPF_PROG_GET_NEXT_ID = 0xb BPF_MAP_GET_NEXT_ID = 0xc BPF_PROG_GET_FD_BY_ID = 0xd @@ -2610,6 +2625,7 @@ const ( BPF_MAP_TYPE_CPUMAP = 0x10 BPF_MAP_TYPE_XSKMAP = 0x11 BPF_MAP_TYPE_SOCKHASH = 0x12 + BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED = 0x13 BPF_MAP_TYPE_CGROUP_STORAGE = 0x13 BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14 BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15 @@ -2620,6 +2636,10 @@ const ( BPF_MAP_TYPE_STRUCT_OPS = 0x1a BPF_MAP_TYPE_RINGBUF = 0x1b BPF_MAP_TYPE_INODE_STORAGE = 0x1c + BPF_MAP_TYPE_TASK_STORAGE = 0x1d + BPF_MAP_TYPE_BLOOM_FILTER = 0x1e + BPF_MAP_TYPE_USER_RINGBUF = 0x1f + BPF_MAP_TYPE_CGRP_STORAGE = 0x20 BPF_PROG_TYPE_UNSPEC = 0x0 BPF_PROG_TYPE_SOCKET_FILTER = 0x1 BPF_PROG_TYPE_KPROBE = 0x2 @@ -2651,6 +2671,7 @@ const ( BPF_PROG_TYPE_EXT = 0x1c BPF_PROG_TYPE_LSM = 0x1d BPF_PROG_TYPE_SK_LOOKUP = 0x1e + BPF_PROG_TYPE_SYSCALL = 0x1f BPF_CGROUP_INET_INGRESS = 0x0 BPF_CGROUP_INET_EGRESS = 0x1 BPF_CGROUP_INET_SOCK_CREATE = 0x2 @@ -2689,6 +2710,12 @@ const ( BPF_XDP_CPUMAP = 0x23 BPF_SK_LOOKUP = 0x24 BPF_XDP = 0x25 + BPF_SK_SKB_VERDICT = 0x26 + BPF_SK_REUSEPORT_SELECT = 0x27 + BPF_SK_REUSEPORT_SELECT_OR_MIGRATE = 0x28 + BPF_PERF_EVENT = 0x29 + BPF_TRACE_KPROBE_MULTI = 0x2a + BPF_LSM_CGROUP = 0x2b BPF_LINK_TYPE_UNSPEC = 0x0 BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1 BPF_LINK_TYPE_TRACING = 0x2 @@ -2696,6 +2723,9 @@ const ( BPF_LINK_TYPE_ITER = 0x4 BPF_LINK_TYPE_NETNS = 0x5 BPF_LINK_TYPE_XDP = 0x6 + BPF_LINK_TYPE_PERF_EVENT = 0x7 + BPF_LINK_TYPE_KPROBE_MULTI = 0x8 + BPF_LINK_TYPE_STRUCT_OPS = 0x9 BPF_ANY = 0x0 BPF_NOEXIST = 0x1 BPF_EXIST = 0x2 @@ -2733,6 +2763,7 @@ const ( BPF_F_ZERO_CSUM_TX = 0x2 BPF_F_DONT_FRAGMENT = 0x4 BPF_F_SEQ_NUMBER = 0x8 + BPF_F_TUNINFO_FLAGS = 0x10 BPF_F_INDEX_MASK = 0xffffffff BPF_F_CURRENT_CPU = 0xffffffff BPF_F_CTXLEN_MASK = 0xfffff00000000 @@ -2747,6 +2778,7 @@ const ( BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8 BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20 + BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 0x40 BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 BPF_F_SYSCTL_BASE_NAME = 0x1 @@ -2771,10 +2803,16 @@ const ( BPF_LWT_ENCAP_SEG6 = 0x0 BPF_LWT_ENCAP_SEG6_INLINE = 0x1 BPF_LWT_ENCAP_IP = 0x2 + BPF_F_BPRM_SECUREEXEC = 0x1 + BPF_F_BROADCAST = 0x8 + BPF_F_EXCLUDE_INGRESS = 0x10 + BPF_SKB_TSTAMP_UNSPEC = 0x0 + BPF_SKB_TSTAMP_DELIVERY_MONO = 0x1 BPF_OK = 0x0 BPF_DROP = 0x2 BPF_REDIRECT = 0x7 BPF_LWT_REROUTE = 0x80 + BPF_FLOW_DISSECTOR_CONTINUE = 0x81 BPF_SOCK_OPS_RTO_CB_FLAG = 0x1 BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2 BPF_SOCK_OPS_STATE_CB_FLAG = 0x4 @@ -2838,6 +2876,10 @@ const ( BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6 BPF_FIB_LKUP_RET_NO_NEIGH = 0x7 BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8 + BPF_MTU_CHK_SEGS = 0x1 + BPF_MTU_CHK_RET_SUCCESS = 0x0 + BPF_MTU_CHK_RET_FRAG_NEEDED = 0x1 + BPF_MTU_CHK_RET_SEGS_TOOBIG = 0x2 BPF_FD_TYPE_RAW_TRACEPOINT = 0x0 BPF_FD_TYPE_TRACEPOINT = 0x1 BPF_FD_TYPE_KPROBE = 0x2 @@ -2847,6 +2889,19 @@ const ( BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1 BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2 BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4 + BPF_CORE_FIELD_BYTE_OFFSET = 0x0 + BPF_CORE_FIELD_BYTE_SIZE = 0x1 + BPF_CORE_FIELD_EXISTS = 0x2 + BPF_CORE_FIELD_SIGNED = 0x3 + BPF_CORE_FIELD_LSHIFT_U64 = 0x4 + BPF_CORE_FIELD_RSHIFT_U64 = 0x5 + BPF_CORE_TYPE_ID_LOCAL = 0x6 + BPF_CORE_TYPE_ID_TARGET = 0x7 + BPF_CORE_TYPE_EXISTS = 0x8 + BPF_CORE_TYPE_SIZE = 0x9 + BPF_CORE_ENUMVAL_EXISTS = 0xa + BPF_CORE_ENUMVAL_VALUE = 0xb + BPF_CORE_TYPE_MATCHES = 0xc ) const ( @@ -3605,7 +3660,7 @@ const ( ETHTOOL_MSG_PSE_GET = 0x24 ETHTOOL_MSG_PSE_SET = 0x25 ETHTOOL_MSG_RSS_GET = 0x26 - ETHTOOL_MSG_USER_MAX = 0x26 + ETHTOOL_MSG_USER_MAX = 0x2b ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3645,7 +3700,7 @@ const ( ETHTOOL_MSG_MODULE_NTF = 0x24 ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 - ETHTOOL_MSG_KERNEL_MAX = 0x26 + ETHTOOL_MSG_KERNEL_MAX = 0x2b ETHTOOL_A_HEADER_UNSPEC = 0x0 ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 @@ -3749,7 +3804,7 @@ const ( ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb ETHTOOL_A_RINGS_CQE_SIZE = 0xc ETHTOOL_A_RINGS_TX_PUSH = 0xd - ETHTOOL_A_RINGS_MAX = 0xd + ETHTOOL_A_RINGS_MAX = 0x10 ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -3787,14 +3842,14 @@ const ( ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 - ETHTOOL_A_COALESCE_MAX = 0x19 + ETHTOOL_A_COALESCE_MAX = 0x1c ETHTOOL_A_PAUSE_UNSPEC = 0x0 ETHTOOL_A_PAUSE_HEADER = 0x1 ETHTOOL_A_PAUSE_AUTONEG = 0x2 ETHTOOL_A_PAUSE_RX = 0x3 ETHTOOL_A_PAUSE_TX = 0x4 ETHTOOL_A_PAUSE_STATS = 0x5 - ETHTOOL_A_PAUSE_MAX = 0x5 + ETHTOOL_A_PAUSE_MAX = 0x6 ETHTOOL_A_PAUSE_STAT_UNSPEC = 0x0 ETHTOOL_A_PAUSE_STAT_PAD = 0x1 ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2 @@ -4444,7 +4499,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x141 + NL80211_ATTR_MAX = 0x145 NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_MATCH_SETS = 0x85 @@ -4673,7 +4728,7 @@ const ( NL80211_BAND_ATTR_HT_CAPA = 0x4 NL80211_BAND_ATTR_HT_MCS_SET = 0x3 NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 - NL80211_BAND_ATTR_MAX = 0xb + NL80211_BAND_ATTR_MAX = 0xd NL80211_BAND_ATTR_RATES = 0x2 NL80211_BAND_ATTR_VHT_CAPA = 0x8 NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 @@ -4814,7 +4869,7 @@ const ( NL80211_CMD_LEAVE_IBSS = 0x2c NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x98 + NL80211_CMD_MAX = 0x99 NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5795,6 +5850,8 @@ const ( TUN_F_TSO6 = 0x4 TUN_F_TSO_ECN = 0x8 TUN_F_UFO = 0x10 + TUN_F_USO4 = 0x20 + TUN_F_USO6 = 0x40 ) const ( @@ -5804,9 +5861,25 @@ const ( ) const ( - VIRTIO_NET_HDR_GSO_NONE = 0x0 - VIRTIO_NET_HDR_GSO_TCPV4 = 0x1 - VIRTIO_NET_HDR_GSO_UDP = 0x3 - VIRTIO_NET_HDR_GSO_TCPV6 = 0x4 - VIRTIO_NET_HDR_GSO_ECN = 0x80 + VIRTIO_NET_HDR_GSO_NONE = 0x0 + VIRTIO_NET_HDR_GSO_TCPV4 = 0x1 + VIRTIO_NET_HDR_GSO_UDP = 0x3 + VIRTIO_NET_HDR_GSO_TCPV6 = 0x4 + VIRTIO_NET_HDR_GSO_UDP_L4 = 0x5 + VIRTIO_NET_HDR_GSO_ECN = 0x80 ) + +type SchedAttr struct { + Size uint32 + Policy uint32 + Flags uint64 + Nice int32 + Priority uint32 + Runtime uint64 + Deadline uint64 + Period uint64 + Util_min uint32 + Util_max uint32 +} + +const SizeofSchedAttr = 0x38 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 4ecc1495cd0af..6d8acbcc57081 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -337,6 +337,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index 34fddff964e9b..59293c6884128 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -350,6 +350,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index 3b14a6031f3f5..40cfa38c29f65 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -328,6 +328,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 0517651ab3f9d..055bc4216d4bd 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -329,6 +329,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 3b0c518134525..f28affbc6078a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -330,6 +330,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index fccdf4dd0f460..9d71e7ccd8b06 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -333,6 +333,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 500de8fc07db4..fd5ccd332a168 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -332,6 +332,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index d0434cd2c6dba..7704de77a2f68 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -332,6 +332,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index 84206ba5347af..df00b87571ae7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -333,6 +333,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index ab078cf1f51de..0942840db6ed6 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -340,6 +340,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 42eb2c4cefd61..0348743950810 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -339,6 +339,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 31304a4e8bb51..bad06704757bc 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -339,6 +339,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index c311f9612d885..83c69c119fa1c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -357,6 +357,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 @@ -716,3 +718,26 @@ type SysvShmDesc struct { _ uint64 _ uint64 } + +type RISCVHWProbePairs struct { + Key int64 + Value uint64 +} + +const ( + RISCV_HWPROBE_KEY_MVENDORID = 0x0 + RISCV_HWPROBE_KEY_MARCHID = 0x1 + RISCV_HWPROBE_KEY_MIMPID = 0x2 + RISCV_HWPROBE_KEY_BASE_BEHAVIOR = 0x3 + RISCV_HWPROBE_BASE_BEHAVIOR_IMA = 0x1 + RISCV_HWPROBE_KEY_IMA_EXT_0 = 0x4 + RISCV_HWPROBE_IMA_FD = 0x1 + RISCV_HWPROBE_IMA_C = 0x2 + RISCV_HWPROBE_KEY_CPUPERF_0 = 0x5 + RISCV_HWPROBE_MISALIGNED_UNKNOWN = 0x0 + RISCV_HWPROBE_MISALIGNED_EMULATED = 0x1 + RISCV_HWPROBE_MISALIGNED_SLOW = 0x2 + RISCV_HWPROBE_MISALIGNED_FAST = 0x3 + RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = 0x4 + RISCV_HWPROBE_MISALIGNED_MASK = 0x7 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index bba3cefac1dd8..aa268d025cf9a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -352,6 +352,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index ad8a01380461c..444045b6c585e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -334,6 +334,8 @@ type Taskstats struct { Ac_exe_inode uint64 Wpcopy_count uint64 Wpcopy_delay_total uint64 + Irq_count uint64 + Irq_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/windows/aliases.go b/vendor/golang.org/x/sys/windows/aliases.go new file mode 100644 index 0000000000000..a20ebea63312c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/aliases.go @@ -0,0 +1,13 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build windows && go1.9 +// +build windows,go1.9 + +package windows + +import "syscall" + +type Errno = syscall.Errno +type SysProcAttr = syscall.SysProcAttr diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go new file mode 100644 index 0000000000000..115341fba66da --- /dev/null +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -0,0 +1,416 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "sync" + "sync/atomic" + "syscall" + "unsafe" +) + +// We need to use LoadLibrary and GetProcAddress from the Go runtime, because +// the these symbols are loaded by the system linker and are required to +// dynamically load additional symbols. Note that in the Go runtime, these +// return syscall.Handle and syscall.Errno, but these are the same, in fact, +// as windows.Handle and windows.Errno, and we intend to keep these the same. + +//go:linkname syscall_loadlibrary syscall.loadlibrary +func syscall_loadlibrary(filename *uint16) (handle Handle, err Errno) + +//go:linkname syscall_getprocaddress syscall.getprocaddress +func syscall_getprocaddress(handle Handle, procname *uint8) (proc uintptr, err Errno) + +// DLLError describes reasons for DLL load failures. +type DLLError struct { + Err error + ObjName string + Msg string +} + +func (e *DLLError) Error() string { return e.Msg } + +func (e *DLLError) Unwrap() error { return e.Err } + +// A DLL implements access to a single DLL. +type DLL struct { + Name string + Handle Handle +} + +// LoadDLL loads DLL file into memory. +// +// Warning: using LoadDLL without an absolute path name is subject to +// DLL preloading attacks. To safely load a system DLL, use LazyDLL +// with System set to true, or use LoadLibraryEx directly. +func LoadDLL(name string) (dll *DLL, err error) { + namep, err := UTF16PtrFromString(name) + if err != nil { + return nil, err + } + h, e := syscall_loadlibrary(namep) + if e != 0 { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to load " + name + ": " + e.Error(), + } + } + d := &DLL{ + Name: name, + Handle: h, + } + return d, nil +} + +// MustLoadDLL is like LoadDLL but panics if load operation failes. +func MustLoadDLL(name string) *DLL { + d, e := LoadDLL(name) + if e != nil { + panic(e) + } + return d +} + +// FindProc searches DLL d for procedure named name and returns *Proc +// if found. It returns an error if search fails. +func (d *DLL) FindProc(name string) (proc *Proc, err error) { + namep, err := BytePtrFromString(name) + if err != nil { + return nil, err + } + a, e := syscall_getprocaddress(d.Handle, namep) + if e != 0 { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(), + } + } + p := &Proc{ + Dll: d, + Name: name, + addr: a, + } + return p, nil +} + +// MustFindProc is like FindProc but panics if search fails. +func (d *DLL) MustFindProc(name string) *Proc { + p, e := d.FindProc(name) + if e != nil { + panic(e) + } + return p +} + +// FindProcByOrdinal searches DLL d for procedure by ordinal and returns *Proc +// if found. It returns an error if search fails. +func (d *DLL) FindProcByOrdinal(ordinal uintptr) (proc *Proc, err error) { + a, e := GetProcAddressByOrdinal(d.Handle, ordinal) + name := "#" + itoa(int(ordinal)) + if e != nil { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(), + } + } + p := &Proc{ + Dll: d, + Name: name, + addr: a, + } + return p, nil +} + +// MustFindProcByOrdinal is like FindProcByOrdinal but panics if search fails. +func (d *DLL) MustFindProcByOrdinal(ordinal uintptr) *Proc { + p, e := d.FindProcByOrdinal(ordinal) + if e != nil { + panic(e) + } + return p +} + +// Release unloads DLL d from memory. +func (d *DLL) Release() (err error) { + return FreeLibrary(d.Handle) +} + +// A Proc implements access to a procedure inside a DLL. +type Proc struct { + Dll *DLL + Name string + addr uintptr +} + +// Addr returns the address of the procedure represented by p. +// The return value can be passed to Syscall to run the procedure. +func (p *Proc) Addr() uintptr { + return p.addr +} + +//go:uintptrescapes + +// Call executes procedure p with arguments a. It will panic, if more than 15 arguments +// are supplied. +// +// The returned error is always non-nil, constructed from the result of GetLastError. +// Callers must inspect the primary return value to decide whether an error occurred +// (according to the semantics of the specific function being called) before consulting +// the error. The error will be guaranteed to contain windows.Errno. +func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { + switch len(a) { + case 0: + return syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0) + case 1: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0) + case 2: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0) + case 3: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2]) + case 4: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0) + case 5: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0) + case 6: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5]) + case 7: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0) + case 8: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0) + case 9: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]) + case 10: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0) + case 11: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0) + case 12: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11]) + case 13: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0) + case 14: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0) + case 15: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14]) + default: + panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".") + } +} + +// A LazyDLL implements access to a single DLL. +// It will delay the load of the DLL until the first +// call to its Handle method or to one of its +// LazyProc's Addr method. +type LazyDLL struct { + Name string + + // System determines whether the DLL must be loaded from the + // Windows System directory, bypassing the normal DLL search + // path. + System bool + + mu sync.Mutex + dll *DLL // non nil once DLL is loaded +} + +// Load loads DLL file d.Name into memory. It returns an error if fails. +// Load will not try to load DLL, if it is already loaded into memory. +func (d *LazyDLL) Load() error { + // Non-racy version of: + // if d.dll != nil { + if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll))) != nil { + return nil + } + d.mu.Lock() + defer d.mu.Unlock() + if d.dll != nil { + return nil + } + + // kernel32.dll is special, since it's where LoadLibraryEx comes from. + // The kernel already special-cases its name, so it's always + // loaded from system32. + var dll *DLL + var err error + if d.Name == "kernel32.dll" { + dll, err = LoadDLL(d.Name) + } else { + dll, err = loadLibraryEx(d.Name, d.System) + } + if err != nil { + return err + } + + // Non-racy version of: + // d.dll = dll + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll)), unsafe.Pointer(dll)) + return nil +} + +// mustLoad is like Load but panics if search fails. +func (d *LazyDLL) mustLoad() { + e := d.Load() + if e != nil { + panic(e) + } +} + +// Handle returns d's module handle. +func (d *LazyDLL) Handle() uintptr { + d.mustLoad() + return uintptr(d.dll.Handle) +} + +// NewProc returns a LazyProc for accessing the named procedure in the DLL d. +func (d *LazyDLL) NewProc(name string) *LazyProc { + return &LazyProc{l: d, Name: name} +} + +// NewLazyDLL creates new LazyDLL associated with DLL file. +func NewLazyDLL(name string) *LazyDLL { + return &LazyDLL{Name: name} +} + +// NewLazySystemDLL is like NewLazyDLL, but will only +// search Windows System directory for the DLL if name is +// a base name (like "advapi32.dll"). +func NewLazySystemDLL(name string) *LazyDLL { + return &LazyDLL{Name: name, System: true} +} + +// A LazyProc implements access to a procedure inside a LazyDLL. +// It delays the lookup until the Addr method is called. +type LazyProc struct { + Name string + + mu sync.Mutex + l *LazyDLL + proc *Proc +} + +// Find searches DLL for procedure named p.Name. It returns +// an error if search fails. Find will not search procedure, +// if it is already found and loaded into memory. +func (p *LazyProc) Find() error { + // Non-racy version of: + // if p.proc == nil { + if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc))) == nil { + p.mu.Lock() + defer p.mu.Unlock() + if p.proc == nil { + e := p.l.Load() + if e != nil { + return e + } + proc, e := p.l.dll.FindProc(p.Name) + if e != nil { + return e + } + // Non-racy version of: + // p.proc = proc + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc)), unsafe.Pointer(proc)) + } + } + return nil +} + +// mustFind is like Find but panics if search fails. +func (p *LazyProc) mustFind() { + e := p.Find() + if e != nil { + panic(e) + } +} + +// Addr returns the address of the procedure represented by p. +// The return value can be passed to Syscall to run the procedure. +// It will panic if the procedure cannot be found. +func (p *LazyProc) Addr() uintptr { + p.mustFind() + return p.proc.Addr() +} + +//go:uintptrescapes + +// Call executes procedure p with arguments a. It will panic, if more than 15 arguments +// are supplied. It will also panic if the procedure cannot be found. +// +// The returned error is always non-nil, constructed from the result of GetLastError. +// Callers must inspect the primary return value to decide whether an error occurred +// (according to the semantics of the specific function being called) before consulting +// the error. The error will be guaranteed to contain windows.Errno. +func (p *LazyProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { + p.mustFind() + return p.proc.Call(a...) +} + +var canDoSearchSystem32Once struct { + sync.Once + v bool +} + +func initCanDoSearchSystem32() { + // https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx says: + // "Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + // Server 2008: The LOAD_LIBRARY_SEARCH_* flags are available on + // systems that have KB2533623 installed. To determine whether the + // flags are available, use GetProcAddress to get the address of the + // AddDllDirectory, RemoveDllDirectory, or SetDefaultDllDirectories + // function. If GetProcAddress succeeds, the LOAD_LIBRARY_SEARCH_* + // flags can be used with LoadLibraryEx." + canDoSearchSystem32Once.v = (modkernel32.NewProc("AddDllDirectory").Find() == nil) +} + +func canDoSearchSystem32() bool { + canDoSearchSystem32Once.Do(initCanDoSearchSystem32) + return canDoSearchSystem32Once.v +} + +func isBaseName(name string) bool { + for _, c := range name { + if c == ':' || c == '/' || c == '\\' { + return false + } + } + return true +} + +// loadLibraryEx wraps the Windows LoadLibraryEx function. +// +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179(v=vs.85).aspx +// +// If name is not an absolute path, LoadLibraryEx searches for the DLL +// in a variety of automatic locations unless constrained by flags. +// See: https://msdn.microsoft.com/en-us/library/ff919712%28VS.85%29.aspx +func loadLibraryEx(name string, system bool) (*DLL, error) { + loadDLL := name + var flags uintptr + if system { + if canDoSearchSystem32() { + flags = LOAD_LIBRARY_SEARCH_SYSTEM32 + } else if isBaseName(name) { + // WindowsXP or unpatched Windows machine + // trying to load "foo.dll" out of the system + // folder, but LoadLibraryEx doesn't support + // that yet on their system, so emulate it. + systemdir, err := GetSystemDirectory() + if err != nil { + return nil, err + } + loadDLL = systemdir + "\\" + name + } + } + h, err := LoadLibraryEx(loadDLL, 0, flags) + if err != nil { + return nil, err + } + return &DLL{Name: name, Handle: h}, nil +} + +type errString string + +func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/sys/windows/empty.s b/vendor/golang.org/x/sys/windows/empty.s new file mode 100644 index 0000000000000..fdbbbcd31717e --- /dev/null +++ b/vendor/golang.org/x/sys/windows/empty.s @@ -0,0 +1,9 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.12 +// +build !go1.12 + +// This file is here to allow bodyless functions with go:linkname for Go 1.11 +// and earlier (see https://golang.org/issue/23311). diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go new file mode 100644 index 0000000000000..b8ad192506890 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/env_windows.go @@ -0,0 +1,54 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Windows environment variables. + +package windows + +import ( + "syscall" + "unsafe" +) + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} + +// Returns a default environment associated with the token, rather than the current +// process. If inheritExisting is true, then this environment also inherits the +// environment of the current process. +func (token Token) Environ(inheritExisting bool) (env []string, err error) { + var block *uint16 + err = CreateEnvironmentBlock(&block, token, inheritExisting) + if err != nil { + return nil, err + } + defer DestroyEnvironmentBlock(block) + blockp := unsafe.Pointer(block) + for { + entry := UTF16PtrToString((*uint16)(blockp)) + if len(entry) == 0 { + break + } + env = append(env, entry) + blockp = unsafe.Add(blockp, 2*(len(entry)+1)) + } + return env, nil +} + +func Unsetenv(key string) error { + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/windows/eventlog.go b/vendor/golang.org/x/sys/windows/eventlog.go new file mode 100644 index 0000000000000..2cd60645ee7d3 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/eventlog.go @@ -0,0 +1,21 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build windows +// +build windows + +package windows + +const ( + EVENTLOG_SUCCESS = 0 + EVENTLOG_ERROR_TYPE = 1 + EVENTLOG_WARNING_TYPE = 2 + EVENTLOG_INFORMATION_TYPE = 4 + EVENTLOG_AUDIT_SUCCESS = 8 + EVENTLOG_AUDIT_FAILURE = 16 +) + +//sys RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) [failretval==0] = advapi32.RegisterEventSourceW +//sys DeregisterEventSource(handle Handle) (err error) = advapi32.DeregisterEventSource +//sys ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) = advapi32.ReportEventW diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go new file mode 100644 index 0000000000000..a52e0331d8bcd --- /dev/null +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -0,0 +1,183 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Fork, exec, wait, etc. + +package windows + +import ( + errorspkg "errors" + "unsafe" +) + +// EscapeArg rewrites command line argument s as prescribed +// in http://msdn.microsoft.com/en-us/library/ms880421. +// This function returns "" (2 double quotes) if s is empty. +// Alternatively, these transformations are done: +// - every back slash (\) is doubled, but only if immediately +// followed by double quote ("); +// - every double quote (") is escaped by back slash (\); +// - finally, s is wrapped with double quotes (arg -> "arg"), +// but only if there is space or tab inside s. +func EscapeArg(s string) string { + if len(s) == 0 { + return "\"\"" + } + n := len(s) + hasSpace := false + for i := 0; i < len(s); i++ { + switch s[i] { + case '"', '\\': + n++ + case ' ', '\t': + hasSpace = true + } + } + if hasSpace { + n += 2 + } + if n == len(s) { + return s + } + + qs := make([]byte, n) + j := 0 + if hasSpace { + qs[j] = '"' + j++ + } + slashes := 0 + for i := 0; i < len(s); i++ { + switch s[i] { + default: + slashes = 0 + qs[j] = s[i] + case '\\': + slashes++ + qs[j] = s[i] + case '"': + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '\\' + j++ + qs[j] = s[i] + } + j++ + } + if hasSpace { + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '"' + j++ + } + return string(qs[:j]) +} + +// ComposeCommandLine escapes and joins the given arguments suitable for use as a Windows command line, +// in CreateProcess's CommandLine argument, CreateService/ChangeServiceConfig's BinaryPathName argument, +// or any program that uses CommandLineToArgv. +func ComposeCommandLine(args []string) string { + var commandLine string + for i := range args { + if i > 0 { + commandLine += " " + } + commandLine += EscapeArg(args[i]) + } + return commandLine +} + +// DecomposeCommandLine breaks apart its argument command line into unescaped parts using CommandLineToArgv, +// as gathered from GetCommandLine, QUERY_SERVICE_CONFIG's BinaryPathName argument, or elsewhere that +// command lines are passed around. +// DecomposeCommandLine returns error if commandLine contains NUL. +func DecomposeCommandLine(commandLine string) ([]string, error) { + if len(commandLine) == 0 { + return []string{}, nil + } + utf16CommandLine, err := UTF16FromString(commandLine) + if err != nil { + return nil, errorspkg.New("string with NUL passed to DecomposeCommandLine") + } + var argc int32 + argv, err := CommandLineToArgv(&utf16CommandLine[0], &argc) + if err != nil { + return nil, err + } + defer LocalFree(Handle(unsafe.Pointer(argv))) + var args []string + for _, v := range (*argv)[:argc] { + args = append(args, UTF16ToString((*v)[:])) + } + return args, nil +} + +func CloseOnExec(fd Handle) { + SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0) +} + +// FullPath retrieves the full path of the specified file. +func FullPath(name string) (path string, err error) { + p, err := UTF16PtrFromString(name) + if err != nil { + return "", err + } + n := uint32(100) + for { + buf := make([]uint16, n) + n, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil) + if err != nil { + return "", err + } + if n <= uint32(len(buf)) { + return UTF16ToString(buf[:n]), nil + } + } +} + +// NewProcThreadAttributeList allocates a new ProcThreadAttributeListContainer, with the requested maximum number of attributes. +func NewProcThreadAttributeList(maxAttrCount uint32) (*ProcThreadAttributeListContainer, error) { + var size uintptr + err := initializeProcThreadAttributeList(nil, maxAttrCount, 0, &size) + if err != ERROR_INSUFFICIENT_BUFFER { + if err == nil { + return nil, errorspkg.New("unable to query buffer size from InitializeProcThreadAttributeList") + } + return nil, err + } + alloc, err := LocalAlloc(LMEM_FIXED, uint32(size)) + if err != nil { + return nil, err + } + // size is guaranteed to be ≥1 by InitializeProcThreadAttributeList. + al := &ProcThreadAttributeListContainer{data: (*ProcThreadAttributeList)(unsafe.Pointer(alloc))} + err = initializeProcThreadAttributeList(al.data, maxAttrCount, 0, &size) + if err != nil { + return nil, err + } + return al, err +} + +// Update modifies the ProcThreadAttributeList using UpdateProcThreadAttribute. +func (al *ProcThreadAttributeListContainer) Update(attribute uintptr, value unsafe.Pointer, size uintptr) error { + al.pointers = append(al.pointers, value) + return updateProcThreadAttribute(al.data, 0, attribute, value, size, nil, nil) +} + +// Delete frees ProcThreadAttributeList's resources. +func (al *ProcThreadAttributeListContainer) Delete() { + deleteProcThreadAttributeList(al.data) + LocalFree(Handle(unsafe.Pointer(al.data))) + al.data = nil + al.pointers = nil +} + +// List returns the actual ProcThreadAttributeList to be passed to StartupInfoEx. +func (al *ProcThreadAttributeListContainer) List() *ProcThreadAttributeList { + return al.data +} diff --git a/vendor/golang.org/x/sys/windows/memory_windows.go b/vendor/golang.org/x/sys/windows/memory_windows.go new file mode 100644 index 0000000000000..6dc0920a84da2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/memory_windows.go @@ -0,0 +1,48 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +const ( + MEM_COMMIT = 0x00001000 + MEM_RESERVE = 0x00002000 + MEM_DECOMMIT = 0x00004000 + MEM_RELEASE = 0x00008000 + MEM_RESET = 0x00080000 + MEM_TOP_DOWN = 0x00100000 + MEM_WRITE_WATCH = 0x00200000 + MEM_PHYSICAL = 0x00400000 + MEM_RESET_UNDO = 0x01000000 + MEM_LARGE_PAGES = 0x20000000 + + PAGE_NOACCESS = 0x00000001 + PAGE_READONLY = 0x00000002 + PAGE_READWRITE = 0x00000004 + PAGE_WRITECOPY = 0x00000008 + PAGE_EXECUTE = 0x00000010 + PAGE_EXECUTE_READ = 0x00000020 + PAGE_EXECUTE_READWRITE = 0x00000040 + PAGE_EXECUTE_WRITECOPY = 0x00000080 + PAGE_GUARD = 0x00000100 + PAGE_NOCACHE = 0x00000200 + PAGE_WRITECOMBINE = 0x00000400 + PAGE_TARGETS_INVALID = 0x40000000 + PAGE_TARGETS_NO_UPDATE = 0x40000000 + + QUOTA_LIMITS_HARDWS_MIN_DISABLE = 0x00000002 + QUOTA_LIMITS_HARDWS_MIN_ENABLE = 0x00000001 + QUOTA_LIMITS_HARDWS_MAX_DISABLE = 0x00000008 + QUOTA_LIMITS_HARDWS_MAX_ENABLE = 0x00000004 +) + +type MemoryBasicInformation struct { + BaseAddress uintptr + AllocationBase uintptr + AllocationProtect uint32 + PartitionId uint16 + RegionSize uintptr + State uint32 + Protect uint32 + Type uint32 +} diff --git a/vendor/golang.org/x/sys/windows/mkerrors.bash b/vendor/golang.org/x/sys/windows/mkerrors.bash new file mode 100644 index 0000000000000..58e0188fb71f8 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mkerrors.bash @@ -0,0 +1,70 @@ +#!/bin/bash + +# Copyright 2019 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +set -e +shopt -s nullglob + +winerror="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/winerror.h | sort -Vr | head -n 1)" +[[ -n $winerror ]] || { echo "Unable to find winerror.h" >&2; exit 1; } +ntstatus="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/ntstatus.h | sort -Vr | head -n 1)" +[[ -n $ntstatus ]] || { echo "Unable to find ntstatus.h" >&2; exit 1; } + +declare -A errors + +{ + echo "// Code generated by 'mkerrors.bash'; DO NOT EDIT." + echo + echo "package windows" + echo "import \"syscall\"" + echo "const (" + + while read -r line; do + unset vtype + if [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?([A-Z][A-Z0-9_]+k?)\)? ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?((0x)?[0-9A-Fa-f]+)L?\)? ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + vtype="${BASH_REMATCH[2]}" + elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +\(\(([A-Z]+)\)((0x)?[0-9A-Fa-f]+)L?\) ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + vtype="${BASH_REMATCH[2]}" + else + continue + fi + [[ -n $key && -n $value ]] || continue + [[ -z ${errors["$key"]} ]] || continue + errors["$key"]="$value" + if [[ -v vtype ]]; then + if [[ $key == FACILITY_* || $key == NO_ERROR ]]; then + vtype="" + elif [[ $vtype == *HANDLE* || $vtype == *HRESULT* ]]; then + vtype="Handle" + else + vtype="syscall.Errno" + fi + last_vtype="$vtype" + else + vtype="" + if [[ $last_vtype == Handle && $value == NO_ERROR ]]; then + value="S_OK" + elif [[ $last_vtype == syscall.Errno && $value == NO_ERROR ]]; then + value="ERROR_SUCCESS" + fi + fi + + echo "$key $vtype = $value" + done < "$winerror" + + while read -r line; do + [[ $line =~ ^#define\ (STATUS_[^\s]+)\ +\(\(NTSTATUS\)((0x)?[0-9a-fA-F]+)L?\) ]] || continue + echo "${BASH_REMATCH[1]} NTStatus = ${BASH_REMATCH[2]}" + done < "$ntstatus" + + echo ")" +} | gofmt > "zerrors_windows.go" diff --git a/vendor/golang.org/x/sys/windows/mkknownfolderids.bash b/vendor/golang.org/x/sys/windows/mkknownfolderids.bash new file mode 100644 index 0000000000000..ab8924e936f5c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mkknownfolderids.bash @@ -0,0 +1,27 @@ +#!/bin/bash + +# Copyright 2019 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +set -e +shopt -s nullglob + +knownfolders="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/um/KnownFolders.h | sort -Vr | head -n 1)" +[[ -n $knownfolders ]] || { echo "Unable to find KnownFolders.h" >&2; exit 1; } + +{ + echo "// Code generated by 'mkknownfolderids.bash'; DO NOT EDIT." + echo + echo "package windows" + echo "type KNOWNFOLDERID GUID" + echo "var (" + while read -r line; do + [[ $line =~ DEFINE_KNOWN_FOLDER\((FOLDERID_[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+)\) ]] || continue + printf "%s = &KNOWNFOLDERID{0x%08x, 0x%04x, 0x%04x, [8]byte{0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}}\n" \ + "${BASH_REMATCH[1]}" $(( "${BASH_REMATCH[2]}" )) $(( "${BASH_REMATCH[3]}" )) $(( "${BASH_REMATCH[4]}" )) \ + $(( "${BASH_REMATCH[5]}" )) $(( "${BASH_REMATCH[6]}" )) $(( "${BASH_REMATCH[7]}" )) $(( "${BASH_REMATCH[8]}" )) \ + $(( "${BASH_REMATCH[9]}" )) $(( "${BASH_REMATCH[10]}" )) $(( "${BASH_REMATCH[11]}" )) $(( "${BASH_REMATCH[12]}" )) + done < "$knownfolders" + echo ")" +} | gofmt > "zknownfolderids_windows.go" diff --git a/vendor/golang.org/x/sys/windows/mksyscall.go b/vendor/golang.org/x/sys/windows/mksyscall.go new file mode 100644 index 0000000000000..8563f79c57f89 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mksyscall.go @@ -0,0 +1,10 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build generate +// +build generate + +package windows + +//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go setupapi_windows.go diff --git a/vendor/golang.org/x/sys/windows/race.go b/vendor/golang.org/x/sys/windows/race.go new file mode 100644 index 0000000000000..9196b089ca14c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race.go @@ -0,0 +1,31 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build windows && race +// +build windows,race + +package windows + +import ( + "runtime" + "unsafe" +) + +const raceenabled = true + +func raceAcquire(addr unsafe.Pointer) { + runtime.RaceAcquire(addr) +} + +func raceReleaseMerge(addr unsafe.Pointer) { + runtime.RaceReleaseMerge(addr) +} + +func raceReadRange(addr unsafe.Pointer, len int) { + runtime.RaceReadRange(addr, len) +} + +func raceWriteRange(addr unsafe.Pointer, len int) { + runtime.RaceWriteRange(addr, len) +} diff --git a/vendor/golang.org/x/sys/windows/race0.go b/vendor/golang.org/x/sys/windows/race0.go new file mode 100644 index 0000000000000..7bae4817a06c6 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race0.go @@ -0,0 +1,26 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build windows && !race +// +build windows,!race + +package windows + +import ( + "unsafe" +) + +const raceenabled = false + +func raceAcquire(addr unsafe.Pointer) { +} + +func raceReleaseMerge(addr unsafe.Pointer) { +} + +func raceReadRange(addr unsafe.Pointer, len int) { +} + +func raceWriteRange(addr unsafe.Pointer, len int) { +} diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go new file mode 100644 index 0000000000000..d414ef13bef04 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -0,0 +1,1444 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "syscall" + "unsafe" + + "golang.org/x/sys/internal/unsafeheader" +) + +const ( + NameUnknown = 0 + NameFullyQualifiedDN = 1 + NameSamCompatible = 2 + NameDisplay = 3 + NameUniqueId = 6 + NameCanonical = 7 + NameUserPrincipal = 8 + NameCanonicalEx = 9 + NameServicePrincipal = 10 + NameDnsDomain = 12 +) + +// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. +// http://blogs.msdn.com/b/drnick/archive/2007/12/19/windows-and-upn-format-credentials.aspx +//sys TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.TranslateNameW +//sys GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.GetUserNameExW + +// TranslateAccountName converts a directory service +// object name from one format to another. +func TranslateAccountName(username string, from, to uint32, initSize int) (string, error) { + u, e := UTF16PtrFromString(username) + if e != nil { + return "", e + } + n := uint32(50) + for { + b := make([]uint16, n) + e = TranslateName(u, from, to, &b[0], &n) + if e == nil { + return UTF16ToString(b[:n]), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} + +const ( + // do not reorder + NetSetupUnknownStatus = iota + NetSetupUnjoined + NetSetupWorkgroupName + NetSetupDomainName +) + +type UserInfo10 struct { + Name *uint16 + Comment *uint16 + UsrComment *uint16 + FullName *uint16 +} + +//sys NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) = netapi32.NetUserGetInfo +//sys NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) = netapi32.NetGetJoinInformation +//sys NetApiBufferFree(buf *byte) (neterr error) = netapi32.NetApiBufferFree + +const ( + // do not reorder + SidTypeUser = 1 + iota + SidTypeGroup + SidTypeDomain + SidTypeAlias + SidTypeWellKnownGroup + SidTypeDeletedAccount + SidTypeInvalid + SidTypeUnknown + SidTypeComputer + SidTypeLabel +) + +type SidIdentifierAuthority struct { + Value [6]byte +} + +var ( + SECURITY_NULL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 0}} + SECURITY_WORLD_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 1}} + SECURITY_LOCAL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 2}} + SECURITY_CREATOR_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 3}} + SECURITY_NON_UNIQUE_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 4}} + SECURITY_NT_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 5}} + SECURITY_MANDATORY_LABEL_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 16}} +) + +const ( + SECURITY_NULL_RID = 0 + SECURITY_WORLD_RID = 0 + SECURITY_LOCAL_RID = 0 + SECURITY_CREATOR_OWNER_RID = 0 + SECURITY_CREATOR_GROUP_RID = 1 + SECURITY_DIALUP_RID = 1 + SECURITY_NETWORK_RID = 2 + SECURITY_BATCH_RID = 3 + SECURITY_INTERACTIVE_RID = 4 + SECURITY_LOGON_IDS_RID = 5 + SECURITY_SERVICE_RID = 6 + SECURITY_LOCAL_SYSTEM_RID = 18 + SECURITY_BUILTIN_DOMAIN_RID = 32 + SECURITY_PRINCIPAL_SELF_RID = 10 + SECURITY_CREATOR_OWNER_SERVER_RID = 0x2 + SECURITY_CREATOR_GROUP_SERVER_RID = 0x3 + SECURITY_LOGON_IDS_RID_COUNT = 0x3 + SECURITY_ANONYMOUS_LOGON_RID = 0x7 + SECURITY_PROXY_RID = 0x8 + SECURITY_ENTERPRISE_CONTROLLERS_RID = 0x9 + SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID + SECURITY_AUTHENTICATED_USER_RID = 0xb + SECURITY_RESTRICTED_CODE_RID = 0xc + SECURITY_NT_NON_UNIQUE_RID = 0x15 +) + +// Predefined domain-relative RIDs for local groups. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa379649(v=vs.85).aspx +const ( + DOMAIN_ALIAS_RID_ADMINS = 0x220 + DOMAIN_ALIAS_RID_USERS = 0x221 + DOMAIN_ALIAS_RID_GUESTS = 0x222 + DOMAIN_ALIAS_RID_POWER_USERS = 0x223 + DOMAIN_ALIAS_RID_ACCOUNT_OPS = 0x224 + DOMAIN_ALIAS_RID_SYSTEM_OPS = 0x225 + DOMAIN_ALIAS_RID_PRINT_OPS = 0x226 + DOMAIN_ALIAS_RID_BACKUP_OPS = 0x227 + DOMAIN_ALIAS_RID_REPLICATOR = 0x228 + DOMAIN_ALIAS_RID_RAS_SERVERS = 0x229 + DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = 0x22a + DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS = 0x22b + DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS = 0x22c + DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = 0x22d + DOMAIN_ALIAS_RID_MONITORING_USERS = 0x22e + DOMAIN_ALIAS_RID_LOGGING_USERS = 0x22f + DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS = 0x230 + DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS = 0x231 + DOMAIN_ALIAS_RID_DCOM_USERS = 0x232 + DOMAIN_ALIAS_RID_IUSERS = 0x238 + DOMAIN_ALIAS_RID_CRYPTO_OPERATORS = 0x239 + DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP = 0x23b + DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP = 0x23c + DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP = 0x23d + DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP = 0x23e +) + +//sys LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountSidW +//sys LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountNameW +//sys ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) = advapi32.ConvertSidToStringSidW +//sys ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) = advapi32.ConvertStringSidToSidW +//sys GetLengthSid(sid *SID) (len uint32) = advapi32.GetLengthSid +//sys CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid +//sys AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid +//sys createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) = advapi32.CreateWellKnownSid +//sys isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) = advapi32.IsWellKnownSid +//sys FreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid +//sys EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid +//sys getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) = advapi32.GetSidIdentifierAuthority +//sys getSidSubAuthorityCount(sid *SID) (count *uint8) = advapi32.GetSidSubAuthorityCount +//sys getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) = advapi32.GetSidSubAuthority +//sys isValidSid(sid *SID) (isValid bool) = advapi32.IsValidSid + +// The security identifier (SID) structure is a variable-length +// structure used to uniquely identify users or groups. +type SID struct{} + +// StringToSid converts a string-format security identifier +// SID into a valid, functional SID. +func StringToSid(s string) (*SID, error) { + var sid *SID + p, e := UTF16PtrFromString(s) + if e != nil { + return nil, e + } + e = ConvertStringSidToSid(p, &sid) + if e != nil { + return nil, e + } + defer LocalFree((Handle)(unsafe.Pointer(sid))) + return sid.Copy() +} + +// LookupSID retrieves a security identifier SID for the account +// and the name of the domain on which the account was found. +// System specify target computer to search. +func LookupSID(system, account string) (sid *SID, domain string, accType uint32, err error) { + if len(account) == 0 { + return nil, "", 0, syscall.EINVAL + } + acc, e := UTF16PtrFromString(account) + if e != nil { + return nil, "", 0, e + } + var sys *uint16 + if len(system) > 0 { + sys, e = UTF16PtrFromString(system) + if e != nil { + return nil, "", 0, e + } + } + n := uint32(50) + dn := uint32(50) + for { + b := make([]byte, n) + db := make([]uint16, dn) + sid = (*SID)(unsafe.Pointer(&b[0])) + e = LookupAccountName(sys, acc, sid, &n, &db[0], &dn, &accType) + if e == nil { + return sid, UTF16ToString(db), accType, nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return nil, "", 0, e + } + if n <= uint32(len(b)) { + return nil, "", 0, e + } + } +} + +// String converts SID to a string format suitable for display, storage, or transmission. +func (sid *SID) String() string { + var s *uint16 + e := ConvertSidToStringSid(sid, &s) + if e != nil { + return "" + } + defer LocalFree((Handle)(unsafe.Pointer(s))) + return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]) +} + +// Len returns the length, in bytes, of a valid security identifier SID. +func (sid *SID) Len() int { + return int(GetLengthSid(sid)) +} + +// Copy creates a duplicate of security identifier SID. +func (sid *SID) Copy() (*SID, error) { + b := make([]byte, sid.Len()) + sid2 := (*SID)(unsafe.Pointer(&b[0])) + e := CopySid(uint32(len(b)), sid2, sid) + if e != nil { + return nil, e + } + return sid2, nil +} + +// IdentifierAuthority returns the identifier authority of the SID. +func (sid *SID) IdentifierAuthority() SidIdentifierAuthority { + return *getSidIdentifierAuthority(sid) +} + +// SubAuthorityCount returns the number of sub-authorities in the SID. +func (sid *SID) SubAuthorityCount() uint8 { + return *getSidSubAuthorityCount(sid) +} + +// SubAuthority returns the sub-authority of the SID as specified by +// the index, which must be less than sid.SubAuthorityCount(). +func (sid *SID) SubAuthority(idx uint32) uint32 { + if idx >= uint32(sid.SubAuthorityCount()) { + panic("sub-authority index out of range") + } + return *getSidSubAuthority(sid, idx) +} + +// IsValid returns whether the SID has a valid revision and length. +func (sid *SID) IsValid() bool { + return isValidSid(sid) +} + +// Equals compares two SIDs for equality. +func (sid *SID) Equals(sid2 *SID) bool { + return EqualSid(sid, sid2) +} + +// IsWellKnown determines whether the SID matches the well-known sidType. +func (sid *SID) IsWellKnown(sidType WELL_KNOWN_SID_TYPE) bool { + return isWellKnownSid(sid, sidType) +} + +// LookupAccount retrieves the name of the account for this SID +// and the name of the first domain on which this SID is found. +// System specify target computer to search for. +func (sid *SID) LookupAccount(system string) (account, domain string, accType uint32, err error) { + var sys *uint16 + if len(system) > 0 { + sys, err = UTF16PtrFromString(system) + if err != nil { + return "", "", 0, err + } + } + n := uint32(50) + dn := uint32(50) + for { + b := make([]uint16, n) + db := make([]uint16, dn) + e := LookupAccountSid(sys, sid, &b[0], &n, &db[0], &dn, &accType) + if e == nil { + return UTF16ToString(b), UTF16ToString(db), accType, nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", "", 0, e + } + if n <= uint32(len(b)) { + return "", "", 0, e + } + } +} + +// Various types of pre-specified SIDs that can be synthesized and compared at runtime. +type WELL_KNOWN_SID_TYPE uint32 + +const ( + WinNullSid = 0 + WinWorldSid = 1 + WinLocalSid = 2 + WinCreatorOwnerSid = 3 + WinCreatorGroupSid = 4 + WinCreatorOwnerServerSid = 5 + WinCreatorGroupServerSid = 6 + WinNtAuthoritySid = 7 + WinDialupSid = 8 + WinNetworkSid = 9 + WinBatchSid = 10 + WinInteractiveSid = 11 + WinServiceSid = 12 + WinAnonymousSid = 13 + WinProxySid = 14 + WinEnterpriseControllersSid = 15 + WinSelfSid = 16 + WinAuthenticatedUserSid = 17 + WinRestrictedCodeSid = 18 + WinTerminalServerSid = 19 + WinRemoteLogonIdSid = 20 + WinLogonIdsSid = 21 + WinLocalSystemSid = 22 + WinLocalServiceSid = 23 + WinNetworkServiceSid = 24 + WinBuiltinDomainSid = 25 + WinBuiltinAdministratorsSid = 26 + WinBuiltinUsersSid = 27 + WinBuiltinGuestsSid = 28 + WinBuiltinPowerUsersSid = 29 + WinBuiltinAccountOperatorsSid = 30 + WinBuiltinSystemOperatorsSid = 31 + WinBuiltinPrintOperatorsSid = 32 + WinBuiltinBackupOperatorsSid = 33 + WinBuiltinReplicatorSid = 34 + WinBuiltinPreWindows2000CompatibleAccessSid = 35 + WinBuiltinRemoteDesktopUsersSid = 36 + WinBuiltinNetworkConfigurationOperatorsSid = 37 + WinAccountAdministratorSid = 38 + WinAccountGuestSid = 39 + WinAccountKrbtgtSid = 40 + WinAccountDomainAdminsSid = 41 + WinAccountDomainUsersSid = 42 + WinAccountDomainGuestsSid = 43 + WinAccountComputersSid = 44 + WinAccountControllersSid = 45 + WinAccountCertAdminsSid = 46 + WinAccountSchemaAdminsSid = 47 + WinAccountEnterpriseAdminsSid = 48 + WinAccountPolicyAdminsSid = 49 + WinAccountRasAndIasServersSid = 50 + WinNTLMAuthenticationSid = 51 + WinDigestAuthenticationSid = 52 + WinSChannelAuthenticationSid = 53 + WinThisOrganizationSid = 54 + WinOtherOrganizationSid = 55 + WinBuiltinIncomingForestTrustBuildersSid = 56 + WinBuiltinPerfMonitoringUsersSid = 57 + WinBuiltinPerfLoggingUsersSid = 58 + WinBuiltinAuthorizationAccessSid = 59 + WinBuiltinTerminalServerLicenseServersSid = 60 + WinBuiltinDCOMUsersSid = 61 + WinBuiltinIUsersSid = 62 + WinIUserSid = 63 + WinBuiltinCryptoOperatorsSid = 64 + WinUntrustedLabelSid = 65 + WinLowLabelSid = 66 + WinMediumLabelSid = 67 + WinHighLabelSid = 68 + WinSystemLabelSid = 69 + WinWriteRestrictedCodeSid = 70 + WinCreatorOwnerRightsSid = 71 + WinCacheablePrincipalsGroupSid = 72 + WinNonCacheablePrincipalsGroupSid = 73 + WinEnterpriseReadonlyControllersSid = 74 + WinAccountReadonlyControllersSid = 75 + WinBuiltinEventLogReadersGroup = 76 + WinNewEnterpriseReadonlyControllersSid = 77 + WinBuiltinCertSvcDComAccessGroup = 78 + WinMediumPlusLabelSid = 79 + WinLocalLogonSid = 80 + WinConsoleLogonSid = 81 + WinThisOrganizationCertificateSid = 82 + WinApplicationPackageAuthoritySid = 83 + WinBuiltinAnyPackageSid = 84 + WinCapabilityInternetClientSid = 85 + WinCapabilityInternetClientServerSid = 86 + WinCapabilityPrivateNetworkClientServerSid = 87 + WinCapabilityPicturesLibrarySid = 88 + WinCapabilityVideosLibrarySid = 89 + WinCapabilityMusicLibrarySid = 90 + WinCapabilityDocumentsLibrarySid = 91 + WinCapabilitySharedUserCertificatesSid = 92 + WinCapabilityEnterpriseAuthenticationSid = 93 + WinCapabilityRemovableStorageSid = 94 + WinBuiltinRDSRemoteAccessServersSid = 95 + WinBuiltinRDSEndpointServersSid = 96 + WinBuiltinRDSManagementServersSid = 97 + WinUserModeDriversSid = 98 + WinBuiltinHyperVAdminsSid = 99 + WinAccountCloneableControllersSid = 100 + WinBuiltinAccessControlAssistanceOperatorsSid = 101 + WinBuiltinRemoteManagementUsersSid = 102 + WinAuthenticationAuthorityAssertedSid = 103 + WinAuthenticationServiceAssertedSid = 104 + WinLocalAccountSid = 105 + WinLocalAccountAndAdministratorSid = 106 + WinAccountProtectedUsersSid = 107 + WinCapabilityAppointmentsSid = 108 + WinCapabilityContactsSid = 109 + WinAccountDefaultSystemManagedSid = 110 + WinBuiltinDefaultSystemManagedGroupSid = 111 + WinBuiltinStorageReplicaAdminsSid = 112 + WinAccountKeyAdminsSid = 113 + WinAccountEnterpriseKeyAdminsSid = 114 + WinAuthenticationKeyTrustSid = 115 + WinAuthenticationKeyPropertyMFASid = 116 + WinAuthenticationKeyPropertyAttestationSid = 117 + WinAuthenticationFreshKeyAuthSid = 118 + WinBuiltinDeviceOwnersSid = 119 +) + +// Creates a SID for a well-known predefined alias, generally using the constants of the form +// Win*Sid, for the local machine. +func CreateWellKnownSid(sidType WELL_KNOWN_SID_TYPE) (*SID, error) { + return CreateWellKnownDomainSid(sidType, nil) +} + +// Creates a SID for a well-known predefined alias, generally using the constants of the form +// Win*Sid, for the domain specified by the domainSid parameter. +func CreateWellKnownDomainSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID) (*SID, error) { + n := uint32(50) + for { + b := make([]byte, n) + sid := (*SID)(unsafe.Pointer(&b[0])) + err := createWellKnownSid(sidType, domainSid, sid, &n) + if err == nil { + return sid, nil + } + if err != ERROR_INSUFFICIENT_BUFFER { + return nil, err + } + if n <= uint32(len(b)) { + return nil, err + } + } +} + +const ( + // do not reorder + TOKEN_ASSIGN_PRIMARY = 1 << iota + TOKEN_DUPLICATE + TOKEN_IMPERSONATE + TOKEN_QUERY + TOKEN_QUERY_SOURCE + TOKEN_ADJUST_PRIVILEGES + TOKEN_ADJUST_GROUPS + TOKEN_ADJUST_DEFAULT + TOKEN_ADJUST_SESSIONID + + TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | + TOKEN_ASSIGN_PRIMARY | + TOKEN_DUPLICATE | + TOKEN_IMPERSONATE | + TOKEN_QUERY | + TOKEN_QUERY_SOURCE | + TOKEN_ADJUST_PRIVILEGES | + TOKEN_ADJUST_GROUPS | + TOKEN_ADJUST_DEFAULT | + TOKEN_ADJUST_SESSIONID + TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY + TOKEN_WRITE = STANDARD_RIGHTS_WRITE | + TOKEN_ADJUST_PRIVILEGES | + TOKEN_ADJUST_GROUPS | + TOKEN_ADJUST_DEFAULT + TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE +) + +const ( + // do not reorder + TokenUser = 1 + iota + TokenGroups + TokenPrivileges + TokenOwner + TokenPrimaryGroup + TokenDefaultDacl + TokenSource + TokenType + TokenImpersonationLevel + TokenStatistics + TokenRestrictedSids + TokenSessionId + TokenGroupsAndPrivileges + TokenSessionReference + TokenSandBoxInert + TokenAuditPolicy + TokenOrigin + TokenElevationType + TokenLinkedToken + TokenElevation + TokenHasRestrictions + TokenAccessInformation + TokenVirtualizationAllowed + TokenVirtualizationEnabled + TokenIntegrityLevel + TokenUIAccess + TokenMandatoryPolicy + TokenLogonSid + MaxTokenInfoClass +) + +// Group attributes inside of Tokengroups.Groups[i].Attributes +const ( + SE_GROUP_MANDATORY = 0x00000001 + SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002 + SE_GROUP_ENABLED = 0x00000004 + SE_GROUP_OWNER = 0x00000008 + SE_GROUP_USE_FOR_DENY_ONLY = 0x00000010 + SE_GROUP_INTEGRITY = 0x00000020 + SE_GROUP_INTEGRITY_ENABLED = 0x00000040 + SE_GROUP_LOGON_ID = 0xC0000000 + SE_GROUP_RESOURCE = 0x20000000 + SE_GROUP_VALID_ATTRIBUTES = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED +) + +// Privilege attributes +const ( + SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001 + SE_PRIVILEGE_ENABLED = 0x00000002 + SE_PRIVILEGE_REMOVED = 0x00000004 + SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000 + SE_PRIVILEGE_VALID_ATTRIBUTES = SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS +) + +// Token types +const ( + TokenPrimary = 1 + TokenImpersonation = 2 +) + +// Impersonation levels +const ( + SecurityAnonymous = 0 + SecurityIdentification = 1 + SecurityImpersonation = 2 + SecurityDelegation = 3 +) + +type LUID struct { + LowPart uint32 + HighPart int32 +} + +type LUIDAndAttributes struct { + Luid LUID + Attributes uint32 +} + +type SIDAndAttributes struct { + Sid *SID + Attributes uint32 +} + +type Tokenuser struct { + User SIDAndAttributes +} + +type Tokenprimarygroup struct { + PrimaryGroup *SID +} + +type Tokengroups struct { + GroupCount uint32 + Groups [1]SIDAndAttributes // Use AllGroups() for iterating. +} + +// AllGroups returns a slice that can be used to iterate over the groups in g. +func (g *Tokengroups) AllGroups() []SIDAndAttributes { + return (*[(1 << 28) - 1]SIDAndAttributes)(unsafe.Pointer(&g.Groups[0]))[:g.GroupCount:g.GroupCount] +} + +type Tokenprivileges struct { + PrivilegeCount uint32 + Privileges [1]LUIDAndAttributes // Use AllPrivileges() for iterating. +} + +// AllPrivileges returns a slice that can be used to iterate over the privileges in p. +func (p *Tokenprivileges) AllPrivileges() []LUIDAndAttributes { + return (*[(1 << 27) - 1]LUIDAndAttributes)(unsafe.Pointer(&p.Privileges[0]))[:p.PrivilegeCount:p.PrivilegeCount] +} + +type Tokenmandatorylabel struct { + Label SIDAndAttributes +} + +func (tml *Tokenmandatorylabel) Size() uint32 { + return uint32(unsafe.Sizeof(Tokenmandatorylabel{})) + GetLengthSid(tml.Label.Sid) +} + +// Authorization Functions +//sys checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership +//sys isTokenRestricted(tokenHandle Token) (ret bool, err error) [!failretval] = advapi32.IsTokenRestricted +//sys OpenProcessToken(process Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken +//sys OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) = advapi32.OpenThreadToken +//sys ImpersonateSelf(impersonationlevel uint32) (err error) = advapi32.ImpersonateSelf +//sys RevertToSelf() (err error) = advapi32.RevertToSelf +//sys SetThreadToken(thread *Handle, token Token) (err error) = advapi32.SetThreadToken +//sys LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) = advapi32.LookupPrivilegeValueW +//sys AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) = advapi32.AdjustTokenPrivileges +//sys AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) = advapi32.AdjustTokenGroups +//sys GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation +//sys SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) = advapi32.SetTokenInformation +//sys DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) = advapi32.DuplicateTokenEx +//sys GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW +//sys getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemDirectoryW +//sys getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetWindowsDirectoryW +//sys getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemWindowsDirectoryW + +// An access token contains the security information for a logon session. +// The system creates an access token when a user logs on, and every +// process executed on behalf of the user has a copy of the token. +// The token identifies the user, the user's groups, and the user's +// privileges. The system uses the token to control access to securable +// objects and to control the ability of the user to perform various +// system-related operations on the local computer. +type Token Handle + +// OpenCurrentProcessToken opens an access token associated with current +// process with TOKEN_QUERY access. It is a real token that needs to be closed. +// +// Deprecated: Explicitly call OpenProcessToken(CurrentProcess(), ...) +// with the desired access instead, or use GetCurrentProcessToken for a +// TOKEN_QUERY token. +func OpenCurrentProcessToken() (Token, error) { + var token Token + err := OpenProcessToken(CurrentProcess(), TOKEN_QUERY, &token) + return token, err +} + +// GetCurrentProcessToken returns the access token associated with +// the current process. It is a pseudo token that does not need +// to be closed. +func GetCurrentProcessToken() Token { + return Token(^uintptr(4 - 1)) +} + +// GetCurrentThreadToken return the access token associated with +// the current thread. It is a pseudo token that does not need +// to be closed. +func GetCurrentThreadToken() Token { + return Token(^uintptr(5 - 1)) +} + +// GetCurrentThreadEffectiveToken returns the effective access token +// associated with the current thread. It is a pseudo token that does +// not need to be closed. +func GetCurrentThreadEffectiveToken() Token { + return Token(^uintptr(6 - 1)) +} + +// Close releases access to access token. +func (t Token) Close() error { + return CloseHandle(Handle(t)) +} + +// getInfo retrieves a specified type of information about an access token. +func (t Token) getInfo(class uint32, initSize int) (unsafe.Pointer, error) { + n := uint32(initSize) + for { + b := make([]byte, n) + e := GetTokenInformation(t, class, &b[0], uint32(len(b)), &n) + if e == nil { + return unsafe.Pointer(&b[0]), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return nil, e + } + if n <= uint32(len(b)) { + return nil, e + } + } +} + +// GetTokenUser retrieves access token t user account information. +func (t Token) GetTokenUser() (*Tokenuser, error) { + i, e := t.getInfo(TokenUser, 50) + if e != nil { + return nil, e + } + return (*Tokenuser)(i), nil +} + +// GetTokenGroups retrieves group accounts associated with access token t. +func (t Token) GetTokenGroups() (*Tokengroups, error) { + i, e := t.getInfo(TokenGroups, 50) + if e != nil { + return nil, e + } + return (*Tokengroups)(i), nil +} + +// GetTokenPrimaryGroup retrieves access token t primary group information. +// A pointer to a SID structure representing a group that will become +// the primary group of any objects created by a process using this access token. +func (t Token) GetTokenPrimaryGroup() (*Tokenprimarygroup, error) { + i, e := t.getInfo(TokenPrimaryGroup, 50) + if e != nil { + return nil, e + } + return (*Tokenprimarygroup)(i), nil +} + +// GetUserProfileDirectory retrieves path to the +// root directory of the access token t user's profile. +func (t Token) GetUserProfileDirectory() (string, error) { + n := uint32(100) + for { + b := make([]uint16, n) + e := GetUserProfileDirectory(t, &b[0], &n) + if e == nil { + return UTF16ToString(b), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} + +// IsElevated returns whether the current token is elevated from a UAC perspective. +func (token Token) IsElevated() bool { + var isElevated uint32 + var outLen uint32 + err := GetTokenInformation(token, TokenElevation, (*byte)(unsafe.Pointer(&isElevated)), uint32(unsafe.Sizeof(isElevated)), &outLen) + if err != nil { + return false + } + return outLen == uint32(unsafe.Sizeof(isElevated)) && isElevated != 0 +} + +// GetLinkedToken returns the linked token, which may be an elevated UAC token. +func (token Token) GetLinkedToken() (Token, error) { + var linkedToken Token + var outLen uint32 + err := GetTokenInformation(token, TokenLinkedToken, (*byte)(unsafe.Pointer(&linkedToken)), uint32(unsafe.Sizeof(linkedToken)), &outLen) + if err != nil { + return Token(0), err + } + return linkedToken, nil +} + +// GetSystemDirectory retrieves the path to current location of the system +// directory, which is typically, though not always, `C:\Windows\System32`. +func GetSystemDirectory() (string, error) { + n := uint32(MAX_PATH) + for { + b := make([]uint16, n) + l, e := getSystemDirectory(&b[0], n) + if e != nil { + return "", e + } + if l <= n { + return UTF16ToString(b[:l]), nil + } + n = l + } +} + +// GetWindowsDirectory retrieves the path to current location of the Windows +// directory, which is typically, though not always, `C:\Windows`. This may +// be a private user directory in the case that the application is running +// under a terminal server. +func GetWindowsDirectory() (string, error) { + n := uint32(MAX_PATH) + for { + b := make([]uint16, n) + l, e := getWindowsDirectory(&b[0], n) + if e != nil { + return "", e + } + if l <= n { + return UTF16ToString(b[:l]), nil + } + n = l + } +} + +// GetSystemWindowsDirectory retrieves the path to current location of the +// Windows directory, which is typically, though not always, `C:\Windows`. +func GetSystemWindowsDirectory() (string, error) { + n := uint32(MAX_PATH) + for { + b := make([]uint16, n) + l, e := getSystemWindowsDirectory(&b[0], n) + if e != nil { + return "", e + } + if l <= n { + return UTF16ToString(b[:l]), nil + } + n = l + } +} + +// IsMember reports whether the access token t is a member of the provided SID. +func (t Token) IsMember(sid *SID) (bool, error) { + var b int32 + if e := checkTokenMembership(t, sid, &b); e != nil { + return false, e + } + return b != 0, nil +} + +// IsRestricted reports whether the access token t is a restricted token. +func (t Token) IsRestricted() (isRestricted bool, err error) { + isRestricted, err = isTokenRestricted(t) + if !isRestricted && err == syscall.EINVAL { + // If err is EINVAL, this returned ERROR_SUCCESS indicating a non-restricted token. + err = nil + } + return +} + +const ( + WTS_CONSOLE_CONNECT = 0x1 + WTS_CONSOLE_DISCONNECT = 0x2 + WTS_REMOTE_CONNECT = 0x3 + WTS_REMOTE_DISCONNECT = 0x4 + WTS_SESSION_LOGON = 0x5 + WTS_SESSION_LOGOFF = 0x6 + WTS_SESSION_LOCK = 0x7 + WTS_SESSION_UNLOCK = 0x8 + WTS_SESSION_REMOTE_CONTROL = 0x9 + WTS_SESSION_CREATE = 0xa + WTS_SESSION_TERMINATE = 0xb +) + +const ( + WTSActive = 0 + WTSConnected = 1 + WTSConnectQuery = 2 + WTSShadow = 3 + WTSDisconnected = 4 + WTSIdle = 5 + WTSListen = 6 + WTSReset = 7 + WTSDown = 8 + WTSInit = 9 +) + +type WTSSESSION_NOTIFICATION struct { + Size uint32 + SessionID uint32 +} + +type WTS_SESSION_INFO struct { + SessionID uint32 + WindowStationName *uint16 + State uint32 +} + +//sys WTSQueryUserToken(session uint32, token *Token) (err error) = wtsapi32.WTSQueryUserToken +//sys WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) = wtsapi32.WTSEnumerateSessionsW +//sys WTSFreeMemory(ptr uintptr) = wtsapi32.WTSFreeMemory +//sys WTSGetActiveConsoleSessionId() (sessionID uint32) + +type ACL struct { + aclRevision byte + sbz1 byte + aclSize uint16 + aceCount uint16 + sbz2 uint16 +} + +type SECURITY_DESCRIPTOR struct { + revision byte + sbz1 byte + control SECURITY_DESCRIPTOR_CONTROL + owner *SID + group *SID + sacl *ACL + dacl *ACL +} + +type SECURITY_QUALITY_OF_SERVICE struct { + Length uint32 + ImpersonationLevel uint32 + ContextTrackingMode byte + EffectiveOnly byte +} + +// Constants for the ContextTrackingMode field of SECURITY_QUALITY_OF_SERVICE. +const ( + SECURITY_STATIC_TRACKING = 0 + SECURITY_DYNAMIC_TRACKING = 1 +) + +type SecurityAttributes struct { + Length uint32 + SecurityDescriptor *SECURITY_DESCRIPTOR + InheritHandle uint32 +} + +type SE_OBJECT_TYPE uint32 + +// Constants for type SE_OBJECT_TYPE +const ( + SE_UNKNOWN_OBJECT_TYPE = 0 + SE_FILE_OBJECT = 1 + SE_SERVICE = 2 + SE_PRINTER = 3 + SE_REGISTRY_KEY = 4 + SE_LMSHARE = 5 + SE_KERNEL_OBJECT = 6 + SE_WINDOW_OBJECT = 7 + SE_DS_OBJECT = 8 + SE_DS_OBJECT_ALL = 9 + SE_PROVIDER_DEFINED_OBJECT = 10 + SE_WMIGUID_OBJECT = 11 + SE_REGISTRY_WOW64_32KEY = 12 + SE_REGISTRY_WOW64_64KEY = 13 +) + +type SECURITY_INFORMATION uint32 + +// Constants for type SECURITY_INFORMATION +const ( + OWNER_SECURITY_INFORMATION = 0x00000001 + GROUP_SECURITY_INFORMATION = 0x00000002 + DACL_SECURITY_INFORMATION = 0x00000004 + SACL_SECURITY_INFORMATION = 0x00000008 + LABEL_SECURITY_INFORMATION = 0x00000010 + ATTRIBUTE_SECURITY_INFORMATION = 0x00000020 + SCOPE_SECURITY_INFORMATION = 0x00000040 + BACKUP_SECURITY_INFORMATION = 0x00010000 + PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000 + PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000 + UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000 + UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000 +) + +type SECURITY_DESCRIPTOR_CONTROL uint16 + +// Constants for type SECURITY_DESCRIPTOR_CONTROL +const ( + SE_OWNER_DEFAULTED = 0x0001 + SE_GROUP_DEFAULTED = 0x0002 + SE_DACL_PRESENT = 0x0004 + SE_DACL_DEFAULTED = 0x0008 + SE_SACL_PRESENT = 0x0010 + SE_SACL_DEFAULTED = 0x0020 + SE_DACL_AUTO_INHERIT_REQ = 0x0100 + SE_SACL_AUTO_INHERIT_REQ = 0x0200 + SE_DACL_AUTO_INHERITED = 0x0400 + SE_SACL_AUTO_INHERITED = 0x0800 + SE_DACL_PROTECTED = 0x1000 + SE_SACL_PROTECTED = 0x2000 + SE_RM_CONTROL_VALID = 0x4000 + SE_SELF_RELATIVE = 0x8000 +) + +type ACCESS_MASK uint32 + +// Constants for type ACCESS_MASK +const ( + DELETE = 0x00010000 + READ_CONTROL = 0x00020000 + WRITE_DAC = 0x00040000 + WRITE_OWNER = 0x00080000 + SYNCHRONIZE = 0x00100000 + STANDARD_RIGHTS_REQUIRED = 0x000F0000 + STANDARD_RIGHTS_READ = READ_CONTROL + STANDARD_RIGHTS_WRITE = READ_CONTROL + STANDARD_RIGHTS_EXECUTE = READ_CONTROL + STANDARD_RIGHTS_ALL = 0x001F0000 + SPECIFIC_RIGHTS_ALL = 0x0000FFFF + ACCESS_SYSTEM_SECURITY = 0x01000000 + MAXIMUM_ALLOWED = 0x02000000 + GENERIC_READ = 0x80000000 + GENERIC_WRITE = 0x40000000 + GENERIC_EXECUTE = 0x20000000 + GENERIC_ALL = 0x10000000 +) + +type ACCESS_MODE uint32 + +// Constants for type ACCESS_MODE +const ( + NOT_USED_ACCESS = 0 + GRANT_ACCESS = 1 + SET_ACCESS = 2 + DENY_ACCESS = 3 + REVOKE_ACCESS = 4 + SET_AUDIT_SUCCESS = 5 + SET_AUDIT_FAILURE = 6 +) + +// Constants for AceFlags and Inheritance fields +const ( + NO_INHERITANCE = 0x0 + SUB_OBJECTS_ONLY_INHERIT = 0x1 + SUB_CONTAINERS_ONLY_INHERIT = 0x2 + SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3 + INHERIT_NO_PROPAGATE = 0x4 + INHERIT_ONLY = 0x8 + INHERITED_ACCESS_ENTRY = 0x10 + INHERITED_PARENT = 0x10000000 + INHERITED_GRANDPARENT = 0x20000000 + OBJECT_INHERIT_ACE = 0x1 + CONTAINER_INHERIT_ACE = 0x2 + NO_PROPAGATE_INHERIT_ACE = 0x4 + INHERIT_ONLY_ACE = 0x8 + INHERITED_ACE = 0x10 + VALID_INHERIT_FLAGS = 0x1F +) + +type MULTIPLE_TRUSTEE_OPERATION uint32 + +// Constants for MULTIPLE_TRUSTEE_OPERATION +const ( + NO_MULTIPLE_TRUSTEE = 0 + TRUSTEE_IS_IMPERSONATE = 1 +) + +type TRUSTEE_FORM uint32 + +// Constants for TRUSTEE_FORM +const ( + TRUSTEE_IS_SID = 0 + TRUSTEE_IS_NAME = 1 + TRUSTEE_BAD_FORM = 2 + TRUSTEE_IS_OBJECTS_AND_SID = 3 + TRUSTEE_IS_OBJECTS_AND_NAME = 4 +) + +type TRUSTEE_TYPE uint32 + +// Constants for TRUSTEE_TYPE +const ( + TRUSTEE_IS_UNKNOWN = 0 + TRUSTEE_IS_USER = 1 + TRUSTEE_IS_GROUP = 2 + TRUSTEE_IS_DOMAIN = 3 + TRUSTEE_IS_ALIAS = 4 + TRUSTEE_IS_WELL_KNOWN_GROUP = 5 + TRUSTEE_IS_DELETED = 6 + TRUSTEE_IS_INVALID = 7 + TRUSTEE_IS_COMPUTER = 8 +) + +// Constants for ObjectsPresent field +const ( + ACE_OBJECT_TYPE_PRESENT = 0x1 + ACE_INHERITED_OBJECT_TYPE_PRESENT = 0x2 +) + +type EXPLICIT_ACCESS struct { + AccessPermissions ACCESS_MASK + AccessMode ACCESS_MODE + Inheritance uint32 + Trustee TRUSTEE +} + +// This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions. +type TrusteeValue uintptr + +func TrusteeValueFromString(str string) TrusteeValue { + return TrusteeValue(unsafe.Pointer(StringToUTF16Ptr(str))) +} +func TrusteeValueFromSID(sid *SID) TrusteeValue { + return TrusteeValue(unsafe.Pointer(sid)) +} +func TrusteeValueFromObjectsAndSid(objectsAndSid *OBJECTS_AND_SID) TrusteeValue { + return TrusteeValue(unsafe.Pointer(objectsAndSid)) +} +func TrusteeValueFromObjectsAndName(objectsAndName *OBJECTS_AND_NAME) TrusteeValue { + return TrusteeValue(unsafe.Pointer(objectsAndName)) +} + +type TRUSTEE struct { + MultipleTrustee *TRUSTEE + MultipleTrusteeOperation MULTIPLE_TRUSTEE_OPERATION + TrusteeForm TRUSTEE_FORM + TrusteeType TRUSTEE_TYPE + TrusteeValue TrusteeValue +} + +type OBJECTS_AND_SID struct { + ObjectsPresent uint32 + ObjectTypeGuid GUID + InheritedObjectTypeGuid GUID + Sid *SID +} + +type OBJECTS_AND_NAME struct { + ObjectsPresent uint32 + ObjectType SE_OBJECT_TYPE + ObjectTypeName *uint16 + InheritedObjectTypeName *uint16 + Name *uint16 +} + +//sys getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetSecurityInfo +//sys SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetSecurityInfo +//sys getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetNamedSecurityInfoW +//sys SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetNamedSecurityInfoW +//sys SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) = advapi32.SetKernelObjectSecurity + +//sys buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) = advapi32.BuildSecurityDescriptorW +//sys initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) = advapi32.InitializeSecurityDescriptor + +//sys getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) = advapi32.GetSecurityDescriptorControl +//sys getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorDacl +//sys getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorSacl +//sys getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorOwner +//sys getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorGroup +//sys getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) = advapi32.GetSecurityDescriptorLength +//sys getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) [failretval!=0] = advapi32.GetSecurityDescriptorRMControl +//sys isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) = advapi32.IsValidSecurityDescriptor + +//sys setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) = advapi32.SetSecurityDescriptorControl +//sys setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorDacl +//sys setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorSacl +//sys setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) = advapi32.SetSecurityDescriptorOwner +//sys setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) = advapi32.SetSecurityDescriptorGroup +//sys setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) = advapi32.SetSecurityDescriptorRMControl + +//sys convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW +//sys convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW + +//sys makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) = advapi32.MakeAbsoluteSD +//sys makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD + +//sys setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW + +// Control returns the security descriptor control bits. +func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) { + err = getSecurityDescriptorControl(sd, &control, &revision) + return +} + +// SetControl sets the security descriptor control bits. +func (sd *SECURITY_DESCRIPTOR) SetControl(controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) error { + return setSecurityDescriptorControl(sd, controlBitsOfInterest, controlBitsToSet) +} + +// RMControl returns the security descriptor resource manager control bits. +func (sd *SECURITY_DESCRIPTOR) RMControl() (control uint8, err error) { + err = getSecurityDescriptorRMControl(sd, &control) + return +} + +// SetRMControl sets the security descriptor resource manager control bits. +func (sd *SECURITY_DESCRIPTOR) SetRMControl(rmControl uint8) { + setSecurityDescriptorRMControl(sd, &rmControl) +} + +// DACL returns the security descriptor DACL and whether it was defaulted. The dacl return value may be nil +// if a DACL exists but is an "empty DACL", meaning fully permissive. If the DACL does not exist, err returns +// ERROR_OBJECT_NOT_FOUND. +func (sd *SECURITY_DESCRIPTOR) DACL() (dacl *ACL, defaulted bool, err error) { + var present bool + err = getSecurityDescriptorDacl(sd, &present, &dacl, &defaulted) + if !present { + err = ERROR_OBJECT_NOT_FOUND + } + return +} + +// SetDACL sets the absolute security descriptor DACL. +func (absoluteSD *SECURITY_DESCRIPTOR) SetDACL(dacl *ACL, present, defaulted bool) error { + return setSecurityDescriptorDacl(absoluteSD, present, dacl, defaulted) +} + +// SACL returns the security descriptor SACL and whether it was defaulted. The sacl return value may be nil +// if a SACL exists but is an "empty SACL", meaning fully permissive. If the SACL does not exist, err returns +// ERROR_OBJECT_NOT_FOUND. +func (sd *SECURITY_DESCRIPTOR) SACL() (sacl *ACL, defaulted bool, err error) { + var present bool + err = getSecurityDescriptorSacl(sd, &present, &sacl, &defaulted) + if !present { + err = ERROR_OBJECT_NOT_FOUND + } + return +} + +// SetSACL sets the absolute security descriptor SACL. +func (absoluteSD *SECURITY_DESCRIPTOR) SetSACL(sacl *ACL, present, defaulted bool) error { + return setSecurityDescriptorSacl(absoluteSD, present, sacl, defaulted) +} + +// Owner returns the security descriptor owner and whether it was defaulted. +func (sd *SECURITY_DESCRIPTOR) Owner() (owner *SID, defaulted bool, err error) { + err = getSecurityDescriptorOwner(sd, &owner, &defaulted) + return +} + +// SetOwner sets the absolute security descriptor owner. +func (absoluteSD *SECURITY_DESCRIPTOR) SetOwner(owner *SID, defaulted bool) error { + return setSecurityDescriptorOwner(absoluteSD, owner, defaulted) +} + +// Group returns the security descriptor group and whether it was defaulted. +func (sd *SECURITY_DESCRIPTOR) Group() (group *SID, defaulted bool, err error) { + err = getSecurityDescriptorGroup(sd, &group, &defaulted) + return +} + +// SetGroup sets the absolute security descriptor owner. +func (absoluteSD *SECURITY_DESCRIPTOR) SetGroup(group *SID, defaulted bool) error { + return setSecurityDescriptorGroup(absoluteSD, group, defaulted) +} + +// Length returns the length of the security descriptor. +func (sd *SECURITY_DESCRIPTOR) Length() uint32 { + return getSecurityDescriptorLength(sd) +} + +// IsValid returns whether the security descriptor is valid. +func (sd *SECURITY_DESCRIPTOR) IsValid() bool { + return isValidSecurityDescriptor(sd) +} + +// String returns the SDDL form of the security descriptor, with a function signature that can be +// used with %v formatting directives. +func (sd *SECURITY_DESCRIPTOR) String() string { + var sddl *uint16 + err := convertSecurityDescriptorToStringSecurityDescriptor(sd, 1, 0xff, &sddl, nil) + if err != nil { + return "" + } + defer LocalFree(Handle(unsafe.Pointer(sddl))) + return UTF16PtrToString(sddl) +} + +// ToAbsolute converts a self-relative security descriptor into an absolute one. +func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DESCRIPTOR, err error) { + control, _, err := selfRelativeSD.Control() + if err != nil { + return + } + if control&SE_SELF_RELATIVE == 0 { + err = ERROR_INVALID_PARAMETER + return + } + var absoluteSDSize, daclSize, saclSize, ownerSize, groupSize uint32 + err = makeAbsoluteSD(selfRelativeSD, nil, &absoluteSDSize, + nil, &daclSize, nil, &saclSize, nil, &ownerSize, nil, &groupSize) + switch err { + case ERROR_INSUFFICIENT_BUFFER: + case nil: + // makeAbsoluteSD is expected to fail, but it succeeds. + return nil, ERROR_INTERNAL_ERROR + default: + return nil, err + } + if absoluteSDSize > 0 { + absoluteSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0])) + } + var ( + dacl *ACL + sacl *ACL + owner *SID + group *SID + ) + if daclSize > 0 { + dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0])) + } + if saclSize > 0 { + sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0])) + } + if ownerSize > 0 { + owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0])) + } + if groupSize > 0 { + group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0])) + } + err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize, + dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize) + return +} + +// ToSelfRelative converts an absolute security descriptor into a self-relative one. +func (absoluteSD *SECURITY_DESCRIPTOR) ToSelfRelative() (selfRelativeSD *SECURITY_DESCRIPTOR, err error) { + control, _, err := absoluteSD.Control() + if err != nil { + return + } + if control&SE_SELF_RELATIVE != 0 { + err = ERROR_INVALID_PARAMETER + return + } + var selfRelativeSDSize uint32 + err = makeSelfRelativeSD(absoluteSD, nil, &selfRelativeSDSize) + switch err { + case ERROR_INSUFFICIENT_BUFFER: + case nil: + // makeSelfRelativeSD is expected to fail, but it succeeds. + return nil, ERROR_INTERNAL_ERROR + default: + return nil, err + } + if selfRelativeSDSize > 0 { + selfRelativeSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, selfRelativeSDSize)[0])) + } + err = makeSelfRelativeSD(absoluteSD, selfRelativeSD, &selfRelativeSDSize) + return +} + +func (selfRelativeSD *SECURITY_DESCRIPTOR) copySelfRelativeSecurityDescriptor() *SECURITY_DESCRIPTOR { + sdLen := int(selfRelativeSD.Length()) + const min = int(unsafe.Sizeof(SECURITY_DESCRIPTOR{})) + if sdLen < min { + sdLen = min + } + + var src []byte + h := (*unsafeheader.Slice)(unsafe.Pointer(&src)) + h.Data = unsafe.Pointer(selfRelativeSD) + h.Len = sdLen + h.Cap = sdLen + + const psize = int(unsafe.Sizeof(uintptr(0))) + + var dst []byte + h = (*unsafeheader.Slice)(unsafe.Pointer(&dst)) + alloc := make([]uintptr, (sdLen+psize-1)/psize) + h.Data = (*unsafeheader.Slice)(unsafe.Pointer(&alloc)).Data + h.Len = sdLen + h.Cap = sdLen + + copy(dst, src) + return (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&dst[0])) +} + +// SecurityDescriptorFromString converts an SDDL string describing a security descriptor into a +// self-relative security descriptor object allocated on the Go heap. +func SecurityDescriptorFromString(sddl string) (sd *SECURITY_DESCRIPTOR, err error) { + var winHeapSD *SECURITY_DESCRIPTOR + err = convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &winHeapSD, nil) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) + return winHeapSD.copySelfRelativeSecurityDescriptor(), nil +} + +// GetSecurityInfo queries the security information for a given handle and returns the self-relative security +// descriptor result on the Go heap. +func GetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) { + var winHeapSD *SECURITY_DESCRIPTOR + err = getSecurityInfo(handle, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) + return winHeapSD.copySelfRelativeSecurityDescriptor(), nil +} + +// GetNamedSecurityInfo queries the security information for a given named object and returns the self-relative security +// descriptor result on the Go heap. +func GetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) { + var winHeapSD *SECURITY_DESCRIPTOR + err = getNamedSecurityInfo(objectName, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) + return winHeapSD.copySelfRelativeSecurityDescriptor(), nil +} + +// BuildSecurityDescriptor makes a new security descriptor using the input trustees, explicit access lists, and +// prior security descriptor to be merged, any of which can be nil, returning the self-relative security descriptor +// result on the Go heap. +func BuildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, accessEntries []EXPLICIT_ACCESS, auditEntries []EXPLICIT_ACCESS, mergedSecurityDescriptor *SECURITY_DESCRIPTOR) (sd *SECURITY_DESCRIPTOR, err error) { + var winHeapSD *SECURITY_DESCRIPTOR + var winHeapSDSize uint32 + var firstAccessEntry *EXPLICIT_ACCESS + if len(accessEntries) > 0 { + firstAccessEntry = &accessEntries[0] + } + var firstAuditEntry *EXPLICIT_ACCESS + if len(auditEntries) > 0 { + firstAuditEntry = &auditEntries[0] + } + err = buildSecurityDescriptor(owner, group, uint32(len(accessEntries)), firstAccessEntry, uint32(len(auditEntries)), firstAuditEntry, mergedSecurityDescriptor, &winHeapSDSize, &winHeapSD) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) + return winHeapSD.copySelfRelativeSecurityDescriptor(), nil +} + +// NewSecurityDescriptor creates and initializes a new absolute security descriptor. +func NewSecurityDescriptor() (absoluteSD *SECURITY_DESCRIPTOR, err error) { + absoluteSD = &SECURITY_DESCRIPTOR{} + err = initializeSecurityDescriptor(absoluteSD, 1) + return +} + +// ACLFromEntries returns a new ACL on the Go heap containing a list of explicit entries as well as those of another ACL. +// Both explicitEntries and mergedACL are optional and can be nil. +func ACLFromEntries(explicitEntries []EXPLICIT_ACCESS, mergedACL *ACL) (acl *ACL, err error) { + var firstExplicitEntry *EXPLICIT_ACCESS + if len(explicitEntries) > 0 { + firstExplicitEntry = &explicitEntries[0] + } + var winHeapACL *ACL + err = setEntriesInAcl(uint32(len(explicitEntries)), firstExplicitEntry, mergedACL, &winHeapACL) + if err != nil { + return + } + defer LocalFree(Handle(unsafe.Pointer(winHeapACL))) + aclBytes := make([]byte, winHeapACL.aclSize) + copy(aclBytes, (*[(1 << 31) - 1]byte)(unsafe.Pointer(winHeapACL))[:len(aclBytes):len(aclBytes)]) + return (*ACL)(unsafe.Pointer(&aclBytes[0])), nil +} diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go new file mode 100644 index 0000000000000..c44a1b9636014 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/service.go @@ -0,0 +1,258 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build windows +// +build windows + +package windows + +const ( + SC_MANAGER_CONNECT = 1 + SC_MANAGER_CREATE_SERVICE = 2 + SC_MANAGER_ENUMERATE_SERVICE = 4 + SC_MANAGER_LOCK = 8 + SC_MANAGER_QUERY_LOCK_STATUS = 16 + SC_MANAGER_MODIFY_BOOT_CONFIG = 32 + SC_MANAGER_ALL_ACCESS = 0xf003f +) + +const ( + SERVICE_KERNEL_DRIVER = 1 + SERVICE_FILE_SYSTEM_DRIVER = 2 + SERVICE_ADAPTER = 4 + SERVICE_RECOGNIZER_DRIVER = 8 + SERVICE_WIN32_OWN_PROCESS = 16 + SERVICE_WIN32_SHARE_PROCESS = 32 + SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS + SERVICE_INTERACTIVE_PROCESS = 256 + SERVICE_DRIVER = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER + SERVICE_TYPE_ALL = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS + + SERVICE_BOOT_START = 0 + SERVICE_SYSTEM_START = 1 + SERVICE_AUTO_START = 2 + SERVICE_DEMAND_START = 3 + SERVICE_DISABLED = 4 + + SERVICE_ERROR_IGNORE = 0 + SERVICE_ERROR_NORMAL = 1 + SERVICE_ERROR_SEVERE = 2 + SERVICE_ERROR_CRITICAL = 3 + + SC_STATUS_PROCESS_INFO = 0 + + SC_ACTION_NONE = 0 + SC_ACTION_RESTART = 1 + SC_ACTION_REBOOT = 2 + SC_ACTION_RUN_COMMAND = 3 + + SERVICE_STOPPED = 1 + SERVICE_START_PENDING = 2 + SERVICE_STOP_PENDING = 3 + SERVICE_RUNNING = 4 + SERVICE_CONTINUE_PENDING = 5 + SERVICE_PAUSE_PENDING = 6 + SERVICE_PAUSED = 7 + SERVICE_NO_CHANGE = 0xffffffff + + SERVICE_ACCEPT_STOP = 1 + SERVICE_ACCEPT_PAUSE_CONTINUE = 2 + SERVICE_ACCEPT_SHUTDOWN = 4 + SERVICE_ACCEPT_PARAMCHANGE = 8 + SERVICE_ACCEPT_NETBINDCHANGE = 16 + SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32 + SERVICE_ACCEPT_POWEREVENT = 64 + SERVICE_ACCEPT_SESSIONCHANGE = 128 + SERVICE_ACCEPT_PRESHUTDOWN = 256 + + SERVICE_CONTROL_STOP = 1 + SERVICE_CONTROL_PAUSE = 2 + SERVICE_CONTROL_CONTINUE = 3 + SERVICE_CONTROL_INTERROGATE = 4 + SERVICE_CONTROL_SHUTDOWN = 5 + SERVICE_CONTROL_PARAMCHANGE = 6 + SERVICE_CONTROL_NETBINDADD = 7 + SERVICE_CONTROL_NETBINDREMOVE = 8 + SERVICE_CONTROL_NETBINDENABLE = 9 + SERVICE_CONTROL_NETBINDDISABLE = 10 + SERVICE_CONTROL_DEVICEEVENT = 11 + SERVICE_CONTROL_HARDWAREPROFILECHANGE = 12 + SERVICE_CONTROL_POWEREVENT = 13 + SERVICE_CONTROL_SESSIONCHANGE = 14 + SERVICE_CONTROL_PRESHUTDOWN = 15 + + SERVICE_ACTIVE = 1 + SERVICE_INACTIVE = 2 + SERVICE_STATE_ALL = 3 + + SERVICE_QUERY_CONFIG = 1 + SERVICE_CHANGE_CONFIG = 2 + SERVICE_QUERY_STATUS = 4 + SERVICE_ENUMERATE_DEPENDENTS = 8 + SERVICE_START = 16 + SERVICE_STOP = 32 + SERVICE_PAUSE_CONTINUE = 64 + SERVICE_INTERROGATE = 128 + SERVICE_USER_DEFINED_CONTROL = 256 + SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL + + SERVICE_RUNS_IN_SYSTEM_PROCESS = 1 + + SERVICE_CONFIG_DESCRIPTION = 1 + SERVICE_CONFIG_FAILURE_ACTIONS = 2 + SERVICE_CONFIG_DELAYED_AUTO_START_INFO = 3 + SERVICE_CONFIG_FAILURE_ACTIONS_FLAG = 4 + SERVICE_CONFIG_SERVICE_SID_INFO = 5 + SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 6 + SERVICE_CONFIG_PRESHUTDOWN_INFO = 7 + SERVICE_CONFIG_TRIGGER_INFO = 8 + SERVICE_CONFIG_PREFERRED_NODE = 9 + SERVICE_CONFIG_LAUNCH_PROTECTED = 12 + + SERVICE_SID_TYPE_NONE = 0 + SERVICE_SID_TYPE_UNRESTRICTED = 1 + SERVICE_SID_TYPE_RESTRICTED = 2 | SERVICE_SID_TYPE_UNRESTRICTED + + SC_ENUM_PROCESS_INFO = 0 + + SERVICE_NOTIFY_STATUS_CHANGE = 2 + SERVICE_NOTIFY_STOPPED = 0x00000001 + SERVICE_NOTIFY_START_PENDING = 0x00000002 + SERVICE_NOTIFY_STOP_PENDING = 0x00000004 + SERVICE_NOTIFY_RUNNING = 0x00000008 + SERVICE_NOTIFY_CONTINUE_PENDING = 0x00000010 + SERVICE_NOTIFY_PAUSE_PENDING = 0x00000020 + SERVICE_NOTIFY_PAUSED = 0x00000040 + SERVICE_NOTIFY_CREATED = 0x00000080 + SERVICE_NOTIFY_DELETED = 0x00000100 + SERVICE_NOTIFY_DELETE_PENDING = 0x00000200 + + SC_EVENT_DATABASE_CHANGE = 0 + SC_EVENT_PROPERTY_CHANGE = 1 + SC_EVENT_STATUS_CHANGE = 2 + + SERVICE_START_REASON_DEMAND = 0x00000001 + SERVICE_START_REASON_AUTO = 0x00000002 + SERVICE_START_REASON_TRIGGER = 0x00000004 + SERVICE_START_REASON_RESTART_ON_FAILURE = 0x00000008 + SERVICE_START_REASON_DELAYEDAUTO = 0x00000010 + + SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1 +) + +type ENUM_SERVICE_STATUS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatus SERVICE_STATUS +} + +type SERVICE_STATUS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 +} + +type SERVICE_TABLE_ENTRY struct { + ServiceName *uint16 + ServiceProc uintptr +} + +type QUERY_SERVICE_CONFIG struct { + ServiceType uint32 + StartType uint32 + ErrorControl uint32 + BinaryPathName *uint16 + LoadOrderGroup *uint16 + TagId uint32 + Dependencies *uint16 + ServiceStartName *uint16 + DisplayName *uint16 +} + +type SERVICE_DESCRIPTION struct { + Description *uint16 +} + +type SERVICE_DELAYED_AUTO_START_INFO struct { + IsDelayedAutoStartUp uint32 +} + +type SERVICE_STATUS_PROCESS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 + ProcessId uint32 + ServiceFlags uint32 +} + +type ENUM_SERVICE_STATUS_PROCESS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatusProcess SERVICE_STATUS_PROCESS +} + +type SERVICE_NOTIFY struct { + Version uint32 + NotifyCallback uintptr + Context uintptr + NotificationStatus uint32 + ServiceStatus SERVICE_STATUS_PROCESS + NotificationTriggered uint32 + ServiceNames *uint16 +} + +type SERVICE_FAILURE_ACTIONS struct { + ResetPeriod uint32 + RebootMsg *uint16 + Command *uint16 + ActionsCount uint32 + Actions *SC_ACTION +} + +type SERVICE_FAILURE_ACTIONS_FLAG struct { + FailureActionsOnNonCrashFailures int32 +} + +type SC_ACTION struct { + Type uint32 + Delay uint32 +} + +type QUERY_SERVICE_LOCK_STATUS struct { + IsLocked uint32 + LockOwner *uint16 + LockDuration uint32 +} + +//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW +//sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle +//sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW +//sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW +//sys DeleteService(service Handle) (err error) = advapi32.DeleteService +//sys StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW +//sys QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus +//sys QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceLockStatusW +//sys ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService +//sys StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW +//sys SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus +//sys ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) = advapi32.ChangeServiceConfigW +//sys QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW +//sys ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W +//sys QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W +//sys EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW +//sys QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx +//sys NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW +//sys SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) = sechost.SubscribeServiceChangeNotifications? +//sys UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications? +//sys RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW +//sys QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation? +//sys EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) = advapi32.EnumDependentServicesW diff --git a/vendor/golang.org/x/sys/windows/setupapi_windows.go b/vendor/golang.org/x/sys/windows/setupapi_windows.go new file mode 100644 index 0000000000000..f8126482fa5aa --- /dev/null +++ b/vendor/golang.org/x/sys/windows/setupapi_windows.go @@ -0,0 +1,1425 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "encoding/binary" + "errors" + "fmt" + "runtime" + "strings" + "syscall" + "unsafe" +) + +// This file contains functions that wrap SetupAPI.dll and CfgMgr32.dll, +// core system functions for managing hardware devices, drivers, and the PnP tree. +// Information about these APIs can be found at: +// https://docs.microsoft.com/en-us/windows-hardware/drivers/install/setupapi +// https://docs.microsoft.com/en-us/windows/win32/devinst/cfgmgr32- + +const ( + ERROR_EXPECTED_SECTION_NAME Errno = 0x20000000 | 0xC0000000 | 0 + ERROR_BAD_SECTION_NAME_LINE Errno = 0x20000000 | 0xC0000000 | 1 + ERROR_SECTION_NAME_TOO_LONG Errno = 0x20000000 | 0xC0000000 | 2 + ERROR_GENERAL_SYNTAX Errno = 0x20000000 | 0xC0000000 | 3 + ERROR_WRONG_INF_STYLE Errno = 0x20000000 | 0xC0000000 | 0x100 + ERROR_SECTION_NOT_FOUND Errno = 0x20000000 | 0xC0000000 | 0x101 + ERROR_LINE_NOT_FOUND Errno = 0x20000000 | 0xC0000000 | 0x102 + ERROR_NO_BACKUP Errno = 0x20000000 | 0xC0000000 | 0x103 + ERROR_NO_ASSOCIATED_CLASS Errno = 0x20000000 | 0xC0000000 | 0x200 + ERROR_CLASS_MISMATCH Errno = 0x20000000 | 0xC0000000 | 0x201 + ERROR_DUPLICATE_FOUND Errno = 0x20000000 | 0xC0000000 | 0x202 + ERROR_NO_DRIVER_SELECTED Errno = 0x20000000 | 0xC0000000 | 0x203 + ERROR_KEY_DOES_NOT_EXIST Errno = 0x20000000 | 0xC0000000 | 0x204 + ERROR_INVALID_DEVINST_NAME Errno = 0x20000000 | 0xC0000000 | 0x205 + ERROR_INVALID_CLASS Errno = 0x20000000 | 0xC0000000 | 0x206 + ERROR_DEVINST_ALREADY_EXISTS Errno = 0x20000000 | 0xC0000000 | 0x207 + ERROR_DEVINFO_NOT_REGISTERED Errno = 0x20000000 | 0xC0000000 | 0x208 + ERROR_INVALID_REG_PROPERTY Errno = 0x20000000 | 0xC0000000 | 0x209 + ERROR_NO_INF Errno = 0x20000000 | 0xC0000000 | 0x20A + ERROR_NO_SUCH_DEVINST Errno = 0x20000000 | 0xC0000000 | 0x20B + ERROR_CANT_LOAD_CLASS_ICON Errno = 0x20000000 | 0xC0000000 | 0x20C + ERROR_INVALID_CLASS_INSTALLER Errno = 0x20000000 | 0xC0000000 | 0x20D + ERROR_DI_DO_DEFAULT Errno = 0x20000000 | 0xC0000000 | 0x20E + ERROR_DI_NOFILECOPY Errno = 0x20000000 | 0xC0000000 | 0x20F + ERROR_INVALID_HWPROFILE Errno = 0x20000000 | 0xC0000000 | 0x210 + ERROR_NO_DEVICE_SELECTED Errno = 0x20000000 | 0xC0000000 | 0x211 + ERROR_DEVINFO_LIST_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x212 + ERROR_DEVINFO_DATA_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x213 + ERROR_DI_BAD_PATH Errno = 0x20000000 | 0xC0000000 | 0x214 + ERROR_NO_CLASSINSTALL_PARAMS Errno = 0x20000000 | 0xC0000000 | 0x215 + ERROR_FILEQUEUE_LOCKED Errno = 0x20000000 | 0xC0000000 | 0x216 + ERROR_BAD_SERVICE_INSTALLSECT Errno = 0x20000000 | 0xC0000000 | 0x217 + ERROR_NO_CLASS_DRIVER_LIST Errno = 0x20000000 | 0xC0000000 | 0x218 + ERROR_NO_ASSOCIATED_SERVICE Errno = 0x20000000 | 0xC0000000 | 0x219 + ERROR_NO_DEFAULT_DEVICE_INTERFACE Errno = 0x20000000 | 0xC0000000 | 0x21A + ERROR_DEVICE_INTERFACE_ACTIVE Errno = 0x20000000 | 0xC0000000 | 0x21B + ERROR_DEVICE_INTERFACE_REMOVED Errno = 0x20000000 | 0xC0000000 | 0x21C + ERROR_BAD_INTERFACE_INSTALLSECT Errno = 0x20000000 | 0xC0000000 | 0x21D + ERROR_NO_SUCH_INTERFACE_CLASS Errno = 0x20000000 | 0xC0000000 | 0x21E + ERROR_INVALID_REFERENCE_STRING Errno = 0x20000000 | 0xC0000000 | 0x21F + ERROR_INVALID_MACHINENAME Errno = 0x20000000 | 0xC0000000 | 0x220 + ERROR_REMOTE_COMM_FAILURE Errno = 0x20000000 | 0xC0000000 | 0x221 + ERROR_MACHINE_UNAVAILABLE Errno = 0x20000000 | 0xC0000000 | 0x222 + ERROR_NO_CONFIGMGR_SERVICES Errno = 0x20000000 | 0xC0000000 | 0x223 + ERROR_INVALID_PROPPAGE_PROVIDER Errno = 0x20000000 | 0xC0000000 | 0x224 + ERROR_NO_SUCH_DEVICE_INTERFACE Errno = 0x20000000 | 0xC0000000 | 0x225 + ERROR_DI_POSTPROCESSING_REQUIRED Errno = 0x20000000 | 0xC0000000 | 0x226 + ERROR_INVALID_COINSTALLER Errno = 0x20000000 | 0xC0000000 | 0x227 + ERROR_NO_COMPAT_DRIVERS Errno = 0x20000000 | 0xC0000000 | 0x228 + ERROR_NO_DEVICE_ICON Errno = 0x20000000 | 0xC0000000 | 0x229 + ERROR_INVALID_INF_LOGCONFIG Errno = 0x20000000 | 0xC0000000 | 0x22A + ERROR_DI_DONT_INSTALL Errno = 0x20000000 | 0xC0000000 | 0x22B + ERROR_INVALID_FILTER_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22C + ERROR_NON_WINDOWS_NT_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22D + ERROR_NON_WINDOWS_DRIVER Errno = 0x20000000 | 0xC0000000 | 0x22E + ERROR_NO_CATALOG_FOR_OEM_INF Errno = 0x20000000 | 0xC0000000 | 0x22F + ERROR_DEVINSTALL_QUEUE_NONNATIVE Errno = 0x20000000 | 0xC0000000 | 0x230 + ERROR_NOT_DISABLEABLE Errno = 0x20000000 | 0xC0000000 | 0x231 + ERROR_CANT_REMOVE_DEVINST Errno = 0x20000000 | 0xC0000000 | 0x232 + ERROR_INVALID_TARGET Errno = 0x20000000 | 0xC0000000 | 0x233 + ERROR_DRIVER_NONNATIVE Errno = 0x20000000 | 0xC0000000 | 0x234 + ERROR_IN_WOW64 Errno = 0x20000000 | 0xC0000000 | 0x235 + ERROR_SET_SYSTEM_RESTORE_POINT Errno = 0x20000000 | 0xC0000000 | 0x236 + ERROR_SCE_DISABLED Errno = 0x20000000 | 0xC0000000 | 0x238 + ERROR_UNKNOWN_EXCEPTION Errno = 0x20000000 | 0xC0000000 | 0x239 + ERROR_PNP_REGISTRY_ERROR Errno = 0x20000000 | 0xC0000000 | 0x23A + ERROR_REMOTE_REQUEST_UNSUPPORTED Errno = 0x20000000 | 0xC0000000 | 0x23B + ERROR_NOT_AN_INSTALLED_OEM_INF Errno = 0x20000000 | 0xC0000000 | 0x23C + ERROR_INF_IN_USE_BY_DEVICES Errno = 0x20000000 | 0xC0000000 | 0x23D + ERROR_DI_FUNCTION_OBSOLETE Errno = 0x20000000 | 0xC0000000 | 0x23E + ERROR_NO_AUTHENTICODE_CATALOG Errno = 0x20000000 | 0xC0000000 | 0x23F + ERROR_AUTHENTICODE_DISALLOWED Errno = 0x20000000 | 0xC0000000 | 0x240 + ERROR_AUTHENTICODE_TRUSTED_PUBLISHER Errno = 0x20000000 | 0xC0000000 | 0x241 + ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED Errno = 0x20000000 | 0xC0000000 | 0x242 + ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED Errno = 0x20000000 | 0xC0000000 | 0x243 + ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH Errno = 0x20000000 | 0xC0000000 | 0x244 + ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE Errno = 0x20000000 | 0xC0000000 | 0x245 + ERROR_DEVICE_INSTALLER_NOT_READY Errno = 0x20000000 | 0xC0000000 | 0x246 + ERROR_DRIVER_STORE_ADD_FAILED Errno = 0x20000000 | 0xC0000000 | 0x247 + ERROR_DEVICE_INSTALL_BLOCKED Errno = 0x20000000 | 0xC0000000 | 0x248 + ERROR_DRIVER_INSTALL_BLOCKED Errno = 0x20000000 | 0xC0000000 | 0x249 + ERROR_WRONG_INF_TYPE Errno = 0x20000000 | 0xC0000000 | 0x24A + ERROR_FILE_HASH_NOT_IN_CATALOG Errno = 0x20000000 | 0xC0000000 | 0x24B + ERROR_DRIVER_STORE_DELETE_FAILED Errno = 0x20000000 | 0xC0000000 | 0x24C + ERROR_UNRECOVERABLE_STACK_OVERFLOW Errno = 0x20000000 | 0xC0000000 | 0x300 + EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW Errno = ERROR_UNRECOVERABLE_STACK_OVERFLOW + ERROR_NO_DEFAULT_INTERFACE_DEVICE Errno = ERROR_NO_DEFAULT_DEVICE_INTERFACE + ERROR_INTERFACE_DEVICE_ACTIVE Errno = ERROR_DEVICE_INTERFACE_ACTIVE + ERROR_INTERFACE_DEVICE_REMOVED Errno = ERROR_DEVICE_INTERFACE_REMOVED + ERROR_NO_SUCH_INTERFACE_DEVICE Errno = ERROR_NO_SUCH_DEVICE_INTERFACE +) + +const ( + MAX_DEVICE_ID_LEN = 200 + MAX_DEVNODE_ID_LEN = MAX_DEVICE_ID_LEN + MAX_GUID_STRING_LEN = 39 // 38 chars + terminator null + MAX_CLASS_NAME_LEN = 32 + MAX_PROFILE_LEN = 80 + MAX_CONFIG_VALUE = 9999 + MAX_INSTANCE_VALUE = 9999 + CONFIGMG_VERSION = 0x0400 +) + +// Maximum string length constants +const ( + LINE_LEN = 256 // Windows 9x-compatible maximum for displayable strings coming from a device INF. + MAX_INF_STRING_LENGTH = 4096 // Actual maximum size of an INF string (including string substitutions). + MAX_INF_SECTION_NAME_LENGTH = 255 // For Windows 9x compatibility, INF section names should be constrained to 32 characters. + MAX_TITLE_LEN = 60 + MAX_INSTRUCTION_LEN = 256 + MAX_LABEL_LEN = 30 + MAX_SERVICE_NAME_LEN = 256 + MAX_SUBTITLE_LEN = 256 +) + +const ( + // SP_MAX_MACHINENAME_LENGTH defines maximum length of a machine name in the format expected by ConfigMgr32 CM_Connect_Machine (i.e., "\\\\MachineName\0"). + SP_MAX_MACHINENAME_LENGTH = MAX_PATH + 3 +) + +// HSPFILEQ is type for setup file queue +type HSPFILEQ uintptr + +// DevInfo holds reference to device information set +type DevInfo Handle + +// DEVINST is a handle usually recognized by cfgmgr32 APIs +type DEVINST uint32 + +// DevInfoData is a device information structure (references a device instance that is a member of a device information set) +type DevInfoData struct { + size uint32 + ClassGUID GUID + DevInst DEVINST + _ uintptr +} + +// DevInfoListDetailData is a structure for detailed information on a device information set (used for SetupDiGetDeviceInfoListDetail which supersedes the functionality of SetupDiGetDeviceInfoListClass). +type DevInfoListDetailData struct { + size uint32 // Use unsafeSizeOf method + ClassGUID GUID + RemoteMachineHandle Handle + remoteMachineName [SP_MAX_MACHINENAME_LENGTH]uint16 +} + +func (*DevInfoListDetailData) unsafeSizeOf() uint32 { + if unsafe.Sizeof(uintptr(0)) == 4 { + // Windows declares this with pshpack1.h + return uint32(unsafe.Offsetof(DevInfoListDetailData{}.remoteMachineName) + unsafe.Sizeof(DevInfoListDetailData{}.remoteMachineName)) + } + return uint32(unsafe.Sizeof(DevInfoListDetailData{})) +} + +func (data *DevInfoListDetailData) RemoteMachineName() string { + return UTF16ToString(data.remoteMachineName[:]) +} + +func (data *DevInfoListDetailData) SetRemoteMachineName(remoteMachineName string) error { + str, err := UTF16FromString(remoteMachineName) + if err != nil { + return err + } + copy(data.remoteMachineName[:], str) + return nil +} + +// DI_FUNCTION is function type for device installer +type DI_FUNCTION uint32 + +const ( + DIF_SELECTDEVICE DI_FUNCTION = 0x00000001 + DIF_INSTALLDEVICE DI_FUNCTION = 0x00000002 + DIF_ASSIGNRESOURCES DI_FUNCTION = 0x00000003 + DIF_PROPERTIES DI_FUNCTION = 0x00000004 + DIF_REMOVE DI_FUNCTION = 0x00000005 + DIF_FIRSTTIMESETUP DI_FUNCTION = 0x00000006 + DIF_FOUNDDEVICE DI_FUNCTION = 0x00000007 + DIF_SELECTCLASSDRIVERS DI_FUNCTION = 0x00000008 + DIF_VALIDATECLASSDRIVERS DI_FUNCTION = 0x00000009 + DIF_INSTALLCLASSDRIVERS DI_FUNCTION = 0x0000000A + DIF_CALCDISKSPACE DI_FUNCTION = 0x0000000B + DIF_DESTROYPRIVATEDATA DI_FUNCTION = 0x0000000C + DIF_VALIDATEDRIVER DI_FUNCTION = 0x0000000D + DIF_DETECT DI_FUNCTION = 0x0000000F + DIF_INSTALLWIZARD DI_FUNCTION = 0x00000010 + DIF_DESTROYWIZARDDATA DI_FUNCTION = 0x00000011 + DIF_PROPERTYCHANGE DI_FUNCTION = 0x00000012 + DIF_ENABLECLASS DI_FUNCTION = 0x00000013 + DIF_DETECTVERIFY DI_FUNCTION = 0x00000014 + DIF_INSTALLDEVICEFILES DI_FUNCTION = 0x00000015 + DIF_UNREMOVE DI_FUNCTION = 0x00000016 + DIF_SELECTBESTCOMPATDRV DI_FUNCTION = 0x00000017 + DIF_ALLOW_INSTALL DI_FUNCTION = 0x00000018 + DIF_REGISTERDEVICE DI_FUNCTION = 0x00000019 + DIF_NEWDEVICEWIZARD_PRESELECT DI_FUNCTION = 0x0000001A + DIF_NEWDEVICEWIZARD_SELECT DI_FUNCTION = 0x0000001B + DIF_NEWDEVICEWIZARD_PREANALYZE DI_FUNCTION = 0x0000001C + DIF_NEWDEVICEWIZARD_POSTANALYZE DI_FUNCTION = 0x0000001D + DIF_NEWDEVICEWIZARD_FINISHINSTALL DI_FUNCTION = 0x0000001E + DIF_INSTALLINTERFACES DI_FUNCTION = 0x00000020 + DIF_DETECTCANCEL DI_FUNCTION = 0x00000021 + DIF_REGISTER_COINSTALLERS DI_FUNCTION = 0x00000022 + DIF_ADDPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000023 + DIF_ADDPROPERTYPAGE_BASIC DI_FUNCTION = 0x00000024 + DIF_TROUBLESHOOTER DI_FUNCTION = 0x00000026 + DIF_POWERMESSAGEWAKE DI_FUNCTION = 0x00000027 + DIF_ADDREMOTEPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000028 + DIF_UPDATEDRIVER_UI DI_FUNCTION = 0x00000029 + DIF_FINISHINSTALL_ACTION DI_FUNCTION = 0x0000002A +) + +// DevInstallParams is device installation parameters structure (associated with a particular device information element, or globally with a device information set) +type DevInstallParams struct { + size uint32 + Flags DI_FLAGS + FlagsEx DI_FLAGSEX + hwndParent uintptr + InstallMsgHandler uintptr + InstallMsgHandlerContext uintptr + FileQueue HSPFILEQ + _ uintptr + _ uint32 + driverPath [MAX_PATH]uint16 +} + +func (params *DevInstallParams) DriverPath() string { + return UTF16ToString(params.driverPath[:]) +} + +func (params *DevInstallParams) SetDriverPath(driverPath string) error { + str, err := UTF16FromString(driverPath) + if err != nil { + return err + } + copy(params.driverPath[:], str) + return nil +} + +// DI_FLAGS is SP_DEVINSTALL_PARAMS.Flags values +type DI_FLAGS uint32 + +const ( + // Flags for choosing a device + DI_SHOWOEM DI_FLAGS = 0x00000001 // support Other... button + DI_SHOWCOMPAT DI_FLAGS = 0x00000002 // show compatibility list + DI_SHOWCLASS DI_FLAGS = 0x00000004 // show class list + DI_SHOWALL DI_FLAGS = 0x00000007 // both class & compat list shown + DI_NOVCP DI_FLAGS = 0x00000008 // don't create a new copy queue--use caller-supplied FileQueue + DI_DIDCOMPAT DI_FLAGS = 0x00000010 // Searched for compatible devices + DI_DIDCLASS DI_FLAGS = 0x00000020 // Searched for class devices + DI_AUTOASSIGNRES DI_FLAGS = 0x00000040 // No UI for resources if possible + + // Flags returned by DiInstallDevice to indicate need to reboot/restart + DI_NEEDRESTART DI_FLAGS = 0x00000080 // Reboot required to take effect + DI_NEEDREBOOT DI_FLAGS = 0x00000100 // "" + + // Flags for device installation + DI_NOBROWSE DI_FLAGS = 0x00000200 // no Browse... in InsertDisk + + // Flags set by DiBuildDriverInfoList + DI_MULTMFGS DI_FLAGS = 0x00000400 // Set if multiple manufacturers in class driver list + + // Flag indicates that device is disabled + DI_DISABLED DI_FLAGS = 0x00000800 // Set if device disabled + + // Flags for Device/Class Properties + DI_GENERALPAGE_ADDED DI_FLAGS = 0x00001000 + DI_RESOURCEPAGE_ADDED DI_FLAGS = 0x00002000 + + // Flag to indicate the setting properties for this Device (or class) caused a change so the Dev Mgr UI probably needs to be updated. + DI_PROPERTIES_CHANGE DI_FLAGS = 0x00004000 + + // Flag to indicate that the sorting from the INF file should be used. + DI_INF_IS_SORTED DI_FLAGS = 0x00008000 + + // Flag to indicate that only the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched. + DI_ENUMSINGLEINF DI_FLAGS = 0x00010000 + + // Flag that prevents ConfigMgr from removing/re-enumerating devices during device + // registration, installation, and deletion. + DI_DONOTCALLCONFIGMG DI_FLAGS = 0x00020000 + + // The following flag can be used to install a device disabled + DI_INSTALLDISABLED DI_FLAGS = 0x00040000 + + // Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver + // list from its existing class driver list, instead of the normal INF search. + DI_COMPAT_FROM_CLASS DI_FLAGS = 0x00080000 + + // This flag is set if the Class Install params should be used. + DI_CLASSINSTALLPARAMS DI_FLAGS = 0x00100000 + + // This flag is set if the caller of DiCallClassInstaller does NOT want the internal default action performed if the Class installer returns ERROR_DI_DO_DEFAULT. + DI_NODI_DEFAULTACTION DI_FLAGS = 0x00200000 + + // Flags for device installation + DI_QUIETINSTALL DI_FLAGS = 0x00800000 // don't confuse the user with questions or excess info + DI_NOFILECOPY DI_FLAGS = 0x01000000 // No file Copy necessary + DI_FORCECOPY DI_FLAGS = 0x02000000 // Force files to be copied from install path + DI_DRIVERPAGE_ADDED DI_FLAGS = 0x04000000 // Prop provider added Driver page. + DI_USECI_SELECTSTRINGS DI_FLAGS = 0x08000000 // Use Class Installer Provided strings in the Select Device Dlg + DI_OVERRIDE_INFFLAGS DI_FLAGS = 0x10000000 // Override INF flags + DI_PROPS_NOCHANGEUSAGE DI_FLAGS = 0x20000000 // No Enable/Disable in General Props + + DI_NOSELECTICONS DI_FLAGS = 0x40000000 // No small icons in select device dialogs + + DI_NOWRITE_IDS DI_FLAGS = 0x80000000 // Don't write HW & Compat IDs on install +) + +// DI_FLAGSEX is SP_DEVINSTALL_PARAMS.FlagsEx values +type DI_FLAGSEX uint32 + +const ( + DI_FLAGSEX_CI_FAILED DI_FLAGSEX = 0x00000004 // Failed to Load/Call class installer + DI_FLAGSEX_FINISHINSTALL_ACTION DI_FLAGSEX = 0x00000008 // Class/co-installer wants to get a DIF_FINISH_INSTALL action in client context. + DI_FLAGSEX_DIDINFOLIST DI_FLAGSEX = 0x00000010 // Did the Class Info List + DI_FLAGSEX_DIDCOMPATINFO DI_FLAGSEX = 0x00000020 // Did the Compat Info List + DI_FLAGSEX_FILTERCLASSES DI_FLAGSEX = 0x00000040 + DI_FLAGSEX_SETFAILEDINSTALL DI_FLAGSEX = 0x00000080 + DI_FLAGSEX_DEVICECHANGE DI_FLAGSEX = 0x00000100 + DI_FLAGSEX_ALWAYSWRITEIDS DI_FLAGSEX = 0x00000200 + DI_FLAGSEX_PROPCHANGE_PENDING DI_FLAGSEX = 0x00000400 // One or more device property sheets have had changes made to them, and need to have a DIF_PROPERTYCHANGE occur. + DI_FLAGSEX_ALLOWEXCLUDEDDRVS DI_FLAGSEX = 0x00000800 + DI_FLAGSEX_NOUIONQUERYREMOVE DI_FLAGSEX = 0x00001000 + DI_FLAGSEX_USECLASSFORCOMPAT DI_FLAGSEX = 0x00002000 // Use the device's class when building compat drv list. (Ignored if DI_COMPAT_FROM_CLASS flag is specified.) + DI_FLAGSEX_NO_DRVREG_MODIFY DI_FLAGSEX = 0x00008000 // Don't run AddReg and DelReg for device's software (driver) key. + DI_FLAGSEX_IN_SYSTEM_SETUP DI_FLAGSEX = 0x00010000 // Installation is occurring during initial system setup. + DI_FLAGSEX_INET_DRIVER DI_FLAGSEX = 0x00020000 // Driver came from Windows Update + DI_FLAGSEX_APPENDDRIVERLIST DI_FLAGSEX = 0x00040000 // Cause SetupDiBuildDriverInfoList to append a new driver list to an existing list. + DI_FLAGSEX_PREINSTALLBACKUP DI_FLAGSEX = 0x00080000 // not used + DI_FLAGSEX_BACKUPONREPLACE DI_FLAGSEX = 0x00100000 // not used + DI_FLAGSEX_DRIVERLIST_FROM_URL DI_FLAGSEX = 0x00200000 // build driver list from INF(s) retrieved from URL specified in SP_DEVINSTALL_PARAMS.DriverPath (empty string means Windows Update website) + DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS DI_FLAGSEX = 0x00800000 // Don't include old Internet drivers when building a driver list. Ignored on Windows Vista and later. + DI_FLAGSEX_POWERPAGE_ADDED DI_FLAGSEX = 0x01000000 // class installer added their own power page + DI_FLAGSEX_FILTERSIMILARDRIVERS DI_FLAGSEX = 0x02000000 // only include similar drivers in class list + DI_FLAGSEX_INSTALLEDDRIVER DI_FLAGSEX = 0x04000000 // only add the installed driver to the class or compat driver list. Used in calls to SetupDiBuildDriverInfoList + DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE DI_FLAGSEX = 0x08000000 // Don't remove identical driver nodes from the class list + DI_FLAGSEX_ALTPLATFORM_DRVSEARCH DI_FLAGSEX = 0x10000000 // Build driver list based on alternate platform information specified in associated file queue + DI_FLAGSEX_RESTART_DEVICE_ONLY DI_FLAGSEX = 0x20000000 // only restart the device drivers are being installed on as opposed to restarting all devices using those drivers. + DI_FLAGSEX_RECURSIVESEARCH DI_FLAGSEX = 0x40000000 // Tell SetupDiBuildDriverInfoList to do a recursive search + DI_FLAGSEX_SEARCH_PUBLISHED_INFS DI_FLAGSEX = 0x80000000 // Tell SetupDiBuildDriverInfoList to do a "published INF" search +) + +// ClassInstallHeader is the first member of any class install parameters structure. It contains the device installation request code that defines the format of the rest of the install parameters structure. +type ClassInstallHeader struct { + size uint32 + InstallFunction DI_FUNCTION +} + +func MakeClassInstallHeader(installFunction DI_FUNCTION) *ClassInstallHeader { + hdr := &ClassInstallHeader{InstallFunction: installFunction} + hdr.size = uint32(unsafe.Sizeof(*hdr)) + return hdr +} + +// DICS_STATE specifies values indicating a change in a device's state +type DICS_STATE uint32 + +const ( + DICS_ENABLE DICS_STATE = 0x00000001 // The device is being enabled. + DICS_DISABLE DICS_STATE = 0x00000002 // The device is being disabled. + DICS_PROPCHANGE DICS_STATE = 0x00000003 // The properties of the device have changed. + DICS_START DICS_STATE = 0x00000004 // The device is being started (if the request is for the currently active hardware profile). + DICS_STOP DICS_STATE = 0x00000005 // The device is being stopped. The driver stack will be unloaded and the CSCONFIGFLAG_DO_NOT_START flag will be set for the device. +) + +// DICS_FLAG specifies the scope of a device property change +type DICS_FLAG uint32 + +const ( + DICS_FLAG_GLOBAL DICS_FLAG = 0x00000001 // make change in all hardware profiles + DICS_FLAG_CONFIGSPECIFIC DICS_FLAG = 0x00000002 // make change in specified profile only + DICS_FLAG_CONFIGGENERAL DICS_FLAG = 0x00000004 // 1 or more hardware profile-specific changes to follow (obsolete) +) + +// PropChangeParams is a structure corresponding to a DIF_PROPERTYCHANGE install function. +type PropChangeParams struct { + ClassInstallHeader ClassInstallHeader + StateChange DICS_STATE + Scope DICS_FLAG + HwProfile uint32 +} + +// DI_REMOVEDEVICE specifies the scope of the device removal +type DI_REMOVEDEVICE uint32 + +const ( + DI_REMOVEDEVICE_GLOBAL DI_REMOVEDEVICE = 0x00000001 // Make this change in all hardware profiles. Remove information about the device from the registry. + DI_REMOVEDEVICE_CONFIGSPECIFIC DI_REMOVEDEVICE = 0x00000002 // Make this change to only the hardware profile specified by HwProfile. this flag only applies to root-enumerated devices. When Windows removes the device from the last hardware profile in which it was configured, Windows performs a global removal. +) + +// RemoveDeviceParams is a structure corresponding to a DIF_REMOVE install function. +type RemoveDeviceParams struct { + ClassInstallHeader ClassInstallHeader + Scope DI_REMOVEDEVICE + HwProfile uint32 +} + +// DrvInfoData is driver information structure (member of a driver info list that may be associated with a particular device instance, or (globally) with a device information set) +type DrvInfoData struct { + size uint32 + DriverType uint32 + _ uintptr + description [LINE_LEN]uint16 + mfgName [LINE_LEN]uint16 + providerName [LINE_LEN]uint16 + DriverDate Filetime + DriverVersion uint64 +} + +func (data *DrvInfoData) Description() string { + return UTF16ToString(data.description[:]) +} + +func (data *DrvInfoData) SetDescription(description string) error { + str, err := UTF16FromString(description) + if err != nil { + return err + } + copy(data.description[:], str) + return nil +} + +func (data *DrvInfoData) MfgName() string { + return UTF16ToString(data.mfgName[:]) +} + +func (data *DrvInfoData) SetMfgName(mfgName string) error { + str, err := UTF16FromString(mfgName) + if err != nil { + return err + } + copy(data.mfgName[:], str) + return nil +} + +func (data *DrvInfoData) ProviderName() string { + return UTF16ToString(data.providerName[:]) +} + +func (data *DrvInfoData) SetProviderName(providerName string) error { + str, err := UTF16FromString(providerName) + if err != nil { + return err + } + copy(data.providerName[:], str) + return nil +} + +// IsNewer method returns true if DrvInfoData date and version is newer than supplied parameters. +func (data *DrvInfoData) IsNewer(driverDate Filetime, driverVersion uint64) bool { + if data.DriverDate.HighDateTime > driverDate.HighDateTime { + return true + } + if data.DriverDate.HighDateTime < driverDate.HighDateTime { + return false + } + + if data.DriverDate.LowDateTime > driverDate.LowDateTime { + return true + } + if data.DriverDate.LowDateTime < driverDate.LowDateTime { + return false + } + + if data.DriverVersion > driverVersion { + return true + } + if data.DriverVersion < driverVersion { + return false + } + + return false +} + +// DrvInfoDetailData is driver information details structure (provides detailed information about a particular driver information structure) +type DrvInfoDetailData struct { + size uint32 // Use unsafeSizeOf method + InfDate Filetime + compatIDsOffset uint32 + compatIDsLength uint32 + _ uintptr + sectionName [LINE_LEN]uint16 + infFileName [MAX_PATH]uint16 + drvDescription [LINE_LEN]uint16 + hardwareID [1]uint16 +} + +func (*DrvInfoDetailData) unsafeSizeOf() uint32 { + if unsafe.Sizeof(uintptr(0)) == 4 { + // Windows declares this with pshpack1.h + return uint32(unsafe.Offsetof(DrvInfoDetailData{}.hardwareID) + unsafe.Sizeof(DrvInfoDetailData{}.hardwareID)) + } + return uint32(unsafe.Sizeof(DrvInfoDetailData{})) +} + +func (data *DrvInfoDetailData) SectionName() string { + return UTF16ToString(data.sectionName[:]) +} + +func (data *DrvInfoDetailData) InfFileName() string { + return UTF16ToString(data.infFileName[:]) +} + +func (data *DrvInfoDetailData) DrvDescription() string { + return UTF16ToString(data.drvDescription[:]) +} + +func (data *DrvInfoDetailData) HardwareID() string { + if data.compatIDsOffset > 1 { + bufW := data.getBuf() + return UTF16ToString(bufW[:wcslen(bufW)]) + } + + return "" +} + +func (data *DrvInfoDetailData) CompatIDs() []string { + a := make([]string, 0) + + if data.compatIDsLength > 0 { + bufW := data.getBuf() + bufW = bufW[data.compatIDsOffset : data.compatIDsOffset+data.compatIDsLength] + for i := 0; i < len(bufW); { + j := i + wcslen(bufW[i:]) + if i < j { + a = append(a, UTF16ToString(bufW[i:j])) + } + i = j + 1 + } + } + + return a +} + +func (data *DrvInfoDetailData) getBuf() []uint16 { + len := (data.size - uint32(unsafe.Offsetof(data.hardwareID))) / 2 + sl := struct { + addr *uint16 + len int + cap int + }{&data.hardwareID[0], int(len), int(len)} + return *(*[]uint16)(unsafe.Pointer(&sl)) +} + +// IsCompatible method tests if given hardware ID matches the driver or is listed on the compatible ID list. +func (data *DrvInfoDetailData) IsCompatible(hwid string) bool { + hwidLC := strings.ToLower(hwid) + if strings.ToLower(data.HardwareID()) == hwidLC { + return true + } + a := data.CompatIDs() + for i := range a { + if strings.ToLower(a[i]) == hwidLC { + return true + } + } + + return false +} + +// DICD flags control SetupDiCreateDeviceInfo +type DICD uint32 + +const ( + DICD_GENERATE_ID DICD = 0x00000001 + DICD_INHERIT_CLASSDRVS DICD = 0x00000002 +) + +// SUOI flags control SetupUninstallOEMInf +type SUOI uint32 + +const ( + SUOI_FORCEDELETE SUOI = 0x0001 +) + +// SPDIT flags to distinguish between class drivers and +// device drivers. (Passed in 'DriverType' parameter of +// driver information list APIs) +type SPDIT uint32 + +const ( + SPDIT_NODRIVER SPDIT = 0x00000000 + SPDIT_CLASSDRIVER SPDIT = 0x00000001 + SPDIT_COMPATDRIVER SPDIT = 0x00000002 +) + +// DIGCF flags control what is included in the device information set built by SetupDiGetClassDevs +type DIGCF uint32 + +const ( + DIGCF_DEFAULT DIGCF = 0x00000001 // only valid with DIGCF_DEVICEINTERFACE + DIGCF_PRESENT DIGCF = 0x00000002 + DIGCF_ALLCLASSES DIGCF = 0x00000004 + DIGCF_PROFILE DIGCF = 0x00000008 + DIGCF_DEVICEINTERFACE DIGCF = 0x00000010 +) + +// DIREG specifies values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey. +type DIREG uint32 + +const ( + DIREG_DEV DIREG = 0x00000001 // Open/Create/Delete device key + DIREG_DRV DIREG = 0x00000002 // Open/Create/Delete driver key + DIREG_BOTH DIREG = 0x00000004 // Delete both driver and Device key +) + +// SPDRP specifies device registry property codes +// (Codes marked as read-only (R) may only be used for +// SetupDiGetDeviceRegistryProperty) +// +// These values should cover the same set of registry properties +// as defined by the CM_DRP codes in cfgmgr32.h. +// +// Note that SPDRP codes are zero based while CM_DRP codes are one based! +type SPDRP uint32 + +const ( + SPDRP_DEVICEDESC SPDRP = 0x00000000 // DeviceDesc (R/W) + SPDRP_HARDWAREID SPDRP = 0x00000001 // HardwareID (R/W) + SPDRP_COMPATIBLEIDS SPDRP = 0x00000002 // CompatibleIDs (R/W) + SPDRP_SERVICE SPDRP = 0x00000004 // Service (R/W) + SPDRP_CLASS SPDRP = 0x00000007 // Class (R--tied to ClassGUID) + SPDRP_CLASSGUID SPDRP = 0x00000008 // ClassGUID (R/W) + SPDRP_DRIVER SPDRP = 0x00000009 // Driver (R/W) + SPDRP_CONFIGFLAGS SPDRP = 0x0000000A // ConfigFlags (R/W) + SPDRP_MFG SPDRP = 0x0000000B // Mfg (R/W) + SPDRP_FRIENDLYNAME SPDRP = 0x0000000C // FriendlyName (R/W) + SPDRP_LOCATION_INFORMATION SPDRP = 0x0000000D // LocationInformation (R/W) + SPDRP_PHYSICAL_DEVICE_OBJECT_NAME SPDRP = 0x0000000E // PhysicalDeviceObjectName (R) + SPDRP_CAPABILITIES SPDRP = 0x0000000F // Capabilities (R) + SPDRP_UI_NUMBER SPDRP = 0x00000010 // UiNumber (R) + SPDRP_UPPERFILTERS SPDRP = 0x00000011 // UpperFilters (R/W) + SPDRP_LOWERFILTERS SPDRP = 0x00000012 // LowerFilters (R/W) + SPDRP_BUSTYPEGUID SPDRP = 0x00000013 // BusTypeGUID (R) + SPDRP_LEGACYBUSTYPE SPDRP = 0x00000014 // LegacyBusType (R) + SPDRP_BUSNUMBER SPDRP = 0x00000015 // BusNumber (R) + SPDRP_ENUMERATOR_NAME SPDRP = 0x00000016 // Enumerator Name (R) + SPDRP_SECURITY SPDRP = 0x00000017 // Security (R/W, binary form) + SPDRP_SECURITY_SDS SPDRP = 0x00000018 // Security (W, SDS form) + SPDRP_DEVTYPE SPDRP = 0x00000019 // Device Type (R/W) + SPDRP_EXCLUSIVE SPDRP = 0x0000001A // Device is exclusive-access (R/W) + SPDRP_CHARACTERISTICS SPDRP = 0x0000001B // Device Characteristics (R/W) + SPDRP_ADDRESS SPDRP = 0x0000001C // Device Address (R) + SPDRP_UI_NUMBER_DESC_FORMAT SPDRP = 0x0000001D // UiNumberDescFormat (R/W) + SPDRP_DEVICE_POWER_DATA SPDRP = 0x0000001E // Device Power Data (R) + SPDRP_REMOVAL_POLICY SPDRP = 0x0000001F // Removal Policy (R) + SPDRP_REMOVAL_POLICY_HW_DEFAULT SPDRP = 0x00000020 // Hardware Removal Policy (R) + SPDRP_REMOVAL_POLICY_OVERRIDE SPDRP = 0x00000021 // Removal Policy Override (RW) + SPDRP_INSTALL_STATE SPDRP = 0x00000022 // Device Install State (R) + SPDRP_LOCATION_PATHS SPDRP = 0x00000023 // Device Location Paths (R) + SPDRP_BASE_CONTAINERID SPDRP = 0x00000024 // Base ContainerID (R) + + SPDRP_MAXIMUM_PROPERTY SPDRP = 0x00000025 // Upper bound on ordinals +) + +// DEVPROPTYPE represents the property-data-type identifier that specifies the +// data type of a device property value in the unified device property model. +type DEVPROPTYPE uint32 + +const ( + DEVPROP_TYPEMOD_ARRAY DEVPROPTYPE = 0x00001000 + DEVPROP_TYPEMOD_LIST DEVPROPTYPE = 0x00002000 + + DEVPROP_TYPE_EMPTY DEVPROPTYPE = 0x00000000 + DEVPROP_TYPE_NULL DEVPROPTYPE = 0x00000001 + DEVPROP_TYPE_SBYTE DEVPROPTYPE = 0x00000002 + DEVPROP_TYPE_BYTE DEVPROPTYPE = 0x00000003 + DEVPROP_TYPE_INT16 DEVPROPTYPE = 0x00000004 + DEVPROP_TYPE_UINT16 DEVPROPTYPE = 0x00000005 + DEVPROP_TYPE_INT32 DEVPROPTYPE = 0x00000006 + DEVPROP_TYPE_UINT32 DEVPROPTYPE = 0x00000007 + DEVPROP_TYPE_INT64 DEVPROPTYPE = 0x00000008 + DEVPROP_TYPE_UINT64 DEVPROPTYPE = 0x00000009 + DEVPROP_TYPE_FLOAT DEVPROPTYPE = 0x0000000A + DEVPROP_TYPE_DOUBLE DEVPROPTYPE = 0x0000000B + DEVPROP_TYPE_DECIMAL DEVPROPTYPE = 0x0000000C + DEVPROP_TYPE_GUID DEVPROPTYPE = 0x0000000D + DEVPROP_TYPE_CURRENCY DEVPROPTYPE = 0x0000000E + DEVPROP_TYPE_DATE DEVPROPTYPE = 0x0000000F + DEVPROP_TYPE_FILETIME DEVPROPTYPE = 0x00000010 + DEVPROP_TYPE_BOOLEAN DEVPROPTYPE = 0x00000011 + DEVPROP_TYPE_STRING DEVPROPTYPE = 0x00000012 + DEVPROP_TYPE_STRING_LIST DEVPROPTYPE = DEVPROP_TYPE_STRING | DEVPROP_TYPEMOD_LIST + DEVPROP_TYPE_SECURITY_DESCRIPTOR DEVPROPTYPE = 0x00000013 + DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING DEVPROPTYPE = 0x00000014 + DEVPROP_TYPE_DEVPROPKEY DEVPROPTYPE = 0x00000015 + DEVPROP_TYPE_DEVPROPTYPE DEVPROPTYPE = 0x00000016 + DEVPROP_TYPE_BINARY DEVPROPTYPE = DEVPROP_TYPE_BYTE | DEVPROP_TYPEMOD_ARRAY + DEVPROP_TYPE_ERROR DEVPROPTYPE = 0x00000017 + DEVPROP_TYPE_NTSTATUS DEVPROPTYPE = 0x00000018 + DEVPROP_TYPE_STRING_INDIRECT DEVPROPTYPE = 0x00000019 + + MAX_DEVPROP_TYPE DEVPROPTYPE = 0x00000019 + MAX_DEVPROP_TYPEMOD DEVPROPTYPE = 0x00002000 + + DEVPROP_MASK_TYPE DEVPROPTYPE = 0x00000FFF + DEVPROP_MASK_TYPEMOD DEVPROPTYPE = 0x0000F000 +) + +// DEVPROPGUID specifies a property category. +type DEVPROPGUID GUID + +// DEVPROPID uniquely identifies the property within the property category. +type DEVPROPID uint32 + +const DEVPROPID_FIRST_USABLE DEVPROPID = 2 + +// DEVPROPKEY represents a device property key for a device property in the +// unified device property model. +type DEVPROPKEY struct { + FmtID DEVPROPGUID + PID DEVPROPID +} + +// CONFIGRET is a return value or error code from cfgmgr32 APIs +type CONFIGRET uint32 + +func (ret CONFIGRET) Error() string { + if win32Error, ok := ret.Unwrap().(Errno); ok { + return fmt.Sprintf("%s (CfgMgr error: 0x%08x)", win32Error.Error(), uint32(ret)) + } + return fmt.Sprintf("CfgMgr error: 0x%08x", uint32(ret)) +} + +func (ret CONFIGRET) Win32Error(defaultError Errno) Errno { + return cm_MapCrToWin32Err(ret, defaultError) +} + +func (ret CONFIGRET) Unwrap() error { + const noMatch = Errno(^uintptr(0)) + win32Error := ret.Win32Error(noMatch) + if win32Error == noMatch { + return nil + } + return win32Error +} + +const ( + CR_SUCCESS CONFIGRET = 0x00000000 + CR_DEFAULT CONFIGRET = 0x00000001 + CR_OUT_OF_MEMORY CONFIGRET = 0x00000002 + CR_INVALID_POINTER CONFIGRET = 0x00000003 + CR_INVALID_FLAG CONFIGRET = 0x00000004 + CR_INVALID_DEVNODE CONFIGRET = 0x00000005 + CR_INVALID_DEVINST = CR_INVALID_DEVNODE + CR_INVALID_RES_DES CONFIGRET = 0x00000006 + CR_INVALID_LOG_CONF CONFIGRET = 0x00000007 + CR_INVALID_ARBITRATOR CONFIGRET = 0x00000008 + CR_INVALID_NODELIST CONFIGRET = 0x00000009 + CR_DEVNODE_HAS_REQS CONFIGRET = 0x0000000A + CR_DEVINST_HAS_REQS = CR_DEVNODE_HAS_REQS + CR_INVALID_RESOURCEID CONFIGRET = 0x0000000B + CR_DLVXD_NOT_FOUND CONFIGRET = 0x0000000C + CR_NO_SUCH_DEVNODE CONFIGRET = 0x0000000D + CR_NO_SUCH_DEVINST = CR_NO_SUCH_DEVNODE + CR_NO_MORE_LOG_CONF CONFIGRET = 0x0000000E + CR_NO_MORE_RES_DES CONFIGRET = 0x0000000F + CR_ALREADY_SUCH_DEVNODE CONFIGRET = 0x00000010 + CR_ALREADY_SUCH_DEVINST = CR_ALREADY_SUCH_DEVNODE + CR_INVALID_RANGE_LIST CONFIGRET = 0x00000011 + CR_INVALID_RANGE CONFIGRET = 0x00000012 + CR_FAILURE CONFIGRET = 0x00000013 + CR_NO_SUCH_LOGICAL_DEV CONFIGRET = 0x00000014 + CR_CREATE_BLOCKED CONFIGRET = 0x00000015 + CR_NOT_SYSTEM_VM CONFIGRET = 0x00000016 + CR_REMOVE_VETOED CONFIGRET = 0x00000017 + CR_APM_VETOED CONFIGRET = 0x00000018 + CR_INVALID_LOAD_TYPE CONFIGRET = 0x00000019 + CR_BUFFER_SMALL CONFIGRET = 0x0000001A + CR_NO_ARBITRATOR CONFIGRET = 0x0000001B + CR_NO_REGISTRY_HANDLE CONFIGRET = 0x0000001C + CR_REGISTRY_ERROR CONFIGRET = 0x0000001D + CR_INVALID_DEVICE_ID CONFIGRET = 0x0000001E + CR_INVALID_DATA CONFIGRET = 0x0000001F + CR_INVALID_API CONFIGRET = 0x00000020 + CR_DEVLOADER_NOT_READY CONFIGRET = 0x00000021 + CR_NEED_RESTART CONFIGRET = 0x00000022 + CR_NO_MORE_HW_PROFILES CONFIGRET = 0x00000023 + CR_DEVICE_NOT_THERE CONFIGRET = 0x00000024 + CR_NO_SUCH_VALUE CONFIGRET = 0x00000025 + CR_WRONG_TYPE CONFIGRET = 0x00000026 + CR_INVALID_PRIORITY CONFIGRET = 0x00000027 + CR_NOT_DISABLEABLE CONFIGRET = 0x00000028 + CR_FREE_RESOURCES CONFIGRET = 0x00000029 + CR_QUERY_VETOED CONFIGRET = 0x0000002A + CR_CANT_SHARE_IRQ CONFIGRET = 0x0000002B + CR_NO_DEPENDENT CONFIGRET = 0x0000002C + CR_SAME_RESOURCES CONFIGRET = 0x0000002D + CR_NO_SUCH_REGISTRY_KEY CONFIGRET = 0x0000002E + CR_INVALID_MACHINENAME CONFIGRET = 0x0000002F + CR_REMOTE_COMM_FAILURE CONFIGRET = 0x00000030 + CR_MACHINE_UNAVAILABLE CONFIGRET = 0x00000031 + CR_NO_CM_SERVICES CONFIGRET = 0x00000032 + CR_ACCESS_DENIED CONFIGRET = 0x00000033 + CR_CALL_NOT_IMPLEMENTED CONFIGRET = 0x00000034 + CR_INVALID_PROPERTY CONFIGRET = 0x00000035 + CR_DEVICE_INTERFACE_ACTIVE CONFIGRET = 0x00000036 + CR_NO_SUCH_DEVICE_INTERFACE CONFIGRET = 0x00000037 + CR_INVALID_REFERENCE_STRING CONFIGRET = 0x00000038 + CR_INVALID_CONFLICT_LIST CONFIGRET = 0x00000039 + CR_INVALID_INDEX CONFIGRET = 0x0000003A + CR_INVALID_STRUCTURE_SIZE CONFIGRET = 0x0000003B + NUM_CR_RESULTS CONFIGRET = 0x0000003C +) + +const ( + CM_GET_DEVICE_INTERFACE_LIST_PRESENT = 0 // only currently 'live' device interfaces + CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES = 1 // all registered device interfaces, live or not +) + +const ( + DN_ROOT_ENUMERATED = 0x00000001 // Was enumerated by ROOT + DN_DRIVER_LOADED = 0x00000002 // Has Register_Device_Driver + DN_ENUM_LOADED = 0x00000004 // Has Register_Enumerator + DN_STARTED = 0x00000008 // Is currently configured + DN_MANUAL = 0x00000010 // Manually installed + DN_NEED_TO_ENUM = 0x00000020 // May need reenumeration + DN_NOT_FIRST_TIME = 0x00000040 // Has received a config + DN_HARDWARE_ENUM = 0x00000080 // Enum generates hardware ID + DN_LIAR = 0x00000100 // Lied about can reconfig once + DN_HAS_MARK = 0x00000200 // Not CM_Create_DevInst lately + DN_HAS_PROBLEM = 0x00000400 // Need device installer + DN_FILTERED = 0x00000800 // Is filtered + DN_MOVED = 0x00001000 // Has been moved + DN_DISABLEABLE = 0x00002000 // Can be disabled + DN_REMOVABLE = 0x00004000 // Can be removed + DN_PRIVATE_PROBLEM = 0x00008000 // Has a private problem + DN_MF_PARENT = 0x00010000 // Multi function parent + DN_MF_CHILD = 0x00020000 // Multi function child + DN_WILL_BE_REMOVED = 0x00040000 // DevInst is being removed + DN_NOT_FIRST_TIMEE = 0x00080000 // Has received a config enumerate + DN_STOP_FREE_RES = 0x00100000 // When child is stopped, free resources + DN_REBAL_CANDIDATE = 0x00200000 // Don't skip during rebalance + DN_BAD_PARTIAL = 0x00400000 // This devnode's log_confs do not have same resources + DN_NT_ENUMERATOR = 0x00800000 // This devnode's is an NT enumerator + DN_NT_DRIVER = 0x01000000 // This devnode's is an NT driver + DN_NEEDS_LOCKING = 0x02000000 // Devnode need lock resume processing + DN_ARM_WAKEUP = 0x04000000 // Devnode can be the wakeup device + DN_APM_ENUMERATOR = 0x08000000 // APM aware enumerator + DN_APM_DRIVER = 0x10000000 // APM aware driver + DN_SILENT_INSTALL = 0x20000000 // Silent install + DN_NO_SHOW_IN_DM = 0x40000000 // No show in device manager + DN_BOOT_LOG_PROB = 0x80000000 // Had a problem during preassignment of boot log conf + DN_NEED_RESTART = DN_LIAR // System needs to be restarted for this Devnode to work properly + DN_DRIVER_BLOCKED = DN_NOT_FIRST_TIME // One or more drivers are blocked from loading for this Devnode + DN_LEGACY_DRIVER = DN_MOVED // This device is using a legacy driver + DN_CHILD_WITH_INVALID_ID = DN_HAS_MARK // One or more children have invalid IDs + DN_DEVICE_DISCONNECTED = DN_NEEDS_LOCKING // The function driver for a device reported that the device is not connected. Typically this means a wireless device is out of range. + DN_QUERY_REMOVE_PENDING = DN_MF_PARENT // Device is part of a set of related devices collectively pending query-removal + DN_QUERY_REMOVE_ACTIVE = DN_MF_CHILD // Device is actively engaged in a query-remove IRP + DN_CHANGEABLE_FLAGS = DN_NOT_FIRST_TIME | DN_HARDWARE_ENUM | DN_HAS_MARK | DN_DISABLEABLE | DN_REMOVABLE | DN_MF_CHILD | DN_MF_PARENT | DN_NOT_FIRST_TIMEE | DN_STOP_FREE_RES | DN_REBAL_CANDIDATE | DN_NT_ENUMERATOR | DN_NT_DRIVER | DN_SILENT_INSTALL | DN_NO_SHOW_IN_DM +) + +//sys setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiCreateDeviceInfoListExW + +// SetupDiCreateDeviceInfoListEx function creates an empty device information set on a remote or a local computer and optionally associates the set with a device setup class. +func SetupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName string) (deviceInfoSet DevInfo, err error) { + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + return setupDiCreateDeviceInfoListEx(classGUID, hwndParent, machineNameUTF16, 0) +} + +//sys setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW + +// SetupDiGetDeviceInfoListDetail function retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name. +func SetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo) (deviceInfoSetDetailData *DevInfoListDetailData, err error) { + data := &DevInfoListDetailData{} + data.size = data.unsafeSizeOf() + + return data, setupDiGetDeviceInfoListDetail(deviceInfoSet, data) +} + +// DeviceInfoListDetail method retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name. +func (deviceInfoSet DevInfo) DeviceInfoListDetail() (*DevInfoListDetailData, error) { + return SetupDiGetDeviceInfoListDetail(deviceInfoSet) +} + +//sys setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCreateDeviceInfoW + +// SetupDiCreateDeviceInfo function creates a new device information element and adds it as a new member to the specified device information set. +func SetupDiCreateDeviceInfo(deviceInfoSet DevInfo, deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (deviceInfoData *DevInfoData, err error) { + deviceNameUTF16, err := UTF16PtrFromString(deviceName) + if err != nil { + return + } + + var deviceDescriptionUTF16 *uint16 + if deviceDescription != "" { + deviceDescriptionUTF16, err = UTF16PtrFromString(deviceDescription) + if err != nil { + return + } + } + + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiCreateDeviceInfo(deviceInfoSet, deviceNameUTF16, classGUID, deviceDescriptionUTF16, hwndParent, creationFlags, data) +} + +// CreateDeviceInfo method creates a new device information element and adds it as a new member to the specified device information set. +func (deviceInfoSet DevInfo) CreateDeviceInfo(deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (*DevInfoData, error) { + return SetupDiCreateDeviceInfo(deviceInfoSet, deviceName, classGUID, deviceDescription, hwndParent, creationFlags) +} + +//sys setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiEnumDeviceInfo + +// SetupDiEnumDeviceInfo function returns a DevInfoData structure that specifies a device information element in a device information set. +func SetupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex int) (*DevInfoData, error) { + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiEnumDeviceInfo(deviceInfoSet, uint32(memberIndex), data) +} + +// EnumDeviceInfo method returns a DevInfoData structure that specifies a device information element in a device information set. +func (deviceInfoSet DevInfo) EnumDeviceInfo(memberIndex int) (*DevInfoData, error) { + return SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex) +} + +// SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory. +//sys SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiDestroyDeviceInfoList + +// Close method deletes a device information set and frees all associated memory. +func (deviceInfoSet DevInfo) Close() error { + return SetupDiDestroyDeviceInfoList(deviceInfoSet) +} + +//sys SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiBuildDriverInfoList + +// BuildDriverInfoList method builds a list of drivers that is associated with a specific device or with the global class driver list for a device information set. +func (deviceInfoSet DevInfo) BuildDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error { + return SetupDiBuildDriverInfoList(deviceInfoSet, deviceInfoData, driverType) +} + +//sys SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiCancelDriverInfoSearch + +// CancelDriverInfoSearch method cancels a driver list search that is currently in progress in a different thread. +func (deviceInfoSet DevInfo) CancelDriverInfoSearch() error { + return SetupDiCancelDriverInfoSearch(deviceInfoSet) +} + +//sys setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiEnumDriverInfoW + +// SetupDiEnumDriverInfo function enumerates the members of a driver list. +func SetupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) { + data := &DrvInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, uint32(memberIndex), data) +} + +// EnumDriverInfo method enumerates the members of a driver list. +func (deviceInfoSet DevInfo) EnumDriverInfo(deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) { + return SetupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, memberIndex) +} + +//sys setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiGetSelectedDriverW + +// SetupDiGetSelectedDriver function retrieves the selected driver for a device information set or a particular device information element. +func SetupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DrvInfoData, error) { + data := &DrvInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiGetSelectedDriver(deviceInfoSet, deviceInfoData, data) +} + +// SelectedDriver method retrieves the selected driver for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SelectedDriver(deviceInfoData *DevInfoData) (*DrvInfoData, error) { + return SetupDiGetSelectedDriver(deviceInfoSet, deviceInfoData) +} + +//sys SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiSetSelectedDriverW + +// SetSelectedDriver method sets, or resets, the selected driver for a device information element or the selected class driver for a device information set. +func (deviceInfoSet DevInfo) SetSelectedDriver(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) error { + return SetupDiSetSelectedDriver(deviceInfoSet, deviceInfoData, driverInfoData) +} + +//sys setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDriverInfoDetailW + +// SetupDiGetDriverInfoDetail function retrieves driver information detail for a device information set or a particular device information element in the device information set. +func SetupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) { + reqSize := uint32(2048) + for { + buf := make([]byte, reqSize) + data := (*DrvInfoDetailData)(unsafe.Pointer(&buf[0])) + data.size = data.unsafeSizeOf() + err := setupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData, data, uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return nil, err + } + data.size = reqSize + return data, nil + } +} + +// DriverInfoDetail method retrieves driver information detail for a device information set or a particular device information element in the device information set. +func (deviceInfoSet DevInfo) DriverInfoDetail(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) { + return SetupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData) +} + +//sys SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiDestroyDriverInfoList + +// DestroyDriverInfoList method deletes a driver list. +func (deviceInfoSet DevInfo) DestroyDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error { + return SetupDiDestroyDriverInfoList(deviceInfoSet, deviceInfoData, driverType) +} + +//sys setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiGetClassDevsExW + +// SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements for a local or a remote computer. +func SetupDiGetClassDevsEx(classGUID *GUID, enumerator string, hwndParent uintptr, flags DIGCF, deviceInfoSet DevInfo, machineName string) (handle DevInfo, err error) { + var enumeratorUTF16 *uint16 + if enumerator != "" { + enumeratorUTF16, err = UTF16PtrFromString(enumerator) + if err != nil { + return + } + } + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + return setupDiGetClassDevsEx(classGUID, enumeratorUTF16, hwndParent, flags, deviceInfoSet, machineNameUTF16, 0) +} + +// SetupDiCallClassInstaller function calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code). +//sys SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCallClassInstaller + +// CallClassInstaller member calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code). +func (deviceInfoSet DevInfo) CallClassInstaller(installFunction DI_FUNCTION, deviceInfoData *DevInfoData) error { + return SetupDiCallClassInstaller(installFunction, deviceInfoSet, deviceInfoData) +} + +// SetupDiOpenDevRegKey function opens a registry key for device-specific configuration information. +//sys SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) [failretval==InvalidHandle] = setupapi.SetupDiOpenDevRegKey + +// OpenDevRegKey method opens a registry key for device-specific configuration information. +func (deviceInfoSet DevInfo) OpenDevRegKey(DeviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (Handle, error) { + return SetupDiOpenDevRegKey(deviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired) +} + +//sys setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) = setupapi.SetupDiGetDevicePropertyW + +// SetupDiGetDeviceProperty function retrieves a specified device instance property. +func SetupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY) (value interface{}, err error) { + reqSize := uint32(256) + for { + var dataType DEVPROPTYPE + buf := make([]byte, reqSize) + err = setupDiGetDeviceProperty(deviceInfoSet, deviceInfoData, propertyKey, &dataType, &buf[0], uint32(len(buf)), &reqSize, 0) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return + } + switch dataType { + case DEVPROP_TYPE_STRING: + ret := UTF16ToString(bufToUTF16(buf)) + runtime.KeepAlive(buf) + return ret, nil + } + return nil, errors.New("unimplemented property type") + } +} + +//sys setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceRegistryPropertyW + +// SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property. +func SetupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP) (value interface{}, err error) { + reqSize := uint32(256) + for { + var dataType uint32 + buf := make([]byte, reqSize) + err = setupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &dataType, &buf[0], uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return + } + return getRegistryValue(buf[:reqSize], dataType) + } +} + +func getRegistryValue(buf []byte, dataType uint32) (interface{}, error) { + switch dataType { + case REG_SZ: + ret := UTF16ToString(bufToUTF16(buf)) + runtime.KeepAlive(buf) + return ret, nil + case REG_EXPAND_SZ: + value := UTF16ToString(bufToUTF16(buf)) + if value == "" { + return "", nil + } + p, err := syscall.UTF16PtrFromString(value) + if err != nil { + return "", err + } + ret := make([]uint16, 100) + for { + n, err := ExpandEnvironmentStrings(p, &ret[0], uint32(len(ret))) + if err != nil { + return "", err + } + if n <= uint32(len(ret)) { + return UTF16ToString(ret[:n]), nil + } + ret = make([]uint16, n) + } + case REG_BINARY: + return buf, nil + case REG_DWORD_LITTLE_ENDIAN: + return binary.LittleEndian.Uint32(buf), nil + case REG_DWORD_BIG_ENDIAN: + return binary.BigEndian.Uint32(buf), nil + case REG_MULTI_SZ: + bufW := bufToUTF16(buf) + a := []string{} + for i := 0; i < len(bufW); { + j := i + wcslen(bufW[i:]) + if i < j { + a = append(a, UTF16ToString(bufW[i:j])) + } + i = j + 1 + } + runtime.KeepAlive(buf) + return a, nil + case REG_QWORD_LITTLE_ENDIAN: + return binary.LittleEndian.Uint64(buf), nil + default: + return nil, fmt.Errorf("Unsupported registry value type: %v", dataType) + } +} + +// bufToUTF16 function reinterprets []byte buffer as []uint16 +func bufToUTF16(buf []byte) []uint16 { + sl := struct { + addr *uint16 + len int + cap int + }{(*uint16)(unsafe.Pointer(&buf[0])), len(buf) / 2, cap(buf) / 2} + return *(*[]uint16)(unsafe.Pointer(&sl)) +} + +// utf16ToBuf function reinterprets []uint16 as []byte +func utf16ToBuf(buf []uint16) []byte { + sl := struct { + addr *byte + len int + cap int + }{(*byte)(unsafe.Pointer(&buf[0])), len(buf) * 2, cap(buf) * 2} + return *(*[]byte)(unsafe.Pointer(&sl)) +} + +func wcslen(str []uint16) int { + for i := 0; i < len(str); i++ { + if str[i] == 0 { + return i + } + } + return len(str) +} + +// DeviceRegistryProperty method retrieves a specified Plug and Play device property. +func (deviceInfoSet DevInfo) DeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP) (interface{}, error) { + return SetupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property) +} + +//sys setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) = setupapi.SetupDiSetDeviceRegistryPropertyW + +// SetupDiSetDeviceRegistryProperty function sets a Plug and Play device property for a device. +func SetupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error { + return setupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &propertyBuffers[0], uint32(len(propertyBuffers))) +} + +// SetDeviceRegistryProperty function sets a Plug and Play device property for a device. +func (deviceInfoSet DevInfo) SetDeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error { + return SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, propertyBuffers) +} + +// SetDeviceRegistryPropertyString method sets a Plug and Play device property string for a device. +func (deviceInfoSet DevInfo) SetDeviceRegistryPropertyString(deviceInfoData *DevInfoData, property SPDRP, str string) error { + str16, err := UTF16FromString(str) + if err != nil { + return err + } + err = SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, utf16ToBuf(append(str16, 0))) + runtime.KeepAlive(str16) + return err +} + +//sys setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiGetDeviceInstallParamsW + +// SetupDiGetDeviceInstallParams function retrieves device installation parameters for a device information set or a particular device information element. +func SetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DevInstallParams, error) { + params := &DevInstallParams{} + params.size = uint32(unsafe.Sizeof(*params)) + + return params, setupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData, params) +} + +// DeviceInstallParams method retrieves device installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) DeviceInstallParams(deviceInfoData *DevInfoData) (*DevInstallParams, error) { + return SetupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData) +} + +//sys setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceInstanceIdW + +// SetupDiGetDeviceInstanceId function retrieves the instance ID of the device. +func SetupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (string, error) { + reqSize := uint32(1024) + for { + buf := make([]uint16, reqSize) + err := setupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData, &buf[0], uint32(len(buf)), &reqSize) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return "", err + } + return UTF16ToString(buf), nil + } +} + +// DeviceInstanceID method retrieves the instance ID of the device. +func (deviceInfoSet DevInfo) DeviceInstanceID(deviceInfoData *DevInfoData) (string, error) { + return SetupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData) +} + +// SetupDiGetClassInstallParams function retrieves class installation parameters for a device information set or a particular device information element. +//sys SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetClassInstallParamsW + +// ClassInstallParams method retrieves class installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) ClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) error { + return SetupDiGetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize, requiredSize) +} + +//sys SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiSetDeviceInstallParamsW + +// SetDeviceInstallParams member sets device installation parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SetDeviceInstallParams(deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) error { + return SetupDiSetDeviceInstallParams(deviceInfoSet, deviceInfoData, deviceInstallParams) +} + +// SetupDiSetClassInstallParams function sets or clears class install parameters for a device information set or a particular device information element. +//sys SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) = setupapi.SetupDiSetClassInstallParamsW + +// SetClassInstallParams method sets or clears class install parameters for a device information set or a particular device information element. +func (deviceInfoSet DevInfo) SetClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) error { + return SetupDiSetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize) +} + +//sys setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassNameFromGuidExW + +// SetupDiClassNameFromGuidEx function retrieves the class name associated with a class GUID. The class can be installed on a local or remote computer. +func SetupDiClassNameFromGuidEx(classGUID *GUID, machineName string) (className string, err error) { + var classNameUTF16 [MAX_CLASS_NAME_LEN]uint16 + + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return + } + } + + err = setupDiClassNameFromGuidEx(classGUID, &classNameUTF16[0], MAX_CLASS_NAME_LEN, nil, machineNameUTF16, 0) + if err != nil { + return + } + + className = UTF16ToString(classNameUTF16[:]) + return +} + +//sys setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassGuidsFromNameExW + +// SetupDiClassGuidsFromNameEx function retrieves the GUIDs associated with the specified class name. This resulting list contains the classes currently installed on a local or remote computer. +func SetupDiClassGuidsFromNameEx(className string, machineName string) ([]GUID, error) { + classNameUTF16, err := UTF16PtrFromString(className) + if err != nil { + return nil, err + } + + var machineNameUTF16 *uint16 + if machineName != "" { + machineNameUTF16, err = UTF16PtrFromString(machineName) + if err != nil { + return nil, err + } + } + + reqSize := uint32(4) + for { + buf := make([]GUID, reqSize) + err = setupDiClassGuidsFromNameEx(classNameUTF16, &buf[0], uint32(len(buf)), &reqSize, machineNameUTF16, 0) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return nil, err + } + return buf[:reqSize], nil + } +} + +//sys setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiGetSelectedDevice + +// SetupDiGetSelectedDevice function retrieves the selected device information element in a device information set. +func SetupDiGetSelectedDevice(deviceInfoSet DevInfo) (*DevInfoData, error) { + data := &DevInfoData{} + data.size = uint32(unsafe.Sizeof(*data)) + + return data, setupDiGetSelectedDevice(deviceInfoSet, data) +} + +// SelectedDevice method retrieves the selected device information element in a device information set. +func (deviceInfoSet DevInfo) SelectedDevice() (*DevInfoData, error) { + return SetupDiGetSelectedDevice(deviceInfoSet) +} + +// SetupDiSetSelectedDevice function sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard. +//sys SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiSetSelectedDevice + +// SetSelectedDevice method sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard. +func (deviceInfoSet DevInfo) SetSelectedDevice(deviceInfoData *DevInfoData) error { + return SetupDiSetSelectedDevice(deviceInfoSet, deviceInfoData) +} + +//sys setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) = setupapi.SetupUninstallOEMInfW + +// SetupUninstallOEMInf uninstalls the specified driver. +func SetupUninstallOEMInf(infFileName string, flags SUOI) error { + infFileName16, err := UTF16PtrFromString(infFileName) + if err != nil { + return err + } + return setupUninstallOEMInf(infFileName16, flags, 0) +} + +//sys cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) = CfgMgr32.CM_MapCrToWin32Err + +//sys cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_List_SizeW +//sys cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_ListW + +func CM_Get_Device_Interface_List(deviceID string, interfaceClass *GUID, flags uint32) ([]string, error) { + deviceID16, err := UTF16PtrFromString(deviceID) + if err != nil { + return nil, err + } + var buf []uint16 + var buflen uint32 + for { + if ret := cm_Get_Device_Interface_List_Size(&buflen, interfaceClass, deviceID16, flags); ret != CR_SUCCESS { + return nil, ret + } + buf = make([]uint16, buflen) + if ret := cm_Get_Device_Interface_List(interfaceClass, deviceID16, &buf[0], buflen, flags); ret == CR_SUCCESS { + break + } else if ret != CR_BUFFER_SMALL { + return nil, ret + } + } + var interfaces []string + for i := 0; i < len(buf); { + j := i + wcslen(buf[i:]) + if i < j { + interfaces = append(interfaces, UTF16ToString(buf[i:j])) + } + i = j + 1 + } + if interfaces == nil { + return nil, ERROR_NO_SUCH_DEVICE_INTERFACE + } + return interfaces, nil +} + +//sys cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_DevNode_Status + +func CM_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) error { + ret := cm_Get_DevNode_Status(status, problemNumber, devInst, flags) + if ret == CR_SUCCESS { + return nil + } + return ret +} diff --git a/vendor/golang.org/x/sys/windows/str.go b/vendor/golang.org/x/sys/windows/str.go new file mode 100644 index 0000000000000..4fc01434e4a2a --- /dev/null +++ b/vendor/golang.org/x/sys/windows/str.go @@ -0,0 +1,23 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build windows +// +build windows + +package windows + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + itoa(-val) + } + var buf [32]byte // big enough for int64 + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go new file mode 100644 index 0000000000000..8732cdb957f39 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall.go @@ -0,0 +1,105 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build windows +// +build windows + +// Package windows contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display the OS-specific documentation for the current +// system. If you want godoc to display syscall documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.Errno. +package windows // import "golang.org/x/sys/windows" + +import ( + "bytes" + "strings" + "syscall" + "unsafe" +) + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + if strings.IndexByte(s, 0) != -1 { + return nil, syscall.EINVAL + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any +// bytes after the NUL removed. +func ByteSliceToString(s []byte) string { + if i := bytes.IndexByte(s, 0); i != -1 { + s = s[:i] + } + return string(s) +} + +// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string. +// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated +// at a zero byte; if the zero byte is not present, the program may crash. +func BytePtrToString(p *byte) string { + if p == nil { + return "" + } + if *p == 0 { + return "" + } + + // Find NUL terminator. + n := 0 + for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ { + ptr = unsafe.Pointer(uintptr(ptr) + 1) + } + + return string(unsafe.Slice(p, n)) +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mksyscall.pl. +var _zero uintptr + +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go new file mode 100644 index 0000000000000..67bad0926ae12 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -0,0 +1,1828 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Windows system calls. + +package windows + +import ( + errorspkg "errors" + "fmt" + "runtime" + "sync" + "syscall" + "time" + "unicode/utf16" + "unsafe" + + "golang.org/x/sys/internal/unsafeheader" +) + +type Handle uintptr +type HWND uintptr + +const ( + InvalidHandle = ^Handle(0) + InvalidHWND = ^HWND(0) + + // Flags for DefineDosDevice. + DDD_EXACT_MATCH_ON_REMOVE = 0x00000004 + DDD_NO_BROADCAST_SYSTEM = 0x00000008 + DDD_RAW_TARGET_PATH = 0x00000001 + DDD_REMOVE_DEFINITION = 0x00000002 + + // Return values for GetDriveType. + DRIVE_UNKNOWN = 0 + DRIVE_NO_ROOT_DIR = 1 + DRIVE_REMOVABLE = 2 + DRIVE_FIXED = 3 + DRIVE_REMOTE = 4 + DRIVE_CDROM = 5 + DRIVE_RAMDISK = 6 + + // File system flags from GetVolumeInformation and GetVolumeInformationByHandle. + FILE_CASE_SENSITIVE_SEARCH = 0x00000001 + FILE_CASE_PRESERVED_NAMES = 0x00000002 + FILE_FILE_COMPRESSION = 0x00000010 + FILE_DAX_VOLUME = 0x20000000 + FILE_NAMED_STREAMS = 0x00040000 + FILE_PERSISTENT_ACLS = 0x00000008 + FILE_READ_ONLY_VOLUME = 0x00080000 + FILE_SEQUENTIAL_WRITE_ONCE = 0x00100000 + FILE_SUPPORTS_ENCRYPTION = 0x00020000 + FILE_SUPPORTS_EXTENDED_ATTRIBUTES = 0x00800000 + FILE_SUPPORTS_HARD_LINKS = 0x00400000 + FILE_SUPPORTS_OBJECT_IDS = 0x00010000 + FILE_SUPPORTS_OPEN_BY_FILE_ID = 0x01000000 + FILE_SUPPORTS_REPARSE_POINTS = 0x00000080 + FILE_SUPPORTS_SPARSE_FILES = 0x00000040 + FILE_SUPPORTS_TRANSACTIONS = 0x00200000 + FILE_SUPPORTS_USN_JOURNAL = 0x02000000 + FILE_UNICODE_ON_DISK = 0x00000004 + FILE_VOLUME_IS_COMPRESSED = 0x00008000 + FILE_VOLUME_QUOTAS = 0x00000020 + + // Flags for LockFileEx. + LOCKFILE_FAIL_IMMEDIATELY = 0x00000001 + LOCKFILE_EXCLUSIVE_LOCK = 0x00000002 + + // Return value of SleepEx and other APC functions + WAIT_IO_COMPLETION = 0x000000C0 +) + +// StringToUTF16 is deprecated. Use UTF16FromString instead. +// If s contains a NUL byte this function panics instead of +// returning an error. +func StringToUTF16(s string) []uint16 { + a, err := UTF16FromString(s) + if err != nil { + panic("windows: string with NUL passed to StringToUTF16") + } + return a +} + +// UTF16FromString returns the UTF-16 encoding of the UTF-8 string +// s, with a terminating NUL added. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func UTF16FromString(s string) ([]uint16, error) { + return syscall.UTF16FromString(s) +} + +// UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s, +// with a terminating NUL and any bytes after the NUL removed. +func UTF16ToString(s []uint16) string { + return syscall.UTF16ToString(s) +} + +// StringToUTF16Ptr is deprecated. Use UTF16PtrFromString instead. +// If s contains a NUL byte this function panics instead of +// returning an error. +func StringToUTF16Ptr(s string) *uint16 { return &StringToUTF16(s)[0] } + +// UTF16PtrFromString returns pointer to the UTF-16 encoding of +// the UTF-8 string s, with a terminating NUL added. If s +// contains a NUL byte at any location, it returns (nil, syscall.EINVAL). +func UTF16PtrFromString(s string) (*uint16, error) { + a, err := UTF16FromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// UTF16PtrToString takes a pointer to a UTF-16 sequence and returns the corresponding UTF-8 encoded string. +// If the pointer is nil, it returns the empty string. It assumes that the UTF-16 sequence is terminated +// at a zero word; if the zero word is not present, the program may crash. +func UTF16PtrToString(p *uint16) string { + if p == nil { + return "" + } + if *p == 0 { + return "" + } + + // Find NUL terminator. + n := 0 + for ptr := unsafe.Pointer(p); *(*uint16)(ptr) != 0; n++ { + ptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p)) + } + + return string(utf16.Decode(unsafe.Slice(p, n))) +} + +func Getpagesize() int { return 4096 } + +// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. +// This is useful when interoperating with Windows code requiring callbacks. +// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +func NewCallback(fn interface{}) uintptr { + return syscall.NewCallback(fn) +} + +// NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention. +// This is useful when interoperating with Windows code requiring callbacks. +// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +func NewCallbackCDecl(fn interface{}) uintptr { + return syscall.NewCallbackCDecl(fn) +} + +// windows api calls + +//sys GetLastError() (lasterr error) +//sys LoadLibrary(libname string) (handle Handle, err error) = LoadLibraryW +//sys LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) = LoadLibraryExW +//sys FreeLibrary(handle Handle) (err error) +//sys GetProcAddress(module Handle, procname string) (proc uintptr, err error) +//sys GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW +//sys GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW +//sys SetDefaultDllDirectories(directoryFlags uint32) (err error) +//sys SetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW +//sys GetVersion() (ver uint32, err error) +//sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW +//sys ExitProcess(exitcode uint32) +//sys IsWow64Process(handle Handle, isWow64 *bool) (err error) = IsWow64Process +//sys IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) = IsWow64Process2? +//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW +//sys CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) [failretval==InvalidHandle] = CreateNamedPipeW +//sys ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) +//sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) +//sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW +//sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState +//sys readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = ReadFile +//sys writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = WriteFile +//sys GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) +//sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] +//sys CloseHandle(handle Handle) (err error) +//sys GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle] +//sys SetStdHandle(stdhandle uint32, handle Handle) (err error) +//sys findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW +//sys findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW +//sys FindClose(handle Handle) (err error) +//sys GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) +//sys GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) +//sys SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error) +//sys GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW +//sys SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW +//sys CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW +//sys RemoveDirectory(path *uint16) (err error) = RemoveDirectoryW +//sys DeleteFile(path *uint16) (err error) = DeleteFileW +//sys MoveFile(from *uint16, to *uint16) (err error) = MoveFileW +//sys MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW +//sys LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) +//sys UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) +//sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW +//sys GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW +//sys SetEndOfFile(handle Handle) (err error) +//sys GetSystemTimeAsFileTime(time *Filetime) +//sys GetSystemTimePreciseAsFileTime(time *Filetime) +//sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff] +//sys CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) +//sys GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) +//sys PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) +//sys CancelIo(s Handle) (err error) +//sys CancelIoEx(s Handle, o *Overlapped) (err error) +//sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW +//sys CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = advapi32.CreateProcessAsUserW +//sys initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) = InitializeProcThreadAttributeList +//sys deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) = DeleteProcThreadAttributeList +//sys updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) = UpdateProcThreadAttribute +//sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) +//sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW +//sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId +//sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow +//sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW +//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx +//sys shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath +//sys TerminateProcess(handle Handle, exitcode uint32) (err error) +//sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) +//sys getStartupInfo(startupInfo *StartupInfo) = GetStartupInfoW +//sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) +//sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) +//sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] +//sys waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] = WaitForMultipleObjects +//sys GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempPathW +//sys CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) +//sys GetFileType(filehandle Handle) (n uint32, err error) +//sys CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) = advapi32.CryptAcquireContextW +//sys CryptReleaseContext(provhandle Handle, flags uint32) (err error) = advapi32.CryptReleaseContext +//sys CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) = advapi32.CryptGenRandom +//sys GetEnvironmentStrings() (envs *uint16, err error) [failretval==nil] = kernel32.GetEnvironmentStringsW +//sys FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW +//sys GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW +//sys SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW +//sys ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW +//sys CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock +//sys DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock +//sys getTickCount64() (ms uint64) = kernel32.GetTickCount64 +//sys SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) +//sys GetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW +//sys SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW +//sys GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) = kernel32.GetFileAttributesExW +//sys GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW +//sys CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW +//sys LocalFree(hmem Handle) (handle Handle, err error) [failretval!=0] +//sys LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) +//sys SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) +//sys FlushFileBuffers(handle Handle) (err error) +//sys GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) = kernel32.GetFullPathNameW +//sys GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) = kernel32.GetLongPathNameW +//sys GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) = kernel32.GetShortPathNameW +//sys GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) = kernel32.GetFinalPathNameByHandleW +//sys CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateFileMappingW +//sys MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) +//sys UnmapViewOfFile(addr uintptr) (err error) +//sys FlushViewOfFile(addr uintptr, length uintptr) (err error) +//sys VirtualLock(addr uintptr, length uintptr) (err error) +//sys VirtualUnlock(addr uintptr, length uintptr) (err error) +//sys VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc +//sys VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree +//sys VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect +//sys VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) = kernel32.VirtualProtectEx +//sys VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery +//sys VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQueryEx +//sys ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory +//sys WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory +//sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile +//sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW +//sys FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW +//sys FindNextChangeNotification(handle Handle) (err error) +//sys FindCloseChangeNotification(handle Handle) (err error) +//sys CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW +//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) = crypt32.CertOpenStore +//sys CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore +//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore +//sys CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore +//sys CertDeleteCertificateFromStore(certContext *CertContext) (err error) = crypt32.CertDeleteCertificateFromStore +//sys CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) = crypt32.CertDuplicateCertificateContext +//sys PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) = crypt32.PFXImportCertStore +//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain +//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain +//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext +//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext +//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy +//sys CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) = crypt32.CertGetNameStringW +//sys CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) = crypt32.CertFindExtension +//sys CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) [failretval==nil] = crypt32.CertFindCertificateInStore +//sys CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) [failretval==nil] = crypt32.CertFindChainInStore +//sys CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) = crypt32.CryptAcquireCertificatePrivateKey +//sys CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) = crypt32.CryptQueryObject +//sys CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) = crypt32.CryptDecodeObject +//sys CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptProtectData +//sys CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptUnprotectData +//sys WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) = wintrust.WinVerifyTrustEx +//sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW +//sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey +//sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW +//sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW +//sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW +//sys RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) = advapi32.RegNotifyChangeKeyValue +//sys GetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId +//sys ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) = kernel32.ProcessIdToSessionId +//sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode +//sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode +//sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo +//sys setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition +//sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW +//sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW +//sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot +//sys Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW +//sys Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32NextW +//sys Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW +//sys Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW +//sys Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) +//sys Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) +//sys DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) +// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. +//sys CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW +//sys CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW +//sys GetCurrentThreadId() (id uint32) +//sys CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventW +//sys CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventExW +//sys OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenEventW +//sys SetEvent(event Handle) (err error) = kernel32.SetEvent +//sys ResetEvent(event Handle) (err error) = kernel32.ResetEvent +//sys PulseEvent(event Handle) (err error) = kernel32.PulseEvent +//sys CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexW +//sys CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexExW +//sys OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenMutexW +//sys ReleaseMutex(mutex Handle) (err error) = kernel32.ReleaseMutex +//sys SleepEx(milliseconds uint32, alertable bool) (ret uint32) = kernel32.SleepEx +//sys CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) = kernel32.CreateJobObjectW +//sys AssignProcessToJobObject(job Handle, process Handle) (err error) = kernel32.AssignProcessToJobObject +//sys TerminateJobObject(job Handle, exitCode uint32) (err error) = kernel32.TerminateJobObject +//sys SetErrorMode(mode uint32) (ret uint32) = kernel32.SetErrorMode +//sys ResumeThread(thread Handle) (ret uint32, err error) [failretval==0xffffffff] = kernel32.ResumeThread +//sys SetPriorityClass(process Handle, priorityClass uint32) (err error) = kernel32.SetPriorityClass +//sys GetPriorityClass(process Handle) (ret uint32, err error) = kernel32.GetPriorityClass +//sys QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) = kernel32.QueryInformationJobObject +//sys SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) +//sys GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) +//sys GetProcessId(process Handle) (id uint32, err error) +//sys QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) = kernel32.QueryFullProcessImageNameW +//sys OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error) +//sys SetProcessPriorityBoost(process Handle, disable bool) (err error) = kernel32.SetProcessPriorityBoost +//sys GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) +//sys SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) +//sys GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) +//sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) +//sys GetActiveProcessorCount(groupNumber uint16) (ret uint32) +//sys GetMaximumProcessorCount(groupNumber uint16) (ret uint32) +//sys EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows +//sys EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) = user32.EnumChildWindows +//sys GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) = user32.GetClassNameW +//sys GetDesktopWindow() (hwnd HWND) = user32.GetDesktopWindow +//sys GetForegroundWindow() (hwnd HWND) = user32.GetForegroundWindow +//sys IsWindow(hwnd HWND) (isWindow bool) = user32.IsWindow +//sys IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode +//sys IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible +//sys GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo +//sys GetLargePageMinimum() (size uintptr) + +// Volume Management Functions +//sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW +//sys DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) = DeleteVolumeMountPointW +//sys FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeW +//sys FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeMountPointW +//sys FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) = FindNextVolumeW +//sys FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) = FindNextVolumeMountPointW +//sys FindVolumeClose(findVolume Handle) (err error) +//sys FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) +//sys GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) = GetDiskFreeSpaceExW +//sys GetDriveType(rootPathName *uint16) (driveType uint32) = GetDriveTypeW +//sys GetLogicalDrives() (drivesBitMask uint32, err error) [failretval==0] +//sys GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) [failretval==0] = GetLogicalDriveStringsW +//sys GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationW +//sys GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationByHandleW +//sys GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) = GetVolumeNameForVolumeMountPointW +//sys GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) = GetVolumePathNameW +//sys GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) = GetVolumePathNamesForVolumeNameW +//sys QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) [failretval==0] = QueryDosDeviceW +//sys SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) = SetVolumeLabelW +//sys SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) = SetVolumeMountPointW +//sys InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) = advapi32.InitiateSystemShutdownExW +//sys SetProcessShutdownParameters(level uint32, flags uint32) (err error) = kernel32.SetProcessShutdownParameters +//sys GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) = kernel32.GetProcessShutdownParameters +//sys clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) = ole32.CLSIDFromString +//sys stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) = ole32.StringFromGUID2 +//sys coCreateGuid(pguid *GUID) (ret error) = ole32.CoCreateGuid +//sys CoTaskMemFree(address unsafe.Pointer) = ole32.CoTaskMemFree +//sys CoInitializeEx(reserved uintptr, coInit uint32) (ret error) = ole32.CoInitializeEx +//sys CoUninitialize() = ole32.CoUninitialize +//sys CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) = ole32.CoGetObject +//sys getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetProcessPreferredUILanguages +//sys getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetThreadPreferredUILanguages +//sys getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetUserPreferredUILanguages +//sys getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetSystemPreferredUILanguages +//sys findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) = kernel32.FindResourceW +//sys SizeofResource(module Handle, resInfo Handle) (size uint32, err error) = kernel32.SizeofResource +//sys LoadResource(module Handle, resInfo Handle) (resData Handle, err error) = kernel32.LoadResource +//sys LockResource(resData Handle) (addr uintptr, err error) = kernel32.LockResource + +// Version APIs +//sys GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) = version.GetFileVersionInfoSizeW +//sys GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) = version.GetFileVersionInfoW +//sys VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) = version.VerQueryValueW + +// Process Status API (PSAPI) +//sys enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses +//sys EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) = psapi.EnumProcessModules +//sys EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) = psapi.EnumProcessModulesEx +//sys GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) = psapi.GetModuleInformation +//sys GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) = psapi.GetModuleFileNameExW +//sys GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) = psapi.GetModuleBaseNameW +//sys QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) = psapi.QueryWorkingSetEx + +// NT Native APIs +//sys rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) = ntdll.RtlNtStatusToDosErrorNoTeb +//sys rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) = ntdll.RtlGetVersion +//sys rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) = ntdll.RtlGetNtVersionNumbers +//sys RtlGetCurrentPeb() (peb *PEB) = ntdll.RtlGetCurrentPeb +//sys RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) = ntdll.RtlInitUnicodeString +//sys RtlInitString(destinationString *NTString, sourceString *byte) = ntdll.RtlInitString +//sys NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) = ntdll.NtCreateFile +//sys NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) = ntdll.NtCreateNamedPipeFile +//sys NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtSetInformationFile +//sys RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToNtPathName_U_WithStatus +//sys RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToRelativeNtPathName_U_WithStatus +//sys RtlDefaultNpAcl(acl **ACL) (ntstatus error) = ntdll.RtlDefaultNpAcl +//sys NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQueryInformationProcess +//sys NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) = ntdll.NtSetInformationProcess +//sys NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQuerySystemInformation +//sys NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) = ntdll.NtSetSystemInformation +//sys RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable +//sys RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable + +// Desktop Window Manager API (Dwmapi) +//sys DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmGetWindowAttribute +//sys DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmSetWindowAttribute + +// Windows Multimedia API +//sys TimeBeginPeriod (period uint32) (err error) [failretval != 0] = winmm.timeBeginPeriod +//sys TimeEndPeriod (period uint32) (err error) [failretval != 0] = winmm.timeEndPeriod + +// syscall interface implementation for other packages + +// GetCurrentProcess returns the handle for the current process. +// It is a pseudo handle that does not need to be closed. +// The returned error is always nil. +// +// Deprecated: use CurrentProcess for the same Handle without the nil +// error. +func GetCurrentProcess() (Handle, error) { + return CurrentProcess(), nil +} + +// CurrentProcess returns the handle for the current process. +// It is a pseudo handle that does not need to be closed. +func CurrentProcess() Handle { return Handle(^uintptr(1 - 1)) } + +// GetCurrentThread returns the handle for the current thread. +// It is a pseudo handle that does not need to be closed. +// The returned error is always nil. +// +// Deprecated: use CurrentThread for the same Handle without the nil +// error. +func GetCurrentThread() (Handle, error) { + return CurrentThread(), nil +} + +// CurrentThread returns the handle for the current thread. +// It is a pseudo handle that does not need to be closed. +func CurrentThread() Handle { return Handle(^uintptr(2 - 1)) } + +// GetProcAddressByOrdinal retrieves the address of the exported +// function from module by ordinal. +func GetProcAddressByOrdinal(module Handle, ordinal uintptr) (proc uintptr, err error) { + r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), ordinal, 0) + proc = uintptr(r0) + if proc == 0 { + err = errnoErr(e1) + } + return +} + +func Exit(code int) { ExitProcess(uint32(code)) } + +func makeInheritSa() *SecurityAttributes { + var sa SecurityAttributes + sa.Length = uint32(unsafe.Sizeof(sa)) + sa.InheritHandle = 1 + return &sa +} + +func Open(path string, mode int, perm uint32) (fd Handle, err error) { + if len(path) == 0 { + return InvalidHandle, ERROR_FILE_NOT_FOUND + } + pathp, err := UTF16PtrFromString(path) + if err != nil { + return InvalidHandle, err + } + var access uint32 + switch mode & (O_RDONLY | O_WRONLY | O_RDWR) { + case O_RDONLY: + access = GENERIC_READ + case O_WRONLY: + access = GENERIC_WRITE + case O_RDWR: + access = GENERIC_READ | GENERIC_WRITE + } + if mode&O_CREAT != 0 { + access |= GENERIC_WRITE + } + if mode&O_APPEND != 0 { + access &^= GENERIC_WRITE + access |= FILE_APPEND_DATA + } + sharemode := uint32(FILE_SHARE_READ | FILE_SHARE_WRITE) + var sa *SecurityAttributes + if mode&O_CLOEXEC == 0 { + sa = makeInheritSa() + } + var createmode uint32 + switch { + case mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL): + createmode = CREATE_NEW + case mode&(O_CREAT|O_TRUNC) == (O_CREAT | O_TRUNC): + createmode = CREATE_ALWAYS + case mode&O_CREAT == O_CREAT: + createmode = OPEN_ALWAYS + case mode&O_TRUNC == O_TRUNC: + createmode = TRUNCATE_EXISTING + default: + createmode = OPEN_EXISTING + } + var attrs uint32 = FILE_ATTRIBUTE_NORMAL + if perm&S_IWRITE == 0 { + attrs = FILE_ATTRIBUTE_READONLY + } + h, e := CreateFile(pathp, access, sharemode, sa, createmode, attrs, 0) + return h, e +} + +func Read(fd Handle, p []byte) (n int, err error) { + var done uint32 + e := ReadFile(fd, p, &done, nil) + if e != nil { + if e == ERROR_BROKEN_PIPE { + // NOTE(brainman): work around ERROR_BROKEN_PIPE is returned on reading EOF from stdin + return 0, nil + } + return 0, e + } + return int(done), nil +} + +func Write(fd Handle, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + var done uint32 + e := WriteFile(fd, p, &done, nil) + if e != nil { + return 0, e + } + return int(done), nil +} + +func ReadFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { + err := readFile(fd, p, done, overlapped) + if raceenabled { + if *done > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), int(*done)) + } + raceAcquire(unsafe.Pointer(&ioSync)) + } + return err +} + +func WriteFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + err := writeFile(fd, p, done, overlapped) + if raceenabled && *done > 0 { + raceReadRange(unsafe.Pointer(&p[0]), int(*done)) + } + return err +} + +var ioSync int64 + +func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) { + var w uint32 + switch whence { + case 0: + w = FILE_BEGIN + case 1: + w = FILE_CURRENT + case 2: + w = FILE_END + } + hi := int32(offset >> 32) + lo := int32(offset) + // use GetFileType to check pipe, pipe can't do seek + ft, _ := GetFileType(fd) + if ft == FILE_TYPE_PIPE { + return 0, syscall.EPIPE + } + rlo, e := SetFilePointer(fd, lo, &hi, w) + if e != nil { + return 0, e + } + return int64(hi)<<32 + int64(rlo), nil +} + +func Close(fd Handle) (err error) { + return CloseHandle(fd) +} + +var ( + Stdin = getStdHandle(STD_INPUT_HANDLE) + Stdout = getStdHandle(STD_OUTPUT_HANDLE) + Stderr = getStdHandle(STD_ERROR_HANDLE) +) + +func getStdHandle(stdhandle uint32) (fd Handle) { + r, _ := GetStdHandle(stdhandle) + return r +} + +const ImplementsGetwd = true + +func Getwd() (wd string, err error) { + b := make([]uint16, 300) + n, e := GetCurrentDirectory(uint32(len(b)), &b[0]) + if e != nil { + return "", e + } + return string(utf16.Decode(b[0:n])), nil +} + +func Chdir(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return SetCurrentDirectory(pathp) +} + +func Mkdir(path string, mode uint32) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return CreateDirectory(pathp, nil) +} + +func Rmdir(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return RemoveDirectory(pathp) +} + +func Unlink(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return DeleteFile(pathp) +} + +func Rename(oldpath, newpath string) (err error) { + from, err := UTF16PtrFromString(oldpath) + if err != nil { + return err + } + to, err := UTF16PtrFromString(newpath) + if err != nil { + return err + } + return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING) +} + +func ComputerName() (name string, err error) { + var n uint32 = MAX_COMPUTERNAME_LENGTH + 1 + b := make([]uint16, n) + e := GetComputerName(&b[0], &n) + if e != nil { + return "", e + } + return string(utf16.Decode(b[0:n])), nil +} + +func DurationSinceBoot() time.Duration { + return time.Duration(getTickCount64()) * time.Millisecond +} + +func Ftruncate(fd Handle, length int64) (err error) { + curoffset, e := Seek(fd, 0, 1) + if e != nil { + return e + } + defer Seek(fd, curoffset, 0) + _, e = Seek(fd, length, 0) + if e != nil { + return e + } + e = SetEndOfFile(fd) + if e != nil { + return e + } + return nil +} + +func Gettimeofday(tv *Timeval) (err error) { + var ft Filetime + GetSystemTimeAsFileTime(&ft) + *tv = NsecToTimeval(ft.Nanoseconds()) + return nil +} + +func Pipe(p []Handle) (err error) { + if len(p) != 2 { + return syscall.EINVAL + } + var r, w Handle + e := CreatePipe(&r, &w, makeInheritSa(), 0) + if e != nil { + return e + } + p[0] = r + p[1] = w + return nil +} + +func Utimes(path string, tv []Timeval) (err error) { + if len(tv) != 2 { + return syscall.EINVAL + } + pathp, e := UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := CreateFile(pathp, + FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer CloseHandle(h) + a := NsecToFiletime(tv[0].Nanoseconds()) + w := NsecToFiletime(tv[1].Nanoseconds()) + return SetFileTime(h, nil, &a, &w) +} + +func UtimesNano(path string, ts []Timespec) (err error) { + if len(ts) != 2 { + return syscall.EINVAL + } + pathp, e := UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := CreateFile(pathp, + FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer CloseHandle(h) + a := NsecToFiletime(TimespecToNsec(ts[0])) + w := NsecToFiletime(TimespecToNsec(ts[1])) + return SetFileTime(h, nil, &a, &w) +} + +func Fsync(fd Handle) (err error) { + return FlushFileBuffers(fd) +} + +func Chmod(path string, mode uint32) (err error) { + p, e := UTF16PtrFromString(path) + if e != nil { + return e + } + attrs, e := GetFileAttributes(p) + if e != nil { + return e + } + if mode&S_IWRITE != 0 { + attrs &^= FILE_ATTRIBUTE_READONLY + } else { + attrs |= FILE_ATTRIBUTE_READONLY + } + return SetFileAttributes(p, attrs) +} + +func LoadGetSystemTimePreciseAsFileTime() error { + return procGetSystemTimePreciseAsFileTime.Find() +} + +func LoadCancelIoEx() error { + return procCancelIoEx.Find() +} + +func LoadSetFileCompletionNotificationModes() error { + return procSetFileCompletionNotificationModes.Find() +} + +func WaitForMultipleObjects(handles []Handle, waitAll bool, waitMilliseconds uint32) (event uint32, err error) { + // Every other win32 array API takes arguments as "pointer, count", except for this function. So we + // can't declare it as a usual [] type, because mksyscall will use the opposite order. We therefore + // trivially stub this ourselves. + + var handlePtr *Handle + if len(handles) > 0 { + handlePtr = &handles[0] + } + return waitForMultipleObjects(uint32(len(handles)), uintptr(unsafe.Pointer(handlePtr)), waitAll, waitMilliseconds) +} + +// net api calls + +const socket_error = uintptr(^uint32(0)) + +//sys WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSAStartup +//sys WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup +//sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl +//sys WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceBeginW +//sys WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceNextW +//sys WSALookupServiceEnd(handle Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceEnd +//sys socket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket +//sys sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) [failretval==socket_error] = ws2_32.sendto +//sys recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) [failretval==-1] = ws2_32.recvfrom +//sys Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) [failretval==socket_error] = ws2_32.setsockopt +//sys Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockopt +//sys bind(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.bind +//sys connect(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.connect +//sys getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockname +//sys getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getpeername +//sys listen(s Handle, backlog int32) (err error) [failretval==socket_error] = ws2_32.listen +//sys shutdown(s Handle, how int32) (err error) [failretval==socket_error] = ws2_32.shutdown +//sys Closesocket(s Handle) (err error) [failretval==socket_error] = ws2_32.closesocket +//sys AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) = mswsock.AcceptEx +//sys GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = mswsock.GetAcceptExSockaddrs +//sys WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecv +//sys WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASend +//sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom +//sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo +//sys WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW +//sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname +//sys GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname +//sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs +//sys GetProtoByName(name string) (p *Protoent, err error) [failretval==nil] = ws2_32.getprotobyname +//sys DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W +//sys DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordListFree +//sys DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) = dnsapi.DnsNameCompare_W +//sys GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) = ws2_32.GetAddrInfoW +//sys FreeAddrInfoW(addrinfo *AddrinfoW) = ws2_32.FreeAddrInfoW +//sys GetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry +//sys GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpapi.GetAdaptersInfo +//sys SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) = kernel32.SetFileCompletionNotificationModes +//sys WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) [failretval==-1] = ws2_32.WSAEnumProtocolsW +//sys WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult +//sys GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses +//sys GetACP() (acp uint32) = kernel32.GetACP +//sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar +//sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [100]int8 +} + +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len int32, err error) // lowercase; only we can define Sockaddrs +} + +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Addr = sa.Addr + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + sa.raw.Addr = sa.Addr + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +type RawSockaddrUnix struct { + Family uint16 + Path [UNIX_PATH_MAX]int8 +} + +type SockaddrUnix struct { + Name string + raw RawSockaddrUnix +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { + name := sa.Name + n := len(name) + if n > len(sa.raw.Path) { + return nil, 0, syscall.EINVAL + } + if n == len(sa.raw.Path) && name[0] != '@' { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := int32(2) + if n > 0 { + sl += int32(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +type RawSockaddrBth struct { + AddressFamily [2]byte + BtAddr [8]byte + ServiceClassId [16]byte + Port [4]byte +} + +type SockaddrBth struct { + BtAddr uint64 + ServiceClassId GUID + Port uint32 + + raw RawSockaddrBth +} + +func (sa *SockaddrBth) sockaddr() (unsafe.Pointer, int32, error) { + family := AF_BTH + sa.raw = RawSockaddrBth{ + AddressFamily: *(*[2]byte)(unsafe.Pointer(&family)), + BtAddr: *(*[8]byte)(unsafe.Pointer(&sa.BtAddr)), + Port: *(*[4]byte)(unsafe.Pointer(&sa.Port)), + ServiceClassId: *(*[16]byte)(unsafe.Pointer(&sa.ServiceClassId)), + } + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + if pp.Path[0] == 0 { + // "Abstract" Unix domain socket. + // Rewrite leading NUL as @ for textual display. + // (This is the standard convention.) + // Not friendly to overwrite in place, + // but the callers below don't care. + pp.Path[0] = '@' + } + + // Assume path ends at NUL. + // This is not technically the Linux semantics for + // abstract Unix domain sockets--they are supposed + // to be uninterpreted fixed-size binary blobs--but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n)) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.Addr = pp.Addr + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + sa.Addr = pp.Addr + return sa, nil + } + return nil, syscall.EAFNOSUPPORT +} + +func Socket(domain, typ, proto int) (fd Handle, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return InvalidHandle, syscall.EAFNOSUPPORT + } + return socket(int32(domain), int32(typ), int32(proto)) +} + +func SetsockoptInt(fd Handle, level, opt int, value int) (err error) { + v := int32(value) + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v))) +} + +func Bind(fd Handle, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd Handle, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func GetBestInterfaceEx(sa Sockaddr, pdwBestIfIndex *uint32) (err error) { + ptr, _, err := sa.sockaddr() + if err != nil { + return err + } + return getBestInterfaceEx(ptr, pdwBestIfIndex) +} + +func Getsockname(fd Handle) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + if err = getsockname(fd, &rsa, &l); err != nil { + return + } + return rsa.Sockaddr() +} + +func Getpeername(fd Handle) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + if err = getpeername(fd, &rsa, &l); err != nil { + return + } + return rsa.Sockaddr() +} + +func Listen(s Handle, n int) (err error) { + return listen(s, int32(n)) +} + +func Shutdown(fd Handle, how int) (err error) { + return shutdown(fd, int32(how)) +} + +func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) { + var rsa unsafe.Pointer + var l int32 + if to != nil { + rsa, l, err = to.sockaddr() + if err != nil { + return err + } + } + return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine) +} + +func LoadGetAddrInfo() error { + return procGetAddrInfoW.Find() +} + +var connectExFunc struct { + once sync.Once + addr uintptr + err error +} + +func LoadConnectEx() error { + connectExFunc.once.Do(func() { + var s Handle + s, connectExFunc.err = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) + if connectExFunc.err != nil { + return + } + defer CloseHandle(s) + var n uint32 + connectExFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_CONNECTEX)), + uint32(unsafe.Sizeof(WSAID_CONNECTEX)), + (*byte)(unsafe.Pointer(&connectExFunc.addr)), + uint32(unsafe.Sizeof(connectExFunc.addr)), + &n, nil, 0) + }) + return connectExFunc.err +} + +func connectEx(s Handle, name unsafe.Pointer, namelen int32, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(connectExFunc.addr, 7, uintptr(s), uintptr(name), uintptr(namelen), uintptr(unsafe.Pointer(sendBuf)), uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ConnectEx(fd Handle, sa Sockaddr, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) error { + err := LoadConnectEx() + if err != nil { + return errorspkg.New("failed to find ConnectEx: " + err.Error()) + } + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped) +} + +var sendRecvMsgFunc struct { + once sync.Once + sendAddr uintptr + recvAddr uintptr + err error +} + +func loadWSASendRecvMsg() error { + sendRecvMsgFunc.once.Do(func() { + var s Handle + s, sendRecvMsgFunc.err = Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) + if sendRecvMsgFunc.err != nil { + return + } + defer CloseHandle(s) + var n uint32 + sendRecvMsgFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_WSARECVMSG)), + uint32(unsafe.Sizeof(WSAID_WSARECVMSG)), + (*byte)(unsafe.Pointer(&sendRecvMsgFunc.recvAddr)), + uint32(unsafe.Sizeof(sendRecvMsgFunc.recvAddr)), + &n, nil, 0) + if sendRecvMsgFunc.err != nil { + return + } + sendRecvMsgFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_WSASENDMSG)), + uint32(unsafe.Sizeof(WSAID_WSASENDMSG)), + (*byte)(unsafe.Pointer(&sendRecvMsgFunc.sendAddr)), + uint32(unsafe.Sizeof(sendRecvMsgFunc.sendAddr)), + &n, nil, 0) + }) + return sendRecvMsgFunc.err +} + +func WSASendMsg(fd Handle, msg *WSAMsg, flags uint32, bytesSent *uint32, overlapped *Overlapped, croutine *byte) error { + err := loadWSASendRecvMsg() + if err != nil { + return err + } + r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.sendAddr, 6, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(flags), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + err = errnoErr(e1) + } + return err +} + +func WSARecvMsg(fd Handle, msg *WSAMsg, bytesReceived *uint32, overlapped *Overlapped, croutine *byte) error { + err := loadWSASendRecvMsg() + if err != nil { + return err + } + r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.recvAddr, 5, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(bytesReceived)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return err +} + +// Invented structures to support what package os expects. +type Rusage struct { + CreationTime Filetime + ExitTime Filetime + KernelTime Filetime + UserTime Filetime +} + +type WaitStatus struct { + ExitCode uint32 +} + +func (w WaitStatus) Exited() bool { return true } + +func (w WaitStatus) ExitStatus() int { return int(w.ExitCode) } + +func (w WaitStatus) Signal() Signal { return -1 } + +func (w WaitStatus) CoreDump() bool { return false } + +func (w WaitStatus) Stopped() bool { return false } + +func (w WaitStatus) Continued() bool { return false } + +func (w WaitStatus) StopSignal() Signal { return -1 } + +func (w WaitStatus) Signaled() bool { return false } + +func (w WaitStatus) TrapCause() int { return -1 } + +// Timespec is an invented structure on Windows, but here for +// consistency with the corresponding package for other operating systems. +type Timespec struct { + Sec int64 + Nsec int64 +} + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +// TODO(brainman): fix all needed for net + +func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, syscall.EWINDOWS } + +func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + n32, err := recvfrom(fd, p, int32(flags), &rsa, &l) + n = int(n32) + if err != nil { + return + } + from, err = rsa.Sockaddr() + return +} + +func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) { + ptr, l, err := to.sockaddr() + if err != nil { + return err + } + return sendto(fd, p, int32(flags), ptr, l) +} + +func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { return syscall.EWINDOWS } + +// The Linger struct is wrong but we only noticed after Go 1. +// sysLinger is the real system call structure. + +// BUG(brainman): The definition of Linger is not appropriate for direct use +// with Setsockopt and Getsockopt. +// Use SetsockoptLinger instead. + +type Linger struct { + Onoff int32 + Linger int32 +} + +type sysLinger struct { + Onoff uint16 + Linger uint16 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +func GetsockoptInt(fd Handle, level, opt int) (int, error) { + v := int32(0) + l := int32(unsafe.Sizeof(v)) + err := Getsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), &l) + return int(v), err +} + +func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { + sys := sysLinger{Onoff: uint16(l.Onoff), Linger: uint16(l.Linger)} + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&sys)), int32(unsafe.Sizeof(sys))) +} + +func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) { + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4) +} +func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) { + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq))) +} +func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { + return syscall.EWINDOWS +} + +func EnumProcesses(processIds []uint32, bytesReturned *uint32) error { + // EnumProcesses syscall expects the size parameter to be in bytes, but the code generated with mksyscall uses + // the length of the processIds slice instead. Hence, this wrapper function is added to fix the discrepancy. + var p *uint32 + if len(processIds) > 0 { + p = &processIds[0] + } + size := uint32(len(processIds) * 4) + return enumProcesses(p, size, bytesReturned) +} + +func Getpid() (pid int) { return int(GetCurrentProcessId()) } + +func FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) { + // NOTE(rsc): The Win32finddata struct is wrong for the system call: + // the two paths are each one uint16 short. Use the correct struct, + // a win32finddata1, and then copy the results out. + // There is no loss of expressivity here, because the final + // uint16, if it is used, is supposed to be a NUL, and Go doesn't need that. + // For Go 1.1, we might avoid the allocation of win32finddata1 here + // by adding a final Bug [2]uint16 field to the struct and then + // adjusting the fields in the result directly. + var data1 win32finddata1 + handle, err = findFirstFile1(name, &data1) + if err == nil { + copyFindData(data, &data1) + } + return +} + +func FindNextFile(handle Handle, data *Win32finddata) (err error) { + var data1 win32finddata1 + err = findNextFile1(handle, &data1) + if err == nil { + copyFindData(data, &data1) + } + return +} + +func getProcessEntry(pid int) (*ProcessEntry32, error) { + snapshot, err := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) + if err != nil { + return nil, err + } + defer CloseHandle(snapshot) + var procEntry ProcessEntry32 + procEntry.Size = uint32(unsafe.Sizeof(procEntry)) + if err = Process32First(snapshot, &procEntry); err != nil { + return nil, err + } + for { + if procEntry.ProcessID == uint32(pid) { + return &procEntry, nil + } + err = Process32Next(snapshot, &procEntry) + if err != nil { + return nil, err + } + } +} + +func Getppid() (ppid int) { + pe, err := getProcessEntry(Getpid()) + if err != nil { + return -1 + } + return int(pe.ParentProcessID) +} + +// TODO(brainman): fix all needed for os +func Fchdir(fd Handle) (err error) { return syscall.EWINDOWS } +func Link(oldpath, newpath string) (err error) { return syscall.EWINDOWS } +func Symlink(path, link string) (err error) { return syscall.EWINDOWS } + +func Fchmod(fd Handle, mode uint32) (err error) { return syscall.EWINDOWS } +func Chown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } +func Lchown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } +func Fchown(fd Handle, uid int, gid int) (err error) { return syscall.EWINDOWS } + +func Getuid() (uid int) { return -1 } +func Geteuid() (euid int) { return -1 } +func Getgid() (gid int) { return -1 } +func Getegid() (egid int) { return -1 } +func Getgroups() (gids []int, err error) { return nil, syscall.EWINDOWS } + +type Signal int + +func (s Signal) Signal() {} + +func (s Signal) String() string { + if 0 <= s && int(s) < len(signals) { + str := signals[s] + if str != "" { + return str + } + } + return "signal " + itoa(int(s)) +} + +func LoadCreateSymbolicLink() error { + return procCreateSymbolicLinkW.Find() +} + +// Readlink returns the destination of the named symbolic link. +func Readlink(path string, buf []byte) (n int, err error) { + fd, err := CreateFile(StringToUTF16Ptr(path), GENERIC_READ, 0, nil, OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, 0) + if err != nil { + return -1, err + } + defer CloseHandle(fd) + + rdbbuf := make([]byte, MAXIMUM_REPARSE_DATA_BUFFER_SIZE) + var bytesReturned uint32 + err = DeviceIoControl(fd, FSCTL_GET_REPARSE_POINT, nil, 0, &rdbbuf[0], uint32(len(rdbbuf)), &bytesReturned, nil) + if err != nil { + return -1, err + } + + rdb := (*reparseDataBuffer)(unsafe.Pointer(&rdbbuf[0])) + var s string + switch rdb.ReparseTag { + case IO_REPARSE_TAG_SYMLINK: + data := (*symbolicLinkReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) + p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) + s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) + case IO_REPARSE_TAG_MOUNT_POINT: + data := (*mountPointReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) + p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) + s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) + default: + // the path is not a symlink or junction but another type of reparse + // point + return -1, syscall.ENOENT + } + n = copy(buf, []byte(s)) + + return n, nil +} + +// GUIDFromString parses a string in the form of +// "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" into a GUID. +func GUIDFromString(str string) (GUID, error) { + guid := GUID{} + str16, err := syscall.UTF16PtrFromString(str) + if err != nil { + return guid, err + } + err = clsidFromString(str16, &guid) + if err != nil { + return guid, err + } + return guid, nil +} + +// GenerateGUID creates a new random GUID. +func GenerateGUID() (GUID, error) { + guid := GUID{} + err := coCreateGuid(&guid) + if err != nil { + return guid, err + } + return guid, nil +} + +// String returns the canonical string form of the GUID, +// in the form of "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}". +func (guid GUID) String() string { + var str [100]uint16 + chars := stringFromGUID2(&guid, &str[0], int32(len(str))) + if chars <= 1 { + return "" + } + return string(utf16.Decode(str[:chars-1])) +} + +// KnownFolderPath returns a well-known folder path for the current user, specified by one of +// the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag. +func KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) { + return Token(0).KnownFolderPath(folderID, flags) +} + +// KnownFolderPath returns a well-known folder path for the user token, specified by one of +// the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag. +func (t Token) KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) { + var p *uint16 + err := shGetKnownFolderPath(folderID, flags, t, &p) + if err != nil { + return "", err + } + defer CoTaskMemFree(unsafe.Pointer(p)) + return UTF16PtrToString(p), nil +} + +// RtlGetVersion returns the version of the underlying operating system, ignoring +// manifest semantics but is affected by the application compatibility layer. +func RtlGetVersion() *OsVersionInfoEx { + info := &OsVersionInfoEx{} + info.osVersionInfoSize = uint32(unsafe.Sizeof(*info)) + // According to documentation, this function always succeeds. + // The function doesn't even check the validity of the + // osVersionInfoSize member. Disassembling ntdll.dll indicates + // that the documentation is indeed correct about that. + _ = rtlGetVersion(info) + return info +} + +// RtlGetNtVersionNumbers returns the version of the underlying operating system, +// ignoring manifest semantics and the application compatibility layer. +func RtlGetNtVersionNumbers() (majorVersion, minorVersion, buildNumber uint32) { + rtlGetNtVersionNumbers(&majorVersion, &minorVersion, &buildNumber) + buildNumber &= 0xffff + return +} + +// GetProcessPreferredUILanguages retrieves the process preferred UI languages. +func GetProcessPreferredUILanguages(flags uint32) ([]string, error) { + return getUILanguages(flags, getProcessPreferredUILanguages) +} + +// GetThreadPreferredUILanguages retrieves the thread preferred UI languages for the current thread. +func GetThreadPreferredUILanguages(flags uint32) ([]string, error) { + return getUILanguages(flags, getThreadPreferredUILanguages) +} + +// GetUserPreferredUILanguages retrieves information about the user preferred UI languages. +func GetUserPreferredUILanguages(flags uint32) ([]string, error) { + return getUILanguages(flags, getUserPreferredUILanguages) +} + +// GetSystemPreferredUILanguages retrieves the system preferred UI languages. +func GetSystemPreferredUILanguages(flags uint32) ([]string, error) { + return getUILanguages(flags, getSystemPreferredUILanguages) +} + +func getUILanguages(flags uint32, f func(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) error) ([]string, error) { + size := uint32(128) + for { + var numLanguages uint32 + buf := make([]uint16, size) + err := f(flags, &numLanguages, &buf[0], &size) + if err == ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return nil, err + } + buf = buf[:size] + if numLanguages == 0 || len(buf) == 0 { // GetProcessPreferredUILanguages may return numLanguages==0 with "\0\0" + return []string{}, nil + } + if buf[len(buf)-1] == 0 { + buf = buf[:len(buf)-1] // remove terminating null + } + languages := make([]string, 0, numLanguages) + from := 0 + for i, c := range buf { + if c == 0 { + languages = append(languages, string(utf16.Decode(buf[from:i]))) + from = i + 1 + } + } + return languages, nil + } +} + +func SetConsoleCursorPosition(console Handle, position Coord) error { + return setConsoleCursorPosition(console, *((*uint32)(unsafe.Pointer(&position)))) +} + +func GetStartupInfo(startupInfo *StartupInfo) error { + getStartupInfo(startupInfo) + return nil +} + +func (s NTStatus) Errno() syscall.Errno { + return rtlNtStatusToDosErrorNoTeb(s) +} + +func langID(pri, sub uint16) uint32 { return uint32(sub)<<10 | uint32(pri) } + +func (s NTStatus) Error() string { + b := make([]uint16, 300) + n, err := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_ARGUMENT_ARRAY, modntdll.Handle(), uint32(s), langID(LANG_ENGLISH, SUBLANG_ENGLISH_US), b, nil) + if err != nil { + return fmt.Sprintf("NTSTATUS 0x%08x", uint32(s)) + } + // trim terminating \r and \n + for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- { + } + return string(utf16.Decode(b[:n])) +} + +// NewNTUnicodeString returns a new NTUnicodeString structure for use with native +// NT APIs that work over the NTUnicodeString type. Note that most Windows APIs +// do not use NTUnicodeString, and instead UTF16PtrFromString should be used for +// the more common *uint16 string type. +func NewNTUnicodeString(s string) (*NTUnicodeString, error) { + var u NTUnicodeString + s16, err := UTF16PtrFromString(s) + if err != nil { + return nil, err + } + RtlInitUnicodeString(&u, s16) + return &u, nil +} + +// Slice returns a uint16 slice that aliases the data in the NTUnicodeString. +func (s *NTUnicodeString) Slice() []uint16 { + var slice []uint16 + hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) + hdr.Data = unsafe.Pointer(s.Buffer) + hdr.Len = int(s.Length) + hdr.Cap = int(s.MaximumLength) + return slice +} + +func (s *NTUnicodeString) String() string { + return UTF16ToString(s.Slice()) +} + +// NewNTString returns a new NTString structure for use with native +// NT APIs that work over the NTString type. Note that most Windows APIs +// do not use NTString, and instead UTF16PtrFromString should be used for +// the more common *uint16 string type. +func NewNTString(s string) (*NTString, error) { + var nts NTString + s8, err := BytePtrFromString(s) + if err != nil { + return nil, err + } + RtlInitString(&nts, s8) + return &nts, nil +} + +// Slice returns a byte slice that aliases the data in the NTString. +func (s *NTString) Slice() []byte { + var slice []byte + hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) + hdr.Data = unsafe.Pointer(s.Buffer) + hdr.Len = int(s.Length) + hdr.Cap = int(s.MaximumLength) + return slice +} + +func (s *NTString) String() string { + return ByteSliceToString(s.Slice()) +} + +// FindResource resolves a resource of the given name and resource type. +func FindResource(module Handle, name, resType ResourceIDOrString) (Handle, error) { + var namePtr, resTypePtr uintptr + var name16, resType16 *uint16 + var err error + resolvePtr := func(i interface{}, keep **uint16) (uintptr, error) { + switch v := i.(type) { + case string: + *keep, err = UTF16PtrFromString(v) + if err != nil { + return 0, err + } + return uintptr(unsafe.Pointer(*keep)), nil + case ResourceID: + return uintptr(v), nil + } + return 0, errorspkg.New("parameter must be a ResourceID or a string") + } + namePtr, err = resolvePtr(name, &name16) + if err != nil { + return 0, err + } + resTypePtr, err = resolvePtr(resType, &resType16) + if err != nil { + return 0, err + } + resInfo, err := findResource(module, namePtr, resTypePtr) + runtime.KeepAlive(name16) + runtime.KeepAlive(resType16) + return resInfo, err +} + +func LoadResourceData(module, resInfo Handle) (data []byte, err error) { + size, err := SizeofResource(module, resInfo) + if err != nil { + return + } + resData, err := LoadResource(module, resInfo) + if err != nil { + return + } + ptr, err := LockResource(resData) + if err != nil { + return + } + h := (*unsafeheader.Slice)(unsafe.Pointer(&data)) + h.Data = unsafe.Pointer(ptr) + h.Len = int(size) + h.Cap = int(size) + return +} + +// PSAPI_WORKING_SET_EX_BLOCK contains extended working set information for a page. +type PSAPI_WORKING_SET_EX_BLOCK uint64 + +// Valid returns the validity of this page. +// If this bit is 1, the subsequent members are valid; otherwise they should be ignored. +func (b PSAPI_WORKING_SET_EX_BLOCK) Valid() bool { + return (b & 1) == 1 +} + +// ShareCount is the number of processes that share this page. The maximum value of this member is 7. +func (b PSAPI_WORKING_SET_EX_BLOCK) ShareCount() uint64 { + return b.intField(1, 3) +} + +// Win32Protection is the memory protection attributes of the page. For a list of values, see +// https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants +func (b PSAPI_WORKING_SET_EX_BLOCK) Win32Protection() uint64 { + return b.intField(4, 11) +} + +// Shared returns the shared status of this page. +// If this bit is 1, the page can be shared. +func (b PSAPI_WORKING_SET_EX_BLOCK) Shared() bool { + return (b & (1 << 15)) == 1 +} + +// Node is the NUMA node. The maximum value of this member is 63. +func (b PSAPI_WORKING_SET_EX_BLOCK) Node() uint64 { + return b.intField(16, 6) +} + +// Locked returns the locked status of this page. +// If this bit is 1, the virtual page is locked in physical memory. +func (b PSAPI_WORKING_SET_EX_BLOCK) Locked() bool { + return (b & (1 << 22)) == 1 +} + +// LargePage returns the large page status of this page. +// If this bit is 1, the page is a large page. +func (b PSAPI_WORKING_SET_EX_BLOCK) LargePage() bool { + return (b & (1 << 23)) == 1 +} + +// Bad returns the bad status of this page. +// If this bit is 1, the page is has been reported as bad. +func (b PSAPI_WORKING_SET_EX_BLOCK) Bad() bool { + return (b & (1 << 31)) == 1 +} + +// intField extracts an integer field in the PSAPI_WORKING_SET_EX_BLOCK union. +func (b PSAPI_WORKING_SET_EX_BLOCK) intField(start, length int) uint64 { + var mask PSAPI_WORKING_SET_EX_BLOCK + for pos := start; pos < start+length; pos++ { + mask |= (1 << pos) + } + + masked := b & mask + return uint64(masked >> start) +} + +// PSAPI_WORKING_SET_EX_INFORMATION contains extended working set information for a process. +type PSAPI_WORKING_SET_EX_INFORMATION struct { + // The virtual address. + VirtualAddress Pointer + // A PSAPI_WORKING_SET_EX_BLOCK union that indicates the attributes of the page at VirtualAddress. + VirtualAttributes PSAPI_WORKING_SET_EX_BLOCK +} diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go new file mode 100644 index 0000000000000..88e62a63851b6 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -0,0 +1,3349 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "net" + "syscall" + "unsafe" +) + +// NTStatus corresponds with NTSTATUS, error values returned by ntdll.dll and +// other native functions. +type NTStatus uint32 + +const ( + // Invented values to support what package os expects. + O_RDONLY = 0x00000 + O_WRONLY = 0x00001 + O_RDWR = 0x00002 + O_CREAT = 0x00040 + O_EXCL = 0x00080 + O_NOCTTY = 0x00100 + O_TRUNC = 0x00200 + O_NONBLOCK = 0x00800 + O_APPEND = 0x00400 + O_SYNC = 0x01000 + O_ASYNC = 0x02000 + O_CLOEXEC = 0x80000 +) + +const ( + // More invented values for signals + SIGHUP = Signal(0x1) + SIGINT = Signal(0x2) + SIGQUIT = Signal(0x3) + SIGILL = Signal(0x4) + SIGTRAP = Signal(0x5) + SIGABRT = Signal(0x6) + SIGBUS = Signal(0x7) + SIGFPE = Signal(0x8) + SIGKILL = Signal(0x9) + SIGSEGV = Signal(0xb) + SIGPIPE = Signal(0xd) + SIGALRM = Signal(0xe) + SIGTERM = Signal(0xf) +) + +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", +} + +const ( + FILE_READ_DATA = 0x00000001 + FILE_READ_ATTRIBUTES = 0x00000080 + FILE_READ_EA = 0x00000008 + FILE_WRITE_DATA = 0x00000002 + FILE_WRITE_ATTRIBUTES = 0x00000100 + FILE_WRITE_EA = 0x00000010 + FILE_APPEND_DATA = 0x00000004 + FILE_EXECUTE = 0x00000020 + + FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE + FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE + FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE + + FILE_LIST_DIRECTORY = 0x00000001 + FILE_TRAVERSE = 0x00000020 + + FILE_SHARE_READ = 0x00000001 + FILE_SHARE_WRITE = 0x00000002 + FILE_SHARE_DELETE = 0x00000004 + + FILE_ATTRIBUTE_READONLY = 0x00000001 + FILE_ATTRIBUTE_HIDDEN = 0x00000002 + FILE_ATTRIBUTE_SYSTEM = 0x00000004 + FILE_ATTRIBUTE_DIRECTORY = 0x00000010 + FILE_ATTRIBUTE_ARCHIVE = 0x00000020 + FILE_ATTRIBUTE_DEVICE = 0x00000040 + FILE_ATTRIBUTE_NORMAL = 0x00000080 + FILE_ATTRIBUTE_TEMPORARY = 0x00000100 + FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200 + FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400 + FILE_ATTRIBUTE_COMPRESSED = 0x00000800 + FILE_ATTRIBUTE_OFFLINE = 0x00001000 + FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000 + FILE_ATTRIBUTE_ENCRYPTED = 0x00004000 + FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00008000 + FILE_ATTRIBUTE_VIRTUAL = 0x00010000 + FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000 + FILE_ATTRIBUTE_RECALL_ON_OPEN = 0x00040000 + FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000 + + INVALID_FILE_ATTRIBUTES = 0xffffffff + + CREATE_NEW = 1 + CREATE_ALWAYS = 2 + OPEN_EXISTING = 3 + OPEN_ALWAYS = 4 + TRUNCATE_EXISTING = 5 + + FILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000 + FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000 + FILE_FLAG_OPEN_NO_RECALL = 0x00100000 + FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 + FILE_FLAG_SESSION_AWARE = 0x00800000 + FILE_FLAG_POSIX_SEMANTICS = 0x01000000 + FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 + FILE_FLAG_DELETE_ON_CLOSE = 0x04000000 + FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000 + FILE_FLAG_RANDOM_ACCESS = 0x10000000 + FILE_FLAG_NO_BUFFERING = 0x20000000 + FILE_FLAG_OVERLAPPED = 0x40000000 + FILE_FLAG_WRITE_THROUGH = 0x80000000 + + HANDLE_FLAG_INHERIT = 0x00000001 + STARTF_USESTDHANDLES = 0x00000100 + STARTF_USESHOWWINDOW = 0x00000001 + DUPLICATE_CLOSE_SOURCE = 0x00000001 + DUPLICATE_SAME_ACCESS = 0x00000002 + + STD_INPUT_HANDLE = -10 & (1<<32 - 1) + STD_OUTPUT_HANDLE = -11 & (1<<32 - 1) + STD_ERROR_HANDLE = -12 & (1<<32 - 1) + + FILE_BEGIN = 0 + FILE_CURRENT = 1 + FILE_END = 2 + + LANG_ENGLISH = 0x09 + SUBLANG_ENGLISH_US = 0x01 + + FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 + FORMAT_MESSAGE_IGNORE_INSERTS = 512 + FORMAT_MESSAGE_FROM_STRING = 1024 + FORMAT_MESSAGE_FROM_HMODULE = 2048 + FORMAT_MESSAGE_FROM_SYSTEM = 4096 + FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 + FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 + + MAX_PATH = 260 + MAX_LONG_PATH = 32768 + + MAX_MODULE_NAME32 = 255 + + MAX_COMPUTERNAME_LENGTH = 15 + + MAX_DHCPV6_DUID_LENGTH = 130 + + MAX_DNS_SUFFIX_STRING_LENGTH = 256 + + TIME_ZONE_ID_UNKNOWN = 0 + TIME_ZONE_ID_STANDARD = 1 + + TIME_ZONE_ID_DAYLIGHT = 2 + IGNORE = 0 + INFINITE = 0xffffffff + + WAIT_ABANDONED = 0x00000080 + WAIT_OBJECT_0 = 0x00000000 + WAIT_FAILED = 0xFFFFFFFF + + // Access rights for process. + PROCESS_CREATE_PROCESS = 0x0080 + PROCESS_CREATE_THREAD = 0x0002 + PROCESS_DUP_HANDLE = 0x0040 + PROCESS_QUERY_INFORMATION = 0x0400 + PROCESS_QUERY_LIMITED_INFORMATION = 0x1000 + PROCESS_SET_INFORMATION = 0x0200 + PROCESS_SET_QUOTA = 0x0100 + PROCESS_SUSPEND_RESUME = 0x0800 + PROCESS_TERMINATE = 0x0001 + PROCESS_VM_OPERATION = 0x0008 + PROCESS_VM_READ = 0x0010 + PROCESS_VM_WRITE = 0x0020 + + // Access rights for thread. + THREAD_DIRECT_IMPERSONATION = 0x0200 + THREAD_GET_CONTEXT = 0x0008 + THREAD_IMPERSONATE = 0x0100 + THREAD_QUERY_INFORMATION = 0x0040 + THREAD_QUERY_LIMITED_INFORMATION = 0x0800 + THREAD_SET_CONTEXT = 0x0010 + THREAD_SET_INFORMATION = 0x0020 + THREAD_SET_LIMITED_INFORMATION = 0x0400 + THREAD_SET_THREAD_TOKEN = 0x0080 + THREAD_SUSPEND_RESUME = 0x0002 + THREAD_TERMINATE = 0x0001 + + FILE_MAP_COPY = 0x01 + FILE_MAP_WRITE = 0x02 + FILE_MAP_READ = 0x04 + FILE_MAP_EXECUTE = 0x20 + + CTRL_C_EVENT = 0 + CTRL_BREAK_EVENT = 1 + CTRL_CLOSE_EVENT = 2 + CTRL_LOGOFF_EVENT = 5 + CTRL_SHUTDOWN_EVENT = 6 + + // Windows reserves errors >= 1<<29 for application use. + APPLICATION_ERROR = 1 << 29 +) + +const ( + // Process creation flags. + CREATE_BREAKAWAY_FROM_JOB = 0x01000000 + CREATE_DEFAULT_ERROR_MODE = 0x04000000 + CREATE_NEW_CONSOLE = 0x00000010 + CREATE_NEW_PROCESS_GROUP = 0x00000200 + CREATE_NO_WINDOW = 0x08000000 + CREATE_PROTECTED_PROCESS = 0x00040000 + CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000 + CREATE_SEPARATE_WOW_VDM = 0x00000800 + CREATE_SHARED_WOW_VDM = 0x00001000 + CREATE_SUSPENDED = 0x00000004 + CREATE_UNICODE_ENVIRONMENT = 0x00000400 + DEBUG_ONLY_THIS_PROCESS = 0x00000002 + DEBUG_PROCESS = 0x00000001 + DETACHED_PROCESS = 0x00000008 + EXTENDED_STARTUPINFO_PRESENT = 0x00080000 + INHERIT_PARENT_AFFINITY = 0x00010000 +) + +const ( + // attributes for ProcThreadAttributeList + PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = 0x00020000 + PROC_THREAD_ATTRIBUTE_HANDLE_LIST = 0x00020002 + PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY = 0x00030003 + PROC_THREAD_ATTRIBUTE_PREFERRED_NODE = 0x00020004 + PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR = 0x00030005 + PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x00020007 + PROC_THREAD_ATTRIBUTE_UMS_THREAD = 0x00030006 + PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL = 0x0002000b +) + +const ( + // flags for CreateToolhelp32Snapshot + TH32CS_SNAPHEAPLIST = 0x01 + TH32CS_SNAPPROCESS = 0x02 + TH32CS_SNAPTHREAD = 0x04 + TH32CS_SNAPMODULE = 0x08 + TH32CS_SNAPMODULE32 = 0x10 + TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD + TH32CS_INHERIT = 0x80000000 +) + +const ( + // flags for EnumProcessModulesEx + LIST_MODULES_32BIT = 0x01 + LIST_MODULES_64BIT = 0x02 + LIST_MODULES_ALL = 0x03 + LIST_MODULES_DEFAULT = 0x00 +) + +const ( + // filters for ReadDirectoryChangesW and FindFirstChangeNotificationW + FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 + FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 + FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 + FILE_NOTIFY_CHANGE_SIZE = 0x008 + FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010 + FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020 + FILE_NOTIFY_CHANGE_CREATION = 0x040 + FILE_NOTIFY_CHANGE_SECURITY = 0x100 +) + +const ( + // do not reorder + FILE_ACTION_ADDED = iota + 1 + FILE_ACTION_REMOVED + FILE_ACTION_MODIFIED + FILE_ACTION_RENAMED_OLD_NAME + FILE_ACTION_RENAMED_NEW_NAME +) + +const ( + // wincrypt.h + /* certenrolld_begin -- PROV_RSA_*/ + PROV_RSA_FULL = 1 + PROV_RSA_SIG = 2 + PROV_DSS = 3 + PROV_FORTEZZA = 4 + PROV_MS_EXCHANGE = 5 + PROV_SSL = 6 + PROV_RSA_SCHANNEL = 12 + PROV_DSS_DH = 13 + PROV_EC_ECDSA_SIG = 14 + PROV_EC_ECNRA_SIG = 15 + PROV_EC_ECDSA_FULL = 16 + PROV_EC_ECNRA_FULL = 17 + PROV_DH_SCHANNEL = 18 + PROV_SPYRUS_LYNKS = 20 + PROV_RNG = 21 + PROV_INTEL_SEC = 22 + PROV_REPLACE_OWF = 23 + PROV_RSA_AES = 24 + + /* dwFlags definitions for CryptAcquireContext */ + CRYPT_VERIFYCONTEXT = 0xF0000000 + CRYPT_NEWKEYSET = 0x00000008 + CRYPT_DELETEKEYSET = 0x00000010 + CRYPT_MACHINE_KEYSET = 0x00000020 + CRYPT_SILENT = 0x00000040 + CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 + + /* Flags for PFXImportCertStore */ + CRYPT_EXPORTABLE = 0x00000001 + CRYPT_USER_PROTECTED = 0x00000002 + CRYPT_USER_KEYSET = 0x00001000 + PKCS12_PREFER_CNG_KSP = 0x00000100 + PKCS12_ALWAYS_CNG_KSP = 0x00000200 + PKCS12_ALLOW_OVERWRITE_KEY = 0x00004000 + PKCS12_NO_PERSIST_KEY = 0x00008000 + PKCS12_INCLUDE_EXTENDED_PROPERTIES = 0x00000010 + + /* Flags for CryptAcquireCertificatePrivateKey */ + CRYPT_ACQUIRE_CACHE_FLAG = 0x00000001 + CRYPT_ACQUIRE_USE_PROV_INFO_FLAG = 0x00000002 + CRYPT_ACQUIRE_COMPARE_KEY_FLAG = 0x00000004 + CRYPT_ACQUIRE_NO_HEALING = 0x00000008 + CRYPT_ACQUIRE_SILENT_FLAG = 0x00000040 + CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG = 0x00000080 + CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK = 0x00070000 + CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG = 0x00010000 + CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = 0x00020000 + CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG = 0x00040000 + + /* pdwKeySpec for CryptAcquireCertificatePrivateKey */ + AT_KEYEXCHANGE = 1 + AT_SIGNATURE = 2 + CERT_NCRYPT_KEY_SPEC = 0xFFFFFFFF + + /* Default usage match type is AND with value zero */ + USAGE_MATCH_TYPE_AND = 0 + USAGE_MATCH_TYPE_OR = 1 + + /* msgAndCertEncodingType values for CertOpenStore function */ + X509_ASN_ENCODING = 0x00000001 + PKCS_7_ASN_ENCODING = 0x00010000 + + /* storeProvider values for CertOpenStore function */ + CERT_STORE_PROV_MSG = 1 + CERT_STORE_PROV_MEMORY = 2 + CERT_STORE_PROV_FILE = 3 + CERT_STORE_PROV_REG = 4 + CERT_STORE_PROV_PKCS7 = 5 + CERT_STORE_PROV_SERIALIZED = 6 + CERT_STORE_PROV_FILENAME_A = 7 + CERT_STORE_PROV_FILENAME_W = 8 + CERT_STORE_PROV_FILENAME = CERT_STORE_PROV_FILENAME_W + CERT_STORE_PROV_SYSTEM_A = 9 + CERT_STORE_PROV_SYSTEM_W = 10 + CERT_STORE_PROV_SYSTEM = CERT_STORE_PROV_SYSTEM_W + CERT_STORE_PROV_COLLECTION = 11 + CERT_STORE_PROV_SYSTEM_REGISTRY_A = 12 + CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13 + CERT_STORE_PROV_SYSTEM_REGISTRY = CERT_STORE_PROV_SYSTEM_REGISTRY_W + CERT_STORE_PROV_PHYSICAL_W = 14 + CERT_STORE_PROV_PHYSICAL = CERT_STORE_PROV_PHYSICAL_W + CERT_STORE_PROV_SMART_CARD_W = 15 + CERT_STORE_PROV_SMART_CARD = CERT_STORE_PROV_SMART_CARD_W + CERT_STORE_PROV_LDAP_W = 16 + CERT_STORE_PROV_LDAP = CERT_STORE_PROV_LDAP_W + CERT_STORE_PROV_PKCS12 = 17 + + /* store characteristics (low WORD of flag) for CertOpenStore function */ + CERT_STORE_NO_CRYPT_RELEASE_FLAG = 0x00000001 + CERT_STORE_SET_LOCALIZED_NAME_FLAG = 0x00000002 + CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 + CERT_STORE_DELETE_FLAG = 0x00000010 + CERT_STORE_UNSAFE_PHYSICAL_FLAG = 0x00000020 + CERT_STORE_SHARE_STORE_FLAG = 0x00000040 + CERT_STORE_SHARE_CONTEXT_FLAG = 0x00000080 + CERT_STORE_MANIFOLD_FLAG = 0x00000100 + CERT_STORE_ENUM_ARCHIVED_FLAG = 0x00000200 + CERT_STORE_UPDATE_KEYID_FLAG = 0x00000400 + CERT_STORE_BACKUP_RESTORE_FLAG = 0x00000800 + CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000 + CERT_STORE_CREATE_NEW_FLAG = 0x00002000 + CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000 + CERT_STORE_READONLY_FLAG = 0x00008000 + + /* store locations (high WORD of flag) for CertOpenStore function */ + CERT_SYSTEM_STORE_CURRENT_USER = 0x00010000 + CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x00020000 + CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x00040000 + CERT_SYSTEM_STORE_SERVICES = 0x00050000 + CERT_SYSTEM_STORE_USERS = 0x00060000 + CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 0x00070000 + CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000 + CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x00090000 + CERT_SYSTEM_STORE_UNPROTECTED_FLAG = 0x40000000 + CERT_SYSTEM_STORE_RELOCATE_FLAG = 0x80000000 + + /* Miscellaneous high-WORD flags for CertOpenStore function */ + CERT_REGISTRY_STORE_REMOTE_FLAG = 0x00010000 + CERT_REGISTRY_STORE_SERIALIZED_FLAG = 0x00020000 + CERT_REGISTRY_STORE_ROAMING_FLAG = 0x00040000 + CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000 + CERT_REGISTRY_STORE_LM_GPT_FLAG = 0x01000000 + CERT_REGISTRY_STORE_CLIENT_GPT_FLAG = 0x80000000 + CERT_FILE_STORE_COMMIT_ENABLE_FLAG = 0x00010000 + CERT_LDAP_STORE_SIGN_FLAG = 0x00010000 + CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG = 0x00020000 + CERT_LDAP_STORE_OPENED_FLAG = 0x00040000 + CERT_LDAP_STORE_UNBIND_FLAG = 0x00080000 + + /* addDisposition values for CertAddCertificateContextToStore function */ + CERT_STORE_ADD_NEW = 1 + CERT_STORE_ADD_USE_EXISTING = 2 + CERT_STORE_ADD_REPLACE_EXISTING = 3 + CERT_STORE_ADD_ALWAYS = 4 + CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5 + CERT_STORE_ADD_NEWER = 6 + CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7 + + /* ErrorStatus values for CertTrustStatus struct */ + CERT_TRUST_NO_ERROR = 0x00000000 + CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 + CERT_TRUST_IS_REVOKED = 0x00000004 + CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 + CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 + CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 + CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 + CERT_TRUST_IS_CYCLIC = 0x00000080 + CERT_TRUST_INVALID_EXTENSION = 0x00000100 + CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 + CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 + CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 + CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 + CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 + CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 + CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 + CERT_TRUST_IS_PARTIAL_CHAIN = 0x00010000 + CERT_TRUST_CTL_IS_NOT_TIME_VALID = 0x00020000 + CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID = 0x00040000 + CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE = 0x00080000 + CERT_TRUST_HAS_WEAK_SIGNATURE = 0x00100000 + CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 + CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 + CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000 + CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000 + + /* InfoStatus values for CertTrustStatus struct */ + CERT_TRUST_HAS_EXACT_MATCH_ISSUER = 0x00000001 + CERT_TRUST_HAS_KEY_MATCH_ISSUER = 0x00000002 + CERT_TRUST_HAS_NAME_MATCH_ISSUER = 0x00000004 + CERT_TRUST_IS_SELF_SIGNED = 0x00000008 + CERT_TRUST_HAS_PREFERRED_ISSUER = 0x00000100 + CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY = 0x00000400 + CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS = 0x00000400 + CERT_TRUST_IS_PEER_TRUSTED = 0x00000800 + CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED = 0x00001000 + CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000 + CERT_TRUST_IS_CA_TRUSTED = 0x00004000 + CERT_TRUST_IS_COMPLEX_CHAIN = 0x00010000 + + /* Certificate Information Flags */ + CERT_INFO_VERSION_FLAG = 1 + CERT_INFO_SERIAL_NUMBER_FLAG = 2 + CERT_INFO_SIGNATURE_ALGORITHM_FLAG = 3 + CERT_INFO_ISSUER_FLAG = 4 + CERT_INFO_NOT_BEFORE_FLAG = 5 + CERT_INFO_NOT_AFTER_FLAG = 6 + CERT_INFO_SUBJECT_FLAG = 7 + CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8 + CERT_INFO_ISSUER_UNIQUE_ID_FLAG = 9 + CERT_INFO_SUBJECT_UNIQUE_ID_FLAG = 10 + CERT_INFO_EXTENSION_FLAG = 11 + + /* dwFindType for CertFindCertificateInStore */ + CERT_COMPARE_MASK = 0xFFFF + CERT_COMPARE_SHIFT = 16 + CERT_COMPARE_ANY = 0 + CERT_COMPARE_SHA1_HASH = 1 + CERT_COMPARE_NAME = 2 + CERT_COMPARE_ATTR = 3 + CERT_COMPARE_MD5_HASH = 4 + CERT_COMPARE_PROPERTY = 5 + CERT_COMPARE_PUBLIC_KEY = 6 + CERT_COMPARE_HASH = CERT_COMPARE_SHA1_HASH + CERT_COMPARE_NAME_STR_A = 7 + CERT_COMPARE_NAME_STR_W = 8 + CERT_COMPARE_KEY_SPEC = 9 + CERT_COMPARE_ENHKEY_USAGE = 10 + CERT_COMPARE_CTL_USAGE = CERT_COMPARE_ENHKEY_USAGE + CERT_COMPARE_SUBJECT_CERT = 11 + CERT_COMPARE_ISSUER_OF = 12 + CERT_COMPARE_EXISTING = 13 + CERT_COMPARE_SIGNATURE_HASH = 14 + CERT_COMPARE_KEY_IDENTIFIER = 15 + CERT_COMPARE_CERT_ID = 16 + CERT_COMPARE_CROSS_CERT_DIST_POINTS = 17 + CERT_COMPARE_PUBKEY_MD5_HASH = 18 + CERT_COMPARE_SUBJECT_INFO_ACCESS = 19 + CERT_COMPARE_HASH_STR = 20 + CERT_COMPARE_HAS_PRIVATE_KEY = 21 + CERT_FIND_ANY = (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT) + CERT_FIND_SHA1_HASH = (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT) + CERT_FIND_MD5_HASH = (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT) + CERT_FIND_SIGNATURE_HASH = (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT) + CERT_FIND_KEY_IDENTIFIER = (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT) + CERT_FIND_HASH = CERT_FIND_SHA1_HASH + CERT_FIND_PROPERTY = (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT) + CERT_FIND_PUBLIC_KEY = (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT) + CERT_FIND_SUBJECT_NAME = (CERT_COMPARE_NAME<> 32 & 0xffffffff) + return ft +} + +type Win32finddata struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH - 1]uint16 + AlternateFileName [13]uint16 +} + +// This is the actual system call structure. +// Win32finddata is what we committed to in Go 1. +type win32finddata1 struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH]uint16 + AlternateFileName [14]uint16 + + // The Microsoft documentation for this struct¹ describes three additional + // fields: dwFileType, dwCreatorType, and wFinderFlags. However, those fields + // are empirically only present in the macOS port of the Win32 API,² and thus + // not needed for binaries built for Windows. + // + // ¹ https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataw describe + // ² https://golang.org/issue/42637#issuecomment-760715755. +} + +func copyFindData(dst *Win32finddata, src *win32finddata1) { + dst.FileAttributes = src.FileAttributes + dst.CreationTime = src.CreationTime + dst.LastAccessTime = src.LastAccessTime + dst.LastWriteTime = src.LastWriteTime + dst.FileSizeHigh = src.FileSizeHigh + dst.FileSizeLow = src.FileSizeLow + dst.Reserved0 = src.Reserved0 + dst.Reserved1 = src.Reserved1 + + // The src is 1 element bigger than dst, but it must be NUL. + copy(dst.FileName[:], src.FileName[:]) + copy(dst.AlternateFileName[:], src.AlternateFileName[:]) +} + +type ByHandleFileInformation struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + VolumeSerialNumber uint32 + FileSizeHigh uint32 + FileSizeLow uint32 + NumberOfLinks uint32 + FileIndexHigh uint32 + FileIndexLow uint32 +} + +const ( + GetFileExInfoStandard = 0 + GetFileExMaxInfoLevel = 1 +) + +type Win32FileAttributeData struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 +} + +// ShowWindow constants +const ( + // winuser.h + SW_HIDE = 0 + SW_NORMAL = 1 + SW_SHOWNORMAL = 1 + SW_SHOWMINIMIZED = 2 + SW_SHOWMAXIMIZED = 3 + SW_MAXIMIZE = 3 + SW_SHOWNOACTIVATE = 4 + SW_SHOW = 5 + SW_MINIMIZE = 6 + SW_SHOWMINNOACTIVE = 7 + SW_SHOWNA = 8 + SW_RESTORE = 9 + SW_SHOWDEFAULT = 10 + SW_FORCEMINIMIZE = 11 +) + +type StartupInfo struct { + Cb uint32 + _ *uint16 + Desktop *uint16 + Title *uint16 + X uint32 + Y uint32 + XSize uint32 + YSize uint32 + XCountChars uint32 + YCountChars uint32 + FillAttribute uint32 + Flags uint32 + ShowWindow uint16 + _ uint16 + _ *byte + StdInput Handle + StdOutput Handle + StdErr Handle +} + +type StartupInfoEx struct { + StartupInfo + ProcThreadAttributeList *ProcThreadAttributeList +} + +// ProcThreadAttributeList is a placeholder type to represent a PROC_THREAD_ATTRIBUTE_LIST. +// +// To create a *ProcThreadAttributeList, use NewProcThreadAttributeList, update +// it with ProcThreadAttributeListContainer.Update, free its memory using +// ProcThreadAttributeListContainer.Delete, and access the list itself using +// ProcThreadAttributeListContainer.List. +type ProcThreadAttributeList struct{} + +type ProcThreadAttributeListContainer struct { + data *ProcThreadAttributeList + pointers []unsafe.Pointer +} + +type ProcessInformation struct { + Process Handle + Thread Handle + ProcessId uint32 + ThreadId uint32 +} + +type ProcessEntry32 struct { + Size uint32 + Usage uint32 + ProcessID uint32 + DefaultHeapID uintptr + ModuleID uint32 + Threads uint32 + ParentProcessID uint32 + PriClassBase int32 + Flags uint32 + ExeFile [MAX_PATH]uint16 +} + +type ThreadEntry32 struct { + Size uint32 + Usage uint32 + ThreadID uint32 + OwnerProcessID uint32 + BasePri int32 + DeltaPri int32 + Flags uint32 +} + +type ModuleEntry32 struct { + Size uint32 + ModuleID uint32 + ProcessID uint32 + GlblcntUsage uint32 + ProccntUsage uint32 + ModBaseAddr uintptr + ModBaseSize uint32 + ModuleHandle Handle + Module [MAX_MODULE_NAME32 + 1]uint16 + ExePath [MAX_PATH]uint16 +} + +const SizeofModuleEntry32 = unsafe.Sizeof(ModuleEntry32{}) + +type Systemtime struct { + Year uint16 + Month uint16 + DayOfWeek uint16 + Day uint16 + Hour uint16 + Minute uint16 + Second uint16 + Milliseconds uint16 +} + +type Timezoneinformation struct { + Bias int32 + StandardName [32]uint16 + StandardDate Systemtime + StandardBias int32 + DaylightName [32]uint16 + DaylightDate Systemtime + DaylightBias int32 +} + +// Socket related. + +const ( + AF_UNSPEC = 0 + AF_UNIX = 1 + AF_INET = 2 + AF_NETBIOS = 17 + AF_INET6 = 23 + AF_IRDA = 26 + AF_BTH = 32 + + SOCK_STREAM = 1 + SOCK_DGRAM = 2 + SOCK_RAW = 3 + SOCK_RDM = 4 + SOCK_SEQPACKET = 5 + + IPPROTO_IP = 0 + IPPROTO_ICMP = 1 + IPPROTO_IGMP = 2 + BTHPROTO_RFCOMM = 3 + IPPROTO_TCP = 6 + IPPROTO_UDP = 17 + IPPROTO_IPV6 = 41 + IPPROTO_ICMPV6 = 58 + IPPROTO_RM = 113 + + SOL_SOCKET = 0xffff + SO_REUSEADDR = 4 + SO_KEEPALIVE = 8 + SO_DONTROUTE = 16 + SO_BROADCAST = 32 + SO_LINGER = 128 + SO_RCVBUF = 0x1002 + SO_RCVTIMEO = 0x1006 + SO_SNDBUF = 0x1001 + SO_UPDATE_ACCEPT_CONTEXT = 0x700b + SO_UPDATE_CONNECT_CONTEXT = 0x7010 + + IOC_OUT = 0x40000000 + IOC_IN = 0x80000000 + IOC_VENDOR = 0x18000000 + IOC_INOUT = IOC_IN | IOC_OUT + IOC_WS2 = 0x08000000 + SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 + SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 + SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + + // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 + + IP_HDRINCL = 0x2 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_LOOP = 0xb + IP_ADD_MEMBERSHIP = 0xc + IP_DROP_MEMBERSHIP = 0xd + IP_PKTINFO = 0x13 + + IPV6_V6ONLY = 0x1b + IPV6_UNICAST_HOPS = 0x4 + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_LOOP = 0xb + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_PKTINFO = 0x13 + + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_DONTROUTE = 0x4 + MSG_WAITALL = 0x8 + + MSG_TRUNC = 0x0100 + MSG_CTRUNC = 0x0200 + MSG_BCAST = 0x0400 + MSG_MCAST = 0x0800 + + SOMAXCONN = 0x7fffffff + + TCP_NODELAY = 1 + + SHUT_RD = 0 + SHUT_WR = 1 + SHUT_RDWR = 2 + + WSADESCRIPTION_LEN = 256 + WSASYS_STATUS_LEN = 128 +) + +type WSABuf struct { + Len uint32 + Buf *byte +} + +type WSAMsg struct { + Name *syscall.RawSockaddrAny + Namelen int32 + Buffers *WSABuf + BufferCount uint32 + Control WSABuf + Flags uint32 +} + +// Flags for WSASocket +const ( + WSA_FLAG_OVERLAPPED = 0x01 + WSA_FLAG_MULTIPOINT_C_ROOT = 0x02 + WSA_FLAG_MULTIPOINT_C_LEAF = 0x04 + WSA_FLAG_MULTIPOINT_D_ROOT = 0x08 + WSA_FLAG_MULTIPOINT_D_LEAF = 0x10 + WSA_FLAG_ACCESS_SYSTEM_SECURITY = 0x40 + WSA_FLAG_NO_HANDLE_INHERIT = 0x80 + WSA_FLAG_REGISTERED_IO = 0x100 +) + +// Invented values to support what package os expects. +const ( + S_IFMT = 0x1f000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +const ( + FILE_TYPE_CHAR = 0x0002 + FILE_TYPE_DISK = 0x0001 + FILE_TYPE_PIPE = 0x0003 + FILE_TYPE_REMOTE = 0x8000 + FILE_TYPE_UNKNOWN = 0x0000 +) + +type Hostent struct { + Name *byte + Aliases **byte + AddrType uint16 + Length uint16 + AddrList **byte +} + +type Protoent struct { + Name *byte + Aliases **byte + Proto uint16 +} + +const ( + DNS_TYPE_A = 0x0001 + DNS_TYPE_NS = 0x0002 + DNS_TYPE_MD = 0x0003 + DNS_TYPE_MF = 0x0004 + DNS_TYPE_CNAME = 0x0005 + DNS_TYPE_SOA = 0x0006 + DNS_TYPE_MB = 0x0007 + DNS_TYPE_MG = 0x0008 + DNS_TYPE_MR = 0x0009 + DNS_TYPE_NULL = 0x000a + DNS_TYPE_WKS = 0x000b + DNS_TYPE_PTR = 0x000c + DNS_TYPE_HINFO = 0x000d + DNS_TYPE_MINFO = 0x000e + DNS_TYPE_MX = 0x000f + DNS_TYPE_TEXT = 0x0010 + DNS_TYPE_RP = 0x0011 + DNS_TYPE_AFSDB = 0x0012 + DNS_TYPE_X25 = 0x0013 + DNS_TYPE_ISDN = 0x0014 + DNS_TYPE_RT = 0x0015 + DNS_TYPE_NSAP = 0x0016 + DNS_TYPE_NSAPPTR = 0x0017 + DNS_TYPE_SIG = 0x0018 + DNS_TYPE_KEY = 0x0019 + DNS_TYPE_PX = 0x001a + DNS_TYPE_GPOS = 0x001b + DNS_TYPE_AAAA = 0x001c + DNS_TYPE_LOC = 0x001d + DNS_TYPE_NXT = 0x001e + DNS_TYPE_EID = 0x001f + DNS_TYPE_NIMLOC = 0x0020 + DNS_TYPE_SRV = 0x0021 + DNS_TYPE_ATMA = 0x0022 + DNS_TYPE_NAPTR = 0x0023 + DNS_TYPE_KX = 0x0024 + DNS_TYPE_CERT = 0x0025 + DNS_TYPE_A6 = 0x0026 + DNS_TYPE_DNAME = 0x0027 + DNS_TYPE_SINK = 0x0028 + DNS_TYPE_OPT = 0x0029 + DNS_TYPE_DS = 0x002B + DNS_TYPE_RRSIG = 0x002E + DNS_TYPE_NSEC = 0x002F + DNS_TYPE_DNSKEY = 0x0030 + DNS_TYPE_DHCID = 0x0031 + DNS_TYPE_UINFO = 0x0064 + DNS_TYPE_UID = 0x0065 + DNS_TYPE_GID = 0x0066 + DNS_TYPE_UNSPEC = 0x0067 + DNS_TYPE_ADDRS = 0x00f8 + DNS_TYPE_TKEY = 0x00f9 + DNS_TYPE_TSIG = 0x00fa + DNS_TYPE_IXFR = 0x00fb + DNS_TYPE_AXFR = 0x00fc + DNS_TYPE_MAILB = 0x00fd + DNS_TYPE_MAILA = 0x00fe + DNS_TYPE_ALL = 0x00ff + DNS_TYPE_ANY = 0x00ff + DNS_TYPE_WINS = 0xff01 + DNS_TYPE_WINSR = 0xff02 + DNS_TYPE_NBSTAT = 0xff01 +) + +const ( + // flags inside DNSRecord.Dw + DnsSectionQuestion = 0x0000 + DnsSectionAnswer = 0x0001 + DnsSectionAuthority = 0x0002 + DnsSectionAdditional = 0x0003 +) + +const ( + // flags of WSALookupService + LUP_DEEP = 0x0001 + LUP_CONTAINERS = 0x0002 + LUP_NOCONTAINERS = 0x0004 + LUP_NEAREST = 0x0008 + LUP_RETURN_NAME = 0x0010 + LUP_RETURN_TYPE = 0x0020 + LUP_RETURN_VERSION = 0x0040 + LUP_RETURN_COMMENT = 0x0080 + LUP_RETURN_ADDR = 0x0100 + LUP_RETURN_BLOB = 0x0200 + LUP_RETURN_ALIASES = 0x0400 + LUP_RETURN_QUERY_STRING = 0x0800 + LUP_RETURN_ALL = 0x0FF0 + LUP_RES_SERVICE = 0x8000 + + LUP_FLUSHCACHE = 0x1000 + LUP_FLUSHPREVIOUS = 0x2000 + + LUP_NON_AUTHORITATIVE = 0x4000 + LUP_SECURE = 0x8000 + LUP_RETURN_PREFERRED_NAMES = 0x10000 + LUP_DNS_ONLY = 0x20000 + + LUP_ADDRCONFIG = 0x100000 + LUP_DUAL_ADDR = 0x200000 + LUP_FILESERVER = 0x400000 + LUP_DISABLE_IDN_ENCODING = 0x00800000 + LUP_API_ANSI = 0x01000000 + + LUP_RESOLUTION_HANDLE = 0x80000000 +) + +const ( + // values of WSAQUERYSET's namespace + NS_ALL = 0 + NS_DNS = 12 + NS_NLA = 15 + NS_BTH = 16 + NS_EMAIL = 37 + NS_PNRPNAME = 38 + NS_PNRPCLOUD = 39 +) + +type DNSSRVData struct { + Target *uint16 + Priority uint16 + Weight uint16 + Port uint16 + Pad uint16 +} + +type DNSPTRData struct { + Host *uint16 +} + +type DNSMXData struct { + NameExchange *uint16 + Preference uint16 + Pad uint16 +} + +type DNSTXTData struct { + StringCount uint16 + StringArray [1]*uint16 +} + +type DNSRecord struct { + Next *DNSRecord + Name *uint16 + Type uint16 + Length uint16 + Dw uint32 + Ttl uint32 + Reserved uint32 + Data [40]byte +} + +const ( + TF_DISCONNECT = 1 + TF_REUSE_SOCKET = 2 + TF_WRITE_BEHIND = 4 + TF_USE_DEFAULT_WORKER = 0 + TF_USE_SYSTEM_THREAD = 16 + TF_USE_KERNEL_APC = 32 +) + +type TransmitFileBuffers struct { + Head uintptr + HeadLength uint32 + Tail uintptr + TailLength uint32 +} + +const ( + IFF_UP = 1 + IFF_BROADCAST = 2 + IFF_LOOPBACK = 4 + IFF_POINTTOPOINT = 8 + IFF_MULTICAST = 16 +) + +const SIO_GET_INTERFACE_LIST = 0x4004747F + +// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old. +// will be fixed to change variable type as suitable. + +type SockaddrGen [24]byte + +type InterfaceInfo struct { + Flags uint32 + Address SockaddrGen + BroadcastAddress SockaddrGen + Netmask SockaddrGen +} + +type IpAddressString struct { + String [16]byte +} + +type IpMaskString IpAddressString + +type IpAddrString struct { + Next *IpAddrString + IpAddress IpAddressString + IpMask IpMaskString + Context uint32 +} + +const MAX_ADAPTER_NAME_LENGTH = 256 +const MAX_ADAPTER_DESCRIPTION_LENGTH = 128 +const MAX_ADAPTER_ADDRESS_LENGTH = 8 + +type IpAdapterInfo struct { + Next *IpAdapterInfo + ComboIndex uint32 + AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte + Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte + AddressLength uint32 + Address [MAX_ADAPTER_ADDRESS_LENGTH]byte + Index uint32 + Type uint32 + DhcpEnabled uint32 + CurrentIpAddress *IpAddrString + IpAddressList IpAddrString + GatewayList IpAddrString + DhcpServer IpAddrString + HaveWins bool + PrimaryWinsServer IpAddrString + SecondaryWinsServer IpAddrString + LeaseObtained int64 + LeaseExpires int64 +} + +const MAXLEN_PHYSADDR = 8 +const MAX_INTERFACE_NAME_LEN = 256 +const MAXLEN_IFDESCR = 256 + +type MibIfRow struct { + Name [MAX_INTERFACE_NAME_LEN]uint16 + Index uint32 + Type uint32 + Mtu uint32 + Speed uint32 + PhysAddrLen uint32 + PhysAddr [MAXLEN_PHYSADDR]byte + AdminStatus uint32 + OperStatus uint32 + LastChange uint32 + InOctets uint32 + InUcastPkts uint32 + InNUcastPkts uint32 + InDiscards uint32 + InErrors uint32 + InUnknownProtos uint32 + OutOctets uint32 + OutUcastPkts uint32 + OutNUcastPkts uint32 + OutDiscards uint32 + OutErrors uint32 + OutQLen uint32 + DescrLen uint32 + Descr [MAXLEN_IFDESCR]byte +} + +type CertInfo struct { + Version uint32 + SerialNumber CryptIntegerBlob + SignatureAlgorithm CryptAlgorithmIdentifier + Issuer CertNameBlob + NotBefore Filetime + NotAfter Filetime + Subject CertNameBlob + SubjectPublicKeyInfo CertPublicKeyInfo + IssuerUniqueId CryptBitBlob + SubjectUniqueId CryptBitBlob + CountExtensions uint32 + Extensions *CertExtension +} + +type CertExtension struct { + ObjId *byte + Critical int32 + Value CryptObjidBlob +} + +type CryptAlgorithmIdentifier struct { + ObjId *byte + Parameters CryptObjidBlob +} + +type CertPublicKeyInfo struct { + Algorithm CryptAlgorithmIdentifier + PublicKey CryptBitBlob +} + +type DataBlob struct { + Size uint32 + Data *byte +} +type CryptIntegerBlob DataBlob +type CryptUintBlob DataBlob +type CryptObjidBlob DataBlob +type CertNameBlob DataBlob +type CertRdnValueBlob DataBlob +type CertBlob DataBlob +type CrlBlob DataBlob +type CryptDataBlob DataBlob +type CryptHashBlob DataBlob +type CryptDigestBlob DataBlob +type CryptDerBlob DataBlob +type CryptAttrBlob DataBlob + +type CryptBitBlob struct { + Size uint32 + Data *byte + UnusedBits uint32 +} + +type CertContext struct { + EncodingType uint32 + EncodedCert *byte + Length uint32 + CertInfo *CertInfo + Store Handle +} + +type CertChainContext struct { + Size uint32 + TrustStatus CertTrustStatus + ChainCount uint32 + Chains **CertSimpleChain + LowerQualityChainCount uint32 + LowerQualityChains **CertChainContext + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertTrustListInfo struct { + // Not implemented +} + +type CertSimpleChain struct { + Size uint32 + TrustStatus CertTrustStatus + NumElements uint32 + Elements **CertChainElement + TrustListInfo *CertTrustListInfo + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertChainElement struct { + Size uint32 + CertContext *CertContext + TrustStatus CertTrustStatus + RevocationInfo *CertRevocationInfo + IssuanceUsage *CertEnhKeyUsage + ApplicationUsage *CertEnhKeyUsage + ExtendedErrorInfo *uint16 +} + +type CertRevocationCrlInfo struct { + // Not implemented +} + +type CertRevocationInfo struct { + Size uint32 + RevocationResult uint32 + RevocationOid *byte + OidSpecificInfo Pointer + HasFreshnessTime uint32 + FreshnessTime uint32 + CrlInfo *CertRevocationCrlInfo +} + +type CertTrustStatus struct { + ErrorStatus uint32 + InfoStatus uint32 +} + +type CertUsageMatch struct { + Type uint32 + Usage CertEnhKeyUsage +} + +type CertEnhKeyUsage struct { + Length uint32 + UsageIdentifiers **byte +} + +type CertChainPara struct { + Size uint32 + RequestedUsage CertUsageMatch + RequstedIssuancePolicy CertUsageMatch + URLRetrievalTimeout uint32 + CheckRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 + CacheResync *Filetime +} + +type CertChainPolicyPara struct { + Size uint32 + Flags uint32 + ExtraPolicyPara Pointer +} + +type SSLExtraCertChainPolicyPara struct { + Size uint32 + AuthType uint32 + Checks uint32 + ServerName *uint16 +} + +type CertChainPolicyStatus struct { + Size uint32 + Error uint32 + ChainIndex uint32 + ElementIndex uint32 + ExtraPolicyStatus Pointer +} + +type CertPolicyInfo struct { + Identifier *byte + CountQualifiers uint32 + Qualifiers *CertPolicyQualifierInfo +} + +type CertPoliciesInfo struct { + Count uint32 + PolicyInfos *CertPolicyInfo +} + +type CertPolicyQualifierInfo struct { + // Not implemented +} + +type CertStrongSignPara struct { + Size uint32 + InfoChoice uint32 + InfoOrSerializedInfoOrOID unsafe.Pointer +} + +type CryptProtectPromptStruct struct { + Size uint32 + PromptFlags uint32 + App HWND + Prompt *uint16 +} + +type CertChainFindByIssuerPara struct { + Size uint32 + UsageIdentifier *byte + KeySpec uint32 + AcquirePrivateKeyFlags uint32 + IssuerCount uint32 + Issuer Pointer + FindCallback Pointer + FindArg Pointer + IssuerChainIndex *uint32 + IssuerElementIndex *uint32 +} + +type WinTrustData struct { + Size uint32 + PolicyCallbackData uintptr + SIPClientData uintptr + UIChoice uint32 + RevocationChecks uint32 + UnionChoice uint32 + FileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer + StateAction uint32 + StateData Handle + URLReference *uint16 + ProvFlags uint32 + UIContext uint32 + SignatureSettings *WinTrustSignatureSettings +} + +type WinTrustFileInfo struct { + Size uint32 + FilePath *uint16 + File Handle + KnownSubject *GUID +} + +type WinTrustSignatureSettings struct { + Size uint32 + Index uint32 + Flags uint32 + SecondarySigs uint32 + VerifiedSigIndex uint32 + CryptoPolicy *CertStrongSignPara +} + +const ( + // do not reorder + HKEY_CLASSES_ROOT = 0x80000000 + iota + HKEY_CURRENT_USER + HKEY_LOCAL_MACHINE + HKEY_USERS + HKEY_PERFORMANCE_DATA + HKEY_CURRENT_CONFIG + HKEY_DYN_DATA + + KEY_QUERY_VALUE = 1 + KEY_SET_VALUE = 2 + KEY_CREATE_SUB_KEY = 4 + KEY_ENUMERATE_SUB_KEYS = 8 + KEY_NOTIFY = 16 + KEY_CREATE_LINK = 32 + KEY_WRITE = 0x20006 + KEY_EXECUTE = 0x20019 + KEY_READ = 0x20019 + KEY_WOW64_64KEY = 0x0100 + KEY_WOW64_32KEY = 0x0200 + KEY_ALL_ACCESS = 0xf003f +) + +const ( + // do not reorder + REG_NONE = iota + REG_SZ + REG_EXPAND_SZ + REG_BINARY + REG_DWORD_LITTLE_ENDIAN + REG_DWORD_BIG_ENDIAN + REG_LINK + REG_MULTI_SZ + REG_RESOURCE_LIST + REG_FULL_RESOURCE_DESCRIPTOR + REG_RESOURCE_REQUIREMENTS_LIST + REG_QWORD_LITTLE_ENDIAN + REG_DWORD = REG_DWORD_LITTLE_ENDIAN + REG_QWORD = REG_QWORD_LITTLE_ENDIAN +) + +const ( + EVENT_MODIFY_STATE = 0x0002 + EVENT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3 + + MUTANT_QUERY_STATE = 0x0001 + MUTANT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE + + SEMAPHORE_MODIFY_STATE = 0x0002 + SEMAPHORE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3 + + TIMER_QUERY_STATE = 0x0001 + TIMER_MODIFY_STATE = 0x0002 + TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE + + MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE + MUTEX_ALL_ACCESS = MUTANT_ALL_ACCESS + + CREATE_EVENT_MANUAL_RESET = 0x1 + CREATE_EVENT_INITIAL_SET = 0x2 + CREATE_MUTEX_INITIAL_OWNER = 0x1 +) + +type AddrinfoW struct { + Flags int32 + Family int32 + Socktype int32 + Protocol int32 + Addrlen uintptr + Canonname *uint16 + Addr uintptr + Next *AddrinfoW +} + +const ( + AI_PASSIVE = 1 + AI_CANONNAME = 2 + AI_NUMERICHOST = 4 +) + +type GUID struct { + Data1 uint32 + Data2 uint16 + Data3 uint16 + Data4 [8]byte +} + +var WSAID_CONNECTEX = GUID{ + 0x25a207b9, + 0xddf3, + 0x4660, + [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, +} + +var WSAID_WSASENDMSG = GUID{ + 0xa441e712, + 0x754f, + 0x43ca, + [8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d}, +} + +var WSAID_WSARECVMSG = GUID{ + 0xf689d7c8, + 0x6f1f, + 0x436b, + [8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22}, +} + +const ( + FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1 + FILE_SKIP_SET_EVENT_ON_HANDLE = 2 +) + +const ( + WSAPROTOCOL_LEN = 255 + MAX_PROTOCOL_CHAIN = 7 + BASE_PROTOCOL = 1 + LAYERED_PROTOCOL = 0 + + XP1_CONNECTIONLESS = 0x00000001 + XP1_GUARANTEED_DELIVERY = 0x00000002 + XP1_GUARANTEED_ORDER = 0x00000004 + XP1_MESSAGE_ORIENTED = 0x00000008 + XP1_PSEUDO_STREAM = 0x00000010 + XP1_GRACEFUL_CLOSE = 0x00000020 + XP1_EXPEDITED_DATA = 0x00000040 + XP1_CONNECT_DATA = 0x00000080 + XP1_DISCONNECT_DATA = 0x00000100 + XP1_SUPPORT_BROADCAST = 0x00000200 + XP1_SUPPORT_MULTIPOINT = 0x00000400 + XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800 + XP1_MULTIPOINT_DATA_PLANE = 0x00001000 + XP1_QOS_SUPPORTED = 0x00002000 + XP1_UNI_SEND = 0x00008000 + XP1_UNI_RECV = 0x00010000 + XP1_IFS_HANDLES = 0x00020000 + XP1_PARTIAL_MESSAGE = 0x00040000 + XP1_SAN_SUPPORT_SDP = 0x00080000 + + PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001 + PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002 + PFL_HIDDEN = 0x00000004 + PFL_MATCHES_PROTOCOL_ZERO = 0x00000008 + PFL_NETWORKDIRECT_PROVIDER = 0x00000010 +) + +type WSAProtocolInfo struct { + ServiceFlags1 uint32 + ServiceFlags2 uint32 + ServiceFlags3 uint32 + ServiceFlags4 uint32 + ProviderFlags uint32 + ProviderId GUID + CatalogEntryId uint32 + ProtocolChain WSAProtocolChain + Version int32 + AddressFamily int32 + MaxSockAddr int32 + MinSockAddr int32 + SocketType int32 + Protocol int32 + ProtocolMaxOffset int32 + NetworkByteOrder int32 + SecurityScheme int32 + MessageSize uint32 + ProviderReserved uint32 + ProtocolName [WSAPROTOCOL_LEN + 1]uint16 +} + +type WSAProtocolChain struct { + ChainLen int32 + ChainEntries [MAX_PROTOCOL_CHAIN]uint32 +} + +type TCPKeepalive struct { + OnOff uint32 + Time uint32 + Interval uint32 +} + +type symbolicLinkReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + Flags uint32 + PathBuffer [1]uint16 +} + +type mountPointReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + PathBuffer [1]uint16 +} + +type reparseDataBuffer struct { + ReparseTag uint32 + ReparseDataLength uint16 + Reserved uint16 + + // GenericReparseBuffer + reparseBuffer byte +} + +const ( + FSCTL_CREATE_OR_GET_OBJECT_ID = 0x0900C0 + FSCTL_DELETE_OBJECT_ID = 0x0900A0 + FSCTL_DELETE_REPARSE_POINT = 0x0900AC + FSCTL_DUPLICATE_EXTENTS_TO_FILE = 0x098344 + FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX = 0x0983E8 + FSCTL_FILESYSTEM_GET_STATISTICS = 0x090060 + FSCTL_FILE_LEVEL_TRIM = 0x098208 + FSCTL_FIND_FILES_BY_SID = 0x09008F + FSCTL_GET_COMPRESSION = 0x09003C + FSCTL_GET_INTEGRITY_INFORMATION = 0x09027C + FSCTL_GET_NTFS_VOLUME_DATA = 0x090064 + FSCTL_GET_REFS_VOLUME_DATA = 0x0902D8 + FSCTL_GET_OBJECT_ID = 0x09009C + FSCTL_GET_REPARSE_POINT = 0x0900A8 + FSCTL_GET_RETRIEVAL_POINTER_COUNT = 0x09042B + FSCTL_GET_RETRIEVAL_POINTERS = 0x090073 + FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT = 0x0903D3 + FSCTL_IS_PATHNAME_VALID = 0x09002C + FSCTL_LMR_SET_LINK_TRACKING_INFORMATION = 0x1400EC + FSCTL_MARK_HANDLE = 0x0900FC + FSCTL_OFFLOAD_READ = 0x094264 + FSCTL_OFFLOAD_WRITE = 0x098268 + FSCTL_PIPE_PEEK = 0x11400C + FSCTL_PIPE_TRANSCEIVE = 0x11C017 + FSCTL_PIPE_WAIT = 0x110018 + FSCTL_QUERY_ALLOCATED_RANGES = 0x0940CF + FSCTL_QUERY_FAT_BPB = 0x090058 + FSCTL_QUERY_FILE_REGIONS = 0x090284 + FSCTL_QUERY_ON_DISK_VOLUME_INFO = 0x09013C + FSCTL_QUERY_SPARING_INFO = 0x090138 + FSCTL_READ_FILE_USN_DATA = 0x0900EB + FSCTL_RECALL_FILE = 0x090117 + FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT = 0x090440 + FSCTL_SET_COMPRESSION = 0x09C040 + FSCTL_SET_DEFECT_MANAGEMENT = 0x098134 + FSCTL_SET_ENCRYPTION = 0x0900D7 + FSCTL_SET_INTEGRITY_INFORMATION = 0x09C280 + FSCTL_SET_INTEGRITY_INFORMATION_EX = 0x090380 + FSCTL_SET_OBJECT_ID = 0x090098 + FSCTL_SET_OBJECT_ID_EXTENDED = 0x0900BC + FSCTL_SET_REPARSE_POINT = 0x0900A4 + FSCTL_SET_SPARSE = 0x0900C4 + FSCTL_SET_ZERO_DATA = 0x0980C8 + FSCTL_SET_ZERO_ON_DEALLOCATION = 0x090194 + FSCTL_SIS_COPYFILE = 0x090100 + FSCTL_WRITE_USN_CLOSE_RECORD = 0x0900EF + + MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 + IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 + IO_REPARSE_TAG_SYMLINK = 0xA000000C + SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 +) + +const ( + ComputerNameNetBIOS = 0 + ComputerNameDnsHostname = 1 + ComputerNameDnsDomain = 2 + ComputerNameDnsFullyQualified = 3 + ComputerNamePhysicalNetBIOS = 4 + ComputerNamePhysicalDnsHostname = 5 + ComputerNamePhysicalDnsDomain = 6 + ComputerNamePhysicalDnsFullyQualified = 7 + ComputerNameMax = 8 +) + +// For MessageBox() +const ( + MB_OK = 0x00000000 + MB_OKCANCEL = 0x00000001 + MB_ABORTRETRYIGNORE = 0x00000002 + MB_YESNOCANCEL = 0x00000003 + MB_YESNO = 0x00000004 + MB_RETRYCANCEL = 0x00000005 + MB_CANCELTRYCONTINUE = 0x00000006 + MB_ICONHAND = 0x00000010 + MB_ICONQUESTION = 0x00000020 + MB_ICONEXCLAMATION = 0x00000030 + MB_ICONASTERISK = 0x00000040 + MB_USERICON = 0x00000080 + MB_ICONWARNING = MB_ICONEXCLAMATION + MB_ICONERROR = MB_ICONHAND + MB_ICONINFORMATION = MB_ICONASTERISK + MB_ICONSTOP = MB_ICONHAND + MB_DEFBUTTON1 = 0x00000000 + MB_DEFBUTTON2 = 0x00000100 + MB_DEFBUTTON3 = 0x00000200 + MB_DEFBUTTON4 = 0x00000300 + MB_APPLMODAL = 0x00000000 + MB_SYSTEMMODAL = 0x00001000 + MB_TASKMODAL = 0x00002000 + MB_HELP = 0x00004000 + MB_NOFOCUS = 0x00008000 + MB_SETFOREGROUND = 0x00010000 + MB_DEFAULT_DESKTOP_ONLY = 0x00020000 + MB_TOPMOST = 0x00040000 + MB_RIGHT = 0x00080000 + MB_RTLREADING = 0x00100000 + MB_SERVICE_NOTIFICATION = 0x00200000 +) + +const ( + MOVEFILE_REPLACE_EXISTING = 0x1 + MOVEFILE_COPY_ALLOWED = 0x2 + MOVEFILE_DELAY_UNTIL_REBOOT = 0x4 + MOVEFILE_WRITE_THROUGH = 0x8 + MOVEFILE_CREATE_HARDLINK = 0x10 + MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 +) + +const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 + +const ( + IF_TYPE_OTHER = 1 + IF_TYPE_ETHERNET_CSMACD = 6 + IF_TYPE_ISO88025_TOKENRING = 9 + IF_TYPE_PPP = 23 + IF_TYPE_SOFTWARE_LOOPBACK = 24 + IF_TYPE_ATM = 37 + IF_TYPE_IEEE80211 = 71 + IF_TYPE_TUNNEL = 131 + IF_TYPE_IEEE1394 = 144 +) + +type SocketAddress struct { + Sockaddr *syscall.RawSockaddrAny + SockaddrLength int32 +} + +// IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither. +func (addr *SocketAddress) IP() net.IP { + if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET { + return (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:] + } else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 { + return (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:] + } + return nil +} + +type IpAdapterUnicastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterUnicastAddress + Address SocketAddress + PrefixOrigin int32 + SuffixOrigin int32 + DadState int32 + ValidLifetime uint32 + PreferredLifetime uint32 + LeaseLifetime uint32 + OnLinkPrefixLength uint8 +} + +type IpAdapterAnycastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterAnycastAddress + Address SocketAddress +} + +type IpAdapterMulticastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterMulticastAddress + Address SocketAddress +} + +type IpAdapterDnsServerAdapter struct { + Length uint32 + Reserved uint32 + Next *IpAdapterDnsServerAdapter + Address SocketAddress +} + +type IpAdapterPrefix struct { + Length uint32 + Flags uint32 + Next *IpAdapterPrefix + Address SocketAddress + PrefixLength uint32 +} + +type IpAdapterAddresses struct { + Length uint32 + IfIndex uint32 + Next *IpAdapterAddresses + AdapterName *byte + FirstUnicastAddress *IpAdapterUnicastAddress + FirstAnycastAddress *IpAdapterAnycastAddress + FirstMulticastAddress *IpAdapterMulticastAddress + FirstDnsServerAddress *IpAdapterDnsServerAdapter + DnsSuffix *uint16 + Description *uint16 + FriendlyName *uint16 + PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte + PhysicalAddressLength uint32 + Flags uint32 + Mtu uint32 + IfType uint32 + OperStatus uint32 + Ipv6IfIndex uint32 + ZoneIndices [16]uint32 + FirstPrefix *IpAdapterPrefix + TransmitLinkSpeed uint64 + ReceiveLinkSpeed uint64 + FirstWinsServerAddress *IpAdapterWinsServerAddress + FirstGatewayAddress *IpAdapterGatewayAddress + Ipv4Metric uint32 + Ipv6Metric uint32 + Luid uint64 + Dhcpv4Server SocketAddress + CompartmentId uint32 + NetworkGuid GUID + ConnectionType uint32 + TunnelType uint32 + Dhcpv6Server SocketAddress + Dhcpv6ClientDuid [MAX_DHCPV6_DUID_LENGTH]byte + Dhcpv6ClientDuidLength uint32 + Dhcpv6Iaid uint32 + FirstDnsSuffix *IpAdapterDNSSuffix +} + +type IpAdapterWinsServerAddress struct { + Length uint32 + Reserved uint32 + Next *IpAdapterWinsServerAddress + Address SocketAddress +} + +type IpAdapterGatewayAddress struct { + Length uint32 + Reserved uint32 + Next *IpAdapterGatewayAddress + Address SocketAddress +} + +type IpAdapterDNSSuffix struct { + Next *IpAdapterDNSSuffix + String [MAX_DNS_SUFFIX_STRING_LENGTH]uint16 +} + +const ( + IfOperStatusUp = 1 + IfOperStatusDown = 2 + IfOperStatusTesting = 3 + IfOperStatusUnknown = 4 + IfOperStatusDormant = 5 + IfOperStatusNotPresent = 6 + IfOperStatusLowerLayerDown = 7 +) + +// Console related constants used for the mode parameter to SetConsoleMode. See +// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. + +const ( + ENABLE_PROCESSED_INPUT = 0x1 + ENABLE_LINE_INPUT = 0x2 + ENABLE_ECHO_INPUT = 0x4 + ENABLE_WINDOW_INPUT = 0x8 + ENABLE_MOUSE_INPUT = 0x10 + ENABLE_INSERT_MODE = 0x20 + ENABLE_QUICK_EDIT_MODE = 0x40 + ENABLE_EXTENDED_FLAGS = 0x80 + ENABLE_AUTO_POSITION = 0x100 + ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200 + + ENABLE_PROCESSED_OUTPUT = 0x1 + ENABLE_WRAP_AT_EOL_OUTPUT = 0x2 + ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4 + DISABLE_NEWLINE_AUTO_RETURN = 0x8 + ENABLE_LVB_GRID_WORLDWIDE = 0x10 +) + +type Coord struct { + X int16 + Y int16 +} + +type SmallRect struct { + Left int16 + Top int16 + Right int16 + Bottom int16 +} + +// Used with GetConsoleScreenBuffer to retrieve information about a console +// screen buffer. See +// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str +// for details. + +type ConsoleScreenBufferInfo struct { + Size Coord + CursorPosition Coord + Attributes uint16 + Window SmallRect + MaximumWindowSize Coord +} + +const UNIX_PATH_MAX = 108 // defined in afunix.h + +const ( + // flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags + JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x00000008 + JOB_OBJECT_LIMIT_AFFINITY = 0x00000010 + JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x00000800 + JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400 + JOB_OBJECT_LIMIT_JOB_MEMORY = 0x00000200 + JOB_OBJECT_LIMIT_JOB_TIME = 0x00000004 + JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000 + JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x00000040 + JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x00000020 + JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x00000100 + JOB_OBJECT_LIMIT_PROCESS_TIME = 0x00000002 + JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x00000080 + JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x00001000 + JOB_OBJECT_LIMIT_SUBSET_AFFINITY = 0x00004000 + JOB_OBJECT_LIMIT_WORKINGSET = 0x00000001 +) + +type IO_COUNTERS struct { + ReadOperationCount uint64 + WriteOperationCount uint64 + OtherOperationCount uint64 + ReadTransferCount uint64 + WriteTransferCount uint64 + OtherTransferCount uint64 +} + +type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct { + BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION + IoInfo IO_COUNTERS + ProcessMemoryLimit uintptr + JobMemoryLimit uintptr + PeakProcessMemoryUsed uintptr + PeakJobMemoryUsed uintptr +} + +const ( + // UIRestrictionsClass + JOB_OBJECT_UILIMIT_DESKTOP = 0x00000040 + JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = 0x00000010 + JOB_OBJECT_UILIMIT_EXITWINDOWS = 0x00000080 + JOB_OBJECT_UILIMIT_GLOBALATOMS = 0x00000020 + JOB_OBJECT_UILIMIT_HANDLES = 0x00000001 + JOB_OBJECT_UILIMIT_READCLIPBOARD = 0x00000002 + JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008 + JOB_OBJECT_UILIMIT_WRITECLIPBOARD = 0x00000004 +) + +type JOBOBJECT_BASIC_UI_RESTRICTIONS struct { + UIRestrictionsClass uint32 +} + +const ( + // JobObjectInformationClass for QueryInformationJobObject and SetInformationJobObject + JobObjectAssociateCompletionPortInformation = 7 + JobObjectBasicAccountingInformation = 1 + JobObjectBasicAndIoAccountingInformation = 8 + JobObjectBasicLimitInformation = 2 + JobObjectBasicProcessIdList = 3 + JobObjectBasicUIRestrictions = 4 + JobObjectCpuRateControlInformation = 15 + JobObjectEndOfJobTimeInformation = 6 + JobObjectExtendedLimitInformation = 9 + JobObjectGroupInformation = 11 + JobObjectGroupInformationEx = 14 + JobObjectLimitViolationInformation = 13 + JobObjectLimitViolationInformation2 = 34 + JobObjectNetRateControlInformation = 32 + JobObjectNotificationLimitInformation = 12 + JobObjectNotificationLimitInformation2 = 33 + JobObjectSecurityLimitInformation = 5 +) + +const ( + KF_FLAG_DEFAULT = 0x00000000 + KF_FLAG_FORCE_APP_DATA_REDIRECTION = 0x00080000 + KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000 + KF_FLAG_FORCE_PACKAGE_REDIRECTION = 0x00020000 + KF_FLAG_NO_PACKAGE_REDIRECTION = 0x00010000 + KF_FLAG_FORCE_APPCONTAINER_REDIRECTION = 0x00020000 + KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000 + KF_FLAG_CREATE = 0x00008000 + KF_FLAG_DONT_VERIFY = 0x00004000 + KF_FLAG_DONT_UNEXPAND = 0x00002000 + KF_FLAG_NO_ALIAS = 0x00001000 + KF_FLAG_INIT = 0x00000800 + KF_FLAG_DEFAULT_PATH = 0x00000400 + KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200 + KF_FLAG_SIMPLE_IDLIST = 0x00000100 + KF_FLAG_ALIAS_ONLY = 0x80000000 +) + +type OsVersionInfoEx struct { + osVersionInfoSize uint32 + MajorVersion uint32 + MinorVersion uint32 + BuildNumber uint32 + PlatformId uint32 + CsdVersion [128]uint16 + ServicePackMajor uint16 + ServicePackMinor uint16 + SuiteMask uint16 + ProductType byte + _ byte +} + +const ( + EWX_LOGOFF = 0x00000000 + EWX_SHUTDOWN = 0x00000001 + EWX_REBOOT = 0x00000002 + EWX_FORCE = 0x00000004 + EWX_POWEROFF = 0x00000008 + EWX_FORCEIFHUNG = 0x00000010 + EWX_QUICKRESOLVE = 0x00000020 + EWX_RESTARTAPPS = 0x00000040 + EWX_HYBRID_SHUTDOWN = 0x00400000 + EWX_BOOTOPTIONS = 0x01000000 + + SHTDN_REASON_FLAG_COMMENT_REQUIRED = 0x01000000 + SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000 + SHTDN_REASON_FLAG_CLEAN_UI = 0x04000000 + SHTDN_REASON_FLAG_DIRTY_UI = 0x08000000 + SHTDN_REASON_FLAG_USER_DEFINED = 0x40000000 + SHTDN_REASON_FLAG_PLANNED = 0x80000000 + SHTDN_REASON_MAJOR_OTHER = 0x00000000 + SHTDN_REASON_MAJOR_NONE = 0x00000000 + SHTDN_REASON_MAJOR_HARDWARE = 0x00010000 + SHTDN_REASON_MAJOR_OPERATINGSYSTEM = 0x00020000 + SHTDN_REASON_MAJOR_SOFTWARE = 0x00030000 + SHTDN_REASON_MAJOR_APPLICATION = 0x00040000 + SHTDN_REASON_MAJOR_SYSTEM = 0x00050000 + SHTDN_REASON_MAJOR_POWER = 0x00060000 + SHTDN_REASON_MAJOR_LEGACY_API = 0x00070000 + SHTDN_REASON_MINOR_OTHER = 0x00000000 + SHTDN_REASON_MINOR_NONE = 0x000000ff + SHTDN_REASON_MINOR_MAINTENANCE = 0x00000001 + SHTDN_REASON_MINOR_INSTALLATION = 0x00000002 + SHTDN_REASON_MINOR_UPGRADE = 0x00000003 + SHTDN_REASON_MINOR_RECONFIG = 0x00000004 + SHTDN_REASON_MINOR_HUNG = 0x00000005 + SHTDN_REASON_MINOR_UNSTABLE = 0x00000006 + SHTDN_REASON_MINOR_DISK = 0x00000007 + SHTDN_REASON_MINOR_PROCESSOR = 0x00000008 + SHTDN_REASON_MINOR_NETWORKCARD = 0x00000009 + SHTDN_REASON_MINOR_POWER_SUPPLY = 0x0000000a + SHTDN_REASON_MINOR_CORDUNPLUGGED = 0x0000000b + SHTDN_REASON_MINOR_ENVIRONMENT = 0x0000000c + SHTDN_REASON_MINOR_HARDWARE_DRIVER = 0x0000000d + SHTDN_REASON_MINOR_OTHERDRIVER = 0x0000000e + SHTDN_REASON_MINOR_BLUESCREEN = 0x0000000F + SHTDN_REASON_MINOR_SERVICEPACK = 0x00000010 + SHTDN_REASON_MINOR_HOTFIX = 0x00000011 + SHTDN_REASON_MINOR_SECURITYFIX = 0x00000012 + SHTDN_REASON_MINOR_SECURITY = 0x00000013 + SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY = 0x00000014 + SHTDN_REASON_MINOR_WMI = 0x00000015 + SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL = 0x00000016 + SHTDN_REASON_MINOR_HOTFIX_UNINSTALL = 0x00000017 + SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL = 0x00000018 + SHTDN_REASON_MINOR_MMC = 0x00000019 + SHTDN_REASON_MINOR_SYSTEMRESTORE = 0x0000001a + SHTDN_REASON_MINOR_TERMSRV = 0x00000020 + SHTDN_REASON_MINOR_DC_PROMOTION = 0x00000021 + SHTDN_REASON_MINOR_DC_DEMOTION = 0x00000022 + SHTDN_REASON_UNKNOWN = SHTDN_REASON_MINOR_NONE + SHTDN_REASON_LEGACY_API = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED + SHTDN_REASON_VALID_BIT_MASK = 0xc0ffffff + + SHUTDOWN_NORETRY = 0x1 +) + +// Flags used for GetModuleHandleEx +const ( + GET_MODULE_HANDLE_EX_FLAG_PIN = 1 + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2 + GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4 +) + +// MUI function flag values +const ( + MUI_LANGUAGE_ID = 0x4 + MUI_LANGUAGE_NAME = 0x8 + MUI_MERGE_SYSTEM_FALLBACK = 0x10 + MUI_MERGE_USER_FALLBACK = 0x20 + MUI_UI_FALLBACK = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK + MUI_THREAD_LANGUAGES = 0x40 + MUI_CONSOLE_FILTER = 0x100 + MUI_COMPLEX_SCRIPT_FILTER = 0x200 + MUI_RESET_FILTERS = 0x001 + MUI_USER_PREFERRED_UI_LANGUAGES = 0x10 + MUI_USE_INSTALLED_LANGUAGES = 0x20 + MUI_USE_SEARCH_ALL_LANGUAGES = 0x40 + MUI_LANG_NEUTRAL_PE_FILE = 0x100 + MUI_NON_LANG_NEUTRAL_FILE = 0x200 + MUI_MACHINE_LANGUAGE_SETTINGS = 0x400 + MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL = 0x001 + MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002 + MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI = 0x004 + MUI_QUERY_TYPE = 0x001 + MUI_QUERY_CHECKSUM = 0x002 + MUI_QUERY_LANGUAGE_NAME = 0x004 + MUI_QUERY_RESOURCE_TYPES = 0x008 + MUI_FILEINFO_VERSION = 0x001 + + MUI_FULL_LANGUAGE = 0x01 + MUI_PARTIAL_LANGUAGE = 0x02 + MUI_LIP_LANGUAGE = 0x04 + MUI_LANGUAGE_INSTALLED = 0x20 + MUI_LANGUAGE_LICENSED = 0x40 +) + +// FILE_INFO_BY_HANDLE_CLASS constants for SetFileInformationByHandle/GetFileInformationByHandleEx +const ( + FileBasicInfo = 0 + FileStandardInfo = 1 + FileNameInfo = 2 + FileRenameInfo = 3 + FileDispositionInfo = 4 + FileAllocationInfo = 5 + FileEndOfFileInfo = 6 + FileStreamInfo = 7 + FileCompressionInfo = 8 + FileAttributeTagInfo = 9 + FileIdBothDirectoryInfo = 10 + FileIdBothDirectoryRestartInfo = 11 + FileIoPriorityHintInfo = 12 + FileRemoteProtocolInfo = 13 + FileFullDirectoryInfo = 14 + FileFullDirectoryRestartInfo = 15 + FileStorageInfo = 16 + FileAlignmentInfo = 17 + FileIdInfo = 18 + FileIdExtdDirectoryInfo = 19 + FileIdExtdDirectoryRestartInfo = 20 + FileDispositionInfoEx = 21 + FileRenameInfoEx = 22 + FileCaseSensitiveInfo = 23 + FileNormalizedNameInfo = 24 +) + +// LoadLibrary flags for determining from where to search for a DLL +const ( + DONT_RESOLVE_DLL_REFERENCES = 0x1 + LOAD_LIBRARY_AS_DATAFILE = 0x2 + LOAD_WITH_ALTERED_SEARCH_PATH = 0x8 + LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x10 + LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x20 + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x40 + LOAD_LIBRARY_REQUIRE_SIGNED_TARGET = 0x80 + LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR = 0x100 + LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x200 + LOAD_LIBRARY_SEARCH_USER_DIRS = 0x400 + LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x800 + LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x1000 + LOAD_LIBRARY_SAFE_CURRENT_DIRS = 0x00002000 + LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER = 0x00004000 + LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY = 0x00008000 +) + +// RegNotifyChangeKeyValue notifyFilter flags. +const ( + // REG_NOTIFY_CHANGE_NAME notifies the caller if a subkey is added or deleted. + REG_NOTIFY_CHANGE_NAME = 0x00000001 + + // REG_NOTIFY_CHANGE_ATTRIBUTES notifies the caller of changes to the attributes of the key, such as the security descriptor information. + REG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002 + + // REG_NOTIFY_CHANGE_LAST_SET notifies the caller of changes to a value of the key. This can include adding or deleting a value, or changing an existing value. + REG_NOTIFY_CHANGE_LAST_SET = 0x00000004 + + // REG_NOTIFY_CHANGE_SECURITY notifies the caller of changes to the security descriptor of the key. + REG_NOTIFY_CHANGE_SECURITY = 0x00000008 + + // REG_NOTIFY_THREAD_AGNOSTIC indicates that the lifetime of the registration must not be tied to the lifetime of the thread issuing the RegNotifyChangeKeyValue call. Note: This flag value is only supported in Windows 8 and later. + REG_NOTIFY_THREAD_AGNOSTIC = 0x10000000 +) + +type CommTimeouts struct { + ReadIntervalTimeout uint32 + ReadTotalTimeoutMultiplier uint32 + ReadTotalTimeoutConstant uint32 + WriteTotalTimeoutMultiplier uint32 + WriteTotalTimeoutConstant uint32 +} + +// NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING. +type NTUnicodeString struct { + Length uint16 + MaximumLength uint16 + Buffer *uint16 +} + +// NTString is an ANSI string for NT native APIs, corresponding to STRING. +type NTString struct { + Length uint16 + MaximumLength uint16 + Buffer *byte +} + +type LIST_ENTRY struct { + Flink *LIST_ENTRY + Blink *LIST_ENTRY +} + +type RUNTIME_FUNCTION struct { + BeginAddress uint32 + EndAddress uint32 + UnwindData uint32 +} + +type LDR_DATA_TABLE_ENTRY struct { + reserved1 [2]uintptr + InMemoryOrderLinks LIST_ENTRY + reserved2 [2]uintptr + DllBase uintptr + reserved3 [2]uintptr + FullDllName NTUnicodeString + reserved4 [8]byte + reserved5 [3]uintptr + reserved6 uintptr + TimeDateStamp uint32 +} + +type PEB_LDR_DATA struct { + reserved1 [8]byte + reserved2 [3]uintptr + InMemoryOrderModuleList LIST_ENTRY +} + +type CURDIR struct { + DosPath NTUnicodeString + Handle Handle +} + +type RTL_DRIVE_LETTER_CURDIR struct { + Flags uint16 + Length uint16 + TimeStamp uint32 + DosPath NTString +} + +type RTL_USER_PROCESS_PARAMETERS struct { + MaximumLength, Length uint32 + + Flags, DebugFlags uint32 + + ConsoleHandle Handle + ConsoleFlags uint32 + StandardInput, StandardOutput, StandardError Handle + + CurrentDirectory CURDIR + DllPath NTUnicodeString + ImagePathName NTUnicodeString + CommandLine NTUnicodeString + Environment unsafe.Pointer + + StartingX, StartingY, CountX, CountY, CountCharsX, CountCharsY, FillAttribute uint32 + + WindowFlags, ShowWindowFlags uint32 + WindowTitle, DesktopInfo, ShellInfo, RuntimeData NTUnicodeString + CurrentDirectories [32]RTL_DRIVE_LETTER_CURDIR + + EnvironmentSize, EnvironmentVersion uintptr + + PackageDependencyData unsafe.Pointer + ProcessGroupId uint32 + LoaderThreads uint32 + + RedirectionDllName NTUnicodeString + HeapPartitionName NTUnicodeString + DefaultThreadpoolCpuSetMasks uintptr + DefaultThreadpoolCpuSetMaskCount uint32 +} + +type PEB struct { + reserved1 [2]byte + BeingDebugged byte + BitField byte + reserved3 uintptr + ImageBaseAddress uintptr + Ldr *PEB_LDR_DATA + ProcessParameters *RTL_USER_PROCESS_PARAMETERS + reserved4 [3]uintptr + AtlThunkSListPtr uintptr + reserved5 uintptr + reserved6 uint32 + reserved7 uintptr + reserved8 uint32 + AtlThunkSListPtr32 uint32 + reserved9 [45]uintptr + reserved10 [96]byte + PostProcessInitRoutine uintptr + reserved11 [128]byte + reserved12 [1]uintptr + SessionId uint32 +} + +type OBJECT_ATTRIBUTES struct { + Length uint32 + RootDirectory Handle + ObjectName *NTUnicodeString + Attributes uint32 + SecurityDescriptor *SECURITY_DESCRIPTOR + SecurityQoS *SECURITY_QUALITY_OF_SERVICE +} + +// Values for the Attributes member of OBJECT_ATTRIBUTES. +const ( + OBJ_INHERIT = 0x00000002 + OBJ_PERMANENT = 0x00000010 + OBJ_EXCLUSIVE = 0x00000020 + OBJ_CASE_INSENSITIVE = 0x00000040 + OBJ_OPENIF = 0x00000080 + OBJ_OPENLINK = 0x00000100 + OBJ_KERNEL_HANDLE = 0x00000200 + OBJ_FORCE_ACCESS_CHECK = 0x00000400 + OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800 + OBJ_DONT_REPARSE = 0x00001000 + OBJ_VALID_ATTRIBUTES = 0x00001FF2 +) + +type IO_STATUS_BLOCK struct { + Status NTStatus + Information uintptr +} + +type RTLP_CURDIR_REF struct { + RefCount int32 + Handle Handle +} + +type RTL_RELATIVE_NAME struct { + RelativeName NTUnicodeString + ContainingDirectory Handle + CurDirRef *RTLP_CURDIR_REF +} + +const ( + // CreateDisposition flags for NtCreateFile and NtCreateNamedPipeFile. + FILE_SUPERSEDE = 0x00000000 + FILE_OPEN = 0x00000001 + FILE_CREATE = 0x00000002 + FILE_OPEN_IF = 0x00000003 + FILE_OVERWRITE = 0x00000004 + FILE_OVERWRITE_IF = 0x00000005 + FILE_MAXIMUM_DISPOSITION = 0x00000005 + + // CreateOptions flags for NtCreateFile and NtCreateNamedPipeFile. + FILE_DIRECTORY_FILE = 0x00000001 + FILE_WRITE_THROUGH = 0x00000002 + FILE_SEQUENTIAL_ONLY = 0x00000004 + FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008 + FILE_SYNCHRONOUS_IO_ALERT = 0x00000010 + FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020 + FILE_NON_DIRECTORY_FILE = 0x00000040 + FILE_CREATE_TREE_CONNECTION = 0x00000080 + FILE_COMPLETE_IF_OPLOCKED = 0x00000100 + FILE_NO_EA_KNOWLEDGE = 0x00000200 + FILE_OPEN_REMOTE_INSTANCE = 0x00000400 + FILE_RANDOM_ACCESS = 0x00000800 + FILE_DELETE_ON_CLOSE = 0x00001000 + FILE_OPEN_BY_FILE_ID = 0x00002000 + FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000 + FILE_NO_COMPRESSION = 0x00008000 + FILE_OPEN_REQUIRING_OPLOCK = 0x00010000 + FILE_DISALLOW_EXCLUSIVE = 0x00020000 + FILE_RESERVE_OPFILTER = 0x00100000 + FILE_OPEN_REPARSE_POINT = 0x00200000 + FILE_OPEN_NO_RECALL = 0x00400000 + FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000 + + // Parameter constants for NtCreateNamedPipeFile. + + FILE_PIPE_BYTE_STREAM_TYPE = 0x00000000 + FILE_PIPE_MESSAGE_TYPE = 0x00000001 + + FILE_PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000 + FILE_PIPE_REJECT_REMOTE_CLIENTS = 0x00000002 + + FILE_PIPE_TYPE_VALID_MASK = 0x00000003 + + FILE_PIPE_BYTE_STREAM_MODE = 0x00000000 + FILE_PIPE_MESSAGE_MODE = 0x00000001 + + FILE_PIPE_QUEUE_OPERATION = 0x00000000 + FILE_PIPE_COMPLETE_OPERATION = 0x00000001 + + FILE_PIPE_INBOUND = 0x00000000 + FILE_PIPE_OUTBOUND = 0x00000001 + FILE_PIPE_FULL_DUPLEX = 0x00000002 + + FILE_PIPE_DISCONNECTED_STATE = 0x00000001 + FILE_PIPE_LISTENING_STATE = 0x00000002 + FILE_PIPE_CONNECTED_STATE = 0x00000003 + FILE_PIPE_CLOSING_STATE = 0x00000004 + + FILE_PIPE_CLIENT_END = 0x00000000 + FILE_PIPE_SERVER_END = 0x00000001 +) + +const ( + // FileInformationClass for NtSetInformationFile + FileBasicInformation = 4 + FileRenameInformation = 10 + FileDispositionInformation = 13 + FilePositionInformation = 14 + FileEndOfFileInformation = 20 + FileValidDataLengthInformation = 39 + FileShortNameInformation = 40 + FileIoPriorityHintInformation = 43 + FileReplaceCompletionInformation = 61 + FileDispositionInformationEx = 64 + FileCaseSensitiveInformation = 71 + FileLinkInformation = 72 + FileCaseSensitiveInformationForceAccessCheck = 75 + FileKnownFolderInformation = 76 + + // Flags for FILE_RENAME_INFORMATION + FILE_RENAME_REPLACE_IF_EXISTS = 0x00000001 + FILE_RENAME_POSIX_SEMANTICS = 0x00000002 + FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE = 0x00000004 + FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008 + FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE = 0x00000010 + FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE = 0x00000020 + FILE_RENAME_PRESERVE_AVAILABLE_SPACE = 0x00000030 + FILE_RENAME_IGNORE_READONLY_ATTRIBUTE = 0x00000040 + FILE_RENAME_FORCE_RESIZE_TARGET_SR = 0x00000080 + FILE_RENAME_FORCE_RESIZE_SOURCE_SR = 0x00000100 + FILE_RENAME_FORCE_RESIZE_SR = 0x00000180 + + // Flags for FILE_DISPOSITION_INFORMATION_EX + FILE_DISPOSITION_DO_NOT_DELETE = 0x00000000 + FILE_DISPOSITION_DELETE = 0x00000001 + FILE_DISPOSITION_POSIX_SEMANTICS = 0x00000002 + FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004 + FILE_DISPOSITION_ON_CLOSE = 0x00000008 + FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010 + + // Flags for FILE_CASE_SENSITIVE_INFORMATION + FILE_CS_FLAG_CASE_SENSITIVE_DIR = 0x00000001 + + // Flags for FILE_LINK_INFORMATION + FILE_LINK_REPLACE_IF_EXISTS = 0x00000001 + FILE_LINK_POSIX_SEMANTICS = 0x00000002 + FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008 + FILE_LINK_NO_INCREASE_AVAILABLE_SPACE = 0x00000010 + FILE_LINK_NO_DECREASE_AVAILABLE_SPACE = 0x00000020 + FILE_LINK_PRESERVE_AVAILABLE_SPACE = 0x00000030 + FILE_LINK_IGNORE_READONLY_ATTRIBUTE = 0x00000040 + FILE_LINK_FORCE_RESIZE_TARGET_SR = 0x00000080 + FILE_LINK_FORCE_RESIZE_SOURCE_SR = 0x00000100 + FILE_LINK_FORCE_RESIZE_SR = 0x00000180 +) + +// ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess. +const ( + ProcessBasicInformation = iota + ProcessQuotaLimits + ProcessIoCounters + ProcessVmCounters + ProcessTimes + ProcessBasePriority + ProcessRaisePriority + ProcessDebugPort + ProcessExceptionPort + ProcessAccessToken + ProcessLdtInformation + ProcessLdtSize + ProcessDefaultHardErrorMode + ProcessIoPortHandlers + ProcessPooledUsageAndLimits + ProcessWorkingSetWatch + ProcessUserModeIOPL + ProcessEnableAlignmentFaultFixup + ProcessPriorityClass + ProcessWx86Information + ProcessHandleCount + ProcessAffinityMask + ProcessPriorityBoost + ProcessDeviceMap + ProcessSessionInformation + ProcessForegroundInformation + ProcessWow64Information + ProcessImageFileName + ProcessLUIDDeviceMapsEnabled + ProcessBreakOnTermination + ProcessDebugObjectHandle + ProcessDebugFlags + ProcessHandleTracing + ProcessIoPriority + ProcessExecuteFlags + ProcessTlsInformation + ProcessCookie + ProcessImageInformation + ProcessCycleTime + ProcessPagePriority + ProcessInstrumentationCallback + ProcessThreadStackAllocation + ProcessWorkingSetWatchEx + ProcessImageFileNameWin32 + ProcessImageFileMapping + ProcessAffinityUpdateMode + ProcessMemoryAllocationMode + ProcessGroupInformation + ProcessTokenVirtualizationEnabled + ProcessConsoleHostProcess + ProcessWindowInformation + ProcessHandleInformation + ProcessMitigationPolicy + ProcessDynamicFunctionTableInformation + ProcessHandleCheckingMode + ProcessKeepAliveCount + ProcessRevokeFileHandles + ProcessWorkingSetControl + ProcessHandleTable + ProcessCheckStackExtentsMode + ProcessCommandLineInformation + ProcessProtectionInformation + ProcessMemoryExhaustion + ProcessFaultInformation + ProcessTelemetryIdInformation + ProcessCommitReleaseInformation + ProcessDefaultCpuSetsInformation + ProcessAllowedCpuSetsInformation + ProcessSubsystemProcess + ProcessJobMemoryInformation + ProcessInPrivate + ProcessRaiseUMExceptionOnInvalidHandleClose + ProcessIumChallengeResponse + ProcessChildProcessInformation + ProcessHighGraphicsPriorityInformation + ProcessSubsystemInformation + ProcessEnergyValues + ProcessActivityThrottleState + ProcessActivityThrottlePolicy + ProcessWin32kSyscallFilterInformation + ProcessDisableSystemAllowedCpuSets + ProcessWakeInformation + ProcessEnergyTrackingState + ProcessManageWritesToExecutableMemory + ProcessCaptureTrustletLiveDump + ProcessTelemetryCoverage + ProcessEnclaveInformation + ProcessEnableReadWriteVmLogging + ProcessUptimeInformation + ProcessImageSection + ProcessDebugAuthInformation + ProcessSystemResourceManagement + ProcessSequenceNumber + ProcessLoaderDetour + ProcessSecurityDomainInformation + ProcessCombineSecurityDomainsInformation + ProcessEnableLogging + ProcessLeapSecondInformation + ProcessFiberShadowStackAllocation + ProcessFreeFiberShadowStackAllocation + ProcessAltSystemCallInformation + ProcessDynamicEHContinuationTargets + ProcessDynamicEnforcedCetCompatibleRanges +) + +type PROCESS_BASIC_INFORMATION struct { + ExitStatus NTStatus + PebBaseAddress *PEB + AffinityMask uintptr + BasePriority int32 + UniqueProcessId uintptr + InheritedFromUniqueProcessId uintptr +} + +type SYSTEM_PROCESS_INFORMATION struct { + NextEntryOffset uint32 + NumberOfThreads uint32 + WorkingSetPrivateSize int64 + HardFaultCount uint32 + NumberOfThreadsHighWatermark uint32 + CycleTime uint64 + CreateTime int64 + UserTime int64 + KernelTime int64 + ImageName NTUnicodeString + BasePriority int32 + UniqueProcessID uintptr + InheritedFromUniqueProcessID uintptr + HandleCount uint32 + SessionID uint32 + UniqueProcessKey *uint32 + PeakVirtualSize uintptr + VirtualSize uintptr + PageFaultCount uint32 + PeakWorkingSetSize uintptr + WorkingSetSize uintptr + QuotaPeakPagedPoolUsage uintptr + QuotaPagedPoolUsage uintptr + QuotaPeakNonPagedPoolUsage uintptr + QuotaNonPagedPoolUsage uintptr + PagefileUsage uintptr + PeakPagefileUsage uintptr + PrivatePageCount uintptr + ReadOperationCount int64 + WriteOperationCount int64 + OtherOperationCount int64 + ReadTransferCount int64 + WriteTransferCount int64 + OtherTransferCount int64 +} + +// SystemInformationClasses for NtQuerySystemInformation and NtSetSystemInformation +const ( + SystemBasicInformation = iota + SystemProcessorInformation + SystemPerformanceInformation + SystemTimeOfDayInformation + SystemPathInformation + SystemProcessInformation + SystemCallCountInformation + SystemDeviceInformation + SystemProcessorPerformanceInformation + SystemFlagsInformation + SystemCallTimeInformation + SystemModuleInformation + SystemLocksInformation + SystemStackTraceInformation + SystemPagedPoolInformation + SystemNonPagedPoolInformation + SystemHandleInformation + SystemObjectInformation + SystemPageFileInformation + SystemVdmInstemulInformation + SystemVdmBopInformation + SystemFileCacheInformation + SystemPoolTagInformation + SystemInterruptInformation + SystemDpcBehaviorInformation + SystemFullMemoryInformation + SystemLoadGdiDriverInformation + SystemUnloadGdiDriverInformation + SystemTimeAdjustmentInformation + SystemSummaryMemoryInformation + SystemMirrorMemoryInformation + SystemPerformanceTraceInformation + systemObsolete0 + SystemExceptionInformation + SystemCrashDumpStateInformation + SystemKernelDebuggerInformation + SystemContextSwitchInformation + SystemRegistryQuotaInformation + SystemExtendServiceTableInformation + SystemPrioritySeperation + SystemVerifierAddDriverInformation + SystemVerifierRemoveDriverInformation + SystemProcessorIdleInformation + SystemLegacyDriverInformation + SystemCurrentTimeZoneInformation + SystemLookasideInformation + SystemTimeSlipNotification + SystemSessionCreate + SystemSessionDetach + SystemSessionInformation + SystemRangeStartInformation + SystemVerifierInformation + SystemVerifierThunkExtend + SystemSessionProcessInformation + SystemLoadGdiDriverInSystemSpace + SystemNumaProcessorMap + SystemPrefetcherInformation + SystemExtendedProcessInformation + SystemRecommendedSharedDataAlignment + SystemComPlusPackage + SystemNumaAvailableMemory + SystemProcessorPowerInformation + SystemEmulationBasicInformation + SystemEmulationProcessorInformation + SystemExtendedHandleInformation + SystemLostDelayedWriteInformation + SystemBigPoolInformation + SystemSessionPoolTagInformation + SystemSessionMappedViewInformation + SystemHotpatchInformation + SystemObjectSecurityMode + SystemWatchdogTimerHandler + SystemWatchdogTimerInformation + SystemLogicalProcessorInformation + SystemWow64SharedInformationObsolete + SystemRegisterFirmwareTableInformationHandler + SystemFirmwareTableInformation + SystemModuleInformationEx + SystemVerifierTriageInformation + SystemSuperfetchInformation + SystemMemoryListInformation + SystemFileCacheInformationEx + SystemThreadPriorityClientIdInformation + SystemProcessorIdleCycleTimeInformation + SystemVerifierCancellationInformation + SystemProcessorPowerInformationEx + SystemRefTraceInformation + SystemSpecialPoolInformation + SystemProcessIdInformation + SystemErrorPortInformation + SystemBootEnvironmentInformation + SystemHypervisorInformation + SystemVerifierInformationEx + SystemTimeZoneInformation + SystemImageFileExecutionOptionsInformation + SystemCoverageInformation + SystemPrefetchPatchInformation + SystemVerifierFaultsInformation + SystemSystemPartitionInformation + SystemSystemDiskInformation + SystemProcessorPerformanceDistribution + SystemNumaProximityNodeInformation + SystemDynamicTimeZoneInformation + SystemCodeIntegrityInformation + SystemProcessorMicrocodeUpdateInformation + SystemProcessorBrandString + SystemVirtualAddressInformation + SystemLogicalProcessorAndGroupInformation + SystemProcessorCycleTimeInformation + SystemStoreInformation + SystemRegistryAppendString + SystemAitSamplingValue + SystemVhdBootInformation + SystemCpuQuotaInformation + SystemNativeBasicInformation + systemSpare1 + SystemLowPriorityIoInformation + SystemTpmBootEntropyInformation + SystemVerifierCountersInformation + SystemPagedPoolInformationEx + SystemSystemPtesInformationEx + SystemNodeDistanceInformation + SystemAcpiAuditInformation + SystemBasicPerformanceInformation + SystemQueryPerformanceCounterInformation + SystemSessionBigPoolInformation + SystemBootGraphicsInformation + SystemScrubPhysicalMemoryInformation + SystemBadPageInformation + SystemProcessorProfileControlArea + SystemCombinePhysicalMemoryInformation + SystemEntropyInterruptTimingCallback + SystemConsoleInformation + SystemPlatformBinaryInformation + SystemThrottleNotificationInformation + SystemHypervisorProcessorCountInformation + SystemDeviceDataInformation + SystemDeviceDataEnumerationInformation + SystemMemoryTopologyInformation + SystemMemoryChannelInformation + SystemBootLogoInformation + SystemProcessorPerformanceInformationEx + systemSpare0 + SystemSecureBootPolicyInformation + SystemPageFileInformationEx + SystemSecureBootInformation + SystemEntropyInterruptTimingRawInformation + SystemPortableWorkspaceEfiLauncherInformation + SystemFullProcessInformation + SystemKernelDebuggerInformationEx + SystemBootMetadataInformation + SystemSoftRebootInformation + SystemElamCertificateInformation + SystemOfflineDumpConfigInformation + SystemProcessorFeaturesInformation + SystemRegistryReconciliationInformation + SystemEdidInformation + SystemManufacturingInformation + SystemEnergyEstimationConfigInformation + SystemHypervisorDetailInformation + SystemProcessorCycleStatsInformation + SystemVmGenerationCountInformation + SystemTrustedPlatformModuleInformation + SystemKernelDebuggerFlags + SystemCodeIntegrityPolicyInformation + SystemIsolatedUserModeInformation + SystemHardwareSecurityTestInterfaceResultsInformation + SystemSingleModuleInformation + SystemAllowedCpuSetsInformation + SystemDmaProtectionInformation + SystemInterruptCpuSetsInformation + SystemSecureBootPolicyFullInformation + SystemCodeIntegrityPolicyFullInformation + SystemAffinitizedInterruptProcessorInformation + SystemRootSiloInformation +) + +type RTL_PROCESS_MODULE_INFORMATION struct { + Section Handle + MappedBase uintptr + ImageBase uintptr + ImageSize uint32 + Flags uint32 + LoadOrderIndex uint16 + InitOrderIndex uint16 + LoadCount uint16 + OffsetToFileName uint16 + FullPathName [256]byte +} + +type RTL_PROCESS_MODULES struct { + NumberOfModules uint32 + Modules [1]RTL_PROCESS_MODULE_INFORMATION +} + +// Constants for LocalAlloc flags. +const ( + LMEM_FIXED = 0x0 + LMEM_MOVEABLE = 0x2 + LMEM_NOCOMPACT = 0x10 + LMEM_NODISCARD = 0x20 + LMEM_ZEROINIT = 0x40 + LMEM_MODIFY = 0x80 + LMEM_DISCARDABLE = 0xf00 + LMEM_VALID_FLAGS = 0xf72 + LMEM_INVALID_HANDLE = 0x8000 + LHND = LMEM_MOVEABLE | LMEM_ZEROINIT + LPTR = LMEM_FIXED | LMEM_ZEROINIT + NONZEROLHND = LMEM_MOVEABLE + NONZEROLPTR = LMEM_FIXED +) + +// Constants for the CreateNamedPipe-family of functions. +const ( + PIPE_ACCESS_INBOUND = 0x1 + PIPE_ACCESS_OUTBOUND = 0x2 + PIPE_ACCESS_DUPLEX = 0x3 + + PIPE_CLIENT_END = 0x0 + PIPE_SERVER_END = 0x1 + + PIPE_WAIT = 0x0 + PIPE_NOWAIT = 0x1 + PIPE_READMODE_BYTE = 0x0 + PIPE_READMODE_MESSAGE = 0x2 + PIPE_TYPE_BYTE = 0x0 + PIPE_TYPE_MESSAGE = 0x4 + PIPE_ACCEPT_REMOTE_CLIENTS = 0x0 + PIPE_REJECT_REMOTE_CLIENTS = 0x8 + + PIPE_UNLIMITED_INSTANCES = 255 +) + +// Constants for security attributes when opening named pipes. +const ( + SECURITY_ANONYMOUS = SecurityAnonymous << 16 + SECURITY_IDENTIFICATION = SecurityIdentification << 16 + SECURITY_IMPERSONATION = SecurityImpersonation << 16 + SECURITY_DELEGATION = SecurityDelegation << 16 + + SECURITY_CONTEXT_TRACKING = 0x40000 + SECURITY_EFFECTIVE_ONLY = 0x80000 + + SECURITY_SQOS_PRESENT = 0x100000 + SECURITY_VALID_SQOS_FLAGS = 0x1f0000 +) + +// ResourceID represents a 16-bit resource identifier, traditionally created with the MAKEINTRESOURCE macro. +type ResourceID uint16 + +// ResourceIDOrString must be either a ResourceID, to specify a resource or resource type by ID, +// or a string, to specify a resource or resource type by name. +type ResourceIDOrString interface{} + +// Predefined resource names and types. +var ( + // Predefined names. + CREATEPROCESS_MANIFEST_RESOURCE_ID ResourceID = 1 + ISOLATIONAWARE_MANIFEST_RESOURCE_ID ResourceID = 2 + ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID ResourceID = 3 + ISOLATIONPOLICY_MANIFEST_RESOURCE_ID ResourceID = 4 + ISOLATIONPOLICY_BROWSER_MANIFEST_RESOURCE_ID ResourceID = 5 + MINIMUM_RESERVED_MANIFEST_RESOURCE_ID ResourceID = 1 // inclusive + MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID ResourceID = 16 // inclusive + + // Predefined types. + RT_CURSOR ResourceID = 1 + RT_BITMAP ResourceID = 2 + RT_ICON ResourceID = 3 + RT_MENU ResourceID = 4 + RT_DIALOG ResourceID = 5 + RT_STRING ResourceID = 6 + RT_FONTDIR ResourceID = 7 + RT_FONT ResourceID = 8 + RT_ACCELERATOR ResourceID = 9 + RT_RCDATA ResourceID = 10 + RT_MESSAGETABLE ResourceID = 11 + RT_GROUP_CURSOR ResourceID = 12 + RT_GROUP_ICON ResourceID = 14 + RT_VERSION ResourceID = 16 + RT_DLGINCLUDE ResourceID = 17 + RT_PLUGPLAY ResourceID = 19 + RT_VXD ResourceID = 20 + RT_ANICURSOR ResourceID = 21 + RT_ANIICON ResourceID = 22 + RT_HTML ResourceID = 23 + RT_MANIFEST ResourceID = 24 +) + +type VS_FIXEDFILEINFO struct { + Signature uint32 + StrucVersion uint32 + FileVersionMS uint32 + FileVersionLS uint32 + ProductVersionMS uint32 + ProductVersionLS uint32 + FileFlagsMask uint32 + FileFlags uint32 + FileOS uint32 + FileType uint32 + FileSubtype uint32 + FileDateMS uint32 + FileDateLS uint32 +} + +type COAUTHIDENTITY struct { + User *uint16 + UserLength uint32 + Domain *uint16 + DomainLength uint32 + Password *uint16 + PasswordLength uint32 + Flags uint32 +} + +type COAUTHINFO struct { + AuthnSvc uint32 + AuthzSvc uint32 + ServerPrincName *uint16 + AuthnLevel uint32 + ImpersonationLevel uint32 + AuthIdentityData *COAUTHIDENTITY + Capabilities uint32 +} + +type COSERVERINFO struct { + Reserved1 uint32 + Aame *uint16 + AuthInfo *COAUTHINFO + Reserved2 uint32 +} + +type BIND_OPTS3 struct { + CbStruct uint32 + Flags uint32 + Mode uint32 + TickCountDeadline uint32 + TrackFlags uint32 + ClassContext uint32 + Locale uint32 + ServerInfo *COSERVERINFO + Hwnd HWND +} + +const ( + CLSCTX_INPROC_SERVER = 0x1 + CLSCTX_INPROC_HANDLER = 0x2 + CLSCTX_LOCAL_SERVER = 0x4 + CLSCTX_INPROC_SERVER16 = 0x8 + CLSCTX_REMOTE_SERVER = 0x10 + CLSCTX_INPROC_HANDLER16 = 0x20 + CLSCTX_RESERVED1 = 0x40 + CLSCTX_RESERVED2 = 0x80 + CLSCTX_RESERVED3 = 0x100 + CLSCTX_RESERVED4 = 0x200 + CLSCTX_NO_CODE_DOWNLOAD = 0x400 + CLSCTX_RESERVED5 = 0x800 + CLSCTX_NO_CUSTOM_MARSHAL = 0x1000 + CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000 + CLSCTX_NO_FAILURE_LOG = 0x4000 + CLSCTX_DISABLE_AAA = 0x8000 + CLSCTX_ENABLE_AAA = 0x10000 + CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000 + CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000 + CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000 + CLSCTX_ENABLE_CLOAKING = 0x100000 + CLSCTX_APPCONTAINER = 0x400000 + CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000 + CLSCTX_PS_DLL = 0x80000000 + + COINIT_MULTITHREADED = 0x0 + COINIT_APARTMENTTHREADED = 0x2 + COINIT_DISABLE_OLE1DDE = 0x4 + COINIT_SPEED_OVER_MEMORY = 0x8 +) + +// Flag for QueryFullProcessImageName. +const PROCESS_NAME_NATIVE = 1 + +type ModuleInfo struct { + BaseOfDll uintptr + SizeOfImage uint32 + EntryPoint uintptr +} + +const ALL_PROCESSOR_GROUPS = 0xFFFF + +type Rect struct { + Left int32 + Top int32 + Right int32 + Bottom int32 +} + +type GUIThreadInfo struct { + Size uint32 + Flags uint32 + Active HWND + Focus HWND + Capture HWND + MenuOwner HWND + MoveSize HWND + CaretHandle HWND + CaretRect Rect +} + +const ( + DWMWA_NCRENDERING_ENABLED = 1 + DWMWA_NCRENDERING_POLICY = 2 + DWMWA_TRANSITIONS_FORCEDISABLED = 3 + DWMWA_ALLOW_NCPAINT = 4 + DWMWA_CAPTION_BUTTON_BOUNDS = 5 + DWMWA_NONCLIENT_RTL_LAYOUT = 6 + DWMWA_FORCE_ICONIC_REPRESENTATION = 7 + DWMWA_FLIP3D_POLICY = 8 + DWMWA_EXTENDED_FRAME_BOUNDS = 9 + DWMWA_HAS_ICONIC_BITMAP = 10 + DWMWA_DISALLOW_PEEK = 11 + DWMWA_EXCLUDED_FROM_PEEK = 12 + DWMWA_CLOAK = 13 + DWMWA_CLOAKED = 14 + DWMWA_FREEZE_REPRESENTATION = 15 + DWMWA_PASSIVE_UPDATE_MODE = 16 + DWMWA_USE_HOSTBACKDROPBRUSH = 17 + DWMWA_USE_IMMERSIVE_DARK_MODE = 20 + DWMWA_WINDOW_CORNER_PREFERENCE = 33 + DWMWA_BORDER_COLOR = 34 + DWMWA_CAPTION_COLOR = 35 + DWMWA_TEXT_COLOR = 36 + DWMWA_VISIBLE_FRAME_BORDER_THICKNESS = 37 +) + +type WSAQUERYSET struct { + Size uint32 + ServiceInstanceName *uint16 + ServiceClassId *GUID + Version *WSAVersion + Comment *uint16 + NameSpace uint32 + NSProviderId *GUID + Context *uint16 + NumberOfProtocols uint32 + AfpProtocols *AFProtocols + QueryString *uint16 + NumberOfCsAddrs uint32 + SaBuffer *CSAddrInfo + OutputFlags uint32 + Blob *BLOB +} + +type WSAVersion struct { + Version uint32 + EnumerationOfComparison int32 +} + +type AFProtocols struct { + AddressFamily int32 + Protocol int32 +} + +type CSAddrInfo struct { + LocalAddr SocketAddress + RemoteAddr SocketAddress + SocketType int32 + Protocol int32 +} + +type BLOB struct { + Size uint32 + BlobData *byte +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_386.go b/vendor/golang.org/x/sys/windows/types_windows_386.go new file mode 100644 index 0000000000000..8bce3e2fc1b0f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_386.go @@ -0,0 +1,35 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte +} + +type Servent struct { + Name *byte + Aliases **byte + Port uint16 + Proto *byte +} + +type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { + PerProcessUserTimeLimit int64 + PerJobUserTimeLimit int64 + LimitFlags uint32 + MinimumWorkingSetSize uintptr + MaximumWorkingSetSize uintptr + ActiveProcessLimit uint32 + Affinity uintptr + PriorityClass uint32 + SchedulingClass uint32 + _ uint32 // pad to 8 byte boundary +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_amd64.go b/vendor/golang.org/x/sys/windows/types_windows_amd64.go new file mode 100644 index 0000000000000..fdddc0c70abd0 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_amd64.go @@ -0,0 +1,34 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte +} + +type Servent struct { + Name *byte + Aliases **byte + Proto *byte + Port uint16 +} + +type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { + PerProcessUserTimeLimit int64 + PerJobUserTimeLimit int64 + LimitFlags uint32 + MinimumWorkingSetSize uintptr + MaximumWorkingSetSize uintptr + ActiveProcessLimit uint32 + Affinity uintptr + PriorityClass uint32 + SchedulingClass uint32 +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_arm.go b/vendor/golang.org/x/sys/windows/types_windows_arm.go new file mode 100644 index 0000000000000..321872c3e04fa --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_arm.go @@ -0,0 +1,35 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte +} + +type Servent struct { + Name *byte + Aliases **byte + Port uint16 + Proto *byte +} + +type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { + PerProcessUserTimeLimit int64 + PerJobUserTimeLimit int64 + LimitFlags uint32 + MinimumWorkingSetSize uintptr + MaximumWorkingSetSize uintptr + ActiveProcessLimit uint32 + Affinity uintptr + PriorityClass uint32 + SchedulingClass uint32 + _ uint32 // pad to 8 byte boundary +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_arm64.go b/vendor/golang.org/x/sys/windows/types_windows_arm64.go new file mode 100644 index 0000000000000..fdddc0c70abd0 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_arm64.go @@ -0,0 +1,34 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte +} + +type Servent struct { + Name *byte + Aliases **byte + Proto *byte + Port uint16 +} + +type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { + PerProcessUserTimeLimit int64 + PerJobUserTimeLimit int64 + LimitFlags uint32 + MinimumWorkingSetSize uintptr + MaximumWorkingSetSize uintptr + ActiveProcessLimit uint32 + Affinity uintptr + PriorityClass uint32 + SchedulingClass uint32 +} diff --git a/vendor/golang.org/x/sys/windows/zerrors_windows.go b/vendor/golang.org/x/sys/windows/zerrors_windows.go new file mode 100644 index 0000000000000..0cf658fbd5d77 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zerrors_windows.go @@ -0,0 +1,9468 @@ +// Code generated by 'mkerrors.bash'; DO NOT EDIT. + +package windows + +import "syscall" + +const ( + FACILITY_NULL = 0 + FACILITY_RPC = 1 + FACILITY_DISPATCH = 2 + FACILITY_STORAGE = 3 + FACILITY_ITF = 4 + FACILITY_WIN32 = 7 + FACILITY_WINDOWS = 8 + FACILITY_SSPI = 9 + FACILITY_SECURITY = 9 + FACILITY_CONTROL = 10 + FACILITY_CERT = 11 + FACILITY_INTERNET = 12 + FACILITY_MEDIASERVER = 13 + FACILITY_MSMQ = 14 + FACILITY_SETUPAPI = 15 + FACILITY_SCARD = 16 + FACILITY_COMPLUS = 17 + FACILITY_AAF = 18 + FACILITY_URT = 19 + FACILITY_ACS = 20 + FACILITY_DPLAY = 21 + FACILITY_UMI = 22 + FACILITY_SXS = 23 + FACILITY_WINDOWS_CE = 24 + FACILITY_HTTP = 25 + FACILITY_USERMODE_COMMONLOG = 26 + FACILITY_WER = 27 + FACILITY_USERMODE_FILTER_MANAGER = 31 + FACILITY_BACKGROUNDCOPY = 32 + FACILITY_CONFIGURATION = 33 + FACILITY_WIA = 33 + FACILITY_STATE_MANAGEMENT = 34 + FACILITY_METADIRECTORY = 35 + FACILITY_WINDOWSUPDATE = 36 + FACILITY_DIRECTORYSERVICE = 37 + FACILITY_GRAPHICS = 38 + FACILITY_SHELL = 39 + FACILITY_NAP = 39 + FACILITY_TPM_SERVICES = 40 + FACILITY_TPM_SOFTWARE = 41 + FACILITY_UI = 42 + FACILITY_XAML = 43 + FACILITY_ACTION_QUEUE = 44 + FACILITY_PLA = 48 + FACILITY_WINDOWS_SETUP = 48 + FACILITY_FVE = 49 + FACILITY_FWP = 50 + FACILITY_WINRM = 51 + FACILITY_NDIS = 52 + FACILITY_USERMODE_HYPERVISOR = 53 + FACILITY_CMI = 54 + FACILITY_USERMODE_VIRTUALIZATION = 55 + FACILITY_USERMODE_VOLMGR = 56 + FACILITY_BCD = 57 + FACILITY_USERMODE_VHD = 58 + FACILITY_USERMODE_HNS = 59 + FACILITY_SDIAG = 60 + FACILITY_WEBSERVICES = 61 + FACILITY_WINPE = 61 + FACILITY_WPN = 62 + FACILITY_WINDOWS_STORE = 63 + FACILITY_INPUT = 64 + FACILITY_EAP = 66 + FACILITY_WINDOWS_DEFENDER = 80 + FACILITY_OPC = 81 + FACILITY_XPS = 82 + FACILITY_MBN = 84 + FACILITY_POWERSHELL = 84 + FACILITY_RAS = 83 + FACILITY_P2P_INT = 98 + FACILITY_P2P = 99 + FACILITY_DAF = 100 + FACILITY_BLUETOOTH_ATT = 101 + FACILITY_AUDIO = 102 + FACILITY_STATEREPOSITORY = 103 + FACILITY_VISUALCPP = 109 + FACILITY_SCRIPT = 112 + FACILITY_PARSE = 113 + FACILITY_BLB = 120 + FACILITY_BLB_CLI = 121 + FACILITY_WSBAPP = 122 + FACILITY_BLBUI = 128 + FACILITY_USN = 129 + FACILITY_USERMODE_VOLSNAP = 130 + FACILITY_TIERING = 131 + FACILITY_WSB_ONLINE = 133 + FACILITY_ONLINE_ID = 134 + FACILITY_DEVICE_UPDATE_AGENT = 135 + FACILITY_DRVSERVICING = 136 + FACILITY_DLS = 153 + FACILITY_DELIVERY_OPTIMIZATION = 208 + FACILITY_USERMODE_SPACES = 231 + FACILITY_USER_MODE_SECURITY_CORE = 232 + FACILITY_USERMODE_LICENSING = 234 + FACILITY_SOS = 160 + FACILITY_DEBUGGERS = 176 + FACILITY_SPP = 256 + FACILITY_RESTORE = 256 + FACILITY_DMSERVER = 256 + FACILITY_DEPLOYMENT_SERVICES_SERVER = 257 + FACILITY_DEPLOYMENT_SERVICES_IMAGING = 258 + FACILITY_DEPLOYMENT_SERVICES_MANAGEMENT = 259 + FACILITY_DEPLOYMENT_SERVICES_UTIL = 260 + FACILITY_DEPLOYMENT_SERVICES_BINLSVC = 261 + FACILITY_DEPLOYMENT_SERVICES_PXE = 263 + FACILITY_DEPLOYMENT_SERVICES_TFTP = 264 + FACILITY_DEPLOYMENT_SERVICES_TRANSPORT_MANAGEMENT = 272 + FACILITY_DEPLOYMENT_SERVICES_DRIVER_PROVISIONING = 278 + FACILITY_DEPLOYMENT_SERVICES_MULTICAST_SERVER = 289 + FACILITY_DEPLOYMENT_SERVICES_MULTICAST_CLIENT = 290 + FACILITY_DEPLOYMENT_SERVICES_CONTENT_PROVIDER = 293 + FACILITY_LINGUISTIC_SERVICES = 305 + FACILITY_AUDIOSTREAMING = 1094 + FACILITY_ACCELERATOR = 1536 + FACILITY_WMAAECMA = 1996 + FACILITY_DIRECTMUSIC = 2168 + FACILITY_DIRECT3D10 = 2169 + FACILITY_DXGI = 2170 + FACILITY_DXGI_DDI = 2171 + FACILITY_DIRECT3D11 = 2172 + FACILITY_DIRECT3D11_DEBUG = 2173 + FACILITY_DIRECT3D12 = 2174 + FACILITY_DIRECT3D12_DEBUG = 2175 + FACILITY_LEAP = 2184 + FACILITY_AUDCLNT = 2185 + FACILITY_WINCODEC_DWRITE_DWM = 2200 + FACILITY_WINML = 2192 + FACILITY_DIRECT2D = 2201 + FACILITY_DEFRAG = 2304 + FACILITY_USERMODE_SDBUS = 2305 + FACILITY_JSCRIPT = 2306 + FACILITY_PIDGENX = 2561 + FACILITY_EAS = 85 + FACILITY_WEB = 885 + FACILITY_WEB_SOCKET = 886 + FACILITY_MOBILE = 1793 + FACILITY_SQLITE = 1967 + FACILITY_UTC = 1989 + FACILITY_WEP = 2049 + FACILITY_SYNCENGINE = 2050 + FACILITY_XBOX = 2339 + FACILITY_GAME = 2340 + FACILITY_PIX = 2748 + ERROR_SUCCESS syscall.Errno = 0 + NO_ERROR = 0 + SEC_E_OK Handle = 0x00000000 + ERROR_INVALID_FUNCTION syscall.Errno = 1 + ERROR_FILE_NOT_FOUND syscall.Errno = 2 + ERROR_PATH_NOT_FOUND syscall.Errno = 3 + ERROR_TOO_MANY_OPEN_FILES syscall.Errno = 4 + ERROR_ACCESS_DENIED syscall.Errno = 5 + ERROR_INVALID_HANDLE syscall.Errno = 6 + ERROR_ARENA_TRASHED syscall.Errno = 7 + ERROR_NOT_ENOUGH_MEMORY syscall.Errno = 8 + ERROR_INVALID_BLOCK syscall.Errno = 9 + ERROR_BAD_ENVIRONMENT syscall.Errno = 10 + ERROR_BAD_FORMAT syscall.Errno = 11 + ERROR_INVALID_ACCESS syscall.Errno = 12 + ERROR_INVALID_DATA syscall.Errno = 13 + ERROR_OUTOFMEMORY syscall.Errno = 14 + ERROR_INVALID_DRIVE syscall.Errno = 15 + ERROR_CURRENT_DIRECTORY syscall.Errno = 16 + ERROR_NOT_SAME_DEVICE syscall.Errno = 17 + ERROR_NO_MORE_FILES syscall.Errno = 18 + ERROR_WRITE_PROTECT syscall.Errno = 19 + ERROR_BAD_UNIT syscall.Errno = 20 + ERROR_NOT_READY syscall.Errno = 21 + ERROR_BAD_COMMAND syscall.Errno = 22 + ERROR_CRC syscall.Errno = 23 + ERROR_BAD_LENGTH syscall.Errno = 24 + ERROR_SEEK syscall.Errno = 25 + ERROR_NOT_DOS_DISK syscall.Errno = 26 + ERROR_SECTOR_NOT_FOUND syscall.Errno = 27 + ERROR_OUT_OF_PAPER syscall.Errno = 28 + ERROR_WRITE_FAULT syscall.Errno = 29 + ERROR_READ_FAULT syscall.Errno = 30 + ERROR_GEN_FAILURE syscall.Errno = 31 + ERROR_SHARING_VIOLATION syscall.Errno = 32 + ERROR_LOCK_VIOLATION syscall.Errno = 33 + ERROR_WRONG_DISK syscall.Errno = 34 + ERROR_SHARING_BUFFER_EXCEEDED syscall.Errno = 36 + ERROR_HANDLE_EOF syscall.Errno = 38 + ERROR_HANDLE_DISK_FULL syscall.Errno = 39 + ERROR_NOT_SUPPORTED syscall.Errno = 50 + ERROR_REM_NOT_LIST syscall.Errno = 51 + ERROR_DUP_NAME syscall.Errno = 52 + ERROR_BAD_NETPATH syscall.Errno = 53 + ERROR_NETWORK_BUSY syscall.Errno = 54 + ERROR_DEV_NOT_EXIST syscall.Errno = 55 + ERROR_TOO_MANY_CMDS syscall.Errno = 56 + ERROR_ADAP_HDW_ERR syscall.Errno = 57 + ERROR_BAD_NET_RESP syscall.Errno = 58 + ERROR_UNEXP_NET_ERR syscall.Errno = 59 + ERROR_BAD_REM_ADAP syscall.Errno = 60 + ERROR_PRINTQ_FULL syscall.Errno = 61 + ERROR_NO_SPOOL_SPACE syscall.Errno = 62 + ERROR_PRINT_CANCELLED syscall.Errno = 63 + ERROR_NETNAME_DELETED syscall.Errno = 64 + ERROR_NETWORK_ACCESS_DENIED syscall.Errno = 65 + ERROR_BAD_DEV_TYPE syscall.Errno = 66 + ERROR_BAD_NET_NAME syscall.Errno = 67 + ERROR_TOO_MANY_NAMES syscall.Errno = 68 + ERROR_TOO_MANY_SESS syscall.Errno = 69 + ERROR_SHARING_PAUSED syscall.Errno = 70 + ERROR_REQ_NOT_ACCEP syscall.Errno = 71 + ERROR_REDIR_PAUSED syscall.Errno = 72 + ERROR_FILE_EXISTS syscall.Errno = 80 + ERROR_CANNOT_MAKE syscall.Errno = 82 + ERROR_FAIL_I24 syscall.Errno = 83 + ERROR_OUT_OF_STRUCTURES syscall.Errno = 84 + ERROR_ALREADY_ASSIGNED syscall.Errno = 85 + ERROR_INVALID_PASSWORD syscall.Errno = 86 + ERROR_INVALID_PARAMETER syscall.Errno = 87 + ERROR_NET_WRITE_FAULT syscall.Errno = 88 + ERROR_NO_PROC_SLOTS syscall.Errno = 89 + ERROR_TOO_MANY_SEMAPHORES syscall.Errno = 100 + ERROR_EXCL_SEM_ALREADY_OWNED syscall.Errno = 101 + ERROR_SEM_IS_SET syscall.Errno = 102 + ERROR_TOO_MANY_SEM_REQUESTS syscall.Errno = 103 + ERROR_INVALID_AT_INTERRUPT_TIME syscall.Errno = 104 + ERROR_SEM_OWNER_DIED syscall.Errno = 105 + ERROR_SEM_USER_LIMIT syscall.Errno = 106 + ERROR_DISK_CHANGE syscall.Errno = 107 + ERROR_DRIVE_LOCKED syscall.Errno = 108 + ERROR_BROKEN_PIPE syscall.Errno = 109 + ERROR_OPEN_FAILED syscall.Errno = 110 + ERROR_BUFFER_OVERFLOW syscall.Errno = 111 + ERROR_DISK_FULL syscall.Errno = 112 + ERROR_NO_MORE_SEARCH_HANDLES syscall.Errno = 113 + ERROR_INVALID_TARGET_HANDLE syscall.Errno = 114 + ERROR_INVALID_CATEGORY syscall.Errno = 117 + ERROR_INVALID_VERIFY_SWITCH syscall.Errno = 118 + ERROR_BAD_DRIVER_LEVEL syscall.Errno = 119 + ERROR_CALL_NOT_IMPLEMENTED syscall.Errno = 120 + ERROR_SEM_TIMEOUT syscall.Errno = 121 + ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 + ERROR_INVALID_NAME syscall.Errno = 123 + ERROR_INVALID_LEVEL syscall.Errno = 124 + ERROR_NO_VOLUME_LABEL syscall.Errno = 125 + ERROR_MOD_NOT_FOUND syscall.Errno = 126 + ERROR_PROC_NOT_FOUND syscall.Errno = 127 + ERROR_WAIT_NO_CHILDREN syscall.Errno = 128 + ERROR_CHILD_NOT_COMPLETE syscall.Errno = 129 + ERROR_DIRECT_ACCESS_HANDLE syscall.Errno = 130 + ERROR_NEGATIVE_SEEK syscall.Errno = 131 + ERROR_SEEK_ON_DEVICE syscall.Errno = 132 + ERROR_IS_JOIN_TARGET syscall.Errno = 133 + ERROR_IS_JOINED syscall.Errno = 134 + ERROR_IS_SUBSTED syscall.Errno = 135 + ERROR_NOT_JOINED syscall.Errno = 136 + ERROR_NOT_SUBSTED syscall.Errno = 137 + ERROR_JOIN_TO_JOIN syscall.Errno = 138 + ERROR_SUBST_TO_SUBST syscall.Errno = 139 + ERROR_JOIN_TO_SUBST syscall.Errno = 140 + ERROR_SUBST_TO_JOIN syscall.Errno = 141 + ERROR_BUSY_DRIVE syscall.Errno = 142 + ERROR_SAME_DRIVE syscall.Errno = 143 + ERROR_DIR_NOT_ROOT syscall.Errno = 144 + ERROR_DIR_NOT_EMPTY syscall.Errno = 145 + ERROR_IS_SUBST_PATH syscall.Errno = 146 + ERROR_IS_JOIN_PATH syscall.Errno = 147 + ERROR_PATH_BUSY syscall.Errno = 148 + ERROR_IS_SUBST_TARGET syscall.Errno = 149 + ERROR_SYSTEM_TRACE syscall.Errno = 150 + ERROR_INVALID_EVENT_COUNT syscall.Errno = 151 + ERROR_TOO_MANY_MUXWAITERS syscall.Errno = 152 + ERROR_INVALID_LIST_FORMAT syscall.Errno = 153 + ERROR_LABEL_TOO_LONG syscall.Errno = 154 + ERROR_TOO_MANY_TCBS syscall.Errno = 155 + ERROR_SIGNAL_REFUSED syscall.Errno = 156 + ERROR_DISCARDED syscall.Errno = 157 + ERROR_NOT_LOCKED syscall.Errno = 158 + ERROR_BAD_THREADID_ADDR syscall.Errno = 159 + ERROR_BAD_ARGUMENTS syscall.Errno = 160 + ERROR_BAD_PATHNAME syscall.Errno = 161 + ERROR_SIGNAL_PENDING syscall.Errno = 162 + ERROR_MAX_THRDS_REACHED syscall.Errno = 164 + ERROR_LOCK_FAILED syscall.Errno = 167 + ERROR_BUSY syscall.Errno = 170 + ERROR_DEVICE_SUPPORT_IN_PROGRESS syscall.Errno = 171 + ERROR_CANCEL_VIOLATION syscall.Errno = 173 + ERROR_ATOMIC_LOCKS_NOT_SUPPORTED syscall.Errno = 174 + ERROR_INVALID_SEGMENT_NUMBER syscall.Errno = 180 + ERROR_INVALID_ORDINAL syscall.Errno = 182 + ERROR_ALREADY_EXISTS syscall.Errno = 183 + ERROR_INVALID_FLAG_NUMBER syscall.Errno = 186 + ERROR_SEM_NOT_FOUND syscall.Errno = 187 + ERROR_INVALID_STARTING_CODESEG syscall.Errno = 188 + ERROR_INVALID_STACKSEG syscall.Errno = 189 + ERROR_INVALID_MODULETYPE syscall.Errno = 190 + ERROR_INVALID_EXE_SIGNATURE syscall.Errno = 191 + ERROR_EXE_MARKED_INVALID syscall.Errno = 192 + ERROR_BAD_EXE_FORMAT syscall.Errno = 193 + ERROR_ITERATED_DATA_EXCEEDS_64k syscall.Errno = 194 + ERROR_INVALID_MINALLOCSIZE syscall.Errno = 195 + ERROR_DYNLINK_FROM_INVALID_RING syscall.Errno = 196 + ERROR_IOPL_NOT_ENABLED syscall.Errno = 197 + ERROR_INVALID_SEGDPL syscall.Errno = 198 + ERROR_AUTODATASEG_EXCEEDS_64k syscall.Errno = 199 + ERROR_RING2SEG_MUST_BE_MOVABLE syscall.Errno = 200 + ERROR_RELOC_CHAIN_XEEDS_SEGLIM syscall.Errno = 201 + ERROR_INFLOOP_IN_RELOC_CHAIN syscall.Errno = 202 + ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 + ERROR_NO_SIGNAL_SENT syscall.Errno = 205 + ERROR_FILENAME_EXCED_RANGE syscall.Errno = 206 + ERROR_RING2_STACK_IN_USE syscall.Errno = 207 + ERROR_META_EXPANSION_TOO_LONG syscall.Errno = 208 + ERROR_INVALID_SIGNAL_NUMBER syscall.Errno = 209 + ERROR_THREAD_1_INACTIVE syscall.Errno = 210 + ERROR_LOCKED syscall.Errno = 212 + ERROR_TOO_MANY_MODULES syscall.Errno = 214 + ERROR_NESTING_NOT_ALLOWED syscall.Errno = 215 + ERROR_EXE_MACHINE_TYPE_MISMATCH syscall.Errno = 216 + ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY syscall.Errno = 217 + ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY syscall.Errno = 218 + ERROR_FILE_CHECKED_OUT syscall.Errno = 220 + ERROR_CHECKOUT_REQUIRED syscall.Errno = 221 + ERROR_BAD_FILE_TYPE syscall.Errno = 222 + ERROR_FILE_TOO_LARGE syscall.Errno = 223 + ERROR_FORMS_AUTH_REQUIRED syscall.Errno = 224 + ERROR_VIRUS_INFECTED syscall.Errno = 225 + ERROR_VIRUS_DELETED syscall.Errno = 226 + ERROR_PIPE_LOCAL syscall.Errno = 229 + ERROR_BAD_PIPE syscall.Errno = 230 + ERROR_PIPE_BUSY syscall.Errno = 231 + ERROR_NO_DATA syscall.Errno = 232 + ERROR_PIPE_NOT_CONNECTED syscall.Errno = 233 + ERROR_MORE_DATA syscall.Errno = 234 + ERROR_NO_WORK_DONE syscall.Errno = 235 + ERROR_VC_DISCONNECTED syscall.Errno = 240 + ERROR_INVALID_EA_NAME syscall.Errno = 254 + ERROR_EA_LIST_INCONSISTENT syscall.Errno = 255 + WAIT_TIMEOUT syscall.Errno = 258 + ERROR_NO_MORE_ITEMS syscall.Errno = 259 + ERROR_CANNOT_COPY syscall.Errno = 266 + ERROR_DIRECTORY syscall.Errno = 267 + ERROR_EAS_DIDNT_FIT syscall.Errno = 275 + ERROR_EA_FILE_CORRUPT syscall.Errno = 276 + ERROR_EA_TABLE_FULL syscall.Errno = 277 + ERROR_INVALID_EA_HANDLE syscall.Errno = 278 + ERROR_EAS_NOT_SUPPORTED syscall.Errno = 282 + ERROR_NOT_OWNER syscall.Errno = 288 + ERROR_TOO_MANY_POSTS syscall.Errno = 298 + ERROR_PARTIAL_COPY syscall.Errno = 299 + ERROR_OPLOCK_NOT_GRANTED syscall.Errno = 300 + ERROR_INVALID_OPLOCK_PROTOCOL syscall.Errno = 301 + ERROR_DISK_TOO_FRAGMENTED syscall.Errno = 302 + ERROR_DELETE_PENDING syscall.Errno = 303 + ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING syscall.Errno = 304 + ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME syscall.Errno = 305 + ERROR_SECURITY_STREAM_IS_INCONSISTENT syscall.Errno = 306 + ERROR_INVALID_LOCK_RANGE syscall.Errno = 307 + ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT syscall.Errno = 308 + ERROR_NOTIFICATION_GUID_ALREADY_DEFINED syscall.Errno = 309 + ERROR_INVALID_EXCEPTION_HANDLER syscall.Errno = 310 + ERROR_DUPLICATE_PRIVILEGES syscall.Errno = 311 + ERROR_NO_RANGES_PROCESSED syscall.Errno = 312 + ERROR_NOT_ALLOWED_ON_SYSTEM_FILE syscall.Errno = 313 + ERROR_DISK_RESOURCES_EXHAUSTED syscall.Errno = 314 + ERROR_INVALID_TOKEN syscall.Errno = 315 + ERROR_DEVICE_FEATURE_NOT_SUPPORTED syscall.Errno = 316 + ERROR_MR_MID_NOT_FOUND syscall.Errno = 317 + ERROR_SCOPE_NOT_FOUND syscall.Errno = 318 + ERROR_UNDEFINED_SCOPE syscall.Errno = 319 + ERROR_INVALID_CAP syscall.Errno = 320 + ERROR_DEVICE_UNREACHABLE syscall.Errno = 321 + ERROR_DEVICE_NO_RESOURCES syscall.Errno = 322 + ERROR_DATA_CHECKSUM_ERROR syscall.Errno = 323 + ERROR_INTERMIXED_KERNEL_EA_OPERATION syscall.Errno = 324 + ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED syscall.Errno = 326 + ERROR_OFFSET_ALIGNMENT_VIOLATION syscall.Errno = 327 + ERROR_INVALID_FIELD_IN_PARAMETER_LIST syscall.Errno = 328 + ERROR_OPERATION_IN_PROGRESS syscall.Errno = 329 + ERROR_BAD_DEVICE_PATH syscall.Errno = 330 + ERROR_TOO_MANY_DESCRIPTORS syscall.Errno = 331 + ERROR_SCRUB_DATA_DISABLED syscall.Errno = 332 + ERROR_NOT_REDUNDANT_STORAGE syscall.Errno = 333 + ERROR_RESIDENT_FILE_NOT_SUPPORTED syscall.Errno = 334 + ERROR_COMPRESSED_FILE_NOT_SUPPORTED syscall.Errno = 335 + ERROR_DIRECTORY_NOT_SUPPORTED syscall.Errno = 336 + ERROR_NOT_READ_FROM_COPY syscall.Errno = 337 + ERROR_FT_WRITE_FAILURE syscall.Errno = 338 + ERROR_FT_DI_SCAN_REQUIRED syscall.Errno = 339 + ERROR_INVALID_KERNEL_INFO_VERSION syscall.Errno = 340 + ERROR_INVALID_PEP_INFO_VERSION syscall.Errno = 341 + ERROR_OBJECT_NOT_EXTERNALLY_BACKED syscall.Errno = 342 + ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN syscall.Errno = 343 + ERROR_COMPRESSION_NOT_BENEFICIAL syscall.Errno = 344 + ERROR_STORAGE_TOPOLOGY_ID_MISMATCH syscall.Errno = 345 + ERROR_BLOCKED_BY_PARENTAL_CONTROLS syscall.Errno = 346 + ERROR_BLOCK_TOO_MANY_REFERENCES syscall.Errno = 347 + ERROR_MARKED_TO_DISALLOW_WRITES syscall.Errno = 348 + ERROR_ENCLAVE_FAILURE syscall.Errno = 349 + ERROR_FAIL_NOACTION_REBOOT syscall.Errno = 350 + ERROR_FAIL_SHUTDOWN syscall.Errno = 351 + ERROR_FAIL_RESTART syscall.Errno = 352 + ERROR_MAX_SESSIONS_REACHED syscall.Errno = 353 + ERROR_NETWORK_ACCESS_DENIED_EDP syscall.Errno = 354 + ERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL syscall.Errno = 355 + ERROR_EDP_POLICY_DENIES_OPERATION syscall.Errno = 356 + ERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED syscall.Errno = 357 + ERROR_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT syscall.Errno = 358 + ERROR_DEVICE_IN_MAINTENANCE syscall.Errno = 359 + ERROR_NOT_SUPPORTED_ON_DAX syscall.Errno = 360 + ERROR_DAX_MAPPING_EXISTS syscall.Errno = 361 + ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING syscall.Errno = 362 + ERROR_CLOUD_FILE_METADATA_CORRUPT syscall.Errno = 363 + ERROR_CLOUD_FILE_METADATA_TOO_LARGE syscall.Errno = 364 + ERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE syscall.Errno = 365 + ERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH syscall.Errno = 366 + ERROR_CHILD_PROCESS_BLOCKED syscall.Errno = 367 + ERROR_STORAGE_LOST_DATA_PERSISTENCE syscall.Errno = 368 + ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE syscall.Errno = 369 + ERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT syscall.Errno = 370 + ERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY syscall.Errno = 371 + ERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN syscall.Errno = 372 + ERROR_GDI_HANDLE_LEAK syscall.Errno = 373 + ERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS syscall.Errno = 374 + ERROR_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED syscall.Errno = 375 + ERROR_NOT_A_CLOUD_FILE syscall.Errno = 376 + ERROR_CLOUD_FILE_NOT_IN_SYNC syscall.Errno = 377 + ERROR_CLOUD_FILE_ALREADY_CONNECTED syscall.Errno = 378 + ERROR_CLOUD_FILE_NOT_SUPPORTED syscall.Errno = 379 + ERROR_CLOUD_FILE_INVALID_REQUEST syscall.Errno = 380 + ERROR_CLOUD_FILE_READ_ONLY_VOLUME syscall.Errno = 381 + ERROR_CLOUD_FILE_CONNECTED_PROVIDER_ONLY syscall.Errno = 382 + ERROR_CLOUD_FILE_VALIDATION_FAILED syscall.Errno = 383 + ERROR_SMB1_NOT_AVAILABLE syscall.Errno = 384 + ERROR_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION syscall.Errno = 385 + ERROR_CLOUD_FILE_AUTHENTICATION_FAILED syscall.Errno = 386 + ERROR_CLOUD_FILE_INSUFFICIENT_RESOURCES syscall.Errno = 387 + ERROR_CLOUD_FILE_NETWORK_UNAVAILABLE syscall.Errno = 388 + ERROR_CLOUD_FILE_UNSUCCESSFUL syscall.Errno = 389 + ERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT syscall.Errno = 390 + ERROR_CLOUD_FILE_IN_USE syscall.Errno = 391 + ERROR_CLOUD_FILE_PINNED syscall.Errno = 392 + ERROR_CLOUD_FILE_REQUEST_ABORTED syscall.Errno = 393 + ERROR_CLOUD_FILE_PROPERTY_CORRUPT syscall.Errno = 394 + ERROR_CLOUD_FILE_ACCESS_DENIED syscall.Errno = 395 + ERROR_CLOUD_FILE_INCOMPATIBLE_HARDLINKS syscall.Errno = 396 + ERROR_CLOUD_FILE_PROPERTY_LOCK_CONFLICT syscall.Errno = 397 + ERROR_CLOUD_FILE_REQUEST_CANCELED syscall.Errno = 398 + ERROR_EXTERNAL_SYSKEY_NOT_SUPPORTED syscall.Errno = 399 + ERROR_THREAD_MODE_ALREADY_BACKGROUND syscall.Errno = 400 + ERROR_THREAD_MODE_NOT_BACKGROUND syscall.Errno = 401 + ERROR_PROCESS_MODE_ALREADY_BACKGROUND syscall.Errno = 402 + ERROR_PROCESS_MODE_NOT_BACKGROUND syscall.Errno = 403 + ERROR_CLOUD_FILE_PROVIDER_TERMINATED syscall.Errno = 404 + ERROR_NOT_A_CLOUD_SYNC_ROOT syscall.Errno = 405 + ERROR_FILE_PROTECTED_UNDER_DPL syscall.Errno = 406 + ERROR_VOLUME_NOT_CLUSTER_ALIGNED syscall.Errno = 407 + ERROR_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND syscall.Errno = 408 + ERROR_APPX_FILE_NOT_ENCRYPTED syscall.Errno = 409 + ERROR_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED syscall.Errno = 410 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET syscall.Errno = 411 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE syscall.Errno = 412 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER syscall.Errno = 413 + ERROR_LINUX_SUBSYSTEM_NOT_PRESENT syscall.Errno = 414 + ERROR_FT_READ_FAILURE syscall.Errno = 415 + ERROR_STORAGE_RESERVE_ID_INVALID syscall.Errno = 416 + ERROR_STORAGE_RESERVE_DOES_NOT_EXIST syscall.Errno = 417 + ERROR_STORAGE_RESERVE_ALREADY_EXISTS syscall.Errno = 418 + ERROR_STORAGE_RESERVE_NOT_EMPTY syscall.Errno = 419 + ERROR_NOT_A_DAX_VOLUME syscall.Errno = 420 + ERROR_NOT_DAX_MAPPABLE syscall.Errno = 421 + ERROR_TIME_SENSITIVE_THREAD syscall.Errno = 422 + ERROR_DPL_NOT_SUPPORTED_FOR_USER syscall.Errno = 423 + ERROR_CASE_DIFFERING_NAMES_IN_DIR syscall.Errno = 424 + ERROR_FILE_NOT_SUPPORTED syscall.Errno = 425 + ERROR_CLOUD_FILE_REQUEST_TIMEOUT syscall.Errno = 426 + ERROR_NO_TASK_QUEUE syscall.Errno = 427 + ERROR_SRC_SRV_DLL_LOAD_FAILED syscall.Errno = 428 + ERROR_NOT_SUPPORTED_WITH_BTT syscall.Errno = 429 + ERROR_ENCRYPTION_DISABLED syscall.Errno = 430 + ERROR_ENCRYPTING_METADATA_DISALLOWED syscall.Errno = 431 + ERROR_CANT_CLEAR_ENCRYPTION_FLAG syscall.Errno = 432 + ERROR_NO_SUCH_DEVICE syscall.Errno = 433 + ERROR_CAPAUTHZ_NOT_DEVUNLOCKED syscall.Errno = 450 + ERROR_CAPAUTHZ_CHANGE_TYPE syscall.Errno = 451 + ERROR_CAPAUTHZ_NOT_PROVISIONED syscall.Errno = 452 + ERROR_CAPAUTHZ_NOT_AUTHORIZED syscall.Errno = 453 + ERROR_CAPAUTHZ_NO_POLICY syscall.Errno = 454 + ERROR_CAPAUTHZ_DB_CORRUPTED syscall.Errno = 455 + ERROR_CAPAUTHZ_SCCD_INVALID_CATALOG syscall.Errno = 456 + ERROR_CAPAUTHZ_SCCD_NO_AUTH_ENTITY syscall.Errno = 457 + ERROR_CAPAUTHZ_SCCD_PARSE_ERROR syscall.Errno = 458 + ERROR_CAPAUTHZ_SCCD_DEV_MODE_REQUIRED syscall.Errno = 459 + ERROR_CAPAUTHZ_SCCD_NO_CAPABILITY_MATCH syscall.Errno = 460 + ERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT syscall.Errno = 480 + ERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT syscall.Errno = 481 + ERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT syscall.Errno = 482 + ERROR_DEVICE_HARDWARE_ERROR syscall.Errno = 483 + ERROR_INVALID_ADDRESS syscall.Errno = 487 + ERROR_VRF_CFG_ENABLED syscall.Errno = 1183 + ERROR_PARTITION_TERMINATING syscall.Errno = 1184 + ERROR_USER_PROFILE_LOAD syscall.Errno = 500 + ERROR_ARITHMETIC_OVERFLOW syscall.Errno = 534 + ERROR_PIPE_CONNECTED syscall.Errno = 535 + ERROR_PIPE_LISTENING syscall.Errno = 536 + ERROR_VERIFIER_STOP syscall.Errno = 537 + ERROR_ABIOS_ERROR syscall.Errno = 538 + ERROR_WX86_WARNING syscall.Errno = 539 + ERROR_WX86_ERROR syscall.Errno = 540 + ERROR_TIMER_NOT_CANCELED syscall.Errno = 541 + ERROR_UNWIND syscall.Errno = 542 + ERROR_BAD_STACK syscall.Errno = 543 + ERROR_INVALID_UNWIND_TARGET syscall.Errno = 544 + ERROR_INVALID_PORT_ATTRIBUTES syscall.Errno = 545 + ERROR_PORT_MESSAGE_TOO_LONG syscall.Errno = 546 + ERROR_INVALID_QUOTA_LOWER syscall.Errno = 547 + ERROR_DEVICE_ALREADY_ATTACHED syscall.Errno = 548 + ERROR_INSTRUCTION_MISALIGNMENT syscall.Errno = 549 + ERROR_PROFILING_NOT_STARTED syscall.Errno = 550 + ERROR_PROFILING_NOT_STOPPED syscall.Errno = 551 + ERROR_COULD_NOT_INTERPRET syscall.Errno = 552 + ERROR_PROFILING_AT_LIMIT syscall.Errno = 553 + ERROR_CANT_WAIT syscall.Errno = 554 + ERROR_CANT_TERMINATE_SELF syscall.Errno = 555 + ERROR_UNEXPECTED_MM_CREATE_ERR syscall.Errno = 556 + ERROR_UNEXPECTED_MM_MAP_ERROR syscall.Errno = 557 + ERROR_UNEXPECTED_MM_EXTEND_ERR syscall.Errno = 558 + ERROR_BAD_FUNCTION_TABLE syscall.Errno = 559 + ERROR_NO_GUID_TRANSLATION syscall.Errno = 560 + ERROR_INVALID_LDT_SIZE syscall.Errno = 561 + ERROR_INVALID_LDT_OFFSET syscall.Errno = 563 + ERROR_INVALID_LDT_DESCRIPTOR syscall.Errno = 564 + ERROR_TOO_MANY_THREADS syscall.Errno = 565 + ERROR_THREAD_NOT_IN_PROCESS syscall.Errno = 566 + ERROR_PAGEFILE_QUOTA_EXCEEDED syscall.Errno = 567 + ERROR_LOGON_SERVER_CONFLICT syscall.Errno = 568 + ERROR_SYNCHRONIZATION_REQUIRED syscall.Errno = 569 + ERROR_NET_OPEN_FAILED syscall.Errno = 570 + ERROR_IO_PRIVILEGE_FAILED syscall.Errno = 571 + ERROR_CONTROL_C_EXIT syscall.Errno = 572 + ERROR_MISSING_SYSTEMFILE syscall.Errno = 573 + ERROR_UNHANDLED_EXCEPTION syscall.Errno = 574 + ERROR_APP_INIT_FAILURE syscall.Errno = 575 + ERROR_PAGEFILE_CREATE_FAILED syscall.Errno = 576 + ERROR_INVALID_IMAGE_HASH syscall.Errno = 577 + ERROR_NO_PAGEFILE syscall.Errno = 578 + ERROR_ILLEGAL_FLOAT_CONTEXT syscall.Errno = 579 + ERROR_NO_EVENT_PAIR syscall.Errno = 580 + ERROR_DOMAIN_CTRLR_CONFIG_ERROR syscall.Errno = 581 + ERROR_ILLEGAL_CHARACTER syscall.Errno = 582 + ERROR_UNDEFINED_CHARACTER syscall.Errno = 583 + ERROR_FLOPPY_VOLUME syscall.Errno = 584 + ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT syscall.Errno = 585 + ERROR_BACKUP_CONTROLLER syscall.Errno = 586 + ERROR_MUTANT_LIMIT_EXCEEDED syscall.Errno = 587 + ERROR_FS_DRIVER_REQUIRED syscall.Errno = 588 + ERROR_CANNOT_LOAD_REGISTRY_FILE syscall.Errno = 589 + ERROR_DEBUG_ATTACH_FAILED syscall.Errno = 590 + ERROR_SYSTEM_PROCESS_TERMINATED syscall.Errno = 591 + ERROR_DATA_NOT_ACCEPTED syscall.Errno = 592 + ERROR_VDM_HARD_ERROR syscall.Errno = 593 + ERROR_DRIVER_CANCEL_TIMEOUT syscall.Errno = 594 + ERROR_REPLY_MESSAGE_MISMATCH syscall.Errno = 595 + ERROR_LOST_WRITEBEHIND_DATA syscall.Errno = 596 + ERROR_CLIENT_SERVER_PARAMETERS_INVALID syscall.Errno = 597 + ERROR_NOT_TINY_STREAM syscall.Errno = 598 + ERROR_STACK_OVERFLOW_READ syscall.Errno = 599 + ERROR_CONVERT_TO_LARGE syscall.Errno = 600 + ERROR_FOUND_OUT_OF_SCOPE syscall.Errno = 601 + ERROR_ALLOCATE_BUCKET syscall.Errno = 602 + ERROR_MARSHALL_OVERFLOW syscall.Errno = 603 + ERROR_INVALID_VARIANT syscall.Errno = 604 + ERROR_BAD_COMPRESSION_BUFFER syscall.Errno = 605 + ERROR_AUDIT_FAILED syscall.Errno = 606 + ERROR_TIMER_RESOLUTION_NOT_SET syscall.Errno = 607 + ERROR_INSUFFICIENT_LOGON_INFO syscall.Errno = 608 + ERROR_BAD_DLL_ENTRYPOINT syscall.Errno = 609 + ERROR_BAD_SERVICE_ENTRYPOINT syscall.Errno = 610 + ERROR_IP_ADDRESS_CONFLICT1 syscall.Errno = 611 + ERROR_IP_ADDRESS_CONFLICT2 syscall.Errno = 612 + ERROR_REGISTRY_QUOTA_LIMIT syscall.Errno = 613 + ERROR_NO_CALLBACK_ACTIVE syscall.Errno = 614 + ERROR_PWD_TOO_SHORT syscall.Errno = 615 + ERROR_PWD_TOO_RECENT syscall.Errno = 616 + ERROR_PWD_HISTORY_CONFLICT syscall.Errno = 617 + ERROR_UNSUPPORTED_COMPRESSION syscall.Errno = 618 + ERROR_INVALID_HW_PROFILE syscall.Errno = 619 + ERROR_INVALID_PLUGPLAY_DEVICE_PATH syscall.Errno = 620 + ERROR_QUOTA_LIST_INCONSISTENT syscall.Errno = 621 + ERROR_EVALUATION_EXPIRATION syscall.Errno = 622 + ERROR_ILLEGAL_DLL_RELOCATION syscall.Errno = 623 + ERROR_DLL_INIT_FAILED_LOGOFF syscall.Errno = 624 + ERROR_VALIDATE_CONTINUE syscall.Errno = 625 + ERROR_NO_MORE_MATCHES syscall.Errno = 626 + ERROR_RANGE_LIST_CONFLICT syscall.Errno = 627 + ERROR_SERVER_SID_MISMATCH syscall.Errno = 628 + ERROR_CANT_ENABLE_DENY_ONLY syscall.Errno = 629 + ERROR_FLOAT_MULTIPLE_FAULTS syscall.Errno = 630 + ERROR_FLOAT_MULTIPLE_TRAPS syscall.Errno = 631 + ERROR_NOINTERFACE syscall.Errno = 632 + ERROR_DRIVER_FAILED_SLEEP syscall.Errno = 633 + ERROR_CORRUPT_SYSTEM_FILE syscall.Errno = 634 + ERROR_COMMITMENT_MINIMUM syscall.Errno = 635 + ERROR_PNP_RESTART_ENUMERATION syscall.Errno = 636 + ERROR_SYSTEM_IMAGE_BAD_SIGNATURE syscall.Errno = 637 + ERROR_PNP_REBOOT_REQUIRED syscall.Errno = 638 + ERROR_INSUFFICIENT_POWER syscall.Errno = 639 + ERROR_MULTIPLE_FAULT_VIOLATION syscall.Errno = 640 + ERROR_SYSTEM_SHUTDOWN syscall.Errno = 641 + ERROR_PORT_NOT_SET syscall.Errno = 642 + ERROR_DS_VERSION_CHECK_FAILURE syscall.Errno = 643 + ERROR_RANGE_NOT_FOUND syscall.Errno = 644 + ERROR_NOT_SAFE_MODE_DRIVER syscall.Errno = 646 + ERROR_FAILED_DRIVER_ENTRY syscall.Errno = 647 + ERROR_DEVICE_ENUMERATION_ERROR syscall.Errno = 648 + ERROR_MOUNT_POINT_NOT_RESOLVED syscall.Errno = 649 + ERROR_INVALID_DEVICE_OBJECT_PARAMETER syscall.Errno = 650 + ERROR_MCA_OCCURED syscall.Errno = 651 + ERROR_DRIVER_DATABASE_ERROR syscall.Errno = 652 + ERROR_SYSTEM_HIVE_TOO_LARGE syscall.Errno = 653 + ERROR_DRIVER_FAILED_PRIOR_UNLOAD syscall.Errno = 654 + ERROR_VOLSNAP_PREPARE_HIBERNATE syscall.Errno = 655 + ERROR_HIBERNATION_FAILURE syscall.Errno = 656 + ERROR_PWD_TOO_LONG syscall.Errno = 657 + ERROR_FILE_SYSTEM_LIMITATION syscall.Errno = 665 + ERROR_ASSERTION_FAILURE syscall.Errno = 668 + ERROR_ACPI_ERROR syscall.Errno = 669 + ERROR_WOW_ASSERTION syscall.Errno = 670 + ERROR_PNP_BAD_MPS_TABLE syscall.Errno = 671 + ERROR_PNP_TRANSLATION_FAILED syscall.Errno = 672 + ERROR_PNP_IRQ_TRANSLATION_FAILED syscall.Errno = 673 + ERROR_PNP_INVALID_ID syscall.Errno = 674 + ERROR_WAKE_SYSTEM_DEBUGGER syscall.Errno = 675 + ERROR_HANDLES_CLOSED syscall.Errno = 676 + ERROR_EXTRANEOUS_INFORMATION syscall.Errno = 677 + ERROR_RXACT_COMMIT_NECESSARY syscall.Errno = 678 + ERROR_MEDIA_CHECK syscall.Errno = 679 + ERROR_GUID_SUBSTITUTION_MADE syscall.Errno = 680 + ERROR_STOPPED_ON_SYMLINK syscall.Errno = 681 + ERROR_LONGJUMP syscall.Errno = 682 + ERROR_PLUGPLAY_QUERY_VETOED syscall.Errno = 683 + ERROR_UNWIND_CONSOLIDATE syscall.Errno = 684 + ERROR_REGISTRY_HIVE_RECOVERED syscall.Errno = 685 + ERROR_DLL_MIGHT_BE_INSECURE syscall.Errno = 686 + ERROR_DLL_MIGHT_BE_INCOMPATIBLE syscall.Errno = 687 + ERROR_DBG_EXCEPTION_NOT_HANDLED syscall.Errno = 688 + ERROR_DBG_REPLY_LATER syscall.Errno = 689 + ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE syscall.Errno = 690 + ERROR_DBG_TERMINATE_THREAD syscall.Errno = 691 + ERROR_DBG_TERMINATE_PROCESS syscall.Errno = 692 + ERROR_DBG_CONTROL_C syscall.Errno = 693 + ERROR_DBG_PRINTEXCEPTION_C syscall.Errno = 694 + ERROR_DBG_RIPEXCEPTION syscall.Errno = 695 + ERROR_DBG_CONTROL_BREAK syscall.Errno = 696 + ERROR_DBG_COMMAND_EXCEPTION syscall.Errno = 697 + ERROR_OBJECT_NAME_EXISTS syscall.Errno = 698 + ERROR_THREAD_WAS_SUSPENDED syscall.Errno = 699 + ERROR_IMAGE_NOT_AT_BASE syscall.Errno = 700 + ERROR_RXACT_STATE_CREATED syscall.Errno = 701 + ERROR_SEGMENT_NOTIFICATION syscall.Errno = 702 + ERROR_BAD_CURRENT_DIRECTORY syscall.Errno = 703 + ERROR_FT_READ_RECOVERY_FROM_BACKUP syscall.Errno = 704 + ERROR_FT_WRITE_RECOVERY syscall.Errno = 705 + ERROR_IMAGE_MACHINE_TYPE_MISMATCH syscall.Errno = 706 + ERROR_RECEIVE_PARTIAL syscall.Errno = 707 + ERROR_RECEIVE_EXPEDITED syscall.Errno = 708 + ERROR_RECEIVE_PARTIAL_EXPEDITED syscall.Errno = 709 + ERROR_EVENT_DONE syscall.Errno = 710 + ERROR_EVENT_PENDING syscall.Errno = 711 + ERROR_CHECKING_FILE_SYSTEM syscall.Errno = 712 + ERROR_FATAL_APP_EXIT syscall.Errno = 713 + ERROR_PREDEFINED_HANDLE syscall.Errno = 714 + ERROR_WAS_UNLOCKED syscall.Errno = 715 + ERROR_SERVICE_NOTIFICATION syscall.Errno = 716 + ERROR_WAS_LOCKED syscall.Errno = 717 + ERROR_LOG_HARD_ERROR syscall.Errno = 718 + ERROR_ALREADY_WIN32 syscall.Errno = 719 + ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE syscall.Errno = 720 + ERROR_NO_YIELD_PERFORMED syscall.Errno = 721 + ERROR_TIMER_RESUME_IGNORED syscall.Errno = 722 + ERROR_ARBITRATION_UNHANDLED syscall.Errno = 723 + ERROR_CARDBUS_NOT_SUPPORTED syscall.Errno = 724 + ERROR_MP_PROCESSOR_MISMATCH syscall.Errno = 725 + ERROR_HIBERNATED syscall.Errno = 726 + ERROR_RESUME_HIBERNATION syscall.Errno = 727 + ERROR_FIRMWARE_UPDATED syscall.Errno = 728 + ERROR_DRIVERS_LEAKING_LOCKED_PAGES syscall.Errno = 729 + ERROR_WAKE_SYSTEM syscall.Errno = 730 + ERROR_WAIT_1 syscall.Errno = 731 + ERROR_WAIT_2 syscall.Errno = 732 + ERROR_WAIT_3 syscall.Errno = 733 + ERROR_WAIT_63 syscall.Errno = 734 + ERROR_ABANDONED_WAIT_0 syscall.Errno = 735 + ERROR_ABANDONED_WAIT_63 syscall.Errno = 736 + ERROR_USER_APC syscall.Errno = 737 + ERROR_KERNEL_APC syscall.Errno = 738 + ERROR_ALERTED syscall.Errno = 739 + ERROR_ELEVATION_REQUIRED syscall.Errno = 740 + ERROR_REPARSE syscall.Errno = 741 + ERROR_OPLOCK_BREAK_IN_PROGRESS syscall.Errno = 742 + ERROR_VOLUME_MOUNTED syscall.Errno = 743 + ERROR_RXACT_COMMITTED syscall.Errno = 744 + ERROR_NOTIFY_CLEANUP syscall.Errno = 745 + ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED syscall.Errno = 746 + ERROR_PAGE_FAULT_TRANSITION syscall.Errno = 747 + ERROR_PAGE_FAULT_DEMAND_ZERO syscall.Errno = 748 + ERROR_PAGE_FAULT_COPY_ON_WRITE syscall.Errno = 749 + ERROR_PAGE_FAULT_GUARD_PAGE syscall.Errno = 750 + ERROR_PAGE_FAULT_PAGING_FILE syscall.Errno = 751 + ERROR_CACHE_PAGE_LOCKED syscall.Errno = 752 + ERROR_CRASH_DUMP syscall.Errno = 753 + ERROR_BUFFER_ALL_ZEROS syscall.Errno = 754 + ERROR_REPARSE_OBJECT syscall.Errno = 755 + ERROR_RESOURCE_REQUIREMENTS_CHANGED syscall.Errno = 756 + ERROR_TRANSLATION_COMPLETE syscall.Errno = 757 + ERROR_NOTHING_TO_TERMINATE syscall.Errno = 758 + ERROR_PROCESS_NOT_IN_JOB syscall.Errno = 759 + ERROR_PROCESS_IN_JOB syscall.Errno = 760 + ERROR_VOLSNAP_HIBERNATE_READY syscall.Errno = 761 + ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY syscall.Errno = 762 + ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED syscall.Errno = 763 + ERROR_INTERRUPT_STILL_CONNECTED syscall.Errno = 764 + ERROR_WAIT_FOR_OPLOCK syscall.Errno = 765 + ERROR_DBG_EXCEPTION_HANDLED syscall.Errno = 766 + ERROR_DBG_CONTINUE syscall.Errno = 767 + ERROR_CALLBACK_POP_STACK syscall.Errno = 768 + ERROR_COMPRESSION_DISABLED syscall.Errno = 769 + ERROR_CANTFETCHBACKWARDS syscall.Errno = 770 + ERROR_CANTSCROLLBACKWARDS syscall.Errno = 771 + ERROR_ROWSNOTRELEASED syscall.Errno = 772 + ERROR_BAD_ACCESSOR_FLAGS syscall.Errno = 773 + ERROR_ERRORS_ENCOUNTERED syscall.Errno = 774 + ERROR_NOT_CAPABLE syscall.Errno = 775 + ERROR_REQUEST_OUT_OF_SEQUENCE syscall.Errno = 776 + ERROR_VERSION_PARSE_ERROR syscall.Errno = 777 + ERROR_BADSTARTPOSITION syscall.Errno = 778 + ERROR_MEMORY_HARDWARE syscall.Errno = 779 + ERROR_DISK_REPAIR_DISABLED syscall.Errno = 780 + ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE syscall.Errno = 781 + ERROR_SYSTEM_POWERSTATE_TRANSITION syscall.Errno = 782 + ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION syscall.Errno = 783 + ERROR_MCA_EXCEPTION syscall.Errno = 784 + ERROR_ACCESS_AUDIT_BY_POLICY syscall.Errno = 785 + ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY syscall.Errno = 786 + ERROR_ABANDON_HIBERFILE syscall.Errno = 787 + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED syscall.Errno = 788 + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR syscall.Errno = 789 + ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR syscall.Errno = 790 + ERROR_BAD_MCFG_TABLE syscall.Errno = 791 + ERROR_DISK_REPAIR_REDIRECTED syscall.Errno = 792 + ERROR_DISK_REPAIR_UNSUCCESSFUL syscall.Errno = 793 + ERROR_CORRUPT_LOG_OVERFULL syscall.Errno = 794 + ERROR_CORRUPT_LOG_CORRUPTED syscall.Errno = 795 + ERROR_CORRUPT_LOG_UNAVAILABLE syscall.Errno = 796 + ERROR_CORRUPT_LOG_DELETED_FULL syscall.Errno = 797 + ERROR_CORRUPT_LOG_CLEARED syscall.Errno = 798 + ERROR_ORPHAN_NAME_EXHAUSTED syscall.Errno = 799 + ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE syscall.Errno = 800 + ERROR_CANNOT_GRANT_REQUESTED_OPLOCK syscall.Errno = 801 + ERROR_CANNOT_BREAK_OPLOCK syscall.Errno = 802 + ERROR_OPLOCK_HANDLE_CLOSED syscall.Errno = 803 + ERROR_NO_ACE_CONDITION syscall.Errno = 804 + ERROR_INVALID_ACE_CONDITION syscall.Errno = 805 + ERROR_FILE_HANDLE_REVOKED syscall.Errno = 806 + ERROR_IMAGE_AT_DIFFERENT_BASE syscall.Errno = 807 + ERROR_ENCRYPTED_IO_NOT_POSSIBLE syscall.Errno = 808 + ERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS syscall.Errno = 809 + ERROR_QUOTA_ACTIVITY syscall.Errno = 810 + ERROR_HANDLE_REVOKED syscall.Errno = 811 + ERROR_CALLBACK_INVOKE_INLINE syscall.Errno = 812 + ERROR_CPU_SET_INVALID syscall.Errno = 813 + ERROR_ENCLAVE_NOT_TERMINATED syscall.Errno = 814 + ERROR_ENCLAVE_VIOLATION syscall.Errno = 815 + ERROR_EA_ACCESS_DENIED syscall.Errno = 994 + ERROR_OPERATION_ABORTED syscall.Errno = 995 + ERROR_IO_INCOMPLETE syscall.Errno = 996 + ERROR_IO_PENDING syscall.Errno = 997 + ERROR_NOACCESS syscall.Errno = 998 + ERROR_SWAPERROR syscall.Errno = 999 + ERROR_STACK_OVERFLOW syscall.Errno = 1001 + ERROR_INVALID_MESSAGE syscall.Errno = 1002 + ERROR_CAN_NOT_COMPLETE syscall.Errno = 1003 + ERROR_INVALID_FLAGS syscall.Errno = 1004 + ERROR_UNRECOGNIZED_VOLUME syscall.Errno = 1005 + ERROR_FILE_INVALID syscall.Errno = 1006 + ERROR_FULLSCREEN_MODE syscall.Errno = 1007 + ERROR_NO_TOKEN syscall.Errno = 1008 + ERROR_BADDB syscall.Errno = 1009 + ERROR_BADKEY syscall.Errno = 1010 + ERROR_CANTOPEN syscall.Errno = 1011 + ERROR_CANTREAD syscall.Errno = 1012 + ERROR_CANTWRITE syscall.Errno = 1013 + ERROR_REGISTRY_RECOVERED syscall.Errno = 1014 + ERROR_REGISTRY_CORRUPT syscall.Errno = 1015 + ERROR_REGISTRY_IO_FAILED syscall.Errno = 1016 + ERROR_NOT_REGISTRY_FILE syscall.Errno = 1017 + ERROR_KEY_DELETED syscall.Errno = 1018 + ERROR_NO_LOG_SPACE syscall.Errno = 1019 + ERROR_KEY_HAS_CHILDREN syscall.Errno = 1020 + ERROR_CHILD_MUST_BE_VOLATILE syscall.Errno = 1021 + ERROR_NOTIFY_ENUM_DIR syscall.Errno = 1022 + ERROR_DEPENDENT_SERVICES_RUNNING syscall.Errno = 1051 + ERROR_INVALID_SERVICE_CONTROL syscall.Errno = 1052 + ERROR_SERVICE_REQUEST_TIMEOUT syscall.Errno = 1053 + ERROR_SERVICE_NO_THREAD syscall.Errno = 1054 + ERROR_SERVICE_DATABASE_LOCKED syscall.Errno = 1055 + ERROR_SERVICE_ALREADY_RUNNING syscall.Errno = 1056 + ERROR_INVALID_SERVICE_ACCOUNT syscall.Errno = 1057 + ERROR_SERVICE_DISABLED syscall.Errno = 1058 + ERROR_CIRCULAR_DEPENDENCY syscall.Errno = 1059 + ERROR_SERVICE_DOES_NOT_EXIST syscall.Errno = 1060 + ERROR_SERVICE_CANNOT_ACCEPT_CTRL syscall.Errno = 1061 + ERROR_SERVICE_NOT_ACTIVE syscall.Errno = 1062 + ERROR_FAILED_SERVICE_CONTROLLER_CONNECT syscall.Errno = 1063 + ERROR_EXCEPTION_IN_SERVICE syscall.Errno = 1064 + ERROR_DATABASE_DOES_NOT_EXIST syscall.Errno = 1065 + ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 + ERROR_PROCESS_ABORTED syscall.Errno = 1067 + ERROR_SERVICE_DEPENDENCY_FAIL syscall.Errno = 1068 + ERROR_SERVICE_LOGON_FAILED syscall.Errno = 1069 + ERROR_SERVICE_START_HANG syscall.Errno = 1070 + ERROR_INVALID_SERVICE_LOCK syscall.Errno = 1071 + ERROR_SERVICE_MARKED_FOR_DELETE syscall.Errno = 1072 + ERROR_SERVICE_EXISTS syscall.Errno = 1073 + ERROR_ALREADY_RUNNING_LKG syscall.Errno = 1074 + ERROR_SERVICE_DEPENDENCY_DELETED syscall.Errno = 1075 + ERROR_BOOT_ALREADY_ACCEPTED syscall.Errno = 1076 + ERROR_SERVICE_NEVER_STARTED syscall.Errno = 1077 + ERROR_DUPLICATE_SERVICE_NAME syscall.Errno = 1078 + ERROR_DIFFERENT_SERVICE_ACCOUNT syscall.Errno = 1079 + ERROR_CANNOT_DETECT_DRIVER_FAILURE syscall.Errno = 1080 + ERROR_CANNOT_DETECT_PROCESS_ABORT syscall.Errno = 1081 + ERROR_NO_RECOVERY_PROGRAM syscall.Errno = 1082 + ERROR_SERVICE_NOT_IN_EXE syscall.Errno = 1083 + ERROR_NOT_SAFEBOOT_SERVICE syscall.Errno = 1084 + ERROR_END_OF_MEDIA syscall.Errno = 1100 + ERROR_FILEMARK_DETECTED syscall.Errno = 1101 + ERROR_BEGINNING_OF_MEDIA syscall.Errno = 1102 + ERROR_SETMARK_DETECTED syscall.Errno = 1103 + ERROR_NO_DATA_DETECTED syscall.Errno = 1104 + ERROR_PARTITION_FAILURE syscall.Errno = 1105 + ERROR_INVALID_BLOCK_LENGTH syscall.Errno = 1106 + ERROR_DEVICE_NOT_PARTITIONED syscall.Errno = 1107 + ERROR_UNABLE_TO_LOCK_MEDIA syscall.Errno = 1108 + ERROR_UNABLE_TO_UNLOAD_MEDIA syscall.Errno = 1109 + ERROR_MEDIA_CHANGED syscall.Errno = 1110 + ERROR_BUS_RESET syscall.Errno = 1111 + ERROR_NO_MEDIA_IN_DRIVE syscall.Errno = 1112 + ERROR_NO_UNICODE_TRANSLATION syscall.Errno = 1113 + ERROR_DLL_INIT_FAILED syscall.Errno = 1114 + ERROR_SHUTDOWN_IN_PROGRESS syscall.Errno = 1115 + ERROR_NO_SHUTDOWN_IN_PROGRESS syscall.Errno = 1116 + ERROR_IO_DEVICE syscall.Errno = 1117 + ERROR_SERIAL_NO_DEVICE syscall.Errno = 1118 + ERROR_IRQ_BUSY syscall.Errno = 1119 + ERROR_MORE_WRITES syscall.Errno = 1120 + ERROR_COUNTER_TIMEOUT syscall.Errno = 1121 + ERROR_FLOPPY_ID_MARK_NOT_FOUND syscall.Errno = 1122 + ERROR_FLOPPY_WRONG_CYLINDER syscall.Errno = 1123 + ERROR_FLOPPY_UNKNOWN_ERROR syscall.Errno = 1124 + ERROR_FLOPPY_BAD_REGISTERS syscall.Errno = 1125 + ERROR_DISK_RECALIBRATE_FAILED syscall.Errno = 1126 + ERROR_DISK_OPERATION_FAILED syscall.Errno = 1127 + ERROR_DISK_RESET_FAILED syscall.Errno = 1128 + ERROR_EOM_OVERFLOW syscall.Errno = 1129 + ERROR_NOT_ENOUGH_SERVER_MEMORY syscall.Errno = 1130 + ERROR_POSSIBLE_DEADLOCK syscall.Errno = 1131 + ERROR_MAPPED_ALIGNMENT syscall.Errno = 1132 + ERROR_SET_POWER_STATE_VETOED syscall.Errno = 1140 + ERROR_SET_POWER_STATE_FAILED syscall.Errno = 1141 + ERROR_TOO_MANY_LINKS syscall.Errno = 1142 + ERROR_OLD_WIN_VERSION syscall.Errno = 1150 + ERROR_APP_WRONG_OS syscall.Errno = 1151 + ERROR_SINGLE_INSTANCE_APP syscall.Errno = 1152 + ERROR_RMODE_APP syscall.Errno = 1153 + ERROR_INVALID_DLL syscall.Errno = 1154 + ERROR_NO_ASSOCIATION syscall.Errno = 1155 + ERROR_DDE_FAIL syscall.Errno = 1156 + ERROR_DLL_NOT_FOUND syscall.Errno = 1157 + ERROR_NO_MORE_USER_HANDLES syscall.Errno = 1158 + ERROR_MESSAGE_SYNC_ONLY syscall.Errno = 1159 + ERROR_SOURCE_ELEMENT_EMPTY syscall.Errno = 1160 + ERROR_DESTINATION_ELEMENT_FULL syscall.Errno = 1161 + ERROR_ILLEGAL_ELEMENT_ADDRESS syscall.Errno = 1162 + ERROR_MAGAZINE_NOT_PRESENT syscall.Errno = 1163 + ERROR_DEVICE_REINITIALIZATION_NEEDED syscall.Errno = 1164 + ERROR_DEVICE_REQUIRES_CLEANING syscall.Errno = 1165 + ERROR_DEVICE_DOOR_OPEN syscall.Errno = 1166 + ERROR_DEVICE_NOT_CONNECTED syscall.Errno = 1167 + ERROR_NOT_FOUND syscall.Errno = 1168 + ERROR_NO_MATCH syscall.Errno = 1169 + ERROR_SET_NOT_FOUND syscall.Errno = 1170 + ERROR_POINT_NOT_FOUND syscall.Errno = 1171 + ERROR_NO_TRACKING_SERVICE syscall.Errno = 1172 + ERROR_NO_VOLUME_ID syscall.Errno = 1173 + ERROR_UNABLE_TO_REMOVE_REPLACED syscall.Errno = 1175 + ERROR_UNABLE_TO_MOVE_REPLACEMENT syscall.Errno = 1176 + ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 syscall.Errno = 1177 + ERROR_JOURNAL_DELETE_IN_PROGRESS syscall.Errno = 1178 + ERROR_JOURNAL_NOT_ACTIVE syscall.Errno = 1179 + ERROR_POTENTIAL_FILE_FOUND syscall.Errno = 1180 + ERROR_JOURNAL_ENTRY_DELETED syscall.Errno = 1181 + ERROR_SHUTDOWN_IS_SCHEDULED syscall.Errno = 1190 + ERROR_SHUTDOWN_USERS_LOGGED_ON syscall.Errno = 1191 + ERROR_BAD_DEVICE syscall.Errno = 1200 + ERROR_CONNECTION_UNAVAIL syscall.Errno = 1201 + ERROR_DEVICE_ALREADY_REMEMBERED syscall.Errno = 1202 + ERROR_NO_NET_OR_BAD_PATH syscall.Errno = 1203 + ERROR_BAD_PROVIDER syscall.Errno = 1204 + ERROR_CANNOT_OPEN_PROFILE syscall.Errno = 1205 + ERROR_BAD_PROFILE syscall.Errno = 1206 + ERROR_NOT_CONTAINER syscall.Errno = 1207 + ERROR_EXTENDED_ERROR syscall.Errno = 1208 + ERROR_INVALID_GROUPNAME syscall.Errno = 1209 + ERROR_INVALID_COMPUTERNAME syscall.Errno = 1210 + ERROR_INVALID_EVENTNAME syscall.Errno = 1211 + ERROR_INVALID_DOMAINNAME syscall.Errno = 1212 + ERROR_INVALID_SERVICENAME syscall.Errno = 1213 + ERROR_INVALID_NETNAME syscall.Errno = 1214 + ERROR_INVALID_SHARENAME syscall.Errno = 1215 + ERROR_INVALID_PASSWORDNAME syscall.Errno = 1216 + ERROR_INVALID_MESSAGENAME syscall.Errno = 1217 + ERROR_INVALID_MESSAGEDEST syscall.Errno = 1218 + ERROR_SESSION_CREDENTIAL_CONFLICT syscall.Errno = 1219 + ERROR_REMOTE_SESSION_LIMIT_EXCEEDED syscall.Errno = 1220 + ERROR_DUP_DOMAINNAME syscall.Errno = 1221 + ERROR_NO_NETWORK syscall.Errno = 1222 + ERROR_CANCELLED syscall.Errno = 1223 + ERROR_USER_MAPPED_FILE syscall.Errno = 1224 + ERROR_CONNECTION_REFUSED syscall.Errno = 1225 + ERROR_GRACEFUL_DISCONNECT syscall.Errno = 1226 + ERROR_ADDRESS_ALREADY_ASSOCIATED syscall.Errno = 1227 + ERROR_ADDRESS_NOT_ASSOCIATED syscall.Errno = 1228 + ERROR_CONNECTION_INVALID syscall.Errno = 1229 + ERROR_CONNECTION_ACTIVE syscall.Errno = 1230 + ERROR_NETWORK_UNREACHABLE syscall.Errno = 1231 + ERROR_HOST_UNREACHABLE syscall.Errno = 1232 + ERROR_PROTOCOL_UNREACHABLE syscall.Errno = 1233 + ERROR_PORT_UNREACHABLE syscall.Errno = 1234 + ERROR_REQUEST_ABORTED syscall.Errno = 1235 + ERROR_CONNECTION_ABORTED syscall.Errno = 1236 + ERROR_RETRY syscall.Errno = 1237 + ERROR_CONNECTION_COUNT_LIMIT syscall.Errno = 1238 + ERROR_LOGIN_TIME_RESTRICTION syscall.Errno = 1239 + ERROR_LOGIN_WKSTA_RESTRICTION syscall.Errno = 1240 + ERROR_INCORRECT_ADDRESS syscall.Errno = 1241 + ERROR_ALREADY_REGISTERED syscall.Errno = 1242 + ERROR_SERVICE_NOT_FOUND syscall.Errno = 1243 + ERROR_NOT_AUTHENTICATED syscall.Errno = 1244 + ERROR_NOT_LOGGED_ON syscall.Errno = 1245 + ERROR_CONTINUE syscall.Errno = 1246 + ERROR_ALREADY_INITIALIZED syscall.Errno = 1247 + ERROR_NO_MORE_DEVICES syscall.Errno = 1248 + ERROR_NO_SUCH_SITE syscall.Errno = 1249 + ERROR_DOMAIN_CONTROLLER_EXISTS syscall.Errno = 1250 + ERROR_ONLY_IF_CONNECTED syscall.Errno = 1251 + ERROR_OVERRIDE_NOCHANGES syscall.Errno = 1252 + ERROR_BAD_USER_PROFILE syscall.Errno = 1253 + ERROR_NOT_SUPPORTED_ON_SBS syscall.Errno = 1254 + ERROR_SERVER_SHUTDOWN_IN_PROGRESS syscall.Errno = 1255 + ERROR_HOST_DOWN syscall.Errno = 1256 + ERROR_NON_ACCOUNT_SID syscall.Errno = 1257 + ERROR_NON_DOMAIN_SID syscall.Errno = 1258 + ERROR_APPHELP_BLOCK syscall.Errno = 1259 + ERROR_ACCESS_DISABLED_BY_POLICY syscall.Errno = 1260 + ERROR_REG_NAT_CONSUMPTION syscall.Errno = 1261 + ERROR_CSCSHARE_OFFLINE syscall.Errno = 1262 + ERROR_PKINIT_FAILURE syscall.Errno = 1263 + ERROR_SMARTCARD_SUBSYSTEM_FAILURE syscall.Errno = 1264 + ERROR_DOWNGRADE_DETECTED syscall.Errno = 1265 + ERROR_MACHINE_LOCKED syscall.Errno = 1271 + ERROR_SMB_GUEST_LOGON_BLOCKED syscall.Errno = 1272 + ERROR_CALLBACK_SUPPLIED_INVALID_DATA syscall.Errno = 1273 + ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED syscall.Errno = 1274 + ERROR_DRIVER_BLOCKED syscall.Errno = 1275 + ERROR_INVALID_IMPORT_OF_NON_DLL syscall.Errno = 1276 + ERROR_ACCESS_DISABLED_WEBBLADE syscall.Errno = 1277 + ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER syscall.Errno = 1278 + ERROR_RECOVERY_FAILURE syscall.Errno = 1279 + ERROR_ALREADY_FIBER syscall.Errno = 1280 + ERROR_ALREADY_THREAD syscall.Errno = 1281 + ERROR_STACK_BUFFER_OVERRUN syscall.Errno = 1282 + ERROR_PARAMETER_QUOTA_EXCEEDED syscall.Errno = 1283 + ERROR_DEBUGGER_INACTIVE syscall.Errno = 1284 + ERROR_DELAY_LOAD_FAILED syscall.Errno = 1285 + ERROR_VDM_DISALLOWED syscall.Errno = 1286 + ERROR_UNIDENTIFIED_ERROR syscall.Errno = 1287 + ERROR_INVALID_CRUNTIME_PARAMETER syscall.Errno = 1288 + ERROR_BEYOND_VDL syscall.Errno = 1289 + ERROR_INCOMPATIBLE_SERVICE_SID_TYPE syscall.Errno = 1290 + ERROR_DRIVER_PROCESS_TERMINATED syscall.Errno = 1291 + ERROR_IMPLEMENTATION_LIMIT syscall.Errno = 1292 + ERROR_PROCESS_IS_PROTECTED syscall.Errno = 1293 + ERROR_SERVICE_NOTIFY_CLIENT_LAGGING syscall.Errno = 1294 + ERROR_DISK_QUOTA_EXCEEDED syscall.Errno = 1295 + ERROR_CONTENT_BLOCKED syscall.Errno = 1296 + ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE syscall.Errno = 1297 + ERROR_APP_HANG syscall.Errno = 1298 + ERROR_INVALID_LABEL syscall.Errno = 1299 + ERROR_NOT_ALL_ASSIGNED syscall.Errno = 1300 + ERROR_SOME_NOT_MAPPED syscall.Errno = 1301 + ERROR_NO_QUOTAS_FOR_ACCOUNT syscall.Errno = 1302 + ERROR_LOCAL_USER_SESSION_KEY syscall.Errno = 1303 + ERROR_NULL_LM_PASSWORD syscall.Errno = 1304 + ERROR_UNKNOWN_REVISION syscall.Errno = 1305 + ERROR_REVISION_MISMATCH syscall.Errno = 1306 + ERROR_INVALID_OWNER syscall.Errno = 1307 + ERROR_INVALID_PRIMARY_GROUP syscall.Errno = 1308 + ERROR_NO_IMPERSONATION_TOKEN syscall.Errno = 1309 + ERROR_CANT_DISABLE_MANDATORY syscall.Errno = 1310 + ERROR_NO_LOGON_SERVERS syscall.Errno = 1311 + ERROR_NO_SUCH_LOGON_SESSION syscall.Errno = 1312 + ERROR_NO_SUCH_PRIVILEGE syscall.Errno = 1313 + ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 + ERROR_INVALID_ACCOUNT_NAME syscall.Errno = 1315 + ERROR_USER_EXISTS syscall.Errno = 1316 + ERROR_NO_SUCH_USER syscall.Errno = 1317 + ERROR_GROUP_EXISTS syscall.Errno = 1318 + ERROR_NO_SUCH_GROUP syscall.Errno = 1319 + ERROR_MEMBER_IN_GROUP syscall.Errno = 1320 + ERROR_MEMBER_NOT_IN_GROUP syscall.Errno = 1321 + ERROR_LAST_ADMIN syscall.Errno = 1322 + ERROR_WRONG_PASSWORD syscall.Errno = 1323 + ERROR_ILL_FORMED_PASSWORD syscall.Errno = 1324 + ERROR_PASSWORD_RESTRICTION syscall.Errno = 1325 + ERROR_LOGON_FAILURE syscall.Errno = 1326 + ERROR_ACCOUNT_RESTRICTION syscall.Errno = 1327 + ERROR_INVALID_LOGON_HOURS syscall.Errno = 1328 + ERROR_INVALID_WORKSTATION syscall.Errno = 1329 + ERROR_PASSWORD_EXPIRED syscall.Errno = 1330 + ERROR_ACCOUNT_DISABLED syscall.Errno = 1331 + ERROR_NONE_MAPPED syscall.Errno = 1332 + ERROR_TOO_MANY_LUIDS_REQUESTED syscall.Errno = 1333 + ERROR_LUIDS_EXHAUSTED syscall.Errno = 1334 + ERROR_INVALID_SUB_AUTHORITY syscall.Errno = 1335 + ERROR_INVALID_ACL syscall.Errno = 1336 + ERROR_INVALID_SID syscall.Errno = 1337 + ERROR_INVALID_SECURITY_DESCR syscall.Errno = 1338 + ERROR_BAD_INHERITANCE_ACL syscall.Errno = 1340 + ERROR_SERVER_DISABLED syscall.Errno = 1341 + ERROR_SERVER_NOT_DISABLED syscall.Errno = 1342 + ERROR_INVALID_ID_AUTHORITY syscall.Errno = 1343 + ERROR_ALLOTTED_SPACE_EXCEEDED syscall.Errno = 1344 + ERROR_INVALID_GROUP_ATTRIBUTES syscall.Errno = 1345 + ERROR_BAD_IMPERSONATION_LEVEL syscall.Errno = 1346 + ERROR_CANT_OPEN_ANONYMOUS syscall.Errno = 1347 + ERROR_BAD_VALIDATION_CLASS syscall.Errno = 1348 + ERROR_BAD_TOKEN_TYPE syscall.Errno = 1349 + ERROR_NO_SECURITY_ON_OBJECT syscall.Errno = 1350 + ERROR_CANT_ACCESS_DOMAIN_INFO syscall.Errno = 1351 + ERROR_INVALID_SERVER_STATE syscall.Errno = 1352 + ERROR_INVALID_DOMAIN_STATE syscall.Errno = 1353 + ERROR_INVALID_DOMAIN_ROLE syscall.Errno = 1354 + ERROR_NO_SUCH_DOMAIN syscall.Errno = 1355 + ERROR_DOMAIN_EXISTS syscall.Errno = 1356 + ERROR_DOMAIN_LIMIT_EXCEEDED syscall.Errno = 1357 + ERROR_INTERNAL_DB_CORRUPTION syscall.Errno = 1358 + ERROR_INTERNAL_ERROR syscall.Errno = 1359 + ERROR_GENERIC_NOT_MAPPED syscall.Errno = 1360 + ERROR_BAD_DESCRIPTOR_FORMAT syscall.Errno = 1361 + ERROR_NOT_LOGON_PROCESS syscall.Errno = 1362 + ERROR_LOGON_SESSION_EXISTS syscall.Errno = 1363 + ERROR_NO_SUCH_PACKAGE syscall.Errno = 1364 + ERROR_BAD_LOGON_SESSION_STATE syscall.Errno = 1365 + ERROR_LOGON_SESSION_COLLISION syscall.Errno = 1366 + ERROR_INVALID_LOGON_TYPE syscall.Errno = 1367 + ERROR_CANNOT_IMPERSONATE syscall.Errno = 1368 + ERROR_RXACT_INVALID_STATE syscall.Errno = 1369 + ERROR_RXACT_COMMIT_FAILURE syscall.Errno = 1370 + ERROR_SPECIAL_ACCOUNT syscall.Errno = 1371 + ERROR_SPECIAL_GROUP syscall.Errno = 1372 + ERROR_SPECIAL_USER syscall.Errno = 1373 + ERROR_MEMBERS_PRIMARY_GROUP syscall.Errno = 1374 + ERROR_TOKEN_ALREADY_IN_USE syscall.Errno = 1375 + ERROR_NO_SUCH_ALIAS syscall.Errno = 1376 + ERROR_MEMBER_NOT_IN_ALIAS syscall.Errno = 1377 + ERROR_MEMBER_IN_ALIAS syscall.Errno = 1378 + ERROR_ALIAS_EXISTS syscall.Errno = 1379 + ERROR_LOGON_NOT_GRANTED syscall.Errno = 1380 + ERROR_TOO_MANY_SECRETS syscall.Errno = 1381 + ERROR_SECRET_TOO_LONG syscall.Errno = 1382 + ERROR_INTERNAL_DB_ERROR syscall.Errno = 1383 + ERROR_TOO_MANY_CONTEXT_IDS syscall.Errno = 1384 + ERROR_LOGON_TYPE_NOT_GRANTED syscall.Errno = 1385 + ERROR_NT_CROSS_ENCRYPTION_REQUIRED syscall.Errno = 1386 + ERROR_NO_SUCH_MEMBER syscall.Errno = 1387 + ERROR_INVALID_MEMBER syscall.Errno = 1388 + ERROR_TOO_MANY_SIDS syscall.Errno = 1389 + ERROR_LM_CROSS_ENCRYPTION_REQUIRED syscall.Errno = 1390 + ERROR_NO_INHERITANCE syscall.Errno = 1391 + ERROR_FILE_CORRUPT syscall.Errno = 1392 + ERROR_DISK_CORRUPT syscall.Errno = 1393 + ERROR_NO_USER_SESSION_KEY syscall.Errno = 1394 + ERROR_LICENSE_QUOTA_EXCEEDED syscall.Errno = 1395 + ERROR_WRONG_TARGET_NAME syscall.Errno = 1396 + ERROR_MUTUAL_AUTH_FAILED syscall.Errno = 1397 + ERROR_TIME_SKEW syscall.Errno = 1398 + ERROR_CURRENT_DOMAIN_NOT_ALLOWED syscall.Errno = 1399 + ERROR_INVALID_WINDOW_HANDLE syscall.Errno = 1400 + ERROR_INVALID_MENU_HANDLE syscall.Errno = 1401 + ERROR_INVALID_CURSOR_HANDLE syscall.Errno = 1402 + ERROR_INVALID_ACCEL_HANDLE syscall.Errno = 1403 + ERROR_INVALID_HOOK_HANDLE syscall.Errno = 1404 + ERROR_INVALID_DWP_HANDLE syscall.Errno = 1405 + ERROR_TLW_WITH_WSCHILD syscall.Errno = 1406 + ERROR_CANNOT_FIND_WND_CLASS syscall.Errno = 1407 + ERROR_WINDOW_OF_OTHER_THREAD syscall.Errno = 1408 + ERROR_HOTKEY_ALREADY_REGISTERED syscall.Errno = 1409 + ERROR_CLASS_ALREADY_EXISTS syscall.Errno = 1410 + ERROR_CLASS_DOES_NOT_EXIST syscall.Errno = 1411 + ERROR_CLASS_HAS_WINDOWS syscall.Errno = 1412 + ERROR_INVALID_INDEX syscall.Errno = 1413 + ERROR_INVALID_ICON_HANDLE syscall.Errno = 1414 + ERROR_PRIVATE_DIALOG_INDEX syscall.Errno = 1415 + ERROR_LISTBOX_ID_NOT_FOUND syscall.Errno = 1416 + ERROR_NO_WILDCARD_CHARACTERS syscall.Errno = 1417 + ERROR_CLIPBOARD_NOT_OPEN syscall.Errno = 1418 + ERROR_HOTKEY_NOT_REGISTERED syscall.Errno = 1419 + ERROR_WINDOW_NOT_DIALOG syscall.Errno = 1420 + ERROR_CONTROL_ID_NOT_FOUND syscall.Errno = 1421 + ERROR_INVALID_COMBOBOX_MESSAGE syscall.Errno = 1422 + ERROR_WINDOW_NOT_COMBOBOX syscall.Errno = 1423 + ERROR_INVALID_EDIT_HEIGHT syscall.Errno = 1424 + ERROR_DC_NOT_FOUND syscall.Errno = 1425 + ERROR_INVALID_HOOK_FILTER syscall.Errno = 1426 + ERROR_INVALID_FILTER_PROC syscall.Errno = 1427 + ERROR_HOOK_NEEDS_HMOD syscall.Errno = 1428 + ERROR_GLOBAL_ONLY_HOOK syscall.Errno = 1429 + ERROR_JOURNAL_HOOK_SET syscall.Errno = 1430 + ERROR_HOOK_NOT_INSTALLED syscall.Errno = 1431 + ERROR_INVALID_LB_MESSAGE syscall.Errno = 1432 + ERROR_SETCOUNT_ON_BAD_LB syscall.Errno = 1433 + ERROR_LB_WITHOUT_TABSTOPS syscall.Errno = 1434 + ERROR_DESTROY_OBJECT_OF_OTHER_THREAD syscall.Errno = 1435 + ERROR_CHILD_WINDOW_MENU syscall.Errno = 1436 + ERROR_NO_SYSTEM_MENU syscall.Errno = 1437 + ERROR_INVALID_MSGBOX_STYLE syscall.Errno = 1438 + ERROR_INVALID_SPI_VALUE syscall.Errno = 1439 + ERROR_SCREEN_ALREADY_LOCKED syscall.Errno = 1440 + ERROR_HWNDS_HAVE_DIFF_PARENT syscall.Errno = 1441 + ERROR_NOT_CHILD_WINDOW syscall.Errno = 1442 + ERROR_INVALID_GW_COMMAND syscall.Errno = 1443 + ERROR_INVALID_THREAD_ID syscall.Errno = 1444 + ERROR_NON_MDICHILD_WINDOW syscall.Errno = 1445 + ERROR_POPUP_ALREADY_ACTIVE syscall.Errno = 1446 + ERROR_NO_SCROLLBARS syscall.Errno = 1447 + ERROR_INVALID_SCROLLBAR_RANGE syscall.Errno = 1448 + ERROR_INVALID_SHOWWIN_COMMAND syscall.Errno = 1449 + ERROR_NO_SYSTEM_RESOURCES syscall.Errno = 1450 + ERROR_NONPAGED_SYSTEM_RESOURCES syscall.Errno = 1451 + ERROR_PAGED_SYSTEM_RESOURCES syscall.Errno = 1452 + ERROR_WORKING_SET_QUOTA syscall.Errno = 1453 + ERROR_PAGEFILE_QUOTA syscall.Errno = 1454 + ERROR_COMMITMENT_LIMIT syscall.Errno = 1455 + ERROR_MENU_ITEM_NOT_FOUND syscall.Errno = 1456 + ERROR_INVALID_KEYBOARD_HANDLE syscall.Errno = 1457 + ERROR_HOOK_TYPE_NOT_ALLOWED syscall.Errno = 1458 + ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION syscall.Errno = 1459 + ERROR_TIMEOUT syscall.Errno = 1460 + ERROR_INVALID_MONITOR_HANDLE syscall.Errno = 1461 + ERROR_INCORRECT_SIZE syscall.Errno = 1462 + ERROR_SYMLINK_CLASS_DISABLED syscall.Errno = 1463 + ERROR_SYMLINK_NOT_SUPPORTED syscall.Errno = 1464 + ERROR_XML_PARSE_ERROR syscall.Errno = 1465 + ERROR_XMLDSIG_ERROR syscall.Errno = 1466 + ERROR_RESTART_APPLICATION syscall.Errno = 1467 + ERROR_WRONG_COMPARTMENT syscall.Errno = 1468 + ERROR_AUTHIP_FAILURE syscall.Errno = 1469 + ERROR_NO_NVRAM_RESOURCES syscall.Errno = 1470 + ERROR_NOT_GUI_PROCESS syscall.Errno = 1471 + ERROR_EVENTLOG_FILE_CORRUPT syscall.Errno = 1500 + ERROR_EVENTLOG_CANT_START syscall.Errno = 1501 + ERROR_LOG_FILE_FULL syscall.Errno = 1502 + ERROR_EVENTLOG_FILE_CHANGED syscall.Errno = 1503 + ERROR_CONTAINER_ASSIGNED syscall.Errno = 1504 + ERROR_JOB_NO_CONTAINER syscall.Errno = 1505 + ERROR_INVALID_TASK_NAME syscall.Errno = 1550 + ERROR_INVALID_TASK_INDEX syscall.Errno = 1551 + ERROR_THREAD_ALREADY_IN_TASK syscall.Errno = 1552 + ERROR_INSTALL_SERVICE_FAILURE syscall.Errno = 1601 + ERROR_INSTALL_USEREXIT syscall.Errno = 1602 + ERROR_INSTALL_FAILURE syscall.Errno = 1603 + ERROR_INSTALL_SUSPEND syscall.Errno = 1604 + ERROR_UNKNOWN_PRODUCT syscall.Errno = 1605 + ERROR_UNKNOWN_FEATURE syscall.Errno = 1606 + ERROR_UNKNOWN_COMPONENT syscall.Errno = 1607 + ERROR_UNKNOWN_PROPERTY syscall.Errno = 1608 + ERROR_INVALID_HANDLE_STATE syscall.Errno = 1609 + ERROR_BAD_CONFIGURATION syscall.Errno = 1610 + ERROR_INDEX_ABSENT syscall.Errno = 1611 + ERROR_INSTALL_SOURCE_ABSENT syscall.Errno = 1612 + ERROR_INSTALL_PACKAGE_VERSION syscall.Errno = 1613 + ERROR_PRODUCT_UNINSTALLED syscall.Errno = 1614 + ERROR_BAD_QUERY_SYNTAX syscall.Errno = 1615 + ERROR_INVALID_FIELD syscall.Errno = 1616 + ERROR_DEVICE_REMOVED syscall.Errno = 1617 + ERROR_INSTALL_ALREADY_RUNNING syscall.Errno = 1618 + ERROR_INSTALL_PACKAGE_OPEN_FAILED syscall.Errno = 1619 + ERROR_INSTALL_PACKAGE_INVALID syscall.Errno = 1620 + ERROR_INSTALL_UI_FAILURE syscall.Errno = 1621 + ERROR_INSTALL_LOG_FAILURE syscall.Errno = 1622 + ERROR_INSTALL_LANGUAGE_UNSUPPORTED syscall.Errno = 1623 + ERROR_INSTALL_TRANSFORM_FAILURE syscall.Errno = 1624 + ERROR_INSTALL_PACKAGE_REJECTED syscall.Errno = 1625 + ERROR_FUNCTION_NOT_CALLED syscall.Errno = 1626 + ERROR_FUNCTION_FAILED syscall.Errno = 1627 + ERROR_INVALID_TABLE syscall.Errno = 1628 + ERROR_DATATYPE_MISMATCH syscall.Errno = 1629 + ERROR_UNSUPPORTED_TYPE syscall.Errno = 1630 + ERROR_CREATE_FAILED syscall.Errno = 1631 + ERROR_INSTALL_TEMP_UNWRITABLE syscall.Errno = 1632 + ERROR_INSTALL_PLATFORM_UNSUPPORTED syscall.Errno = 1633 + ERROR_INSTALL_NOTUSED syscall.Errno = 1634 + ERROR_PATCH_PACKAGE_OPEN_FAILED syscall.Errno = 1635 + ERROR_PATCH_PACKAGE_INVALID syscall.Errno = 1636 + ERROR_PATCH_PACKAGE_UNSUPPORTED syscall.Errno = 1637 + ERROR_PRODUCT_VERSION syscall.Errno = 1638 + ERROR_INVALID_COMMAND_LINE syscall.Errno = 1639 + ERROR_INSTALL_REMOTE_DISALLOWED syscall.Errno = 1640 + ERROR_SUCCESS_REBOOT_INITIATED syscall.Errno = 1641 + ERROR_PATCH_TARGET_NOT_FOUND syscall.Errno = 1642 + ERROR_PATCH_PACKAGE_REJECTED syscall.Errno = 1643 + ERROR_INSTALL_TRANSFORM_REJECTED syscall.Errno = 1644 + ERROR_INSTALL_REMOTE_PROHIBITED syscall.Errno = 1645 + ERROR_PATCH_REMOVAL_UNSUPPORTED syscall.Errno = 1646 + ERROR_UNKNOWN_PATCH syscall.Errno = 1647 + ERROR_PATCH_NO_SEQUENCE syscall.Errno = 1648 + ERROR_PATCH_REMOVAL_DISALLOWED syscall.Errno = 1649 + ERROR_INVALID_PATCH_XML syscall.Errno = 1650 + ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT syscall.Errno = 1651 + ERROR_INSTALL_SERVICE_SAFEBOOT syscall.Errno = 1652 + ERROR_FAIL_FAST_EXCEPTION syscall.Errno = 1653 + ERROR_INSTALL_REJECTED syscall.Errno = 1654 + ERROR_DYNAMIC_CODE_BLOCKED syscall.Errno = 1655 + ERROR_NOT_SAME_OBJECT syscall.Errno = 1656 + ERROR_STRICT_CFG_VIOLATION syscall.Errno = 1657 + ERROR_SET_CONTEXT_DENIED syscall.Errno = 1660 + ERROR_CROSS_PARTITION_VIOLATION syscall.Errno = 1661 + RPC_S_INVALID_STRING_BINDING syscall.Errno = 1700 + RPC_S_WRONG_KIND_OF_BINDING syscall.Errno = 1701 + RPC_S_INVALID_BINDING syscall.Errno = 1702 + RPC_S_PROTSEQ_NOT_SUPPORTED syscall.Errno = 1703 + RPC_S_INVALID_RPC_PROTSEQ syscall.Errno = 1704 + RPC_S_INVALID_STRING_UUID syscall.Errno = 1705 + RPC_S_INVALID_ENDPOINT_FORMAT syscall.Errno = 1706 + RPC_S_INVALID_NET_ADDR syscall.Errno = 1707 + RPC_S_NO_ENDPOINT_FOUND syscall.Errno = 1708 + RPC_S_INVALID_TIMEOUT syscall.Errno = 1709 + RPC_S_OBJECT_NOT_FOUND syscall.Errno = 1710 + RPC_S_ALREADY_REGISTERED syscall.Errno = 1711 + RPC_S_TYPE_ALREADY_REGISTERED syscall.Errno = 1712 + RPC_S_ALREADY_LISTENING syscall.Errno = 1713 + RPC_S_NO_PROTSEQS_REGISTERED syscall.Errno = 1714 + RPC_S_NOT_LISTENING syscall.Errno = 1715 + RPC_S_UNKNOWN_MGR_TYPE syscall.Errno = 1716 + RPC_S_UNKNOWN_IF syscall.Errno = 1717 + RPC_S_NO_BINDINGS syscall.Errno = 1718 + RPC_S_NO_PROTSEQS syscall.Errno = 1719 + RPC_S_CANT_CREATE_ENDPOINT syscall.Errno = 1720 + RPC_S_OUT_OF_RESOURCES syscall.Errno = 1721 + RPC_S_SERVER_UNAVAILABLE syscall.Errno = 1722 + RPC_S_SERVER_TOO_BUSY syscall.Errno = 1723 + RPC_S_INVALID_NETWORK_OPTIONS syscall.Errno = 1724 + RPC_S_NO_CALL_ACTIVE syscall.Errno = 1725 + RPC_S_CALL_FAILED syscall.Errno = 1726 + RPC_S_CALL_FAILED_DNE syscall.Errno = 1727 + RPC_S_PROTOCOL_ERROR syscall.Errno = 1728 + RPC_S_PROXY_ACCESS_DENIED syscall.Errno = 1729 + RPC_S_UNSUPPORTED_TRANS_SYN syscall.Errno = 1730 + RPC_S_UNSUPPORTED_TYPE syscall.Errno = 1732 + RPC_S_INVALID_TAG syscall.Errno = 1733 + RPC_S_INVALID_BOUND syscall.Errno = 1734 + RPC_S_NO_ENTRY_NAME syscall.Errno = 1735 + RPC_S_INVALID_NAME_SYNTAX syscall.Errno = 1736 + RPC_S_UNSUPPORTED_NAME_SYNTAX syscall.Errno = 1737 + RPC_S_UUID_NO_ADDRESS syscall.Errno = 1739 + RPC_S_DUPLICATE_ENDPOINT syscall.Errno = 1740 + RPC_S_UNKNOWN_AUTHN_TYPE syscall.Errno = 1741 + RPC_S_MAX_CALLS_TOO_SMALL syscall.Errno = 1742 + RPC_S_STRING_TOO_LONG syscall.Errno = 1743 + RPC_S_PROTSEQ_NOT_FOUND syscall.Errno = 1744 + RPC_S_PROCNUM_OUT_OF_RANGE syscall.Errno = 1745 + RPC_S_BINDING_HAS_NO_AUTH syscall.Errno = 1746 + RPC_S_UNKNOWN_AUTHN_SERVICE syscall.Errno = 1747 + RPC_S_UNKNOWN_AUTHN_LEVEL syscall.Errno = 1748 + RPC_S_INVALID_AUTH_IDENTITY syscall.Errno = 1749 + RPC_S_UNKNOWN_AUTHZ_SERVICE syscall.Errno = 1750 + EPT_S_INVALID_ENTRY syscall.Errno = 1751 + EPT_S_CANT_PERFORM_OP syscall.Errno = 1752 + EPT_S_NOT_REGISTERED syscall.Errno = 1753 + RPC_S_NOTHING_TO_EXPORT syscall.Errno = 1754 + RPC_S_INCOMPLETE_NAME syscall.Errno = 1755 + RPC_S_INVALID_VERS_OPTION syscall.Errno = 1756 + RPC_S_NO_MORE_MEMBERS syscall.Errno = 1757 + RPC_S_NOT_ALL_OBJS_UNEXPORTED syscall.Errno = 1758 + RPC_S_INTERFACE_NOT_FOUND syscall.Errno = 1759 + RPC_S_ENTRY_ALREADY_EXISTS syscall.Errno = 1760 + RPC_S_ENTRY_NOT_FOUND syscall.Errno = 1761 + RPC_S_NAME_SERVICE_UNAVAILABLE syscall.Errno = 1762 + RPC_S_INVALID_NAF_ID syscall.Errno = 1763 + RPC_S_CANNOT_SUPPORT syscall.Errno = 1764 + RPC_S_NO_CONTEXT_AVAILABLE syscall.Errno = 1765 + RPC_S_INTERNAL_ERROR syscall.Errno = 1766 + RPC_S_ZERO_DIVIDE syscall.Errno = 1767 + RPC_S_ADDRESS_ERROR syscall.Errno = 1768 + RPC_S_FP_DIV_ZERO syscall.Errno = 1769 + RPC_S_FP_UNDERFLOW syscall.Errno = 1770 + RPC_S_FP_OVERFLOW syscall.Errno = 1771 + RPC_X_NO_MORE_ENTRIES syscall.Errno = 1772 + RPC_X_SS_CHAR_TRANS_OPEN_FAIL syscall.Errno = 1773 + RPC_X_SS_CHAR_TRANS_SHORT_FILE syscall.Errno = 1774 + RPC_X_SS_IN_NULL_CONTEXT syscall.Errno = 1775 + RPC_X_SS_CONTEXT_DAMAGED syscall.Errno = 1777 + RPC_X_SS_HANDLES_MISMATCH syscall.Errno = 1778 + RPC_X_SS_CANNOT_GET_CALL_HANDLE syscall.Errno = 1779 + RPC_X_NULL_REF_POINTER syscall.Errno = 1780 + RPC_X_ENUM_VALUE_OUT_OF_RANGE syscall.Errno = 1781 + RPC_X_BYTE_COUNT_TOO_SMALL syscall.Errno = 1782 + RPC_X_BAD_STUB_DATA syscall.Errno = 1783 + ERROR_INVALID_USER_BUFFER syscall.Errno = 1784 + ERROR_UNRECOGNIZED_MEDIA syscall.Errno = 1785 + ERROR_NO_TRUST_LSA_SECRET syscall.Errno = 1786 + ERROR_NO_TRUST_SAM_ACCOUNT syscall.Errno = 1787 + ERROR_TRUSTED_DOMAIN_FAILURE syscall.Errno = 1788 + ERROR_TRUSTED_RELATIONSHIP_FAILURE syscall.Errno = 1789 + ERROR_TRUST_FAILURE syscall.Errno = 1790 + RPC_S_CALL_IN_PROGRESS syscall.Errno = 1791 + ERROR_NETLOGON_NOT_STARTED syscall.Errno = 1792 + ERROR_ACCOUNT_EXPIRED syscall.Errno = 1793 + ERROR_REDIRECTOR_HAS_OPEN_HANDLES syscall.Errno = 1794 + ERROR_PRINTER_DRIVER_ALREADY_INSTALLED syscall.Errno = 1795 + ERROR_UNKNOWN_PORT syscall.Errno = 1796 + ERROR_UNKNOWN_PRINTER_DRIVER syscall.Errno = 1797 + ERROR_UNKNOWN_PRINTPROCESSOR syscall.Errno = 1798 + ERROR_INVALID_SEPARATOR_FILE syscall.Errno = 1799 + ERROR_INVALID_PRIORITY syscall.Errno = 1800 + ERROR_INVALID_PRINTER_NAME syscall.Errno = 1801 + ERROR_PRINTER_ALREADY_EXISTS syscall.Errno = 1802 + ERROR_INVALID_PRINTER_COMMAND syscall.Errno = 1803 + ERROR_INVALID_DATATYPE syscall.Errno = 1804 + ERROR_INVALID_ENVIRONMENT syscall.Errno = 1805 + RPC_S_NO_MORE_BINDINGS syscall.Errno = 1806 + ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT syscall.Errno = 1807 + ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT syscall.Errno = 1808 + ERROR_NOLOGON_SERVER_TRUST_ACCOUNT syscall.Errno = 1809 + ERROR_DOMAIN_TRUST_INCONSISTENT syscall.Errno = 1810 + ERROR_SERVER_HAS_OPEN_HANDLES syscall.Errno = 1811 + ERROR_RESOURCE_DATA_NOT_FOUND syscall.Errno = 1812 + ERROR_RESOURCE_TYPE_NOT_FOUND syscall.Errno = 1813 + ERROR_RESOURCE_NAME_NOT_FOUND syscall.Errno = 1814 + ERROR_RESOURCE_LANG_NOT_FOUND syscall.Errno = 1815 + ERROR_NOT_ENOUGH_QUOTA syscall.Errno = 1816 + RPC_S_NO_INTERFACES syscall.Errno = 1817 + RPC_S_CALL_CANCELLED syscall.Errno = 1818 + RPC_S_BINDING_INCOMPLETE syscall.Errno = 1819 + RPC_S_COMM_FAILURE syscall.Errno = 1820 + RPC_S_UNSUPPORTED_AUTHN_LEVEL syscall.Errno = 1821 + RPC_S_NO_PRINC_NAME syscall.Errno = 1822 + RPC_S_NOT_RPC_ERROR syscall.Errno = 1823 + RPC_S_UUID_LOCAL_ONLY syscall.Errno = 1824 + RPC_S_SEC_PKG_ERROR syscall.Errno = 1825 + RPC_S_NOT_CANCELLED syscall.Errno = 1826 + RPC_X_INVALID_ES_ACTION syscall.Errno = 1827 + RPC_X_WRONG_ES_VERSION syscall.Errno = 1828 + RPC_X_WRONG_STUB_VERSION syscall.Errno = 1829 + RPC_X_INVALID_PIPE_OBJECT syscall.Errno = 1830 + RPC_X_WRONG_PIPE_ORDER syscall.Errno = 1831 + RPC_X_WRONG_PIPE_VERSION syscall.Errno = 1832 + RPC_S_COOKIE_AUTH_FAILED syscall.Errno = 1833 + RPC_S_DO_NOT_DISTURB syscall.Errno = 1834 + RPC_S_SYSTEM_HANDLE_COUNT_EXCEEDED syscall.Errno = 1835 + RPC_S_SYSTEM_HANDLE_TYPE_MISMATCH syscall.Errno = 1836 + RPC_S_GROUP_MEMBER_NOT_FOUND syscall.Errno = 1898 + EPT_S_CANT_CREATE syscall.Errno = 1899 + RPC_S_INVALID_OBJECT syscall.Errno = 1900 + ERROR_INVALID_TIME syscall.Errno = 1901 + ERROR_INVALID_FORM_NAME syscall.Errno = 1902 + ERROR_INVALID_FORM_SIZE syscall.Errno = 1903 + ERROR_ALREADY_WAITING syscall.Errno = 1904 + ERROR_PRINTER_DELETED syscall.Errno = 1905 + ERROR_INVALID_PRINTER_STATE syscall.Errno = 1906 + ERROR_PASSWORD_MUST_CHANGE syscall.Errno = 1907 + ERROR_DOMAIN_CONTROLLER_NOT_FOUND syscall.Errno = 1908 + ERROR_ACCOUNT_LOCKED_OUT syscall.Errno = 1909 + OR_INVALID_OXID syscall.Errno = 1910 + OR_INVALID_OID syscall.Errno = 1911 + OR_INVALID_SET syscall.Errno = 1912 + RPC_S_SEND_INCOMPLETE syscall.Errno = 1913 + RPC_S_INVALID_ASYNC_HANDLE syscall.Errno = 1914 + RPC_S_INVALID_ASYNC_CALL syscall.Errno = 1915 + RPC_X_PIPE_CLOSED syscall.Errno = 1916 + RPC_X_PIPE_DISCIPLINE_ERROR syscall.Errno = 1917 + RPC_X_PIPE_EMPTY syscall.Errno = 1918 + ERROR_NO_SITENAME syscall.Errno = 1919 + ERROR_CANT_ACCESS_FILE syscall.Errno = 1920 + ERROR_CANT_RESOLVE_FILENAME syscall.Errno = 1921 + RPC_S_ENTRY_TYPE_MISMATCH syscall.Errno = 1922 + RPC_S_NOT_ALL_OBJS_EXPORTED syscall.Errno = 1923 + RPC_S_INTERFACE_NOT_EXPORTED syscall.Errno = 1924 + RPC_S_PROFILE_NOT_ADDED syscall.Errno = 1925 + RPC_S_PRF_ELT_NOT_ADDED syscall.Errno = 1926 + RPC_S_PRF_ELT_NOT_REMOVED syscall.Errno = 1927 + RPC_S_GRP_ELT_NOT_ADDED syscall.Errno = 1928 + RPC_S_GRP_ELT_NOT_REMOVED syscall.Errno = 1929 + ERROR_KM_DRIVER_BLOCKED syscall.Errno = 1930 + ERROR_CONTEXT_EXPIRED syscall.Errno = 1931 + ERROR_PER_USER_TRUST_QUOTA_EXCEEDED syscall.Errno = 1932 + ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED syscall.Errno = 1933 + ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED syscall.Errno = 1934 + ERROR_AUTHENTICATION_FIREWALL_FAILED syscall.Errno = 1935 + ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED syscall.Errno = 1936 + ERROR_NTLM_BLOCKED syscall.Errno = 1937 + ERROR_PASSWORD_CHANGE_REQUIRED syscall.Errno = 1938 + ERROR_LOST_MODE_LOGON_RESTRICTION syscall.Errno = 1939 + ERROR_INVALID_PIXEL_FORMAT syscall.Errno = 2000 + ERROR_BAD_DRIVER syscall.Errno = 2001 + ERROR_INVALID_WINDOW_STYLE syscall.Errno = 2002 + ERROR_METAFILE_NOT_SUPPORTED syscall.Errno = 2003 + ERROR_TRANSFORM_NOT_SUPPORTED syscall.Errno = 2004 + ERROR_CLIPPING_NOT_SUPPORTED syscall.Errno = 2005 + ERROR_INVALID_CMM syscall.Errno = 2010 + ERROR_INVALID_PROFILE syscall.Errno = 2011 + ERROR_TAG_NOT_FOUND syscall.Errno = 2012 + ERROR_TAG_NOT_PRESENT syscall.Errno = 2013 + ERROR_DUPLICATE_TAG syscall.Errno = 2014 + ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE syscall.Errno = 2015 + ERROR_PROFILE_NOT_FOUND syscall.Errno = 2016 + ERROR_INVALID_COLORSPACE syscall.Errno = 2017 + ERROR_ICM_NOT_ENABLED syscall.Errno = 2018 + ERROR_DELETING_ICM_XFORM syscall.Errno = 2019 + ERROR_INVALID_TRANSFORM syscall.Errno = 2020 + ERROR_COLORSPACE_MISMATCH syscall.Errno = 2021 + ERROR_INVALID_COLORINDEX syscall.Errno = 2022 + ERROR_PROFILE_DOES_NOT_MATCH_DEVICE syscall.Errno = 2023 + ERROR_CONNECTED_OTHER_PASSWORD syscall.Errno = 2108 + ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT syscall.Errno = 2109 + ERROR_BAD_USERNAME syscall.Errno = 2202 + ERROR_NOT_CONNECTED syscall.Errno = 2250 + ERROR_OPEN_FILES syscall.Errno = 2401 + ERROR_ACTIVE_CONNECTIONS syscall.Errno = 2402 + ERROR_DEVICE_IN_USE syscall.Errno = 2404 + ERROR_UNKNOWN_PRINT_MONITOR syscall.Errno = 3000 + ERROR_PRINTER_DRIVER_IN_USE syscall.Errno = 3001 + ERROR_SPOOL_FILE_NOT_FOUND syscall.Errno = 3002 + ERROR_SPL_NO_STARTDOC syscall.Errno = 3003 + ERROR_SPL_NO_ADDJOB syscall.Errno = 3004 + ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED syscall.Errno = 3005 + ERROR_PRINT_MONITOR_ALREADY_INSTALLED syscall.Errno = 3006 + ERROR_INVALID_PRINT_MONITOR syscall.Errno = 3007 + ERROR_PRINT_MONITOR_IN_USE syscall.Errno = 3008 + ERROR_PRINTER_HAS_JOBS_QUEUED syscall.Errno = 3009 + ERROR_SUCCESS_REBOOT_REQUIRED syscall.Errno = 3010 + ERROR_SUCCESS_RESTART_REQUIRED syscall.Errno = 3011 + ERROR_PRINTER_NOT_FOUND syscall.Errno = 3012 + ERROR_PRINTER_DRIVER_WARNED syscall.Errno = 3013 + ERROR_PRINTER_DRIVER_BLOCKED syscall.Errno = 3014 + ERROR_PRINTER_DRIVER_PACKAGE_IN_USE syscall.Errno = 3015 + ERROR_CORE_DRIVER_PACKAGE_NOT_FOUND syscall.Errno = 3016 + ERROR_FAIL_REBOOT_REQUIRED syscall.Errno = 3017 + ERROR_FAIL_REBOOT_INITIATED syscall.Errno = 3018 + ERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED syscall.Errno = 3019 + ERROR_PRINT_JOB_RESTART_REQUIRED syscall.Errno = 3020 + ERROR_INVALID_PRINTER_DRIVER_MANIFEST syscall.Errno = 3021 + ERROR_PRINTER_NOT_SHAREABLE syscall.Errno = 3022 + ERROR_REQUEST_PAUSED syscall.Errno = 3050 + ERROR_APPEXEC_CONDITION_NOT_SATISFIED syscall.Errno = 3060 + ERROR_APPEXEC_HANDLE_INVALIDATED syscall.Errno = 3061 + ERROR_APPEXEC_INVALID_HOST_GENERATION syscall.Errno = 3062 + ERROR_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION syscall.Errno = 3063 + ERROR_APPEXEC_INVALID_HOST_STATE syscall.Errno = 3064 + ERROR_APPEXEC_NO_DONOR syscall.Errno = 3065 + ERROR_APPEXEC_HOST_ID_MISMATCH syscall.Errno = 3066 + ERROR_APPEXEC_UNKNOWN_USER syscall.Errno = 3067 + ERROR_IO_REISSUE_AS_CACHED syscall.Errno = 3950 + ERROR_WINS_INTERNAL syscall.Errno = 4000 + ERROR_CAN_NOT_DEL_LOCAL_WINS syscall.Errno = 4001 + ERROR_STATIC_INIT syscall.Errno = 4002 + ERROR_INC_BACKUP syscall.Errno = 4003 + ERROR_FULL_BACKUP syscall.Errno = 4004 + ERROR_REC_NON_EXISTENT syscall.Errno = 4005 + ERROR_RPL_NOT_ALLOWED syscall.Errno = 4006 + PEERDIST_ERROR_CONTENTINFO_VERSION_UNSUPPORTED syscall.Errno = 4050 + PEERDIST_ERROR_CANNOT_PARSE_CONTENTINFO syscall.Errno = 4051 + PEERDIST_ERROR_MISSING_DATA syscall.Errno = 4052 + PEERDIST_ERROR_NO_MORE syscall.Errno = 4053 + PEERDIST_ERROR_NOT_INITIALIZED syscall.Errno = 4054 + PEERDIST_ERROR_ALREADY_INITIALIZED syscall.Errno = 4055 + PEERDIST_ERROR_SHUTDOWN_IN_PROGRESS syscall.Errno = 4056 + PEERDIST_ERROR_INVALIDATED syscall.Errno = 4057 + PEERDIST_ERROR_ALREADY_EXISTS syscall.Errno = 4058 + PEERDIST_ERROR_OPERATION_NOTFOUND syscall.Errno = 4059 + PEERDIST_ERROR_ALREADY_COMPLETED syscall.Errno = 4060 + PEERDIST_ERROR_OUT_OF_BOUNDS syscall.Errno = 4061 + PEERDIST_ERROR_VERSION_UNSUPPORTED syscall.Errno = 4062 + PEERDIST_ERROR_INVALID_CONFIGURATION syscall.Errno = 4063 + PEERDIST_ERROR_NOT_LICENSED syscall.Errno = 4064 + PEERDIST_ERROR_SERVICE_UNAVAILABLE syscall.Errno = 4065 + PEERDIST_ERROR_TRUST_FAILURE syscall.Errno = 4066 + ERROR_DHCP_ADDRESS_CONFLICT syscall.Errno = 4100 + ERROR_WMI_GUID_NOT_FOUND syscall.Errno = 4200 + ERROR_WMI_INSTANCE_NOT_FOUND syscall.Errno = 4201 + ERROR_WMI_ITEMID_NOT_FOUND syscall.Errno = 4202 + ERROR_WMI_TRY_AGAIN syscall.Errno = 4203 + ERROR_WMI_DP_NOT_FOUND syscall.Errno = 4204 + ERROR_WMI_UNRESOLVED_INSTANCE_REF syscall.Errno = 4205 + ERROR_WMI_ALREADY_ENABLED syscall.Errno = 4206 + ERROR_WMI_GUID_DISCONNECTED syscall.Errno = 4207 + ERROR_WMI_SERVER_UNAVAILABLE syscall.Errno = 4208 + ERROR_WMI_DP_FAILED syscall.Errno = 4209 + ERROR_WMI_INVALID_MOF syscall.Errno = 4210 + ERROR_WMI_INVALID_REGINFO syscall.Errno = 4211 + ERROR_WMI_ALREADY_DISABLED syscall.Errno = 4212 + ERROR_WMI_READ_ONLY syscall.Errno = 4213 + ERROR_WMI_SET_FAILURE syscall.Errno = 4214 + ERROR_NOT_APPCONTAINER syscall.Errno = 4250 + ERROR_APPCONTAINER_REQUIRED syscall.Errno = 4251 + ERROR_NOT_SUPPORTED_IN_APPCONTAINER syscall.Errno = 4252 + ERROR_INVALID_PACKAGE_SID_LENGTH syscall.Errno = 4253 + ERROR_INVALID_MEDIA syscall.Errno = 4300 + ERROR_INVALID_LIBRARY syscall.Errno = 4301 + ERROR_INVALID_MEDIA_POOL syscall.Errno = 4302 + ERROR_DRIVE_MEDIA_MISMATCH syscall.Errno = 4303 + ERROR_MEDIA_OFFLINE syscall.Errno = 4304 + ERROR_LIBRARY_OFFLINE syscall.Errno = 4305 + ERROR_EMPTY syscall.Errno = 4306 + ERROR_NOT_EMPTY syscall.Errno = 4307 + ERROR_MEDIA_UNAVAILABLE syscall.Errno = 4308 + ERROR_RESOURCE_DISABLED syscall.Errno = 4309 + ERROR_INVALID_CLEANER syscall.Errno = 4310 + ERROR_UNABLE_TO_CLEAN syscall.Errno = 4311 + ERROR_OBJECT_NOT_FOUND syscall.Errno = 4312 + ERROR_DATABASE_FAILURE syscall.Errno = 4313 + ERROR_DATABASE_FULL syscall.Errno = 4314 + ERROR_MEDIA_INCOMPATIBLE syscall.Errno = 4315 + ERROR_RESOURCE_NOT_PRESENT syscall.Errno = 4316 + ERROR_INVALID_OPERATION syscall.Errno = 4317 + ERROR_MEDIA_NOT_AVAILABLE syscall.Errno = 4318 + ERROR_DEVICE_NOT_AVAILABLE syscall.Errno = 4319 + ERROR_REQUEST_REFUSED syscall.Errno = 4320 + ERROR_INVALID_DRIVE_OBJECT syscall.Errno = 4321 + ERROR_LIBRARY_FULL syscall.Errno = 4322 + ERROR_MEDIUM_NOT_ACCESSIBLE syscall.Errno = 4323 + ERROR_UNABLE_TO_LOAD_MEDIUM syscall.Errno = 4324 + ERROR_UNABLE_TO_INVENTORY_DRIVE syscall.Errno = 4325 + ERROR_UNABLE_TO_INVENTORY_SLOT syscall.Errno = 4326 + ERROR_UNABLE_TO_INVENTORY_TRANSPORT syscall.Errno = 4327 + ERROR_TRANSPORT_FULL syscall.Errno = 4328 + ERROR_CONTROLLING_IEPORT syscall.Errno = 4329 + ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA syscall.Errno = 4330 + ERROR_CLEANER_SLOT_SET syscall.Errno = 4331 + ERROR_CLEANER_SLOT_NOT_SET syscall.Errno = 4332 + ERROR_CLEANER_CARTRIDGE_SPENT syscall.Errno = 4333 + ERROR_UNEXPECTED_OMID syscall.Errno = 4334 + ERROR_CANT_DELETE_LAST_ITEM syscall.Errno = 4335 + ERROR_MESSAGE_EXCEEDS_MAX_SIZE syscall.Errno = 4336 + ERROR_VOLUME_CONTAINS_SYS_FILES syscall.Errno = 4337 + ERROR_INDIGENOUS_TYPE syscall.Errno = 4338 + ERROR_NO_SUPPORTING_DRIVES syscall.Errno = 4339 + ERROR_CLEANER_CARTRIDGE_INSTALLED syscall.Errno = 4340 + ERROR_IEPORT_FULL syscall.Errno = 4341 + ERROR_FILE_OFFLINE syscall.Errno = 4350 + ERROR_REMOTE_STORAGE_NOT_ACTIVE syscall.Errno = 4351 + ERROR_REMOTE_STORAGE_MEDIA_ERROR syscall.Errno = 4352 + ERROR_NOT_A_REPARSE_POINT syscall.Errno = 4390 + ERROR_REPARSE_ATTRIBUTE_CONFLICT syscall.Errno = 4391 + ERROR_INVALID_REPARSE_DATA syscall.Errno = 4392 + ERROR_REPARSE_TAG_INVALID syscall.Errno = 4393 + ERROR_REPARSE_TAG_MISMATCH syscall.Errno = 4394 + ERROR_REPARSE_POINT_ENCOUNTERED syscall.Errno = 4395 + ERROR_APP_DATA_NOT_FOUND syscall.Errno = 4400 + ERROR_APP_DATA_EXPIRED syscall.Errno = 4401 + ERROR_APP_DATA_CORRUPT syscall.Errno = 4402 + ERROR_APP_DATA_LIMIT_EXCEEDED syscall.Errno = 4403 + ERROR_APP_DATA_REBOOT_REQUIRED syscall.Errno = 4404 + ERROR_SECUREBOOT_ROLLBACK_DETECTED syscall.Errno = 4420 + ERROR_SECUREBOOT_POLICY_VIOLATION syscall.Errno = 4421 + ERROR_SECUREBOOT_INVALID_POLICY syscall.Errno = 4422 + ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND syscall.Errno = 4423 + ERROR_SECUREBOOT_POLICY_NOT_SIGNED syscall.Errno = 4424 + ERROR_SECUREBOOT_NOT_ENABLED syscall.Errno = 4425 + ERROR_SECUREBOOT_FILE_REPLACED syscall.Errno = 4426 + ERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED syscall.Errno = 4427 + ERROR_SECUREBOOT_POLICY_UNKNOWN syscall.Errno = 4428 + ERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION syscall.Errno = 4429 + ERROR_SECUREBOOT_PLATFORM_ID_MISMATCH syscall.Errno = 4430 + ERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED syscall.Errno = 4431 + ERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH syscall.Errno = 4432 + ERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING syscall.Errno = 4433 + ERROR_SECUREBOOT_NOT_BASE_POLICY syscall.Errno = 4434 + ERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY syscall.Errno = 4435 + ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED syscall.Errno = 4440 + ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED syscall.Errno = 4441 + ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED syscall.Errno = 4442 + ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED syscall.Errno = 4443 + ERROR_ALREADY_HAS_STREAM_ID syscall.Errno = 4444 + ERROR_SMR_GARBAGE_COLLECTION_REQUIRED syscall.Errno = 4445 + ERROR_WOF_WIM_HEADER_CORRUPT syscall.Errno = 4446 + ERROR_WOF_WIM_RESOURCE_TABLE_CORRUPT syscall.Errno = 4447 + ERROR_WOF_FILE_RESOURCE_TABLE_CORRUPT syscall.Errno = 4448 + ERROR_VOLUME_NOT_SIS_ENABLED syscall.Errno = 4500 + ERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED syscall.Errno = 4550 + ERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION syscall.Errno = 4551 + ERROR_SYSTEM_INTEGRITY_INVALID_POLICY syscall.Errno = 4552 + ERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED syscall.Errno = 4553 + ERROR_SYSTEM_INTEGRITY_TOO_MANY_POLICIES syscall.Errno = 4554 + ERROR_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED syscall.Errno = 4555 + ERROR_VSM_NOT_INITIALIZED syscall.Errno = 4560 + ERROR_VSM_DMA_PROTECTION_NOT_IN_USE syscall.Errno = 4561 + ERROR_PLATFORM_MANIFEST_NOT_AUTHORIZED syscall.Errno = 4570 + ERROR_PLATFORM_MANIFEST_INVALID syscall.Errno = 4571 + ERROR_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED syscall.Errno = 4572 + ERROR_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED syscall.Errno = 4573 + ERROR_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND syscall.Errno = 4574 + ERROR_PLATFORM_MANIFEST_NOT_ACTIVE syscall.Errno = 4575 + ERROR_PLATFORM_MANIFEST_NOT_SIGNED syscall.Errno = 4576 + ERROR_DEPENDENT_RESOURCE_EXISTS syscall.Errno = 5001 + ERROR_DEPENDENCY_NOT_FOUND syscall.Errno = 5002 + ERROR_DEPENDENCY_ALREADY_EXISTS syscall.Errno = 5003 + ERROR_RESOURCE_NOT_ONLINE syscall.Errno = 5004 + ERROR_HOST_NODE_NOT_AVAILABLE syscall.Errno = 5005 + ERROR_RESOURCE_NOT_AVAILABLE syscall.Errno = 5006 + ERROR_RESOURCE_NOT_FOUND syscall.Errno = 5007 + ERROR_SHUTDOWN_CLUSTER syscall.Errno = 5008 + ERROR_CANT_EVICT_ACTIVE_NODE syscall.Errno = 5009 + ERROR_OBJECT_ALREADY_EXISTS syscall.Errno = 5010 + ERROR_OBJECT_IN_LIST syscall.Errno = 5011 + ERROR_GROUP_NOT_AVAILABLE syscall.Errno = 5012 + ERROR_GROUP_NOT_FOUND syscall.Errno = 5013 + ERROR_GROUP_NOT_ONLINE syscall.Errno = 5014 + ERROR_HOST_NODE_NOT_RESOURCE_OWNER syscall.Errno = 5015 + ERROR_HOST_NODE_NOT_GROUP_OWNER syscall.Errno = 5016 + ERROR_RESMON_CREATE_FAILED syscall.Errno = 5017 + ERROR_RESMON_ONLINE_FAILED syscall.Errno = 5018 + ERROR_RESOURCE_ONLINE syscall.Errno = 5019 + ERROR_QUORUM_RESOURCE syscall.Errno = 5020 + ERROR_NOT_QUORUM_CAPABLE syscall.Errno = 5021 + ERROR_CLUSTER_SHUTTING_DOWN syscall.Errno = 5022 + ERROR_INVALID_STATE syscall.Errno = 5023 + ERROR_RESOURCE_PROPERTIES_STORED syscall.Errno = 5024 + ERROR_NOT_QUORUM_CLASS syscall.Errno = 5025 + ERROR_CORE_RESOURCE syscall.Errno = 5026 + ERROR_QUORUM_RESOURCE_ONLINE_FAILED syscall.Errno = 5027 + ERROR_QUORUMLOG_OPEN_FAILED syscall.Errno = 5028 + ERROR_CLUSTERLOG_CORRUPT syscall.Errno = 5029 + ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE syscall.Errno = 5030 + ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE syscall.Errno = 5031 + ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND syscall.Errno = 5032 + ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE syscall.Errno = 5033 + ERROR_QUORUM_OWNER_ALIVE syscall.Errno = 5034 + ERROR_NETWORK_NOT_AVAILABLE syscall.Errno = 5035 + ERROR_NODE_NOT_AVAILABLE syscall.Errno = 5036 + ERROR_ALL_NODES_NOT_AVAILABLE syscall.Errno = 5037 + ERROR_RESOURCE_FAILED syscall.Errno = 5038 + ERROR_CLUSTER_INVALID_NODE syscall.Errno = 5039 + ERROR_CLUSTER_NODE_EXISTS syscall.Errno = 5040 + ERROR_CLUSTER_JOIN_IN_PROGRESS syscall.Errno = 5041 + ERROR_CLUSTER_NODE_NOT_FOUND syscall.Errno = 5042 + ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND syscall.Errno = 5043 + ERROR_CLUSTER_NETWORK_EXISTS syscall.Errno = 5044 + ERROR_CLUSTER_NETWORK_NOT_FOUND syscall.Errno = 5045 + ERROR_CLUSTER_NETINTERFACE_EXISTS syscall.Errno = 5046 + ERROR_CLUSTER_NETINTERFACE_NOT_FOUND syscall.Errno = 5047 + ERROR_CLUSTER_INVALID_REQUEST syscall.Errno = 5048 + ERROR_CLUSTER_INVALID_NETWORK_PROVIDER syscall.Errno = 5049 + ERROR_CLUSTER_NODE_DOWN syscall.Errno = 5050 + ERROR_CLUSTER_NODE_UNREACHABLE syscall.Errno = 5051 + ERROR_CLUSTER_NODE_NOT_MEMBER syscall.Errno = 5052 + ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS syscall.Errno = 5053 + ERROR_CLUSTER_INVALID_NETWORK syscall.Errno = 5054 + ERROR_CLUSTER_NODE_UP syscall.Errno = 5056 + ERROR_CLUSTER_IPADDR_IN_USE syscall.Errno = 5057 + ERROR_CLUSTER_NODE_NOT_PAUSED syscall.Errno = 5058 + ERROR_CLUSTER_NO_SECURITY_CONTEXT syscall.Errno = 5059 + ERROR_CLUSTER_NETWORK_NOT_INTERNAL syscall.Errno = 5060 + ERROR_CLUSTER_NODE_ALREADY_UP syscall.Errno = 5061 + ERROR_CLUSTER_NODE_ALREADY_DOWN syscall.Errno = 5062 + ERROR_CLUSTER_NETWORK_ALREADY_ONLINE syscall.Errno = 5063 + ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE syscall.Errno = 5064 + ERROR_CLUSTER_NODE_ALREADY_MEMBER syscall.Errno = 5065 + ERROR_CLUSTER_LAST_INTERNAL_NETWORK syscall.Errno = 5066 + ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS syscall.Errno = 5067 + ERROR_INVALID_OPERATION_ON_QUORUM syscall.Errno = 5068 + ERROR_DEPENDENCY_NOT_ALLOWED syscall.Errno = 5069 + ERROR_CLUSTER_NODE_PAUSED syscall.Errno = 5070 + ERROR_NODE_CANT_HOST_RESOURCE syscall.Errno = 5071 + ERROR_CLUSTER_NODE_NOT_READY syscall.Errno = 5072 + ERROR_CLUSTER_NODE_SHUTTING_DOWN syscall.Errno = 5073 + ERROR_CLUSTER_JOIN_ABORTED syscall.Errno = 5074 + ERROR_CLUSTER_INCOMPATIBLE_VERSIONS syscall.Errno = 5075 + ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED syscall.Errno = 5076 + ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED syscall.Errno = 5077 + ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND syscall.Errno = 5078 + ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED syscall.Errno = 5079 + ERROR_CLUSTER_RESNAME_NOT_FOUND syscall.Errno = 5080 + ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED syscall.Errno = 5081 + ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST syscall.Errno = 5082 + ERROR_CLUSTER_DATABASE_SEQMISMATCH syscall.Errno = 5083 + ERROR_RESMON_INVALID_STATE syscall.Errno = 5084 + ERROR_CLUSTER_GUM_NOT_LOCKER syscall.Errno = 5085 + ERROR_QUORUM_DISK_NOT_FOUND syscall.Errno = 5086 + ERROR_DATABASE_BACKUP_CORRUPT syscall.Errno = 5087 + ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT syscall.Errno = 5088 + ERROR_RESOURCE_PROPERTY_UNCHANGEABLE syscall.Errno = 5089 + ERROR_NO_ADMIN_ACCESS_POINT syscall.Errno = 5090 + ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE syscall.Errno = 5890 + ERROR_CLUSTER_QUORUMLOG_NOT_FOUND syscall.Errno = 5891 + ERROR_CLUSTER_MEMBERSHIP_HALT syscall.Errno = 5892 + ERROR_CLUSTER_INSTANCE_ID_MISMATCH syscall.Errno = 5893 + ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP syscall.Errno = 5894 + ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH syscall.Errno = 5895 + ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP syscall.Errno = 5896 + ERROR_CLUSTER_PARAMETER_MISMATCH syscall.Errno = 5897 + ERROR_NODE_CANNOT_BE_CLUSTERED syscall.Errno = 5898 + ERROR_CLUSTER_WRONG_OS_VERSION syscall.Errno = 5899 + ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME syscall.Errno = 5900 + ERROR_CLUSCFG_ALREADY_COMMITTED syscall.Errno = 5901 + ERROR_CLUSCFG_ROLLBACK_FAILED syscall.Errno = 5902 + ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT syscall.Errno = 5903 + ERROR_CLUSTER_OLD_VERSION syscall.Errno = 5904 + ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME syscall.Errno = 5905 + ERROR_CLUSTER_NO_NET_ADAPTERS syscall.Errno = 5906 + ERROR_CLUSTER_POISONED syscall.Errno = 5907 + ERROR_CLUSTER_GROUP_MOVING syscall.Errno = 5908 + ERROR_CLUSTER_RESOURCE_TYPE_BUSY syscall.Errno = 5909 + ERROR_RESOURCE_CALL_TIMED_OUT syscall.Errno = 5910 + ERROR_INVALID_CLUSTER_IPV6_ADDRESS syscall.Errno = 5911 + ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION syscall.Errno = 5912 + ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS syscall.Errno = 5913 + ERROR_CLUSTER_PARTIAL_SEND syscall.Errno = 5914 + ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION syscall.Errno = 5915 + ERROR_CLUSTER_INVALID_STRING_TERMINATION syscall.Errno = 5916 + ERROR_CLUSTER_INVALID_STRING_FORMAT syscall.Errno = 5917 + ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS syscall.Errno = 5918 + ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS syscall.Errno = 5919 + ERROR_CLUSTER_NULL_DATA syscall.Errno = 5920 + ERROR_CLUSTER_PARTIAL_READ syscall.Errno = 5921 + ERROR_CLUSTER_PARTIAL_WRITE syscall.Errno = 5922 + ERROR_CLUSTER_CANT_DESERIALIZE_DATA syscall.Errno = 5923 + ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT syscall.Errno = 5924 + ERROR_CLUSTER_NO_QUORUM syscall.Errno = 5925 + ERROR_CLUSTER_INVALID_IPV6_NETWORK syscall.Errno = 5926 + ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK syscall.Errno = 5927 + ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP syscall.Errno = 5928 + ERROR_DEPENDENCY_TREE_TOO_COMPLEX syscall.Errno = 5929 + ERROR_EXCEPTION_IN_RESOURCE_CALL syscall.Errno = 5930 + ERROR_CLUSTER_RHS_FAILED_INITIALIZATION syscall.Errno = 5931 + ERROR_CLUSTER_NOT_INSTALLED syscall.Errno = 5932 + ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE syscall.Errno = 5933 + ERROR_CLUSTER_MAX_NODES_IN_CLUSTER syscall.Errno = 5934 + ERROR_CLUSTER_TOO_MANY_NODES syscall.Errno = 5935 + ERROR_CLUSTER_OBJECT_ALREADY_USED syscall.Errno = 5936 + ERROR_NONCORE_GROUPS_FOUND syscall.Errno = 5937 + ERROR_FILE_SHARE_RESOURCE_CONFLICT syscall.Errno = 5938 + ERROR_CLUSTER_EVICT_INVALID_REQUEST syscall.Errno = 5939 + ERROR_CLUSTER_SINGLETON_RESOURCE syscall.Errno = 5940 + ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE syscall.Errno = 5941 + ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED syscall.Errno = 5942 + ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR syscall.Errno = 5943 + ERROR_CLUSTER_GROUP_BUSY syscall.Errno = 5944 + ERROR_CLUSTER_NOT_SHARED_VOLUME syscall.Errno = 5945 + ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR syscall.Errno = 5946 + ERROR_CLUSTER_SHARED_VOLUMES_IN_USE syscall.Errno = 5947 + ERROR_CLUSTER_USE_SHARED_VOLUMES_API syscall.Errno = 5948 + ERROR_CLUSTER_BACKUP_IN_PROGRESS syscall.Errno = 5949 + ERROR_NON_CSV_PATH syscall.Errno = 5950 + ERROR_CSV_VOLUME_NOT_LOCAL syscall.Errno = 5951 + ERROR_CLUSTER_WATCHDOG_TERMINATING syscall.Errno = 5952 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES syscall.Errno = 5953 + ERROR_CLUSTER_INVALID_NODE_WEIGHT syscall.Errno = 5954 + ERROR_CLUSTER_RESOURCE_VETOED_CALL syscall.Errno = 5955 + ERROR_RESMON_SYSTEM_RESOURCES_LACKING syscall.Errno = 5956 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION syscall.Errno = 5957 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE syscall.Errno = 5958 + ERROR_CLUSTER_GROUP_QUEUED syscall.Errno = 5959 + ERROR_CLUSTER_RESOURCE_LOCKED_STATUS syscall.Errno = 5960 + ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED syscall.Errno = 5961 + ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS syscall.Errno = 5962 + ERROR_CLUSTER_DISK_NOT_CONNECTED syscall.Errno = 5963 + ERROR_DISK_NOT_CSV_CAPABLE syscall.Errno = 5964 + ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE syscall.Errno = 5965 + ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED syscall.Errno = 5966 + ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED syscall.Errno = 5967 + ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES syscall.Errno = 5968 + ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES syscall.Errno = 5969 + ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE syscall.Errno = 5970 + ERROR_CLUSTER_AFFINITY_CONFLICT syscall.Errno = 5971 + ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE syscall.Errno = 5972 + ERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS syscall.Errno = 5973 + ERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED syscall.Errno = 5974 + ERROR_CLUSTER_UPGRADE_RESTART_REQUIRED syscall.Errno = 5975 + ERROR_CLUSTER_UPGRADE_IN_PROGRESS syscall.Errno = 5976 + ERROR_CLUSTER_UPGRADE_INCOMPLETE syscall.Errno = 5977 + ERROR_CLUSTER_NODE_IN_GRACE_PERIOD syscall.Errno = 5978 + ERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT syscall.Errno = 5979 + ERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER syscall.Errno = 5980 + ERROR_CLUSTER_RESOURCE_NOT_MONITORED syscall.Errno = 5981 + ERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED syscall.Errno = 5982 + ERROR_CLUSTER_RESOURCE_IS_REPLICATED syscall.Errno = 5983 + ERROR_CLUSTER_NODE_ISOLATED syscall.Errno = 5984 + ERROR_CLUSTER_NODE_QUARANTINED syscall.Errno = 5985 + ERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED syscall.Errno = 5986 + ERROR_CLUSTER_SPACE_DEGRADED syscall.Errno = 5987 + ERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED syscall.Errno = 5988 + ERROR_CLUSTER_CSV_INVALID_HANDLE syscall.Errno = 5989 + ERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR syscall.Errno = 5990 + ERROR_GROUPSET_NOT_AVAILABLE syscall.Errno = 5991 + ERROR_GROUPSET_NOT_FOUND syscall.Errno = 5992 + ERROR_GROUPSET_CANT_PROVIDE syscall.Errno = 5993 + ERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND syscall.Errno = 5994 + ERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY syscall.Errno = 5995 + ERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION syscall.Errno = 5996 + ERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS syscall.Errno = 5997 + ERROR_CLUSTER_INVALID_INFRASTRUCTURE_FILESERVER_NAME syscall.Errno = 5998 + ERROR_CLUSTERSET_MANAGEMENT_CLUSTER_UNREACHABLE syscall.Errno = 5999 + ERROR_ENCRYPTION_FAILED syscall.Errno = 6000 + ERROR_DECRYPTION_FAILED syscall.Errno = 6001 + ERROR_FILE_ENCRYPTED syscall.Errno = 6002 + ERROR_NO_RECOVERY_POLICY syscall.Errno = 6003 + ERROR_NO_EFS syscall.Errno = 6004 + ERROR_WRONG_EFS syscall.Errno = 6005 + ERROR_NO_USER_KEYS syscall.Errno = 6006 + ERROR_FILE_NOT_ENCRYPTED syscall.Errno = 6007 + ERROR_NOT_EXPORT_FORMAT syscall.Errno = 6008 + ERROR_FILE_READ_ONLY syscall.Errno = 6009 + ERROR_DIR_EFS_DISALLOWED syscall.Errno = 6010 + ERROR_EFS_SERVER_NOT_TRUSTED syscall.Errno = 6011 + ERROR_BAD_RECOVERY_POLICY syscall.Errno = 6012 + ERROR_EFS_ALG_BLOB_TOO_BIG syscall.Errno = 6013 + ERROR_VOLUME_NOT_SUPPORT_EFS syscall.Errno = 6014 + ERROR_EFS_DISABLED syscall.Errno = 6015 + ERROR_EFS_VERSION_NOT_SUPPORT syscall.Errno = 6016 + ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE syscall.Errno = 6017 + ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER syscall.Errno = 6018 + ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE syscall.Errno = 6019 + ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE syscall.Errno = 6020 + ERROR_CS_ENCRYPTION_FILE_NOT_CSE syscall.Errno = 6021 + ERROR_ENCRYPTION_POLICY_DENIES_OPERATION syscall.Errno = 6022 + ERROR_WIP_ENCRYPTION_FAILED syscall.Errno = 6023 + ERROR_NO_BROWSER_SERVERS_FOUND syscall.Errno = 6118 + SCHED_E_SERVICE_NOT_LOCALSYSTEM syscall.Errno = 6200 + ERROR_LOG_SECTOR_INVALID syscall.Errno = 6600 + ERROR_LOG_SECTOR_PARITY_INVALID syscall.Errno = 6601 + ERROR_LOG_SECTOR_REMAPPED syscall.Errno = 6602 + ERROR_LOG_BLOCK_INCOMPLETE syscall.Errno = 6603 + ERROR_LOG_INVALID_RANGE syscall.Errno = 6604 + ERROR_LOG_BLOCKS_EXHAUSTED syscall.Errno = 6605 + ERROR_LOG_READ_CONTEXT_INVALID syscall.Errno = 6606 + ERROR_LOG_RESTART_INVALID syscall.Errno = 6607 + ERROR_LOG_BLOCK_VERSION syscall.Errno = 6608 + ERROR_LOG_BLOCK_INVALID syscall.Errno = 6609 + ERROR_LOG_READ_MODE_INVALID syscall.Errno = 6610 + ERROR_LOG_NO_RESTART syscall.Errno = 6611 + ERROR_LOG_METADATA_CORRUPT syscall.Errno = 6612 + ERROR_LOG_METADATA_INVALID syscall.Errno = 6613 + ERROR_LOG_METADATA_INCONSISTENT syscall.Errno = 6614 + ERROR_LOG_RESERVATION_INVALID syscall.Errno = 6615 + ERROR_LOG_CANT_DELETE syscall.Errno = 6616 + ERROR_LOG_CONTAINER_LIMIT_EXCEEDED syscall.Errno = 6617 + ERROR_LOG_START_OF_LOG syscall.Errno = 6618 + ERROR_LOG_POLICY_ALREADY_INSTALLED syscall.Errno = 6619 + ERROR_LOG_POLICY_NOT_INSTALLED syscall.Errno = 6620 + ERROR_LOG_POLICY_INVALID syscall.Errno = 6621 + ERROR_LOG_POLICY_CONFLICT syscall.Errno = 6622 + ERROR_LOG_PINNED_ARCHIVE_TAIL syscall.Errno = 6623 + ERROR_LOG_RECORD_NONEXISTENT syscall.Errno = 6624 + ERROR_LOG_RECORDS_RESERVED_INVALID syscall.Errno = 6625 + ERROR_LOG_SPACE_RESERVED_INVALID syscall.Errno = 6626 + ERROR_LOG_TAIL_INVALID syscall.Errno = 6627 + ERROR_LOG_FULL syscall.Errno = 6628 + ERROR_COULD_NOT_RESIZE_LOG syscall.Errno = 6629 + ERROR_LOG_MULTIPLEXED syscall.Errno = 6630 + ERROR_LOG_DEDICATED syscall.Errno = 6631 + ERROR_LOG_ARCHIVE_NOT_IN_PROGRESS syscall.Errno = 6632 + ERROR_LOG_ARCHIVE_IN_PROGRESS syscall.Errno = 6633 + ERROR_LOG_EPHEMERAL syscall.Errno = 6634 + ERROR_LOG_NOT_ENOUGH_CONTAINERS syscall.Errno = 6635 + ERROR_LOG_CLIENT_ALREADY_REGISTERED syscall.Errno = 6636 + ERROR_LOG_CLIENT_NOT_REGISTERED syscall.Errno = 6637 + ERROR_LOG_FULL_HANDLER_IN_PROGRESS syscall.Errno = 6638 + ERROR_LOG_CONTAINER_READ_FAILED syscall.Errno = 6639 + ERROR_LOG_CONTAINER_WRITE_FAILED syscall.Errno = 6640 + ERROR_LOG_CONTAINER_OPEN_FAILED syscall.Errno = 6641 + ERROR_LOG_CONTAINER_STATE_INVALID syscall.Errno = 6642 + ERROR_LOG_STATE_INVALID syscall.Errno = 6643 + ERROR_LOG_PINNED syscall.Errno = 6644 + ERROR_LOG_METADATA_FLUSH_FAILED syscall.Errno = 6645 + ERROR_LOG_INCONSISTENT_SECURITY syscall.Errno = 6646 + ERROR_LOG_APPENDED_FLUSH_FAILED syscall.Errno = 6647 + ERROR_LOG_PINNED_RESERVATION syscall.Errno = 6648 + ERROR_INVALID_TRANSACTION syscall.Errno = 6700 + ERROR_TRANSACTION_NOT_ACTIVE syscall.Errno = 6701 + ERROR_TRANSACTION_REQUEST_NOT_VALID syscall.Errno = 6702 + ERROR_TRANSACTION_NOT_REQUESTED syscall.Errno = 6703 + ERROR_TRANSACTION_ALREADY_ABORTED syscall.Errno = 6704 + ERROR_TRANSACTION_ALREADY_COMMITTED syscall.Errno = 6705 + ERROR_TM_INITIALIZATION_FAILED syscall.Errno = 6706 + ERROR_RESOURCEMANAGER_READ_ONLY syscall.Errno = 6707 + ERROR_TRANSACTION_NOT_JOINED syscall.Errno = 6708 + ERROR_TRANSACTION_SUPERIOR_EXISTS syscall.Errno = 6709 + ERROR_CRM_PROTOCOL_ALREADY_EXISTS syscall.Errno = 6710 + ERROR_TRANSACTION_PROPAGATION_FAILED syscall.Errno = 6711 + ERROR_CRM_PROTOCOL_NOT_FOUND syscall.Errno = 6712 + ERROR_TRANSACTION_INVALID_MARSHALL_BUFFER syscall.Errno = 6713 + ERROR_CURRENT_TRANSACTION_NOT_VALID syscall.Errno = 6714 + ERROR_TRANSACTION_NOT_FOUND syscall.Errno = 6715 + ERROR_RESOURCEMANAGER_NOT_FOUND syscall.Errno = 6716 + ERROR_ENLISTMENT_NOT_FOUND syscall.Errno = 6717 + ERROR_TRANSACTIONMANAGER_NOT_FOUND syscall.Errno = 6718 + ERROR_TRANSACTIONMANAGER_NOT_ONLINE syscall.Errno = 6719 + ERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION syscall.Errno = 6720 + ERROR_TRANSACTION_NOT_ROOT syscall.Errno = 6721 + ERROR_TRANSACTION_OBJECT_EXPIRED syscall.Errno = 6722 + ERROR_TRANSACTION_RESPONSE_NOT_ENLISTED syscall.Errno = 6723 + ERROR_TRANSACTION_RECORD_TOO_LONG syscall.Errno = 6724 + ERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED syscall.Errno = 6725 + ERROR_TRANSACTION_INTEGRITY_VIOLATED syscall.Errno = 6726 + ERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH syscall.Errno = 6727 + ERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT syscall.Errno = 6728 + ERROR_TRANSACTION_MUST_WRITETHROUGH syscall.Errno = 6729 + ERROR_TRANSACTION_NO_SUPERIOR syscall.Errno = 6730 + ERROR_HEURISTIC_DAMAGE_POSSIBLE syscall.Errno = 6731 + ERROR_TRANSACTIONAL_CONFLICT syscall.Errno = 6800 + ERROR_RM_NOT_ACTIVE syscall.Errno = 6801 + ERROR_RM_METADATA_CORRUPT syscall.Errno = 6802 + ERROR_DIRECTORY_NOT_RM syscall.Errno = 6803 + ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE syscall.Errno = 6805 + ERROR_LOG_RESIZE_INVALID_SIZE syscall.Errno = 6806 + ERROR_OBJECT_NO_LONGER_EXISTS syscall.Errno = 6807 + ERROR_STREAM_MINIVERSION_NOT_FOUND syscall.Errno = 6808 + ERROR_STREAM_MINIVERSION_NOT_VALID syscall.Errno = 6809 + ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION syscall.Errno = 6810 + ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT syscall.Errno = 6811 + ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS syscall.Errno = 6812 + ERROR_REMOTE_FILE_VERSION_MISMATCH syscall.Errno = 6814 + ERROR_HANDLE_NO_LONGER_VALID syscall.Errno = 6815 + ERROR_NO_TXF_METADATA syscall.Errno = 6816 + ERROR_LOG_CORRUPTION_DETECTED syscall.Errno = 6817 + ERROR_CANT_RECOVER_WITH_HANDLE_OPEN syscall.Errno = 6818 + ERROR_RM_DISCONNECTED syscall.Errno = 6819 + ERROR_ENLISTMENT_NOT_SUPERIOR syscall.Errno = 6820 + ERROR_RECOVERY_NOT_NEEDED syscall.Errno = 6821 + ERROR_RM_ALREADY_STARTED syscall.Errno = 6822 + ERROR_FILE_IDENTITY_NOT_PERSISTENT syscall.Errno = 6823 + ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY syscall.Errno = 6824 + ERROR_CANT_CROSS_RM_BOUNDARY syscall.Errno = 6825 + ERROR_TXF_DIR_NOT_EMPTY syscall.Errno = 6826 + ERROR_INDOUBT_TRANSACTIONS_EXIST syscall.Errno = 6827 + ERROR_TM_VOLATILE syscall.Errno = 6828 + ERROR_ROLLBACK_TIMER_EXPIRED syscall.Errno = 6829 + ERROR_TXF_ATTRIBUTE_CORRUPT syscall.Errno = 6830 + ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6831 + ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED syscall.Errno = 6832 + ERROR_LOG_GROWTH_FAILED syscall.Errno = 6833 + ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE syscall.Errno = 6834 + ERROR_TXF_METADATA_ALREADY_PRESENT syscall.Errno = 6835 + ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET syscall.Errno = 6836 + ERROR_TRANSACTION_REQUIRED_PROMOTION syscall.Errno = 6837 + ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION syscall.Errno = 6838 + ERROR_TRANSACTIONS_NOT_FROZEN syscall.Errno = 6839 + ERROR_TRANSACTION_FREEZE_IN_PROGRESS syscall.Errno = 6840 + ERROR_NOT_SNAPSHOT_VOLUME syscall.Errno = 6841 + ERROR_NO_SAVEPOINT_WITH_OPEN_FILES syscall.Errno = 6842 + ERROR_DATA_LOST_REPAIR syscall.Errno = 6843 + ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6844 + ERROR_TM_IDENTITY_MISMATCH syscall.Errno = 6845 + ERROR_FLOATED_SECTION syscall.Errno = 6846 + ERROR_CANNOT_ACCEPT_TRANSACTED_WORK syscall.Errno = 6847 + ERROR_CANNOT_ABORT_TRANSACTIONS syscall.Errno = 6848 + ERROR_BAD_CLUSTERS syscall.Errno = 6849 + ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6850 + ERROR_VOLUME_DIRTY syscall.Errno = 6851 + ERROR_NO_LINK_TRACKING_IN_TRANSACTION syscall.Errno = 6852 + ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION syscall.Errno = 6853 + ERROR_EXPIRED_HANDLE syscall.Errno = 6854 + ERROR_TRANSACTION_NOT_ENLISTED syscall.Errno = 6855 + ERROR_CTX_WINSTATION_NAME_INVALID syscall.Errno = 7001 + ERROR_CTX_INVALID_PD syscall.Errno = 7002 + ERROR_CTX_PD_NOT_FOUND syscall.Errno = 7003 + ERROR_CTX_WD_NOT_FOUND syscall.Errno = 7004 + ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY syscall.Errno = 7005 + ERROR_CTX_SERVICE_NAME_COLLISION syscall.Errno = 7006 + ERROR_CTX_CLOSE_PENDING syscall.Errno = 7007 + ERROR_CTX_NO_OUTBUF syscall.Errno = 7008 + ERROR_CTX_MODEM_INF_NOT_FOUND syscall.Errno = 7009 + ERROR_CTX_INVALID_MODEMNAME syscall.Errno = 7010 + ERROR_CTX_MODEM_RESPONSE_ERROR syscall.Errno = 7011 + ERROR_CTX_MODEM_RESPONSE_TIMEOUT syscall.Errno = 7012 + ERROR_CTX_MODEM_RESPONSE_NO_CARRIER syscall.Errno = 7013 + ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE syscall.Errno = 7014 + ERROR_CTX_MODEM_RESPONSE_BUSY syscall.Errno = 7015 + ERROR_CTX_MODEM_RESPONSE_VOICE syscall.Errno = 7016 + ERROR_CTX_TD_ERROR syscall.Errno = 7017 + ERROR_CTX_WINSTATION_NOT_FOUND syscall.Errno = 7022 + ERROR_CTX_WINSTATION_ALREADY_EXISTS syscall.Errno = 7023 + ERROR_CTX_WINSTATION_BUSY syscall.Errno = 7024 + ERROR_CTX_BAD_VIDEO_MODE syscall.Errno = 7025 + ERROR_CTX_GRAPHICS_INVALID syscall.Errno = 7035 + ERROR_CTX_LOGON_DISABLED syscall.Errno = 7037 + ERROR_CTX_NOT_CONSOLE syscall.Errno = 7038 + ERROR_CTX_CLIENT_QUERY_TIMEOUT syscall.Errno = 7040 + ERROR_CTX_CONSOLE_DISCONNECT syscall.Errno = 7041 + ERROR_CTX_CONSOLE_CONNECT syscall.Errno = 7042 + ERROR_CTX_SHADOW_DENIED syscall.Errno = 7044 + ERROR_CTX_WINSTATION_ACCESS_DENIED syscall.Errno = 7045 + ERROR_CTX_INVALID_WD syscall.Errno = 7049 + ERROR_CTX_SHADOW_INVALID syscall.Errno = 7050 + ERROR_CTX_SHADOW_DISABLED syscall.Errno = 7051 + ERROR_CTX_CLIENT_LICENSE_IN_USE syscall.Errno = 7052 + ERROR_CTX_CLIENT_LICENSE_NOT_SET syscall.Errno = 7053 + ERROR_CTX_LICENSE_NOT_AVAILABLE syscall.Errno = 7054 + ERROR_CTX_LICENSE_CLIENT_INVALID syscall.Errno = 7055 + ERROR_CTX_LICENSE_EXPIRED syscall.Errno = 7056 + ERROR_CTX_SHADOW_NOT_RUNNING syscall.Errno = 7057 + ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE syscall.Errno = 7058 + ERROR_ACTIVATION_COUNT_EXCEEDED syscall.Errno = 7059 + ERROR_CTX_WINSTATIONS_DISABLED syscall.Errno = 7060 + ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED syscall.Errno = 7061 + ERROR_CTX_SESSION_IN_USE syscall.Errno = 7062 + ERROR_CTX_NO_FORCE_LOGOFF syscall.Errno = 7063 + ERROR_CTX_ACCOUNT_RESTRICTION syscall.Errno = 7064 + ERROR_RDP_PROTOCOL_ERROR syscall.Errno = 7065 + ERROR_CTX_CDM_CONNECT syscall.Errno = 7066 + ERROR_CTX_CDM_DISCONNECT syscall.Errno = 7067 + ERROR_CTX_SECURITY_LAYER_ERROR syscall.Errno = 7068 + ERROR_TS_INCOMPATIBLE_SESSIONS syscall.Errno = 7069 + ERROR_TS_VIDEO_SUBSYSTEM_ERROR syscall.Errno = 7070 + FRS_ERR_INVALID_API_SEQUENCE syscall.Errno = 8001 + FRS_ERR_STARTING_SERVICE syscall.Errno = 8002 + FRS_ERR_STOPPING_SERVICE syscall.Errno = 8003 + FRS_ERR_INTERNAL_API syscall.Errno = 8004 + FRS_ERR_INTERNAL syscall.Errno = 8005 + FRS_ERR_SERVICE_COMM syscall.Errno = 8006 + FRS_ERR_INSUFFICIENT_PRIV syscall.Errno = 8007 + FRS_ERR_AUTHENTICATION syscall.Errno = 8008 + FRS_ERR_PARENT_INSUFFICIENT_PRIV syscall.Errno = 8009 + FRS_ERR_PARENT_AUTHENTICATION syscall.Errno = 8010 + FRS_ERR_CHILD_TO_PARENT_COMM syscall.Errno = 8011 + FRS_ERR_PARENT_TO_CHILD_COMM syscall.Errno = 8012 + FRS_ERR_SYSVOL_POPULATE syscall.Errno = 8013 + FRS_ERR_SYSVOL_POPULATE_TIMEOUT syscall.Errno = 8014 + FRS_ERR_SYSVOL_IS_BUSY syscall.Errno = 8015 + FRS_ERR_SYSVOL_DEMOTE syscall.Errno = 8016 + FRS_ERR_INVALID_SERVICE_PARAMETER syscall.Errno = 8017 + DS_S_SUCCESS = ERROR_SUCCESS + ERROR_DS_NOT_INSTALLED syscall.Errno = 8200 + ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY syscall.Errno = 8201 + ERROR_DS_NO_ATTRIBUTE_OR_VALUE syscall.Errno = 8202 + ERROR_DS_INVALID_ATTRIBUTE_SYNTAX syscall.Errno = 8203 + ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED syscall.Errno = 8204 + ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS syscall.Errno = 8205 + ERROR_DS_BUSY syscall.Errno = 8206 + ERROR_DS_UNAVAILABLE syscall.Errno = 8207 + ERROR_DS_NO_RIDS_ALLOCATED syscall.Errno = 8208 + ERROR_DS_NO_MORE_RIDS syscall.Errno = 8209 + ERROR_DS_INCORRECT_ROLE_OWNER syscall.Errno = 8210 + ERROR_DS_RIDMGR_INIT_ERROR syscall.Errno = 8211 + ERROR_DS_OBJ_CLASS_VIOLATION syscall.Errno = 8212 + ERROR_DS_CANT_ON_NON_LEAF syscall.Errno = 8213 + ERROR_DS_CANT_ON_RDN syscall.Errno = 8214 + ERROR_DS_CANT_MOD_OBJ_CLASS syscall.Errno = 8215 + ERROR_DS_CROSS_DOM_MOVE_ERROR syscall.Errno = 8216 + ERROR_DS_GC_NOT_AVAILABLE syscall.Errno = 8217 + ERROR_SHARED_POLICY syscall.Errno = 8218 + ERROR_POLICY_OBJECT_NOT_FOUND syscall.Errno = 8219 + ERROR_POLICY_ONLY_IN_DS syscall.Errno = 8220 + ERROR_PROMOTION_ACTIVE syscall.Errno = 8221 + ERROR_NO_PROMOTION_ACTIVE syscall.Errno = 8222 + ERROR_DS_OPERATIONS_ERROR syscall.Errno = 8224 + ERROR_DS_PROTOCOL_ERROR syscall.Errno = 8225 + ERROR_DS_TIMELIMIT_EXCEEDED syscall.Errno = 8226 + ERROR_DS_SIZELIMIT_EXCEEDED syscall.Errno = 8227 + ERROR_DS_ADMIN_LIMIT_EXCEEDED syscall.Errno = 8228 + ERROR_DS_COMPARE_FALSE syscall.Errno = 8229 + ERROR_DS_COMPARE_TRUE syscall.Errno = 8230 + ERROR_DS_AUTH_METHOD_NOT_SUPPORTED syscall.Errno = 8231 + ERROR_DS_STRONG_AUTH_REQUIRED syscall.Errno = 8232 + ERROR_DS_INAPPROPRIATE_AUTH syscall.Errno = 8233 + ERROR_DS_AUTH_UNKNOWN syscall.Errno = 8234 + ERROR_DS_REFERRAL syscall.Errno = 8235 + ERROR_DS_UNAVAILABLE_CRIT_EXTENSION syscall.Errno = 8236 + ERROR_DS_CONFIDENTIALITY_REQUIRED syscall.Errno = 8237 + ERROR_DS_INAPPROPRIATE_MATCHING syscall.Errno = 8238 + ERROR_DS_CONSTRAINT_VIOLATION syscall.Errno = 8239 + ERROR_DS_NO_SUCH_OBJECT syscall.Errno = 8240 + ERROR_DS_ALIAS_PROBLEM syscall.Errno = 8241 + ERROR_DS_INVALID_DN_SYNTAX syscall.Errno = 8242 + ERROR_DS_IS_LEAF syscall.Errno = 8243 + ERROR_DS_ALIAS_DEREF_PROBLEM syscall.Errno = 8244 + ERROR_DS_UNWILLING_TO_PERFORM syscall.Errno = 8245 + ERROR_DS_LOOP_DETECT syscall.Errno = 8246 + ERROR_DS_NAMING_VIOLATION syscall.Errno = 8247 + ERROR_DS_OBJECT_RESULTS_TOO_LARGE syscall.Errno = 8248 + ERROR_DS_AFFECTS_MULTIPLE_DSAS syscall.Errno = 8249 + ERROR_DS_SERVER_DOWN syscall.Errno = 8250 + ERROR_DS_LOCAL_ERROR syscall.Errno = 8251 + ERROR_DS_ENCODING_ERROR syscall.Errno = 8252 + ERROR_DS_DECODING_ERROR syscall.Errno = 8253 + ERROR_DS_FILTER_UNKNOWN syscall.Errno = 8254 + ERROR_DS_PARAM_ERROR syscall.Errno = 8255 + ERROR_DS_NOT_SUPPORTED syscall.Errno = 8256 + ERROR_DS_NO_RESULTS_RETURNED syscall.Errno = 8257 + ERROR_DS_CONTROL_NOT_FOUND syscall.Errno = 8258 + ERROR_DS_CLIENT_LOOP syscall.Errno = 8259 + ERROR_DS_REFERRAL_LIMIT_EXCEEDED syscall.Errno = 8260 + ERROR_DS_SORT_CONTROL_MISSING syscall.Errno = 8261 + ERROR_DS_OFFSET_RANGE_ERROR syscall.Errno = 8262 + ERROR_DS_RIDMGR_DISABLED syscall.Errno = 8263 + ERROR_DS_ROOT_MUST_BE_NC syscall.Errno = 8301 + ERROR_DS_ADD_REPLICA_INHIBITED syscall.Errno = 8302 + ERROR_DS_ATT_NOT_DEF_IN_SCHEMA syscall.Errno = 8303 + ERROR_DS_MAX_OBJ_SIZE_EXCEEDED syscall.Errno = 8304 + ERROR_DS_OBJ_STRING_NAME_EXISTS syscall.Errno = 8305 + ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA syscall.Errno = 8306 + ERROR_DS_RDN_DOESNT_MATCH_SCHEMA syscall.Errno = 8307 + ERROR_DS_NO_REQUESTED_ATTS_FOUND syscall.Errno = 8308 + ERROR_DS_USER_BUFFER_TO_SMALL syscall.Errno = 8309 + ERROR_DS_ATT_IS_NOT_ON_OBJ syscall.Errno = 8310 + ERROR_DS_ILLEGAL_MOD_OPERATION syscall.Errno = 8311 + ERROR_DS_OBJ_TOO_LARGE syscall.Errno = 8312 + ERROR_DS_BAD_INSTANCE_TYPE syscall.Errno = 8313 + ERROR_DS_MASTERDSA_REQUIRED syscall.Errno = 8314 + ERROR_DS_OBJECT_CLASS_REQUIRED syscall.Errno = 8315 + ERROR_DS_MISSING_REQUIRED_ATT syscall.Errno = 8316 + ERROR_DS_ATT_NOT_DEF_FOR_CLASS syscall.Errno = 8317 + ERROR_DS_ATT_ALREADY_EXISTS syscall.Errno = 8318 + ERROR_DS_CANT_ADD_ATT_VALUES syscall.Errno = 8320 + ERROR_DS_SINGLE_VALUE_CONSTRAINT syscall.Errno = 8321 + ERROR_DS_RANGE_CONSTRAINT syscall.Errno = 8322 + ERROR_DS_ATT_VAL_ALREADY_EXISTS syscall.Errno = 8323 + ERROR_DS_CANT_REM_MISSING_ATT syscall.Errno = 8324 + ERROR_DS_CANT_REM_MISSING_ATT_VAL syscall.Errno = 8325 + ERROR_DS_ROOT_CANT_BE_SUBREF syscall.Errno = 8326 + ERROR_DS_NO_CHAINING syscall.Errno = 8327 + ERROR_DS_NO_CHAINED_EVAL syscall.Errno = 8328 + ERROR_DS_NO_PARENT_OBJECT syscall.Errno = 8329 + ERROR_DS_PARENT_IS_AN_ALIAS syscall.Errno = 8330 + ERROR_DS_CANT_MIX_MASTER_AND_REPS syscall.Errno = 8331 + ERROR_DS_CHILDREN_EXIST syscall.Errno = 8332 + ERROR_DS_OBJ_NOT_FOUND syscall.Errno = 8333 + ERROR_DS_ALIASED_OBJ_MISSING syscall.Errno = 8334 + ERROR_DS_BAD_NAME_SYNTAX syscall.Errno = 8335 + ERROR_DS_ALIAS_POINTS_TO_ALIAS syscall.Errno = 8336 + ERROR_DS_CANT_DEREF_ALIAS syscall.Errno = 8337 + ERROR_DS_OUT_OF_SCOPE syscall.Errno = 8338 + ERROR_DS_OBJECT_BEING_REMOVED syscall.Errno = 8339 + ERROR_DS_CANT_DELETE_DSA_OBJ syscall.Errno = 8340 + ERROR_DS_GENERIC_ERROR syscall.Errno = 8341 + ERROR_DS_DSA_MUST_BE_INT_MASTER syscall.Errno = 8342 + ERROR_DS_CLASS_NOT_DSA syscall.Errno = 8343 + ERROR_DS_INSUFF_ACCESS_RIGHTS syscall.Errno = 8344 + ERROR_DS_ILLEGAL_SUPERIOR syscall.Errno = 8345 + ERROR_DS_ATTRIBUTE_OWNED_BY_SAM syscall.Errno = 8346 + ERROR_DS_NAME_TOO_MANY_PARTS syscall.Errno = 8347 + ERROR_DS_NAME_TOO_LONG syscall.Errno = 8348 + ERROR_DS_NAME_VALUE_TOO_LONG syscall.Errno = 8349 + ERROR_DS_NAME_UNPARSEABLE syscall.Errno = 8350 + ERROR_DS_NAME_TYPE_UNKNOWN syscall.Errno = 8351 + ERROR_DS_NOT_AN_OBJECT syscall.Errno = 8352 + ERROR_DS_SEC_DESC_TOO_SHORT syscall.Errno = 8353 + ERROR_DS_SEC_DESC_INVALID syscall.Errno = 8354 + ERROR_DS_NO_DELETED_NAME syscall.Errno = 8355 + ERROR_DS_SUBREF_MUST_HAVE_PARENT syscall.Errno = 8356 + ERROR_DS_NCNAME_MUST_BE_NC syscall.Errno = 8357 + ERROR_DS_CANT_ADD_SYSTEM_ONLY syscall.Errno = 8358 + ERROR_DS_CLASS_MUST_BE_CONCRETE syscall.Errno = 8359 + ERROR_DS_INVALID_DMD syscall.Errno = 8360 + ERROR_DS_OBJ_GUID_EXISTS syscall.Errno = 8361 + ERROR_DS_NOT_ON_BACKLINK syscall.Errno = 8362 + ERROR_DS_NO_CROSSREF_FOR_NC syscall.Errno = 8363 + ERROR_DS_SHUTTING_DOWN syscall.Errno = 8364 + ERROR_DS_UNKNOWN_OPERATION syscall.Errno = 8365 + ERROR_DS_INVALID_ROLE_OWNER syscall.Errno = 8366 + ERROR_DS_COULDNT_CONTACT_FSMO syscall.Errno = 8367 + ERROR_DS_CROSS_NC_DN_RENAME syscall.Errno = 8368 + ERROR_DS_CANT_MOD_SYSTEM_ONLY syscall.Errno = 8369 + ERROR_DS_REPLICATOR_ONLY syscall.Errno = 8370 + ERROR_DS_OBJ_CLASS_NOT_DEFINED syscall.Errno = 8371 + ERROR_DS_OBJ_CLASS_NOT_SUBCLASS syscall.Errno = 8372 + ERROR_DS_NAME_REFERENCE_INVALID syscall.Errno = 8373 + ERROR_DS_CROSS_REF_EXISTS syscall.Errno = 8374 + ERROR_DS_CANT_DEL_MASTER_CROSSREF syscall.Errno = 8375 + ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD syscall.Errno = 8376 + ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX syscall.Errno = 8377 + ERROR_DS_DUP_RDN syscall.Errno = 8378 + ERROR_DS_DUP_OID syscall.Errno = 8379 + ERROR_DS_DUP_MAPI_ID syscall.Errno = 8380 + ERROR_DS_DUP_SCHEMA_ID_GUID syscall.Errno = 8381 + ERROR_DS_DUP_LDAP_DISPLAY_NAME syscall.Errno = 8382 + ERROR_DS_SEMANTIC_ATT_TEST syscall.Errno = 8383 + ERROR_DS_SYNTAX_MISMATCH syscall.Errno = 8384 + ERROR_DS_EXISTS_IN_MUST_HAVE syscall.Errno = 8385 + ERROR_DS_EXISTS_IN_MAY_HAVE syscall.Errno = 8386 + ERROR_DS_NONEXISTENT_MAY_HAVE syscall.Errno = 8387 + ERROR_DS_NONEXISTENT_MUST_HAVE syscall.Errno = 8388 + ERROR_DS_AUX_CLS_TEST_FAIL syscall.Errno = 8389 + ERROR_DS_NONEXISTENT_POSS_SUP syscall.Errno = 8390 + ERROR_DS_SUB_CLS_TEST_FAIL syscall.Errno = 8391 + ERROR_DS_BAD_RDN_ATT_ID_SYNTAX syscall.Errno = 8392 + ERROR_DS_EXISTS_IN_AUX_CLS syscall.Errno = 8393 + ERROR_DS_EXISTS_IN_SUB_CLS syscall.Errno = 8394 + ERROR_DS_EXISTS_IN_POSS_SUP syscall.Errno = 8395 + ERROR_DS_RECALCSCHEMA_FAILED syscall.Errno = 8396 + ERROR_DS_TREE_DELETE_NOT_FINISHED syscall.Errno = 8397 + ERROR_DS_CANT_DELETE syscall.Errno = 8398 + ERROR_DS_ATT_SCHEMA_REQ_ID syscall.Errno = 8399 + ERROR_DS_BAD_ATT_SCHEMA_SYNTAX syscall.Errno = 8400 + ERROR_DS_CANT_CACHE_ATT syscall.Errno = 8401 + ERROR_DS_CANT_CACHE_CLASS syscall.Errno = 8402 + ERROR_DS_CANT_REMOVE_ATT_CACHE syscall.Errno = 8403 + ERROR_DS_CANT_REMOVE_CLASS_CACHE syscall.Errno = 8404 + ERROR_DS_CANT_RETRIEVE_DN syscall.Errno = 8405 + ERROR_DS_MISSING_SUPREF syscall.Errno = 8406 + ERROR_DS_CANT_RETRIEVE_INSTANCE syscall.Errno = 8407 + ERROR_DS_CODE_INCONSISTENCY syscall.Errno = 8408 + ERROR_DS_DATABASE_ERROR syscall.Errno = 8409 + ERROR_DS_GOVERNSID_MISSING syscall.Errno = 8410 + ERROR_DS_MISSING_EXPECTED_ATT syscall.Errno = 8411 + ERROR_DS_NCNAME_MISSING_CR_REF syscall.Errno = 8412 + ERROR_DS_SECURITY_CHECKING_ERROR syscall.Errno = 8413 + ERROR_DS_SCHEMA_NOT_LOADED syscall.Errno = 8414 + ERROR_DS_SCHEMA_ALLOC_FAILED syscall.Errno = 8415 + ERROR_DS_ATT_SCHEMA_REQ_SYNTAX syscall.Errno = 8416 + ERROR_DS_GCVERIFY_ERROR syscall.Errno = 8417 + ERROR_DS_DRA_SCHEMA_MISMATCH syscall.Errno = 8418 + ERROR_DS_CANT_FIND_DSA_OBJ syscall.Errno = 8419 + ERROR_DS_CANT_FIND_EXPECTED_NC syscall.Errno = 8420 + ERROR_DS_CANT_FIND_NC_IN_CACHE syscall.Errno = 8421 + ERROR_DS_CANT_RETRIEVE_CHILD syscall.Errno = 8422 + ERROR_DS_SECURITY_ILLEGAL_MODIFY syscall.Errno = 8423 + ERROR_DS_CANT_REPLACE_HIDDEN_REC syscall.Errno = 8424 + ERROR_DS_BAD_HIERARCHY_FILE syscall.Errno = 8425 + ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED syscall.Errno = 8426 + ERROR_DS_CONFIG_PARAM_MISSING syscall.Errno = 8427 + ERROR_DS_COUNTING_AB_INDICES_FAILED syscall.Errno = 8428 + ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED syscall.Errno = 8429 + ERROR_DS_INTERNAL_FAILURE syscall.Errno = 8430 + ERROR_DS_UNKNOWN_ERROR syscall.Errno = 8431 + ERROR_DS_ROOT_REQUIRES_CLASS_TOP syscall.Errno = 8432 + ERROR_DS_REFUSING_FSMO_ROLES syscall.Errno = 8433 + ERROR_DS_MISSING_FSMO_SETTINGS syscall.Errno = 8434 + ERROR_DS_UNABLE_TO_SURRENDER_ROLES syscall.Errno = 8435 + ERROR_DS_DRA_GENERIC syscall.Errno = 8436 + ERROR_DS_DRA_INVALID_PARAMETER syscall.Errno = 8437 + ERROR_DS_DRA_BUSY syscall.Errno = 8438 + ERROR_DS_DRA_BAD_DN syscall.Errno = 8439 + ERROR_DS_DRA_BAD_NC syscall.Errno = 8440 + ERROR_DS_DRA_DN_EXISTS syscall.Errno = 8441 + ERROR_DS_DRA_INTERNAL_ERROR syscall.Errno = 8442 + ERROR_DS_DRA_INCONSISTENT_DIT syscall.Errno = 8443 + ERROR_DS_DRA_CONNECTION_FAILED syscall.Errno = 8444 + ERROR_DS_DRA_BAD_INSTANCE_TYPE syscall.Errno = 8445 + ERROR_DS_DRA_OUT_OF_MEM syscall.Errno = 8446 + ERROR_DS_DRA_MAIL_PROBLEM syscall.Errno = 8447 + ERROR_DS_DRA_REF_ALREADY_EXISTS syscall.Errno = 8448 + ERROR_DS_DRA_REF_NOT_FOUND syscall.Errno = 8449 + ERROR_DS_DRA_OBJ_IS_REP_SOURCE syscall.Errno = 8450 + ERROR_DS_DRA_DB_ERROR syscall.Errno = 8451 + ERROR_DS_DRA_NO_REPLICA syscall.Errno = 8452 + ERROR_DS_DRA_ACCESS_DENIED syscall.Errno = 8453 + ERROR_DS_DRA_NOT_SUPPORTED syscall.Errno = 8454 + ERROR_DS_DRA_RPC_CANCELLED syscall.Errno = 8455 + ERROR_DS_DRA_SOURCE_DISABLED syscall.Errno = 8456 + ERROR_DS_DRA_SINK_DISABLED syscall.Errno = 8457 + ERROR_DS_DRA_NAME_COLLISION syscall.Errno = 8458 + ERROR_DS_DRA_SOURCE_REINSTALLED syscall.Errno = 8459 + ERROR_DS_DRA_MISSING_PARENT syscall.Errno = 8460 + ERROR_DS_DRA_PREEMPTED syscall.Errno = 8461 + ERROR_DS_DRA_ABANDON_SYNC syscall.Errno = 8462 + ERROR_DS_DRA_SHUTDOWN syscall.Errno = 8463 + ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET syscall.Errno = 8464 + ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA syscall.Errno = 8465 + ERROR_DS_DRA_EXTN_CONNECTION_FAILED syscall.Errno = 8466 + ERROR_DS_INSTALL_SCHEMA_MISMATCH syscall.Errno = 8467 + ERROR_DS_DUP_LINK_ID syscall.Errno = 8468 + ERROR_DS_NAME_ERROR_RESOLVING syscall.Errno = 8469 + ERROR_DS_NAME_ERROR_NOT_FOUND syscall.Errno = 8470 + ERROR_DS_NAME_ERROR_NOT_UNIQUE syscall.Errno = 8471 + ERROR_DS_NAME_ERROR_NO_MAPPING syscall.Errno = 8472 + ERROR_DS_NAME_ERROR_DOMAIN_ONLY syscall.Errno = 8473 + ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING syscall.Errno = 8474 + ERROR_DS_CONSTRUCTED_ATT_MOD syscall.Errno = 8475 + ERROR_DS_WRONG_OM_OBJ_CLASS syscall.Errno = 8476 + ERROR_DS_DRA_REPL_PENDING syscall.Errno = 8477 + ERROR_DS_DS_REQUIRED syscall.Errno = 8478 + ERROR_DS_INVALID_LDAP_DISPLAY_NAME syscall.Errno = 8479 + ERROR_DS_NON_BASE_SEARCH syscall.Errno = 8480 + ERROR_DS_CANT_RETRIEVE_ATTS syscall.Errno = 8481 + ERROR_DS_BACKLINK_WITHOUT_LINK syscall.Errno = 8482 + ERROR_DS_EPOCH_MISMATCH syscall.Errno = 8483 + ERROR_DS_SRC_NAME_MISMATCH syscall.Errno = 8484 + ERROR_DS_SRC_AND_DST_NC_IDENTICAL syscall.Errno = 8485 + ERROR_DS_DST_NC_MISMATCH syscall.Errno = 8486 + ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC syscall.Errno = 8487 + ERROR_DS_SRC_GUID_MISMATCH syscall.Errno = 8488 + ERROR_DS_CANT_MOVE_DELETED_OBJECT syscall.Errno = 8489 + ERROR_DS_PDC_OPERATION_IN_PROGRESS syscall.Errno = 8490 + ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD syscall.Errno = 8491 + ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION syscall.Errno = 8492 + ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS syscall.Errno = 8493 + ERROR_DS_NC_MUST_HAVE_NC_PARENT syscall.Errno = 8494 + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE syscall.Errno = 8495 + ERROR_DS_DST_DOMAIN_NOT_NATIVE syscall.Errno = 8496 + ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER syscall.Errno = 8497 + ERROR_DS_CANT_MOVE_ACCOUNT_GROUP syscall.Errno = 8498 + ERROR_DS_CANT_MOVE_RESOURCE_GROUP syscall.Errno = 8499 + ERROR_DS_INVALID_SEARCH_FLAG syscall.Errno = 8500 + ERROR_DS_NO_TREE_DELETE_ABOVE_NC syscall.Errno = 8501 + ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE syscall.Errno = 8502 + ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE syscall.Errno = 8503 + ERROR_DS_SAM_INIT_FAILURE syscall.Errno = 8504 + ERROR_DS_SENSITIVE_GROUP_VIOLATION syscall.Errno = 8505 + ERROR_DS_CANT_MOD_PRIMARYGROUPID syscall.Errno = 8506 + ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD syscall.Errno = 8507 + ERROR_DS_NONSAFE_SCHEMA_CHANGE syscall.Errno = 8508 + ERROR_DS_SCHEMA_UPDATE_DISALLOWED syscall.Errno = 8509 + ERROR_DS_CANT_CREATE_UNDER_SCHEMA syscall.Errno = 8510 + ERROR_DS_INSTALL_NO_SRC_SCH_VERSION syscall.Errno = 8511 + ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE syscall.Errno = 8512 + ERROR_DS_INVALID_GROUP_TYPE syscall.Errno = 8513 + ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN syscall.Errno = 8514 + ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN syscall.Errno = 8515 + ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER syscall.Errno = 8516 + ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER syscall.Errno = 8517 + ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER syscall.Errno = 8518 + ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER syscall.Errno = 8519 + ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER syscall.Errno = 8520 + ERROR_DS_HAVE_PRIMARY_MEMBERS syscall.Errno = 8521 + ERROR_DS_STRING_SD_CONVERSION_FAILED syscall.Errno = 8522 + ERROR_DS_NAMING_MASTER_GC syscall.Errno = 8523 + ERROR_DS_DNS_LOOKUP_FAILURE syscall.Errno = 8524 + ERROR_DS_COULDNT_UPDATE_SPNS syscall.Errno = 8525 + ERROR_DS_CANT_RETRIEVE_SD syscall.Errno = 8526 + ERROR_DS_KEY_NOT_UNIQUE syscall.Errno = 8527 + ERROR_DS_WRONG_LINKED_ATT_SYNTAX syscall.Errno = 8528 + ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD syscall.Errno = 8529 + ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY syscall.Errno = 8530 + ERROR_DS_CANT_START syscall.Errno = 8531 + ERROR_DS_INIT_FAILURE syscall.Errno = 8532 + ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION syscall.Errno = 8533 + ERROR_DS_SOURCE_DOMAIN_IN_FOREST syscall.Errno = 8534 + ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST syscall.Errno = 8535 + ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED syscall.Errno = 8536 + ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN syscall.Errno = 8537 + ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER syscall.Errno = 8538 + ERROR_DS_SRC_SID_EXISTS_IN_FOREST syscall.Errno = 8539 + ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH syscall.Errno = 8540 + ERROR_SAM_INIT_FAILURE syscall.Errno = 8541 + ERROR_DS_DRA_SCHEMA_INFO_SHIP syscall.Errno = 8542 + ERROR_DS_DRA_SCHEMA_CONFLICT syscall.Errno = 8543 + ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT syscall.Errno = 8544 + ERROR_DS_DRA_OBJ_NC_MISMATCH syscall.Errno = 8545 + ERROR_DS_NC_STILL_HAS_DSAS syscall.Errno = 8546 + ERROR_DS_GC_REQUIRED syscall.Errno = 8547 + ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY syscall.Errno = 8548 + ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS syscall.Errno = 8549 + ERROR_DS_CANT_ADD_TO_GC syscall.Errno = 8550 + ERROR_DS_NO_CHECKPOINT_WITH_PDC syscall.Errno = 8551 + ERROR_DS_SOURCE_AUDITING_NOT_ENABLED syscall.Errno = 8552 + ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC syscall.Errno = 8553 + ERROR_DS_INVALID_NAME_FOR_SPN syscall.Errno = 8554 + ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS syscall.Errno = 8555 + ERROR_DS_UNICODEPWD_NOT_IN_QUOTES syscall.Errno = 8556 + ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED syscall.Errno = 8557 + ERROR_DS_MUST_BE_RUN_ON_DST_DC syscall.Errno = 8558 + ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER syscall.Errno = 8559 + ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ syscall.Errno = 8560 + ERROR_DS_INIT_FAILURE_CONSOLE syscall.Errno = 8561 + ERROR_DS_SAM_INIT_FAILURE_CONSOLE syscall.Errno = 8562 + ERROR_DS_FOREST_VERSION_TOO_HIGH syscall.Errno = 8563 + ERROR_DS_DOMAIN_VERSION_TOO_HIGH syscall.Errno = 8564 + ERROR_DS_FOREST_VERSION_TOO_LOW syscall.Errno = 8565 + ERROR_DS_DOMAIN_VERSION_TOO_LOW syscall.Errno = 8566 + ERROR_DS_INCOMPATIBLE_VERSION syscall.Errno = 8567 + ERROR_DS_LOW_DSA_VERSION syscall.Errno = 8568 + ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN syscall.Errno = 8569 + ERROR_DS_NOT_SUPPORTED_SORT_ORDER syscall.Errno = 8570 + ERROR_DS_NAME_NOT_UNIQUE syscall.Errno = 8571 + ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 syscall.Errno = 8572 + ERROR_DS_OUT_OF_VERSION_STORE syscall.Errno = 8573 + ERROR_DS_INCOMPATIBLE_CONTROLS_USED syscall.Errno = 8574 + ERROR_DS_NO_REF_DOMAIN syscall.Errno = 8575 + ERROR_DS_RESERVED_LINK_ID syscall.Errno = 8576 + ERROR_DS_LINK_ID_NOT_AVAILABLE syscall.Errno = 8577 + ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER syscall.Errno = 8578 + ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE syscall.Errno = 8579 + ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC syscall.Errno = 8580 + ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG syscall.Errno = 8581 + ERROR_DS_MODIFYDN_WRONG_GRANDPARENT syscall.Errno = 8582 + ERROR_DS_NAME_ERROR_TRUST_REFERRAL syscall.Errno = 8583 + ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER syscall.Errno = 8584 + ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD syscall.Errno = 8585 + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 syscall.Errno = 8586 + ERROR_DS_THREAD_LIMIT_EXCEEDED syscall.Errno = 8587 + ERROR_DS_NOT_CLOSEST syscall.Errno = 8588 + ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF syscall.Errno = 8589 + ERROR_DS_SINGLE_USER_MODE_FAILED syscall.Errno = 8590 + ERROR_DS_NTDSCRIPT_SYNTAX_ERROR syscall.Errno = 8591 + ERROR_DS_NTDSCRIPT_PROCESS_ERROR syscall.Errno = 8592 + ERROR_DS_DIFFERENT_REPL_EPOCHS syscall.Errno = 8593 + ERROR_DS_DRS_EXTENSIONS_CHANGED syscall.Errno = 8594 + ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR syscall.Errno = 8595 + ERROR_DS_NO_MSDS_INTID syscall.Errno = 8596 + ERROR_DS_DUP_MSDS_INTID syscall.Errno = 8597 + ERROR_DS_EXISTS_IN_RDNATTID syscall.Errno = 8598 + ERROR_DS_AUTHORIZATION_FAILED syscall.Errno = 8599 + ERROR_DS_INVALID_SCRIPT syscall.Errno = 8600 + ERROR_DS_REMOTE_CROSSREF_OP_FAILED syscall.Errno = 8601 + ERROR_DS_CROSS_REF_BUSY syscall.Errno = 8602 + ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN syscall.Errno = 8603 + ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC syscall.Errno = 8604 + ERROR_DS_DUPLICATE_ID_FOUND syscall.Errno = 8605 + ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT syscall.Errno = 8606 + ERROR_DS_GROUP_CONVERSION_ERROR syscall.Errno = 8607 + ERROR_DS_CANT_MOVE_APP_BASIC_GROUP syscall.Errno = 8608 + ERROR_DS_CANT_MOVE_APP_QUERY_GROUP syscall.Errno = 8609 + ERROR_DS_ROLE_NOT_VERIFIED syscall.Errno = 8610 + ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL syscall.Errno = 8611 + ERROR_DS_DOMAIN_RENAME_IN_PROGRESS syscall.Errno = 8612 + ERROR_DS_EXISTING_AD_CHILD_NC syscall.Errno = 8613 + ERROR_DS_REPL_LIFETIME_EXCEEDED syscall.Errno = 8614 + ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER syscall.Errno = 8615 + ERROR_DS_LDAP_SEND_QUEUE_FULL syscall.Errno = 8616 + ERROR_DS_DRA_OUT_SCHEDULE_WINDOW syscall.Errno = 8617 + ERROR_DS_POLICY_NOT_KNOWN syscall.Errno = 8618 + ERROR_NO_SITE_SETTINGS_OBJECT syscall.Errno = 8619 + ERROR_NO_SECRETS syscall.Errno = 8620 + ERROR_NO_WRITABLE_DC_FOUND syscall.Errno = 8621 + ERROR_DS_NO_SERVER_OBJECT syscall.Errno = 8622 + ERROR_DS_NO_NTDSA_OBJECT syscall.Errno = 8623 + ERROR_DS_NON_ASQ_SEARCH syscall.Errno = 8624 + ERROR_DS_AUDIT_FAILURE syscall.Errno = 8625 + ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE syscall.Errno = 8626 + ERROR_DS_INVALID_SEARCH_FLAG_TUPLE syscall.Errno = 8627 + ERROR_DS_HIERARCHY_TABLE_TOO_DEEP syscall.Errno = 8628 + ERROR_DS_DRA_CORRUPT_UTD_VECTOR syscall.Errno = 8629 + ERROR_DS_DRA_SECRETS_DENIED syscall.Errno = 8630 + ERROR_DS_RESERVED_MAPI_ID syscall.Errno = 8631 + ERROR_DS_MAPI_ID_NOT_AVAILABLE syscall.Errno = 8632 + ERROR_DS_DRA_MISSING_KRBTGT_SECRET syscall.Errno = 8633 + ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST syscall.Errno = 8634 + ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST syscall.Errno = 8635 + ERROR_INVALID_USER_PRINCIPAL_NAME syscall.Errno = 8636 + ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS syscall.Errno = 8637 + ERROR_DS_OID_NOT_FOUND syscall.Errno = 8638 + ERROR_DS_DRA_RECYCLED_TARGET syscall.Errno = 8639 + ERROR_DS_DISALLOWED_NC_REDIRECT syscall.Errno = 8640 + ERROR_DS_HIGH_ADLDS_FFL syscall.Errno = 8641 + ERROR_DS_HIGH_DSA_VERSION syscall.Errno = 8642 + ERROR_DS_LOW_ADLDS_FFL syscall.Errno = 8643 + ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION syscall.Errno = 8644 + ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED syscall.Errno = 8645 + ERROR_INCORRECT_ACCOUNT_TYPE syscall.Errno = 8646 + ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST syscall.Errno = 8647 + ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST syscall.Errno = 8648 + ERROR_DS_MISSING_FOREST_TRUST syscall.Errno = 8649 + ERROR_DS_VALUE_KEY_NOT_UNIQUE syscall.Errno = 8650 + DNS_ERROR_RESPONSE_CODES_BASE syscall.Errno = 9000 + DNS_ERROR_RCODE_NO_ERROR = ERROR_SUCCESS + DNS_ERROR_MASK syscall.Errno = 0x00002328 + DNS_ERROR_RCODE_FORMAT_ERROR syscall.Errno = 9001 + DNS_ERROR_RCODE_SERVER_FAILURE syscall.Errno = 9002 + DNS_ERROR_RCODE_NAME_ERROR syscall.Errno = 9003 + DNS_ERROR_RCODE_NOT_IMPLEMENTED syscall.Errno = 9004 + DNS_ERROR_RCODE_REFUSED syscall.Errno = 9005 + DNS_ERROR_RCODE_YXDOMAIN syscall.Errno = 9006 + DNS_ERROR_RCODE_YXRRSET syscall.Errno = 9007 + DNS_ERROR_RCODE_NXRRSET syscall.Errno = 9008 + DNS_ERROR_RCODE_NOTAUTH syscall.Errno = 9009 + DNS_ERROR_RCODE_NOTZONE syscall.Errno = 9010 + DNS_ERROR_RCODE_BADSIG syscall.Errno = 9016 + DNS_ERROR_RCODE_BADKEY syscall.Errno = 9017 + DNS_ERROR_RCODE_BADTIME syscall.Errno = 9018 + DNS_ERROR_RCODE_LAST = DNS_ERROR_RCODE_BADTIME + DNS_ERROR_DNSSEC_BASE syscall.Errno = 9100 + DNS_ERROR_KEYMASTER_REQUIRED syscall.Errno = 9101 + DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE syscall.Errno = 9102 + DNS_ERROR_NSEC3_INCOMPATIBLE_WITH_RSA_SHA1 syscall.Errno = 9103 + DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS syscall.Errno = 9104 + DNS_ERROR_UNSUPPORTED_ALGORITHM syscall.Errno = 9105 + DNS_ERROR_INVALID_KEY_SIZE syscall.Errno = 9106 + DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE syscall.Errno = 9107 + DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION syscall.Errno = 9108 + DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR syscall.Errno = 9109 + DNS_ERROR_UNEXPECTED_CNG_ERROR syscall.Errno = 9110 + DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION syscall.Errno = 9111 + DNS_ERROR_KSP_NOT_ACCESSIBLE syscall.Errno = 9112 + DNS_ERROR_TOO_MANY_SKDS syscall.Errno = 9113 + DNS_ERROR_INVALID_ROLLOVER_PERIOD syscall.Errno = 9114 + DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET syscall.Errno = 9115 + DNS_ERROR_ROLLOVER_IN_PROGRESS syscall.Errno = 9116 + DNS_ERROR_STANDBY_KEY_NOT_PRESENT syscall.Errno = 9117 + DNS_ERROR_NOT_ALLOWED_ON_ZSK syscall.Errno = 9118 + DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD syscall.Errno = 9119 + DNS_ERROR_ROLLOVER_ALREADY_QUEUED syscall.Errno = 9120 + DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE syscall.Errno = 9121 + DNS_ERROR_BAD_KEYMASTER syscall.Errno = 9122 + DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD syscall.Errno = 9123 + DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT syscall.Errno = 9124 + DNS_ERROR_DNSSEC_IS_DISABLED syscall.Errno = 9125 + DNS_ERROR_INVALID_XML syscall.Errno = 9126 + DNS_ERROR_NO_VALID_TRUST_ANCHORS syscall.Errno = 9127 + DNS_ERROR_ROLLOVER_NOT_POKEABLE syscall.Errno = 9128 + DNS_ERROR_NSEC3_NAME_COLLISION syscall.Errno = 9129 + DNS_ERROR_NSEC_INCOMPATIBLE_WITH_NSEC3_RSA_SHA1 syscall.Errno = 9130 + DNS_ERROR_PACKET_FMT_BASE syscall.Errno = 9500 + DNS_INFO_NO_RECORDS syscall.Errno = 9501 + DNS_ERROR_BAD_PACKET syscall.Errno = 9502 + DNS_ERROR_NO_PACKET syscall.Errno = 9503 + DNS_ERROR_RCODE syscall.Errno = 9504 + DNS_ERROR_UNSECURE_PACKET syscall.Errno = 9505 + DNS_STATUS_PACKET_UNSECURE = DNS_ERROR_UNSECURE_PACKET + DNS_REQUEST_PENDING syscall.Errno = 9506 + DNS_ERROR_NO_MEMORY = ERROR_OUTOFMEMORY + DNS_ERROR_INVALID_NAME = ERROR_INVALID_NAME + DNS_ERROR_INVALID_DATA = ERROR_INVALID_DATA + DNS_ERROR_GENERAL_API_BASE syscall.Errno = 9550 + DNS_ERROR_INVALID_TYPE syscall.Errno = 9551 + DNS_ERROR_INVALID_IP_ADDRESS syscall.Errno = 9552 + DNS_ERROR_INVALID_PROPERTY syscall.Errno = 9553 + DNS_ERROR_TRY_AGAIN_LATER syscall.Errno = 9554 + DNS_ERROR_NOT_UNIQUE syscall.Errno = 9555 + DNS_ERROR_NON_RFC_NAME syscall.Errno = 9556 + DNS_STATUS_FQDN syscall.Errno = 9557 + DNS_STATUS_DOTTED_NAME syscall.Errno = 9558 + DNS_STATUS_SINGLE_PART_NAME syscall.Errno = 9559 + DNS_ERROR_INVALID_NAME_CHAR syscall.Errno = 9560 + DNS_ERROR_NUMERIC_NAME syscall.Errno = 9561 + DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER syscall.Errno = 9562 + DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION syscall.Errno = 9563 + DNS_ERROR_CANNOT_FIND_ROOT_HINTS syscall.Errno = 9564 + DNS_ERROR_INCONSISTENT_ROOT_HINTS syscall.Errno = 9565 + DNS_ERROR_DWORD_VALUE_TOO_SMALL syscall.Errno = 9566 + DNS_ERROR_DWORD_VALUE_TOO_LARGE syscall.Errno = 9567 + DNS_ERROR_BACKGROUND_LOADING syscall.Errno = 9568 + DNS_ERROR_NOT_ALLOWED_ON_RODC syscall.Errno = 9569 + DNS_ERROR_NOT_ALLOWED_UNDER_DNAME syscall.Errno = 9570 + DNS_ERROR_DELEGATION_REQUIRED syscall.Errno = 9571 + DNS_ERROR_INVALID_POLICY_TABLE syscall.Errno = 9572 + DNS_ERROR_ADDRESS_REQUIRED syscall.Errno = 9573 + DNS_ERROR_ZONE_BASE syscall.Errno = 9600 + DNS_ERROR_ZONE_DOES_NOT_EXIST syscall.Errno = 9601 + DNS_ERROR_NO_ZONE_INFO syscall.Errno = 9602 + DNS_ERROR_INVALID_ZONE_OPERATION syscall.Errno = 9603 + DNS_ERROR_ZONE_CONFIGURATION_ERROR syscall.Errno = 9604 + DNS_ERROR_ZONE_HAS_NO_SOA_RECORD syscall.Errno = 9605 + DNS_ERROR_ZONE_HAS_NO_NS_RECORDS syscall.Errno = 9606 + DNS_ERROR_ZONE_LOCKED syscall.Errno = 9607 + DNS_ERROR_ZONE_CREATION_FAILED syscall.Errno = 9608 + DNS_ERROR_ZONE_ALREADY_EXISTS syscall.Errno = 9609 + DNS_ERROR_AUTOZONE_ALREADY_EXISTS syscall.Errno = 9610 + DNS_ERROR_INVALID_ZONE_TYPE syscall.Errno = 9611 + DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP syscall.Errno = 9612 + DNS_ERROR_ZONE_NOT_SECONDARY syscall.Errno = 9613 + DNS_ERROR_NEED_SECONDARY_ADDRESSES syscall.Errno = 9614 + DNS_ERROR_WINS_INIT_FAILED syscall.Errno = 9615 + DNS_ERROR_NEED_WINS_SERVERS syscall.Errno = 9616 + DNS_ERROR_NBSTAT_INIT_FAILED syscall.Errno = 9617 + DNS_ERROR_SOA_DELETE_INVALID syscall.Errno = 9618 + DNS_ERROR_FORWARDER_ALREADY_EXISTS syscall.Errno = 9619 + DNS_ERROR_ZONE_REQUIRES_MASTER_IP syscall.Errno = 9620 + DNS_ERROR_ZONE_IS_SHUTDOWN syscall.Errno = 9621 + DNS_ERROR_ZONE_LOCKED_FOR_SIGNING syscall.Errno = 9622 + DNS_ERROR_DATAFILE_BASE syscall.Errno = 9650 + DNS_ERROR_PRIMARY_REQUIRES_DATAFILE syscall.Errno = 9651 + DNS_ERROR_INVALID_DATAFILE_NAME syscall.Errno = 9652 + DNS_ERROR_DATAFILE_OPEN_FAILURE syscall.Errno = 9653 + DNS_ERROR_FILE_WRITEBACK_FAILED syscall.Errno = 9654 + DNS_ERROR_DATAFILE_PARSING syscall.Errno = 9655 + DNS_ERROR_DATABASE_BASE syscall.Errno = 9700 + DNS_ERROR_RECORD_DOES_NOT_EXIST syscall.Errno = 9701 + DNS_ERROR_RECORD_FORMAT syscall.Errno = 9702 + DNS_ERROR_NODE_CREATION_FAILED syscall.Errno = 9703 + DNS_ERROR_UNKNOWN_RECORD_TYPE syscall.Errno = 9704 + DNS_ERROR_RECORD_TIMED_OUT syscall.Errno = 9705 + DNS_ERROR_NAME_NOT_IN_ZONE syscall.Errno = 9706 + DNS_ERROR_CNAME_LOOP syscall.Errno = 9707 + DNS_ERROR_NODE_IS_CNAME syscall.Errno = 9708 + DNS_ERROR_CNAME_COLLISION syscall.Errno = 9709 + DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT syscall.Errno = 9710 + DNS_ERROR_RECORD_ALREADY_EXISTS syscall.Errno = 9711 + DNS_ERROR_SECONDARY_DATA syscall.Errno = 9712 + DNS_ERROR_NO_CREATE_CACHE_DATA syscall.Errno = 9713 + DNS_ERROR_NAME_DOES_NOT_EXIST syscall.Errno = 9714 + DNS_WARNING_PTR_CREATE_FAILED syscall.Errno = 9715 + DNS_WARNING_DOMAIN_UNDELETED syscall.Errno = 9716 + DNS_ERROR_DS_UNAVAILABLE syscall.Errno = 9717 + DNS_ERROR_DS_ZONE_ALREADY_EXISTS syscall.Errno = 9718 + DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE syscall.Errno = 9719 + DNS_ERROR_NODE_IS_DNAME syscall.Errno = 9720 + DNS_ERROR_DNAME_COLLISION syscall.Errno = 9721 + DNS_ERROR_ALIAS_LOOP syscall.Errno = 9722 + DNS_ERROR_OPERATION_BASE syscall.Errno = 9750 + DNS_INFO_AXFR_COMPLETE syscall.Errno = 9751 + DNS_ERROR_AXFR syscall.Errno = 9752 + DNS_INFO_ADDED_LOCAL_WINS syscall.Errno = 9753 + DNS_ERROR_SECURE_BASE syscall.Errno = 9800 + DNS_STATUS_CONTINUE_NEEDED syscall.Errno = 9801 + DNS_ERROR_SETUP_BASE syscall.Errno = 9850 + DNS_ERROR_NO_TCPIP syscall.Errno = 9851 + DNS_ERROR_NO_DNS_SERVERS syscall.Errno = 9852 + DNS_ERROR_DP_BASE syscall.Errno = 9900 + DNS_ERROR_DP_DOES_NOT_EXIST syscall.Errno = 9901 + DNS_ERROR_DP_ALREADY_EXISTS syscall.Errno = 9902 + DNS_ERROR_DP_NOT_ENLISTED syscall.Errno = 9903 + DNS_ERROR_DP_ALREADY_ENLISTED syscall.Errno = 9904 + DNS_ERROR_DP_NOT_AVAILABLE syscall.Errno = 9905 + DNS_ERROR_DP_FSMO_ERROR syscall.Errno = 9906 + DNS_ERROR_RRL_NOT_ENABLED syscall.Errno = 9911 + DNS_ERROR_RRL_INVALID_WINDOW_SIZE syscall.Errno = 9912 + DNS_ERROR_RRL_INVALID_IPV4_PREFIX syscall.Errno = 9913 + DNS_ERROR_RRL_INVALID_IPV6_PREFIX syscall.Errno = 9914 + DNS_ERROR_RRL_INVALID_TC_RATE syscall.Errno = 9915 + DNS_ERROR_RRL_INVALID_LEAK_RATE syscall.Errno = 9916 + DNS_ERROR_RRL_LEAK_RATE_LESSTHAN_TC_RATE syscall.Errno = 9917 + DNS_ERROR_VIRTUALIZATION_INSTANCE_ALREADY_EXISTS syscall.Errno = 9921 + DNS_ERROR_VIRTUALIZATION_INSTANCE_DOES_NOT_EXIST syscall.Errno = 9922 + DNS_ERROR_VIRTUALIZATION_TREE_LOCKED syscall.Errno = 9923 + DNS_ERROR_INVAILD_VIRTUALIZATION_INSTANCE_NAME syscall.Errno = 9924 + DNS_ERROR_DEFAULT_VIRTUALIZATION_INSTANCE syscall.Errno = 9925 + DNS_ERROR_ZONESCOPE_ALREADY_EXISTS syscall.Errno = 9951 + DNS_ERROR_ZONESCOPE_DOES_NOT_EXIST syscall.Errno = 9952 + DNS_ERROR_DEFAULT_ZONESCOPE syscall.Errno = 9953 + DNS_ERROR_INVALID_ZONESCOPE_NAME syscall.Errno = 9954 + DNS_ERROR_NOT_ALLOWED_WITH_ZONESCOPES syscall.Errno = 9955 + DNS_ERROR_LOAD_ZONESCOPE_FAILED syscall.Errno = 9956 + DNS_ERROR_ZONESCOPE_FILE_WRITEBACK_FAILED syscall.Errno = 9957 + DNS_ERROR_INVALID_SCOPE_NAME syscall.Errno = 9958 + DNS_ERROR_SCOPE_DOES_NOT_EXIST syscall.Errno = 9959 + DNS_ERROR_DEFAULT_SCOPE syscall.Errno = 9960 + DNS_ERROR_INVALID_SCOPE_OPERATION syscall.Errno = 9961 + DNS_ERROR_SCOPE_LOCKED syscall.Errno = 9962 + DNS_ERROR_SCOPE_ALREADY_EXISTS syscall.Errno = 9963 + DNS_ERROR_POLICY_ALREADY_EXISTS syscall.Errno = 9971 + DNS_ERROR_POLICY_DOES_NOT_EXIST syscall.Errno = 9972 + DNS_ERROR_POLICY_INVALID_CRITERIA syscall.Errno = 9973 + DNS_ERROR_POLICY_INVALID_SETTINGS syscall.Errno = 9974 + DNS_ERROR_CLIENT_SUBNET_IS_ACCESSED syscall.Errno = 9975 + DNS_ERROR_CLIENT_SUBNET_DOES_NOT_EXIST syscall.Errno = 9976 + DNS_ERROR_CLIENT_SUBNET_ALREADY_EXISTS syscall.Errno = 9977 + DNS_ERROR_SUBNET_DOES_NOT_EXIST syscall.Errno = 9978 + DNS_ERROR_SUBNET_ALREADY_EXISTS syscall.Errno = 9979 + DNS_ERROR_POLICY_LOCKED syscall.Errno = 9980 + DNS_ERROR_POLICY_INVALID_WEIGHT syscall.Errno = 9981 + DNS_ERROR_POLICY_INVALID_NAME syscall.Errno = 9982 + DNS_ERROR_POLICY_MISSING_CRITERIA syscall.Errno = 9983 + DNS_ERROR_INVALID_CLIENT_SUBNET_NAME syscall.Errno = 9984 + DNS_ERROR_POLICY_PROCESSING_ORDER_INVALID syscall.Errno = 9985 + DNS_ERROR_POLICY_SCOPE_MISSING syscall.Errno = 9986 + DNS_ERROR_POLICY_SCOPE_NOT_ALLOWED syscall.Errno = 9987 + DNS_ERROR_SERVERSCOPE_IS_REFERENCED syscall.Errno = 9988 + DNS_ERROR_ZONESCOPE_IS_REFERENCED syscall.Errno = 9989 + DNS_ERROR_POLICY_INVALID_CRITERIA_CLIENT_SUBNET syscall.Errno = 9990 + DNS_ERROR_POLICY_INVALID_CRITERIA_TRANSPORT_PROTOCOL syscall.Errno = 9991 + DNS_ERROR_POLICY_INVALID_CRITERIA_NETWORK_PROTOCOL syscall.Errno = 9992 + DNS_ERROR_POLICY_INVALID_CRITERIA_INTERFACE syscall.Errno = 9993 + DNS_ERROR_POLICY_INVALID_CRITERIA_FQDN syscall.Errno = 9994 + DNS_ERROR_POLICY_INVALID_CRITERIA_QUERY_TYPE syscall.Errno = 9995 + DNS_ERROR_POLICY_INVALID_CRITERIA_TIME_OF_DAY syscall.Errno = 9996 + WSABASEERR syscall.Errno = 10000 + WSAEINTR syscall.Errno = 10004 + WSAEBADF syscall.Errno = 10009 + WSAEACCES syscall.Errno = 10013 + WSAEFAULT syscall.Errno = 10014 + WSAEINVAL syscall.Errno = 10022 + WSAEMFILE syscall.Errno = 10024 + WSAEWOULDBLOCK syscall.Errno = 10035 + WSAEINPROGRESS syscall.Errno = 10036 + WSAEALREADY syscall.Errno = 10037 + WSAENOTSOCK syscall.Errno = 10038 + WSAEDESTADDRREQ syscall.Errno = 10039 + WSAEMSGSIZE syscall.Errno = 10040 + WSAEPROTOTYPE syscall.Errno = 10041 + WSAENOPROTOOPT syscall.Errno = 10042 + WSAEPROTONOSUPPORT syscall.Errno = 10043 + WSAESOCKTNOSUPPORT syscall.Errno = 10044 + WSAEOPNOTSUPP syscall.Errno = 10045 + WSAEPFNOSUPPORT syscall.Errno = 10046 + WSAEAFNOSUPPORT syscall.Errno = 10047 + WSAEADDRINUSE syscall.Errno = 10048 + WSAEADDRNOTAVAIL syscall.Errno = 10049 + WSAENETDOWN syscall.Errno = 10050 + WSAENETUNREACH syscall.Errno = 10051 + WSAENETRESET syscall.Errno = 10052 + WSAECONNABORTED syscall.Errno = 10053 + WSAECONNRESET syscall.Errno = 10054 + WSAENOBUFS syscall.Errno = 10055 + WSAEISCONN syscall.Errno = 10056 + WSAENOTCONN syscall.Errno = 10057 + WSAESHUTDOWN syscall.Errno = 10058 + WSAETOOMANYREFS syscall.Errno = 10059 + WSAETIMEDOUT syscall.Errno = 10060 + WSAECONNREFUSED syscall.Errno = 10061 + WSAELOOP syscall.Errno = 10062 + WSAENAMETOOLONG syscall.Errno = 10063 + WSAEHOSTDOWN syscall.Errno = 10064 + WSAEHOSTUNREACH syscall.Errno = 10065 + WSAENOTEMPTY syscall.Errno = 10066 + WSAEPROCLIM syscall.Errno = 10067 + WSAEUSERS syscall.Errno = 10068 + WSAEDQUOT syscall.Errno = 10069 + WSAESTALE syscall.Errno = 10070 + WSAEREMOTE syscall.Errno = 10071 + WSASYSNOTREADY syscall.Errno = 10091 + WSAVERNOTSUPPORTED syscall.Errno = 10092 + WSANOTINITIALISED syscall.Errno = 10093 + WSAEDISCON syscall.Errno = 10101 + WSAENOMORE syscall.Errno = 10102 + WSAECANCELLED syscall.Errno = 10103 + WSAEINVALIDPROCTABLE syscall.Errno = 10104 + WSAEINVALIDPROVIDER syscall.Errno = 10105 + WSAEPROVIDERFAILEDINIT syscall.Errno = 10106 + WSASYSCALLFAILURE syscall.Errno = 10107 + WSASERVICE_NOT_FOUND syscall.Errno = 10108 + WSATYPE_NOT_FOUND syscall.Errno = 10109 + WSA_E_NO_MORE syscall.Errno = 10110 + WSA_E_CANCELLED syscall.Errno = 10111 + WSAEREFUSED syscall.Errno = 10112 + WSAHOST_NOT_FOUND syscall.Errno = 11001 + WSATRY_AGAIN syscall.Errno = 11002 + WSANO_RECOVERY syscall.Errno = 11003 + WSANO_DATA syscall.Errno = 11004 + WSA_QOS_RECEIVERS syscall.Errno = 11005 + WSA_QOS_SENDERS syscall.Errno = 11006 + WSA_QOS_NO_SENDERS syscall.Errno = 11007 + WSA_QOS_NO_RECEIVERS syscall.Errno = 11008 + WSA_QOS_REQUEST_CONFIRMED syscall.Errno = 11009 + WSA_QOS_ADMISSION_FAILURE syscall.Errno = 11010 + WSA_QOS_POLICY_FAILURE syscall.Errno = 11011 + WSA_QOS_BAD_STYLE syscall.Errno = 11012 + WSA_QOS_BAD_OBJECT syscall.Errno = 11013 + WSA_QOS_TRAFFIC_CTRL_ERROR syscall.Errno = 11014 + WSA_QOS_GENERIC_ERROR syscall.Errno = 11015 + WSA_QOS_ESERVICETYPE syscall.Errno = 11016 + WSA_QOS_EFLOWSPEC syscall.Errno = 11017 + WSA_QOS_EPROVSPECBUF syscall.Errno = 11018 + WSA_QOS_EFILTERSTYLE syscall.Errno = 11019 + WSA_QOS_EFILTERTYPE syscall.Errno = 11020 + WSA_QOS_EFILTERCOUNT syscall.Errno = 11021 + WSA_QOS_EOBJLENGTH syscall.Errno = 11022 + WSA_QOS_EFLOWCOUNT syscall.Errno = 11023 + WSA_QOS_EUNKOWNPSOBJ syscall.Errno = 11024 + WSA_QOS_EPOLICYOBJ syscall.Errno = 11025 + WSA_QOS_EFLOWDESC syscall.Errno = 11026 + WSA_QOS_EPSFLOWSPEC syscall.Errno = 11027 + WSA_QOS_EPSFILTERSPEC syscall.Errno = 11028 + WSA_QOS_ESDMODEOBJ syscall.Errno = 11029 + WSA_QOS_ESHAPERATEOBJ syscall.Errno = 11030 + WSA_QOS_RESERVED_PETYPE syscall.Errno = 11031 + WSA_SECURE_HOST_NOT_FOUND syscall.Errno = 11032 + WSA_IPSEC_NAME_POLICY_ERROR syscall.Errno = 11033 + ERROR_IPSEC_QM_POLICY_EXISTS syscall.Errno = 13000 + ERROR_IPSEC_QM_POLICY_NOT_FOUND syscall.Errno = 13001 + ERROR_IPSEC_QM_POLICY_IN_USE syscall.Errno = 13002 + ERROR_IPSEC_MM_POLICY_EXISTS syscall.Errno = 13003 + ERROR_IPSEC_MM_POLICY_NOT_FOUND syscall.Errno = 13004 + ERROR_IPSEC_MM_POLICY_IN_USE syscall.Errno = 13005 + ERROR_IPSEC_MM_FILTER_EXISTS syscall.Errno = 13006 + ERROR_IPSEC_MM_FILTER_NOT_FOUND syscall.Errno = 13007 + ERROR_IPSEC_TRANSPORT_FILTER_EXISTS syscall.Errno = 13008 + ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND syscall.Errno = 13009 + ERROR_IPSEC_MM_AUTH_EXISTS syscall.Errno = 13010 + ERROR_IPSEC_MM_AUTH_NOT_FOUND syscall.Errno = 13011 + ERROR_IPSEC_MM_AUTH_IN_USE syscall.Errno = 13012 + ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND syscall.Errno = 13013 + ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND syscall.Errno = 13014 + ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND syscall.Errno = 13015 + ERROR_IPSEC_TUNNEL_FILTER_EXISTS syscall.Errno = 13016 + ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND syscall.Errno = 13017 + ERROR_IPSEC_MM_FILTER_PENDING_DELETION syscall.Errno = 13018 + ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION syscall.Errno = 13019 + ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION syscall.Errno = 13020 + ERROR_IPSEC_MM_POLICY_PENDING_DELETION syscall.Errno = 13021 + ERROR_IPSEC_MM_AUTH_PENDING_DELETION syscall.Errno = 13022 + ERROR_IPSEC_QM_POLICY_PENDING_DELETION syscall.Errno = 13023 + WARNING_IPSEC_MM_POLICY_PRUNED syscall.Errno = 13024 + WARNING_IPSEC_QM_POLICY_PRUNED syscall.Errno = 13025 + ERROR_IPSEC_IKE_NEG_STATUS_BEGIN syscall.Errno = 13800 + ERROR_IPSEC_IKE_AUTH_FAIL syscall.Errno = 13801 + ERROR_IPSEC_IKE_ATTRIB_FAIL syscall.Errno = 13802 + ERROR_IPSEC_IKE_NEGOTIATION_PENDING syscall.Errno = 13803 + ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR syscall.Errno = 13804 + ERROR_IPSEC_IKE_TIMED_OUT syscall.Errno = 13805 + ERROR_IPSEC_IKE_NO_CERT syscall.Errno = 13806 + ERROR_IPSEC_IKE_SA_DELETED syscall.Errno = 13807 + ERROR_IPSEC_IKE_SA_REAPED syscall.Errno = 13808 + ERROR_IPSEC_IKE_MM_ACQUIRE_DROP syscall.Errno = 13809 + ERROR_IPSEC_IKE_QM_ACQUIRE_DROP syscall.Errno = 13810 + ERROR_IPSEC_IKE_QUEUE_DROP_MM syscall.Errno = 13811 + ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM syscall.Errno = 13812 + ERROR_IPSEC_IKE_DROP_NO_RESPONSE syscall.Errno = 13813 + ERROR_IPSEC_IKE_MM_DELAY_DROP syscall.Errno = 13814 + ERROR_IPSEC_IKE_QM_DELAY_DROP syscall.Errno = 13815 + ERROR_IPSEC_IKE_ERROR syscall.Errno = 13816 + ERROR_IPSEC_IKE_CRL_FAILED syscall.Errno = 13817 + ERROR_IPSEC_IKE_INVALID_KEY_USAGE syscall.Errno = 13818 + ERROR_IPSEC_IKE_INVALID_CERT_TYPE syscall.Errno = 13819 + ERROR_IPSEC_IKE_NO_PRIVATE_KEY syscall.Errno = 13820 + ERROR_IPSEC_IKE_SIMULTANEOUS_REKEY syscall.Errno = 13821 + ERROR_IPSEC_IKE_DH_FAIL syscall.Errno = 13822 + ERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED syscall.Errno = 13823 + ERROR_IPSEC_IKE_INVALID_HEADER syscall.Errno = 13824 + ERROR_IPSEC_IKE_NO_POLICY syscall.Errno = 13825 + ERROR_IPSEC_IKE_INVALID_SIGNATURE syscall.Errno = 13826 + ERROR_IPSEC_IKE_KERBEROS_ERROR syscall.Errno = 13827 + ERROR_IPSEC_IKE_NO_PUBLIC_KEY syscall.Errno = 13828 + ERROR_IPSEC_IKE_PROCESS_ERR syscall.Errno = 13829 + ERROR_IPSEC_IKE_PROCESS_ERR_SA syscall.Errno = 13830 + ERROR_IPSEC_IKE_PROCESS_ERR_PROP syscall.Errno = 13831 + ERROR_IPSEC_IKE_PROCESS_ERR_TRANS syscall.Errno = 13832 + ERROR_IPSEC_IKE_PROCESS_ERR_KE syscall.Errno = 13833 + ERROR_IPSEC_IKE_PROCESS_ERR_ID syscall.Errno = 13834 + ERROR_IPSEC_IKE_PROCESS_ERR_CERT syscall.Errno = 13835 + ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ syscall.Errno = 13836 + ERROR_IPSEC_IKE_PROCESS_ERR_HASH syscall.Errno = 13837 + ERROR_IPSEC_IKE_PROCESS_ERR_SIG syscall.Errno = 13838 + ERROR_IPSEC_IKE_PROCESS_ERR_NONCE syscall.Errno = 13839 + ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY syscall.Errno = 13840 + ERROR_IPSEC_IKE_PROCESS_ERR_DELETE syscall.Errno = 13841 + ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR syscall.Errno = 13842 + ERROR_IPSEC_IKE_INVALID_PAYLOAD syscall.Errno = 13843 + ERROR_IPSEC_IKE_LOAD_SOFT_SA syscall.Errno = 13844 + ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN syscall.Errno = 13845 + ERROR_IPSEC_IKE_INVALID_COOKIE syscall.Errno = 13846 + ERROR_IPSEC_IKE_NO_PEER_CERT syscall.Errno = 13847 + ERROR_IPSEC_IKE_PEER_CRL_FAILED syscall.Errno = 13848 + ERROR_IPSEC_IKE_POLICY_CHANGE syscall.Errno = 13849 + ERROR_IPSEC_IKE_NO_MM_POLICY syscall.Errno = 13850 + ERROR_IPSEC_IKE_NOTCBPRIV syscall.Errno = 13851 + ERROR_IPSEC_IKE_SECLOADFAIL syscall.Errno = 13852 + ERROR_IPSEC_IKE_FAILSSPINIT syscall.Errno = 13853 + ERROR_IPSEC_IKE_FAILQUERYSSP syscall.Errno = 13854 + ERROR_IPSEC_IKE_SRVACQFAIL syscall.Errno = 13855 + ERROR_IPSEC_IKE_SRVQUERYCRED syscall.Errno = 13856 + ERROR_IPSEC_IKE_GETSPIFAIL syscall.Errno = 13857 + ERROR_IPSEC_IKE_INVALID_FILTER syscall.Errno = 13858 + ERROR_IPSEC_IKE_OUT_OF_MEMORY syscall.Errno = 13859 + ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED syscall.Errno = 13860 + ERROR_IPSEC_IKE_INVALID_POLICY syscall.Errno = 13861 + ERROR_IPSEC_IKE_UNKNOWN_DOI syscall.Errno = 13862 + ERROR_IPSEC_IKE_INVALID_SITUATION syscall.Errno = 13863 + ERROR_IPSEC_IKE_DH_FAILURE syscall.Errno = 13864 + ERROR_IPSEC_IKE_INVALID_GROUP syscall.Errno = 13865 + ERROR_IPSEC_IKE_ENCRYPT syscall.Errno = 13866 + ERROR_IPSEC_IKE_DECRYPT syscall.Errno = 13867 + ERROR_IPSEC_IKE_POLICY_MATCH syscall.Errno = 13868 + ERROR_IPSEC_IKE_UNSUPPORTED_ID syscall.Errno = 13869 + ERROR_IPSEC_IKE_INVALID_HASH syscall.Errno = 13870 + ERROR_IPSEC_IKE_INVALID_HASH_ALG syscall.Errno = 13871 + ERROR_IPSEC_IKE_INVALID_HASH_SIZE syscall.Errno = 13872 + ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG syscall.Errno = 13873 + ERROR_IPSEC_IKE_INVALID_AUTH_ALG syscall.Errno = 13874 + ERROR_IPSEC_IKE_INVALID_SIG syscall.Errno = 13875 + ERROR_IPSEC_IKE_LOAD_FAILED syscall.Errno = 13876 + ERROR_IPSEC_IKE_RPC_DELETE syscall.Errno = 13877 + ERROR_IPSEC_IKE_BENIGN_REINIT syscall.Errno = 13878 + ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY syscall.Errno = 13879 + ERROR_IPSEC_IKE_INVALID_MAJOR_VERSION syscall.Errno = 13880 + ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN syscall.Errno = 13881 + ERROR_IPSEC_IKE_MM_LIMIT syscall.Errno = 13882 + ERROR_IPSEC_IKE_NEGOTIATION_DISABLED syscall.Errno = 13883 + ERROR_IPSEC_IKE_QM_LIMIT syscall.Errno = 13884 + ERROR_IPSEC_IKE_MM_EXPIRED syscall.Errno = 13885 + ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID syscall.Errno = 13886 + ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH syscall.Errno = 13887 + ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID syscall.Errno = 13888 + ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD syscall.Errno = 13889 + ERROR_IPSEC_IKE_DOS_COOKIE_SENT syscall.Errno = 13890 + ERROR_IPSEC_IKE_SHUTTING_DOWN syscall.Errno = 13891 + ERROR_IPSEC_IKE_CGA_AUTH_FAILED syscall.Errno = 13892 + ERROR_IPSEC_IKE_PROCESS_ERR_NATOA syscall.Errno = 13893 + ERROR_IPSEC_IKE_INVALID_MM_FOR_QM syscall.Errno = 13894 + ERROR_IPSEC_IKE_QM_EXPIRED syscall.Errno = 13895 + ERROR_IPSEC_IKE_TOO_MANY_FILTERS syscall.Errno = 13896 + ERROR_IPSEC_IKE_NEG_STATUS_END syscall.Errno = 13897 + ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL syscall.Errno = 13898 + ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE syscall.Errno = 13899 + ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING syscall.Errno = 13900 + ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING syscall.Errno = 13901 + ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS syscall.Errno = 13902 + ERROR_IPSEC_IKE_RATELIMIT_DROP syscall.Errno = 13903 + ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE syscall.Errno = 13904 + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE syscall.Errno = 13905 + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE syscall.Errno = 13906 + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY syscall.Errno = 13907 + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE syscall.Errno = 13908 + ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END syscall.Errno = 13909 + ERROR_IPSEC_BAD_SPI syscall.Errno = 13910 + ERROR_IPSEC_SA_LIFETIME_EXPIRED syscall.Errno = 13911 + ERROR_IPSEC_WRONG_SA syscall.Errno = 13912 + ERROR_IPSEC_REPLAY_CHECK_FAILED syscall.Errno = 13913 + ERROR_IPSEC_INVALID_PACKET syscall.Errno = 13914 + ERROR_IPSEC_INTEGRITY_CHECK_FAILED syscall.Errno = 13915 + ERROR_IPSEC_CLEAR_TEXT_DROP syscall.Errno = 13916 + ERROR_IPSEC_AUTH_FIREWALL_DROP syscall.Errno = 13917 + ERROR_IPSEC_THROTTLE_DROP syscall.Errno = 13918 + ERROR_IPSEC_DOSP_BLOCK syscall.Errno = 13925 + ERROR_IPSEC_DOSP_RECEIVED_MULTICAST syscall.Errno = 13926 + ERROR_IPSEC_DOSP_INVALID_PACKET syscall.Errno = 13927 + ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED syscall.Errno = 13928 + ERROR_IPSEC_DOSP_MAX_ENTRIES syscall.Errno = 13929 + ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED syscall.Errno = 13930 + ERROR_IPSEC_DOSP_NOT_INSTALLED syscall.Errno = 13931 + ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES syscall.Errno = 13932 + ERROR_SXS_SECTION_NOT_FOUND syscall.Errno = 14000 + ERROR_SXS_CANT_GEN_ACTCTX syscall.Errno = 14001 + ERROR_SXS_INVALID_ACTCTXDATA_FORMAT syscall.Errno = 14002 + ERROR_SXS_ASSEMBLY_NOT_FOUND syscall.Errno = 14003 + ERROR_SXS_MANIFEST_FORMAT_ERROR syscall.Errno = 14004 + ERROR_SXS_MANIFEST_PARSE_ERROR syscall.Errno = 14005 + ERROR_SXS_ACTIVATION_CONTEXT_DISABLED syscall.Errno = 14006 + ERROR_SXS_KEY_NOT_FOUND syscall.Errno = 14007 + ERROR_SXS_VERSION_CONFLICT syscall.Errno = 14008 + ERROR_SXS_WRONG_SECTION_TYPE syscall.Errno = 14009 + ERROR_SXS_THREAD_QUERIES_DISABLED syscall.Errno = 14010 + ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET syscall.Errno = 14011 + ERROR_SXS_UNKNOWN_ENCODING_GROUP syscall.Errno = 14012 + ERROR_SXS_UNKNOWN_ENCODING syscall.Errno = 14013 + ERROR_SXS_INVALID_XML_NAMESPACE_URI syscall.Errno = 14014 + ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED syscall.Errno = 14015 + ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED syscall.Errno = 14016 + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE syscall.Errno = 14017 + ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE syscall.Errno = 14018 + ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE syscall.Errno = 14019 + ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT syscall.Errno = 14020 + ERROR_SXS_DUPLICATE_DLL_NAME syscall.Errno = 14021 + ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME syscall.Errno = 14022 + ERROR_SXS_DUPLICATE_CLSID syscall.Errno = 14023 + ERROR_SXS_DUPLICATE_IID syscall.Errno = 14024 + ERROR_SXS_DUPLICATE_TLBID syscall.Errno = 14025 + ERROR_SXS_DUPLICATE_PROGID syscall.Errno = 14026 + ERROR_SXS_DUPLICATE_ASSEMBLY_NAME syscall.Errno = 14027 + ERROR_SXS_FILE_HASH_MISMATCH syscall.Errno = 14028 + ERROR_SXS_POLICY_PARSE_ERROR syscall.Errno = 14029 + ERROR_SXS_XML_E_MISSINGQUOTE syscall.Errno = 14030 + ERROR_SXS_XML_E_COMMENTSYNTAX syscall.Errno = 14031 + ERROR_SXS_XML_E_BADSTARTNAMECHAR syscall.Errno = 14032 + ERROR_SXS_XML_E_BADNAMECHAR syscall.Errno = 14033 + ERROR_SXS_XML_E_BADCHARINSTRING syscall.Errno = 14034 + ERROR_SXS_XML_E_XMLDECLSYNTAX syscall.Errno = 14035 + ERROR_SXS_XML_E_BADCHARDATA syscall.Errno = 14036 + ERROR_SXS_XML_E_MISSINGWHITESPACE syscall.Errno = 14037 + ERROR_SXS_XML_E_EXPECTINGTAGEND syscall.Errno = 14038 + ERROR_SXS_XML_E_MISSINGSEMICOLON syscall.Errno = 14039 + ERROR_SXS_XML_E_UNBALANCEDPAREN syscall.Errno = 14040 + ERROR_SXS_XML_E_INTERNALERROR syscall.Errno = 14041 + ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE syscall.Errno = 14042 + ERROR_SXS_XML_E_INCOMPLETE_ENCODING syscall.Errno = 14043 + ERROR_SXS_XML_E_MISSING_PAREN syscall.Errno = 14044 + ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE syscall.Errno = 14045 + ERROR_SXS_XML_E_MULTIPLE_COLONS syscall.Errno = 14046 + ERROR_SXS_XML_E_INVALID_DECIMAL syscall.Errno = 14047 + ERROR_SXS_XML_E_INVALID_HEXIDECIMAL syscall.Errno = 14048 + ERROR_SXS_XML_E_INVALID_UNICODE syscall.Errno = 14049 + ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK syscall.Errno = 14050 + ERROR_SXS_XML_E_UNEXPECTEDENDTAG syscall.Errno = 14051 + ERROR_SXS_XML_E_UNCLOSEDTAG syscall.Errno = 14052 + ERROR_SXS_XML_E_DUPLICATEATTRIBUTE syscall.Errno = 14053 + ERROR_SXS_XML_E_MULTIPLEROOTS syscall.Errno = 14054 + ERROR_SXS_XML_E_INVALIDATROOTLEVEL syscall.Errno = 14055 + ERROR_SXS_XML_E_BADXMLDECL syscall.Errno = 14056 + ERROR_SXS_XML_E_MISSINGROOT syscall.Errno = 14057 + ERROR_SXS_XML_E_UNEXPECTEDEOF syscall.Errno = 14058 + ERROR_SXS_XML_E_BADPEREFINSUBSET syscall.Errno = 14059 + ERROR_SXS_XML_E_UNCLOSEDSTARTTAG syscall.Errno = 14060 + ERROR_SXS_XML_E_UNCLOSEDENDTAG syscall.Errno = 14061 + ERROR_SXS_XML_E_UNCLOSEDSTRING syscall.Errno = 14062 + ERROR_SXS_XML_E_UNCLOSEDCOMMENT syscall.Errno = 14063 + ERROR_SXS_XML_E_UNCLOSEDDECL syscall.Errno = 14064 + ERROR_SXS_XML_E_UNCLOSEDCDATA syscall.Errno = 14065 + ERROR_SXS_XML_E_RESERVEDNAMESPACE syscall.Errno = 14066 + ERROR_SXS_XML_E_INVALIDENCODING syscall.Errno = 14067 + ERROR_SXS_XML_E_INVALIDSWITCH syscall.Errno = 14068 + ERROR_SXS_XML_E_BADXMLCASE syscall.Errno = 14069 + ERROR_SXS_XML_E_INVALID_STANDALONE syscall.Errno = 14070 + ERROR_SXS_XML_E_UNEXPECTED_STANDALONE syscall.Errno = 14071 + ERROR_SXS_XML_E_INVALID_VERSION syscall.Errno = 14072 + ERROR_SXS_XML_E_MISSINGEQUALS syscall.Errno = 14073 + ERROR_SXS_PROTECTION_RECOVERY_FAILED syscall.Errno = 14074 + ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT syscall.Errno = 14075 + ERROR_SXS_PROTECTION_CATALOG_NOT_VALID syscall.Errno = 14076 + ERROR_SXS_UNTRANSLATABLE_HRESULT syscall.Errno = 14077 + ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING syscall.Errno = 14078 + ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE syscall.Errno = 14079 + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME syscall.Errno = 14080 + ERROR_SXS_ASSEMBLY_MISSING syscall.Errno = 14081 + ERROR_SXS_CORRUPT_ACTIVATION_STACK syscall.Errno = 14082 + ERROR_SXS_CORRUPTION syscall.Errno = 14083 + ERROR_SXS_EARLY_DEACTIVATION syscall.Errno = 14084 + ERROR_SXS_INVALID_DEACTIVATION syscall.Errno = 14085 + ERROR_SXS_MULTIPLE_DEACTIVATION syscall.Errno = 14086 + ERROR_SXS_PROCESS_TERMINATION_REQUESTED syscall.Errno = 14087 + ERROR_SXS_RELEASE_ACTIVATION_CONTEXT syscall.Errno = 14088 + ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY syscall.Errno = 14089 + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE syscall.Errno = 14090 + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME syscall.Errno = 14091 + ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE syscall.Errno = 14092 + ERROR_SXS_IDENTITY_PARSE_ERROR syscall.Errno = 14093 + ERROR_MALFORMED_SUBSTITUTION_STRING syscall.Errno = 14094 + ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN syscall.Errno = 14095 + ERROR_UNMAPPED_SUBSTITUTION_STRING syscall.Errno = 14096 + ERROR_SXS_ASSEMBLY_NOT_LOCKED syscall.Errno = 14097 + ERROR_SXS_COMPONENT_STORE_CORRUPT syscall.Errno = 14098 + ERROR_ADVANCED_INSTALLER_FAILED syscall.Errno = 14099 + ERROR_XML_ENCODING_MISMATCH syscall.Errno = 14100 + ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT syscall.Errno = 14101 + ERROR_SXS_IDENTITIES_DIFFERENT syscall.Errno = 14102 + ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT syscall.Errno = 14103 + ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY syscall.Errno = 14104 + ERROR_SXS_MANIFEST_TOO_BIG syscall.Errno = 14105 + ERROR_SXS_SETTING_NOT_REGISTERED syscall.Errno = 14106 + ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE syscall.Errno = 14107 + ERROR_SMI_PRIMITIVE_INSTALLER_FAILED syscall.Errno = 14108 + ERROR_GENERIC_COMMAND_FAILED syscall.Errno = 14109 + ERROR_SXS_FILE_HASH_MISSING syscall.Errno = 14110 + ERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS syscall.Errno = 14111 + ERROR_EVT_INVALID_CHANNEL_PATH syscall.Errno = 15000 + ERROR_EVT_INVALID_QUERY syscall.Errno = 15001 + ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND syscall.Errno = 15002 + ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND syscall.Errno = 15003 + ERROR_EVT_INVALID_PUBLISHER_NAME syscall.Errno = 15004 + ERROR_EVT_INVALID_EVENT_DATA syscall.Errno = 15005 + ERROR_EVT_CHANNEL_NOT_FOUND syscall.Errno = 15007 + ERROR_EVT_MALFORMED_XML_TEXT syscall.Errno = 15008 + ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL syscall.Errno = 15009 + ERROR_EVT_CONFIGURATION_ERROR syscall.Errno = 15010 + ERROR_EVT_QUERY_RESULT_STALE syscall.Errno = 15011 + ERROR_EVT_QUERY_RESULT_INVALID_POSITION syscall.Errno = 15012 + ERROR_EVT_NON_VALIDATING_MSXML syscall.Errno = 15013 + ERROR_EVT_FILTER_ALREADYSCOPED syscall.Errno = 15014 + ERROR_EVT_FILTER_NOTELTSET syscall.Errno = 15015 + ERROR_EVT_FILTER_INVARG syscall.Errno = 15016 + ERROR_EVT_FILTER_INVTEST syscall.Errno = 15017 + ERROR_EVT_FILTER_INVTYPE syscall.Errno = 15018 + ERROR_EVT_FILTER_PARSEERR syscall.Errno = 15019 + ERROR_EVT_FILTER_UNSUPPORTEDOP syscall.Errno = 15020 + ERROR_EVT_FILTER_UNEXPECTEDTOKEN syscall.Errno = 15021 + ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL syscall.Errno = 15022 + ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE syscall.Errno = 15023 + ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE syscall.Errno = 15024 + ERROR_EVT_CHANNEL_CANNOT_ACTIVATE syscall.Errno = 15025 + ERROR_EVT_FILTER_TOO_COMPLEX syscall.Errno = 15026 + ERROR_EVT_MESSAGE_NOT_FOUND syscall.Errno = 15027 + ERROR_EVT_MESSAGE_ID_NOT_FOUND syscall.Errno = 15028 + ERROR_EVT_UNRESOLVED_VALUE_INSERT syscall.Errno = 15029 + ERROR_EVT_UNRESOLVED_PARAMETER_INSERT syscall.Errno = 15030 + ERROR_EVT_MAX_INSERTS_REACHED syscall.Errno = 15031 + ERROR_EVT_EVENT_DEFINITION_NOT_FOUND syscall.Errno = 15032 + ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND syscall.Errno = 15033 + ERROR_EVT_VERSION_TOO_OLD syscall.Errno = 15034 + ERROR_EVT_VERSION_TOO_NEW syscall.Errno = 15035 + ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY syscall.Errno = 15036 + ERROR_EVT_PUBLISHER_DISABLED syscall.Errno = 15037 + ERROR_EVT_FILTER_OUT_OF_RANGE syscall.Errno = 15038 + ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE syscall.Errno = 15080 + ERROR_EC_LOG_DISABLED syscall.Errno = 15081 + ERROR_EC_CIRCULAR_FORWARDING syscall.Errno = 15082 + ERROR_EC_CREDSTORE_FULL syscall.Errno = 15083 + ERROR_EC_CRED_NOT_FOUND syscall.Errno = 15084 + ERROR_EC_NO_ACTIVE_CHANNEL syscall.Errno = 15085 + ERROR_MUI_FILE_NOT_FOUND syscall.Errno = 15100 + ERROR_MUI_INVALID_FILE syscall.Errno = 15101 + ERROR_MUI_INVALID_RC_CONFIG syscall.Errno = 15102 + ERROR_MUI_INVALID_LOCALE_NAME syscall.Errno = 15103 + ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME syscall.Errno = 15104 + ERROR_MUI_FILE_NOT_LOADED syscall.Errno = 15105 + ERROR_RESOURCE_ENUM_USER_STOP syscall.Errno = 15106 + ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED syscall.Errno = 15107 + ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME syscall.Errno = 15108 + ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE syscall.Errno = 15110 + ERROR_MRM_INVALID_PRICONFIG syscall.Errno = 15111 + ERROR_MRM_INVALID_FILE_TYPE syscall.Errno = 15112 + ERROR_MRM_UNKNOWN_QUALIFIER syscall.Errno = 15113 + ERROR_MRM_INVALID_QUALIFIER_VALUE syscall.Errno = 15114 + ERROR_MRM_NO_CANDIDATE syscall.Errno = 15115 + ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE syscall.Errno = 15116 + ERROR_MRM_RESOURCE_TYPE_MISMATCH syscall.Errno = 15117 + ERROR_MRM_DUPLICATE_MAP_NAME syscall.Errno = 15118 + ERROR_MRM_DUPLICATE_ENTRY syscall.Errno = 15119 + ERROR_MRM_INVALID_RESOURCE_IDENTIFIER syscall.Errno = 15120 + ERROR_MRM_FILEPATH_TOO_LONG syscall.Errno = 15121 + ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE syscall.Errno = 15122 + ERROR_MRM_INVALID_PRI_FILE syscall.Errno = 15126 + ERROR_MRM_NAMED_RESOURCE_NOT_FOUND syscall.Errno = 15127 + ERROR_MRM_MAP_NOT_FOUND syscall.Errno = 15135 + ERROR_MRM_UNSUPPORTED_PROFILE_TYPE syscall.Errno = 15136 + ERROR_MRM_INVALID_QUALIFIER_OPERATOR syscall.Errno = 15137 + ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE syscall.Errno = 15138 + ERROR_MRM_AUTOMERGE_ENABLED syscall.Errno = 15139 + ERROR_MRM_TOO_MANY_RESOURCES syscall.Errno = 15140 + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE syscall.Errno = 15141 + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE syscall.Errno = 15142 + ERROR_MRM_NO_CURRENT_VIEW_ON_THREAD syscall.Errno = 15143 + ERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST syscall.Errno = 15144 + ERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT syscall.Errno = 15145 + ERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE syscall.Errno = 15146 + ERROR_MRM_GENERATION_COUNT_MISMATCH syscall.Errno = 15147 + ERROR_PRI_MERGE_VERSION_MISMATCH syscall.Errno = 15148 + ERROR_PRI_MERGE_MISSING_SCHEMA syscall.Errno = 15149 + ERROR_PRI_MERGE_LOAD_FILE_FAILED syscall.Errno = 15150 + ERROR_PRI_MERGE_ADD_FILE_FAILED syscall.Errno = 15151 + ERROR_PRI_MERGE_WRITE_FILE_FAILED syscall.Errno = 15152 + ERROR_PRI_MERGE_MULTIPLE_PACKAGE_FAMILIES_NOT_ALLOWED syscall.Errno = 15153 + ERROR_PRI_MERGE_MULTIPLE_MAIN_PACKAGES_NOT_ALLOWED syscall.Errno = 15154 + ERROR_PRI_MERGE_BUNDLE_PACKAGES_NOT_ALLOWED syscall.Errno = 15155 + ERROR_PRI_MERGE_MAIN_PACKAGE_REQUIRED syscall.Errno = 15156 + ERROR_PRI_MERGE_RESOURCE_PACKAGE_REQUIRED syscall.Errno = 15157 + ERROR_PRI_MERGE_INVALID_FILE_NAME syscall.Errno = 15158 + ERROR_MRM_PACKAGE_NOT_FOUND syscall.Errno = 15159 + ERROR_MRM_MISSING_DEFAULT_LANGUAGE syscall.Errno = 15160 + ERROR_MCA_INVALID_CAPABILITIES_STRING syscall.Errno = 15200 + ERROR_MCA_INVALID_VCP_VERSION syscall.Errno = 15201 + ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION syscall.Errno = 15202 + ERROR_MCA_MCCS_VERSION_MISMATCH syscall.Errno = 15203 + ERROR_MCA_UNSUPPORTED_MCCS_VERSION syscall.Errno = 15204 + ERROR_MCA_INTERNAL_ERROR syscall.Errno = 15205 + ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED syscall.Errno = 15206 + ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE syscall.Errno = 15207 + ERROR_AMBIGUOUS_SYSTEM_DEVICE syscall.Errno = 15250 + ERROR_SYSTEM_DEVICE_NOT_FOUND syscall.Errno = 15299 + ERROR_HASH_NOT_SUPPORTED syscall.Errno = 15300 + ERROR_HASH_NOT_PRESENT syscall.Errno = 15301 + ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED syscall.Errno = 15321 + ERROR_GPIO_CLIENT_INFORMATION_INVALID syscall.Errno = 15322 + ERROR_GPIO_VERSION_NOT_SUPPORTED syscall.Errno = 15323 + ERROR_GPIO_INVALID_REGISTRATION_PACKET syscall.Errno = 15324 + ERROR_GPIO_OPERATION_DENIED syscall.Errno = 15325 + ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE syscall.Errno = 15326 + ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED syscall.Errno = 15327 + ERROR_CANNOT_SWITCH_RUNLEVEL syscall.Errno = 15400 + ERROR_INVALID_RUNLEVEL_SETTING syscall.Errno = 15401 + ERROR_RUNLEVEL_SWITCH_TIMEOUT syscall.Errno = 15402 + ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT syscall.Errno = 15403 + ERROR_RUNLEVEL_SWITCH_IN_PROGRESS syscall.Errno = 15404 + ERROR_SERVICES_FAILED_AUTOSTART syscall.Errno = 15405 + ERROR_COM_TASK_STOP_PENDING syscall.Errno = 15501 + ERROR_INSTALL_OPEN_PACKAGE_FAILED syscall.Errno = 15600 + ERROR_INSTALL_PACKAGE_NOT_FOUND syscall.Errno = 15601 + ERROR_INSTALL_INVALID_PACKAGE syscall.Errno = 15602 + ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED syscall.Errno = 15603 + ERROR_INSTALL_OUT_OF_DISK_SPACE syscall.Errno = 15604 + ERROR_INSTALL_NETWORK_FAILURE syscall.Errno = 15605 + ERROR_INSTALL_REGISTRATION_FAILURE syscall.Errno = 15606 + ERROR_INSTALL_DEREGISTRATION_FAILURE syscall.Errno = 15607 + ERROR_INSTALL_CANCEL syscall.Errno = 15608 + ERROR_INSTALL_FAILED syscall.Errno = 15609 + ERROR_REMOVE_FAILED syscall.Errno = 15610 + ERROR_PACKAGE_ALREADY_EXISTS syscall.Errno = 15611 + ERROR_NEEDS_REMEDIATION syscall.Errno = 15612 + ERROR_INSTALL_PREREQUISITE_FAILED syscall.Errno = 15613 + ERROR_PACKAGE_REPOSITORY_CORRUPTED syscall.Errno = 15614 + ERROR_INSTALL_POLICY_FAILURE syscall.Errno = 15615 + ERROR_PACKAGE_UPDATING syscall.Errno = 15616 + ERROR_DEPLOYMENT_BLOCKED_BY_POLICY syscall.Errno = 15617 + ERROR_PACKAGES_IN_USE syscall.Errno = 15618 + ERROR_RECOVERY_FILE_CORRUPT syscall.Errno = 15619 + ERROR_INVALID_STAGED_SIGNATURE syscall.Errno = 15620 + ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED syscall.Errno = 15621 + ERROR_INSTALL_PACKAGE_DOWNGRADE syscall.Errno = 15622 + ERROR_SYSTEM_NEEDS_REMEDIATION syscall.Errno = 15623 + ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN syscall.Errno = 15624 + ERROR_RESILIENCY_FILE_CORRUPT syscall.Errno = 15625 + ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING syscall.Errno = 15626 + ERROR_PACKAGE_MOVE_FAILED syscall.Errno = 15627 + ERROR_INSTALL_VOLUME_NOT_EMPTY syscall.Errno = 15628 + ERROR_INSTALL_VOLUME_OFFLINE syscall.Errno = 15629 + ERROR_INSTALL_VOLUME_CORRUPT syscall.Errno = 15630 + ERROR_NEEDS_REGISTRATION syscall.Errno = 15631 + ERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE syscall.Errno = 15632 + ERROR_DEV_SIDELOAD_LIMIT_EXCEEDED syscall.Errno = 15633 + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE syscall.Errno = 15634 + ERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM syscall.Errno = 15635 + ERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING syscall.Errno = 15636 + ERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE syscall.Errno = 15637 + ERROR_PACKAGE_STAGING_ONHOLD syscall.Errno = 15638 + ERROR_INSTALL_INVALID_RELATED_SET_UPDATE syscall.Errno = 15639 + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY syscall.Errno = 15640 + ERROR_DEPLOYMENT_BLOCKED_BY_USER_LOG_OFF syscall.Errno = 15641 + ERROR_PROVISION_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_PROVISIONED syscall.Errno = 15642 + ERROR_PACKAGES_REPUTATION_CHECK_FAILED syscall.Errno = 15643 + ERROR_PACKAGES_REPUTATION_CHECK_TIMEDOUT syscall.Errno = 15644 + ERROR_DEPLOYMENT_OPTION_NOT_SUPPORTED syscall.Errno = 15645 + ERROR_APPINSTALLER_ACTIVATION_BLOCKED syscall.Errno = 15646 + ERROR_REGISTRATION_FROM_REMOTE_DRIVE_NOT_SUPPORTED syscall.Errno = 15647 + ERROR_APPX_RAW_DATA_WRITE_FAILED syscall.Errno = 15648 + ERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_PACKAGE syscall.Errno = 15649 + ERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_MACHINE syscall.Errno = 15650 + ERROR_DEPLOYMENT_BLOCKED_BY_PROFILE_POLICY syscall.Errno = 15651 + ERROR_DEPLOYMENT_FAILED_CONFLICTING_MUTABLE_PACKAGE_DIRECTORY syscall.Errno = 15652 + ERROR_SINGLETON_RESOURCE_INSTALLED_IN_ACTIVE_USER syscall.Errno = 15653 + ERROR_DIFFERENT_VERSION_OF_PACKAGED_SERVICE_INSTALLED syscall.Errno = 15654 + ERROR_SERVICE_EXISTS_AS_NON_PACKAGED_SERVICE syscall.Errno = 15655 + ERROR_PACKAGED_SERVICE_REQUIRES_ADMIN_PRIVILEGES syscall.Errno = 15656 + APPMODEL_ERROR_NO_PACKAGE syscall.Errno = 15700 + APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT syscall.Errno = 15701 + APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT syscall.Errno = 15702 + APPMODEL_ERROR_NO_APPLICATION syscall.Errno = 15703 + APPMODEL_ERROR_DYNAMIC_PROPERTY_READ_FAILED syscall.Errno = 15704 + APPMODEL_ERROR_DYNAMIC_PROPERTY_INVALID syscall.Errno = 15705 + APPMODEL_ERROR_PACKAGE_NOT_AVAILABLE syscall.Errno = 15706 + APPMODEL_ERROR_NO_MUTABLE_DIRECTORY syscall.Errno = 15707 + ERROR_STATE_LOAD_STORE_FAILED syscall.Errno = 15800 + ERROR_STATE_GET_VERSION_FAILED syscall.Errno = 15801 + ERROR_STATE_SET_VERSION_FAILED syscall.Errno = 15802 + ERROR_STATE_STRUCTURED_RESET_FAILED syscall.Errno = 15803 + ERROR_STATE_OPEN_CONTAINER_FAILED syscall.Errno = 15804 + ERROR_STATE_CREATE_CONTAINER_FAILED syscall.Errno = 15805 + ERROR_STATE_DELETE_CONTAINER_FAILED syscall.Errno = 15806 + ERROR_STATE_READ_SETTING_FAILED syscall.Errno = 15807 + ERROR_STATE_WRITE_SETTING_FAILED syscall.Errno = 15808 + ERROR_STATE_DELETE_SETTING_FAILED syscall.Errno = 15809 + ERROR_STATE_QUERY_SETTING_FAILED syscall.Errno = 15810 + ERROR_STATE_READ_COMPOSITE_SETTING_FAILED syscall.Errno = 15811 + ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED syscall.Errno = 15812 + ERROR_STATE_ENUMERATE_CONTAINER_FAILED syscall.Errno = 15813 + ERROR_STATE_ENUMERATE_SETTINGS_FAILED syscall.Errno = 15814 + ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED syscall.Errno = 15815 + ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED syscall.Errno = 15816 + ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED syscall.Errno = 15817 + ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED syscall.Errno = 15818 + ERROR_API_UNAVAILABLE syscall.Errno = 15841 + STORE_ERROR_UNLICENSED syscall.Errno = 15861 + STORE_ERROR_UNLICENSED_USER syscall.Errno = 15862 + STORE_ERROR_PENDING_COM_TRANSACTION syscall.Errno = 15863 + STORE_ERROR_LICENSE_REVOKED syscall.Errno = 15864 + SEVERITY_SUCCESS syscall.Errno = 0 + SEVERITY_ERROR syscall.Errno = 1 + FACILITY_NT_BIT = 0x10000000 + E_NOT_SET = ERROR_NOT_FOUND + E_NOT_VALID_STATE = ERROR_INVALID_STATE + E_NOT_SUFFICIENT_BUFFER = ERROR_INSUFFICIENT_BUFFER + E_TIME_SENSITIVE_THREAD = ERROR_TIME_SENSITIVE_THREAD + E_NO_TASK_QUEUE = ERROR_NO_TASK_QUEUE + NOERROR syscall.Errno = 0 + E_UNEXPECTED Handle = 0x8000FFFF + E_NOTIMPL Handle = 0x80004001 + E_OUTOFMEMORY Handle = 0x8007000E + E_INVALIDARG Handle = 0x80070057 + E_NOINTERFACE Handle = 0x80004002 + E_POINTER Handle = 0x80004003 + E_HANDLE Handle = 0x80070006 + E_ABORT Handle = 0x80004004 + E_FAIL Handle = 0x80004005 + E_ACCESSDENIED Handle = 0x80070005 + E_PENDING Handle = 0x8000000A + E_BOUNDS Handle = 0x8000000B + E_CHANGED_STATE Handle = 0x8000000C + E_ILLEGAL_STATE_CHANGE Handle = 0x8000000D + E_ILLEGAL_METHOD_CALL Handle = 0x8000000E + RO_E_METADATA_NAME_NOT_FOUND Handle = 0x8000000F + RO_E_METADATA_NAME_IS_NAMESPACE Handle = 0x80000010 + RO_E_METADATA_INVALID_TYPE_FORMAT Handle = 0x80000011 + RO_E_INVALID_METADATA_FILE Handle = 0x80000012 + RO_E_CLOSED Handle = 0x80000013 + RO_E_EXCLUSIVE_WRITE Handle = 0x80000014 + RO_E_CHANGE_NOTIFICATION_IN_PROGRESS Handle = 0x80000015 + RO_E_ERROR_STRING_NOT_FOUND Handle = 0x80000016 + E_STRING_NOT_NULL_TERMINATED Handle = 0x80000017 + E_ILLEGAL_DELEGATE_ASSIGNMENT Handle = 0x80000018 + E_ASYNC_OPERATION_NOT_STARTED Handle = 0x80000019 + E_APPLICATION_EXITING Handle = 0x8000001A + E_APPLICATION_VIEW_EXITING Handle = 0x8000001B + RO_E_MUST_BE_AGILE Handle = 0x8000001C + RO_E_UNSUPPORTED_FROM_MTA Handle = 0x8000001D + RO_E_COMMITTED Handle = 0x8000001E + RO_E_BLOCKED_CROSS_ASTA_CALL Handle = 0x8000001F + RO_E_CANNOT_ACTIVATE_FULL_TRUST_SERVER Handle = 0x80000020 + RO_E_CANNOT_ACTIVATE_UNIVERSAL_APPLICATION_SERVER Handle = 0x80000021 + CO_E_INIT_TLS Handle = 0x80004006 + CO_E_INIT_SHARED_ALLOCATOR Handle = 0x80004007 + CO_E_INIT_MEMORY_ALLOCATOR Handle = 0x80004008 + CO_E_INIT_CLASS_CACHE Handle = 0x80004009 + CO_E_INIT_RPC_CHANNEL Handle = 0x8000400A + CO_E_INIT_TLS_SET_CHANNEL_CONTROL Handle = 0x8000400B + CO_E_INIT_TLS_CHANNEL_CONTROL Handle = 0x8000400C + CO_E_INIT_UNACCEPTED_USER_ALLOCATOR Handle = 0x8000400D + CO_E_INIT_SCM_MUTEX_EXISTS Handle = 0x8000400E + CO_E_INIT_SCM_FILE_MAPPING_EXISTS Handle = 0x8000400F + CO_E_INIT_SCM_MAP_VIEW_OF_FILE Handle = 0x80004010 + CO_E_INIT_SCM_EXEC_FAILURE Handle = 0x80004011 + CO_E_INIT_ONLY_SINGLE_THREADED Handle = 0x80004012 + CO_E_CANT_REMOTE Handle = 0x80004013 + CO_E_BAD_SERVER_NAME Handle = 0x80004014 + CO_E_WRONG_SERVER_IDENTITY Handle = 0x80004015 + CO_E_OLE1DDE_DISABLED Handle = 0x80004016 + CO_E_RUNAS_SYNTAX Handle = 0x80004017 + CO_E_CREATEPROCESS_FAILURE Handle = 0x80004018 + CO_E_RUNAS_CREATEPROCESS_FAILURE Handle = 0x80004019 + CO_E_RUNAS_LOGON_FAILURE Handle = 0x8000401A + CO_E_LAUNCH_PERMSSION_DENIED Handle = 0x8000401B + CO_E_START_SERVICE_FAILURE Handle = 0x8000401C + CO_E_REMOTE_COMMUNICATION_FAILURE Handle = 0x8000401D + CO_E_SERVER_START_TIMEOUT Handle = 0x8000401E + CO_E_CLSREG_INCONSISTENT Handle = 0x8000401F + CO_E_IIDREG_INCONSISTENT Handle = 0x80004020 + CO_E_NOT_SUPPORTED Handle = 0x80004021 + CO_E_RELOAD_DLL Handle = 0x80004022 + CO_E_MSI_ERROR Handle = 0x80004023 + CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT Handle = 0x80004024 + CO_E_SERVER_PAUSED Handle = 0x80004025 + CO_E_SERVER_NOT_PAUSED Handle = 0x80004026 + CO_E_CLASS_DISABLED Handle = 0x80004027 + CO_E_CLRNOTAVAILABLE Handle = 0x80004028 + CO_E_ASYNC_WORK_REJECTED Handle = 0x80004029 + CO_E_SERVER_INIT_TIMEOUT Handle = 0x8000402A + CO_E_NO_SECCTX_IN_ACTIVATE Handle = 0x8000402B + CO_E_TRACKER_CONFIG Handle = 0x80004030 + CO_E_THREADPOOL_CONFIG Handle = 0x80004031 + CO_E_SXS_CONFIG Handle = 0x80004032 + CO_E_MALFORMED_SPN Handle = 0x80004033 + CO_E_UNREVOKED_REGISTRATION_ON_APARTMENT_SHUTDOWN Handle = 0x80004034 + CO_E_PREMATURE_STUB_RUNDOWN Handle = 0x80004035 + S_OK Handle = 0 + S_FALSE Handle = 1 + OLE_E_FIRST Handle = 0x80040000 + OLE_E_LAST Handle = 0x800400FF + OLE_S_FIRST Handle = 0x00040000 + OLE_S_LAST Handle = 0x000400FF + OLE_E_OLEVERB Handle = 0x80040000 + OLE_E_ADVF Handle = 0x80040001 + OLE_E_ENUM_NOMORE Handle = 0x80040002 + OLE_E_ADVISENOTSUPPORTED Handle = 0x80040003 + OLE_E_NOCONNECTION Handle = 0x80040004 + OLE_E_NOTRUNNING Handle = 0x80040005 + OLE_E_NOCACHE Handle = 0x80040006 + OLE_E_BLANK Handle = 0x80040007 + OLE_E_CLASSDIFF Handle = 0x80040008 + OLE_E_CANT_GETMONIKER Handle = 0x80040009 + OLE_E_CANT_BINDTOSOURCE Handle = 0x8004000A + OLE_E_STATIC Handle = 0x8004000B + OLE_E_PROMPTSAVECANCELLED Handle = 0x8004000C + OLE_E_INVALIDRECT Handle = 0x8004000D + OLE_E_WRONGCOMPOBJ Handle = 0x8004000E + OLE_E_INVALIDHWND Handle = 0x8004000F + OLE_E_NOT_INPLACEACTIVE Handle = 0x80040010 + OLE_E_CANTCONVERT Handle = 0x80040011 + OLE_E_NOSTORAGE Handle = 0x80040012 + DV_E_FORMATETC Handle = 0x80040064 + DV_E_DVTARGETDEVICE Handle = 0x80040065 + DV_E_STGMEDIUM Handle = 0x80040066 + DV_E_STATDATA Handle = 0x80040067 + DV_E_LINDEX Handle = 0x80040068 + DV_E_TYMED Handle = 0x80040069 + DV_E_CLIPFORMAT Handle = 0x8004006A + DV_E_DVASPECT Handle = 0x8004006B + DV_E_DVTARGETDEVICE_SIZE Handle = 0x8004006C + DV_E_NOIVIEWOBJECT Handle = 0x8004006D + DRAGDROP_E_FIRST syscall.Errno = 0x80040100 + DRAGDROP_E_LAST syscall.Errno = 0x8004010F + DRAGDROP_S_FIRST syscall.Errno = 0x00040100 + DRAGDROP_S_LAST syscall.Errno = 0x0004010F + DRAGDROP_E_NOTREGISTERED Handle = 0x80040100 + DRAGDROP_E_ALREADYREGISTERED Handle = 0x80040101 + DRAGDROP_E_INVALIDHWND Handle = 0x80040102 + DRAGDROP_E_CONCURRENT_DRAG_ATTEMPTED Handle = 0x80040103 + CLASSFACTORY_E_FIRST syscall.Errno = 0x80040110 + CLASSFACTORY_E_LAST syscall.Errno = 0x8004011F + CLASSFACTORY_S_FIRST syscall.Errno = 0x00040110 + CLASSFACTORY_S_LAST syscall.Errno = 0x0004011F + CLASS_E_NOAGGREGATION Handle = 0x80040110 + CLASS_E_CLASSNOTAVAILABLE Handle = 0x80040111 + CLASS_E_NOTLICENSED Handle = 0x80040112 + MARSHAL_E_FIRST syscall.Errno = 0x80040120 + MARSHAL_E_LAST syscall.Errno = 0x8004012F + MARSHAL_S_FIRST syscall.Errno = 0x00040120 + MARSHAL_S_LAST syscall.Errno = 0x0004012F + DATA_E_FIRST syscall.Errno = 0x80040130 + DATA_E_LAST syscall.Errno = 0x8004013F + DATA_S_FIRST syscall.Errno = 0x00040130 + DATA_S_LAST syscall.Errno = 0x0004013F + VIEW_E_FIRST syscall.Errno = 0x80040140 + VIEW_E_LAST syscall.Errno = 0x8004014F + VIEW_S_FIRST syscall.Errno = 0x00040140 + VIEW_S_LAST syscall.Errno = 0x0004014F + VIEW_E_DRAW Handle = 0x80040140 + REGDB_E_FIRST syscall.Errno = 0x80040150 + REGDB_E_LAST syscall.Errno = 0x8004015F + REGDB_S_FIRST syscall.Errno = 0x00040150 + REGDB_S_LAST syscall.Errno = 0x0004015F + REGDB_E_READREGDB Handle = 0x80040150 + REGDB_E_WRITEREGDB Handle = 0x80040151 + REGDB_E_KEYMISSING Handle = 0x80040152 + REGDB_E_INVALIDVALUE Handle = 0x80040153 + REGDB_E_CLASSNOTREG Handle = 0x80040154 + REGDB_E_IIDNOTREG Handle = 0x80040155 + REGDB_E_BADTHREADINGMODEL Handle = 0x80040156 + REGDB_E_PACKAGEPOLICYVIOLATION Handle = 0x80040157 + CAT_E_FIRST syscall.Errno = 0x80040160 + CAT_E_LAST syscall.Errno = 0x80040161 + CAT_E_CATIDNOEXIST Handle = 0x80040160 + CAT_E_NODESCRIPTION Handle = 0x80040161 + CS_E_FIRST syscall.Errno = 0x80040164 + CS_E_LAST syscall.Errno = 0x8004016F + CS_E_PACKAGE_NOTFOUND Handle = 0x80040164 + CS_E_NOT_DELETABLE Handle = 0x80040165 + CS_E_CLASS_NOTFOUND Handle = 0x80040166 + CS_E_INVALID_VERSION Handle = 0x80040167 + CS_E_NO_CLASSSTORE Handle = 0x80040168 + CS_E_OBJECT_NOTFOUND Handle = 0x80040169 + CS_E_OBJECT_ALREADY_EXISTS Handle = 0x8004016A + CS_E_INVALID_PATH Handle = 0x8004016B + CS_E_NETWORK_ERROR Handle = 0x8004016C + CS_E_ADMIN_LIMIT_EXCEEDED Handle = 0x8004016D + CS_E_SCHEMA_MISMATCH Handle = 0x8004016E + CS_E_INTERNAL_ERROR Handle = 0x8004016F + CACHE_E_FIRST syscall.Errno = 0x80040170 + CACHE_E_LAST syscall.Errno = 0x8004017F + CACHE_S_FIRST syscall.Errno = 0x00040170 + CACHE_S_LAST syscall.Errno = 0x0004017F + CACHE_E_NOCACHE_UPDATED Handle = 0x80040170 + OLEOBJ_E_FIRST syscall.Errno = 0x80040180 + OLEOBJ_E_LAST syscall.Errno = 0x8004018F + OLEOBJ_S_FIRST syscall.Errno = 0x00040180 + OLEOBJ_S_LAST syscall.Errno = 0x0004018F + OLEOBJ_E_NOVERBS Handle = 0x80040180 + OLEOBJ_E_INVALIDVERB Handle = 0x80040181 + CLIENTSITE_E_FIRST syscall.Errno = 0x80040190 + CLIENTSITE_E_LAST syscall.Errno = 0x8004019F + CLIENTSITE_S_FIRST syscall.Errno = 0x00040190 + CLIENTSITE_S_LAST syscall.Errno = 0x0004019F + INPLACE_E_NOTUNDOABLE Handle = 0x800401A0 + INPLACE_E_NOTOOLSPACE Handle = 0x800401A1 + INPLACE_E_FIRST syscall.Errno = 0x800401A0 + INPLACE_E_LAST syscall.Errno = 0x800401AF + INPLACE_S_FIRST syscall.Errno = 0x000401A0 + INPLACE_S_LAST syscall.Errno = 0x000401AF + ENUM_E_FIRST syscall.Errno = 0x800401B0 + ENUM_E_LAST syscall.Errno = 0x800401BF + ENUM_S_FIRST syscall.Errno = 0x000401B0 + ENUM_S_LAST syscall.Errno = 0x000401BF + CONVERT10_E_FIRST syscall.Errno = 0x800401C0 + CONVERT10_E_LAST syscall.Errno = 0x800401CF + CONVERT10_S_FIRST syscall.Errno = 0x000401C0 + CONVERT10_S_LAST syscall.Errno = 0x000401CF + CONVERT10_E_OLESTREAM_GET Handle = 0x800401C0 + CONVERT10_E_OLESTREAM_PUT Handle = 0x800401C1 + CONVERT10_E_OLESTREAM_FMT Handle = 0x800401C2 + CONVERT10_E_OLESTREAM_BITMAP_TO_DIB Handle = 0x800401C3 + CONVERT10_E_STG_FMT Handle = 0x800401C4 + CONVERT10_E_STG_NO_STD_STREAM Handle = 0x800401C5 + CONVERT10_E_STG_DIB_TO_BITMAP Handle = 0x800401C6 + CLIPBRD_E_FIRST syscall.Errno = 0x800401D0 + CLIPBRD_E_LAST syscall.Errno = 0x800401DF + CLIPBRD_S_FIRST syscall.Errno = 0x000401D0 + CLIPBRD_S_LAST syscall.Errno = 0x000401DF + CLIPBRD_E_CANT_OPEN Handle = 0x800401D0 + CLIPBRD_E_CANT_EMPTY Handle = 0x800401D1 + CLIPBRD_E_CANT_SET Handle = 0x800401D2 + CLIPBRD_E_BAD_DATA Handle = 0x800401D3 + CLIPBRD_E_CANT_CLOSE Handle = 0x800401D4 + MK_E_FIRST syscall.Errno = 0x800401E0 + MK_E_LAST syscall.Errno = 0x800401EF + MK_S_FIRST syscall.Errno = 0x000401E0 + MK_S_LAST syscall.Errno = 0x000401EF + MK_E_CONNECTMANUALLY Handle = 0x800401E0 + MK_E_EXCEEDEDDEADLINE Handle = 0x800401E1 + MK_E_NEEDGENERIC Handle = 0x800401E2 + MK_E_UNAVAILABLE Handle = 0x800401E3 + MK_E_SYNTAX Handle = 0x800401E4 + MK_E_NOOBJECT Handle = 0x800401E5 + MK_E_INVALIDEXTENSION Handle = 0x800401E6 + MK_E_INTERMEDIATEINTERFACENOTSUPPORTED Handle = 0x800401E7 + MK_E_NOTBINDABLE Handle = 0x800401E8 + MK_E_NOTBOUND Handle = 0x800401E9 + MK_E_CANTOPENFILE Handle = 0x800401EA + MK_E_MUSTBOTHERUSER Handle = 0x800401EB + MK_E_NOINVERSE Handle = 0x800401EC + MK_E_NOSTORAGE Handle = 0x800401ED + MK_E_NOPREFIX Handle = 0x800401EE + MK_E_ENUMERATION_FAILED Handle = 0x800401EF + CO_E_FIRST syscall.Errno = 0x800401F0 + CO_E_LAST syscall.Errno = 0x800401FF + CO_S_FIRST syscall.Errno = 0x000401F0 + CO_S_LAST syscall.Errno = 0x000401FF + CO_E_NOTINITIALIZED Handle = 0x800401F0 + CO_E_ALREADYINITIALIZED Handle = 0x800401F1 + CO_E_CANTDETERMINECLASS Handle = 0x800401F2 + CO_E_CLASSSTRING Handle = 0x800401F3 + CO_E_IIDSTRING Handle = 0x800401F4 + CO_E_APPNOTFOUND Handle = 0x800401F5 + CO_E_APPSINGLEUSE Handle = 0x800401F6 + CO_E_ERRORINAPP Handle = 0x800401F7 + CO_E_DLLNOTFOUND Handle = 0x800401F8 + CO_E_ERRORINDLL Handle = 0x800401F9 + CO_E_WRONGOSFORAPP Handle = 0x800401FA + CO_E_OBJNOTREG Handle = 0x800401FB + CO_E_OBJISREG Handle = 0x800401FC + CO_E_OBJNOTCONNECTED Handle = 0x800401FD + CO_E_APPDIDNTREG Handle = 0x800401FE + CO_E_RELEASED Handle = 0x800401FF + EVENT_E_FIRST syscall.Errno = 0x80040200 + EVENT_E_LAST syscall.Errno = 0x8004021F + EVENT_S_FIRST syscall.Errno = 0x00040200 + EVENT_S_LAST syscall.Errno = 0x0004021F + EVENT_S_SOME_SUBSCRIBERS_FAILED Handle = 0x00040200 + EVENT_E_ALL_SUBSCRIBERS_FAILED Handle = 0x80040201 + EVENT_S_NOSUBSCRIBERS Handle = 0x00040202 + EVENT_E_QUERYSYNTAX Handle = 0x80040203 + EVENT_E_QUERYFIELD Handle = 0x80040204 + EVENT_E_INTERNALEXCEPTION Handle = 0x80040205 + EVENT_E_INTERNALERROR Handle = 0x80040206 + EVENT_E_INVALID_PER_USER_SID Handle = 0x80040207 + EVENT_E_USER_EXCEPTION Handle = 0x80040208 + EVENT_E_TOO_MANY_METHODS Handle = 0x80040209 + EVENT_E_MISSING_EVENTCLASS Handle = 0x8004020A + EVENT_E_NOT_ALL_REMOVED Handle = 0x8004020B + EVENT_E_COMPLUS_NOT_INSTALLED Handle = 0x8004020C + EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT Handle = 0x8004020D + EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT Handle = 0x8004020E + EVENT_E_INVALID_EVENT_CLASS_PARTITION Handle = 0x8004020F + EVENT_E_PER_USER_SID_NOT_LOGGED_ON Handle = 0x80040210 + TPC_E_INVALID_PROPERTY Handle = 0x80040241 + TPC_E_NO_DEFAULT_TABLET Handle = 0x80040212 + TPC_E_UNKNOWN_PROPERTY Handle = 0x8004021B + TPC_E_INVALID_INPUT_RECT Handle = 0x80040219 + TPC_E_INVALID_STROKE Handle = 0x80040222 + TPC_E_INITIALIZE_FAIL Handle = 0x80040223 + TPC_E_NOT_RELEVANT Handle = 0x80040232 + TPC_E_INVALID_PACKET_DESCRIPTION Handle = 0x80040233 + TPC_E_RECOGNIZER_NOT_REGISTERED Handle = 0x80040235 + TPC_E_INVALID_RIGHTS Handle = 0x80040236 + TPC_E_OUT_OF_ORDER_CALL Handle = 0x80040237 + TPC_E_QUEUE_FULL Handle = 0x80040238 + TPC_E_INVALID_CONFIGURATION Handle = 0x80040239 + TPC_E_INVALID_DATA_FROM_RECOGNIZER Handle = 0x8004023A + TPC_S_TRUNCATED Handle = 0x00040252 + TPC_S_INTERRUPTED Handle = 0x00040253 + TPC_S_NO_DATA_TO_PROCESS Handle = 0x00040254 + XACT_E_FIRST syscall.Errno = 0x8004D000 + XACT_E_LAST syscall.Errno = 0x8004D02B + XACT_S_FIRST syscall.Errno = 0x0004D000 + XACT_S_LAST syscall.Errno = 0x0004D010 + XACT_E_ALREADYOTHERSINGLEPHASE Handle = 0x8004D000 + XACT_E_CANTRETAIN Handle = 0x8004D001 + XACT_E_COMMITFAILED Handle = 0x8004D002 + XACT_E_COMMITPREVENTED Handle = 0x8004D003 + XACT_E_HEURISTICABORT Handle = 0x8004D004 + XACT_E_HEURISTICCOMMIT Handle = 0x8004D005 + XACT_E_HEURISTICDAMAGE Handle = 0x8004D006 + XACT_E_HEURISTICDANGER Handle = 0x8004D007 + XACT_E_ISOLATIONLEVEL Handle = 0x8004D008 + XACT_E_NOASYNC Handle = 0x8004D009 + XACT_E_NOENLIST Handle = 0x8004D00A + XACT_E_NOISORETAIN Handle = 0x8004D00B + XACT_E_NORESOURCE Handle = 0x8004D00C + XACT_E_NOTCURRENT Handle = 0x8004D00D + XACT_E_NOTRANSACTION Handle = 0x8004D00E + XACT_E_NOTSUPPORTED Handle = 0x8004D00F + XACT_E_UNKNOWNRMGRID Handle = 0x8004D010 + XACT_E_WRONGSTATE Handle = 0x8004D011 + XACT_E_WRONGUOW Handle = 0x8004D012 + XACT_E_XTIONEXISTS Handle = 0x8004D013 + XACT_E_NOIMPORTOBJECT Handle = 0x8004D014 + XACT_E_INVALIDCOOKIE Handle = 0x8004D015 + XACT_E_INDOUBT Handle = 0x8004D016 + XACT_E_NOTIMEOUT Handle = 0x8004D017 + XACT_E_ALREADYINPROGRESS Handle = 0x8004D018 + XACT_E_ABORTED Handle = 0x8004D019 + XACT_E_LOGFULL Handle = 0x8004D01A + XACT_E_TMNOTAVAILABLE Handle = 0x8004D01B + XACT_E_CONNECTION_DOWN Handle = 0x8004D01C + XACT_E_CONNECTION_DENIED Handle = 0x8004D01D + XACT_E_REENLISTTIMEOUT Handle = 0x8004D01E + XACT_E_TIP_CONNECT_FAILED Handle = 0x8004D01F + XACT_E_TIP_PROTOCOL_ERROR Handle = 0x8004D020 + XACT_E_TIP_PULL_FAILED Handle = 0x8004D021 + XACT_E_DEST_TMNOTAVAILABLE Handle = 0x8004D022 + XACT_E_TIP_DISABLED Handle = 0x8004D023 + XACT_E_NETWORK_TX_DISABLED Handle = 0x8004D024 + XACT_E_PARTNER_NETWORK_TX_DISABLED Handle = 0x8004D025 + XACT_E_XA_TX_DISABLED Handle = 0x8004D026 + XACT_E_UNABLE_TO_READ_DTC_CONFIG Handle = 0x8004D027 + XACT_E_UNABLE_TO_LOAD_DTC_PROXY Handle = 0x8004D028 + XACT_E_ABORTING Handle = 0x8004D029 + XACT_E_PUSH_COMM_FAILURE Handle = 0x8004D02A + XACT_E_PULL_COMM_FAILURE Handle = 0x8004D02B + XACT_E_LU_TX_DISABLED Handle = 0x8004D02C + XACT_E_CLERKNOTFOUND Handle = 0x8004D080 + XACT_E_CLERKEXISTS Handle = 0x8004D081 + XACT_E_RECOVERYINPROGRESS Handle = 0x8004D082 + XACT_E_TRANSACTIONCLOSED Handle = 0x8004D083 + XACT_E_INVALIDLSN Handle = 0x8004D084 + XACT_E_REPLAYREQUEST Handle = 0x8004D085 + XACT_S_ASYNC Handle = 0x0004D000 + XACT_S_DEFECT Handle = 0x0004D001 + XACT_S_READONLY Handle = 0x0004D002 + XACT_S_SOMENORETAIN Handle = 0x0004D003 + XACT_S_OKINFORM Handle = 0x0004D004 + XACT_S_MADECHANGESCONTENT Handle = 0x0004D005 + XACT_S_MADECHANGESINFORM Handle = 0x0004D006 + XACT_S_ALLNORETAIN Handle = 0x0004D007 + XACT_S_ABORTING Handle = 0x0004D008 + XACT_S_SINGLEPHASE Handle = 0x0004D009 + XACT_S_LOCALLY_OK Handle = 0x0004D00A + XACT_S_LASTRESOURCEMANAGER Handle = 0x0004D010 + CONTEXT_E_FIRST syscall.Errno = 0x8004E000 + CONTEXT_E_LAST syscall.Errno = 0x8004E02F + CONTEXT_S_FIRST syscall.Errno = 0x0004E000 + CONTEXT_S_LAST syscall.Errno = 0x0004E02F + CONTEXT_E_ABORTED Handle = 0x8004E002 + CONTEXT_E_ABORTING Handle = 0x8004E003 + CONTEXT_E_NOCONTEXT Handle = 0x8004E004 + CONTEXT_E_WOULD_DEADLOCK Handle = 0x8004E005 + CONTEXT_E_SYNCH_TIMEOUT Handle = 0x8004E006 + CONTEXT_E_OLDREF Handle = 0x8004E007 + CONTEXT_E_ROLENOTFOUND Handle = 0x8004E00C + CONTEXT_E_TMNOTAVAILABLE Handle = 0x8004E00F + CO_E_ACTIVATIONFAILED Handle = 0x8004E021 + CO_E_ACTIVATIONFAILED_EVENTLOGGED Handle = 0x8004E022 + CO_E_ACTIVATIONFAILED_CATALOGERROR Handle = 0x8004E023 + CO_E_ACTIVATIONFAILED_TIMEOUT Handle = 0x8004E024 + CO_E_INITIALIZATIONFAILED Handle = 0x8004E025 + CONTEXT_E_NOJIT Handle = 0x8004E026 + CONTEXT_E_NOTRANSACTION Handle = 0x8004E027 + CO_E_THREADINGMODEL_CHANGED Handle = 0x8004E028 + CO_E_NOIISINTRINSICS Handle = 0x8004E029 + CO_E_NOCOOKIES Handle = 0x8004E02A + CO_E_DBERROR Handle = 0x8004E02B + CO_E_NOTPOOLED Handle = 0x8004E02C + CO_E_NOTCONSTRUCTED Handle = 0x8004E02D + CO_E_NOSYNCHRONIZATION Handle = 0x8004E02E + CO_E_ISOLEVELMISMATCH Handle = 0x8004E02F + CO_E_CALL_OUT_OF_TX_SCOPE_NOT_ALLOWED Handle = 0x8004E030 + CO_E_EXIT_TRANSACTION_SCOPE_NOT_CALLED Handle = 0x8004E031 + OLE_S_USEREG Handle = 0x00040000 + OLE_S_STATIC Handle = 0x00040001 + OLE_S_MAC_CLIPFORMAT Handle = 0x00040002 + DRAGDROP_S_DROP Handle = 0x00040100 + DRAGDROP_S_CANCEL Handle = 0x00040101 + DRAGDROP_S_USEDEFAULTCURSORS Handle = 0x00040102 + DATA_S_SAMEFORMATETC Handle = 0x00040130 + VIEW_S_ALREADY_FROZEN Handle = 0x00040140 + CACHE_S_FORMATETC_NOTSUPPORTED Handle = 0x00040170 + CACHE_S_SAMECACHE Handle = 0x00040171 + CACHE_S_SOMECACHES_NOTUPDATED Handle = 0x00040172 + OLEOBJ_S_INVALIDVERB Handle = 0x00040180 + OLEOBJ_S_CANNOT_DOVERB_NOW Handle = 0x00040181 + OLEOBJ_S_INVALIDHWND Handle = 0x00040182 + INPLACE_S_TRUNCATED Handle = 0x000401A0 + CONVERT10_S_NO_PRESENTATION Handle = 0x000401C0 + MK_S_REDUCED_TO_SELF Handle = 0x000401E2 + MK_S_ME Handle = 0x000401E4 + MK_S_HIM Handle = 0x000401E5 + MK_S_US Handle = 0x000401E6 + MK_S_MONIKERALREADYREGISTERED Handle = 0x000401E7 + SCHED_S_TASK_READY Handle = 0x00041300 + SCHED_S_TASK_RUNNING Handle = 0x00041301 + SCHED_S_TASK_DISABLED Handle = 0x00041302 + SCHED_S_TASK_HAS_NOT_RUN Handle = 0x00041303 + SCHED_S_TASK_NO_MORE_RUNS Handle = 0x00041304 + SCHED_S_TASK_NOT_SCHEDULED Handle = 0x00041305 + SCHED_S_TASK_TERMINATED Handle = 0x00041306 + SCHED_S_TASK_NO_VALID_TRIGGERS Handle = 0x00041307 + SCHED_S_EVENT_TRIGGER Handle = 0x00041308 + SCHED_E_TRIGGER_NOT_FOUND Handle = 0x80041309 + SCHED_E_TASK_NOT_READY Handle = 0x8004130A + SCHED_E_TASK_NOT_RUNNING Handle = 0x8004130B + SCHED_E_SERVICE_NOT_INSTALLED Handle = 0x8004130C + SCHED_E_CANNOT_OPEN_TASK Handle = 0x8004130D + SCHED_E_INVALID_TASK Handle = 0x8004130E + SCHED_E_ACCOUNT_INFORMATION_NOT_SET Handle = 0x8004130F + SCHED_E_ACCOUNT_NAME_NOT_FOUND Handle = 0x80041310 + SCHED_E_ACCOUNT_DBASE_CORRUPT Handle = 0x80041311 + SCHED_E_NO_SECURITY_SERVICES Handle = 0x80041312 + SCHED_E_UNKNOWN_OBJECT_VERSION Handle = 0x80041313 + SCHED_E_UNSUPPORTED_ACCOUNT_OPTION Handle = 0x80041314 + SCHED_E_SERVICE_NOT_RUNNING Handle = 0x80041315 + SCHED_E_UNEXPECTEDNODE Handle = 0x80041316 + SCHED_E_NAMESPACE Handle = 0x80041317 + SCHED_E_INVALIDVALUE Handle = 0x80041318 + SCHED_E_MISSINGNODE Handle = 0x80041319 + SCHED_E_MALFORMEDXML Handle = 0x8004131A + SCHED_S_SOME_TRIGGERS_FAILED Handle = 0x0004131B + SCHED_S_BATCH_LOGON_PROBLEM Handle = 0x0004131C + SCHED_E_TOO_MANY_NODES Handle = 0x8004131D + SCHED_E_PAST_END_BOUNDARY Handle = 0x8004131E + SCHED_E_ALREADY_RUNNING Handle = 0x8004131F + SCHED_E_USER_NOT_LOGGED_ON Handle = 0x80041320 + SCHED_E_INVALID_TASK_HASH Handle = 0x80041321 + SCHED_E_SERVICE_NOT_AVAILABLE Handle = 0x80041322 + SCHED_E_SERVICE_TOO_BUSY Handle = 0x80041323 + SCHED_E_TASK_ATTEMPTED Handle = 0x80041324 + SCHED_S_TASK_QUEUED Handle = 0x00041325 + SCHED_E_TASK_DISABLED Handle = 0x80041326 + SCHED_E_TASK_NOT_V1_COMPAT Handle = 0x80041327 + SCHED_E_START_ON_DEMAND Handle = 0x80041328 + SCHED_E_TASK_NOT_UBPM_COMPAT Handle = 0x80041329 + SCHED_E_DEPRECATED_FEATURE_USED Handle = 0x80041330 + CO_E_CLASS_CREATE_FAILED Handle = 0x80080001 + CO_E_SCM_ERROR Handle = 0x80080002 + CO_E_SCM_RPC_FAILURE Handle = 0x80080003 + CO_E_BAD_PATH Handle = 0x80080004 + CO_E_SERVER_EXEC_FAILURE Handle = 0x80080005 + CO_E_OBJSRV_RPC_FAILURE Handle = 0x80080006 + MK_E_NO_NORMALIZED Handle = 0x80080007 + CO_E_SERVER_STOPPING Handle = 0x80080008 + MEM_E_INVALID_ROOT Handle = 0x80080009 + MEM_E_INVALID_LINK Handle = 0x80080010 + MEM_E_INVALID_SIZE Handle = 0x80080011 + CO_S_NOTALLINTERFACES Handle = 0x00080012 + CO_S_MACHINENAMENOTFOUND Handle = 0x00080013 + CO_E_MISSING_DISPLAYNAME Handle = 0x80080015 + CO_E_RUNAS_VALUE_MUST_BE_AAA Handle = 0x80080016 + CO_E_ELEVATION_DISABLED Handle = 0x80080017 + APPX_E_PACKAGING_INTERNAL Handle = 0x80080200 + APPX_E_INTERLEAVING_NOT_ALLOWED Handle = 0x80080201 + APPX_E_RELATIONSHIPS_NOT_ALLOWED Handle = 0x80080202 + APPX_E_MISSING_REQUIRED_FILE Handle = 0x80080203 + APPX_E_INVALID_MANIFEST Handle = 0x80080204 + APPX_E_INVALID_BLOCKMAP Handle = 0x80080205 + APPX_E_CORRUPT_CONTENT Handle = 0x80080206 + APPX_E_BLOCK_HASH_INVALID Handle = 0x80080207 + APPX_E_REQUESTED_RANGE_TOO_LARGE Handle = 0x80080208 + APPX_E_INVALID_SIP_CLIENT_DATA Handle = 0x80080209 + APPX_E_INVALID_KEY_INFO Handle = 0x8008020A + APPX_E_INVALID_CONTENTGROUPMAP Handle = 0x8008020B + APPX_E_INVALID_APPINSTALLER Handle = 0x8008020C + APPX_E_DELTA_BASELINE_VERSION_MISMATCH Handle = 0x8008020D + APPX_E_DELTA_PACKAGE_MISSING_FILE Handle = 0x8008020E + APPX_E_INVALID_DELTA_PACKAGE Handle = 0x8008020F + APPX_E_DELTA_APPENDED_PACKAGE_NOT_ALLOWED Handle = 0x80080210 + APPX_E_INVALID_PACKAGING_LAYOUT Handle = 0x80080211 + APPX_E_INVALID_PACKAGESIGNCONFIG Handle = 0x80080212 + APPX_E_RESOURCESPRI_NOT_ALLOWED Handle = 0x80080213 + APPX_E_FILE_COMPRESSION_MISMATCH Handle = 0x80080214 + APPX_E_INVALID_PAYLOAD_PACKAGE_EXTENSION Handle = 0x80080215 + APPX_E_INVALID_ENCRYPTION_EXCLUSION_FILE_LIST Handle = 0x80080216 + BT_E_SPURIOUS_ACTIVATION Handle = 0x80080300 + DISP_E_UNKNOWNINTERFACE Handle = 0x80020001 + DISP_E_MEMBERNOTFOUND Handle = 0x80020003 + DISP_E_PARAMNOTFOUND Handle = 0x80020004 + DISP_E_TYPEMISMATCH Handle = 0x80020005 + DISP_E_UNKNOWNNAME Handle = 0x80020006 + DISP_E_NONAMEDARGS Handle = 0x80020007 + DISP_E_BADVARTYPE Handle = 0x80020008 + DISP_E_EXCEPTION Handle = 0x80020009 + DISP_E_OVERFLOW Handle = 0x8002000A + DISP_E_BADINDEX Handle = 0x8002000B + DISP_E_UNKNOWNLCID Handle = 0x8002000C + DISP_E_ARRAYISLOCKED Handle = 0x8002000D + DISP_E_BADPARAMCOUNT Handle = 0x8002000E + DISP_E_PARAMNOTOPTIONAL Handle = 0x8002000F + DISP_E_BADCALLEE Handle = 0x80020010 + DISP_E_NOTACOLLECTION Handle = 0x80020011 + DISP_E_DIVBYZERO Handle = 0x80020012 + DISP_E_BUFFERTOOSMALL Handle = 0x80020013 + TYPE_E_BUFFERTOOSMALL Handle = 0x80028016 + TYPE_E_FIELDNOTFOUND Handle = 0x80028017 + TYPE_E_INVDATAREAD Handle = 0x80028018 + TYPE_E_UNSUPFORMAT Handle = 0x80028019 + TYPE_E_REGISTRYACCESS Handle = 0x8002801C + TYPE_E_LIBNOTREGISTERED Handle = 0x8002801D + TYPE_E_UNDEFINEDTYPE Handle = 0x80028027 + TYPE_E_QUALIFIEDNAMEDISALLOWED Handle = 0x80028028 + TYPE_E_INVALIDSTATE Handle = 0x80028029 + TYPE_E_WRONGTYPEKIND Handle = 0x8002802A + TYPE_E_ELEMENTNOTFOUND Handle = 0x8002802B + TYPE_E_AMBIGUOUSNAME Handle = 0x8002802C + TYPE_E_NAMECONFLICT Handle = 0x8002802D + TYPE_E_UNKNOWNLCID Handle = 0x8002802E + TYPE_E_DLLFUNCTIONNOTFOUND Handle = 0x8002802F + TYPE_E_BADMODULEKIND Handle = 0x800288BD + TYPE_E_SIZETOOBIG Handle = 0x800288C5 + TYPE_E_DUPLICATEID Handle = 0x800288C6 + TYPE_E_INVALIDID Handle = 0x800288CF + TYPE_E_TYPEMISMATCH Handle = 0x80028CA0 + TYPE_E_OUTOFBOUNDS Handle = 0x80028CA1 + TYPE_E_IOERROR Handle = 0x80028CA2 + TYPE_E_CANTCREATETMPFILE Handle = 0x80028CA3 + TYPE_E_CANTLOADLIBRARY Handle = 0x80029C4A + TYPE_E_INCONSISTENTPROPFUNCS Handle = 0x80029C83 + TYPE_E_CIRCULARTYPE Handle = 0x80029C84 + STG_E_INVALIDFUNCTION Handle = 0x80030001 + STG_E_FILENOTFOUND Handle = 0x80030002 + STG_E_PATHNOTFOUND Handle = 0x80030003 + STG_E_TOOMANYOPENFILES Handle = 0x80030004 + STG_E_ACCESSDENIED Handle = 0x80030005 + STG_E_INVALIDHANDLE Handle = 0x80030006 + STG_E_INSUFFICIENTMEMORY Handle = 0x80030008 + STG_E_INVALIDPOINTER Handle = 0x80030009 + STG_E_NOMOREFILES Handle = 0x80030012 + STG_E_DISKISWRITEPROTECTED Handle = 0x80030013 + STG_E_SEEKERROR Handle = 0x80030019 + STG_E_WRITEFAULT Handle = 0x8003001D + STG_E_READFAULT Handle = 0x8003001E + STG_E_SHAREVIOLATION Handle = 0x80030020 + STG_E_LOCKVIOLATION Handle = 0x80030021 + STG_E_FILEALREADYEXISTS Handle = 0x80030050 + STG_E_INVALIDPARAMETER Handle = 0x80030057 + STG_E_MEDIUMFULL Handle = 0x80030070 + STG_E_PROPSETMISMATCHED Handle = 0x800300F0 + STG_E_ABNORMALAPIEXIT Handle = 0x800300FA + STG_E_INVALIDHEADER Handle = 0x800300FB + STG_E_INVALIDNAME Handle = 0x800300FC + STG_E_UNKNOWN Handle = 0x800300FD + STG_E_UNIMPLEMENTEDFUNCTION Handle = 0x800300FE + STG_E_INVALIDFLAG Handle = 0x800300FF + STG_E_INUSE Handle = 0x80030100 + STG_E_NOTCURRENT Handle = 0x80030101 + STG_E_REVERTED Handle = 0x80030102 + STG_E_CANTSAVE Handle = 0x80030103 + STG_E_OLDFORMAT Handle = 0x80030104 + STG_E_OLDDLL Handle = 0x80030105 + STG_E_SHAREREQUIRED Handle = 0x80030106 + STG_E_NOTFILEBASEDSTORAGE Handle = 0x80030107 + STG_E_EXTANTMARSHALLINGS Handle = 0x80030108 + STG_E_DOCFILECORRUPT Handle = 0x80030109 + STG_E_BADBASEADDRESS Handle = 0x80030110 + STG_E_DOCFILETOOLARGE Handle = 0x80030111 + STG_E_NOTSIMPLEFORMAT Handle = 0x80030112 + STG_E_INCOMPLETE Handle = 0x80030201 + STG_E_TERMINATED Handle = 0x80030202 + STG_S_CONVERTED Handle = 0x00030200 + STG_S_BLOCK Handle = 0x00030201 + STG_S_RETRYNOW Handle = 0x00030202 + STG_S_MONITORING Handle = 0x00030203 + STG_S_MULTIPLEOPENS Handle = 0x00030204 + STG_S_CONSOLIDATIONFAILED Handle = 0x00030205 + STG_S_CANNOTCONSOLIDATE Handle = 0x00030206 + STG_S_POWER_CYCLE_REQUIRED Handle = 0x00030207 + STG_E_FIRMWARE_SLOT_INVALID Handle = 0x80030208 + STG_E_FIRMWARE_IMAGE_INVALID Handle = 0x80030209 + STG_E_DEVICE_UNRESPONSIVE Handle = 0x8003020A + STG_E_STATUS_COPY_PROTECTION_FAILURE Handle = 0x80030305 + STG_E_CSS_AUTHENTICATION_FAILURE Handle = 0x80030306 + STG_E_CSS_KEY_NOT_PRESENT Handle = 0x80030307 + STG_E_CSS_KEY_NOT_ESTABLISHED Handle = 0x80030308 + STG_E_CSS_SCRAMBLED_SECTOR Handle = 0x80030309 + STG_E_CSS_REGION_MISMATCH Handle = 0x8003030A + STG_E_RESETS_EXHAUSTED Handle = 0x8003030B + RPC_E_CALL_REJECTED Handle = 0x80010001 + RPC_E_CALL_CANCELED Handle = 0x80010002 + RPC_E_CANTPOST_INSENDCALL Handle = 0x80010003 + RPC_E_CANTCALLOUT_INASYNCCALL Handle = 0x80010004 + RPC_E_CANTCALLOUT_INEXTERNALCALL Handle = 0x80010005 + RPC_E_CONNECTION_TERMINATED Handle = 0x80010006 + RPC_E_SERVER_DIED Handle = 0x80010007 + RPC_E_CLIENT_DIED Handle = 0x80010008 + RPC_E_INVALID_DATAPACKET Handle = 0x80010009 + RPC_E_CANTTRANSMIT_CALL Handle = 0x8001000A + RPC_E_CLIENT_CANTMARSHAL_DATA Handle = 0x8001000B + RPC_E_CLIENT_CANTUNMARSHAL_DATA Handle = 0x8001000C + RPC_E_SERVER_CANTMARSHAL_DATA Handle = 0x8001000D + RPC_E_SERVER_CANTUNMARSHAL_DATA Handle = 0x8001000E + RPC_E_INVALID_DATA Handle = 0x8001000F + RPC_E_INVALID_PARAMETER Handle = 0x80010010 + RPC_E_CANTCALLOUT_AGAIN Handle = 0x80010011 + RPC_E_SERVER_DIED_DNE Handle = 0x80010012 + RPC_E_SYS_CALL_FAILED Handle = 0x80010100 + RPC_E_OUT_OF_RESOURCES Handle = 0x80010101 + RPC_E_ATTEMPTED_MULTITHREAD Handle = 0x80010102 + RPC_E_NOT_REGISTERED Handle = 0x80010103 + RPC_E_FAULT Handle = 0x80010104 + RPC_E_SERVERFAULT Handle = 0x80010105 + RPC_E_CHANGED_MODE Handle = 0x80010106 + RPC_E_INVALIDMETHOD Handle = 0x80010107 + RPC_E_DISCONNECTED Handle = 0x80010108 + RPC_E_RETRY Handle = 0x80010109 + RPC_E_SERVERCALL_RETRYLATER Handle = 0x8001010A + RPC_E_SERVERCALL_REJECTED Handle = 0x8001010B + RPC_E_INVALID_CALLDATA Handle = 0x8001010C + RPC_E_CANTCALLOUT_ININPUTSYNCCALL Handle = 0x8001010D + RPC_E_WRONG_THREAD Handle = 0x8001010E + RPC_E_THREAD_NOT_INIT Handle = 0x8001010F + RPC_E_VERSION_MISMATCH Handle = 0x80010110 + RPC_E_INVALID_HEADER Handle = 0x80010111 + RPC_E_INVALID_EXTENSION Handle = 0x80010112 + RPC_E_INVALID_IPID Handle = 0x80010113 + RPC_E_INVALID_OBJECT Handle = 0x80010114 + RPC_S_CALLPENDING Handle = 0x80010115 + RPC_S_WAITONTIMER Handle = 0x80010116 + RPC_E_CALL_COMPLETE Handle = 0x80010117 + RPC_E_UNSECURE_CALL Handle = 0x80010118 + RPC_E_TOO_LATE Handle = 0x80010119 + RPC_E_NO_GOOD_SECURITY_PACKAGES Handle = 0x8001011A + RPC_E_ACCESS_DENIED Handle = 0x8001011B + RPC_E_REMOTE_DISABLED Handle = 0x8001011C + RPC_E_INVALID_OBJREF Handle = 0x8001011D + RPC_E_NO_CONTEXT Handle = 0x8001011E + RPC_E_TIMEOUT Handle = 0x8001011F + RPC_E_NO_SYNC Handle = 0x80010120 + RPC_E_FULLSIC_REQUIRED Handle = 0x80010121 + RPC_E_INVALID_STD_NAME Handle = 0x80010122 + CO_E_FAILEDTOIMPERSONATE Handle = 0x80010123 + CO_E_FAILEDTOGETSECCTX Handle = 0x80010124 + CO_E_FAILEDTOOPENTHREADTOKEN Handle = 0x80010125 + CO_E_FAILEDTOGETTOKENINFO Handle = 0x80010126 + CO_E_TRUSTEEDOESNTMATCHCLIENT Handle = 0x80010127 + CO_E_FAILEDTOQUERYCLIENTBLANKET Handle = 0x80010128 + CO_E_FAILEDTOSETDACL Handle = 0x80010129 + CO_E_ACCESSCHECKFAILED Handle = 0x8001012A + CO_E_NETACCESSAPIFAILED Handle = 0x8001012B + CO_E_WRONGTRUSTEENAMESYNTAX Handle = 0x8001012C + CO_E_INVALIDSID Handle = 0x8001012D + CO_E_CONVERSIONFAILED Handle = 0x8001012E + CO_E_NOMATCHINGSIDFOUND Handle = 0x8001012F + CO_E_LOOKUPACCSIDFAILED Handle = 0x80010130 + CO_E_NOMATCHINGNAMEFOUND Handle = 0x80010131 + CO_E_LOOKUPACCNAMEFAILED Handle = 0x80010132 + CO_E_SETSERLHNDLFAILED Handle = 0x80010133 + CO_E_FAILEDTOGETWINDIR Handle = 0x80010134 + CO_E_PATHTOOLONG Handle = 0x80010135 + CO_E_FAILEDTOGENUUID Handle = 0x80010136 + CO_E_FAILEDTOCREATEFILE Handle = 0x80010137 + CO_E_FAILEDTOCLOSEHANDLE Handle = 0x80010138 + CO_E_EXCEEDSYSACLLIMIT Handle = 0x80010139 + CO_E_ACESINWRONGORDER Handle = 0x8001013A + CO_E_INCOMPATIBLESTREAMVERSION Handle = 0x8001013B + CO_E_FAILEDTOOPENPROCESSTOKEN Handle = 0x8001013C + CO_E_DECODEFAILED Handle = 0x8001013D + CO_E_ACNOTINITIALIZED Handle = 0x8001013F + CO_E_CANCEL_DISABLED Handle = 0x80010140 + RPC_E_UNEXPECTED Handle = 0x8001FFFF + ERROR_AUDITING_DISABLED Handle = 0xC0090001 + ERROR_ALL_SIDS_FILTERED Handle = 0xC0090002 + ERROR_BIZRULES_NOT_ENABLED Handle = 0xC0090003 + NTE_BAD_UID Handle = 0x80090001 + NTE_BAD_HASH Handle = 0x80090002 + NTE_BAD_KEY Handle = 0x80090003 + NTE_BAD_LEN Handle = 0x80090004 + NTE_BAD_DATA Handle = 0x80090005 + NTE_BAD_SIGNATURE Handle = 0x80090006 + NTE_BAD_VER Handle = 0x80090007 + NTE_BAD_ALGID Handle = 0x80090008 + NTE_BAD_FLAGS Handle = 0x80090009 + NTE_BAD_TYPE Handle = 0x8009000A + NTE_BAD_KEY_STATE Handle = 0x8009000B + NTE_BAD_HASH_STATE Handle = 0x8009000C + NTE_NO_KEY Handle = 0x8009000D + NTE_NO_MEMORY Handle = 0x8009000E + NTE_EXISTS Handle = 0x8009000F + NTE_PERM Handle = 0x80090010 + NTE_NOT_FOUND Handle = 0x80090011 + NTE_DOUBLE_ENCRYPT Handle = 0x80090012 + NTE_BAD_PROVIDER Handle = 0x80090013 + NTE_BAD_PROV_TYPE Handle = 0x80090014 + NTE_BAD_PUBLIC_KEY Handle = 0x80090015 + NTE_BAD_KEYSET Handle = 0x80090016 + NTE_PROV_TYPE_NOT_DEF Handle = 0x80090017 + NTE_PROV_TYPE_ENTRY_BAD Handle = 0x80090018 + NTE_KEYSET_NOT_DEF Handle = 0x80090019 + NTE_KEYSET_ENTRY_BAD Handle = 0x8009001A + NTE_PROV_TYPE_NO_MATCH Handle = 0x8009001B + NTE_SIGNATURE_FILE_BAD Handle = 0x8009001C + NTE_PROVIDER_DLL_FAIL Handle = 0x8009001D + NTE_PROV_DLL_NOT_FOUND Handle = 0x8009001E + NTE_BAD_KEYSET_PARAM Handle = 0x8009001F + NTE_FAIL Handle = 0x80090020 + NTE_SYS_ERR Handle = 0x80090021 + NTE_SILENT_CONTEXT Handle = 0x80090022 + NTE_TOKEN_KEYSET_STORAGE_FULL Handle = 0x80090023 + NTE_TEMPORARY_PROFILE Handle = 0x80090024 + NTE_FIXEDPARAMETER Handle = 0x80090025 + NTE_INVALID_HANDLE Handle = 0x80090026 + NTE_INVALID_PARAMETER Handle = 0x80090027 + NTE_BUFFER_TOO_SMALL Handle = 0x80090028 + NTE_NOT_SUPPORTED Handle = 0x80090029 + NTE_NO_MORE_ITEMS Handle = 0x8009002A + NTE_BUFFERS_OVERLAP Handle = 0x8009002B + NTE_DECRYPTION_FAILURE Handle = 0x8009002C + NTE_INTERNAL_ERROR Handle = 0x8009002D + NTE_UI_REQUIRED Handle = 0x8009002E + NTE_HMAC_NOT_SUPPORTED Handle = 0x8009002F + NTE_DEVICE_NOT_READY Handle = 0x80090030 + NTE_AUTHENTICATION_IGNORED Handle = 0x80090031 + NTE_VALIDATION_FAILED Handle = 0x80090032 + NTE_INCORRECT_PASSWORD Handle = 0x80090033 + NTE_ENCRYPTION_FAILURE Handle = 0x80090034 + NTE_DEVICE_NOT_FOUND Handle = 0x80090035 + NTE_USER_CANCELLED Handle = 0x80090036 + NTE_PASSWORD_CHANGE_REQUIRED Handle = 0x80090037 + NTE_NOT_ACTIVE_CONSOLE Handle = 0x80090038 + SEC_E_INSUFFICIENT_MEMORY Handle = 0x80090300 + SEC_E_INVALID_HANDLE Handle = 0x80090301 + SEC_E_UNSUPPORTED_FUNCTION Handle = 0x80090302 + SEC_E_TARGET_UNKNOWN Handle = 0x80090303 + SEC_E_INTERNAL_ERROR Handle = 0x80090304 + SEC_E_SECPKG_NOT_FOUND Handle = 0x80090305 + SEC_E_NOT_OWNER Handle = 0x80090306 + SEC_E_CANNOT_INSTALL Handle = 0x80090307 + SEC_E_INVALID_TOKEN Handle = 0x80090308 + SEC_E_CANNOT_PACK Handle = 0x80090309 + SEC_E_QOP_NOT_SUPPORTED Handle = 0x8009030A + SEC_E_NO_IMPERSONATION Handle = 0x8009030B + SEC_E_LOGON_DENIED Handle = 0x8009030C + SEC_E_UNKNOWN_CREDENTIALS Handle = 0x8009030D + SEC_E_NO_CREDENTIALS Handle = 0x8009030E + SEC_E_MESSAGE_ALTERED Handle = 0x8009030F + SEC_E_OUT_OF_SEQUENCE Handle = 0x80090310 + SEC_E_NO_AUTHENTICATING_AUTHORITY Handle = 0x80090311 + SEC_I_CONTINUE_NEEDED Handle = 0x00090312 + SEC_I_COMPLETE_NEEDED Handle = 0x00090313 + SEC_I_COMPLETE_AND_CONTINUE Handle = 0x00090314 + SEC_I_LOCAL_LOGON Handle = 0x00090315 + SEC_I_GENERIC_EXTENSION_RECEIVED Handle = 0x00090316 + SEC_E_BAD_PKGID Handle = 0x80090316 + SEC_E_CONTEXT_EXPIRED Handle = 0x80090317 + SEC_I_CONTEXT_EXPIRED Handle = 0x00090317 + SEC_E_INCOMPLETE_MESSAGE Handle = 0x80090318 + SEC_E_INCOMPLETE_CREDENTIALS Handle = 0x80090320 + SEC_E_BUFFER_TOO_SMALL Handle = 0x80090321 + SEC_I_INCOMPLETE_CREDENTIALS Handle = 0x00090320 + SEC_I_RENEGOTIATE Handle = 0x00090321 + SEC_E_WRONG_PRINCIPAL Handle = 0x80090322 + SEC_I_NO_LSA_CONTEXT Handle = 0x00090323 + SEC_E_TIME_SKEW Handle = 0x80090324 + SEC_E_UNTRUSTED_ROOT Handle = 0x80090325 + SEC_E_ILLEGAL_MESSAGE Handle = 0x80090326 + SEC_E_CERT_UNKNOWN Handle = 0x80090327 + SEC_E_CERT_EXPIRED Handle = 0x80090328 + SEC_E_ENCRYPT_FAILURE Handle = 0x80090329 + SEC_E_DECRYPT_FAILURE Handle = 0x80090330 + SEC_E_ALGORITHM_MISMATCH Handle = 0x80090331 + SEC_E_SECURITY_QOS_FAILED Handle = 0x80090332 + SEC_E_UNFINISHED_CONTEXT_DELETED Handle = 0x80090333 + SEC_E_NO_TGT_REPLY Handle = 0x80090334 + SEC_E_NO_IP_ADDRESSES Handle = 0x80090335 + SEC_E_WRONG_CREDENTIAL_HANDLE Handle = 0x80090336 + SEC_E_CRYPTO_SYSTEM_INVALID Handle = 0x80090337 + SEC_E_MAX_REFERRALS_EXCEEDED Handle = 0x80090338 + SEC_E_MUST_BE_KDC Handle = 0x80090339 + SEC_E_STRONG_CRYPTO_NOT_SUPPORTED Handle = 0x8009033A + SEC_E_TOO_MANY_PRINCIPALS Handle = 0x8009033B + SEC_E_NO_PA_DATA Handle = 0x8009033C + SEC_E_PKINIT_NAME_MISMATCH Handle = 0x8009033D + SEC_E_SMARTCARD_LOGON_REQUIRED Handle = 0x8009033E + SEC_E_SHUTDOWN_IN_PROGRESS Handle = 0x8009033F + SEC_E_KDC_INVALID_REQUEST Handle = 0x80090340 + SEC_E_KDC_UNABLE_TO_REFER Handle = 0x80090341 + SEC_E_KDC_UNKNOWN_ETYPE Handle = 0x80090342 + SEC_E_UNSUPPORTED_PREAUTH Handle = 0x80090343 + SEC_E_DELEGATION_REQUIRED Handle = 0x80090345 + SEC_E_BAD_BINDINGS Handle = 0x80090346 + SEC_E_MULTIPLE_ACCOUNTS Handle = 0x80090347 + SEC_E_NO_KERB_KEY Handle = 0x80090348 + SEC_E_CERT_WRONG_USAGE Handle = 0x80090349 + SEC_E_DOWNGRADE_DETECTED Handle = 0x80090350 + SEC_E_SMARTCARD_CERT_REVOKED Handle = 0x80090351 + SEC_E_ISSUING_CA_UNTRUSTED Handle = 0x80090352 + SEC_E_REVOCATION_OFFLINE_C Handle = 0x80090353 + SEC_E_PKINIT_CLIENT_FAILURE Handle = 0x80090354 + SEC_E_SMARTCARD_CERT_EXPIRED Handle = 0x80090355 + SEC_E_NO_S4U_PROT_SUPPORT Handle = 0x80090356 + SEC_E_CROSSREALM_DELEGATION_FAILURE Handle = 0x80090357 + SEC_E_REVOCATION_OFFLINE_KDC Handle = 0x80090358 + SEC_E_ISSUING_CA_UNTRUSTED_KDC Handle = 0x80090359 + SEC_E_KDC_CERT_EXPIRED Handle = 0x8009035A + SEC_E_KDC_CERT_REVOKED Handle = 0x8009035B + SEC_I_SIGNATURE_NEEDED Handle = 0x0009035C + SEC_E_INVALID_PARAMETER Handle = 0x8009035D + SEC_E_DELEGATION_POLICY Handle = 0x8009035E + SEC_E_POLICY_NLTM_ONLY Handle = 0x8009035F + SEC_I_NO_RENEGOTIATION Handle = 0x00090360 + SEC_E_NO_CONTEXT Handle = 0x80090361 + SEC_E_PKU2U_CERT_FAILURE Handle = 0x80090362 + SEC_E_MUTUAL_AUTH_FAILED Handle = 0x80090363 + SEC_I_MESSAGE_FRAGMENT Handle = 0x00090364 + SEC_E_ONLY_HTTPS_ALLOWED Handle = 0x80090365 + SEC_I_CONTINUE_NEEDED_MESSAGE_OK Handle = 0x00090366 + SEC_E_APPLICATION_PROTOCOL_MISMATCH Handle = 0x80090367 + SEC_I_ASYNC_CALL_PENDING Handle = 0x00090368 + SEC_E_INVALID_UPN_NAME Handle = 0x80090369 + SEC_E_EXT_BUFFER_TOO_SMALL Handle = 0x8009036A + SEC_E_INSUFFICIENT_BUFFERS Handle = 0x8009036B + SEC_E_NO_SPM = SEC_E_INTERNAL_ERROR + SEC_E_NOT_SUPPORTED = SEC_E_UNSUPPORTED_FUNCTION + CRYPT_E_MSG_ERROR Handle = 0x80091001 + CRYPT_E_UNKNOWN_ALGO Handle = 0x80091002 + CRYPT_E_OID_FORMAT Handle = 0x80091003 + CRYPT_E_INVALID_MSG_TYPE Handle = 0x80091004 + CRYPT_E_UNEXPECTED_ENCODING Handle = 0x80091005 + CRYPT_E_AUTH_ATTR_MISSING Handle = 0x80091006 + CRYPT_E_HASH_VALUE Handle = 0x80091007 + CRYPT_E_INVALID_INDEX Handle = 0x80091008 + CRYPT_E_ALREADY_DECRYPTED Handle = 0x80091009 + CRYPT_E_NOT_DECRYPTED Handle = 0x8009100A + CRYPT_E_RECIPIENT_NOT_FOUND Handle = 0x8009100B + CRYPT_E_CONTROL_TYPE Handle = 0x8009100C + CRYPT_E_ISSUER_SERIALNUMBER Handle = 0x8009100D + CRYPT_E_SIGNER_NOT_FOUND Handle = 0x8009100E + CRYPT_E_ATTRIBUTES_MISSING Handle = 0x8009100F + CRYPT_E_STREAM_MSG_NOT_READY Handle = 0x80091010 + CRYPT_E_STREAM_INSUFFICIENT_DATA Handle = 0x80091011 + CRYPT_I_NEW_PROTECTION_REQUIRED Handle = 0x00091012 + CRYPT_E_BAD_LEN Handle = 0x80092001 + CRYPT_E_BAD_ENCODE Handle = 0x80092002 + CRYPT_E_FILE_ERROR Handle = 0x80092003 + CRYPT_E_NOT_FOUND Handle = 0x80092004 + CRYPT_E_EXISTS Handle = 0x80092005 + CRYPT_E_NO_PROVIDER Handle = 0x80092006 + CRYPT_E_SELF_SIGNED Handle = 0x80092007 + CRYPT_E_DELETED_PREV Handle = 0x80092008 + CRYPT_E_NO_MATCH Handle = 0x80092009 + CRYPT_E_UNEXPECTED_MSG_TYPE Handle = 0x8009200A + CRYPT_E_NO_KEY_PROPERTY Handle = 0x8009200B + CRYPT_E_NO_DECRYPT_CERT Handle = 0x8009200C + CRYPT_E_BAD_MSG Handle = 0x8009200D + CRYPT_E_NO_SIGNER Handle = 0x8009200E + CRYPT_E_PENDING_CLOSE Handle = 0x8009200F + CRYPT_E_REVOKED Handle = 0x80092010 + CRYPT_E_NO_REVOCATION_DLL Handle = 0x80092011 + CRYPT_E_NO_REVOCATION_CHECK Handle = 0x80092012 + CRYPT_E_REVOCATION_OFFLINE Handle = 0x80092013 + CRYPT_E_NOT_IN_REVOCATION_DATABASE Handle = 0x80092014 + CRYPT_E_INVALID_NUMERIC_STRING Handle = 0x80092020 + CRYPT_E_INVALID_PRINTABLE_STRING Handle = 0x80092021 + CRYPT_E_INVALID_IA5_STRING Handle = 0x80092022 + CRYPT_E_INVALID_X500_STRING Handle = 0x80092023 + CRYPT_E_NOT_CHAR_STRING Handle = 0x80092024 + CRYPT_E_FILERESIZED Handle = 0x80092025 + CRYPT_E_SECURITY_SETTINGS Handle = 0x80092026 + CRYPT_E_NO_VERIFY_USAGE_DLL Handle = 0x80092027 + CRYPT_E_NO_VERIFY_USAGE_CHECK Handle = 0x80092028 + CRYPT_E_VERIFY_USAGE_OFFLINE Handle = 0x80092029 + CRYPT_E_NOT_IN_CTL Handle = 0x8009202A + CRYPT_E_NO_TRUSTED_SIGNER Handle = 0x8009202B + CRYPT_E_MISSING_PUBKEY_PARA Handle = 0x8009202C + CRYPT_E_OBJECT_LOCATOR_OBJECT_NOT_FOUND Handle = 0x8009202D + CRYPT_E_OSS_ERROR Handle = 0x80093000 + OSS_MORE_BUF Handle = 0x80093001 + OSS_NEGATIVE_UINTEGER Handle = 0x80093002 + OSS_PDU_RANGE Handle = 0x80093003 + OSS_MORE_INPUT Handle = 0x80093004 + OSS_DATA_ERROR Handle = 0x80093005 + OSS_BAD_ARG Handle = 0x80093006 + OSS_BAD_VERSION Handle = 0x80093007 + OSS_OUT_MEMORY Handle = 0x80093008 + OSS_PDU_MISMATCH Handle = 0x80093009 + OSS_LIMITED Handle = 0x8009300A + OSS_BAD_PTR Handle = 0x8009300B + OSS_BAD_TIME Handle = 0x8009300C + OSS_INDEFINITE_NOT_SUPPORTED Handle = 0x8009300D + OSS_MEM_ERROR Handle = 0x8009300E + OSS_BAD_TABLE Handle = 0x8009300F + OSS_TOO_LONG Handle = 0x80093010 + OSS_CONSTRAINT_VIOLATED Handle = 0x80093011 + OSS_FATAL_ERROR Handle = 0x80093012 + OSS_ACCESS_SERIALIZATION_ERROR Handle = 0x80093013 + OSS_NULL_TBL Handle = 0x80093014 + OSS_NULL_FCN Handle = 0x80093015 + OSS_BAD_ENCRULES Handle = 0x80093016 + OSS_UNAVAIL_ENCRULES Handle = 0x80093017 + OSS_CANT_OPEN_TRACE_WINDOW Handle = 0x80093018 + OSS_UNIMPLEMENTED Handle = 0x80093019 + OSS_OID_DLL_NOT_LINKED Handle = 0x8009301A + OSS_CANT_OPEN_TRACE_FILE Handle = 0x8009301B + OSS_TRACE_FILE_ALREADY_OPEN Handle = 0x8009301C + OSS_TABLE_MISMATCH Handle = 0x8009301D + OSS_TYPE_NOT_SUPPORTED Handle = 0x8009301E + OSS_REAL_DLL_NOT_LINKED Handle = 0x8009301F + OSS_REAL_CODE_NOT_LINKED Handle = 0x80093020 + OSS_OUT_OF_RANGE Handle = 0x80093021 + OSS_COPIER_DLL_NOT_LINKED Handle = 0x80093022 + OSS_CONSTRAINT_DLL_NOT_LINKED Handle = 0x80093023 + OSS_COMPARATOR_DLL_NOT_LINKED Handle = 0x80093024 + OSS_COMPARATOR_CODE_NOT_LINKED Handle = 0x80093025 + OSS_MEM_MGR_DLL_NOT_LINKED Handle = 0x80093026 + OSS_PDV_DLL_NOT_LINKED Handle = 0x80093027 + OSS_PDV_CODE_NOT_LINKED Handle = 0x80093028 + OSS_API_DLL_NOT_LINKED Handle = 0x80093029 + OSS_BERDER_DLL_NOT_LINKED Handle = 0x8009302A + OSS_PER_DLL_NOT_LINKED Handle = 0x8009302B + OSS_OPEN_TYPE_ERROR Handle = 0x8009302C + OSS_MUTEX_NOT_CREATED Handle = 0x8009302D + OSS_CANT_CLOSE_TRACE_FILE Handle = 0x8009302E + CRYPT_E_ASN1_ERROR Handle = 0x80093100 + CRYPT_E_ASN1_INTERNAL Handle = 0x80093101 + CRYPT_E_ASN1_EOD Handle = 0x80093102 + CRYPT_E_ASN1_CORRUPT Handle = 0x80093103 + CRYPT_E_ASN1_LARGE Handle = 0x80093104 + CRYPT_E_ASN1_CONSTRAINT Handle = 0x80093105 + CRYPT_E_ASN1_MEMORY Handle = 0x80093106 + CRYPT_E_ASN1_OVERFLOW Handle = 0x80093107 + CRYPT_E_ASN1_BADPDU Handle = 0x80093108 + CRYPT_E_ASN1_BADARGS Handle = 0x80093109 + CRYPT_E_ASN1_BADREAL Handle = 0x8009310A + CRYPT_E_ASN1_BADTAG Handle = 0x8009310B + CRYPT_E_ASN1_CHOICE Handle = 0x8009310C + CRYPT_E_ASN1_RULE Handle = 0x8009310D + CRYPT_E_ASN1_UTF8 Handle = 0x8009310E + CRYPT_E_ASN1_PDU_TYPE Handle = 0x80093133 + CRYPT_E_ASN1_NYI Handle = 0x80093134 + CRYPT_E_ASN1_EXTENDED Handle = 0x80093201 + CRYPT_E_ASN1_NOEOD Handle = 0x80093202 + CERTSRV_E_BAD_REQUESTSUBJECT Handle = 0x80094001 + CERTSRV_E_NO_REQUEST Handle = 0x80094002 + CERTSRV_E_BAD_REQUESTSTATUS Handle = 0x80094003 + CERTSRV_E_PROPERTY_EMPTY Handle = 0x80094004 + CERTSRV_E_INVALID_CA_CERTIFICATE Handle = 0x80094005 + CERTSRV_E_SERVER_SUSPENDED Handle = 0x80094006 + CERTSRV_E_ENCODING_LENGTH Handle = 0x80094007 + CERTSRV_E_ROLECONFLICT Handle = 0x80094008 + CERTSRV_E_RESTRICTEDOFFICER Handle = 0x80094009 + CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED Handle = 0x8009400A + CERTSRV_E_NO_VALID_KRA Handle = 0x8009400B + CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL Handle = 0x8009400C + CERTSRV_E_NO_CAADMIN_DEFINED Handle = 0x8009400D + CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE Handle = 0x8009400E + CERTSRV_E_NO_DB_SESSIONS Handle = 0x8009400F + CERTSRV_E_ALIGNMENT_FAULT Handle = 0x80094010 + CERTSRV_E_ENROLL_DENIED Handle = 0x80094011 + CERTSRV_E_TEMPLATE_DENIED Handle = 0x80094012 + CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE Handle = 0x80094013 + CERTSRV_E_ADMIN_DENIED_REQUEST Handle = 0x80094014 + CERTSRV_E_NO_POLICY_SERVER Handle = 0x80094015 + CERTSRV_E_WEAK_SIGNATURE_OR_KEY Handle = 0x80094016 + CERTSRV_E_KEY_ATTESTATION_NOT_SUPPORTED Handle = 0x80094017 + CERTSRV_E_ENCRYPTION_CERT_REQUIRED Handle = 0x80094018 + CERTSRV_E_UNSUPPORTED_CERT_TYPE Handle = 0x80094800 + CERTSRV_E_NO_CERT_TYPE Handle = 0x80094801 + CERTSRV_E_TEMPLATE_CONFLICT Handle = 0x80094802 + CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED Handle = 0x80094803 + CERTSRV_E_ARCHIVED_KEY_REQUIRED Handle = 0x80094804 + CERTSRV_E_SMIME_REQUIRED Handle = 0x80094805 + CERTSRV_E_BAD_RENEWAL_SUBJECT Handle = 0x80094806 + CERTSRV_E_BAD_TEMPLATE_VERSION Handle = 0x80094807 + CERTSRV_E_TEMPLATE_POLICY_REQUIRED Handle = 0x80094808 + CERTSRV_E_SIGNATURE_POLICY_REQUIRED Handle = 0x80094809 + CERTSRV_E_SIGNATURE_COUNT Handle = 0x8009480A + CERTSRV_E_SIGNATURE_REJECTED Handle = 0x8009480B + CERTSRV_E_ISSUANCE_POLICY_REQUIRED Handle = 0x8009480C + CERTSRV_E_SUBJECT_UPN_REQUIRED Handle = 0x8009480D + CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED Handle = 0x8009480E + CERTSRV_E_SUBJECT_DNS_REQUIRED Handle = 0x8009480F + CERTSRV_E_ARCHIVED_KEY_UNEXPECTED Handle = 0x80094810 + CERTSRV_E_KEY_LENGTH Handle = 0x80094811 + CERTSRV_E_SUBJECT_EMAIL_REQUIRED Handle = 0x80094812 + CERTSRV_E_UNKNOWN_CERT_TYPE Handle = 0x80094813 + CERTSRV_E_CERT_TYPE_OVERLAP Handle = 0x80094814 + CERTSRV_E_TOO_MANY_SIGNATURES Handle = 0x80094815 + CERTSRV_E_RENEWAL_BAD_PUBLIC_KEY Handle = 0x80094816 + CERTSRV_E_INVALID_EK Handle = 0x80094817 + CERTSRV_E_INVALID_IDBINDING Handle = 0x80094818 + CERTSRV_E_INVALID_ATTESTATION Handle = 0x80094819 + CERTSRV_E_KEY_ATTESTATION Handle = 0x8009481A + CERTSRV_E_CORRUPT_KEY_ATTESTATION Handle = 0x8009481B + CERTSRV_E_EXPIRED_CHALLENGE Handle = 0x8009481C + CERTSRV_E_INVALID_RESPONSE Handle = 0x8009481D + CERTSRV_E_INVALID_REQUESTID Handle = 0x8009481E + CERTSRV_E_REQUEST_PRECERTIFICATE_MISMATCH Handle = 0x8009481F + CERTSRV_E_PENDING_CLIENT_RESPONSE Handle = 0x80094820 + XENROLL_E_KEY_NOT_EXPORTABLE Handle = 0x80095000 + XENROLL_E_CANNOT_ADD_ROOT_CERT Handle = 0x80095001 + XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND Handle = 0x80095002 + XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH Handle = 0x80095003 + XENROLL_E_RESPONSE_KA_HASH_MISMATCH Handle = 0x80095004 + XENROLL_E_KEYSPEC_SMIME_MISMATCH Handle = 0x80095005 + TRUST_E_SYSTEM_ERROR Handle = 0x80096001 + TRUST_E_NO_SIGNER_CERT Handle = 0x80096002 + TRUST_E_COUNTER_SIGNER Handle = 0x80096003 + TRUST_E_CERT_SIGNATURE Handle = 0x80096004 + TRUST_E_TIME_STAMP Handle = 0x80096005 + TRUST_E_BAD_DIGEST Handle = 0x80096010 + TRUST_E_MALFORMED_SIGNATURE Handle = 0x80096011 + TRUST_E_BASIC_CONSTRAINTS Handle = 0x80096019 + TRUST_E_FINANCIAL_CRITERIA Handle = 0x8009601E + MSSIPOTF_E_OUTOFMEMRANGE Handle = 0x80097001 + MSSIPOTF_E_CANTGETOBJECT Handle = 0x80097002 + MSSIPOTF_E_NOHEADTABLE Handle = 0x80097003 + MSSIPOTF_E_BAD_MAGICNUMBER Handle = 0x80097004 + MSSIPOTF_E_BAD_OFFSET_TABLE Handle = 0x80097005 + MSSIPOTF_E_TABLE_TAGORDER Handle = 0x80097006 + MSSIPOTF_E_TABLE_LONGWORD Handle = 0x80097007 + MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT Handle = 0x80097008 + MSSIPOTF_E_TABLES_OVERLAP Handle = 0x80097009 + MSSIPOTF_E_TABLE_PADBYTES Handle = 0x8009700A + MSSIPOTF_E_FILETOOSMALL Handle = 0x8009700B + MSSIPOTF_E_TABLE_CHECKSUM Handle = 0x8009700C + MSSIPOTF_E_FILE_CHECKSUM Handle = 0x8009700D + MSSIPOTF_E_FAILED_POLICY Handle = 0x80097010 + MSSIPOTF_E_FAILED_HINTS_CHECK Handle = 0x80097011 + MSSIPOTF_E_NOT_OPENTYPE Handle = 0x80097012 + MSSIPOTF_E_FILE Handle = 0x80097013 + MSSIPOTF_E_CRYPT Handle = 0x80097014 + MSSIPOTF_E_BADVERSION Handle = 0x80097015 + MSSIPOTF_E_DSIG_STRUCTURE Handle = 0x80097016 + MSSIPOTF_E_PCONST_CHECK Handle = 0x80097017 + MSSIPOTF_E_STRUCTURE Handle = 0x80097018 + ERROR_CRED_REQUIRES_CONFIRMATION Handle = 0x80097019 + NTE_OP_OK syscall.Errno = 0 + TRUST_E_PROVIDER_UNKNOWN Handle = 0x800B0001 + TRUST_E_ACTION_UNKNOWN Handle = 0x800B0002 + TRUST_E_SUBJECT_FORM_UNKNOWN Handle = 0x800B0003 + TRUST_E_SUBJECT_NOT_TRUSTED Handle = 0x800B0004 + DIGSIG_E_ENCODE Handle = 0x800B0005 + DIGSIG_E_DECODE Handle = 0x800B0006 + DIGSIG_E_EXTENSIBILITY Handle = 0x800B0007 + DIGSIG_E_CRYPTO Handle = 0x800B0008 + PERSIST_E_SIZEDEFINITE Handle = 0x800B0009 + PERSIST_E_SIZEINDEFINITE Handle = 0x800B000A + PERSIST_E_NOTSELFSIZING Handle = 0x800B000B + TRUST_E_NOSIGNATURE Handle = 0x800B0100 + CERT_E_EXPIRED Handle = 0x800B0101 + CERT_E_VALIDITYPERIODNESTING Handle = 0x800B0102 + CERT_E_ROLE Handle = 0x800B0103 + CERT_E_PATHLENCONST Handle = 0x800B0104 + CERT_E_CRITICAL Handle = 0x800B0105 + CERT_E_PURPOSE Handle = 0x800B0106 + CERT_E_ISSUERCHAINING Handle = 0x800B0107 + CERT_E_MALFORMED Handle = 0x800B0108 + CERT_E_UNTRUSTEDROOT Handle = 0x800B0109 + CERT_E_CHAINING Handle = 0x800B010A + TRUST_E_FAIL Handle = 0x800B010B + CERT_E_REVOKED Handle = 0x800B010C + CERT_E_UNTRUSTEDTESTROOT Handle = 0x800B010D + CERT_E_REVOCATION_FAILURE Handle = 0x800B010E + CERT_E_CN_NO_MATCH Handle = 0x800B010F + CERT_E_WRONG_USAGE Handle = 0x800B0110 + TRUST_E_EXPLICIT_DISTRUST Handle = 0x800B0111 + CERT_E_UNTRUSTEDCA Handle = 0x800B0112 + CERT_E_INVALID_POLICY Handle = 0x800B0113 + CERT_E_INVALID_NAME Handle = 0x800B0114 + SPAPI_E_EXPECTED_SECTION_NAME Handle = 0x800F0000 + SPAPI_E_BAD_SECTION_NAME_LINE Handle = 0x800F0001 + SPAPI_E_SECTION_NAME_TOO_LONG Handle = 0x800F0002 + SPAPI_E_GENERAL_SYNTAX Handle = 0x800F0003 + SPAPI_E_WRONG_INF_STYLE Handle = 0x800F0100 + SPAPI_E_SECTION_NOT_FOUND Handle = 0x800F0101 + SPAPI_E_LINE_NOT_FOUND Handle = 0x800F0102 + SPAPI_E_NO_BACKUP Handle = 0x800F0103 + SPAPI_E_NO_ASSOCIATED_CLASS Handle = 0x800F0200 + SPAPI_E_CLASS_MISMATCH Handle = 0x800F0201 + SPAPI_E_DUPLICATE_FOUND Handle = 0x800F0202 + SPAPI_E_NO_DRIVER_SELECTED Handle = 0x800F0203 + SPAPI_E_KEY_DOES_NOT_EXIST Handle = 0x800F0204 + SPAPI_E_INVALID_DEVINST_NAME Handle = 0x800F0205 + SPAPI_E_INVALID_CLASS Handle = 0x800F0206 + SPAPI_E_DEVINST_ALREADY_EXISTS Handle = 0x800F0207 + SPAPI_E_DEVINFO_NOT_REGISTERED Handle = 0x800F0208 + SPAPI_E_INVALID_REG_PROPERTY Handle = 0x800F0209 + SPAPI_E_NO_INF Handle = 0x800F020A + SPAPI_E_NO_SUCH_DEVINST Handle = 0x800F020B + SPAPI_E_CANT_LOAD_CLASS_ICON Handle = 0x800F020C + SPAPI_E_INVALID_CLASS_INSTALLER Handle = 0x800F020D + SPAPI_E_DI_DO_DEFAULT Handle = 0x800F020E + SPAPI_E_DI_NOFILECOPY Handle = 0x800F020F + SPAPI_E_INVALID_HWPROFILE Handle = 0x800F0210 + SPAPI_E_NO_DEVICE_SELECTED Handle = 0x800F0211 + SPAPI_E_DEVINFO_LIST_LOCKED Handle = 0x800F0212 + SPAPI_E_DEVINFO_DATA_LOCKED Handle = 0x800F0213 + SPAPI_E_DI_BAD_PATH Handle = 0x800F0214 + SPAPI_E_NO_CLASSINSTALL_PARAMS Handle = 0x800F0215 + SPAPI_E_FILEQUEUE_LOCKED Handle = 0x800F0216 + SPAPI_E_BAD_SERVICE_INSTALLSECT Handle = 0x800F0217 + SPAPI_E_NO_CLASS_DRIVER_LIST Handle = 0x800F0218 + SPAPI_E_NO_ASSOCIATED_SERVICE Handle = 0x800F0219 + SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE Handle = 0x800F021A + SPAPI_E_DEVICE_INTERFACE_ACTIVE Handle = 0x800F021B + SPAPI_E_DEVICE_INTERFACE_REMOVED Handle = 0x800F021C + SPAPI_E_BAD_INTERFACE_INSTALLSECT Handle = 0x800F021D + SPAPI_E_NO_SUCH_INTERFACE_CLASS Handle = 0x800F021E + SPAPI_E_INVALID_REFERENCE_STRING Handle = 0x800F021F + SPAPI_E_INVALID_MACHINENAME Handle = 0x800F0220 + SPAPI_E_REMOTE_COMM_FAILURE Handle = 0x800F0221 + SPAPI_E_MACHINE_UNAVAILABLE Handle = 0x800F0222 + SPAPI_E_NO_CONFIGMGR_SERVICES Handle = 0x800F0223 + SPAPI_E_INVALID_PROPPAGE_PROVIDER Handle = 0x800F0224 + SPAPI_E_NO_SUCH_DEVICE_INTERFACE Handle = 0x800F0225 + SPAPI_E_DI_POSTPROCESSING_REQUIRED Handle = 0x800F0226 + SPAPI_E_INVALID_COINSTALLER Handle = 0x800F0227 + SPAPI_E_NO_COMPAT_DRIVERS Handle = 0x800F0228 + SPAPI_E_NO_DEVICE_ICON Handle = 0x800F0229 + SPAPI_E_INVALID_INF_LOGCONFIG Handle = 0x800F022A + SPAPI_E_DI_DONT_INSTALL Handle = 0x800F022B + SPAPI_E_INVALID_FILTER_DRIVER Handle = 0x800F022C + SPAPI_E_NON_WINDOWS_NT_DRIVER Handle = 0x800F022D + SPAPI_E_NON_WINDOWS_DRIVER Handle = 0x800F022E + SPAPI_E_NO_CATALOG_FOR_OEM_INF Handle = 0x800F022F + SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE Handle = 0x800F0230 + SPAPI_E_NOT_DISABLEABLE Handle = 0x800F0231 + SPAPI_E_CANT_REMOVE_DEVINST Handle = 0x800F0232 + SPAPI_E_INVALID_TARGET Handle = 0x800F0233 + SPAPI_E_DRIVER_NONNATIVE Handle = 0x800F0234 + SPAPI_E_IN_WOW64 Handle = 0x800F0235 + SPAPI_E_SET_SYSTEM_RESTORE_POINT Handle = 0x800F0236 + SPAPI_E_INCORRECTLY_COPIED_INF Handle = 0x800F0237 + SPAPI_E_SCE_DISABLED Handle = 0x800F0238 + SPAPI_E_UNKNOWN_EXCEPTION Handle = 0x800F0239 + SPAPI_E_PNP_REGISTRY_ERROR Handle = 0x800F023A + SPAPI_E_REMOTE_REQUEST_UNSUPPORTED Handle = 0x800F023B + SPAPI_E_NOT_AN_INSTALLED_OEM_INF Handle = 0x800F023C + SPAPI_E_INF_IN_USE_BY_DEVICES Handle = 0x800F023D + SPAPI_E_DI_FUNCTION_OBSOLETE Handle = 0x800F023E + SPAPI_E_NO_AUTHENTICODE_CATALOG Handle = 0x800F023F + SPAPI_E_AUTHENTICODE_DISALLOWED Handle = 0x800F0240 + SPAPI_E_AUTHENTICODE_TRUSTED_PUBLISHER Handle = 0x800F0241 + SPAPI_E_AUTHENTICODE_TRUST_NOT_ESTABLISHED Handle = 0x800F0242 + SPAPI_E_AUTHENTICODE_PUBLISHER_NOT_TRUSTED Handle = 0x800F0243 + SPAPI_E_SIGNATURE_OSATTRIBUTE_MISMATCH Handle = 0x800F0244 + SPAPI_E_ONLY_VALIDATE_VIA_AUTHENTICODE Handle = 0x800F0245 + SPAPI_E_DEVICE_INSTALLER_NOT_READY Handle = 0x800F0246 + SPAPI_E_DRIVER_STORE_ADD_FAILED Handle = 0x800F0247 + SPAPI_E_DEVICE_INSTALL_BLOCKED Handle = 0x800F0248 + SPAPI_E_DRIVER_INSTALL_BLOCKED Handle = 0x800F0249 + SPAPI_E_WRONG_INF_TYPE Handle = 0x800F024A + SPAPI_E_FILE_HASH_NOT_IN_CATALOG Handle = 0x800F024B + SPAPI_E_DRIVER_STORE_DELETE_FAILED Handle = 0x800F024C + SPAPI_E_UNRECOVERABLE_STACK_OVERFLOW Handle = 0x800F0300 + SPAPI_E_ERROR_NOT_INSTALLED Handle = 0x800F1000 + SCARD_S_SUCCESS = S_OK + SCARD_F_INTERNAL_ERROR Handle = 0x80100001 + SCARD_E_CANCELLED Handle = 0x80100002 + SCARD_E_INVALID_HANDLE Handle = 0x80100003 + SCARD_E_INVALID_PARAMETER Handle = 0x80100004 + SCARD_E_INVALID_TARGET Handle = 0x80100005 + SCARD_E_NO_MEMORY Handle = 0x80100006 + SCARD_F_WAITED_TOO_LONG Handle = 0x80100007 + SCARD_E_INSUFFICIENT_BUFFER Handle = 0x80100008 + SCARD_E_UNKNOWN_READER Handle = 0x80100009 + SCARD_E_TIMEOUT Handle = 0x8010000A + SCARD_E_SHARING_VIOLATION Handle = 0x8010000B + SCARD_E_NO_SMARTCARD Handle = 0x8010000C + SCARD_E_UNKNOWN_CARD Handle = 0x8010000D + SCARD_E_CANT_DISPOSE Handle = 0x8010000E + SCARD_E_PROTO_MISMATCH Handle = 0x8010000F + SCARD_E_NOT_READY Handle = 0x80100010 + SCARD_E_INVALID_VALUE Handle = 0x80100011 + SCARD_E_SYSTEM_CANCELLED Handle = 0x80100012 + SCARD_F_COMM_ERROR Handle = 0x80100013 + SCARD_F_UNKNOWN_ERROR Handle = 0x80100014 + SCARD_E_INVALID_ATR Handle = 0x80100015 + SCARD_E_NOT_TRANSACTED Handle = 0x80100016 + SCARD_E_READER_UNAVAILABLE Handle = 0x80100017 + SCARD_P_SHUTDOWN Handle = 0x80100018 + SCARD_E_PCI_TOO_SMALL Handle = 0x80100019 + SCARD_E_READER_UNSUPPORTED Handle = 0x8010001A + SCARD_E_DUPLICATE_READER Handle = 0x8010001B + SCARD_E_CARD_UNSUPPORTED Handle = 0x8010001C + SCARD_E_NO_SERVICE Handle = 0x8010001D + SCARD_E_SERVICE_STOPPED Handle = 0x8010001E + SCARD_E_UNEXPECTED Handle = 0x8010001F + SCARD_E_ICC_INSTALLATION Handle = 0x80100020 + SCARD_E_ICC_CREATEORDER Handle = 0x80100021 + SCARD_E_UNSUPPORTED_FEATURE Handle = 0x80100022 + SCARD_E_DIR_NOT_FOUND Handle = 0x80100023 + SCARD_E_FILE_NOT_FOUND Handle = 0x80100024 + SCARD_E_NO_DIR Handle = 0x80100025 + SCARD_E_NO_FILE Handle = 0x80100026 + SCARD_E_NO_ACCESS Handle = 0x80100027 + SCARD_E_WRITE_TOO_MANY Handle = 0x80100028 + SCARD_E_BAD_SEEK Handle = 0x80100029 + SCARD_E_INVALID_CHV Handle = 0x8010002A + SCARD_E_UNKNOWN_RES_MNG Handle = 0x8010002B + SCARD_E_NO_SUCH_CERTIFICATE Handle = 0x8010002C + SCARD_E_CERTIFICATE_UNAVAILABLE Handle = 0x8010002D + SCARD_E_NO_READERS_AVAILABLE Handle = 0x8010002E + SCARD_E_COMM_DATA_LOST Handle = 0x8010002F + SCARD_E_NO_KEY_CONTAINER Handle = 0x80100030 + SCARD_E_SERVER_TOO_BUSY Handle = 0x80100031 + SCARD_E_PIN_CACHE_EXPIRED Handle = 0x80100032 + SCARD_E_NO_PIN_CACHE Handle = 0x80100033 + SCARD_E_READ_ONLY_CARD Handle = 0x80100034 + SCARD_W_UNSUPPORTED_CARD Handle = 0x80100065 + SCARD_W_UNRESPONSIVE_CARD Handle = 0x80100066 + SCARD_W_UNPOWERED_CARD Handle = 0x80100067 + SCARD_W_RESET_CARD Handle = 0x80100068 + SCARD_W_REMOVED_CARD Handle = 0x80100069 + SCARD_W_SECURITY_VIOLATION Handle = 0x8010006A + SCARD_W_WRONG_CHV Handle = 0x8010006B + SCARD_W_CHV_BLOCKED Handle = 0x8010006C + SCARD_W_EOF Handle = 0x8010006D + SCARD_W_CANCELLED_BY_USER Handle = 0x8010006E + SCARD_W_CARD_NOT_AUTHENTICATED Handle = 0x8010006F + SCARD_W_CACHE_ITEM_NOT_FOUND Handle = 0x80100070 + SCARD_W_CACHE_ITEM_STALE Handle = 0x80100071 + SCARD_W_CACHE_ITEM_TOO_BIG Handle = 0x80100072 + COMADMIN_E_OBJECTERRORS Handle = 0x80110401 + COMADMIN_E_OBJECTINVALID Handle = 0x80110402 + COMADMIN_E_KEYMISSING Handle = 0x80110403 + COMADMIN_E_ALREADYINSTALLED Handle = 0x80110404 + COMADMIN_E_APP_FILE_WRITEFAIL Handle = 0x80110407 + COMADMIN_E_APP_FILE_READFAIL Handle = 0x80110408 + COMADMIN_E_APP_FILE_VERSION Handle = 0x80110409 + COMADMIN_E_BADPATH Handle = 0x8011040A + COMADMIN_E_APPLICATIONEXISTS Handle = 0x8011040B + COMADMIN_E_ROLEEXISTS Handle = 0x8011040C + COMADMIN_E_CANTCOPYFILE Handle = 0x8011040D + COMADMIN_E_NOUSER Handle = 0x8011040F + COMADMIN_E_INVALIDUSERIDS Handle = 0x80110410 + COMADMIN_E_NOREGISTRYCLSID Handle = 0x80110411 + COMADMIN_E_BADREGISTRYPROGID Handle = 0x80110412 + COMADMIN_E_AUTHENTICATIONLEVEL Handle = 0x80110413 + COMADMIN_E_USERPASSWDNOTVALID Handle = 0x80110414 + COMADMIN_E_CLSIDORIIDMISMATCH Handle = 0x80110418 + COMADMIN_E_REMOTEINTERFACE Handle = 0x80110419 + COMADMIN_E_DLLREGISTERSERVER Handle = 0x8011041A + COMADMIN_E_NOSERVERSHARE Handle = 0x8011041B + COMADMIN_E_DLLLOADFAILED Handle = 0x8011041D + COMADMIN_E_BADREGISTRYLIBID Handle = 0x8011041E + COMADMIN_E_APPDIRNOTFOUND Handle = 0x8011041F + COMADMIN_E_REGISTRARFAILED Handle = 0x80110423 + COMADMIN_E_COMPFILE_DOESNOTEXIST Handle = 0x80110424 + COMADMIN_E_COMPFILE_LOADDLLFAIL Handle = 0x80110425 + COMADMIN_E_COMPFILE_GETCLASSOBJ Handle = 0x80110426 + COMADMIN_E_COMPFILE_CLASSNOTAVAIL Handle = 0x80110427 + COMADMIN_E_COMPFILE_BADTLB Handle = 0x80110428 + COMADMIN_E_COMPFILE_NOTINSTALLABLE Handle = 0x80110429 + COMADMIN_E_NOTCHANGEABLE Handle = 0x8011042A + COMADMIN_E_NOTDELETEABLE Handle = 0x8011042B + COMADMIN_E_SESSION Handle = 0x8011042C + COMADMIN_E_COMP_MOVE_LOCKED Handle = 0x8011042D + COMADMIN_E_COMP_MOVE_BAD_DEST Handle = 0x8011042E + COMADMIN_E_REGISTERTLB Handle = 0x80110430 + COMADMIN_E_SYSTEMAPP Handle = 0x80110433 + COMADMIN_E_COMPFILE_NOREGISTRAR Handle = 0x80110434 + COMADMIN_E_COREQCOMPINSTALLED Handle = 0x80110435 + COMADMIN_E_SERVICENOTINSTALLED Handle = 0x80110436 + COMADMIN_E_PROPERTYSAVEFAILED Handle = 0x80110437 + COMADMIN_E_OBJECTEXISTS Handle = 0x80110438 + COMADMIN_E_COMPONENTEXISTS Handle = 0x80110439 + COMADMIN_E_REGFILE_CORRUPT Handle = 0x8011043B + COMADMIN_E_PROPERTY_OVERFLOW Handle = 0x8011043C + COMADMIN_E_NOTINREGISTRY Handle = 0x8011043E + COMADMIN_E_OBJECTNOTPOOLABLE Handle = 0x8011043F + COMADMIN_E_APPLID_MATCHES_CLSID Handle = 0x80110446 + COMADMIN_E_ROLE_DOES_NOT_EXIST Handle = 0x80110447 + COMADMIN_E_START_APP_NEEDS_COMPONENTS Handle = 0x80110448 + COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM Handle = 0x80110449 + COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY Handle = 0x8011044A + COMADMIN_E_CAN_NOT_START_APP Handle = 0x8011044B + COMADMIN_E_CAN_NOT_EXPORT_SYS_APP Handle = 0x8011044C + COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT Handle = 0x8011044D + COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER Handle = 0x8011044E + COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE Handle = 0x8011044F + COMADMIN_E_BASE_PARTITION_ONLY Handle = 0x80110450 + COMADMIN_E_START_APP_DISABLED Handle = 0x80110451 + COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME Handle = 0x80110457 + COMADMIN_E_CAT_INVALID_PARTITION_NAME Handle = 0x80110458 + COMADMIN_E_CAT_PARTITION_IN_USE Handle = 0x80110459 + COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES Handle = 0x8011045A + COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED Handle = 0x8011045B + COMADMIN_E_AMBIGUOUS_APPLICATION_NAME Handle = 0x8011045C + COMADMIN_E_AMBIGUOUS_PARTITION_NAME Handle = 0x8011045D + COMADMIN_E_REGDB_NOTINITIALIZED Handle = 0x80110472 + COMADMIN_E_REGDB_NOTOPEN Handle = 0x80110473 + COMADMIN_E_REGDB_SYSTEMERR Handle = 0x80110474 + COMADMIN_E_REGDB_ALREADYRUNNING Handle = 0x80110475 + COMADMIN_E_MIG_VERSIONNOTSUPPORTED Handle = 0x80110480 + COMADMIN_E_MIG_SCHEMANOTFOUND Handle = 0x80110481 + COMADMIN_E_CAT_BITNESSMISMATCH Handle = 0x80110482 + COMADMIN_E_CAT_UNACCEPTABLEBITNESS Handle = 0x80110483 + COMADMIN_E_CAT_WRONGAPPBITNESS Handle = 0x80110484 + COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED Handle = 0x80110485 + COMADMIN_E_CAT_SERVERFAULT Handle = 0x80110486 + COMQC_E_APPLICATION_NOT_QUEUED Handle = 0x80110600 + COMQC_E_NO_QUEUEABLE_INTERFACES Handle = 0x80110601 + COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE Handle = 0x80110602 + COMQC_E_NO_IPERSISTSTREAM Handle = 0x80110603 + COMQC_E_BAD_MESSAGE Handle = 0x80110604 + COMQC_E_UNAUTHENTICATED Handle = 0x80110605 + COMQC_E_UNTRUSTED_ENQUEUER Handle = 0x80110606 + MSDTC_E_DUPLICATE_RESOURCE Handle = 0x80110701 + COMADMIN_E_OBJECT_PARENT_MISSING Handle = 0x80110808 + COMADMIN_E_OBJECT_DOES_NOT_EXIST Handle = 0x80110809 + COMADMIN_E_APP_NOT_RUNNING Handle = 0x8011080A + COMADMIN_E_INVALID_PARTITION Handle = 0x8011080B + COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE Handle = 0x8011080D + COMADMIN_E_USER_IN_SET Handle = 0x8011080E + COMADMIN_E_CANTRECYCLELIBRARYAPPS Handle = 0x8011080F + COMADMIN_E_CANTRECYCLESERVICEAPPS Handle = 0x80110811 + COMADMIN_E_PROCESSALREADYRECYCLED Handle = 0x80110812 + COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED Handle = 0x80110813 + COMADMIN_E_CANTMAKEINPROCSERVICE Handle = 0x80110814 + COMADMIN_E_PROGIDINUSEBYCLSID Handle = 0x80110815 + COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET Handle = 0x80110816 + COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED Handle = 0x80110817 + COMADMIN_E_PARTITION_ACCESSDENIED Handle = 0x80110818 + COMADMIN_E_PARTITION_MSI_ONLY Handle = 0x80110819 + COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT Handle = 0x8011081A + COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS Handle = 0x8011081B + COMADMIN_E_COMP_MOVE_SOURCE Handle = 0x8011081C + COMADMIN_E_COMP_MOVE_DEST Handle = 0x8011081D + COMADMIN_E_COMP_MOVE_PRIVATE Handle = 0x8011081E + COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET Handle = 0x8011081F + COMADMIN_E_CANNOT_ALIAS_EVENTCLASS Handle = 0x80110820 + COMADMIN_E_PRIVATE_ACCESSDENIED Handle = 0x80110821 + COMADMIN_E_SAFERINVALID Handle = 0x80110822 + COMADMIN_E_REGISTRY_ACCESSDENIED Handle = 0x80110823 + COMADMIN_E_PARTITIONS_DISABLED Handle = 0x80110824 + WER_S_REPORT_DEBUG Handle = 0x001B0000 + WER_S_REPORT_UPLOADED Handle = 0x001B0001 + WER_S_REPORT_QUEUED Handle = 0x001B0002 + WER_S_DISABLED Handle = 0x001B0003 + WER_S_SUSPENDED_UPLOAD Handle = 0x001B0004 + WER_S_DISABLED_QUEUE Handle = 0x001B0005 + WER_S_DISABLED_ARCHIVE Handle = 0x001B0006 + WER_S_REPORT_ASYNC Handle = 0x001B0007 + WER_S_IGNORE_ASSERT_INSTANCE Handle = 0x001B0008 + WER_S_IGNORE_ALL_ASSERTS Handle = 0x001B0009 + WER_S_ASSERT_CONTINUE Handle = 0x001B000A + WER_S_THROTTLED Handle = 0x001B000B + WER_S_REPORT_UPLOADED_CAB Handle = 0x001B000C + WER_E_CRASH_FAILURE Handle = 0x801B8000 + WER_E_CANCELED Handle = 0x801B8001 + WER_E_NETWORK_FAILURE Handle = 0x801B8002 + WER_E_NOT_INITIALIZED Handle = 0x801B8003 + WER_E_ALREADY_REPORTING Handle = 0x801B8004 + WER_E_DUMP_THROTTLED Handle = 0x801B8005 + WER_E_INSUFFICIENT_CONSENT Handle = 0x801B8006 + WER_E_TOO_HEAVY Handle = 0x801B8007 + ERROR_FLT_IO_COMPLETE Handle = 0x001F0001 + ERROR_FLT_NO_HANDLER_DEFINED Handle = 0x801F0001 + ERROR_FLT_CONTEXT_ALREADY_DEFINED Handle = 0x801F0002 + ERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST Handle = 0x801F0003 + ERROR_FLT_DISALLOW_FAST_IO Handle = 0x801F0004 + ERROR_FLT_INVALID_NAME_REQUEST Handle = 0x801F0005 + ERROR_FLT_NOT_SAFE_TO_POST_OPERATION Handle = 0x801F0006 + ERROR_FLT_NOT_INITIALIZED Handle = 0x801F0007 + ERROR_FLT_FILTER_NOT_READY Handle = 0x801F0008 + ERROR_FLT_POST_OPERATION_CLEANUP Handle = 0x801F0009 + ERROR_FLT_INTERNAL_ERROR Handle = 0x801F000A + ERROR_FLT_DELETING_OBJECT Handle = 0x801F000B + ERROR_FLT_MUST_BE_NONPAGED_POOL Handle = 0x801F000C + ERROR_FLT_DUPLICATE_ENTRY Handle = 0x801F000D + ERROR_FLT_CBDQ_DISABLED Handle = 0x801F000E + ERROR_FLT_DO_NOT_ATTACH Handle = 0x801F000F + ERROR_FLT_DO_NOT_DETACH Handle = 0x801F0010 + ERROR_FLT_INSTANCE_ALTITUDE_COLLISION Handle = 0x801F0011 + ERROR_FLT_INSTANCE_NAME_COLLISION Handle = 0x801F0012 + ERROR_FLT_FILTER_NOT_FOUND Handle = 0x801F0013 + ERROR_FLT_VOLUME_NOT_FOUND Handle = 0x801F0014 + ERROR_FLT_INSTANCE_NOT_FOUND Handle = 0x801F0015 + ERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND Handle = 0x801F0016 + ERROR_FLT_INVALID_CONTEXT_REGISTRATION Handle = 0x801F0017 + ERROR_FLT_NAME_CACHE_MISS Handle = 0x801F0018 + ERROR_FLT_NO_DEVICE_OBJECT Handle = 0x801F0019 + ERROR_FLT_VOLUME_ALREADY_MOUNTED Handle = 0x801F001A + ERROR_FLT_ALREADY_ENLISTED Handle = 0x801F001B + ERROR_FLT_CONTEXT_ALREADY_LINKED Handle = 0x801F001C + ERROR_FLT_NO_WAITER_FOR_REPLY Handle = 0x801F0020 + ERROR_FLT_REGISTRATION_BUSY Handle = 0x801F0023 + ERROR_HUNG_DISPLAY_DRIVER_THREAD Handle = 0x80260001 + DWM_E_COMPOSITIONDISABLED Handle = 0x80263001 + DWM_E_REMOTING_NOT_SUPPORTED Handle = 0x80263002 + DWM_E_NO_REDIRECTION_SURFACE_AVAILABLE Handle = 0x80263003 + DWM_E_NOT_QUEUING_PRESENTS Handle = 0x80263004 + DWM_E_ADAPTER_NOT_FOUND Handle = 0x80263005 + DWM_S_GDI_REDIRECTION_SURFACE Handle = 0x00263005 + DWM_E_TEXTURE_TOO_LARGE Handle = 0x80263007 + DWM_S_GDI_REDIRECTION_SURFACE_BLT_VIA_GDI Handle = 0x00263008 + ERROR_MONITOR_NO_DESCRIPTOR Handle = 0x00261001 + ERROR_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT Handle = 0x00261002 + ERROR_MONITOR_INVALID_DESCRIPTOR_CHECKSUM Handle = 0xC0261003 + ERROR_MONITOR_INVALID_STANDARD_TIMING_BLOCK Handle = 0xC0261004 + ERROR_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED Handle = 0xC0261005 + ERROR_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK Handle = 0xC0261006 + ERROR_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK Handle = 0xC0261007 + ERROR_MONITOR_NO_MORE_DESCRIPTOR_DATA Handle = 0xC0261008 + ERROR_MONITOR_INVALID_DETAILED_TIMING_BLOCK Handle = 0xC0261009 + ERROR_MONITOR_INVALID_MANUFACTURE_DATE Handle = 0xC026100A + ERROR_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER Handle = 0xC0262000 + ERROR_GRAPHICS_INSUFFICIENT_DMA_BUFFER Handle = 0xC0262001 + ERROR_GRAPHICS_INVALID_DISPLAY_ADAPTER Handle = 0xC0262002 + ERROR_GRAPHICS_ADAPTER_WAS_RESET Handle = 0xC0262003 + ERROR_GRAPHICS_INVALID_DRIVER_MODEL Handle = 0xC0262004 + ERROR_GRAPHICS_PRESENT_MODE_CHANGED Handle = 0xC0262005 + ERROR_GRAPHICS_PRESENT_OCCLUDED Handle = 0xC0262006 + ERROR_GRAPHICS_PRESENT_DENIED Handle = 0xC0262007 + ERROR_GRAPHICS_CANNOTCOLORCONVERT Handle = 0xC0262008 + ERROR_GRAPHICS_DRIVER_MISMATCH Handle = 0xC0262009 + ERROR_GRAPHICS_PARTIAL_DATA_POPULATED Handle = 0x4026200A + ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED Handle = 0xC026200B + ERROR_GRAPHICS_PRESENT_UNOCCLUDED Handle = 0xC026200C + ERROR_GRAPHICS_WINDOWDC_NOT_AVAILABLE Handle = 0xC026200D + ERROR_GRAPHICS_WINDOWLESS_PRESENT_DISABLED Handle = 0xC026200E + ERROR_GRAPHICS_PRESENT_INVALID_WINDOW Handle = 0xC026200F + ERROR_GRAPHICS_PRESENT_BUFFER_NOT_BOUND Handle = 0xC0262010 + ERROR_GRAPHICS_VAIL_STATE_CHANGED Handle = 0xC0262011 + ERROR_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN Handle = 0xC0262012 + ERROR_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED Handle = 0xC0262013 + ERROR_GRAPHICS_NO_VIDEO_MEMORY Handle = 0xC0262100 + ERROR_GRAPHICS_CANT_LOCK_MEMORY Handle = 0xC0262101 + ERROR_GRAPHICS_ALLOCATION_BUSY Handle = 0xC0262102 + ERROR_GRAPHICS_TOO_MANY_REFERENCES Handle = 0xC0262103 + ERROR_GRAPHICS_TRY_AGAIN_LATER Handle = 0xC0262104 + ERROR_GRAPHICS_TRY_AGAIN_NOW Handle = 0xC0262105 + ERROR_GRAPHICS_ALLOCATION_INVALID Handle = 0xC0262106 + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE Handle = 0xC0262107 + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED Handle = 0xC0262108 + ERROR_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION Handle = 0xC0262109 + ERROR_GRAPHICS_INVALID_ALLOCATION_USAGE Handle = 0xC0262110 + ERROR_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION Handle = 0xC0262111 + ERROR_GRAPHICS_ALLOCATION_CLOSED Handle = 0xC0262112 + ERROR_GRAPHICS_INVALID_ALLOCATION_INSTANCE Handle = 0xC0262113 + ERROR_GRAPHICS_INVALID_ALLOCATION_HANDLE Handle = 0xC0262114 + ERROR_GRAPHICS_WRONG_ALLOCATION_DEVICE Handle = 0xC0262115 + ERROR_GRAPHICS_ALLOCATION_CONTENT_LOST Handle = 0xC0262116 + ERROR_GRAPHICS_GPU_EXCEPTION_ON_DEVICE Handle = 0xC0262200 + ERROR_GRAPHICS_SKIP_ALLOCATION_PREPARATION Handle = 0x40262201 + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY Handle = 0xC0262300 + ERROR_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED Handle = 0xC0262301 + ERROR_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED Handle = 0xC0262302 + ERROR_GRAPHICS_INVALID_VIDPN Handle = 0xC0262303 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE Handle = 0xC0262304 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET Handle = 0xC0262305 + ERROR_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED Handle = 0xC0262306 + ERROR_GRAPHICS_MODE_NOT_PINNED Handle = 0x00262307 + ERROR_GRAPHICS_INVALID_VIDPN_SOURCEMODESET Handle = 0xC0262308 + ERROR_GRAPHICS_INVALID_VIDPN_TARGETMODESET Handle = 0xC0262309 + ERROR_GRAPHICS_INVALID_FREQUENCY Handle = 0xC026230A + ERROR_GRAPHICS_INVALID_ACTIVE_REGION Handle = 0xC026230B + ERROR_GRAPHICS_INVALID_TOTAL_REGION Handle = 0xC026230C + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE Handle = 0xC0262310 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE Handle = 0xC0262311 + ERROR_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET Handle = 0xC0262312 + ERROR_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY Handle = 0xC0262313 + ERROR_GRAPHICS_MODE_ALREADY_IN_MODESET Handle = 0xC0262314 + ERROR_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET Handle = 0xC0262315 + ERROR_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET Handle = 0xC0262316 + ERROR_GRAPHICS_SOURCE_ALREADY_IN_SET Handle = 0xC0262317 + ERROR_GRAPHICS_TARGET_ALREADY_IN_SET Handle = 0xC0262318 + ERROR_GRAPHICS_INVALID_VIDPN_PRESENT_PATH Handle = 0xC0262319 + ERROR_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY Handle = 0xC026231A + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET Handle = 0xC026231B + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE Handle = 0xC026231C + ERROR_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET Handle = 0xC026231D + ERROR_GRAPHICS_NO_PREFERRED_MODE Handle = 0x0026231E + ERROR_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET Handle = 0xC026231F + ERROR_GRAPHICS_STALE_MODESET Handle = 0xC0262320 + ERROR_GRAPHICS_INVALID_MONITOR_SOURCEMODESET Handle = 0xC0262321 + ERROR_GRAPHICS_INVALID_MONITOR_SOURCE_MODE Handle = 0xC0262322 + ERROR_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN Handle = 0xC0262323 + ERROR_GRAPHICS_MODE_ID_MUST_BE_UNIQUE Handle = 0xC0262324 + ERROR_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION Handle = 0xC0262325 + ERROR_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES Handle = 0xC0262326 + ERROR_GRAPHICS_PATH_NOT_IN_TOPOLOGY Handle = 0xC0262327 + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE Handle = 0xC0262328 + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET Handle = 0xC0262329 + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTORSET Handle = 0xC026232A + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTOR Handle = 0xC026232B + ERROR_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET Handle = 0xC026232C + ERROR_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET Handle = 0xC026232D + ERROR_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE Handle = 0xC026232E + ERROR_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE Handle = 0xC026232F + ERROR_GRAPHICS_RESOURCES_NOT_RELATED Handle = 0xC0262330 + ERROR_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE Handle = 0xC0262331 + ERROR_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE Handle = 0xC0262332 + ERROR_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET Handle = 0xC0262333 + ERROR_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER Handle = 0xC0262334 + ERROR_GRAPHICS_NO_VIDPNMGR Handle = 0xC0262335 + ERROR_GRAPHICS_NO_ACTIVE_VIDPN Handle = 0xC0262336 + ERROR_GRAPHICS_STALE_VIDPN_TOPOLOGY Handle = 0xC0262337 + ERROR_GRAPHICS_MONITOR_NOT_CONNECTED Handle = 0xC0262338 + ERROR_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY Handle = 0xC0262339 + ERROR_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE Handle = 0xC026233A + ERROR_GRAPHICS_INVALID_VISIBLEREGION_SIZE Handle = 0xC026233B + ERROR_GRAPHICS_INVALID_STRIDE Handle = 0xC026233C + ERROR_GRAPHICS_INVALID_PIXELFORMAT Handle = 0xC026233D + ERROR_GRAPHICS_INVALID_COLORBASIS Handle = 0xC026233E + ERROR_GRAPHICS_INVALID_PIXELVALUEACCESSMODE Handle = 0xC026233F + ERROR_GRAPHICS_TARGET_NOT_IN_TOPOLOGY Handle = 0xC0262340 + ERROR_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT Handle = 0xC0262341 + ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0xC0262342 + ERROR_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN Handle = 0xC0262343 + ERROR_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL Handle = 0xC0262344 + ERROR_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION Handle = 0xC0262345 + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED Handle = 0xC0262346 + ERROR_GRAPHICS_INVALID_GAMMA_RAMP Handle = 0xC0262347 + ERROR_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED Handle = 0xC0262348 + ERROR_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED Handle = 0xC0262349 + ERROR_GRAPHICS_MODE_NOT_IN_MODESET Handle = 0xC026234A + ERROR_GRAPHICS_DATASET_IS_EMPTY Handle = 0x0026234B + ERROR_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET Handle = 0x0026234C + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON Handle = 0xC026234D + ERROR_GRAPHICS_INVALID_PATH_CONTENT_TYPE Handle = 0xC026234E + ERROR_GRAPHICS_INVALID_COPYPROTECTION_TYPE Handle = 0xC026234F + ERROR_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS Handle = 0xC0262350 + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED Handle = 0x00262351 + ERROR_GRAPHICS_INVALID_SCANLINE_ORDERING Handle = 0xC0262352 + ERROR_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED Handle = 0xC0262353 + ERROR_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS Handle = 0xC0262354 + ERROR_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT Handle = 0xC0262355 + ERROR_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM Handle = 0xC0262356 + ERROR_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN Handle = 0xC0262357 + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT Handle = 0xC0262358 + ERROR_GRAPHICS_MAX_NUM_PATHS_REACHED Handle = 0xC0262359 + ERROR_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION Handle = 0xC026235A + ERROR_GRAPHICS_INVALID_CLIENT_TYPE Handle = 0xC026235B + ERROR_GRAPHICS_CLIENTVIDPN_NOT_SET Handle = 0xC026235C + ERROR_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED Handle = 0xC0262400 + ERROR_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED Handle = 0xC0262401 + ERROR_GRAPHICS_UNKNOWN_CHILD_STATUS Handle = 0x4026242F + ERROR_GRAPHICS_NOT_A_LINKED_ADAPTER Handle = 0xC0262430 + ERROR_GRAPHICS_LEADLINK_NOT_ENUMERATED Handle = 0xC0262431 + ERROR_GRAPHICS_CHAINLINKS_NOT_ENUMERATED Handle = 0xC0262432 + ERROR_GRAPHICS_ADAPTER_CHAIN_NOT_READY Handle = 0xC0262433 + ERROR_GRAPHICS_CHAINLINKS_NOT_STARTED Handle = 0xC0262434 + ERROR_GRAPHICS_CHAINLINKS_NOT_POWERED_ON Handle = 0xC0262435 + ERROR_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE Handle = 0xC0262436 + ERROR_GRAPHICS_LEADLINK_START_DEFERRED Handle = 0x40262437 + ERROR_GRAPHICS_NOT_POST_DEVICE_DRIVER Handle = 0xC0262438 + ERROR_GRAPHICS_POLLING_TOO_FREQUENTLY Handle = 0x40262439 + ERROR_GRAPHICS_START_DEFERRED Handle = 0x4026243A + ERROR_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED Handle = 0xC026243B + ERROR_GRAPHICS_DEPENDABLE_CHILD_STATUS Handle = 0x4026243C + ERROR_GRAPHICS_OPM_NOT_SUPPORTED Handle = 0xC0262500 + ERROR_GRAPHICS_COPP_NOT_SUPPORTED Handle = 0xC0262501 + ERROR_GRAPHICS_UAB_NOT_SUPPORTED Handle = 0xC0262502 + ERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS Handle = 0xC0262503 + ERROR_GRAPHICS_OPM_NO_VIDEO_OUTPUTS_EXIST Handle = 0xC0262505 + ERROR_GRAPHICS_OPM_INTERNAL_ERROR Handle = 0xC026250B + ERROR_GRAPHICS_OPM_INVALID_HANDLE Handle = 0xC026250C + ERROR_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH Handle = 0xC026250E + ERROR_GRAPHICS_OPM_SPANNING_MODE_ENABLED Handle = 0xC026250F + ERROR_GRAPHICS_OPM_THEATER_MODE_ENABLED Handle = 0xC0262510 + ERROR_GRAPHICS_PVP_HFS_FAILED Handle = 0xC0262511 + ERROR_GRAPHICS_OPM_INVALID_SRM Handle = 0xC0262512 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP Handle = 0xC0262513 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP Handle = 0xC0262514 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA Handle = 0xC0262515 + ERROR_GRAPHICS_OPM_HDCP_SRM_NEVER_SET Handle = 0xC0262516 + ERROR_GRAPHICS_OPM_RESOLUTION_TOO_HIGH Handle = 0xC0262517 + ERROR_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE Handle = 0xC0262518 + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_NO_LONGER_EXISTS Handle = 0xC026251A + ERROR_GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS Handle = 0xC026251B + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS Handle = 0xC026251C + ERROR_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST Handle = 0xC026251D + ERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR Handle = 0xC026251E + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS Handle = 0xC026251F + ERROR_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED Handle = 0xC0262520 + ERROR_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST Handle = 0xC0262521 + ERROR_GRAPHICS_I2C_NOT_SUPPORTED Handle = 0xC0262580 + ERROR_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST Handle = 0xC0262581 + ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA Handle = 0xC0262582 + ERROR_GRAPHICS_I2C_ERROR_RECEIVING_DATA Handle = 0xC0262583 + ERROR_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED Handle = 0xC0262584 + ERROR_GRAPHICS_DDCCI_INVALID_DATA Handle = 0xC0262585 + ERROR_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE Handle = 0xC0262586 + ERROR_GRAPHICS_MCA_INVALID_CAPABILITIES_STRING Handle = 0xC0262587 + ERROR_GRAPHICS_MCA_INTERNAL_ERROR Handle = 0xC0262588 + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND Handle = 0xC0262589 + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH Handle = 0xC026258A + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM Handle = 0xC026258B + ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE Handle = 0xC026258C + ERROR_GRAPHICS_MONITOR_NO_LONGER_EXISTS Handle = 0xC026258D + ERROR_GRAPHICS_DDCCI_CURRENT_CURRENT_VALUE_GREATER_THAN_MAXIMUM_VALUE Handle = 0xC02625D8 + ERROR_GRAPHICS_MCA_INVALID_VCP_VERSION Handle = 0xC02625D9 + ERROR_GRAPHICS_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION Handle = 0xC02625DA + ERROR_GRAPHICS_MCA_MCCS_VERSION_MISMATCH Handle = 0xC02625DB + ERROR_GRAPHICS_MCA_UNSUPPORTED_MCCS_VERSION Handle = 0xC02625DC + ERROR_GRAPHICS_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED Handle = 0xC02625DE + ERROR_GRAPHICS_MCA_UNSUPPORTED_COLOR_TEMPERATURE Handle = 0xC02625DF + ERROR_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED Handle = 0xC02625E0 + ERROR_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME Handle = 0xC02625E1 + ERROR_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP Handle = 0xC02625E2 + ERROR_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED Handle = 0xC02625E3 + ERROR_GRAPHICS_INVALID_POINTER Handle = 0xC02625E4 + ERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE Handle = 0xC02625E5 + ERROR_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL Handle = 0xC02625E6 + ERROR_GRAPHICS_INTERNAL_ERROR Handle = 0xC02625E7 + ERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS Handle = 0xC02605E8 + NAP_E_INVALID_PACKET Handle = 0x80270001 + NAP_E_MISSING_SOH Handle = 0x80270002 + NAP_E_CONFLICTING_ID Handle = 0x80270003 + NAP_E_NO_CACHED_SOH Handle = 0x80270004 + NAP_E_STILL_BOUND Handle = 0x80270005 + NAP_E_NOT_REGISTERED Handle = 0x80270006 + NAP_E_NOT_INITIALIZED Handle = 0x80270007 + NAP_E_MISMATCHED_ID Handle = 0x80270008 + NAP_E_NOT_PENDING Handle = 0x80270009 + NAP_E_ID_NOT_FOUND Handle = 0x8027000A + NAP_E_MAXSIZE_TOO_SMALL Handle = 0x8027000B + NAP_E_SERVICE_NOT_RUNNING Handle = 0x8027000C + NAP_S_CERT_ALREADY_PRESENT Handle = 0x0027000D + NAP_E_ENTITY_DISABLED Handle = 0x8027000E + NAP_E_NETSH_GROUPPOLICY_ERROR Handle = 0x8027000F + NAP_E_TOO_MANY_CALLS Handle = 0x80270010 + NAP_E_SHV_CONFIG_EXISTED Handle = 0x80270011 + NAP_E_SHV_CONFIG_NOT_FOUND Handle = 0x80270012 + NAP_E_SHV_TIMEOUT Handle = 0x80270013 + TPM_E_ERROR_MASK Handle = 0x80280000 + TPM_E_AUTHFAIL Handle = 0x80280001 + TPM_E_BADINDEX Handle = 0x80280002 + TPM_E_BAD_PARAMETER Handle = 0x80280003 + TPM_E_AUDITFAILURE Handle = 0x80280004 + TPM_E_CLEAR_DISABLED Handle = 0x80280005 + TPM_E_DEACTIVATED Handle = 0x80280006 + TPM_E_DISABLED Handle = 0x80280007 + TPM_E_DISABLED_CMD Handle = 0x80280008 + TPM_E_FAIL Handle = 0x80280009 + TPM_E_BAD_ORDINAL Handle = 0x8028000A + TPM_E_INSTALL_DISABLED Handle = 0x8028000B + TPM_E_INVALID_KEYHANDLE Handle = 0x8028000C + TPM_E_KEYNOTFOUND Handle = 0x8028000D + TPM_E_INAPPROPRIATE_ENC Handle = 0x8028000E + TPM_E_MIGRATEFAIL Handle = 0x8028000F + TPM_E_INVALID_PCR_INFO Handle = 0x80280010 + TPM_E_NOSPACE Handle = 0x80280011 + TPM_E_NOSRK Handle = 0x80280012 + TPM_E_NOTSEALED_BLOB Handle = 0x80280013 + TPM_E_OWNER_SET Handle = 0x80280014 + TPM_E_RESOURCES Handle = 0x80280015 + TPM_E_SHORTRANDOM Handle = 0x80280016 + TPM_E_SIZE Handle = 0x80280017 + TPM_E_WRONGPCRVAL Handle = 0x80280018 + TPM_E_BAD_PARAM_SIZE Handle = 0x80280019 + TPM_E_SHA_THREAD Handle = 0x8028001A + TPM_E_SHA_ERROR Handle = 0x8028001B + TPM_E_FAILEDSELFTEST Handle = 0x8028001C + TPM_E_AUTH2FAIL Handle = 0x8028001D + TPM_E_BADTAG Handle = 0x8028001E + TPM_E_IOERROR Handle = 0x8028001F + TPM_E_ENCRYPT_ERROR Handle = 0x80280020 + TPM_E_DECRYPT_ERROR Handle = 0x80280021 + TPM_E_INVALID_AUTHHANDLE Handle = 0x80280022 + TPM_E_NO_ENDORSEMENT Handle = 0x80280023 + TPM_E_INVALID_KEYUSAGE Handle = 0x80280024 + TPM_E_WRONG_ENTITYTYPE Handle = 0x80280025 + TPM_E_INVALID_POSTINIT Handle = 0x80280026 + TPM_E_INAPPROPRIATE_SIG Handle = 0x80280027 + TPM_E_BAD_KEY_PROPERTY Handle = 0x80280028 + TPM_E_BAD_MIGRATION Handle = 0x80280029 + TPM_E_BAD_SCHEME Handle = 0x8028002A + TPM_E_BAD_DATASIZE Handle = 0x8028002B + TPM_E_BAD_MODE Handle = 0x8028002C + TPM_E_BAD_PRESENCE Handle = 0x8028002D + TPM_E_BAD_VERSION Handle = 0x8028002E + TPM_E_NO_WRAP_TRANSPORT Handle = 0x8028002F + TPM_E_AUDITFAIL_UNSUCCESSFUL Handle = 0x80280030 + TPM_E_AUDITFAIL_SUCCESSFUL Handle = 0x80280031 + TPM_E_NOTRESETABLE Handle = 0x80280032 + TPM_E_NOTLOCAL Handle = 0x80280033 + TPM_E_BAD_TYPE Handle = 0x80280034 + TPM_E_INVALID_RESOURCE Handle = 0x80280035 + TPM_E_NOTFIPS Handle = 0x80280036 + TPM_E_INVALID_FAMILY Handle = 0x80280037 + TPM_E_NO_NV_PERMISSION Handle = 0x80280038 + TPM_E_REQUIRES_SIGN Handle = 0x80280039 + TPM_E_KEY_NOTSUPPORTED Handle = 0x8028003A + TPM_E_AUTH_CONFLICT Handle = 0x8028003B + TPM_E_AREA_LOCKED Handle = 0x8028003C + TPM_E_BAD_LOCALITY Handle = 0x8028003D + TPM_E_READ_ONLY Handle = 0x8028003E + TPM_E_PER_NOWRITE Handle = 0x8028003F + TPM_E_FAMILYCOUNT Handle = 0x80280040 + TPM_E_WRITE_LOCKED Handle = 0x80280041 + TPM_E_BAD_ATTRIBUTES Handle = 0x80280042 + TPM_E_INVALID_STRUCTURE Handle = 0x80280043 + TPM_E_KEY_OWNER_CONTROL Handle = 0x80280044 + TPM_E_BAD_COUNTER Handle = 0x80280045 + TPM_E_NOT_FULLWRITE Handle = 0x80280046 + TPM_E_CONTEXT_GAP Handle = 0x80280047 + TPM_E_MAXNVWRITES Handle = 0x80280048 + TPM_E_NOOPERATOR Handle = 0x80280049 + TPM_E_RESOURCEMISSING Handle = 0x8028004A + TPM_E_DELEGATE_LOCK Handle = 0x8028004B + TPM_E_DELEGATE_FAMILY Handle = 0x8028004C + TPM_E_DELEGATE_ADMIN Handle = 0x8028004D + TPM_E_TRANSPORT_NOTEXCLUSIVE Handle = 0x8028004E + TPM_E_OWNER_CONTROL Handle = 0x8028004F + TPM_E_DAA_RESOURCES Handle = 0x80280050 + TPM_E_DAA_INPUT_DATA0 Handle = 0x80280051 + TPM_E_DAA_INPUT_DATA1 Handle = 0x80280052 + TPM_E_DAA_ISSUER_SETTINGS Handle = 0x80280053 + TPM_E_DAA_TPM_SETTINGS Handle = 0x80280054 + TPM_E_DAA_STAGE Handle = 0x80280055 + TPM_E_DAA_ISSUER_VALIDITY Handle = 0x80280056 + TPM_E_DAA_WRONG_W Handle = 0x80280057 + TPM_E_BAD_HANDLE Handle = 0x80280058 + TPM_E_BAD_DELEGATE Handle = 0x80280059 + TPM_E_BADCONTEXT Handle = 0x8028005A + TPM_E_TOOMANYCONTEXTS Handle = 0x8028005B + TPM_E_MA_TICKET_SIGNATURE Handle = 0x8028005C + TPM_E_MA_DESTINATION Handle = 0x8028005D + TPM_E_MA_SOURCE Handle = 0x8028005E + TPM_E_MA_AUTHORITY Handle = 0x8028005F + TPM_E_PERMANENTEK Handle = 0x80280061 + TPM_E_BAD_SIGNATURE Handle = 0x80280062 + TPM_E_NOCONTEXTSPACE Handle = 0x80280063 + TPM_20_E_ASYMMETRIC Handle = 0x80280081 + TPM_20_E_ATTRIBUTES Handle = 0x80280082 + TPM_20_E_HASH Handle = 0x80280083 + TPM_20_E_VALUE Handle = 0x80280084 + TPM_20_E_HIERARCHY Handle = 0x80280085 + TPM_20_E_KEY_SIZE Handle = 0x80280087 + TPM_20_E_MGF Handle = 0x80280088 + TPM_20_E_MODE Handle = 0x80280089 + TPM_20_E_TYPE Handle = 0x8028008A + TPM_20_E_HANDLE Handle = 0x8028008B + TPM_20_E_KDF Handle = 0x8028008C + TPM_20_E_RANGE Handle = 0x8028008D + TPM_20_E_AUTH_FAIL Handle = 0x8028008E + TPM_20_E_NONCE Handle = 0x8028008F + TPM_20_E_PP Handle = 0x80280090 + TPM_20_E_SCHEME Handle = 0x80280092 + TPM_20_E_SIZE Handle = 0x80280095 + TPM_20_E_SYMMETRIC Handle = 0x80280096 + TPM_20_E_TAG Handle = 0x80280097 + TPM_20_E_SELECTOR Handle = 0x80280098 + TPM_20_E_INSUFFICIENT Handle = 0x8028009A + TPM_20_E_SIGNATURE Handle = 0x8028009B + TPM_20_E_KEY Handle = 0x8028009C + TPM_20_E_POLICY_FAIL Handle = 0x8028009D + TPM_20_E_INTEGRITY Handle = 0x8028009F + TPM_20_E_TICKET Handle = 0x802800A0 + TPM_20_E_RESERVED_BITS Handle = 0x802800A1 + TPM_20_E_BAD_AUTH Handle = 0x802800A2 + TPM_20_E_EXPIRED Handle = 0x802800A3 + TPM_20_E_POLICY_CC Handle = 0x802800A4 + TPM_20_E_BINDING Handle = 0x802800A5 + TPM_20_E_CURVE Handle = 0x802800A6 + TPM_20_E_ECC_POINT Handle = 0x802800A7 + TPM_20_E_INITIALIZE Handle = 0x80280100 + TPM_20_E_FAILURE Handle = 0x80280101 + TPM_20_E_SEQUENCE Handle = 0x80280103 + TPM_20_E_PRIVATE Handle = 0x8028010B + TPM_20_E_HMAC Handle = 0x80280119 + TPM_20_E_DISABLED Handle = 0x80280120 + TPM_20_E_EXCLUSIVE Handle = 0x80280121 + TPM_20_E_ECC_CURVE Handle = 0x80280123 + TPM_20_E_AUTH_TYPE Handle = 0x80280124 + TPM_20_E_AUTH_MISSING Handle = 0x80280125 + TPM_20_E_POLICY Handle = 0x80280126 + TPM_20_E_PCR Handle = 0x80280127 + TPM_20_E_PCR_CHANGED Handle = 0x80280128 + TPM_20_E_UPGRADE Handle = 0x8028012D + TPM_20_E_TOO_MANY_CONTEXTS Handle = 0x8028012E + TPM_20_E_AUTH_UNAVAILABLE Handle = 0x8028012F + TPM_20_E_REBOOT Handle = 0x80280130 + TPM_20_E_UNBALANCED Handle = 0x80280131 + TPM_20_E_COMMAND_SIZE Handle = 0x80280142 + TPM_20_E_COMMAND_CODE Handle = 0x80280143 + TPM_20_E_AUTHSIZE Handle = 0x80280144 + TPM_20_E_AUTH_CONTEXT Handle = 0x80280145 + TPM_20_E_NV_RANGE Handle = 0x80280146 + TPM_20_E_NV_SIZE Handle = 0x80280147 + TPM_20_E_NV_LOCKED Handle = 0x80280148 + TPM_20_E_NV_AUTHORIZATION Handle = 0x80280149 + TPM_20_E_NV_UNINITIALIZED Handle = 0x8028014A + TPM_20_E_NV_SPACE Handle = 0x8028014B + TPM_20_E_NV_DEFINED Handle = 0x8028014C + TPM_20_E_BAD_CONTEXT Handle = 0x80280150 + TPM_20_E_CPHASH Handle = 0x80280151 + TPM_20_E_PARENT Handle = 0x80280152 + TPM_20_E_NEEDS_TEST Handle = 0x80280153 + TPM_20_E_NO_RESULT Handle = 0x80280154 + TPM_20_E_SENSITIVE Handle = 0x80280155 + TPM_E_COMMAND_BLOCKED Handle = 0x80280400 + TPM_E_INVALID_HANDLE Handle = 0x80280401 + TPM_E_DUPLICATE_VHANDLE Handle = 0x80280402 + TPM_E_EMBEDDED_COMMAND_BLOCKED Handle = 0x80280403 + TPM_E_EMBEDDED_COMMAND_UNSUPPORTED Handle = 0x80280404 + TPM_E_RETRY Handle = 0x80280800 + TPM_E_NEEDS_SELFTEST Handle = 0x80280801 + TPM_E_DOING_SELFTEST Handle = 0x80280802 + TPM_E_DEFEND_LOCK_RUNNING Handle = 0x80280803 + TPM_20_E_CONTEXT_GAP Handle = 0x80280901 + TPM_20_E_OBJECT_MEMORY Handle = 0x80280902 + TPM_20_E_SESSION_MEMORY Handle = 0x80280903 + TPM_20_E_MEMORY Handle = 0x80280904 + TPM_20_E_SESSION_HANDLES Handle = 0x80280905 + TPM_20_E_OBJECT_HANDLES Handle = 0x80280906 + TPM_20_E_LOCALITY Handle = 0x80280907 + TPM_20_E_YIELDED Handle = 0x80280908 + TPM_20_E_CANCELED Handle = 0x80280909 + TPM_20_E_TESTING Handle = 0x8028090A + TPM_20_E_NV_RATE Handle = 0x80280920 + TPM_20_E_LOCKOUT Handle = 0x80280921 + TPM_20_E_RETRY Handle = 0x80280922 + TPM_20_E_NV_UNAVAILABLE Handle = 0x80280923 + TBS_E_INTERNAL_ERROR Handle = 0x80284001 + TBS_E_BAD_PARAMETER Handle = 0x80284002 + TBS_E_INVALID_OUTPUT_POINTER Handle = 0x80284003 + TBS_E_INVALID_CONTEXT Handle = 0x80284004 + TBS_E_INSUFFICIENT_BUFFER Handle = 0x80284005 + TBS_E_IOERROR Handle = 0x80284006 + TBS_E_INVALID_CONTEXT_PARAM Handle = 0x80284007 + TBS_E_SERVICE_NOT_RUNNING Handle = 0x80284008 + TBS_E_TOO_MANY_TBS_CONTEXTS Handle = 0x80284009 + TBS_E_TOO_MANY_RESOURCES Handle = 0x8028400A + TBS_E_SERVICE_START_PENDING Handle = 0x8028400B + TBS_E_PPI_NOT_SUPPORTED Handle = 0x8028400C + TBS_E_COMMAND_CANCELED Handle = 0x8028400D + TBS_E_BUFFER_TOO_LARGE Handle = 0x8028400E + TBS_E_TPM_NOT_FOUND Handle = 0x8028400F + TBS_E_SERVICE_DISABLED Handle = 0x80284010 + TBS_E_NO_EVENT_LOG Handle = 0x80284011 + TBS_E_ACCESS_DENIED Handle = 0x80284012 + TBS_E_PROVISIONING_NOT_ALLOWED Handle = 0x80284013 + TBS_E_PPI_FUNCTION_UNSUPPORTED Handle = 0x80284014 + TBS_E_OWNERAUTH_NOT_FOUND Handle = 0x80284015 + TBS_E_PROVISIONING_INCOMPLETE Handle = 0x80284016 + TPMAPI_E_INVALID_STATE Handle = 0x80290100 + TPMAPI_E_NOT_ENOUGH_DATA Handle = 0x80290101 + TPMAPI_E_TOO_MUCH_DATA Handle = 0x80290102 + TPMAPI_E_INVALID_OUTPUT_POINTER Handle = 0x80290103 + TPMAPI_E_INVALID_PARAMETER Handle = 0x80290104 + TPMAPI_E_OUT_OF_MEMORY Handle = 0x80290105 + TPMAPI_E_BUFFER_TOO_SMALL Handle = 0x80290106 + TPMAPI_E_INTERNAL_ERROR Handle = 0x80290107 + TPMAPI_E_ACCESS_DENIED Handle = 0x80290108 + TPMAPI_E_AUTHORIZATION_FAILED Handle = 0x80290109 + TPMAPI_E_INVALID_CONTEXT_HANDLE Handle = 0x8029010A + TPMAPI_E_TBS_COMMUNICATION_ERROR Handle = 0x8029010B + TPMAPI_E_TPM_COMMAND_ERROR Handle = 0x8029010C + TPMAPI_E_MESSAGE_TOO_LARGE Handle = 0x8029010D + TPMAPI_E_INVALID_ENCODING Handle = 0x8029010E + TPMAPI_E_INVALID_KEY_SIZE Handle = 0x8029010F + TPMAPI_E_ENCRYPTION_FAILED Handle = 0x80290110 + TPMAPI_E_INVALID_KEY_PARAMS Handle = 0x80290111 + TPMAPI_E_INVALID_MIGRATION_AUTHORIZATION_BLOB Handle = 0x80290112 + TPMAPI_E_INVALID_PCR_INDEX Handle = 0x80290113 + TPMAPI_E_INVALID_DELEGATE_BLOB Handle = 0x80290114 + TPMAPI_E_INVALID_CONTEXT_PARAMS Handle = 0x80290115 + TPMAPI_E_INVALID_KEY_BLOB Handle = 0x80290116 + TPMAPI_E_INVALID_PCR_DATA Handle = 0x80290117 + TPMAPI_E_INVALID_OWNER_AUTH Handle = 0x80290118 + TPMAPI_E_FIPS_RNG_CHECK_FAILED Handle = 0x80290119 + TPMAPI_E_EMPTY_TCG_LOG Handle = 0x8029011A + TPMAPI_E_INVALID_TCG_LOG_ENTRY Handle = 0x8029011B + TPMAPI_E_TCG_SEPARATOR_ABSENT Handle = 0x8029011C + TPMAPI_E_TCG_INVALID_DIGEST_ENTRY Handle = 0x8029011D + TPMAPI_E_POLICY_DENIES_OPERATION Handle = 0x8029011E + TPMAPI_E_NV_BITS_NOT_DEFINED Handle = 0x8029011F + TPMAPI_E_NV_BITS_NOT_READY Handle = 0x80290120 + TPMAPI_E_SEALING_KEY_NOT_AVAILABLE Handle = 0x80290121 + TPMAPI_E_NO_AUTHORIZATION_CHAIN_FOUND Handle = 0x80290122 + TPMAPI_E_SVN_COUNTER_NOT_AVAILABLE Handle = 0x80290123 + TPMAPI_E_OWNER_AUTH_NOT_NULL Handle = 0x80290124 + TPMAPI_E_ENDORSEMENT_AUTH_NOT_NULL Handle = 0x80290125 + TPMAPI_E_AUTHORIZATION_REVOKED Handle = 0x80290126 + TPMAPI_E_MALFORMED_AUTHORIZATION_KEY Handle = 0x80290127 + TPMAPI_E_AUTHORIZING_KEY_NOT_SUPPORTED Handle = 0x80290128 + TPMAPI_E_INVALID_AUTHORIZATION_SIGNATURE Handle = 0x80290129 + TPMAPI_E_MALFORMED_AUTHORIZATION_POLICY Handle = 0x8029012A + TPMAPI_E_MALFORMED_AUTHORIZATION_OTHER Handle = 0x8029012B + TPMAPI_E_SEALING_KEY_CHANGED Handle = 0x8029012C + TBSIMP_E_BUFFER_TOO_SMALL Handle = 0x80290200 + TBSIMP_E_CLEANUP_FAILED Handle = 0x80290201 + TBSIMP_E_INVALID_CONTEXT_HANDLE Handle = 0x80290202 + TBSIMP_E_INVALID_CONTEXT_PARAM Handle = 0x80290203 + TBSIMP_E_TPM_ERROR Handle = 0x80290204 + TBSIMP_E_HASH_BAD_KEY Handle = 0x80290205 + TBSIMP_E_DUPLICATE_VHANDLE Handle = 0x80290206 + TBSIMP_E_INVALID_OUTPUT_POINTER Handle = 0x80290207 + TBSIMP_E_INVALID_PARAMETER Handle = 0x80290208 + TBSIMP_E_RPC_INIT_FAILED Handle = 0x80290209 + TBSIMP_E_SCHEDULER_NOT_RUNNING Handle = 0x8029020A + TBSIMP_E_COMMAND_CANCELED Handle = 0x8029020B + TBSIMP_E_OUT_OF_MEMORY Handle = 0x8029020C + TBSIMP_E_LIST_NO_MORE_ITEMS Handle = 0x8029020D + TBSIMP_E_LIST_NOT_FOUND Handle = 0x8029020E + TBSIMP_E_NOT_ENOUGH_SPACE Handle = 0x8029020F + TBSIMP_E_NOT_ENOUGH_TPM_CONTEXTS Handle = 0x80290210 + TBSIMP_E_COMMAND_FAILED Handle = 0x80290211 + TBSIMP_E_UNKNOWN_ORDINAL Handle = 0x80290212 + TBSIMP_E_RESOURCE_EXPIRED Handle = 0x80290213 + TBSIMP_E_INVALID_RESOURCE Handle = 0x80290214 + TBSIMP_E_NOTHING_TO_UNLOAD Handle = 0x80290215 + TBSIMP_E_HASH_TABLE_FULL Handle = 0x80290216 + TBSIMP_E_TOO_MANY_TBS_CONTEXTS Handle = 0x80290217 + TBSIMP_E_TOO_MANY_RESOURCES Handle = 0x80290218 + TBSIMP_E_PPI_NOT_SUPPORTED Handle = 0x80290219 + TBSIMP_E_TPM_INCOMPATIBLE Handle = 0x8029021A + TBSIMP_E_NO_EVENT_LOG Handle = 0x8029021B + TPM_E_PPI_ACPI_FAILURE Handle = 0x80290300 + TPM_E_PPI_USER_ABORT Handle = 0x80290301 + TPM_E_PPI_BIOS_FAILURE Handle = 0x80290302 + TPM_E_PPI_NOT_SUPPORTED Handle = 0x80290303 + TPM_E_PPI_BLOCKED_IN_BIOS Handle = 0x80290304 + TPM_E_PCP_ERROR_MASK Handle = 0x80290400 + TPM_E_PCP_DEVICE_NOT_READY Handle = 0x80290401 + TPM_E_PCP_INVALID_HANDLE Handle = 0x80290402 + TPM_E_PCP_INVALID_PARAMETER Handle = 0x80290403 + TPM_E_PCP_FLAG_NOT_SUPPORTED Handle = 0x80290404 + TPM_E_PCP_NOT_SUPPORTED Handle = 0x80290405 + TPM_E_PCP_BUFFER_TOO_SMALL Handle = 0x80290406 + TPM_E_PCP_INTERNAL_ERROR Handle = 0x80290407 + TPM_E_PCP_AUTHENTICATION_FAILED Handle = 0x80290408 + TPM_E_PCP_AUTHENTICATION_IGNORED Handle = 0x80290409 + TPM_E_PCP_POLICY_NOT_FOUND Handle = 0x8029040A + TPM_E_PCP_PROFILE_NOT_FOUND Handle = 0x8029040B + TPM_E_PCP_VALIDATION_FAILED Handle = 0x8029040C + TPM_E_PCP_WRONG_PARENT Handle = 0x8029040E + TPM_E_KEY_NOT_LOADED Handle = 0x8029040F + TPM_E_NO_KEY_CERTIFICATION Handle = 0x80290410 + TPM_E_KEY_NOT_FINALIZED Handle = 0x80290411 + TPM_E_ATTESTATION_CHALLENGE_NOT_SET Handle = 0x80290412 + TPM_E_NOT_PCR_BOUND Handle = 0x80290413 + TPM_E_KEY_ALREADY_FINALIZED Handle = 0x80290414 + TPM_E_KEY_USAGE_POLICY_NOT_SUPPORTED Handle = 0x80290415 + TPM_E_KEY_USAGE_POLICY_INVALID Handle = 0x80290416 + TPM_E_SOFT_KEY_ERROR Handle = 0x80290417 + TPM_E_KEY_NOT_AUTHENTICATED Handle = 0x80290418 + TPM_E_PCP_KEY_NOT_AIK Handle = 0x80290419 + TPM_E_KEY_NOT_SIGNING_KEY Handle = 0x8029041A + TPM_E_LOCKED_OUT Handle = 0x8029041B + TPM_E_CLAIM_TYPE_NOT_SUPPORTED Handle = 0x8029041C + TPM_E_VERSION_NOT_SUPPORTED Handle = 0x8029041D + TPM_E_BUFFER_LENGTH_MISMATCH Handle = 0x8029041E + TPM_E_PCP_IFX_RSA_KEY_CREATION_BLOCKED Handle = 0x8029041F + TPM_E_PCP_TICKET_MISSING Handle = 0x80290420 + TPM_E_PCP_RAW_POLICY_NOT_SUPPORTED Handle = 0x80290421 + TPM_E_PCP_KEY_HANDLE_INVALIDATED Handle = 0x80290422 + TPM_E_PCP_UNSUPPORTED_PSS_SALT Handle = 0x40290423 + TPM_E_ZERO_EXHAUST_ENABLED Handle = 0x80290500 + PLA_E_DCS_NOT_FOUND Handle = 0x80300002 + PLA_E_DCS_IN_USE Handle = 0x803000AA + PLA_E_TOO_MANY_FOLDERS Handle = 0x80300045 + PLA_E_NO_MIN_DISK Handle = 0x80300070 + PLA_E_DCS_ALREADY_EXISTS Handle = 0x803000B7 + PLA_S_PROPERTY_IGNORED Handle = 0x00300100 + PLA_E_PROPERTY_CONFLICT Handle = 0x80300101 + PLA_E_DCS_SINGLETON_REQUIRED Handle = 0x80300102 + PLA_E_CREDENTIALS_REQUIRED Handle = 0x80300103 + PLA_E_DCS_NOT_RUNNING Handle = 0x80300104 + PLA_E_CONFLICT_INCL_EXCL_API Handle = 0x80300105 + PLA_E_NETWORK_EXE_NOT_VALID Handle = 0x80300106 + PLA_E_EXE_ALREADY_CONFIGURED Handle = 0x80300107 + PLA_E_EXE_PATH_NOT_VALID Handle = 0x80300108 + PLA_E_DC_ALREADY_EXISTS Handle = 0x80300109 + PLA_E_DCS_START_WAIT_TIMEOUT Handle = 0x8030010A + PLA_E_DC_START_WAIT_TIMEOUT Handle = 0x8030010B + PLA_E_REPORT_WAIT_TIMEOUT Handle = 0x8030010C + PLA_E_NO_DUPLICATES Handle = 0x8030010D + PLA_E_EXE_FULL_PATH_REQUIRED Handle = 0x8030010E + PLA_E_INVALID_SESSION_NAME Handle = 0x8030010F + PLA_E_PLA_CHANNEL_NOT_ENABLED Handle = 0x80300110 + PLA_E_TASKSCHED_CHANNEL_NOT_ENABLED Handle = 0x80300111 + PLA_E_RULES_MANAGER_FAILED Handle = 0x80300112 + PLA_E_CABAPI_FAILURE Handle = 0x80300113 + FVE_E_LOCKED_VOLUME Handle = 0x80310000 + FVE_E_NOT_ENCRYPTED Handle = 0x80310001 + FVE_E_NO_TPM_BIOS Handle = 0x80310002 + FVE_E_NO_MBR_METRIC Handle = 0x80310003 + FVE_E_NO_BOOTSECTOR_METRIC Handle = 0x80310004 + FVE_E_NO_BOOTMGR_METRIC Handle = 0x80310005 + FVE_E_WRONG_BOOTMGR Handle = 0x80310006 + FVE_E_SECURE_KEY_REQUIRED Handle = 0x80310007 + FVE_E_NOT_ACTIVATED Handle = 0x80310008 + FVE_E_ACTION_NOT_ALLOWED Handle = 0x80310009 + FVE_E_AD_SCHEMA_NOT_INSTALLED Handle = 0x8031000A + FVE_E_AD_INVALID_DATATYPE Handle = 0x8031000B + FVE_E_AD_INVALID_DATASIZE Handle = 0x8031000C + FVE_E_AD_NO_VALUES Handle = 0x8031000D + FVE_E_AD_ATTR_NOT_SET Handle = 0x8031000E + FVE_E_AD_GUID_NOT_FOUND Handle = 0x8031000F + FVE_E_BAD_INFORMATION Handle = 0x80310010 + FVE_E_TOO_SMALL Handle = 0x80310011 + FVE_E_SYSTEM_VOLUME Handle = 0x80310012 + FVE_E_FAILED_WRONG_FS Handle = 0x80310013 + FVE_E_BAD_PARTITION_SIZE Handle = 0x80310014 + FVE_E_NOT_SUPPORTED Handle = 0x80310015 + FVE_E_BAD_DATA Handle = 0x80310016 + FVE_E_VOLUME_NOT_BOUND Handle = 0x80310017 + FVE_E_TPM_NOT_OWNED Handle = 0x80310018 + FVE_E_NOT_DATA_VOLUME Handle = 0x80310019 + FVE_E_AD_INSUFFICIENT_BUFFER Handle = 0x8031001A + FVE_E_CONV_READ Handle = 0x8031001B + FVE_E_CONV_WRITE Handle = 0x8031001C + FVE_E_KEY_REQUIRED Handle = 0x8031001D + FVE_E_CLUSTERING_NOT_SUPPORTED Handle = 0x8031001E + FVE_E_VOLUME_BOUND_ALREADY Handle = 0x8031001F + FVE_E_OS_NOT_PROTECTED Handle = 0x80310020 + FVE_E_PROTECTION_DISABLED Handle = 0x80310021 + FVE_E_RECOVERY_KEY_REQUIRED Handle = 0x80310022 + FVE_E_FOREIGN_VOLUME Handle = 0x80310023 + FVE_E_OVERLAPPED_UPDATE Handle = 0x80310024 + FVE_E_TPM_SRK_AUTH_NOT_ZERO Handle = 0x80310025 + FVE_E_FAILED_SECTOR_SIZE Handle = 0x80310026 + FVE_E_FAILED_AUTHENTICATION Handle = 0x80310027 + FVE_E_NOT_OS_VOLUME Handle = 0x80310028 + FVE_E_AUTOUNLOCK_ENABLED Handle = 0x80310029 + FVE_E_WRONG_BOOTSECTOR Handle = 0x8031002A + FVE_E_WRONG_SYSTEM_FS Handle = 0x8031002B + FVE_E_POLICY_PASSWORD_REQUIRED Handle = 0x8031002C + FVE_E_CANNOT_SET_FVEK_ENCRYPTED Handle = 0x8031002D + FVE_E_CANNOT_ENCRYPT_NO_KEY Handle = 0x8031002E + FVE_E_BOOTABLE_CDDVD Handle = 0x80310030 + FVE_E_PROTECTOR_EXISTS Handle = 0x80310031 + FVE_E_RELATIVE_PATH Handle = 0x80310032 + FVE_E_PROTECTOR_NOT_FOUND Handle = 0x80310033 + FVE_E_INVALID_KEY_FORMAT Handle = 0x80310034 + FVE_E_INVALID_PASSWORD_FORMAT Handle = 0x80310035 + FVE_E_FIPS_RNG_CHECK_FAILED Handle = 0x80310036 + FVE_E_FIPS_PREVENTS_RECOVERY_PASSWORD Handle = 0x80310037 + FVE_E_FIPS_PREVENTS_EXTERNAL_KEY_EXPORT Handle = 0x80310038 + FVE_E_NOT_DECRYPTED Handle = 0x80310039 + FVE_E_INVALID_PROTECTOR_TYPE Handle = 0x8031003A + FVE_E_NO_PROTECTORS_TO_TEST Handle = 0x8031003B + FVE_E_KEYFILE_NOT_FOUND Handle = 0x8031003C + FVE_E_KEYFILE_INVALID Handle = 0x8031003D + FVE_E_KEYFILE_NO_VMK Handle = 0x8031003E + FVE_E_TPM_DISABLED Handle = 0x8031003F + FVE_E_NOT_ALLOWED_IN_SAFE_MODE Handle = 0x80310040 + FVE_E_TPM_INVALID_PCR Handle = 0x80310041 + FVE_E_TPM_NO_VMK Handle = 0x80310042 + FVE_E_PIN_INVALID Handle = 0x80310043 + FVE_E_AUTH_INVALID_APPLICATION Handle = 0x80310044 + FVE_E_AUTH_INVALID_CONFIG Handle = 0x80310045 + FVE_E_FIPS_DISABLE_PROTECTION_NOT_ALLOWED Handle = 0x80310046 + FVE_E_FS_NOT_EXTENDED Handle = 0x80310047 + FVE_E_FIRMWARE_TYPE_NOT_SUPPORTED Handle = 0x80310048 + FVE_E_NO_LICENSE Handle = 0x80310049 + FVE_E_NOT_ON_STACK Handle = 0x8031004A + FVE_E_FS_MOUNTED Handle = 0x8031004B + FVE_E_TOKEN_NOT_IMPERSONATED Handle = 0x8031004C + FVE_E_DRY_RUN_FAILED Handle = 0x8031004D + FVE_E_REBOOT_REQUIRED Handle = 0x8031004E + FVE_E_DEBUGGER_ENABLED Handle = 0x8031004F + FVE_E_RAW_ACCESS Handle = 0x80310050 + FVE_E_RAW_BLOCKED Handle = 0x80310051 + FVE_E_BCD_APPLICATIONS_PATH_INCORRECT Handle = 0x80310052 + FVE_E_NOT_ALLOWED_IN_VERSION Handle = 0x80310053 + FVE_E_NO_AUTOUNLOCK_MASTER_KEY Handle = 0x80310054 + FVE_E_MOR_FAILED Handle = 0x80310055 + FVE_E_HIDDEN_VOLUME Handle = 0x80310056 + FVE_E_TRANSIENT_STATE Handle = 0x80310057 + FVE_E_PUBKEY_NOT_ALLOWED Handle = 0x80310058 + FVE_E_VOLUME_HANDLE_OPEN Handle = 0x80310059 + FVE_E_NO_FEATURE_LICENSE Handle = 0x8031005A + FVE_E_INVALID_STARTUP_OPTIONS Handle = 0x8031005B + FVE_E_POLICY_RECOVERY_PASSWORD_NOT_ALLOWED Handle = 0x8031005C + FVE_E_POLICY_RECOVERY_PASSWORD_REQUIRED Handle = 0x8031005D + FVE_E_POLICY_RECOVERY_KEY_NOT_ALLOWED Handle = 0x8031005E + FVE_E_POLICY_RECOVERY_KEY_REQUIRED Handle = 0x8031005F + FVE_E_POLICY_STARTUP_PIN_NOT_ALLOWED Handle = 0x80310060 + FVE_E_POLICY_STARTUP_PIN_REQUIRED Handle = 0x80310061 + FVE_E_POLICY_STARTUP_KEY_NOT_ALLOWED Handle = 0x80310062 + FVE_E_POLICY_STARTUP_KEY_REQUIRED Handle = 0x80310063 + FVE_E_POLICY_STARTUP_PIN_KEY_NOT_ALLOWED Handle = 0x80310064 + FVE_E_POLICY_STARTUP_PIN_KEY_REQUIRED Handle = 0x80310065 + FVE_E_POLICY_STARTUP_TPM_NOT_ALLOWED Handle = 0x80310066 + FVE_E_POLICY_STARTUP_TPM_REQUIRED Handle = 0x80310067 + FVE_E_POLICY_INVALID_PIN_LENGTH Handle = 0x80310068 + FVE_E_KEY_PROTECTOR_NOT_SUPPORTED Handle = 0x80310069 + FVE_E_POLICY_PASSPHRASE_NOT_ALLOWED Handle = 0x8031006A + FVE_E_POLICY_PASSPHRASE_REQUIRED Handle = 0x8031006B + FVE_E_FIPS_PREVENTS_PASSPHRASE Handle = 0x8031006C + FVE_E_OS_VOLUME_PASSPHRASE_NOT_ALLOWED Handle = 0x8031006D + FVE_E_INVALID_BITLOCKER_OID Handle = 0x8031006E + FVE_E_VOLUME_TOO_SMALL Handle = 0x8031006F + FVE_E_DV_NOT_SUPPORTED_ON_FS Handle = 0x80310070 + FVE_E_DV_NOT_ALLOWED_BY_GP Handle = 0x80310071 + FVE_E_POLICY_USER_CERTIFICATE_NOT_ALLOWED Handle = 0x80310072 + FVE_E_POLICY_USER_CERTIFICATE_REQUIRED Handle = 0x80310073 + FVE_E_POLICY_USER_CERT_MUST_BE_HW Handle = 0x80310074 + FVE_E_POLICY_USER_CONFIGURE_FDV_AUTOUNLOCK_NOT_ALLOWED Handle = 0x80310075 + FVE_E_POLICY_USER_CONFIGURE_RDV_AUTOUNLOCK_NOT_ALLOWED Handle = 0x80310076 + FVE_E_POLICY_USER_CONFIGURE_RDV_NOT_ALLOWED Handle = 0x80310077 + FVE_E_POLICY_USER_ENABLE_RDV_NOT_ALLOWED Handle = 0x80310078 + FVE_E_POLICY_USER_DISABLE_RDV_NOT_ALLOWED Handle = 0x80310079 + FVE_E_POLICY_INVALID_PASSPHRASE_LENGTH Handle = 0x80310080 + FVE_E_POLICY_PASSPHRASE_TOO_SIMPLE Handle = 0x80310081 + FVE_E_RECOVERY_PARTITION Handle = 0x80310082 + FVE_E_POLICY_CONFLICT_FDV_RK_OFF_AUK_ON Handle = 0x80310083 + FVE_E_POLICY_CONFLICT_RDV_RK_OFF_AUK_ON Handle = 0x80310084 + FVE_E_NON_BITLOCKER_OID Handle = 0x80310085 + FVE_E_POLICY_PROHIBITS_SELFSIGNED Handle = 0x80310086 + FVE_E_POLICY_CONFLICT_RO_AND_STARTUP_KEY_REQUIRED Handle = 0x80310087 + FVE_E_CONV_RECOVERY_FAILED Handle = 0x80310088 + FVE_E_VIRTUALIZED_SPACE_TOO_BIG Handle = 0x80310089 + FVE_E_POLICY_CONFLICT_OSV_RP_OFF_ADB_ON Handle = 0x80310090 + FVE_E_POLICY_CONFLICT_FDV_RP_OFF_ADB_ON Handle = 0x80310091 + FVE_E_POLICY_CONFLICT_RDV_RP_OFF_ADB_ON Handle = 0x80310092 + FVE_E_NON_BITLOCKER_KU Handle = 0x80310093 + FVE_E_PRIVATEKEY_AUTH_FAILED Handle = 0x80310094 + FVE_E_REMOVAL_OF_DRA_FAILED Handle = 0x80310095 + FVE_E_OPERATION_NOT_SUPPORTED_ON_VISTA_VOLUME Handle = 0x80310096 + FVE_E_CANT_LOCK_AUTOUNLOCK_ENABLED_VOLUME Handle = 0x80310097 + FVE_E_FIPS_HASH_KDF_NOT_ALLOWED Handle = 0x80310098 + FVE_E_ENH_PIN_INVALID Handle = 0x80310099 + FVE_E_INVALID_PIN_CHARS Handle = 0x8031009A + FVE_E_INVALID_DATUM_TYPE Handle = 0x8031009B + FVE_E_EFI_ONLY Handle = 0x8031009C + FVE_E_MULTIPLE_NKP_CERTS Handle = 0x8031009D + FVE_E_REMOVAL_OF_NKP_FAILED Handle = 0x8031009E + FVE_E_INVALID_NKP_CERT Handle = 0x8031009F + FVE_E_NO_EXISTING_PIN Handle = 0x803100A0 + FVE_E_PROTECTOR_CHANGE_PIN_MISMATCH Handle = 0x803100A1 + FVE_E_PIN_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED Handle = 0x803100A2 + FVE_E_PROTECTOR_CHANGE_MAX_PIN_CHANGE_ATTEMPTS_REACHED Handle = 0x803100A3 + FVE_E_POLICY_PASSPHRASE_REQUIRES_ASCII Handle = 0x803100A4 + FVE_E_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE Handle = 0x803100A5 + FVE_E_WIPE_NOT_ALLOWED_ON_TP_STORAGE Handle = 0x803100A6 + FVE_E_KEY_LENGTH_NOT_SUPPORTED_BY_EDRIVE Handle = 0x803100A7 + FVE_E_NO_EXISTING_PASSPHRASE Handle = 0x803100A8 + FVE_E_PROTECTOR_CHANGE_PASSPHRASE_MISMATCH Handle = 0x803100A9 + FVE_E_PASSPHRASE_TOO_LONG Handle = 0x803100AA + FVE_E_NO_PASSPHRASE_WITH_TPM Handle = 0x803100AB + FVE_E_NO_TPM_WITH_PASSPHRASE Handle = 0x803100AC + FVE_E_NOT_ALLOWED_ON_CSV_STACK Handle = 0x803100AD + FVE_E_NOT_ALLOWED_ON_CLUSTER Handle = 0x803100AE + FVE_E_EDRIVE_NO_FAILOVER_TO_SW Handle = 0x803100AF + FVE_E_EDRIVE_BAND_IN_USE Handle = 0x803100B0 + FVE_E_EDRIVE_DISALLOWED_BY_GP Handle = 0x803100B1 + FVE_E_EDRIVE_INCOMPATIBLE_VOLUME Handle = 0x803100B2 + FVE_E_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING Handle = 0x803100B3 + FVE_E_EDRIVE_DV_NOT_SUPPORTED Handle = 0x803100B4 + FVE_E_NO_PREBOOT_KEYBOARD_DETECTED Handle = 0x803100B5 + FVE_E_NO_PREBOOT_KEYBOARD_OR_WINRE_DETECTED Handle = 0x803100B6 + FVE_E_POLICY_REQUIRES_STARTUP_PIN_ON_TOUCH_DEVICE Handle = 0x803100B7 + FVE_E_POLICY_REQUIRES_RECOVERY_PASSWORD_ON_TOUCH_DEVICE Handle = 0x803100B8 + FVE_E_WIPE_CANCEL_NOT_APPLICABLE Handle = 0x803100B9 + FVE_E_SECUREBOOT_DISABLED Handle = 0x803100BA + FVE_E_SECUREBOOT_CONFIGURATION_INVALID Handle = 0x803100BB + FVE_E_EDRIVE_DRY_RUN_FAILED Handle = 0x803100BC + FVE_E_SHADOW_COPY_PRESENT Handle = 0x803100BD + FVE_E_POLICY_INVALID_ENHANCED_BCD_SETTINGS Handle = 0x803100BE + FVE_E_EDRIVE_INCOMPATIBLE_FIRMWARE Handle = 0x803100BF + FVE_E_PROTECTOR_CHANGE_MAX_PASSPHRASE_CHANGE_ATTEMPTS_REACHED Handle = 0x803100C0 + FVE_E_PASSPHRASE_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED Handle = 0x803100C1 + FVE_E_LIVEID_ACCOUNT_SUSPENDED Handle = 0x803100C2 + FVE_E_LIVEID_ACCOUNT_BLOCKED Handle = 0x803100C3 + FVE_E_NOT_PROVISIONED_ON_ALL_VOLUMES Handle = 0x803100C4 + FVE_E_DE_FIXED_DATA_NOT_SUPPORTED Handle = 0x803100C5 + FVE_E_DE_HARDWARE_NOT_COMPLIANT Handle = 0x803100C6 + FVE_E_DE_WINRE_NOT_CONFIGURED Handle = 0x803100C7 + FVE_E_DE_PROTECTION_SUSPENDED Handle = 0x803100C8 + FVE_E_DE_OS_VOLUME_NOT_PROTECTED Handle = 0x803100C9 + FVE_E_DE_DEVICE_LOCKEDOUT Handle = 0x803100CA + FVE_E_DE_PROTECTION_NOT_YET_ENABLED Handle = 0x803100CB + FVE_E_INVALID_PIN_CHARS_DETAILED Handle = 0x803100CC + FVE_E_DEVICE_LOCKOUT_COUNTER_UNAVAILABLE Handle = 0x803100CD + FVE_E_DEVICELOCKOUT_COUNTER_MISMATCH Handle = 0x803100CE + FVE_E_BUFFER_TOO_LARGE Handle = 0x803100CF + FVE_E_NO_SUCH_CAPABILITY_ON_TARGET Handle = 0x803100D0 + FVE_E_DE_PREVENTED_FOR_OS Handle = 0x803100D1 + FVE_E_DE_VOLUME_OPTED_OUT Handle = 0x803100D2 + FVE_E_DE_VOLUME_NOT_SUPPORTED Handle = 0x803100D3 + FVE_E_EOW_NOT_SUPPORTED_IN_VERSION Handle = 0x803100D4 + FVE_E_ADBACKUP_NOT_ENABLED Handle = 0x803100D5 + FVE_E_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT Handle = 0x803100D6 + FVE_E_NOT_DE_VOLUME Handle = 0x803100D7 + FVE_E_PROTECTION_CANNOT_BE_DISABLED Handle = 0x803100D8 + FVE_E_OSV_KSR_NOT_ALLOWED Handle = 0x803100D9 + FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_OS_DRIVE Handle = 0x803100DA + FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_FIXED_DRIVE Handle = 0x803100DB + FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_REMOVABLE_DRIVE Handle = 0x803100DC + FVE_E_KEY_ROTATION_NOT_SUPPORTED Handle = 0x803100DD + FVE_E_EXECUTE_REQUEST_SENT_TOO_SOON Handle = 0x803100DE + FVE_E_KEY_ROTATION_NOT_ENABLED Handle = 0x803100DF + FVE_E_DEVICE_NOT_JOINED Handle = 0x803100E0 + FWP_E_CALLOUT_NOT_FOUND Handle = 0x80320001 + FWP_E_CONDITION_NOT_FOUND Handle = 0x80320002 + FWP_E_FILTER_NOT_FOUND Handle = 0x80320003 + FWP_E_LAYER_NOT_FOUND Handle = 0x80320004 + FWP_E_PROVIDER_NOT_FOUND Handle = 0x80320005 + FWP_E_PROVIDER_CONTEXT_NOT_FOUND Handle = 0x80320006 + FWP_E_SUBLAYER_NOT_FOUND Handle = 0x80320007 + FWP_E_NOT_FOUND Handle = 0x80320008 + FWP_E_ALREADY_EXISTS Handle = 0x80320009 + FWP_E_IN_USE Handle = 0x8032000A + FWP_E_DYNAMIC_SESSION_IN_PROGRESS Handle = 0x8032000B + FWP_E_WRONG_SESSION Handle = 0x8032000C + FWP_E_NO_TXN_IN_PROGRESS Handle = 0x8032000D + FWP_E_TXN_IN_PROGRESS Handle = 0x8032000E + FWP_E_TXN_ABORTED Handle = 0x8032000F + FWP_E_SESSION_ABORTED Handle = 0x80320010 + FWP_E_INCOMPATIBLE_TXN Handle = 0x80320011 + FWP_E_TIMEOUT Handle = 0x80320012 + FWP_E_NET_EVENTS_DISABLED Handle = 0x80320013 + FWP_E_INCOMPATIBLE_LAYER Handle = 0x80320014 + FWP_E_KM_CLIENTS_ONLY Handle = 0x80320015 + FWP_E_LIFETIME_MISMATCH Handle = 0x80320016 + FWP_E_BUILTIN_OBJECT Handle = 0x80320017 + FWP_E_TOO_MANY_CALLOUTS Handle = 0x80320018 + FWP_E_NOTIFICATION_DROPPED Handle = 0x80320019 + FWP_E_TRAFFIC_MISMATCH Handle = 0x8032001A + FWP_E_INCOMPATIBLE_SA_STATE Handle = 0x8032001B + FWP_E_NULL_POINTER Handle = 0x8032001C + FWP_E_INVALID_ENUMERATOR Handle = 0x8032001D + FWP_E_INVALID_FLAGS Handle = 0x8032001E + FWP_E_INVALID_NET_MASK Handle = 0x8032001F + FWP_E_INVALID_RANGE Handle = 0x80320020 + FWP_E_INVALID_INTERVAL Handle = 0x80320021 + FWP_E_ZERO_LENGTH_ARRAY Handle = 0x80320022 + FWP_E_NULL_DISPLAY_NAME Handle = 0x80320023 + FWP_E_INVALID_ACTION_TYPE Handle = 0x80320024 + FWP_E_INVALID_WEIGHT Handle = 0x80320025 + FWP_E_MATCH_TYPE_MISMATCH Handle = 0x80320026 + FWP_E_TYPE_MISMATCH Handle = 0x80320027 + FWP_E_OUT_OF_BOUNDS Handle = 0x80320028 + FWP_E_RESERVED Handle = 0x80320029 + FWP_E_DUPLICATE_CONDITION Handle = 0x8032002A + FWP_E_DUPLICATE_KEYMOD Handle = 0x8032002B + FWP_E_ACTION_INCOMPATIBLE_WITH_LAYER Handle = 0x8032002C + FWP_E_ACTION_INCOMPATIBLE_WITH_SUBLAYER Handle = 0x8032002D + FWP_E_CONTEXT_INCOMPATIBLE_WITH_LAYER Handle = 0x8032002E + FWP_E_CONTEXT_INCOMPATIBLE_WITH_CALLOUT Handle = 0x8032002F + FWP_E_INCOMPATIBLE_AUTH_METHOD Handle = 0x80320030 + FWP_E_INCOMPATIBLE_DH_GROUP Handle = 0x80320031 + FWP_E_EM_NOT_SUPPORTED Handle = 0x80320032 + FWP_E_NEVER_MATCH Handle = 0x80320033 + FWP_E_PROVIDER_CONTEXT_MISMATCH Handle = 0x80320034 + FWP_E_INVALID_PARAMETER Handle = 0x80320035 + FWP_E_TOO_MANY_SUBLAYERS Handle = 0x80320036 + FWP_E_CALLOUT_NOTIFICATION_FAILED Handle = 0x80320037 + FWP_E_INVALID_AUTH_TRANSFORM Handle = 0x80320038 + FWP_E_INVALID_CIPHER_TRANSFORM Handle = 0x80320039 + FWP_E_INCOMPATIBLE_CIPHER_TRANSFORM Handle = 0x8032003A + FWP_E_INVALID_TRANSFORM_COMBINATION Handle = 0x8032003B + FWP_E_DUPLICATE_AUTH_METHOD Handle = 0x8032003C + FWP_E_INVALID_TUNNEL_ENDPOINT Handle = 0x8032003D + FWP_E_L2_DRIVER_NOT_READY Handle = 0x8032003E + FWP_E_KEY_DICTATOR_ALREADY_REGISTERED Handle = 0x8032003F + FWP_E_KEY_DICTATION_INVALID_KEYING_MATERIAL Handle = 0x80320040 + FWP_E_CONNECTIONS_DISABLED Handle = 0x80320041 + FWP_E_INVALID_DNS_NAME Handle = 0x80320042 + FWP_E_STILL_ON Handle = 0x80320043 + FWP_E_IKEEXT_NOT_RUNNING Handle = 0x80320044 + FWP_E_DROP_NOICMP Handle = 0x80320104 + WS_S_ASYNC Handle = 0x003D0000 + WS_S_END Handle = 0x003D0001 + WS_E_INVALID_FORMAT Handle = 0x803D0000 + WS_E_OBJECT_FAULTED Handle = 0x803D0001 + WS_E_NUMERIC_OVERFLOW Handle = 0x803D0002 + WS_E_INVALID_OPERATION Handle = 0x803D0003 + WS_E_OPERATION_ABORTED Handle = 0x803D0004 + WS_E_ENDPOINT_ACCESS_DENIED Handle = 0x803D0005 + WS_E_OPERATION_TIMED_OUT Handle = 0x803D0006 + WS_E_OPERATION_ABANDONED Handle = 0x803D0007 + WS_E_QUOTA_EXCEEDED Handle = 0x803D0008 + WS_E_NO_TRANSLATION_AVAILABLE Handle = 0x803D0009 + WS_E_SECURITY_VERIFICATION_FAILURE Handle = 0x803D000A + WS_E_ADDRESS_IN_USE Handle = 0x803D000B + WS_E_ADDRESS_NOT_AVAILABLE Handle = 0x803D000C + WS_E_ENDPOINT_NOT_FOUND Handle = 0x803D000D + WS_E_ENDPOINT_NOT_AVAILABLE Handle = 0x803D000E + WS_E_ENDPOINT_FAILURE Handle = 0x803D000F + WS_E_ENDPOINT_UNREACHABLE Handle = 0x803D0010 + WS_E_ENDPOINT_ACTION_NOT_SUPPORTED Handle = 0x803D0011 + WS_E_ENDPOINT_TOO_BUSY Handle = 0x803D0012 + WS_E_ENDPOINT_FAULT_RECEIVED Handle = 0x803D0013 + WS_E_ENDPOINT_DISCONNECTED Handle = 0x803D0014 + WS_E_PROXY_FAILURE Handle = 0x803D0015 + WS_E_PROXY_ACCESS_DENIED Handle = 0x803D0016 + WS_E_NOT_SUPPORTED Handle = 0x803D0017 + WS_E_PROXY_REQUIRES_BASIC_AUTH Handle = 0x803D0018 + WS_E_PROXY_REQUIRES_DIGEST_AUTH Handle = 0x803D0019 + WS_E_PROXY_REQUIRES_NTLM_AUTH Handle = 0x803D001A + WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH Handle = 0x803D001B + WS_E_SERVER_REQUIRES_BASIC_AUTH Handle = 0x803D001C + WS_E_SERVER_REQUIRES_DIGEST_AUTH Handle = 0x803D001D + WS_E_SERVER_REQUIRES_NTLM_AUTH Handle = 0x803D001E + WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH Handle = 0x803D001F + WS_E_INVALID_ENDPOINT_URL Handle = 0x803D0020 + WS_E_OTHER Handle = 0x803D0021 + WS_E_SECURITY_TOKEN_EXPIRED Handle = 0x803D0022 + WS_E_SECURITY_SYSTEM_FAILURE Handle = 0x803D0023 + ERROR_NDIS_INTERFACE_CLOSING syscall.Errno = 0x80340002 + ERROR_NDIS_BAD_VERSION syscall.Errno = 0x80340004 + ERROR_NDIS_BAD_CHARACTERISTICS syscall.Errno = 0x80340005 + ERROR_NDIS_ADAPTER_NOT_FOUND syscall.Errno = 0x80340006 + ERROR_NDIS_OPEN_FAILED syscall.Errno = 0x80340007 + ERROR_NDIS_DEVICE_FAILED syscall.Errno = 0x80340008 + ERROR_NDIS_MULTICAST_FULL syscall.Errno = 0x80340009 + ERROR_NDIS_MULTICAST_EXISTS syscall.Errno = 0x8034000A + ERROR_NDIS_MULTICAST_NOT_FOUND syscall.Errno = 0x8034000B + ERROR_NDIS_REQUEST_ABORTED syscall.Errno = 0x8034000C + ERROR_NDIS_RESET_IN_PROGRESS syscall.Errno = 0x8034000D + ERROR_NDIS_NOT_SUPPORTED syscall.Errno = 0x803400BB + ERROR_NDIS_INVALID_PACKET syscall.Errno = 0x8034000F + ERROR_NDIS_ADAPTER_NOT_READY syscall.Errno = 0x80340011 + ERROR_NDIS_INVALID_LENGTH syscall.Errno = 0x80340014 + ERROR_NDIS_INVALID_DATA syscall.Errno = 0x80340015 + ERROR_NDIS_BUFFER_TOO_SHORT syscall.Errno = 0x80340016 + ERROR_NDIS_INVALID_OID syscall.Errno = 0x80340017 + ERROR_NDIS_ADAPTER_REMOVED syscall.Errno = 0x80340018 + ERROR_NDIS_UNSUPPORTED_MEDIA syscall.Errno = 0x80340019 + ERROR_NDIS_GROUP_ADDRESS_IN_USE syscall.Errno = 0x8034001A + ERROR_NDIS_FILE_NOT_FOUND syscall.Errno = 0x8034001B + ERROR_NDIS_ERROR_READING_FILE syscall.Errno = 0x8034001C + ERROR_NDIS_ALREADY_MAPPED syscall.Errno = 0x8034001D + ERROR_NDIS_RESOURCE_CONFLICT syscall.Errno = 0x8034001E + ERROR_NDIS_MEDIA_DISCONNECTED syscall.Errno = 0x8034001F + ERROR_NDIS_INVALID_ADDRESS syscall.Errno = 0x80340022 + ERROR_NDIS_INVALID_DEVICE_REQUEST syscall.Errno = 0x80340010 + ERROR_NDIS_PAUSED syscall.Errno = 0x8034002A + ERROR_NDIS_INTERFACE_NOT_FOUND syscall.Errno = 0x8034002B + ERROR_NDIS_UNSUPPORTED_REVISION syscall.Errno = 0x8034002C + ERROR_NDIS_INVALID_PORT syscall.Errno = 0x8034002D + ERROR_NDIS_INVALID_PORT_STATE syscall.Errno = 0x8034002E + ERROR_NDIS_LOW_POWER_STATE syscall.Errno = 0x8034002F + ERROR_NDIS_REINIT_REQUIRED syscall.Errno = 0x80340030 + ERROR_NDIS_NO_QUEUES syscall.Errno = 0x80340031 + ERROR_NDIS_DOT11_AUTO_CONFIG_ENABLED syscall.Errno = 0x80342000 + ERROR_NDIS_DOT11_MEDIA_IN_USE syscall.Errno = 0x80342001 + ERROR_NDIS_DOT11_POWER_STATE_INVALID syscall.Errno = 0x80342002 + ERROR_NDIS_PM_WOL_PATTERN_LIST_FULL syscall.Errno = 0x80342003 + ERROR_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL syscall.Errno = 0x80342004 + ERROR_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE syscall.Errno = 0x80342005 + ERROR_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE syscall.Errno = 0x80342006 + ERROR_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED syscall.Errno = 0x80342007 + ERROR_NDIS_DOT11_AP_BAND_NOT_ALLOWED syscall.Errno = 0x80342008 + ERROR_NDIS_INDICATION_REQUIRED syscall.Errno = 0x00340001 + ERROR_NDIS_OFFLOAD_POLICY syscall.Errno = 0xC034100F + ERROR_NDIS_OFFLOAD_CONNECTION_REJECTED syscall.Errno = 0xC0341012 + ERROR_NDIS_OFFLOAD_PATH_REJECTED syscall.Errno = 0xC0341013 + ERROR_HV_INVALID_HYPERCALL_CODE syscall.Errno = 0xC0350002 + ERROR_HV_INVALID_HYPERCALL_INPUT syscall.Errno = 0xC0350003 + ERROR_HV_INVALID_ALIGNMENT syscall.Errno = 0xC0350004 + ERROR_HV_INVALID_PARAMETER syscall.Errno = 0xC0350005 + ERROR_HV_ACCESS_DENIED syscall.Errno = 0xC0350006 + ERROR_HV_INVALID_PARTITION_STATE syscall.Errno = 0xC0350007 + ERROR_HV_OPERATION_DENIED syscall.Errno = 0xC0350008 + ERROR_HV_UNKNOWN_PROPERTY syscall.Errno = 0xC0350009 + ERROR_HV_PROPERTY_VALUE_OUT_OF_RANGE syscall.Errno = 0xC035000A + ERROR_HV_INSUFFICIENT_MEMORY syscall.Errno = 0xC035000B + ERROR_HV_PARTITION_TOO_DEEP syscall.Errno = 0xC035000C + ERROR_HV_INVALID_PARTITION_ID syscall.Errno = 0xC035000D + ERROR_HV_INVALID_VP_INDEX syscall.Errno = 0xC035000E + ERROR_HV_INVALID_PORT_ID syscall.Errno = 0xC0350011 + ERROR_HV_INVALID_CONNECTION_ID syscall.Errno = 0xC0350012 + ERROR_HV_INSUFFICIENT_BUFFERS syscall.Errno = 0xC0350013 + ERROR_HV_NOT_ACKNOWLEDGED syscall.Errno = 0xC0350014 + ERROR_HV_INVALID_VP_STATE syscall.Errno = 0xC0350015 + ERROR_HV_ACKNOWLEDGED syscall.Errno = 0xC0350016 + ERROR_HV_INVALID_SAVE_RESTORE_STATE syscall.Errno = 0xC0350017 + ERROR_HV_INVALID_SYNIC_STATE syscall.Errno = 0xC0350018 + ERROR_HV_OBJECT_IN_USE syscall.Errno = 0xC0350019 + ERROR_HV_INVALID_PROXIMITY_DOMAIN_INFO syscall.Errno = 0xC035001A + ERROR_HV_NO_DATA syscall.Errno = 0xC035001B + ERROR_HV_INACTIVE syscall.Errno = 0xC035001C + ERROR_HV_NO_RESOURCES syscall.Errno = 0xC035001D + ERROR_HV_FEATURE_UNAVAILABLE syscall.Errno = 0xC035001E + ERROR_HV_INSUFFICIENT_BUFFER syscall.Errno = 0xC0350033 + ERROR_HV_INSUFFICIENT_DEVICE_DOMAINS syscall.Errno = 0xC0350038 + ERROR_HV_CPUID_FEATURE_VALIDATION syscall.Errno = 0xC035003C + ERROR_HV_CPUID_XSAVE_FEATURE_VALIDATION syscall.Errno = 0xC035003D + ERROR_HV_PROCESSOR_STARTUP_TIMEOUT syscall.Errno = 0xC035003E + ERROR_HV_SMX_ENABLED syscall.Errno = 0xC035003F + ERROR_HV_INVALID_LP_INDEX syscall.Errno = 0xC0350041 + ERROR_HV_INVALID_REGISTER_VALUE syscall.Errno = 0xC0350050 + ERROR_HV_INVALID_VTL_STATE syscall.Errno = 0xC0350051 + ERROR_HV_NX_NOT_DETECTED syscall.Errno = 0xC0350055 + ERROR_HV_INVALID_DEVICE_ID syscall.Errno = 0xC0350057 + ERROR_HV_INVALID_DEVICE_STATE syscall.Errno = 0xC0350058 + ERROR_HV_PENDING_PAGE_REQUESTS syscall.Errno = 0x00350059 + ERROR_HV_PAGE_REQUEST_INVALID syscall.Errno = 0xC0350060 + ERROR_HV_INVALID_CPU_GROUP_ID syscall.Errno = 0xC035006F + ERROR_HV_INVALID_CPU_GROUP_STATE syscall.Errno = 0xC0350070 + ERROR_HV_OPERATION_FAILED syscall.Errno = 0xC0350071 + ERROR_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE syscall.Errno = 0xC0350072 + ERROR_HV_INSUFFICIENT_ROOT_MEMORY syscall.Errno = 0xC0350073 + ERROR_HV_NOT_PRESENT syscall.Errno = 0xC0351000 + ERROR_VID_DUPLICATE_HANDLER syscall.Errno = 0xC0370001 + ERROR_VID_TOO_MANY_HANDLERS syscall.Errno = 0xC0370002 + ERROR_VID_QUEUE_FULL syscall.Errno = 0xC0370003 + ERROR_VID_HANDLER_NOT_PRESENT syscall.Errno = 0xC0370004 + ERROR_VID_INVALID_OBJECT_NAME syscall.Errno = 0xC0370005 + ERROR_VID_PARTITION_NAME_TOO_LONG syscall.Errno = 0xC0370006 + ERROR_VID_MESSAGE_QUEUE_NAME_TOO_LONG syscall.Errno = 0xC0370007 + ERROR_VID_PARTITION_ALREADY_EXISTS syscall.Errno = 0xC0370008 + ERROR_VID_PARTITION_DOES_NOT_EXIST syscall.Errno = 0xC0370009 + ERROR_VID_PARTITION_NAME_NOT_FOUND syscall.Errno = 0xC037000A + ERROR_VID_MESSAGE_QUEUE_ALREADY_EXISTS syscall.Errno = 0xC037000B + ERROR_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT syscall.Errno = 0xC037000C + ERROR_VID_MB_STILL_REFERENCED syscall.Errno = 0xC037000D + ERROR_VID_CHILD_GPA_PAGE_SET_CORRUPTED syscall.Errno = 0xC037000E + ERROR_VID_INVALID_NUMA_SETTINGS syscall.Errno = 0xC037000F + ERROR_VID_INVALID_NUMA_NODE_INDEX syscall.Errno = 0xC0370010 + ERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED syscall.Errno = 0xC0370011 + ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE syscall.Errno = 0xC0370012 + ERROR_VID_PAGE_RANGE_OVERFLOW syscall.Errno = 0xC0370013 + ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE syscall.Errno = 0xC0370014 + ERROR_VID_INVALID_GPA_RANGE_HANDLE syscall.Errno = 0xC0370015 + ERROR_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE syscall.Errno = 0xC0370016 + ERROR_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED syscall.Errno = 0xC0370017 + ERROR_VID_INVALID_PPM_HANDLE syscall.Errno = 0xC0370018 + ERROR_VID_MBPS_ARE_LOCKED syscall.Errno = 0xC0370019 + ERROR_VID_MESSAGE_QUEUE_CLOSED syscall.Errno = 0xC037001A + ERROR_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED syscall.Errno = 0xC037001B + ERROR_VID_STOP_PENDING syscall.Errno = 0xC037001C + ERROR_VID_INVALID_PROCESSOR_STATE syscall.Errno = 0xC037001D + ERROR_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT syscall.Errno = 0xC037001E + ERROR_VID_KM_INTERFACE_ALREADY_INITIALIZED syscall.Errno = 0xC037001F + ERROR_VID_MB_PROPERTY_ALREADY_SET_RESET syscall.Errno = 0xC0370020 + ERROR_VID_MMIO_RANGE_DESTROYED syscall.Errno = 0xC0370021 + ERROR_VID_INVALID_CHILD_GPA_PAGE_SET syscall.Errno = 0xC0370022 + ERROR_VID_RESERVE_PAGE_SET_IS_BEING_USED syscall.Errno = 0xC0370023 + ERROR_VID_RESERVE_PAGE_SET_TOO_SMALL syscall.Errno = 0xC0370024 + ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE syscall.Errno = 0xC0370025 + ERROR_VID_MBP_COUNT_EXCEEDED_LIMIT syscall.Errno = 0xC0370026 + ERROR_VID_SAVED_STATE_CORRUPT syscall.Errno = 0xC0370027 + ERROR_VID_SAVED_STATE_UNRECOGNIZED_ITEM syscall.Errno = 0xC0370028 + ERROR_VID_SAVED_STATE_INCOMPATIBLE syscall.Errno = 0xC0370029 + ERROR_VID_VTL_ACCESS_DENIED syscall.Errno = 0xC037002A + ERROR_VMCOMPUTE_TERMINATED_DURING_START syscall.Errno = 0xC0370100 + ERROR_VMCOMPUTE_IMAGE_MISMATCH syscall.Errno = 0xC0370101 + ERROR_VMCOMPUTE_HYPERV_NOT_INSTALLED syscall.Errno = 0xC0370102 + ERROR_VMCOMPUTE_OPERATION_PENDING syscall.Errno = 0xC0370103 + ERROR_VMCOMPUTE_TOO_MANY_NOTIFICATIONS syscall.Errno = 0xC0370104 + ERROR_VMCOMPUTE_INVALID_STATE syscall.Errno = 0xC0370105 + ERROR_VMCOMPUTE_UNEXPECTED_EXIT syscall.Errno = 0xC0370106 + ERROR_VMCOMPUTE_TERMINATED syscall.Errno = 0xC0370107 + ERROR_VMCOMPUTE_CONNECT_FAILED syscall.Errno = 0xC0370108 + ERROR_VMCOMPUTE_TIMEOUT syscall.Errno = 0xC0370109 + ERROR_VMCOMPUTE_CONNECTION_CLOSED syscall.Errno = 0xC037010A + ERROR_VMCOMPUTE_UNKNOWN_MESSAGE syscall.Errno = 0xC037010B + ERROR_VMCOMPUTE_UNSUPPORTED_PROTOCOL_VERSION syscall.Errno = 0xC037010C + ERROR_VMCOMPUTE_INVALID_JSON syscall.Errno = 0xC037010D + ERROR_VMCOMPUTE_SYSTEM_NOT_FOUND syscall.Errno = 0xC037010E + ERROR_VMCOMPUTE_SYSTEM_ALREADY_EXISTS syscall.Errno = 0xC037010F + ERROR_VMCOMPUTE_SYSTEM_ALREADY_STOPPED syscall.Errno = 0xC0370110 + ERROR_VMCOMPUTE_PROTOCOL_ERROR syscall.Errno = 0xC0370111 + ERROR_VMCOMPUTE_INVALID_LAYER syscall.Errno = 0xC0370112 + ERROR_VMCOMPUTE_WINDOWS_INSIDER_REQUIRED syscall.Errno = 0xC0370113 + HCS_E_TERMINATED_DURING_START Handle = 0x80370100 + HCS_E_IMAGE_MISMATCH Handle = 0x80370101 + HCS_E_HYPERV_NOT_INSTALLED Handle = 0x80370102 + HCS_E_INVALID_STATE Handle = 0x80370105 + HCS_E_UNEXPECTED_EXIT Handle = 0x80370106 + HCS_E_TERMINATED Handle = 0x80370107 + HCS_E_CONNECT_FAILED Handle = 0x80370108 + HCS_E_CONNECTION_TIMEOUT Handle = 0x80370109 + HCS_E_CONNECTION_CLOSED Handle = 0x8037010A + HCS_E_UNKNOWN_MESSAGE Handle = 0x8037010B + HCS_E_UNSUPPORTED_PROTOCOL_VERSION Handle = 0x8037010C + HCS_E_INVALID_JSON Handle = 0x8037010D + HCS_E_SYSTEM_NOT_FOUND Handle = 0x8037010E + HCS_E_SYSTEM_ALREADY_EXISTS Handle = 0x8037010F + HCS_E_SYSTEM_ALREADY_STOPPED Handle = 0x80370110 + HCS_E_PROTOCOL_ERROR Handle = 0x80370111 + HCS_E_INVALID_LAYER Handle = 0x80370112 + HCS_E_WINDOWS_INSIDER_REQUIRED Handle = 0x80370113 + HCS_E_SERVICE_NOT_AVAILABLE Handle = 0x80370114 + HCS_E_OPERATION_NOT_STARTED Handle = 0x80370115 + HCS_E_OPERATION_ALREADY_STARTED Handle = 0x80370116 + HCS_E_OPERATION_PENDING Handle = 0x80370117 + HCS_E_OPERATION_TIMEOUT Handle = 0x80370118 + HCS_E_OPERATION_SYSTEM_CALLBACK_ALREADY_SET Handle = 0x80370119 + HCS_E_OPERATION_RESULT_ALLOCATION_FAILED Handle = 0x8037011A + HCS_E_ACCESS_DENIED Handle = 0x8037011B + HCS_E_GUEST_CRITICAL_ERROR Handle = 0x8037011C + ERROR_VNET_VIRTUAL_SWITCH_NAME_NOT_FOUND syscall.Errno = 0xC0370200 + ERROR_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED syscall.Errno = 0x80370001 + WHV_E_UNKNOWN_CAPABILITY Handle = 0x80370300 + WHV_E_INSUFFICIENT_BUFFER Handle = 0x80370301 + WHV_E_UNKNOWN_PROPERTY Handle = 0x80370302 + WHV_E_UNSUPPORTED_HYPERVISOR_CONFIG Handle = 0x80370303 + WHV_E_INVALID_PARTITION_CONFIG Handle = 0x80370304 + WHV_E_GPA_RANGE_NOT_FOUND Handle = 0x80370305 + WHV_E_VP_ALREADY_EXISTS Handle = 0x80370306 + WHV_E_VP_DOES_NOT_EXIST Handle = 0x80370307 + WHV_E_INVALID_VP_STATE Handle = 0x80370308 + WHV_E_INVALID_VP_REGISTER_NAME Handle = 0x80370309 + ERROR_VSMB_SAVED_STATE_FILE_NOT_FOUND syscall.Errno = 0xC0370400 + ERROR_VSMB_SAVED_STATE_CORRUPT syscall.Errno = 0xC0370401 + ERROR_VOLMGR_INCOMPLETE_REGENERATION syscall.Errno = 0x80380001 + ERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION syscall.Errno = 0x80380002 + ERROR_VOLMGR_DATABASE_FULL syscall.Errno = 0xC0380001 + ERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED syscall.Errno = 0xC0380002 + ERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC syscall.Errno = 0xC0380003 + ERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED syscall.Errno = 0xC0380004 + ERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME syscall.Errno = 0xC0380005 + ERROR_VOLMGR_DISK_DUPLICATE syscall.Errno = 0xC0380006 + ERROR_VOLMGR_DISK_DYNAMIC syscall.Errno = 0xC0380007 + ERROR_VOLMGR_DISK_ID_INVALID syscall.Errno = 0xC0380008 + ERROR_VOLMGR_DISK_INVALID syscall.Errno = 0xC0380009 + ERROR_VOLMGR_DISK_LAST_VOTER syscall.Errno = 0xC038000A + ERROR_VOLMGR_DISK_LAYOUT_INVALID syscall.Errno = 0xC038000B + ERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS syscall.Errno = 0xC038000C + ERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED syscall.Errno = 0xC038000D + ERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL syscall.Errno = 0xC038000E + ERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS syscall.Errno = 0xC038000F + ERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS syscall.Errno = 0xC0380010 + ERROR_VOLMGR_DISK_MISSING syscall.Errno = 0xC0380011 + ERROR_VOLMGR_DISK_NOT_EMPTY syscall.Errno = 0xC0380012 + ERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE syscall.Errno = 0xC0380013 + ERROR_VOLMGR_DISK_REVECTORING_FAILED syscall.Errno = 0xC0380014 + ERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID syscall.Errno = 0xC0380015 + ERROR_VOLMGR_DISK_SET_NOT_CONTAINED syscall.Errno = 0xC0380016 + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS syscall.Errno = 0xC0380017 + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES syscall.Errno = 0xC0380018 + ERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED syscall.Errno = 0xC0380019 + ERROR_VOLMGR_EXTENT_ALREADY_USED syscall.Errno = 0xC038001A + ERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS syscall.Errno = 0xC038001B + ERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION syscall.Errno = 0xC038001C + ERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED syscall.Errno = 0xC038001D + ERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION syscall.Errno = 0xC038001E + ERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH syscall.Errno = 0xC038001F + ERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED syscall.Errno = 0xC0380020 + ERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID syscall.Errno = 0xC0380021 + ERROR_VOLMGR_MAXIMUM_REGISTERED_USERS syscall.Errno = 0xC0380022 + ERROR_VOLMGR_MEMBER_IN_SYNC syscall.Errno = 0xC0380023 + ERROR_VOLMGR_MEMBER_INDEX_DUPLICATE syscall.Errno = 0xC0380024 + ERROR_VOLMGR_MEMBER_INDEX_INVALID syscall.Errno = 0xC0380025 + ERROR_VOLMGR_MEMBER_MISSING syscall.Errno = 0xC0380026 + ERROR_VOLMGR_MEMBER_NOT_DETACHED syscall.Errno = 0xC0380027 + ERROR_VOLMGR_MEMBER_REGENERATING syscall.Errno = 0xC0380028 + ERROR_VOLMGR_ALL_DISKS_FAILED syscall.Errno = 0xC0380029 + ERROR_VOLMGR_NO_REGISTERED_USERS syscall.Errno = 0xC038002A + ERROR_VOLMGR_NO_SUCH_USER syscall.Errno = 0xC038002B + ERROR_VOLMGR_NOTIFICATION_RESET syscall.Errno = 0xC038002C + ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID syscall.Errno = 0xC038002D + ERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID syscall.Errno = 0xC038002E + ERROR_VOLMGR_PACK_DUPLICATE syscall.Errno = 0xC038002F + ERROR_VOLMGR_PACK_ID_INVALID syscall.Errno = 0xC0380030 + ERROR_VOLMGR_PACK_INVALID syscall.Errno = 0xC0380031 + ERROR_VOLMGR_PACK_NAME_INVALID syscall.Errno = 0xC0380032 + ERROR_VOLMGR_PACK_OFFLINE syscall.Errno = 0xC0380033 + ERROR_VOLMGR_PACK_HAS_QUORUM syscall.Errno = 0xC0380034 + ERROR_VOLMGR_PACK_WITHOUT_QUORUM syscall.Errno = 0xC0380035 + ERROR_VOLMGR_PARTITION_STYLE_INVALID syscall.Errno = 0xC0380036 + ERROR_VOLMGR_PARTITION_UPDATE_FAILED syscall.Errno = 0xC0380037 + ERROR_VOLMGR_PLEX_IN_SYNC syscall.Errno = 0xC0380038 + ERROR_VOLMGR_PLEX_INDEX_DUPLICATE syscall.Errno = 0xC0380039 + ERROR_VOLMGR_PLEX_INDEX_INVALID syscall.Errno = 0xC038003A + ERROR_VOLMGR_PLEX_LAST_ACTIVE syscall.Errno = 0xC038003B + ERROR_VOLMGR_PLEX_MISSING syscall.Errno = 0xC038003C + ERROR_VOLMGR_PLEX_REGENERATING syscall.Errno = 0xC038003D + ERROR_VOLMGR_PLEX_TYPE_INVALID syscall.Errno = 0xC038003E + ERROR_VOLMGR_PLEX_NOT_RAID5 syscall.Errno = 0xC038003F + ERROR_VOLMGR_PLEX_NOT_SIMPLE syscall.Errno = 0xC0380040 + ERROR_VOLMGR_STRUCTURE_SIZE_INVALID syscall.Errno = 0xC0380041 + ERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS syscall.Errno = 0xC0380042 + ERROR_VOLMGR_TRANSACTION_IN_PROGRESS syscall.Errno = 0xC0380043 + ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE syscall.Errno = 0xC0380044 + ERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK syscall.Errno = 0xC0380045 + ERROR_VOLMGR_VOLUME_ID_INVALID syscall.Errno = 0xC0380046 + ERROR_VOLMGR_VOLUME_LENGTH_INVALID syscall.Errno = 0xC0380047 + ERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE syscall.Errno = 0xC0380048 + ERROR_VOLMGR_VOLUME_NOT_MIRRORED syscall.Errno = 0xC0380049 + ERROR_VOLMGR_VOLUME_NOT_RETAINED syscall.Errno = 0xC038004A + ERROR_VOLMGR_VOLUME_OFFLINE syscall.Errno = 0xC038004B + ERROR_VOLMGR_VOLUME_RETAINED syscall.Errno = 0xC038004C + ERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID syscall.Errno = 0xC038004D + ERROR_VOLMGR_DIFFERENT_SECTOR_SIZE syscall.Errno = 0xC038004E + ERROR_VOLMGR_BAD_BOOT_DISK syscall.Errno = 0xC038004F + ERROR_VOLMGR_PACK_CONFIG_OFFLINE syscall.Errno = 0xC0380050 + ERROR_VOLMGR_PACK_CONFIG_ONLINE syscall.Errno = 0xC0380051 + ERROR_VOLMGR_NOT_PRIMARY_PACK syscall.Errno = 0xC0380052 + ERROR_VOLMGR_PACK_LOG_UPDATE_FAILED syscall.Errno = 0xC0380053 + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID syscall.Errno = 0xC0380054 + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID syscall.Errno = 0xC0380055 + ERROR_VOLMGR_VOLUME_MIRRORED syscall.Errno = 0xC0380056 + ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED syscall.Errno = 0xC0380057 + ERROR_VOLMGR_NO_VALID_LOG_COPIES syscall.Errno = 0xC0380058 + ERROR_VOLMGR_PRIMARY_PACK_PRESENT syscall.Errno = 0xC0380059 + ERROR_VOLMGR_NUMBER_OF_DISKS_INVALID syscall.Errno = 0xC038005A + ERROR_VOLMGR_MIRROR_NOT_SUPPORTED syscall.Errno = 0xC038005B + ERROR_VOLMGR_RAID5_NOT_SUPPORTED syscall.Errno = 0xC038005C + ERROR_BCD_NOT_ALL_ENTRIES_IMPORTED syscall.Errno = 0x80390001 + ERROR_BCD_TOO_MANY_ELEMENTS syscall.Errno = 0xC0390002 + ERROR_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED syscall.Errno = 0x80390003 + ERROR_VHD_DRIVE_FOOTER_MISSING syscall.Errno = 0xC03A0001 + ERROR_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH syscall.Errno = 0xC03A0002 + ERROR_VHD_DRIVE_FOOTER_CORRUPT syscall.Errno = 0xC03A0003 + ERROR_VHD_FORMAT_UNKNOWN syscall.Errno = 0xC03A0004 + ERROR_VHD_FORMAT_UNSUPPORTED_VERSION syscall.Errno = 0xC03A0005 + ERROR_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH syscall.Errno = 0xC03A0006 + ERROR_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION syscall.Errno = 0xC03A0007 + ERROR_VHD_SPARSE_HEADER_CORRUPT syscall.Errno = 0xC03A0008 + ERROR_VHD_BLOCK_ALLOCATION_FAILURE syscall.Errno = 0xC03A0009 + ERROR_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT syscall.Errno = 0xC03A000A + ERROR_VHD_INVALID_BLOCK_SIZE syscall.Errno = 0xC03A000B + ERROR_VHD_BITMAP_MISMATCH syscall.Errno = 0xC03A000C + ERROR_VHD_PARENT_VHD_NOT_FOUND syscall.Errno = 0xC03A000D + ERROR_VHD_CHILD_PARENT_ID_MISMATCH syscall.Errno = 0xC03A000E + ERROR_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH syscall.Errno = 0xC03A000F + ERROR_VHD_METADATA_READ_FAILURE syscall.Errno = 0xC03A0010 + ERROR_VHD_METADATA_WRITE_FAILURE syscall.Errno = 0xC03A0011 + ERROR_VHD_INVALID_SIZE syscall.Errno = 0xC03A0012 + ERROR_VHD_INVALID_FILE_SIZE syscall.Errno = 0xC03A0013 + ERROR_VIRTDISK_PROVIDER_NOT_FOUND syscall.Errno = 0xC03A0014 + ERROR_VIRTDISK_NOT_VIRTUAL_DISK syscall.Errno = 0xC03A0015 + ERROR_VHD_PARENT_VHD_ACCESS_DENIED syscall.Errno = 0xC03A0016 + ERROR_VHD_CHILD_PARENT_SIZE_MISMATCH syscall.Errno = 0xC03A0017 + ERROR_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED syscall.Errno = 0xC03A0018 + ERROR_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT syscall.Errno = 0xC03A0019 + ERROR_VIRTUAL_DISK_LIMITATION syscall.Errno = 0xC03A001A + ERROR_VHD_INVALID_TYPE syscall.Errno = 0xC03A001B + ERROR_VHD_INVALID_STATE syscall.Errno = 0xC03A001C + ERROR_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE syscall.Errno = 0xC03A001D + ERROR_VIRTDISK_DISK_ALREADY_OWNED syscall.Errno = 0xC03A001E + ERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE syscall.Errno = 0xC03A001F + ERROR_CTLOG_TRACKING_NOT_INITIALIZED syscall.Errno = 0xC03A0020 + ERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE syscall.Errno = 0xC03A0021 + ERROR_CTLOG_VHD_CHANGED_OFFLINE syscall.Errno = 0xC03A0022 + ERROR_CTLOG_INVALID_TRACKING_STATE syscall.Errno = 0xC03A0023 + ERROR_CTLOG_INCONSISTENT_TRACKING_FILE syscall.Errno = 0xC03A0024 + ERROR_VHD_RESIZE_WOULD_TRUNCATE_DATA syscall.Errno = 0xC03A0025 + ERROR_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE syscall.Errno = 0xC03A0026 + ERROR_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE syscall.Errno = 0xC03A0027 + ERROR_VHD_METADATA_FULL syscall.Errno = 0xC03A0028 + ERROR_VHD_INVALID_CHANGE_TRACKING_ID syscall.Errno = 0xC03A0029 + ERROR_VHD_CHANGE_TRACKING_DISABLED syscall.Errno = 0xC03A002A + ERROR_VHD_MISSING_CHANGE_TRACKING_INFORMATION syscall.Errno = 0xC03A0030 + ERROR_QUERY_STORAGE_ERROR syscall.Errno = 0x803A0001 + HCN_E_NETWORK_NOT_FOUND Handle = 0x803B0001 + HCN_E_ENDPOINT_NOT_FOUND Handle = 0x803B0002 + HCN_E_LAYER_NOT_FOUND Handle = 0x803B0003 + HCN_E_SWITCH_NOT_FOUND Handle = 0x803B0004 + HCN_E_SUBNET_NOT_FOUND Handle = 0x803B0005 + HCN_E_ADAPTER_NOT_FOUND Handle = 0x803B0006 + HCN_E_PORT_NOT_FOUND Handle = 0x803B0007 + HCN_E_POLICY_NOT_FOUND Handle = 0x803B0008 + HCN_E_VFP_PORTSETTING_NOT_FOUND Handle = 0x803B0009 + HCN_E_INVALID_NETWORK Handle = 0x803B000A + HCN_E_INVALID_NETWORK_TYPE Handle = 0x803B000B + HCN_E_INVALID_ENDPOINT Handle = 0x803B000C + HCN_E_INVALID_POLICY Handle = 0x803B000D + HCN_E_INVALID_POLICY_TYPE Handle = 0x803B000E + HCN_E_INVALID_REMOTE_ENDPOINT_OPERATION Handle = 0x803B000F + HCN_E_NETWORK_ALREADY_EXISTS Handle = 0x803B0010 + HCN_E_LAYER_ALREADY_EXISTS Handle = 0x803B0011 + HCN_E_POLICY_ALREADY_EXISTS Handle = 0x803B0012 + HCN_E_PORT_ALREADY_EXISTS Handle = 0x803B0013 + HCN_E_ENDPOINT_ALREADY_ATTACHED Handle = 0x803B0014 + HCN_E_REQUEST_UNSUPPORTED Handle = 0x803B0015 + HCN_E_MAPPING_NOT_SUPPORTED Handle = 0x803B0016 + HCN_E_DEGRADED_OPERATION Handle = 0x803B0017 + HCN_E_SHARED_SWITCH_MODIFICATION Handle = 0x803B0018 + HCN_E_GUID_CONVERSION_FAILURE Handle = 0x803B0019 + HCN_E_REGKEY_FAILURE Handle = 0x803B001A + HCN_E_INVALID_JSON Handle = 0x803B001B + HCN_E_INVALID_JSON_REFERENCE Handle = 0x803B001C + HCN_E_ENDPOINT_SHARING_DISABLED Handle = 0x803B001D + HCN_E_INVALID_IP Handle = 0x803B001E + HCN_E_SWITCH_EXTENSION_NOT_FOUND Handle = 0x803B001F + HCN_E_MANAGER_STOPPED Handle = 0x803B0020 + GCN_E_MODULE_NOT_FOUND Handle = 0x803B0021 + GCN_E_NO_REQUEST_HANDLERS Handle = 0x803B0022 + GCN_E_REQUEST_UNSUPPORTED Handle = 0x803B0023 + GCN_E_RUNTIMEKEYS_FAILED Handle = 0x803B0024 + GCN_E_NETADAPTER_TIMEOUT Handle = 0x803B0025 + GCN_E_NETADAPTER_NOT_FOUND Handle = 0x803B0026 + GCN_E_NETCOMPARTMENT_NOT_FOUND Handle = 0x803B0027 + GCN_E_NETINTERFACE_NOT_FOUND Handle = 0x803B0028 + GCN_E_DEFAULTNAMESPACE_EXISTS Handle = 0x803B0029 + HCN_E_ICS_DISABLED Handle = 0x803B002A + HCN_E_ENDPOINT_NAMESPACE_ALREADY_EXISTS Handle = 0x803B002B + HCN_E_ENTITY_HAS_REFERENCES Handle = 0x803B002C + HCN_E_INVALID_INTERNAL_PORT Handle = 0x803B002D + HCN_E_NAMESPACE_ATTACH_FAILED Handle = 0x803B002E + HCN_E_ADDR_INVALID_OR_RESERVED Handle = 0x803B002F + SDIAG_E_CANCELLED syscall.Errno = 0x803C0100 + SDIAG_E_SCRIPT syscall.Errno = 0x803C0101 + SDIAG_E_POWERSHELL syscall.Errno = 0x803C0102 + SDIAG_E_MANAGEDHOST syscall.Errno = 0x803C0103 + SDIAG_E_NOVERIFIER syscall.Errno = 0x803C0104 + SDIAG_S_CANNOTRUN syscall.Errno = 0x003C0105 + SDIAG_E_DISABLED syscall.Errno = 0x803C0106 + SDIAG_E_TRUST syscall.Errno = 0x803C0107 + SDIAG_E_CANNOTRUN syscall.Errno = 0x803C0108 + SDIAG_E_VERSION syscall.Errno = 0x803C0109 + SDIAG_E_RESOURCE syscall.Errno = 0x803C010A + SDIAG_E_ROOTCAUSE syscall.Errno = 0x803C010B + WPN_E_CHANNEL_CLOSED Handle = 0x803E0100 + WPN_E_CHANNEL_REQUEST_NOT_COMPLETE Handle = 0x803E0101 + WPN_E_INVALID_APP Handle = 0x803E0102 + WPN_E_OUTSTANDING_CHANNEL_REQUEST Handle = 0x803E0103 + WPN_E_DUPLICATE_CHANNEL Handle = 0x803E0104 + WPN_E_PLATFORM_UNAVAILABLE Handle = 0x803E0105 + WPN_E_NOTIFICATION_POSTED Handle = 0x803E0106 + WPN_E_NOTIFICATION_HIDDEN Handle = 0x803E0107 + WPN_E_NOTIFICATION_NOT_POSTED Handle = 0x803E0108 + WPN_E_CLOUD_DISABLED Handle = 0x803E0109 + WPN_E_CLOUD_INCAPABLE Handle = 0x803E0110 + WPN_E_CLOUD_AUTH_UNAVAILABLE Handle = 0x803E011A + WPN_E_CLOUD_SERVICE_UNAVAILABLE Handle = 0x803E011B + WPN_E_FAILED_LOCK_SCREEN_UPDATE_INTIALIZATION Handle = 0x803E011C + WPN_E_NOTIFICATION_DISABLED Handle = 0x803E0111 + WPN_E_NOTIFICATION_INCAPABLE Handle = 0x803E0112 + WPN_E_INTERNET_INCAPABLE Handle = 0x803E0113 + WPN_E_NOTIFICATION_TYPE_DISABLED Handle = 0x803E0114 + WPN_E_NOTIFICATION_SIZE Handle = 0x803E0115 + WPN_E_TAG_SIZE Handle = 0x803E0116 + WPN_E_ACCESS_DENIED Handle = 0x803E0117 + WPN_E_DUPLICATE_REGISTRATION Handle = 0x803E0118 + WPN_E_PUSH_NOTIFICATION_INCAPABLE Handle = 0x803E0119 + WPN_E_DEV_ID_SIZE Handle = 0x803E0120 + WPN_E_TAG_ALPHANUMERIC Handle = 0x803E012A + WPN_E_INVALID_HTTP_STATUS_CODE Handle = 0x803E012B + WPN_E_OUT_OF_SESSION Handle = 0x803E0200 + WPN_E_POWER_SAVE Handle = 0x803E0201 + WPN_E_IMAGE_NOT_FOUND_IN_CACHE Handle = 0x803E0202 + WPN_E_ALL_URL_NOT_COMPLETED Handle = 0x803E0203 + WPN_E_INVALID_CLOUD_IMAGE Handle = 0x803E0204 + WPN_E_NOTIFICATION_ID_MATCHED Handle = 0x803E0205 + WPN_E_CALLBACK_ALREADY_REGISTERED Handle = 0x803E0206 + WPN_E_TOAST_NOTIFICATION_DROPPED Handle = 0x803E0207 + WPN_E_STORAGE_LOCKED Handle = 0x803E0208 + WPN_E_GROUP_SIZE Handle = 0x803E0209 + WPN_E_GROUP_ALPHANUMERIC Handle = 0x803E020A + WPN_E_CLOUD_DISABLED_FOR_APP Handle = 0x803E020B + E_MBN_CONTEXT_NOT_ACTIVATED Handle = 0x80548201 + E_MBN_BAD_SIM Handle = 0x80548202 + E_MBN_DATA_CLASS_NOT_AVAILABLE Handle = 0x80548203 + E_MBN_INVALID_ACCESS_STRING Handle = 0x80548204 + E_MBN_MAX_ACTIVATED_CONTEXTS Handle = 0x80548205 + E_MBN_PACKET_SVC_DETACHED Handle = 0x80548206 + E_MBN_PROVIDER_NOT_VISIBLE Handle = 0x80548207 + E_MBN_RADIO_POWER_OFF Handle = 0x80548208 + E_MBN_SERVICE_NOT_ACTIVATED Handle = 0x80548209 + E_MBN_SIM_NOT_INSERTED Handle = 0x8054820A + E_MBN_VOICE_CALL_IN_PROGRESS Handle = 0x8054820B + E_MBN_INVALID_CACHE Handle = 0x8054820C + E_MBN_NOT_REGISTERED Handle = 0x8054820D + E_MBN_PROVIDERS_NOT_FOUND Handle = 0x8054820E + E_MBN_PIN_NOT_SUPPORTED Handle = 0x8054820F + E_MBN_PIN_REQUIRED Handle = 0x80548210 + E_MBN_PIN_DISABLED Handle = 0x80548211 + E_MBN_FAILURE Handle = 0x80548212 + E_MBN_INVALID_PROFILE Handle = 0x80548218 + E_MBN_DEFAULT_PROFILE_EXIST Handle = 0x80548219 + E_MBN_SMS_ENCODING_NOT_SUPPORTED Handle = 0x80548220 + E_MBN_SMS_FILTER_NOT_SUPPORTED Handle = 0x80548221 + E_MBN_SMS_INVALID_MEMORY_INDEX Handle = 0x80548222 + E_MBN_SMS_LANG_NOT_SUPPORTED Handle = 0x80548223 + E_MBN_SMS_MEMORY_FAILURE Handle = 0x80548224 + E_MBN_SMS_NETWORK_TIMEOUT Handle = 0x80548225 + E_MBN_SMS_UNKNOWN_SMSC_ADDRESS Handle = 0x80548226 + E_MBN_SMS_FORMAT_NOT_SUPPORTED Handle = 0x80548227 + E_MBN_SMS_OPERATION_NOT_ALLOWED Handle = 0x80548228 + E_MBN_SMS_MEMORY_FULL Handle = 0x80548229 + PEER_E_IPV6_NOT_INSTALLED Handle = 0x80630001 + PEER_E_NOT_INITIALIZED Handle = 0x80630002 + PEER_E_CANNOT_START_SERVICE Handle = 0x80630003 + PEER_E_NOT_LICENSED Handle = 0x80630004 + PEER_E_INVALID_GRAPH Handle = 0x80630010 + PEER_E_DBNAME_CHANGED Handle = 0x80630011 + PEER_E_DUPLICATE_GRAPH Handle = 0x80630012 + PEER_E_GRAPH_NOT_READY Handle = 0x80630013 + PEER_E_GRAPH_SHUTTING_DOWN Handle = 0x80630014 + PEER_E_GRAPH_IN_USE Handle = 0x80630015 + PEER_E_INVALID_DATABASE Handle = 0x80630016 + PEER_E_TOO_MANY_ATTRIBUTES Handle = 0x80630017 + PEER_E_CONNECTION_NOT_FOUND Handle = 0x80630103 + PEER_E_CONNECT_SELF Handle = 0x80630106 + PEER_E_ALREADY_LISTENING Handle = 0x80630107 + PEER_E_NODE_NOT_FOUND Handle = 0x80630108 + PEER_E_CONNECTION_FAILED Handle = 0x80630109 + PEER_E_CONNECTION_NOT_AUTHENTICATED Handle = 0x8063010A + PEER_E_CONNECTION_REFUSED Handle = 0x8063010B + PEER_E_CLASSIFIER_TOO_LONG Handle = 0x80630201 + PEER_E_TOO_MANY_IDENTITIES Handle = 0x80630202 + PEER_E_NO_KEY_ACCESS Handle = 0x80630203 + PEER_E_GROUPS_EXIST Handle = 0x80630204 + PEER_E_RECORD_NOT_FOUND Handle = 0x80630301 + PEER_E_DATABASE_ACCESSDENIED Handle = 0x80630302 + PEER_E_DBINITIALIZATION_FAILED Handle = 0x80630303 + PEER_E_MAX_RECORD_SIZE_EXCEEDED Handle = 0x80630304 + PEER_E_DATABASE_ALREADY_PRESENT Handle = 0x80630305 + PEER_E_DATABASE_NOT_PRESENT Handle = 0x80630306 + PEER_E_IDENTITY_NOT_FOUND Handle = 0x80630401 + PEER_E_EVENT_HANDLE_NOT_FOUND Handle = 0x80630501 + PEER_E_INVALID_SEARCH Handle = 0x80630601 + PEER_E_INVALID_ATTRIBUTES Handle = 0x80630602 + PEER_E_INVITATION_NOT_TRUSTED Handle = 0x80630701 + PEER_E_CHAIN_TOO_LONG Handle = 0x80630703 + PEER_E_INVALID_TIME_PERIOD Handle = 0x80630705 + PEER_E_CIRCULAR_CHAIN_DETECTED Handle = 0x80630706 + PEER_E_CERT_STORE_CORRUPTED Handle = 0x80630801 + PEER_E_NO_CLOUD Handle = 0x80631001 + PEER_E_CLOUD_NAME_AMBIGUOUS Handle = 0x80631005 + PEER_E_INVALID_RECORD Handle = 0x80632010 + PEER_E_NOT_AUTHORIZED Handle = 0x80632020 + PEER_E_PASSWORD_DOES_NOT_MEET_POLICY Handle = 0x80632021 + PEER_E_DEFERRED_VALIDATION Handle = 0x80632030 + PEER_E_INVALID_GROUP_PROPERTIES Handle = 0x80632040 + PEER_E_INVALID_PEER_NAME Handle = 0x80632050 + PEER_E_INVALID_CLASSIFIER Handle = 0x80632060 + PEER_E_INVALID_FRIENDLY_NAME Handle = 0x80632070 + PEER_E_INVALID_ROLE_PROPERTY Handle = 0x80632071 + PEER_E_INVALID_CLASSIFIER_PROPERTY Handle = 0x80632072 + PEER_E_INVALID_RECORD_EXPIRATION Handle = 0x80632080 + PEER_E_INVALID_CREDENTIAL_INFO Handle = 0x80632081 + PEER_E_INVALID_CREDENTIAL Handle = 0x80632082 + PEER_E_INVALID_RECORD_SIZE Handle = 0x80632083 + PEER_E_UNSUPPORTED_VERSION Handle = 0x80632090 + PEER_E_GROUP_NOT_READY Handle = 0x80632091 + PEER_E_GROUP_IN_USE Handle = 0x80632092 + PEER_E_INVALID_GROUP Handle = 0x80632093 + PEER_E_NO_MEMBERS_FOUND Handle = 0x80632094 + PEER_E_NO_MEMBER_CONNECTIONS Handle = 0x80632095 + PEER_E_UNABLE_TO_LISTEN Handle = 0x80632096 + PEER_E_IDENTITY_DELETED Handle = 0x806320A0 + PEER_E_SERVICE_NOT_AVAILABLE Handle = 0x806320A1 + PEER_E_CONTACT_NOT_FOUND Handle = 0x80636001 + PEER_S_GRAPH_DATA_CREATED Handle = 0x00630001 + PEER_S_NO_EVENT_DATA Handle = 0x00630002 + PEER_S_ALREADY_CONNECTED Handle = 0x00632000 + PEER_S_SUBSCRIPTION_EXISTS Handle = 0x00636000 + PEER_S_NO_CONNECTIVITY Handle = 0x00630005 + PEER_S_ALREADY_A_MEMBER Handle = 0x00630006 + PEER_E_CANNOT_CONVERT_PEER_NAME Handle = 0x80634001 + PEER_E_INVALID_PEER_HOST_NAME Handle = 0x80634002 + PEER_E_NO_MORE Handle = 0x80634003 + PEER_E_PNRP_DUPLICATE_PEER_NAME Handle = 0x80634005 + PEER_E_INVITE_CANCELLED Handle = 0x80637000 + PEER_E_INVITE_RESPONSE_NOT_AVAILABLE Handle = 0x80637001 + PEER_E_NOT_SIGNED_IN Handle = 0x80637003 + PEER_E_PRIVACY_DECLINED Handle = 0x80637004 + PEER_E_TIMEOUT Handle = 0x80637005 + PEER_E_INVALID_ADDRESS Handle = 0x80637007 + PEER_E_FW_EXCEPTION_DISABLED Handle = 0x80637008 + PEER_E_FW_BLOCKED_BY_POLICY Handle = 0x80637009 + PEER_E_FW_BLOCKED_BY_SHIELDS_UP Handle = 0x8063700A + PEER_E_FW_DECLINED Handle = 0x8063700B + UI_E_CREATE_FAILED Handle = 0x802A0001 + UI_E_SHUTDOWN_CALLED Handle = 0x802A0002 + UI_E_ILLEGAL_REENTRANCY Handle = 0x802A0003 + UI_E_OBJECT_SEALED Handle = 0x802A0004 + UI_E_VALUE_NOT_SET Handle = 0x802A0005 + UI_E_VALUE_NOT_DETERMINED Handle = 0x802A0006 + UI_E_INVALID_OUTPUT Handle = 0x802A0007 + UI_E_BOOLEAN_EXPECTED Handle = 0x802A0008 + UI_E_DIFFERENT_OWNER Handle = 0x802A0009 + UI_E_AMBIGUOUS_MATCH Handle = 0x802A000A + UI_E_FP_OVERFLOW Handle = 0x802A000B + UI_E_WRONG_THREAD Handle = 0x802A000C + UI_E_STORYBOARD_ACTIVE Handle = 0x802A0101 + UI_E_STORYBOARD_NOT_PLAYING Handle = 0x802A0102 + UI_E_START_KEYFRAME_AFTER_END Handle = 0x802A0103 + UI_E_END_KEYFRAME_NOT_DETERMINED Handle = 0x802A0104 + UI_E_LOOPS_OVERLAP Handle = 0x802A0105 + UI_E_TRANSITION_ALREADY_USED Handle = 0x802A0106 + UI_E_TRANSITION_NOT_IN_STORYBOARD Handle = 0x802A0107 + UI_E_TRANSITION_ECLIPSED Handle = 0x802A0108 + UI_E_TIME_BEFORE_LAST_UPDATE Handle = 0x802A0109 + UI_E_TIMER_CLIENT_ALREADY_CONNECTED Handle = 0x802A010A + UI_E_INVALID_DIMENSION Handle = 0x802A010B + UI_E_PRIMITIVE_OUT_OF_BOUNDS Handle = 0x802A010C + UI_E_WINDOW_CLOSED Handle = 0x802A0201 + E_BLUETOOTH_ATT_INVALID_HANDLE Handle = 0x80650001 + E_BLUETOOTH_ATT_READ_NOT_PERMITTED Handle = 0x80650002 + E_BLUETOOTH_ATT_WRITE_NOT_PERMITTED Handle = 0x80650003 + E_BLUETOOTH_ATT_INVALID_PDU Handle = 0x80650004 + E_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION Handle = 0x80650005 + E_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED Handle = 0x80650006 + E_BLUETOOTH_ATT_INVALID_OFFSET Handle = 0x80650007 + E_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION Handle = 0x80650008 + E_BLUETOOTH_ATT_PREPARE_QUEUE_FULL Handle = 0x80650009 + E_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND Handle = 0x8065000A + E_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG Handle = 0x8065000B + E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE Handle = 0x8065000C + E_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH Handle = 0x8065000D + E_BLUETOOTH_ATT_UNLIKELY Handle = 0x8065000E + E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION Handle = 0x8065000F + E_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE Handle = 0x80650010 + E_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES Handle = 0x80650011 + E_BLUETOOTH_ATT_UNKNOWN_ERROR Handle = 0x80651000 + E_AUDIO_ENGINE_NODE_NOT_FOUND Handle = 0x80660001 + E_HDAUDIO_EMPTY_CONNECTION_LIST Handle = 0x80660002 + E_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED Handle = 0x80660003 + E_HDAUDIO_NO_LOGICAL_DEVICES_CREATED Handle = 0x80660004 + E_HDAUDIO_NULL_LINKED_LIST_ENTRY Handle = 0x80660005 + STATEREPOSITORY_E_CONCURRENCY_LOCKING_FAILURE Handle = 0x80670001 + STATEREPOSITORY_E_STATEMENT_INPROGRESS Handle = 0x80670002 + STATEREPOSITORY_E_CONFIGURATION_INVALID Handle = 0x80670003 + STATEREPOSITORY_E_UNKNOWN_SCHEMA_VERSION Handle = 0x80670004 + STATEREPOSITORY_ERROR_DICTIONARY_CORRUPTED Handle = 0x80670005 + STATEREPOSITORY_E_BLOCKED Handle = 0x80670006 + STATEREPOSITORY_E_BUSY_RETRY Handle = 0x80670007 + STATEREPOSITORY_E_BUSY_RECOVERY_RETRY Handle = 0x80670008 + STATEREPOSITORY_E_LOCKED_RETRY Handle = 0x80670009 + STATEREPOSITORY_E_LOCKED_SHAREDCACHE_RETRY Handle = 0x8067000A + STATEREPOSITORY_E_TRANSACTION_REQUIRED Handle = 0x8067000B + STATEREPOSITORY_E_BUSY_TIMEOUT_EXCEEDED Handle = 0x8067000C + STATEREPOSITORY_E_BUSY_RECOVERY_TIMEOUT_EXCEEDED Handle = 0x8067000D + STATEREPOSITORY_E_LOCKED_TIMEOUT_EXCEEDED Handle = 0x8067000E + STATEREPOSITORY_E_LOCKED_SHAREDCACHE_TIMEOUT_EXCEEDED Handle = 0x8067000F + STATEREPOSITORY_E_SERVICE_STOP_IN_PROGRESS Handle = 0x80670010 + STATEREPOSTORY_E_NESTED_TRANSACTION_NOT_SUPPORTED Handle = 0x80670011 + STATEREPOSITORY_ERROR_CACHE_CORRUPTED Handle = 0x80670012 + STATEREPOSITORY_TRANSACTION_CALLER_ID_CHANGED Handle = 0x00670013 + STATEREPOSITORY_TRANSACTION_IN_PROGRESS Handle = 0x00670014 + ERROR_SPACES_POOL_WAS_DELETED Handle = 0x00E70001 + ERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID Handle = 0x80E70001 + ERROR_SPACES_INTERNAL_ERROR Handle = 0x80E70002 + ERROR_SPACES_RESILIENCY_TYPE_INVALID Handle = 0x80E70003 + ERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID Handle = 0x80E70004 + ERROR_SPACES_DRIVE_REDUNDANCY_INVALID Handle = 0x80E70006 + ERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID Handle = 0x80E70007 + ERROR_SPACES_PARITY_LAYOUT_INVALID Handle = 0x80E70008 + ERROR_SPACES_INTERLEAVE_LENGTH_INVALID Handle = 0x80E70009 + ERROR_SPACES_NUMBER_OF_COLUMNS_INVALID Handle = 0x80E7000A + ERROR_SPACES_NOT_ENOUGH_DRIVES Handle = 0x80E7000B + ERROR_SPACES_EXTENDED_ERROR Handle = 0x80E7000C + ERROR_SPACES_PROVISIONING_TYPE_INVALID Handle = 0x80E7000D + ERROR_SPACES_ALLOCATION_SIZE_INVALID Handle = 0x80E7000E + ERROR_SPACES_ENCLOSURE_AWARE_INVALID Handle = 0x80E7000F + ERROR_SPACES_WRITE_CACHE_SIZE_INVALID Handle = 0x80E70010 + ERROR_SPACES_NUMBER_OF_GROUPS_INVALID Handle = 0x80E70011 + ERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID Handle = 0x80E70012 + ERROR_SPACES_ENTRY_INCOMPLETE Handle = 0x80E70013 + ERROR_SPACES_ENTRY_INVALID Handle = 0x80E70014 + ERROR_VOLSNAP_BOOTFILE_NOT_VALID Handle = 0x80820001 + ERROR_VOLSNAP_ACTIVATION_TIMEOUT Handle = 0x80820002 + ERROR_TIERING_NOT_SUPPORTED_ON_VOLUME Handle = 0x80830001 + ERROR_TIERING_VOLUME_DISMOUNT_IN_PROGRESS Handle = 0x80830002 + ERROR_TIERING_STORAGE_TIER_NOT_FOUND Handle = 0x80830003 + ERROR_TIERING_INVALID_FILE_ID Handle = 0x80830004 + ERROR_TIERING_WRONG_CLUSTER_NODE Handle = 0x80830005 + ERROR_TIERING_ALREADY_PROCESSING Handle = 0x80830006 + ERROR_TIERING_CANNOT_PIN_OBJECT Handle = 0x80830007 + ERROR_TIERING_FILE_IS_NOT_PINNED Handle = 0x80830008 + ERROR_NOT_A_TIERED_VOLUME Handle = 0x80830009 + ERROR_ATTRIBUTE_NOT_PRESENT Handle = 0x8083000A + ERROR_SECCORE_INVALID_COMMAND Handle = 0xC0E80000 + ERROR_NO_APPLICABLE_APP_LICENSES_FOUND Handle = 0xC0EA0001 + ERROR_CLIP_LICENSE_NOT_FOUND Handle = 0xC0EA0002 + ERROR_CLIP_DEVICE_LICENSE_MISSING Handle = 0xC0EA0003 + ERROR_CLIP_LICENSE_INVALID_SIGNATURE Handle = 0xC0EA0004 + ERROR_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID Handle = 0xC0EA0005 + ERROR_CLIP_LICENSE_EXPIRED Handle = 0xC0EA0006 + ERROR_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE Handle = 0xC0EA0007 + ERROR_CLIP_LICENSE_NOT_SIGNED Handle = 0xC0EA0008 + ERROR_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE Handle = 0xC0EA0009 + ERROR_CLIP_LICENSE_DEVICE_ID_MISMATCH Handle = 0xC0EA000A + DXGI_STATUS_OCCLUDED Handle = 0x087A0001 + DXGI_STATUS_CLIPPED Handle = 0x087A0002 + DXGI_STATUS_NO_REDIRECTION Handle = 0x087A0004 + DXGI_STATUS_NO_DESKTOP_ACCESS Handle = 0x087A0005 + DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0x087A0006 + DXGI_STATUS_MODE_CHANGED Handle = 0x087A0007 + DXGI_STATUS_MODE_CHANGE_IN_PROGRESS Handle = 0x087A0008 + DXGI_ERROR_INVALID_CALL Handle = 0x887A0001 + DXGI_ERROR_NOT_FOUND Handle = 0x887A0002 + DXGI_ERROR_MORE_DATA Handle = 0x887A0003 + DXGI_ERROR_UNSUPPORTED Handle = 0x887A0004 + DXGI_ERROR_DEVICE_REMOVED Handle = 0x887A0005 + DXGI_ERROR_DEVICE_HUNG Handle = 0x887A0006 + DXGI_ERROR_DEVICE_RESET Handle = 0x887A0007 + DXGI_ERROR_WAS_STILL_DRAWING Handle = 0x887A000A + DXGI_ERROR_FRAME_STATISTICS_DISJOINT Handle = 0x887A000B + DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0x887A000C + DXGI_ERROR_DRIVER_INTERNAL_ERROR Handle = 0x887A0020 + DXGI_ERROR_NONEXCLUSIVE Handle = 0x887A0021 + DXGI_ERROR_NOT_CURRENTLY_AVAILABLE Handle = 0x887A0022 + DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED Handle = 0x887A0023 + DXGI_ERROR_REMOTE_OUTOFMEMORY Handle = 0x887A0024 + DXGI_ERROR_ACCESS_LOST Handle = 0x887A0026 + DXGI_ERROR_WAIT_TIMEOUT Handle = 0x887A0027 + DXGI_ERROR_SESSION_DISCONNECTED Handle = 0x887A0028 + DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE Handle = 0x887A0029 + DXGI_ERROR_CANNOT_PROTECT_CONTENT Handle = 0x887A002A + DXGI_ERROR_ACCESS_DENIED Handle = 0x887A002B + DXGI_ERROR_NAME_ALREADY_EXISTS Handle = 0x887A002C + DXGI_ERROR_SDK_COMPONENT_MISSING Handle = 0x887A002D + DXGI_ERROR_NOT_CURRENT Handle = 0x887A002E + DXGI_ERROR_HW_PROTECTION_OUTOFMEMORY Handle = 0x887A0030 + DXGI_ERROR_DYNAMIC_CODE_POLICY_VIOLATION Handle = 0x887A0031 + DXGI_ERROR_NON_COMPOSITED_UI Handle = 0x887A0032 + DXGI_STATUS_UNOCCLUDED Handle = 0x087A0009 + DXGI_STATUS_DDA_WAS_STILL_DRAWING Handle = 0x087A000A + DXGI_ERROR_MODE_CHANGE_IN_PROGRESS Handle = 0x887A0025 + DXGI_STATUS_PRESENT_REQUIRED Handle = 0x087A002F + DXGI_ERROR_CACHE_CORRUPT Handle = 0x887A0033 + DXGI_ERROR_CACHE_FULL Handle = 0x887A0034 + DXGI_ERROR_CACHE_HASH_COLLISION Handle = 0x887A0035 + DXGI_ERROR_ALREADY_EXISTS Handle = 0x887A0036 + DXGI_DDI_ERR_WASSTILLDRAWING Handle = 0x887B0001 + DXGI_DDI_ERR_UNSUPPORTED Handle = 0x887B0002 + DXGI_DDI_ERR_NONEXCLUSIVE Handle = 0x887B0003 + D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS Handle = 0x88790001 + D3D10_ERROR_FILE_NOT_FOUND Handle = 0x88790002 + D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS Handle = 0x887C0001 + D3D11_ERROR_FILE_NOT_FOUND Handle = 0x887C0002 + D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS Handle = 0x887C0003 + D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD Handle = 0x887C0004 + D3D12_ERROR_ADAPTER_NOT_FOUND Handle = 0x887E0001 + D3D12_ERROR_DRIVER_VERSION_MISMATCH Handle = 0x887E0002 + D2DERR_WRONG_STATE Handle = 0x88990001 + D2DERR_NOT_INITIALIZED Handle = 0x88990002 + D2DERR_UNSUPPORTED_OPERATION Handle = 0x88990003 + D2DERR_SCANNER_FAILED Handle = 0x88990004 + D2DERR_SCREEN_ACCESS_DENIED Handle = 0x88990005 + D2DERR_DISPLAY_STATE_INVALID Handle = 0x88990006 + D2DERR_ZERO_VECTOR Handle = 0x88990007 + D2DERR_INTERNAL_ERROR Handle = 0x88990008 + D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED Handle = 0x88990009 + D2DERR_INVALID_CALL Handle = 0x8899000A + D2DERR_NO_HARDWARE_DEVICE Handle = 0x8899000B + D2DERR_RECREATE_TARGET Handle = 0x8899000C + D2DERR_TOO_MANY_SHADER_ELEMENTS Handle = 0x8899000D + D2DERR_SHADER_COMPILE_FAILED Handle = 0x8899000E + D2DERR_MAX_TEXTURE_SIZE_EXCEEDED Handle = 0x8899000F + D2DERR_UNSUPPORTED_VERSION Handle = 0x88990010 + D2DERR_BAD_NUMBER Handle = 0x88990011 + D2DERR_WRONG_FACTORY Handle = 0x88990012 + D2DERR_LAYER_ALREADY_IN_USE Handle = 0x88990013 + D2DERR_POP_CALL_DID_NOT_MATCH_PUSH Handle = 0x88990014 + D2DERR_WRONG_RESOURCE_DOMAIN Handle = 0x88990015 + D2DERR_PUSH_POP_UNBALANCED Handle = 0x88990016 + D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT Handle = 0x88990017 + D2DERR_INCOMPATIBLE_BRUSH_TYPES Handle = 0x88990018 + D2DERR_WIN32_ERROR Handle = 0x88990019 + D2DERR_TARGET_NOT_GDI_COMPATIBLE Handle = 0x8899001A + D2DERR_TEXT_EFFECT_IS_WRONG_TYPE Handle = 0x8899001B + D2DERR_TEXT_RENDERER_NOT_RELEASED Handle = 0x8899001C + D2DERR_EXCEEDS_MAX_BITMAP_SIZE Handle = 0x8899001D + D2DERR_INVALID_GRAPH_CONFIGURATION Handle = 0x8899001E + D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION Handle = 0x8899001F + D2DERR_CYCLIC_GRAPH Handle = 0x88990020 + D2DERR_BITMAP_CANNOT_DRAW Handle = 0x88990021 + D2DERR_OUTSTANDING_BITMAP_REFERENCES Handle = 0x88990022 + D2DERR_ORIGINAL_TARGET_NOT_BOUND Handle = 0x88990023 + D2DERR_INVALID_TARGET Handle = 0x88990024 + D2DERR_BITMAP_BOUND_AS_TARGET Handle = 0x88990025 + D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES Handle = 0x88990026 + D2DERR_INTERMEDIATE_TOO_LARGE Handle = 0x88990027 + D2DERR_EFFECT_IS_NOT_REGISTERED Handle = 0x88990028 + D2DERR_INVALID_PROPERTY Handle = 0x88990029 + D2DERR_NO_SUBPROPERTIES Handle = 0x8899002A + D2DERR_PRINT_JOB_CLOSED Handle = 0x8899002B + D2DERR_PRINT_FORMAT_NOT_SUPPORTED Handle = 0x8899002C + D2DERR_TOO_MANY_TRANSFORM_INPUTS Handle = 0x8899002D + D2DERR_INVALID_GLYPH_IMAGE Handle = 0x8899002E + DWRITE_E_FILEFORMAT Handle = 0x88985000 + DWRITE_E_UNEXPECTED Handle = 0x88985001 + DWRITE_E_NOFONT Handle = 0x88985002 + DWRITE_E_FILENOTFOUND Handle = 0x88985003 + DWRITE_E_FILEACCESS Handle = 0x88985004 + DWRITE_E_FONTCOLLECTIONOBSOLETE Handle = 0x88985005 + DWRITE_E_ALREADYREGISTERED Handle = 0x88985006 + DWRITE_E_CACHEFORMAT Handle = 0x88985007 + DWRITE_E_CACHEVERSION Handle = 0x88985008 + DWRITE_E_UNSUPPORTEDOPERATION Handle = 0x88985009 + DWRITE_E_TEXTRENDERERINCOMPATIBLE Handle = 0x8898500A + DWRITE_E_FLOWDIRECTIONCONFLICTS Handle = 0x8898500B + DWRITE_E_NOCOLOR Handle = 0x8898500C + DWRITE_E_REMOTEFONT Handle = 0x8898500D + DWRITE_E_DOWNLOADCANCELLED Handle = 0x8898500E + DWRITE_E_DOWNLOADFAILED Handle = 0x8898500F + DWRITE_E_TOOMANYDOWNLOADS Handle = 0x88985010 + WINCODEC_ERR_WRONGSTATE Handle = 0x88982F04 + WINCODEC_ERR_VALUEOUTOFRANGE Handle = 0x88982F05 + WINCODEC_ERR_UNKNOWNIMAGEFORMAT Handle = 0x88982F07 + WINCODEC_ERR_UNSUPPORTEDVERSION Handle = 0x88982F0B + WINCODEC_ERR_NOTINITIALIZED Handle = 0x88982F0C + WINCODEC_ERR_ALREADYLOCKED Handle = 0x88982F0D + WINCODEC_ERR_PROPERTYNOTFOUND Handle = 0x88982F40 + WINCODEC_ERR_PROPERTYNOTSUPPORTED Handle = 0x88982F41 + WINCODEC_ERR_PROPERTYSIZE Handle = 0x88982F42 + WINCODEC_ERR_CODECPRESENT Handle = 0x88982F43 + WINCODEC_ERR_CODECNOTHUMBNAIL Handle = 0x88982F44 + WINCODEC_ERR_PALETTEUNAVAILABLE Handle = 0x88982F45 + WINCODEC_ERR_CODECTOOMANYSCANLINES Handle = 0x88982F46 + WINCODEC_ERR_INTERNALERROR Handle = 0x88982F48 + WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS Handle = 0x88982F49 + WINCODEC_ERR_COMPONENTNOTFOUND Handle = 0x88982F50 + WINCODEC_ERR_IMAGESIZEOUTOFRANGE Handle = 0x88982F51 + WINCODEC_ERR_TOOMUCHMETADATA Handle = 0x88982F52 + WINCODEC_ERR_BADIMAGE Handle = 0x88982F60 + WINCODEC_ERR_BADHEADER Handle = 0x88982F61 + WINCODEC_ERR_FRAMEMISSING Handle = 0x88982F62 + WINCODEC_ERR_BADMETADATAHEADER Handle = 0x88982F63 + WINCODEC_ERR_BADSTREAMDATA Handle = 0x88982F70 + WINCODEC_ERR_STREAMWRITE Handle = 0x88982F71 + WINCODEC_ERR_STREAMREAD Handle = 0x88982F72 + WINCODEC_ERR_STREAMNOTAVAILABLE Handle = 0x88982F73 + WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT Handle = 0x88982F80 + WINCODEC_ERR_UNSUPPORTEDOPERATION Handle = 0x88982F81 + WINCODEC_ERR_INVALIDREGISTRATION Handle = 0x88982F8A + WINCODEC_ERR_COMPONENTINITIALIZEFAILURE Handle = 0x88982F8B + WINCODEC_ERR_INSUFFICIENTBUFFER Handle = 0x88982F8C + WINCODEC_ERR_DUPLICATEMETADATAPRESENT Handle = 0x88982F8D + WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE Handle = 0x88982F8E + WINCODEC_ERR_UNEXPECTEDSIZE Handle = 0x88982F8F + WINCODEC_ERR_INVALIDQUERYREQUEST Handle = 0x88982F90 + WINCODEC_ERR_UNEXPECTEDMETADATATYPE Handle = 0x88982F91 + WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT Handle = 0x88982F92 + WINCODEC_ERR_INVALIDQUERYCHARACTER Handle = 0x88982F93 + WINCODEC_ERR_WIN32ERROR Handle = 0x88982F94 + WINCODEC_ERR_INVALIDPROGRESSIVELEVEL Handle = 0x88982F95 + WINCODEC_ERR_INVALIDJPEGSCANINDEX Handle = 0x88982F96 + MILERR_OBJECTBUSY Handle = 0x88980001 + MILERR_INSUFFICIENTBUFFER Handle = 0x88980002 + MILERR_WIN32ERROR Handle = 0x88980003 + MILERR_SCANNER_FAILED Handle = 0x88980004 + MILERR_SCREENACCESSDENIED Handle = 0x88980005 + MILERR_DISPLAYSTATEINVALID Handle = 0x88980006 + MILERR_NONINVERTIBLEMATRIX Handle = 0x88980007 + MILERR_ZEROVECTOR Handle = 0x88980008 + MILERR_TERMINATED Handle = 0x88980009 + MILERR_BADNUMBER Handle = 0x8898000A + MILERR_INTERNALERROR Handle = 0x88980080 + MILERR_DISPLAYFORMATNOTSUPPORTED Handle = 0x88980084 + MILERR_INVALIDCALL Handle = 0x88980085 + MILERR_ALREADYLOCKED Handle = 0x88980086 + MILERR_NOTLOCKED Handle = 0x88980087 + MILERR_DEVICECANNOTRENDERTEXT Handle = 0x88980088 + MILERR_GLYPHBITMAPMISSED Handle = 0x88980089 + MILERR_MALFORMEDGLYPHCACHE Handle = 0x8898008A + MILERR_GENERIC_IGNORE Handle = 0x8898008B + MILERR_MALFORMED_GUIDELINE_DATA Handle = 0x8898008C + MILERR_NO_HARDWARE_DEVICE Handle = 0x8898008D + MILERR_NEED_RECREATE_AND_PRESENT Handle = 0x8898008E + MILERR_ALREADY_INITIALIZED Handle = 0x8898008F + MILERR_MISMATCHED_SIZE Handle = 0x88980090 + MILERR_NO_REDIRECTION_SURFACE_AVAILABLE Handle = 0x88980091 + MILERR_REMOTING_NOT_SUPPORTED Handle = 0x88980092 + MILERR_QUEUED_PRESENT_NOT_SUPPORTED Handle = 0x88980093 + MILERR_NOT_QUEUING_PRESENTS Handle = 0x88980094 + MILERR_NO_REDIRECTION_SURFACE_RETRY_LATER Handle = 0x88980095 + MILERR_TOOMANYSHADERELEMNTS Handle = 0x88980096 + MILERR_MROW_READLOCK_FAILED Handle = 0x88980097 + MILERR_MROW_UPDATE_FAILED Handle = 0x88980098 + MILERR_SHADER_COMPILE_FAILED Handle = 0x88980099 + MILERR_MAX_TEXTURE_SIZE_EXCEEDED Handle = 0x8898009A + MILERR_QPC_TIME_WENT_BACKWARD Handle = 0x8898009B + MILERR_DXGI_ENUMERATION_OUT_OF_SYNC Handle = 0x8898009D + MILERR_ADAPTER_NOT_FOUND Handle = 0x8898009E + MILERR_COLORSPACE_NOT_SUPPORTED Handle = 0x8898009F + MILERR_PREFILTER_NOT_SUPPORTED Handle = 0x889800A0 + MILERR_DISPLAYID_ACCESS_DENIED Handle = 0x889800A1 + UCEERR_INVALIDPACKETHEADER Handle = 0x88980400 + UCEERR_UNKNOWNPACKET Handle = 0x88980401 + UCEERR_ILLEGALPACKET Handle = 0x88980402 + UCEERR_MALFORMEDPACKET Handle = 0x88980403 + UCEERR_ILLEGALHANDLE Handle = 0x88980404 + UCEERR_HANDLELOOKUPFAILED Handle = 0x88980405 + UCEERR_RENDERTHREADFAILURE Handle = 0x88980406 + UCEERR_CTXSTACKFRSTTARGETNULL Handle = 0x88980407 + UCEERR_CONNECTIONIDLOOKUPFAILED Handle = 0x88980408 + UCEERR_BLOCKSFULL Handle = 0x88980409 + UCEERR_MEMORYFAILURE Handle = 0x8898040A + UCEERR_PACKETRECORDOUTOFRANGE Handle = 0x8898040B + UCEERR_ILLEGALRECORDTYPE Handle = 0x8898040C + UCEERR_OUTOFHANDLES Handle = 0x8898040D + UCEERR_UNCHANGABLE_UPDATE_ATTEMPTED Handle = 0x8898040E + UCEERR_NO_MULTIPLE_WORKER_THREADS Handle = 0x8898040F + UCEERR_REMOTINGNOTSUPPORTED Handle = 0x88980410 + UCEERR_MISSINGENDCOMMAND Handle = 0x88980411 + UCEERR_MISSINGBEGINCOMMAND Handle = 0x88980412 + UCEERR_CHANNELSYNCTIMEDOUT Handle = 0x88980413 + UCEERR_CHANNELSYNCABANDONED Handle = 0x88980414 + UCEERR_UNSUPPORTEDTRANSPORTVERSION Handle = 0x88980415 + UCEERR_TRANSPORTUNAVAILABLE Handle = 0x88980416 + UCEERR_FEEDBACK_UNSUPPORTED Handle = 0x88980417 + UCEERR_COMMANDTRANSPORTDENIED Handle = 0x88980418 + UCEERR_GRAPHICSSTREAMUNAVAILABLE Handle = 0x88980419 + UCEERR_GRAPHICSSTREAMALREADYOPEN Handle = 0x88980420 + UCEERR_TRANSPORTDISCONNECTED Handle = 0x88980421 + UCEERR_TRANSPORTOVERLOADED Handle = 0x88980422 + UCEERR_PARTITION_ZOMBIED Handle = 0x88980423 + MILAVERR_NOCLOCK Handle = 0x88980500 + MILAVERR_NOMEDIATYPE Handle = 0x88980501 + MILAVERR_NOVIDEOMIXER Handle = 0x88980502 + MILAVERR_NOVIDEOPRESENTER Handle = 0x88980503 + MILAVERR_NOREADYFRAMES Handle = 0x88980504 + MILAVERR_MODULENOTLOADED Handle = 0x88980505 + MILAVERR_WMPFACTORYNOTREGISTERED Handle = 0x88980506 + MILAVERR_INVALIDWMPVERSION Handle = 0x88980507 + MILAVERR_INSUFFICIENTVIDEORESOURCES Handle = 0x88980508 + MILAVERR_VIDEOACCELERATIONNOTAVAILABLE Handle = 0x88980509 + MILAVERR_REQUESTEDTEXTURETOOBIG Handle = 0x8898050A + MILAVERR_SEEKFAILED Handle = 0x8898050B + MILAVERR_UNEXPECTEDWMPFAILURE Handle = 0x8898050C + MILAVERR_MEDIAPLAYERCLOSED Handle = 0x8898050D + MILAVERR_UNKNOWNHARDWAREERROR Handle = 0x8898050E + MILEFFECTSERR_UNKNOWNPROPERTY Handle = 0x8898060E + MILEFFECTSERR_EFFECTNOTPARTOFGROUP Handle = 0x8898060F + MILEFFECTSERR_NOINPUTSOURCEATTACHED Handle = 0x88980610 + MILEFFECTSERR_CONNECTORNOTCONNECTED Handle = 0x88980611 + MILEFFECTSERR_CONNECTORNOTASSOCIATEDWITHEFFECT Handle = 0x88980612 + MILEFFECTSERR_RESERVED Handle = 0x88980613 + MILEFFECTSERR_CYCLEDETECTED Handle = 0x88980614 + MILEFFECTSERR_EFFECTINMORETHANONEGRAPH Handle = 0x88980615 + MILEFFECTSERR_EFFECTALREADYINAGRAPH Handle = 0x88980616 + MILEFFECTSERR_EFFECTHASNOCHILDREN Handle = 0x88980617 + MILEFFECTSERR_ALREADYATTACHEDTOLISTENER Handle = 0x88980618 + MILEFFECTSERR_NOTAFFINETRANSFORM Handle = 0x88980619 + MILEFFECTSERR_EMPTYBOUNDS Handle = 0x8898061A + MILEFFECTSERR_OUTPUTSIZETOOLARGE Handle = 0x8898061B + DWMERR_STATE_TRANSITION_FAILED Handle = 0x88980700 + DWMERR_THEME_FAILED Handle = 0x88980701 + DWMERR_CATASTROPHIC_FAILURE Handle = 0x88980702 + DCOMPOSITION_ERROR_WINDOW_ALREADY_COMPOSED Handle = 0x88980800 + DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED Handle = 0x88980801 + DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED Handle = 0x88980802 + ONL_E_INVALID_AUTHENTICATION_TARGET Handle = 0x80860001 + ONL_E_ACCESS_DENIED_BY_TOU Handle = 0x80860002 + ONL_E_INVALID_APPLICATION Handle = 0x80860003 + ONL_E_PASSWORD_UPDATE_REQUIRED Handle = 0x80860004 + ONL_E_ACCOUNT_UPDATE_REQUIRED Handle = 0x80860005 + ONL_E_FORCESIGNIN Handle = 0x80860006 + ONL_E_ACCOUNT_LOCKED Handle = 0x80860007 + ONL_E_PARENTAL_CONSENT_REQUIRED Handle = 0x80860008 + ONL_E_EMAIL_VERIFICATION_REQUIRED Handle = 0x80860009 + ONL_E_ACCOUNT_SUSPENDED_COMPROIMISE Handle = 0x8086000A + ONL_E_ACCOUNT_SUSPENDED_ABUSE Handle = 0x8086000B + ONL_E_ACTION_REQUIRED Handle = 0x8086000C + ONL_CONNECTION_COUNT_LIMIT Handle = 0x8086000D + ONL_E_CONNECTED_ACCOUNT_CAN_NOT_SIGNOUT Handle = 0x8086000E + ONL_E_USER_AUTHENTICATION_REQUIRED Handle = 0x8086000F + ONL_E_REQUEST_THROTTLED Handle = 0x80860010 + FA_E_MAX_PERSISTED_ITEMS_REACHED Handle = 0x80270220 + FA_E_HOMEGROUP_NOT_AVAILABLE Handle = 0x80270222 + E_MONITOR_RESOLUTION_TOO_LOW Handle = 0x80270250 + E_ELEVATED_ACTIVATION_NOT_SUPPORTED Handle = 0x80270251 + E_UAC_DISABLED Handle = 0x80270252 + E_FULL_ADMIN_NOT_SUPPORTED Handle = 0x80270253 + E_APPLICATION_NOT_REGISTERED Handle = 0x80270254 + E_MULTIPLE_EXTENSIONS_FOR_APPLICATION Handle = 0x80270255 + E_MULTIPLE_PACKAGES_FOR_FAMILY Handle = 0x80270256 + E_APPLICATION_MANAGER_NOT_RUNNING Handle = 0x80270257 + S_STORE_LAUNCHED_FOR_REMEDIATION Handle = 0x00270258 + S_APPLICATION_ACTIVATION_ERROR_HANDLED_BY_DIALOG Handle = 0x00270259 + E_APPLICATION_ACTIVATION_TIMED_OUT Handle = 0x8027025A + E_APPLICATION_ACTIVATION_EXEC_FAILURE Handle = 0x8027025B + E_APPLICATION_TEMPORARY_LICENSE_ERROR Handle = 0x8027025C + E_APPLICATION_TRIAL_LICENSE_EXPIRED Handle = 0x8027025D + E_SKYDRIVE_ROOT_TARGET_FILE_SYSTEM_NOT_SUPPORTED Handle = 0x80270260 + E_SKYDRIVE_ROOT_TARGET_OVERLAP Handle = 0x80270261 + E_SKYDRIVE_ROOT_TARGET_CANNOT_INDEX Handle = 0x80270262 + E_SKYDRIVE_FILE_NOT_UPLOADED Handle = 0x80270263 + E_SKYDRIVE_UPDATE_AVAILABILITY_FAIL Handle = 0x80270264 + E_SKYDRIVE_ROOT_TARGET_VOLUME_ROOT_NOT_SUPPORTED Handle = 0x80270265 + E_SYNCENGINE_FILE_SIZE_OVER_LIMIT Handle = 0x8802B001 + E_SYNCENGINE_FILE_SIZE_EXCEEDS_REMAINING_QUOTA Handle = 0x8802B002 + E_SYNCENGINE_UNSUPPORTED_FILE_NAME Handle = 0x8802B003 + E_SYNCENGINE_FOLDER_ITEM_COUNT_LIMIT_EXCEEDED Handle = 0x8802B004 + E_SYNCENGINE_FILE_SYNC_PARTNER_ERROR Handle = 0x8802B005 + E_SYNCENGINE_SYNC_PAUSED_BY_SERVICE Handle = 0x8802B006 + E_SYNCENGINE_FILE_IDENTIFIER_UNKNOWN Handle = 0x8802C002 + E_SYNCENGINE_SERVICE_AUTHENTICATION_FAILED Handle = 0x8802C003 + E_SYNCENGINE_UNKNOWN_SERVICE_ERROR Handle = 0x8802C004 + E_SYNCENGINE_SERVICE_RETURNED_UNEXPECTED_SIZE Handle = 0x8802C005 + E_SYNCENGINE_REQUEST_BLOCKED_BY_SERVICE Handle = 0x8802C006 + E_SYNCENGINE_REQUEST_BLOCKED_DUE_TO_CLIENT_ERROR Handle = 0x8802C007 + E_SYNCENGINE_FOLDER_INACCESSIBLE Handle = 0x8802D001 + E_SYNCENGINE_UNSUPPORTED_FOLDER_NAME Handle = 0x8802D002 + E_SYNCENGINE_UNSUPPORTED_MARKET Handle = 0x8802D003 + E_SYNCENGINE_PATH_LENGTH_LIMIT_EXCEEDED Handle = 0x8802D004 + E_SYNCENGINE_REMOTE_PATH_LENGTH_LIMIT_EXCEEDED Handle = 0x8802D005 + E_SYNCENGINE_CLIENT_UPDATE_NEEDED Handle = 0x8802D006 + E_SYNCENGINE_PROXY_AUTHENTICATION_REQUIRED Handle = 0x8802D007 + E_SYNCENGINE_STORAGE_SERVICE_PROVISIONING_FAILED Handle = 0x8802D008 + E_SYNCENGINE_UNSUPPORTED_REPARSE_POINT Handle = 0x8802D009 + E_SYNCENGINE_STORAGE_SERVICE_BLOCKED Handle = 0x8802D00A + E_SYNCENGINE_FOLDER_IN_REDIRECTION Handle = 0x8802D00B + EAS_E_POLICY_NOT_MANAGED_BY_OS Handle = 0x80550001 + EAS_E_POLICY_COMPLIANT_WITH_ACTIONS Handle = 0x80550002 + EAS_E_REQUESTED_POLICY_NOT_ENFORCEABLE Handle = 0x80550003 + EAS_E_CURRENT_USER_HAS_BLANK_PASSWORD Handle = 0x80550004 + EAS_E_REQUESTED_POLICY_PASSWORD_EXPIRATION_INCOMPATIBLE Handle = 0x80550005 + EAS_E_USER_CANNOT_CHANGE_PASSWORD Handle = 0x80550006 + EAS_E_ADMINS_HAVE_BLANK_PASSWORD Handle = 0x80550007 + EAS_E_ADMINS_CANNOT_CHANGE_PASSWORD Handle = 0x80550008 + EAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD Handle = 0x80550009 + EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CONNECTED_ADMINS Handle = 0x8055000A + EAS_E_CONNECTED_ADMINS_NEED_TO_CHANGE_PASSWORD Handle = 0x8055000B + EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CURRENT_CONNECTED_USER Handle = 0x8055000C + EAS_E_CURRENT_CONNECTED_USER_NEED_TO_CHANGE_PASSWORD Handle = 0x8055000D + WEB_E_UNSUPPORTED_FORMAT Handle = 0x83750001 + WEB_E_INVALID_XML Handle = 0x83750002 + WEB_E_MISSING_REQUIRED_ELEMENT Handle = 0x83750003 + WEB_E_MISSING_REQUIRED_ATTRIBUTE Handle = 0x83750004 + WEB_E_UNEXPECTED_CONTENT Handle = 0x83750005 + WEB_E_RESOURCE_TOO_LARGE Handle = 0x83750006 + WEB_E_INVALID_JSON_STRING Handle = 0x83750007 + WEB_E_INVALID_JSON_NUMBER Handle = 0x83750008 + WEB_E_JSON_VALUE_NOT_FOUND Handle = 0x83750009 + HTTP_E_STATUS_UNEXPECTED Handle = 0x80190001 + HTTP_E_STATUS_UNEXPECTED_REDIRECTION Handle = 0x80190003 + HTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR Handle = 0x80190004 + HTTP_E_STATUS_UNEXPECTED_SERVER_ERROR Handle = 0x80190005 + HTTP_E_STATUS_AMBIGUOUS Handle = 0x8019012C + HTTP_E_STATUS_MOVED Handle = 0x8019012D + HTTP_E_STATUS_REDIRECT Handle = 0x8019012E + HTTP_E_STATUS_REDIRECT_METHOD Handle = 0x8019012F + HTTP_E_STATUS_NOT_MODIFIED Handle = 0x80190130 + HTTP_E_STATUS_USE_PROXY Handle = 0x80190131 + HTTP_E_STATUS_REDIRECT_KEEP_VERB Handle = 0x80190133 + HTTP_E_STATUS_BAD_REQUEST Handle = 0x80190190 + HTTP_E_STATUS_DENIED Handle = 0x80190191 + HTTP_E_STATUS_PAYMENT_REQ Handle = 0x80190192 + HTTP_E_STATUS_FORBIDDEN Handle = 0x80190193 + HTTP_E_STATUS_NOT_FOUND Handle = 0x80190194 + HTTP_E_STATUS_BAD_METHOD Handle = 0x80190195 + HTTP_E_STATUS_NONE_ACCEPTABLE Handle = 0x80190196 + HTTP_E_STATUS_PROXY_AUTH_REQ Handle = 0x80190197 + HTTP_E_STATUS_REQUEST_TIMEOUT Handle = 0x80190198 + HTTP_E_STATUS_CONFLICT Handle = 0x80190199 + HTTP_E_STATUS_GONE Handle = 0x8019019A + HTTP_E_STATUS_LENGTH_REQUIRED Handle = 0x8019019B + HTTP_E_STATUS_PRECOND_FAILED Handle = 0x8019019C + HTTP_E_STATUS_REQUEST_TOO_LARGE Handle = 0x8019019D + HTTP_E_STATUS_URI_TOO_LONG Handle = 0x8019019E + HTTP_E_STATUS_UNSUPPORTED_MEDIA Handle = 0x8019019F + HTTP_E_STATUS_RANGE_NOT_SATISFIABLE Handle = 0x801901A0 + HTTP_E_STATUS_EXPECTATION_FAILED Handle = 0x801901A1 + HTTP_E_STATUS_SERVER_ERROR Handle = 0x801901F4 + HTTP_E_STATUS_NOT_SUPPORTED Handle = 0x801901F5 + HTTP_E_STATUS_BAD_GATEWAY Handle = 0x801901F6 + HTTP_E_STATUS_SERVICE_UNAVAIL Handle = 0x801901F7 + HTTP_E_STATUS_GATEWAY_TIMEOUT Handle = 0x801901F8 + HTTP_E_STATUS_VERSION_NOT_SUP Handle = 0x801901F9 + E_INVALID_PROTOCOL_OPERATION Handle = 0x83760001 + E_INVALID_PROTOCOL_FORMAT Handle = 0x83760002 + E_PROTOCOL_EXTENSIONS_NOT_SUPPORTED Handle = 0x83760003 + E_SUBPROTOCOL_NOT_SUPPORTED Handle = 0x83760004 + E_PROTOCOL_VERSION_NOT_SUPPORTED Handle = 0x83760005 + INPUT_E_OUT_OF_ORDER Handle = 0x80400000 + INPUT_E_REENTRANCY Handle = 0x80400001 + INPUT_E_MULTIMODAL Handle = 0x80400002 + INPUT_E_PACKET Handle = 0x80400003 + INPUT_E_FRAME Handle = 0x80400004 + INPUT_E_HISTORY Handle = 0x80400005 + INPUT_E_DEVICE_INFO Handle = 0x80400006 + INPUT_E_TRANSFORM Handle = 0x80400007 + INPUT_E_DEVICE_PROPERTY Handle = 0x80400008 + INET_E_INVALID_URL Handle = 0x800C0002 + INET_E_NO_SESSION Handle = 0x800C0003 + INET_E_CANNOT_CONNECT Handle = 0x800C0004 + INET_E_RESOURCE_NOT_FOUND Handle = 0x800C0005 + INET_E_OBJECT_NOT_FOUND Handle = 0x800C0006 + INET_E_DATA_NOT_AVAILABLE Handle = 0x800C0007 + INET_E_DOWNLOAD_FAILURE Handle = 0x800C0008 + INET_E_AUTHENTICATION_REQUIRED Handle = 0x800C0009 + INET_E_NO_VALID_MEDIA Handle = 0x800C000A + INET_E_CONNECTION_TIMEOUT Handle = 0x800C000B + INET_E_INVALID_REQUEST Handle = 0x800C000C + INET_E_UNKNOWN_PROTOCOL Handle = 0x800C000D + INET_E_SECURITY_PROBLEM Handle = 0x800C000E + INET_E_CANNOT_LOAD_DATA Handle = 0x800C000F + INET_E_CANNOT_INSTANTIATE_OBJECT Handle = 0x800C0010 + INET_E_INVALID_CERTIFICATE Handle = 0x800C0019 + INET_E_REDIRECT_FAILED Handle = 0x800C0014 + INET_E_REDIRECT_TO_DIR Handle = 0x800C0015 + ERROR_DBG_CREATE_PROCESS_FAILURE_LOCKDOWN Handle = 0x80B00001 + ERROR_DBG_ATTACH_PROCESS_FAILURE_LOCKDOWN Handle = 0x80B00002 + ERROR_DBG_CONNECT_SERVER_FAILURE_LOCKDOWN Handle = 0x80B00003 + ERROR_DBG_START_SERVER_FAILURE_LOCKDOWN Handle = 0x80B00004 + ERROR_IO_PREEMPTED Handle = 0x89010001 + JSCRIPT_E_CANTEXECUTE Handle = 0x89020001 + WEP_E_NOT_PROVISIONED_ON_ALL_VOLUMES Handle = 0x88010001 + WEP_E_FIXED_DATA_NOT_SUPPORTED Handle = 0x88010002 + WEP_E_HARDWARE_NOT_COMPLIANT Handle = 0x88010003 + WEP_E_LOCK_NOT_CONFIGURED Handle = 0x88010004 + WEP_E_PROTECTION_SUSPENDED Handle = 0x88010005 + WEP_E_NO_LICENSE Handle = 0x88010006 + WEP_E_OS_NOT_PROTECTED Handle = 0x88010007 + WEP_E_UNEXPECTED_FAIL Handle = 0x88010008 + WEP_E_BUFFER_TOO_LARGE Handle = 0x88010009 + ERROR_SVHDX_ERROR_STORED Handle = 0xC05C0000 + ERROR_SVHDX_ERROR_NOT_AVAILABLE Handle = 0xC05CFF00 + ERROR_SVHDX_UNIT_ATTENTION_AVAILABLE Handle = 0xC05CFF01 + ERROR_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED Handle = 0xC05CFF02 + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED Handle = 0xC05CFF03 + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED Handle = 0xC05CFF04 + ERROR_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED Handle = 0xC05CFF05 + ERROR_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED Handle = 0xC05CFF06 + ERROR_SVHDX_RESERVATION_CONFLICT Handle = 0xC05CFF07 + ERROR_SVHDX_WRONG_FILE_TYPE Handle = 0xC05CFF08 + ERROR_SVHDX_VERSION_MISMATCH Handle = 0xC05CFF09 + ERROR_VHD_SHARED Handle = 0xC05CFF0A + ERROR_SVHDX_NO_INITIATOR Handle = 0xC05CFF0B + ERROR_VHDSET_BACKING_STORAGE_NOT_FOUND Handle = 0xC05CFF0C + ERROR_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP Handle = 0xC05D0000 + ERROR_SMB_BAD_CLUSTER_DIALECT Handle = 0xC05D0001 + WININET_E_OUT_OF_HANDLES Handle = 0x80072EE1 + WININET_E_TIMEOUT Handle = 0x80072EE2 + WININET_E_EXTENDED_ERROR Handle = 0x80072EE3 + WININET_E_INTERNAL_ERROR Handle = 0x80072EE4 + WININET_E_INVALID_URL Handle = 0x80072EE5 + WININET_E_UNRECOGNIZED_SCHEME Handle = 0x80072EE6 + WININET_E_NAME_NOT_RESOLVED Handle = 0x80072EE7 + WININET_E_PROTOCOL_NOT_FOUND Handle = 0x80072EE8 + WININET_E_INVALID_OPTION Handle = 0x80072EE9 + WININET_E_BAD_OPTION_LENGTH Handle = 0x80072EEA + WININET_E_OPTION_NOT_SETTABLE Handle = 0x80072EEB + WININET_E_SHUTDOWN Handle = 0x80072EEC + WININET_E_INCORRECT_USER_NAME Handle = 0x80072EED + WININET_E_INCORRECT_PASSWORD Handle = 0x80072EEE + WININET_E_LOGIN_FAILURE Handle = 0x80072EEF + WININET_E_INVALID_OPERATION Handle = 0x80072EF0 + WININET_E_OPERATION_CANCELLED Handle = 0x80072EF1 + WININET_E_INCORRECT_HANDLE_TYPE Handle = 0x80072EF2 + WININET_E_INCORRECT_HANDLE_STATE Handle = 0x80072EF3 + WININET_E_NOT_PROXY_REQUEST Handle = 0x80072EF4 + WININET_E_REGISTRY_VALUE_NOT_FOUND Handle = 0x80072EF5 + WININET_E_BAD_REGISTRY_PARAMETER Handle = 0x80072EF6 + WININET_E_NO_DIRECT_ACCESS Handle = 0x80072EF7 + WININET_E_NO_CONTEXT Handle = 0x80072EF8 + WININET_E_NO_CALLBACK Handle = 0x80072EF9 + WININET_E_REQUEST_PENDING Handle = 0x80072EFA + WININET_E_INCORRECT_FORMAT Handle = 0x80072EFB + WININET_E_ITEM_NOT_FOUND Handle = 0x80072EFC + WININET_E_CANNOT_CONNECT Handle = 0x80072EFD + WININET_E_CONNECTION_ABORTED Handle = 0x80072EFE + WININET_E_CONNECTION_RESET Handle = 0x80072EFF + WININET_E_FORCE_RETRY Handle = 0x80072F00 + WININET_E_INVALID_PROXY_REQUEST Handle = 0x80072F01 + WININET_E_NEED_UI Handle = 0x80072F02 + WININET_E_HANDLE_EXISTS Handle = 0x80072F04 + WININET_E_SEC_CERT_DATE_INVALID Handle = 0x80072F05 + WININET_E_SEC_CERT_CN_INVALID Handle = 0x80072F06 + WININET_E_HTTP_TO_HTTPS_ON_REDIR Handle = 0x80072F07 + WININET_E_HTTPS_TO_HTTP_ON_REDIR Handle = 0x80072F08 + WININET_E_MIXED_SECURITY Handle = 0x80072F09 + WININET_E_CHG_POST_IS_NON_SECURE Handle = 0x80072F0A + WININET_E_POST_IS_NON_SECURE Handle = 0x80072F0B + WININET_E_CLIENT_AUTH_CERT_NEEDED Handle = 0x80072F0C + WININET_E_INVALID_CA Handle = 0x80072F0D + WININET_E_CLIENT_AUTH_NOT_SETUP Handle = 0x80072F0E + WININET_E_ASYNC_THREAD_FAILED Handle = 0x80072F0F + WININET_E_REDIRECT_SCHEME_CHANGE Handle = 0x80072F10 + WININET_E_DIALOG_PENDING Handle = 0x80072F11 + WININET_E_RETRY_DIALOG Handle = 0x80072F12 + WININET_E_NO_NEW_CONTAINERS Handle = 0x80072F13 + WININET_E_HTTPS_HTTP_SUBMIT_REDIR Handle = 0x80072F14 + WININET_E_SEC_CERT_ERRORS Handle = 0x80072F17 + WININET_E_SEC_CERT_REV_FAILED Handle = 0x80072F19 + WININET_E_HEADER_NOT_FOUND Handle = 0x80072F76 + WININET_E_DOWNLEVEL_SERVER Handle = 0x80072F77 + WININET_E_INVALID_SERVER_RESPONSE Handle = 0x80072F78 + WININET_E_INVALID_HEADER Handle = 0x80072F79 + WININET_E_INVALID_QUERY_REQUEST Handle = 0x80072F7A + WININET_E_HEADER_ALREADY_EXISTS Handle = 0x80072F7B + WININET_E_REDIRECT_FAILED Handle = 0x80072F7C + WININET_E_SECURITY_CHANNEL_ERROR Handle = 0x80072F7D + WININET_E_UNABLE_TO_CACHE_FILE Handle = 0x80072F7E + WININET_E_TCPIP_NOT_INSTALLED Handle = 0x80072F7F + WININET_E_DISCONNECTED Handle = 0x80072F83 + WININET_E_SERVER_UNREACHABLE Handle = 0x80072F84 + WININET_E_PROXY_SERVER_UNREACHABLE Handle = 0x80072F85 + WININET_E_BAD_AUTO_PROXY_SCRIPT Handle = 0x80072F86 + WININET_E_UNABLE_TO_DOWNLOAD_SCRIPT Handle = 0x80072F87 + WININET_E_SEC_INVALID_CERT Handle = 0x80072F89 + WININET_E_SEC_CERT_REVOKED Handle = 0x80072F8A + WININET_E_FAILED_DUETOSECURITYCHECK Handle = 0x80072F8B + WININET_E_NOT_INITIALIZED Handle = 0x80072F8C + WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY Handle = 0x80072F8E + WININET_E_DECODING_FAILED Handle = 0x80072F8F + WININET_E_NOT_REDIRECTED Handle = 0x80072F80 + WININET_E_COOKIE_NEEDS_CONFIRMATION Handle = 0x80072F81 + WININET_E_COOKIE_DECLINED Handle = 0x80072F82 + WININET_E_REDIRECT_NEEDS_CONFIRMATION Handle = 0x80072F88 + SQLITE_E_ERROR Handle = 0x87AF0001 + SQLITE_E_INTERNAL Handle = 0x87AF0002 + SQLITE_E_PERM Handle = 0x87AF0003 + SQLITE_E_ABORT Handle = 0x87AF0004 + SQLITE_E_BUSY Handle = 0x87AF0005 + SQLITE_E_LOCKED Handle = 0x87AF0006 + SQLITE_E_NOMEM Handle = 0x87AF0007 + SQLITE_E_READONLY Handle = 0x87AF0008 + SQLITE_E_INTERRUPT Handle = 0x87AF0009 + SQLITE_E_IOERR Handle = 0x87AF000A + SQLITE_E_CORRUPT Handle = 0x87AF000B + SQLITE_E_NOTFOUND Handle = 0x87AF000C + SQLITE_E_FULL Handle = 0x87AF000D + SQLITE_E_CANTOPEN Handle = 0x87AF000E + SQLITE_E_PROTOCOL Handle = 0x87AF000F + SQLITE_E_EMPTY Handle = 0x87AF0010 + SQLITE_E_SCHEMA Handle = 0x87AF0011 + SQLITE_E_TOOBIG Handle = 0x87AF0012 + SQLITE_E_CONSTRAINT Handle = 0x87AF0013 + SQLITE_E_MISMATCH Handle = 0x87AF0014 + SQLITE_E_MISUSE Handle = 0x87AF0015 + SQLITE_E_NOLFS Handle = 0x87AF0016 + SQLITE_E_AUTH Handle = 0x87AF0017 + SQLITE_E_FORMAT Handle = 0x87AF0018 + SQLITE_E_RANGE Handle = 0x87AF0019 + SQLITE_E_NOTADB Handle = 0x87AF001A + SQLITE_E_NOTICE Handle = 0x87AF001B + SQLITE_E_WARNING Handle = 0x87AF001C + SQLITE_E_ROW Handle = 0x87AF0064 + SQLITE_E_DONE Handle = 0x87AF0065 + SQLITE_E_IOERR_READ Handle = 0x87AF010A + SQLITE_E_IOERR_SHORT_READ Handle = 0x87AF020A + SQLITE_E_IOERR_WRITE Handle = 0x87AF030A + SQLITE_E_IOERR_FSYNC Handle = 0x87AF040A + SQLITE_E_IOERR_DIR_FSYNC Handle = 0x87AF050A + SQLITE_E_IOERR_TRUNCATE Handle = 0x87AF060A + SQLITE_E_IOERR_FSTAT Handle = 0x87AF070A + SQLITE_E_IOERR_UNLOCK Handle = 0x87AF080A + SQLITE_E_IOERR_RDLOCK Handle = 0x87AF090A + SQLITE_E_IOERR_DELETE Handle = 0x87AF0A0A + SQLITE_E_IOERR_BLOCKED Handle = 0x87AF0B0A + SQLITE_E_IOERR_NOMEM Handle = 0x87AF0C0A + SQLITE_E_IOERR_ACCESS Handle = 0x87AF0D0A + SQLITE_E_IOERR_CHECKRESERVEDLOCK Handle = 0x87AF0E0A + SQLITE_E_IOERR_LOCK Handle = 0x87AF0F0A + SQLITE_E_IOERR_CLOSE Handle = 0x87AF100A + SQLITE_E_IOERR_DIR_CLOSE Handle = 0x87AF110A + SQLITE_E_IOERR_SHMOPEN Handle = 0x87AF120A + SQLITE_E_IOERR_SHMSIZE Handle = 0x87AF130A + SQLITE_E_IOERR_SHMLOCK Handle = 0x87AF140A + SQLITE_E_IOERR_SHMMAP Handle = 0x87AF150A + SQLITE_E_IOERR_SEEK Handle = 0x87AF160A + SQLITE_E_IOERR_DELETE_NOENT Handle = 0x87AF170A + SQLITE_E_IOERR_MMAP Handle = 0x87AF180A + SQLITE_E_IOERR_GETTEMPPATH Handle = 0x87AF190A + SQLITE_E_IOERR_CONVPATH Handle = 0x87AF1A0A + SQLITE_E_IOERR_VNODE Handle = 0x87AF1A02 + SQLITE_E_IOERR_AUTH Handle = 0x87AF1A03 + SQLITE_E_LOCKED_SHAREDCACHE Handle = 0x87AF0106 + SQLITE_E_BUSY_RECOVERY Handle = 0x87AF0105 + SQLITE_E_BUSY_SNAPSHOT Handle = 0x87AF0205 + SQLITE_E_CANTOPEN_NOTEMPDIR Handle = 0x87AF010E + SQLITE_E_CANTOPEN_ISDIR Handle = 0x87AF020E + SQLITE_E_CANTOPEN_FULLPATH Handle = 0x87AF030E + SQLITE_E_CANTOPEN_CONVPATH Handle = 0x87AF040E + SQLITE_E_CORRUPT_VTAB Handle = 0x87AF010B + SQLITE_E_READONLY_RECOVERY Handle = 0x87AF0108 + SQLITE_E_READONLY_CANTLOCK Handle = 0x87AF0208 + SQLITE_E_READONLY_ROLLBACK Handle = 0x87AF0308 + SQLITE_E_READONLY_DBMOVED Handle = 0x87AF0408 + SQLITE_E_ABORT_ROLLBACK Handle = 0x87AF0204 + SQLITE_E_CONSTRAINT_CHECK Handle = 0x87AF0113 + SQLITE_E_CONSTRAINT_COMMITHOOK Handle = 0x87AF0213 + SQLITE_E_CONSTRAINT_FOREIGNKEY Handle = 0x87AF0313 + SQLITE_E_CONSTRAINT_FUNCTION Handle = 0x87AF0413 + SQLITE_E_CONSTRAINT_NOTNULL Handle = 0x87AF0513 + SQLITE_E_CONSTRAINT_PRIMARYKEY Handle = 0x87AF0613 + SQLITE_E_CONSTRAINT_TRIGGER Handle = 0x87AF0713 + SQLITE_E_CONSTRAINT_UNIQUE Handle = 0x87AF0813 + SQLITE_E_CONSTRAINT_VTAB Handle = 0x87AF0913 + SQLITE_E_CONSTRAINT_ROWID Handle = 0x87AF0A13 + SQLITE_E_NOTICE_RECOVER_WAL Handle = 0x87AF011B + SQLITE_E_NOTICE_RECOVER_ROLLBACK Handle = 0x87AF021B + SQLITE_E_WARNING_AUTOINDEX Handle = 0x87AF011C + UTC_E_TOGGLE_TRACE_STARTED Handle = 0x87C51001 + UTC_E_ALTERNATIVE_TRACE_CANNOT_PREEMPT Handle = 0x87C51002 + UTC_E_AOT_NOT_RUNNING Handle = 0x87C51003 + UTC_E_SCRIPT_TYPE_INVALID Handle = 0x87C51004 + UTC_E_SCENARIODEF_NOT_FOUND Handle = 0x87C51005 + UTC_E_TRACEPROFILE_NOT_FOUND Handle = 0x87C51006 + UTC_E_FORWARDER_ALREADY_ENABLED Handle = 0x87C51007 + UTC_E_FORWARDER_ALREADY_DISABLED Handle = 0x87C51008 + UTC_E_EVENTLOG_ENTRY_MALFORMED Handle = 0x87C51009 + UTC_E_DIAGRULES_SCHEMAVERSION_MISMATCH Handle = 0x87C5100A + UTC_E_SCRIPT_TERMINATED Handle = 0x87C5100B + UTC_E_INVALID_CUSTOM_FILTER Handle = 0x87C5100C + UTC_E_TRACE_NOT_RUNNING Handle = 0x87C5100D + UTC_E_REESCALATED_TOO_QUICKLY Handle = 0x87C5100E + UTC_E_ESCALATION_ALREADY_RUNNING Handle = 0x87C5100F + UTC_E_PERFTRACK_ALREADY_TRACING Handle = 0x87C51010 + UTC_E_REACHED_MAX_ESCALATIONS Handle = 0x87C51011 + UTC_E_FORWARDER_PRODUCER_MISMATCH Handle = 0x87C51012 + UTC_E_INTENTIONAL_SCRIPT_FAILURE Handle = 0x87C51013 + UTC_E_SQM_INIT_FAILED Handle = 0x87C51014 + UTC_E_NO_WER_LOGGER_SUPPORTED Handle = 0x87C51015 + UTC_E_TRACERS_DONT_EXIST Handle = 0x87C51016 + UTC_E_WINRT_INIT_FAILED Handle = 0x87C51017 + UTC_E_SCENARIODEF_SCHEMAVERSION_MISMATCH Handle = 0x87C51018 + UTC_E_INVALID_FILTER Handle = 0x87C51019 + UTC_E_EXE_TERMINATED Handle = 0x87C5101A + UTC_E_ESCALATION_NOT_AUTHORIZED Handle = 0x87C5101B + UTC_E_SETUP_NOT_AUTHORIZED Handle = 0x87C5101C + UTC_E_CHILD_PROCESS_FAILED Handle = 0x87C5101D + UTC_E_COMMAND_LINE_NOT_AUTHORIZED Handle = 0x87C5101E + UTC_E_CANNOT_LOAD_SCENARIO_EDITOR_XML Handle = 0x87C5101F + UTC_E_ESCALATION_TIMED_OUT Handle = 0x87C51020 + UTC_E_SETUP_TIMED_OUT Handle = 0x87C51021 + UTC_E_TRIGGER_MISMATCH Handle = 0x87C51022 + UTC_E_TRIGGER_NOT_FOUND Handle = 0x87C51023 + UTC_E_SIF_NOT_SUPPORTED Handle = 0x87C51024 + UTC_E_DELAY_TERMINATED Handle = 0x87C51025 + UTC_E_DEVICE_TICKET_ERROR Handle = 0x87C51026 + UTC_E_TRACE_BUFFER_LIMIT_EXCEEDED Handle = 0x87C51027 + UTC_E_API_RESULT_UNAVAILABLE Handle = 0x87C51028 + UTC_E_RPC_TIMEOUT Handle = 0x87C51029 + UTC_E_RPC_WAIT_FAILED Handle = 0x87C5102A + UTC_E_API_BUSY Handle = 0x87C5102B + UTC_E_TRACE_MIN_DURATION_REQUIREMENT_NOT_MET Handle = 0x87C5102C + UTC_E_EXCLUSIVITY_NOT_AVAILABLE Handle = 0x87C5102D + UTC_E_GETFILE_FILE_PATH_NOT_APPROVED Handle = 0x87C5102E + UTC_E_ESCALATION_DIRECTORY_ALREADY_EXISTS Handle = 0x87C5102F + UTC_E_TIME_TRIGGER_ON_START_INVALID Handle = 0x87C51030 + UTC_E_TIME_TRIGGER_ONLY_VALID_ON_SINGLE_TRANSITION Handle = 0x87C51031 + UTC_E_TIME_TRIGGER_INVALID_TIME_RANGE Handle = 0x87C51032 + UTC_E_MULTIPLE_TIME_TRIGGER_ON_SINGLE_STATE Handle = 0x87C51033 + UTC_E_BINARY_MISSING Handle = 0x87C51034 + UTC_E_NETWORK_CAPTURE_NOT_ALLOWED Handle = 0x87C51035 + UTC_E_FAILED_TO_RESOLVE_CONTAINER_ID Handle = 0x87C51036 + UTC_E_UNABLE_TO_RESOLVE_SESSION Handle = 0x87C51037 + UTC_E_THROTTLED Handle = 0x87C51038 + UTC_E_UNAPPROVED_SCRIPT Handle = 0x87C51039 + UTC_E_SCRIPT_MISSING Handle = 0x87C5103A + UTC_E_SCENARIO_THROTTLED Handle = 0x87C5103B + UTC_E_API_NOT_SUPPORTED Handle = 0x87C5103C + UTC_E_GETFILE_EXTERNAL_PATH_NOT_APPROVED Handle = 0x87C5103D + UTC_E_TRY_GET_SCENARIO_TIMEOUT_EXCEEDED Handle = 0x87C5103E + UTC_E_CERT_REV_FAILED Handle = 0x87C5103F + UTC_E_FAILED_TO_START_NDISCAP Handle = 0x87C51040 + UTC_E_KERNELDUMP_LIMIT_REACHED Handle = 0x87C51041 + UTC_E_MISSING_AGGREGATE_EVENT_TAG Handle = 0x87C51042 + UTC_E_INVALID_AGGREGATION_STRUCT Handle = 0x87C51043 + UTC_E_ACTION_NOT_SUPPORTED_IN_DESTINATION Handle = 0x87C51044 + UTC_E_FILTER_MISSING_ATTRIBUTE Handle = 0x87C51045 + UTC_E_FILTER_INVALID_TYPE Handle = 0x87C51046 + UTC_E_FILTER_VARIABLE_NOT_FOUND Handle = 0x87C51047 + UTC_E_FILTER_FUNCTION_RESTRICTED Handle = 0x87C51048 + UTC_E_FILTER_VERSION_MISMATCH Handle = 0x87C51049 + UTC_E_FILTER_INVALID_FUNCTION Handle = 0x87C51050 + UTC_E_FILTER_INVALID_FUNCTION_PARAMS Handle = 0x87C51051 + UTC_E_FILTER_INVALID_COMMAND Handle = 0x87C51052 + UTC_E_FILTER_ILLEGAL_EVAL Handle = 0x87C51053 + UTC_E_TTTRACER_RETURNED_ERROR Handle = 0x87C51054 + UTC_E_AGENT_DIAGNOSTICS_TOO_LARGE Handle = 0x87C51055 + UTC_E_FAILED_TO_RECEIVE_AGENT_DIAGNOSTICS Handle = 0x87C51056 + UTC_E_SCENARIO_HAS_NO_ACTIONS Handle = 0x87C51057 + UTC_E_TTTRACER_STORAGE_FULL Handle = 0x87C51058 + UTC_E_INSUFFICIENT_SPACE_TO_START_TRACE Handle = 0x87C51059 + UTC_E_ESCALATION_CANCELLED_AT_SHUTDOWN Handle = 0x87C5105A + UTC_E_GETFILEINFOACTION_FILE_NOT_APPROVED Handle = 0x87C5105B + UTC_E_SETREGKEYACTION_TYPE_NOT_APPROVED Handle = 0x87C5105C + WINML_ERR_INVALID_DEVICE Handle = 0x88900001 + WINML_ERR_INVALID_BINDING Handle = 0x88900002 + WINML_ERR_VALUE_NOTFOUND Handle = 0x88900003 + WINML_ERR_SIZE_MISMATCH Handle = 0x88900004 + STATUS_WAIT_0 NTStatus = 0x00000000 + STATUS_SUCCESS NTStatus = 0x00000000 + STATUS_WAIT_1 NTStatus = 0x00000001 + STATUS_WAIT_2 NTStatus = 0x00000002 + STATUS_WAIT_3 NTStatus = 0x00000003 + STATUS_WAIT_63 NTStatus = 0x0000003F + STATUS_ABANDONED NTStatus = 0x00000080 + STATUS_ABANDONED_WAIT_0 NTStatus = 0x00000080 + STATUS_ABANDONED_WAIT_63 NTStatus = 0x000000BF + STATUS_USER_APC NTStatus = 0x000000C0 + STATUS_ALREADY_COMPLETE NTStatus = 0x000000FF + STATUS_KERNEL_APC NTStatus = 0x00000100 + STATUS_ALERTED NTStatus = 0x00000101 + STATUS_TIMEOUT NTStatus = 0x00000102 + STATUS_PENDING NTStatus = 0x00000103 + STATUS_REPARSE NTStatus = 0x00000104 + STATUS_MORE_ENTRIES NTStatus = 0x00000105 + STATUS_NOT_ALL_ASSIGNED NTStatus = 0x00000106 + STATUS_SOME_NOT_MAPPED NTStatus = 0x00000107 + STATUS_OPLOCK_BREAK_IN_PROGRESS NTStatus = 0x00000108 + STATUS_VOLUME_MOUNTED NTStatus = 0x00000109 + STATUS_RXACT_COMMITTED NTStatus = 0x0000010A + STATUS_NOTIFY_CLEANUP NTStatus = 0x0000010B + STATUS_NOTIFY_ENUM_DIR NTStatus = 0x0000010C + STATUS_NO_QUOTAS_FOR_ACCOUNT NTStatus = 0x0000010D + STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED NTStatus = 0x0000010E + STATUS_PAGE_FAULT_TRANSITION NTStatus = 0x00000110 + STATUS_PAGE_FAULT_DEMAND_ZERO NTStatus = 0x00000111 + STATUS_PAGE_FAULT_COPY_ON_WRITE NTStatus = 0x00000112 + STATUS_PAGE_FAULT_GUARD_PAGE NTStatus = 0x00000113 + STATUS_PAGE_FAULT_PAGING_FILE NTStatus = 0x00000114 + STATUS_CACHE_PAGE_LOCKED NTStatus = 0x00000115 + STATUS_CRASH_DUMP NTStatus = 0x00000116 + STATUS_BUFFER_ALL_ZEROS NTStatus = 0x00000117 + STATUS_REPARSE_OBJECT NTStatus = 0x00000118 + STATUS_RESOURCE_REQUIREMENTS_CHANGED NTStatus = 0x00000119 + STATUS_TRANSLATION_COMPLETE NTStatus = 0x00000120 + STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY NTStatus = 0x00000121 + STATUS_NOTHING_TO_TERMINATE NTStatus = 0x00000122 + STATUS_PROCESS_NOT_IN_JOB NTStatus = 0x00000123 + STATUS_PROCESS_IN_JOB NTStatus = 0x00000124 + STATUS_VOLSNAP_HIBERNATE_READY NTStatus = 0x00000125 + STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY NTStatus = 0x00000126 + STATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED NTStatus = 0x00000127 + STATUS_INTERRUPT_STILL_CONNECTED NTStatus = 0x00000128 + STATUS_PROCESS_CLONED NTStatus = 0x00000129 + STATUS_FILE_LOCKED_WITH_ONLY_READERS NTStatus = 0x0000012A + STATUS_FILE_LOCKED_WITH_WRITERS NTStatus = 0x0000012B + STATUS_VALID_IMAGE_HASH NTStatus = 0x0000012C + STATUS_VALID_CATALOG_HASH NTStatus = 0x0000012D + STATUS_VALID_STRONG_CODE_HASH NTStatus = 0x0000012E + STATUS_GHOSTED NTStatus = 0x0000012F + STATUS_DATA_OVERWRITTEN NTStatus = 0x00000130 + STATUS_RESOURCEMANAGER_READ_ONLY NTStatus = 0x00000202 + STATUS_RING_PREVIOUSLY_EMPTY NTStatus = 0x00000210 + STATUS_RING_PREVIOUSLY_FULL NTStatus = 0x00000211 + STATUS_RING_PREVIOUSLY_ABOVE_QUOTA NTStatus = 0x00000212 + STATUS_RING_NEWLY_EMPTY NTStatus = 0x00000213 + STATUS_RING_SIGNAL_OPPOSITE_ENDPOINT NTStatus = 0x00000214 + STATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE NTStatus = 0x00000215 + STATUS_OPLOCK_HANDLE_CLOSED NTStatus = 0x00000216 + STATUS_WAIT_FOR_OPLOCK NTStatus = 0x00000367 + STATUS_REPARSE_GLOBAL NTStatus = 0x00000368 + STATUS_FLT_IO_COMPLETE NTStatus = 0x001C0001 + STATUS_OBJECT_NAME_EXISTS NTStatus = 0x40000000 + STATUS_THREAD_WAS_SUSPENDED NTStatus = 0x40000001 + STATUS_WORKING_SET_LIMIT_RANGE NTStatus = 0x40000002 + STATUS_IMAGE_NOT_AT_BASE NTStatus = 0x40000003 + STATUS_RXACT_STATE_CREATED NTStatus = 0x40000004 + STATUS_SEGMENT_NOTIFICATION NTStatus = 0x40000005 + STATUS_LOCAL_USER_SESSION_KEY NTStatus = 0x40000006 + STATUS_BAD_CURRENT_DIRECTORY NTStatus = 0x40000007 + STATUS_SERIAL_MORE_WRITES NTStatus = 0x40000008 + STATUS_REGISTRY_RECOVERED NTStatus = 0x40000009 + STATUS_FT_READ_RECOVERY_FROM_BACKUP NTStatus = 0x4000000A + STATUS_FT_WRITE_RECOVERY NTStatus = 0x4000000B + STATUS_SERIAL_COUNTER_TIMEOUT NTStatus = 0x4000000C + STATUS_NULL_LM_PASSWORD NTStatus = 0x4000000D + STATUS_IMAGE_MACHINE_TYPE_MISMATCH NTStatus = 0x4000000E + STATUS_RECEIVE_PARTIAL NTStatus = 0x4000000F + STATUS_RECEIVE_EXPEDITED NTStatus = 0x40000010 + STATUS_RECEIVE_PARTIAL_EXPEDITED NTStatus = 0x40000011 + STATUS_EVENT_DONE NTStatus = 0x40000012 + STATUS_EVENT_PENDING NTStatus = 0x40000013 + STATUS_CHECKING_FILE_SYSTEM NTStatus = 0x40000014 + STATUS_FATAL_APP_EXIT NTStatus = 0x40000015 + STATUS_PREDEFINED_HANDLE NTStatus = 0x40000016 + STATUS_WAS_UNLOCKED NTStatus = 0x40000017 + STATUS_SERVICE_NOTIFICATION NTStatus = 0x40000018 + STATUS_WAS_LOCKED NTStatus = 0x40000019 + STATUS_LOG_HARD_ERROR NTStatus = 0x4000001A + STATUS_ALREADY_WIN32 NTStatus = 0x4000001B + STATUS_WX86_UNSIMULATE NTStatus = 0x4000001C + STATUS_WX86_CONTINUE NTStatus = 0x4000001D + STATUS_WX86_SINGLE_STEP NTStatus = 0x4000001E + STATUS_WX86_BREAKPOINT NTStatus = 0x4000001F + STATUS_WX86_EXCEPTION_CONTINUE NTStatus = 0x40000020 + STATUS_WX86_EXCEPTION_LASTCHANCE NTStatus = 0x40000021 + STATUS_WX86_EXCEPTION_CHAIN NTStatus = 0x40000022 + STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE NTStatus = 0x40000023 + STATUS_NO_YIELD_PERFORMED NTStatus = 0x40000024 + STATUS_TIMER_RESUME_IGNORED NTStatus = 0x40000025 + STATUS_ARBITRATION_UNHANDLED NTStatus = 0x40000026 + STATUS_CARDBUS_NOT_SUPPORTED NTStatus = 0x40000027 + STATUS_WX86_CREATEWX86TIB NTStatus = 0x40000028 + STATUS_MP_PROCESSOR_MISMATCH NTStatus = 0x40000029 + STATUS_HIBERNATED NTStatus = 0x4000002A + STATUS_RESUME_HIBERNATION NTStatus = 0x4000002B + STATUS_FIRMWARE_UPDATED NTStatus = 0x4000002C + STATUS_DRIVERS_LEAKING_LOCKED_PAGES NTStatus = 0x4000002D + STATUS_MESSAGE_RETRIEVED NTStatus = 0x4000002E + STATUS_SYSTEM_POWERSTATE_TRANSITION NTStatus = 0x4000002F + STATUS_ALPC_CHECK_COMPLETION_LIST NTStatus = 0x40000030 + STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION NTStatus = 0x40000031 + STATUS_ACCESS_AUDIT_BY_POLICY NTStatus = 0x40000032 + STATUS_ABANDON_HIBERFILE NTStatus = 0x40000033 + STATUS_BIZRULES_NOT_ENABLED NTStatus = 0x40000034 + STATUS_FT_READ_FROM_COPY NTStatus = 0x40000035 + STATUS_IMAGE_AT_DIFFERENT_BASE NTStatus = 0x40000036 + STATUS_PATCH_DEFERRED NTStatus = 0x40000037 + STATUS_HEURISTIC_DAMAGE_POSSIBLE NTStatus = 0x40190001 + STATUS_GUARD_PAGE_VIOLATION NTStatus = 0x80000001 + STATUS_DATATYPE_MISALIGNMENT NTStatus = 0x80000002 + STATUS_BREAKPOINT NTStatus = 0x80000003 + STATUS_SINGLE_STEP NTStatus = 0x80000004 + STATUS_BUFFER_OVERFLOW NTStatus = 0x80000005 + STATUS_NO_MORE_FILES NTStatus = 0x80000006 + STATUS_WAKE_SYSTEM_DEBUGGER NTStatus = 0x80000007 + STATUS_HANDLES_CLOSED NTStatus = 0x8000000A + STATUS_NO_INHERITANCE NTStatus = 0x8000000B + STATUS_GUID_SUBSTITUTION_MADE NTStatus = 0x8000000C + STATUS_PARTIAL_COPY NTStatus = 0x8000000D + STATUS_DEVICE_PAPER_EMPTY NTStatus = 0x8000000E + STATUS_DEVICE_POWERED_OFF NTStatus = 0x8000000F + STATUS_DEVICE_OFF_LINE NTStatus = 0x80000010 + STATUS_DEVICE_BUSY NTStatus = 0x80000011 + STATUS_NO_MORE_EAS NTStatus = 0x80000012 + STATUS_INVALID_EA_NAME NTStatus = 0x80000013 + STATUS_EA_LIST_INCONSISTENT NTStatus = 0x80000014 + STATUS_INVALID_EA_FLAG NTStatus = 0x80000015 + STATUS_VERIFY_REQUIRED NTStatus = 0x80000016 + STATUS_EXTRANEOUS_INFORMATION NTStatus = 0x80000017 + STATUS_RXACT_COMMIT_NECESSARY NTStatus = 0x80000018 + STATUS_NO_MORE_ENTRIES NTStatus = 0x8000001A + STATUS_FILEMARK_DETECTED NTStatus = 0x8000001B + STATUS_MEDIA_CHANGED NTStatus = 0x8000001C + STATUS_BUS_RESET NTStatus = 0x8000001D + STATUS_END_OF_MEDIA NTStatus = 0x8000001E + STATUS_BEGINNING_OF_MEDIA NTStatus = 0x8000001F + STATUS_MEDIA_CHECK NTStatus = 0x80000020 + STATUS_SETMARK_DETECTED NTStatus = 0x80000021 + STATUS_NO_DATA_DETECTED NTStatus = 0x80000022 + STATUS_REDIRECTOR_HAS_OPEN_HANDLES NTStatus = 0x80000023 + STATUS_SERVER_HAS_OPEN_HANDLES NTStatus = 0x80000024 + STATUS_ALREADY_DISCONNECTED NTStatus = 0x80000025 + STATUS_LONGJUMP NTStatus = 0x80000026 + STATUS_CLEANER_CARTRIDGE_INSTALLED NTStatus = 0x80000027 + STATUS_PLUGPLAY_QUERY_VETOED NTStatus = 0x80000028 + STATUS_UNWIND_CONSOLIDATE NTStatus = 0x80000029 + STATUS_REGISTRY_HIVE_RECOVERED NTStatus = 0x8000002A + STATUS_DLL_MIGHT_BE_INSECURE NTStatus = 0x8000002B + STATUS_DLL_MIGHT_BE_INCOMPATIBLE NTStatus = 0x8000002C + STATUS_STOPPED_ON_SYMLINK NTStatus = 0x8000002D + STATUS_CANNOT_GRANT_REQUESTED_OPLOCK NTStatus = 0x8000002E + STATUS_NO_ACE_CONDITION NTStatus = 0x8000002F + STATUS_DEVICE_SUPPORT_IN_PROGRESS NTStatus = 0x80000030 + STATUS_DEVICE_POWER_CYCLE_REQUIRED NTStatus = 0x80000031 + STATUS_NO_WORK_DONE NTStatus = 0x80000032 + STATUS_CLUSTER_NODE_ALREADY_UP NTStatus = 0x80130001 + STATUS_CLUSTER_NODE_ALREADY_DOWN NTStatus = 0x80130002 + STATUS_CLUSTER_NETWORK_ALREADY_ONLINE NTStatus = 0x80130003 + STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE NTStatus = 0x80130004 + STATUS_CLUSTER_NODE_ALREADY_MEMBER NTStatus = 0x80130005 + STATUS_FLT_BUFFER_TOO_SMALL NTStatus = 0x801C0001 + STATUS_FVE_PARTIAL_METADATA NTStatus = 0x80210001 + STATUS_FVE_TRANSIENT_STATE NTStatus = 0x80210002 + STATUS_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH NTStatus = 0x8000CF00 + STATUS_UNSUCCESSFUL NTStatus = 0xC0000001 + STATUS_NOT_IMPLEMENTED NTStatus = 0xC0000002 + STATUS_INVALID_INFO_CLASS NTStatus = 0xC0000003 + STATUS_INFO_LENGTH_MISMATCH NTStatus = 0xC0000004 + STATUS_ACCESS_VIOLATION NTStatus = 0xC0000005 + STATUS_IN_PAGE_ERROR NTStatus = 0xC0000006 + STATUS_PAGEFILE_QUOTA NTStatus = 0xC0000007 + STATUS_INVALID_HANDLE NTStatus = 0xC0000008 + STATUS_BAD_INITIAL_STACK NTStatus = 0xC0000009 + STATUS_BAD_INITIAL_PC NTStatus = 0xC000000A + STATUS_INVALID_CID NTStatus = 0xC000000B + STATUS_TIMER_NOT_CANCELED NTStatus = 0xC000000C + STATUS_INVALID_PARAMETER NTStatus = 0xC000000D + STATUS_NO_SUCH_DEVICE NTStatus = 0xC000000E + STATUS_NO_SUCH_FILE NTStatus = 0xC000000F + STATUS_INVALID_DEVICE_REQUEST NTStatus = 0xC0000010 + STATUS_END_OF_FILE NTStatus = 0xC0000011 + STATUS_WRONG_VOLUME NTStatus = 0xC0000012 + STATUS_NO_MEDIA_IN_DEVICE NTStatus = 0xC0000013 + STATUS_UNRECOGNIZED_MEDIA NTStatus = 0xC0000014 + STATUS_NONEXISTENT_SECTOR NTStatus = 0xC0000015 + STATUS_MORE_PROCESSING_REQUIRED NTStatus = 0xC0000016 + STATUS_NO_MEMORY NTStatus = 0xC0000017 + STATUS_CONFLICTING_ADDRESSES NTStatus = 0xC0000018 + STATUS_NOT_MAPPED_VIEW NTStatus = 0xC0000019 + STATUS_UNABLE_TO_FREE_VM NTStatus = 0xC000001A + STATUS_UNABLE_TO_DELETE_SECTION NTStatus = 0xC000001B + STATUS_INVALID_SYSTEM_SERVICE NTStatus = 0xC000001C + STATUS_ILLEGAL_INSTRUCTION NTStatus = 0xC000001D + STATUS_INVALID_LOCK_SEQUENCE NTStatus = 0xC000001E + STATUS_INVALID_VIEW_SIZE NTStatus = 0xC000001F + STATUS_INVALID_FILE_FOR_SECTION NTStatus = 0xC0000020 + STATUS_ALREADY_COMMITTED NTStatus = 0xC0000021 + STATUS_ACCESS_DENIED NTStatus = 0xC0000022 + STATUS_BUFFER_TOO_SMALL NTStatus = 0xC0000023 + STATUS_OBJECT_TYPE_MISMATCH NTStatus = 0xC0000024 + STATUS_NONCONTINUABLE_EXCEPTION NTStatus = 0xC0000025 + STATUS_INVALID_DISPOSITION NTStatus = 0xC0000026 + STATUS_UNWIND NTStatus = 0xC0000027 + STATUS_BAD_STACK NTStatus = 0xC0000028 + STATUS_INVALID_UNWIND_TARGET NTStatus = 0xC0000029 + STATUS_NOT_LOCKED NTStatus = 0xC000002A + STATUS_PARITY_ERROR NTStatus = 0xC000002B + STATUS_UNABLE_TO_DECOMMIT_VM NTStatus = 0xC000002C + STATUS_NOT_COMMITTED NTStatus = 0xC000002D + STATUS_INVALID_PORT_ATTRIBUTES NTStatus = 0xC000002E + STATUS_PORT_MESSAGE_TOO_LONG NTStatus = 0xC000002F + STATUS_INVALID_PARAMETER_MIX NTStatus = 0xC0000030 + STATUS_INVALID_QUOTA_LOWER NTStatus = 0xC0000031 + STATUS_DISK_CORRUPT_ERROR NTStatus = 0xC0000032 + STATUS_OBJECT_NAME_INVALID NTStatus = 0xC0000033 + STATUS_OBJECT_NAME_NOT_FOUND NTStatus = 0xC0000034 + STATUS_OBJECT_NAME_COLLISION NTStatus = 0xC0000035 + STATUS_PORT_DO_NOT_DISTURB NTStatus = 0xC0000036 + STATUS_PORT_DISCONNECTED NTStatus = 0xC0000037 + STATUS_DEVICE_ALREADY_ATTACHED NTStatus = 0xC0000038 + STATUS_OBJECT_PATH_INVALID NTStatus = 0xC0000039 + STATUS_OBJECT_PATH_NOT_FOUND NTStatus = 0xC000003A + STATUS_OBJECT_PATH_SYNTAX_BAD NTStatus = 0xC000003B + STATUS_DATA_OVERRUN NTStatus = 0xC000003C + STATUS_DATA_LATE_ERROR NTStatus = 0xC000003D + STATUS_DATA_ERROR NTStatus = 0xC000003E + STATUS_CRC_ERROR NTStatus = 0xC000003F + STATUS_SECTION_TOO_BIG NTStatus = 0xC0000040 + STATUS_PORT_CONNECTION_REFUSED NTStatus = 0xC0000041 + STATUS_INVALID_PORT_HANDLE NTStatus = 0xC0000042 + STATUS_SHARING_VIOLATION NTStatus = 0xC0000043 + STATUS_QUOTA_EXCEEDED NTStatus = 0xC0000044 + STATUS_INVALID_PAGE_PROTECTION NTStatus = 0xC0000045 + STATUS_MUTANT_NOT_OWNED NTStatus = 0xC0000046 + STATUS_SEMAPHORE_LIMIT_EXCEEDED NTStatus = 0xC0000047 + STATUS_PORT_ALREADY_SET NTStatus = 0xC0000048 + STATUS_SECTION_NOT_IMAGE NTStatus = 0xC0000049 + STATUS_SUSPEND_COUNT_EXCEEDED NTStatus = 0xC000004A + STATUS_THREAD_IS_TERMINATING NTStatus = 0xC000004B + STATUS_BAD_WORKING_SET_LIMIT NTStatus = 0xC000004C + STATUS_INCOMPATIBLE_FILE_MAP NTStatus = 0xC000004D + STATUS_SECTION_PROTECTION NTStatus = 0xC000004E + STATUS_EAS_NOT_SUPPORTED NTStatus = 0xC000004F + STATUS_EA_TOO_LARGE NTStatus = 0xC0000050 + STATUS_NONEXISTENT_EA_ENTRY NTStatus = 0xC0000051 + STATUS_NO_EAS_ON_FILE NTStatus = 0xC0000052 + STATUS_EA_CORRUPT_ERROR NTStatus = 0xC0000053 + STATUS_FILE_LOCK_CONFLICT NTStatus = 0xC0000054 + STATUS_LOCK_NOT_GRANTED NTStatus = 0xC0000055 + STATUS_DELETE_PENDING NTStatus = 0xC0000056 + STATUS_CTL_FILE_NOT_SUPPORTED NTStatus = 0xC0000057 + STATUS_UNKNOWN_REVISION NTStatus = 0xC0000058 + STATUS_REVISION_MISMATCH NTStatus = 0xC0000059 + STATUS_INVALID_OWNER NTStatus = 0xC000005A + STATUS_INVALID_PRIMARY_GROUP NTStatus = 0xC000005B + STATUS_NO_IMPERSONATION_TOKEN NTStatus = 0xC000005C + STATUS_CANT_DISABLE_MANDATORY NTStatus = 0xC000005D + STATUS_NO_LOGON_SERVERS NTStatus = 0xC000005E + STATUS_NO_SUCH_LOGON_SESSION NTStatus = 0xC000005F + STATUS_NO_SUCH_PRIVILEGE NTStatus = 0xC0000060 + STATUS_PRIVILEGE_NOT_HELD NTStatus = 0xC0000061 + STATUS_INVALID_ACCOUNT_NAME NTStatus = 0xC0000062 + STATUS_USER_EXISTS NTStatus = 0xC0000063 + STATUS_NO_SUCH_USER NTStatus = 0xC0000064 + STATUS_GROUP_EXISTS NTStatus = 0xC0000065 + STATUS_NO_SUCH_GROUP NTStatus = 0xC0000066 + STATUS_MEMBER_IN_GROUP NTStatus = 0xC0000067 + STATUS_MEMBER_NOT_IN_GROUP NTStatus = 0xC0000068 + STATUS_LAST_ADMIN NTStatus = 0xC0000069 + STATUS_WRONG_PASSWORD NTStatus = 0xC000006A + STATUS_ILL_FORMED_PASSWORD NTStatus = 0xC000006B + STATUS_PASSWORD_RESTRICTION NTStatus = 0xC000006C + STATUS_LOGON_FAILURE NTStatus = 0xC000006D + STATUS_ACCOUNT_RESTRICTION NTStatus = 0xC000006E + STATUS_INVALID_LOGON_HOURS NTStatus = 0xC000006F + STATUS_INVALID_WORKSTATION NTStatus = 0xC0000070 + STATUS_PASSWORD_EXPIRED NTStatus = 0xC0000071 + STATUS_ACCOUNT_DISABLED NTStatus = 0xC0000072 + STATUS_NONE_MAPPED NTStatus = 0xC0000073 + STATUS_TOO_MANY_LUIDS_REQUESTED NTStatus = 0xC0000074 + STATUS_LUIDS_EXHAUSTED NTStatus = 0xC0000075 + STATUS_INVALID_SUB_AUTHORITY NTStatus = 0xC0000076 + STATUS_INVALID_ACL NTStatus = 0xC0000077 + STATUS_INVALID_SID NTStatus = 0xC0000078 + STATUS_INVALID_SECURITY_DESCR NTStatus = 0xC0000079 + STATUS_PROCEDURE_NOT_FOUND NTStatus = 0xC000007A + STATUS_INVALID_IMAGE_FORMAT NTStatus = 0xC000007B + STATUS_NO_TOKEN NTStatus = 0xC000007C + STATUS_BAD_INHERITANCE_ACL NTStatus = 0xC000007D + STATUS_RANGE_NOT_LOCKED NTStatus = 0xC000007E + STATUS_DISK_FULL NTStatus = 0xC000007F + STATUS_SERVER_DISABLED NTStatus = 0xC0000080 + STATUS_SERVER_NOT_DISABLED NTStatus = 0xC0000081 + STATUS_TOO_MANY_GUIDS_REQUESTED NTStatus = 0xC0000082 + STATUS_GUIDS_EXHAUSTED NTStatus = 0xC0000083 + STATUS_INVALID_ID_AUTHORITY NTStatus = 0xC0000084 + STATUS_AGENTS_EXHAUSTED NTStatus = 0xC0000085 + STATUS_INVALID_VOLUME_LABEL NTStatus = 0xC0000086 + STATUS_SECTION_NOT_EXTENDED NTStatus = 0xC0000087 + STATUS_NOT_MAPPED_DATA NTStatus = 0xC0000088 + STATUS_RESOURCE_DATA_NOT_FOUND NTStatus = 0xC0000089 + STATUS_RESOURCE_TYPE_NOT_FOUND NTStatus = 0xC000008A + STATUS_RESOURCE_NAME_NOT_FOUND NTStatus = 0xC000008B + STATUS_ARRAY_BOUNDS_EXCEEDED NTStatus = 0xC000008C + STATUS_FLOAT_DENORMAL_OPERAND NTStatus = 0xC000008D + STATUS_FLOAT_DIVIDE_BY_ZERO NTStatus = 0xC000008E + STATUS_FLOAT_INEXACT_RESULT NTStatus = 0xC000008F + STATUS_FLOAT_INVALID_OPERATION NTStatus = 0xC0000090 + STATUS_FLOAT_OVERFLOW NTStatus = 0xC0000091 + STATUS_FLOAT_STACK_CHECK NTStatus = 0xC0000092 + STATUS_FLOAT_UNDERFLOW NTStatus = 0xC0000093 + STATUS_INTEGER_DIVIDE_BY_ZERO NTStatus = 0xC0000094 + STATUS_INTEGER_OVERFLOW NTStatus = 0xC0000095 + STATUS_PRIVILEGED_INSTRUCTION NTStatus = 0xC0000096 + STATUS_TOO_MANY_PAGING_FILES NTStatus = 0xC0000097 + STATUS_FILE_INVALID NTStatus = 0xC0000098 + STATUS_ALLOTTED_SPACE_EXCEEDED NTStatus = 0xC0000099 + STATUS_INSUFFICIENT_RESOURCES NTStatus = 0xC000009A + STATUS_DFS_EXIT_PATH_FOUND NTStatus = 0xC000009B + STATUS_DEVICE_DATA_ERROR NTStatus = 0xC000009C + STATUS_DEVICE_NOT_CONNECTED NTStatus = 0xC000009D + STATUS_DEVICE_POWER_FAILURE NTStatus = 0xC000009E + STATUS_FREE_VM_NOT_AT_BASE NTStatus = 0xC000009F + STATUS_MEMORY_NOT_ALLOCATED NTStatus = 0xC00000A0 + STATUS_WORKING_SET_QUOTA NTStatus = 0xC00000A1 + STATUS_MEDIA_WRITE_PROTECTED NTStatus = 0xC00000A2 + STATUS_DEVICE_NOT_READY NTStatus = 0xC00000A3 + STATUS_INVALID_GROUP_ATTRIBUTES NTStatus = 0xC00000A4 + STATUS_BAD_IMPERSONATION_LEVEL NTStatus = 0xC00000A5 + STATUS_CANT_OPEN_ANONYMOUS NTStatus = 0xC00000A6 + STATUS_BAD_VALIDATION_CLASS NTStatus = 0xC00000A7 + STATUS_BAD_TOKEN_TYPE NTStatus = 0xC00000A8 + STATUS_BAD_MASTER_BOOT_RECORD NTStatus = 0xC00000A9 + STATUS_INSTRUCTION_MISALIGNMENT NTStatus = 0xC00000AA + STATUS_INSTANCE_NOT_AVAILABLE NTStatus = 0xC00000AB + STATUS_PIPE_NOT_AVAILABLE NTStatus = 0xC00000AC + STATUS_INVALID_PIPE_STATE NTStatus = 0xC00000AD + STATUS_PIPE_BUSY NTStatus = 0xC00000AE + STATUS_ILLEGAL_FUNCTION NTStatus = 0xC00000AF + STATUS_PIPE_DISCONNECTED NTStatus = 0xC00000B0 + STATUS_PIPE_CLOSING NTStatus = 0xC00000B1 + STATUS_PIPE_CONNECTED NTStatus = 0xC00000B2 + STATUS_PIPE_LISTENING NTStatus = 0xC00000B3 + STATUS_INVALID_READ_MODE NTStatus = 0xC00000B4 + STATUS_IO_TIMEOUT NTStatus = 0xC00000B5 + STATUS_FILE_FORCED_CLOSED NTStatus = 0xC00000B6 + STATUS_PROFILING_NOT_STARTED NTStatus = 0xC00000B7 + STATUS_PROFILING_NOT_STOPPED NTStatus = 0xC00000B8 + STATUS_COULD_NOT_INTERPRET NTStatus = 0xC00000B9 + STATUS_FILE_IS_A_DIRECTORY NTStatus = 0xC00000BA + STATUS_NOT_SUPPORTED NTStatus = 0xC00000BB + STATUS_REMOTE_NOT_LISTENING NTStatus = 0xC00000BC + STATUS_DUPLICATE_NAME NTStatus = 0xC00000BD + STATUS_BAD_NETWORK_PATH NTStatus = 0xC00000BE + STATUS_NETWORK_BUSY NTStatus = 0xC00000BF + STATUS_DEVICE_DOES_NOT_EXIST NTStatus = 0xC00000C0 + STATUS_TOO_MANY_COMMANDS NTStatus = 0xC00000C1 + STATUS_ADAPTER_HARDWARE_ERROR NTStatus = 0xC00000C2 + STATUS_INVALID_NETWORK_RESPONSE NTStatus = 0xC00000C3 + STATUS_UNEXPECTED_NETWORK_ERROR NTStatus = 0xC00000C4 + STATUS_BAD_REMOTE_ADAPTER NTStatus = 0xC00000C5 + STATUS_PRINT_QUEUE_FULL NTStatus = 0xC00000C6 + STATUS_NO_SPOOL_SPACE NTStatus = 0xC00000C7 + STATUS_PRINT_CANCELLED NTStatus = 0xC00000C8 + STATUS_NETWORK_NAME_DELETED NTStatus = 0xC00000C9 + STATUS_NETWORK_ACCESS_DENIED NTStatus = 0xC00000CA + STATUS_BAD_DEVICE_TYPE NTStatus = 0xC00000CB + STATUS_BAD_NETWORK_NAME NTStatus = 0xC00000CC + STATUS_TOO_MANY_NAMES NTStatus = 0xC00000CD + STATUS_TOO_MANY_SESSIONS NTStatus = 0xC00000CE + STATUS_SHARING_PAUSED NTStatus = 0xC00000CF + STATUS_REQUEST_NOT_ACCEPTED NTStatus = 0xC00000D0 + STATUS_REDIRECTOR_PAUSED NTStatus = 0xC00000D1 + STATUS_NET_WRITE_FAULT NTStatus = 0xC00000D2 + STATUS_PROFILING_AT_LIMIT NTStatus = 0xC00000D3 + STATUS_NOT_SAME_DEVICE NTStatus = 0xC00000D4 + STATUS_FILE_RENAMED NTStatus = 0xC00000D5 + STATUS_VIRTUAL_CIRCUIT_CLOSED NTStatus = 0xC00000D6 + STATUS_NO_SECURITY_ON_OBJECT NTStatus = 0xC00000D7 + STATUS_CANT_WAIT NTStatus = 0xC00000D8 + STATUS_PIPE_EMPTY NTStatus = 0xC00000D9 + STATUS_CANT_ACCESS_DOMAIN_INFO NTStatus = 0xC00000DA + STATUS_CANT_TERMINATE_SELF NTStatus = 0xC00000DB + STATUS_INVALID_SERVER_STATE NTStatus = 0xC00000DC + STATUS_INVALID_DOMAIN_STATE NTStatus = 0xC00000DD + STATUS_INVALID_DOMAIN_ROLE NTStatus = 0xC00000DE + STATUS_NO_SUCH_DOMAIN NTStatus = 0xC00000DF + STATUS_DOMAIN_EXISTS NTStatus = 0xC00000E0 + STATUS_DOMAIN_LIMIT_EXCEEDED NTStatus = 0xC00000E1 + STATUS_OPLOCK_NOT_GRANTED NTStatus = 0xC00000E2 + STATUS_INVALID_OPLOCK_PROTOCOL NTStatus = 0xC00000E3 + STATUS_INTERNAL_DB_CORRUPTION NTStatus = 0xC00000E4 + STATUS_INTERNAL_ERROR NTStatus = 0xC00000E5 + STATUS_GENERIC_NOT_MAPPED NTStatus = 0xC00000E6 + STATUS_BAD_DESCRIPTOR_FORMAT NTStatus = 0xC00000E7 + STATUS_INVALID_USER_BUFFER NTStatus = 0xC00000E8 + STATUS_UNEXPECTED_IO_ERROR NTStatus = 0xC00000E9 + STATUS_UNEXPECTED_MM_CREATE_ERR NTStatus = 0xC00000EA + STATUS_UNEXPECTED_MM_MAP_ERROR NTStatus = 0xC00000EB + STATUS_UNEXPECTED_MM_EXTEND_ERR NTStatus = 0xC00000EC + STATUS_NOT_LOGON_PROCESS NTStatus = 0xC00000ED + STATUS_LOGON_SESSION_EXISTS NTStatus = 0xC00000EE + STATUS_INVALID_PARAMETER_1 NTStatus = 0xC00000EF + STATUS_INVALID_PARAMETER_2 NTStatus = 0xC00000F0 + STATUS_INVALID_PARAMETER_3 NTStatus = 0xC00000F1 + STATUS_INVALID_PARAMETER_4 NTStatus = 0xC00000F2 + STATUS_INVALID_PARAMETER_5 NTStatus = 0xC00000F3 + STATUS_INVALID_PARAMETER_6 NTStatus = 0xC00000F4 + STATUS_INVALID_PARAMETER_7 NTStatus = 0xC00000F5 + STATUS_INVALID_PARAMETER_8 NTStatus = 0xC00000F6 + STATUS_INVALID_PARAMETER_9 NTStatus = 0xC00000F7 + STATUS_INVALID_PARAMETER_10 NTStatus = 0xC00000F8 + STATUS_INVALID_PARAMETER_11 NTStatus = 0xC00000F9 + STATUS_INVALID_PARAMETER_12 NTStatus = 0xC00000FA + STATUS_REDIRECTOR_NOT_STARTED NTStatus = 0xC00000FB + STATUS_REDIRECTOR_STARTED NTStatus = 0xC00000FC + STATUS_STACK_OVERFLOW NTStatus = 0xC00000FD + STATUS_NO_SUCH_PACKAGE NTStatus = 0xC00000FE + STATUS_BAD_FUNCTION_TABLE NTStatus = 0xC00000FF + STATUS_VARIABLE_NOT_FOUND NTStatus = 0xC0000100 + STATUS_DIRECTORY_NOT_EMPTY NTStatus = 0xC0000101 + STATUS_FILE_CORRUPT_ERROR NTStatus = 0xC0000102 + STATUS_NOT_A_DIRECTORY NTStatus = 0xC0000103 + STATUS_BAD_LOGON_SESSION_STATE NTStatus = 0xC0000104 + STATUS_LOGON_SESSION_COLLISION NTStatus = 0xC0000105 + STATUS_NAME_TOO_LONG NTStatus = 0xC0000106 + STATUS_FILES_OPEN NTStatus = 0xC0000107 + STATUS_CONNECTION_IN_USE NTStatus = 0xC0000108 + STATUS_MESSAGE_NOT_FOUND NTStatus = 0xC0000109 + STATUS_PROCESS_IS_TERMINATING NTStatus = 0xC000010A + STATUS_INVALID_LOGON_TYPE NTStatus = 0xC000010B + STATUS_NO_GUID_TRANSLATION NTStatus = 0xC000010C + STATUS_CANNOT_IMPERSONATE NTStatus = 0xC000010D + STATUS_IMAGE_ALREADY_LOADED NTStatus = 0xC000010E + STATUS_ABIOS_NOT_PRESENT NTStatus = 0xC000010F + STATUS_ABIOS_LID_NOT_EXIST NTStatus = 0xC0000110 + STATUS_ABIOS_LID_ALREADY_OWNED NTStatus = 0xC0000111 + STATUS_ABIOS_NOT_LID_OWNER NTStatus = 0xC0000112 + STATUS_ABIOS_INVALID_COMMAND NTStatus = 0xC0000113 + STATUS_ABIOS_INVALID_LID NTStatus = 0xC0000114 + STATUS_ABIOS_SELECTOR_NOT_AVAILABLE NTStatus = 0xC0000115 + STATUS_ABIOS_INVALID_SELECTOR NTStatus = 0xC0000116 + STATUS_NO_LDT NTStatus = 0xC0000117 + STATUS_INVALID_LDT_SIZE NTStatus = 0xC0000118 + STATUS_INVALID_LDT_OFFSET NTStatus = 0xC0000119 + STATUS_INVALID_LDT_DESCRIPTOR NTStatus = 0xC000011A + STATUS_INVALID_IMAGE_NE_FORMAT NTStatus = 0xC000011B + STATUS_RXACT_INVALID_STATE NTStatus = 0xC000011C + STATUS_RXACT_COMMIT_FAILURE NTStatus = 0xC000011D + STATUS_MAPPED_FILE_SIZE_ZERO NTStatus = 0xC000011E + STATUS_TOO_MANY_OPENED_FILES NTStatus = 0xC000011F + STATUS_CANCELLED NTStatus = 0xC0000120 + STATUS_CANNOT_DELETE NTStatus = 0xC0000121 + STATUS_INVALID_COMPUTER_NAME NTStatus = 0xC0000122 + STATUS_FILE_DELETED NTStatus = 0xC0000123 + STATUS_SPECIAL_ACCOUNT NTStatus = 0xC0000124 + STATUS_SPECIAL_GROUP NTStatus = 0xC0000125 + STATUS_SPECIAL_USER NTStatus = 0xC0000126 + STATUS_MEMBERS_PRIMARY_GROUP NTStatus = 0xC0000127 + STATUS_FILE_CLOSED NTStatus = 0xC0000128 + STATUS_TOO_MANY_THREADS NTStatus = 0xC0000129 + STATUS_THREAD_NOT_IN_PROCESS NTStatus = 0xC000012A + STATUS_TOKEN_ALREADY_IN_USE NTStatus = 0xC000012B + STATUS_PAGEFILE_QUOTA_EXCEEDED NTStatus = 0xC000012C + STATUS_COMMITMENT_LIMIT NTStatus = 0xC000012D + STATUS_INVALID_IMAGE_LE_FORMAT NTStatus = 0xC000012E + STATUS_INVALID_IMAGE_NOT_MZ NTStatus = 0xC000012F + STATUS_INVALID_IMAGE_PROTECT NTStatus = 0xC0000130 + STATUS_INVALID_IMAGE_WIN_16 NTStatus = 0xC0000131 + STATUS_LOGON_SERVER_CONFLICT NTStatus = 0xC0000132 + STATUS_TIME_DIFFERENCE_AT_DC NTStatus = 0xC0000133 + STATUS_SYNCHRONIZATION_REQUIRED NTStatus = 0xC0000134 + STATUS_DLL_NOT_FOUND NTStatus = 0xC0000135 + STATUS_OPEN_FAILED NTStatus = 0xC0000136 + STATUS_IO_PRIVILEGE_FAILED NTStatus = 0xC0000137 + STATUS_ORDINAL_NOT_FOUND NTStatus = 0xC0000138 + STATUS_ENTRYPOINT_NOT_FOUND NTStatus = 0xC0000139 + STATUS_CONTROL_C_EXIT NTStatus = 0xC000013A + STATUS_LOCAL_DISCONNECT NTStatus = 0xC000013B + STATUS_REMOTE_DISCONNECT NTStatus = 0xC000013C + STATUS_REMOTE_RESOURCES NTStatus = 0xC000013D + STATUS_LINK_FAILED NTStatus = 0xC000013E + STATUS_LINK_TIMEOUT NTStatus = 0xC000013F + STATUS_INVALID_CONNECTION NTStatus = 0xC0000140 + STATUS_INVALID_ADDRESS NTStatus = 0xC0000141 + STATUS_DLL_INIT_FAILED NTStatus = 0xC0000142 + STATUS_MISSING_SYSTEMFILE NTStatus = 0xC0000143 + STATUS_UNHANDLED_EXCEPTION NTStatus = 0xC0000144 + STATUS_APP_INIT_FAILURE NTStatus = 0xC0000145 + STATUS_PAGEFILE_CREATE_FAILED NTStatus = 0xC0000146 + STATUS_NO_PAGEFILE NTStatus = 0xC0000147 + STATUS_INVALID_LEVEL NTStatus = 0xC0000148 + STATUS_WRONG_PASSWORD_CORE NTStatus = 0xC0000149 + STATUS_ILLEGAL_FLOAT_CONTEXT NTStatus = 0xC000014A + STATUS_PIPE_BROKEN NTStatus = 0xC000014B + STATUS_REGISTRY_CORRUPT NTStatus = 0xC000014C + STATUS_REGISTRY_IO_FAILED NTStatus = 0xC000014D + STATUS_NO_EVENT_PAIR NTStatus = 0xC000014E + STATUS_UNRECOGNIZED_VOLUME NTStatus = 0xC000014F + STATUS_SERIAL_NO_DEVICE_INITED NTStatus = 0xC0000150 + STATUS_NO_SUCH_ALIAS NTStatus = 0xC0000151 + STATUS_MEMBER_NOT_IN_ALIAS NTStatus = 0xC0000152 + STATUS_MEMBER_IN_ALIAS NTStatus = 0xC0000153 + STATUS_ALIAS_EXISTS NTStatus = 0xC0000154 + STATUS_LOGON_NOT_GRANTED NTStatus = 0xC0000155 + STATUS_TOO_MANY_SECRETS NTStatus = 0xC0000156 + STATUS_SECRET_TOO_LONG NTStatus = 0xC0000157 + STATUS_INTERNAL_DB_ERROR NTStatus = 0xC0000158 + STATUS_FULLSCREEN_MODE NTStatus = 0xC0000159 + STATUS_TOO_MANY_CONTEXT_IDS NTStatus = 0xC000015A + STATUS_LOGON_TYPE_NOT_GRANTED NTStatus = 0xC000015B + STATUS_NOT_REGISTRY_FILE NTStatus = 0xC000015C + STATUS_NT_CROSS_ENCRYPTION_REQUIRED NTStatus = 0xC000015D + STATUS_DOMAIN_CTRLR_CONFIG_ERROR NTStatus = 0xC000015E + STATUS_FT_MISSING_MEMBER NTStatus = 0xC000015F + STATUS_ILL_FORMED_SERVICE_ENTRY NTStatus = 0xC0000160 + STATUS_ILLEGAL_CHARACTER NTStatus = 0xC0000161 + STATUS_UNMAPPABLE_CHARACTER NTStatus = 0xC0000162 + STATUS_UNDEFINED_CHARACTER NTStatus = 0xC0000163 + STATUS_FLOPPY_VOLUME NTStatus = 0xC0000164 + STATUS_FLOPPY_ID_MARK_NOT_FOUND NTStatus = 0xC0000165 + STATUS_FLOPPY_WRONG_CYLINDER NTStatus = 0xC0000166 + STATUS_FLOPPY_UNKNOWN_ERROR NTStatus = 0xC0000167 + STATUS_FLOPPY_BAD_REGISTERS NTStatus = 0xC0000168 + STATUS_DISK_RECALIBRATE_FAILED NTStatus = 0xC0000169 + STATUS_DISK_OPERATION_FAILED NTStatus = 0xC000016A + STATUS_DISK_RESET_FAILED NTStatus = 0xC000016B + STATUS_SHARED_IRQ_BUSY NTStatus = 0xC000016C + STATUS_FT_ORPHANING NTStatus = 0xC000016D + STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT NTStatus = 0xC000016E + STATUS_PARTITION_FAILURE NTStatus = 0xC0000172 + STATUS_INVALID_BLOCK_LENGTH NTStatus = 0xC0000173 + STATUS_DEVICE_NOT_PARTITIONED NTStatus = 0xC0000174 + STATUS_UNABLE_TO_LOCK_MEDIA NTStatus = 0xC0000175 + STATUS_UNABLE_TO_UNLOAD_MEDIA NTStatus = 0xC0000176 + STATUS_EOM_OVERFLOW NTStatus = 0xC0000177 + STATUS_NO_MEDIA NTStatus = 0xC0000178 + STATUS_NO_SUCH_MEMBER NTStatus = 0xC000017A + STATUS_INVALID_MEMBER NTStatus = 0xC000017B + STATUS_KEY_DELETED NTStatus = 0xC000017C + STATUS_NO_LOG_SPACE NTStatus = 0xC000017D + STATUS_TOO_MANY_SIDS NTStatus = 0xC000017E + STATUS_LM_CROSS_ENCRYPTION_REQUIRED NTStatus = 0xC000017F + STATUS_KEY_HAS_CHILDREN NTStatus = 0xC0000180 + STATUS_CHILD_MUST_BE_VOLATILE NTStatus = 0xC0000181 + STATUS_DEVICE_CONFIGURATION_ERROR NTStatus = 0xC0000182 + STATUS_DRIVER_INTERNAL_ERROR NTStatus = 0xC0000183 + STATUS_INVALID_DEVICE_STATE NTStatus = 0xC0000184 + STATUS_IO_DEVICE_ERROR NTStatus = 0xC0000185 + STATUS_DEVICE_PROTOCOL_ERROR NTStatus = 0xC0000186 + STATUS_BACKUP_CONTROLLER NTStatus = 0xC0000187 + STATUS_LOG_FILE_FULL NTStatus = 0xC0000188 + STATUS_TOO_LATE NTStatus = 0xC0000189 + STATUS_NO_TRUST_LSA_SECRET NTStatus = 0xC000018A + STATUS_NO_TRUST_SAM_ACCOUNT NTStatus = 0xC000018B + STATUS_TRUSTED_DOMAIN_FAILURE NTStatus = 0xC000018C + STATUS_TRUSTED_RELATIONSHIP_FAILURE NTStatus = 0xC000018D + STATUS_EVENTLOG_FILE_CORRUPT NTStatus = 0xC000018E + STATUS_EVENTLOG_CANT_START NTStatus = 0xC000018F + STATUS_TRUST_FAILURE NTStatus = 0xC0000190 + STATUS_MUTANT_LIMIT_EXCEEDED NTStatus = 0xC0000191 + STATUS_NETLOGON_NOT_STARTED NTStatus = 0xC0000192 + STATUS_ACCOUNT_EXPIRED NTStatus = 0xC0000193 + STATUS_POSSIBLE_DEADLOCK NTStatus = 0xC0000194 + STATUS_NETWORK_CREDENTIAL_CONFLICT NTStatus = 0xC0000195 + STATUS_REMOTE_SESSION_LIMIT NTStatus = 0xC0000196 + STATUS_EVENTLOG_FILE_CHANGED NTStatus = 0xC0000197 + STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT NTStatus = 0xC0000198 + STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT NTStatus = 0xC0000199 + STATUS_NOLOGON_SERVER_TRUST_ACCOUNT NTStatus = 0xC000019A + STATUS_DOMAIN_TRUST_INCONSISTENT NTStatus = 0xC000019B + STATUS_FS_DRIVER_REQUIRED NTStatus = 0xC000019C + STATUS_IMAGE_ALREADY_LOADED_AS_DLL NTStatus = 0xC000019D + STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING NTStatus = 0xC000019E + STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME NTStatus = 0xC000019F + STATUS_SECURITY_STREAM_IS_INCONSISTENT NTStatus = 0xC00001A0 + STATUS_INVALID_LOCK_RANGE NTStatus = 0xC00001A1 + STATUS_INVALID_ACE_CONDITION NTStatus = 0xC00001A2 + STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT NTStatus = 0xC00001A3 + STATUS_NOTIFICATION_GUID_ALREADY_DEFINED NTStatus = 0xC00001A4 + STATUS_INVALID_EXCEPTION_HANDLER NTStatus = 0xC00001A5 + STATUS_DUPLICATE_PRIVILEGES NTStatus = 0xC00001A6 + STATUS_NOT_ALLOWED_ON_SYSTEM_FILE NTStatus = 0xC00001A7 + STATUS_REPAIR_NEEDED NTStatus = 0xC00001A8 + STATUS_QUOTA_NOT_ENABLED NTStatus = 0xC00001A9 + STATUS_NO_APPLICATION_PACKAGE NTStatus = 0xC00001AA + STATUS_FILE_METADATA_OPTIMIZATION_IN_PROGRESS NTStatus = 0xC00001AB + STATUS_NOT_SAME_OBJECT NTStatus = 0xC00001AC + STATUS_FATAL_MEMORY_EXHAUSTION NTStatus = 0xC00001AD + STATUS_ERROR_PROCESS_NOT_IN_JOB NTStatus = 0xC00001AE + STATUS_CPU_SET_INVALID NTStatus = 0xC00001AF + STATUS_IO_DEVICE_INVALID_DATA NTStatus = 0xC00001B0 + STATUS_IO_UNALIGNED_WRITE NTStatus = 0xC00001B1 + STATUS_NETWORK_OPEN_RESTRICTION NTStatus = 0xC0000201 + STATUS_NO_USER_SESSION_KEY NTStatus = 0xC0000202 + STATUS_USER_SESSION_DELETED NTStatus = 0xC0000203 + STATUS_RESOURCE_LANG_NOT_FOUND NTStatus = 0xC0000204 + STATUS_INSUFF_SERVER_RESOURCES NTStatus = 0xC0000205 + STATUS_INVALID_BUFFER_SIZE NTStatus = 0xC0000206 + STATUS_INVALID_ADDRESS_COMPONENT NTStatus = 0xC0000207 + STATUS_INVALID_ADDRESS_WILDCARD NTStatus = 0xC0000208 + STATUS_TOO_MANY_ADDRESSES NTStatus = 0xC0000209 + STATUS_ADDRESS_ALREADY_EXISTS NTStatus = 0xC000020A + STATUS_ADDRESS_CLOSED NTStatus = 0xC000020B + STATUS_CONNECTION_DISCONNECTED NTStatus = 0xC000020C + STATUS_CONNECTION_RESET NTStatus = 0xC000020D + STATUS_TOO_MANY_NODES NTStatus = 0xC000020E + STATUS_TRANSACTION_ABORTED NTStatus = 0xC000020F + STATUS_TRANSACTION_TIMED_OUT NTStatus = 0xC0000210 + STATUS_TRANSACTION_NO_RELEASE NTStatus = 0xC0000211 + STATUS_TRANSACTION_NO_MATCH NTStatus = 0xC0000212 + STATUS_TRANSACTION_RESPONDED NTStatus = 0xC0000213 + STATUS_TRANSACTION_INVALID_ID NTStatus = 0xC0000214 + STATUS_TRANSACTION_INVALID_TYPE NTStatus = 0xC0000215 + STATUS_NOT_SERVER_SESSION NTStatus = 0xC0000216 + STATUS_NOT_CLIENT_SESSION NTStatus = 0xC0000217 + STATUS_CANNOT_LOAD_REGISTRY_FILE NTStatus = 0xC0000218 + STATUS_DEBUG_ATTACH_FAILED NTStatus = 0xC0000219 + STATUS_SYSTEM_PROCESS_TERMINATED NTStatus = 0xC000021A + STATUS_DATA_NOT_ACCEPTED NTStatus = 0xC000021B + STATUS_NO_BROWSER_SERVERS_FOUND NTStatus = 0xC000021C + STATUS_VDM_HARD_ERROR NTStatus = 0xC000021D + STATUS_DRIVER_CANCEL_TIMEOUT NTStatus = 0xC000021E + STATUS_REPLY_MESSAGE_MISMATCH NTStatus = 0xC000021F + STATUS_MAPPED_ALIGNMENT NTStatus = 0xC0000220 + STATUS_IMAGE_CHECKSUM_MISMATCH NTStatus = 0xC0000221 + STATUS_LOST_WRITEBEHIND_DATA NTStatus = 0xC0000222 + STATUS_CLIENT_SERVER_PARAMETERS_INVALID NTStatus = 0xC0000223 + STATUS_PASSWORD_MUST_CHANGE NTStatus = 0xC0000224 + STATUS_NOT_FOUND NTStatus = 0xC0000225 + STATUS_NOT_TINY_STREAM NTStatus = 0xC0000226 + STATUS_RECOVERY_FAILURE NTStatus = 0xC0000227 + STATUS_STACK_OVERFLOW_READ NTStatus = 0xC0000228 + STATUS_FAIL_CHECK NTStatus = 0xC0000229 + STATUS_DUPLICATE_OBJECTID NTStatus = 0xC000022A + STATUS_OBJECTID_EXISTS NTStatus = 0xC000022B + STATUS_CONVERT_TO_LARGE NTStatus = 0xC000022C + STATUS_RETRY NTStatus = 0xC000022D + STATUS_FOUND_OUT_OF_SCOPE NTStatus = 0xC000022E + STATUS_ALLOCATE_BUCKET NTStatus = 0xC000022F + STATUS_PROPSET_NOT_FOUND NTStatus = 0xC0000230 + STATUS_MARSHALL_OVERFLOW NTStatus = 0xC0000231 + STATUS_INVALID_VARIANT NTStatus = 0xC0000232 + STATUS_DOMAIN_CONTROLLER_NOT_FOUND NTStatus = 0xC0000233 + STATUS_ACCOUNT_LOCKED_OUT NTStatus = 0xC0000234 + STATUS_HANDLE_NOT_CLOSABLE NTStatus = 0xC0000235 + STATUS_CONNECTION_REFUSED NTStatus = 0xC0000236 + STATUS_GRACEFUL_DISCONNECT NTStatus = 0xC0000237 + STATUS_ADDRESS_ALREADY_ASSOCIATED NTStatus = 0xC0000238 + STATUS_ADDRESS_NOT_ASSOCIATED NTStatus = 0xC0000239 + STATUS_CONNECTION_INVALID NTStatus = 0xC000023A + STATUS_CONNECTION_ACTIVE NTStatus = 0xC000023B + STATUS_NETWORK_UNREACHABLE NTStatus = 0xC000023C + STATUS_HOST_UNREACHABLE NTStatus = 0xC000023D + STATUS_PROTOCOL_UNREACHABLE NTStatus = 0xC000023E + STATUS_PORT_UNREACHABLE NTStatus = 0xC000023F + STATUS_REQUEST_ABORTED NTStatus = 0xC0000240 + STATUS_CONNECTION_ABORTED NTStatus = 0xC0000241 + STATUS_BAD_COMPRESSION_BUFFER NTStatus = 0xC0000242 + STATUS_USER_MAPPED_FILE NTStatus = 0xC0000243 + STATUS_AUDIT_FAILED NTStatus = 0xC0000244 + STATUS_TIMER_RESOLUTION_NOT_SET NTStatus = 0xC0000245 + STATUS_CONNECTION_COUNT_LIMIT NTStatus = 0xC0000246 + STATUS_LOGIN_TIME_RESTRICTION NTStatus = 0xC0000247 + STATUS_LOGIN_WKSTA_RESTRICTION NTStatus = 0xC0000248 + STATUS_IMAGE_MP_UP_MISMATCH NTStatus = 0xC0000249 + STATUS_INSUFFICIENT_LOGON_INFO NTStatus = 0xC0000250 + STATUS_BAD_DLL_ENTRYPOINT NTStatus = 0xC0000251 + STATUS_BAD_SERVICE_ENTRYPOINT NTStatus = 0xC0000252 + STATUS_LPC_REPLY_LOST NTStatus = 0xC0000253 + STATUS_IP_ADDRESS_CONFLICT1 NTStatus = 0xC0000254 + STATUS_IP_ADDRESS_CONFLICT2 NTStatus = 0xC0000255 + STATUS_REGISTRY_QUOTA_LIMIT NTStatus = 0xC0000256 + STATUS_PATH_NOT_COVERED NTStatus = 0xC0000257 + STATUS_NO_CALLBACK_ACTIVE NTStatus = 0xC0000258 + STATUS_LICENSE_QUOTA_EXCEEDED NTStatus = 0xC0000259 + STATUS_PWD_TOO_SHORT NTStatus = 0xC000025A + STATUS_PWD_TOO_RECENT NTStatus = 0xC000025B + STATUS_PWD_HISTORY_CONFLICT NTStatus = 0xC000025C + STATUS_PLUGPLAY_NO_DEVICE NTStatus = 0xC000025E + STATUS_UNSUPPORTED_COMPRESSION NTStatus = 0xC000025F + STATUS_INVALID_HW_PROFILE NTStatus = 0xC0000260 + STATUS_INVALID_PLUGPLAY_DEVICE_PATH NTStatus = 0xC0000261 + STATUS_DRIVER_ORDINAL_NOT_FOUND NTStatus = 0xC0000262 + STATUS_DRIVER_ENTRYPOINT_NOT_FOUND NTStatus = 0xC0000263 + STATUS_RESOURCE_NOT_OWNED NTStatus = 0xC0000264 + STATUS_TOO_MANY_LINKS NTStatus = 0xC0000265 + STATUS_QUOTA_LIST_INCONSISTENT NTStatus = 0xC0000266 + STATUS_FILE_IS_OFFLINE NTStatus = 0xC0000267 + STATUS_EVALUATION_EXPIRATION NTStatus = 0xC0000268 + STATUS_ILLEGAL_DLL_RELOCATION NTStatus = 0xC0000269 + STATUS_LICENSE_VIOLATION NTStatus = 0xC000026A + STATUS_DLL_INIT_FAILED_LOGOFF NTStatus = 0xC000026B + STATUS_DRIVER_UNABLE_TO_LOAD NTStatus = 0xC000026C + STATUS_DFS_UNAVAILABLE NTStatus = 0xC000026D + STATUS_VOLUME_DISMOUNTED NTStatus = 0xC000026E + STATUS_WX86_INTERNAL_ERROR NTStatus = 0xC000026F + STATUS_WX86_FLOAT_STACK_CHECK NTStatus = 0xC0000270 + STATUS_VALIDATE_CONTINUE NTStatus = 0xC0000271 + STATUS_NO_MATCH NTStatus = 0xC0000272 + STATUS_NO_MORE_MATCHES NTStatus = 0xC0000273 + STATUS_NOT_A_REPARSE_POINT NTStatus = 0xC0000275 + STATUS_IO_REPARSE_TAG_INVALID NTStatus = 0xC0000276 + STATUS_IO_REPARSE_TAG_MISMATCH NTStatus = 0xC0000277 + STATUS_IO_REPARSE_DATA_INVALID NTStatus = 0xC0000278 + STATUS_IO_REPARSE_TAG_NOT_HANDLED NTStatus = 0xC0000279 + STATUS_PWD_TOO_LONG NTStatus = 0xC000027A + STATUS_STOWED_EXCEPTION NTStatus = 0xC000027B + STATUS_CONTEXT_STOWED_EXCEPTION NTStatus = 0xC000027C + STATUS_REPARSE_POINT_NOT_RESOLVED NTStatus = 0xC0000280 + STATUS_DIRECTORY_IS_A_REPARSE_POINT NTStatus = 0xC0000281 + STATUS_RANGE_LIST_CONFLICT NTStatus = 0xC0000282 + STATUS_SOURCE_ELEMENT_EMPTY NTStatus = 0xC0000283 + STATUS_DESTINATION_ELEMENT_FULL NTStatus = 0xC0000284 + STATUS_ILLEGAL_ELEMENT_ADDRESS NTStatus = 0xC0000285 + STATUS_MAGAZINE_NOT_PRESENT NTStatus = 0xC0000286 + STATUS_REINITIALIZATION_NEEDED NTStatus = 0xC0000287 + STATUS_DEVICE_REQUIRES_CLEANING NTStatus = 0x80000288 + STATUS_DEVICE_DOOR_OPEN NTStatus = 0x80000289 + STATUS_ENCRYPTION_FAILED NTStatus = 0xC000028A + STATUS_DECRYPTION_FAILED NTStatus = 0xC000028B + STATUS_RANGE_NOT_FOUND NTStatus = 0xC000028C + STATUS_NO_RECOVERY_POLICY NTStatus = 0xC000028D + STATUS_NO_EFS NTStatus = 0xC000028E + STATUS_WRONG_EFS NTStatus = 0xC000028F + STATUS_NO_USER_KEYS NTStatus = 0xC0000290 + STATUS_FILE_NOT_ENCRYPTED NTStatus = 0xC0000291 + STATUS_NOT_EXPORT_FORMAT NTStatus = 0xC0000292 + STATUS_FILE_ENCRYPTED NTStatus = 0xC0000293 + STATUS_WAKE_SYSTEM NTStatus = 0x40000294 + STATUS_WMI_GUID_NOT_FOUND NTStatus = 0xC0000295 + STATUS_WMI_INSTANCE_NOT_FOUND NTStatus = 0xC0000296 + STATUS_WMI_ITEMID_NOT_FOUND NTStatus = 0xC0000297 + STATUS_WMI_TRY_AGAIN NTStatus = 0xC0000298 + STATUS_SHARED_POLICY NTStatus = 0xC0000299 + STATUS_POLICY_OBJECT_NOT_FOUND NTStatus = 0xC000029A + STATUS_POLICY_ONLY_IN_DS NTStatus = 0xC000029B + STATUS_VOLUME_NOT_UPGRADED NTStatus = 0xC000029C + STATUS_REMOTE_STORAGE_NOT_ACTIVE NTStatus = 0xC000029D + STATUS_REMOTE_STORAGE_MEDIA_ERROR NTStatus = 0xC000029E + STATUS_NO_TRACKING_SERVICE NTStatus = 0xC000029F + STATUS_SERVER_SID_MISMATCH NTStatus = 0xC00002A0 + STATUS_DS_NO_ATTRIBUTE_OR_VALUE NTStatus = 0xC00002A1 + STATUS_DS_INVALID_ATTRIBUTE_SYNTAX NTStatus = 0xC00002A2 + STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED NTStatus = 0xC00002A3 + STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS NTStatus = 0xC00002A4 + STATUS_DS_BUSY NTStatus = 0xC00002A5 + STATUS_DS_UNAVAILABLE NTStatus = 0xC00002A6 + STATUS_DS_NO_RIDS_ALLOCATED NTStatus = 0xC00002A7 + STATUS_DS_NO_MORE_RIDS NTStatus = 0xC00002A8 + STATUS_DS_INCORRECT_ROLE_OWNER NTStatus = 0xC00002A9 + STATUS_DS_RIDMGR_INIT_ERROR NTStatus = 0xC00002AA + STATUS_DS_OBJ_CLASS_VIOLATION NTStatus = 0xC00002AB + STATUS_DS_CANT_ON_NON_LEAF NTStatus = 0xC00002AC + STATUS_DS_CANT_ON_RDN NTStatus = 0xC00002AD + STATUS_DS_CANT_MOD_OBJ_CLASS NTStatus = 0xC00002AE + STATUS_DS_CROSS_DOM_MOVE_FAILED NTStatus = 0xC00002AF + STATUS_DS_GC_NOT_AVAILABLE NTStatus = 0xC00002B0 + STATUS_DIRECTORY_SERVICE_REQUIRED NTStatus = 0xC00002B1 + STATUS_REPARSE_ATTRIBUTE_CONFLICT NTStatus = 0xC00002B2 + STATUS_CANT_ENABLE_DENY_ONLY NTStatus = 0xC00002B3 + STATUS_FLOAT_MULTIPLE_FAULTS NTStatus = 0xC00002B4 + STATUS_FLOAT_MULTIPLE_TRAPS NTStatus = 0xC00002B5 + STATUS_DEVICE_REMOVED NTStatus = 0xC00002B6 + STATUS_JOURNAL_DELETE_IN_PROGRESS NTStatus = 0xC00002B7 + STATUS_JOURNAL_NOT_ACTIVE NTStatus = 0xC00002B8 + STATUS_NOINTERFACE NTStatus = 0xC00002B9 + STATUS_DS_RIDMGR_DISABLED NTStatus = 0xC00002BA + STATUS_DS_ADMIN_LIMIT_EXCEEDED NTStatus = 0xC00002C1 + STATUS_DRIVER_FAILED_SLEEP NTStatus = 0xC00002C2 + STATUS_MUTUAL_AUTHENTICATION_FAILED NTStatus = 0xC00002C3 + STATUS_CORRUPT_SYSTEM_FILE NTStatus = 0xC00002C4 + STATUS_DATATYPE_MISALIGNMENT_ERROR NTStatus = 0xC00002C5 + STATUS_WMI_READ_ONLY NTStatus = 0xC00002C6 + STATUS_WMI_SET_FAILURE NTStatus = 0xC00002C7 + STATUS_COMMITMENT_MINIMUM NTStatus = 0xC00002C8 + STATUS_REG_NAT_CONSUMPTION NTStatus = 0xC00002C9 + STATUS_TRANSPORT_FULL NTStatus = 0xC00002CA + STATUS_DS_SAM_INIT_FAILURE NTStatus = 0xC00002CB + STATUS_ONLY_IF_CONNECTED NTStatus = 0xC00002CC + STATUS_DS_SENSITIVE_GROUP_VIOLATION NTStatus = 0xC00002CD + STATUS_PNP_RESTART_ENUMERATION NTStatus = 0xC00002CE + STATUS_JOURNAL_ENTRY_DELETED NTStatus = 0xC00002CF + STATUS_DS_CANT_MOD_PRIMARYGROUPID NTStatus = 0xC00002D0 + STATUS_SYSTEM_IMAGE_BAD_SIGNATURE NTStatus = 0xC00002D1 + STATUS_PNP_REBOOT_REQUIRED NTStatus = 0xC00002D2 + STATUS_POWER_STATE_INVALID NTStatus = 0xC00002D3 + STATUS_DS_INVALID_GROUP_TYPE NTStatus = 0xC00002D4 + STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN NTStatus = 0xC00002D5 + STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN NTStatus = 0xC00002D6 + STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER NTStatus = 0xC00002D7 + STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER NTStatus = 0xC00002D8 + STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER NTStatus = 0xC00002D9 + STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER NTStatus = 0xC00002DA + STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER NTStatus = 0xC00002DB + STATUS_DS_HAVE_PRIMARY_MEMBERS NTStatus = 0xC00002DC + STATUS_WMI_NOT_SUPPORTED NTStatus = 0xC00002DD + STATUS_INSUFFICIENT_POWER NTStatus = 0xC00002DE + STATUS_SAM_NEED_BOOTKEY_PASSWORD NTStatus = 0xC00002DF + STATUS_SAM_NEED_BOOTKEY_FLOPPY NTStatus = 0xC00002E0 + STATUS_DS_CANT_START NTStatus = 0xC00002E1 + STATUS_DS_INIT_FAILURE NTStatus = 0xC00002E2 + STATUS_SAM_INIT_FAILURE NTStatus = 0xC00002E3 + STATUS_DS_GC_REQUIRED NTStatus = 0xC00002E4 + STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY NTStatus = 0xC00002E5 + STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS NTStatus = 0xC00002E6 + STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED NTStatus = 0xC00002E7 + STATUS_MULTIPLE_FAULT_VIOLATION NTStatus = 0xC00002E8 + STATUS_CURRENT_DOMAIN_NOT_ALLOWED NTStatus = 0xC00002E9 + STATUS_CANNOT_MAKE NTStatus = 0xC00002EA + STATUS_SYSTEM_SHUTDOWN NTStatus = 0xC00002EB + STATUS_DS_INIT_FAILURE_CONSOLE NTStatus = 0xC00002EC + STATUS_DS_SAM_INIT_FAILURE_CONSOLE NTStatus = 0xC00002ED + STATUS_UNFINISHED_CONTEXT_DELETED NTStatus = 0xC00002EE + STATUS_NO_TGT_REPLY NTStatus = 0xC00002EF + STATUS_OBJECTID_NOT_FOUND NTStatus = 0xC00002F0 + STATUS_NO_IP_ADDRESSES NTStatus = 0xC00002F1 + STATUS_WRONG_CREDENTIAL_HANDLE NTStatus = 0xC00002F2 + STATUS_CRYPTO_SYSTEM_INVALID NTStatus = 0xC00002F3 + STATUS_MAX_REFERRALS_EXCEEDED NTStatus = 0xC00002F4 + STATUS_MUST_BE_KDC NTStatus = 0xC00002F5 + STATUS_STRONG_CRYPTO_NOT_SUPPORTED NTStatus = 0xC00002F6 + STATUS_TOO_MANY_PRINCIPALS NTStatus = 0xC00002F7 + STATUS_NO_PA_DATA NTStatus = 0xC00002F8 + STATUS_PKINIT_NAME_MISMATCH NTStatus = 0xC00002F9 + STATUS_SMARTCARD_LOGON_REQUIRED NTStatus = 0xC00002FA + STATUS_KDC_INVALID_REQUEST NTStatus = 0xC00002FB + STATUS_KDC_UNABLE_TO_REFER NTStatus = 0xC00002FC + STATUS_KDC_UNKNOWN_ETYPE NTStatus = 0xC00002FD + STATUS_SHUTDOWN_IN_PROGRESS NTStatus = 0xC00002FE + STATUS_SERVER_SHUTDOWN_IN_PROGRESS NTStatus = 0xC00002FF + STATUS_NOT_SUPPORTED_ON_SBS NTStatus = 0xC0000300 + STATUS_WMI_GUID_DISCONNECTED NTStatus = 0xC0000301 + STATUS_WMI_ALREADY_DISABLED NTStatus = 0xC0000302 + STATUS_WMI_ALREADY_ENABLED NTStatus = 0xC0000303 + STATUS_MFT_TOO_FRAGMENTED NTStatus = 0xC0000304 + STATUS_COPY_PROTECTION_FAILURE NTStatus = 0xC0000305 + STATUS_CSS_AUTHENTICATION_FAILURE NTStatus = 0xC0000306 + STATUS_CSS_KEY_NOT_PRESENT NTStatus = 0xC0000307 + STATUS_CSS_KEY_NOT_ESTABLISHED NTStatus = 0xC0000308 + STATUS_CSS_SCRAMBLED_SECTOR NTStatus = 0xC0000309 + STATUS_CSS_REGION_MISMATCH NTStatus = 0xC000030A + STATUS_CSS_RESETS_EXHAUSTED NTStatus = 0xC000030B + STATUS_PASSWORD_CHANGE_REQUIRED NTStatus = 0xC000030C + STATUS_LOST_MODE_LOGON_RESTRICTION NTStatus = 0xC000030D + STATUS_PKINIT_FAILURE NTStatus = 0xC0000320 + STATUS_SMARTCARD_SUBSYSTEM_FAILURE NTStatus = 0xC0000321 + STATUS_NO_KERB_KEY NTStatus = 0xC0000322 + STATUS_HOST_DOWN NTStatus = 0xC0000350 + STATUS_UNSUPPORTED_PREAUTH NTStatus = 0xC0000351 + STATUS_EFS_ALG_BLOB_TOO_BIG NTStatus = 0xC0000352 + STATUS_PORT_NOT_SET NTStatus = 0xC0000353 + STATUS_DEBUGGER_INACTIVE NTStatus = 0xC0000354 + STATUS_DS_VERSION_CHECK_FAILURE NTStatus = 0xC0000355 + STATUS_AUDITING_DISABLED NTStatus = 0xC0000356 + STATUS_PRENT4_MACHINE_ACCOUNT NTStatus = 0xC0000357 + STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER NTStatus = 0xC0000358 + STATUS_INVALID_IMAGE_WIN_32 NTStatus = 0xC0000359 + STATUS_INVALID_IMAGE_WIN_64 NTStatus = 0xC000035A + STATUS_BAD_BINDINGS NTStatus = 0xC000035B + STATUS_NETWORK_SESSION_EXPIRED NTStatus = 0xC000035C + STATUS_APPHELP_BLOCK NTStatus = 0xC000035D + STATUS_ALL_SIDS_FILTERED NTStatus = 0xC000035E + STATUS_NOT_SAFE_MODE_DRIVER NTStatus = 0xC000035F + STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT NTStatus = 0xC0000361 + STATUS_ACCESS_DISABLED_BY_POLICY_PATH NTStatus = 0xC0000362 + STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER NTStatus = 0xC0000363 + STATUS_ACCESS_DISABLED_BY_POLICY_OTHER NTStatus = 0xC0000364 + STATUS_FAILED_DRIVER_ENTRY NTStatus = 0xC0000365 + STATUS_DEVICE_ENUMERATION_ERROR NTStatus = 0xC0000366 + STATUS_MOUNT_POINT_NOT_RESOLVED NTStatus = 0xC0000368 + STATUS_INVALID_DEVICE_OBJECT_PARAMETER NTStatus = 0xC0000369 + STATUS_MCA_OCCURED NTStatus = 0xC000036A + STATUS_DRIVER_BLOCKED_CRITICAL NTStatus = 0xC000036B + STATUS_DRIVER_BLOCKED NTStatus = 0xC000036C + STATUS_DRIVER_DATABASE_ERROR NTStatus = 0xC000036D + STATUS_SYSTEM_HIVE_TOO_LARGE NTStatus = 0xC000036E + STATUS_INVALID_IMPORT_OF_NON_DLL NTStatus = 0xC000036F + STATUS_DS_SHUTTING_DOWN NTStatus = 0x40000370 + STATUS_NO_SECRETS NTStatus = 0xC0000371 + STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY NTStatus = 0xC0000372 + STATUS_FAILED_STACK_SWITCH NTStatus = 0xC0000373 + STATUS_HEAP_CORRUPTION NTStatus = 0xC0000374 + STATUS_SMARTCARD_WRONG_PIN NTStatus = 0xC0000380 + STATUS_SMARTCARD_CARD_BLOCKED NTStatus = 0xC0000381 + STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED NTStatus = 0xC0000382 + STATUS_SMARTCARD_NO_CARD NTStatus = 0xC0000383 + STATUS_SMARTCARD_NO_KEY_CONTAINER NTStatus = 0xC0000384 + STATUS_SMARTCARD_NO_CERTIFICATE NTStatus = 0xC0000385 + STATUS_SMARTCARD_NO_KEYSET NTStatus = 0xC0000386 + STATUS_SMARTCARD_IO_ERROR NTStatus = 0xC0000387 + STATUS_DOWNGRADE_DETECTED NTStatus = 0xC0000388 + STATUS_SMARTCARD_CERT_REVOKED NTStatus = 0xC0000389 + STATUS_ISSUING_CA_UNTRUSTED NTStatus = 0xC000038A + STATUS_REVOCATION_OFFLINE_C NTStatus = 0xC000038B + STATUS_PKINIT_CLIENT_FAILURE NTStatus = 0xC000038C + STATUS_SMARTCARD_CERT_EXPIRED NTStatus = 0xC000038D + STATUS_DRIVER_FAILED_PRIOR_UNLOAD NTStatus = 0xC000038E + STATUS_SMARTCARD_SILENT_CONTEXT NTStatus = 0xC000038F + STATUS_PER_USER_TRUST_QUOTA_EXCEEDED NTStatus = 0xC0000401 + STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED NTStatus = 0xC0000402 + STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED NTStatus = 0xC0000403 + STATUS_DS_NAME_NOT_UNIQUE NTStatus = 0xC0000404 + STATUS_DS_DUPLICATE_ID_FOUND NTStatus = 0xC0000405 + STATUS_DS_GROUP_CONVERSION_ERROR NTStatus = 0xC0000406 + STATUS_VOLSNAP_PREPARE_HIBERNATE NTStatus = 0xC0000407 + STATUS_USER2USER_REQUIRED NTStatus = 0xC0000408 + STATUS_STACK_BUFFER_OVERRUN NTStatus = 0xC0000409 + STATUS_NO_S4U_PROT_SUPPORT NTStatus = 0xC000040A + STATUS_CROSSREALM_DELEGATION_FAILURE NTStatus = 0xC000040B + STATUS_REVOCATION_OFFLINE_KDC NTStatus = 0xC000040C + STATUS_ISSUING_CA_UNTRUSTED_KDC NTStatus = 0xC000040D + STATUS_KDC_CERT_EXPIRED NTStatus = 0xC000040E + STATUS_KDC_CERT_REVOKED NTStatus = 0xC000040F + STATUS_PARAMETER_QUOTA_EXCEEDED NTStatus = 0xC0000410 + STATUS_HIBERNATION_FAILURE NTStatus = 0xC0000411 + STATUS_DELAY_LOAD_FAILED NTStatus = 0xC0000412 + STATUS_AUTHENTICATION_FIREWALL_FAILED NTStatus = 0xC0000413 + STATUS_VDM_DISALLOWED NTStatus = 0xC0000414 + STATUS_HUNG_DISPLAY_DRIVER_THREAD NTStatus = 0xC0000415 + STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE NTStatus = 0xC0000416 + STATUS_INVALID_CRUNTIME_PARAMETER NTStatus = 0xC0000417 + STATUS_NTLM_BLOCKED NTStatus = 0xC0000418 + STATUS_DS_SRC_SID_EXISTS_IN_FOREST NTStatus = 0xC0000419 + STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST NTStatus = 0xC000041A + STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST NTStatus = 0xC000041B + STATUS_INVALID_USER_PRINCIPAL_NAME NTStatus = 0xC000041C + STATUS_FATAL_USER_CALLBACK_EXCEPTION NTStatus = 0xC000041D + STATUS_ASSERTION_FAILURE NTStatus = 0xC0000420 + STATUS_VERIFIER_STOP NTStatus = 0xC0000421 + STATUS_CALLBACK_POP_STACK NTStatus = 0xC0000423 + STATUS_INCOMPATIBLE_DRIVER_BLOCKED NTStatus = 0xC0000424 + STATUS_HIVE_UNLOADED NTStatus = 0xC0000425 + STATUS_COMPRESSION_DISABLED NTStatus = 0xC0000426 + STATUS_FILE_SYSTEM_LIMITATION NTStatus = 0xC0000427 + STATUS_INVALID_IMAGE_HASH NTStatus = 0xC0000428 + STATUS_NOT_CAPABLE NTStatus = 0xC0000429 + STATUS_REQUEST_OUT_OF_SEQUENCE NTStatus = 0xC000042A + STATUS_IMPLEMENTATION_LIMIT NTStatus = 0xC000042B + STATUS_ELEVATION_REQUIRED NTStatus = 0xC000042C + STATUS_NO_SECURITY_CONTEXT NTStatus = 0xC000042D + STATUS_PKU2U_CERT_FAILURE NTStatus = 0xC000042F + STATUS_BEYOND_VDL NTStatus = 0xC0000432 + STATUS_ENCOUNTERED_WRITE_IN_PROGRESS NTStatus = 0xC0000433 + STATUS_PTE_CHANGED NTStatus = 0xC0000434 + STATUS_PURGE_FAILED NTStatus = 0xC0000435 + STATUS_CRED_REQUIRES_CONFIRMATION NTStatus = 0xC0000440 + STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE NTStatus = 0xC0000441 + STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER NTStatus = 0xC0000442 + STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE NTStatus = 0xC0000443 + STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE NTStatus = 0xC0000444 + STATUS_CS_ENCRYPTION_FILE_NOT_CSE NTStatus = 0xC0000445 + STATUS_INVALID_LABEL NTStatus = 0xC0000446 + STATUS_DRIVER_PROCESS_TERMINATED NTStatus = 0xC0000450 + STATUS_AMBIGUOUS_SYSTEM_DEVICE NTStatus = 0xC0000451 + STATUS_SYSTEM_DEVICE_NOT_FOUND NTStatus = 0xC0000452 + STATUS_RESTART_BOOT_APPLICATION NTStatus = 0xC0000453 + STATUS_INSUFFICIENT_NVRAM_RESOURCES NTStatus = 0xC0000454 + STATUS_INVALID_SESSION NTStatus = 0xC0000455 + STATUS_THREAD_ALREADY_IN_SESSION NTStatus = 0xC0000456 + STATUS_THREAD_NOT_IN_SESSION NTStatus = 0xC0000457 + STATUS_INVALID_WEIGHT NTStatus = 0xC0000458 + STATUS_REQUEST_PAUSED NTStatus = 0xC0000459 + STATUS_NO_RANGES_PROCESSED NTStatus = 0xC0000460 + STATUS_DISK_RESOURCES_EXHAUSTED NTStatus = 0xC0000461 + STATUS_NEEDS_REMEDIATION NTStatus = 0xC0000462 + STATUS_DEVICE_FEATURE_NOT_SUPPORTED NTStatus = 0xC0000463 + STATUS_DEVICE_UNREACHABLE NTStatus = 0xC0000464 + STATUS_INVALID_TOKEN NTStatus = 0xC0000465 + STATUS_SERVER_UNAVAILABLE NTStatus = 0xC0000466 + STATUS_FILE_NOT_AVAILABLE NTStatus = 0xC0000467 + STATUS_DEVICE_INSUFFICIENT_RESOURCES NTStatus = 0xC0000468 + STATUS_PACKAGE_UPDATING NTStatus = 0xC0000469 + STATUS_NOT_READ_FROM_COPY NTStatus = 0xC000046A + STATUS_FT_WRITE_FAILURE NTStatus = 0xC000046B + STATUS_FT_DI_SCAN_REQUIRED NTStatus = 0xC000046C + STATUS_OBJECT_NOT_EXTERNALLY_BACKED NTStatus = 0xC000046D + STATUS_EXTERNAL_BACKING_PROVIDER_UNKNOWN NTStatus = 0xC000046E + STATUS_COMPRESSION_NOT_BENEFICIAL NTStatus = 0xC000046F + STATUS_DATA_CHECKSUM_ERROR NTStatus = 0xC0000470 + STATUS_INTERMIXED_KERNEL_EA_OPERATION NTStatus = 0xC0000471 + STATUS_TRIM_READ_ZERO_NOT_SUPPORTED NTStatus = 0xC0000472 + STATUS_TOO_MANY_SEGMENT_DESCRIPTORS NTStatus = 0xC0000473 + STATUS_INVALID_OFFSET_ALIGNMENT NTStatus = 0xC0000474 + STATUS_INVALID_FIELD_IN_PARAMETER_LIST NTStatus = 0xC0000475 + STATUS_OPERATION_IN_PROGRESS NTStatus = 0xC0000476 + STATUS_INVALID_INITIATOR_TARGET_PATH NTStatus = 0xC0000477 + STATUS_SCRUB_DATA_DISABLED NTStatus = 0xC0000478 + STATUS_NOT_REDUNDANT_STORAGE NTStatus = 0xC0000479 + STATUS_RESIDENT_FILE_NOT_SUPPORTED NTStatus = 0xC000047A + STATUS_COMPRESSED_FILE_NOT_SUPPORTED NTStatus = 0xC000047B + STATUS_DIRECTORY_NOT_SUPPORTED NTStatus = 0xC000047C + STATUS_IO_OPERATION_TIMEOUT NTStatus = 0xC000047D + STATUS_SYSTEM_NEEDS_REMEDIATION NTStatus = 0xC000047E + STATUS_APPX_INTEGRITY_FAILURE_CLR_NGEN NTStatus = 0xC000047F + STATUS_SHARE_UNAVAILABLE NTStatus = 0xC0000480 + STATUS_APISET_NOT_HOSTED NTStatus = 0xC0000481 + STATUS_APISET_NOT_PRESENT NTStatus = 0xC0000482 + STATUS_DEVICE_HARDWARE_ERROR NTStatus = 0xC0000483 + STATUS_FIRMWARE_SLOT_INVALID NTStatus = 0xC0000484 + STATUS_FIRMWARE_IMAGE_INVALID NTStatus = 0xC0000485 + STATUS_STORAGE_TOPOLOGY_ID_MISMATCH NTStatus = 0xC0000486 + STATUS_WIM_NOT_BOOTABLE NTStatus = 0xC0000487 + STATUS_BLOCKED_BY_PARENTAL_CONTROLS NTStatus = 0xC0000488 + STATUS_NEEDS_REGISTRATION NTStatus = 0xC0000489 + STATUS_QUOTA_ACTIVITY NTStatus = 0xC000048A + STATUS_CALLBACK_INVOKE_INLINE NTStatus = 0xC000048B + STATUS_BLOCK_TOO_MANY_REFERENCES NTStatus = 0xC000048C + STATUS_MARKED_TO_DISALLOW_WRITES NTStatus = 0xC000048D + STATUS_NETWORK_ACCESS_DENIED_EDP NTStatus = 0xC000048E + STATUS_ENCLAVE_FAILURE NTStatus = 0xC000048F + STATUS_PNP_NO_COMPAT_DRIVERS NTStatus = 0xC0000490 + STATUS_PNP_DRIVER_PACKAGE_NOT_FOUND NTStatus = 0xC0000491 + STATUS_PNP_DRIVER_CONFIGURATION_NOT_FOUND NTStatus = 0xC0000492 + STATUS_PNP_DRIVER_CONFIGURATION_INCOMPLETE NTStatus = 0xC0000493 + STATUS_PNP_FUNCTION_DRIVER_REQUIRED NTStatus = 0xC0000494 + STATUS_PNP_DEVICE_CONFIGURATION_PENDING NTStatus = 0xC0000495 + STATUS_DEVICE_HINT_NAME_BUFFER_TOO_SMALL NTStatus = 0xC0000496 + STATUS_PACKAGE_NOT_AVAILABLE NTStatus = 0xC0000497 + STATUS_DEVICE_IN_MAINTENANCE NTStatus = 0xC0000499 + STATUS_NOT_SUPPORTED_ON_DAX NTStatus = 0xC000049A + STATUS_FREE_SPACE_TOO_FRAGMENTED NTStatus = 0xC000049B + STATUS_DAX_MAPPING_EXISTS NTStatus = 0xC000049C + STATUS_CHILD_PROCESS_BLOCKED NTStatus = 0xC000049D + STATUS_STORAGE_LOST_DATA_PERSISTENCE NTStatus = 0xC000049E + STATUS_VRF_CFG_ENABLED NTStatus = 0xC000049F + STATUS_PARTITION_TERMINATING NTStatus = 0xC00004A0 + STATUS_EXTERNAL_SYSKEY_NOT_SUPPORTED NTStatus = 0xC00004A1 + STATUS_ENCLAVE_VIOLATION NTStatus = 0xC00004A2 + STATUS_FILE_PROTECTED_UNDER_DPL NTStatus = 0xC00004A3 + STATUS_VOLUME_NOT_CLUSTER_ALIGNED NTStatus = 0xC00004A4 + STATUS_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND NTStatus = 0xC00004A5 + STATUS_APPX_FILE_NOT_ENCRYPTED NTStatus = 0xC00004A6 + STATUS_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED NTStatus = 0xC00004A7 + STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET NTStatus = 0xC00004A8 + STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE NTStatus = 0xC00004A9 + STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER NTStatus = 0xC00004AA + STATUS_FT_READ_FAILURE NTStatus = 0xC00004AB + STATUS_PATCH_CONFLICT NTStatus = 0xC00004AC + STATUS_STORAGE_RESERVE_ID_INVALID NTStatus = 0xC00004AD + STATUS_STORAGE_RESERVE_DOES_NOT_EXIST NTStatus = 0xC00004AE + STATUS_STORAGE_RESERVE_ALREADY_EXISTS NTStatus = 0xC00004AF + STATUS_STORAGE_RESERVE_NOT_EMPTY NTStatus = 0xC00004B0 + STATUS_NOT_A_DAX_VOLUME NTStatus = 0xC00004B1 + STATUS_NOT_DAX_MAPPABLE NTStatus = 0xC00004B2 + STATUS_CASE_DIFFERING_NAMES_IN_DIR NTStatus = 0xC00004B3 + STATUS_FILE_NOT_SUPPORTED NTStatus = 0xC00004B4 + STATUS_NOT_SUPPORTED_WITH_BTT NTStatus = 0xC00004B5 + STATUS_ENCRYPTION_DISABLED NTStatus = 0xC00004B6 + STATUS_ENCRYPTING_METADATA_DISALLOWED NTStatus = 0xC00004B7 + STATUS_CANT_CLEAR_ENCRYPTION_FLAG NTStatus = 0xC00004B8 + STATUS_INVALID_TASK_NAME NTStatus = 0xC0000500 + STATUS_INVALID_TASK_INDEX NTStatus = 0xC0000501 + STATUS_THREAD_ALREADY_IN_TASK NTStatus = 0xC0000502 + STATUS_CALLBACK_BYPASS NTStatus = 0xC0000503 + STATUS_UNDEFINED_SCOPE NTStatus = 0xC0000504 + STATUS_INVALID_CAP NTStatus = 0xC0000505 + STATUS_NOT_GUI_PROCESS NTStatus = 0xC0000506 + STATUS_DEVICE_HUNG NTStatus = 0xC0000507 + STATUS_CONTAINER_ASSIGNED NTStatus = 0xC0000508 + STATUS_JOB_NO_CONTAINER NTStatus = 0xC0000509 + STATUS_DEVICE_UNRESPONSIVE NTStatus = 0xC000050A + STATUS_REPARSE_POINT_ENCOUNTERED NTStatus = 0xC000050B + STATUS_ATTRIBUTE_NOT_PRESENT NTStatus = 0xC000050C + STATUS_NOT_A_TIERED_VOLUME NTStatus = 0xC000050D + STATUS_ALREADY_HAS_STREAM_ID NTStatus = 0xC000050E + STATUS_JOB_NOT_EMPTY NTStatus = 0xC000050F + STATUS_ALREADY_INITIALIZED NTStatus = 0xC0000510 + STATUS_ENCLAVE_NOT_TERMINATED NTStatus = 0xC0000511 + STATUS_ENCLAVE_IS_TERMINATING NTStatus = 0xC0000512 + STATUS_SMB1_NOT_AVAILABLE NTStatus = 0xC0000513 + STATUS_SMR_GARBAGE_COLLECTION_REQUIRED NTStatus = 0xC0000514 + STATUS_INTERRUPTED NTStatus = 0xC0000515 + STATUS_THREAD_NOT_RUNNING NTStatus = 0xC0000516 + STATUS_FAIL_FAST_EXCEPTION NTStatus = 0xC0000602 + STATUS_IMAGE_CERT_REVOKED NTStatus = 0xC0000603 + STATUS_DYNAMIC_CODE_BLOCKED NTStatus = 0xC0000604 + STATUS_IMAGE_CERT_EXPIRED NTStatus = 0xC0000605 + STATUS_STRICT_CFG_VIOLATION NTStatus = 0xC0000606 + STATUS_SET_CONTEXT_DENIED NTStatus = 0xC000060A + STATUS_CROSS_PARTITION_VIOLATION NTStatus = 0xC000060B + STATUS_PORT_CLOSED NTStatus = 0xC0000700 + STATUS_MESSAGE_LOST NTStatus = 0xC0000701 + STATUS_INVALID_MESSAGE NTStatus = 0xC0000702 + STATUS_REQUEST_CANCELED NTStatus = 0xC0000703 + STATUS_RECURSIVE_DISPATCH NTStatus = 0xC0000704 + STATUS_LPC_RECEIVE_BUFFER_EXPECTED NTStatus = 0xC0000705 + STATUS_LPC_INVALID_CONNECTION_USAGE NTStatus = 0xC0000706 + STATUS_LPC_REQUESTS_NOT_ALLOWED NTStatus = 0xC0000707 + STATUS_RESOURCE_IN_USE NTStatus = 0xC0000708 + STATUS_HARDWARE_MEMORY_ERROR NTStatus = 0xC0000709 + STATUS_THREADPOOL_HANDLE_EXCEPTION NTStatus = 0xC000070A + STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED NTStatus = 0xC000070B + STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED NTStatus = 0xC000070C + STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED NTStatus = 0xC000070D + STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED NTStatus = 0xC000070E + STATUS_THREADPOOL_RELEASED_DURING_OPERATION NTStatus = 0xC000070F + STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING NTStatus = 0xC0000710 + STATUS_APC_RETURNED_WHILE_IMPERSONATING NTStatus = 0xC0000711 + STATUS_PROCESS_IS_PROTECTED NTStatus = 0xC0000712 + STATUS_MCA_EXCEPTION NTStatus = 0xC0000713 + STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE NTStatus = 0xC0000714 + STATUS_SYMLINK_CLASS_DISABLED NTStatus = 0xC0000715 + STATUS_INVALID_IDN_NORMALIZATION NTStatus = 0xC0000716 + STATUS_NO_UNICODE_TRANSLATION NTStatus = 0xC0000717 + STATUS_ALREADY_REGISTERED NTStatus = 0xC0000718 + STATUS_CONTEXT_MISMATCH NTStatus = 0xC0000719 + STATUS_PORT_ALREADY_HAS_COMPLETION_LIST NTStatus = 0xC000071A + STATUS_CALLBACK_RETURNED_THREAD_PRIORITY NTStatus = 0xC000071B + STATUS_INVALID_THREAD NTStatus = 0xC000071C + STATUS_CALLBACK_RETURNED_TRANSACTION NTStatus = 0xC000071D + STATUS_CALLBACK_RETURNED_LDR_LOCK NTStatus = 0xC000071E + STATUS_CALLBACK_RETURNED_LANG NTStatus = 0xC000071F + STATUS_CALLBACK_RETURNED_PRI_BACK NTStatus = 0xC0000720 + STATUS_CALLBACK_RETURNED_THREAD_AFFINITY NTStatus = 0xC0000721 + STATUS_LPC_HANDLE_COUNT_EXCEEDED NTStatus = 0xC0000722 + STATUS_EXECUTABLE_MEMORY_WRITE NTStatus = 0xC0000723 + STATUS_KERNEL_EXECUTABLE_MEMORY_WRITE NTStatus = 0xC0000724 + STATUS_ATTACHED_EXECUTABLE_MEMORY_WRITE NTStatus = 0xC0000725 + STATUS_TRIGGERED_EXECUTABLE_MEMORY_WRITE NTStatus = 0xC0000726 + STATUS_DISK_REPAIR_DISABLED NTStatus = 0xC0000800 + STATUS_DS_DOMAIN_RENAME_IN_PROGRESS NTStatus = 0xC0000801 + STATUS_DISK_QUOTA_EXCEEDED NTStatus = 0xC0000802 + STATUS_DATA_LOST_REPAIR NTStatus = 0x80000803 + STATUS_CONTENT_BLOCKED NTStatus = 0xC0000804 + STATUS_BAD_CLUSTERS NTStatus = 0xC0000805 + STATUS_VOLUME_DIRTY NTStatus = 0xC0000806 + STATUS_DISK_REPAIR_REDIRECTED NTStatus = 0x40000807 + STATUS_DISK_REPAIR_UNSUCCESSFUL NTStatus = 0xC0000808 + STATUS_CORRUPT_LOG_OVERFULL NTStatus = 0xC0000809 + STATUS_CORRUPT_LOG_CORRUPTED NTStatus = 0xC000080A + STATUS_CORRUPT_LOG_UNAVAILABLE NTStatus = 0xC000080B + STATUS_CORRUPT_LOG_DELETED_FULL NTStatus = 0xC000080C + STATUS_CORRUPT_LOG_CLEARED NTStatus = 0xC000080D + STATUS_ORPHAN_NAME_EXHAUSTED NTStatus = 0xC000080E + STATUS_PROACTIVE_SCAN_IN_PROGRESS NTStatus = 0xC000080F + STATUS_ENCRYPTED_IO_NOT_POSSIBLE NTStatus = 0xC0000810 + STATUS_CORRUPT_LOG_UPLEVEL_RECORDS NTStatus = 0xC0000811 + STATUS_FILE_CHECKED_OUT NTStatus = 0xC0000901 + STATUS_CHECKOUT_REQUIRED NTStatus = 0xC0000902 + STATUS_BAD_FILE_TYPE NTStatus = 0xC0000903 + STATUS_FILE_TOO_LARGE NTStatus = 0xC0000904 + STATUS_FORMS_AUTH_REQUIRED NTStatus = 0xC0000905 + STATUS_VIRUS_INFECTED NTStatus = 0xC0000906 + STATUS_VIRUS_DELETED NTStatus = 0xC0000907 + STATUS_BAD_MCFG_TABLE NTStatus = 0xC0000908 + STATUS_CANNOT_BREAK_OPLOCK NTStatus = 0xC0000909 + STATUS_BAD_KEY NTStatus = 0xC000090A + STATUS_BAD_DATA NTStatus = 0xC000090B + STATUS_NO_KEY NTStatus = 0xC000090C + STATUS_FILE_HANDLE_REVOKED NTStatus = 0xC0000910 + STATUS_WOW_ASSERTION NTStatus = 0xC0009898 + STATUS_INVALID_SIGNATURE NTStatus = 0xC000A000 + STATUS_HMAC_NOT_SUPPORTED NTStatus = 0xC000A001 + STATUS_AUTH_TAG_MISMATCH NTStatus = 0xC000A002 + STATUS_INVALID_STATE_TRANSITION NTStatus = 0xC000A003 + STATUS_INVALID_KERNEL_INFO_VERSION NTStatus = 0xC000A004 + STATUS_INVALID_PEP_INFO_VERSION NTStatus = 0xC000A005 + STATUS_HANDLE_REVOKED NTStatus = 0xC000A006 + STATUS_EOF_ON_GHOSTED_RANGE NTStatus = 0xC000A007 + STATUS_IPSEC_QUEUE_OVERFLOW NTStatus = 0xC000A010 + STATUS_ND_QUEUE_OVERFLOW NTStatus = 0xC000A011 + STATUS_HOPLIMIT_EXCEEDED NTStatus = 0xC000A012 + STATUS_PROTOCOL_NOT_SUPPORTED NTStatus = 0xC000A013 + STATUS_FASTPATH_REJECTED NTStatus = 0xC000A014 + STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED NTStatus = 0xC000A080 + STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR NTStatus = 0xC000A081 + STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR NTStatus = 0xC000A082 + STATUS_XML_PARSE_ERROR NTStatus = 0xC000A083 + STATUS_XMLDSIG_ERROR NTStatus = 0xC000A084 + STATUS_WRONG_COMPARTMENT NTStatus = 0xC000A085 + STATUS_AUTHIP_FAILURE NTStatus = 0xC000A086 + STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS NTStatus = 0xC000A087 + STATUS_DS_OID_NOT_FOUND NTStatus = 0xC000A088 + STATUS_INCORRECT_ACCOUNT_TYPE NTStatus = 0xC000A089 + STATUS_HASH_NOT_SUPPORTED NTStatus = 0xC000A100 + STATUS_HASH_NOT_PRESENT NTStatus = 0xC000A101 + STATUS_SECONDARY_IC_PROVIDER_NOT_REGISTERED NTStatus = 0xC000A121 + STATUS_GPIO_CLIENT_INFORMATION_INVALID NTStatus = 0xC000A122 + STATUS_GPIO_VERSION_NOT_SUPPORTED NTStatus = 0xC000A123 + STATUS_GPIO_INVALID_REGISTRATION_PACKET NTStatus = 0xC000A124 + STATUS_GPIO_OPERATION_DENIED NTStatus = 0xC000A125 + STATUS_GPIO_INCOMPATIBLE_CONNECT_MODE NTStatus = 0xC000A126 + STATUS_GPIO_INTERRUPT_ALREADY_UNMASKED NTStatus = 0x8000A127 + STATUS_CANNOT_SWITCH_RUNLEVEL NTStatus = 0xC000A141 + STATUS_INVALID_RUNLEVEL_SETTING NTStatus = 0xC000A142 + STATUS_RUNLEVEL_SWITCH_TIMEOUT NTStatus = 0xC000A143 + STATUS_SERVICES_FAILED_AUTOSTART NTStatus = 0x4000A144 + STATUS_RUNLEVEL_SWITCH_AGENT_TIMEOUT NTStatus = 0xC000A145 + STATUS_RUNLEVEL_SWITCH_IN_PROGRESS NTStatus = 0xC000A146 + STATUS_NOT_APPCONTAINER NTStatus = 0xC000A200 + STATUS_NOT_SUPPORTED_IN_APPCONTAINER NTStatus = 0xC000A201 + STATUS_INVALID_PACKAGE_SID_LENGTH NTStatus = 0xC000A202 + STATUS_LPAC_ACCESS_DENIED NTStatus = 0xC000A203 + STATUS_ADMINLESS_ACCESS_DENIED NTStatus = 0xC000A204 + STATUS_APP_DATA_NOT_FOUND NTStatus = 0xC000A281 + STATUS_APP_DATA_EXPIRED NTStatus = 0xC000A282 + STATUS_APP_DATA_CORRUPT NTStatus = 0xC000A283 + STATUS_APP_DATA_LIMIT_EXCEEDED NTStatus = 0xC000A284 + STATUS_APP_DATA_REBOOT_REQUIRED NTStatus = 0xC000A285 + STATUS_OFFLOAD_READ_FLT_NOT_SUPPORTED NTStatus = 0xC000A2A1 + STATUS_OFFLOAD_WRITE_FLT_NOT_SUPPORTED NTStatus = 0xC000A2A2 + STATUS_OFFLOAD_READ_FILE_NOT_SUPPORTED NTStatus = 0xC000A2A3 + STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED NTStatus = 0xC000A2A4 + STATUS_WOF_WIM_HEADER_CORRUPT NTStatus = 0xC000A2A5 + STATUS_WOF_WIM_RESOURCE_TABLE_CORRUPT NTStatus = 0xC000A2A6 + STATUS_WOF_FILE_RESOURCE_TABLE_CORRUPT NTStatus = 0xC000A2A7 + STATUS_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE NTStatus = 0xC000CE01 + STATUS_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT NTStatus = 0xC000CE02 + STATUS_FILE_SYSTEM_VIRTUALIZATION_BUSY NTStatus = 0xC000CE03 + STATUS_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN NTStatus = 0xC000CE04 + STATUS_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION NTStatus = 0xC000CE05 + STATUS_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT NTStatus = 0xC000CF00 + STATUS_CLOUD_FILE_PROVIDER_NOT_RUNNING NTStatus = 0xC000CF01 + STATUS_CLOUD_FILE_METADATA_CORRUPT NTStatus = 0xC000CF02 + STATUS_CLOUD_FILE_METADATA_TOO_LARGE NTStatus = 0xC000CF03 + STATUS_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE NTStatus = 0x8000CF04 + STATUS_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS NTStatus = 0x8000CF05 + STATUS_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED NTStatus = 0xC000CF06 + STATUS_NOT_A_CLOUD_FILE NTStatus = 0xC000CF07 + STATUS_CLOUD_FILE_NOT_IN_SYNC NTStatus = 0xC000CF08 + STATUS_CLOUD_FILE_ALREADY_CONNECTED NTStatus = 0xC000CF09 + STATUS_CLOUD_FILE_NOT_SUPPORTED NTStatus = 0xC000CF0A + STATUS_CLOUD_FILE_INVALID_REQUEST NTStatus = 0xC000CF0B + STATUS_CLOUD_FILE_READ_ONLY_VOLUME NTStatus = 0xC000CF0C + STATUS_CLOUD_FILE_CONNECTED_PROVIDER_ONLY NTStatus = 0xC000CF0D + STATUS_CLOUD_FILE_VALIDATION_FAILED NTStatus = 0xC000CF0E + STATUS_CLOUD_FILE_AUTHENTICATION_FAILED NTStatus = 0xC000CF0F + STATUS_CLOUD_FILE_INSUFFICIENT_RESOURCES NTStatus = 0xC000CF10 + STATUS_CLOUD_FILE_NETWORK_UNAVAILABLE NTStatus = 0xC000CF11 + STATUS_CLOUD_FILE_UNSUCCESSFUL NTStatus = 0xC000CF12 + STATUS_CLOUD_FILE_NOT_UNDER_SYNC_ROOT NTStatus = 0xC000CF13 + STATUS_CLOUD_FILE_IN_USE NTStatus = 0xC000CF14 + STATUS_CLOUD_FILE_PINNED NTStatus = 0xC000CF15 + STATUS_CLOUD_FILE_REQUEST_ABORTED NTStatus = 0xC000CF16 + STATUS_CLOUD_FILE_PROPERTY_CORRUPT NTStatus = 0xC000CF17 + STATUS_CLOUD_FILE_ACCESS_DENIED NTStatus = 0xC000CF18 + STATUS_CLOUD_FILE_INCOMPATIBLE_HARDLINKS NTStatus = 0xC000CF19 + STATUS_CLOUD_FILE_PROPERTY_LOCK_CONFLICT NTStatus = 0xC000CF1A + STATUS_CLOUD_FILE_REQUEST_CANCELED NTStatus = 0xC000CF1B + STATUS_CLOUD_FILE_PROVIDER_TERMINATED NTStatus = 0xC000CF1D + STATUS_NOT_A_CLOUD_SYNC_ROOT NTStatus = 0xC000CF1E + STATUS_CLOUD_FILE_REQUEST_TIMEOUT NTStatus = 0xC000CF1F + STATUS_ACPI_INVALID_OPCODE NTStatus = 0xC0140001 + STATUS_ACPI_STACK_OVERFLOW NTStatus = 0xC0140002 + STATUS_ACPI_ASSERT_FAILED NTStatus = 0xC0140003 + STATUS_ACPI_INVALID_INDEX NTStatus = 0xC0140004 + STATUS_ACPI_INVALID_ARGUMENT NTStatus = 0xC0140005 + STATUS_ACPI_FATAL NTStatus = 0xC0140006 + STATUS_ACPI_INVALID_SUPERNAME NTStatus = 0xC0140007 + STATUS_ACPI_INVALID_ARGTYPE NTStatus = 0xC0140008 + STATUS_ACPI_INVALID_OBJTYPE NTStatus = 0xC0140009 + STATUS_ACPI_INVALID_TARGETTYPE NTStatus = 0xC014000A + STATUS_ACPI_INCORRECT_ARGUMENT_COUNT NTStatus = 0xC014000B + STATUS_ACPI_ADDRESS_NOT_MAPPED NTStatus = 0xC014000C + STATUS_ACPI_INVALID_EVENTTYPE NTStatus = 0xC014000D + STATUS_ACPI_HANDLER_COLLISION NTStatus = 0xC014000E + STATUS_ACPI_INVALID_DATA NTStatus = 0xC014000F + STATUS_ACPI_INVALID_REGION NTStatus = 0xC0140010 + STATUS_ACPI_INVALID_ACCESS_SIZE NTStatus = 0xC0140011 + STATUS_ACPI_ACQUIRE_GLOBAL_LOCK NTStatus = 0xC0140012 + STATUS_ACPI_ALREADY_INITIALIZED NTStatus = 0xC0140013 + STATUS_ACPI_NOT_INITIALIZED NTStatus = 0xC0140014 + STATUS_ACPI_INVALID_MUTEX_LEVEL NTStatus = 0xC0140015 + STATUS_ACPI_MUTEX_NOT_OWNED NTStatus = 0xC0140016 + STATUS_ACPI_MUTEX_NOT_OWNER NTStatus = 0xC0140017 + STATUS_ACPI_RS_ACCESS NTStatus = 0xC0140018 + STATUS_ACPI_INVALID_TABLE NTStatus = 0xC0140019 + STATUS_ACPI_REG_HANDLER_FAILED NTStatus = 0xC0140020 + STATUS_ACPI_POWER_REQUEST_FAILED NTStatus = 0xC0140021 + STATUS_CTX_WINSTATION_NAME_INVALID NTStatus = 0xC00A0001 + STATUS_CTX_INVALID_PD NTStatus = 0xC00A0002 + STATUS_CTX_PD_NOT_FOUND NTStatus = 0xC00A0003 + STATUS_CTX_CDM_CONNECT NTStatus = 0x400A0004 + STATUS_CTX_CDM_DISCONNECT NTStatus = 0x400A0005 + STATUS_CTX_CLOSE_PENDING NTStatus = 0xC00A0006 + STATUS_CTX_NO_OUTBUF NTStatus = 0xC00A0007 + STATUS_CTX_MODEM_INF_NOT_FOUND NTStatus = 0xC00A0008 + STATUS_CTX_INVALID_MODEMNAME NTStatus = 0xC00A0009 + STATUS_CTX_RESPONSE_ERROR NTStatus = 0xC00A000A + STATUS_CTX_MODEM_RESPONSE_TIMEOUT NTStatus = 0xC00A000B + STATUS_CTX_MODEM_RESPONSE_NO_CARRIER NTStatus = 0xC00A000C + STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE NTStatus = 0xC00A000D + STATUS_CTX_MODEM_RESPONSE_BUSY NTStatus = 0xC00A000E + STATUS_CTX_MODEM_RESPONSE_VOICE NTStatus = 0xC00A000F + STATUS_CTX_TD_ERROR NTStatus = 0xC00A0010 + STATUS_CTX_LICENSE_CLIENT_INVALID NTStatus = 0xC00A0012 + STATUS_CTX_LICENSE_NOT_AVAILABLE NTStatus = 0xC00A0013 + STATUS_CTX_LICENSE_EXPIRED NTStatus = 0xC00A0014 + STATUS_CTX_WINSTATION_NOT_FOUND NTStatus = 0xC00A0015 + STATUS_CTX_WINSTATION_NAME_COLLISION NTStatus = 0xC00A0016 + STATUS_CTX_WINSTATION_BUSY NTStatus = 0xC00A0017 + STATUS_CTX_BAD_VIDEO_MODE NTStatus = 0xC00A0018 + STATUS_CTX_GRAPHICS_INVALID NTStatus = 0xC00A0022 + STATUS_CTX_NOT_CONSOLE NTStatus = 0xC00A0024 + STATUS_CTX_CLIENT_QUERY_TIMEOUT NTStatus = 0xC00A0026 + STATUS_CTX_CONSOLE_DISCONNECT NTStatus = 0xC00A0027 + STATUS_CTX_CONSOLE_CONNECT NTStatus = 0xC00A0028 + STATUS_CTX_SHADOW_DENIED NTStatus = 0xC00A002A + STATUS_CTX_WINSTATION_ACCESS_DENIED NTStatus = 0xC00A002B + STATUS_CTX_INVALID_WD NTStatus = 0xC00A002E + STATUS_CTX_WD_NOT_FOUND NTStatus = 0xC00A002F + STATUS_CTX_SHADOW_INVALID NTStatus = 0xC00A0030 + STATUS_CTX_SHADOW_DISABLED NTStatus = 0xC00A0031 + STATUS_RDP_PROTOCOL_ERROR NTStatus = 0xC00A0032 + STATUS_CTX_CLIENT_LICENSE_NOT_SET NTStatus = 0xC00A0033 + STATUS_CTX_CLIENT_LICENSE_IN_USE NTStatus = 0xC00A0034 + STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE NTStatus = 0xC00A0035 + STATUS_CTX_SHADOW_NOT_RUNNING NTStatus = 0xC00A0036 + STATUS_CTX_LOGON_DISABLED NTStatus = 0xC00A0037 + STATUS_CTX_SECURITY_LAYER_ERROR NTStatus = 0xC00A0038 + STATUS_TS_INCOMPATIBLE_SESSIONS NTStatus = 0xC00A0039 + STATUS_TS_VIDEO_SUBSYSTEM_ERROR NTStatus = 0xC00A003A + STATUS_PNP_BAD_MPS_TABLE NTStatus = 0xC0040035 + STATUS_PNP_TRANSLATION_FAILED NTStatus = 0xC0040036 + STATUS_PNP_IRQ_TRANSLATION_FAILED NTStatus = 0xC0040037 + STATUS_PNP_INVALID_ID NTStatus = 0xC0040038 + STATUS_IO_REISSUE_AS_CACHED NTStatus = 0xC0040039 + STATUS_MUI_FILE_NOT_FOUND NTStatus = 0xC00B0001 + STATUS_MUI_INVALID_FILE NTStatus = 0xC00B0002 + STATUS_MUI_INVALID_RC_CONFIG NTStatus = 0xC00B0003 + STATUS_MUI_INVALID_LOCALE_NAME NTStatus = 0xC00B0004 + STATUS_MUI_INVALID_ULTIMATEFALLBACK_NAME NTStatus = 0xC00B0005 + STATUS_MUI_FILE_NOT_LOADED NTStatus = 0xC00B0006 + STATUS_RESOURCE_ENUM_USER_STOP NTStatus = 0xC00B0007 + STATUS_FLT_NO_HANDLER_DEFINED NTStatus = 0xC01C0001 + STATUS_FLT_CONTEXT_ALREADY_DEFINED NTStatus = 0xC01C0002 + STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST NTStatus = 0xC01C0003 + STATUS_FLT_DISALLOW_FAST_IO NTStatus = 0xC01C0004 + STATUS_FLT_INVALID_NAME_REQUEST NTStatus = 0xC01C0005 + STATUS_FLT_NOT_SAFE_TO_POST_OPERATION NTStatus = 0xC01C0006 + STATUS_FLT_NOT_INITIALIZED NTStatus = 0xC01C0007 + STATUS_FLT_FILTER_NOT_READY NTStatus = 0xC01C0008 + STATUS_FLT_POST_OPERATION_CLEANUP NTStatus = 0xC01C0009 + STATUS_FLT_INTERNAL_ERROR NTStatus = 0xC01C000A + STATUS_FLT_DELETING_OBJECT NTStatus = 0xC01C000B + STATUS_FLT_MUST_BE_NONPAGED_POOL NTStatus = 0xC01C000C + STATUS_FLT_DUPLICATE_ENTRY NTStatus = 0xC01C000D + STATUS_FLT_CBDQ_DISABLED NTStatus = 0xC01C000E + STATUS_FLT_DO_NOT_ATTACH NTStatus = 0xC01C000F + STATUS_FLT_DO_NOT_DETACH NTStatus = 0xC01C0010 + STATUS_FLT_INSTANCE_ALTITUDE_COLLISION NTStatus = 0xC01C0011 + STATUS_FLT_INSTANCE_NAME_COLLISION NTStatus = 0xC01C0012 + STATUS_FLT_FILTER_NOT_FOUND NTStatus = 0xC01C0013 + STATUS_FLT_VOLUME_NOT_FOUND NTStatus = 0xC01C0014 + STATUS_FLT_INSTANCE_NOT_FOUND NTStatus = 0xC01C0015 + STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND NTStatus = 0xC01C0016 + STATUS_FLT_INVALID_CONTEXT_REGISTRATION NTStatus = 0xC01C0017 + STATUS_FLT_NAME_CACHE_MISS NTStatus = 0xC01C0018 + STATUS_FLT_NO_DEVICE_OBJECT NTStatus = 0xC01C0019 + STATUS_FLT_VOLUME_ALREADY_MOUNTED NTStatus = 0xC01C001A + STATUS_FLT_ALREADY_ENLISTED NTStatus = 0xC01C001B + STATUS_FLT_CONTEXT_ALREADY_LINKED NTStatus = 0xC01C001C + STATUS_FLT_NO_WAITER_FOR_REPLY NTStatus = 0xC01C0020 + STATUS_FLT_REGISTRATION_BUSY NTStatus = 0xC01C0023 + STATUS_SXS_SECTION_NOT_FOUND NTStatus = 0xC0150001 + STATUS_SXS_CANT_GEN_ACTCTX NTStatus = 0xC0150002 + STATUS_SXS_INVALID_ACTCTXDATA_FORMAT NTStatus = 0xC0150003 + STATUS_SXS_ASSEMBLY_NOT_FOUND NTStatus = 0xC0150004 + STATUS_SXS_MANIFEST_FORMAT_ERROR NTStatus = 0xC0150005 + STATUS_SXS_MANIFEST_PARSE_ERROR NTStatus = 0xC0150006 + STATUS_SXS_ACTIVATION_CONTEXT_DISABLED NTStatus = 0xC0150007 + STATUS_SXS_KEY_NOT_FOUND NTStatus = 0xC0150008 + STATUS_SXS_VERSION_CONFLICT NTStatus = 0xC0150009 + STATUS_SXS_WRONG_SECTION_TYPE NTStatus = 0xC015000A + STATUS_SXS_THREAD_QUERIES_DISABLED NTStatus = 0xC015000B + STATUS_SXS_ASSEMBLY_MISSING NTStatus = 0xC015000C + STATUS_SXS_RELEASE_ACTIVATION_CONTEXT NTStatus = 0x4015000D + STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET NTStatus = 0xC015000E + STATUS_SXS_EARLY_DEACTIVATION NTStatus = 0xC015000F + STATUS_SXS_INVALID_DEACTIVATION NTStatus = 0xC0150010 + STATUS_SXS_MULTIPLE_DEACTIVATION NTStatus = 0xC0150011 + STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY NTStatus = 0xC0150012 + STATUS_SXS_PROCESS_TERMINATION_REQUESTED NTStatus = 0xC0150013 + STATUS_SXS_CORRUPT_ACTIVATION_STACK NTStatus = 0xC0150014 + STATUS_SXS_CORRUPTION NTStatus = 0xC0150015 + STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE NTStatus = 0xC0150016 + STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME NTStatus = 0xC0150017 + STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE NTStatus = 0xC0150018 + STATUS_SXS_IDENTITY_PARSE_ERROR NTStatus = 0xC0150019 + STATUS_SXS_COMPONENT_STORE_CORRUPT NTStatus = 0xC015001A + STATUS_SXS_FILE_HASH_MISMATCH NTStatus = 0xC015001B + STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT NTStatus = 0xC015001C + STATUS_SXS_IDENTITIES_DIFFERENT NTStatus = 0xC015001D + STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT NTStatus = 0xC015001E + STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY NTStatus = 0xC015001F + STATUS_ADVANCED_INSTALLER_FAILED NTStatus = 0xC0150020 + STATUS_XML_ENCODING_MISMATCH NTStatus = 0xC0150021 + STATUS_SXS_MANIFEST_TOO_BIG NTStatus = 0xC0150022 + STATUS_SXS_SETTING_NOT_REGISTERED NTStatus = 0xC0150023 + STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE NTStatus = 0xC0150024 + STATUS_SMI_PRIMITIVE_INSTALLER_FAILED NTStatus = 0xC0150025 + STATUS_GENERIC_COMMAND_FAILED NTStatus = 0xC0150026 + STATUS_SXS_FILE_HASH_MISSING NTStatus = 0xC0150027 + STATUS_CLUSTER_INVALID_NODE NTStatus = 0xC0130001 + STATUS_CLUSTER_NODE_EXISTS NTStatus = 0xC0130002 + STATUS_CLUSTER_JOIN_IN_PROGRESS NTStatus = 0xC0130003 + STATUS_CLUSTER_NODE_NOT_FOUND NTStatus = 0xC0130004 + STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND NTStatus = 0xC0130005 + STATUS_CLUSTER_NETWORK_EXISTS NTStatus = 0xC0130006 + STATUS_CLUSTER_NETWORK_NOT_FOUND NTStatus = 0xC0130007 + STATUS_CLUSTER_NETINTERFACE_EXISTS NTStatus = 0xC0130008 + STATUS_CLUSTER_NETINTERFACE_NOT_FOUND NTStatus = 0xC0130009 + STATUS_CLUSTER_INVALID_REQUEST NTStatus = 0xC013000A + STATUS_CLUSTER_INVALID_NETWORK_PROVIDER NTStatus = 0xC013000B + STATUS_CLUSTER_NODE_DOWN NTStatus = 0xC013000C + STATUS_CLUSTER_NODE_UNREACHABLE NTStatus = 0xC013000D + STATUS_CLUSTER_NODE_NOT_MEMBER NTStatus = 0xC013000E + STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS NTStatus = 0xC013000F + STATUS_CLUSTER_INVALID_NETWORK NTStatus = 0xC0130010 + STATUS_CLUSTER_NO_NET_ADAPTERS NTStatus = 0xC0130011 + STATUS_CLUSTER_NODE_UP NTStatus = 0xC0130012 + STATUS_CLUSTER_NODE_PAUSED NTStatus = 0xC0130013 + STATUS_CLUSTER_NODE_NOT_PAUSED NTStatus = 0xC0130014 + STATUS_CLUSTER_NO_SECURITY_CONTEXT NTStatus = 0xC0130015 + STATUS_CLUSTER_NETWORK_NOT_INTERNAL NTStatus = 0xC0130016 + STATUS_CLUSTER_POISONED NTStatus = 0xC0130017 + STATUS_CLUSTER_NON_CSV_PATH NTStatus = 0xC0130018 + STATUS_CLUSTER_CSV_VOLUME_NOT_LOCAL NTStatus = 0xC0130019 + STATUS_CLUSTER_CSV_READ_OPLOCK_BREAK_IN_PROGRESS NTStatus = 0xC0130020 + STATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR NTStatus = 0xC0130021 + STATUS_CLUSTER_CSV_REDIRECTED NTStatus = 0xC0130022 + STATUS_CLUSTER_CSV_NOT_REDIRECTED NTStatus = 0xC0130023 + STATUS_CLUSTER_CSV_VOLUME_DRAINING NTStatus = 0xC0130024 + STATUS_CLUSTER_CSV_SNAPSHOT_CREATION_IN_PROGRESS NTStatus = 0xC0130025 + STATUS_CLUSTER_CSV_VOLUME_DRAINING_SUCCEEDED_DOWNLEVEL NTStatus = 0xC0130026 + STATUS_CLUSTER_CSV_NO_SNAPSHOTS NTStatus = 0xC0130027 + STATUS_CSV_IO_PAUSE_TIMEOUT NTStatus = 0xC0130028 + STATUS_CLUSTER_CSV_INVALID_HANDLE NTStatus = 0xC0130029 + STATUS_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR NTStatus = 0xC0130030 + STATUS_CLUSTER_CAM_TICKET_REPLAY_DETECTED NTStatus = 0xC0130031 + STATUS_TRANSACTIONAL_CONFLICT NTStatus = 0xC0190001 + STATUS_INVALID_TRANSACTION NTStatus = 0xC0190002 + STATUS_TRANSACTION_NOT_ACTIVE NTStatus = 0xC0190003 + STATUS_TM_INITIALIZATION_FAILED NTStatus = 0xC0190004 + STATUS_RM_NOT_ACTIVE NTStatus = 0xC0190005 + STATUS_RM_METADATA_CORRUPT NTStatus = 0xC0190006 + STATUS_TRANSACTION_NOT_JOINED NTStatus = 0xC0190007 + STATUS_DIRECTORY_NOT_RM NTStatus = 0xC0190008 + STATUS_COULD_NOT_RESIZE_LOG NTStatus = 0x80190009 + STATUS_TRANSACTIONS_UNSUPPORTED_REMOTE NTStatus = 0xC019000A + STATUS_LOG_RESIZE_INVALID_SIZE NTStatus = 0xC019000B + STATUS_REMOTE_FILE_VERSION_MISMATCH NTStatus = 0xC019000C + STATUS_CRM_PROTOCOL_ALREADY_EXISTS NTStatus = 0xC019000F + STATUS_TRANSACTION_PROPAGATION_FAILED NTStatus = 0xC0190010 + STATUS_CRM_PROTOCOL_NOT_FOUND NTStatus = 0xC0190011 + STATUS_TRANSACTION_SUPERIOR_EXISTS NTStatus = 0xC0190012 + STATUS_TRANSACTION_REQUEST_NOT_VALID NTStatus = 0xC0190013 + STATUS_TRANSACTION_NOT_REQUESTED NTStatus = 0xC0190014 + STATUS_TRANSACTION_ALREADY_ABORTED NTStatus = 0xC0190015 + STATUS_TRANSACTION_ALREADY_COMMITTED NTStatus = 0xC0190016 + STATUS_TRANSACTION_INVALID_MARSHALL_BUFFER NTStatus = 0xC0190017 + STATUS_CURRENT_TRANSACTION_NOT_VALID NTStatus = 0xC0190018 + STATUS_LOG_GROWTH_FAILED NTStatus = 0xC0190019 + STATUS_OBJECT_NO_LONGER_EXISTS NTStatus = 0xC0190021 + STATUS_STREAM_MINIVERSION_NOT_FOUND NTStatus = 0xC0190022 + STATUS_STREAM_MINIVERSION_NOT_VALID NTStatus = 0xC0190023 + STATUS_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION NTStatus = 0xC0190024 + STATUS_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT NTStatus = 0xC0190025 + STATUS_CANT_CREATE_MORE_STREAM_MINIVERSIONS NTStatus = 0xC0190026 + STATUS_HANDLE_NO_LONGER_VALID NTStatus = 0xC0190028 + STATUS_NO_TXF_METADATA NTStatus = 0x80190029 + STATUS_LOG_CORRUPTION_DETECTED NTStatus = 0xC0190030 + STATUS_CANT_RECOVER_WITH_HANDLE_OPEN NTStatus = 0x80190031 + STATUS_RM_DISCONNECTED NTStatus = 0xC0190032 + STATUS_ENLISTMENT_NOT_SUPERIOR NTStatus = 0xC0190033 + STATUS_RECOVERY_NOT_NEEDED NTStatus = 0x40190034 + STATUS_RM_ALREADY_STARTED NTStatus = 0x40190035 + STATUS_FILE_IDENTITY_NOT_PERSISTENT NTStatus = 0xC0190036 + STATUS_CANT_BREAK_TRANSACTIONAL_DEPENDENCY NTStatus = 0xC0190037 + STATUS_CANT_CROSS_RM_BOUNDARY NTStatus = 0xC0190038 + STATUS_TXF_DIR_NOT_EMPTY NTStatus = 0xC0190039 + STATUS_INDOUBT_TRANSACTIONS_EXIST NTStatus = 0xC019003A + STATUS_TM_VOLATILE NTStatus = 0xC019003B + STATUS_ROLLBACK_TIMER_EXPIRED NTStatus = 0xC019003C + STATUS_TXF_ATTRIBUTE_CORRUPT NTStatus = 0xC019003D + STATUS_EFS_NOT_ALLOWED_IN_TRANSACTION NTStatus = 0xC019003E + STATUS_TRANSACTIONAL_OPEN_NOT_ALLOWED NTStatus = 0xC019003F + STATUS_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE NTStatus = 0xC0190040 + STATUS_TXF_METADATA_ALREADY_PRESENT NTStatus = 0x80190041 + STATUS_TRANSACTION_SCOPE_CALLBACKS_NOT_SET NTStatus = 0x80190042 + STATUS_TRANSACTION_REQUIRED_PROMOTION NTStatus = 0xC0190043 + STATUS_CANNOT_EXECUTE_FILE_IN_TRANSACTION NTStatus = 0xC0190044 + STATUS_TRANSACTIONS_NOT_FROZEN NTStatus = 0xC0190045 + STATUS_TRANSACTION_FREEZE_IN_PROGRESS NTStatus = 0xC0190046 + STATUS_NOT_SNAPSHOT_VOLUME NTStatus = 0xC0190047 + STATUS_NO_SAVEPOINT_WITH_OPEN_FILES NTStatus = 0xC0190048 + STATUS_SPARSE_NOT_ALLOWED_IN_TRANSACTION NTStatus = 0xC0190049 + STATUS_TM_IDENTITY_MISMATCH NTStatus = 0xC019004A + STATUS_FLOATED_SECTION NTStatus = 0xC019004B + STATUS_CANNOT_ACCEPT_TRANSACTED_WORK NTStatus = 0xC019004C + STATUS_CANNOT_ABORT_TRANSACTIONS NTStatus = 0xC019004D + STATUS_TRANSACTION_NOT_FOUND NTStatus = 0xC019004E + STATUS_RESOURCEMANAGER_NOT_FOUND NTStatus = 0xC019004F + STATUS_ENLISTMENT_NOT_FOUND NTStatus = 0xC0190050 + STATUS_TRANSACTIONMANAGER_NOT_FOUND NTStatus = 0xC0190051 + STATUS_TRANSACTIONMANAGER_NOT_ONLINE NTStatus = 0xC0190052 + STATUS_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION NTStatus = 0xC0190053 + STATUS_TRANSACTION_NOT_ROOT NTStatus = 0xC0190054 + STATUS_TRANSACTION_OBJECT_EXPIRED NTStatus = 0xC0190055 + STATUS_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION NTStatus = 0xC0190056 + STATUS_TRANSACTION_RESPONSE_NOT_ENLISTED NTStatus = 0xC0190057 + STATUS_TRANSACTION_RECORD_TOO_LONG NTStatus = 0xC0190058 + STATUS_NO_LINK_TRACKING_IN_TRANSACTION NTStatus = 0xC0190059 + STATUS_OPERATION_NOT_SUPPORTED_IN_TRANSACTION NTStatus = 0xC019005A + STATUS_TRANSACTION_INTEGRITY_VIOLATED NTStatus = 0xC019005B + STATUS_TRANSACTIONMANAGER_IDENTITY_MISMATCH NTStatus = 0xC019005C + STATUS_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT NTStatus = 0xC019005D + STATUS_TRANSACTION_MUST_WRITETHROUGH NTStatus = 0xC019005E + STATUS_TRANSACTION_NO_SUPERIOR NTStatus = 0xC019005F + STATUS_EXPIRED_HANDLE NTStatus = 0xC0190060 + STATUS_TRANSACTION_NOT_ENLISTED NTStatus = 0xC0190061 + STATUS_LOG_SECTOR_INVALID NTStatus = 0xC01A0001 + STATUS_LOG_SECTOR_PARITY_INVALID NTStatus = 0xC01A0002 + STATUS_LOG_SECTOR_REMAPPED NTStatus = 0xC01A0003 + STATUS_LOG_BLOCK_INCOMPLETE NTStatus = 0xC01A0004 + STATUS_LOG_INVALID_RANGE NTStatus = 0xC01A0005 + STATUS_LOG_BLOCKS_EXHAUSTED NTStatus = 0xC01A0006 + STATUS_LOG_READ_CONTEXT_INVALID NTStatus = 0xC01A0007 + STATUS_LOG_RESTART_INVALID NTStatus = 0xC01A0008 + STATUS_LOG_BLOCK_VERSION NTStatus = 0xC01A0009 + STATUS_LOG_BLOCK_INVALID NTStatus = 0xC01A000A + STATUS_LOG_READ_MODE_INVALID NTStatus = 0xC01A000B + STATUS_LOG_NO_RESTART NTStatus = 0x401A000C + STATUS_LOG_METADATA_CORRUPT NTStatus = 0xC01A000D + STATUS_LOG_METADATA_INVALID NTStatus = 0xC01A000E + STATUS_LOG_METADATA_INCONSISTENT NTStatus = 0xC01A000F + STATUS_LOG_RESERVATION_INVALID NTStatus = 0xC01A0010 + STATUS_LOG_CANT_DELETE NTStatus = 0xC01A0011 + STATUS_LOG_CONTAINER_LIMIT_EXCEEDED NTStatus = 0xC01A0012 + STATUS_LOG_START_OF_LOG NTStatus = 0xC01A0013 + STATUS_LOG_POLICY_ALREADY_INSTALLED NTStatus = 0xC01A0014 + STATUS_LOG_POLICY_NOT_INSTALLED NTStatus = 0xC01A0015 + STATUS_LOG_POLICY_INVALID NTStatus = 0xC01A0016 + STATUS_LOG_POLICY_CONFLICT NTStatus = 0xC01A0017 + STATUS_LOG_PINNED_ARCHIVE_TAIL NTStatus = 0xC01A0018 + STATUS_LOG_RECORD_NONEXISTENT NTStatus = 0xC01A0019 + STATUS_LOG_RECORDS_RESERVED_INVALID NTStatus = 0xC01A001A + STATUS_LOG_SPACE_RESERVED_INVALID NTStatus = 0xC01A001B + STATUS_LOG_TAIL_INVALID NTStatus = 0xC01A001C + STATUS_LOG_FULL NTStatus = 0xC01A001D + STATUS_LOG_MULTIPLEXED NTStatus = 0xC01A001E + STATUS_LOG_DEDICATED NTStatus = 0xC01A001F + STATUS_LOG_ARCHIVE_NOT_IN_PROGRESS NTStatus = 0xC01A0020 + STATUS_LOG_ARCHIVE_IN_PROGRESS NTStatus = 0xC01A0021 + STATUS_LOG_EPHEMERAL NTStatus = 0xC01A0022 + STATUS_LOG_NOT_ENOUGH_CONTAINERS NTStatus = 0xC01A0023 + STATUS_LOG_CLIENT_ALREADY_REGISTERED NTStatus = 0xC01A0024 + STATUS_LOG_CLIENT_NOT_REGISTERED NTStatus = 0xC01A0025 + STATUS_LOG_FULL_HANDLER_IN_PROGRESS NTStatus = 0xC01A0026 + STATUS_LOG_CONTAINER_READ_FAILED NTStatus = 0xC01A0027 + STATUS_LOG_CONTAINER_WRITE_FAILED NTStatus = 0xC01A0028 + STATUS_LOG_CONTAINER_OPEN_FAILED NTStatus = 0xC01A0029 + STATUS_LOG_CONTAINER_STATE_INVALID NTStatus = 0xC01A002A + STATUS_LOG_STATE_INVALID NTStatus = 0xC01A002B + STATUS_LOG_PINNED NTStatus = 0xC01A002C + STATUS_LOG_METADATA_FLUSH_FAILED NTStatus = 0xC01A002D + STATUS_LOG_INCONSISTENT_SECURITY NTStatus = 0xC01A002E + STATUS_LOG_APPENDED_FLUSH_FAILED NTStatus = 0xC01A002F + STATUS_LOG_PINNED_RESERVATION NTStatus = 0xC01A0030 + STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD NTStatus = 0xC01B00EA + STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD_RECOVERED NTStatus = 0x801B00EB + STATUS_VIDEO_DRIVER_DEBUG_REPORT_REQUEST NTStatus = 0x401B00EC + STATUS_MONITOR_NO_DESCRIPTOR NTStatus = 0xC01D0001 + STATUS_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT NTStatus = 0xC01D0002 + STATUS_MONITOR_INVALID_DESCRIPTOR_CHECKSUM NTStatus = 0xC01D0003 + STATUS_MONITOR_INVALID_STANDARD_TIMING_BLOCK NTStatus = 0xC01D0004 + STATUS_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED NTStatus = 0xC01D0005 + STATUS_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK NTStatus = 0xC01D0006 + STATUS_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK NTStatus = 0xC01D0007 + STATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA NTStatus = 0xC01D0008 + STATUS_MONITOR_INVALID_DETAILED_TIMING_BLOCK NTStatus = 0xC01D0009 + STATUS_MONITOR_INVALID_MANUFACTURE_DATE NTStatus = 0xC01D000A + STATUS_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER NTStatus = 0xC01E0000 + STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER NTStatus = 0xC01E0001 + STATUS_GRAPHICS_INVALID_DISPLAY_ADAPTER NTStatus = 0xC01E0002 + STATUS_GRAPHICS_ADAPTER_WAS_RESET NTStatus = 0xC01E0003 + STATUS_GRAPHICS_INVALID_DRIVER_MODEL NTStatus = 0xC01E0004 + STATUS_GRAPHICS_PRESENT_MODE_CHANGED NTStatus = 0xC01E0005 + STATUS_GRAPHICS_PRESENT_OCCLUDED NTStatus = 0xC01E0006 + STATUS_GRAPHICS_PRESENT_DENIED NTStatus = 0xC01E0007 + STATUS_GRAPHICS_CANNOTCOLORCONVERT NTStatus = 0xC01E0008 + STATUS_GRAPHICS_DRIVER_MISMATCH NTStatus = 0xC01E0009 + STATUS_GRAPHICS_PARTIAL_DATA_POPULATED NTStatus = 0x401E000A + STATUS_GRAPHICS_PRESENT_REDIRECTION_DISABLED NTStatus = 0xC01E000B + STATUS_GRAPHICS_PRESENT_UNOCCLUDED NTStatus = 0xC01E000C + STATUS_GRAPHICS_WINDOWDC_NOT_AVAILABLE NTStatus = 0xC01E000D + STATUS_GRAPHICS_WINDOWLESS_PRESENT_DISABLED NTStatus = 0xC01E000E + STATUS_GRAPHICS_PRESENT_INVALID_WINDOW NTStatus = 0xC01E000F + STATUS_GRAPHICS_PRESENT_BUFFER_NOT_BOUND NTStatus = 0xC01E0010 + STATUS_GRAPHICS_VAIL_STATE_CHANGED NTStatus = 0xC01E0011 + STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN NTStatus = 0xC01E0012 + STATUS_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED NTStatus = 0xC01E0013 + STATUS_GRAPHICS_NO_VIDEO_MEMORY NTStatus = 0xC01E0100 + STATUS_GRAPHICS_CANT_LOCK_MEMORY NTStatus = 0xC01E0101 + STATUS_GRAPHICS_ALLOCATION_BUSY NTStatus = 0xC01E0102 + STATUS_GRAPHICS_TOO_MANY_REFERENCES NTStatus = 0xC01E0103 + STATUS_GRAPHICS_TRY_AGAIN_LATER NTStatus = 0xC01E0104 + STATUS_GRAPHICS_TRY_AGAIN_NOW NTStatus = 0xC01E0105 + STATUS_GRAPHICS_ALLOCATION_INVALID NTStatus = 0xC01E0106 + STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE NTStatus = 0xC01E0107 + STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED NTStatus = 0xC01E0108 + STATUS_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION NTStatus = 0xC01E0109 + STATUS_GRAPHICS_INVALID_ALLOCATION_USAGE NTStatus = 0xC01E0110 + STATUS_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION NTStatus = 0xC01E0111 + STATUS_GRAPHICS_ALLOCATION_CLOSED NTStatus = 0xC01E0112 + STATUS_GRAPHICS_INVALID_ALLOCATION_INSTANCE NTStatus = 0xC01E0113 + STATUS_GRAPHICS_INVALID_ALLOCATION_HANDLE NTStatus = 0xC01E0114 + STATUS_GRAPHICS_WRONG_ALLOCATION_DEVICE NTStatus = 0xC01E0115 + STATUS_GRAPHICS_ALLOCATION_CONTENT_LOST NTStatus = 0xC01E0116 + STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE NTStatus = 0xC01E0200 + STATUS_GRAPHICS_SKIP_ALLOCATION_PREPARATION NTStatus = 0x401E0201 + STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY NTStatus = 0xC01E0300 + STATUS_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED NTStatus = 0xC01E0301 + STATUS_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED NTStatus = 0xC01E0302 + STATUS_GRAPHICS_INVALID_VIDPN NTStatus = 0xC01E0303 + STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE NTStatus = 0xC01E0304 + STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET NTStatus = 0xC01E0305 + STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED NTStatus = 0xC01E0306 + STATUS_GRAPHICS_MODE_NOT_PINNED NTStatus = 0x401E0307 + STATUS_GRAPHICS_INVALID_VIDPN_SOURCEMODESET NTStatus = 0xC01E0308 + STATUS_GRAPHICS_INVALID_VIDPN_TARGETMODESET NTStatus = 0xC01E0309 + STATUS_GRAPHICS_INVALID_FREQUENCY NTStatus = 0xC01E030A + STATUS_GRAPHICS_INVALID_ACTIVE_REGION NTStatus = 0xC01E030B + STATUS_GRAPHICS_INVALID_TOTAL_REGION NTStatus = 0xC01E030C + STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE NTStatus = 0xC01E0310 + STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE NTStatus = 0xC01E0311 + STATUS_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET NTStatus = 0xC01E0312 + STATUS_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY NTStatus = 0xC01E0313 + STATUS_GRAPHICS_MODE_ALREADY_IN_MODESET NTStatus = 0xC01E0314 + STATUS_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET NTStatus = 0xC01E0315 + STATUS_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET NTStatus = 0xC01E0316 + STATUS_GRAPHICS_SOURCE_ALREADY_IN_SET NTStatus = 0xC01E0317 + STATUS_GRAPHICS_TARGET_ALREADY_IN_SET NTStatus = 0xC01E0318 + STATUS_GRAPHICS_INVALID_VIDPN_PRESENT_PATH NTStatus = 0xC01E0319 + STATUS_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY NTStatus = 0xC01E031A + STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET NTStatus = 0xC01E031B + STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE NTStatus = 0xC01E031C + STATUS_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET NTStatus = 0xC01E031D + STATUS_GRAPHICS_NO_PREFERRED_MODE NTStatus = 0x401E031E + STATUS_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET NTStatus = 0xC01E031F + STATUS_GRAPHICS_STALE_MODESET NTStatus = 0xC01E0320 + STATUS_GRAPHICS_INVALID_MONITOR_SOURCEMODESET NTStatus = 0xC01E0321 + STATUS_GRAPHICS_INVALID_MONITOR_SOURCE_MODE NTStatus = 0xC01E0322 + STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN NTStatus = 0xC01E0323 + STATUS_GRAPHICS_MODE_ID_MUST_BE_UNIQUE NTStatus = 0xC01E0324 + STATUS_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION NTStatus = 0xC01E0325 + STATUS_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES NTStatus = 0xC01E0326 + STATUS_GRAPHICS_PATH_NOT_IN_TOPOLOGY NTStatus = 0xC01E0327 + STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE NTStatus = 0xC01E0328 + STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET NTStatus = 0xC01E0329 + STATUS_GRAPHICS_INVALID_MONITORDESCRIPTORSET NTStatus = 0xC01E032A + STATUS_GRAPHICS_INVALID_MONITORDESCRIPTOR NTStatus = 0xC01E032B + STATUS_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET NTStatus = 0xC01E032C + STATUS_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET NTStatus = 0xC01E032D + STATUS_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE NTStatus = 0xC01E032E + STATUS_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE NTStatus = 0xC01E032F + STATUS_GRAPHICS_RESOURCES_NOT_RELATED NTStatus = 0xC01E0330 + STATUS_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE NTStatus = 0xC01E0331 + STATUS_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE NTStatus = 0xC01E0332 + STATUS_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET NTStatus = 0xC01E0333 + STATUS_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER NTStatus = 0xC01E0334 + STATUS_GRAPHICS_NO_VIDPNMGR NTStatus = 0xC01E0335 + STATUS_GRAPHICS_NO_ACTIVE_VIDPN NTStatus = 0xC01E0336 + STATUS_GRAPHICS_STALE_VIDPN_TOPOLOGY NTStatus = 0xC01E0337 + STATUS_GRAPHICS_MONITOR_NOT_CONNECTED NTStatus = 0xC01E0338 + STATUS_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY NTStatus = 0xC01E0339 + STATUS_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE NTStatus = 0xC01E033A + STATUS_GRAPHICS_INVALID_VISIBLEREGION_SIZE NTStatus = 0xC01E033B + STATUS_GRAPHICS_INVALID_STRIDE NTStatus = 0xC01E033C + STATUS_GRAPHICS_INVALID_PIXELFORMAT NTStatus = 0xC01E033D + STATUS_GRAPHICS_INVALID_COLORBASIS NTStatus = 0xC01E033E + STATUS_GRAPHICS_INVALID_PIXELVALUEACCESSMODE NTStatus = 0xC01E033F + STATUS_GRAPHICS_TARGET_NOT_IN_TOPOLOGY NTStatus = 0xC01E0340 + STATUS_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT NTStatus = 0xC01E0341 + STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE NTStatus = 0xC01E0342 + STATUS_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN NTStatus = 0xC01E0343 + STATUS_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL NTStatus = 0xC01E0344 + STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION NTStatus = 0xC01E0345 + STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED NTStatus = 0xC01E0346 + STATUS_GRAPHICS_INVALID_GAMMA_RAMP NTStatus = 0xC01E0347 + STATUS_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED NTStatus = 0xC01E0348 + STATUS_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED NTStatus = 0xC01E0349 + STATUS_GRAPHICS_MODE_NOT_IN_MODESET NTStatus = 0xC01E034A + STATUS_GRAPHICS_DATASET_IS_EMPTY NTStatus = 0x401E034B + STATUS_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET NTStatus = 0x401E034C + STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON NTStatus = 0xC01E034D + STATUS_GRAPHICS_INVALID_PATH_CONTENT_TYPE NTStatus = 0xC01E034E + STATUS_GRAPHICS_INVALID_COPYPROTECTION_TYPE NTStatus = 0xC01E034F + STATUS_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS NTStatus = 0xC01E0350 + STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED NTStatus = 0x401E0351 + STATUS_GRAPHICS_INVALID_SCANLINE_ORDERING NTStatus = 0xC01E0352 + STATUS_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED NTStatus = 0xC01E0353 + STATUS_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS NTStatus = 0xC01E0354 + STATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT NTStatus = 0xC01E0355 + STATUS_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM NTStatus = 0xC01E0356 + STATUS_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN NTStatus = 0xC01E0357 + STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT NTStatus = 0xC01E0358 + STATUS_GRAPHICS_MAX_NUM_PATHS_REACHED NTStatus = 0xC01E0359 + STATUS_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION NTStatus = 0xC01E035A + STATUS_GRAPHICS_INVALID_CLIENT_TYPE NTStatus = 0xC01E035B + STATUS_GRAPHICS_CLIENTVIDPN_NOT_SET NTStatus = 0xC01E035C + STATUS_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED NTStatus = 0xC01E0400 + STATUS_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED NTStatus = 0xC01E0401 + STATUS_GRAPHICS_UNKNOWN_CHILD_STATUS NTStatus = 0x401E042F + STATUS_GRAPHICS_NOT_A_LINKED_ADAPTER NTStatus = 0xC01E0430 + STATUS_GRAPHICS_LEADLINK_NOT_ENUMERATED NTStatus = 0xC01E0431 + STATUS_GRAPHICS_CHAINLINKS_NOT_ENUMERATED NTStatus = 0xC01E0432 + STATUS_GRAPHICS_ADAPTER_CHAIN_NOT_READY NTStatus = 0xC01E0433 + STATUS_GRAPHICS_CHAINLINKS_NOT_STARTED NTStatus = 0xC01E0434 + STATUS_GRAPHICS_CHAINLINKS_NOT_POWERED_ON NTStatus = 0xC01E0435 + STATUS_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE NTStatus = 0xC01E0436 + STATUS_GRAPHICS_LEADLINK_START_DEFERRED NTStatus = 0x401E0437 + STATUS_GRAPHICS_NOT_POST_DEVICE_DRIVER NTStatus = 0xC01E0438 + STATUS_GRAPHICS_POLLING_TOO_FREQUENTLY NTStatus = 0x401E0439 + STATUS_GRAPHICS_START_DEFERRED NTStatus = 0x401E043A + STATUS_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED NTStatus = 0xC01E043B + STATUS_GRAPHICS_DEPENDABLE_CHILD_STATUS NTStatus = 0x401E043C + STATUS_GRAPHICS_OPM_NOT_SUPPORTED NTStatus = 0xC01E0500 + STATUS_GRAPHICS_COPP_NOT_SUPPORTED NTStatus = 0xC01E0501 + STATUS_GRAPHICS_UAB_NOT_SUPPORTED NTStatus = 0xC01E0502 + STATUS_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS NTStatus = 0xC01E0503 + STATUS_GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST NTStatus = 0xC01E0505 + STATUS_GRAPHICS_OPM_INTERNAL_ERROR NTStatus = 0xC01E050B + STATUS_GRAPHICS_OPM_INVALID_HANDLE NTStatus = 0xC01E050C + STATUS_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH NTStatus = 0xC01E050E + STATUS_GRAPHICS_OPM_SPANNING_MODE_ENABLED NTStatus = 0xC01E050F + STATUS_GRAPHICS_OPM_THEATER_MODE_ENABLED NTStatus = 0xC01E0510 + STATUS_GRAPHICS_PVP_HFS_FAILED NTStatus = 0xC01E0511 + STATUS_GRAPHICS_OPM_INVALID_SRM NTStatus = 0xC01E0512 + STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP NTStatus = 0xC01E0513 + STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP NTStatus = 0xC01E0514 + STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA NTStatus = 0xC01E0515 + STATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET NTStatus = 0xC01E0516 + STATUS_GRAPHICS_OPM_RESOLUTION_TOO_HIGH NTStatus = 0xC01E0517 + STATUS_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE NTStatus = 0xC01E0518 + STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS NTStatus = 0xC01E051A + STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS NTStatus = 0xC01E051C + STATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST NTStatus = 0xC01E051D + STATUS_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR NTStatus = 0xC01E051E + STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS NTStatus = 0xC01E051F + STATUS_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED NTStatus = 0xC01E0520 + STATUS_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST NTStatus = 0xC01E0521 + STATUS_GRAPHICS_I2C_NOT_SUPPORTED NTStatus = 0xC01E0580 + STATUS_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST NTStatus = 0xC01E0581 + STATUS_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA NTStatus = 0xC01E0582 + STATUS_GRAPHICS_I2C_ERROR_RECEIVING_DATA NTStatus = 0xC01E0583 + STATUS_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED NTStatus = 0xC01E0584 + STATUS_GRAPHICS_DDCCI_INVALID_DATA NTStatus = 0xC01E0585 + STATUS_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE NTStatus = 0xC01E0586 + STATUS_GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING NTStatus = 0xC01E0587 + STATUS_GRAPHICS_MCA_INTERNAL_ERROR NTStatus = 0xC01E0588 + STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND NTStatus = 0xC01E0589 + STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH NTStatus = 0xC01E058A + STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM NTStatus = 0xC01E058B + STATUS_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE NTStatus = 0xC01E058C + STATUS_GRAPHICS_MONITOR_NO_LONGER_EXISTS NTStatus = 0xC01E058D + STATUS_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED NTStatus = 0xC01E05E0 + STATUS_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME NTStatus = 0xC01E05E1 + STATUS_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP NTStatus = 0xC01E05E2 + STATUS_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED NTStatus = 0xC01E05E3 + STATUS_GRAPHICS_INVALID_POINTER NTStatus = 0xC01E05E4 + STATUS_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE NTStatus = 0xC01E05E5 + STATUS_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL NTStatus = 0xC01E05E6 + STATUS_GRAPHICS_INTERNAL_ERROR NTStatus = 0xC01E05E7 + STATUS_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS NTStatus = 0xC01E05E8 + STATUS_FVE_LOCKED_VOLUME NTStatus = 0xC0210000 + STATUS_FVE_NOT_ENCRYPTED NTStatus = 0xC0210001 + STATUS_FVE_BAD_INFORMATION NTStatus = 0xC0210002 + STATUS_FVE_TOO_SMALL NTStatus = 0xC0210003 + STATUS_FVE_FAILED_WRONG_FS NTStatus = 0xC0210004 + STATUS_FVE_BAD_PARTITION_SIZE NTStatus = 0xC0210005 + STATUS_FVE_FS_NOT_EXTENDED NTStatus = 0xC0210006 + STATUS_FVE_FS_MOUNTED NTStatus = 0xC0210007 + STATUS_FVE_NO_LICENSE NTStatus = 0xC0210008 + STATUS_FVE_ACTION_NOT_ALLOWED NTStatus = 0xC0210009 + STATUS_FVE_BAD_DATA NTStatus = 0xC021000A + STATUS_FVE_VOLUME_NOT_BOUND NTStatus = 0xC021000B + STATUS_FVE_NOT_DATA_VOLUME NTStatus = 0xC021000C + STATUS_FVE_CONV_READ_ERROR NTStatus = 0xC021000D + STATUS_FVE_CONV_WRITE_ERROR NTStatus = 0xC021000E + STATUS_FVE_OVERLAPPED_UPDATE NTStatus = 0xC021000F + STATUS_FVE_FAILED_SECTOR_SIZE NTStatus = 0xC0210010 + STATUS_FVE_FAILED_AUTHENTICATION NTStatus = 0xC0210011 + STATUS_FVE_NOT_OS_VOLUME NTStatus = 0xC0210012 + STATUS_FVE_KEYFILE_NOT_FOUND NTStatus = 0xC0210013 + STATUS_FVE_KEYFILE_INVALID NTStatus = 0xC0210014 + STATUS_FVE_KEYFILE_NO_VMK NTStatus = 0xC0210015 + STATUS_FVE_TPM_DISABLED NTStatus = 0xC0210016 + STATUS_FVE_TPM_SRK_AUTH_NOT_ZERO NTStatus = 0xC0210017 + STATUS_FVE_TPM_INVALID_PCR NTStatus = 0xC0210018 + STATUS_FVE_TPM_NO_VMK NTStatus = 0xC0210019 + STATUS_FVE_PIN_INVALID NTStatus = 0xC021001A + STATUS_FVE_AUTH_INVALID_APPLICATION NTStatus = 0xC021001B + STATUS_FVE_AUTH_INVALID_CONFIG NTStatus = 0xC021001C + STATUS_FVE_DEBUGGER_ENABLED NTStatus = 0xC021001D + STATUS_FVE_DRY_RUN_FAILED NTStatus = 0xC021001E + STATUS_FVE_BAD_METADATA_POINTER NTStatus = 0xC021001F + STATUS_FVE_OLD_METADATA_COPY NTStatus = 0xC0210020 + STATUS_FVE_REBOOT_REQUIRED NTStatus = 0xC0210021 + STATUS_FVE_RAW_ACCESS NTStatus = 0xC0210022 + STATUS_FVE_RAW_BLOCKED NTStatus = 0xC0210023 + STATUS_FVE_NO_AUTOUNLOCK_MASTER_KEY NTStatus = 0xC0210024 + STATUS_FVE_MOR_FAILED NTStatus = 0xC0210025 + STATUS_FVE_NO_FEATURE_LICENSE NTStatus = 0xC0210026 + STATUS_FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED NTStatus = 0xC0210027 + STATUS_FVE_CONV_RECOVERY_FAILED NTStatus = 0xC0210028 + STATUS_FVE_VIRTUALIZED_SPACE_TOO_BIG NTStatus = 0xC0210029 + STATUS_FVE_INVALID_DATUM_TYPE NTStatus = 0xC021002A + STATUS_FVE_VOLUME_TOO_SMALL NTStatus = 0xC0210030 + STATUS_FVE_ENH_PIN_INVALID NTStatus = 0xC0210031 + STATUS_FVE_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE NTStatus = 0xC0210032 + STATUS_FVE_WIPE_NOT_ALLOWED_ON_TP_STORAGE NTStatus = 0xC0210033 + STATUS_FVE_NOT_ALLOWED_ON_CSV_STACK NTStatus = 0xC0210034 + STATUS_FVE_NOT_ALLOWED_ON_CLUSTER NTStatus = 0xC0210035 + STATUS_FVE_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING NTStatus = 0xC0210036 + STATUS_FVE_WIPE_CANCEL_NOT_APPLICABLE NTStatus = 0xC0210037 + STATUS_FVE_EDRIVE_DRY_RUN_FAILED NTStatus = 0xC0210038 + STATUS_FVE_SECUREBOOT_DISABLED NTStatus = 0xC0210039 + STATUS_FVE_SECUREBOOT_CONFIG_CHANGE NTStatus = 0xC021003A + STATUS_FVE_DEVICE_LOCKEDOUT NTStatus = 0xC021003B + STATUS_FVE_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT NTStatus = 0xC021003C + STATUS_FVE_NOT_DE_VOLUME NTStatus = 0xC021003D + STATUS_FVE_PROTECTION_DISABLED NTStatus = 0xC021003E + STATUS_FVE_PROTECTION_CANNOT_BE_DISABLED NTStatus = 0xC021003F + STATUS_FVE_OSV_KSR_NOT_ALLOWED NTStatus = 0xC0210040 + STATUS_FWP_CALLOUT_NOT_FOUND NTStatus = 0xC0220001 + STATUS_FWP_CONDITION_NOT_FOUND NTStatus = 0xC0220002 + STATUS_FWP_FILTER_NOT_FOUND NTStatus = 0xC0220003 + STATUS_FWP_LAYER_NOT_FOUND NTStatus = 0xC0220004 + STATUS_FWP_PROVIDER_NOT_FOUND NTStatus = 0xC0220005 + STATUS_FWP_PROVIDER_CONTEXT_NOT_FOUND NTStatus = 0xC0220006 + STATUS_FWP_SUBLAYER_NOT_FOUND NTStatus = 0xC0220007 + STATUS_FWP_NOT_FOUND NTStatus = 0xC0220008 + STATUS_FWP_ALREADY_EXISTS NTStatus = 0xC0220009 + STATUS_FWP_IN_USE NTStatus = 0xC022000A + STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS NTStatus = 0xC022000B + STATUS_FWP_WRONG_SESSION NTStatus = 0xC022000C + STATUS_FWP_NO_TXN_IN_PROGRESS NTStatus = 0xC022000D + STATUS_FWP_TXN_IN_PROGRESS NTStatus = 0xC022000E + STATUS_FWP_TXN_ABORTED NTStatus = 0xC022000F + STATUS_FWP_SESSION_ABORTED NTStatus = 0xC0220010 + STATUS_FWP_INCOMPATIBLE_TXN NTStatus = 0xC0220011 + STATUS_FWP_TIMEOUT NTStatus = 0xC0220012 + STATUS_FWP_NET_EVENTS_DISABLED NTStatus = 0xC0220013 + STATUS_FWP_INCOMPATIBLE_LAYER NTStatus = 0xC0220014 + STATUS_FWP_KM_CLIENTS_ONLY NTStatus = 0xC0220015 + STATUS_FWP_LIFETIME_MISMATCH NTStatus = 0xC0220016 + STATUS_FWP_BUILTIN_OBJECT NTStatus = 0xC0220017 + STATUS_FWP_TOO_MANY_CALLOUTS NTStatus = 0xC0220018 + STATUS_FWP_NOTIFICATION_DROPPED NTStatus = 0xC0220019 + STATUS_FWP_TRAFFIC_MISMATCH NTStatus = 0xC022001A + STATUS_FWP_INCOMPATIBLE_SA_STATE NTStatus = 0xC022001B + STATUS_FWP_NULL_POINTER NTStatus = 0xC022001C + STATUS_FWP_INVALID_ENUMERATOR NTStatus = 0xC022001D + STATUS_FWP_INVALID_FLAGS NTStatus = 0xC022001E + STATUS_FWP_INVALID_NET_MASK NTStatus = 0xC022001F + STATUS_FWP_INVALID_RANGE NTStatus = 0xC0220020 + STATUS_FWP_INVALID_INTERVAL NTStatus = 0xC0220021 + STATUS_FWP_ZERO_LENGTH_ARRAY NTStatus = 0xC0220022 + STATUS_FWP_NULL_DISPLAY_NAME NTStatus = 0xC0220023 + STATUS_FWP_INVALID_ACTION_TYPE NTStatus = 0xC0220024 + STATUS_FWP_INVALID_WEIGHT NTStatus = 0xC0220025 + STATUS_FWP_MATCH_TYPE_MISMATCH NTStatus = 0xC0220026 + STATUS_FWP_TYPE_MISMATCH NTStatus = 0xC0220027 + STATUS_FWP_OUT_OF_BOUNDS NTStatus = 0xC0220028 + STATUS_FWP_RESERVED NTStatus = 0xC0220029 + STATUS_FWP_DUPLICATE_CONDITION NTStatus = 0xC022002A + STATUS_FWP_DUPLICATE_KEYMOD NTStatus = 0xC022002B + STATUS_FWP_ACTION_INCOMPATIBLE_WITH_LAYER NTStatus = 0xC022002C + STATUS_FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER NTStatus = 0xC022002D + STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER NTStatus = 0xC022002E + STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT NTStatus = 0xC022002F + STATUS_FWP_INCOMPATIBLE_AUTH_METHOD NTStatus = 0xC0220030 + STATUS_FWP_INCOMPATIBLE_DH_GROUP NTStatus = 0xC0220031 + STATUS_FWP_EM_NOT_SUPPORTED NTStatus = 0xC0220032 + STATUS_FWP_NEVER_MATCH NTStatus = 0xC0220033 + STATUS_FWP_PROVIDER_CONTEXT_MISMATCH NTStatus = 0xC0220034 + STATUS_FWP_INVALID_PARAMETER NTStatus = 0xC0220035 + STATUS_FWP_TOO_MANY_SUBLAYERS NTStatus = 0xC0220036 + STATUS_FWP_CALLOUT_NOTIFICATION_FAILED NTStatus = 0xC0220037 + STATUS_FWP_INVALID_AUTH_TRANSFORM NTStatus = 0xC0220038 + STATUS_FWP_INVALID_CIPHER_TRANSFORM NTStatus = 0xC0220039 + STATUS_FWP_INCOMPATIBLE_CIPHER_TRANSFORM NTStatus = 0xC022003A + STATUS_FWP_INVALID_TRANSFORM_COMBINATION NTStatus = 0xC022003B + STATUS_FWP_DUPLICATE_AUTH_METHOD NTStatus = 0xC022003C + STATUS_FWP_INVALID_TUNNEL_ENDPOINT NTStatus = 0xC022003D + STATUS_FWP_L2_DRIVER_NOT_READY NTStatus = 0xC022003E + STATUS_FWP_KEY_DICTATOR_ALREADY_REGISTERED NTStatus = 0xC022003F + STATUS_FWP_KEY_DICTATION_INVALID_KEYING_MATERIAL NTStatus = 0xC0220040 + STATUS_FWP_CONNECTIONS_DISABLED NTStatus = 0xC0220041 + STATUS_FWP_INVALID_DNS_NAME NTStatus = 0xC0220042 + STATUS_FWP_STILL_ON NTStatus = 0xC0220043 + STATUS_FWP_IKEEXT_NOT_RUNNING NTStatus = 0xC0220044 + STATUS_FWP_TCPIP_NOT_READY NTStatus = 0xC0220100 + STATUS_FWP_INJECT_HANDLE_CLOSING NTStatus = 0xC0220101 + STATUS_FWP_INJECT_HANDLE_STALE NTStatus = 0xC0220102 + STATUS_FWP_CANNOT_PEND NTStatus = 0xC0220103 + STATUS_FWP_DROP_NOICMP NTStatus = 0xC0220104 + STATUS_NDIS_CLOSING NTStatus = 0xC0230002 + STATUS_NDIS_BAD_VERSION NTStatus = 0xC0230004 + STATUS_NDIS_BAD_CHARACTERISTICS NTStatus = 0xC0230005 + STATUS_NDIS_ADAPTER_NOT_FOUND NTStatus = 0xC0230006 + STATUS_NDIS_OPEN_FAILED NTStatus = 0xC0230007 + STATUS_NDIS_DEVICE_FAILED NTStatus = 0xC0230008 + STATUS_NDIS_MULTICAST_FULL NTStatus = 0xC0230009 + STATUS_NDIS_MULTICAST_EXISTS NTStatus = 0xC023000A + STATUS_NDIS_MULTICAST_NOT_FOUND NTStatus = 0xC023000B + STATUS_NDIS_REQUEST_ABORTED NTStatus = 0xC023000C + STATUS_NDIS_RESET_IN_PROGRESS NTStatus = 0xC023000D + STATUS_NDIS_NOT_SUPPORTED NTStatus = 0xC02300BB + STATUS_NDIS_INVALID_PACKET NTStatus = 0xC023000F + STATUS_NDIS_ADAPTER_NOT_READY NTStatus = 0xC0230011 + STATUS_NDIS_INVALID_LENGTH NTStatus = 0xC0230014 + STATUS_NDIS_INVALID_DATA NTStatus = 0xC0230015 + STATUS_NDIS_BUFFER_TOO_SHORT NTStatus = 0xC0230016 + STATUS_NDIS_INVALID_OID NTStatus = 0xC0230017 + STATUS_NDIS_ADAPTER_REMOVED NTStatus = 0xC0230018 + STATUS_NDIS_UNSUPPORTED_MEDIA NTStatus = 0xC0230019 + STATUS_NDIS_GROUP_ADDRESS_IN_USE NTStatus = 0xC023001A + STATUS_NDIS_FILE_NOT_FOUND NTStatus = 0xC023001B + STATUS_NDIS_ERROR_READING_FILE NTStatus = 0xC023001C + STATUS_NDIS_ALREADY_MAPPED NTStatus = 0xC023001D + STATUS_NDIS_RESOURCE_CONFLICT NTStatus = 0xC023001E + STATUS_NDIS_MEDIA_DISCONNECTED NTStatus = 0xC023001F + STATUS_NDIS_INVALID_ADDRESS NTStatus = 0xC0230022 + STATUS_NDIS_INVALID_DEVICE_REQUEST NTStatus = 0xC0230010 + STATUS_NDIS_PAUSED NTStatus = 0xC023002A + STATUS_NDIS_INTERFACE_NOT_FOUND NTStatus = 0xC023002B + STATUS_NDIS_UNSUPPORTED_REVISION NTStatus = 0xC023002C + STATUS_NDIS_INVALID_PORT NTStatus = 0xC023002D + STATUS_NDIS_INVALID_PORT_STATE NTStatus = 0xC023002E + STATUS_NDIS_LOW_POWER_STATE NTStatus = 0xC023002F + STATUS_NDIS_REINIT_REQUIRED NTStatus = 0xC0230030 + STATUS_NDIS_NO_QUEUES NTStatus = 0xC0230031 + STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED NTStatus = 0xC0232000 + STATUS_NDIS_DOT11_MEDIA_IN_USE NTStatus = 0xC0232001 + STATUS_NDIS_DOT11_POWER_STATE_INVALID NTStatus = 0xC0232002 + STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL NTStatus = 0xC0232003 + STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL NTStatus = 0xC0232004 + STATUS_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE NTStatus = 0xC0232005 + STATUS_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE NTStatus = 0xC0232006 + STATUS_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED NTStatus = 0xC0232007 + STATUS_NDIS_DOT11_AP_BAND_NOT_ALLOWED NTStatus = 0xC0232008 + STATUS_NDIS_INDICATION_REQUIRED NTStatus = 0x40230001 + STATUS_NDIS_OFFLOAD_POLICY NTStatus = 0xC023100F + STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED NTStatus = 0xC0231012 + STATUS_NDIS_OFFLOAD_PATH_REJECTED NTStatus = 0xC0231013 + STATUS_TPM_ERROR_MASK NTStatus = 0xC0290000 + STATUS_TPM_AUTHFAIL NTStatus = 0xC0290001 + STATUS_TPM_BADINDEX NTStatus = 0xC0290002 + STATUS_TPM_BAD_PARAMETER NTStatus = 0xC0290003 + STATUS_TPM_AUDITFAILURE NTStatus = 0xC0290004 + STATUS_TPM_CLEAR_DISABLED NTStatus = 0xC0290005 + STATUS_TPM_DEACTIVATED NTStatus = 0xC0290006 + STATUS_TPM_DISABLED NTStatus = 0xC0290007 + STATUS_TPM_DISABLED_CMD NTStatus = 0xC0290008 + STATUS_TPM_FAIL NTStatus = 0xC0290009 + STATUS_TPM_BAD_ORDINAL NTStatus = 0xC029000A + STATUS_TPM_INSTALL_DISABLED NTStatus = 0xC029000B + STATUS_TPM_INVALID_KEYHANDLE NTStatus = 0xC029000C + STATUS_TPM_KEYNOTFOUND NTStatus = 0xC029000D + STATUS_TPM_INAPPROPRIATE_ENC NTStatus = 0xC029000E + STATUS_TPM_MIGRATEFAIL NTStatus = 0xC029000F + STATUS_TPM_INVALID_PCR_INFO NTStatus = 0xC0290010 + STATUS_TPM_NOSPACE NTStatus = 0xC0290011 + STATUS_TPM_NOSRK NTStatus = 0xC0290012 + STATUS_TPM_NOTSEALED_BLOB NTStatus = 0xC0290013 + STATUS_TPM_OWNER_SET NTStatus = 0xC0290014 + STATUS_TPM_RESOURCES NTStatus = 0xC0290015 + STATUS_TPM_SHORTRANDOM NTStatus = 0xC0290016 + STATUS_TPM_SIZE NTStatus = 0xC0290017 + STATUS_TPM_WRONGPCRVAL NTStatus = 0xC0290018 + STATUS_TPM_BAD_PARAM_SIZE NTStatus = 0xC0290019 + STATUS_TPM_SHA_THREAD NTStatus = 0xC029001A + STATUS_TPM_SHA_ERROR NTStatus = 0xC029001B + STATUS_TPM_FAILEDSELFTEST NTStatus = 0xC029001C + STATUS_TPM_AUTH2FAIL NTStatus = 0xC029001D + STATUS_TPM_BADTAG NTStatus = 0xC029001E + STATUS_TPM_IOERROR NTStatus = 0xC029001F + STATUS_TPM_ENCRYPT_ERROR NTStatus = 0xC0290020 + STATUS_TPM_DECRYPT_ERROR NTStatus = 0xC0290021 + STATUS_TPM_INVALID_AUTHHANDLE NTStatus = 0xC0290022 + STATUS_TPM_NO_ENDORSEMENT NTStatus = 0xC0290023 + STATUS_TPM_INVALID_KEYUSAGE NTStatus = 0xC0290024 + STATUS_TPM_WRONG_ENTITYTYPE NTStatus = 0xC0290025 + STATUS_TPM_INVALID_POSTINIT NTStatus = 0xC0290026 + STATUS_TPM_INAPPROPRIATE_SIG NTStatus = 0xC0290027 + STATUS_TPM_BAD_KEY_PROPERTY NTStatus = 0xC0290028 + STATUS_TPM_BAD_MIGRATION NTStatus = 0xC0290029 + STATUS_TPM_BAD_SCHEME NTStatus = 0xC029002A + STATUS_TPM_BAD_DATASIZE NTStatus = 0xC029002B + STATUS_TPM_BAD_MODE NTStatus = 0xC029002C + STATUS_TPM_BAD_PRESENCE NTStatus = 0xC029002D + STATUS_TPM_BAD_VERSION NTStatus = 0xC029002E + STATUS_TPM_NO_WRAP_TRANSPORT NTStatus = 0xC029002F + STATUS_TPM_AUDITFAIL_UNSUCCESSFUL NTStatus = 0xC0290030 + STATUS_TPM_AUDITFAIL_SUCCESSFUL NTStatus = 0xC0290031 + STATUS_TPM_NOTRESETABLE NTStatus = 0xC0290032 + STATUS_TPM_NOTLOCAL NTStatus = 0xC0290033 + STATUS_TPM_BAD_TYPE NTStatus = 0xC0290034 + STATUS_TPM_INVALID_RESOURCE NTStatus = 0xC0290035 + STATUS_TPM_NOTFIPS NTStatus = 0xC0290036 + STATUS_TPM_INVALID_FAMILY NTStatus = 0xC0290037 + STATUS_TPM_NO_NV_PERMISSION NTStatus = 0xC0290038 + STATUS_TPM_REQUIRES_SIGN NTStatus = 0xC0290039 + STATUS_TPM_KEY_NOTSUPPORTED NTStatus = 0xC029003A + STATUS_TPM_AUTH_CONFLICT NTStatus = 0xC029003B + STATUS_TPM_AREA_LOCKED NTStatus = 0xC029003C + STATUS_TPM_BAD_LOCALITY NTStatus = 0xC029003D + STATUS_TPM_READ_ONLY NTStatus = 0xC029003E + STATUS_TPM_PER_NOWRITE NTStatus = 0xC029003F + STATUS_TPM_FAMILYCOUNT NTStatus = 0xC0290040 + STATUS_TPM_WRITE_LOCKED NTStatus = 0xC0290041 + STATUS_TPM_BAD_ATTRIBUTES NTStatus = 0xC0290042 + STATUS_TPM_INVALID_STRUCTURE NTStatus = 0xC0290043 + STATUS_TPM_KEY_OWNER_CONTROL NTStatus = 0xC0290044 + STATUS_TPM_BAD_COUNTER NTStatus = 0xC0290045 + STATUS_TPM_NOT_FULLWRITE NTStatus = 0xC0290046 + STATUS_TPM_CONTEXT_GAP NTStatus = 0xC0290047 + STATUS_TPM_MAXNVWRITES NTStatus = 0xC0290048 + STATUS_TPM_NOOPERATOR NTStatus = 0xC0290049 + STATUS_TPM_RESOURCEMISSING NTStatus = 0xC029004A + STATUS_TPM_DELEGATE_LOCK NTStatus = 0xC029004B + STATUS_TPM_DELEGATE_FAMILY NTStatus = 0xC029004C + STATUS_TPM_DELEGATE_ADMIN NTStatus = 0xC029004D + STATUS_TPM_TRANSPORT_NOTEXCLUSIVE NTStatus = 0xC029004E + STATUS_TPM_OWNER_CONTROL NTStatus = 0xC029004F + STATUS_TPM_DAA_RESOURCES NTStatus = 0xC0290050 + STATUS_TPM_DAA_INPUT_DATA0 NTStatus = 0xC0290051 + STATUS_TPM_DAA_INPUT_DATA1 NTStatus = 0xC0290052 + STATUS_TPM_DAA_ISSUER_SETTINGS NTStatus = 0xC0290053 + STATUS_TPM_DAA_TPM_SETTINGS NTStatus = 0xC0290054 + STATUS_TPM_DAA_STAGE NTStatus = 0xC0290055 + STATUS_TPM_DAA_ISSUER_VALIDITY NTStatus = 0xC0290056 + STATUS_TPM_DAA_WRONG_W NTStatus = 0xC0290057 + STATUS_TPM_BAD_HANDLE NTStatus = 0xC0290058 + STATUS_TPM_BAD_DELEGATE NTStatus = 0xC0290059 + STATUS_TPM_BADCONTEXT NTStatus = 0xC029005A + STATUS_TPM_TOOMANYCONTEXTS NTStatus = 0xC029005B + STATUS_TPM_MA_TICKET_SIGNATURE NTStatus = 0xC029005C + STATUS_TPM_MA_DESTINATION NTStatus = 0xC029005D + STATUS_TPM_MA_SOURCE NTStatus = 0xC029005E + STATUS_TPM_MA_AUTHORITY NTStatus = 0xC029005F + STATUS_TPM_PERMANENTEK NTStatus = 0xC0290061 + STATUS_TPM_BAD_SIGNATURE NTStatus = 0xC0290062 + STATUS_TPM_NOCONTEXTSPACE NTStatus = 0xC0290063 + STATUS_TPM_20_E_ASYMMETRIC NTStatus = 0xC0290081 + STATUS_TPM_20_E_ATTRIBUTES NTStatus = 0xC0290082 + STATUS_TPM_20_E_HASH NTStatus = 0xC0290083 + STATUS_TPM_20_E_VALUE NTStatus = 0xC0290084 + STATUS_TPM_20_E_HIERARCHY NTStatus = 0xC0290085 + STATUS_TPM_20_E_KEY_SIZE NTStatus = 0xC0290087 + STATUS_TPM_20_E_MGF NTStatus = 0xC0290088 + STATUS_TPM_20_E_MODE NTStatus = 0xC0290089 + STATUS_TPM_20_E_TYPE NTStatus = 0xC029008A + STATUS_TPM_20_E_HANDLE NTStatus = 0xC029008B + STATUS_TPM_20_E_KDF NTStatus = 0xC029008C + STATUS_TPM_20_E_RANGE NTStatus = 0xC029008D + STATUS_TPM_20_E_AUTH_FAIL NTStatus = 0xC029008E + STATUS_TPM_20_E_NONCE NTStatus = 0xC029008F + STATUS_TPM_20_E_PP NTStatus = 0xC0290090 + STATUS_TPM_20_E_SCHEME NTStatus = 0xC0290092 + STATUS_TPM_20_E_SIZE NTStatus = 0xC0290095 + STATUS_TPM_20_E_SYMMETRIC NTStatus = 0xC0290096 + STATUS_TPM_20_E_TAG NTStatus = 0xC0290097 + STATUS_TPM_20_E_SELECTOR NTStatus = 0xC0290098 + STATUS_TPM_20_E_INSUFFICIENT NTStatus = 0xC029009A + STATUS_TPM_20_E_SIGNATURE NTStatus = 0xC029009B + STATUS_TPM_20_E_KEY NTStatus = 0xC029009C + STATUS_TPM_20_E_POLICY_FAIL NTStatus = 0xC029009D + STATUS_TPM_20_E_INTEGRITY NTStatus = 0xC029009F + STATUS_TPM_20_E_TICKET NTStatus = 0xC02900A0 + STATUS_TPM_20_E_RESERVED_BITS NTStatus = 0xC02900A1 + STATUS_TPM_20_E_BAD_AUTH NTStatus = 0xC02900A2 + STATUS_TPM_20_E_EXPIRED NTStatus = 0xC02900A3 + STATUS_TPM_20_E_POLICY_CC NTStatus = 0xC02900A4 + STATUS_TPM_20_E_BINDING NTStatus = 0xC02900A5 + STATUS_TPM_20_E_CURVE NTStatus = 0xC02900A6 + STATUS_TPM_20_E_ECC_POINT NTStatus = 0xC02900A7 + STATUS_TPM_20_E_INITIALIZE NTStatus = 0xC0290100 + STATUS_TPM_20_E_FAILURE NTStatus = 0xC0290101 + STATUS_TPM_20_E_SEQUENCE NTStatus = 0xC0290103 + STATUS_TPM_20_E_PRIVATE NTStatus = 0xC029010B + STATUS_TPM_20_E_HMAC NTStatus = 0xC0290119 + STATUS_TPM_20_E_DISABLED NTStatus = 0xC0290120 + STATUS_TPM_20_E_EXCLUSIVE NTStatus = 0xC0290121 + STATUS_TPM_20_E_ECC_CURVE NTStatus = 0xC0290123 + STATUS_TPM_20_E_AUTH_TYPE NTStatus = 0xC0290124 + STATUS_TPM_20_E_AUTH_MISSING NTStatus = 0xC0290125 + STATUS_TPM_20_E_POLICY NTStatus = 0xC0290126 + STATUS_TPM_20_E_PCR NTStatus = 0xC0290127 + STATUS_TPM_20_E_PCR_CHANGED NTStatus = 0xC0290128 + STATUS_TPM_20_E_UPGRADE NTStatus = 0xC029012D + STATUS_TPM_20_E_TOO_MANY_CONTEXTS NTStatus = 0xC029012E + STATUS_TPM_20_E_AUTH_UNAVAILABLE NTStatus = 0xC029012F + STATUS_TPM_20_E_REBOOT NTStatus = 0xC0290130 + STATUS_TPM_20_E_UNBALANCED NTStatus = 0xC0290131 + STATUS_TPM_20_E_COMMAND_SIZE NTStatus = 0xC0290142 + STATUS_TPM_20_E_COMMAND_CODE NTStatus = 0xC0290143 + STATUS_TPM_20_E_AUTHSIZE NTStatus = 0xC0290144 + STATUS_TPM_20_E_AUTH_CONTEXT NTStatus = 0xC0290145 + STATUS_TPM_20_E_NV_RANGE NTStatus = 0xC0290146 + STATUS_TPM_20_E_NV_SIZE NTStatus = 0xC0290147 + STATUS_TPM_20_E_NV_LOCKED NTStatus = 0xC0290148 + STATUS_TPM_20_E_NV_AUTHORIZATION NTStatus = 0xC0290149 + STATUS_TPM_20_E_NV_UNINITIALIZED NTStatus = 0xC029014A + STATUS_TPM_20_E_NV_SPACE NTStatus = 0xC029014B + STATUS_TPM_20_E_NV_DEFINED NTStatus = 0xC029014C + STATUS_TPM_20_E_BAD_CONTEXT NTStatus = 0xC0290150 + STATUS_TPM_20_E_CPHASH NTStatus = 0xC0290151 + STATUS_TPM_20_E_PARENT NTStatus = 0xC0290152 + STATUS_TPM_20_E_NEEDS_TEST NTStatus = 0xC0290153 + STATUS_TPM_20_E_NO_RESULT NTStatus = 0xC0290154 + STATUS_TPM_20_E_SENSITIVE NTStatus = 0xC0290155 + STATUS_TPM_COMMAND_BLOCKED NTStatus = 0xC0290400 + STATUS_TPM_INVALID_HANDLE NTStatus = 0xC0290401 + STATUS_TPM_DUPLICATE_VHANDLE NTStatus = 0xC0290402 + STATUS_TPM_EMBEDDED_COMMAND_BLOCKED NTStatus = 0xC0290403 + STATUS_TPM_EMBEDDED_COMMAND_UNSUPPORTED NTStatus = 0xC0290404 + STATUS_TPM_RETRY NTStatus = 0xC0290800 + STATUS_TPM_NEEDS_SELFTEST NTStatus = 0xC0290801 + STATUS_TPM_DOING_SELFTEST NTStatus = 0xC0290802 + STATUS_TPM_DEFEND_LOCK_RUNNING NTStatus = 0xC0290803 + STATUS_TPM_COMMAND_CANCELED NTStatus = 0xC0291001 + STATUS_TPM_TOO_MANY_CONTEXTS NTStatus = 0xC0291002 + STATUS_TPM_NOT_FOUND NTStatus = 0xC0291003 + STATUS_TPM_ACCESS_DENIED NTStatus = 0xC0291004 + STATUS_TPM_INSUFFICIENT_BUFFER NTStatus = 0xC0291005 + STATUS_TPM_PPI_FUNCTION_UNSUPPORTED NTStatus = 0xC0291006 + STATUS_PCP_ERROR_MASK NTStatus = 0xC0292000 + STATUS_PCP_DEVICE_NOT_READY NTStatus = 0xC0292001 + STATUS_PCP_INVALID_HANDLE NTStatus = 0xC0292002 + STATUS_PCP_INVALID_PARAMETER NTStatus = 0xC0292003 + STATUS_PCP_FLAG_NOT_SUPPORTED NTStatus = 0xC0292004 + STATUS_PCP_NOT_SUPPORTED NTStatus = 0xC0292005 + STATUS_PCP_BUFFER_TOO_SMALL NTStatus = 0xC0292006 + STATUS_PCP_INTERNAL_ERROR NTStatus = 0xC0292007 + STATUS_PCP_AUTHENTICATION_FAILED NTStatus = 0xC0292008 + STATUS_PCP_AUTHENTICATION_IGNORED NTStatus = 0xC0292009 + STATUS_PCP_POLICY_NOT_FOUND NTStatus = 0xC029200A + STATUS_PCP_PROFILE_NOT_FOUND NTStatus = 0xC029200B + STATUS_PCP_VALIDATION_FAILED NTStatus = 0xC029200C + STATUS_PCP_DEVICE_NOT_FOUND NTStatus = 0xC029200D + STATUS_PCP_WRONG_PARENT NTStatus = 0xC029200E + STATUS_PCP_KEY_NOT_LOADED NTStatus = 0xC029200F + STATUS_PCP_NO_KEY_CERTIFICATION NTStatus = 0xC0292010 + STATUS_PCP_KEY_NOT_FINALIZED NTStatus = 0xC0292011 + STATUS_PCP_ATTESTATION_CHALLENGE_NOT_SET NTStatus = 0xC0292012 + STATUS_PCP_NOT_PCR_BOUND NTStatus = 0xC0292013 + STATUS_PCP_KEY_ALREADY_FINALIZED NTStatus = 0xC0292014 + STATUS_PCP_KEY_USAGE_POLICY_NOT_SUPPORTED NTStatus = 0xC0292015 + STATUS_PCP_KEY_USAGE_POLICY_INVALID NTStatus = 0xC0292016 + STATUS_PCP_SOFT_KEY_ERROR NTStatus = 0xC0292017 + STATUS_PCP_KEY_NOT_AUTHENTICATED NTStatus = 0xC0292018 + STATUS_PCP_KEY_NOT_AIK NTStatus = 0xC0292019 + STATUS_PCP_KEY_NOT_SIGNING_KEY NTStatus = 0xC029201A + STATUS_PCP_LOCKED_OUT NTStatus = 0xC029201B + STATUS_PCP_CLAIM_TYPE_NOT_SUPPORTED NTStatus = 0xC029201C + STATUS_PCP_TPM_VERSION_NOT_SUPPORTED NTStatus = 0xC029201D + STATUS_PCP_BUFFER_LENGTH_MISMATCH NTStatus = 0xC029201E + STATUS_PCP_IFX_RSA_KEY_CREATION_BLOCKED NTStatus = 0xC029201F + STATUS_PCP_TICKET_MISSING NTStatus = 0xC0292020 + STATUS_PCP_RAW_POLICY_NOT_SUPPORTED NTStatus = 0xC0292021 + STATUS_PCP_KEY_HANDLE_INVALIDATED NTStatus = 0xC0292022 + STATUS_PCP_UNSUPPORTED_PSS_SALT NTStatus = 0x40292023 + STATUS_RTPM_CONTEXT_CONTINUE NTStatus = 0x00293000 + STATUS_RTPM_CONTEXT_COMPLETE NTStatus = 0x00293001 + STATUS_RTPM_NO_RESULT NTStatus = 0xC0293002 + STATUS_RTPM_PCR_READ_INCOMPLETE NTStatus = 0xC0293003 + STATUS_RTPM_INVALID_CONTEXT NTStatus = 0xC0293004 + STATUS_RTPM_UNSUPPORTED_CMD NTStatus = 0xC0293005 + STATUS_TPM_ZERO_EXHAUST_ENABLED NTStatus = 0xC0294000 + STATUS_HV_INVALID_HYPERCALL_CODE NTStatus = 0xC0350002 + STATUS_HV_INVALID_HYPERCALL_INPUT NTStatus = 0xC0350003 + STATUS_HV_INVALID_ALIGNMENT NTStatus = 0xC0350004 + STATUS_HV_INVALID_PARAMETER NTStatus = 0xC0350005 + STATUS_HV_ACCESS_DENIED NTStatus = 0xC0350006 + STATUS_HV_INVALID_PARTITION_STATE NTStatus = 0xC0350007 + STATUS_HV_OPERATION_DENIED NTStatus = 0xC0350008 + STATUS_HV_UNKNOWN_PROPERTY NTStatus = 0xC0350009 + STATUS_HV_PROPERTY_VALUE_OUT_OF_RANGE NTStatus = 0xC035000A + STATUS_HV_INSUFFICIENT_MEMORY NTStatus = 0xC035000B + STATUS_HV_PARTITION_TOO_DEEP NTStatus = 0xC035000C + STATUS_HV_INVALID_PARTITION_ID NTStatus = 0xC035000D + STATUS_HV_INVALID_VP_INDEX NTStatus = 0xC035000E + STATUS_HV_INVALID_PORT_ID NTStatus = 0xC0350011 + STATUS_HV_INVALID_CONNECTION_ID NTStatus = 0xC0350012 + STATUS_HV_INSUFFICIENT_BUFFERS NTStatus = 0xC0350013 + STATUS_HV_NOT_ACKNOWLEDGED NTStatus = 0xC0350014 + STATUS_HV_INVALID_VP_STATE NTStatus = 0xC0350015 + STATUS_HV_ACKNOWLEDGED NTStatus = 0xC0350016 + STATUS_HV_INVALID_SAVE_RESTORE_STATE NTStatus = 0xC0350017 + STATUS_HV_INVALID_SYNIC_STATE NTStatus = 0xC0350018 + STATUS_HV_OBJECT_IN_USE NTStatus = 0xC0350019 + STATUS_HV_INVALID_PROXIMITY_DOMAIN_INFO NTStatus = 0xC035001A + STATUS_HV_NO_DATA NTStatus = 0xC035001B + STATUS_HV_INACTIVE NTStatus = 0xC035001C + STATUS_HV_NO_RESOURCES NTStatus = 0xC035001D + STATUS_HV_FEATURE_UNAVAILABLE NTStatus = 0xC035001E + STATUS_HV_INSUFFICIENT_BUFFER NTStatus = 0xC0350033 + STATUS_HV_INSUFFICIENT_DEVICE_DOMAINS NTStatus = 0xC0350038 + STATUS_HV_CPUID_FEATURE_VALIDATION_ERROR NTStatus = 0xC035003C + STATUS_HV_CPUID_XSAVE_FEATURE_VALIDATION_ERROR NTStatus = 0xC035003D + STATUS_HV_PROCESSOR_STARTUP_TIMEOUT NTStatus = 0xC035003E + STATUS_HV_SMX_ENABLED NTStatus = 0xC035003F + STATUS_HV_INVALID_LP_INDEX NTStatus = 0xC0350041 + STATUS_HV_INVALID_REGISTER_VALUE NTStatus = 0xC0350050 + STATUS_HV_INVALID_VTL_STATE NTStatus = 0xC0350051 + STATUS_HV_NX_NOT_DETECTED NTStatus = 0xC0350055 + STATUS_HV_INVALID_DEVICE_ID NTStatus = 0xC0350057 + STATUS_HV_INVALID_DEVICE_STATE NTStatus = 0xC0350058 + STATUS_HV_PENDING_PAGE_REQUESTS NTStatus = 0x00350059 + STATUS_HV_PAGE_REQUEST_INVALID NTStatus = 0xC0350060 + STATUS_HV_INVALID_CPU_GROUP_ID NTStatus = 0xC035006F + STATUS_HV_INVALID_CPU_GROUP_STATE NTStatus = 0xC0350070 + STATUS_HV_OPERATION_FAILED NTStatus = 0xC0350071 + STATUS_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE NTStatus = 0xC0350072 + STATUS_HV_INSUFFICIENT_ROOT_MEMORY NTStatus = 0xC0350073 + STATUS_HV_NOT_PRESENT NTStatus = 0xC0351000 + STATUS_VID_DUPLICATE_HANDLER NTStatus = 0xC0370001 + STATUS_VID_TOO_MANY_HANDLERS NTStatus = 0xC0370002 + STATUS_VID_QUEUE_FULL NTStatus = 0xC0370003 + STATUS_VID_HANDLER_NOT_PRESENT NTStatus = 0xC0370004 + STATUS_VID_INVALID_OBJECT_NAME NTStatus = 0xC0370005 + STATUS_VID_PARTITION_NAME_TOO_LONG NTStatus = 0xC0370006 + STATUS_VID_MESSAGE_QUEUE_NAME_TOO_LONG NTStatus = 0xC0370007 + STATUS_VID_PARTITION_ALREADY_EXISTS NTStatus = 0xC0370008 + STATUS_VID_PARTITION_DOES_NOT_EXIST NTStatus = 0xC0370009 + STATUS_VID_PARTITION_NAME_NOT_FOUND NTStatus = 0xC037000A + STATUS_VID_MESSAGE_QUEUE_ALREADY_EXISTS NTStatus = 0xC037000B + STATUS_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT NTStatus = 0xC037000C + STATUS_VID_MB_STILL_REFERENCED NTStatus = 0xC037000D + STATUS_VID_CHILD_GPA_PAGE_SET_CORRUPTED NTStatus = 0xC037000E + STATUS_VID_INVALID_NUMA_SETTINGS NTStatus = 0xC037000F + STATUS_VID_INVALID_NUMA_NODE_INDEX NTStatus = 0xC0370010 + STATUS_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED NTStatus = 0xC0370011 + STATUS_VID_INVALID_MEMORY_BLOCK_HANDLE NTStatus = 0xC0370012 + STATUS_VID_PAGE_RANGE_OVERFLOW NTStatus = 0xC0370013 + STATUS_VID_INVALID_MESSAGE_QUEUE_HANDLE NTStatus = 0xC0370014 + STATUS_VID_INVALID_GPA_RANGE_HANDLE NTStatus = 0xC0370015 + STATUS_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE NTStatus = 0xC0370016 + STATUS_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED NTStatus = 0xC0370017 + STATUS_VID_INVALID_PPM_HANDLE NTStatus = 0xC0370018 + STATUS_VID_MBPS_ARE_LOCKED NTStatus = 0xC0370019 + STATUS_VID_MESSAGE_QUEUE_CLOSED NTStatus = 0xC037001A + STATUS_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED NTStatus = 0xC037001B + STATUS_VID_STOP_PENDING NTStatus = 0xC037001C + STATUS_VID_INVALID_PROCESSOR_STATE NTStatus = 0xC037001D + STATUS_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT NTStatus = 0xC037001E + STATUS_VID_KM_INTERFACE_ALREADY_INITIALIZED NTStatus = 0xC037001F + STATUS_VID_MB_PROPERTY_ALREADY_SET_RESET NTStatus = 0xC0370020 + STATUS_VID_MMIO_RANGE_DESTROYED NTStatus = 0xC0370021 + STATUS_VID_INVALID_CHILD_GPA_PAGE_SET NTStatus = 0xC0370022 + STATUS_VID_RESERVE_PAGE_SET_IS_BEING_USED NTStatus = 0xC0370023 + STATUS_VID_RESERVE_PAGE_SET_TOO_SMALL NTStatus = 0xC0370024 + STATUS_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE NTStatus = 0xC0370025 + STATUS_VID_MBP_COUNT_EXCEEDED_LIMIT NTStatus = 0xC0370026 + STATUS_VID_SAVED_STATE_CORRUPT NTStatus = 0xC0370027 + STATUS_VID_SAVED_STATE_UNRECOGNIZED_ITEM NTStatus = 0xC0370028 + STATUS_VID_SAVED_STATE_INCOMPATIBLE NTStatus = 0xC0370029 + STATUS_VID_VTL_ACCESS_DENIED NTStatus = 0xC037002A + STATUS_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED NTStatus = 0x80370001 + STATUS_IPSEC_BAD_SPI NTStatus = 0xC0360001 + STATUS_IPSEC_SA_LIFETIME_EXPIRED NTStatus = 0xC0360002 + STATUS_IPSEC_WRONG_SA NTStatus = 0xC0360003 + STATUS_IPSEC_REPLAY_CHECK_FAILED NTStatus = 0xC0360004 + STATUS_IPSEC_INVALID_PACKET NTStatus = 0xC0360005 + STATUS_IPSEC_INTEGRITY_CHECK_FAILED NTStatus = 0xC0360006 + STATUS_IPSEC_CLEAR_TEXT_DROP NTStatus = 0xC0360007 + STATUS_IPSEC_AUTH_FIREWALL_DROP NTStatus = 0xC0360008 + STATUS_IPSEC_THROTTLE_DROP NTStatus = 0xC0360009 + STATUS_IPSEC_DOSP_BLOCK NTStatus = 0xC0368000 + STATUS_IPSEC_DOSP_RECEIVED_MULTICAST NTStatus = 0xC0368001 + STATUS_IPSEC_DOSP_INVALID_PACKET NTStatus = 0xC0368002 + STATUS_IPSEC_DOSP_STATE_LOOKUP_FAILED NTStatus = 0xC0368003 + STATUS_IPSEC_DOSP_MAX_ENTRIES NTStatus = 0xC0368004 + STATUS_IPSEC_DOSP_KEYMOD_NOT_ALLOWED NTStatus = 0xC0368005 + STATUS_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES NTStatus = 0xC0368006 + STATUS_VOLMGR_INCOMPLETE_REGENERATION NTStatus = 0x80380001 + STATUS_VOLMGR_INCOMPLETE_DISK_MIGRATION NTStatus = 0x80380002 + STATUS_VOLMGR_DATABASE_FULL NTStatus = 0xC0380001 + STATUS_VOLMGR_DISK_CONFIGURATION_CORRUPTED NTStatus = 0xC0380002 + STATUS_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC NTStatus = 0xC0380003 + STATUS_VOLMGR_PACK_CONFIG_UPDATE_FAILED NTStatus = 0xC0380004 + STATUS_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME NTStatus = 0xC0380005 + STATUS_VOLMGR_DISK_DUPLICATE NTStatus = 0xC0380006 + STATUS_VOLMGR_DISK_DYNAMIC NTStatus = 0xC0380007 + STATUS_VOLMGR_DISK_ID_INVALID NTStatus = 0xC0380008 + STATUS_VOLMGR_DISK_INVALID NTStatus = 0xC0380009 + STATUS_VOLMGR_DISK_LAST_VOTER NTStatus = 0xC038000A + STATUS_VOLMGR_DISK_LAYOUT_INVALID NTStatus = 0xC038000B + STATUS_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS NTStatus = 0xC038000C + STATUS_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED NTStatus = 0xC038000D + STATUS_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL NTStatus = 0xC038000E + STATUS_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS NTStatus = 0xC038000F + STATUS_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS NTStatus = 0xC0380010 + STATUS_VOLMGR_DISK_MISSING NTStatus = 0xC0380011 + STATUS_VOLMGR_DISK_NOT_EMPTY NTStatus = 0xC0380012 + STATUS_VOLMGR_DISK_NOT_ENOUGH_SPACE NTStatus = 0xC0380013 + STATUS_VOLMGR_DISK_REVECTORING_FAILED NTStatus = 0xC0380014 + STATUS_VOLMGR_DISK_SECTOR_SIZE_INVALID NTStatus = 0xC0380015 + STATUS_VOLMGR_DISK_SET_NOT_CONTAINED NTStatus = 0xC0380016 + STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS NTStatus = 0xC0380017 + STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES NTStatus = 0xC0380018 + STATUS_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED NTStatus = 0xC0380019 + STATUS_VOLMGR_EXTENT_ALREADY_USED NTStatus = 0xC038001A + STATUS_VOLMGR_EXTENT_NOT_CONTIGUOUS NTStatus = 0xC038001B + STATUS_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION NTStatus = 0xC038001C + STATUS_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED NTStatus = 0xC038001D + STATUS_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION NTStatus = 0xC038001E + STATUS_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH NTStatus = 0xC038001F + STATUS_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED NTStatus = 0xC0380020 + STATUS_VOLMGR_INTERLEAVE_LENGTH_INVALID NTStatus = 0xC0380021 + STATUS_VOLMGR_MAXIMUM_REGISTERED_USERS NTStatus = 0xC0380022 + STATUS_VOLMGR_MEMBER_IN_SYNC NTStatus = 0xC0380023 + STATUS_VOLMGR_MEMBER_INDEX_DUPLICATE NTStatus = 0xC0380024 + STATUS_VOLMGR_MEMBER_INDEX_INVALID NTStatus = 0xC0380025 + STATUS_VOLMGR_MEMBER_MISSING NTStatus = 0xC0380026 + STATUS_VOLMGR_MEMBER_NOT_DETACHED NTStatus = 0xC0380027 + STATUS_VOLMGR_MEMBER_REGENERATING NTStatus = 0xC0380028 + STATUS_VOLMGR_ALL_DISKS_FAILED NTStatus = 0xC0380029 + STATUS_VOLMGR_NO_REGISTERED_USERS NTStatus = 0xC038002A + STATUS_VOLMGR_NO_SUCH_USER NTStatus = 0xC038002B + STATUS_VOLMGR_NOTIFICATION_RESET NTStatus = 0xC038002C + STATUS_VOLMGR_NUMBER_OF_MEMBERS_INVALID NTStatus = 0xC038002D + STATUS_VOLMGR_NUMBER_OF_PLEXES_INVALID NTStatus = 0xC038002E + STATUS_VOLMGR_PACK_DUPLICATE NTStatus = 0xC038002F + STATUS_VOLMGR_PACK_ID_INVALID NTStatus = 0xC0380030 + STATUS_VOLMGR_PACK_INVALID NTStatus = 0xC0380031 + STATUS_VOLMGR_PACK_NAME_INVALID NTStatus = 0xC0380032 + STATUS_VOLMGR_PACK_OFFLINE NTStatus = 0xC0380033 + STATUS_VOLMGR_PACK_HAS_QUORUM NTStatus = 0xC0380034 + STATUS_VOLMGR_PACK_WITHOUT_QUORUM NTStatus = 0xC0380035 + STATUS_VOLMGR_PARTITION_STYLE_INVALID NTStatus = 0xC0380036 + STATUS_VOLMGR_PARTITION_UPDATE_FAILED NTStatus = 0xC0380037 + STATUS_VOLMGR_PLEX_IN_SYNC NTStatus = 0xC0380038 + STATUS_VOLMGR_PLEX_INDEX_DUPLICATE NTStatus = 0xC0380039 + STATUS_VOLMGR_PLEX_INDEX_INVALID NTStatus = 0xC038003A + STATUS_VOLMGR_PLEX_LAST_ACTIVE NTStatus = 0xC038003B + STATUS_VOLMGR_PLEX_MISSING NTStatus = 0xC038003C + STATUS_VOLMGR_PLEX_REGENERATING NTStatus = 0xC038003D + STATUS_VOLMGR_PLEX_TYPE_INVALID NTStatus = 0xC038003E + STATUS_VOLMGR_PLEX_NOT_RAID5 NTStatus = 0xC038003F + STATUS_VOLMGR_PLEX_NOT_SIMPLE NTStatus = 0xC0380040 + STATUS_VOLMGR_STRUCTURE_SIZE_INVALID NTStatus = 0xC0380041 + STATUS_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS NTStatus = 0xC0380042 + STATUS_VOLMGR_TRANSACTION_IN_PROGRESS NTStatus = 0xC0380043 + STATUS_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE NTStatus = 0xC0380044 + STATUS_VOLMGR_VOLUME_CONTAINS_MISSING_DISK NTStatus = 0xC0380045 + STATUS_VOLMGR_VOLUME_ID_INVALID NTStatus = 0xC0380046 + STATUS_VOLMGR_VOLUME_LENGTH_INVALID NTStatus = 0xC0380047 + STATUS_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE NTStatus = 0xC0380048 + STATUS_VOLMGR_VOLUME_NOT_MIRRORED NTStatus = 0xC0380049 + STATUS_VOLMGR_VOLUME_NOT_RETAINED NTStatus = 0xC038004A + STATUS_VOLMGR_VOLUME_OFFLINE NTStatus = 0xC038004B + STATUS_VOLMGR_VOLUME_RETAINED NTStatus = 0xC038004C + STATUS_VOLMGR_NUMBER_OF_EXTENTS_INVALID NTStatus = 0xC038004D + STATUS_VOLMGR_DIFFERENT_SECTOR_SIZE NTStatus = 0xC038004E + STATUS_VOLMGR_BAD_BOOT_DISK NTStatus = 0xC038004F + STATUS_VOLMGR_PACK_CONFIG_OFFLINE NTStatus = 0xC0380050 + STATUS_VOLMGR_PACK_CONFIG_ONLINE NTStatus = 0xC0380051 + STATUS_VOLMGR_NOT_PRIMARY_PACK NTStatus = 0xC0380052 + STATUS_VOLMGR_PACK_LOG_UPDATE_FAILED NTStatus = 0xC0380053 + STATUS_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID NTStatus = 0xC0380054 + STATUS_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID NTStatus = 0xC0380055 + STATUS_VOLMGR_VOLUME_MIRRORED NTStatus = 0xC0380056 + STATUS_VOLMGR_PLEX_NOT_SIMPLE_SPANNED NTStatus = 0xC0380057 + STATUS_VOLMGR_NO_VALID_LOG_COPIES NTStatus = 0xC0380058 + STATUS_VOLMGR_PRIMARY_PACK_PRESENT NTStatus = 0xC0380059 + STATUS_VOLMGR_NUMBER_OF_DISKS_INVALID NTStatus = 0xC038005A + STATUS_VOLMGR_MIRROR_NOT_SUPPORTED NTStatus = 0xC038005B + STATUS_VOLMGR_RAID5_NOT_SUPPORTED NTStatus = 0xC038005C + STATUS_BCD_NOT_ALL_ENTRIES_IMPORTED NTStatus = 0x80390001 + STATUS_BCD_TOO_MANY_ELEMENTS NTStatus = 0xC0390002 + STATUS_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED NTStatus = 0x80390003 + STATUS_VHD_DRIVE_FOOTER_MISSING NTStatus = 0xC03A0001 + STATUS_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH NTStatus = 0xC03A0002 + STATUS_VHD_DRIVE_FOOTER_CORRUPT NTStatus = 0xC03A0003 + STATUS_VHD_FORMAT_UNKNOWN NTStatus = 0xC03A0004 + STATUS_VHD_FORMAT_UNSUPPORTED_VERSION NTStatus = 0xC03A0005 + STATUS_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH NTStatus = 0xC03A0006 + STATUS_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION NTStatus = 0xC03A0007 + STATUS_VHD_SPARSE_HEADER_CORRUPT NTStatus = 0xC03A0008 + STATUS_VHD_BLOCK_ALLOCATION_FAILURE NTStatus = 0xC03A0009 + STATUS_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT NTStatus = 0xC03A000A + STATUS_VHD_INVALID_BLOCK_SIZE NTStatus = 0xC03A000B + STATUS_VHD_BITMAP_MISMATCH NTStatus = 0xC03A000C + STATUS_VHD_PARENT_VHD_NOT_FOUND NTStatus = 0xC03A000D + STATUS_VHD_CHILD_PARENT_ID_MISMATCH NTStatus = 0xC03A000E + STATUS_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH NTStatus = 0xC03A000F + STATUS_VHD_METADATA_READ_FAILURE NTStatus = 0xC03A0010 + STATUS_VHD_METADATA_WRITE_FAILURE NTStatus = 0xC03A0011 + STATUS_VHD_INVALID_SIZE NTStatus = 0xC03A0012 + STATUS_VHD_INVALID_FILE_SIZE NTStatus = 0xC03A0013 + STATUS_VIRTDISK_PROVIDER_NOT_FOUND NTStatus = 0xC03A0014 + STATUS_VIRTDISK_NOT_VIRTUAL_DISK NTStatus = 0xC03A0015 + STATUS_VHD_PARENT_VHD_ACCESS_DENIED NTStatus = 0xC03A0016 + STATUS_VHD_CHILD_PARENT_SIZE_MISMATCH NTStatus = 0xC03A0017 + STATUS_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED NTStatus = 0xC03A0018 + STATUS_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT NTStatus = 0xC03A0019 + STATUS_VIRTUAL_DISK_LIMITATION NTStatus = 0xC03A001A + STATUS_VHD_INVALID_TYPE NTStatus = 0xC03A001B + STATUS_VHD_INVALID_STATE NTStatus = 0xC03A001C + STATUS_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE NTStatus = 0xC03A001D + STATUS_VIRTDISK_DISK_ALREADY_OWNED NTStatus = 0xC03A001E + STATUS_VIRTDISK_DISK_ONLINE_AND_WRITABLE NTStatus = 0xC03A001F + STATUS_CTLOG_TRACKING_NOT_INITIALIZED NTStatus = 0xC03A0020 + STATUS_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE NTStatus = 0xC03A0021 + STATUS_CTLOG_VHD_CHANGED_OFFLINE NTStatus = 0xC03A0022 + STATUS_CTLOG_INVALID_TRACKING_STATE NTStatus = 0xC03A0023 + STATUS_CTLOG_INCONSISTENT_TRACKING_FILE NTStatus = 0xC03A0024 + STATUS_VHD_METADATA_FULL NTStatus = 0xC03A0028 + STATUS_VHD_INVALID_CHANGE_TRACKING_ID NTStatus = 0xC03A0029 + STATUS_VHD_CHANGE_TRACKING_DISABLED NTStatus = 0xC03A002A + STATUS_VHD_MISSING_CHANGE_TRACKING_INFORMATION NTStatus = 0xC03A0030 + STATUS_VHD_RESIZE_WOULD_TRUNCATE_DATA NTStatus = 0xC03A0031 + STATUS_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE NTStatus = 0xC03A0032 + STATUS_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE NTStatus = 0xC03A0033 + STATUS_QUERY_STORAGE_ERROR NTStatus = 0x803A0001 + STATUS_GDI_HANDLE_LEAK NTStatus = 0x803F0001 + STATUS_RKF_KEY_NOT_FOUND NTStatus = 0xC0400001 + STATUS_RKF_DUPLICATE_KEY NTStatus = 0xC0400002 + STATUS_RKF_BLOB_FULL NTStatus = 0xC0400003 + STATUS_RKF_STORE_FULL NTStatus = 0xC0400004 + STATUS_RKF_FILE_BLOCKED NTStatus = 0xC0400005 + STATUS_RKF_ACTIVE_KEY NTStatus = 0xC0400006 + STATUS_RDBSS_RESTART_OPERATION NTStatus = 0xC0410001 + STATUS_RDBSS_CONTINUE_OPERATION NTStatus = 0xC0410002 + STATUS_RDBSS_POST_OPERATION NTStatus = 0xC0410003 + STATUS_RDBSS_RETRY_LOOKUP NTStatus = 0xC0410004 + STATUS_BTH_ATT_INVALID_HANDLE NTStatus = 0xC0420001 + STATUS_BTH_ATT_READ_NOT_PERMITTED NTStatus = 0xC0420002 + STATUS_BTH_ATT_WRITE_NOT_PERMITTED NTStatus = 0xC0420003 + STATUS_BTH_ATT_INVALID_PDU NTStatus = 0xC0420004 + STATUS_BTH_ATT_INSUFFICIENT_AUTHENTICATION NTStatus = 0xC0420005 + STATUS_BTH_ATT_REQUEST_NOT_SUPPORTED NTStatus = 0xC0420006 + STATUS_BTH_ATT_INVALID_OFFSET NTStatus = 0xC0420007 + STATUS_BTH_ATT_INSUFFICIENT_AUTHORIZATION NTStatus = 0xC0420008 + STATUS_BTH_ATT_PREPARE_QUEUE_FULL NTStatus = 0xC0420009 + STATUS_BTH_ATT_ATTRIBUTE_NOT_FOUND NTStatus = 0xC042000A + STATUS_BTH_ATT_ATTRIBUTE_NOT_LONG NTStatus = 0xC042000B + STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE NTStatus = 0xC042000C + STATUS_BTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH NTStatus = 0xC042000D + STATUS_BTH_ATT_UNLIKELY NTStatus = 0xC042000E + STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION NTStatus = 0xC042000F + STATUS_BTH_ATT_UNSUPPORTED_GROUP_TYPE NTStatus = 0xC0420010 + STATUS_BTH_ATT_INSUFFICIENT_RESOURCES NTStatus = 0xC0420011 + STATUS_BTH_ATT_UNKNOWN_ERROR NTStatus = 0xC0421000 + STATUS_SECUREBOOT_ROLLBACK_DETECTED NTStatus = 0xC0430001 + STATUS_SECUREBOOT_POLICY_VIOLATION NTStatus = 0xC0430002 + STATUS_SECUREBOOT_INVALID_POLICY NTStatus = 0xC0430003 + STATUS_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND NTStatus = 0xC0430004 + STATUS_SECUREBOOT_POLICY_NOT_SIGNED NTStatus = 0xC0430005 + STATUS_SECUREBOOT_NOT_ENABLED NTStatus = 0x80430006 + STATUS_SECUREBOOT_FILE_REPLACED NTStatus = 0xC0430007 + STATUS_SECUREBOOT_POLICY_NOT_AUTHORIZED NTStatus = 0xC0430008 + STATUS_SECUREBOOT_POLICY_UNKNOWN NTStatus = 0xC0430009 + STATUS_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION NTStatus = 0xC043000A + STATUS_SECUREBOOT_PLATFORM_ID_MISMATCH NTStatus = 0xC043000B + STATUS_SECUREBOOT_POLICY_ROLLBACK_DETECTED NTStatus = 0xC043000C + STATUS_SECUREBOOT_POLICY_UPGRADE_MISMATCH NTStatus = 0xC043000D + STATUS_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING NTStatus = 0xC043000E + STATUS_SECUREBOOT_NOT_BASE_POLICY NTStatus = 0xC043000F + STATUS_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY NTStatus = 0xC0430010 + STATUS_PLATFORM_MANIFEST_NOT_AUTHORIZED NTStatus = 0xC0EB0001 + STATUS_PLATFORM_MANIFEST_INVALID NTStatus = 0xC0EB0002 + STATUS_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED NTStatus = 0xC0EB0003 + STATUS_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED NTStatus = 0xC0EB0004 + STATUS_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND NTStatus = 0xC0EB0005 + STATUS_PLATFORM_MANIFEST_NOT_ACTIVE NTStatus = 0xC0EB0006 + STATUS_PLATFORM_MANIFEST_NOT_SIGNED NTStatus = 0xC0EB0007 + STATUS_SYSTEM_INTEGRITY_ROLLBACK_DETECTED NTStatus = 0xC0E90001 + STATUS_SYSTEM_INTEGRITY_POLICY_VIOLATION NTStatus = 0xC0E90002 + STATUS_SYSTEM_INTEGRITY_INVALID_POLICY NTStatus = 0xC0E90003 + STATUS_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED NTStatus = 0xC0E90004 + STATUS_SYSTEM_INTEGRITY_TOO_MANY_POLICIES NTStatus = 0xC0E90005 + STATUS_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED NTStatus = 0xC0E90006 + STATUS_NO_APPLICABLE_APP_LICENSES_FOUND NTStatus = 0xC0EA0001 + STATUS_CLIP_LICENSE_NOT_FOUND NTStatus = 0xC0EA0002 + STATUS_CLIP_DEVICE_LICENSE_MISSING NTStatus = 0xC0EA0003 + STATUS_CLIP_LICENSE_INVALID_SIGNATURE NTStatus = 0xC0EA0004 + STATUS_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID NTStatus = 0xC0EA0005 + STATUS_CLIP_LICENSE_EXPIRED NTStatus = 0xC0EA0006 + STATUS_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE NTStatus = 0xC0EA0007 + STATUS_CLIP_LICENSE_NOT_SIGNED NTStatus = 0xC0EA0008 + STATUS_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE NTStatus = 0xC0EA0009 + STATUS_CLIP_LICENSE_DEVICE_ID_MISMATCH NTStatus = 0xC0EA000A + STATUS_AUDIO_ENGINE_NODE_NOT_FOUND NTStatus = 0xC0440001 + STATUS_HDAUDIO_EMPTY_CONNECTION_LIST NTStatus = 0xC0440002 + STATUS_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED NTStatus = 0xC0440003 + STATUS_HDAUDIO_NO_LOGICAL_DEVICES_CREATED NTStatus = 0xC0440004 + STATUS_HDAUDIO_NULL_LINKED_LIST_ENTRY NTStatus = 0xC0440005 + STATUS_SPACES_REPAIRED NTStatus = 0x00E70000 + STATUS_SPACES_PAUSE NTStatus = 0x00E70001 + STATUS_SPACES_COMPLETE NTStatus = 0x00E70002 + STATUS_SPACES_REDIRECT NTStatus = 0x00E70003 + STATUS_SPACES_FAULT_DOMAIN_TYPE_INVALID NTStatus = 0xC0E70001 + STATUS_SPACES_RESILIENCY_TYPE_INVALID NTStatus = 0xC0E70003 + STATUS_SPACES_DRIVE_SECTOR_SIZE_INVALID NTStatus = 0xC0E70004 + STATUS_SPACES_DRIVE_REDUNDANCY_INVALID NTStatus = 0xC0E70006 + STATUS_SPACES_NUMBER_OF_DATA_COPIES_INVALID NTStatus = 0xC0E70007 + STATUS_SPACES_INTERLEAVE_LENGTH_INVALID NTStatus = 0xC0E70009 + STATUS_SPACES_NUMBER_OF_COLUMNS_INVALID NTStatus = 0xC0E7000A + STATUS_SPACES_NOT_ENOUGH_DRIVES NTStatus = 0xC0E7000B + STATUS_SPACES_EXTENDED_ERROR NTStatus = 0xC0E7000C + STATUS_SPACES_PROVISIONING_TYPE_INVALID NTStatus = 0xC0E7000D + STATUS_SPACES_ALLOCATION_SIZE_INVALID NTStatus = 0xC0E7000E + STATUS_SPACES_ENCLOSURE_AWARE_INVALID NTStatus = 0xC0E7000F + STATUS_SPACES_WRITE_CACHE_SIZE_INVALID NTStatus = 0xC0E70010 + STATUS_SPACES_NUMBER_OF_GROUPS_INVALID NTStatus = 0xC0E70011 + STATUS_SPACES_DRIVE_OPERATIONAL_STATE_INVALID NTStatus = 0xC0E70012 + STATUS_SPACES_UPDATE_COLUMN_STATE NTStatus = 0xC0E70013 + STATUS_SPACES_MAP_REQUIRED NTStatus = 0xC0E70014 + STATUS_SPACES_UNSUPPORTED_VERSION NTStatus = 0xC0E70015 + STATUS_SPACES_CORRUPT_METADATA NTStatus = 0xC0E70016 + STATUS_SPACES_DRT_FULL NTStatus = 0xC0E70017 + STATUS_SPACES_INCONSISTENCY NTStatus = 0xC0E70018 + STATUS_SPACES_LOG_NOT_READY NTStatus = 0xC0E70019 + STATUS_SPACES_NO_REDUNDANCY NTStatus = 0xC0E7001A + STATUS_SPACES_DRIVE_NOT_READY NTStatus = 0xC0E7001B + STATUS_SPACES_DRIVE_SPLIT NTStatus = 0xC0E7001C + STATUS_SPACES_DRIVE_LOST_DATA NTStatus = 0xC0E7001D + STATUS_SPACES_ENTRY_INCOMPLETE NTStatus = 0xC0E7001E + STATUS_SPACES_ENTRY_INVALID NTStatus = 0xC0E7001F + STATUS_SPACES_MARK_DIRTY NTStatus = 0xC0E70020 + STATUS_VOLSNAP_BOOTFILE_NOT_VALID NTStatus = 0xC0500003 + STATUS_VOLSNAP_ACTIVATION_TIMEOUT NTStatus = 0xC0500004 + STATUS_IO_PREEMPTED NTStatus = 0xC0510001 + STATUS_SVHDX_ERROR_STORED NTStatus = 0xC05C0000 + STATUS_SVHDX_ERROR_NOT_AVAILABLE NTStatus = 0xC05CFF00 + STATUS_SVHDX_UNIT_ATTENTION_AVAILABLE NTStatus = 0xC05CFF01 + STATUS_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED NTStatus = 0xC05CFF02 + STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED NTStatus = 0xC05CFF03 + STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED NTStatus = 0xC05CFF04 + STATUS_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED NTStatus = 0xC05CFF05 + STATUS_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED NTStatus = 0xC05CFF06 + STATUS_SVHDX_RESERVATION_CONFLICT NTStatus = 0xC05CFF07 + STATUS_SVHDX_WRONG_FILE_TYPE NTStatus = 0xC05CFF08 + STATUS_SVHDX_VERSION_MISMATCH NTStatus = 0xC05CFF09 + STATUS_VHD_SHARED NTStatus = 0xC05CFF0A + STATUS_SVHDX_NO_INITIATOR NTStatus = 0xC05CFF0B + STATUS_VHDSET_BACKING_STORAGE_NOT_FOUND NTStatus = 0xC05CFF0C + STATUS_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP NTStatus = 0xC05D0000 + STATUS_SMB_BAD_CLUSTER_DIALECT NTStatus = 0xC05D0001 + STATUS_SMB_GUEST_LOGON_BLOCKED NTStatus = 0xC05D0002 + STATUS_SECCORE_INVALID_COMMAND NTStatus = 0xC0E80000 + STATUS_VSM_NOT_INITIALIZED NTStatus = 0xC0450000 + STATUS_VSM_DMA_PROTECTION_NOT_IN_USE NTStatus = 0xC0450001 + STATUS_APPEXEC_CONDITION_NOT_SATISFIED NTStatus = 0xC0EC0000 + STATUS_APPEXEC_HANDLE_INVALIDATED NTStatus = 0xC0EC0001 + STATUS_APPEXEC_INVALID_HOST_GENERATION NTStatus = 0xC0EC0002 + STATUS_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION NTStatus = 0xC0EC0003 + STATUS_APPEXEC_INVALID_HOST_STATE NTStatus = 0xC0EC0004 + STATUS_APPEXEC_NO_DONOR NTStatus = 0xC0EC0005 + STATUS_APPEXEC_HOST_ID_MISMATCH NTStatus = 0xC0EC0006 + STATUS_APPEXEC_UNKNOWN_USER NTStatus = 0xC0EC0007 +) diff --git a/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go b/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go new file mode 100644 index 0000000000000..6048ac679fa53 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go @@ -0,0 +1,149 @@ +// Code generated by 'mkknownfolderids.bash'; DO NOT EDIT. + +package windows + +type KNOWNFOLDERID GUID + +var ( + FOLDERID_NetworkFolder = &KNOWNFOLDERID{0xd20beec4, 0x5ca8, 0x4905, [8]byte{0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53}} + FOLDERID_ComputerFolder = &KNOWNFOLDERID{0x0ac0837c, 0xbbf8, 0x452a, [8]byte{0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7}} + FOLDERID_InternetFolder = &KNOWNFOLDERID{0x4d9f7874, 0x4e0c, 0x4904, [8]byte{0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b}} + FOLDERID_ControlPanelFolder = &KNOWNFOLDERID{0x82a74aeb, 0xaeb4, 0x465c, [8]byte{0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63}} + FOLDERID_PrintersFolder = &KNOWNFOLDERID{0x76fc4e2d, 0xd6ad, 0x4519, [8]byte{0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85}} + FOLDERID_SyncManagerFolder = &KNOWNFOLDERID{0x43668bf8, 0xc14e, 0x49b2, [8]byte{0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7}} + FOLDERID_SyncSetupFolder = &KNOWNFOLDERID{0x0f214138, 0xb1d3, 0x4a90, [8]byte{0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a}} + FOLDERID_ConflictFolder = &KNOWNFOLDERID{0x4bfefb45, 0x347d, 0x4006, [8]byte{0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92}} + FOLDERID_SyncResultsFolder = &KNOWNFOLDERID{0x289a9a43, 0xbe44, 0x4057, [8]byte{0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9}} + FOLDERID_RecycleBinFolder = &KNOWNFOLDERID{0xb7534046, 0x3ecb, 0x4c18, [8]byte{0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac}} + FOLDERID_ConnectionsFolder = &KNOWNFOLDERID{0x6f0cd92b, 0x2e97, 0x45d1, [8]byte{0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd}} + FOLDERID_Fonts = &KNOWNFOLDERID{0xfd228cb7, 0xae11, 0x4ae3, [8]byte{0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe}} + FOLDERID_Desktop = &KNOWNFOLDERID{0xb4bfcc3a, 0xdb2c, 0x424c, [8]byte{0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41}} + FOLDERID_Startup = &KNOWNFOLDERID{0xb97d20bb, 0xf46a, 0x4c97, [8]byte{0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54}} + FOLDERID_Programs = &KNOWNFOLDERID{0xa77f5d77, 0x2e2b, 0x44c3, [8]byte{0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51}} + FOLDERID_StartMenu = &KNOWNFOLDERID{0x625b53c3, 0xab48, 0x4ec1, [8]byte{0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19}} + FOLDERID_Recent = &KNOWNFOLDERID{0xae50c081, 0xebd2, 0x438a, [8]byte{0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a}} + FOLDERID_SendTo = &KNOWNFOLDERID{0x8983036c, 0x27c0, 0x404b, [8]byte{0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74}} + FOLDERID_Documents = &KNOWNFOLDERID{0xfdd39ad0, 0x238f, 0x46af, [8]byte{0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7}} + FOLDERID_Favorites = &KNOWNFOLDERID{0x1777f761, 0x68ad, 0x4d8a, [8]byte{0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd}} + FOLDERID_NetHood = &KNOWNFOLDERID{0xc5abbf53, 0xe17f, 0x4121, [8]byte{0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73}} + FOLDERID_PrintHood = &KNOWNFOLDERID{0x9274bd8d, 0xcfd1, 0x41c3, [8]byte{0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4}} + FOLDERID_Templates = &KNOWNFOLDERID{0xa63293e8, 0x664e, 0x48db, [8]byte{0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7}} + FOLDERID_CommonStartup = &KNOWNFOLDERID{0x82a5ea35, 0xd9cd, 0x47c5, [8]byte{0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e}} + FOLDERID_CommonPrograms = &KNOWNFOLDERID{0x0139d44e, 0x6afe, 0x49f2, [8]byte{0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8}} + FOLDERID_CommonStartMenu = &KNOWNFOLDERID{0xa4115719, 0xd62e, 0x491d, [8]byte{0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67}} + FOLDERID_PublicDesktop = &KNOWNFOLDERID{0xc4aa340d, 0xf20f, 0x4863, [8]byte{0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25}} + FOLDERID_ProgramData = &KNOWNFOLDERID{0x62ab5d82, 0xfdc1, 0x4dc3, [8]byte{0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97}} + FOLDERID_CommonTemplates = &KNOWNFOLDERID{0xb94237e7, 0x57ac, 0x4347, [8]byte{0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7}} + FOLDERID_PublicDocuments = &KNOWNFOLDERID{0xed4824af, 0xdce4, 0x45a8, [8]byte{0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34}} + FOLDERID_RoamingAppData = &KNOWNFOLDERID{0x3eb685db, 0x65f9, 0x4cf6, [8]byte{0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d}} + FOLDERID_LocalAppData = &KNOWNFOLDERID{0xf1b32785, 0x6fba, 0x4fcf, [8]byte{0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91}} + FOLDERID_LocalAppDataLow = &KNOWNFOLDERID{0xa520a1a4, 0x1780, 0x4ff6, [8]byte{0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16}} + FOLDERID_InternetCache = &KNOWNFOLDERID{0x352481e8, 0x33be, 0x4251, [8]byte{0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d}} + FOLDERID_Cookies = &KNOWNFOLDERID{0x2b0f765d, 0xc0e9, 0x4171, [8]byte{0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6}} + FOLDERID_History = &KNOWNFOLDERID{0xd9dc8a3b, 0xb784, 0x432e, [8]byte{0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63}} + FOLDERID_System = &KNOWNFOLDERID{0x1ac14e77, 0x02e7, 0x4e5d, [8]byte{0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7}} + FOLDERID_SystemX86 = &KNOWNFOLDERID{0xd65231b0, 0xb2f1, 0x4857, [8]byte{0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27}} + FOLDERID_Windows = &KNOWNFOLDERID{0xf38bf404, 0x1d43, 0x42f2, [8]byte{0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23}} + FOLDERID_Profile = &KNOWNFOLDERID{0x5e6c858f, 0x0e22, 0x4760, [8]byte{0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73}} + FOLDERID_Pictures = &KNOWNFOLDERID{0x33e28130, 0x4e1e, 0x4676, [8]byte{0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb}} + FOLDERID_ProgramFilesX86 = &KNOWNFOLDERID{0x7c5a40ef, 0xa0fb, 0x4bfc, [8]byte{0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e}} + FOLDERID_ProgramFilesCommonX86 = &KNOWNFOLDERID{0xde974d24, 0xd9c6, 0x4d3e, [8]byte{0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17}} + FOLDERID_ProgramFilesX64 = &KNOWNFOLDERID{0x6d809377, 0x6af0, 0x444b, [8]byte{0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e}} + FOLDERID_ProgramFilesCommonX64 = &KNOWNFOLDERID{0x6365d5a7, 0x0f0d, 0x45e5, [8]byte{0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d}} + FOLDERID_ProgramFiles = &KNOWNFOLDERID{0x905e63b6, 0xc1bf, 0x494e, [8]byte{0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a}} + FOLDERID_ProgramFilesCommon = &KNOWNFOLDERID{0xf7f1ed05, 0x9f6d, 0x47a2, [8]byte{0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66}} + FOLDERID_UserProgramFiles = &KNOWNFOLDERID{0x5cd7aee2, 0x2219, 0x4a67, [8]byte{0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb}} + FOLDERID_UserProgramFilesCommon = &KNOWNFOLDERID{0xbcbd3057, 0xca5c, 0x4622, [8]byte{0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16}} + FOLDERID_AdminTools = &KNOWNFOLDERID{0x724ef170, 0xa42d, 0x4fef, [8]byte{0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f}} + FOLDERID_CommonAdminTools = &KNOWNFOLDERID{0xd0384e7d, 0xbac3, 0x4797, [8]byte{0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5}} + FOLDERID_Music = &KNOWNFOLDERID{0x4bd8d571, 0x6d19, 0x48d3, [8]byte{0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43}} + FOLDERID_Videos = &KNOWNFOLDERID{0x18989b1d, 0x99b5, 0x455b, [8]byte{0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc}} + FOLDERID_Ringtones = &KNOWNFOLDERID{0xc870044b, 0xf49e, 0x4126, [8]byte{0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8}} + FOLDERID_PublicPictures = &KNOWNFOLDERID{0xb6ebfb86, 0x6907, 0x413c, [8]byte{0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5}} + FOLDERID_PublicMusic = &KNOWNFOLDERID{0x3214fab5, 0x9757, 0x4298, [8]byte{0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff}} + FOLDERID_PublicVideos = &KNOWNFOLDERID{0x2400183a, 0x6185, 0x49fb, [8]byte{0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3}} + FOLDERID_PublicRingtones = &KNOWNFOLDERID{0xe555ab60, 0x153b, 0x4d17, [8]byte{0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec}} + FOLDERID_ResourceDir = &KNOWNFOLDERID{0x8ad10c31, 0x2adb, 0x4296, [8]byte{0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72}} + FOLDERID_LocalizedResourcesDir = &KNOWNFOLDERID{0x2a00375e, 0x224c, 0x49de, [8]byte{0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc}} + FOLDERID_CommonOEMLinks = &KNOWNFOLDERID{0xc1bae2d0, 0x10df, 0x4334, [8]byte{0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d}} + FOLDERID_CDBurning = &KNOWNFOLDERID{0x9e52ab10, 0xf80d, 0x49df, [8]byte{0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55}} + FOLDERID_UserProfiles = &KNOWNFOLDERID{0x0762d272, 0xc50a, 0x4bb0, [8]byte{0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80}} + FOLDERID_Playlists = &KNOWNFOLDERID{0xde92c1c7, 0x837f, 0x4f69, [8]byte{0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23}} + FOLDERID_SamplePlaylists = &KNOWNFOLDERID{0x15ca69b3, 0x30ee, 0x49c1, [8]byte{0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5}} + FOLDERID_SampleMusic = &KNOWNFOLDERID{0xb250c668, 0xf57d, 0x4ee1, [8]byte{0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f}} + FOLDERID_SamplePictures = &KNOWNFOLDERID{0xc4900540, 0x2379, 0x4c75, [8]byte{0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b}} + FOLDERID_SampleVideos = &KNOWNFOLDERID{0x859ead94, 0x2e85, 0x48ad, [8]byte{0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd}} + FOLDERID_PhotoAlbums = &KNOWNFOLDERID{0x69d2cf90, 0xfc33, 0x4fb7, [8]byte{0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c}} + FOLDERID_Public = &KNOWNFOLDERID{0xdfdf76a2, 0xc82a, 0x4d63, [8]byte{0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85}} + FOLDERID_ChangeRemovePrograms = &KNOWNFOLDERID{0xdf7266ac, 0x9274, 0x4867, [8]byte{0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d}} + FOLDERID_AppUpdates = &KNOWNFOLDERID{0xa305ce99, 0xf527, 0x492b, [8]byte{0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4}} + FOLDERID_AddNewPrograms = &KNOWNFOLDERID{0xde61d971, 0x5ebc, 0x4f02, [8]byte{0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04}} + FOLDERID_Downloads = &KNOWNFOLDERID{0x374de290, 0x123f, 0x4565, [8]byte{0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b}} + FOLDERID_PublicDownloads = &KNOWNFOLDERID{0x3d644c9b, 0x1fb8, 0x4f30, [8]byte{0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0}} + FOLDERID_SavedSearches = &KNOWNFOLDERID{0x7d1d3a04, 0xdebb, 0x4115, [8]byte{0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda}} + FOLDERID_QuickLaunch = &KNOWNFOLDERID{0x52a4f021, 0x7b75, 0x48a9, [8]byte{0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f}} + FOLDERID_Contacts = &KNOWNFOLDERID{0x56784854, 0xc6cb, 0x462b, [8]byte{0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82}} + FOLDERID_SidebarParts = &KNOWNFOLDERID{0xa75d362e, 0x50fc, 0x4fb7, [8]byte{0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93}} + FOLDERID_SidebarDefaultParts = &KNOWNFOLDERID{0x7b396e54, 0x9ec5, 0x4300, [8]byte{0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26}} + FOLDERID_PublicGameTasks = &KNOWNFOLDERID{0xdebf2536, 0xe1a8, 0x4c59, [8]byte{0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea}} + FOLDERID_GameTasks = &KNOWNFOLDERID{0x054fae61, 0x4dd8, 0x4787, [8]byte{0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00}} + FOLDERID_SavedGames = &KNOWNFOLDERID{0x4c5c32ff, 0xbb9d, 0x43b0, [8]byte{0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4}} + FOLDERID_Games = &KNOWNFOLDERID{0xcac52c1a, 0xb53d, 0x4edc, [8]byte{0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34}} + FOLDERID_SEARCH_MAPI = &KNOWNFOLDERID{0x98ec0e18, 0x2098, 0x4d44, [8]byte{0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81}} + FOLDERID_SEARCH_CSC = &KNOWNFOLDERID{0xee32e446, 0x31ca, 0x4aba, [8]byte{0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e}} + FOLDERID_Links = &KNOWNFOLDERID{0xbfb9d5e0, 0xc6a9, 0x404c, [8]byte{0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68}} + FOLDERID_UsersFiles = &KNOWNFOLDERID{0xf3ce0f7c, 0x4901, 0x4acc, [8]byte{0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f}} + FOLDERID_UsersLibraries = &KNOWNFOLDERID{0xa302545d, 0xdeff, 0x464b, [8]byte{0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b}} + FOLDERID_SearchHome = &KNOWNFOLDERID{0x190337d1, 0xb8ca, 0x4121, [8]byte{0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a}} + FOLDERID_OriginalImages = &KNOWNFOLDERID{0x2c36c0aa, 0x5812, 0x4b87, [8]byte{0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39}} + FOLDERID_DocumentsLibrary = &KNOWNFOLDERID{0x7b0db17d, 0x9cd2, 0x4a93, [8]byte{0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c}} + FOLDERID_MusicLibrary = &KNOWNFOLDERID{0x2112ab0a, 0xc86a, 0x4ffe, [8]byte{0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e}} + FOLDERID_PicturesLibrary = &KNOWNFOLDERID{0xa990ae9f, 0xa03b, 0x4e80, [8]byte{0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04}} + FOLDERID_VideosLibrary = &KNOWNFOLDERID{0x491e922f, 0x5643, 0x4af4, [8]byte{0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74}} + FOLDERID_RecordedTVLibrary = &KNOWNFOLDERID{0x1a6fdba2, 0xf42d, 0x4358, [8]byte{0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5}} + FOLDERID_HomeGroup = &KNOWNFOLDERID{0x52528a6b, 0xb9e3, 0x4add, [8]byte{0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d}} + FOLDERID_HomeGroupCurrentUser = &KNOWNFOLDERID{0x9b74b6a3, 0x0dfd, 0x4f11, [8]byte{0x9e, 0x78, 0x5f, 0x78, 0x00, 0xf2, 0xe7, 0x72}} + FOLDERID_DeviceMetadataStore = &KNOWNFOLDERID{0x5ce4a5e9, 0xe4eb, 0x479d, [8]byte{0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55}} + FOLDERID_Libraries = &KNOWNFOLDERID{0x1b3ea5dc, 0xb587, 0x4786, [8]byte{0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae}} + FOLDERID_PublicLibraries = &KNOWNFOLDERID{0x48daf80b, 0xe6cf, 0x4f4e, [8]byte{0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84}} + FOLDERID_UserPinned = &KNOWNFOLDERID{0x9e3995ab, 0x1f9c, 0x4f13, [8]byte{0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74}} + FOLDERID_ImplicitAppShortcuts = &KNOWNFOLDERID{0xbcb5256f, 0x79f6, 0x4cee, [8]byte{0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46}} + FOLDERID_AccountPictures = &KNOWNFOLDERID{0x008ca0b1, 0x55b4, 0x4c56, [8]byte{0xb8, 0xa8, 0x4d, 0xe4, 0xb2, 0x99, 0xd3, 0xbe}} + FOLDERID_PublicUserTiles = &KNOWNFOLDERID{0x0482af6c, 0x08f1, 0x4c34, [8]byte{0x8c, 0x90, 0xe1, 0x7e, 0xc9, 0x8b, 0x1e, 0x17}} + FOLDERID_AppsFolder = &KNOWNFOLDERID{0x1e87508d, 0x89c2, 0x42f0, [8]byte{0x8a, 0x7e, 0x64, 0x5a, 0x0f, 0x50, 0xca, 0x58}} + FOLDERID_StartMenuAllPrograms = &KNOWNFOLDERID{0xf26305ef, 0x6948, 0x40b9, [8]byte{0xb2, 0x55, 0x81, 0x45, 0x3d, 0x09, 0xc7, 0x85}} + FOLDERID_CommonStartMenuPlaces = &KNOWNFOLDERID{0xa440879f, 0x87a0, 0x4f7d, [8]byte{0xb7, 0x00, 0x02, 0x07, 0xb9, 0x66, 0x19, 0x4a}} + FOLDERID_ApplicationShortcuts = &KNOWNFOLDERID{0xa3918781, 0xe5f2, 0x4890, [8]byte{0xb3, 0xd9, 0xa7, 0xe5, 0x43, 0x32, 0x32, 0x8c}} + FOLDERID_RoamingTiles = &KNOWNFOLDERID{0x00bcfc5a, 0xed94, 0x4e48, [8]byte{0x96, 0xa1, 0x3f, 0x62, 0x17, 0xf2, 0x19, 0x90}} + FOLDERID_RoamedTileImages = &KNOWNFOLDERID{0xaaa8d5a5, 0xf1d6, 0x4259, [8]byte{0xba, 0xa8, 0x78, 0xe7, 0xef, 0x60, 0x83, 0x5e}} + FOLDERID_Screenshots = &KNOWNFOLDERID{0xb7bede81, 0xdf94, 0x4682, [8]byte{0xa7, 0xd8, 0x57, 0xa5, 0x26, 0x20, 0xb8, 0x6f}} + FOLDERID_CameraRoll = &KNOWNFOLDERID{0xab5fb87b, 0x7ce2, 0x4f83, [8]byte{0x91, 0x5d, 0x55, 0x08, 0x46, 0xc9, 0x53, 0x7b}} + FOLDERID_SkyDrive = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}} + FOLDERID_OneDrive = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}} + FOLDERID_SkyDriveDocuments = &KNOWNFOLDERID{0x24d89e24, 0x2f19, 0x4534, [8]byte{0x9d, 0xde, 0x6a, 0x66, 0x71, 0xfb, 0xb8, 0xfe}} + FOLDERID_SkyDrivePictures = &KNOWNFOLDERID{0x339719b5, 0x8c47, 0x4894, [8]byte{0x94, 0xc2, 0xd8, 0xf7, 0x7a, 0xdd, 0x44, 0xa6}} + FOLDERID_SkyDriveMusic = &KNOWNFOLDERID{0xc3f2459e, 0x80d6, 0x45dc, [8]byte{0xbf, 0xef, 0x1f, 0x76, 0x9f, 0x2b, 0xe7, 0x30}} + FOLDERID_SkyDriveCameraRoll = &KNOWNFOLDERID{0x767e6811, 0x49cb, 0x4273, [8]byte{0x87, 0xc2, 0x20, 0xf3, 0x55, 0xe1, 0x08, 0x5b}} + FOLDERID_SearchHistory = &KNOWNFOLDERID{0x0d4c3db6, 0x03a3, 0x462f, [8]byte{0xa0, 0xe6, 0x08, 0x92, 0x4c, 0x41, 0xb5, 0xd4}} + FOLDERID_SearchTemplates = &KNOWNFOLDERID{0x7e636bfe, 0xdfa9, 0x4d5e, [8]byte{0xb4, 0x56, 0xd7, 0xb3, 0x98, 0x51, 0xd8, 0xa9}} + FOLDERID_CameraRollLibrary = &KNOWNFOLDERID{0x2b20df75, 0x1eda, 0x4039, [8]byte{0x80, 0x97, 0x38, 0x79, 0x82, 0x27, 0xd5, 0xb7}} + FOLDERID_SavedPictures = &KNOWNFOLDERID{0x3b193882, 0xd3ad, 0x4eab, [8]byte{0x96, 0x5a, 0x69, 0x82, 0x9d, 0x1f, 0xb5, 0x9f}} + FOLDERID_SavedPicturesLibrary = &KNOWNFOLDERID{0xe25b5812, 0xbe88, 0x4bd9, [8]byte{0x94, 0xb0, 0x29, 0x23, 0x34, 0x77, 0xb6, 0xc3}} + FOLDERID_RetailDemo = &KNOWNFOLDERID{0x12d4c69e, 0x24ad, 0x4923, [8]byte{0xbe, 0x19, 0x31, 0x32, 0x1c, 0x43, 0xa7, 0x67}} + FOLDERID_Device = &KNOWNFOLDERID{0x1c2ac1dc, 0x4358, 0x4b6c, [8]byte{0x97, 0x33, 0xaf, 0x21, 0x15, 0x65, 0x76, 0xf0}} + FOLDERID_DevelopmentFiles = &KNOWNFOLDERID{0xdbe8e08e, 0x3053, 0x4bbc, [8]byte{0xb1, 0x83, 0x2a, 0x7b, 0x2b, 0x19, 0x1e, 0x59}} + FOLDERID_Objects3D = &KNOWNFOLDERID{0x31c0dd25, 0x9439, 0x4f12, [8]byte{0xbf, 0x41, 0x7f, 0xf4, 0xed, 0xa3, 0x87, 0x22}} + FOLDERID_AppCaptures = &KNOWNFOLDERID{0xedc0fe71, 0x98d8, 0x4f4a, [8]byte{0xb9, 0x20, 0xc8, 0xdc, 0x13, 0x3c, 0xb1, 0x65}} + FOLDERID_LocalDocuments = &KNOWNFOLDERID{0xf42ee2d3, 0x909f, 0x4907, [8]byte{0x88, 0x71, 0x4c, 0x22, 0xfc, 0x0b, 0xf7, 0x56}} + FOLDERID_LocalPictures = &KNOWNFOLDERID{0x0ddd015d, 0xb06c, 0x45d5, [8]byte{0x8c, 0x4c, 0xf5, 0x97, 0x13, 0x85, 0x46, 0x39}} + FOLDERID_LocalVideos = &KNOWNFOLDERID{0x35286a68, 0x3c57, 0x41a1, [8]byte{0xbb, 0xb1, 0x0e, 0xae, 0x73, 0xd7, 0x6c, 0x95}} + FOLDERID_LocalMusic = &KNOWNFOLDERID{0xa0c69a99, 0x21c8, 0x4671, [8]byte{0x87, 0x03, 0x79, 0x34, 0x16, 0x2f, 0xcf, 0x1d}} + FOLDERID_LocalDownloads = &KNOWNFOLDERID{0x7d83ee9b, 0x2244, 0x4e70, [8]byte{0xb1, 0xf5, 0x53, 0x93, 0x04, 0x2a, 0xf1, 0xe4}} + FOLDERID_RecordedCalls = &KNOWNFOLDERID{0x2f8b40c2, 0x83ed, 0x48ee, [8]byte{0xb3, 0x83, 0xa1, 0xf1, 0x57, 0xec, 0x6f, 0x9a}} + FOLDERID_AllAppMods = &KNOWNFOLDERID{0x7ad67899, 0x66af, 0x43ba, [8]byte{0x91, 0x56, 0x6a, 0xad, 0x42, 0xe6, 0xc5, 0x96}} + FOLDERID_CurrentAppMods = &KNOWNFOLDERID{0x3db40b20, 0x2a30, 0x4dbe, [8]byte{0x91, 0x7e, 0x77, 0x1d, 0xd2, 0x1d, 0xd0, 0x99}} + FOLDERID_AppDataDesktop = &KNOWNFOLDERID{0xb2c5e279, 0x7add, 0x439f, [8]byte{0xb2, 0x8c, 0xc4, 0x1f, 0xe1, 0xbb, 0xf6, 0x72}} + FOLDERID_AppDataDocuments = &KNOWNFOLDERID{0x7be16610, 0x1f7f, 0x44ac, [8]byte{0xbf, 0xf0, 0x83, 0xe1, 0x5f, 0x2f, 0xfc, 0xa1}} + FOLDERID_AppDataFavorites = &KNOWNFOLDERID{0x7cfbefbc, 0xde1f, 0x45aa, [8]byte{0xb8, 0x43, 0xa5, 0x42, 0xac, 0x53, 0x6c, 0xc9}} + FOLDERID_AppDataProgramData = &KNOWNFOLDERID{0x559d40a3, 0xa036, 0x40fa, [8]byte{0xaf, 0x61, 0x84, 0xcb, 0x43, 0x0a, 0x4d, 0x34}} +) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go new file mode 100644 index 0000000000000..5c385580f68ba --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -0,0 +1,4357 @@ +// Code generated by 'go generate'; DO NOT EDIT. + +package windows + +import ( + "syscall" + "unsafe" +) + +var _ unsafe.Pointer + +// Do the interface allocations only once for common +// Errno values. +const ( + errnoERROR_IO_PENDING = 997 +) + +var ( + errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) + errERROR_EINVAL error = syscall.EINVAL +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return errERROR_EINVAL + case errnoERROR_IO_PENDING: + return errERROR_IO_PENDING + } + // TODO: add more here, after collecting data on the common + // error values see on Windows. (perhaps when running + // all.bat?) + return e +} + +var ( + modCfgMgr32 = NewLazySystemDLL("CfgMgr32.dll") + modadvapi32 = NewLazySystemDLL("advapi32.dll") + modcrypt32 = NewLazySystemDLL("crypt32.dll") + moddnsapi = NewLazySystemDLL("dnsapi.dll") + moddwmapi = NewLazySystemDLL("dwmapi.dll") + modiphlpapi = NewLazySystemDLL("iphlpapi.dll") + modkernel32 = NewLazySystemDLL("kernel32.dll") + modmswsock = NewLazySystemDLL("mswsock.dll") + modnetapi32 = NewLazySystemDLL("netapi32.dll") + modntdll = NewLazySystemDLL("ntdll.dll") + modole32 = NewLazySystemDLL("ole32.dll") + modpsapi = NewLazySystemDLL("psapi.dll") + modsechost = NewLazySystemDLL("sechost.dll") + modsecur32 = NewLazySystemDLL("secur32.dll") + modsetupapi = NewLazySystemDLL("setupapi.dll") + modshell32 = NewLazySystemDLL("shell32.dll") + moduser32 = NewLazySystemDLL("user32.dll") + moduserenv = NewLazySystemDLL("userenv.dll") + modversion = NewLazySystemDLL("version.dll") + modwinmm = NewLazySystemDLL("winmm.dll") + modwintrust = NewLazySystemDLL("wintrust.dll") + modws2_32 = NewLazySystemDLL("ws2_32.dll") + modwtsapi32 = NewLazySystemDLL("wtsapi32.dll") + + procCM_Get_DevNode_Status = modCfgMgr32.NewProc("CM_Get_DevNode_Status") + procCM_Get_Device_Interface_ListW = modCfgMgr32.NewProc("CM_Get_Device_Interface_ListW") + procCM_Get_Device_Interface_List_SizeW = modCfgMgr32.NewProc("CM_Get_Device_Interface_List_SizeW") + procCM_MapCrToWin32Err = modCfgMgr32.NewProc("CM_MapCrToWin32Err") + procAdjustTokenGroups = modadvapi32.NewProc("AdjustTokenGroups") + procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") + procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid") + procBuildSecurityDescriptorW = modadvapi32.NewProc("BuildSecurityDescriptorW") + procChangeServiceConfig2W = modadvapi32.NewProc("ChangeServiceConfig2W") + procChangeServiceConfigW = modadvapi32.NewProc("ChangeServiceConfigW") + procCheckTokenMembership = modadvapi32.NewProc("CheckTokenMembership") + procCloseServiceHandle = modadvapi32.NewProc("CloseServiceHandle") + procControlService = modadvapi32.NewProc("ControlService") + procConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc("ConvertSecurityDescriptorToStringSecurityDescriptorW") + procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") + procConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc("ConvertStringSecurityDescriptorToSecurityDescriptorW") + procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") + procCopySid = modadvapi32.NewProc("CopySid") + procCreateProcessAsUserW = modadvapi32.NewProc("CreateProcessAsUserW") + procCreateServiceW = modadvapi32.NewProc("CreateServiceW") + procCreateWellKnownSid = modadvapi32.NewProc("CreateWellKnownSid") + procCryptAcquireContextW = modadvapi32.NewProc("CryptAcquireContextW") + procCryptGenRandom = modadvapi32.NewProc("CryptGenRandom") + procCryptReleaseContext = modadvapi32.NewProc("CryptReleaseContext") + procDeleteService = modadvapi32.NewProc("DeleteService") + procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource") + procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx") + procEnumDependentServicesW = modadvapi32.NewProc("EnumDependentServicesW") + procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") + procEqualSid = modadvapi32.NewProc("EqualSid") + procFreeSid = modadvapi32.NewProc("FreeSid") + procGetLengthSid = modadvapi32.NewProc("GetLengthSid") + procGetNamedSecurityInfoW = modadvapi32.NewProc("GetNamedSecurityInfoW") + procGetSecurityDescriptorControl = modadvapi32.NewProc("GetSecurityDescriptorControl") + procGetSecurityDescriptorDacl = modadvapi32.NewProc("GetSecurityDescriptorDacl") + procGetSecurityDescriptorGroup = modadvapi32.NewProc("GetSecurityDescriptorGroup") + procGetSecurityDescriptorLength = modadvapi32.NewProc("GetSecurityDescriptorLength") + procGetSecurityDescriptorOwner = modadvapi32.NewProc("GetSecurityDescriptorOwner") + procGetSecurityDescriptorRMControl = modadvapi32.NewProc("GetSecurityDescriptorRMControl") + procGetSecurityDescriptorSacl = modadvapi32.NewProc("GetSecurityDescriptorSacl") + procGetSecurityInfo = modadvapi32.NewProc("GetSecurityInfo") + procGetSidIdentifierAuthority = modadvapi32.NewProc("GetSidIdentifierAuthority") + procGetSidSubAuthority = modadvapi32.NewProc("GetSidSubAuthority") + procGetSidSubAuthorityCount = modadvapi32.NewProc("GetSidSubAuthorityCount") + procGetTokenInformation = modadvapi32.NewProc("GetTokenInformation") + procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") + procInitializeSecurityDescriptor = modadvapi32.NewProc("InitializeSecurityDescriptor") + procInitiateSystemShutdownExW = modadvapi32.NewProc("InitiateSystemShutdownExW") + procIsTokenRestricted = modadvapi32.NewProc("IsTokenRestricted") + procIsValidSecurityDescriptor = modadvapi32.NewProc("IsValidSecurityDescriptor") + procIsValidSid = modadvapi32.NewProc("IsValidSid") + procIsWellKnownSid = modadvapi32.NewProc("IsWellKnownSid") + procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") + procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") + procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") + procMakeAbsoluteSD = modadvapi32.NewProc("MakeAbsoluteSD") + procMakeSelfRelativeSD = modadvapi32.NewProc("MakeSelfRelativeSD") + procNotifyServiceStatusChangeW = modadvapi32.NewProc("NotifyServiceStatusChangeW") + procOpenProcessToken = modadvapi32.NewProc("OpenProcessToken") + procOpenSCManagerW = modadvapi32.NewProc("OpenSCManagerW") + procOpenServiceW = modadvapi32.NewProc("OpenServiceW") + procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") + procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W") + procQueryServiceConfigW = modadvapi32.NewProc("QueryServiceConfigW") + procQueryServiceDynamicInformation = modadvapi32.NewProc("QueryServiceDynamicInformation") + procQueryServiceLockStatusW = modadvapi32.NewProc("QueryServiceLockStatusW") + procQueryServiceStatus = modadvapi32.NewProc("QueryServiceStatus") + procQueryServiceStatusEx = modadvapi32.NewProc("QueryServiceStatusEx") + procRegCloseKey = modadvapi32.NewProc("RegCloseKey") + procRegEnumKeyExW = modadvapi32.NewProc("RegEnumKeyExW") + procRegNotifyChangeKeyValue = modadvapi32.NewProc("RegNotifyChangeKeyValue") + procRegOpenKeyExW = modadvapi32.NewProc("RegOpenKeyExW") + procRegQueryInfoKeyW = modadvapi32.NewProc("RegQueryInfoKeyW") + procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW") + procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW") + procRegisterServiceCtrlHandlerExW = modadvapi32.NewProc("RegisterServiceCtrlHandlerExW") + procReportEventW = modadvapi32.NewProc("ReportEventW") + procRevertToSelf = modadvapi32.NewProc("RevertToSelf") + procSetEntriesInAclW = modadvapi32.NewProc("SetEntriesInAclW") + procSetKernelObjectSecurity = modadvapi32.NewProc("SetKernelObjectSecurity") + procSetNamedSecurityInfoW = modadvapi32.NewProc("SetNamedSecurityInfoW") + procSetSecurityDescriptorControl = modadvapi32.NewProc("SetSecurityDescriptorControl") + procSetSecurityDescriptorDacl = modadvapi32.NewProc("SetSecurityDescriptorDacl") + procSetSecurityDescriptorGroup = modadvapi32.NewProc("SetSecurityDescriptorGroup") + procSetSecurityDescriptorOwner = modadvapi32.NewProc("SetSecurityDescriptorOwner") + procSetSecurityDescriptorRMControl = modadvapi32.NewProc("SetSecurityDescriptorRMControl") + procSetSecurityDescriptorSacl = modadvapi32.NewProc("SetSecurityDescriptorSacl") + procSetSecurityInfo = modadvapi32.NewProc("SetSecurityInfo") + procSetServiceStatus = modadvapi32.NewProc("SetServiceStatus") + procSetThreadToken = modadvapi32.NewProc("SetThreadToken") + procSetTokenInformation = modadvapi32.NewProc("SetTokenInformation") + procStartServiceCtrlDispatcherW = modadvapi32.NewProc("StartServiceCtrlDispatcherW") + procStartServiceW = modadvapi32.NewProc("StartServiceW") + procCertAddCertificateContextToStore = modcrypt32.NewProc("CertAddCertificateContextToStore") + procCertCloseStore = modcrypt32.NewProc("CertCloseStore") + procCertCreateCertificateContext = modcrypt32.NewProc("CertCreateCertificateContext") + procCertDeleteCertificateFromStore = modcrypt32.NewProc("CertDeleteCertificateFromStore") + procCertDuplicateCertificateContext = modcrypt32.NewProc("CertDuplicateCertificateContext") + procCertEnumCertificatesInStore = modcrypt32.NewProc("CertEnumCertificatesInStore") + procCertFindCertificateInStore = modcrypt32.NewProc("CertFindCertificateInStore") + procCertFindChainInStore = modcrypt32.NewProc("CertFindChainInStore") + procCertFindExtension = modcrypt32.NewProc("CertFindExtension") + procCertFreeCertificateChain = modcrypt32.NewProc("CertFreeCertificateChain") + procCertFreeCertificateContext = modcrypt32.NewProc("CertFreeCertificateContext") + procCertGetCertificateChain = modcrypt32.NewProc("CertGetCertificateChain") + procCertGetNameStringW = modcrypt32.NewProc("CertGetNameStringW") + procCertOpenStore = modcrypt32.NewProc("CertOpenStore") + procCertOpenSystemStoreW = modcrypt32.NewProc("CertOpenSystemStoreW") + procCertVerifyCertificateChainPolicy = modcrypt32.NewProc("CertVerifyCertificateChainPolicy") + procCryptAcquireCertificatePrivateKey = modcrypt32.NewProc("CryptAcquireCertificatePrivateKey") + procCryptDecodeObject = modcrypt32.NewProc("CryptDecodeObject") + procCryptProtectData = modcrypt32.NewProc("CryptProtectData") + procCryptQueryObject = modcrypt32.NewProc("CryptQueryObject") + procCryptUnprotectData = modcrypt32.NewProc("CryptUnprotectData") + procPFXImportCertStore = modcrypt32.NewProc("PFXImportCertStore") + procDnsNameCompare_W = moddnsapi.NewProc("DnsNameCompare_W") + procDnsQuery_W = moddnsapi.NewProc("DnsQuery_W") + procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") + procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute") + procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute") + procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") + procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") + procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") + procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") + procCancelIo = modkernel32.NewProc("CancelIo") + procCancelIoEx = modkernel32.NewProc("CancelIoEx") + procCloseHandle = modkernel32.NewProc("CloseHandle") + procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe") + procCreateDirectoryW = modkernel32.NewProc("CreateDirectoryW") + procCreateEventExW = modkernel32.NewProc("CreateEventExW") + procCreateEventW = modkernel32.NewProc("CreateEventW") + procCreateFileMappingW = modkernel32.NewProc("CreateFileMappingW") + procCreateFileW = modkernel32.NewProc("CreateFileW") + procCreateHardLinkW = modkernel32.NewProc("CreateHardLinkW") + procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") + procCreateJobObjectW = modkernel32.NewProc("CreateJobObjectW") + procCreateMutexExW = modkernel32.NewProc("CreateMutexExW") + procCreateMutexW = modkernel32.NewProc("CreateMutexW") + procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW") + procCreatePipe = modkernel32.NewProc("CreatePipe") + procCreateProcessW = modkernel32.NewProc("CreateProcessW") + procCreateSymbolicLinkW = modkernel32.NewProc("CreateSymbolicLinkW") + procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot") + procDefineDosDeviceW = modkernel32.NewProc("DefineDosDeviceW") + procDeleteFileW = modkernel32.NewProc("DeleteFileW") + procDeleteProcThreadAttributeList = modkernel32.NewProc("DeleteProcThreadAttributeList") + procDeleteVolumeMountPointW = modkernel32.NewProc("DeleteVolumeMountPointW") + procDeviceIoControl = modkernel32.NewProc("DeviceIoControl") + procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") + procExitProcess = modkernel32.NewProc("ExitProcess") + procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW") + procFindClose = modkernel32.NewProc("FindClose") + procFindCloseChangeNotification = modkernel32.NewProc("FindCloseChangeNotification") + procFindFirstChangeNotificationW = modkernel32.NewProc("FindFirstChangeNotificationW") + procFindFirstFileW = modkernel32.NewProc("FindFirstFileW") + procFindFirstVolumeMountPointW = modkernel32.NewProc("FindFirstVolumeMountPointW") + procFindFirstVolumeW = modkernel32.NewProc("FindFirstVolumeW") + procFindNextChangeNotification = modkernel32.NewProc("FindNextChangeNotification") + procFindNextFileW = modkernel32.NewProc("FindNextFileW") + procFindNextVolumeMountPointW = modkernel32.NewProc("FindNextVolumeMountPointW") + procFindNextVolumeW = modkernel32.NewProc("FindNextVolumeW") + procFindResourceW = modkernel32.NewProc("FindResourceW") + procFindVolumeClose = modkernel32.NewProc("FindVolumeClose") + procFindVolumeMountPointClose = modkernel32.NewProc("FindVolumeMountPointClose") + procFlushFileBuffers = modkernel32.NewProc("FlushFileBuffers") + procFlushViewOfFile = modkernel32.NewProc("FlushViewOfFile") + procFormatMessageW = modkernel32.NewProc("FormatMessageW") + procFreeEnvironmentStringsW = modkernel32.NewProc("FreeEnvironmentStringsW") + procFreeLibrary = modkernel32.NewProc("FreeLibrary") + procGenerateConsoleCtrlEvent = modkernel32.NewProc("GenerateConsoleCtrlEvent") + procGetACP = modkernel32.NewProc("GetACP") + procGetActiveProcessorCount = modkernel32.NewProc("GetActiveProcessorCount") + procGetCommTimeouts = modkernel32.NewProc("GetCommTimeouts") + procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") + procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") + procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo") + procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") + procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") + procGetCurrentThreadId = modkernel32.NewProc("GetCurrentThreadId") + procGetDiskFreeSpaceExW = modkernel32.NewProc("GetDiskFreeSpaceExW") + procGetDriveTypeW = modkernel32.NewProc("GetDriveTypeW") + procGetEnvironmentStringsW = modkernel32.NewProc("GetEnvironmentStringsW") + procGetEnvironmentVariableW = modkernel32.NewProc("GetEnvironmentVariableW") + procGetExitCodeProcess = modkernel32.NewProc("GetExitCodeProcess") + procGetFileAttributesExW = modkernel32.NewProc("GetFileAttributesExW") + procGetFileAttributesW = modkernel32.NewProc("GetFileAttributesW") + procGetFileInformationByHandle = modkernel32.NewProc("GetFileInformationByHandle") + procGetFileInformationByHandleEx = modkernel32.NewProc("GetFileInformationByHandleEx") + procGetFileType = modkernel32.NewProc("GetFileType") + procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW") + procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW") + procGetLargePageMinimum = modkernel32.NewProc("GetLargePageMinimum") + procGetLastError = modkernel32.NewProc("GetLastError") + procGetLogicalDriveStringsW = modkernel32.NewProc("GetLogicalDriveStringsW") + procGetLogicalDrives = modkernel32.NewProc("GetLogicalDrives") + procGetLongPathNameW = modkernel32.NewProc("GetLongPathNameW") + procGetMaximumProcessorCount = modkernel32.NewProc("GetMaximumProcessorCount") + procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW") + procGetModuleHandleExW = modkernel32.NewProc("GetModuleHandleExW") + procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") + procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") + procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult") + procGetPriorityClass = modkernel32.NewProc("GetPriorityClass") + procGetProcAddress = modkernel32.NewProc("GetProcAddress") + procGetProcessId = modkernel32.NewProc("GetProcessId") + procGetProcessPreferredUILanguages = modkernel32.NewProc("GetProcessPreferredUILanguages") + procGetProcessShutdownParameters = modkernel32.NewProc("GetProcessShutdownParameters") + procGetProcessTimes = modkernel32.NewProc("GetProcessTimes") + procGetProcessWorkingSetSizeEx = modkernel32.NewProc("GetProcessWorkingSetSizeEx") + procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") + procGetShortPathNameW = modkernel32.NewProc("GetShortPathNameW") + procGetStartupInfoW = modkernel32.NewProc("GetStartupInfoW") + procGetStdHandle = modkernel32.NewProc("GetStdHandle") + procGetSystemDirectoryW = modkernel32.NewProc("GetSystemDirectoryW") + procGetSystemPreferredUILanguages = modkernel32.NewProc("GetSystemPreferredUILanguages") + procGetSystemTimeAsFileTime = modkernel32.NewProc("GetSystemTimeAsFileTime") + procGetSystemTimePreciseAsFileTime = modkernel32.NewProc("GetSystemTimePreciseAsFileTime") + procGetSystemWindowsDirectoryW = modkernel32.NewProc("GetSystemWindowsDirectoryW") + procGetTempPathW = modkernel32.NewProc("GetTempPathW") + procGetThreadPreferredUILanguages = modkernel32.NewProc("GetThreadPreferredUILanguages") + procGetTickCount64 = modkernel32.NewProc("GetTickCount64") + procGetTimeZoneInformation = modkernel32.NewProc("GetTimeZoneInformation") + procGetUserPreferredUILanguages = modkernel32.NewProc("GetUserPreferredUILanguages") + procGetVersion = modkernel32.NewProc("GetVersion") + procGetVolumeInformationByHandleW = modkernel32.NewProc("GetVolumeInformationByHandleW") + procGetVolumeInformationW = modkernel32.NewProc("GetVolumeInformationW") + procGetVolumeNameForVolumeMountPointW = modkernel32.NewProc("GetVolumeNameForVolumeMountPointW") + procGetVolumePathNameW = modkernel32.NewProc("GetVolumePathNameW") + procGetVolumePathNamesForVolumeNameW = modkernel32.NewProc("GetVolumePathNamesForVolumeNameW") + procGetWindowsDirectoryW = modkernel32.NewProc("GetWindowsDirectoryW") + procInitializeProcThreadAttributeList = modkernel32.NewProc("InitializeProcThreadAttributeList") + procIsWow64Process = modkernel32.NewProc("IsWow64Process") + procIsWow64Process2 = modkernel32.NewProc("IsWow64Process2") + procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW") + procLoadLibraryW = modkernel32.NewProc("LoadLibraryW") + procLoadResource = modkernel32.NewProc("LoadResource") + procLocalAlloc = modkernel32.NewProc("LocalAlloc") + procLocalFree = modkernel32.NewProc("LocalFree") + procLockFileEx = modkernel32.NewProc("LockFileEx") + procLockResource = modkernel32.NewProc("LockResource") + procMapViewOfFile = modkernel32.NewProc("MapViewOfFile") + procModule32FirstW = modkernel32.NewProc("Module32FirstW") + procModule32NextW = modkernel32.NewProc("Module32NextW") + procMoveFileExW = modkernel32.NewProc("MoveFileExW") + procMoveFileW = modkernel32.NewProc("MoveFileW") + procMultiByteToWideChar = modkernel32.NewProc("MultiByteToWideChar") + procOpenEventW = modkernel32.NewProc("OpenEventW") + procOpenMutexW = modkernel32.NewProc("OpenMutexW") + procOpenProcess = modkernel32.NewProc("OpenProcess") + procOpenThread = modkernel32.NewProc("OpenThread") + procPostQueuedCompletionStatus = modkernel32.NewProc("PostQueuedCompletionStatus") + procProcess32FirstW = modkernel32.NewProc("Process32FirstW") + procProcess32NextW = modkernel32.NewProc("Process32NextW") + procProcessIdToSessionId = modkernel32.NewProc("ProcessIdToSessionId") + procPulseEvent = modkernel32.NewProc("PulseEvent") + procQueryDosDeviceW = modkernel32.NewProc("QueryDosDeviceW") + procQueryFullProcessImageNameW = modkernel32.NewProc("QueryFullProcessImageNameW") + procQueryInformationJobObject = modkernel32.NewProc("QueryInformationJobObject") + procReadConsoleW = modkernel32.NewProc("ReadConsoleW") + procReadDirectoryChangesW = modkernel32.NewProc("ReadDirectoryChangesW") + procReadFile = modkernel32.NewProc("ReadFile") + procReadProcessMemory = modkernel32.NewProc("ReadProcessMemory") + procReleaseMutex = modkernel32.NewProc("ReleaseMutex") + procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW") + procResetEvent = modkernel32.NewProc("ResetEvent") + procResumeThread = modkernel32.NewProc("ResumeThread") + procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") + procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") + procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") + procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories") + procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW") + procSetEndOfFile = modkernel32.NewProc("SetEndOfFile") + procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW") + procSetErrorMode = modkernel32.NewProc("SetErrorMode") + procSetEvent = modkernel32.NewProc("SetEvent") + procSetFileAttributesW = modkernel32.NewProc("SetFileAttributesW") + procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") + procSetFileInformationByHandle = modkernel32.NewProc("SetFileInformationByHandle") + procSetFilePointer = modkernel32.NewProc("SetFilePointer") + procSetFileTime = modkernel32.NewProc("SetFileTime") + procSetHandleInformation = modkernel32.NewProc("SetHandleInformation") + procSetInformationJobObject = modkernel32.NewProc("SetInformationJobObject") + procSetNamedPipeHandleState = modkernel32.NewProc("SetNamedPipeHandleState") + procSetPriorityClass = modkernel32.NewProc("SetPriorityClass") + procSetProcessPriorityBoost = modkernel32.NewProc("SetProcessPriorityBoost") + procSetProcessShutdownParameters = modkernel32.NewProc("SetProcessShutdownParameters") + procSetProcessWorkingSetSizeEx = modkernel32.NewProc("SetProcessWorkingSetSizeEx") + procSetStdHandle = modkernel32.NewProc("SetStdHandle") + procSetVolumeLabelW = modkernel32.NewProc("SetVolumeLabelW") + procSetVolumeMountPointW = modkernel32.NewProc("SetVolumeMountPointW") + procSizeofResource = modkernel32.NewProc("SizeofResource") + procSleepEx = modkernel32.NewProc("SleepEx") + procTerminateJobObject = modkernel32.NewProc("TerminateJobObject") + procTerminateProcess = modkernel32.NewProc("TerminateProcess") + procThread32First = modkernel32.NewProc("Thread32First") + procThread32Next = modkernel32.NewProc("Thread32Next") + procUnlockFileEx = modkernel32.NewProc("UnlockFileEx") + procUnmapViewOfFile = modkernel32.NewProc("UnmapViewOfFile") + procUpdateProcThreadAttribute = modkernel32.NewProc("UpdateProcThreadAttribute") + procVirtualAlloc = modkernel32.NewProc("VirtualAlloc") + procVirtualFree = modkernel32.NewProc("VirtualFree") + procVirtualLock = modkernel32.NewProc("VirtualLock") + procVirtualProtect = modkernel32.NewProc("VirtualProtect") + procVirtualProtectEx = modkernel32.NewProc("VirtualProtectEx") + procVirtualQuery = modkernel32.NewProc("VirtualQuery") + procVirtualQueryEx = modkernel32.NewProc("VirtualQueryEx") + procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") + procWTSGetActiveConsoleSessionId = modkernel32.NewProc("WTSGetActiveConsoleSessionId") + procWaitForMultipleObjects = modkernel32.NewProc("WaitForMultipleObjects") + procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject") + procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") + procWriteFile = modkernel32.NewProc("WriteFile") + procWriteProcessMemory = modkernel32.NewProc("WriteProcessMemory") + procAcceptEx = modmswsock.NewProc("AcceptEx") + procGetAcceptExSockaddrs = modmswsock.NewProc("GetAcceptExSockaddrs") + procTransmitFile = modmswsock.NewProc("TransmitFile") + procNetApiBufferFree = modnetapi32.NewProc("NetApiBufferFree") + procNetGetJoinInformation = modnetapi32.NewProc("NetGetJoinInformation") + procNetUserGetInfo = modnetapi32.NewProc("NetUserGetInfo") + procNtCreateFile = modntdll.NewProc("NtCreateFile") + procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") + procNtQueryInformationProcess = modntdll.NewProc("NtQueryInformationProcess") + procNtQuerySystemInformation = modntdll.NewProc("NtQuerySystemInformation") + procNtSetInformationFile = modntdll.NewProc("NtSetInformationFile") + procNtSetInformationProcess = modntdll.NewProc("NtSetInformationProcess") + procNtSetSystemInformation = modntdll.NewProc("NtSetSystemInformation") + procRtlAddFunctionTable = modntdll.NewProc("RtlAddFunctionTable") + procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl") + procRtlDeleteFunctionTable = modntdll.NewProc("RtlDeleteFunctionTable") + procRtlDosPathNameToNtPathName_U_WithStatus = modntdll.NewProc("RtlDosPathNameToNtPathName_U_WithStatus") + procRtlDosPathNameToRelativeNtPathName_U_WithStatus = modntdll.NewProc("RtlDosPathNameToRelativeNtPathName_U_WithStatus") + procRtlGetCurrentPeb = modntdll.NewProc("RtlGetCurrentPeb") + procRtlGetNtVersionNumbers = modntdll.NewProc("RtlGetNtVersionNumbers") + procRtlGetVersion = modntdll.NewProc("RtlGetVersion") + procRtlInitString = modntdll.NewProc("RtlInitString") + procRtlInitUnicodeString = modntdll.NewProc("RtlInitUnicodeString") + procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb") + procCLSIDFromString = modole32.NewProc("CLSIDFromString") + procCoCreateGuid = modole32.NewProc("CoCreateGuid") + procCoGetObject = modole32.NewProc("CoGetObject") + procCoInitializeEx = modole32.NewProc("CoInitializeEx") + procCoTaskMemFree = modole32.NewProc("CoTaskMemFree") + procCoUninitialize = modole32.NewProc("CoUninitialize") + procStringFromGUID2 = modole32.NewProc("StringFromGUID2") + procEnumProcessModules = modpsapi.NewProc("EnumProcessModules") + procEnumProcessModulesEx = modpsapi.NewProc("EnumProcessModulesEx") + procEnumProcesses = modpsapi.NewProc("EnumProcesses") + procGetModuleBaseNameW = modpsapi.NewProc("GetModuleBaseNameW") + procGetModuleFileNameExW = modpsapi.NewProc("GetModuleFileNameExW") + procGetModuleInformation = modpsapi.NewProc("GetModuleInformation") + procQueryWorkingSetEx = modpsapi.NewProc("QueryWorkingSetEx") + procSubscribeServiceChangeNotifications = modsechost.NewProc("SubscribeServiceChangeNotifications") + procUnsubscribeServiceChangeNotifications = modsechost.NewProc("UnsubscribeServiceChangeNotifications") + procGetUserNameExW = modsecur32.NewProc("GetUserNameExW") + procTranslateNameW = modsecur32.NewProc("TranslateNameW") + procSetupDiBuildDriverInfoList = modsetupapi.NewProc("SetupDiBuildDriverInfoList") + procSetupDiCallClassInstaller = modsetupapi.NewProc("SetupDiCallClassInstaller") + procSetupDiCancelDriverInfoSearch = modsetupapi.NewProc("SetupDiCancelDriverInfoSearch") + procSetupDiClassGuidsFromNameExW = modsetupapi.NewProc("SetupDiClassGuidsFromNameExW") + procSetupDiClassNameFromGuidExW = modsetupapi.NewProc("SetupDiClassNameFromGuidExW") + procSetupDiCreateDeviceInfoListExW = modsetupapi.NewProc("SetupDiCreateDeviceInfoListExW") + procSetupDiCreateDeviceInfoW = modsetupapi.NewProc("SetupDiCreateDeviceInfoW") + procSetupDiDestroyDeviceInfoList = modsetupapi.NewProc("SetupDiDestroyDeviceInfoList") + procSetupDiDestroyDriverInfoList = modsetupapi.NewProc("SetupDiDestroyDriverInfoList") + procSetupDiEnumDeviceInfo = modsetupapi.NewProc("SetupDiEnumDeviceInfo") + procSetupDiEnumDriverInfoW = modsetupapi.NewProc("SetupDiEnumDriverInfoW") + procSetupDiGetClassDevsExW = modsetupapi.NewProc("SetupDiGetClassDevsExW") + procSetupDiGetClassInstallParamsW = modsetupapi.NewProc("SetupDiGetClassInstallParamsW") + procSetupDiGetDeviceInfoListDetailW = modsetupapi.NewProc("SetupDiGetDeviceInfoListDetailW") + procSetupDiGetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiGetDeviceInstallParamsW") + procSetupDiGetDeviceInstanceIdW = modsetupapi.NewProc("SetupDiGetDeviceInstanceIdW") + procSetupDiGetDevicePropertyW = modsetupapi.NewProc("SetupDiGetDevicePropertyW") + procSetupDiGetDeviceRegistryPropertyW = modsetupapi.NewProc("SetupDiGetDeviceRegistryPropertyW") + procSetupDiGetDriverInfoDetailW = modsetupapi.NewProc("SetupDiGetDriverInfoDetailW") + procSetupDiGetSelectedDevice = modsetupapi.NewProc("SetupDiGetSelectedDevice") + procSetupDiGetSelectedDriverW = modsetupapi.NewProc("SetupDiGetSelectedDriverW") + procSetupDiOpenDevRegKey = modsetupapi.NewProc("SetupDiOpenDevRegKey") + procSetupDiSetClassInstallParamsW = modsetupapi.NewProc("SetupDiSetClassInstallParamsW") + procSetupDiSetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiSetDeviceInstallParamsW") + procSetupDiSetDeviceRegistryPropertyW = modsetupapi.NewProc("SetupDiSetDeviceRegistryPropertyW") + procSetupDiSetSelectedDevice = modsetupapi.NewProc("SetupDiSetSelectedDevice") + procSetupDiSetSelectedDriverW = modsetupapi.NewProc("SetupDiSetSelectedDriverW") + procSetupUninstallOEMInfW = modsetupapi.NewProc("SetupUninstallOEMInfW") + procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW") + procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath") + procShellExecuteW = modshell32.NewProc("ShellExecuteW") + procEnumChildWindows = moduser32.NewProc("EnumChildWindows") + procEnumWindows = moduser32.NewProc("EnumWindows") + procExitWindowsEx = moduser32.NewProc("ExitWindowsEx") + procGetClassNameW = moduser32.NewProc("GetClassNameW") + procGetDesktopWindow = moduser32.NewProc("GetDesktopWindow") + procGetForegroundWindow = moduser32.NewProc("GetForegroundWindow") + procGetGUIThreadInfo = moduser32.NewProc("GetGUIThreadInfo") + procGetShellWindow = moduser32.NewProc("GetShellWindow") + procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") + procIsWindow = moduser32.NewProc("IsWindow") + procIsWindowUnicode = moduser32.NewProc("IsWindowUnicode") + procIsWindowVisible = moduser32.NewProc("IsWindowVisible") + procMessageBoxW = moduser32.NewProc("MessageBoxW") + procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") + procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") + procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") + procGetFileVersionInfoSizeW = modversion.NewProc("GetFileVersionInfoSizeW") + procGetFileVersionInfoW = modversion.NewProc("GetFileVersionInfoW") + procVerQueryValueW = modversion.NewProc("VerQueryValueW") + proctimeBeginPeriod = modwinmm.NewProc("timeBeginPeriod") + proctimeEndPeriod = modwinmm.NewProc("timeEndPeriod") + procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx") + procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") + procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") + procWSACleanup = modws2_32.NewProc("WSACleanup") + procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") + procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") + procWSAIoctl = modws2_32.NewProc("WSAIoctl") + procWSALookupServiceBeginW = modws2_32.NewProc("WSALookupServiceBeginW") + procWSALookupServiceEnd = modws2_32.NewProc("WSALookupServiceEnd") + procWSALookupServiceNextW = modws2_32.NewProc("WSALookupServiceNextW") + procWSARecv = modws2_32.NewProc("WSARecv") + procWSARecvFrom = modws2_32.NewProc("WSARecvFrom") + procWSASend = modws2_32.NewProc("WSASend") + procWSASendTo = modws2_32.NewProc("WSASendTo") + procWSASocketW = modws2_32.NewProc("WSASocketW") + procWSAStartup = modws2_32.NewProc("WSAStartup") + procbind = modws2_32.NewProc("bind") + procclosesocket = modws2_32.NewProc("closesocket") + procconnect = modws2_32.NewProc("connect") + procgethostbyname = modws2_32.NewProc("gethostbyname") + procgetpeername = modws2_32.NewProc("getpeername") + procgetprotobyname = modws2_32.NewProc("getprotobyname") + procgetservbyname = modws2_32.NewProc("getservbyname") + procgetsockname = modws2_32.NewProc("getsockname") + procgetsockopt = modws2_32.NewProc("getsockopt") + proclisten = modws2_32.NewProc("listen") + procntohs = modws2_32.NewProc("ntohs") + procrecvfrom = modws2_32.NewProc("recvfrom") + procsendto = modws2_32.NewProc("sendto") + procsetsockopt = modws2_32.NewProc("setsockopt") + procshutdown = modws2_32.NewProc("shutdown") + procsocket = modws2_32.NewProc("socket") + procWTSEnumerateSessionsW = modwtsapi32.NewProc("WTSEnumerateSessionsW") + procWTSFreeMemory = modwtsapi32.NewProc("WTSFreeMemory") + procWTSQueryUserToken = modwtsapi32.NewProc("WTSQueryUserToken") +) + +func cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_Status.Addr(), 4, uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags), 0, 0) + ret = CONFIGRET(r0) + return +} + +func cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_ListW.Addr(), 5, uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags), 0) + ret = CONFIGRET(r0) + return +} + +func cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) { + r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_List_SizeW.Addr(), 4, uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags), 0, 0) + ret = CONFIGRET(r0) + return +} + +func cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) { + r0, _, _ := syscall.Syscall(procCM_MapCrToWin32Err.Addr(), 2, uintptr(configRet), uintptr(defaultWin32Error), 0) + ret = Errno(r0) + return +} + +func AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) { + var _p0 uint32 + if resetToDefault { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procAdjustTokenGroups.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) { + var _p0 uint32 + if disableAllPrivileges { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) { + r1, _, e1 := syscall.Syscall12(procAllocateAndInitializeSid.Addr(), 11, uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) { + r0, _, _ := syscall.Syscall9(procBuildSecurityDescriptorW.Addr(), 9, uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(countAccessEntries), uintptr(unsafe.Pointer(accessEntries)), uintptr(countAuditEntries), uintptr(unsafe.Pointer(auditEntries)), uintptr(unsafe.Pointer(oldSecurityDescriptor)), uintptr(unsafe.Pointer(sizeNewSecurityDescriptor)), uintptr(unsafe.Pointer(newSecurityDescriptor))) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) { + r1, _, e1 := syscall.Syscall(procChangeServiceConfig2W.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procChangeServiceConfigW.Addr(), 11, uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) { + r1, _, e1 := syscall.Syscall(procCheckTokenMembership.Addr(), 3, uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CloseServiceHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseServiceHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procControlService.Addr(), 3, uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(securityInformation), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(strLen)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) { + r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(str) + if err != nil { + return + } + return _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size) +} + +func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { + r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) { + r1, _, e1 := syscall.Syscall(procCopySid.Addr(), 3, uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) { + var _p0 uint32 + if inheritHandles { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall12(procCreateProcessAsUserW.Addr(), 11, uintptr(token), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall15(procCreateServiceW.Addr(), 13, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), 0, 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCreateWellKnownSid.Addr(), 4, uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCryptAcquireContextW.Addr(), 5, uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { + r1, _, e1 := syscall.Syscall(procCryptGenRandom.Addr(), 3, uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCryptReleaseContext.Addr(), 2, uintptr(provhandle), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DeleteService(service Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteService.Addr(), 1, uintptr(service), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DeregisterEventSource(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDeregisterEventSource.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) { + r1, _, e1 := syscall.Syscall6(procDuplicateTokenEx.Addr(), 6, uintptr(existingToken), uintptr(desiredAccess), uintptr(unsafe.Pointer(tokenAttributes)), uintptr(impersonationLevel), uintptr(tokenType), uintptr(unsafe.Pointer(newToken))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) { + r0, _, _ := syscall.Syscall(procEqualSid.Addr(), 2, uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)), 0) + isEqual = r0 != 0 + return +} + +func FreeSid(sid *SID) (err error) { + r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + +func GetLengthSid(sid *SID) (len uint32) { + r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + len = uint32(r0) + return +} + +func getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { + var _p0 *uint16 + _p0, ret = syscall.UTF16PtrFromString(objectName) + if ret != nil { + return + } + return _getNamedSecurityInfo(_p0, objectType, securityInformation, owner, group, dacl, sacl, sd) +} + +func _getNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { + r0, _, _ := syscall.Syscall9(procGetNamedSecurityInfoW.Addr(), 8, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(control)), uintptr(unsafe.Pointer(revision))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) { + var _p0 uint32 + if *daclPresent { + _p0 = 1 + } + var _p1 uint32 + if *daclDefaulted { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0) + *daclPresent = _p0 != 0 + *daclDefaulted = _p1 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) { + var _p0 uint32 + if *groupDefaulted { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(&_p0))) + *groupDefaulted = _p0 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) { + r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) + len = uint32(r0) + return +} + +func getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) { + var _p0 uint32 + if *ownerDefaulted { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(&_p0))) + *ownerDefaulted = _p0 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) { + r0, _, _ := syscall.Syscall(procGetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) { + var _p0 uint32 + if *saclPresent { + _p0 = 1 + } + var _p1 uint32 + if *saclDefaulted { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0) + *saclPresent = _p0 != 0 + *saclDefaulted = _p1 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { + r0, _, _ := syscall.Syscall9(procGetSecurityInfo.Addr(), 8, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) { + r0, _, _ := syscall.Syscall(procGetSidIdentifierAuthority.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + authority = (*SidIdentifierAuthority)(unsafe.Pointer(r0)) + return +} + +func getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) { + r0, _, _ := syscall.Syscall(procGetSidSubAuthority.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(index), 0) + subAuthority = (*uint32)(unsafe.Pointer(r0)) + return +} + +func getSidSubAuthorityCount(sid *SID) (count *uint8) { + r0, _, _ := syscall.Syscall(procGetSidSubAuthorityCount.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + count = (*uint8)(unsafe.Pointer(r0)) + return +} + +func GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetTokenInformation.Addr(), 5, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ImpersonateSelf(impersonationlevel uint32) (err error) { + r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(impersonationlevel), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) { + r1, _, e1 := syscall.Syscall(procInitializeSecurityDescriptor.Addr(), 2, uintptr(unsafe.Pointer(absoluteSD)), uintptr(revision), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) { + var _p0 uint32 + if forceAppsClosed { + _p0 = 1 + } + var _p1 uint32 + if rebootAfterShutdown { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procInitiateSystemShutdownExW.Addr(), 6, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(message)), uintptr(timeout), uintptr(_p0), uintptr(_p1), uintptr(reason)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func isTokenRestricted(tokenHandle Token) (ret bool, err error) { + r0, _, e1 := syscall.Syscall(procIsTokenRestricted.Addr(), 1, uintptr(tokenHandle), 0, 0) + ret = r0 != 0 + if !ret { + err = errnoErr(e1) + } + return +} + +func isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) { + r0, _, _ := syscall.Syscall(procIsValidSecurityDescriptor.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) + isValid = r0 != 0 + return +} + +func isValidSid(sid *SID) (isValid bool) { + r0, _, _ := syscall.Syscall(procIsValidSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + isValid = r0 != 0 + return +} + +func isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) { + r0, _, _ := syscall.Syscall(procIsWellKnownSid.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(sidType), 0) + isWellKnown = r0 != 0 + return +} + +func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) { + r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemname)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall12(procMakeAbsoluteSD.Addr(), 11, uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(absoluteSDSize)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclSize)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(saclSize)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(ownerSize)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(groupSize)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procMakeSelfRelativeSD.Addr(), 3, uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(selfRelativeSDSize))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) { + r0, _, _ := syscall.Syscall(procNotifyServiceStatusChangeW.Addr(), 3, uintptr(service), uintptr(notifyMask), uintptr(unsafe.Pointer(notifier))) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func OpenProcessToken(process Handle, access uint32, token *Token) (err error) { + r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(process), uintptr(access), uintptr(unsafe.Pointer(token))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procOpenSCManagerW.Addr(), 3, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procOpenServiceW.Addr(), 3, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) { + var _p0 uint32 + if openAsSelf { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(access), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceConfig2W.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceConfigW.Addr(), 4, uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) { + err = procQueryServiceDynamicInformation.Find() + if err != nil { + return + } + r1, _, e1 := syscall.Syscall(procQueryServiceDynamicInformation.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceLockStatusW.Addr(), 4, uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procQueryServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(status)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceStatusEx.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func RegCloseKey(key Handle) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegCloseKey.Addr(), 1, uintptr(key), 0, 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegEnumKeyExW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) { + var _p0 uint32 + if watchSubtree { + _p0 = 1 + } + var _p1 uint32 + if asynchronous { + _p1 = 1 + } + r0, _, _ := syscall.Syscall6(procRegNotifyChangeKeyValue.Addr(), 5, uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) { + r0, _, _ := syscall.Syscall12(procRegQueryInfoKeyW.Addr(), 12, uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegQueryValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procRegisterEventSourceW.Addr(), 2, uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)), 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procRegisterServiceCtrlHandlerExW.Addr(), 3, uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func RevertToSelf() (err error) { + r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) { + r0, _, _ := syscall.Syscall6(procSetEntriesInAclW.Addr(), 4, uintptr(countExplicitEntries), uintptr(unsafe.Pointer(explicitEntries)), uintptr(unsafe.Pointer(oldACL)), uintptr(unsafe.Pointer(newACL)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) { + r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { + var _p0 *uint16 + _p0, ret = syscall.UTF16PtrFromString(objectName) + if ret != nil { + return + } + return _SetNamedSecurityInfo(_p0, objectType, securityInformation, owner, group, dacl, sacl) +} + +func _SetNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { + r0, _, _ := syscall.Syscall9(procSetNamedSecurityInfoW.Addr(), 7, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) { + r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(controlBitsOfInterest), uintptr(controlBitsToSet)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) { + var _p0 uint32 + if daclPresent { + _p0 = 1 + } + var _p1 uint32 + if daclDefaulted { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(dacl)), uintptr(_p1), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) { + var _p0 uint32 + if groupDefaulted { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(_p0)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) { + var _p0 uint32 + if ownerDefaulted { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(_p0)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) { + syscall.Syscall(procSetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0) + return +} + +func setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) { + var _p0 uint32 + if saclPresent { + _p0 = 1 + } + var _p1 uint32 + if saclDefaulted { + _p1 = 1 + } + r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(sacl)), uintptr(_p1), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { + r0, _, _ := syscall.Syscall9(procSetSecurityInfo.Addr(), 7, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procSetServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(serviceStatus)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetThreadToken(thread *Handle, token Token) (err error) { + r1, _, e1 := syscall.Syscall(procSetThreadToken.Addr(), 2, uintptr(unsafe.Pointer(thread)), uintptr(token), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetTokenInformation.Addr(), 4, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { + r1, _, e1 := syscall.Syscall(procStartServiceCtrlDispatcherW.Addr(), 1, uintptr(unsafe.Pointer(serviceTable)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) { + r1, _, e1 := syscall.Syscall(procStartServiceW.Addr(), 3, uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) { + r1, _, e1 := syscall.Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertCloseStore(store Handle, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCertCloseStore.Addr(), 2, uintptr(store), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) { + r0, _, e1 := syscall.Syscall(procCertCreateCertificateContext.Addr(), 3, uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) + context = (*CertContext)(unsafe.Pointer(r0)) + if context == nil { + err = errnoErr(e1) + } + return +} + +func CertDeleteCertificateFromStore(certContext *CertContext) (err error) { + r1, _, e1 := syscall.Syscall(procCertDeleteCertificateFromStore.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) { + r0, _, _ := syscall.Syscall(procCertDuplicateCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + dupContext = (*CertContext)(unsafe.Pointer(r0)) + return +} + +func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) { + r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0) + context = (*CertContext)(unsafe.Pointer(r0)) + if context == nil { + err = errnoErr(e1) + } + return +} + +func CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) { + r0, _, e1 := syscall.Syscall6(procCertFindCertificateInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevCertContext))) + cert = (*CertContext)(unsafe.Pointer(r0)) + if cert == nil { + err = errnoErr(e1) + } + return +} + +func CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) { + r0, _, e1 := syscall.Syscall6(procCertFindChainInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevChainContext))) + certchain = (*CertChainContext)(unsafe.Pointer(r0)) + if certchain == nil { + err = errnoErr(e1) + } + return +} + +func CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) { + r0, _, _ := syscall.Syscall(procCertFindExtension.Addr(), 3, uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions))) + ret = (*CertExtension)(unsafe.Pointer(r0)) + return +} + +func CertFreeCertificateChain(ctx *CertChainContext) { + syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + return +} + +func CertFreeCertificateContext(ctx *CertContext) (err error) { + r1, _, e1 := syscall.Syscall(procCertFreeCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) { + r1, _, e1 := syscall.Syscall9(procCertGetCertificateChain.Addr(), 8, uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) { + r0, _, _ := syscall.Syscall6(procCertGetNameStringW.Addr(), 6, uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size)) + chars = uint32(r0) + return +} + +func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { + r0, _, e1 := syscall.Syscall(procCertOpenSystemStoreW.Addr(), 2, uintptr(hprov), uintptr(unsafe.Pointer(name)), 0) + store = Handle(r0) + if store == 0 { + err = errnoErr(e1) + } + return +} + +func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) { + r1, _, e1 := syscall.Syscall6(procCertVerifyCertificateChainPolicy.Addr(), 4, uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) { + var _p0 uint32 + if *callerFreeProvOrNCryptKey { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procCryptAcquireCertificatePrivateKey.Addr(), 6, uintptr(unsafe.Pointer(cert)), uintptr(flags), uintptr(parameters), uintptr(unsafe.Pointer(cryptProvOrNCryptKey)), uintptr(unsafe.Pointer(keySpec)), uintptr(unsafe.Pointer(&_p0))) + *callerFreeProvOrNCryptKey = _p0 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptDecodeObject.Addr(), 7, uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptProtectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) { + r1, _, e1 := syscall.Syscall12(procCryptQueryObject.Addr(), 11, uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptUnprotectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) { + r0, _, e1 := syscall.Syscall(procPFXImportCertStore.Addr(), 3, uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags)) + store = Handle(r0) + if store == 0 { + err = errnoErr(e1) + } + return +} + +func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) { + r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0) + same = r0 != 0 + return +} + +func DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { + var _p0 *uint16 + _p0, status = syscall.UTF16PtrFromString(name) + if status != nil { + return + } + return _DnsQuery(_p0, qtype, options, extra, qrs, pr) +} + +func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { + r0, _, _ := syscall.Syscall6(procDnsQuery_W.Addr(), 6, uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) + if r0 != 0 { + status = syscall.Errno(r0) + } + return +} + +func DnsRecordListFree(rl *DNSRecord, freetype uint32) { + syscall.Syscall(procDnsRecordListFree.Addr(), 2, uintptr(unsafe.Pointer(rl)), uintptr(freetype), 0) + return +} + +func DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) { + r0, _, _ := syscall.Syscall6(procDwmGetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) { + r0, _, _ := syscall.Syscall6(procDwmSetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) { + r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { + r0, _, _ := syscall.Syscall(procGetAdaptersInfo.Addr(), 2, uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) { + r0, _, _ := syscall.Syscall(procGetBestInterfaceEx.Addr(), 2, uintptr(sockaddr), uintptr(unsafe.Pointer(pdwBestIfIndex)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIfEntry(pIfRow *MibIfRow) (errcode error) { + r0, _, _ := syscall.Syscall(procGetIfEntry.Addr(), 1, uintptr(unsafe.Pointer(pIfRow)), 0, 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func AssignProcessToJobObject(job Handle, process Handle) (err error) { + r1, _, e1 := syscall.Syscall(procAssignProcessToJobObject.Addr(), 2, uintptr(job), uintptr(process), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CancelIo(s Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCancelIo.Addr(), 1, uintptr(s), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CancelIoEx(s Handle, o *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(s), uintptr(unsafe.Pointer(o)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CloseHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { + r1, _, e1 := syscall.Syscall(procCreateDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateEventExW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateFileMappingW.Addr(), 6, uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procCreateHardLinkW.Addr(), 3, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) + if r1&0xff == 0 { + err = errnoErr(e1) + } + return +} + +func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt), 0, 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procCreateJobObjectW.Addr(), 2, uintptr(unsafe.Pointer(jobAttr)), uintptr(unsafe.Pointer(name)), 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateMutexExW.Addr(), 4, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) { + var _p0 uint32 + if initialOwner { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procCreateMutexW.Addr(), 3, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(_p0), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 || e1 == ERROR_ALREADY_EXISTS { + err = errnoErr(e1) + } + return +} + +func CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCreatePipe.Addr(), 4, uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) { + var _p0 uint32 + if inheritHandles { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall12(procCreateProcessW.Addr(), 10, uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) + if r1&0xff == 0 { + err = errnoErr(e1) + } + return +} + +func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procCreateToolhelp32Snapshot.Addr(), 2, uintptr(flags), uintptr(processId), 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDefineDosDeviceW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DeleteFile(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteFileW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) { + syscall.Syscall(procDeleteProcThreadAttributeList.Addr(), 1, uintptr(unsafe.Pointer(attrlist)), 0, 0) + return +} + +func DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteVolumeMountPointW.Addr(), 1, uintptr(unsafe.Pointer(volumeMountPoint)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) { + var _p0 uint32 + if bInheritHandle { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall9(procDuplicateHandle.Addr(), 7, uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ExitProcess(exitcode uint32) { + syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0) + return +} + +func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func FindClose(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindCloseChangeNotification(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindCloseChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(path) + if err != nil { + return + } + return _FindFirstChangeNotification(_p0, watchSubtree, notifyFilter) +} + +func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) { + var _p1 uint32 + if watchSubtree { + _p1 = 1 + } + r0, _, e1 := syscall.Syscall(procFindFirstChangeNotificationW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstVolumeW.Addr(), 2, uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength), 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func FindNextChangeNotification(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func findNextFile1(handle Handle, data *win32finddata1) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextVolumeMountPointW.Addr(), 3, uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextVolumeW.Addr(), 3, uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindResourceW.Addr(), 3, uintptr(module), uintptr(name), uintptr(resType)) + resInfo = Handle(r0) + if resInfo == 0 { + err = errnoErr(e1) + } + return +} + +func FindVolumeClose(findVolume Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindVolumeClose.Addr(), 1, uintptr(findVolume), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindVolumeMountPointClose.Addr(), 1, uintptr(findVolumeMountPoint), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FlushFileBuffers(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFlushFileBuffers.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FlushViewOfFile(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procFlushViewOfFile.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) { + var _p0 *uint16 + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := syscall.Syscall9(procFormatMessageW.Addr(), 7, uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)), 0, 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func FreeEnvironmentStrings(envs *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procFreeEnvironmentStringsW.Addr(), 1, uintptr(unsafe.Pointer(envs)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FreeLibrary(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGenerateConsoleCtrlEvent.Addr(), 2, uintptr(ctrlEvent), uintptr(processGroupID), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetACP() (acp uint32) { + r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0) + acp = uint32(r0) + return +} + +func GetActiveProcessorCount(groupNumber uint16) (ret uint32) { + r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + ret = uint32(r0) + return +} + +func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { + r1, _, e1 := syscall.Syscall(procGetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetCommandLine() (cmd *uint16) { + r0, _, _ := syscall.Syscall(procGetCommandLineW.Addr(), 0, 0, 0, 0) + cmd = (*uint16)(unsafe.Pointer(r0)) + return +} + +func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetComputerNameExW.Addr(), 3, uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetComputerName(buf *uint16, n *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetComputerNameW.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetConsoleMode(console Handle, mode *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) { + r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetCurrentProcessId() (pid uint32) { + r0, _, _ := syscall.Syscall(procGetCurrentProcessId.Addr(), 0, 0, 0, 0) + pid = uint32(r0) + return +} + +func GetCurrentThreadId() (id uint32) { + r0, _, _ := syscall.Syscall(procGetCurrentThreadId.Addr(), 0, 0, 0, 0) + id = uint32(r0) + return +} + +func GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) { + r1, _, e1 := syscall.Syscall6(procGetDiskFreeSpaceExW.Addr(), 4, uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetDriveType(rootPathName *uint16) (driveType uint32) { + r0, _, _ := syscall.Syscall(procGetDriveTypeW.Addr(), 1, uintptr(unsafe.Pointer(rootPathName)), 0, 0) + driveType = uint32(r0) + return +} + +func GetEnvironmentStrings() (envs *uint16, err error) { + r0, _, e1 := syscall.Syscall(procGetEnvironmentStringsW.Addr(), 0, 0, 0, 0) + envs = (*uint16)(unsafe.Pointer(r0)) + if envs == nil { + err = errnoErr(e1) + } + return +} + +func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetEnvironmentVariableW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetExitCodeProcess.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(exitcode)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { + r1, _, e1 := syscall.Syscall(procGetFileAttributesExW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileAttributes(name *uint16) (attrs uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileAttributesW.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + attrs = uint32(r0) + if attrs == INVALID_FILE_ATTRIBUTES { + err = errnoErr(e1) + } + return +} + +func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) { + r1, _, e1 := syscall.Syscall(procGetFileInformationByHandle.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileType(filehandle Handle) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall6(procGetFinalPathNameByHandleW.Addr(), 4, uintptr(file), uintptr(unsafe.Pointer(filePath)), uintptr(filePathSize), uintptr(flags), 0, 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall6(procGetFullPathNameW.Addr(), 4, uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)), 0, 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetLargePageMinimum() (size uintptr) { + r0, _, _ := syscall.Syscall(procGetLargePageMinimum.Addr(), 0, 0, 0, 0) + size = uintptr(r0) + return +} + +func GetLastError() (lasterr error) { + r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) + if r0 != 0 { + lasterr = syscall.Errno(r0) + } + return +} + +func GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLogicalDriveStringsW.Addr(), 2, uintptr(bufferLength), uintptr(unsafe.Pointer(buffer)), 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetLogicalDrives() (drivesBitMask uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLogicalDrives.Addr(), 0, 0, 0, 0) + drivesBitMask = uint32(r0) + if drivesBitMask == 0 { + err = errnoErr(e1) + } + return +} + +func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLongPathNameW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetMaximumProcessorCount(groupNumber uint16) (ret uint32) { + r0, _, _ := syscall.Syscall(procGetMaximumProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + ret = uint32(r0) + return +} + +func GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetModuleFileNameW.Addr(), 3, uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) { + r1, _, e1 := syscall.Syscall(procGetModuleHandleExW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(moduleName)), uintptr(unsafe.Pointer(module))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) { + var _p0 uint32 + if wait { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procGetOverlappedResult.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetPriorityClass(process Handle) (ret uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetPriorityClass.Addr(), 1, uintptr(process), 0, 0) + ret = uint32(r0) + if ret == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcAddress(module Handle, procname string) (proc uintptr, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(procname) + if err != nil { + return + } + return _GetProcAddress(module, _p0) +} + +func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { + r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), uintptr(unsafe.Pointer(procname)), 0) + proc = uintptr(r0) + if proc == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcessId(process Handle) (id uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetProcessId.Addr(), 1, uintptr(process), 0, 0) + id = uint32(r0) + if id == 0 { + err = errnoErr(e1) + } + return +} + +func getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetProcessPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetProcessShutdownParameters.Addr(), 2, uintptr(unsafe.Pointer(level)), uintptr(unsafe.Pointer(flags)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procGetProcessTimes.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) { + syscall.Syscall6(procGetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(unsafe.Pointer(lpMinimumWorkingSetSize)), uintptr(unsafe.Pointer(lpMaximumWorkingSetSize)), uintptr(unsafe.Pointer(flags)), 0, 0) + return +} + +func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetShortPathNameW.Addr(), 3, uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func getStartupInfo(startupInfo *StartupInfo) { + syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) + return +} + +func GetStdHandle(stdhandle uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetSystemDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + len = uint32(r0) + if len == 0 { + err = errnoErr(e1) + } + return +} + +func getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetSystemPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetSystemTimeAsFileTime(time *Filetime) { + syscall.Syscall(procGetSystemTimeAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + return +} + +func GetSystemTimePreciseAsFileTime(time *Filetime) { + syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + return +} + +func getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetSystemWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + len = uint32(r0) + if len == 0 { + err = errnoErr(e1) + } + return +} + +func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetTempPathW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetThreadPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getTickCount64() (ms uint64) { + r0, _, _ := syscall.Syscall(procGetTickCount64.Addr(), 0, 0, 0, 0) + ms = uint64(r0) + return +} + +func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0) + rc = uint32(r0) + if rc == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetUserPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVersion() (ver uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0) + ver = uint32(r0) + if ver == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procGetVolumeInformationByHandleW.Addr(), 8, uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procGetVolumeInformationW.Addr(), 8, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetVolumeNameForVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetVolumePathNameW.Addr(), 3, uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetVolumePathNamesForVolumeNameW.Addr(), 4, uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + len = uint32(r0) + if len == 0 { + err = errnoErr(e1) + } + return +} + +func initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procInitializeProcThreadAttributeList.Addr(), 4, uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func IsWow64Process(handle Handle, isWow64 *bool) (err error) { + var _p0 uint32 + if *isWow64 { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procIsWow64Process.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(&_p0)), 0) + *isWow64 = _p0 != 0 + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) { + err = procIsWow64Process2.Find() + if err != nil { + return + } + r1, _, e1 := syscall.Syscall(procIsWow64Process2.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(libname) + if err != nil { + return + } + return _LoadLibraryEx(_p0, zero, flags) +} + +func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func LoadLibrary(libname string) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(libname) + if err != nil { + return + } + return _LoadLibrary(_p0) +} + +func _LoadLibrary(libname *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadLibraryW.Addr(), 1, uintptr(unsafe.Pointer(libname)), 0, 0) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func LoadResource(module Handle, resInfo Handle) (resData Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0) + resData = Handle(r0) + if resData == 0 { + err = errnoErr(e1) + } + return +} + +func LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) { + r0, _, e1 := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(length), 0) + ptr = uintptr(r0) + if ptr == 0 { + err = errnoErr(e1) + } + return +} + +func LocalFree(hmem Handle) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLocalFree.Addr(), 1, uintptr(hmem), 0, 0) + handle = Handle(r0) + if handle != 0 { + err = errnoErr(e1) + } + return +} + +func LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall6(procLockFileEx.Addr(), 6, uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func LockResource(resData Handle) (addr uintptr, err error) { + r0, _, e1 := syscall.Syscall(procLockResource.Addr(), 1, uintptr(resData), 0, 0) + addr = uintptr(r0) + if addr == 0 { + err = errnoErr(e1) + } + return +} + +func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procMapViewOfFile.Addr(), 5, uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length), 0) + addr = uintptr(r0) + if addr == 0 { + err = errnoErr(e1) + } + return +} + +func Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procModule32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procModule32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func MoveFile(from *uint16, to *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procMoveFileW.Addr(), 2, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) { + r0, _, e1 := syscall.Syscall6(procMultiByteToWideChar.Addr(), 6, uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) + nwrite = int32(r0) + if nwrite == 0 { + err = errnoErr(e1) + } + return +} + +func OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procOpenEventW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procOpenMutexW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procOpenProcess.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(processId)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall(procOpenThread.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(threadId)) + handle = Handle(r0) + if handle == 0 { + err = errnoErr(e1) + } + return +} + +func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall6(procPostQueuedCompletionStatus.Addr(), 4, uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procProcess32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procProcess32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procProcessIdToSessionId.Addr(), 2, uintptr(pid), uintptr(unsafe.Pointer(sessionid)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func PulseEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procPulseEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procQueryDosDeviceW.Addr(), 3, uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max)) + n = uint32(r0) + if n == 0 { + err = errnoErr(e1) + } + return +} + +func QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryFullProcessImageNameW.Addr(), 4, uintptr(proc), uintptr(flags), uintptr(unsafe.Pointer(exeName)), uintptr(unsafe.Pointer(size)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryInformationJobObject.Addr(), 5, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), uintptr(unsafe.Pointer(retlen)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) { + r1, _, e1 := syscall.Syscall6(procReadConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { + var _p0 uint32 + if watchSubTree { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall9(procReadDirectoryChangesW.Addr(), 8, uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procReadFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ReleaseMutex(mutex Handle) (err error) { + r1, _, e1 := syscall.Syscall(procReleaseMutex.Addr(), 1, uintptr(mutex), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func RemoveDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procRemoveDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ResetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ResumeThread(thread Handle) (ret uint32, err error) { + r0, _, e1 := syscall.Syscall(procResumeThread.Addr(), 1, uintptr(thread), 0, 0) + ret = uint32(r0) + if ret == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { + r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setConsoleCursorPosition(console Handle, position uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleCursorPosition.Addr(), 2, uintptr(console), uintptr(position), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetConsoleMode(console Handle, mode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(console), uintptr(mode), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetCurrentDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetDefaultDllDirectories(directoryFlags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetDefaultDllDirectories.Addr(), 1, uintptr(directoryFlags), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetDllDirectory(path string) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(path) + if err != nil { + return + } + return _SetDllDirectory(_p0) +} + +func _SetDllDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetDllDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetEndOfFile(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetErrorMode(mode uint32) (ret uint32) { + r0, _, _ := syscall.Syscall(procSetErrorMode.Addr(), 1, uintptr(mode), 0, 0) + ret = uint32(r0) + return +} + +func SetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFileAttributes(name *uint16, attrs uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileAttributesW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(handle), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetFileInformationByHandle.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) { + r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0) + newlowoffset = uint32(r0) + if newlowoffset == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procSetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) { + r0, _, e1 := syscall.Syscall6(procSetInformationJobObject.Addr(), 4, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), 0, 0) + ret = int(r0) + if ret == 0 { + err = errnoErr(e1) + } + return +} + +func SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetNamedPipeHandleState.Addr(), 4, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetPriorityClass(process Handle, priorityClass uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetPriorityClass.Addr(), 2, uintptr(process), uintptr(priorityClass), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetProcessPriorityBoost(process Handle, disable bool) (err error) { + var _p0 uint32 + if disable { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procSetProcessPriorityBoost.Addr(), 2, uintptr(process), uintptr(_p0), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetProcessShutdownParameters(level uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetProcessShutdownParameters.Addr(), 2, uintptr(level), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(dwMinimumWorkingSetSize), uintptr(dwMaximumWorkingSetSize), uintptr(flags), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetStdHandle(stdhandle uint32, handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetVolumeLabelW.Addr(), 2, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetVolumeMountPointW.Addr(), 2, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SizeofResource(module Handle, resInfo Handle) (size uint32, err error) { + r0, _, e1 := syscall.Syscall(procSizeofResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0) + size = uint32(r0) + if size == 0 { + err = errnoErr(e1) + } + return +} + +func SleepEx(milliseconds uint32, alertable bool) (ret uint32) { + var _p0 uint32 + if alertable { + _p0 = 1 + } + r0, _, _ := syscall.Syscall(procSleepEx.Addr(), 2, uintptr(milliseconds), uintptr(_p0), 0) + ret = uint32(r0) + return +} + +func TerminateJobObject(job Handle, exitCode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procTerminateJobObject.Addr(), 2, uintptr(job), uintptr(exitCode), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func TerminateProcess(handle Handle, exitcode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procTerminateProcess.Addr(), 2, uintptr(handle), uintptr(exitcode), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procThread32First.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procThread32Next.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall6(procUnlockFileEx.Addr(), 5, uintptr(file), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func UnmapViewOfFile(addr uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procUnmapViewOfFile.Addr(), 1, uintptr(addr), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) { + r1, _, e1 := syscall.Syscall9(procUpdateProcThreadAttribute.Addr(), 7, uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procVirtualAlloc.Addr(), 4, uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect), 0, 0) + value = uintptr(r0) + if value == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualFree.Addr(), 3, uintptr(address), uintptr(size), uintptr(freetype)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualLock(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualProtect.Addr(), 4, uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualProtectEx.Addr(), 5, uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualQuery.Addr(), 3, uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualQueryEx.Addr(), 4, uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VirtualUnlock(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func WTSGetActiveConsoleSessionId() (sessionID uint32) { + r0, _, _ := syscall.Syscall(procWTSGetActiveConsoleSessionId.Addr(), 0, 0, 0, 0) + sessionID = uint32(r0) + return +} + +func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) { + var _p0 uint32 + if waitAll { + _p0 = 1 + } + r0, _, e1 := syscall.Syscall6(procWaitForMultipleObjects.Addr(), 4, uintptr(count), uintptr(handles), uintptr(_p0), uintptr(waitMilliseconds), 0, 0) + event = uint32(r0) + if event == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) { + r0, _, e1 := syscall.Syscall(procWaitForSingleObject.Addr(), 2, uintptr(handle), uintptr(waitMilliseconds), 0) + event = uint32(r0) + if event == 0xffffffff { + err = errnoErr(e1) + } + return +} + +func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) { + r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procWriteFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) { + syscall.Syscall9(procGetAcceptExSockaddrs.Addr(), 8, uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)), 0) + return +} + +func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func NetApiBufferFree(buf *byte) (neterr error) { + r0, _, _ := syscall.Syscall(procNetApiBufferFree.Addr(), 1, uintptr(unsafe.Pointer(buf)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) { + r0, _, _ := syscall.Syscall(procNetGetJoinInformation.Addr(), 3, uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) { + r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(attributes), uintptr(share), uintptr(disposition), uintptr(options), uintptr(eabuffer), uintptr(ealength), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) { + r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen)), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class), 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procNtSetInformationProcess.Addr(), 4, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) { + r0, _, _ := syscall.Syscall(procNtSetSystemInformation.Addr(), 3, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen)) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) { + r0, _, _ := syscall.Syscall(procRtlAddFunctionTable.Addr(), 3, uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress)) + ret = r0 != 0 + return +} + +func RtlDefaultNpAcl(acl **ACL) (ntstatus error) { + r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(acl)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) { + r0, _, _ := syscall.Syscall(procRtlDeleteFunctionTable.Addr(), 1, uintptr(unsafe.Pointer(functionTable)), 0, 0) + ret = r0 != 0 + return +} + +func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { + r0, _, _ := syscall.Syscall6(procRtlDosPathNameToRelativeNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlGetCurrentPeb() (peb *PEB) { + r0, _, _ := syscall.Syscall(procRtlGetCurrentPeb.Addr(), 0, 0, 0, 0) + peb = (*PEB)(unsafe.Pointer(r0)) + return +} + +func rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) { + syscall.Syscall(procRtlGetNtVersionNumbers.Addr(), 3, uintptr(unsafe.Pointer(majorVersion)), uintptr(unsafe.Pointer(minorVersion)), uintptr(unsafe.Pointer(buildNumber))) + return +} + +func rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) { + r0, _, _ := syscall.Syscall(procRtlGetVersion.Addr(), 1, uintptr(unsafe.Pointer(info)), 0, 0) + if r0 != 0 { + ntstatus = NTStatus(r0) + } + return +} + +func RtlInitString(destinationString *NTString, sourceString *byte) { + syscall.Syscall(procRtlInitString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0) + return +} + +func RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) { + syscall.Syscall(procRtlInitUnicodeString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0) + return +} + +func rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) { + r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(ntstatus), 0, 0) + ret = syscall.Errno(r0) + return +} + +func clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) { + r0, _, _ := syscall.Syscall(procCLSIDFromString.Addr(), 2, uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func coCreateGuid(pguid *GUID) (ret error) { + r0, _, _ := syscall.Syscall(procCoCreateGuid.Addr(), 1, uintptr(unsafe.Pointer(pguid)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) { + r0, _, _ := syscall.Syscall6(procCoGetObject.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func CoInitializeEx(reserved uintptr, coInit uint32) (ret error) { + r0, _, _ := syscall.Syscall(procCoInitializeEx.Addr(), 2, uintptr(reserved), uintptr(coInit), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func CoTaskMemFree(address unsafe.Pointer) { + syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(address), 0, 0) + return +} + +func CoUninitialize() { + syscall.Syscall(procCoUninitialize.Addr(), 0, 0, 0, 0) + return +} + +func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) { + r0, _, _ := syscall.Syscall(procStringFromGUID2.Addr(), 3, uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax)) + chars = int32(r0) + return +} + +func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumProcessModules.Addr(), 4, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumProcessModulesEx.Addr(), 5, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(processIds)), uintptr(nSize), uintptr(unsafe.Pointer(bytesReturned))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleBaseNameW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleFileNameExW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetModuleInformation.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) { + r1, _, e1 := syscall.Syscall(procQueryWorkingSetEx.Addr(), 3, uintptr(process), uintptr(pv), uintptr(cb)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) { + ret = procSubscribeServiceChangeNotifications.Find() + if ret != nil { + return + } + r0, _, _ := syscall.Syscall6(procSubscribeServiceChangeNotifications.Addr(), 5, uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func UnsubscribeServiceChangeNotifications(subscription uintptr) (err error) { + err = procUnsubscribeServiceChangeNotifications.Find() + if err != nil { + return + } + syscall.Syscall(procUnsubscribeServiceChangeNotifications.Addr(), 1, uintptr(subscription), 0, 0) + return +} + +func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) + if r1&0xff == 0 { + err = errnoErr(e1) + } + return +} + +func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procTranslateNameW.Addr(), 5, uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)), 0) + if r1&0xff == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiBuildDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiCallClassInstaller.Addr(), 3, uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiCancelDriverInfoSearch.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiClassGuidsFromNameExW.Addr(), 6, uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiClassNameFromGuidExW.Addr(), 6, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { + r0, _, e1 := syscall.Syscall6(procSetupDiCreateDeviceInfoListExW.Addr(), 4, uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + handle = DevInfo(r0) + if handle == DevInfo(InvalidHandle) { + err = errnoErr(e1) + } + return +} + +func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiCreateDeviceInfoW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiDestroyDeviceInfoList.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiDestroyDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiEnumDeviceInfo.Addr(), 3, uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiEnumDriverInfoW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { + r0, _, e1 := syscall.Syscall9(procSetupDiGetClassDevsExW.Addr(), 7, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + handle = DevInfo(r0) + if handle == DevInfo(InvalidHandle) { + err = errnoErr(e1) + } + return +} + +func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetClassInstallParamsW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetDeviceInstanceIdW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiGetDevicePropertyW.Addr(), 8, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procSetupDiGetDeviceRegistryPropertyW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiGetDriverInfoDetailW.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) { + r0, _, e1 := syscall.Syscall6(procSetupDiOpenDevRegKey.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired)) + key = Handle(r0) + if key == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiSetClassInstallParamsW.Addr(), 4, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procSetupDiSetDeviceRegistryPropertyW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { + r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procSetupUninstallOEMInfW.Addr(), 3, uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) { + r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) + argv = (*[8192]*[8192]uint16)(unsafe.Pointer(r0)) + if argv == nil { + err = errnoErr(e1) + } + return +} + +func shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) { + r0, _, _ := syscall.Syscall6(procSHGetKnownFolderPath.Addr(), 4, uintptr(unsafe.Pointer(id)), uintptr(flags), uintptr(token), uintptr(unsafe.Pointer(path)), 0, 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) { + r1, _, e1 := syscall.Syscall6(procShellExecuteW.Addr(), 6, uintptr(hwnd), uintptr(unsafe.Pointer(verb)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(args)), uintptr(unsafe.Pointer(cwd)), uintptr(showCmd)) + if r1 <= 32 { + err = errnoErr(e1) + } + return +} + +func EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) { + syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(hwnd), uintptr(enumFunc), uintptr(param)) + return +} + +func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) { + r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(param), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func ExitWindowsEx(flags uint32, reason uint32) (err error) { + r1, _, e1 := syscall.Syscall(procExitWindowsEx.Addr(), 2, uintptr(flags), uintptr(reason), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) { + r0, _, e1 := syscall.Syscall(procGetClassNameW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount)) + copied = int32(r0) + if copied == 0 { + err = errnoErr(e1) + } + return +} + +func GetDesktopWindow() (hwnd HWND) { + r0, _, _ := syscall.Syscall(procGetDesktopWindow.Addr(), 0, 0, 0, 0) + hwnd = HWND(r0) + return +} + +func GetForegroundWindow() (hwnd HWND) { + r0, _, _ := syscall.Syscall(procGetForegroundWindow.Addr(), 0, 0, 0, 0) + hwnd = HWND(r0) + return +} + +func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) { + r1, _, e1 := syscall.Syscall(procGetGUIThreadInfo.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(info)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetShellWindow() (shellWindow HWND) { + r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) + shellWindow = HWND(r0) + return +} + +func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0) + tid = uint32(r0) + if tid == 0 { + err = errnoErr(e1) + } + return +} + +func IsWindow(hwnd HWND) (isWindow bool) { + r0, _, _ := syscall.Syscall(procIsWindow.Addr(), 1, uintptr(hwnd), 0, 0) + isWindow = r0 != 0 + return +} + +func IsWindowUnicode(hwnd HWND) (isUnicode bool) { + r0, _, _ := syscall.Syscall(procIsWindowUnicode.Addr(), 1, uintptr(hwnd), 0, 0) + isUnicode = r0 != 0 + return +} + +func IsWindowVisible(hwnd HWND) (isVisible bool) { + r0, _, _ := syscall.Syscall(procIsWindowVisible.Addr(), 1, uintptr(hwnd), 0, 0) + isVisible = r0 != 0 + return +} + +func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { + r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0) + ret = int32(r0) + if ret == 0 { + err = errnoErr(e1) + } + return +} + +func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) { + var _p0 uint32 + if inheritExisting { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall(procCreateEnvironmentBlock.Addr(), 3, uintptr(unsafe.Pointer(block)), uintptr(token), uintptr(_p0)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func DestroyEnvironmentBlock(block *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDestroyEnvironmentBlock.Addr(), 1, uintptr(unsafe.Pointer(block)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetUserProfileDirectoryW.Addr(), 3, uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(filename) + if err != nil { + return + } + return _GetFileVersionInfoSize(_p0, zeroHandle) +} + +func _GetFileVersionInfoSize(filename *uint16, zeroHandle *Handle) (bufSize uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileVersionInfoSizeW.Addr(), 2, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle)), 0) + bufSize = uint32(r0) + if bufSize == 0 { + err = errnoErr(e1) + } + return +} + +func GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(filename) + if err != nil { + return + } + return _GetFileVersionInfo(_p0, handle, bufSize, buffer) +} + +func _GetFileVersionInfo(filename *uint16, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) { + r1, _, e1 := syscall.Syscall6(procGetFileVersionInfoW.Addr(), 4, uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(subBlock) + if err != nil { + return + } + return _VerQueryValue(block, _p0, pointerToBufferPointer, bufSize) +} + +func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVerQueryValueW.Addr(), 4, uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func TimeBeginPeriod(period uint32) (err error) { + r1, _, e1 := syscall.Syscall(proctimeBeginPeriod.Addr(), 1, uintptr(period), 0, 0) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + +func TimeEndPeriod(period uint32) (err error) { + r1, _, e1 := syscall.Syscall(proctimeEndPeriod.Addr(), 1, uintptr(period), 0, 0) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + +func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) { + r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func FreeAddrInfoW(addrinfo *AddrinfoW) { + syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0) + return +} + +func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) { + r0, _, _ := syscall.Syscall6(procGetAddrInfoW.Addr(), 4, uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)), 0, 0) + if r0 != 0 { + sockerr = syscall.Errno(r0) + } + return +} + +func WSACleanup() (err error) { + r1, _, e1 := syscall.Syscall(procWSACleanup.Addr(), 0, 0, 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) { + r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) + n = int32(r0) + if n == -1 { + err = errnoErr(e1) + } + return +} + +func WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) { + var _p0 uint32 + if wait { + _p0 = 1 + } + r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { + r1, _, e1 := syscall.Syscall9(procWSAIoctl.Addr(), 9, uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) { + r1, _, e1 := syscall.Syscall(procWSALookupServiceBeginW.Addr(), 3, uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSALookupServiceEnd(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procWSALookupServiceEnd.Addr(), 1, uintptr(handle), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) { + r1, _, e1 := syscall.Syscall6(procWSALookupServiceNextW.Addr(), 4, uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet)), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSARecvFrom.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSASend.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procWSASocketW.Addr(), 6, uintptr(af), uintptr(typ), uintptr(protocol), uintptr(unsafe.Pointer(protoInfo)), uintptr(group), uintptr(flags)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { + r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0) + if r0 != 0 { + sockerr = syscall.Errno(r0) + } + return +} + +func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { + r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func Closesocket(s Handle) (err error) { + r1, _, e1 := syscall.Syscall(procclosesocket.Addr(), 1, uintptr(s), 0, 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func connect(s Handle, name unsafe.Pointer, namelen int32) (err error) { + r1, _, e1 := syscall.Syscall(procconnect.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func GetHostByName(name string) (h *Hostent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + return _GetHostByName(_p0) +} + +func _GetHostByName(name *byte) (h *Hostent, err error) { + r0, _, e1 := syscall.Syscall(procgethostbyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + h = (*Hostent)(unsafe.Pointer(r0)) + if h == nil { + err = errnoErr(e1) + } + return +} + +func getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { + r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func GetProtoByName(name string) (p *Protoent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + return _GetProtoByName(_p0) +} + +func _GetProtoByName(name *byte) (p *Protoent, err error) { + r0, _, e1 := syscall.Syscall(procgetprotobyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + p = (*Protoent)(unsafe.Pointer(r0)) + if p == nil { + err = errnoErr(e1) + } + return +} + +func GetServByName(name string, proto string) (s *Servent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = syscall.BytePtrFromString(proto) + if err != nil { + return + } + return _GetServByName(_p0, _p1) +} + +func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { + r0, _, e1 := syscall.Syscall(procgetservbyname.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)), 0) + s = (*Servent)(unsafe.Pointer(r0)) + if s == nil { + err = errnoErr(e1) + } + return +} + +func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { + r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) { + r1, _, e1 := syscall.Syscall6(procgetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func listen(s Handle, backlog int32) (err error) { + r1, _, e1 := syscall.Syscall(proclisten.Addr(), 2, uintptr(s), uintptr(backlog), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func Ntohs(netshort uint16) (u uint16) { + r0, _, _ := syscall.Syscall(procntohs.Addr(), 1, uintptr(netshort), 0, 0) + u = uint16(r0) + return +} + +func recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := syscall.Syscall6(procrecvfrom.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int32(r0) + if n == -1 { + err = errnoErr(e1) + } + return +} + +func sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procsendto.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(tolen)) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) { + r1, _, e1 := syscall.Syscall6(procsetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func shutdown(s Handle, how int32) (err error) { + r1, _, e1 := syscall.Syscall(procshutdown.Addr(), 2, uintptr(s), uintptr(how), 0) + if r1 == socket_error { + err = errnoErr(e1) + } + return +} + +func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procsocket.Addr(), 3, uintptr(af), uintptr(typ), uintptr(protocol)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + +func WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procWTSEnumerateSessionsW.Addr(), 5, uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func WTSFreeMemory(ptr uintptr) { + syscall.Syscall(procWTSFreeMemory.Addr(), 1, uintptr(ptr), 0, 0) + return +} + +func WTSQueryUserToken(session uint32, token *Token) (err error) { + r1, _, e1 := syscall.Syscall(procWTSQueryUserToken.Addr(), 2, uintptr(session), uintptr(unsafe.Pointer(token)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go index f248effae17b1..ffadb7bebdbe8 100644 --- a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +++ b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go @@ -1,7 +1,7 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 -// +build go1.16 +//go:build go1.16 && !go1.21 +// +build go1.16,!go1.21 package bidi diff --git a/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go new file mode 100644 index 0000000000000..92cce5802c6a5 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go @@ -0,0 +1,2043 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.21 +// +build go1.21 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "15.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 19904 bytes (19.44 KiB). Checksum: b1f201ed2debb6c8. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 259 blocks, 16576 entries, 16576 bytes +// The third block is the zero block. +var bidiValues = [16576]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, + 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, + 0x5ea: 0x000d, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001, + 0x5f0: 0x000d, 0x5f1: 0x000d, 0x5f2: 0x000d, 0x5f3: 0x000d, 0x5f4: 0x000d, 0x5f5: 0x000d, + 0x5f6: 0x000d, 0x5f7: 0x000d, 0x5f8: 0x000d, 0x5f9: 0x000d, 0x5fa: 0x000d, 0x5fb: 0x000d, + 0x5fc: 0x000d, 0x5fd: 0x000d, 0x5fe: 0x000d, 0x5ff: 0x000d, + // Block 0x18, offset 0x600 + 0x600: 0x000d, 0x601: 0x000d, 0x602: 0x000d, 0x603: 0x000d, 0x604: 0x000d, 0x605: 0x000d, + 0x606: 0x000d, 0x607: 0x000d, 0x608: 0x000d, 0x609: 0x000d, 0x60a: 0x000d, 0x60b: 0x000d, + 0x60c: 0x000d, 0x60d: 0x000d, 0x60e: 0x000d, 0x60f: 0x0001, 0x610: 0x0005, 0x611: 0x0005, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 0x618: 0x000c, 0x619: 0x000c, 0x61a: 0x000c, 0x61b: 0x000c, 0x61c: 0x000c, 0x61d: 0x000c, + 0x61e: 0x000c, 0x61f: 0x000c, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000c, 0x64b: 0x000c, + 0x64c: 0x000c, 0x64d: 0x000c, 0x64e: 0x000c, 0x64f: 0x000c, 0x650: 0x000c, 0x651: 0x000c, + 0x652: 0x000c, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + 0x77e: 0x000c, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + 0x83a: 0x000c, 0x83b: 0x000c, + 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x895: 0x000c, 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, 0x944: 0x000c, + 0x97c: 0x000c, 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa00: 0x000c, 0xa01: 0x000c, + 0xa3b: 0x000c, + 0xa3c: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa81: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaca: 0x000c, + 0xad2: 0x000c, 0xad3: 0x000c, 0xad4: 0x000c, 0xad6: 0x000c, + // Block 0x2c, offset 0xb00 + 0xb31: 0x000c, 0xb34: 0x000c, 0xb35: 0x000c, + 0xb36: 0x000c, 0xb37: 0x000c, 0xb38: 0x000c, 0xb39: 0x000c, 0xb3a: 0x000c, + 0xb3f: 0x0004, + // Block 0x2d, offset 0xb40 + 0xb47: 0x000c, 0xb48: 0x000c, 0xb49: 0x000c, 0xb4a: 0x000c, 0xb4b: 0x000c, + 0xb4c: 0x000c, 0xb4d: 0x000c, 0xb4e: 0x000c, + // Block 0x2e, offset 0xb80 + 0xbb1: 0x000c, 0xbb4: 0x000c, 0xbb5: 0x000c, + 0xbb6: 0x000c, 0xbb7: 0x000c, 0xbb8: 0x000c, 0xbb9: 0x000c, 0xbba: 0x000c, 0xbbb: 0x000c, + 0xbbc: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbc8: 0x000c, 0xbc9: 0x000c, 0xbca: 0x000c, 0xbcb: 0x000c, + 0xbcc: 0x000c, 0xbcd: 0x000c, 0xbce: 0x000c, + // Block 0x30, offset 0xc00 + 0xc18: 0x000c, 0xc19: 0x000c, + 0xc35: 0x000c, + 0xc37: 0x000c, 0xc39: 0x000c, 0xc3a: 0x003a, 0xc3b: 0x002a, + 0xc3c: 0x003a, 0xc3d: 0x002a, + // Block 0x31, offset 0xc40 + 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, 0xc7d: 0x000c, 0xc7e: 0x000c, + // Block 0x32, offset 0xc80 + 0xc80: 0x000c, 0xc81: 0x000c, 0xc82: 0x000c, 0xc83: 0x000c, 0xc84: 0x000c, + 0xc86: 0x000c, 0xc87: 0x000c, + 0xc8d: 0x000c, 0xc8e: 0x000c, 0xc8f: 0x000c, 0xc90: 0x000c, 0xc91: 0x000c, + 0xc92: 0x000c, 0xc93: 0x000c, 0xc94: 0x000c, 0xc95: 0x000c, 0xc96: 0x000c, 0xc97: 0x000c, + 0xc99: 0x000c, 0xc9a: 0x000c, 0xc9b: 0x000c, 0xc9c: 0x000c, 0xc9d: 0x000c, + 0xc9e: 0x000c, 0xc9f: 0x000c, 0xca0: 0x000c, 0xca1: 0x000c, 0xca2: 0x000c, 0xca3: 0x000c, + 0xca4: 0x000c, 0xca5: 0x000c, 0xca6: 0x000c, 0xca7: 0x000c, 0xca8: 0x000c, 0xca9: 0x000c, + 0xcaa: 0x000c, 0xcab: 0x000c, 0xcac: 0x000c, 0xcad: 0x000c, 0xcae: 0x000c, 0xcaf: 0x000c, + 0xcb0: 0x000c, 0xcb1: 0x000c, 0xcb2: 0x000c, 0xcb3: 0x000c, 0xcb4: 0x000c, 0xcb5: 0x000c, + 0xcb6: 0x000c, 0xcb7: 0x000c, 0xcb8: 0x000c, 0xcb9: 0x000c, 0xcba: 0x000c, 0xcbb: 0x000c, + 0xcbc: 0x000c, + // Block 0x33, offset 0xcc0 + 0xcc6: 0x000c, + // Block 0x34, offset 0xd00 + 0xd2d: 0x000c, 0xd2e: 0x000c, 0xd2f: 0x000c, + 0xd30: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, 0xd35: 0x000c, + 0xd36: 0x000c, 0xd37: 0x000c, 0xd39: 0x000c, 0xd3a: 0x000c, + 0xd3d: 0x000c, 0xd3e: 0x000c, + // Block 0x35, offset 0xd40 + 0xd58: 0x000c, 0xd59: 0x000c, + 0xd5e: 0x000c, 0xd5f: 0x000c, 0xd60: 0x000c, + 0xd71: 0x000c, 0xd72: 0x000c, 0xd73: 0x000c, 0xd74: 0x000c, + // Block 0x36, offset 0xd80 + 0xd82: 0x000c, 0xd85: 0x000c, + 0xd86: 0x000c, + 0xd8d: 0x000c, + 0xd9d: 0x000c, + // Block 0x37, offset 0xdc0 + 0xddd: 0x000c, + 0xdde: 0x000c, 0xddf: 0x000c, + // Block 0x38, offset 0xe00 + 0xe10: 0x000a, 0xe11: 0x000a, + 0xe12: 0x000a, 0xe13: 0x000a, 0xe14: 0x000a, 0xe15: 0x000a, 0xe16: 0x000a, 0xe17: 0x000a, + 0xe18: 0x000a, 0xe19: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x000a, + // Block 0x3a, offset 0xe80 + 0xe80: 0x0009, + 0xe9b: 0x007a, 0xe9c: 0x006a, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, 0xed4: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf12: 0x000c, 0xf13: 0x000c, + 0xf32: 0x000c, 0xf33: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf74: 0x000c, 0xf75: 0x000c, + 0xf77: 0x000c, 0xf78: 0x000c, 0xf79: 0x000c, 0xf7a: 0x000c, 0xf7b: 0x000c, + 0xf7c: 0x000c, 0xf7d: 0x000c, + // Block 0x3e, offset 0xf80 + 0xf86: 0x000c, 0xf89: 0x000c, 0xf8a: 0x000c, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000c, 0xf8f: 0x000c, 0xf90: 0x000c, 0xf91: 0x000c, + 0xf92: 0x000c, 0xf93: 0x000c, + 0xf9b: 0x0004, 0xf9d: 0x000c, + 0xfb0: 0x000a, 0xfb1: 0x000a, 0xfb2: 0x000a, 0xfb3: 0x000a, 0xfb4: 0x000a, 0xfb5: 0x000a, + 0xfb6: 0x000a, 0xfb7: 0x000a, 0xfb8: 0x000a, 0xfb9: 0x000a, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x000a, 0xfc1: 0x000a, 0xfc2: 0x000a, 0xfc3: 0x000a, 0xfc4: 0x000a, 0xfc5: 0x000a, + 0xfc6: 0x000a, 0xfc7: 0x000a, 0xfc8: 0x000a, 0xfc9: 0x000a, 0xfca: 0x000a, 0xfcb: 0x000c, + 0xfcc: 0x000c, 0xfcd: 0x000c, 0xfce: 0x000b, 0xfcf: 0x000c, + // Block 0x40, offset 0x1000 + 0x1005: 0x000c, + 0x1006: 0x000c, + 0x1029: 0x000c, + // Block 0x41, offset 0x1040 + 0x1060: 0x000c, 0x1061: 0x000c, 0x1062: 0x000c, + 0x1067: 0x000c, 0x1068: 0x000c, + 0x1072: 0x000c, + 0x1079: 0x000c, 0x107a: 0x000c, 0x107b: 0x000c, + // Block 0x42, offset 0x1080 + 0x1080: 0x000a, 0x1084: 0x000a, 0x1085: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10de: 0x000a, 0x10df: 0x000a, 0x10e0: 0x000a, 0x10e1: 0x000a, 0x10e2: 0x000a, 0x10e3: 0x000a, + 0x10e4: 0x000a, 0x10e5: 0x000a, 0x10e6: 0x000a, 0x10e7: 0x000a, 0x10e8: 0x000a, 0x10e9: 0x000a, + 0x10ea: 0x000a, 0x10eb: 0x000a, 0x10ec: 0x000a, 0x10ed: 0x000a, 0x10ee: 0x000a, 0x10ef: 0x000a, + 0x10f0: 0x000a, 0x10f1: 0x000a, 0x10f2: 0x000a, 0x10f3: 0x000a, 0x10f4: 0x000a, 0x10f5: 0x000a, + 0x10f6: 0x000a, 0x10f7: 0x000a, 0x10f8: 0x000a, 0x10f9: 0x000a, 0x10fa: 0x000a, 0x10fb: 0x000a, + 0x10fc: 0x000a, 0x10fd: 0x000a, 0x10fe: 0x000a, 0x10ff: 0x000a, + // Block 0x44, offset 0x1100 + 0x1117: 0x000c, + 0x1118: 0x000c, 0x111b: 0x000c, + // Block 0x45, offset 0x1140 + 0x1156: 0x000c, + 0x1158: 0x000c, 0x1159: 0x000c, 0x115a: 0x000c, 0x115b: 0x000c, 0x115c: 0x000c, 0x115d: 0x000c, + 0x115e: 0x000c, 0x1160: 0x000c, 0x1162: 0x000c, + 0x1165: 0x000c, 0x1166: 0x000c, 0x1167: 0x000c, 0x1168: 0x000c, 0x1169: 0x000c, + 0x116a: 0x000c, 0x116b: 0x000c, 0x116c: 0x000c, + 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117f: 0x000c, + // Block 0x46, offset 0x1180 + 0x11b0: 0x000c, 0x11b1: 0x000c, 0x11b2: 0x000c, 0x11b3: 0x000c, 0x11b4: 0x000c, 0x11b5: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, 0x11bb: 0x000c, + 0x11bc: 0x000c, 0x11bd: 0x000c, 0x11be: 0x000c, 0x11bf: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x000c, 0x11c1: 0x000c, 0x11c2: 0x000c, 0x11c3: 0x000c, 0x11c4: 0x000c, 0x11c5: 0x000c, + 0x11c6: 0x000c, 0x11c7: 0x000c, 0x11c8: 0x000c, 0x11c9: 0x000c, 0x11ca: 0x000c, 0x11cb: 0x000c, + 0x11cc: 0x000c, 0x11cd: 0x000c, 0x11ce: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, 0x1202: 0x000c, 0x1203: 0x000c, + 0x1234: 0x000c, + 0x1236: 0x000c, 0x1237: 0x000c, 0x1238: 0x000c, 0x1239: 0x000c, 0x123a: 0x000c, + 0x123c: 0x000c, + // Block 0x49, offset 0x1240 + 0x1242: 0x000c, + 0x126b: 0x000c, 0x126c: 0x000c, 0x126d: 0x000c, 0x126e: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, 0x1272: 0x000c, 0x1273: 0x000c, + // Block 0x4a, offset 0x1280 + 0x1280: 0x000c, 0x1281: 0x000c, + 0x12a2: 0x000c, 0x12a3: 0x000c, + 0x12a4: 0x000c, 0x12a5: 0x000c, 0x12a8: 0x000c, 0x12a9: 0x000c, + 0x12ab: 0x000c, 0x12ac: 0x000c, 0x12ad: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12e6: 0x000c, 0x12e8: 0x000c, 0x12e9: 0x000c, + 0x12ed: 0x000c, 0x12ef: 0x000c, + 0x12f0: 0x000c, 0x12f1: 0x000c, + // Block 0x4c, offset 0x1300 + 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, + 0x1336: 0x000c, 0x1337: 0x000c, + // Block 0x4d, offset 0x1340 + 0x1350: 0x000c, 0x1351: 0x000c, + 0x1352: 0x000c, 0x1354: 0x000c, 0x1355: 0x000c, 0x1356: 0x000c, 0x1357: 0x000c, + 0x1358: 0x000c, 0x1359: 0x000c, 0x135a: 0x000c, 0x135b: 0x000c, 0x135c: 0x000c, 0x135d: 0x000c, + 0x135e: 0x000c, 0x135f: 0x000c, 0x1360: 0x000c, 0x1362: 0x000c, 0x1363: 0x000c, + 0x1364: 0x000c, 0x1365: 0x000c, 0x1366: 0x000c, 0x1367: 0x000c, 0x1368: 0x000c, + 0x136d: 0x000c, + 0x1374: 0x000c, + 0x1378: 0x000c, 0x1379: 0x000c, + // Block 0x4e, offset 0x1380 + 0x13bd: 0x000a, 0x13bf: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x000a, 0x13c1: 0x000a, + 0x13cd: 0x000a, 0x13ce: 0x000a, 0x13cf: 0x000a, + 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, + 0x13ed: 0x000a, 0x13ee: 0x000a, 0x13ef: 0x000a, + 0x13fd: 0x000a, 0x13fe: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x0009, 0x1401: 0x0009, 0x1402: 0x0009, 0x1403: 0x0009, 0x1404: 0x0009, 0x1405: 0x0009, + 0x1406: 0x0009, 0x1407: 0x0009, 0x1408: 0x0009, 0x1409: 0x0009, 0x140a: 0x0009, 0x140b: 0x000b, + 0x140c: 0x000b, 0x140d: 0x000b, 0x140f: 0x0001, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x000a, 0x1420: 0x000a, 0x1421: 0x000a, 0x1422: 0x000a, 0x1423: 0x000a, + 0x1424: 0x000a, 0x1425: 0x000a, 0x1426: 0x000a, 0x1427: 0x000a, 0x1428: 0x0009, 0x1429: 0x0007, + 0x142a: 0x000e, 0x142b: 0x000e, 0x142c: 0x000e, 0x142d: 0x000e, 0x142e: 0x000e, 0x142f: 0x0006, + 0x1430: 0x0004, 0x1431: 0x0004, 0x1432: 0x0004, 0x1433: 0x0004, 0x1434: 0x0004, 0x1435: 0x000a, + 0x1436: 0x000a, 0x1437: 0x000a, 0x1438: 0x000a, 0x1439: 0x000a, 0x143a: 0x000a, 0x143b: 0x000a, + 0x143c: 0x000a, 0x143d: 0x000a, 0x143e: 0x000a, 0x143f: 0x000a, + // Block 0x51, offset 0x1440 + 0x1440: 0x000a, 0x1441: 0x000a, 0x1442: 0x000a, 0x1443: 0x000a, 0x1444: 0x0006, 0x1445: 0x009a, + 0x1446: 0x008a, 0x1447: 0x000a, 0x1448: 0x000a, 0x1449: 0x000a, 0x144a: 0x000a, 0x144b: 0x000a, + 0x144c: 0x000a, 0x144d: 0x000a, 0x144e: 0x000a, 0x144f: 0x000a, 0x1450: 0x000a, 0x1451: 0x000a, + 0x1452: 0x000a, 0x1453: 0x000a, 0x1454: 0x000a, 0x1455: 0x000a, 0x1456: 0x000a, 0x1457: 0x000a, + 0x1458: 0x000a, 0x1459: 0x000a, 0x145a: 0x000a, 0x145b: 0x000a, 0x145c: 0x000a, 0x145d: 0x000a, + 0x145e: 0x000a, 0x145f: 0x0009, 0x1460: 0x000b, 0x1461: 0x000b, 0x1462: 0x000b, 0x1463: 0x000b, + 0x1464: 0x000b, 0x1465: 0x000b, 0x1466: 0x000e, 0x1467: 0x000e, 0x1468: 0x000e, 0x1469: 0x000e, + 0x146a: 0x000b, 0x146b: 0x000b, 0x146c: 0x000b, 0x146d: 0x000b, 0x146e: 0x000b, 0x146f: 0x000b, + 0x1470: 0x0002, 0x1474: 0x0002, 0x1475: 0x0002, + 0x1476: 0x0002, 0x1477: 0x0002, 0x1478: 0x0002, 0x1479: 0x0002, 0x147a: 0x0003, 0x147b: 0x0003, + 0x147c: 0x000a, 0x147d: 0x009a, 0x147e: 0x008a, + // Block 0x52, offset 0x1480 + 0x1480: 0x0002, 0x1481: 0x0002, 0x1482: 0x0002, 0x1483: 0x0002, 0x1484: 0x0002, 0x1485: 0x0002, + 0x1486: 0x0002, 0x1487: 0x0002, 0x1488: 0x0002, 0x1489: 0x0002, 0x148a: 0x0003, 0x148b: 0x0003, + 0x148c: 0x000a, 0x148d: 0x009a, 0x148e: 0x008a, + 0x14a0: 0x0004, 0x14a1: 0x0004, 0x14a2: 0x0004, 0x14a3: 0x0004, + 0x14a4: 0x0004, 0x14a5: 0x0004, 0x14a6: 0x0004, 0x14a7: 0x0004, 0x14a8: 0x0004, 0x14a9: 0x0004, + 0x14aa: 0x0004, 0x14ab: 0x0004, 0x14ac: 0x0004, 0x14ad: 0x0004, 0x14ae: 0x0004, 0x14af: 0x0004, + 0x14b0: 0x0004, 0x14b1: 0x0004, 0x14b2: 0x0004, 0x14b3: 0x0004, 0x14b4: 0x0004, 0x14b5: 0x0004, + 0x14b6: 0x0004, 0x14b7: 0x0004, 0x14b8: 0x0004, 0x14b9: 0x0004, 0x14ba: 0x0004, 0x14bb: 0x0004, + 0x14bc: 0x0004, 0x14bd: 0x0004, 0x14be: 0x0004, 0x14bf: 0x0004, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0004, 0x14c1: 0x0004, 0x14c2: 0x0004, 0x14c3: 0x0004, 0x14c4: 0x0004, 0x14c5: 0x0004, + 0x14c6: 0x0004, 0x14c7: 0x0004, 0x14c8: 0x0004, 0x14c9: 0x0004, 0x14ca: 0x0004, 0x14cb: 0x0004, + 0x14cc: 0x0004, 0x14cd: 0x0004, 0x14ce: 0x0004, 0x14cf: 0x0004, 0x14d0: 0x000c, 0x14d1: 0x000c, + 0x14d2: 0x000c, 0x14d3: 0x000c, 0x14d4: 0x000c, 0x14d5: 0x000c, 0x14d6: 0x000c, 0x14d7: 0x000c, + 0x14d8: 0x000c, 0x14d9: 0x000c, 0x14da: 0x000c, 0x14db: 0x000c, 0x14dc: 0x000c, 0x14dd: 0x000c, + 0x14de: 0x000c, 0x14df: 0x000c, 0x14e0: 0x000c, 0x14e1: 0x000c, 0x14e2: 0x000c, 0x14e3: 0x000c, + 0x14e4: 0x000c, 0x14e5: 0x000c, 0x14e6: 0x000c, 0x14e7: 0x000c, 0x14e8: 0x000c, 0x14e9: 0x000c, + 0x14ea: 0x000c, 0x14eb: 0x000c, 0x14ec: 0x000c, 0x14ed: 0x000c, 0x14ee: 0x000c, 0x14ef: 0x000c, + 0x14f0: 0x000c, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, 0x1505: 0x000a, + 0x1506: 0x000a, 0x1508: 0x000a, 0x1509: 0x000a, + 0x1514: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, 0x1520: 0x000a, 0x1521: 0x000a, 0x1522: 0x000a, 0x1523: 0x000a, + 0x1525: 0x000a, 0x1527: 0x000a, 0x1529: 0x000a, + 0x152e: 0x0004, + 0x153a: 0x000a, 0x153b: 0x000a, + // Block 0x55, offset 0x1540 + 0x1540: 0x000a, 0x1541: 0x000a, 0x1542: 0x000a, 0x1543: 0x000a, 0x1544: 0x000a, + 0x154a: 0x000a, 0x154b: 0x000a, + 0x154c: 0x000a, 0x154d: 0x000a, 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x000a, 0x15d3: 0x000a, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x000a, 0x1609: 0x000a, 0x160a: 0x000a, 0x160b: 0x000a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x0003, 0x1613: 0x0004, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x000a, + 0x162a: 0x000a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + 0x1636: 0x000a, 0x1637: 0x000a, 0x1638: 0x000a, 0x1639: 0x000a, 0x163a: 0x000a, 0x163b: 0x000a, + 0x163c: 0x000a, 0x163d: 0x000a, 0x163e: 0x000a, 0x163f: 0x000a, + // Block 0x59, offset 0x1640 + 0x1640: 0x000a, 0x1641: 0x000a, 0x1642: 0x000a, 0x1643: 0x000a, 0x1644: 0x000a, 0x1645: 0x000a, + 0x1646: 0x000a, 0x1647: 0x000a, 0x1648: 0x003a, 0x1649: 0x002a, 0x164a: 0x003a, 0x164b: 0x002a, + 0x164c: 0x000a, 0x164d: 0x000a, 0x164e: 0x000a, 0x164f: 0x000a, 0x1650: 0x000a, 0x1651: 0x000a, + 0x1652: 0x000a, 0x1653: 0x000a, 0x1654: 0x000a, 0x1655: 0x000a, 0x1656: 0x000a, 0x1657: 0x000a, + 0x1658: 0x000a, 0x1659: 0x000a, 0x165a: 0x000a, 0x165b: 0x000a, 0x165c: 0x000a, 0x165d: 0x000a, + 0x165e: 0x000a, 0x165f: 0x000a, 0x1660: 0x000a, 0x1661: 0x000a, 0x1662: 0x000a, 0x1663: 0x000a, + 0x1664: 0x000a, 0x1665: 0x000a, 0x1666: 0x000a, 0x1667: 0x000a, 0x1668: 0x000a, 0x1669: 0x009a, + 0x166a: 0x008a, 0x166b: 0x000a, 0x166c: 0x000a, 0x166d: 0x000a, 0x166e: 0x000a, 0x166f: 0x000a, + 0x1670: 0x000a, 0x1671: 0x000a, 0x1672: 0x000a, 0x1673: 0x000a, 0x1674: 0x000a, 0x1675: 0x000a, + // Block 0x5a, offset 0x1680 + 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a, + 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a, + 0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a, + 0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a, + 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, 0x16ff: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, + 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, + 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1715: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, + 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, + 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, + 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, + 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a, + 0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a, + 0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a, + 0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a, + 0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a, + // Block 0x5e, offset 0x1780 + 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, + 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002, + 0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002, + 0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002, + 0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002, + // Block 0x5f, offset 0x17c0 + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a, + 0x182a: 0x000a, 0x182b: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, + 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, + 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x009a, + 0x1886: 0x008a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, + 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, + 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, + 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a, + 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a, + 0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a, + 0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a, + 0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba, + 0x18d8: 0x00aa, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x003a, 0x193d: 0x002a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, + 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, + 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, + 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, 0x1997: 0x000a, + 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, + 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, + 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, + 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, + 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a, + 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, + 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, + 0x19ea: 0x000a, 0x19ef: 0x000c, + 0x19f0: 0x000c, 0x19f1: 0x000c, + 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, + 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, + // Block 0x68, offset 0x1a00 + 0x1a3f: 0x000c, + // Block 0x69, offset 0x1a40 + 0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c, + 0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c, + 0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c, + 0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c, + 0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c, + 0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, + 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, + 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a, + 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a, + 0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a, + 0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a, + 0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a, + 0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a, + 0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a, + 0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a, + 0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, + 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, + 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x009a, 0x1ad6: 0x008a, 0x1ad7: 0x00ba, + 0x1ad8: 0x00aa, 0x1ad9: 0x009a, 0x1ada: 0x008a, 0x1adb: 0x007a, 0x1adc: 0x006a, 0x1add: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, + 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, + 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, + 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, + 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, + 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, + 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, + 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, + 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a, + 0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a, + 0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, + 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, + 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, + 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, + 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, + 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, + 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, + 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a, + 0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, + 0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a, + 0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a, + 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a, + 0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a, + 0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a, + 0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c, + 0x1bf0: 0x000a, + 0x1bf6: 0x000a, 0x1bf7: 0x000a, + 0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a, + 0x1c20: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c7b: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a, + 0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a, + 0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a, + 0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a, + 0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a, + 0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cdd: 0x000a, + 0x1cde: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d10: 0x000a, 0x1d11: 0x000a, + 0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a, + 0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a, + 0x1d1e: 0x000a, 0x1d1f: 0x000a, + 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a, + 0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a, + 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e1e: 0x000a, 0x1e1f: 0x000a, + 0x1e3f: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e50: 0x000a, 0x1e51: 0x000a, + 0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a, + 0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a, + 0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a, + 0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a, + 0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a, + 0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a, + 0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a, + 0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a, + 0x1e86: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f2f: 0x000c, + 0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c, + 0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c, + 0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a, + // Block 0x7d, offset 0x1f40 + 0x1f5e: 0x000c, 0x1f5f: 0x000c, + // Block 0x7e, offset 0x1f80 + 0x1fb0: 0x000c, 0x1fb1: 0x000c, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a, + 0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a, + 0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a, + 0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a, + 0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a, + 0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a, + // Block 0x80, offset 0x2000 + 0x2008: 0x000a, + // Block 0x81, offset 0x2040 + 0x2042: 0x000c, + 0x2046: 0x000c, 0x204b: 0x000c, + 0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a, + 0x206a: 0x000a, 0x206b: 0x000a, 0x206c: 0x000c, + 0x2078: 0x0004, 0x2079: 0x0004, + // Block 0x82, offset 0x2080 + 0x20b4: 0x000a, 0x20b5: 0x000a, + 0x20b6: 0x000a, 0x20b7: 0x000a, + // Block 0x83, offset 0x20c0 + 0x20c4: 0x000c, 0x20c5: 0x000c, + 0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c, + 0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, + 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c, + 0x20f0: 0x000c, 0x20f1: 0x000c, + 0x20ff: 0x000c, + // Block 0x84, offset 0x2100 + 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, + 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, + // Block 0x85, offset 0x2140 + 0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c, + 0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c, + // Block 0x86, offset 0x2180 + 0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c, + 0x21b3: 0x000c, + 0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c, + 0x21bc: 0x000c, 0x21bd: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21e5: 0x000c, + // Block 0x88, offset 0x2200 + 0x2229: 0x000c, + 0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c, + 0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c, + 0x2236: 0x000c, + // Block 0x89, offset 0x2240 + 0x2243: 0x000c, + 0x224c: 0x000c, + 0x227c: 0x000c, + // Block 0x8a, offset 0x2280 + 0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c, + 0x22b7: 0x000c, 0x22b8: 0x000c, + 0x22be: 0x000c, 0x22bf: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22c1: 0x000c, + 0x22ec: 0x000c, 0x22ed: 0x000c, + 0x22f6: 0x000c, + // Block 0x8c, offset 0x2300 + 0x232a: 0x000a, 0x232b: 0x000a, + // Block 0x8d, offset 0x2340 + 0x2365: 0x000c, 0x2368: 0x000c, + 0x236d: 0x000c, + // Block 0x8e, offset 0x2380 + 0x239d: 0x0001, + 0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001, + 0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003, + 0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001, + 0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001, + 0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001, + 0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001, + 0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001, + 0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d, + 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, + 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, + 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, + 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, + 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d, + // Block 0x90, offset 0x2400 + 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, + 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, + 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000d, 0x2411: 0x000d, + 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, + 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, + 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, + 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, + 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, + 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, + 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, + 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000a, 0x243f: 0x000a, + // Block 0x91, offset 0x2440 + 0x2440: 0x000a, 0x2441: 0x000a, 0x2442: 0x000a, 0x2443: 0x000a, 0x2444: 0x000a, 0x2445: 0x000a, + 0x2446: 0x000a, 0x2447: 0x000a, 0x2448: 0x000a, 0x2449: 0x000a, 0x244a: 0x000a, 0x244b: 0x000a, + 0x244c: 0x000a, 0x244d: 0x000a, 0x244e: 0x000a, 0x244f: 0x000a, 0x2450: 0x000d, 0x2451: 0x000d, + 0x2452: 0x000d, 0x2453: 0x000d, 0x2454: 0x000d, 0x2455: 0x000d, 0x2456: 0x000d, 0x2457: 0x000d, + 0x2458: 0x000d, 0x2459: 0x000d, 0x245a: 0x000d, 0x245b: 0x000d, 0x245c: 0x000d, 0x245d: 0x000d, + 0x245e: 0x000d, 0x245f: 0x000d, 0x2460: 0x000d, 0x2461: 0x000d, 0x2462: 0x000d, 0x2463: 0x000d, + 0x2464: 0x000d, 0x2465: 0x000d, 0x2466: 0x000d, 0x2467: 0x000d, 0x2468: 0x000d, 0x2469: 0x000d, + 0x246a: 0x000d, 0x246b: 0x000d, 0x246c: 0x000d, 0x246d: 0x000d, 0x246e: 0x000d, 0x246f: 0x000d, + 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, + 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, + 0x247c: 0x000d, 0x247d: 0x000d, 0x247e: 0x000d, 0x247f: 0x000d, + // Block 0x92, offset 0x2480 + 0x2480: 0x000d, 0x2481: 0x000d, 0x2482: 0x000d, 0x2483: 0x000d, 0x2484: 0x000d, 0x2485: 0x000d, + 0x2486: 0x000d, 0x2487: 0x000d, 0x2488: 0x000d, 0x2489: 0x000d, 0x248a: 0x000d, 0x248b: 0x000d, + 0x248c: 0x000d, 0x248d: 0x000d, 0x248e: 0x000d, 0x248f: 0x000a, 0x2490: 0x000b, 0x2491: 0x000b, + 0x2492: 0x000b, 0x2493: 0x000b, 0x2494: 0x000b, 0x2495: 0x000b, 0x2496: 0x000b, 0x2497: 0x000b, + 0x2498: 0x000b, 0x2499: 0x000b, 0x249a: 0x000b, 0x249b: 0x000b, 0x249c: 0x000b, 0x249d: 0x000b, + 0x249e: 0x000b, 0x249f: 0x000b, 0x24a0: 0x000b, 0x24a1: 0x000b, 0x24a2: 0x000b, 0x24a3: 0x000b, + 0x24a4: 0x000b, 0x24a5: 0x000b, 0x24a6: 0x000b, 0x24a7: 0x000b, 0x24a8: 0x000b, 0x24a9: 0x000b, + 0x24aa: 0x000b, 0x24ab: 0x000b, 0x24ac: 0x000b, 0x24ad: 0x000b, 0x24ae: 0x000b, 0x24af: 0x000b, + 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, + 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, + 0x24bc: 0x000d, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000c, 0x24c1: 0x000c, 0x24c2: 0x000c, 0x24c3: 0x000c, 0x24c4: 0x000c, 0x24c5: 0x000c, + 0x24c6: 0x000c, 0x24c7: 0x000c, 0x24c8: 0x000c, 0x24c9: 0x000c, 0x24ca: 0x000c, 0x24cb: 0x000c, + 0x24cc: 0x000c, 0x24cd: 0x000c, 0x24ce: 0x000c, 0x24cf: 0x000c, 0x24d0: 0x000a, 0x24d1: 0x000a, + 0x24d2: 0x000a, 0x24d3: 0x000a, 0x24d4: 0x000a, 0x24d5: 0x000a, 0x24d6: 0x000a, 0x24d7: 0x000a, + 0x24d8: 0x000a, 0x24d9: 0x000a, + 0x24e0: 0x000c, 0x24e1: 0x000c, 0x24e2: 0x000c, 0x24e3: 0x000c, + 0x24e4: 0x000c, 0x24e5: 0x000c, 0x24e6: 0x000c, 0x24e7: 0x000c, 0x24e8: 0x000c, 0x24e9: 0x000c, + 0x24ea: 0x000c, 0x24eb: 0x000c, 0x24ec: 0x000c, 0x24ed: 0x000c, 0x24ee: 0x000c, 0x24ef: 0x000c, + 0x24f0: 0x000a, 0x24f1: 0x000a, 0x24f2: 0x000a, 0x24f3: 0x000a, 0x24f4: 0x000a, 0x24f5: 0x000a, + 0x24f6: 0x000a, 0x24f7: 0x000a, 0x24f8: 0x000a, 0x24f9: 0x000a, 0x24fa: 0x000a, 0x24fb: 0x000a, + 0x24fc: 0x000a, 0x24fd: 0x000a, 0x24fe: 0x000a, 0x24ff: 0x000a, + // Block 0x94, offset 0x2500 + 0x2500: 0x000a, 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x000a, 0x2504: 0x000a, 0x2505: 0x000a, + 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x000a, 0x2509: 0x000a, 0x250a: 0x000a, 0x250b: 0x000a, + 0x250c: 0x000a, 0x250d: 0x000a, 0x250e: 0x000a, 0x250f: 0x000a, 0x2510: 0x0006, 0x2511: 0x000a, + 0x2512: 0x0006, 0x2514: 0x000a, 0x2515: 0x0006, 0x2516: 0x000a, 0x2517: 0x000a, + 0x2518: 0x000a, 0x2519: 0x009a, 0x251a: 0x008a, 0x251b: 0x007a, 0x251c: 0x006a, 0x251d: 0x009a, + 0x251e: 0x008a, 0x251f: 0x0004, 0x2520: 0x000a, 0x2521: 0x000a, 0x2522: 0x0003, 0x2523: 0x0003, + 0x2524: 0x000a, 0x2525: 0x000a, 0x2526: 0x000a, 0x2528: 0x000a, 0x2529: 0x0004, + 0x252a: 0x0004, 0x252b: 0x000a, + 0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d, + 0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d, + 0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000d, + // Block 0x95, offset 0x2540 + 0x2540: 0x000d, 0x2541: 0x000d, 0x2542: 0x000d, 0x2543: 0x000d, 0x2544: 0x000d, 0x2545: 0x000d, + 0x2546: 0x000d, 0x2547: 0x000d, 0x2548: 0x000d, 0x2549: 0x000d, 0x254a: 0x000d, 0x254b: 0x000d, + 0x254c: 0x000d, 0x254d: 0x000d, 0x254e: 0x000d, 0x254f: 0x000d, 0x2550: 0x000d, 0x2551: 0x000d, + 0x2552: 0x000d, 0x2553: 0x000d, 0x2554: 0x000d, 0x2555: 0x000d, 0x2556: 0x000d, 0x2557: 0x000d, + 0x2558: 0x000d, 0x2559: 0x000d, 0x255a: 0x000d, 0x255b: 0x000d, 0x255c: 0x000d, 0x255d: 0x000d, + 0x255e: 0x000d, 0x255f: 0x000d, 0x2560: 0x000d, 0x2561: 0x000d, 0x2562: 0x000d, 0x2563: 0x000d, + 0x2564: 0x000d, 0x2565: 0x000d, 0x2566: 0x000d, 0x2567: 0x000d, 0x2568: 0x000d, 0x2569: 0x000d, + 0x256a: 0x000d, 0x256b: 0x000d, 0x256c: 0x000d, 0x256d: 0x000d, 0x256e: 0x000d, 0x256f: 0x000d, + 0x2570: 0x000d, 0x2571: 0x000d, 0x2572: 0x000d, 0x2573: 0x000d, 0x2574: 0x000d, 0x2575: 0x000d, + 0x2576: 0x000d, 0x2577: 0x000d, 0x2578: 0x000d, 0x2579: 0x000d, 0x257a: 0x000d, 0x257b: 0x000d, + 0x257c: 0x000d, 0x257d: 0x000d, 0x257e: 0x000d, 0x257f: 0x000b, + // Block 0x96, offset 0x2580 + 0x2581: 0x000a, 0x2582: 0x000a, 0x2583: 0x0004, 0x2584: 0x0004, 0x2585: 0x0004, + 0x2586: 0x000a, 0x2587: 0x000a, 0x2588: 0x003a, 0x2589: 0x002a, 0x258a: 0x000a, 0x258b: 0x0003, + 0x258c: 0x0006, 0x258d: 0x0003, 0x258e: 0x0006, 0x258f: 0x0006, 0x2590: 0x0002, 0x2591: 0x0002, + 0x2592: 0x0002, 0x2593: 0x0002, 0x2594: 0x0002, 0x2595: 0x0002, 0x2596: 0x0002, 0x2597: 0x0002, + 0x2598: 0x0002, 0x2599: 0x0002, 0x259a: 0x0006, 0x259b: 0x000a, 0x259c: 0x000a, 0x259d: 0x000a, + 0x259e: 0x000a, 0x259f: 0x000a, 0x25a0: 0x000a, + 0x25bb: 0x005a, + 0x25bc: 0x000a, 0x25bd: 0x004a, 0x25be: 0x000a, 0x25bf: 0x000a, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x000a, + 0x25db: 0x005a, 0x25dc: 0x000a, 0x25dd: 0x004a, + 0x25de: 0x000a, 0x25df: 0x00fa, 0x25e0: 0x00ea, 0x25e1: 0x000a, 0x25e2: 0x003a, 0x25e3: 0x002a, + 0x25e4: 0x000a, 0x25e5: 0x000a, + // Block 0x98, offset 0x2600 + 0x2620: 0x0004, 0x2621: 0x0004, 0x2622: 0x000a, 0x2623: 0x000a, + 0x2624: 0x000a, 0x2625: 0x0004, 0x2626: 0x0004, 0x2628: 0x000a, 0x2629: 0x000a, + 0x262a: 0x000a, 0x262b: 0x000a, 0x262c: 0x000a, 0x262d: 0x000a, 0x262e: 0x000a, + 0x2630: 0x000b, 0x2631: 0x000b, 0x2632: 0x000b, 0x2633: 0x000b, 0x2634: 0x000b, 0x2635: 0x000b, + 0x2636: 0x000b, 0x2637: 0x000b, 0x2638: 0x000b, 0x2639: 0x000a, 0x263a: 0x000a, 0x263b: 0x000a, + 0x263c: 0x000a, 0x263d: 0x000a, 0x263e: 0x000b, 0x263f: 0x000b, + // Block 0x99, offset 0x2640 + 0x2641: 0x000a, + // Block 0x9a, offset 0x2680 + 0x2680: 0x000a, 0x2681: 0x000a, 0x2682: 0x000a, 0x2683: 0x000a, 0x2684: 0x000a, 0x2685: 0x000a, + 0x2686: 0x000a, 0x2687: 0x000a, 0x2688: 0x000a, 0x2689: 0x000a, 0x268a: 0x000a, 0x268b: 0x000a, + 0x268c: 0x000a, 0x2690: 0x000a, 0x2691: 0x000a, + 0x2692: 0x000a, 0x2693: 0x000a, 0x2694: 0x000a, 0x2695: 0x000a, 0x2696: 0x000a, 0x2697: 0x000a, + 0x2698: 0x000a, 0x2699: 0x000a, 0x269a: 0x000a, 0x269b: 0x000a, 0x269c: 0x000a, + 0x26a0: 0x000a, + // Block 0x9b, offset 0x26c0 + 0x26fd: 0x000c, + // Block 0x9c, offset 0x2700 + 0x2720: 0x000c, 0x2721: 0x0002, 0x2722: 0x0002, 0x2723: 0x0002, + 0x2724: 0x0002, 0x2725: 0x0002, 0x2726: 0x0002, 0x2727: 0x0002, 0x2728: 0x0002, 0x2729: 0x0002, + 0x272a: 0x0002, 0x272b: 0x0002, 0x272c: 0x0002, 0x272d: 0x0002, 0x272e: 0x0002, 0x272f: 0x0002, + 0x2730: 0x0002, 0x2731: 0x0002, 0x2732: 0x0002, 0x2733: 0x0002, 0x2734: 0x0002, 0x2735: 0x0002, + 0x2736: 0x0002, 0x2737: 0x0002, 0x2738: 0x0002, 0x2739: 0x0002, 0x273a: 0x0002, 0x273b: 0x0002, + // Block 0x9d, offset 0x2740 + 0x2776: 0x000c, 0x2777: 0x000c, 0x2778: 0x000c, 0x2779: 0x000c, 0x277a: 0x000c, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, + 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, + 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, + 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, + 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, + 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, + 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, + 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, + 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, + 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x000a, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x000c, 0x2802: 0x000c, 0x2803: 0x000c, 0x2804: 0x0001, 0x2805: 0x000c, + 0x2806: 0x000c, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x000c, 0x280d: 0x000c, 0x280e: 0x000c, 0x280f: 0x000c, 0x2810: 0x0001, 0x2811: 0x0001, + 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, + 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, + 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, + 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, + 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, + 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, + 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x000c, 0x2839: 0x000c, 0x283a: 0x000c, 0x283b: 0x0001, + 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x000c, + // Block 0xa1, offset 0x2840 + 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, + 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, + 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, + 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, + 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, + 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, + 0x2864: 0x0001, 0x2865: 0x000c, 0x2866: 0x000c, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, + 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, + 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, + 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x0001, 0x287a: 0x0001, 0x287b: 0x0001, + 0x287c: 0x0001, 0x287d: 0x0001, 0x287e: 0x0001, 0x287f: 0x0001, + // Block 0xa2, offset 0x2880 + 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, + 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, + 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, + 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, + 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0001, 0x28a1: 0x0001, 0x28a2: 0x0001, 0x28a3: 0x0001, + 0x28a4: 0x0001, 0x28a5: 0x0001, 0x28a6: 0x0001, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, + 0x28aa: 0x0001, 0x28ab: 0x0001, 0x28ac: 0x0001, 0x28ad: 0x0001, 0x28ae: 0x0001, 0x28af: 0x0001, + 0x28b0: 0x0001, 0x28b1: 0x0001, 0x28b2: 0x0001, 0x28b3: 0x0001, 0x28b4: 0x0001, 0x28b5: 0x0001, + 0x28b6: 0x0001, 0x28b7: 0x0001, 0x28b8: 0x0001, 0x28b9: 0x000a, 0x28ba: 0x000a, 0x28bb: 0x000a, + 0x28bc: 0x000a, 0x28bd: 0x000a, 0x28be: 0x000a, 0x28bf: 0x000a, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x000d, 0x28c1: 0x000d, 0x28c2: 0x000d, 0x28c3: 0x000d, 0x28c4: 0x000d, 0x28c5: 0x000d, + 0x28c6: 0x000d, 0x28c7: 0x000d, 0x28c8: 0x000d, 0x28c9: 0x000d, 0x28ca: 0x000d, 0x28cb: 0x000d, + 0x28cc: 0x000d, 0x28cd: 0x000d, 0x28ce: 0x000d, 0x28cf: 0x000d, 0x28d0: 0x000d, 0x28d1: 0x000d, + 0x28d2: 0x000d, 0x28d3: 0x000d, 0x28d4: 0x000d, 0x28d5: 0x000d, 0x28d6: 0x000d, 0x28d7: 0x000d, + 0x28d8: 0x000d, 0x28d9: 0x000d, 0x28da: 0x000d, 0x28db: 0x000d, 0x28dc: 0x000d, 0x28dd: 0x000d, + 0x28de: 0x000d, 0x28df: 0x000d, 0x28e0: 0x000d, 0x28e1: 0x000d, 0x28e2: 0x000d, 0x28e3: 0x000d, + 0x28e4: 0x000c, 0x28e5: 0x000c, 0x28e6: 0x000c, 0x28e7: 0x000c, 0x28e8: 0x0001, 0x28e9: 0x0001, + 0x28ea: 0x0001, 0x28eb: 0x0001, 0x28ec: 0x0001, 0x28ed: 0x0001, 0x28ee: 0x0001, 0x28ef: 0x0001, + 0x28f0: 0x0005, 0x28f1: 0x0005, 0x28f2: 0x0005, 0x28f3: 0x0005, 0x28f4: 0x0005, 0x28f5: 0x0005, + 0x28f6: 0x0005, 0x28f7: 0x0005, 0x28f8: 0x0005, 0x28f9: 0x0005, 0x28fa: 0x0001, 0x28fb: 0x0001, + 0x28fc: 0x0001, 0x28fd: 0x0001, 0x28fe: 0x0001, 0x28ff: 0x0001, + // Block 0xa4, offset 0x2900 + 0x2900: 0x0001, 0x2901: 0x0001, 0x2902: 0x0001, 0x2903: 0x0001, 0x2904: 0x0001, 0x2905: 0x0001, + 0x2906: 0x0001, 0x2907: 0x0001, 0x2908: 0x0001, 0x2909: 0x0001, 0x290a: 0x0001, 0x290b: 0x0001, + 0x290c: 0x0001, 0x290d: 0x0001, 0x290e: 0x0001, 0x290f: 0x0001, 0x2910: 0x0001, 0x2911: 0x0001, + 0x2912: 0x0001, 0x2913: 0x0001, 0x2914: 0x0001, 0x2915: 0x0001, 0x2916: 0x0001, 0x2917: 0x0001, + 0x2918: 0x0001, 0x2919: 0x0001, 0x291a: 0x0001, 0x291b: 0x0001, 0x291c: 0x0001, 0x291d: 0x0001, + 0x291e: 0x0001, 0x291f: 0x0001, 0x2920: 0x0005, 0x2921: 0x0005, 0x2922: 0x0005, 0x2923: 0x0005, + 0x2924: 0x0005, 0x2925: 0x0005, 0x2926: 0x0005, 0x2927: 0x0005, 0x2928: 0x0005, 0x2929: 0x0005, + 0x292a: 0x0005, 0x292b: 0x0005, 0x292c: 0x0005, 0x292d: 0x0005, 0x292e: 0x0005, 0x292f: 0x0005, + 0x2930: 0x0005, 0x2931: 0x0005, 0x2932: 0x0005, 0x2933: 0x0005, 0x2934: 0x0005, 0x2935: 0x0005, + 0x2936: 0x0005, 0x2937: 0x0005, 0x2938: 0x0005, 0x2939: 0x0005, 0x293a: 0x0005, 0x293b: 0x0005, + 0x293c: 0x0005, 0x293d: 0x0005, 0x293e: 0x0005, 0x293f: 0x0001, + // Block 0xa5, offset 0x2940 + 0x2940: 0x0001, 0x2941: 0x0001, 0x2942: 0x0001, 0x2943: 0x0001, 0x2944: 0x0001, 0x2945: 0x0001, + 0x2946: 0x0001, 0x2947: 0x0001, 0x2948: 0x0001, 0x2949: 0x0001, 0x294a: 0x0001, 0x294b: 0x0001, + 0x294c: 0x0001, 0x294d: 0x0001, 0x294e: 0x0001, 0x294f: 0x0001, 0x2950: 0x0001, 0x2951: 0x0001, + 0x2952: 0x0001, 0x2953: 0x0001, 0x2954: 0x0001, 0x2955: 0x0001, 0x2956: 0x0001, 0x2957: 0x0001, + 0x2958: 0x0001, 0x2959: 0x0001, 0x295a: 0x0001, 0x295b: 0x0001, 0x295c: 0x0001, 0x295d: 0x0001, + 0x295e: 0x0001, 0x295f: 0x0001, 0x2960: 0x0001, 0x2961: 0x0001, 0x2962: 0x0001, 0x2963: 0x0001, + 0x2964: 0x0001, 0x2965: 0x0001, 0x2966: 0x0001, 0x2967: 0x0001, 0x2968: 0x0001, 0x2969: 0x0001, + 0x296a: 0x0001, 0x296b: 0x000c, 0x296c: 0x000c, 0x296d: 0x0001, 0x296e: 0x0001, 0x296f: 0x0001, + 0x2970: 0x0001, 0x2971: 0x0001, 0x2972: 0x0001, 0x2973: 0x0001, 0x2974: 0x0001, 0x2975: 0x0001, + 0x2976: 0x0001, 0x2977: 0x0001, 0x2978: 0x0001, 0x2979: 0x0001, 0x297a: 0x0001, 0x297b: 0x0001, + 0x297c: 0x0001, 0x297d: 0x0001, 0x297e: 0x0001, 0x297f: 0x0001, + // Block 0xa6, offset 0x2980 + 0x2980: 0x0001, 0x2981: 0x0001, 0x2982: 0x0001, 0x2983: 0x0001, 0x2984: 0x0001, 0x2985: 0x0001, + 0x2986: 0x0001, 0x2987: 0x0001, 0x2988: 0x0001, 0x2989: 0x0001, 0x298a: 0x0001, 0x298b: 0x0001, + 0x298c: 0x0001, 0x298d: 0x0001, 0x298e: 0x0001, 0x298f: 0x0001, 0x2990: 0x0001, 0x2991: 0x0001, + 0x2992: 0x0001, 0x2993: 0x0001, 0x2994: 0x0001, 0x2995: 0x0001, 0x2996: 0x0001, 0x2997: 0x0001, + 0x2998: 0x0001, 0x2999: 0x0001, 0x299a: 0x0001, 0x299b: 0x0001, 0x299c: 0x0001, 0x299d: 0x0001, + 0x299e: 0x0001, 0x299f: 0x0001, 0x29a0: 0x0001, 0x29a1: 0x0001, 0x29a2: 0x0001, 0x29a3: 0x0001, + 0x29a4: 0x0001, 0x29a5: 0x0001, 0x29a6: 0x0001, 0x29a7: 0x0001, 0x29a8: 0x0001, 0x29a9: 0x0001, + 0x29aa: 0x0001, 0x29ab: 0x0001, 0x29ac: 0x0001, 0x29ad: 0x0001, 0x29ae: 0x0001, 0x29af: 0x0001, + 0x29b0: 0x0001, 0x29b1: 0x0001, 0x29b2: 0x0001, 0x29b3: 0x0001, 0x29b4: 0x0001, 0x29b5: 0x0001, + 0x29b6: 0x0001, 0x29b7: 0x0001, 0x29b8: 0x0001, 0x29b9: 0x0001, 0x29ba: 0x0001, 0x29bb: 0x0001, + 0x29bc: 0x0001, 0x29bd: 0x000c, 0x29be: 0x000c, 0x29bf: 0x000c, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x0001, 0x29c1: 0x0001, 0x29c2: 0x0001, 0x29c3: 0x0001, 0x29c4: 0x0001, 0x29c5: 0x0001, + 0x29c6: 0x0001, 0x29c7: 0x0001, 0x29c8: 0x0001, 0x29c9: 0x0001, 0x29ca: 0x0001, 0x29cb: 0x0001, + 0x29cc: 0x0001, 0x29cd: 0x0001, 0x29ce: 0x0001, 0x29cf: 0x0001, 0x29d0: 0x0001, 0x29d1: 0x0001, + 0x29d2: 0x0001, 0x29d3: 0x0001, 0x29d4: 0x0001, 0x29d5: 0x0001, 0x29d6: 0x0001, 0x29d7: 0x0001, + 0x29d8: 0x0001, 0x29d9: 0x0001, 0x29da: 0x0001, 0x29db: 0x0001, 0x29dc: 0x0001, 0x29dd: 0x0001, + 0x29de: 0x0001, 0x29df: 0x0001, 0x29e0: 0x0001, 0x29e1: 0x0001, 0x29e2: 0x0001, 0x29e3: 0x0001, + 0x29e4: 0x0001, 0x29e5: 0x0001, 0x29e6: 0x0001, 0x29e7: 0x0001, 0x29e8: 0x0001, 0x29e9: 0x0001, + 0x29ea: 0x0001, 0x29eb: 0x0001, 0x29ec: 0x0001, 0x29ed: 0x0001, 0x29ee: 0x0001, 0x29ef: 0x0001, + 0x29f0: 0x000d, 0x29f1: 0x000d, 0x29f2: 0x000d, 0x29f3: 0x000d, 0x29f4: 0x000d, 0x29f5: 0x000d, + 0x29f6: 0x000d, 0x29f7: 0x000d, 0x29f8: 0x000d, 0x29f9: 0x000d, 0x29fa: 0x000d, 0x29fb: 0x000d, + 0x29fc: 0x000d, 0x29fd: 0x000d, 0x29fe: 0x000d, 0x29ff: 0x000d, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x000d, 0x2a01: 0x000d, 0x2a02: 0x000d, 0x2a03: 0x000d, 0x2a04: 0x000d, 0x2a05: 0x000d, + 0x2a06: 0x000c, 0x2a07: 0x000c, 0x2a08: 0x000c, 0x2a09: 0x000c, 0x2a0a: 0x000c, 0x2a0b: 0x000c, + 0x2a0c: 0x000c, 0x2a0d: 0x000c, 0x2a0e: 0x000c, 0x2a0f: 0x000c, 0x2a10: 0x000c, 0x2a11: 0x000d, + 0x2a12: 0x000d, 0x2a13: 0x000d, 0x2a14: 0x000d, 0x2a15: 0x000d, 0x2a16: 0x000d, 0x2a17: 0x000d, + 0x2a18: 0x000d, 0x2a19: 0x000d, 0x2a1a: 0x0001, 0x2a1b: 0x0001, 0x2a1c: 0x0001, 0x2a1d: 0x0001, + 0x2a1e: 0x0001, 0x2a1f: 0x0001, 0x2a20: 0x0001, 0x2a21: 0x0001, 0x2a22: 0x0001, 0x2a23: 0x0001, + 0x2a24: 0x0001, 0x2a25: 0x0001, 0x2a26: 0x0001, 0x2a27: 0x0001, 0x2a28: 0x0001, 0x2a29: 0x0001, + 0x2a2a: 0x0001, 0x2a2b: 0x0001, 0x2a2c: 0x0001, 0x2a2d: 0x0001, 0x2a2e: 0x0001, 0x2a2f: 0x0001, + 0x2a30: 0x0001, 0x2a31: 0x0001, 0x2a32: 0x0001, 0x2a33: 0x0001, 0x2a34: 0x0001, 0x2a35: 0x0001, + 0x2a36: 0x0001, 0x2a37: 0x0001, 0x2a38: 0x0001, 0x2a39: 0x0001, 0x2a3a: 0x0001, 0x2a3b: 0x0001, + 0x2a3c: 0x0001, 0x2a3d: 0x0001, 0x2a3e: 0x0001, 0x2a3f: 0x0001, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x0001, 0x2a41: 0x0001, 0x2a42: 0x000c, 0x2a43: 0x000c, 0x2a44: 0x000c, 0x2a45: 0x000c, + 0x2a46: 0x0001, 0x2a47: 0x0001, 0x2a48: 0x0001, 0x2a49: 0x0001, 0x2a4a: 0x0001, 0x2a4b: 0x0001, + 0x2a4c: 0x0001, 0x2a4d: 0x0001, 0x2a4e: 0x0001, 0x2a4f: 0x0001, 0x2a50: 0x0001, 0x2a51: 0x0001, + 0x2a52: 0x0001, 0x2a53: 0x0001, 0x2a54: 0x0001, 0x2a55: 0x0001, 0x2a56: 0x0001, 0x2a57: 0x0001, + 0x2a58: 0x0001, 0x2a59: 0x0001, 0x2a5a: 0x0001, 0x2a5b: 0x0001, 0x2a5c: 0x0001, 0x2a5d: 0x0001, + 0x2a5e: 0x0001, 0x2a5f: 0x0001, 0x2a60: 0x0001, 0x2a61: 0x0001, 0x2a62: 0x0001, 0x2a63: 0x0001, + 0x2a64: 0x0001, 0x2a65: 0x0001, 0x2a66: 0x0001, 0x2a67: 0x0001, 0x2a68: 0x0001, 0x2a69: 0x0001, + 0x2a6a: 0x0001, 0x2a6b: 0x0001, 0x2a6c: 0x0001, 0x2a6d: 0x0001, 0x2a6e: 0x0001, 0x2a6f: 0x0001, + 0x2a70: 0x0001, 0x2a71: 0x0001, 0x2a72: 0x0001, 0x2a73: 0x0001, 0x2a74: 0x0001, 0x2a75: 0x0001, + 0x2a76: 0x0001, 0x2a77: 0x0001, 0x2a78: 0x0001, 0x2a79: 0x0001, 0x2a7a: 0x0001, 0x2a7b: 0x0001, + 0x2a7c: 0x0001, 0x2a7d: 0x0001, 0x2a7e: 0x0001, 0x2a7f: 0x0001, + // Block 0xaa, offset 0x2a80 + 0x2a81: 0x000c, + 0x2ab8: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, 0x2abb: 0x000c, + 0x2abc: 0x000c, 0x2abd: 0x000c, 0x2abe: 0x000c, 0x2abf: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x000c, 0x2ac1: 0x000c, 0x2ac2: 0x000c, 0x2ac3: 0x000c, 0x2ac4: 0x000c, 0x2ac5: 0x000c, + 0x2ac6: 0x000c, + 0x2ad2: 0x000a, 0x2ad3: 0x000a, 0x2ad4: 0x000a, 0x2ad5: 0x000a, 0x2ad6: 0x000a, 0x2ad7: 0x000a, + 0x2ad8: 0x000a, 0x2ad9: 0x000a, 0x2ada: 0x000a, 0x2adb: 0x000a, 0x2adc: 0x000a, 0x2add: 0x000a, + 0x2ade: 0x000a, 0x2adf: 0x000a, 0x2ae0: 0x000a, 0x2ae1: 0x000a, 0x2ae2: 0x000a, 0x2ae3: 0x000a, + 0x2ae4: 0x000a, 0x2ae5: 0x000a, + 0x2af0: 0x000c, 0x2af3: 0x000c, 0x2af4: 0x000c, + 0x2aff: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x000c, 0x2b01: 0x000c, + 0x2b33: 0x000c, 0x2b34: 0x000c, 0x2b35: 0x000c, + 0x2b36: 0x000c, 0x2b39: 0x000c, 0x2b3a: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, 0x2b41: 0x000c, 0x2b42: 0x000c, + 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, + 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6d: 0x000c, 0x2b6e: 0x000c, 0x2b6f: 0x000c, + 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2bb3: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bc0: 0x000c, 0x2bc1: 0x000c, + 0x2bf6: 0x000c, 0x2bf7: 0x000c, 0x2bf8: 0x000c, 0x2bf9: 0x000c, 0x2bfa: 0x000c, 0x2bfb: 0x000c, + 0x2bfc: 0x000c, 0x2bfd: 0x000c, 0x2bfe: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c09: 0x000c, 0x2c0a: 0x000c, 0x2c0b: 0x000c, + 0x2c0c: 0x000c, 0x2c0f: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c6f: 0x000c, + 0x2c70: 0x000c, 0x2c71: 0x000c, 0x2c74: 0x000c, + 0x2c76: 0x000c, 0x2c77: 0x000c, + 0x2c7e: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2c9f: 0x000c, 0x2ca3: 0x000c, + 0x2ca4: 0x000c, 0x2ca5: 0x000c, 0x2ca6: 0x000c, 0x2ca7: 0x000c, 0x2ca8: 0x000c, 0x2ca9: 0x000c, + 0x2caa: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x000c, + 0x2ce6: 0x000c, 0x2ce7: 0x000c, 0x2ce8: 0x000c, 0x2ce9: 0x000c, + 0x2cea: 0x000c, 0x2ceb: 0x000c, 0x2cec: 0x000c, + 0x2cf0: 0x000c, 0x2cf1: 0x000c, 0x2cf2: 0x000c, 0x2cf3: 0x000c, 0x2cf4: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, 0x2d3b: 0x000c, + 0x2d3c: 0x000c, 0x2d3d: 0x000c, 0x2d3e: 0x000c, 0x2d3f: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d42: 0x000c, 0x2d43: 0x000c, 0x2d44: 0x000c, + 0x2d46: 0x000c, + 0x2d5e: 0x000c, + // Block 0xb6, offset 0x2d80 + 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, + 0x2db6: 0x000c, 0x2db7: 0x000c, 0x2db8: 0x000c, 0x2dba: 0x000c, + 0x2dbf: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0x000c, 0x2dc2: 0x000c, 0x2dc3: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, + 0x2e3c: 0x000c, 0x2e3d: 0x000c, 0x2e3f: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x000c, + 0x2e5c: 0x000c, 0x2e5d: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2eb9: 0x000c, 0x2eba: 0x000c, + 0x2ebd: 0x000c, 0x2ebf: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ec0: 0x000c, + 0x2ee0: 0x000a, 0x2ee1: 0x000a, 0x2ee2: 0x000a, 0x2ee3: 0x000a, + 0x2ee4: 0x000a, 0x2ee5: 0x000a, 0x2ee6: 0x000a, 0x2ee7: 0x000a, 0x2ee8: 0x000a, 0x2ee9: 0x000a, + 0x2eea: 0x000a, 0x2eeb: 0x000a, 0x2eec: 0x000a, + // Block 0xbc, offset 0x2f00 + 0x2f2b: 0x000c, 0x2f2d: 0x000c, + 0x2f30: 0x000c, 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, + 0x2f37: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f5d: 0x000c, + 0x2f5e: 0x000c, 0x2f5f: 0x000c, 0x2f62: 0x000c, 0x2f63: 0x000c, + 0x2f64: 0x000c, 0x2f65: 0x000c, 0x2f67: 0x000c, 0x2f68: 0x000c, 0x2f69: 0x000c, + 0x2f6a: 0x000c, 0x2f6b: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2faf: 0x000c, + 0x2fb0: 0x000c, 0x2fb1: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb4: 0x000c, 0x2fb5: 0x000c, + 0x2fb6: 0x000c, 0x2fb7: 0x000c, 0x2fb9: 0x000c, 0x2fba: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2ffb: 0x000c, + 0x2ffc: 0x000c, 0x2ffe: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3003: 0x000c, + // Block 0xc1, offset 0x3040 + 0x3054: 0x000c, 0x3055: 0x000c, 0x3056: 0x000c, 0x3057: 0x000c, + 0x305a: 0x000c, 0x305b: 0x000c, + 0x3060: 0x000c, + // Block 0xc2, offset 0x3080 + 0x3081: 0x000c, 0x3082: 0x000c, 0x3083: 0x000c, 0x3084: 0x000c, 0x3085: 0x000c, + 0x3086: 0x000c, 0x3089: 0x000c, 0x308a: 0x000c, + 0x30b3: 0x000c, 0x30b4: 0x000c, 0x30b5: 0x000c, + 0x30b6: 0x000c, 0x30b7: 0x000c, 0x30b8: 0x000c, 0x30bb: 0x000c, + 0x30bc: 0x000c, 0x30bd: 0x000c, 0x30be: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30c7: 0x000c, + 0x30d1: 0x000c, + 0x30d2: 0x000c, 0x30d3: 0x000c, 0x30d4: 0x000c, 0x30d5: 0x000c, 0x30d6: 0x000c, + 0x30d9: 0x000c, 0x30da: 0x000c, 0x30db: 0x000c, + // Block 0xc4, offset 0x3100 + 0x310a: 0x000c, 0x310b: 0x000c, + 0x310c: 0x000c, 0x310d: 0x000c, 0x310e: 0x000c, 0x310f: 0x000c, 0x3110: 0x000c, 0x3111: 0x000c, + 0x3112: 0x000c, 0x3113: 0x000c, 0x3114: 0x000c, 0x3115: 0x000c, 0x3116: 0x000c, + 0x3118: 0x000c, 0x3119: 0x000c, + // Block 0xc5, offset 0x3140 + 0x3170: 0x000c, 0x3171: 0x000c, 0x3172: 0x000c, 0x3173: 0x000c, 0x3174: 0x000c, 0x3175: 0x000c, + 0x3176: 0x000c, 0x3178: 0x000c, 0x3179: 0x000c, 0x317a: 0x000c, 0x317b: 0x000c, + 0x317c: 0x000c, 0x317d: 0x000c, + // Block 0xc6, offset 0x3180 + 0x3192: 0x000c, 0x3193: 0x000c, 0x3194: 0x000c, 0x3195: 0x000c, 0x3196: 0x000c, 0x3197: 0x000c, + 0x3198: 0x000c, 0x3199: 0x000c, 0x319a: 0x000c, 0x319b: 0x000c, 0x319c: 0x000c, 0x319d: 0x000c, + 0x319e: 0x000c, 0x319f: 0x000c, 0x31a0: 0x000c, 0x31a1: 0x000c, 0x31a2: 0x000c, 0x31a3: 0x000c, + 0x31a4: 0x000c, 0x31a5: 0x000c, 0x31a6: 0x000c, 0x31a7: 0x000c, + 0x31aa: 0x000c, 0x31ab: 0x000c, 0x31ac: 0x000c, 0x31ad: 0x000c, 0x31ae: 0x000c, 0x31af: 0x000c, + 0x31b0: 0x000c, 0x31b2: 0x000c, 0x31b3: 0x000c, 0x31b5: 0x000c, + 0x31b6: 0x000c, + // Block 0xc7, offset 0x31c0 + 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c, + 0x31f6: 0x000c, 0x31fa: 0x000c, + 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31ff: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c, + 0x3207: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3250: 0x000c, 0x3251: 0x000c, + 0x3255: 0x000c, 0x3257: 0x000c, + // Block 0xca, offset 0x3280 + 0x32b3: 0x000c, 0x32b4: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x000c, 0x32c1: 0x000c, + 0x32f6: 0x000c, 0x32f7: 0x000c, 0x32f8: 0x000c, 0x32f9: 0x000c, 0x32fa: 0x000c, + // Block 0xcc, offset 0x3300 + 0x3300: 0x000c, 0x3302: 0x000c, + // Block 0xcd, offset 0x3340 + 0x3355: 0x000a, 0x3356: 0x000a, 0x3357: 0x000a, + 0x3358: 0x000a, 0x3359: 0x000a, 0x335a: 0x000a, 0x335b: 0x000a, 0x335c: 0x000a, 0x335d: 0x0004, + 0x335e: 0x0004, 0x335f: 0x0004, 0x3360: 0x0004, 0x3361: 0x000a, 0x3362: 0x000a, 0x3363: 0x000a, + 0x3364: 0x000a, 0x3365: 0x000a, 0x3366: 0x000a, 0x3367: 0x000a, 0x3368: 0x000a, 0x3369: 0x000a, + 0x336a: 0x000a, 0x336b: 0x000a, 0x336c: 0x000a, 0x336d: 0x000a, 0x336e: 0x000a, 0x336f: 0x000a, + 0x3370: 0x000a, 0x3371: 0x000a, + // Block 0xce, offset 0x3380 + 0x3380: 0x000c, + 0x3387: 0x000c, 0x3388: 0x000c, 0x3389: 0x000c, 0x338a: 0x000c, 0x338b: 0x000c, + 0x338c: 0x000c, 0x338d: 0x000c, 0x338e: 0x000c, 0x338f: 0x000c, 0x3390: 0x000c, 0x3391: 0x000c, + 0x3392: 0x000c, 0x3393: 0x000c, 0x3394: 0x000c, 0x3395: 0x000c, + // Block 0xcf, offset 0x33c0 + 0x33f0: 0x000c, 0x33f1: 0x000c, 0x33f2: 0x000c, 0x33f3: 0x000c, 0x33f4: 0x000c, + // Block 0xd0, offset 0x3400 + 0x3430: 0x000c, 0x3431: 0x000c, 0x3432: 0x000c, 0x3433: 0x000c, 0x3434: 0x000c, 0x3435: 0x000c, + 0x3436: 0x000c, + // Block 0xd1, offset 0x3440 + 0x344f: 0x000c, + // Block 0xd2, offset 0x3480 + 0x348f: 0x000c, 0x3490: 0x000c, 0x3491: 0x000c, + 0x3492: 0x000c, + // Block 0xd3, offset 0x34c0 + 0x34e2: 0x000a, + 0x34e4: 0x000c, + // Block 0xd4, offset 0x3500 + 0x351d: 0x000c, + 0x351e: 0x000c, 0x3520: 0x000b, 0x3521: 0x000b, 0x3522: 0x000b, 0x3523: 0x000b, + // Block 0xd5, offset 0x3540 + 0x3540: 0x000c, 0x3541: 0x000c, 0x3542: 0x000c, 0x3543: 0x000c, 0x3544: 0x000c, 0x3545: 0x000c, + 0x3546: 0x000c, 0x3547: 0x000c, 0x3548: 0x000c, 0x3549: 0x000c, 0x354a: 0x000c, 0x354b: 0x000c, + 0x354c: 0x000c, 0x354d: 0x000c, 0x354e: 0x000c, 0x354f: 0x000c, 0x3550: 0x000c, 0x3551: 0x000c, + 0x3552: 0x000c, 0x3553: 0x000c, 0x3554: 0x000c, 0x3555: 0x000c, 0x3556: 0x000c, 0x3557: 0x000c, + 0x3558: 0x000c, 0x3559: 0x000c, 0x355a: 0x000c, 0x355b: 0x000c, 0x355c: 0x000c, 0x355d: 0x000c, + 0x355e: 0x000c, 0x355f: 0x000c, 0x3560: 0x000c, 0x3561: 0x000c, 0x3562: 0x000c, 0x3563: 0x000c, + 0x3564: 0x000c, 0x3565: 0x000c, 0x3566: 0x000c, 0x3567: 0x000c, 0x3568: 0x000c, 0x3569: 0x000c, + 0x356a: 0x000c, 0x356b: 0x000c, 0x356c: 0x000c, 0x356d: 0x000c, + 0x3570: 0x000c, 0x3571: 0x000c, 0x3572: 0x000c, 0x3573: 0x000c, 0x3574: 0x000c, 0x3575: 0x000c, + 0x3576: 0x000c, 0x3577: 0x000c, 0x3578: 0x000c, 0x3579: 0x000c, 0x357a: 0x000c, 0x357b: 0x000c, + 0x357c: 0x000c, 0x357d: 0x000c, 0x357e: 0x000c, 0x357f: 0x000c, + // Block 0xd6, offset 0x3580 + 0x3580: 0x000c, 0x3581: 0x000c, 0x3582: 0x000c, 0x3583: 0x000c, 0x3584: 0x000c, 0x3585: 0x000c, + 0x3586: 0x000c, + // Block 0xd7, offset 0x35c0 + 0x35e7: 0x000c, 0x35e8: 0x000c, 0x35e9: 0x000c, + 0x35f3: 0x000b, 0x35f4: 0x000b, 0x35f5: 0x000b, + 0x35f6: 0x000b, 0x35f7: 0x000b, 0x35f8: 0x000b, 0x35f9: 0x000b, 0x35fa: 0x000b, 0x35fb: 0x000c, + 0x35fc: 0x000c, 0x35fd: 0x000c, 0x35fe: 0x000c, 0x35ff: 0x000c, + // Block 0xd8, offset 0x3600 + 0x3600: 0x000c, 0x3601: 0x000c, 0x3602: 0x000c, 0x3605: 0x000c, + 0x3606: 0x000c, 0x3607: 0x000c, 0x3608: 0x000c, 0x3609: 0x000c, 0x360a: 0x000c, 0x360b: 0x000c, + 0x362a: 0x000c, 0x362b: 0x000c, 0x362c: 0x000c, 0x362d: 0x000c, + // Block 0xd9, offset 0x3640 + 0x3669: 0x000a, + 0x366a: 0x000a, + // Block 0xda, offset 0x3680 + 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000c, 0x3683: 0x000c, 0x3684: 0x000c, 0x3685: 0x000a, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x000a, 0x36c1: 0x000a, 0x36c2: 0x000a, 0x36c3: 0x000a, 0x36c4: 0x000a, 0x36c5: 0x000a, + 0x36c6: 0x000a, 0x36c7: 0x000a, 0x36c8: 0x000a, 0x36c9: 0x000a, 0x36ca: 0x000a, 0x36cb: 0x000a, + 0x36cc: 0x000a, 0x36cd: 0x000a, 0x36ce: 0x000a, 0x36cf: 0x000a, 0x36d0: 0x000a, 0x36d1: 0x000a, + 0x36d2: 0x000a, 0x36d3: 0x000a, 0x36d4: 0x000a, 0x36d5: 0x000a, 0x36d6: 0x000a, + // Block 0xdc, offset 0x3700 + 0x371b: 0x000a, + // Block 0xdd, offset 0x3740 + 0x3755: 0x000a, + // Block 0xde, offset 0x3780 + 0x378f: 0x000a, + // Block 0xdf, offset 0x37c0 + 0x37c9: 0x000a, + // Block 0xe0, offset 0x3800 + 0x3803: 0x000a, + 0x380e: 0x0002, 0x380f: 0x0002, 0x3810: 0x0002, 0x3811: 0x0002, + 0x3812: 0x0002, 0x3813: 0x0002, 0x3814: 0x0002, 0x3815: 0x0002, 0x3816: 0x0002, 0x3817: 0x0002, + 0x3818: 0x0002, 0x3819: 0x0002, 0x381a: 0x0002, 0x381b: 0x0002, 0x381c: 0x0002, 0x381d: 0x0002, + 0x381e: 0x0002, 0x381f: 0x0002, 0x3820: 0x0002, 0x3821: 0x0002, 0x3822: 0x0002, 0x3823: 0x0002, + 0x3824: 0x0002, 0x3825: 0x0002, 0x3826: 0x0002, 0x3827: 0x0002, 0x3828: 0x0002, 0x3829: 0x0002, + 0x382a: 0x0002, 0x382b: 0x0002, 0x382c: 0x0002, 0x382d: 0x0002, 0x382e: 0x0002, 0x382f: 0x0002, + 0x3830: 0x0002, 0x3831: 0x0002, 0x3832: 0x0002, 0x3833: 0x0002, 0x3834: 0x0002, 0x3835: 0x0002, + 0x3836: 0x0002, 0x3837: 0x0002, 0x3838: 0x0002, 0x3839: 0x0002, 0x383a: 0x0002, 0x383b: 0x0002, + 0x383c: 0x0002, 0x383d: 0x0002, 0x383e: 0x0002, 0x383f: 0x0002, + // Block 0xe1, offset 0x3840 + 0x3840: 0x000c, 0x3841: 0x000c, 0x3842: 0x000c, 0x3843: 0x000c, 0x3844: 0x000c, 0x3845: 0x000c, + 0x3846: 0x000c, 0x3847: 0x000c, 0x3848: 0x000c, 0x3849: 0x000c, 0x384a: 0x000c, 0x384b: 0x000c, + 0x384c: 0x000c, 0x384d: 0x000c, 0x384e: 0x000c, 0x384f: 0x000c, 0x3850: 0x000c, 0x3851: 0x000c, + 0x3852: 0x000c, 0x3853: 0x000c, 0x3854: 0x000c, 0x3855: 0x000c, 0x3856: 0x000c, 0x3857: 0x000c, + 0x3858: 0x000c, 0x3859: 0x000c, 0x385a: 0x000c, 0x385b: 0x000c, 0x385c: 0x000c, 0x385d: 0x000c, + 0x385e: 0x000c, 0x385f: 0x000c, 0x3860: 0x000c, 0x3861: 0x000c, 0x3862: 0x000c, 0x3863: 0x000c, + 0x3864: 0x000c, 0x3865: 0x000c, 0x3866: 0x000c, 0x3867: 0x000c, 0x3868: 0x000c, 0x3869: 0x000c, + 0x386a: 0x000c, 0x386b: 0x000c, 0x386c: 0x000c, 0x386d: 0x000c, 0x386e: 0x000c, 0x386f: 0x000c, + 0x3870: 0x000c, 0x3871: 0x000c, 0x3872: 0x000c, 0x3873: 0x000c, 0x3874: 0x000c, 0x3875: 0x000c, + 0x3876: 0x000c, 0x387b: 0x000c, + 0x387c: 0x000c, 0x387d: 0x000c, 0x387e: 0x000c, 0x387f: 0x000c, + // Block 0xe2, offset 0x3880 + 0x3880: 0x000c, 0x3881: 0x000c, 0x3882: 0x000c, 0x3883: 0x000c, 0x3884: 0x000c, 0x3885: 0x000c, + 0x3886: 0x000c, 0x3887: 0x000c, 0x3888: 0x000c, 0x3889: 0x000c, 0x388a: 0x000c, 0x388b: 0x000c, + 0x388c: 0x000c, 0x388d: 0x000c, 0x388e: 0x000c, 0x388f: 0x000c, 0x3890: 0x000c, 0x3891: 0x000c, + 0x3892: 0x000c, 0x3893: 0x000c, 0x3894: 0x000c, 0x3895: 0x000c, 0x3896: 0x000c, 0x3897: 0x000c, + 0x3898: 0x000c, 0x3899: 0x000c, 0x389a: 0x000c, 0x389b: 0x000c, 0x389c: 0x000c, 0x389d: 0x000c, + 0x389e: 0x000c, 0x389f: 0x000c, 0x38a0: 0x000c, 0x38a1: 0x000c, 0x38a2: 0x000c, 0x38a3: 0x000c, + 0x38a4: 0x000c, 0x38a5: 0x000c, 0x38a6: 0x000c, 0x38a7: 0x000c, 0x38a8: 0x000c, 0x38a9: 0x000c, + 0x38aa: 0x000c, 0x38ab: 0x000c, 0x38ac: 0x000c, + 0x38b5: 0x000c, + // Block 0xe3, offset 0x38c0 + 0x38c4: 0x000c, + 0x38db: 0x000c, 0x38dc: 0x000c, 0x38dd: 0x000c, + 0x38de: 0x000c, 0x38df: 0x000c, 0x38e1: 0x000c, 0x38e2: 0x000c, 0x38e3: 0x000c, + 0x38e4: 0x000c, 0x38e5: 0x000c, 0x38e6: 0x000c, 0x38e7: 0x000c, 0x38e8: 0x000c, 0x38e9: 0x000c, + 0x38ea: 0x000c, 0x38eb: 0x000c, 0x38ec: 0x000c, 0x38ed: 0x000c, 0x38ee: 0x000c, 0x38ef: 0x000c, + // Block 0xe4, offset 0x3900 + 0x3900: 0x000c, 0x3901: 0x000c, 0x3902: 0x000c, 0x3903: 0x000c, 0x3904: 0x000c, 0x3905: 0x000c, + 0x3906: 0x000c, 0x3908: 0x000c, 0x3909: 0x000c, 0x390a: 0x000c, 0x390b: 0x000c, + 0x390c: 0x000c, 0x390d: 0x000c, 0x390e: 0x000c, 0x390f: 0x000c, 0x3910: 0x000c, 0x3911: 0x000c, + 0x3912: 0x000c, 0x3913: 0x000c, 0x3914: 0x000c, 0x3915: 0x000c, 0x3916: 0x000c, 0x3917: 0x000c, + 0x3918: 0x000c, 0x391b: 0x000c, 0x391c: 0x000c, 0x391d: 0x000c, + 0x391e: 0x000c, 0x391f: 0x000c, 0x3920: 0x000c, 0x3921: 0x000c, 0x3923: 0x000c, + 0x3924: 0x000c, 0x3926: 0x000c, 0x3927: 0x000c, 0x3928: 0x000c, 0x3929: 0x000c, + 0x392a: 0x000c, + // Block 0xe5, offset 0x3940 + 0x396e: 0x000c, + // Block 0xe6, offset 0x3980 + 0x39ac: 0x000c, 0x39ad: 0x000c, 0x39ae: 0x000c, 0x39af: 0x000c, + 0x39bf: 0x0004, + // Block 0xe7, offset 0x39c0 + 0x39ec: 0x000c, 0x39ed: 0x000c, 0x39ee: 0x000c, 0x39ef: 0x000c, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x0001, 0x3a01: 0x0001, 0x3a02: 0x0001, 0x3a03: 0x0001, 0x3a04: 0x0001, 0x3a05: 0x0001, + 0x3a06: 0x0001, 0x3a07: 0x0001, 0x3a08: 0x0001, 0x3a09: 0x0001, 0x3a0a: 0x0001, 0x3a0b: 0x0001, + 0x3a0c: 0x0001, 0x3a0d: 0x0001, 0x3a0e: 0x0001, 0x3a0f: 0x0001, 0x3a10: 0x000c, 0x3a11: 0x000c, + 0x3a12: 0x000c, 0x3a13: 0x000c, 0x3a14: 0x000c, 0x3a15: 0x000c, 0x3a16: 0x000c, 0x3a17: 0x0001, + 0x3a18: 0x0001, 0x3a19: 0x0001, 0x3a1a: 0x0001, 0x3a1b: 0x0001, 0x3a1c: 0x0001, 0x3a1d: 0x0001, + 0x3a1e: 0x0001, 0x3a1f: 0x0001, 0x3a20: 0x0001, 0x3a21: 0x0001, 0x3a22: 0x0001, 0x3a23: 0x0001, + 0x3a24: 0x0001, 0x3a25: 0x0001, 0x3a26: 0x0001, 0x3a27: 0x0001, 0x3a28: 0x0001, 0x3a29: 0x0001, + 0x3a2a: 0x0001, 0x3a2b: 0x0001, 0x3a2c: 0x0001, 0x3a2d: 0x0001, 0x3a2e: 0x0001, 0x3a2f: 0x0001, + 0x3a30: 0x0001, 0x3a31: 0x0001, 0x3a32: 0x0001, 0x3a33: 0x0001, 0x3a34: 0x0001, 0x3a35: 0x0001, + 0x3a36: 0x0001, 0x3a37: 0x0001, 0x3a38: 0x0001, 0x3a39: 0x0001, 0x3a3a: 0x0001, 0x3a3b: 0x0001, + 0x3a3c: 0x0001, 0x3a3d: 0x0001, 0x3a3e: 0x0001, 0x3a3f: 0x0001, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x0001, 0x3a41: 0x0001, 0x3a42: 0x0001, 0x3a43: 0x0001, 0x3a44: 0x000c, 0x3a45: 0x000c, + 0x3a46: 0x000c, 0x3a47: 0x000c, 0x3a48: 0x000c, 0x3a49: 0x000c, 0x3a4a: 0x000c, 0x3a4b: 0x0001, + 0x3a4c: 0x0001, 0x3a4d: 0x0001, 0x3a4e: 0x0001, 0x3a4f: 0x0001, 0x3a50: 0x0001, 0x3a51: 0x0001, + 0x3a52: 0x0001, 0x3a53: 0x0001, 0x3a54: 0x0001, 0x3a55: 0x0001, 0x3a56: 0x0001, 0x3a57: 0x0001, + 0x3a58: 0x0001, 0x3a59: 0x0001, 0x3a5a: 0x0001, 0x3a5b: 0x0001, 0x3a5c: 0x0001, 0x3a5d: 0x0001, + 0x3a5e: 0x0001, 0x3a5f: 0x0001, 0x3a60: 0x0001, 0x3a61: 0x0001, 0x3a62: 0x0001, 0x3a63: 0x0001, + 0x3a64: 0x0001, 0x3a65: 0x0001, 0x3a66: 0x0001, 0x3a67: 0x0001, 0x3a68: 0x0001, 0x3a69: 0x0001, + 0x3a6a: 0x0001, 0x3a6b: 0x0001, 0x3a6c: 0x0001, 0x3a6d: 0x0001, 0x3a6e: 0x0001, 0x3a6f: 0x0001, + 0x3a70: 0x0001, 0x3a71: 0x0001, 0x3a72: 0x0001, 0x3a73: 0x0001, 0x3a74: 0x0001, 0x3a75: 0x0001, + 0x3a76: 0x0001, 0x3a77: 0x0001, 0x3a78: 0x0001, 0x3a79: 0x0001, 0x3a7a: 0x0001, 0x3a7b: 0x0001, + 0x3a7c: 0x0001, 0x3a7d: 0x0001, 0x3a7e: 0x0001, 0x3a7f: 0x0001, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x0001, 0x3a81: 0x0001, 0x3a82: 0x0001, 0x3a83: 0x0001, 0x3a84: 0x0001, 0x3a85: 0x0001, + 0x3a86: 0x0001, 0x3a87: 0x0001, 0x3a88: 0x0001, 0x3a89: 0x0001, 0x3a8a: 0x0001, 0x3a8b: 0x0001, + 0x3a8c: 0x0001, 0x3a8d: 0x0001, 0x3a8e: 0x0001, 0x3a8f: 0x0001, 0x3a90: 0x0001, 0x3a91: 0x0001, + 0x3a92: 0x0001, 0x3a93: 0x0001, 0x3a94: 0x0001, 0x3a95: 0x0001, 0x3a96: 0x0001, 0x3a97: 0x0001, + 0x3a98: 0x0001, 0x3a99: 0x0001, 0x3a9a: 0x0001, 0x3a9b: 0x0001, 0x3a9c: 0x0001, 0x3a9d: 0x0001, + 0x3a9e: 0x0001, 0x3a9f: 0x0001, 0x3aa0: 0x0001, 0x3aa1: 0x0001, 0x3aa2: 0x0001, 0x3aa3: 0x0001, + 0x3aa4: 0x0001, 0x3aa5: 0x0001, 0x3aa6: 0x0001, 0x3aa7: 0x0001, 0x3aa8: 0x0001, 0x3aa9: 0x0001, + 0x3aaa: 0x0001, 0x3aab: 0x0001, 0x3aac: 0x0001, 0x3aad: 0x0001, 0x3aae: 0x0001, 0x3aaf: 0x0001, + 0x3ab0: 0x0001, 0x3ab1: 0x000d, 0x3ab2: 0x000d, 0x3ab3: 0x000d, 0x3ab4: 0x000d, 0x3ab5: 0x000d, + 0x3ab6: 0x000d, 0x3ab7: 0x000d, 0x3ab8: 0x000d, 0x3ab9: 0x000d, 0x3aba: 0x000d, 0x3abb: 0x000d, + 0x3abc: 0x000d, 0x3abd: 0x000d, 0x3abe: 0x000d, 0x3abf: 0x000d, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x000d, 0x3ac1: 0x000d, 0x3ac2: 0x000d, 0x3ac3: 0x000d, 0x3ac4: 0x000d, 0x3ac5: 0x000d, + 0x3ac6: 0x000d, 0x3ac7: 0x000d, 0x3ac8: 0x000d, 0x3ac9: 0x000d, 0x3aca: 0x000d, 0x3acb: 0x000d, + 0x3acc: 0x000d, 0x3acd: 0x000d, 0x3ace: 0x000d, 0x3acf: 0x000d, 0x3ad0: 0x000d, 0x3ad1: 0x000d, + 0x3ad2: 0x000d, 0x3ad3: 0x000d, 0x3ad4: 0x000d, 0x3ad5: 0x000d, 0x3ad6: 0x000d, 0x3ad7: 0x000d, + 0x3ad8: 0x000d, 0x3ad9: 0x000d, 0x3ada: 0x000d, 0x3adb: 0x000d, 0x3adc: 0x000d, 0x3add: 0x000d, + 0x3ade: 0x000d, 0x3adf: 0x000d, 0x3ae0: 0x000d, 0x3ae1: 0x000d, 0x3ae2: 0x000d, 0x3ae3: 0x000d, + 0x3ae4: 0x000d, 0x3ae5: 0x000d, 0x3ae6: 0x000d, 0x3ae7: 0x000d, 0x3ae8: 0x000d, 0x3ae9: 0x000d, + 0x3aea: 0x000d, 0x3aeb: 0x000d, 0x3aec: 0x000d, 0x3aed: 0x000d, 0x3aee: 0x000d, 0x3aef: 0x000d, + 0x3af0: 0x000d, 0x3af1: 0x000d, 0x3af2: 0x000d, 0x3af3: 0x000d, 0x3af4: 0x000d, 0x3af5: 0x0001, + 0x3af6: 0x0001, 0x3af7: 0x0001, 0x3af8: 0x0001, 0x3af9: 0x0001, 0x3afa: 0x0001, 0x3afb: 0x0001, + 0x3afc: 0x0001, 0x3afd: 0x0001, 0x3afe: 0x0001, 0x3aff: 0x0001, + // Block 0xec, offset 0x3b00 + 0x3b00: 0x0001, 0x3b01: 0x000d, 0x3b02: 0x000d, 0x3b03: 0x000d, 0x3b04: 0x000d, 0x3b05: 0x000d, + 0x3b06: 0x000d, 0x3b07: 0x000d, 0x3b08: 0x000d, 0x3b09: 0x000d, 0x3b0a: 0x000d, 0x3b0b: 0x000d, + 0x3b0c: 0x000d, 0x3b0d: 0x000d, 0x3b0e: 0x000d, 0x3b0f: 0x000d, 0x3b10: 0x000d, 0x3b11: 0x000d, + 0x3b12: 0x000d, 0x3b13: 0x000d, 0x3b14: 0x000d, 0x3b15: 0x000d, 0x3b16: 0x000d, 0x3b17: 0x000d, + 0x3b18: 0x000d, 0x3b19: 0x000d, 0x3b1a: 0x000d, 0x3b1b: 0x000d, 0x3b1c: 0x000d, 0x3b1d: 0x000d, + 0x3b1e: 0x000d, 0x3b1f: 0x000d, 0x3b20: 0x000d, 0x3b21: 0x000d, 0x3b22: 0x000d, 0x3b23: 0x000d, + 0x3b24: 0x000d, 0x3b25: 0x000d, 0x3b26: 0x000d, 0x3b27: 0x000d, 0x3b28: 0x000d, 0x3b29: 0x000d, + 0x3b2a: 0x000d, 0x3b2b: 0x000d, 0x3b2c: 0x000d, 0x3b2d: 0x000d, 0x3b2e: 0x000d, 0x3b2f: 0x000d, + 0x3b30: 0x000d, 0x3b31: 0x000d, 0x3b32: 0x000d, 0x3b33: 0x000d, 0x3b34: 0x000d, 0x3b35: 0x000d, + 0x3b36: 0x000d, 0x3b37: 0x000d, 0x3b38: 0x000d, 0x3b39: 0x000d, 0x3b3a: 0x000d, 0x3b3b: 0x000d, + 0x3b3c: 0x000d, 0x3b3d: 0x000d, 0x3b3e: 0x0001, 0x3b3f: 0x0001, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x000d, 0x3b41: 0x000d, 0x3b42: 0x000d, 0x3b43: 0x000d, 0x3b44: 0x000d, 0x3b45: 0x000d, + 0x3b46: 0x000d, 0x3b47: 0x000d, 0x3b48: 0x000d, 0x3b49: 0x000d, 0x3b4a: 0x000d, 0x3b4b: 0x000d, + 0x3b4c: 0x000d, 0x3b4d: 0x000d, 0x3b4e: 0x000d, 0x3b4f: 0x000d, 0x3b50: 0x000d, 0x3b51: 0x000d, + 0x3b52: 0x000d, 0x3b53: 0x000d, 0x3b54: 0x000d, 0x3b55: 0x000d, 0x3b56: 0x000d, 0x3b57: 0x000d, + 0x3b58: 0x000d, 0x3b59: 0x000d, 0x3b5a: 0x000d, 0x3b5b: 0x000d, 0x3b5c: 0x000d, 0x3b5d: 0x000d, + 0x3b5e: 0x000d, 0x3b5f: 0x000d, 0x3b60: 0x000d, 0x3b61: 0x000d, 0x3b62: 0x000d, 0x3b63: 0x000d, + 0x3b64: 0x000d, 0x3b65: 0x000d, 0x3b66: 0x000d, 0x3b67: 0x000d, 0x3b68: 0x000d, 0x3b69: 0x000d, + 0x3b6a: 0x000d, 0x3b6b: 0x000d, 0x3b6c: 0x000d, 0x3b6d: 0x000d, 0x3b6e: 0x000d, 0x3b6f: 0x000d, + 0x3b70: 0x000a, 0x3b71: 0x000a, 0x3b72: 0x000d, 0x3b73: 0x000d, 0x3b74: 0x000d, 0x3b75: 0x000d, + 0x3b76: 0x000d, 0x3b77: 0x000d, 0x3b78: 0x000d, 0x3b79: 0x000d, 0x3b7a: 0x000d, 0x3b7b: 0x000d, + 0x3b7c: 0x000d, 0x3b7d: 0x000d, 0x3b7e: 0x000d, 0x3b7f: 0x000d, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x000a, 0x3b81: 0x000a, 0x3b82: 0x000a, 0x3b83: 0x000a, 0x3b84: 0x000a, 0x3b85: 0x000a, + 0x3b86: 0x000a, 0x3b87: 0x000a, 0x3b88: 0x000a, 0x3b89: 0x000a, 0x3b8a: 0x000a, 0x3b8b: 0x000a, + 0x3b8c: 0x000a, 0x3b8d: 0x000a, 0x3b8e: 0x000a, 0x3b8f: 0x000a, 0x3b90: 0x000a, 0x3b91: 0x000a, + 0x3b92: 0x000a, 0x3b93: 0x000a, 0x3b94: 0x000a, 0x3b95: 0x000a, 0x3b96: 0x000a, 0x3b97: 0x000a, + 0x3b98: 0x000a, 0x3b99: 0x000a, 0x3b9a: 0x000a, 0x3b9b: 0x000a, 0x3b9c: 0x000a, 0x3b9d: 0x000a, + 0x3b9e: 0x000a, 0x3b9f: 0x000a, 0x3ba0: 0x000a, 0x3ba1: 0x000a, 0x3ba2: 0x000a, 0x3ba3: 0x000a, + 0x3ba4: 0x000a, 0x3ba5: 0x000a, 0x3ba6: 0x000a, 0x3ba7: 0x000a, 0x3ba8: 0x000a, 0x3ba9: 0x000a, + 0x3baa: 0x000a, 0x3bab: 0x000a, + 0x3bb0: 0x000a, 0x3bb1: 0x000a, 0x3bb2: 0x000a, 0x3bb3: 0x000a, 0x3bb4: 0x000a, 0x3bb5: 0x000a, + 0x3bb6: 0x000a, 0x3bb7: 0x000a, 0x3bb8: 0x000a, 0x3bb9: 0x000a, 0x3bba: 0x000a, 0x3bbb: 0x000a, + 0x3bbc: 0x000a, 0x3bbd: 0x000a, 0x3bbe: 0x000a, 0x3bbf: 0x000a, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0x000a, 0x3bc1: 0x000a, 0x3bc2: 0x000a, 0x3bc3: 0x000a, 0x3bc4: 0x000a, 0x3bc5: 0x000a, + 0x3bc6: 0x000a, 0x3bc7: 0x000a, 0x3bc8: 0x000a, 0x3bc9: 0x000a, 0x3bca: 0x000a, 0x3bcb: 0x000a, + 0x3bcc: 0x000a, 0x3bcd: 0x000a, 0x3bce: 0x000a, 0x3bcf: 0x000a, 0x3bd0: 0x000a, 0x3bd1: 0x000a, + 0x3bd2: 0x000a, 0x3bd3: 0x000a, + 0x3be0: 0x000a, 0x3be1: 0x000a, 0x3be2: 0x000a, 0x3be3: 0x000a, + 0x3be4: 0x000a, 0x3be5: 0x000a, 0x3be6: 0x000a, 0x3be7: 0x000a, 0x3be8: 0x000a, 0x3be9: 0x000a, + 0x3bea: 0x000a, 0x3beb: 0x000a, 0x3bec: 0x000a, 0x3bed: 0x000a, 0x3bee: 0x000a, + 0x3bf1: 0x000a, 0x3bf2: 0x000a, 0x3bf3: 0x000a, 0x3bf4: 0x000a, 0x3bf5: 0x000a, + 0x3bf6: 0x000a, 0x3bf7: 0x000a, 0x3bf8: 0x000a, 0x3bf9: 0x000a, 0x3bfa: 0x000a, 0x3bfb: 0x000a, + 0x3bfc: 0x000a, 0x3bfd: 0x000a, 0x3bfe: 0x000a, 0x3bff: 0x000a, + // Block 0xf0, offset 0x3c00 + 0x3c01: 0x000a, 0x3c02: 0x000a, 0x3c03: 0x000a, 0x3c04: 0x000a, 0x3c05: 0x000a, + 0x3c06: 0x000a, 0x3c07: 0x000a, 0x3c08: 0x000a, 0x3c09: 0x000a, 0x3c0a: 0x000a, 0x3c0b: 0x000a, + 0x3c0c: 0x000a, 0x3c0d: 0x000a, 0x3c0e: 0x000a, 0x3c0f: 0x000a, 0x3c11: 0x000a, + 0x3c12: 0x000a, 0x3c13: 0x000a, 0x3c14: 0x000a, 0x3c15: 0x000a, 0x3c16: 0x000a, 0x3c17: 0x000a, + 0x3c18: 0x000a, 0x3c19: 0x000a, 0x3c1a: 0x000a, 0x3c1b: 0x000a, 0x3c1c: 0x000a, 0x3c1d: 0x000a, + 0x3c1e: 0x000a, 0x3c1f: 0x000a, 0x3c20: 0x000a, 0x3c21: 0x000a, 0x3c22: 0x000a, 0x3c23: 0x000a, + 0x3c24: 0x000a, 0x3c25: 0x000a, 0x3c26: 0x000a, 0x3c27: 0x000a, 0x3c28: 0x000a, 0x3c29: 0x000a, + 0x3c2a: 0x000a, 0x3c2b: 0x000a, 0x3c2c: 0x000a, 0x3c2d: 0x000a, 0x3c2e: 0x000a, 0x3c2f: 0x000a, + 0x3c30: 0x000a, 0x3c31: 0x000a, 0x3c32: 0x000a, 0x3c33: 0x000a, 0x3c34: 0x000a, 0x3c35: 0x000a, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0x0002, 0x3c41: 0x0002, 0x3c42: 0x0002, 0x3c43: 0x0002, 0x3c44: 0x0002, 0x3c45: 0x0002, + 0x3c46: 0x0002, 0x3c47: 0x0002, 0x3c48: 0x0002, 0x3c49: 0x0002, 0x3c4a: 0x0002, 0x3c4b: 0x000a, + 0x3c4c: 0x000a, 0x3c4d: 0x000a, 0x3c4e: 0x000a, 0x3c4f: 0x000a, + 0x3c6f: 0x000a, + // Block 0xf2, offset 0x3c80 + 0x3caa: 0x000a, 0x3cab: 0x000a, 0x3cac: 0x000a, 0x3cad: 0x000a, 0x3cae: 0x000a, 0x3caf: 0x000a, + // Block 0xf3, offset 0x3cc0 + 0x3ced: 0x000a, + // Block 0xf4, offset 0x3d00 + 0x3d20: 0x000a, 0x3d21: 0x000a, 0x3d22: 0x000a, 0x3d23: 0x000a, + 0x3d24: 0x000a, 0x3d25: 0x000a, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0x000a, 0x3d41: 0x000a, 0x3d42: 0x000a, 0x3d43: 0x000a, 0x3d44: 0x000a, 0x3d45: 0x000a, + 0x3d46: 0x000a, 0x3d47: 0x000a, 0x3d48: 0x000a, 0x3d49: 0x000a, 0x3d4a: 0x000a, 0x3d4b: 0x000a, + 0x3d4c: 0x000a, 0x3d4d: 0x000a, 0x3d4e: 0x000a, 0x3d4f: 0x000a, 0x3d50: 0x000a, 0x3d51: 0x000a, + 0x3d52: 0x000a, 0x3d53: 0x000a, 0x3d54: 0x000a, 0x3d55: 0x000a, 0x3d56: 0x000a, 0x3d57: 0x000a, + 0x3d5c: 0x000a, 0x3d5d: 0x000a, + 0x3d5e: 0x000a, 0x3d5f: 0x000a, 0x3d60: 0x000a, 0x3d61: 0x000a, 0x3d62: 0x000a, 0x3d63: 0x000a, + 0x3d64: 0x000a, 0x3d65: 0x000a, 0x3d66: 0x000a, 0x3d67: 0x000a, 0x3d68: 0x000a, 0x3d69: 0x000a, + 0x3d6a: 0x000a, 0x3d6b: 0x000a, 0x3d6c: 0x000a, + 0x3d70: 0x000a, 0x3d71: 0x000a, 0x3d72: 0x000a, 0x3d73: 0x000a, 0x3d74: 0x000a, 0x3d75: 0x000a, + 0x3d76: 0x000a, 0x3d77: 0x000a, 0x3d78: 0x000a, 0x3d79: 0x000a, 0x3d7a: 0x000a, 0x3d7b: 0x000a, + 0x3d7c: 0x000a, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x000a, 0x3d81: 0x000a, 0x3d82: 0x000a, 0x3d83: 0x000a, 0x3d84: 0x000a, 0x3d85: 0x000a, + 0x3d86: 0x000a, 0x3d87: 0x000a, 0x3d88: 0x000a, 0x3d89: 0x000a, 0x3d8a: 0x000a, 0x3d8b: 0x000a, + 0x3d8c: 0x000a, 0x3d8d: 0x000a, 0x3d8e: 0x000a, 0x3d8f: 0x000a, 0x3d90: 0x000a, 0x3d91: 0x000a, + 0x3d92: 0x000a, 0x3d93: 0x000a, 0x3d94: 0x000a, 0x3d95: 0x000a, 0x3d96: 0x000a, 0x3d97: 0x000a, + 0x3d98: 0x000a, 0x3d99: 0x000a, 0x3d9a: 0x000a, 0x3d9b: 0x000a, 0x3d9c: 0x000a, 0x3d9d: 0x000a, + 0x3d9e: 0x000a, 0x3d9f: 0x000a, 0x3da0: 0x000a, 0x3da1: 0x000a, 0x3da2: 0x000a, 0x3da3: 0x000a, + 0x3da4: 0x000a, 0x3da5: 0x000a, 0x3da6: 0x000a, 0x3da7: 0x000a, 0x3da8: 0x000a, 0x3da9: 0x000a, + 0x3daa: 0x000a, 0x3dab: 0x000a, 0x3dac: 0x000a, 0x3dad: 0x000a, 0x3dae: 0x000a, 0x3daf: 0x000a, + 0x3db0: 0x000a, 0x3db1: 0x000a, 0x3db2: 0x000a, 0x3db3: 0x000a, 0x3db4: 0x000a, 0x3db5: 0x000a, + 0x3db6: 0x000a, 0x3dbb: 0x000a, + 0x3dbc: 0x000a, 0x3dbd: 0x000a, 0x3dbe: 0x000a, 0x3dbf: 0x000a, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x000a, 0x3dc1: 0x000a, 0x3dc2: 0x000a, 0x3dc3: 0x000a, 0x3dc4: 0x000a, 0x3dc5: 0x000a, + 0x3dc6: 0x000a, 0x3dc7: 0x000a, 0x3dc8: 0x000a, 0x3dc9: 0x000a, 0x3dca: 0x000a, 0x3dcb: 0x000a, + 0x3dcc: 0x000a, 0x3dcd: 0x000a, 0x3dce: 0x000a, 0x3dcf: 0x000a, 0x3dd0: 0x000a, 0x3dd1: 0x000a, + 0x3dd2: 0x000a, 0x3dd3: 0x000a, 0x3dd4: 0x000a, 0x3dd5: 0x000a, 0x3dd6: 0x000a, 0x3dd7: 0x000a, + 0x3dd8: 0x000a, 0x3dd9: 0x000a, + 0x3de0: 0x000a, 0x3de1: 0x000a, 0x3de2: 0x000a, 0x3de3: 0x000a, + 0x3de4: 0x000a, 0x3de5: 0x000a, 0x3de6: 0x000a, 0x3de7: 0x000a, 0x3de8: 0x000a, 0x3de9: 0x000a, + 0x3dea: 0x000a, 0x3deb: 0x000a, + 0x3df0: 0x000a, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x000a, 0x3e01: 0x000a, 0x3e02: 0x000a, 0x3e03: 0x000a, 0x3e04: 0x000a, 0x3e05: 0x000a, + 0x3e06: 0x000a, 0x3e07: 0x000a, 0x3e08: 0x000a, 0x3e09: 0x000a, 0x3e0a: 0x000a, 0x3e0b: 0x000a, + 0x3e10: 0x000a, 0x3e11: 0x000a, + 0x3e12: 0x000a, 0x3e13: 0x000a, 0x3e14: 0x000a, 0x3e15: 0x000a, 0x3e16: 0x000a, 0x3e17: 0x000a, + 0x3e18: 0x000a, 0x3e19: 0x000a, 0x3e1a: 0x000a, 0x3e1b: 0x000a, 0x3e1c: 0x000a, 0x3e1d: 0x000a, + 0x3e1e: 0x000a, 0x3e1f: 0x000a, 0x3e20: 0x000a, 0x3e21: 0x000a, 0x3e22: 0x000a, 0x3e23: 0x000a, + 0x3e24: 0x000a, 0x3e25: 0x000a, 0x3e26: 0x000a, 0x3e27: 0x000a, 0x3e28: 0x000a, 0x3e29: 0x000a, + 0x3e2a: 0x000a, 0x3e2b: 0x000a, 0x3e2c: 0x000a, 0x3e2d: 0x000a, 0x3e2e: 0x000a, 0x3e2f: 0x000a, + 0x3e30: 0x000a, 0x3e31: 0x000a, 0x3e32: 0x000a, 0x3e33: 0x000a, 0x3e34: 0x000a, 0x3e35: 0x000a, + 0x3e36: 0x000a, 0x3e37: 0x000a, 0x3e38: 0x000a, 0x3e39: 0x000a, 0x3e3a: 0x000a, 0x3e3b: 0x000a, + 0x3e3c: 0x000a, 0x3e3d: 0x000a, 0x3e3e: 0x000a, 0x3e3f: 0x000a, + // Block 0xf9, offset 0x3e40 + 0x3e40: 0x000a, 0x3e41: 0x000a, 0x3e42: 0x000a, 0x3e43: 0x000a, 0x3e44: 0x000a, 0x3e45: 0x000a, + 0x3e46: 0x000a, 0x3e47: 0x000a, + 0x3e50: 0x000a, 0x3e51: 0x000a, + 0x3e52: 0x000a, 0x3e53: 0x000a, 0x3e54: 0x000a, 0x3e55: 0x000a, 0x3e56: 0x000a, 0x3e57: 0x000a, + 0x3e58: 0x000a, 0x3e59: 0x000a, + 0x3e60: 0x000a, 0x3e61: 0x000a, 0x3e62: 0x000a, 0x3e63: 0x000a, + 0x3e64: 0x000a, 0x3e65: 0x000a, 0x3e66: 0x000a, 0x3e67: 0x000a, 0x3e68: 0x000a, 0x3e69: 0x000a, + 0x3e6a: 0x000a, 0x3e6b: 0x000a, 0x3e6c: 0x000a, 0x3e6d: 0x000a, 0x3e6e: 0x000a, 0x3e6f: 0x000a, + 0x3e70: 0x000a, 0x3e71: 0x000a, 0x3e72: 0x000a, 0x3e73: 0x000a, 0x3e74: 0x000a, 0x3e75: 0x000a, + 0x3e76: 0x000a, 0x3e77: 0x000a, 0x3e78: 0x000a, 0x3e79: 0x000a, 0x3e7a: 0x000a, 0x3e7b: 0x000a, + 0x3e7c: 0x000a, 0x3e7d: 0x000a, 0x3e7e: 0x000a, 0x3e7f: 0x000a, + // Block 0xfa, offset 0x3e80 + 0x3e80: 0x000a, 0x3e81: 0x000a, 0x3e82: 0x000a, 0x3e83: 0x000a, 0x3e84: 0x000a, 0x3e85: 0x000a, + 0x3e86: 0x000a, 0x3e87: 0x000a, + 0x3e90: 0x000a, 0x3e91: 0x000a, + 0x3e92: 0x000a, 0x3e93: 0x000a, 0x3e94: 0x000a, 0x3e95: 0x000a, 0x3e96: 0x000a, 0x3e97: 0x000a, + 0x3e98: 0x000a, 0x3e99: 0x000a, 0x3e9a: 0x000a, 0x3e9b: 0x000a, 0x3e9c: 0x000a, 0x3e9d: 0x000a, + 0x3e9e: 0x000a, 0x3e9f: 0x000a, 0x3ea0: 0x000a, 0x3ea1: 0x000a, 0x3ea2: 0x000a, 0x3ea3: 0x000a, + 0x3ea4: 0x000a, 0x3ea5: 0x000a, 0x3ea6: 0x000a, 0x3ea7: 0x000a, 0x3ea8: 0x000a, 0x3ea9: 0x000a, + 0x3eaa: 0x000a, 0x3eab: 0x000a, 0x3eac: 0x000a, 0x3ead: 0x000a, + 0x3eb0: 0x000a, 0x3eb1: 0x000a, + // Block 0xfb, offset 0x3ec0 + 0x3ec0: 0x000a, 0x3ec1: 0x000a, 0x3ec2: 0x000a, 0x3ec3: 0x000a, 0x3ec4: 0x000a, 0x3ec5: 0x000a, + 0x3ec6: 0x000a, 0x3ec7: 0x000a, 0x3ec8: 0x000a, 0x3ec9: 0x000a, 0x3eca: 0x000a, 0x3ecb: 0x000a, + 0x3ecc: 0x000a, 0x3ecd: 0x000a, 0x3ece: 0x000a, 0x3ecf: 0x000a, 0x3ed0: 0x000a, 0x3ed1: 0x000a, + 0x3ed2: 0x000a, 0x3ed3: 0x000a, + 0x3ee0: 0x000a, 0x3ee1: 0x000a, 0x3ee2: 0x000a, 0x3ee3: 0x000a, + 0x3ee4: 0x000a, 0x3ee5: 0x000a, 0x3ee6: 0x000a, 0x3ee7: 0x000a, 0x3ee8: 0x000a, 0x3ee9: 0x000a, + 0x3eea: 0x000a, 0x3eeb: 0x000a, 0x3eec: 0x000a, 0x3eed: 0x000a, + 0x3ef0: 0x000a, 0x3ef1: 0x000a, 0x3ef2: 0x000a, 0x3ef3: 0x000a, 0x3ef4: 0x000a, 0x3ef5: 0x000a, + 0x3ef6: 0x000a, 0x3ef7: 0x000a, 0x3ef8: 0x000a, 0x3ef9: 0x000a, 0x3efa: 0x000a, 0x3efb: 0x000a, + 0x3efc: 0x000a, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0x000a, 0x3f01: 0x000a, 0x3f02: 0x000a, 0x3f03: 0x000a, 0x3f04: 0x000a, 0x3f05: 0x000a, + 0x3f06: 0x000a, 0x3f07: 0x000a, 0x3f08: 0x000a, + 0x3f10: 0x000a, 0x3f11: 0x000a, + 0x3f12: 0x000a, 0x3f13: 0x000a, 0x3f14: 0x000a, 0x3f15: 0x000a, 0x3f16: 0x000a, 0x3f17: 0x000a, + 0x3f18: 0x000a, 0x3f19: 0x000a, 0x3f1a: 0x000a, 0x3f1b: 0x000a, 0x3f1c: 0x000a, 0x3f1d: 0x000a, + 0x3f1e: 0x000a, 0x3f1f: 0x000a, 0x3f20: 0x000a, 0x3f21: 0x000a, 0x3f22: 0x000a, 0x3f23: 0x000a, + 0x3f24: 0x000a, 0x3f25: 0x000a, 0x3f26: 0x000a, 0x3f27: 0x000a, 0x3f28: 0x000a, 0x3f29: 0x000a, + 0x3f2a: 0x000a, 0x3f2b: 0x000a, 0x3f2c: 0x000a, 0x3f2d: 0x000a, 0x3f2e: 0x000a, 0x3f2f: 0x000a, + 0x3f30: 0x000a, 0x3f31: 0x000a, 0x3f32: 0x000a, 0x3f33: 0x000a, 0x3f34: 0x000a, 0x3f35: 0x000a, + 0x3f36: 0x000a, 0x3f37: 0x000a, 0x3f38: 0x000a, 0x3f39: 0x000a, 0x3f3a: 0x000a, 0x3f3b: 0x000a, + 0x3f3c: 0x000a, 0x3f3d: 0x000a, 0x3f3f: 0x000a, + // Block 0xfd, offset 0x3f40 + 0x3f40: 0x000a, 0x3f41: 0x000a, 0x3f42: 0x000a, 0x3f43: 0x000a, 0x3f44: 0x000a, 0x3f45: 0x000a, + 0x3f4e: 0x000a, 0x3f4f: 0x000a, 0x3f50: 0x000a, 0x3f51: 0x000a, + 0x3f52: 0x000a, 0x3f53: 0x000a, 0x3f54: 0x000a, 0x3f55: 0x000a, 0x3f56: 0x000a, 0x3f57: 0x000a, + 0x3f58: 0x000a, 0x3f59: 0x000a, 0x3f5a: 0x000a, 0x3f5b: 0x000a, + 0x3f60: 0x000a, 0x3f61: 0x000a, 0x3f62: 0x000a, 0x3f63: 0x000a, + 0x3f64: 0x000a, 0x3f65: 0x000a, 0x3f66: 0x000a, 0x3f67: 0x000a, 0x3f68: 0x000a, + 0x3f70: 0x000a, 0x3f71: 0x000a, 0x3f72: 0x000a, 0x3f73: 0x000a, 0x3f74: 0x000a, 0x3f75: 0x000a, + 0x3f76: 0x000a, 0x3f77: 0x000a, 0x3f78: 0x000a, + // Block 0xfe, offset 0x3f80 + 0x3f80: 0x000a, 0x3f81: 0x000a, 0x3f82: 0x000a, 0x3f83: 0x000a, 0x3f84: 0x000a, 0x3f85: 0x000a, + 0x3f86: 0x000a, 0x3f87: 0x000a, 0x3f88: 0x000a, 0x3f89: 0x000a, 0x3f8a: 0x000a, 0x3f8b: 0x000a, + 0x3f8c: 0x000a, 0x3f8d: 0x000a, 0x3f8e: 0x000a, 0x3f8f: 0x000a, 0x3f90: 0x000a, 0x3f91: 0x000a, + 0x3f92: 0x000a, 0x3f94: 0x000a, 0x3f95: 0x000a, 0x3f96: 0x000a, 0x3f97: 0x000a, + 0x3f98: 0x000a, 0x3f99: 0x000a, 0x3f9a: 0x000a, 0x3f9b: 0x000a, 0x3f9c: 0x000a, 0x3f9d: 0x000a, + 0x3f9e: 0x000a, 0x3f9f: 0x000a, 0x3fa0: 0x000a, 0x3fa1: 0x000a, 0x3fa2: 0x000a, 0x3fa3: 0x000a, + 0x3fa4: 0x000a, 0x3fa5: 0x000a, 0x3fa6: 0x000a, 0x3fa7: 0x000a, 0x3fa8: 0x000a, 0x3fa9: 0x000a, + 0x3faa: 0x000a, 0x3fab: 0x000a, 0x3fac: 0x000a, 0x3fad: 0x000a, 0x3fae: 0x000a, 0x3faf: 0x000a, + 0x3fb0: 0x000a, 0x3fb1: 0x000a, 0x3fb2: 0x000a, 0x3fb3: 0x000a, 0x3fb4: 0x000a, 0x3fb5: 0x000a, + 0x3fb6: 0x000a, 0x3fb7: 0x000a, 0x3fb8: 0x000a, 0x3fb9: 0x000a, 0x3fba: 0x000a, 0x3fbb: 0x000a, + 0x3fbc: 0x000a, 0x3fbd: 0x000a, 0x3fbe: 0x000a, 0x3fbf: 0x000a, + // Block 0xff, offset 0x3fc0 + 0x3fc0: 0x000a, 0x3fc1: 0x000a, 0x3fc2: 0x000a, 0x3fc3: 0x000a, 0x3fc4: 0x000a, 0x3fc5: 0x000a, + 0x3fc6: 0x000a, 0x3fc7: 0x000a, 0x3fc8: 0x000a, 0x3fc9: 0x000a, 0x3fca: 0x000a, + 0x3ff0: 0x0002, 0x3ff1: 0x0002, 0x3ff2: 0x0002, 0x3ff3: 0x0002, 0x3ff4: 0x0002, 0x3ff5: 0x0002, + 0x3ff6: 0x0002, 0x3ff7: 0x0002, 0x3ff8: 0x0002, 0x3ff9: 0x0002, + // Block 0x100, offset 0x4000 + 0x403e: 0x000b, 0x403f: 0x000b, + // Block 0x101, offset 0x4040 + 0x4040: 0x000b, 0x4041: 0x000b, 0x4042: 0x000b, 0x4043: 0x000b, 0x4044: 0x000b, 0x4045: 0x000b, + 0x4046: 0x000b, 0x4047: 0x000b, 0x4048: 0x000b, 0x4049: 0x000b, 0x404a: 0x000b, 0x404b: 0x000b, + 0x404c: 0x000b, 0x404d: 0x000b, 0x404e: 0x000b, 0x404f: 0x000b, 0x4050: 0x000b, 0x4051: 0x000b, + 0x4052: 0x000b, 0x4053: 0x000b, 0x4054: 0x000b, 0x4055: 0x000b, 0x4056: 0x000b, 0x4057: 0x000b, + 0x4058: 0x000b, 0x4059: 0x000b, 0x405a: 0x000b, 0x405b: 0x000b, 0x405c: 0x000b, 0x405d: 0x000b, + 0x405e: 0x000b, 0x405f: 0x000b, 0x4060: 0x000b, 0x4061: 0x000b, 0x4062: 0x000b, 0x4063: 0x000b, + 0x4064: 0x000b, 0x4065: 0x000b, 0x4066: 0x000b, 0x4067: 0x000b, 0x4068: 0x000b, 0x4069: 0x000b, + 0x406a: 0x000b, 0x406b: 0x000b, 0x406c: 0x000b, 0x406d: 0x000b, 0x406e: 0x000b, 0x406f: 0x000b, + 0x4070: 0x000b, 0x4071: 0x000b, 0x4072: 0x000b, 0x4073: 0x000b, 0x4074: 0x000b, 0x4075: 0x000b, + 0x4076: 0x000b, 0x4077: 0x000b, 0x4078: 0x000b, 0x4079: 0x000b, 0x407a: 0x000b, 0x407b: 0x000b, + 0x407c: 0x000b, 0x407d: 0x000b, 0x407e: 0x000b, 0x407f: 0x000b, + // Block 0x102, offset 0x4080 + 0x4080: 0x000c, 0x4081: 0x000c, 0x4082: 0x000c, 0x4083: 0x000c, 0x4084: 0x000c, 0x4085: 0x000c, + 0x4086: 0x000c, 0x4087: 0x000c, 0x4088: 0x000c, 0x4089: 0x000c, 0x408a: 0x000c, 0x408b: 0x000c, + 0x408c: 0x000c, 0x408d: 0x000c, 0x408e: 0x000c, 0x408f: 0x000c, 0x4090: 0x000c, 0x4091: 0x000c, + 0x4092: 0x000c, 0x4093: 0x000c, 0x4094: 0x000c, 0x4095: 0x000c, 0x4096: 0x000c, 0x4097: 0x000c, + 0x4098: 0x000c, 0x4099: 0x000c, 0x409a: 0x000c, 0x409b: 0x000c, 0x409c: 0x000c, 0x409d: 0x000c, + 0x409e: 0x000c, 0x409f: 0x000c, 0x40a0: 0x000c, 0x40a1: 0x000c, 0x40a2: 0x000c, 0x40a3: 0x000c, + 0x40a4: 0x000c, 0x40a5: 0x000c, 0x40a6: 0x000c, 0x40a7: 0x000c, 0x40a8: 0x000c, 0x40a9: 0x000c, + 0x40aa: 0x000c, 0x40ab: 0x000c, 0x40ac: 0x000c, 0x40ad: 0x000c, 0x40ae: 0x000c, 0x40af: 0x000c, + 0x40b0: 0x000b, 0x40b1: 0x000b, 0x40b2: 0x000b, 0x40b3: 0x000b, 0x40b4: 0x000b, 0x40b5: 0x000b, + 0x40b6: 0x000b, 0x40b7: 0x000b, 0x40b8: 0x000b, 0x40b9: 0x000b, 0x40ba: 0x000b, 0x40bb: 0x000b, + 0x40bc: 0x000b, 0x40bd: 0x000b, 0x40be: 0x000b, 0x40bf: 0x000b, +} + +// bidiIndex: 26 blocks, 1664 entries, 3328 bytes +// Block 0 is the zero block. +var bidiIndex = [1664]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x13, 0xf1: 0x14, 0xf2: 0x14, 0xf3: 0x16, 0xf4: 0x17, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x136: 0x28, 0x137: 0x29, + 0x138: 0x2a, 0x139: 0x2b, 0x13a: 0x2c, 0x13b: 0x2d, 0x13c: 0x2e, 0x13d: 0x2f, 0x13e: 0x30, 0x13f: 0x31, + // Block 0x5, offset 0x140 + 0x140: 0x32, 0x141: 0x33, 0x142: 0x34, + 0x14d: 0x35, 0x14e: 0x36, + 0x150: 0x37, + 0x15a: 0x38, 0x15c: 0x39, 0x15d: 0x3a, 0x15e: 0x3b, 0x15f: 0x3c, + 0x160: 0x3d, 0x162: 0x3e, 0x164: 0x3f, 0x165: 0x40, 0x167: 0x41, + 0x168: 0x42, 0x169: 0x43, 0x16a: 0x44, 0x16b: 0x45, 0x16c: 0x46, 0x16d: 0x47, 0x16e: 0x48, 0x16f: 0x49, + 0x170: 0x4a, 0x173: 0x4b, 0x177: 0x05, + 0x17e: 0x4c, 0x17f: 0x4d, + // Block 0x6, offset 0x180 + 0x180: 0x4e, 0x181: 0x4f, 0x182: 0x50, 0x183: 0x51, 0x184: 0x52, 0x185: 0x53, 0x186: 0x54, 0x187: 0x55, + 0x188: 0x56, 0x189: 0x55, 0x18a: 0x55, 0x18b: 0x55, 0x18c: 0x57, 0x18d: 0x58, 0x18e: 0x59, 0x18f: 0x55, + 0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x55, 0x195: 0x55, 0x196: 0x55, 0x197: 0x55, + 0x198: 0x55, 0x199: 0x55, 0x19a: 0x5e, 0x19b: 0x55, 0x19c: 0x55, 0x19d: 0x5f, 0x19e: 0x55, 0x19f: 0x60, + 0x1a4: 0x55, 0x1a5: 0x55, 0x1a6: 0x61, 0x1a7: 0x62, + 0x1a8: 0x55, 0x1a9: 0x55, 0x1aa: 0x55, 0x1ab: 0x55, 0x1ac: 0x55, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x55, + 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67, + 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x55, 0x1bd: 0x55, 0x1be: 0x55, 0x1bf: 0x6c, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70, + 0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76, + // Block 0x8, offset 0x200 + 0x237: 0x55, + // Block 0x9, offset 0x240 + 0x252: 0x77, 0x253: 0x78, + 0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e, + 0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85, + 0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26d: 0x8a, 0x26f: 0x8b, + // Block 0xa, offset 0x280 + 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x8f, 0x2b6: 0x0e, 0x2b7: 0x90, + 0x2b8: 0x91, 0x2b9: 0x92, 0x2ba: 0x0e, 0x2bb: 0x93, 0x2bc: 0x94, 0x2bd: 0x95, 0x2bf: 0x96, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x97, 0x2c5: 0x55, 0x2c6: 0x98, 0x2c7: 0x99, + 0x2cb: 0x9a, 0x2cd: 0x9b, + 0x2e0: 0x9c, 0x2e1: 0x9c, 0x2e2: 0x9c, 0x2e3: 0x9c, 0x2e4: 0x9d, 0x2e5: 0x9c, 0x2e6: 0x9c, 0x2e7: 0x9c, + 0x2e8: 0x9e, 0x2e9: 0x9c, 0x2ea: 0x9c, 0x2eb: 0x9f, 0x2ec: 0xa0, 0x2ed: 0x9c, 0x2ee: 0x9c, 0x2ef: 0x9c, + 0x2f0: 0x9c, 0x2f1: 0x9c, 0x2f2: 0x9c, 0x2f3: 0x9c, 0x2f4: 0xa1, 0x2f5: 0x9c, 0x2f6: 0x9c, 0x2f7: 0x9c, + 0x2f8: 0x9c, 0x2f9: 0xa2, 0x2fa: 0xa3, 0x2fb: 0xa4, 0x2fc: 0xa5, 0x2fd: 0xa6, 0x2fe: 0xa7, 0x2ff: 0x9c, + // Block 0xc, offset 0x300 + 0x300: 0xa8, 0x301: 0xa9, 0x302: 0xaa, 0x303: 0x21, 0x304: 0xab, 0x305: 0xac, 0x306: 0xad, 0x307: 0xae, + 0x308: 0xaf, 0x309: 0x28, 0x30b: 0xb0, 0x30c: 0x26, 0x30d: 0xb1, + 0x310: 0xb2, 0x311: 0xb3, 0x312: 0xb4, 0x313: 0xb5, 0x316: 0xb6, 0x317: 0xb7, + 0x318: 0xb8, 0x319: 0xb9, 0x31a: 0xba, 0x31c: 0xbb, + 0x320: 0xbc, 0x324: 0xbd, 0x325: 0xbe, 0x327: 0xbf, + 0x328: 0xc0, 0x329: 0xc1, 0x32a: 0xc2, + 0x330: 0xc3, 0x332: 0xc4, 0x334: 0xc5, 0x335: 0xc6, 0x336: 0xc7, + 0x33b: 0xc8, 0x33c: 0xc9, 0x33d: 0xca, 0x33f: 0xcb, + // Block 0xd, offset 0x340 + 0x351: 0xcc, + // Block 0xe, offset 0x380 + 0x3ab: 0xcd, 0x3ac: 0xce, + 0x3bd: 0xcf, 0x3be: 0xd0, 0x3bf: 0xd1, + // Block 0xf, offset 0x3c0 + 0x3f2: 0xd2, + // Block 0x10, offset 0x400 + 0x43c: 0xd3, 0x43d: 0xd4, + // Block 0x11, offset 0x440 + 0x445: 0xd5, 0x446: 0xd6, 0x447: 0xd7, + 0x448: 0x55, 0x449: 0xd8, 0x44c: 0x55, 0x44d: 0xd9, + 0x45b: 0xda, 0x45c: 0xdb, 0x45d: 0xdc, 0x45e: 0xdd, 0x45f: 0xde, + 0x468: 0xdf, 0x469: 0xe0, 0x46a: 0xe1, + // Block 0x12, offset 0x480 + 0x480: 0xe2, 0x482: 0xcf, 0x484: 0xce, + 0x48a: 0xe3, 0x48b: 0xe4, + 0x493: 0xe5, + 0x4a0: 0x9c, 0x4a1: 0x9c, 0x4a2: 0x9c, 0x4a3: 0xe6, 0x4a4: 0x9c, 0x4a5: 0xe7, 0x4a6: 0x9c, 0x4a7: 0x9c, + 0x4a8: 0x9c, 0x4a9: 0x9c, 0x4aa: 0x9c, 0x4ab: 0x9c, 0x4ac: 0x9c, 0x4ad: 0x9c, 0x4ae: 0x9c, 0x4af: 0x9c, + 0x4b0: 0x9c, 0x4b1: 0xe8, 0x4b2: 0xe9, 0x4b3: 0x9c, 0x4b4: 0xea, 0x4b5: 0x9c, 0x4b6: 0x9c, 0x4b7: 0x9c, + 0x4b8: 0x0e, 0x4b9: 0x0e, 0x4ba: 0x0e, 0x4bb: 0xeb, 0x4bc: 0x9c, 0x4bd: 0x9c, 0x4be: 0x9c, 0x4bf: 0x9c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xec, 0x4c1: 0x55, 0x4c2: 0xed, 0x4c3: 0xee, 0x4c4: 0xef, 0x4c5: 0xf0, 0x4c6: 0xf1, + 0x4c9: 0xf2, 0x4cc: 0x55, 0x4cd: 0x55, 0x4ce: 0x55, 0x4cf: 0x55, + 0x4d0: 0x55, 0x4d1: 0x55, 0x4d2: 0x55, 0x4d3: 0x55, 0x4d4: 0x55, 0x4d5: 0x55, 0x4d6: 0x55, 0x4d7: 0x55, + 0x4d8: 0x55, 0x4d9: 0x55, 0x4da: 0x55, 0x4db: 0xf3, 0x4dc: 0x55, 0x4dd: 0xf4, 0x4de: 0x55, 0x4df: 0xf5, + 0x4e0: 0xf6, 0x4e1: 0xf7, 0x4e2: 0xf8, 0x4e4: 0x55, 0x4e5: 0x55, 0x4e6: 0x55, 0x4e7: 0x55, + 0x4e8: 0x55, 0x4e9: 0xf9, 0x4ea: 0xfa, 0x4eb: 0xfb, 0x4ec: 0x55, 0x4ed: 0x55, 0x4ee: 0xfc, 0x4ef: 0xfd, + 0x4ff: 0xfe, + // Block 0x14, offset 0x500 + 0x53f: 0xfe, + // Block 0x15, offset 0x540 + 0x550: 0x09, 0x551: 0x0a, 0x553: 0x0b, 0x556: 0x0c, + 0x55b: 0x0d, 0x55c: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, + 0x57f: 0x12, + // Block 0x16, offset 0x580 + 0x58f: 0x12, + 0x59f: 0x12, + 0x5af: 0x12, + 0x5bf: 0x12, + // Block 0x17, offset 0x5c0 + 0x5c0: 0xff, 0x5c1: 0xff, 0x5c2: 0xff, 0x5c3: 0xff, 0x5c4: 0x05, 0x5c5: 0x05, 0x5c6: 0x05, 0x5c7: 0x100, + 0x5c8: 0xff, 0x5c9: 0xff, 0x5ca: 0xff, 0x5cb: 0xff, 0x5cc: 0xff, 0x5cd: 0xff, 0x5ce: 0xff, 0x5cf: 0xff, + 0x5d0: 0xff, 0x5d1: 0xff, 0x5d2: 0xff, 0x5d3: 0xff, 0x5d4: 0xff, 0x5d5: 0xff, 0x5d6: 0xff, 0x5d7: 0xff, + 0x5d8: 0xff, 0x5d9: 0xff, 0x5da: 0xff, 0x5db: 0xff, 0x5dc: 0xff, 0x5dd: 0xff, 0x5de: 0xff, 0x5df: 0xff, + 0x5e0: 0xff, 0x5e1: 0xff, 0x5e2: 0xff, 0x5e3: 0xff, 0x5e4: 0xff, 0x5e5: 0xff, 0x5e6: 0xff, 0x5e7: 0xff, + 0x5e8: 0xff, 0x5e9: 0xff, 0x5ea: 0xff, 0x5eb: 0xff, 0x5ec: 0xff, 0x5ed: 0xff, 0x5ee: 0xff, 0x5ef: 0xff, + 0x5f0: 0xff, 0x5f1: 0xff, 0x5f2: 0xff, 0x5f3: 0xff, 0x5f4: 0xff, 0x5f5: 0xff, 0x5f6: 0xff, 0x5f7: 0xff, + 0x5f8: 0xff, 0x5f9: 0xff, 0x5fa: 0xff, 0x5fb: 0xff, 0x5fc: 0xff, 0x5fd: 0xff, 0x5fe: 0xff, 0x5ff: 0xff, + // Block 0x18, offset 0x600 + 0x60f: 0x12, + 0x61f: 0x12, + 0x620: 0x15, + 0x62f: 0x12, + 0x63f: 0x12, + // Block 0x19, offset 0x640 + 0x64f: 0x12, +} + +// Total table size 19960 bytes (19KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go index 9115ef257e83c..f65785e8ac7fc 100644 --- a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +++ b/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go @@ -1,7 +1,7 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 -// +build go1.16 +//go:build go1.16 && !go1.21 +// +build go1.16,!go1.21 package norm diff --git a/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go new file mode 100644 index 0000000000000..e1858b879db7e --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go @@ -0,0 +1,7908 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.21 +// +build go1.21 + +package norm + +import "sync" + +const ( + // Version is the Unicode edition from which the tables are derived. + Version = "15.0.0" + + // MaxTransformChunkSize indicates the maximum number of bytes that Transform + // may need to write atomically for any Form. Making a destination buffer at + // least this size ensures that Transform can always make progress and that + // the user does not need to grow the buffer on an ErrShortDst. + MaxTransformChunkSize = 35 + maxNonStarters*4 +) + +var ccc = [56]uint8{ + 0, 1, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, + 36, 84, 91, 103, 107, 118, 122, 129, + 130, 132, 202, 214, 216, 218, 220, 222, + 224, 226, 228, 230, 232, 233, 234, 240, +} + +const ( + firstMulti = 0x199A + firstCCC = 0x2DD5 + endMulti = 0x30A1 + firstLeadingCCC = 0x4AEF + firstCCCZeroExcept = 0x4BB9 + firstStarterWithNLead = 0x4BE0 + lastDecomp = 0x4BE2 + maxDecomp = 0x8000 +) + +// decomps: 19426 bytes +var decomps = [...]byte{ + // Bytes 0 - 3f + 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, + 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, + 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, + 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, + 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, + 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, + 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, + 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, + // Bytes 40 - 7f + 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, + 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, + 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, + 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, + 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, + 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, + 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, + 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, + // Bytes 80 - bf + 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, + 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, + 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, + 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, + 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, + 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, + 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, + 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, + // Bytes c0 - ff + 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, + 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, + 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xA6, 0x42, + 0xC3, 0xB0, 0x42, 0xC3, 0xB8, 0x42, 0xC4, 0xA6, + 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, 0x42, 0xC5, + 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, 0x8E, 0x42, + 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, 0xC7, 0x80, + 0x42, 0xC7, 0x81, 0x42, 0xC7, 0x82, 0x42, 0xC8, + // Bytes 100 - 13f + 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, 0x42, + 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, 0x93, + 0x42, 0xC9, 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, + 0x96, 0x42, 0xC9, 0x97, 0x42, 0xC9, 0x98, 0x42, + 0xC9, 0x99, 0x42, 0xC9, 0x9B, 0x42, 0xC9, 0x9C, + 0x42, 0xC9, 0x9E, 0x42, 0xC9, 0x9F, 0x42, 0xC9, + 0xA0, 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA2, 0x42, + 0xC9, 0xA3, 0x42, 0xC9, 0xA4, 0x42, 0xC9, 0xA5, + // Bytes 140 - 17f + 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA7, 0x42, 0xC9, + 0xA8, 0x42, 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, + 0xC9, 0xAB, 0x42, 0xC9, 0xAC, 0x42, 0xC9, 0xAD, + 0x42, 0xC9, 0xAE, 0x42, 0xC9, 0xAF, 0x42, 0xC9, + 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, + 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, + 0x42, 0xC9, 0xB6, 0x42, 0xC9, 0xB7, 0x42, 0xC9, + 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, 0xBA, 0x42, + // Bytes 180 - 1bf + 0xC9, 0xBB, 0x42, 0xC9, 0xBD, 0x42, 0xC9, 0xBE, + 0x42, 0xCA, 0x80, 0x42, 0xCA, 0x81, 0x42, 0xCA, + 0x82, 0x42, 0xCA, 0x83, 0x42, 0xCA, 0x84, 0x42, + 0xCA, 0x88, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, + 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, + 0x8D, 0x42, 0xCA, 0x8E, 0x42, 0xCA, 0x8F, 0x42, + 0xCA, 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, + 0x42, 0xCA, 0x95, 0x42, 0xCA, 0x98, 0x42, 0xCA, + // Bytes 1c0 - 1ff + 0x99, 0x42, 0xCA, 0x9B, 0x42, 0xCA, 0x9C, 0x42, + 0xCA, 0x9D, 0x42, 0xCA, 0x9F, 0x42, 0xCA, 0xA1, + 0x42, 0xCA, 0xA2, 0x42, 0xCA, 0xA3, 0x42, 0xCA, + 0xA4, 0x42, 0xCA, 0xA5, 0x42, 0xCA, 0xA6, 0x42, + 0xCA, 0xA7, 0x42, 0xCA, 0xA8, 0x42, 0xCA, 0xA9, + 0x42, 0xCA, 0xAA, 0x42, 0xCA, 0xAB, 0x42, 0xCA, + 0xB9, 0x42, 0xCB, 0x90, 0x42, 0xCB, 0x91, 0x42, + 0xCE, 0x91, 0x42, 0xCE, 0x92, 0x42, 0xCE, 0x93, + // Bytes 200 - 23f + 0x42, 0xCE, 0x94, 0x42, 0xCE, 0x95, 0x42, 0xCE, + 0x96, 0x42, 0xCE, 0x97, 0x42, 0xCE, 0x98, 0x42, + 0xCE, 0x99, 0x42, 0xCE, 0x9A, 0x42, 0xCE, 0x9B, + 0x42, 0xCE, 0x9C, 0x42, 0xCE, 0x9D, 0x42, 0xCE, + 0x9E, 0x42, 0xCE, 0x9F, 0x42, 0xCE, 0xA0, 0x42, + 0xCE, 0xA1, 0x42, 0xCE, 0xA3, 0x42, 0xCE, 0xA4, + 0x42, 0xCE, 0xA5, 0x42, 0xCE, 0xA6, 0x42, 0xCE, + 0xA7, 0x42, 0xCE, 0xA8, 0x42, 0xCE, 0xA9, 0x42, + // Bytes 240 - 27f + 0xCE, 0xB1, 0x42, 0xCE, 0xB2, 0x42, 0xCE, 0xB3, + 0x42, 0xCE, 0xB4, 0x42, 0xCE, 0xB5, 0x42, 0xCE, + 0xB6, 0x42, 0xCE, 0xB7, 0x42, 0xCE, 0xB8, 0x42, + 0xCE, 0xB9, 0x42, 0xCE, 0xBA, 0x42, 0xCE, 0xBB, + 0x42, 0xCE, 0xBC, 0x42, 0xCE, 0xBD, 0x42, 0xCE, + 0xBE, 0x42, 0xCE, 0xBF, 0x42, 0xCF, 0x80, 0x42, + 0xCF, 0x81, 0x42, 0xCF, 0x82, 0x42, 0xCF, 0x83, + 0x42, 0xCF, 0x84, 0x42, 0xCF, 0x85, 0x42, 0xCF, + // Bytes 280 - 2bf + 0x86, 0x42, 0xCF, 0x87, 0x42, 0xCF, 0x88, 0x42, + 0xCF, 0x89, 0x42, 0xCF, 0x9C, 0x42, 0xCF, 0x9D, + 0x42, 0xD0, 0xB0, 0x42, 0xD0, 0xB1, 0x42, 0xD0, + 0xB2, 0x42, 0xD0, 0xB3, 0x42, 0xD0, 0xB4, 0x42, + 0xD0, 0xB5, 0x42, 0xD0, 0xB6, 0x42, 0xD0, 0xB7, + 0x42, 0xD0, 0xB8, 0x42, 0xD0, 0xBA, 0x42, 0xD0, + 0xBB, 0x42, 0xD0, 0xBC, 0x42, 0xD0, 0xBD, 0x42, + 0xD0, 0xBE, 0x42, 0xD0, 0xBF, 0x42, 0xD1, 0x80, + // Bytes 2c0 - 2ff + 0x42, 0xD1, 0x81, 0x42, 0xD1, 0x82, 0x42, 0xD1, + 0x83, 0x42, 0xD1, 0x84, 0x42, 0xD1, 0x85, 0x42, + 0xD1, 0x86, 0x42, 0xD1, 0x87, 0x42, 0xD1, 0x88, + 0x42, 0xD1, 0x8A, 0x42, 0xD1, 0x8B, 0x42, 0xD1, + 0x8C, 0x42, 0xD1, 0x8D, 0x42, 0xD1, 0x8E, 0x42, + 0xD1, 0x95, 0x42, 0xD1, 0x96, 0x42, 0xD1, 0x98, + 0x42, 0xD1, 0x9F, 0x42, 0xD2, 0x91, 0x42, 0xD2, + 0xAB, 0x42, 0xD2, 0xAF, 0x42, 0xD2, 0xB1, 0x42, + // Bytes 300 - 33f + 0xD3, 0x8F, 0x42, 0xD3, 0x99, 0x42, 0xD3, 0xA9, + 0x42, 0xD7, 0x90, 0x42, 0xD7, 0x91, 0x42, 0xD7, + 0x92, 0x42, 0xD7, 0x93, 0x42, 0xD7, 0x94, 0x42, + 0xD7, 0x9B, 0x42, 0xD7, 0x9C, 0x42, 0xD7, 0x9D, + 0x42, 0xD7, 0xA2, 0x42, 0xD7, 0xA8, 0x42, 0xD7, + 0xAA, 0x42, 0xD8, 0xA1, 0x42, 0xD8, 0xA7, 0x42, + 0xD8, 0xA8, 0x42, 0xD8, 0xA9, 0x42, 0xD8, 0xAA, + 0x42, 0xD8, 0xAB, 0x42, 0xD8, 0xAC, 0x42, 0xD8, + // Bytes 340 - 37f + 0xAD, 0x42, 0xD8, 0xAE, 0x42, 0xD8, 0xAF, 0x42, + 0xD8, 0xB0, 0x42, 0xD8, 0xB1, 0x42, 0xD8, 0xB2, + 0x42, 0xD8, 0xB3, 0x42, 0xD8, 0xB4, 0x42, 0xD8, + 0xB5, 0x42, 0xD8, 0xB6, 0x42, 0xD8, 0xB7, 0x42, + 0xD8, 0xB8, 0x42, 0xD8, 0xB9, 0x42, 0xD8, 0xBA, + 0x42, 0xD9, 0x81, 0x42, 0xD9, 0x82, 0x42, 0xD9, + 0x83, 0x42, 0xD9, 0x84, 0x42, 0xD9, 0x85, 0x42, + 0xD9, 0x86, 0x42, 0xD9, 0x87, 0x42, 0xD9, 0x88, + // Bytes 380 - 3bf + 0x42, 0xD9, 0x89, 0x42, 0xD9, 0x8A, 0x42, 0xD9, + 0xAE, 0x42, 0xD9, 0xAF, 0x42, 0xD9, 0xB1, 0x42, + 0xD9, 0xB9, 0x42, 0xD9, 0xBA, 0x42, 0xD9, 0xBB, + 0x42, 0xD9, 0xBE, 0x42, 0xD9, 0xBF, 0x42, 0xDA, + 0x80, 0x42, 0xDA, 0x83, 0x42, 0xDA, 0x84, 0x42, + 0xDA, 0x86, 0x42, 0xDA, 0x87, 0x42, 0xDA, 0x88, + 0x42, 0xDA, 0x8C, 0x42, 0xDA, 0x8D, 0x42, 0xDA, + 0x8E, 0x42, 0xDA, 0x91, 0x42, 0xDA, 0x98, 0x42, + // Bytes 3c0 - 3ff + 0xDA, 0xA1, 0x42, 0xDA, 0xA4, 0x42, 0xDA, 0xA6, + 0x42, 0xDA, 0xA9, 0x42, 0xDA, 0xAD, 0x42, 0xDA, + 0xAF, 0x42, 0xDA, 0xB1, 0x42, 0xDA, 0xB3, 0x42, + 0xDA, 0xBA, 0x42, 0xDA, 0xBB, 0x42, 0xDA, 0xBE, + 0x42, 0xDB, 0x81, 0x42, 0xDB, 0x85, 0x42, 0xDB, + 0x86, 0x42, 0xDB, 0x87, 0x42, 0xDB, 0x88, 0x42, + 0xDB, 0x89, 0x42, 0xDB, 0x8B, 0x42, 0xDB, 0x8C, + 0x42, 0xDB, 0x90, 0x42, 0xDB, 0x92, 0x43, 0xE0, + // Bytes 400 - 43f + 0xBC, 0x8B, 0x43, 0xE1, 0x83, 0x9C, 0x43, 0xE1, + 0x84, 0x80, 0x43, 0xE1, 0x84, 0x81, 0x43, 0xE1, + 0x84, 0x82, 0x43, 0xE1, 0x84, 0x83, 0x43, 0xE1, + 0x84, 0x84, 0x43, 0xE1, 0x84, 0x85, 0x43, 0xE1, + 0x84, 0x86, 0x43, 0xE1, 0x84, 0x87, 0x43, 0xE1, + 0x84, 0x88, 0x43, 0xE1, 0x84, 0x89, 0x43, 0xE1, + 0x84, 0x8A, 0x43, 0xE1, 0x84, 0x8B, 0x43, 0xE1, + 0x84, 0x8C, 0x43, 0xE1, 0x84, 0x8D, 0x43, 0xE1, + // Bytes 440 - 47f + 0x84, 0x8E, 0x43, 0xE1, 0x84, 0x8F, 0x43, 0xE1, + 0x84, 0x90, 0x43, 0xE1, 0x84, 0x91, 0x43, 0xE1, + 0x84, 0x92, 0x43, 0xE1, 0x84, 0x94, 0x43, 0xE1, + 0x84, 0x95, 0x43, 0xE1, 0x84, 0x9A, 0x43, 0xE1, + 0x84, 0x9C, 0x43, 0xE1, 0x84, 0x9D, 0x43, 0xE1, + 0x84, 0x9E, 0x43, 0xE1, 0x84, 0xA0, 0x43, 0xE1, + 0x84, 0xA1, 0x43, 0xE1, 0x84, 0xA2, 0x43, 0xE1, + 0x84, 0xA3, 0x43, 0xE1, 0x84, 0xA7, 0x43, 0xE1, + // Bytes 480 - 4bf + 0x84, 0xA9, 0x43, 0xE1, 0x84, 0xAB, 0x43, 0xE1, + 0x84, 0xAC, 0x43, 0xE1, 0x84, 0xAD, 0x43, 0xE1, + 0x84, 0xAE, 0x43, 0xE1, 0x84, 0xAF, 0x43, 0xE1, + 0x84, 0xB2, 0x43, 0xE1, 0x84, 0xB6, 0x43, 0xE1, + 0x85, 0x80, 0x43, 0xE1, 0x85, 0x87, 0x43, 0xE1, + 0x85, 0x8C, 0x43, 0xE1, 0x85, 0x97, 0x43, 0xE1, + 0x85, 0x98, 0x43, 0xE1, 0x85, 0x99, 0x43, 0xE1, + 0x85, 0xA0, 0x43, 0xE1, 0x86, 0x84, 0x43, 0xE1, + // Bytes 4c0 - 4ff + 0x86, 0x85, 0x43, 0xE1, 0x86, 0x88, 0x43, 0xE1, + 0x86, 0x91, 0x43, 0xE1, 0x86, 0x92, 0x43, 0xE1, + 0x86, 0x94, 0x43, 0xE1, 0x86, 0x9E, 0x43, 0xE1, + 0x86, 0xA1, 0x43, 0xE1, 0x87, 0x87, 0x43, 0xE1, + 0x87, 0x88, 0x43, 0xE1, 0x87, 0x8C, 0x43, 0xE1, + 0x87, 0x8E, 0x43, 0xE1, 0x87, 0x93, 0x43, 0xE1, + 0x87, 0x97, 0x43, 0xE1, 0x87, 0x99, 0x43, 0xE1, + 0x87, 0x9D, 0x43, 0xE1, 0x87, 0x9F, 0x43, 0xE1, + // Bytes 500 - 53f + 0x87, 0xB1, 0x43, 0xE1, 0x87, 0xB2, 0x43, 0xE1, + 0xB4, 0x82, 0x43, 0xE1, 0xB4, 0x96, 0x43, 0xE1, + 0xB4, 0x97, 0x43, 0xE1, 0xB4, 0x9C, 0x43, 0xE1, + 0xB4, 0x9D, 0x43, 0xE1, 0xB4, 0xA5, 0x43, 0xE1, + 0xB5, 0xBB, 0x43, 0xE1, 0xB6, 0x85, 0x43, 0xE1, + 0xB6, 0x91, 0x43, 0xE2, 0x80, 0x82, 0x43, 0xE2, + 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, 0xE2, + 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, 0xE2, + // Bytes 540 - 57f + 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, 0xE2, + 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, 0xE2, + 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, 0xE2, + 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, 0xE2, + 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, 0xE2, + 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, 0xE2, + 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, 0xE2, + 0xB1, 0xB1, 0x43, 0xE2, 0xB5, 0xA1, 0x43, 0xE3, + // Bytes 580 - 5bf + 0x80, 0x81, 0x43, 0xE3, 0x80, 0x82, 0x43, 0xE3, + 0x80, 0x88, 0x43, 0xE3, 0x80, 0x89, 0x43, 0xE3, + 0x80, 0x8A, 0x43, 0xE3, 0x80, 0x8B, 0x43, 0xE3, + 0x80, 0x8C, 0x43, 0xE3, 0x80, 0x8D, 0x43, 0xE3, + 0x80, 0x8E, 0x43, 0xE3, 0x80, 0x8F, 0x43, 0xE3, + 0x80, 0x90, 0x43, 0xE3, 0x80, 0x91, 0x43, 0xE3, + 0x80, 0x92, 0x43, 0xE3, 0x80, 0x94, 0x43, 0xE3, + 0x80, 0x95, 0x43, 0xE3, 0x80, 0x96, 0x43, 0xE3, + // Bytes 5c0 - 5ff + 0x80, 0x97, 0x43, 0xE3, 0x82, 0xA1, 0x43, 0xE3, + 0x82, 0xA2, 0x43, 0xE3, 0x82, 0xA3, 0x43, 0xE3, + 0x82, 0xA4, 0x43, 0xE3, 0x82, 0xA5, 0x43, 0xE3, + 0x82, 0xA6, 0x43, 0xE3, 0x82, 0xA7, 0x43, 0xE3, + 0x82, 0xA8, 0x43, 0xE3, 0x82, 0xA9, 0x43, 0xE3, + 0x82, 0xAA, 0x43, 0xE3, 0x82, 0xAB, 0x43, 0xE3, + 0x82, 0xAD, 0x43, 0xE3, 0x82, 0xAF, 0x43, 0xE3, + 0x82, 0xB1, 0x43, 0xE3, 0x82, 0xB3, 0x43, 0xE3, + // Bytes 600 - 63f + 0x82, 0xB5, 0x43, 0xE3, 0x82, 0xB7, 0x43, 0xE3, + 0x82, 0xB9, 0x43, 0xE3, 0x82, 0xBB, 0x43, 0xE3, + 0x82, 0xBD, 0x43, 0xE3, 0x82, 0xBF, 0x43, 0xE3, + 0x83, 0x81, 0x43, 0xE3, 0x83, 0x83, 0x43, 0xE3, + 0x83, 0x84, 0x43, 0xE3, 0x83, 0x86, 0x43, 0xE3, + 0x83, 0x88, 0x43, 0xE3, 0x83, 0x8A, 0x43, 0xE3, + 0x83, 0x8B, 0x43, 0xE3, 0x83, 0x8C, 0x43, 0xE3, + 0x83, 0x8D, 0x43, 0xE3, 0x83, 0x8E, 0x43, 0xE3, + // Bytes 640 - 67f + 0x83, 0x8F, 0x43, 0xE3, 0x83, 0x92, 0x43, 0xE3, + 0x83, 0x95, 0x43, 0xE3, 0x83, 0x98, 0x43, 0xE3, + 0x83, 0x9B, 0x43, 0xE3, 0x83, 0x9E, 0x43, 0xE3, + 0x83, 0x9F, 0x43, 0xE3, 0x83, 0xA0, 0x43, 0xE3, + 0x83, 0xA1, 0x43, 0xE3, 0x83, 0xA2, 0x43, 0xE3, + 0x83, 0xA3, 0x43, 0xE3, 0x83, 0xA4, 0x43, 0xE3, + 0x83, 0xA5, 0x43, 0xE3, 0x83, 0xA6, 0x43, 0xE3, + 0x83, 0xA7, 0x43, 0xE3, 0x83, 0xA8, 0x43, 0xE3, + // Bytes 680 - 6bf + 0x83, 0xA9, 0x43, 0xE3, 0x83, 0xAA, 0x43, 0xE3, + 0x83, 0xAB, 0x43, 0xE3, 0x83, 0xAC, 0x43, 0xE3, + 0x83, 0xAD, 0x43, 0xE3, 0x83, 0xAF, 0x43, 0xE3, + 0x83, 0xB0, 0x43, 0xE3, 0x83, 0xB1, 0x43, 0xE3, + 0x83, 0xB2, 0x43, 0xE3, 0x83, 0xB3, 0x43, 0xE3, + 0x83, 0xBB, 0x43, 0xE3, 0x83, 0xBC, 0x43, 0xE3, + 0x92, 0x9E, 0x43, 0xE3, 0x92, 0xB9, 0x43, 0xE3, + 0x92, 0xBB, 0x43, 0xE3, 0x93, 0x9F, 0x43, 0xE3, + // Bytes 6c0 - 6ff + 0x94, 0x95, 0x43, 0xE3, 0x9B, 0xAE, 0x43, 0xE3, + 0x9B, 0xBC, 0x43, 0xE3, 0x9E, 0x81, 0x43, 0xE3, + 0xA0, 0xAF, 0x43, 0xE3, 0xA1, 0xA2, 0x43, 0xE3, + 0xA1, 0xBC, 0x43, 0xE3, 0xA3, 0x87, 0x43, 0xE3, + 0xA3, 0xA3, 0x43, 0xE3, 0xA4, 0x9C, 0x43, 0xE3, + 0xA4, 0xBA, 0x43, 0xE3, 0xA8, 0xAE, 0x43, 0xE3, + 0xA9, 0xAC, 0x43, 0xE3, 0xAB, 0xA4, 0x43, 0xE3, + 0xAC, 0x88, 0x43, 0xE3, 0xAC, 0x99, 0x43, 0xE3, + // Bytes 700 - 73f + 0xAD, 0x89, 0x43, 0xE3, 0xAE, 0x9D, 0x43, 0xE3, + 0xB0, 0x98, 0x43, 0xE3, 0xB1, 0x8E, 0x43, 0xE3, + 0xB4, 0xB3, 0x43, 0xE3, 0xB6, 0x96, 0x43, 0xE3, + 0xBA, 0xAC, 0x43, 0xE3, 0xBA, 0xB8, 0x43, 0xE3, + 0xBC, 0x9B, 0x43, 0xE3, 0xBF, 0xBC, 0x43, 0xE4, + 0x80, 0x88, 0x43, 0xE4, 0x80, 0x98, 0x43, 0xE4, + 0x80, 0xB9, 0x43, 0xE4, 0x81, 0x86, 0x43, 0xE4, + 0x82, 0x96, 0x43, 0xE4, 0x83, 0xA3, 0x43, 0xE4, + // Bytes 740 - 77f + 0x84, 0xAF, 0x43, 0xE4, 0x88, 0x82, 0x43, 0xE4, + 0x88, 0xA7, 0x43, 0xE4, 0x8A, 0xA0, 0x43, 0xE4, + 0x8C, 0x81, 0x43, 0xE4, 0x8C, 0xB4, 0x43, 0xE4, + 0x8D, 0x99, 0x43, 0xE4, 0x8F, 0x95, 0x43, 0xE4, + 0x8F, 0x99, 0x43, 0xE4, 0x90, 0x8B, 0x43, 0xE4, + 0x91, 0xAB, 0x43, 0xE4, 0x94, 0xAB, 0x43, 0xE4, + 0x95, 0x9D, 0x43, 0xE4, 0x95, 0xA1, 0x43, 0xE4, + 0x95, 0xAB, 0x43, 0xE4, 0x97, 0x97, 0x43, 0xE4, + // Bytes 780 - 7bf + 0x97, 0xB9, 0x43, 0xE4, 0x98, 0xB5, 0x43, 0xE4, + 0x9A, 0xBE, 0x43, 0xE4, 0x9B, 0x87, 0x43, 0xE4, + 0xA6, 0x95, 0x43, 0xE4, 0xA7, 0xA6, 0x43, 0xE4, + 0xA9, 0xAE, 0x43, 0xE4, 0xA9, 0xB6, 0x43, 0xE4, + 0xAA, 0xB2, 0x43, 0xE4, 0xAC, 0xB3, 0x43, 0xE4, + 0xAF, 0x8E, 0x43, 0xE4, 0xB3, 0x8E, 0x43, 0xE4, + 0xB3, 0xAD, 0x43, 0xE4, 0xB3, 0xB8, 0x43, 0xE4, + 0xB5, 0x96, 0x43, 0xE4, 0xB8, 0x80, 0x43, 0xE4, + // Bytes 7c0 - 7ff + 0xB8, 0x81, 0x43, 0xE4, 0xB8, 0x83, 0x43, 0xE4, + 0xB8, 0x89, 0x43, 0xE4, 0xB8, 0x8A, 0x43, 0xE4, + 0xB8, 0x8B, 0x43, 0xE4, 0xB8, 0x8D, 0x43, 0xE4, + 0xB8, 0x99, 0x43, 0xE4, 0xB8, 0xA6, 0x43, 0xE4, + 0xB8, 0xA8, 0x43, 0xE4, 0xB8, 0xAD, 0x43, 0xE4, + 0xB8, 0xB2, 0x43, 0xE4, 0xB8, 0xB6, 0x43, 0xE4, + 0xB8, 0xB8, 0x43, 0xE4, 0xB8, 0xB9, 0x43, 0xE4, + 0xB8, 0xBD, 0x43, 0xE4, 0xB8, 0xBF, 0x43, 0xE4, + // Bytes 800 - 83f + 0xB9, 0x81, 0x43, 0xE4, 0xB9, 0x99, 0x43, 0xE4, + 0xB9, 0x9D, 0x43, 0xE4, 0xBA, 0x82, 0x43, 0xE4, + 0xBA, 0x85, 0x43, 0xE4, 0xBA, 0x86, 0x43, 0xE4, + 0xBA, 0x8C, 0x43, 0xE4, 0xBA, 0x94, 0x43, 0xE4, + 0xBA, 0xA0, 0x43, 0xE4, 0xBA, 0xA4, 0x43, 0xE4, + 0xBA, 0xAE, 0x43, 0xE4, 0xBA, 0xBA, 0x43, 0xE4, + 0xBB, 0x80, 0x43, 0xE4, 0xBB, 0x8C, 0x43, 0xE4, + 0xBB, 0xA4, 0x43, 0xE4, 0xBC, 0x81, 0x43, 0xE4, + // Bytes 840 - 87f + 0xBC, 0x91, 0x43, 0xE4, 0xBD, 0xA0, 0x43, 0xE4, + 0xBE, 0x80, 0x43, 0xE4, 0xBE, 0x86, 0x43, 0xE4, + 0xBE, 0x8B, 0x43, 0xE4, 0xBE, 0xAE, 0x43, 0xE4, + 0xBE, 0xBB, 0x43, 0xE4, 0xBE, 0xBF, 0x43, 0xE5, + 0x80, 0x82, 0x43, 0xE5, 0x80, 0xAB, 0x43, 0xE5, + 0x81, 0xBA, 0x43, 0xE5, 0x82, 0x99, 0x43, 0xE5, + 0x83, 0x8F, 0x43, 0xE5, 0x83, 0x9A, 0x43, 0xE5, + 0x83, 0xA7, 0x43, 0xE5, 0x84, 0xAA, 0x43, 0xE5, + // Bytes 880 - 8bf + 0x84, 0xBF, 0x43, 0xE5, 0x85, 0x80, 0x43, 0xE5, + 0x85, 0x85, 0x43, 0xE5, 0x85, 0x8D, 0x43, 0xE5, + 0x85, 0x94, 0x43, 0xE5, 0x85, 0xA4, 0x43, 0xE5, + 0x85, 0xA5, 0x43, 0xE5, 0x85, 0xA7, 0x43, 0xE5, + 0x85, 0xA8, 0x43, 0xE5, 0x85, 0xA9, 0x43, 0xE5, + 0x85, 0xAB, 0x43, 0xE5, 0x85, 0xAD, 0x43, 0xE5, + 0x85, 0xB7, 0x43, 0xE5, 0x86, 0x80, 0x43, 0xE5, + 0x86, 0x82, 0x43, 0xE5, 0x86, 0x8D, 0x43, 0xE5, + // Bytes 8c0 - 8ff + 0x86, 0x92, 0x43, 0xE5, 0x86, 0x95, 0x43, 0xE5, + 0x86, 0x96, 0x43, 0xE5, 0x86, 0x97, 0x43, 0xE5, + 0x86, 0x99, 0x43, 0xE5, 0x86, 0xA4, 0x43, 0xE5, + 0x86, 0xAB, 0x43, 0xE5, 0x86, 0xAC, 0x43, 0xE5, + 0x86, 0xB5, 0x43, 0xE5, 0x86, 0xB7, 0x43, 0xE5, + 0x87, 0x89, 0x43, 0xE5, 0x87, 0x8C, 0x43, 0xE5, + 0x87, 0x9C, 0x43, 0xE5, 0x87, 0x9E, 0x43, 0xE5, + 0x87, 0xA0, 0x43, 0xE5, 0x87, 0xB5, 0x43, 0xE5, + // Bytes 900 - 93f + 0x88, 0x80, 0x43, 0xE5, 0x88, 0x83, 0x43, 0xE5, + 0x88, 0x87, 0x43, 0xE5, 0x88, 0x97, 0x43, 0xE5, + 0x88, 0x9D, 0x43, 0xE5, 0x88, 0xA9, 0x43, 0xE5, + 0x88, 0xBA, 0x43, 0xE5, 0x88, 0xBB, 0x43, 0xE5, + 0x89, 0x86, 0x43, 0xE5, 0x89, 0x8D, 0x43, 0xE5, + 0x89, 0xB2, 0x43, 0xE5, 0x89, 0xB7, 0x43, 0xE5, + 0x8A, 0x89, 0x43, 0xE5, 0x8A, 0x9B, 0x43, 0xE5, + 0x8A, 0xA3, 0x43, 0xE5, 0x8A, 0xB3, 0x43, 0xE5, + // Bytes 940 - 97f + 0x8A, 0xB4, 0x43, 0xE5, 0x8B, 0x87, 0x43, 0xE5, + 0x8B, 0x89, 0x43, 0xE5, 0x8B, 0x92, 0x43, 0xE5, + 0x8B, 0x9E, 0x43, 0xE5, 0x8B, 0xA4, 0x43, 0xE5, + 0x8B, 0xB5, 0x43, 0xE5, 0x8B, 0xB9, 0x43, 0xE5, + 0x8B, 0xBA, 0x43, 0xE5, 0x8C, 0x85, 0x43, 0xE5, + 0x8C, 0x86, 0x43, 0xE5, 0x8C, 0x95, 0x43, 0xE5, + 0x8C, 0x97, 0x43, 0xE5, 0x8C, 0x9A, 0x43, 0xE5, + 0x8C, 0xB8, 0x43, 0xE5, 0x8C, 0xBB, 0x43, 0xE5, + // Bytes 980 - 9bf + 0x8C, 0xBF, 0x43, 0xE5, 0x8D, 0x81, 0x43, 0xE5, + 0x8D, 0x84, 0x43, 0xE5, 0x8D, 0x85, 0x43, 0xE5, + 0x8D, 0x89, 0x43, 0xE5, 0x8D, 0x91, 0x43, 0xE5, + 0x8D, 0x94, 0x43, 0xE5, 0x8D, 0x9A, 0x43, 0xE5, + 0x8D, 0x9C, 0x43, 0xE5, 0x8D, 0xA9, 0x43, 0xE5, + 0x8D, 0xB0, 0x43, 0xE5, 0x8D, 0xB3, 0x43, 0xE5, + 0x8D, 0xB5, 0x43, 0xE5, 0x8D, 0xBD, 0x43, 0xE5, + 0x8D, 0xBF, 0x43, 0xE5, 0x8E, 0x82, 0x43, 0xE5, + // Bytes 9c0 - 9ff + 0x8E, 0xB6, 0x43, 0xE5, 0x8F, 0x83, 0x43, 0xE5, + 0x8F, 0x88, 0x43, 0xE5, 0x8F, 0x8A, 0x43, 0xE5, + 0x8F, 0x8C, 0x43, 0xE5, 0x8F, 0x9F, 0x43, 0xE5, + 0x8F, 0xA3, 0x43, 0xE5, 0x8F, 0xA5, 0x43, 0xE5, + 0x8F, 0xAB, 0x43, 0xE5, 0x8F, 0xAF, 0x43, 0xE5, + 0x8F, 0xB1, 0x43, 0xE5, 0x8F, 0xB3, 0x43, 0xE5, + 0x90, 0x86, 0x43, 0xE5, 0x90, 0x88, 0x43, 0xE5, + 0x90, 0x8D, 0x43, 0xE5, 0x90, 0x8F, 0x43, 0xE5, + // Bytes a00 - a3f + 0x90, 0x9D, 0x43, 0xE5, 0x90, 0xB8, 0x43, 0xE5, + 0x90, 0xB9, 0x43, 0xE5, 0x91, 0x82, 0x43, 0xE5, + 0x91, 0x88, 0x43, 0xE5, 0x91, 0xA8, 0x43, 0xE5, + 0x92, 0x9E, 0x43, 0xE5, 0x92, 0xA2, 0x43, 0xE5, + 0x92, 0xBD, 0x43, 0xE5, 0x93, 0xB6, 0x43, 0xE5, + 0x94, 0x90, 0x43, 0xE5, 0x95, 0x8F, 0x43, 0xE5, + 0x95, 0x93, 0x43, 0xE5, 0x95, 0x95, 0x43, 0xE5, + 0x95, 0xA3, 0x43, 0xE5, 0x96, 0x84, 0x43, 0xE5, + // Bytes a40 - a7f + 0x96, 0x87, 0x43, 0xE5, 0x96, 0x99, 0x43, 0xE5, + 0x96, 0x9D, 0x43, 0xE5, 0x96, 0xAB, 0x43, 0xE5, + 0x96, 0xB3, 0x43, 0xE5, 0x96, 0xB6, 0x43, 0xE5, + 0x97, 0x80, 0x43, 0xE5, 0x97, 0x82, 0x43, 0xE5, + 0x97, 0xA2, 0x43, 0xE5, 0x98, 0x86, 0x43, 0xE5, + 0x99, 0x91, 0x43, 0xE5, 0x99, 0xA8, 0x43, 0xE5, + 0x99, 0xB4, 0x43, 0xE5, 0x9B, 0x97, 0x43, 0xE5, + 0x9B, 0x9B, 0x43, 0xE5, 0x9B, 0xB9, 0x43, 0xE5, + // Bytes a80 - abf + 0x9C, 0x96, 0x43, 0xE5, 0x9C, 0x97, 0x43, 0xE5, + 0x9C, 0x9F, 0x43, 0xE5, 0x9C, 0xB0, 0x43, 0xE5, + 0x9E, 0x8B, 0x43, 0xE5, 0x9F, 0x8E, 0x43, 0xE5, + 0x9F, 0xB4, 0x43, 0xE5, 0xA0, 0x8D, 0x43, 0xE5, + 0xA0, 0xB1, 0x43, 0xE5, 0xA0, 0xB2, 0x43, 0xE5, + 0xA1, 0x80, 0x43, 0xE5, 0xA1, 0x9A, 0x43, 0xE5, + 0xA1, 0x9E, 0x43, 0xE5, 0xA2, 0xA8, 0x43, 0xE5, + 0xA2, 0xAC, 0x43, 0xE5, 0xA2, 0xB3, 0x43, 0xE5, + // Bytes ac0 - aff + 0xA3, 0x98, 0x43, 0xE5, 0xA3, 0x9F, 0x43, 0xE5, + 0xA3, 0xAB, 0x43, 0xE5, 0xA3, 0xAE, 0x43, 0xE5, + 0xA3, 0xB0, 0x43, 0xE5, 0xA3, 0xB2, 0x43, 0xE5, + 0xA3, 0xB7, 0x43, 0xE5, 0xA4, 0x82, 0x43, 0xE5, + 0xA4, 0x86, 0x43, 0xE5, 0xA4, 0x8A, 0x43, 0xE5, + 0xA4, 0x95, 0x43, 0xE5, 0xA4, 0x9A, 0x43, 0xE5, + 0xA4, 0x9C, 0x43, 0xE5, 0xA4, 0xA2, 0x43, 0xE5, + 0xA4, 0xA7, 0x43, 0xE5, 0xA4, 0xA9, 0x43, 0xE5, + // Bytes b00 - b3f + 0xA5, 0x84, 0x43, 0xE5, 0xA5, 0x88, 0x43, 0xE5, + 0xA5, 0x91, 0x43, 0xE5, 0xA5, 0x94, 0x43, 0xE5, + 0xA5, 0xA2, 0x43, 0xE5, 0xA5, 0xB3, 0x43, 0xE5, + 0xA7, 0x98, 0x43, 0xE5, 0xA7, 0xAC, 0x43, 0xE5, + 0xA8, 0x9B, 0x43, 0xE5, 0xA8, 0xA7, 0x43, 0xE5, + 0xA9, 0xA2, 0x43, 0xE5, 0xA9, 0xA6, 0x43, 0xE5, + 0xAA, 0xB5, 0x43, 0xE5, 0xAC, 0x88, 0x43, 0xE5, + 0xAC, 0xA8, 0x43, 0xE5, 0xAC, 0xBE, 0x43, 0xE5, + // Bytes b40 - b7f + 0xAD, 0x90, 0x43, 0xE5, 0xAD, 0x97, 0x43, 0xE5, + 0xAD, 0xA6, 0x43, 0xE5, 0xAE, 0x80, 0x43, 0xE5, + 0xAE, 0x85, 0x43, 0xE5, 0xAE, 0x97, 0x43, 0xE5, + 0xAF, 0x83, 0x43, 0xE5, 0xAF, 0x98, 0x43, 0xE5, + 0xAF, 0xA7, 0x43, 0xE5, 0xAF, 0xAE, 0x43, 0xE5, + 0xAF, 0xB3, 0x43, 0xE5, 0xAF, 0xB8, 0x43, 0xE5, + 0xAF, 0xBF, 0x43, 0xE5, 0xB0, 0x86, 0x43, 0xE5, + 0xB0, 0x8F, 0x43, 0xE5, 0xB0, 0xA2, 0x43, 0xE5, + // Bytes b80 - bbf + 0xB0, 0xB8, 0x43, 0xE5, 0xB0, 0xBF, 0x43, 0xE5, + 0xB1, 0xA0, 0x43, 0xE5, 0xB1, 0xA2, 0x43, 0xE5, + 0xB1, 0xA4, 0x43, 0xE5, 0xB1, 0xA5, 0x43, 0xE5, + 0xB1, 0xAE, 0x43, 0xE5, 0xB1, 0xB1, 0x43, 0xE5, + 0xB2, 0x8D, 0x43, 0xE5, 0xB3, 0x80, 0x43, 0xE5, + 0xB4, 0x99, 0x43, 0xE5, 0xB5, 0x83, 0x43, 0xE5, + 0xB5, 0x90, 0x43, 0xE5, 0xB5, 0xAB, 0x43, 0xE5, + 0xB5, 0xAE, 0x43, 0xE5, 0xB5, 0xBC, 0x43, 0xE5, + // Bytes bc0 - bff + 0xB6, 0xB2, 0x43, 0xE5, 0xB6, 0xBA, 0x43, 0xE5, + 0xB7, 0x9B, 0x43, 0xE5, 0xB7, 0xA1, 0x43, 0xE5, + 0xB7, 0xA2, 0x43, 0xE5, 0xB7, 0xA5, 0x43, 0xE5, + 0xB7, 0xA6, 0x43, 0xE5, 0xB7, 0xB1, 0x43, 0xE5, + 0xB7, 0xBD, 0x43, 0xE5, 0xB7, 0xBE, 0x43, 0xE5, + 0xB8, 0xA8, 0x43, 0xE5, 0xB8, 0xBD, 0x43, 0xE5, + 0xB9, 0xA9, 0x43, 0xE5, 0xB9, 0xB2, 0x43, 0xE5, + 0xB9, 0xB4, 0x43, 0xE5, 0xB9, 0xBA, 0x43, 0xE5, + // Bytes c00 - c3f + 0xB9, 0xBC, 0x43, 0xE5, 0xB9, 0xBF, 0x43, 0xE5, + 0xBA, 0xA6, 0x43, 0xE5, 0xBA, 0xB0, 0x43, 0xE5, + 0xBA, 0xB3, 0x43, 0xE5, 0xBA, 0xB6, 0x43, 0xE5, + 0xBB, 0x89, 0x43, 0xE5, 0xBB, 0x8A, 0x43, 0xE5, + 0xBB, 0x92, 0x43, 0xE5, 0xBB, 0x93, 0x43, 0xE5, + 0xBB, 0x99, 0x43, 0xE5, 0xBB, 0xAC, 0x43, 0xE5, + 0xBB, 0xB4, 0x43, 0xE5, 0xBB, 0xBE, 0x43, 0xE5, + 0xBC, 0x84, 0x43, 0xE5, 0xBC, 0x8B, 0x43, 0xE5, + // Bytes c40 - c7f + 0xBC, 0x93, 0x43, 0xE5, 0xBC, 0xA2, 0x43, 0xE5, + 0xBD, 0x90, 0x43, 0xE5, 0xBD, 0x93, 0x43, 0xE5, + 0xBD, 0xA1, 0x43, 0xE5, 0xBD, 0xA2, 0x43, 0xE5, + 0xBD, 0xA9, 0x43, 0xE5, 0xBD, 0xAB, 0x43, 0xE5, + 0xBD, 0xB3, 0x43, 0xE5, 0xBE, 0x8B, 0x43, 0xE5, + 0xBE, 0x8C, 0x43, 0xE5, 0xBE, 0x97, 0x43, 0xE5, + 0xBE, 0x9A, 0x43, 0xE5, 0xBE, 0xA9, 0x43, 0xE5, + 0xBE, 0xAD, 0x43, 0xE5, 0xBF, 0x83, 0x43, 0xE5, + // Bytes c80 - cbf + 0xBF, 0x8D, 0x43, 0xE5, 0xBF, 0x97, 0x43, 0xE5, + 0xBF, 0xB5, 0x43, 0xE5, 0xBF, 0xB9, 0x43, 0xE6, + 0x80, 0x92, 0x43, 0xE6, 0x80, 0x9C, 0x43, 0xE6, + 0x81, 0xB5, 0x43, 0xE6, 0x82, 0x81, 0x43, 0xE6, + 0x82, 0x94, 0x43, 0xE6, 0x83, 0x87, 0x43, 0xE6, + 0x83, 0x98, 0x43, 0xE6, 0x83, 0xA1, 0x43, 0xE6, + 0x84, 0x88, 0x43, 0xE6, 0x85, 0x84, 0x43, 0xE6, + 0x85, 0x88, 0x43, 0xE6, 0x85, 0x8C, 0x43, 0xE6, + // Bytes cc0 - cff + 0x85, 0x8E, 0x43, 0xE6, 0x85, 0xA0, 0x43, 0xE6, + 0x85, 0xA8, 0x43, 0xE6, 0x85, 0xBA, 0x43, 0xE6, + 0x86, 0x8E, 0x43, 0xE6, 0x86, 0x90, 0x43, 0xE6, + 0x86, 0xA4, 0x43, 0xE6, 0x86, 0xAF, 0x43, 0xE6, + 0x86, 0xB2, 0x43, 0xE6, 0x87, 0x9E, 0x43, 0xE6, + 0x87, 0xB2, 0x43, 0xE6, 0x87, 0xB6, 0x43, 0xE6, + 0x88, 0x80, 0x43, 0xE6, 0x88, 0x88, 0x43, 0xE6, + 0x88, 0x90, 0x43, 0xE6, 0x88, 0x9B, 0x43, 0xE6, + // Bytes d00 - d3f + 0x88, 0xAE, 0x43, 0xE6, 0x88, 0xB4, 0x43, 0xE6, + 0x88, 0xB6, 0x43, 0xE6, 0x89, 0x8B, 0x43, 0xE6, + 0x89, 0x93, 0x43, 0xE6, 0x89, 0x9D, 0x43, 0xE6, + 0x8A, 0x95, 0x43, 0xE6, 0x8A, 0xB1, 0x43, 0xE6, + 0x8B, 0x89, 0x43, 0xE6, 0x8B, 0x8F, 0x43, 0xE6, + 0x8B, 0x93, 0x43, 0xE6, 0x8B, 0x94, 0x43, 0xE6, + 0x8B, 0xBC, 0x43, 0xE6, 0x8B, 0xBE, 0x43, 0xE6, + 0x8C, 0x87, 0x43, 0xE6, 0x8C, 0xBD, 0x43, 0xE6, + // Bytes d40 - d7f + 0x8D, 0x90, 0x43, 0xE6, 0x8D, 0x95, 0x43, 0xE6, + 0x8D, 0xA8, 0x43, 0xE6, 0x8D, 0xBB, 0x43, 0xE6, + 0x8E, 0x83, 0x43, 0xE6, 0x8E, 0xA0, 0x43, 0xE6, + 0x8E, 0xA9, 0x43, 0xE6, 0x8F, 0x84, 0x43, 0xE6, + 0x8F, 0x85, 0x43, 0xE6, 0x8F, 0xA4, 0x43, 0xE6, + 0x90, 0x9C, 0x43, 0xE6, 0x90, 0xA2, 0x43, 0xE6, + 0x91, 0x92, 0x43, 0xE6, 0x91, 0xA9, 0x43, 0xE6, + 0x91, 0xB7, 0x43, 0xE6, 0x91, 0xBE, 0x43, 0xE6, + // Bytes d80 - dbf + 0x92, 0x9A, 0x43, 0xE6, 0x92, 0x9D, 0x43, 0xE6, + 0x93, 0x84, 0x43, 0xE6, 0x94, 0xAF, 0x43, 0xE6, + 0x94, 0xB4, 0x43, 0xE6, 0x95, 0x8F, 0x43, 0xE6, + 0x95, 0x96, 0x43, 0xE6, 0x95, 0xAC, 0x43, 0xE6, + 0x95, 0xB8, 0x43, 0xE6, 0x96, 0x87, 0x43, 0xE6, + 0x96, 0x97, 0x43, 0xE6, 0x96, 0x99, 0x43, 0xE6, + 0x96, 0xA4, 0x43, 0xE6, 0x96, 0xB0, 0x43, 0xE6, + 0x96, 0xB9, 0x43, 0xE6, 0x97, 0x85, 0x43, 0xE6, + // Bytes dc0 - dff + 0x97, 0xA0, 0x43, 0xE6, 0x97, 0xA2, 0x43, 0xE6, + 0x97, 0xA3, 0x43, 0xE6, 0x97, 0xA5, 0x43, 0xE6, + 0x98, 0x93, 0x43, 0xE6, 0x98, 0xA0, 0x43, 0xE6, + 0x99, 0x89, 0x43, 0xE6, 0x99, 0xB4, 0x43, 0xE6, + 0x9A, 0x88, 0x43, 0xE6, 0x9A, 0x91, 0x43, 0xE6, + 0x9A, 0x9C, 0x43, 0xE6, 0x9A, 0xB4, 0x43, 0xE6, + 0x9B, 0x86, 0x43, 0xE6, 0x9B, 0xB0, 0x43, 0xE6, + 0x9B, 0xB4, 0x43, 0xE6, 0x9B, 0xB8, 0x43, 0xE6, + // Bytes e00 - e3f + 0x9C, 0x80, 0x43, 0xE6, 0x9C, 0x88, 0x43, 0xE6, + 0x9C, 0x89, 0x43, 0xE6, 0x9C, 0x97, 0x43, 0xE6, + 0x9C, 0x9B, 0x43, 0xE6, 0x9C, 0xA1, 0x43, 0xE6, + 0x9C, 0xA8, 0x43, 0xE6, 0x9D, 0x8E, 0x43, 0xE6, + 0x9D, 0x93, 0x43, 0xE6, 0x9D, 0x96, 0x43, 0xE6, + 0x9D, 0x9E, 0x43, 0xE6, 0x9D, 0xBB, 0x43, 0xE6, + 0x9E, 0x85, 0x43, 0xE6, 0x9E, 0x97, 0x43, 0xE6, + 0x9F, 0xB3, 0x43, 0xE6, 0x9F, 0xBA, 0x43, 0xE6, + // Bytes e40 - e7f + 0xA0, 0x97, 0x43, 0xE6, 0xA0, 0x9F, 0x43, 0xE6, + 0xA0, 0xAA, 0x43, 0xE6, 0xA1, 0x92, 0x43, 0xE6, + 0xA2, 0x81, 0x43, 0xE6, 0xA2, 0x85, 0x43, 0xE6, + 0xA2, 0x8E, 0x43, 0xE6, 0xA2, 0xA8, 0x43, 0xE6, + 0xA4, 0x94, 0x43, 0xE6, 0xA5, 0x82, 0x43, 0xE6, + 0xA6, 0xA3, 0x43, 0xE6, 0xA7, 0xAA, 0x43, 0xE6, + 0xA8, 0x82, 0x43, 0xE6, 0xA8, 0x93, 0x43, 0xE6, + 0xAA, 0xA8, 0x43, 0xE6, 0xAB, 0x93, 0x43, 0xE6, + // Bytes e80 - ebf + 0xAB, 0x9B, 0x43, 0xE6, 0xAC, 0x84, 0x43, 0xE6, + 0xAC, 0xA0, 0x43, 0xE6, 0xAC, 0xA1, 0x43, 0xE6, + 0xAD, 0x94, 0x43, 0xE6, 0xAD, 0xA2, 0x43, 0xE6, + 0xAD, 0xA3, 0x43, 0xE6, 0xAD, 0xB2, 0x43, 0xE6, + 0xAD, 0xB7, 0x43, 0xE6, 0xAD, 0xB9, 0x43, 0xE6, + 0xAE, 0x9F, 0x43, 0xE6, 0xAE, 0xAE, 0x43, 0xE6, + 0xAE, 0xB3, 0x43, 0xE6, 0xAE, 0xBA, 0x43, 0xE6, + 0xAE, 0xBB, 0x43, 0xE6, 0xAF, 0x8B, 0x43, 0xE6, + // Bytes ec0 - eff + 0xAF, 0x8D, 0x43, 0xE6, 0xAF, 0x94, 0x43, 0xE6, + 0xAF, 0x9B, 0x43, 0xE6, 0xB0, 0x8F, 0x43, 0xE6, + 0xB0, 0x94, 0x43, 0xE6, 0xB0, 0xB4, 0x43, 0xE6, + 0xB1, 0x8E, 0x43, 0xE6, 0xB1, 0xA7, 0x43, 0xE6, + 0xB2, 0x88, 0x43, 0xE6, 0xB2, 0xBF, 0x43, 0xE6, + 0xB3, 0x8C, 0x43, 0xE6, 0xB3, 0x8D, 0x43, 0xE6, + 0xB3, 0xA5, 0x43, 0xE6, 0xB3, 0xA8, 0x43, 0xE6, + 0xB4, 0x96, 0x43, 0xE6, 0xB4, 0x9B, 0x43, 0xE6, + // Bytes f00 - f3f + 0xB4, 0x9E, 0x43, 0xE6, 0xB4, 0xB4, 0x43, 0xE6, + 0xB4, 0xBE, 0x43, 0xE6, 0xB5, 0x81, 0x43, 0xE6, + 0xB5, 0xA9, 0x43, 0xE6, 0xB5, 0xAA, 0x43, 0xE6, + 0xB5, 0xB7, 0x43, 0xE6, 0xB5, 0xB8, 0x43, 0xE6, + 0xB6, 0x85, 0x43, 0xE6, 0xB7, 0x8B, 0x43, 0xE6, + 0xB7, 0x9A, 0x43, 0xE6, 0xB7, 0xAA, 0x43, 0xE6, + 0xB7, 0xB9, 0x43, 0xE6, 0xB8, 0x9A, 0x43, 0xE6, + 0xB8, 0xAF, 0x43, 0xE6, 0xB9, 0xAE, 0x43, 0xE6, + // Bytes f40 - f7f + 0xBA, 0x80, 0x43, 0xE6, 0xBA, 0x9C, 0x43, 0xE6, + 0xBA, 0xBA, 0x43, 0xE6, 0xBB, 0x87, 0x43, 0xE6, + 0xBB, 0x8B, 0x43, 0xE6, 0xBB, 0x91, 0x43, 0xE6, + 0xBB, 0x9B, 0x43, 0xE6, 0xBC, 0x8F, 0x43, 0xE6, + 0xBC, 0x94, 0x43, 0xE6, 0xBC, 0xA2, 0x43, 0xE6, + 0xBC, 0xA3, 0x43, 0xE6, 0xBD, 0xAE, 0x43, 0xE6, + 0xBF, 0x86, 0x43, 0xE6, 0xBF, 0xAB, 0x43, 0xE6, + 0xBF, 0xBE, 0x43, 0xE7, 0x80, 0x9B, 0x43, 0xE7, + // Bytes f80 - fbf + 0x80, 0x9E, 0x43, 0xE7, 0x80, 0xB9, 0x43, 0xE7, + 0x81, 0x8A, 0x43, 0xE7, 0x81, 0xAB, 0x43, 0xE7, + 0x81, 0xB0, 0x43, 0xE7, 0x81, 0xB7, 0x43, 0xE7, + 0x81, 0xBD, 0x43, 0xE7, 0x82, 0x99, 0x43, 0xE7, + 0x82, 0xAD, 0x43, 0xE7, 0x83, 0x88, 0x43, 0xE7, + 0x83, 0x99, 0x43, 0xE7, 0x84, 0xA1, 0x43, 0xE7, + 0x85, 0x85, 0x43, 0xE7, 0x85, 0x89, 0x43, 0xE7, + 0x85, 0xAE, 0x43, 0xE7, 0x86, 0x9C, 0x43, 0xE7, + // Bytes fc0 - fff + 0x87, 0x8E, 0x43, 0xE7, 0x87, 0x90, 0x43, 0xE7, + 0x88, 0x90, 0x43, 0xE7, 0x88, 0x9B, 0x43, 0xE7, + 0x88, 0xA8, 0x43, 0xE7, 0x88, 0xAA, 0x43, 0xE7, + 0x88, 0xAB, 0x43, 0xE7, 0x88, 0xB5, 0x43, 0xE7, + 0x88, 0xB6, 0x43, 0xE7, 0x88, 0xBB, 0x43, 0xE7, + 0x88, 0xBF, 0x43, 0xE7, 0x89, 0x87, 0x43, 0xE7, + 0x89, 0x90, 0x43, 0xE7, 0x89, 0x99, 0x43, 0xE7, + 0x89, 0x9B, 0x43, 0xE7, 0x89, 0xA2, 0x43, 0xE7, + // Bytes 1000 - 103f + 0x89, 0xB9, 0x43, 0xE7, 0x8A, 0x80, 0x43, 0xE7, + 0x8A, 0x95, 0x43, 0xE7, 0x8A, 0xAC, 0x43, 0xE7, + 0x8A, 0xAF, 0x43, 0xE7, 0x8B, 0x80, 0x43, 0xE7, + 0x8B, 0xBC, 0x43, 0xE7, 0x8C, 0xAA, 0x43, 0xE7, + 0x8D, 0xB5, 0x43, 0xE7, 0x8D, 0xBA, 0x43, 0xE7, + 0x8E, 0x84, 0x43, 0xE7, 0x8E, 0x87, 0x43, 0xE7, + 0x8E, 0x89, 0x43, 0xE7, 0x8E, 0x8B, 0x43, 0xE7, + 0x8E, 0xA5, 0x43, 0xE7, 0x8E, 0xB2, 0x43, 0xE7, + // Bytes 1040 - 107f + 0x8F, 0x9E, 0x43, 0xE7, 0x90, 0x86, 0x43, 0xE7, + 0x90, 0x89, 0x43, 0xE7, 0x90, 0xA2, 0x43, 0xE7, + 0x91, 0x87, 0x43, 0xE7, 0x91, 0x9C, 0x43, 0xE7, + 0x91, 0xA9, 0x43, 0xE7, 0x91, 0xB1, 0x43, 0xE7, + 0x92, 0x85, 0x43, 0xE7, 0x92, 0x89, 0x43, 0xE7, + 0x92, 0x98, 0x43, 0xE7, 0x93, 0x8A, 0x43, 0xE7, + 0x93, 0x9C, 0x43, 0xE7, 0x93, 0xA6, 0x43, 0xE7, + 0x94, 0x86, 0x43, 0xE7, 0x94, 0x98, 0x43, 0xE7, + // Bytes 1080 - 10bf + 0x94, 0x9F, 0x43, 0xE7, 0x94, 0xA4, 0x43, 0xE7, + 0x94, 0xA8, 0x43, 0xE7, 0x94, 0xB0, 0x43, 0xE7, + 0x94, 0xB2, 0x43, 0xE7, 0x94, 0xB3, 0x43, 0xE7, + 0x94, 0xB7, 0x43, 0xE7, 0x94, 0xBB, 0x43, 0xE7, + 0x94, 0xBE, 0x43, 0xE7, 0x95, 0x99, 0x43, 0xE7, + 0x95, 0xA5, 0x43, 0xE7, 0x95, 0xB0, 0x43, 0xE7, + 0x96, 0x8B, 0x43, 0xE7, 0x96, 0x92, 0x43, 0xE7, + 0x97, 0xA2, 0x43, 0xE7, 0x98, 0x90, 0x43, 0xE7, + // Bytes 10c0 - 10ff + 0x98, 0x9D, 0x43, 0xE7, 0x98, 0x9F, 0x43, 0xE7, + 0x99, 0x82, 0x43, 0xE7, 0x99, 0xA9, 0x43, 0xE7, + 0x99, 0xB6, 0x43, 0xE7, 0x99, 0xBD, 0x43, 0xE7, + 0x9A, 0xAE, 0x43, 0xE7, 0x9A, 0xBF, 0x43, 0xE7, + 0x9B, 0x8A, 0x43, 0xE7, 0x9B, 0x9B, 0x43, 0xE7, + 0x9B, 0xA3, 0x43, 0xE7, 0x9B, 0xA7, 0x43, 0xE7, + 0x9B, 0xAE, 0x43, 0xE7, 0x9B, 0xB4, 0x43, 0xE7, + 0x9C, 0x81, 0x43, 0xE7, 0x9C, 0x9E, 0x43, 0xE7, + // Bytes 1100 - 113f + 0x9C, 0x9F, 0x43, 0xE7, 0x9D, 0x80, 0x43, 0xE7, + 0x9D, 0x8A, 0x43, 0xE7, 0x9E, 0x8B, 0x43, 0xE7, + 0x9E, 0xA7, 0x43, 0xE7, 0x9F, 0x9B, 0x43, 0xE7, + 0x9F, 0xA2, 0x43, 0xE7, 0x9F, 0xB3, 0x43, 0xE7, + 0xA1, 0x8E, 0x43, 0xE7, 0xA1, 0xAB, 0x43, 0xE7, + 0xA2, 0x8C, 0x43, 0xE7, 0xA2, 0x91, 0x43, 0xE7, + 0xA3, 0x8A, 0x43, 0xE7, 0xA3, 0x8C, 0x43, 0xE7, + 0xA3, 0xBB, 0x43, 0xE7, 0xA4, 0xAA, 0x43, 0xE7, + // Bytes 1140 - 117f + 0xA4, 0xBA, 0x43, 0xE7, 0xA4, 0xBC, 0x43, 0xE7, + 0xA4, 0xBE, 0x43, 0xE7, 0xA5, 0x88, 0x43, 0xE7, + 0xA5, 0x89, 0x43, 0xE7, 0xA5, 0x90, 0x43, 0xE7, + 0xA5, 0x96, 0x43, 0xE7, 0xA5, 0x9D, 0x43, 0xE7, + 0xA5, 0x9E, 0x43, 0xE7, 0xA5, 0xA5, 0x43, 0xE7, + 0xA5, 0xBF, 0x43, 0xE7, 0xA6, 0x81, 0x43, 0xE7, + 0xA6, 0x8D, 0x43, 0xE7, 0xA6, 0x8E, 0x43, 0xE7, + 0xA6, 0x8F, 0x43, 0xE7, 0xA6, 0xAE, 0x43, 0xE7, + // Bytes 1180 - 11bf + 0xA6, 0xB8, 0x43, 0xE7, 0xA6, 0xBE, 0x43, 0xE7, + 0xA7, 0x8A, 0x43, 0xE7, 0xA7, 0x98, 0x43, 0xE7, + 0xA7, 0xAB, 0x43, 0xE7, 0xA8, 0x9C, 0x43, 0xE7, + 0xA9, 0x80, 0x43, 0xE7, 0xA9, 0x8A, 0x43, 0xE7, + 0xA9, 0x8F, 0x43, 0xE7, 0xA9, 0xB4, 0x43, 0xE7, + 0xA9, 0xBA, 0x43, 0xE7, 0xAA, 0x81, 0x43, 0xE7, + 0xAA, 0xB1, 0x43, 0xE7, 0xAB, 0x8B, 0x43, 0xE7, + 0xAB, 0xAE, 0x43, 0xE7, 0xAB, 0xB9, 0x43, 0xE7, + // Bytes 11c0 - 11ff + 0xAC, 0xA0, 0x43, 0xE7, 0xAE, 0x8F, 0x43, 0xE7, + 0xAF, 0x80, 0x43, 0xE7, 0xAF, 0x86, 0x43, 0xE7, + 0xAF, 0x89, 0x43, 0xE7, 0xB0, 0xBE, 0x43, 0xE7, + 0xB1, 0xA0, 0x43, 0xE7, 0xB1, 0xB3, 0x43, 0xE7, + 0xB1, 0xBB, 0x43, 0xE7, 0xB2, 0x92, 0x43, 0xE7, + 0xB2, 0xBE, 0x43, 0xE7, 0xB3, 0x92, 0x43, 0xE7, + 0xB3, 0x96, 0x43, 0xE7, 0xB3, 0xA3, 0x43, 0xE7, + 0xB3, 0xA7, 0x43, 0xE7, 0xB3, 0xA8, 0x43, 0xE7, + // Bytes 1200 - 123f + 0xB3, 0xB8, 0x43, 0xE7, 0xB4, 0x80, 0x43, 0xE7, + 0xB4, 0x90, 0x43, 0xE7, 0xB4, 0xA2, 0x43, 0xE7, + 0xB4, 0xAF, 0x43, 0xE7, 0xB5, 0x82, 0x43, 0xE7, + 0xB5, 0x9B, 0x43, 0xE7, 0xB5, 0xA3, 0x43, 0xE7, + 0xB6, 0xA0, 0x43, 0xE7, 0xB6, 0xBE, 0x43, 0xE7, + 0xB7, 0x87, 0x43, 0xE7, 0xB7, 0xB4, 0x43, 0xE7, + 0xB8, 0x82, 0x43, 0xE7, 0xB8, 0x89, 0x43, 0xE7, + 0xB8, 0xB7, 0x43, 0xE7, 0xB9, 0x81, 0x43, 0xE7, + // Bytes 1240 - 127f + 0xB9, 0x85, 0x43, 0xE7, 0xBC, 0xB6, 0x43, 0xE7, + 0xBC, 0xBE, 0x43, 0xE7, 0xBD, 0x91, 0x43, 0xE7, + 0xBD, 0xB2, 0x43, 0xE7, 0xBD, 0xB9, 0x43, 0xE7, + 0xBD, 0xBA, 0x43, 0xE7, 0xBE, 0x85, 0x43, 0xE7, + 0xBE, 0x8A, 0x43, 0xE7, 0xBE, 0x95, 0x43, 0xE7, + 0xBE, 0x9A, 0x43, 0xE7, 0xBE, 0xBD, 0x43, 0xE7, + 0xBF, 0xBA, 0x43, 0xE8, 0x80, 0x81, 0x43, 0xE8, + 0x80, 0x85, 0x43, 0xE8, 0x80, 0x8C, 0x43, 0xE8, + // Bytes 1280 - 12bf + 0x80, 0x92, 0x43, 0xE8, 0x80, 0xB3, 0x43, 0xE8, + 0x81, 0x86, 0x43, 0xE8, 0x81, 0xA0, 0x43, 0xE8, + 0x81, 0xAF, 0x43, 0xE8, 0x81, 0xB0, 0x43, 0xE8, + 0x81, 0xBE, 0x43, 0xE8, 0x81, 0xBF, 0x43, 0xE8, + 0x82, 0x89, 0x43, 0xE8, 0x82, 0x8B, 0x43, 0xE8, + 0x82, 0xAD, 0x43, 0xE8, 0x82, 0xB2, 0x43, 0xE8, + 0x84, 0x83, 0x43, 0xE8, 0x84, 0xBE, 0x43, 0xE8, + 0x87, 0x98, 0x43, 0xE8, 0x87, 0xA3, 0x43, 0xE8, + // Bytes 12c0 - 12ff + 0x87, 0xA8, 0x43, 0xE8, 0x87, 0xAA, 0x43, 0xE8, + 0x87, 0xAD, 0x43, 0xE8, 0x87, 0xB3, 0x43, 0xE8, + 0x87, 0xBC, 0x43, 0xE8, 0x88, 0x81, 0x43, 0xE8, + 0x88, 0x84, 0x43, 0xE8, 0x88, 0x8C, 0x43, 0xE8, + 0x88, 0x98, 0x43, 0xE8, 0x88, 0x9B, 0x43, 0xE8, + 0x88, 0x9F, 0x43, 0xE8, 0x89, 0xAE, 0x43, 0xE8, + 0x89, 0xAF, 0x43, 0xE8, 0x89, 0xB2, 0x43, 0xE8, + 0x89, 0xB8, 0x43, 0xE8, 0x89, 0xB9, 0x43, 0xE8, + // Bytes 1300 - 133f + 0x8A, 0x8B, 0x43, 0xE8, 0x8A, 0x91, 0x43, 0xE8, + 0x8A, 0x9D, 0x43, 0xE8, 0x8A, 0xB1, 0x43, 0xE8, + 0x8A, 0xB3, 0x43, 0xE8, 0x8A, 0xBD, 0x43, 0xE8, + 0x8B, 0xA5, 0x43, 0xE8, 0x8B, 0xA6, 0x43, 0xE8, + 0x8C, 0x9D, 0x43, 0xE8, 0x8C, 0xA3, 0x43, 0xE8, + 0x8C, 0xB6, 0x43, 0xE8, 0x8D, 0x92, 0x43, 0xE8, + 0x8D, 0x93, 0x43, 0xE8, 0x8D, 0xA3, 0x43, 0xE8, + 0x8E, 0xAD, 0x43, 0xE8, 0x8E, 0xBD, 0x43, 0xE8, + // Bytes 1340 - 137f + 0x8F, 0x89, 0x43, 0xE8, 0x8F, 0x8A, 0x43, 0xE8, + 0x8F, 0x8C, 0x43, 0xE8, 0x8F, 0x9C, 0x43, 0xE8, + 0x8F, 0xA7, 0x43, 0xE8, 0x8F, 0xAF, 0x43, 0xE8, + 0x8F, 0xB1, 0x43, 0xE8, 0x90, 0xBD, 0x43, 0xE8, + 0x91, 0x89, 0x43, 0xE8, 0x91, 0x97, 0x43, 0xE8, + 0x93, 0xAE, 0x43, 0xE8, 0x93, 0xB1, 0x43, 0xE8, + 0x93, 0xB3, 0x43, 0xE8, 0x93, 0xBC, 0x43, 0xE8, + 0x94, 0x96, 0x43, 0xE8, 0x95, 0xA4, 0x43, 0xE8, + // Bytes 1380 - 13bf + 0x97, 0x8D, 0x43, 0xE8, 0x97, 0xBA, 0x43, 0xE8, + 0x98, 0x86, 0x43, 0xE8, 0x98, 0x92, 0x43, 0xE8, + 0x98, 0xAD, 0x43, 0xE8, 0x98, 0xBF, 0x43, 0xE8, + 0x99, 0x8D, 0x43, 0xE8, 0x99, 0x90, 0x43, 0xE8, + 0x99, 0x9C, 0x43, 0xE8, 0x99, 0xA7, 0x43, 0xE8, + 0x99, 0xA9, 0x43, 0xE8, 0x99, 0xAB, 0x43, 0xE8, + 0x9A, 0x88, 0x43, 0xE8, 0x9A, 0xA9, 0x43, 0xE8, + 0x9B, 0xA2, 0x43, 0xE8, 0x9C, 0x8E, 0x43, 0xE8, + // Bytes 13c0 - 13ff + 0x9C, 0xA8, 0x43, 0xE8, 0x9D, 0xAB, 0x43, 0xE8, + 0x9D, 0xB9, 0x43, 0xE8, 0x9E, 0x86, 0x43, 0xE8, + 0x9E, 0xBA, 0x43, 0xE8, 0x9F, 0xA1, 0x43, 0xE8, + 0xA0, 0x81, 0x43, 0xE8, 0xA0, 0x9F, 0x43, 0xE8, + 0xA1, 0x80, 0x43, 0xE8, 0xA1, 0x8C, 0x43, 0xE8, + 0xA1, 0xA0, 0x43, 0xE8, 0xA1, 0xA3, 0x43, 0xE8, + 0xA3, 0x82, 0x43, 0xE8, 0xA3, 0x8F, 0x43, 0xE8, + 0xA3, 0x97, 0x43, 0xE8, 0xA3, 0x9E, 0x43, 0xE8, + // Bytes 1400 - 143f + 0xA3, 0xA1, 0x43, 0xE8, 0xA3, 0xB8, 0x43, 0xE8, + 0xA3, 0xBA, 0x43, 0xE8, 0xA4, 0x90, 0x43, 0xE8, + 0xA5, 0x81, 0x43, 0xE8, 0xA5, 0xA4, 0x43, 0xE8, + 0xA5, 0xBE, 0x43, 0xE8, 0xA6, 0x86, 0x43, 0xE8, + 0xA6, 0x8B, 0x43, 0xE8, 0xA6, 0x96, 0x43, 0xE8, + 0xA7, 0x92, 0x43, 0xE8, 0xA7, 0xA3, 0x43, 0xE8, + 0xA8, 0x80, 0x43, 0xE8, 0xAA, 0xA0, 0x43, 0xE8, + 0xAA, 0xAA, 0x43, 0xE8, 0xAA, 0xBF, 0x43, 0xE8, + // Bytes 1440 - 147f + 0xAB, 0x8B, 0x43, 0xE8, 0xAB, 0x92, 0x43, 0xE8, + 0xAB, 0x96, 0x43, 0xE8, 0xAB, 0xAD, 0x43, 0xE8, + 0xAB, 0xB8, 0x43, 0xE8, 0xAB, 0xBE, 0x43, 0xE8, + 0xAC, 0x81, 0x43, 0xE8, 0xAC, 0xB9, 0x43, 0xE8, + 0xAD, 0x98, 0x43, 0xE8, 0xAE, 0x80, 0x43, 0xE8, + 0xAE, 0x8A, 0x43, 0xE8, 0xB0, 0xB7, 0x43, 0xE8, + 0xB1, 0x86, 0x43, 0xE8, 0xB1, 0x88, 0x43, 0xE8, + 0xB1, 0x95, 0x43, 0xE8, 0xB1, 0xB8, 0x43, 0xE8, + // Bytes 1480 - 14bf + 0xB2, 0x9D, 0x43, 0xE8, 0xB2, 0xA1, 0x43, 0xE8, + 0xB2, 0xA9, 0x43, 0xE8, 0xB2, 0xAB, 0x43, 0xE8, + 0xB3, 0x81, 0x43, 0xE8, 0xB3, 0x82, 0x43, 0xE8, + 0xB3, 0x87, 0x43, 0xE8, 0xB3, 0x88, 0x43, 0xE8, + 0xB3, 0x93, 0x43, 0xE8, 0xB4, 0x88, 0x43, 0xE8, + 0xB4, 0x9B, 0x43, 0xE8, 0xB5, 0xA4, 0x43, 0xE8, + 0xB5, 0xB0, 0x43, 0xE8, 0xB5, 0xB7, 0x43, 0xE8, + 0xB6, 0xB3, 0x43, 0xE8, 0xB6, 0xBC, 0x43, 0xE8, + // Bytes 14c0 - 14ff + 0xB7, 0x8B, 0x43, 0xE8, 0xB7, 0xAF, 0x43, 0xE8, + 0xB7, 0xB0, 0x43, 0xE8, 0xBA, 0xAB, 0x43, 0xE8, + 0xBB, 0x8A, 0x43, 0xE8, 0xBB, 0x94, 0x43, 0xE8, + 0xBC, 0xA6, 0x43, 0xE8, 0xBC, 0xAA, 0x43, 0xE8, + 0xBC, 0xB8, 0x43, 0xE8, 0xBC, 0xBB, 0x43, 0xE8, + 0xBD, 0xA2, 0x43, 0xE8, 0xBE, 0x9B, 0x43, 0xE8, + 0xBE, 0x9E, 0x43, 0xE8, 0xBE, 0xB0, 0x43, 0xE8, + 0xBE, 0xB5, 0x43, 0xE8, 0xBE, 0xB6, 0x43, 0xE9, + // Bytes 1500 - 153f + 0x80, 0xA3, 0x43, 0xE9, 0x80, 0xB8, 0x43, 0xE9, + 0x81, 0x8A, 0x43, 0xE9, 0x81, 0xA9, 0x43, 0xE9, + 0x81, 0xB2, 0x43, 0xE9, 0x81, 0xBC, 0x43, 0xE9, + 0x82, 0x8F, 0x43, 0xE9, 0x82, 0x91, 0x43, 0xE9, + 0x82, 0x94, 0x43, 0xE9, 0x83, 0x8E, 0x43, 0xE9, + 0x83, 0x9E, 0x43, 0xE9, 0x83, 0xB1, 0x43, 0xE9, + 0x83, 0xBD, 0x43, 0xE9, 0x84, 0x91, 0x43, 0xE9, + 0x84, 0x9B, 0x43, 0xE9, 0x85, 0x89, 0x43, 0xE9, + // Bytes 1540 - 157f + 0x85, 0x8D, 0x43, 0xE9, 0x85, 0xAA, 0x43, 0xE9, + 0x86, 0x99, 0x43, 0xE9, 0x86, 0xB4, 0x43, 0xE9, + 0x87, 0x86, 0x43, 0xE9, 0x87, 0x8C, 0x43, 0xE9, + 0x87, 0x8F, 0x43, 0xE9, 0x87, 0x91, 0x43, 0xE9, + 0x88, 0xB4, 0x43, 0xE9, 0x88, 0xB8, 0x43, 0xE9, + 0x89, 0xB6, 0x43, 0xE9, 0x89, 0xBC, 0x43, 0xE9, + 0x8B, 0x97, 0x43, 0xE9, 0x8B, 0x98, 0x43, 0xE9, + 0x8C, 0x84, 0x43, 0xE9, 0x8D, 0x8A, 0x43, 0xE9, + // Bytes 1580 - 15bf + 0x8F, 0xB9, 0x43, 0xE9, 0x90, 0x95, 0x43, 0xE9, + 0x95, 0xB7, 0x43, 0xE9, 0x96, 0x80, 0x43, 0xE9, + 0x96, 0x8B, 0x43, 0xE9, 0x96, 0xAD, 0x43, 0xE9, + 0x96, 0xB7, 0x43, 0xE9, 0x98, 0x9C, 0x43, 0xE9, + 0x98, 0xAE, 0x43, 0xE9, 0x99, 0x8B, 0x43, 0xE9, + 0x99, 0x8D, 0x43, 0xE9, 0x99, 0xB5, 0x43, 0xE9, + 0x99, 0xB8, 0x43, 0xE9, 0x99, 0xBC, 0x43, 0xE9, + 0x9A, 0x86, 0x43, 0xE9, 0x9A, 0xA3, 0x43, 0xE9, + // Bytes 15c0 - 15ff + 0x9A, 0xB6, 0x43, 0xE9, 0x9A, 0xB7, 0x43, 0xE9, + 0x9A, 0xB8, 0x43, 0xE9, 0x9A, 0xB9, 0x43, 0xE9, + 0x9B, 0x83, 0x43, 0xE9, 0x9B, 0xA2, 0x43, 0xE9, + 0x9B, 0xA3, 0x43, 0xE9, 0x9B, 0xA8, 0x43, 0xE9, + 0x9B, 0xB6, 0x43, 0xE9, 0x9B, 0xB7, 0x43, 0xE9, + 0x9C, 0xA3, 0x43, 0xE9, 0x9C, 0xB2, 0x43, 0xE9, + 0x9D, 0x88, 0x43, 0xE9, 0x9D, 0x91, 0x43, 0xE9, + 0x9D, 0x96, 0x43, 0xE9, 0x9D, 0x9E, 0x43, 0xE9, + // Bytes 1600 - 163f + 0x9D, 0xA2, 0x43, 0xE9, 0x9D, 0xA9, 0x43, 0xE9, + 0x9F, 0x8B, 0x43, 0xE9, 0x9F, 0x9B, 0x43, 0xE9, + 0x9F, 0xA0, 0x43, 0xE9, 0x9F, 0xAD, 0x43, 0xE9, + 0x9F, 0xB3, 0x43, 0xE9, 0x9F, 0xBF, 0x43, 0xE9, + 0xA0, 0x81, 0x43, 0xE9, 0xA0, 0x85, 0x43, 0xE9, + 0xA0, 0x8B, 0x43, 0xE9, 0xA0, 0x98, 0x43, 0xE9, + 0xA0, 0xA9, 0x43, 0xE9, 0xA0, 0xBB, 0x43, 0xE9, + 0xA1, 0x9E, 0x43, 0xE9, 0xA2, 0xA8, 0x43, 0xE9, + // Bytes 1640 - 167f + 0xA3, 0x9B, 0x43, 0xE9, 0xA3, 0x9F, 0x43, 0xE9, + 0xA3, 0xA2, 0x43, 0xE9, 0xA3, 0xAF, 0x43, 0xE9, + 0xA3, 0xBC, 0x43, 0xE9, 0xA4, 0xA8, 0x43, 0xE9, + 0xA4, 0xA9, 0x43, 0xE9, 0xA6, 0x96, 0x43, 0xE9, + 0xA6, 0x99, 0x43, 0xE9, 0xA6, 0xA7, 0x43, 0xE9, + 0xA6, 0xAC, 0x43, 0xE9, 0xA7, 0x82, 0x43, 0xE9, + 0xA7, 0xB1, 0x43, 0xE9, 0xA7, 0xBE, 0x43, 0xE9, + 0xA9, 0xAA, 0x43, 0xE9, 0xAA, 0xA8, 0x43, 0xE9, + // Bytes 1680 - 16bf + 0xAB, 0x98, 0x43, 0xE9, 0xAB, 0x9F, 0x43, 0xE9, + 0xAC, 0x92, 0x43, 0xE9, 0xAC, 0xA5, 0x43, 0xE9, + 0xAC, 0xAF, 0x43, 0xE9, 0xAC, 0xB2, 0x43, 0xE9, + 0xAC, 0xBC, 0x43, 0xE9, 0xAD, 0x9A, 0x43, 0xE9, + 0xAD, 0xAF, 0x43, 0xE9, 0xB1, 0x80, 0x43, 0xE9, + 0xB1, 0x97, 0x43, 0xE9, 0xB3, 0xA5, 0x43, 0xE9, + 0xB3, 0xBD, 0x43, 0xE9, 0xB5, 0xA7, 0x43, 0xE9, + 0xB6, 0xB4, 0x43, 0xE9, 0xB7, 0xBA, 0x43, 0xE9, + // Bytes 16c0 - 16ff + 0xB8, 0x9E, 0x43, 0xE9, 0xB9, 0xB5, 0x43, 0xE9, + 0xB9, 0xBF, 0x43, 0xE9, 0xBA, 0x97, 0x43, 0xE9, + 0xBA, 0x9F, 0x43, 0xE9, 0xBA, 0xA5, 0x43, 0xE9, + 0xBA, 0xBB, 0x43, 0xE9, 0xBB, 0x83, 0x43, 0xE9, + 0xBB, 0x8D, 0x43, 0xE9, 0xBB, 0x8E, 0x43, 0xE9, + 0xBB, 0x91, 0x43, 0xE9, 0xBB, 0xB9, 0x43, 0xE9, + 0xBB, 0xBD, 0x43, 0xE9, 0xBB, 0xBE, 0x43, 0xE9, + 0xBC, 0x85, 0x43, 0xE9, 0xBC, 0x8E, 0x43, 0xE9, + // Bytes 1700 - 173f + 0xBC, 0x8F, 0x43, 0xE9, 0xBC, 0x93, 0x43, 0xE9, + 0xBC, 0x96, 0x43, 0xE9, 0xBC, 0xA0, 0x43, 0xE9, + 0xBC, 0xBB, 0x43, 0xE9, 0xBD, 0x83, 0x43, 0xE9, + 0xBD, 0x8A, 0x43, 0xE9, 0xBD, 0x92, 0x43, 0xE9, + 0xBE, 0x8D, 0x43, 0xE9, 0xBE, 0x8E, 0x43, 0xE9, + 0xBE, 0x9C, 0x43, 0xE9, 0xBE, 0x9F, 0x43, 0xE9, + 0xBE, 0xA0, 0x43, 0xEA, 0x99, 0x91, 0x43, 0xEA, + 0x9A, 0x89, 0x43, 0xEA, 0x9C, 0xA7, 0x43, 0xEA, + // Bytes 1740 - 177f + 0x9D, 0xAF, 0x43, 0xEA, 0x9E, 0x8E, 0x43, 0xEA, + 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x43, 0xEA, + 0xAD, 0xA6, 0x43, 0xEA, 0xAD, 0xA7, 0x44, 0xF0, + 0x9D, 0xBC, 0x84, 0x44, 0xF0, 0x9D, 0xBC, 0x85, + 0x44, 0xF0, 0x9D, 0xBC, 0x86, 0x44, 0xF0, 0x9D, + 0xBC, 0x88, 0x44, 0xF0, 0x9D, 0xBC, 0x8A, 0x44, + 0xF0, 0x9D, 0xBC, 0x9E, 0x44, 0xF0, 0xA0, 0x84, + 0xA2, 0x44, 0xF0, 0xA0, 0x94, 0x9C, 0x44, 0xF0, + // Bytes 1780 - 17bf + 0xA0, 0x94, 0xA5, 0x44, 0xF0, 0xA0, 0x95, 0x8B, + 0x44, 0xF0, 0xA0, 0x98, 0xBA, 0x44, 0xF0, 0xA0, + 0xA0, 0x84, 0x44, 0xF0, 0xA0, 0xA3, 0x9E, 0x44, + 0xF0, 0xA0, 0xA8, 0xAC, 0x44, 0xF0, 0xA0, 0xAD, + 0xA3, 0x44, 0xF0, 0xA1, 0x93, 0xA4, 0x44, 0xF0, + 0xA1, 0x9A, 0xA8, 0x44, 0xF0, 0xA1, 0x9B, 0xAA, + 0x44, 0xF0, 0xA1, 0xA7, 0x88, 0x44, 0xF0, 0xA1, + 0xAC, 0x98, 0x44, 0xF0, 0xA1, 0xB4, 0x8B, 0x44, + // Bytes 17c0 - 17ff + 0xF0, 0xA1, 0xB7, 0xA4, 0x44, 0xF0, 0xA1, 0xB7, + 0xA6, 0x44, 0xF0, 0xA2, 0x86, 0x83, 0x44, 0xF0, + 0xA2, 0x86, 0x9F, 0x44, 0xF0, 0xA2, 0x8C, 0xB1, + 0x44, 0xF0, 0xA2, 0x9B, 0x94, 0x44, 0xF0, 0xA2, + 0xA1, 0x84, 0x44, 0xF0, 0xA2, 0xA1, 0x8A, 0x44, + 0xF0, 0xA2, 0xAC, 0x8C, 0x44, 0xF0, 0xA2, 0xAF, + 0xB1, 0x44, 0xF0, 0xA3, 0x80, 0x8A, 0x44, 0xF0, + 0xA3, 0x8A, 0xB8, 0x44, 0xF0, 0xA3, 0x8D, 0x9F, + // Bytes 1800 - 183f + 0x44, 0xF0, 0xA3, 0x8E, 0x93, 0x44, 0xF0, 0xA3, + 0x8E, 0x9C, 0x44, 0xF0, 0xA3, 0x8F, 0x83, 0x44, + 0xF0, 0xA3, 0x8F, 0x95, 0x44, 0xF0, 0xA3, 0x91, + 0xAD, 0x44, 0xF0, 0xA3, 0x9A, 0xA3, 0x44, 0xF0, + 0xA3, 0xA2, 0xA7, 0x44, 0xF0, 0xA3, 0xAA, 0x8D, + 0x44, 0xF0, 0xA3, 0xAB, 0xBA, 0x44, 0xF0, 0xA3, + 0xB2, 0xBC, 0x44, 0xF0, 0xA3, 0xB4, 0x9E, 0x44, + 0xF0, 0xA3, 0xBB, 0x91, 0x44, 0xF0, 0xA3, 0xBD, + // Bytes 1840 - 187f + 0x9E, 0x44, 0xF0, 0xA3, 0xBE, 0x8E, 0x44, 0xF0, + 0xA4, 0x89, 0xA3, 0x44, 0xF0, 0xA4, 0x8B, 0xAE, + 0x44, 0xF0, 0xA4, 0x8E, 0xAB, 0x44, 0xF0, 0xA4, + 0x98, 0x88, 0x44, 0xF0, 0xA4, 0x9C, 0xB5, 0x44, + 0xF0, 0xA4, 0xA0, 0x94, 0x44, 0xF0, 0xA4, 0xB0, + 0xB6, 0x44, 0xF0, 0xA4, 0xB2, 0x92, 0x44, 0xF0, + 0xA4, 0xBE, 0xA1, 0x44, 0xF0, 0xA4, 0xBE, 0xB8, + 0x44, 0xF0, 0xA5, 0x81, 0x84, 0x44, 0xF0, 0xA5, + // Bytes 1880 - 18bf + 0x83, 0xB2, 0x44, 0xF0, 0xA5, 0x83, 0xB3, 0x44, + 0xF0, 0xA5, 0x84, 0x99, 0x44, 0xF0, 0xA5, 0x84, + 0xB3, 0x44, 0xF0, 0xA5, 0x89, 0x89, 0x44, 0xF0, + 0xA5, 0x90, 0x9D, 0x44, 0xF0, 0xA5, 0x98, 0xA6, + 0x44, 0xF0, 0xA5, 0x9A, 0x9A, 0x44, 0xF0, 0xA5, + 0x9B, 0x85, 0x44, 0xF0, 0xA5, 0xA5, 0xBC, 0x44, + 0xF0, 0xA5, 0xAA, 0xA7, 0x44, 0xF0, 0xA5, 0xAE, + 0xAB, 0x44, 0xF0, 0xA5, 0xB2, 0x80, 0x44, 0xF0, + // Bytes 18c0 - 18ff + 0xA5, 0xB3, 0x90, 0x44, 0xF0, 0xA5, 0xBE, 0x86, + 0x44, 0xF0, 0xA6, 0x87, 0x9A, 0x44, 0xF0, 0xA6, + 0x88, 0xA8, 0x44, 0xF0, 0xA6, 0x89, 0x87, 0x44, + 0xF0, 0xA6, 0x8B, 0x99, 0x44, 0xF0, 0xA6, 0x8C, + 0xBE, 0x44, 0xF0, 0xA6, 0x93, 0x9A, 0x44, 0xF0, + 0xA6, 0x94, 0xA3, 0x44, 0xF0, 0xA6, 0x96, 0xA8, + 0x44, 0xF0, 0xA6, 0x9E, 0xA7, 0x44, 0xF0, 0xA6, + 0x9E, 0xB5, 0x44, 0xF0, 0xA6, 0xAC, 0xBC, 0x44, + // Bytes 1900 - 193f + 0xF0, 0xA6, 0xB0, 0xB6, 0x44, 0xF0, 0xA6, 0xB3, + 0x95, 0x44, 0xF0, 0xA6, 0xB5, 0xAB, 0x44, 0xF0, + 0xA6, 0xBC, 0xAC, 0x44, 0xF0, 0xA6, 0xBE, 0xB1, + 0x44, 0xF0, 0xA7, 0x83, 0x92, 0x44, 0xF0, 0xA7, + 0x8F, 0x8A, 0x44, 0xF0, 0xA7, 0x99, 0xA7, 0x44, + 0xF0, 0xA7, 0xA2, 0xAE, 0x44, 0xF0, 0xA7, 0xA5, + 0xA6, 0x44, 0xF0, 0xA7, 0xB2, 0xA8, 0x44, 0xF0, + 0xA7, 0xBB, 0x93, 0x44, 0xF0, 0xA7, 0xBC, 0xAF, + // Bytes 1940 - 197f + 0x44, 0xF0, 0xA8, 0x97, 0x92, 0x44, 0xF0, 0xA8, + 0x97, 0xAD, 0x44, 0xF0, 0xA8, 0x9C, 0xAE, 0x44, + 0xF0, 0xA8, 0xAF, 0xBA, 0x44, 0xF0, 0xA8, 0xB5, + 0xB7, 0x44, 0xF0, 0xA9, 0x85, 0x85, 0x44, 0xF0, + 0xA9, 0x87, 0x9F, 0x44, 0xF0, 0xA9, 0x88, 0x9A, + 0x44, 0xF0, 0xA9, 0x90, 0x8A, 0x44, 0xF0, 0xA9, + 0x92, 0x96, 0x44, 0xF0, 0xA9, 0x96, 0xB6, 0x44, + 0xF0, 0xA9, 0xAC, 0xB0, 0x44, 0xF0, 0xAA, 0x83, + // Bytes 1980 - 19bf + 0x8E, 0x44, 0xF0, 0xAA, 0x84, 0x85, 0x44, 0xF0, + 0xAA, 0x88, 0x8E, 0x44, 0xF0, 0xAA, 0x8A, 0x91, + 0x44, 0xF0, 0xAA, 0x8E, 0x92, 0x44, 0xF0, 0xAA, + 0x98, 0x80, 0x42, 0x21, 0x21, 0x42, 0x21, 0x3F, + 0x42, 0x2E, 0x2E, 0x42, 0x30, 0x2C, 0x42, 0x30, + 0x2E, 0x42, 0x31, 0x2C, 0x42, 0x31, 0x2E, 0x42, + 0x31, 0x30, 0x42, 0x31, 0x31, 0x42, 0x31, 0x32, + 0x42, 0x31, 0x33, 0x42, 0x31, 0x34, 0x42, 0x31, + // Bytes 19c0 - 19ff + 0x35, 0x42, 0x31, 0x36, 0x42, 0x31, 0x37, 0x42, + 0x31, 0x38, 0x42, 0x31, 0x39, 0x42, 0x32, 0x2C, + 0x42, 0x32, 0x2E, 0x42, 0x32, 0x30, 0x42, 0x32, + 0x31, 0x42, 0x32, 0x32, 0x42, 0x32, 0x33, 0x42, + 0x32, 0x34, 0x42, 0x32, 0x35, 0x42, 0x32, 0x36, + 0x42, 0x32, 0x37, 0x42, 0x32, 0x38, 0x42, 0x32, + 0x39, 0x42, 0x33, 0x2C, 0x42, 0x33, 0x2E, 0x42, + 0x33, 0x30, 0x42, 0x33, 0x31, 0x42, 0x33, 0x32, + // Bytes 1a00 - 1a3f + 0x42, 0x33, 0x33, 0x42, 0x33, 0x34, 0x42, 0x33, + 0x35, 0x42, 0x33, 0x36, 0x42, 0x33, 0x37, 0x42, + 0x33, 0x38, 0x42, 0x33, 0x39, 0x42, 0x34, 0x2C, + 0x42, 0x34, 0x2E, 0x42, 0x34, 0x30, 0x42, 0x34, + 0x31, 0x42, 0x34, 0x32, 0x42, 0x34, 0x33, 0x42, + 0x34, 0x34, 0x42, 0x34, 0x35, 0x42, 0x34, 0x36, + 0x42, 0x34, 0x37, 0x42, 0x34, 0x38, 0x42, 0x34, + 0x39, 0x42, 0x35, 0x2C, 0x42, 0x35, 0x2E, 0x42, + // Bytes 1a40 - 1a7f + 0x35, 0x30, 0x42, 0x36, 0x2C, 0x42, 0x36, 0x2E, + 0x42, 0x37, 0x2C, 0x42, 0x37, 0x2E, 0x42, 0x38, + 0x2C, 0x42, 0x38, 0x2E, 0x42, 0x39, 0x2C, 0x42, + 0x39, 0x2E, 0x42, 0x3D, 0x3D, 0x42, 0x3F, 0x21, + 0x42, 0x3F, 0x3F, 0x42, 0x41, 0x55, 0x42, 0x42, + 0x71, 0x42, 0x43, 0x44, 0x42, 0x44, 0x4A, 0x42, + 0x44, 0x5A, 0x42, 0x44, 0x7A, 0x42, 0x47, 0x42, + 0x42, 0x47, 0x79, 0x42, 0x48, 0x50, 0x42, 0x48, + // Bytes 1a80 - 1abf + 0x56, 0x42, 0x48, 0x67, 0x42, 0x48, 0x7A, 0x42, + 0x49, 0x49, 0x42, 0x49, 0x4A, 0x42, 0x49, 0x55, + 0x42, 0x49, 0x56, 0x42, 0x49, 0x58, 0x42, 0x4B, + 0x42, 0x42, 0x4B, 0x4B, 0x42, 0x4B, 0x4D, 0x42, + 0x4C, 0x4A, 0x42, 0x4C, 0x6A, 0x42, 0x4D, 0x42, + 0x42, 0x4D, 0x43, 0x42, 0x4D, 0x44, 0x42, 0x4D, + 0x52, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, + 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, + // Bytes 1ac0 - 1aff + 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, + 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, + 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, + 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, + 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, + 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, + 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, + 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, + // Bytes 1b00 - 1b3f + 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, + 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, + 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, + 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, + 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, + 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, + 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, + 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, + // Bytes 1b40 - 1b7f + 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, + 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, + 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, + 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, + 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, + 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, + 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, + 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, + // Bytes 1b80 - 1bbf + 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, + 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, + 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, + 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, + 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, + 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, + 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, + 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, + // Bytes 1bc0 - 1bff + 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, + 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, + 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, + 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, + 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, + 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, + 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, + 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, + // Bytes 1c00 - 1c3f + 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, + 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, + 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, + 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, + 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, + 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, + 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, + 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, + // Bytes 1c40 - 1c7f + 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, + 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, + 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, + 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, + 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, + 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, + 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, + 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, + // Bytes 1c80 - 1cbf + 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, + 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, + 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, + 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, + 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, + 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, + 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, + 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, + // Bytes 1cc0 - 1cff + 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, + 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, + 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, + 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, + 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, + 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, + 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, + 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, + // Bytes 1d00 - 1d3f + 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, + 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, + 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, + 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, + 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, + 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, + 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, + 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, + // Bytes 1d40 - 1d7f + 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, + 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, + 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, + 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, + 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, + 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, + 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, + 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, + // Bytes 1d80 - 1dbf + 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, + 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, + 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, + 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, + 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, + 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, + 0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, + 0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, + // Bytes 1dc0 - 1dff + 0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, + 0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, + 0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, + 0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, + 0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, + 0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, + 0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, + 0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, + // Bytes 1e00 - 1e3f + 0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, + 0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, + 0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, + 0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, + 0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, + 0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, + 0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, + 0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, + // Bytes 1e40 - 1e7f + 0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, + 0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, + 0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, + 0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, + 0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, + 0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, + 0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, + 0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, + // Bytes 1e80 - 1ebf + 0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, + 0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, + 0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, + 0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, + 0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, + 0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, + 0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, + 0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, + // Bytes 1ec0 - 1eff + 0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, + 0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, + 0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, + 0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, + 0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, + 0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, + 0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, + 0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, + // Bytes 1f00 - 1f3f + 0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, + 0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, + 0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, + 0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, + 0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, + 0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, + 0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, + 0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, + // Bytes 1f40 - 1f7f + 0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, + 0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, + 0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, + 0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, + 0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, + 0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, + 0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, + 0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, + // Bytes 1f80 - 1fbf + 0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, + 0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, + 0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, + 0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, + 0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, + 0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, + 0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, + 0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, + // Bytes 1fc0 - 1fff + 0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, + 0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, + 0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, + 0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, + 0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, + 0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, + 0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, + 0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, + // Bytes 2000 - 203f + 0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, + 0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, + 0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, + 0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, + 0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, + 0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, + 0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, + 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, + // Bytes 2040 - 207f + 0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, + 0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, + 0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, + 0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, + 0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, + 0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, + 0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, + 0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, + // Bytes 2080 - 20bf + 0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, + 0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, + 0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, + 0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, + 0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, + 0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, + 0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, + 0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, + // Bytes 20c0 - 20ff + 0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, + 0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, + 0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, + 0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, + 0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, + 0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, + 0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, + 0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, + // Bytes 2100 - 213f + 0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, + 0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, + 0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, + 0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, + 0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, + 0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, + 0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, + 0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, + // Bytes 2140 - 217f + 0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, + 0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, + 0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, + 0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, + 0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, + 0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, + 0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, + 0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, + // Bytes 2180 - 21bf + 0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, + 0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, + // Bytes 21c0 - 21ff + 0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, + 0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, + 0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, + 0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, + 0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, + 0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, + // Bytes 2200 - 223f + 0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, + 0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, + 0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, + 0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, + 0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, + 0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, + 0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, + 0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, + // Bytes 2240 - 227f + 0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, + 0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, + 0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, + 0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, + 0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, + 0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, + 0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, + 0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, + // Bytes 2280 - 22bf + 0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, + 0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, + 0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, + 0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, + 0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, + 0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, + 0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, + 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, + // Bytes 22c0 - 22ff + 0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, + 0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, + 0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, + 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, + // Bytes 2300 - 233f + 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, + // Bytes 2340 - 237f + 0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, + 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, + 0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, + 0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, + 0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, + 0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, + 0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, + // Bytes 2380 - 23bf + 0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, + 0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, + 0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, + 0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, + // Bytes 23c0 - 23ff + 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, + 0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, + 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, + 0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, + 0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, + 0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, + 0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, + // Bytes 2400 - 243f + 0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, + 0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, + 0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, + 0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, + 0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, + 0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, + 0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, + // Bytes 2440 - 247f + 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, + 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, + 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, + 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, + 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, + 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, + 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, + 0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, + // Bytes 2480 - 24bf + 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, + 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, + 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, + 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, + 0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, + 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + // Bytes 24c0 - 24ff + 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, + 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, + 0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, + 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, + 0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, + 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, + 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, + // Bytes 2500 - 253f + 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, + 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, + 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, + 0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, + 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, + 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, + 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, + // Bytes 2540 - 257f + 0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, + 0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, + 0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, + 0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, + 0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, + 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, + 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, + // Bytes 2580 - 25bf + 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, + 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, + 0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, + 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, + 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, + 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, + 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, + 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, + // Bytes 25c0 - 25ff + 0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, + 0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, + 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, + 0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, + 0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, + 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, + 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, + // Bytes 2600 - 263f + 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, + 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, + 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, + 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, + 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, + 0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, + 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, + // Bytes 2640 - 267f + 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, + 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, + 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, + 0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, + 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, + 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, + 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, + 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, + // Bytes 2680 - 26bf + 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, + 0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, + 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, + 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, + 0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, + 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, + 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, + // Bytes 26c0 - 26ff + 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, + 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, + 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, + 0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, + 0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, + // Bytes 2700 - 273f + 0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, + 0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, + 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, + 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, + 0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, + // Bytes 2740 - 277f + 0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, + 0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, + 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, + 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, + 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, + 0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, + 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, + // Bytes 2780 - 27bf + 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, + 0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, + 0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, + 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, + 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, + 0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, + 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, + 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, + // Bytes 27c0 - 27ff + 0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, + 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, + 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, + 0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, + 0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, + 0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, + 0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, + // Bytes 2800 - 283f + 0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, + 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, + 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, + 0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, + 0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, + 0x83, 0xA0, 0x46, 0xE4, 0xBB, 0xA4, 0xE5, 0x92, + 0x8C, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, 0xA3, + 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, 0x46, + // Bytes 2840 - 287f + 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46, 0xE6, + 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72, 0x61, + 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3, 0x80, + 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28, 0xE1, + 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, + // Bytes 2880 - 28bf + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x89, + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, + 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x29, + // Bytes 28c0 - 28ff + 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x92, + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61, 0x64, + 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8, 0xA7, + 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, 0xD8, + 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x48, + // Bytes 2900 - 293f + 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9, 0x84, + 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, 0xD9, + 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8, 0xB9, + 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, + 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8, 0xAD, + 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88, 0xD8, + 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, 0x80, + 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x49, + // Bytes 2940 - 297f + 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, + 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, + 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE, 0xE2, + 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3, 0x80, + 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95, 0x49, + 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, 0x80, + 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, 0x9D, + 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, + // Bytes 2980 - 29bf + 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, + 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95, 0x49, + 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3, 0x80, + 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C, 0xAC, + 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, + 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, + 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, 0x49, + 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + // Bytes 29c0 - 29ff + 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6, 0xE3, + 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x82, + 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x49, + 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, 0xE3, + 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, + // Bytes 2a00 - 2a3f + 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A, 0x49, + 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86, 0xE3, + 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3, 0x83, + 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, + 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, 0x83, + 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0xA4, + // Bytes 2a40 - 2a7f + 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, + 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, 0x49, + 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, + 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98, 0xE3, + 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, + 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, + // Bytes 2a80 - 2abf + 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E, 0xE3, + 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3, 0x83, + 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF, 0x49, + 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, 0xA2, + 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF, 0xE3, + // Bytes 2ac0 - 2aff + 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2, 0x80, + 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, + 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2, 0x88, + 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x4C, + 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3, 0x83, + 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82, 0xA8, + 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x83, + 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, + // Bytes 2b00 - 2b3f + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, + 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD, 0xE3, + 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, + 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, 0xE3, + 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x83, + // Bytes 2b40 - 2b7f + 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82, 0xAF, + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0xA4, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, + 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F, 0xE3, + // Bytes 2b80 - 2bbf + 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x84, + 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, + 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF, 0x4C, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83, 0x98, + // Bytes 2bc0 - 2bff + 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C, 0xE3, + 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xAF, + 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, + 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, + // Bytes 2c00 - 2c3f + 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3, 0x83, + 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0x4C, + 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, 0xBC, + 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, 0xE1, + 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, 0x84, + 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, + // Bytes 2c40 - 2c7f + 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, + 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, + 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD, 0xE3, + 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, + // Bytes 2c80 - 2cbf + 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAC, + 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98, 0xE3, + 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, + 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, 0xE3, + 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xA7, + // Bytes 2cc0 - 2cff + 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x88, + 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84, 0x8B, + 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, 0x85, + 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, 0x82, + 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, + // Bytes 2d00 - 2d3f + 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, + 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, + 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, + 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD, 0xE3, + 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3, + 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, + 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, 0x83, + // Bytes 2d40 - 2d7f + 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, + 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x82, + 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x52, + 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, + 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3, 0x82, + // Bytes 2d80 - 2dbf + 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, 0xE3, + 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, + 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, + 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3, 0xE3, + 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, 0x84, + 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, + // Bytes 2dc0 - 2dff + 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, + 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, + 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0, 0xA7, + 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0, 0xA7, + 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0, 0xAD, + 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0, 0xAD, + 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, 0xAD, + 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0, 0xAE, + // Bytes 2e00 - 2e3f + 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, + 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xAF, + 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, + 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xB2, + 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, + 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, + 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, 0xB5, + 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB5, + // Bytes 2e40 - 2e7f + 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0, 0xB5, + 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB7, + 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1, 0x80, + 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1, 0xAC, + 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + // Bytes 2e80 - 2ebf + 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAD, + 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, 0x91, + 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, + // Bytes 2ec0 - 2eff + 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, 0xA7, + 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, + 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, + 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, 0x91, + 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, 0x08, + 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBA, + 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, + 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB8, + // Bytes 2f00 - 2f3f + 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, + 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, + 0xF0, 0x91, 0xA4, 0xB5, 0xF0, 0x91, 0xA4, 0xB0, + 0x01, 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, + 0xE0, 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, + 0xE0, 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x16, 0x44, + 0x44, 0x5A, 0xCC, 0x8C, 0xCD, 0x44, 0x44, 0x7A, + 0xCC, 0x8C, 0xCD, 0x44, 0x64, 0x7A, 0xCC, 0x8C, + // Bytes 2f40 - 2f7f + 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, + 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, + 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, + 0xB9, 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, + // Bytes 2f80 - 2fbf + 0x01, 0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, + 0x01, 0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, + // Bytes 2fc0 - 2fff + 0x01, 0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, + 0x01, 0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, + 0x01, 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, + 0xE3, 0x82, 0x99, 0x11, 0x4C, 0xE1, 0x84, 0x8C, + 0xE1, 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, + 0xB4, 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, + 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, + 0x4C, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, + // Bytes 3000 - 303f + 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x11, 0x4C, 0xE3, + 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, + 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE1, 0x84, 0x8E, + 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, + 0x80, 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, + 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, + 0x82, 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, + // Bytes 3040 - 307f + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0xBC, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, + 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, + 0x11, 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x88, 0xE3, 0x82, 0x99, 0x11, 0x52, 0xE3, 0x83, + // Bytes 3080 - 30bf + 0x95, 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, + 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, + 0x11, 0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, + 0x01, 0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, + 0x01, 0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, + 0xCC, 0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, + 0x03, 0x41, 0xCC, 0x80, 0xCD, 0x03, 0x41, 0xCC, + 0x81, 0xCD, 0x03, 0x41, 0xCC, 0x83, 0xCD, 0x03, + // Bytes 30c0 - 30ff + 0x41, 0xCC, 0x84, 0xCD, 0x03, 0x41, 0xCC, 0x89, + 0xCD, 0x03, 0x41, 0xCC, 0x8C, 0xCD, 0x03, 0x41, + 0xCC, 0x8F, 0xCD, 0x03, 0x41, 0xCC, 0x91, 0xCD, + 0x03, 0x41, 0xCC, 0xA5, 0xB9, 0x03, 0x41, 0xCC, + 0xA8, 0xA9, 0x03, 0x42, 0xCC, 0x87, 0xCD, 0x03, + 0x42, 0xCC, 0xA3, 0xB9, 0x03, 0x42, 0xCC, 0xB1, + 0xB9, 0x03, 0x43, 0xCC, 0x81, 0xCD, 0x03, 0x43, + 0xCC, 0x82, 0xCD, 0x03, 0x43, 0xCC, 0x87, 0xCD, + // Bytes 3100 - 313f + 0x03, 0x43, 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, + 0x87, 0xCD, 0x03, 0x44, 0xCC, 0x8C, 0xCD, 0x03, + 0x44, 0xCC, 0xA3, 0xB9, 0x03, 0x44, 0xCC, 0xA7, + 0xA9, 0x03, 0x44, 0xCC, 0xAD, 0xB9, 0x03, 0x44, + 0xCC, 0xB1, 0xB9, 0x03, 0x45, 0xCC, 0x80, 0xCD, + 0x03, 0x45, 0xCC, 0x81, 0xCD, 0x03, 0x45, 0xCC, + 0x83, 0xCD, 0x03, 0x45, 0xCC, 0x86, 0xCD, 0x03, + 0x45, 0xCC, 0x87, 0xCD, 0x03, 0x45, 0xCC, 0x88, + // Bytes 3140 - 317f + 0xCD, 0x03, 0x45, 0xCC, 0x89, 0xCD, 0x03, 0x45, + 0xCC, 0x8C, 0xCD, 0x03, 0x45, 0xCC, 0x8F, 0xCD, + 0x03, 0x45, 0xCC, 0x91, 0xCD, 0x03, 0x45, 0xCC, + 0xA8, 0xA9, 0x03, 0x45, 0xCC, 0xAD, 0xB9, 0x03, + 0x45, 0xCC, 0xB0, 0xB9, 0x03, 0x46, 0xCC, 0x87, + 0xCD, 0x03, 0x47, 0xCC, 0x81, 0xCD, 0x03, 0x47, + 0xCC, 0x82, 0xCD, 0x03, 0x47, 0xCC, 0x84, 0xCD, + 0x03, 0x47, 0xCC, 0x86, 0xCD, 0x03, 0x47, 0xCC, + // Bytes 3180 - 31bf + 0x87, 0xCD, 0x03, 0x47, 0xCC, 0x8C, 0xCD, 0x03, + 0x47, 0xCC, 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0x82, + 0xCD, 0x03, 0x48, 0xCC, 0x87, 0xCD, 0x03, 0x48, + 0xCC, 0x88, 0xCD, 0x03, 0x48, 0xCC, 0x8C, 0xCD, + 0x03, 0x48, 0xCC, 0xA3, 0xB9, 0x03, 0x48, 0xCC, + 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0xAE, 0xB9, 0x03, + 0x49, 0xCC, 0x80, 0xCD, 0x03, 0x49, 0xCC, 0x81, + 0xCD, 0x03, 0x49, 0xCC, 0x82, 0xCD, 0x03, 0x49, + // Bytes 31c0 - 31ff + 0xCC, 0x83, 0xCD, 0x03, 0x49, 0xCC, 0x84, 0xCD, + 0x03, 0x49, 0xCC, 0x86, 0xCD, 0x03, 0x49, 0xCC, + 0x87, 0xCD, 0x03, 0x49, 0xCC, 0x89, 0xCD, 0x03, + 0x49, 0xCC, 0x8C, 0xCD, 0x03, 0x49, 0xCC, 0x8F, + 0xCD, 0x03, 0x49, 0xCC, 0x91, 0xCD, 0x03, 0x49, + 0xCC, 0xA3, 0xB9, 0x03, 0x49, 0xCC, 0xA8, 0xA9, + 0x03, 0x49, 0xCC, 0xB0, 0xB9, 0x03, 0x4A, 0xCC, + 0x82, 0xCD, 0x03, 0x4B, 0xCC, 0x81, 0xCD, 0x03, + // Bytes 3200 - 323f + 0x4B, 0xCC, 0x8C, 0xCD, 0x03, 0x4B, 0xCC, 0xA3, + 0xB9, 0x03, 0x4B, 0xCC, 0xA7, 0xA9, 0x03, 0x4B, + 0xCC, 0xB1, 0xB9, 0x03, 0x4C, 0xCC, 0x81, 0xCD, + 0x03, 0x4C, 0xCC, 0x8C, 0xCD, 0x03, 0x4C, 0xCC, + 0xA7, 0xA9, 0x03, 0x4C, 0xCC, 0xAD, 0xB9, 0x03, + 0x4C, 0xCC, 0xB1, 0xB9, 0x03, 0x4D, 0xCC, 0x81, + 0xCD, 0x03, 0x4D, 0xCC, 0x87, 0xCD, 0x03, 0x4D, + 0xCC, 0xA3, 0xB9, 0x03, 0x4E, 0xCC, 0x80, 0xCD, + // Bytes 3240 - 327f + 0x03, 0x4E, 0xCC, 0x81, 0xCD, 0x03, 0x4E, 0xCC, + 0x83, 0xCD, 0x03, 0x4E, 0xCC, 0x87, 0xCD, 0x03, + 0x4E, 0xCC, 0x8C, 0xCD, 0x03, 0x4E, 0xCC, 0xA3, + 0xB9, 0x03, 0x4E, 0xCC, 0xA7, 0xA9, 0x03, 0x4E, + 0xCC, 0xAD, 0xB9, 0x03, 0x4E, 0xCC, 0xB1, 0xB9, + 0x03, 0x4F, 0xCC, 0x80, 0xCD, 0x03, 0x4F, 0xCC, + 0x81, 0xCD, 0x03, 0x4F, 0xCC, 0x86, 0xCD, 0x03, + 0x4F, 0xCC, 0x89, 0xCD, 0x03, 0x4F, 0xCC, 0x8B, + // Bytes 3280 - 32bf + 0xCD, 0x03, 0x4F, 0xCC, 0x8C, 0xCD, 0x03, 0x4F, + 0xCC, 0x8F, 0xCD, 0x03, 0x4F, 0xCC, 0x91, 0xCD, + 0x03, 0x50, 0xCC, 0x81, 0xCD, 0x03, 0x50, 0xCC, + 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x81, 0xCD, 0x03, + 0x52, 0xCC, 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x8C, + 0xCD, 0x03, 0x52, 0xCC, 0x8F, 0xCD, 0x03, 0x52, + 0xCC, 0x91, 0xCD, 0x03, 0x52, 0xCC, 0xA7, 0xA9, + 0x03, 0x52, 0xCC, 0xB1, 0xB9, 0x03, 0x53, 0xCC, + // Bytes 32c0 - 32ff + 0x82, 0xCD, 0x03, 0x53, 0xCC, 0x87, 0xCD, 0x03, + 0x53, 0xCC, 0xA6, 0xB9, 0x03, 0x53, 0xCC, 0xA7, + 0xA9, 0x03, 0x54, 0xCC, 0x87, 0xCD, 0x03, 0x54, + 0xCC, 0x8C, 0xCD, 0x03, 0x54, 0xCC, 0xA3, 0xB9, + 0x03, 0x54, 0xCC, 0xA6, 0xB9, 0x03, 0x54, 0xCC, + 0xA7, 0xA9, 0x03, 0x54, 0xCC, 0xAD, 0xB9, 0x03, + 0x54, 0xCC, 0xB1, 0xB9, 0x03, 0x55, 0xCC, 0x80, + 0xCD, 0x03, 0x55, 0xCC, 0x81, 0xCD, 0x03, 0x55, + // Bytes 3300 - 333f + 0xCC, 0x82, 0xCD, 0x03, 0x55, 0xCC, 0x86, 0xCD, + 0x03, 0x55, 0xCC, 0x89, 0xCD, 0x03, 0x55, 0xCC, + 0x8A, 0xCD, 0x03, 0x55, 0xCC, 0x8B, 0xCD, 0x03, + 0x55, 0xCC, 0x8C, 0xCD, 0x03, 0x55, 0xCC, 0x8F, + 0xCD, 0x03, 0x55, 0xCC, 0x91, 0xCD, 0x03, 0x55, + 0xCC, 0xA3, 0xB9, 0x03, 0x55, 0xCC, 0xA4, 0xB9, + 0x03, 0x55, 0xCC, 0xA8, 0xA9, 0x03, 0x55, 0xCC, + 0xAD, 0xB9, 0x03, 0x55, 0xCC, 0xB0, 0xB9, 0x03, + // Bytes 3340 - 337f + 0x56, 0xCC, 0x83, 0xCD, 0x03, 0x56, 0xCC, 0xA3, + 0xB9, 0x03, 0x57, 0xCC, 0x80, 0xCD, 0x03, 0x57, + 0xCC, 0x81, 0xCD, 0x03, 0x57, 0xCC, 0x82, 0xCD, + 0x03, 0x57, 0xCC, 0x87, 0xCD, 0x03, 0x57, 0xCC, + 0x88, 0xCD, 0x03, 0x57, 0xCC, 0xA3, 0xB9, 0x03, + 0x58, 0xCC, 0x87, 0xCD, 0x03, 0x58, 0xCC, 0x88, + 0xCD, 0x03, 0x59, 0xCC, 0x80, 0xCD, 0x03, 0x59, + 0xCC, 0x81, 0xCD, 0x03, 0x59, 0xCC, 0x82, 0xCD, + // Bytes 3380 - 33bf + 0x03, 0x59, 0xCC, 0x83, 0xCD, 0x03, 0x59, 0xCC, + 0x84, 0xCD, 0x03, 0x59, 0xCC, 0x87, 0xCD, 0x03, + 0x59, 0xCC, 0x88, 0xCD, 0x03, 0x59, 0xCC, 0x89, + 0xCD, 0x03, 0x59, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, + 0xCC, 0x81, 0xCD, 0x03, 0x5A, 0xCC, 0x82, 0xCD, + 0x03, 0x5A, 0xCC, 0x87, 0xCD, 0x03, 0x5A, 0xCC, + 0x8C, 0xCD, 0x03, 0x5A, 0xCC, 0xA3, 0xB9, 0x03, + 0x5A, 0xCC, 0xB1, 0xB9, 0x03, 0x61, 0xCC, 0x80, + // Bytes 33c0 - 33ff + 0xCD, 0x03, 0x61, 0xCC, 0x81, 0xCD, 0x03, 0x61, + 0xCC, 0x83, 0xCD, 0x03, 0x61, 0xCC, 0x84, 0xCD, + 0x03, 0x61, 0xCC, 0x89, 0xCD, 0x03, 0x61, 0xCC, + 0x8C, 0xCD, 0x03, 0x61, 0xCC, 0x8F, 0xCD, 0x03, + 0x61, 0xCC, 0x91, 0xCD, 0x03, 0x61, 0xCC, 0xA5, + 0xB9, 0x03, 0x61, 0xCC, 0xA8, 0xA9, 0x03, 0x62, + 0xCC, 0x87, 0xCD, 0x03, 0x62, 0xCC, 0xA3, 0xB9, + 0x03, 0x62, 0xCC, 0xB1, 0xB9, 0x03, 0x63, 0xCC, + // Bytes 3400 - 343f + 0x81, 0xCD, 0x03, 0x63, 0xCC, 0x82, 0xCD, 0x03, + 0x63, 0xCC, 0x87, 0xCD, 0x03, 0x63, 0xCC, 0x8C, + 0xCD, 0x03, 0x64, 0xCC, 0x87, 0xCD, 0x03, 0x64, + 0xCC, 0x8C, 0xCD, 0x03, 0x64, 0xCC, 0xA3, 0xB9, + 0x03, 0x64, 0xCC, 0xA7, 0xA9, 0x03, 0x64, 0xCC, + 0xAD, 0xB9, 0x03, 0x64, 0xCC, 0xB1, 0xB9, 0x03, + 0x65, 0xCC, 0x80, 0xCD, 0x03, 0x65, 0xCC, 0x81, + 0xCD, 0x03, 0x65, 0xCC, 0x83, 0xCD, 0x03, 0x65, + // Bytes 3440 - 347f + 0xCC, 0x86, 0xCD, 0x03, 0x65, 0xCC, 0x87, 0xCD, + 0x03, 0x65, 0xCC, 0x88, 0xCD, 0x03, 0x65, 0xCC, + 0x89, 0xCD, 0x03, 0x65, 0xCC, 0x8C, 0xCD, 0x03, + 0x65, 0xCC, 0x8F, 0xCD, 0x03, 0x65, 0xCC, 0x91, + 0xCD, 0x03, 0x65, 0xCC, 0xA8, 0xA9, 0x03, 0x65, + 0xCC, 0xAD, 0xB9, 0x03, 0x65, 0xCC, 0xB0, 0xB9, + 0x03, 0x66, 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, + 0x81, 0xCD, 0x03, 0x67, 0xCC, 0x82, 0xCD, 0x03, + // Bytes 3480 - 34bf + 0x67, 0xCC, 0x84, 0xCD, 0x03, 0x67, 0xCC, 0x86, + 0xCD, 0x03, 0x67, 0xCC, 0x87, 0xCD, 0x03, 0x67, + 0xCC, 0x8C, 0xCD, 0x03, 0x67, 0xCC, 0xA7, 0xA9, + 0x03, 0x68, 0xCC, 0x82, 0xCD, 0x03, 0x68, 0xCC, + 0x87, 0xCD, 0x03, 0x68, 0xCC, 0x88, 0xCD, 0x03, + 0x68, 0xCC, 0x8C, 0xCD, 0x03, 0x68, 0xCC, 0xA3, + 0xB9, 0x03, 0x68, 0xCC, 0xA7, 0xA9, 0x03, 0x68, + 0xCC, 0xAE, 0xB9, 0x03, 0x68, 0xCC, 0xB1, 0xB9, + // Bytes 34c0 - 34ff + 0x03, 0x69, 0xCC, 0x80, 0xCD, 0x03, 0x69, 0xCC, + 0x81, 0xCD, 0x03, 0x69, 0xCC, 0x82, 0xCD, 0x03, + 0x69, 0xCC, 0x83, 0xCD, 0x03, 0x69, 0xCC, 0x84, + 0xCD, 0x03, 0x69, 0xCC, 0x86, 0xCD, 0x03, 0x69, + 0xCC, 0x89, 0xCD, 0x03, 0x69, 0xCC, 0x8C, 0xCD, + 0x03, 0x69, 0xCC, 0x8F, 0xCD, 0x03, 0x69, 0xCC, + 0x91, 0xCD, 0x03, 0x69, 0xCC, 0xA3, 0xB9, 0x03, + 0x69, 0xCC, 0xA8, 0xA9, 0x03, 0x69, 0xCC, 0xB0, + // Bytes 3500 - 353f + 0xB9, 0x03, 0x6A, 0xCC, 0x82, 0xCD, 0x03, 0x6A, + 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, 0x81, 0xCD, + 0x03, 0x6B, 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, + 0xA3, 0xB9, 0x03, 0x6B, 0xCC, 0xA7, 0xA9, 0x03, + 0x6B, 0xCC, 0xB1, 0xB9, 0x03, 0x6C, 0xCC, 0x81, + 0xCD, 0x03, 0x6C, 0xCC, 0x8C, 0xCD, 0x03, 0x6C, + 0xCC, 0xA7, 0xA9, 0x03, 0x6C, 0xCC, 0xAD, 0xB9, + 0x03, 0x6C, 0xCC, 0xB1, 0xB9, 0x03, 0x6D, 0xCC, + // Bytes 3540 - 357f + 0x81, 0xCD, 0x03, 0x6D, 0xCC, 0x87, 0xCD, 0x03, + 0x6D, 0xCC, 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0x80, + 0xCD, 0x03, 0x6E, 0xCC, 0x81, 0xCD, 0x03, 0x6E, + 0xCC, 0x83, 0xCD, 0x03, 0x6E, 0xCC, 0x87, 0xCD, + 0x03, 0x6E, 0xCC, 0x8C, 0xCD, 0x03, 0x6E, 0xCC, + 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0xA7, 0xA9, 0x03, + 0x6E, 0xCC, 0xAD, 0xB9, 0x03, 0x6E, 0xCC, 0xB1, + 0xB9, 0x03, 0x6F, 0xCC, 0x80, 0xCD, 0x03, 0x6F, + // Bytes 3580 - 35bf + 0xCC, 0x81, 0xCD, 0x03, 0x6F, 0xCC, 0x86, 0xCD, + 0x03, 0x6F, 0xCC, 0x89, 0xCD, 0x03, 0x6F, 0xCC, + 0x8B, 0xCD, 0x03, 0x6F, 0xCC, 0x8C, 0xCD, 0x03, + 0x6F, 0xCC, 0x8F, 0xCD, 0x03, 0x6F, 0xCC, 0x91, + 0xCD, 0x03, 0x70, 0xCC, 0x81, 0xCD, 0x03, 0x70, + 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, 0x81, 0xCD, + 0x03, 0x72, 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, + 0x8C, 0xCD, 0x03, 0x72, 0xCC, 0x8F, 0xCD, 0x03, + // Bytes 35c0 - 35ff + 0x72, 0xCC, 0x91, 0xCD, 0x03, 0x72, 0xCC, 0xA7, + 0xA9, 0x03, 0x72, 0xCC, 0xB1, 0xB9, 0x03, 0x73, + 0xCC, 0x82, 0xCD, 0x03, 0x73, 0xCC, 0x87, 0xCD, + 0x03, 0x73, 0xCC, 0xA6, 0xB9, 0x03, 0x73, 0xCC, + 0xA7, 0xA9, 0x03, 0x74, 0xCC, 0x87, 0xCD, 0x03, + 0x74, 0xCC, 0x88, 0xCD, 0x03, 0x74, 0xCC, 0x8C, + 0xCD, 0x03, 0x74, 0xCC, 0xA3, 0xB9, 0x03, 0x74, + 0xCC, 0xA6, 0xB9, 0x03, 0x74, 0xCC, 0xA7, 0xA9, + // Bytes 3600 - 363f + 0x03, 0x74, 0xCC, 0xAD, 0xB9, 0x03, 0x74, 0xCC, + 0xB1, 0xB9, 0x03, 0x75, 0xCC, 0x80, 0xCD, 0x03, + 0x75, 0xCC, 0x81, 0xCD, 0x03, 0x75, 0xCC, 0x82, + 0xCD, 0x03, 0x75, 0xCC, 0x86, 0xCD, 0x03, 0x75, + 0xCC, 0x89, 0xCD, 0x03, 0x75, 0xCC, 0x8A, 0xCD, + 0x03, 0x75, 0xCC, 0x8B, 0xCD, 0x03, 0x75, 0xCC, + 0x8C, 0xCD, 0x03, 0x75, 0xCC, 0x8F, 0xCD, 0x03, + 0x75, 0xCC, 0x91, 0xCD, 0x03, 0x75, 0xCC, 0xA3, + // Bytes 3640 - 367f + 0xB9, 0x03, 0x75, 0xCC, 0xA4, 0xB9, 0x03, 0x75, + 0xCC, 0xA8, 0xA9, 0x03, 0x75, 0xCC, 0xAD, 0xB9, + 0x03, 0x75, 0xCC, 0xB0, 0xB9, 0x03, 0x76, 0xCC, + 0x83, 0xCD, 0x03, 0x76, 0xCC, 0xA3, 0xB9, 0x03, + 0x77, 0xCC, 0x80, 0xCD, 0x03, 0x77, 0xCC, 0x81, + 0xCD, 0x03, 0x77, 0xCC, 0x82, 0xCD, 0x03, 0x77, + 0xCC, 0x87, 0xCD, 0x03, 0x77, 0xCC, 0x88, 0xCD, + 0x03, 0x77, 0xCC, 0x8A, 0xCD, 0x03, 0x77, 0xCC, + // Bytes 3680 - 36bf + 0xA3, 0xB9, 0x03, 0x78, 0xCC, 0x87, 0xCD, 0x03, + 0x78, 0xCC, 0x88, 0xCD, 0x03, 0x79, 0xCC, 0x80, + 0xCD, 0x03, 0x79, 0xCC, 0x81, 0xCD, 0x03, 0x79, + 0xCC, 0x82, 0xCD, 0x03, 0x79, 0xCC, 0x83, 0xCD, + 0x03, 0x79, 0xCC, 0x84, 0xCD, 0x03, 0x79, 0xCC, + 0x87, 0xCD, 0x03, 0x79, 0xCC, 0x88, 0xCD, 0x03, + 0x79, 0xCC, 0x89, 0xCD, 0x03, 0x79, 0xCC, 0x8A, + 0xCD, 0x03, 0x79, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, + // Bytes 36c0 - 36ff + 0xCC, 0x81, 0xCD, 0x03, 0x7A, 0xCC, 0x82, 0xCD, + 0x03, 0x7A, 0xCC, 0x87, 0xCD, 0x03, 0x7A, 0xCC, + 0x8C, 0xCD, 0x03, 0x7A, 0xCC, 0xA3, 0xB9, 0x03, + 0x7A, 0xCC, 0xB1, 0xB9, 0x04, 0xC2, 0xA8, 0xCC, + 0x80, 0xCE, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, + 0x04, 0xC2, 0xA8, 0xCD, 0x82, 0xCE, 0x04, 0xC3, + 0x86, 0xCC, 0x81, 0xCD, 0x04, 0xC3, 0x86, 0xCC, + 0x84, 0xCD, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xCD, + // Bytes 3700 - 373f + 0x04, 0xC3, 0xA6, 0xCC, 0x81, 0xCD, 0x04, 0xC3, + 0xA6, 0xCC, 0x84, 0xCD, 0x04, 0xC3, 0xB8, 0xCC, + 0x81, 0xCD, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xCD, + 0x04, 0xC6, 0xB7, 0xCC, 0x8C, 0xCD, 0x04, 0xCA, + 0x92, 0xCC, 0x8C, 0xCD, 0x04, 0xCE, 0x91, 0xCC, + 0x80, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xCD, + 0x04, 0xCE, 0x91, 0xCC, 0x84, 0xCD, 0x04, 0xCE, + 0x91, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0x91, 0xCD, + // Bytes 3740 - 377f + 0x85, 0xDD, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xCD, + 0x04, 0xCE, 0x95, 0xCC, 0x81, 0xCD, 0x04, 0xCE, + 0x97, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x97, 0xCC, + 0x81, 0xCD, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xDD, + 0x04, 0xCE, 0x99, 0xCC, 0x80, 0xCD, 0x04, 0xCE, + 0x99, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x99, 0xCC, + 0x84, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xCD, + 0x04, 0xCE, 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xCE, + // Bytes 3780 - 37bf + 0x9F, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, + 0x81, 0xCD, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xCD, + 0x04, 0xCE, 0xA5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, + 0xA5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, + 0x84, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xCD, + 0x04, 0xCE, 0xA5, 0xCC, 0x88, 0xCD, 0x04, 0xCE, + 0xA9, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, + 0x81, 0xCD, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xDD, + // Bytes 37c0 - 37ff + 0x04, 0xCE, 0xB1, 0xCC, 0x84, 0xCD, 0x04, 0xCE, + 0xB1, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0xB1, 0xCD, + 0x85, 0xDD, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xCD, + 0x04, 0xCE, 0xB5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, + 0xB7, 0xCD, 0x85, 0xDD, 0x04, 0xCE, 0xB9, 0xCC, + 0x80, 0xCD, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, + 0x04, 0xCE, 0xB9, 0xCC, 0x84, 0xCD, 0x04, 0xCE, + 0xB9, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0xB9, 0xCD, + // Bytes 3800 - 383f + 0x82, 0xCD, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xCD, + 0x04, 0xCE, 0xBF, 0xCC, 0x81, 0xCD, 0x04, 0xCF, + 0x81, 0xCC, 0x93, 0xCD, 0x04, 0xCF, 0x81, 0xCC, + 0x94, 0xCD, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xCD, + 0x04, 0xCF, 0x85, 0xCC, 0x81, 0xCD, 0x04, 0xCF, + 0x85, 0xCC, 0x84, 0xCD, 0x04, 0xCF, 0x85, 0xCC, + 0x86, 0xCD, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xCD, + 0x04, 0xCF, 0x89, 0xCD, 0x85, 0xDD, 0x04, 0xCF, + // Bytes 3840 - 387f + 0x92, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x92, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0x90, 0xCC, 0x86, 0xCD, 0x04, 0xD0, + 0x90, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x93, 0xCC, + 0x81, 0xCD, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xCD, + 0x04, 0xD0, 0x95, 0xCC, 0x86, 0xCD, 0x04, 0xD0, + 0x95, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x96, 0xCC, + 0x86, 0xCD, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xCD, + // Bytes 3880 - 38bf + 0x04, 0xD0, 0x97, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0x98, 0xCC, 0x80, 0xCD, 0x04, 0xD0, 0x98, 0xCC, + 0x84, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xCD, + 0x04, 0xD0, 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0x9A, 0xCC, 0x81, 0xCD, 0x04, 0xD0, 0x9E, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xCD, + 0x04, 0xD0, 0xA3, 0xCC, 0x86, 0xCD, 0x04, 0xD0, + 0xA3, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, + // Bytes 38c0 - 38ff + 0x8B, 0xCD, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0xAB, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0xAD, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, + 0x86, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0xB3, 0xCC, 0x81, 0xCD, 0x04, 0xD0, + 0xB5, 0xCC, 0x80, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, + 0x86, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0xB6, 0xCC, 0x86, 0xCD, 0x04, 0xD0, + // Bytes 3900 - 393f + 0xB6, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xB7, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xCD, + 0x04, 0xD0, 0xB8, 0xCC, 0x84, 0xCD, 0x04, 0xD0, + 0xB8, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xCD, + 0x04, 0xD0, 0xBE, 0xCC, 0x88, 0xCD, 0x04, 0xD1, + 0x83, 0xCC, 0x84, 0xCD, 0x04, 0xD1, 0x83, 0xCC, + 0x86, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xCD, + // Bytes 3940 - 397f + 0x04, 0xD1, 0x83, 0xCC, 0x8B, 0xCD, 0x04, 0xD1, + 0x87, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x8B, 0xCC, + 0x88, 0xCD, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xCD, + 0x04, 0xD1, 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD1, + 0xB4, 0xCC, 0x8F, 0xCD, 0x04, 0xD1, 0xB5, 0xCC, + 0x8F, 0xCD, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xCD, + 0x04, 0xD3, 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xD3, + 0xA8, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0xA9, 0xCC, + // Bytes 3980 - 39bf + 0x88, 0xCD, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, + 0x04, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x04, 0xD8, + 0xA7, 0xD9, 0x95, 0xB9, 0x04, 0xD9, 0x88, 0xD9, + 0x94, 0xCD, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, + 0x04, 0xDB, 0x81, 0xD9, 0x94, 0xCD, 0x04, 0xDB, + 0x92, 0xD9, 0x94, 0xCD, 0x04, 0xDB, 0x95, 0xD9, + 0x94, 0xCD, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, + 0xCE, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCE, + // Bytes 39c0 - 39ff + 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, + 0x41, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x41, + 0xCC, 0x86, 0xCC, 0x80, 0xCE, 0x05, 0x41, 0xCC, + 0x86, 0xCC, 0x81, 0xCE, 0x05, 0x41, 0xCC, 0x86, + 0xCC, 0x83, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, + 0x89, 0xCE, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, + 0xCE, 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCE, + 0x05, 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, + // Bytes 3a00 - 3a3f + 0x41, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x41, + 0xCC, 0xA3, 0xCC, 0x86, 0xCE, 0x05, 0x43, 0xCC, + 0xA7, 0xCC, 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, + 0xCC, 0x80, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, + 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, + 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCE, + 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, + 0x45, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x45, + // Bytes 3a40 - 3a7f + 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x45, 0xCC, + 0xA7, 0xCC, 0x86, 0xCE, 0x05, 0x49, 0xCC, 0x88, + 0xCC, 0x81, 0xCE, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, + 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, + 0xCE, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, + 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, + 0x4F, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x4F, + 0xCC, 0x83, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, + // Bytes 3a80 - 3abf + 0x83, 0xCC, 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x83, + 0xCC, 0x88, 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, + 0x80, 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, + 0xCE, 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, + 0x05, 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, + 0x4F, 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x4F, + 0xCC, 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, + 0x9B, 0xCC, 0x83, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, + // Bytes 3ac0 - 3aff + 0xCC, 0x89, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, + 0xA3, 0xBA, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, + 0xCE, 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, + 0x05, 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, + 0x53, 0xCC, 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x53, + 0xCC, 0x8C, 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, + 0xA3, 0xCC, 0x87, 0xCE, 0x05, 0x55, 0xCC, 0x83, + 0xCC, 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x84, 0xCC, + // Bytes 3b00 - 3b3f + 0x88, 0xCE, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, + 0xCE, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCE, + 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, + 0x55, 0xCC, 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x55, + 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x55, 0xCC, + 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x9B, + 0xCC, 0x83, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, + 0x89, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, + // Bytes 3b40 - 3b7f + 0xBA, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCE, + 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, + 0x61, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x61, + 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x61, 0xCC, + 0x86, 0xCC, 0x80, 0xCE, 0x05, 0x61, 0xCC, 0x86, + 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, + 0x83, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, + 0xCE, 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCE, + // Bytes 3b80 - 3bbf + 0x05, 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, + 0x61, 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x61, + 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x61, 0xCC, + 0xA3, 0xCC, 0x86, 0xCE, 0x05, 0x63, 0xCC, 0xA7, + 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, + 0x80, 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, + 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCE, + 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, + // Bytes 3bc0 - 3bff + 0x65, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x65, + 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, + 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x65, 0xCC, 0xA7, + 0xCC, 0x86, 0xCE, 0x05, 0x69, 0xCC, 0x88, 0xCC, + 0x81, 0xCE, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, + 0xCE, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, + 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, + 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x6F, + // Bytes 3c00 - 3c3f + 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x6F, 0xCC, + 0x83, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x83, + 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, + 0x88, 0xCE, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, + 0xCE, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, + 0x05, 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, + 0x6F, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x6F, + 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x6F, 0xCC, + // Bytes 3c40 - 3c7f + 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, + 0xCC, 0x83, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, + 0x89, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, + 0xBA, 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, + 0x05, 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, + 0x72, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x73, + 0xCC, 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, + 0x8C, 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, 0xA3, + // Bytes 3c80 - 3cbf + 0xCC, 0x87, 0xCE, 0x05, 0x75, 0xCC, 0x83, 0xCC, + 0x81, 0xCE, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, + 0xCE, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCE, + 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, + 0x75, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x75, + 0xCC, 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x75, 0xCC, + 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x75, 0xCC, 0x9B, + 0xCC, 0x81, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, + // Bytes 3cc0 - 3cff + 0x83, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, + 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, + 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCE, 0x05, + 0xE1, 0xBE, 0xBF, 0xCC, 0x81, 0xCE, 0x05, 0xE1, + 0xBE, 0xBF, 0xCD, 0x82, 0xCE, 0x05, 0xE1, 0xBF, + 0xBE, 0xCC, 0x80, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, + 0xCC, 0x81, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, + 0x82, 0xCE, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, + // Bytes 3d00 - 3d3f + 0x05, 0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x87, 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, + 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, + // Bytes 3d40 - 3d7f + 0x05, 0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x89, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, + 0x85, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, + // Bytes 3d80 - 3dbf + 0xE2, 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x89, 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, + 0xB6, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + // Bytes 3dc0 - 3dff + 0x8A, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0x86, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x8A, 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + // Bytes 3e00 - 3e3f + 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, + 0x05, 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, + // Bytes 3e40 - 3e7f + 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, + 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, + // Bytes 3e80 - 3ebf + 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, + 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, + // Bytes 3ec0 - 3eff + 0xCE, 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, + // Bytes 3f00 - 3f3f + 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, + 0xDE, 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, + // Bytes 3f40 - 3f7f + 0xDE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, + 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, + 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, + // Bytes 3f80 - 3fbf + 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, + 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, + 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, + 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, + // Bytes 3fc0 - 3fff + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, + 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, + 0xCE, 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, + 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, + // Bytes 4000 - 403f + 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, + 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, + 0xDE, 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, + 0xDE, 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, + 0x0D, 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, + 0x0D, 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, + 0x0D, 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, + 0x89, 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, + // Bytes 4040 - 407f + 0x15, 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, + // Bytes 4080 - 40bf + 0x11, 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, + // Bytes 40c0 - 40ff + 0x11, 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, + // Bytes 4100 - 413f + 0x11, 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, + // Bytes 4140 - 417f + 0x11, 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, + // Bytes 4180 - 41bf + 0x11, 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, + // Bytes 41c0 - 41ff + 0x11, 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, + 0x11, 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, + // Bytes 4200 - 423f + 0x11, 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, + 0x11, 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, + 0x11, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, + 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, + // Bytes 4240 - 427f + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, + 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, + 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + // Bytes 4280 - 42bf + 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, + 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, + // Bytes 42c0 - 42ff + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, + 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, + 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, + // Bytes 4300 - 433f + 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, + 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, + // Bytes 4340 - 437f + 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, + 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, + 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, + 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, + 0xDF, 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, + // Bytes 4380 - 43bf + 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, 0x82, 0x9B, + 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, + 0x82, 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x42, + 0xC2, 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xCD, + 0x43, 0x20, 0xCC, 0x83, 0xCD, 0x43, 0x20, 0xCC, + 0x84, 0xCD, 0x43, 0x20, 0xCC, 0x85, 0xCD, 0x43, + 0x20, 0xCC, 0x86, 0xCD, 0x43, 0x20, 0xCC, 0x87, + 0xCD, 0x43, 0x20, 0xCC, 0x88, 0xCD, 0x43, 0x20, + // Bytes 43c0 - 43ff + 0xCC, 0x8A, 0xCD, 0x43, 0x20, 0xCC, 0x8B, 0xCD, + 0x43, 0x20, 0xCC, 0x93, 0xCD, 0x43, 0x20, 0xCC, + 0x94, 0xCD, 0x43, 0x20, 0xCC, 0xA7, 0xA9, 0x43, + 0x20, 0xCC, 0xA8, 0xA9, 0x43, 0x20, 0xCC, 0xB3, + 0xB9, 0x43, 0x20, 0xCD, 0x82, 0xCD, 0x43, 0x20, + 0xCD, 0x85, 0xDD, 0x43, 0x20, 0xD9, 0x8B, 0x5D, + 0x43, 0x20, 0xD9, 0x8C, 0x61, 0x43, 0x20, 0xD9, + 0x8D, 0x65, 0x43, 0x20, 0xD9, 0x8E, 0x69, 0x43, + // Bytes 4400 - 443f + 0x20, 0xD9, 0x8F, 0x6D, 0x43, 0x20, 0xD9, 0x90, + 0x71, 0x43, 0x20, 0xD9, 0x91, 0x75, 0x43, 0x20, + 0xD9, 0x92, 0x79, 0x43, 0x41, 0xCC, 0x8A, 0xCD, + 0x43, 0x73, 0xCC, 0x87, 0xCD, 0x44, 0x20, 0xE3, + 0x82, 0x99, 0x11, 0x44, 0x20, 0xE3, 0x82, 0x9A, + 0x11, 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x44, + 0xCE, 0x91, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x95, + 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x97, 0xCC, 0x81, + // Bytes 4440 - 447f + 0xCD, 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xCD, 0x44, + 0xCE, 0x9F, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, + 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x88, + 0xCD, 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xCD, 0x44, + 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB5, + 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB7, 0xCC, 0x81, + 0xCD, 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x44, + 0xCE, 0xBF, 0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x85, + // Bytes 4480 - 44bf + 0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x89, 0xCC, 0x81, + 0xCD, 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x35, 0x44, + 0xD7, 0x90, 0xD6, 0xB8, 0x39, 0x44, 0xD7, 0x90, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x4D, 0x44, + 0xD7, 0x92, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x93, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x94, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x3D, 0x44, + // Bytes 44c0 - 44ff + 0xD7, 0x95, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x96, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x98, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x29, 0x44, + 0xD7, 0x99, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9A, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x4D, 0x44, + 0xD7, 0x9C, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9E, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, + // Bytes 4500 - 453f + 0x45, 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x45, 0x44, + 0xD7, 0xA3, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, + 0x4D, 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x45, 0x44, + 0xD7, 0xA7, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA8, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x51, 0x44, + 0xD7, 0xA9, 0xD7, 0x82, 0x55, 0x44, 0xD7, 0xAA, + // Bytes 4540 - 457f + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, + 0x35, 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x5D, 0x44, + 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x44, 0xD8, 0xA7, + 0xD9, 0x94, 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x95, + 0xB9, 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x7D, 0x44, + 0xD8, 0xB1, 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x80, + 0xD9, 0x8B, 0x5D, 0x44, 0xD9, 0x80, 0xD9, 0x8E, + 0x69, 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x6D, 0x44, + // Bytes 4580 - 45bf + 0xD9, 0x80, 0xD9, 0x90, 0x71, 0x44, 0xD9, 0x80, + 0xD9, 0x91, 0x75, 0x44, 0xD9, 0x80, 0xD9, 0x92, + 0x79, 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x7D, 0x44, + 0xD9, 0x88, 0xD9, 0x94, 0xCD, 0x44, 0xD9, 0x89, + 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x8A, 0xD9, 0x94, + 0xCD, 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xCD, 0x44, + 0xDB, 0x95, 0xD9, 0x94, 0xCD, 0x45, 0x20, 0xCC, + 0x88, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x88, + // Bytes 45c0 - 45ff + 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCD, + 0x82, 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, + 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCE, + 0x45, 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x45, + 0x20, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x45, 0x20, + 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, + 0x94, 0xCD, 0x82, 0xCE, 0x45, 0x20, 0xD9, 0x8C, + 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x8D, 0xD9, + // Bytes 4600 - 463f + 0x91, 0x76, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, + 0x76, 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x76, + 0x45, 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x45, + 0x20, 0xD9, 0x91, 0xD9, 0xB0, 0x7E, 0x45, 0xE2, + 0xAB, 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, + 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x46, 0xCF, 0x85, + 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x46, 0xD7, 0xA9, + 0xD6, 0xBC, 0xD7, 0x81, 0x52, 0x46, 0xD7, 0xA9, + // Bytes 4640 - 467f + 0xD6, 0xBC, 0xD7, 0x82, 0x56, 0x46, 0xD9, 0x80, + 0xD9, 0x8E, 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, + 0xD9, 0x8F, 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, + 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x46, 0xE0, 0xA4, + 0x95, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, + 0x96, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, + 0x97, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, + 0x9C, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, + // Bytes 4680 - 46bf + 0xA1, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, + 0xA2, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, + 0xAB, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, + 0xAF, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, + 0xA1, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, + 0xA2, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, + 0xAF, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, + 0x96, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, + // Bytes 46c0 - 46ff + 0x97, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, + 0x9C, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, + 0xAB, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, + 0xB2, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, + 0xB8, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, + 0xA1, 0xE0, 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, + 0xA2, 0xE0, 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xBE, + 0xB2, 0xE0, 0xBE, 0x80, 0xA1, 0x46, 0xE0, 0xBE, + // Bytes 4700 - 473f + 0xB3, 0xE0, 0xBE, 0x80, 0xA1, 0x46, 0xE3, 0x83, + 0x86, 0xE3, 0x82, 0x99, 0x11, 0x48, 0xF0, 0x9D, + 0x85, 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, + 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, + 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, + 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xBA, + 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x49, 0xE0, 0xBE, + 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, + // Bytes 4740 - 477f + 0x49, 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, + 0xBE, 0x80, 0xA2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, + 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, + 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, + 0xF0, 0x9D, 0x85, 0xB0, 0xB2, 0x4C, 0xF0, 0x9D, + 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, + // Bytes 4780 - 47bf + 0x85, 0xB1, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, + 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, + 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, + 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, + 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, + 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, + // Bytes 47c0 - 47ff + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, + 0xB2, 0x83, 0x41, 0xCC, 0x82, 0xCD, 0x83, 0x41, + 0xCC, 0x86, 0xCD, 0x83, 0x41, 0xCC, 0x87, 0xCD, + 0x83, 0x41, 0xCC, 0x88, 0xCD, 0x83, 0x41, 0xCC, + 0x8A, 0xCD, 0x83, 0x41, 0xCC, 0xA3, 0xB9, 0x83, + 0x43, 0xCC, 0xA7, 0xA9, 0x83, 0x45, 0xCC, 0x82, + 0xCD, 0x83, 0x45, 0xCC, 0x84, 0xCD, 0x83, 0x45, + 0xCC, 0xA3, 0xB9, 0x83, 0x45, 0xCC, 0xA7, 0xA9, + // Bytes 4800 - 483f + 0x83, 0x49, 0xCC, 0x88, 0xCD, 0x83, 0x4C, 0xCC, + 0xA3, 0xB9, 0x83, 0x4F, 0xCC, 0x82, 0xCD, 0x83, + 0x4F, 0xCC, 0x83, 0xCD, 0x83, 0x4F, 0xCC, 0x84, + 0xCD, 0x83, 0x4F, 0xCC, 0x87, 0xCD, 0x83, 0x4F, + 0xCC, 0x88, 0xCD, 0x83, 0x4F, 0xCC, 0x9B, 0xB1, + 0x83, 0x4F, 0xCC, 0xA3, 0xB9, 0x83, 0x4F, 0xCC, + 0xA8, 0xA9, 0x83, 0x52, 0xCC, 0xA3, 0xB9, 0x83, + 0x53, 0xCC, 0x81, 0xCD, 0x83, 0x53, 0xCC, 0x8C, + // Bytes 4840 - 487f + 0xCD, 0x83, 0x53, 0xCC, 0xA3, 0xB9, 0x83, 0x55, + 0xCC, 0x83, 0xCD, 0x83, 0x55, 0xCC, 0x84, 0xCD, + 0x83, 0x55, 0xCC, 0x88, 0xCD, 0x83, 0x55, 0xCC, + 0x9B, 0xB1, 0x83, 0x61, 0xCC, 0x82, 0xCD, 0x83, + 0x61, 0xCC, 0x86, 0xCD, 0x83, 0x61, 0xCC, 0x87, + 0xCD, 0x83, 0x61, 0xCC, 0x88, 0xCD, 0x83, 0x61, + 0xCC, 0x8A, 0xCD, 0x83, 0x61, 0xCC, 0xA3, 0xB9, + 0x83, 0x63, 0xCC, 0xA7, 0xA9, 0x83, 0x65, 0xCC, + // Bytes 4880 - 48bf + 0x82, 0xCD, 0x83, 0x65, 0xCC, 0x84, 0xCD, 0x83, + 0x65, 0xCC, 0xA3, 0xB9, 0x83, 0x65, 0xCC, 0xA7, + 0xA9, 0x83, 0x69, 0xCC, 0x88, 0xCD, 0x83, 0x6C, + 0xCC, 0xA3, 0xB9, 0x83, 0x6F, 0xCC, 0x82, 0xCD, + 0x83, 0x6F, 0xCC, 0x83, 0xCD, 0x83, 0x6F, 0xCC, + 0x84, 0xCD, 0x83, 0x6F, 0xCC, 0x87, 0xCD, 0x83, + 0x6F, 0xCC, 0x88, 0xCD, 0x83, 0x6F, 0xCC, 0x9B, + 0xB1, 0x83, 0x6F, 0xCC, 0xA3, 0xB9, 0x83, 0x6F, + // Bytes 48c0 - 48ff + 0xCC, 0xA8, 0xA9, 0x83, 0x72, 0xCC, 0xA3, 0xB9, + 0x83, 0x73, 0xCC, 0x81, 0xCD, 0x83, 0x73, 0xCC, + 0x8C, 0xCD, 0x83, 0x73, 0xCC, 0xA3, 0xB9, 0x83, + 0x75, 0xCC, 0x83, 0xCD, 0x83, 0x75, 0xCC, 0x84, + 0xCD, 0x83, 0x75, 0xCC, 0x88, 0xCD, 0x83, 0x75, + 0xCC, 0x9B, 0xB1, 0x84, 0xCE, 0x91, 0xCC, 0x93, + 0xCD, 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x84, + 0xCE, 0x95, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x95, + // Bytes 4900 - 493f + 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x93, + 0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x84, + 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x99, + 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x93, + 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xCD, 0x84, + 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA9, + 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x94, + 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x84, + // Bytes 4940 - 497f + 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB1, + 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x94, + 0xCD, 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x84, + 0xCE, 0xB5, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB5, + 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x80, + 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x84, + 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB7, + 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB7, 0xCD, 0x82, + // Bytes 4980 - 49bf + 0xCD, 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x84, + 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB9, + 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x93, + 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xCD, 0x84, + 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x84, 0xCF, 0x85, + 0xCC, 0x93, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x94, + 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x84, + 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x84, 0xCF, 0x89, + // Bytes 49c0 - 49ff + 0xCC, 0x93, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x94, + 0xCD, 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x86, + 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, + 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, + // Bytes 4a00 - 4a3f + 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, + 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, + 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, + // Bytes 4a40 - 4a7f + 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, + 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, + 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, + 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, + // Bytes 4a80 - 4abf + 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, + 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, + 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, + 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, + 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, + // Bytes 4ac0 - 4aff + 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, + 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, + 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, + 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, + 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, + 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x42, + 0xCC, 0x80, 0xCD, 0x33, 0x42, 0xCC, 0x81, 0xCD, + 0x33, 0x42, 0xCC, 0x93, 0xCD, 0x33, 0x43, 0xE1, + // Bytes 4b00 - 4b3f + 0x85, 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, + // Bytes 4b40 - 4b7f + 0x43, 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, + // Bytes 4b80 - 4bbf + 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, + 0x43, 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, + 0x86, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, + 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, + 0x43, 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, + 0x86, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, + 0x01, 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCE, + 0x33, 0x43, 0xE3, 0x82, 0x99, 0x11, 0x04, 0x43, + // Bytes 4bc0 - 4bff + 0xE3, 0x82, 0x9A, 0x11, 0x04, 0x46, 0xE0, 0xBD, + 0xB1, 0xE0, 0xBD, 0xB2, 0xA2, 0x27, 0x46, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0xA6, 0x27, 0x46, + 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x27, + 0x00, 0x01, +} + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfcTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfcValues[c0] + } + i := nfcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfcTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfcValues[c0] + } + i := nfcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// nfcTrie. Total size: 10798 bytes (10.54 KiB). Checksum: b5981cc85e3bd14. +type nfcTrie struct{} + +func newNfcTrie(i int) *nfcTrie { + return &nfcTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 46: + return uint16(nfcValues[n<<6+uint32(b)]) + default: + n -= 46 + return uint16(nfcSparse.lookup(n, b)) + } +} + +// nfcValues: 48 blocks, 3072 entries, 6144 bytes +// The third block is the zero block. +var nfcValues = [3072]uint16{ + // Block 0x0, offset 0x0 + 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, + // Block 0x1, offset 0x40 + 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, + 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, + 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, + 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, + 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, + 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, + 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, + 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, + 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, + 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x30b0, 0xc1: 0x30b5, 0xc2: 0x47c9, 0xc3: 0x30ba, 0xc4: 0x47d8, 0xc5: 0x47dd, + 0xc6: 0xa000, 0xc7: 0x47e7, 0xc8: 0x3123, 0xc9: 0x3128, 0xca: 0x47ec, 0xcb: 0x313c, + 0xcc: 0x31af, 0xcd: 0x31b4, 0xce: 0x31b9, 0xcf: 0x4800, 0xd1: 0x3245, + 0xd2: 0x3268, 0xd3: 0x326d, 0xd4: 0x480a, 0xd5: 0x480f, 0xd6: 0x481e, + 0xd8: 0xa000, 0xd9: 0x32f4, 0xda: 0x32f9, 0xdb: 0x32fe, 0xdc: 0x4850, 0xdd: 0x3376, + 0xe0: 0x33bc, 0xe1: 0x33c1, 0xe2: 0x485a, 0xe3: 0x33c6, + 0xe4: 0x4869, 0xe5: 0x486e, 0xe6: 0xa000, 0xe7: 0x4878, 0xe8: 0x342f, 0xe9: 0x3434, + 0xea: 0x487d, 0xeb: 0x3448, 0xec: 0x34c0, 0xed: 0x34c5, 0xee: 0x34ca, 0xef: 0x4891, + 0xf1: 0x3556, 0xf2: 0x3579, 0xf3: 0x357e, 0xf4: 0x489b, 0xf5: 0x48a0, + 0xf6: 0x48af, 0xf8: 0xa000, 0xf9: 0x360a, 0xfa: 0x360f, 0xfb: 0x3614, + 0xfc: 0x48e1, 0xfd: 0x3691, 0xff: 0x36aa, + // Block 0x4, offset 0x100 + 0x100: 0x30bf, 0x101: 0x33cb, 0x102: 0x47ce, 0x103: 0x485f, 0x104: 0x30dd, 0x105: 0x33e9, + 0x106: 0x30f1, 0x107: 0x33fd, 0x108: 0x30f6, 0x109: 0x3402, 0x10a: 0x30fb, 0x10b: 0x3407, + 0x10c: 0x3100, 0x10d: 0x340c, 0x10e: 0x310a, 0x10f: 0x3416, + 0x112: 0x47f1, 0x113: 0x4882, 0x114: 0x3132, 0x115: 0x343e, 0x116: 0x3137, 0x117: 0x3443, + 0x118: 0x3155, 0x119: 0x3461, 0x11a: 0x3146, 0x11b: 0x3452, 0x11c: 0x316e, 0x11d: 0x347a, + 0x11e: 0x3178, 0x11f: 0x3484, 0x120: 0x317d, 0x121: 0x3489, 0x122: 0x3187, 0x123: 0x3493, + 0x124: 0x318c, 0x125: 0x3498, 0x128: 0x31be, 0x129: 0x34cf, + 0x12a: 0x31c3, 0x12b: 0x34d4, 0x12c: 0x31c8, 0x12d: 0x34d9, 0x12e: 0x31eb, 0x12f: 0x34f7, + 0x130: 0x31cd, 0x134: 0x31f5, 0x135: 0x3501, + 0x136: 0x3209, 0x137: 0x351a, 0x139: 0x3213, 0x13a: 0x3524, 0x13b: 0x321d, + 0x13c: 0x352e, 0x13d: 0x3218, 0x13e: 0x3529, + // Block 0x5, offset 0x140 + 0x143: 0x3240, 0x144: 0x3551, 0x145: 0x3259, + 0x146: 0x356a, 0x147: 0x324f, 0x148: 0x3560, + 0x14c: 0x4814, 0x14d: 0x48a5, 0x14e: 0x3272, 0x14f: 0x3583, 0x150: 0x327c, 0x151: 0x358d, + 0x154: 0x329a, 0x155: 0x35ab, 0x156: 0x32b3, 0x157: 0x35c4, + 0x158: 0x32a4, 0x159: 0x35b5, 0x15a: 0x4837, 0x15b: 0x48c8, 0x15c: 0x32bd, 0x15d: 0x35ce, + 0x15e: 0x32cc, 0x15f: 0x35dd, 0x160: 0x483c, 0x161: 0x48cd, 0x162: 0x32e5, 0x163: 0x35fb, + 0x164: 0x32d6, 0x165: 0x35ec, 0x168: 0x4846, 0x169: 0x48d7, + 0x16a: 0x484b, 0x16b: 0x48dc, 0x16c: 0x3303, 0x16d: 0x3619, 0x16e: 0x330d, 0x16f: 0x3623, + 0x170: 0x3312, 0x171: 0x3628, 0x172: 0x3330, 0x173: 0x3646, 0x174: 0x3353, 0x175: 0x3669, + 0x176: 0x337b, 0x177: 0x3696, 0x178: 0x338f, 0x179: 0x339e, 0x17a: 0x36be, 0x17b: 0x33a8, + 0x17c: 0x36c8, 0x17d: 0x33ad, 0x17e: 0x36cd, 0x17f: 0xa000, + // Block 0x6, offset 0x180 + 0x184: 0x8100, 0x185: 0x8100, + 0x186: 0x8100, + 0x18d: 0x30c9, 0x18e: 0x33d5, 0x18f: 0x31d7, 0x190: 0x34e3, 0x191: 0x3281, + 0x192: 0x3592, 0x193: 0x3317, 0x194: 0x362d, 0x195: 0x3b10, 0x196: 0x3c9f, 0x197: 0x3b09, + 0x198: 0x3c98, 0x199: 0x3b17, 0x19a: 0x3ca6, 0x19b: 0x3b02, 0x19c: 0x3c91, + 0x19e: 0x39f1, 0x19f: 0x3b80, 0x1a0: 0x39ea, 0x1a1: 0x3b79, 0x1a2: 0x36f4, 0x1a3: 0x3706, + 0x1a6: 0x3182, 0x1a7: 0x348e, 0x1a8: 0x31ff, 0x1a9: 0x3510, + 0x1aa: 0x482d, 0x1ab: 0x48be, 0x1ac: 0x3ad1, 0x1ad: 0x3c60, 0x1ae: 0x3718, 0x1af: 0x371e, + 0x1b0: 0x3506, 0x1b4: 0x3169, 0x1b5: 0x3475, + 0x1b8: 0x323b, 0x1b9: 0x354c, 0x1ba: 0x39f8, 0x1bb: 0x3b87, + 0x1bc: 0x36ee, 0x1bd: 0x3700, 0x1be: 0x36fa, 0x1bf: 0x370c, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x30ce, 0x1c1: 0x33da, 0x1c2: 0x30d3, 0x1c3: 0x33df, 0x1c4: 0x314b, 0x1c5: 0x3457, + 0x1c6: 0x3150, 0x1c7: 0x345c, 0x1c8: 0x31dc, 0x1c9: 0x34e8, 0x1ca: 0x31e1, 0x1cb: 0x34ed, + 0x1cc: 0x3286, 0x1cd: 0x3597, 0x1ce: 0x328b, 0x1cf: 0x359c, 0x1d0: 0x32a9, 0x1d1: 0x35ba, + 0x1d2: 0x32ae, 0x1d3: 0x35bf, 0x1d4: 0x331c, 0x1d5: 0x3632, 0x1d6: 0x3321, 0x1d7: 0x3637, + 0x1d8: 0x32c7, 0x1d9: 0x35d8, 0x1da: 0x32e0, 0x1db: 0x35f6, + 0x1de: 0x319b, 0x1df: 0x34a7, + 0x1e6: 0x47d3, 0x1e7: 0x4864, 0x1e8: 0x47fb, 0x1e9: 0x488c, + 0x1ea: 0x3aa0, 0x1eb: 0x3c2f, 0x1ec: 0x3a7d, 0x1ed: 0x3c0c, 0x1ee: 0x4819, 0x1ef: 0x48aa, + 0x1f0: 0x3a99, 0x1f1: 0x3c28, 0x1f2: 0x3385, 0x1f3: 0x36a0, + // Block 0x8, offset 0x200 + 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, + 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, + 0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933, + 0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e, + 0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e, + 0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e, + 0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e, + 0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e, + 0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e, + 0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133, + // Block 0x9, offset 0x240 + 0x240: 0x4aef, 0x241: 0x4af4, 0x242: 0x9933, 0x243: 0x4af9, 0x244: 0x4bb2, 0x245: 0x9937, + 0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133, + 0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133, + 0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133, + 0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136, + 0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133, + 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, + 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, + 0x274: 0x01ee, + 0x27a: 0x8100, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x8100, 0x285: 0x36e2, + 0x286: 0x372a, 0x287: 0x00ce, 0x288: 0x3748, 0x289: 0x3754, 0x28a: 0x3766, + 0x28c: 0x3784, 0x28e: 0x3796, 0x28f: 0x37b4, 0x290: 0x3f49, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x3778, 0x2ab: 0x37a8, 0x2ac: 0x493f, 0x2ad: 0x37d8, 0x2ae: 0x4969, 0x2af: 0x37ea, + 0x2b0: 0x3fb1, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x3862, 0x2c1: 0x386e, 0x2c3: 0x385c, + 0x2c6: 0xa000, 0x2c7: 0x384a, + 0x2cc: 0x389e, 0x2cd: 0x3886, 0x2ce: 0x38b0, 0x2d0: 0xa000, + 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, + 0x2d8: 0xa000, 0x2d9: 0x3892, 0x2da: 0xa000, + 0x2de: 0xa000, 0x2e3: 0xa000, + 0x2e7: 0xa000, + 0x2eb: 0xa000, 0x2ed: 0xa000, + 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, + 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x3916, 0x2fa: 0xa000, + 0x2fe: 0xa000, + // Block 0xc, offset 0x300 + 0x301: 0x3874, 0x302: 0x38f8, + 0x310: 0x3850, 0x311: 0x38d4, + 0x312: 0x3856, 0x313: 0x38da, 0x316: 0x3868, 0x317: 0x38ec, + 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x396a, 0x31b: 0x3970, 0x31c: 0x387a, 0x31d: 0x38fe, + 0x31e: 0x3880, 0x31f: 0x3904, 0x322: 0x388c, 0x323: 0x3910, + 0x324: 0x3898, 0x325: 0x391c, 0x326: 0x38a4, 0x327: 0x3928, 0x328: 0xa000, 0x329: 0xa000, + 0x32a: 0x3976, 0x32b: 0x397c, 0x32c: 0x38ce, 0x32d: 0x3952, 0x32e: 0x38aa, 0x32f: 0x392e, + 0x330: 0x38b6, 0x331: 0x393a, 0x332: 0x38bc, 0x333: 0x3940, 0x334: 0x38c2, 0x335: 0x3946, + 0x338: 0x38c8, 0x339: 0x394c, + // Block 0xd, offset 0x340 + 0x351: 0x812e, + 0x352: 0x8133, 0x353: 0x8133, 0x354: 0x8133, 0x355: 0x8133, 0x356: 0x812e, 0x357: 0x8133, + 0x358: 0x8133, 0x359: 0x8133, 0x35a: 0x812f, 0x35b: 0x812e, 0x35c: 0x8133, 0x35d: 0x8133, + 0x35e: 0x8133, 0x35f: 0x8133, 0x360: 0x8133, 0x361: 0x8133, 0x362: 0x812e, 0x363: 0x812e, + 0x364: 0x812e, 0x365: 0x812e, 0x366: 0x812e, 0x367: 0x812e, 0x368: 0x8133, 0x369: 0x8133, + 0x36a: 0x812e, 0x36b: 0x8133, 0x36c: 0x8133, 0x36d: 0x812f, 0x36e: 0x8132, 0x36f: 0x8133, + 0x370: 0x8106, 0x371: 0x8107, 0x372: 0x8108, 0x373: 0x8109, 0x374: 0x810a, 0x375: 0x810b, + 0x376: 0x810c, 0x377: 0x810d, 0x378: 0x810e, 0x379: 0x810f, 0x37a: 0x810f, 0x37b: 0x8110, + 0x37c: 0x8111, 0x37d: 0x8112, 0x37f: 0x8113, + // Block 0xe, offset 0x380 + 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8117, + 0x38c: 0x8118, 0x38d: 0x8119, 0x38e: 0x811a, 0x38f: 0x811b, 0x390: 0x811c, 0x391: 0x811d, + 0x392: 0x811e, 0x393: 0x9933, 0x394: 0x9933, 0x395: 0x992e, 0x396: 0x812e, 0x397: 0x8133, + 0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x8133, 0x39b: 0x8133, 0x39c: 0x812e, 0x39d: 0x8133, + 0x39e: 0x8133, 0x39f: 0x812e, + 0x3b0: 0x811f, + // Block 0xf, offset 0x3c0 + 0x3ca: 0x8133, 0x3cb: 0x8133, + 0x3cc: 0x8133, 0x3cd: 0x8133, 0x3ce: 0x8133, 0x3cf: 0x812e, 0x3d0: 0x812e, 0x3d1: 0x812e, + 0x3d2: 0x812e, 0x3d3: 0x812e, 0x3d4: 0x8133, 0x3d5: 0x8133, 0x3d6: 0x8133, 0x3d7: 0x8133, + 0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x8133, 0x3dd: 0x8133, + 0x3de: 0x8133, 0x3df: 0x8133, 0x3e0: 0x8133, 0x3e1: 0x8133, 0x3e3: 0x812e, + 0x3e4: 0x8133, 0x3e5: 0x8133, 0x3e6: 0x812e, 0x3e7: 0x8133, 0x3e8: 0x8133, 0x3e9: 0x812e, + 0x3ea: 0x8133, 0x3eb: 0x8133, 0x3ec: 0x8133, 0x3ed: 0x812e, 0x3ee: 0x812e, 0x3ef: 0x812e, + 0x3f0: 0x8117, 0x3f1: 0x8118, 0x3f2: 0x8119, 0x3f3: 0x8133, 0x3f4: 0x8133, 0x3f5: 0x8133, + 0x3f6: 0x812e, 0x3f7: 0x8133, 0x3f8: 0x8133, 0x3f9: 0x812e, 0x3fa: 0x812e, 0x3fb: 0x8133, + 0x3fc: 0x8133, 0x3fd: 0x8133, 0x3fe: 0x8133, 0x3ff: 0x8133, + // Block 0x10, offset 0x400 + 0x405: 0xa000, + 0x406: 0x2e5d, 0x407: 0xa000, 0x408: 0x2e65, 0x409: 0xa000, 0x40a: 0x2e6d, 0x40b: 0xa000, + 0x40c: 0x2e75, 0x40d: 0xa000, 0x40e: 0x2e7d, 0x411: 0xa000, + 0x412: 0x2e85, + 0x434: 0x8103, 0x435: 0x9900, + 0x43a: 0xa000, 0x43b: 0x2e8d, + 0x43c: 0xa000, 0x43d: 0x2e95, 0x43e: 0xa000, 0x43f: 0xa000, + // Block 0x11, offset 0x440 + 0x440: 0x8133, 0x441: 0x8133, 0x442: 0x812e, 0x443: 0x8133, 0x444: 0x8133, 0x445: 0x8133, + 0x446: 0x8133, 0x447: 0x8133, 0x448: 0x8133, 0x449: 0x8133, 0x44a: 0x812e, 0x44b: 0x8133, + 0x44c: 0x8133, 0x44d: 0x8136, 0x44e: 0x812b, 0x44f: 0x812e, 0x450: 0x812a, 0x451: 0x8133, + 0x452: 0x8133, 0x453: 0x8133, 0x454: 0x8133, 0x455: 0x8133, 0x456: 0x8133, 0x457: 0x8133, + 0x458: 0x8133, 0x459: 0x8133, 0x45a: 0x8133, 0x45b: 0x8133, 0x45c: 0x8133, 0x45d: 0x8133, + 0x45e: 0x8133, 0x45f: 0x8133, 0x460: 0x8133, 0x461: 0x8133, 0x462: 0x8133, 0x463: 0x8133, + 0x464: 0x8133, 0x465: 0x8133, 0x466: 0x8133, 0x467: 0x8133, 0x468: 0x8133, 0x469: 0x8133, + 0x46a: 0x8133, 0x46b: 0x8133, 0x46c: 0x8133, 0x46d: 0x8133, 0x46e: 0x8133, 0x46f: 0x8133, + 0x470: 0x8133, 0x471: 0x8133, 0x472: 0x8133, 0x473: 0x8133, 0x474: 0x8133, 0x475: 0x8133, + 0x476: 0x8134, 0x477: 0x8132, 0x478: 0x8132, 0x479: 0x812e, 0x47a: 0x812d, 0x47b: 0x8133, + 0x47c: 0x8135, 0x47d: 0x812e, 0x47e: 0x8133, 0x47f: 0x812e, + // Block 0x12, offset 0x480 + 0x480: 0x30d8, 0x481: 0x33e4, 0x482: 0x30e2, 0x483: 0x33ee, 0x484: 0x30e7, 0x485: 0x33f3, + 0x486: 0x30ec, 0x487: 0x33f8, 0x488: 0x3a0d, 0x489: 0x3b9c, 0x48a: 0x3105, 0x48b: 0x3411, + 0x48c: 0x310f, 0x48d: 0x341b, 0x48e: 0x311e, 0x48f: 0x342a, 0x490: 0x3114, 0x491: 0x3420, + 0x492: 0x3119, 0x493: 0x3425, 0x494: 0x3a30, 0x495: 0x3bbf, 0x496: 0x3a37, 0x497: 0x3bc6, + 0x498: 0x315a, 0x499: 0x3466, 0x49a: 0x315f, 0x49b: 0x346b, 0x49c: 0x3a45, 0x49d: 0x3bd4, + 0x49e: 0x3164, 0x49f: 0x3470, 0x4a0: 0x3173, 0x4a1: 0x347f, 0x4a2: 0x3191, 0x4a3: 0x349d, + 0x4a4: 0x31a0, 0x4a5: 0x34ac, 0x4a6: 0x3196, 0x4a7: 0x34a2, 0x4a8: 0x31a5, 0x4a9: 0x34b1, + 0x4aa: 0x31aa, 0x4ab: 0x34b6, 0x4ac: 0x31f0, 0x4ad: 0x34fc, 0x4ae: 0x3a4c, 0x4af: 0x3bdb, + 0x4b0: 0x31fa, 0x4b1: 0x350b, 0x4b2: 0x3204, 0x4b3: 0x3515, 0x4b4: 0x320e, 0x4b5: 0x351f, + 0x4b6: 0x4805, 0x4b7: 0x4896, 0x4b8: 0x3a53, 0x4b9: 0x3be2, 0x4ba: 0x3227, 0x4bb: 0x3538, + 0x4bc: 0x3222, 0x4bd: 0x3533, 0x4be: 0x322c, 0x4bf: 0x353d, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x3231, 0x4c1: 0x3542, 0x4c2: 0x3236, 0x4c3: 0x3547, 0x4c4: 0x324a, 0x4c5: 0x355b, + 0x4c6: 0x3254, 0x4c7: 0x3565, 0x4c8: 0x3263, 0x4c9: 0x3574, 0x4ca: 0x325e, 0x4cb: 0x356f, + 0x4cc: 0x3a76, 0x4cd: 0x3c05, 0x4ce: 0x3a84, 0x4cf: 0x3c13, 0x4d0: 0x3a8b, 0x4d1: 0x3c1a, + 0x4d2: 0x3a92, 0x4d3: 0x3c21, 0x4d4: 0x3290, 0x4d5: 0x35a1, 0x4d6: 0x3295, 0x4d7: 0x35a6, + 0x4d8: 0x329f, 0x4d9: 0x35b0, 0x4da: 0x4832, 0x4db: 0x48c3, 0x4dc: 0x3ad8, 0x4dd: 0x3c67, + 0x4de: 0x32b8, 0x4df: 0x35c9, 0x4e0: 0x32c2, 0x4e1: 0x35d3, 0x4e2: 0x4841, 0x4e3: 0x48d2, + 0x4e4: 0x3adf, 0x4e5: 0x3c6e, 0x4e6: 0x3ae6, 0x4e7: 0x3c75, 0x4e8: 0x3aed, 0x4e9: 0x3c7c, + 0x4ea: 0x32d1, 0x4eb: 0x35e2, 0x4ec: 0x32db, 0x4ed: 0x35f1, 0x4ee: 0x32ef, 0x4ef: 0x3605, + 0x4f0: 0x32ea, 0x4f1: 0x3600, 0x4f2: 0x332b, 0x4f3: 0x3641, 0x4f4: 0x333a, 0x4f5: 0x3650, + 0x4f6: 0x3335, 0x4f7: 0x364b, 0x4f8: 0x3af4, 0x4f9: 0x3c83, 0x4fa: 0x3afb, 0x4fb: 0x3c8a, + 0x4fc: 0x333f, 0x4fd: 0x3655, 0x4fe: 0x3344, 0x4ff: 0x365a, + // Block 0x14, offset 0x500 + 0x500: 0x3349, 0x501: 0x365f, 0x502: 0x334e, 0x503: 0x3664, 0x504: 0x335d, 0x505: 0x3673, + 0x506: 0x3358, 0x507: 0x366e, 0x508: 0x3362, 0x509: 0x367d, 0x50a: 0x3367, 0x50b: 0x3682, + 0x50c: 0x336c, 0x50d: 0x3687, 0x50e: 0x338a, 0x50f: 0x36a5, 0x510: 0x33a3, 0x511: 0x36c3, + 0x512: 0x33b2, 0x513: 0x36d2, 0x514: 0x33b7, 0x515: 0x36d7, 0x516: 0x34bb, 0x517: 0x35e7, + 0x518: 0x3678, 0x519: 0x36b4, 0x51b: 0x3712, + 0x520: 0x47e2, 0x521: 0x4873, 0x522: 0x30c4, 0x523: 0x33d0, + 0x524: 0x39b9, 0x525: 0x3b48, 0x526: 0x39b2, 0x527: 0x3b41, 0x528: 0x39c7, 0x529: 0x3b56, + 0x52a: 0x39c0, 0x52b: 0x3b4f, 0x52c: 0x39ff, 0x52d: 0x3b8e, 0x52e: 0x39d5, 0x52f: 0x3b64, + 0x530: 0x39ce, 0x531: 0x3b5d, 0x532: 0x39e3, 0x533: 0x3b72, 0x534: 0x39dc, 0x535: 0x3b6b, + 0x536: 0x3a06, 0x537: 0x3b95, 0x538: 0x47f6, 0x539: 0x4887, 0x53a: 0x3141, 0x53b: 0x344d, + 0x53c: 0x312d, 0x53d: 0x3439, 0x53e: 0x3a1b, 0x53f: 0x3baa, + // Block 0x15, offset 0x540 + 0x540: 0x3a14, 0x541: 0x3ba3, 0x542: 0x3a29, 0x543: 0x3bb8, 0x544: 0x3a22, 0x545: 0x3bb1, + 0x546: 0x3a3e, 0x547: 0x3bcd, 0x548: 0x31d2, 0x549: 0x34de, 0x54a: 0x31e6, 0x54b: 0x34f2, + 0x54c: 0x4828, 0x54d: 0x48b9, 0x54e: 0x3277, 0x54f: 0x3588, 0x550: 0x3a61, 0x551: 0x3bf0, + 0x552: 0x3a5a, 0x553: 0x3be9, 0x554: 0x3a6f, 0x555: 0x3bfe, 0x556: 0x3a68, 0x557: 0x3bf7, + 0x558: 0x3aca, 0x559: 0x3c59, 0x55a: 0x3aae, 0x55b: 0x3c3d, 0x55c: 0x3aa7, 0x55d: 0x3c36, + 0x55e: 0x3abc, 0x55f: 0x3c4b, 0x560: 0x3ab5, 0x561: 0x3c44, 0x562: 0x3ac3, 0x563: 0x3c52, + 0x564: 0x3326, 0x565: 0x363c, 0x566: 0x3308, 0x567: 0x361e, 0x568: 0x3b25, 0x569: 0x3cb4, + 0x56a: 0x3b1e, 0x56b: 0x3cad, 0x56c: 0x3b33, 0x56d: 0x3cc2, 0x56e: 0x3b2c, 0x56f: 0x3cbb, + 0x570: 0x3b3a, 0x571: 0x3cc9, 0x572: 0x3371, 0x573: 0x368c, 0x574: 0x3399, 0x575: 0x36b9, + 0x576: 0x3394, 0x577: 0x36af, 0x578: 0x3380, 0x579: 0x369b, + // Block 0x16, offset 0x580 + 0x580: 0x4945, 0x581: 0x494b, 0x582: 0x4a5f, 0x583: 0x4a77, 0x584: 0x4a67, 0x585: 0x4a7f, + 0x586: 0x4a6f, 0x587: 0x4a87, 0x588: 0x48eb, 0x589: 0x48f1, 0x58a: 0x49cf, 0x58b: 0x49e7, + 0x58c: 0x49d7, 0x58d: 0x49ef, 0x58e: 0x49df, 0x58f: 0x49f7, 0x590: 0x4957, 0x591: 0x495d, + 0x592: 0x3ef9, 0x593: 0x3f09, 0x594: 0x3f01, 0x595: 0x3f11, + 0x598: 0x48f7, 0x599: 0x48fd, 0x59a: 0x3e29, 0x59b: 0x3e39, 0x59c: 0x3e31, 0x59d: 0x3e41, + 0x5a0: 0x496f, 0x5a1: 0x4975, 0x5a2: 0x4a8f, 0x5a3: 0x4aa7, + 0x5a4: 0x4a97, 0x5a5: 0x4aaf, 0x5a6: 0x4a9f, 0x5a7: 0x4ab7, 0x5a8: 0x4903, 0x5a9: 0x4909, + 0x5aa: 0x49ff, 0x5ab: 0x4a17, 0x5ac: 0x4a07, 0x5ad: 0x4a1f, 0x5ae: 0x4a0f, 0x5af: 0x4a27, + 0x5b0: 0x4987, 0x5b1: 0x498d, 0x5b2: 0x3f59, 0x5b3: 0x3f71, 0x5b4: 0x3f61, 0x5b5: 0x3f79, + 0x5b6: 0x3f69, 0x5b7: 0x3f81, 0x5b8: 0x490f, 0x5b9: 0x4915, 0x5ba: 0x3e59, 0x5bb: 0x3e71, + 0x5bc: 0x3e61, 0x5bd: 0x3e79, 0x5be: 0x3e69, 0x5bf: 0x3e81, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x4993, 0x5c1: 0x4999, 0x5c2: 0x3f89, 0x5c3: 0x3f99, 0x5c4: 0x3f91, 0x5c5: 0x3fa1, + 0x5c8: 0x491b, 0x5c9: 0x4921, 0x5ca: 0x3e89, 0x5cb: 0x3e99, + 0x5cc: 0x3e91, 0x5cd: 0x3ea1, 0x5d0: 0x49a5, 0x5d1: 0x49ab, + 0x5d2: 0x3fc1, 0x5d3: 0x3fd9, 0x5d4: 0x3fc9, 0x5d5: 0x3fe1, 0x5d6: 0x3fd1, 0x5d7: 0x3fe9, + 0x5d9: 0x4927, 0x5db: 0x3ea9, 0x5dd: 0x3eb1, + 0x5df: 0x3eb9, 0x5e0: 0x49bd, 0x5e1: 0x49c3, 0x5e2: 0x4abf, 0x5e3: 0x4ad7, + 0x5e4: 0x4ac7, 0x5e5: 0x4adf, 0x5e6: 0x4acf, 0x5e7: 0x4ae7, 0x5e8: 0x492d, 0x5e9: 0x4933, + 0x5ea: 0x4a2f, 0x5eb: 0x4a47, 0x5ec: 0x4a37, 0x5ed: 0x4a4f, 0x5ee: 0x4a3f, 0x5ef: 0x4a57, + 0x5f0: 0x4939, 0x5f1: 0x445f, 0x5f2: 0x37d2, 0x5f3: 0x4465, 0x5f4: 0x4963, 0x5f5: 0x446b, + 0x5f6: 0x37e4, 0x5f7: 0x4471, 0x5f8: 0x3802, 0x5f9: 0x4477, 0x5fa: 0x381a, 0x5fb: 0x447d, + 0x5fc: 0x49b1, 0x5fd: 0x4483, + // Block 0x18, offset 0x600 + 0x600: 0x3ee1, 0x601: 0x3ee9, 0x602: 0x42c5, 0x603: 0x42e3, 0x604: 0x42cf, 0x605: 0x42ed, + 0x606: 0x42d9, 0x607: 0x42f7, 0x608: 0x3e19, 0x609: 0x3e21, 0x60a: 0x4211, 0x60b: 0x422f, + 0x60c: 0x421b, 0x60d: 0x4239, 0x60e: 0x4225, 0x60f: 0x4243, 0x610: 0x3f29, 0x611: 0x3f31, + 0x612: 0x4301, 0x613: 0x431f, 0x614: 0x430b, 0x615: 0x4329, 0x616: 0x4315, 0x617: 0x4333, + 0x618: 0x3e49, 0x619: 0x3e51, 0x61a: 0x424d, 0x61b: 0x426b, 0x61c: 0x4257, 0x61d: 0x4275, + 0x61e: 0x4261, 0x61f: 0x427f, 0x620: 0x4001, 0x621: 0x4009, 0x622: 0x433d, 0x623: 0x435b, + 0x624: 0x4347, 0x625: 0x4365, 0x626: 0x4351, 0x627: 0x436f, 0x628: 0x3ec1, 0x629: 0x3ec9, + 0x62a: 0x4289, 0x62b: 0x42a7, 0x62c: 0x4293, 0x62d: 0x42b1, 0x62e: 0x429d, 0x62f: 0x42bb, + 0x630: 0x37c6, 0x631: 0x37c0, 0x632: 0x3ed1, 0x633: 0x37cc, 0x634: 0x3ed9, + 0x636: 0x4951, 0x637: 0x3ef1, 0x638: 0x3736, 0x639: 0x3730, 0x63a: 0x3724, 0x63b: 0x442f, + 0x63c: 0x373c, 0x63d: 0x8100, 0x63e: 0x0257, 0x63f: 0xa100, + // Block 0x19, offset 0x640 + 0x640: 0x8100, 0x641: 0x36e8, 0x642: 0x3f19, 0x643: 0x37de, 0x644: 0x3f21, + 0x646: 0x497b, 0x647: 0x3f39, 0x648: 0x3742, 0x649: 0x4435, 0x64a: 0x374e, 0x64b: 0x443b, + 0x64c: 0x375a, 0x64d: 0x3cd0, 0x64e: 0x3cd7, 0x64f: 0x3cde, 0x650: 0x37f6, 0x651: 0x37f0, + 0x652: 0x3f41, 0x653: 0x4625, 0x656: 0x37fc, 0x657: 0x3f51, + 0x658: 0x3772, 0x659: 0x376c, 0x65a: 0x3760, 0x65b: 0x4441, 0x65d: 0x3ce5, + 0x65e: 0x3cec, 0x65f: 0x3cf3, 0x660: 0x382c, 0x661: 0x3826, 0x662: 0x3fa9, 0x663: 0x462d, + 0x664: 0x380e, 0x665: 0x3814, 0x666: 0x3832, 0x667: 0x3fb9, 0x668: 0x37a2, 0x669: 0x379c, + 0x66a: 0x3790, 0x66b: 0x444d, 0x66c: 0x378a, 0x66d: 0x36dc, 0x66e: 0x4429, 0x66f: 0x0081, + 0x672: 0x3ff1, 0x673: 0x3838, 0x674: 0x3ff9, + 0x676: 0x49c9, 0x677: 0x4011, 0x678: 0x377e, 0x679: 0x4447, 0x67a: 0x37ae, 0x67b: 0x4459, + 0x67c: 0x37ba, 0x67d: 0x4397, 0x67e: 0xa100, + // Block 0x1a, offset 0x680 + 0x681: 0x3d47, 0x683: 0xa000, 0x684: 0x3d4e, 0x685: 0xa000, + 0x687: 0x3d55, 0x688: 0xa000, 0x689: 0x3d5c, + 0x68d: 0xa000, + 0x6a0: 0x30a6, 0x6a1: 0xa000, 0x6a2: 0x3d6a, + 0x6a4: 0xa000, 0x6a5: 0xa000, + 0x6ad: 0x3d63, 0x6ae: 0x30a1, 0x6af: 0x30ab, + 0x6b0: 0x3d71, 0x6b1: 0x3d78, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3d7f, 0x6b5: 0x3d86, + 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3d8d, 0x6b9: 0x3d94, 0x6ba: 0xa000, 0x6bb: 0xa000, + 0x6bc: 0xa000, 0x6bd: 0xa000, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3d9b, 0x6c1: 0x3da2, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3db7, 0x6c5: 0x3dbe, + 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3dc5, 0x6c9: 0x3dcc, + 0x6d1: 0xa000, + 0x6d2: 0xa000, + 0x6e2: 0xa000, + 0x6e8: 0xa000, 0x6e9: 0xa000, + 0x6eb: 0xa000, 0x6ec: 0x3de1, 0x6ed: 0x3de8, 0x6ee: 0x3def, 0x6ef: 0x3df6, + 0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000, + // Block 0x1c, offset 0x700 + 0x706: 0xa000, 0x70b: 0xa000, + 0x70c: 0x4049, 0x70d: 0xa000, 0x70e: 0x4051, 0x70f: 0xa000, 0x710: 0x4059, 0x711: 0xa000, + 0x712: 0x4061, 0x713: 0xa000, 0x714: 0x4069, 0x715: 0xa000, 0x716: 0x4071, 0x717: 0xa000, + 0x718: 0x4079, 0x719: 0xa000, 0x71a: 0x4081, 0x71b: 0xa000, 0x71c: 0x4089, 0x71d: 0xa000, + 0x71e: 0x4091, 0x71f: 0xa000, 0x720: 0x4099, 0x721: 0xa000, 0x722: 0x40a1, + 0x724: 0xa000, 0x725: 0x40a9, 0x726: 0xa000, 0x727: 0x40b1, 0x728: 0xa000, 0x729: 0x40b9, + 0x72f: 0xa000, + 0x730: 0x40c1, 0x731: 0x40c9, 0x732: 0xa000, 0x733: 0x40d1, 0x734: 0x40d9, 0x735: 0xa000, + 0x736: 0x40e1, 0x737: 0x40e9, 0x738: 0xa000, 0x739: 0x40f1, 0x73a: 0x40f9, 0x73b: 0xa000, + 0x73c: 0x4101, 0x73d: 0x4109, + // Block 0x1d, offset 0x740 + 0x754: 0x4041, + 0x759: 0x9904, 0x75a: 0x9904, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000, + 0x75e: 0x4111, + 0x766: 0xa000, + 0x76b: 0xa000, 0x76c: 0x4121, 0x76d: 0xa000, 0x76e: 0x4129, 0x76f: 0xa000, + 0x770: 0x4131, 0x771: 0xa000, 0x772: 0x4139, 0x773: 0xa000, 0x774: 0x4141, 0x775: 0xa000, + 0x776: 0x4149, 0x777: 0xa000, 0x778: 0x4151, 0x779: 0xa000, 0x77a: 0x4159, 0x77b: 0xa000, + 0x77c: 0x4161, 0x77d: 0xa000, 0x77e: 0x4169, 0x77f: 0xa000, + // Block 0x1e, offset 0x780 + 0x780: 0x4171, 0x781: 0xa000, 0x782: 0x4179, 0x784: 0xa000, 0x785: 0x4181, + 0x786: 0xa000, 0x787: 0x4189, 0x788: 0xa000, 0x789: 0x4191, + 0x78f: 0xa000, 0x790: 0x4199, 0x791: 0x41a1, + 0x792: 0xa000, 0x793: 0x41a9, 0x794: 0x41b1, 0x795: 0xa000, 0x796: 0x41b9, 0x797: 0x41c1, + 0x798: 0xa000, 0x799: 0x41c9, 0x79a: 0x41d1, 0x79b: 0xa000, 0x79c: 0x41d9, 0x79d: 0x41e1, + 0x7af: 0xa000, + 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x4119, + 0x7b7: 0x41e9, 0x7b8: 0x41f1, 0x7b9: 0x41f9, 0x7ba: 0x4201, + 0x7bd: 0xa000, 0x7be: 0x4209, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x1472, 0x7c1: 0x0df6, 0x7c2: 0x14ce, 0x7c3: 0x149a, 0x7c4: 0x0f52, 0x7c5: 0x07e6, + 0x7c6: 0x09da, 0x7c7: 0x1726, 0x7c8: 0x1726, 0x7c9: 0x0b06, 0x7ca: 0x155a, 0x7cb: 0x0a3e, + 0x7cc: 0x0b02, 0x7cd: 0x0cea, 0x7ce: 0x10ca, 0x7cf: 0x125a, 0x7d0: 0x1392, 0x7d1: 0x13ce, + 0x7d2: 0x1402, 0x7d3: 0x1516, 0x7d4: 0x0e6e, 0x7d5: 0x0efa, 0x7d6: 0x0fa6, 0x7d7: 0x103e, + 0x7d8: 0x135a, 0x7d9: 0x1542, 0x7da: 0x166e, 0x7db: 0x080a, 0x7dc: 0x09ae, 0x7dd: 0x0e82, + 0x7de: 0x0fca, 0x7df: 0x138e, 0x7e0: 0x16be, 0x7e1: 0x0bae, 0x7e2: 0x0f72, 0x7e3: 0x137e, + 0x7e4: 0x1412, 0x7e5: 0x0d1e, 0x7e6: 0x12b6, 0x7e7: 0x13da, 0x7e8: 0x0c1a, 0x7e9: 0x0e0a, + 0x7ea: 0x0f12, 0x7eb: 0x1016, 0x7ec: 0x1522, 0x7ed: 0x084a, 0x7ee: 0x08e2, 0x7ef: 0x094e, + 0x7f0: 0x0d86, 0x7f1: 0x0e7a, 0x7f2: 0x0fc6, 0x7f3: 0x10ea, 0x7f4: 0x1272, 0x7f5: 0x1386, + 0x7f6: 0x139e, 0x7f7: 0x14c2, 0x7f8: 0x15ea, 0x7f9: 0x169e, 0x7fa: 0x16ba, 0x7fb: 0x1126, + 0x7fc: 0x1166, 0x7fd: 0x121e, 0x7fe: 0x133e, 0x7ff: 0x1576, + // Block 0x20, offset 0x800 + 0x800: 0x16c6, 0x801: 0x1446, 0x802: 0x0ac2, 0x803: 0x0c36, 0x804: 0x11d6, 0x805: 0x1296, + 0x806: 0x0ffa, 0x807: 0x112e, 0x808: 0x1492, 0x809: 0x15e2, 0x80a: 0x0abe, 0x80b: 0x0b8a, + 0x80c: 0x0e72, 0x80d: 0x0f26, 0x80e: 0x0f5a, 0x80f: 0x120e, 0x810: 0x1236, 0x811: 0x15a2, + 0x812: 0x094a, 0x813: 0x12a2, 0x814: 0x08ee, 0x815: 0x08ea, 0x816: 0x1192, 0x817: 0x1222, + 0x818: 0x1356, 0x819: 0x15aa, 0x81a: 0x1462, 0x81b: 0x0d22, 0x81c: 0x0e6e, 0x81d: 0x1452, + 0x81e: 0x07f2, 0x81f: 0x0b5e, 0x820: 0x0c8e, 0x821: 0x102a, 0x822: 0x10aa, 0x823: 0x096e, + 0x824: 0x1136, 0x825: 0x085a, 0x826: 0x0c72, 0x827: 0x07d2, 0x828: 0x0ee6, 0x829: 0x0d9e, + 0x82a: 0x120a, 0x82b: 0x09c2, 0x82c: 0x0aae, 0x82d: 0x10f6, 0x82e: 0x135e, 0x82f: 0x1436, + 0x830: 0x0eb2, 0x831: 0x14f2, 0x832: 0x0ede, 0x833: 0x0d32, 0x834: 0x1316, 0x835: 0x0d52, + 0x836: 0x10a6, 0x837: 0x0826, 0x838: 0x08a2, 0x839: 0x08e6, 0x83a: 0x0e4e, 0x83b: 0x11f6, + 0x83c: 0x12ee, 0x83d: 0x1442, 0x83e: 0x1556, 0x83f: 0x0956, + // Block 0x21, offset 0x840 + 0x840: 0x0a0a, 0x841: 0x0b12, 0x842: 0x0c2a, 0x843: 0x0dba, 0x844: 0x0f76, 0x845: 0x113a, + 0x846: 0x1592, 0x847: 0x1676, 0x848: 0x16ca, 0x849: 0x16e2, 0x84a: 0x0932, 0x84b: 0x0dee, + 0x84c: 0x0e9e, 0x84d: 0x14e6, 0x84e: 0x0bf6, 0x84f: 0x0cd2, 0x850: 0x0cee, 0x851: 0x0d7e, + 0x852: 0x0f66, 0x853: 0x0fb2, 0x854: 0x1062, 0x855: 0x1186, 0x856: 0x122a, 0x857: 0x128e, + 0x858: 0x14d6, 0x859: 0x1366, 0x85a: 0x14fe, 0x85b: 0x157a, 0x85c: 0x090a, 0x85d: 0x0936, + 0x85e: 0x0a1e, 0x85f: 0x0fa2, 0x860: 0x13ee, 0x861: 0x1436, 0x862: 0x0c16, 0x863: 0x0c86, + 0x864: 0x0d4a, 0x865: 0x0eaa, 0x866: 0x11d2, 0x867: 0x101e, 0x868: 0x0836, 0x869: 0x0a7a, + 0x86a: 0x0b5e, 0x86b: 0x0bc2, 0x86c: 0x0c92, 0x86d: 0x103a, 0x86e: 0x1056, 0x86f: 0x1266, + 0x870: 0x1286, 0x871: 0x155e, 0x872: 0x15de, 0x873: 0x15ee, 0x874: 0x162a, 0x875: 0x084e, + 0x876: 0x117a, 0x877: 0x154a, 0x878: 0x15c6, 0x879: 0x0caa, 0x87a: 0x0812, 0x87b: 0x0872, + 0x87c: 0x0b62, 0x87d: 0x0b82, 0x87e: 0x0daa, 0x87f: 0x0e6e, + // Block 0x22, offset 0x880 + 0x880: 0x0fbe, 0x881: 0x10c6, 0x882: 0x1372, 0x883: 0x1512, 0x884: 0x171e, 0x885: 0x0dde, + 0x886: 0x159e, 0x887: 0x092e, 0x888: 0x0e2a, 0x889: 0x0e36, 0x88a: 0x0f0a, 0x88b: 0x0f42, + 0x88c: 0x1046, 0x88d: 0x10a2, 0x88e: 0x1122, 0x88f: 0x1206, 0x890: 0x1636, 0x891: 0x08aa, + 0x892: 0x0cfe, 0x893: 0x15ae, 0x894: 0x0862, 0x895: 0x0ba6, 0x896: 0x0f2a, 0x897: 0x14da, + 0x898: 0x0c62, 0x899: 0x0cb2, 0x89a: 0x0e3e, 0x89b: 0x102a, 0x89c: 0x15b6, 0x89d: 0x0912, + 0x89e: 0x09fa, 0x89f: 0x0b92, 0x8a0: 0x0dce, 0x8a1: 0x0e1a, 0x8a2: 0x0e5a, 0x8a3: 0x0eee, + 0x8a4: 0x1042, 0x8a5: 0x10b6, 0x8a6: 0x1252, 0x8a7: 0x13f2, 0x8a8: 0x13fe, 0x8a9: 0x1552, + 0x8aa: 0x15d2, 0x8ab: 0x097e, 0x8ac: 0x0f46, 0x8ad: 0x09fe, 0x8ae: 0x0fc2, 0x8af: 0x1066, + 0x8b0: 0x1382, 0x8b1: 0x15ba, 0x8b2: 0x16a6, 0x8b3: 0x16ce, 0x8b4: 0x0e32, 0x8b5: 0x0f22, + 0x8b6: 0x12be, 0x8b7: 0x11b2, 0x8b8: 0x11be, 0x8b9: 0x11e2, 0x8ba: 0x1012, 0x8bb: 0x0f9a, + 0x8bc: 0x145e, 0x8bd: 0x082e, 0x8be: 0x1326, 0x8bf: 0x0916, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0906, 0x8c1: 0x0c06, 0x8c2: 0x0d26, 0x8c3: 0x11ee, 0x8c4: 0x0b4e, 0x8c5: 0x0efe, + 0x8c6: 0x0dea, 0x8c7: 0x14e2, 0x8c8: 0x13e2, 0x8c9: 0x15a6, 0x8ca: 0x141e, 0x8cb: 0x0c22, + 0x8cc: 0x0882, 0x8cd: 0x0a56, 0x8d0: 0x0aaa, + 0x8d2: 0x0dda, 0x8d5: 0x08f2, 0x8d6: 0x101a, 0x8d7: 0x10de, + 0x8d8: 0x1142, 0x8d9: 0x115e, 0x8da: 0x1162, 0x8db: 0x1176, 0x8dc: 0x15f6, 0x8dd: 0x11e6, + 0x8de: 0x126a, 0x8e0: 0x138a, 0x8e2: 0x144e, + 0x8e5: 0x1502, 0x8e6: 0x152e, + 0x8ea: 0x164a, 0x8eb: 0x164e, 0x8ec: 0x1652, 0x8ed: 0x16b6, 0x8ee: 0x1526, 0x8ef: 0x15c2, + 0x8f0: 0x0852, 0x8f1: 0x0876, 0x8f2: 0x088a, 0x8f3: 0x0946, 0x8f4: 0x0952, 0x8f5: 0x0992, + 0x8f6: 0x0a46, 0x8f7: 0x0a62, 0x8f8: 0x0a6a, 0x8f9: 0x0aa6, 0x8fa: 0x0ab2, 0x8fb: 0x0b8e, + 0x8fc: 0x0b96, 0x8fd: 0x0c9e, 0x8fe: 0x0cc6, 0x8ff: 0x0cce, + // Block 0x24, offset 0x900 + 0x900: 0x0ce6, 0x901: 0x0d92, 0x902: 0x0dc2, 0x903: 0x0de2, 0x904: 0x0e52, 0x905: 0x0f16, + 0x906: 0x0f32, 0x907: 0x0f62, 0x908: 0x0fb6, 0x909: 0x0fd6, 0x90a: 0x104a, 0x90b: 0x112a, + 0x90c: 0x1146, 0x90d: 0x114e, 0x90e: 0x114a, 0x90f: 0x1152, 0x910: 0x1156, 0x911: 0x115a, + 0x912: 0x116e, 0x913: 0x1172, 0x914: 0x1196, 0x915: 0x11aa, 0x916: 0x11c6, 0x917: 0x122a, + 0x918: 0x1232, 0x919: 0x123a, 0x91a: 0x124e, 0x91b: 0x1276, 0x91c: 0x12c6, 0x91d: 0x12fa, + 0x91e: 0x12fa, 0x91f: 0x1362, 0x920: 0x140a, 0x921: 0x1422, 0x922: 0x1456, 0x923: 0x145a, + 0x924: 0x149e, 0x925: 0x14a2, 0x926: 0x14fa, 0x927: 0x1502, 0x928: 0x15d6, 0x929: 0x161a, + 0x92a: 0x1632, 0x92b: 0x0c96, 0x92c: 0x184b, 0x92d: 0x12de, + 0x930: 0x07da, 0x931: 0x08de, 0x932: 0x089e, 0x933: 0x0846, 0x934: 0x0886, 0x935: 0x08b2, + 0x936: 0x0942, 0x937: 0x095e, 0x938: 0x0a46, 0x939: 0x0a32, 0x93a: 0x0a42, 0x93b: 0x0a5e, + 0x93c: 0x0aaa, 0x93d: 0x0aba, 0x93e: 0x0afe, 0x93f: 0x0b0a, + // Block 0x25, offset 0x940 + 0x940: 0x0b26, 0x941: 0x0b36, 0x942: 0x0c1e, 0x943: 0x0c26, 0x944: 0x0c56, 0x945: 0x0c76, + 0x946: 0x0ca6, 0x947: 0x0cbe, 0x948: 0x0cae, 0x949: 0x0cce, 0x94a: 0x0cc2, 0x94b: 0x0ce6, + 0x94c: 0x0d02, 0x94d: 0x0d5a, 0x94e: 0x0d66, 0x94f: 0x0d6e, 0x950: 0x0d96, 0x951: 0x0dda, + 0x952: 0x0e0a, 0x953: 0x0e0e, 0x954: 0x0e22, 0x955: 0x0ea2, 0x956: 0x0eb2, 0x957: 0x0f0a, + 0x958: 0x0f56, 0x959: 0x0f4e, 0x95a: 0x0f62, 0x95b: 0x0f7e, 0x95c: 0x0fb6, 0x95d: 0x110e, + 0x95e: 0x0fda, 0x95f: 0x100e, 0x960: 0x101a, 0x961: 0x105a, 0x962: 0x1076, 0x963: 0x109a, + 0x964: 0x10be, 0x965: 0x10c2, 0x966: 0x10de, 0x967: 0x10e2, 0x968: 0x10f2, 0x969: 0x1106, + 0x96a: 0x1102, 0x96b: 0x1132, 0x96c: 0x11ae, 0x96d: 0x11c6, 0x96e: 0x11de, 0x96f: 0x1216, + 0x970: 0x122a, 0x971: 0x1246, 0x972: 0x1276, 0x973: 0x132a, 0x974: 0x1352, 0x975: 0x13c6, + 0x976: 0x140e, 0x977: 0x141a, 0x978: 0x1422, 0x979: 0x143a, 0x97a: 0x144e, 0x97b: 0x143e, + 0x97c: 0x1456, 0x97d: 0x1452, 0x97e: 0x144a, 0x97f: 0x145a, + // Block 0x26, offset 0x980 + 0x980: 0x1466, 0x981: 0x14a2, 0x982: 0x14de, 0x983: 0x150e, 0x984: 0x1546, 0x985: 0x1566, + 0x986: 0x15b2, 0x987: 0x15d6, 0x988: 0x15f6, 0x989: 0x160a, 0x98a: 0x161a, 0x98b: 0x1626, + 0x98c: 0x1632, 0x98d: 0x1686, 0x98e: 0x1726, 0x98f: 0x17e2, 0x990: 0x17dd, 0x991: 0x180f, + 0x992: 0x0702, 0x993: 0x072a, 0x994: 0x072e, 0x995: 0x1891, 0x996: 0x18be, 0x997: 0x1936, + 0x998: 0x1712, 0x999: 0x1722, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x07f6, 0x9c1: 0x07ee, 0x9c2: 0x07fe, 0x9c3: 0x1774, 0x9c4: 0x0842, 0x9c5: 0x0852, + 0x9c6: 0x0856, 0x9c7: 0x085e, 0x9c8: 0x0866, 0x9c9: 0x086a, 0x9ca: 0x0876, 0x9cb: 0x086e, + 0x9cc: 0x06ae, 0x9cd: 0x1788, 0x9ce: 0x088a, 0x9cf: 0x088e, 0x9d0: 0x0892, 0x9d1: 0x08ae, + 0x9d2: 0x1779, 0x9d3: 0x06b2, 0x9d4: 0x089a, 0x9d5: 0x08ba, 0x9d6: 0x1783, 0x9d7: 0x08ca, + 0x9d8: 0x08d2, 0x9d9: 0x0832, 0x9da: 0x08da, 0x9db: 0x08de, 0x9dc: 0x195e, 0x9dd: 0x08fa, + 0x9de: 0x0902, 0x9df: 0x06ba, 0x9e0: 0x091a, 0x9e1: 0x091e, 0x9e2: 0x0926, 0x9e3: 0x092a, + 0x9e4: 0x06be, 0x9e5: 0x0942, 0x9e6: 0x0946, 0x9e7: 0x0952, 0x9e8: 0x095e, 0x9e9: 0x0962, + 0x9ea: 0x0966, 0x9eb: 0x096e, 0x9ec: 0x098e, 0x9ed: 0x0992, 0x9ee: 0x099a, 0x9ef: 0x09aa, + 0x9f0: 0x09b2, 0x9f1: 0x09b6, 0x9f2: 0x09b6, 0x9f3: 0x09b6, 0x9f4: 0x1797, 0x9f5: 0x0f8e, + 0x9f6: 0x09ca, 0x9f7: 0x09d2, 0x9f8: 0x179c, 0x9f9: 0x09de, 0x9fa: 0x09e6, 0x9fb: 0x09ee, + 0x9fc: 0x0a16, 0x9fd: 0x0a02, 0x9fe: 0x0a0e, 0x9ff: 0x0a12, + // Block 0x28, offset 0xa00 + 0xa00: 0x0a1a, 0xa01: 0x0a22, 0xa02: 0x0a26, 0xa03: 0x0a2e, 0xa04: 0x0a36, 0xa05: 0x0a3a, + 0xa06: 0x0a3a, 0xa07: 0x0a42, 0xa08: 0x0a4a, 0xa09: 0x0a4e, 0xa0a: 0x0a5a, 0xa0b: 0x0a7e, + 0xa0c: 0x0a62, 0xa0d: 0x0a82, 0xa0e: 0x0a66, 0xa0f: 0x0a6e, 0xa10: 0x0906, 0xa11: 0x0aca, + 0xa12: 0x0a92, 0xa13: 0x0a96, 0xa14: 0x0a9a, 0xa15: 0x0a8e, 0xa16: 0x0aa2, 0xa17: 0x0a9e, + 0xa18: 0x0ab6, 0xa19: 0x17a1, 0xa1a: 0x0ad2, 0xa1b: 0x0ad6, 0xa1c: 0x0ade, 0xa1d: 0x0aea, + 0xa1e: 0x0af2, 0xa1f: 0x0b0e, 0xa20: 0x17a6, 0xa21: 0x17ab, 0xa22: 0x0b1a, 0xa23: 0x0b1e, + 0xa24: 0x0b22, 0xa25: 0x0b16, 0xa26: 0x0b2a, 0xa27: 0x06c2, 0xa28: 0x06c6, 0xa29: 0x0b32, + 0xa2a: 0x0b3a, 0xa2b: 0x0b3a, 0xa2c: 0x17b0, 0xa2d: 0x0b56, 0xa2e: 0x0b5a, 0xa2f: 0x0b5e, + 0xa30: 0x0b66, 0xa31: 0x17b5, 0xa32: 0x0b6e, 0xa33: 0x0b72, 0xa34: 0x0c4a, 0xa35: 0x0b7a, + 0xa36: 0x06ca, 0xa37: 0x0b86, 0xa38: 0x0b96, 0xa39: 0x0ba2, 0xa3a: 0x0b9e, 0xa3b: 0x17bf, + 0xa3c: 0x0baa, 0xa3d: 0x17c4, 0xa3e: 0x0bb6, 0xa3f: 0x0bb2, + // Block 0x29, offset 0xa40 + 0xa40: 0x0bba, 0xa41: 0x0bca, 0xa42: 0x0bce, 0xa43: 0x06ce, 0xa44: 0x0bde, 0xa45: 0x0be6, + 0xa46: 0x0bea, 0xa47: 0x0bee, 0xa48: 0x06d2, 0xa49: 0x17c9, 0xa4a: 0x06d6, 0xa4b: 0x0c0a, + 0xa4c: 0x0c0e, 0xa4d: 0x0c12, 0xa4e: 0x0c1a, 0xa4f: 0x1990, 0xa50: 0x0c32, 0xa51: 0x17d3, + 0xa52: 0x17d3, 0xa53: 0x12d2, 0xa54: 0x0c42, 0xa55: 0x0c42, 0xa56: 0x06da, 0xa57: 0x17f6, + 0xa58: 0x18c8, 0xa59: 0x0c52, 0xa5a: 0x0c5a, 0xa5b: 0x06de, 0xa5c: 0x0c6e, 0xa5d: 0x0c7e, + 0xa5e: 0x0c82, 0xa5f: 0x0c8a, 0xa60: 0x0c9a, 0xa61: 0x06e6, 0xa62: 0x06e2, 0xa63: 0x0c9e, + 0xa64: 0x17d8, 0xa65: 0x0ca2, 0xa66: 0x0cb6, 0xa67: 0x0cba, 0xa68: 0x0cbe, 0xa69: 0x0cba, + 0xa6a: 0x0cca, 0xa6b: 0x0cce, 0xa6c: 0x0cde, 0xa6d: 0x0cd6, 0xa6e: 0x0cda, 0xa6f: 0x0ce2, + 0xa70: 0x0ce6, 0xa71: 0x0cea, 0xa72: 0x0cf6, 0xa73: 0x0cfa, 0xa74: 0x0d12, 0xa75: 0x0d1a, + 0xa76: 0x0d2a, 0xa77: 0x0d3e, 0xa78: 0x17e7, 0xa79: 0x0d3a, 0xa7a: 0x0d2e, 0xa7b: 0x0d46, + 0xa7c: 0x0d4e, 0xa7d: 0x0d62, 0xa7e: 0x17ec, 0xa7f: 0x0d6a, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0d5e, 0xa81: 0x0d56, 0xa82: 0x06ea, 0xa83: 0x0d72, 0xa84: 0x0d7a, 0xa85: 0x0d82, + 0xa86: 0x0d76, 0xa87: 0x06ee, 0xa88: 0x0d92, 0xa89: 0x0d9a, 0xa8a: 0x17f1, 0xa8b: 0x0dc6, + 0xa8c: 0x0dfa, 0xa8d: 0x0dd6, 0xa8e: 0x06fa, 0xa8f: 0x0de2, 0xa90: 0x06f6, 0xa91: 0x06f2, + 0xa92: 0x08be, 0xa93: 0x08c2, 0xa94: 0x0dfe, 0xa95: 0x0de6, 0xa96: 0x12a6, 0xa97: 0x075e, + 0xa98: 0x0e0a, 0xa99: 0x0e0e, 0xa9a: 0x0e12, 0xa9b: 0x0e26, 0xa9c: 0x0e1e, 0xa9d: 0x180a, + 0xa9e: 0x06fe, 0xa9f: 0x0e3a, 0xaa0: 0x0e2e, 0xaa1: 0x0e4a, 0xaa2: 0x0e52, 0xaa3: 0x1814, + 0xaa4: 0x0e56, 0xaa5: 0x0e42, 0xaa6: 0x0e5e, 0xaa7: 0x0702, 0xaa8: 0x0e62, 0xaa9: 0x0e66, + 0xaaa: 0x0e6a, 0xaab: 0x0e76, 0xaac: 0x1819, 0xaad: 0x0e7e, 0xaae: 0x0706, 0xaaf: 0x0e8a, + 0xab0: 0x181e, 0xab1: 0x0e8e, 0xab2: 0x070a, 0xab3: 0x0e9a, 0xab4: 0x0ea6, 0xab5: 0x0eb2, + 0xab6: 0x0eb6, 0xab7: 0x1823, 0xab8: 0x17ba, 0xab9: 0x1828, 0xaba: 0x0ed6, 0xabb: 0x182d, + 0xabc: 0x0ee2, 0xabd: 0x0eea, 0xabe: 0x0eda, 0xabf: 0x0ef6, + // Block 0x2b, offset 0xac0 + 0xac0: 0x0f06, 0xac1: 0x0f16, 0xac2: 0x0f0a, 0xac3: 0x0f0e, 0xac4: 0x0f1a, 0xac5: 0x0f1e, + 0xac6: 0x1832, 0xac7: 0x0f02, 0xac8: 0x0f36, 0xac9: 0x0f3a, 0xaca: 0x070e, 0xacb: 0x0f4e, + 0xacc: 0x0f4a, 0xacd: 0x1837, 0xace: 0x0f2e, 0xacf: 0x0f6a, 0xad0: 0x183c, 0xad1: 0x1841, + 0xad2: 0x0f6e, 0xad3: 0x0f82, 0xad4: 0x0f7e, 0xad5: 0x0f7a, 0xad6: 0x0712, 0xad7: 0x0f86, + 0xad8: 0x0f96, 0xad9: 0x0f92, 0xada: 0x0f9e, 0xadb: 0x177e, 0xadc: 0x0fae, 0xadd: 0x1846, + 0xade: 0x0fba, 0xadf: 0x1850, 0xae0: 0x0fce, 0xae1: 0x0fda, 0xae2: 0x0fee, 0xae3: 0x1855, + 0xae4: 0x1002, 0xae5: 0x1006, 0xae6: 0x185a, 0xae7: 0x185f, 0xae8: 0x1022, 0xae9: 0x1032, + 0xaea: 0x0716, 0xaeb: 0x1036, 0xaec: 0x071a, 0xaed: 0x071a, 0xaee: 0x104e, 0xaef: 0x1052, + 0xaf0: 0x105a, 0xaf1: 0x105e, 0xaf2: 0x106a, 0xaf3: 0x071e, 0xaf4: 0x1082, 0xaf5: 0x1864, + 0xaf6: 0x109e, 0xaf7: 0x1869, 0xaf8: 0x10aa, 0xaf9: 0x17ce, 0xafa: 0x10ba, 0xafb: 0x186e, + 0xafc: 0x1873, 0xafd: 0x1878, 0xafe: 0x0722, 0xaff: 0x0726, + // Block 0x2c, offset 0xb00 + 0xb00: 0x10f2, 0xb01: 0x1882, 0xb02: 0x187d, 0xb03: 0x1887, 0xb04: 0x188c, 0xb05: 0x10fa, + 0xb06: 0x10fe, 0xb07: 0x10fe, 0xb08: 0x1106, 0xb09: 0x072e, 0xb0a: 0x110a, 0xb0b: 0x0732, + 0xb0c: 0x0736, 0xb0d: 0x1896, 0xb0e: 0x111e, 0xb0f: 0x1126, 0xb10: 0x1132, 0xb11: 0x073a, + 0xb12: 0x189b, 0xb13: 0x1156, 0xb14: 0x18a0, 0xb15: 0x18a5, 0xb16: 0x1176, 0xb17: 0x118e, + 0xb18: 0x073e, 0xb19: 0x1196, 0xb1a: 0x119a, 0xb1b: 0x119e, 0xb1c: 0x18aa, 0xb1d: 0x18af, + 0xb1e: 0x18af, 0xb1f: 0x11b6, 0xb20: 0x0742, 0xb21: 0x18b4, 0xb22: 0x11ca, 0xb23: 0x11ce, + 0xb24: 0x0746, 0xb25: 0x18b9, 0xb26: 0x11ea, 0xb27: 0x074a, 0xb28: 0x11fa, 0xb29: 0x11f2, + 0xb2a: 0x1202, 0xb2b: 0x18c3, 0xb2c: 0x121a, 0xb2d: 0x074e, 0xb2e: 0x1226, 0xb2f: 0x122e, + 0xb30: 0x123e, 0xb31: 0x0752, 0xb32: 0x18cd, 0xb33: 0x18d2, 0xb34: 0x0756, 0xb35: 0x18d7, + 0xb36: 0x1256, 0xb37: 0x18dc, 0xb38: 0x1262, 0xb39: 0x126e, 0xb3a: 0x1276, 0xb3b: 0x18e1, + 0xb3c: 0x18e6, 0xb3d: 0x128a, 0xb3e: 0x18eb, 0xb3f: 0x1292, + // Block 0x2d, offset 0xb40 + 0xb40: 0x17fb, 0xb41: 0x075a, 0xb42: 0x12aa, 0xb43: 0x12ae, 0xb44: 0x0762, 0xb45: 0x12b2, + 0xb46: 0x0b2e, 0xb47: 0x18f0, 0xb48: 0x18f5, 0xb49: 0x1800, 0xb4a: 0x1805, 0xb4b: 0x12d2, + 0xb4c: 0x12d6, 0xb4d: 0x14ee, 0xb4e: 0x0766, 0xb4f: 0x1302, 0xb50: 0x12fe, 0xb51: 0x1306, + 0xb52: 0x093a, 0xb53: 0x130a, 0xb54: 0x130e, 0xb55: 0x1312, 0xb56: 0x131a, 0xb57: 0x18fa, + 0xb58: 0x1316, 0xb59: 0x131e, 0xb5a: 0x1332, 0xb5b: 0x1336, 0xb5c: 0x1322, 0xb5d: 0x133a, + 0xb5e: 0x134e, 0xb5f: 0x1362, 0xb60: 0x132e, 0xb61: 0x1342, 0xb62: 0x1346, 0xb63: 0x134a, + 0xb64: 0x18ff, 0xb65: 0x1909, 0xb66: 0x1904, 0xb67: 0x076a, 0xb68: 0x136a, 0xb69: 0x136e, + 0xb6a: 0x1376, 0xb6b: 0x191d, 0xb6c: 0x137a, 0xb6d: 0x190e, 0xb6e: 0x076e, 0xb6f: 0x0772, + 0xb70: 0x1913, 0xb71: 0x1918, 0xb72: 0x0776, 0xb73: 0x139a, 0xb74: 0x139e, 0xb75: 0x13a2, + 0xb76: 0x13a6, 0xb77: 0x13b2, 0xb78: 0x13ae, 0xb79: 0x13ba, 0xb7a: 0x13b6, 0xb7b: 0x13c6, + 0xb7c: 0x13be, 0xb7d: 0x13c2, 0xb7e: 0x13ca, 0xb7f: 0x077a, + // Block 0x2e, offset 0xb80 + 0xb80: 0x13d2, 0xb81: 0x13d6, 0xb82: 0x077e, 0xb83: 0x13e6, 0xb84: 0x13ea, 0xb85: 0x1922, + 0xb86: 0x13f6, 0xb87: 0x13fa, 0xb88: 0x0782, 0xb89: 0x1406, 0xb8a: 0x06b6, 0xb8b: 0x1927, + 0xb8c: 0x192c, 0xb8d: 0x0786, 0xb8e: 0x078a, 0xb8f: 0x1432, 0xb90: 0x144a, 0xb91: 0x1466, + 0xb92: 0x1476, 0xb93: 0x1931, 0xb94: 0x148a, 0xb95: 0x148e, 0xb96: 0x14a6, 0xb97: 0x14b2, + 0xb98: 0x193b, 0xb99: 0x178d, 0xb9a: 0x14be, 0xb9b: 0x14ba, 0xb9c: 0x14c6, 0xb9d: 0x1792, + 0xb9e: 0x14d2, 0xb9f: 0x14de, 0xba0: 0x1940, 0xba1: 0x1945, 0xba2: 0x151e, 0xba3: 0x152a, + 0xba4: 0x1532, 0xba5: 0x194a, 0xba6: 0x1536, 0xba7: 0x1562, 0xba8: 0x156e, 0xba9: 0x1572, + 0xbaa: 0x156a, 0xbab: 0x157e, 0xbac: 0x1582, 0xbad: 0x194f, 0xbae: 0x158e, 0xbaf: 0x078e, + 0xbb0: 0x1596, 0xbb1: 0x1954, 0xbb2: 0x0792, 0xbb3: 0x15ce, 0xbb4: 0x0bbe, 0xbb5: 0x15e6, + 0xbb6: 0x1959, 0xbb7: 0x1963, 0xbb8: 0x0796, 0xbb9: 0x079a, 0xbba: 0x160e, 0xbbb: 0x1968, + 0xbbc: 0x079e, 0xbbd: 0x196d, 0xbbe: 0x1626, 0xbbf: 0x1626, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x162e, 0xbc1: 0x1972, 0xbc2: 0x1646, 0xbc3: 0x07a2, 0xbc4: 0x1656, 0xbc5: 0x1662, + 0xbc6: 0x166a, 0xbc7: 0x1672, 0xbc8: 0x07a6, 0xbc9: 0x1977, 0xbca: 0x1686, 0xbcb: 0x16a2, + 0xbcc: 0x16ae, 0xbcd: 0x07aa, 0xbce: 0x07ae, 0xbcf: 0x16b2, 0xbd0: 0x197c, 0xbd1: 0x07b2, + 0xbd2: 0x1981, 0xbd3: 0x1986, 0xbd4: 0x198b, 0xbd5: 0x16d6, 0xbd6: 0x07b6, 0xbd7: 0x16ea, + 0xbd8: 0x16f2, 0xbd9: 0x16f6, 0xbda: 0x16fe, 0xbdb: 0x1706, 0xbdc: 0x170e, 0xbdd: 0x1995, +} + +// nfcIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var nfcIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32, + 0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35, + 0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, + 0xf0: 0x13, + // Block 0x4, offset 0x100 + 0x120: 0x3b, 0x121: 0x3c, 0x122: 0x3d, 0x123: 0x0d, 0x124: 0x3e, 0x125: 0x3f, 0x126: 0x40, 0x127: 0x41, + 0x128: 0x42, 0x129: 0x43, 0x12a: 0x44, 0x12b: 0x45, 0x12c: 0x40, 0x12d: 0x46, 0x12e: 0x47, 0x12f: 0x48, + 0x130: 0x44, 0x131: 0x49, 0x132: 0x4a, 0x133: 0x4b, 0x134: 0x4c, 0x135: 0x4d, 0x137: 0x4e, + 0x138: 0x4f, 0x139: 0x50, 0x13a: 0x51, 0x13b: 0x52, 0x13c: 0x53, 0x13d: 0x54, 0x13e: 0x55, 0x13f: 0x56, + // Block 0x5, offset 0x140 + 0x140: 0x57, 0x142: 0x58, 0x144: 0x59, 0x145: 0x5a, 0x146: 0x5b, 0x147: 0x5c, + 0x14d: 0x5d, + 0x15c: 0x5e, 0x15f: 0x5f, + 0x162: 0x60, 0x164: 0x61, + 0x168: 0x62, 0x169: 0x63, 0x16a: 0x64, 0x16b: 0x65, 0x16c: 0x0e, 0x16d: 0x66, 0x16e: 0x67, 0x16f: 0x68, + 0x170: 0x69, 0x173: 0x6a, 0x177: 0x0f, + 0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17, + // Block 0x6, offset 0x180 + 0x180: 0x6b, 0x183: 0x6c, 0x184: 0x6d, 0x186: 0x6e, 0x187: 0x6f, + 0x188: 0x70, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x71, 0x18c: 0x72, + 0x1ab: 0x73, + 0x1b3: 0x74, 0x1b5: 0x75, 0x1b7: 0x76, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x77, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x78, 0x1c5: 0x79, + 0x1c9: 0x7a, 0x1cc: 0x7b, 0x1cd: 0x7c, + // Block 0x8, offset 0x200 + 0x219: 0x7d, 0x21a: 0x7e, 0x21b: 0x7f, + 0x220: 0x80, 0x223: 0x81, 0x224: 0x82, 0x225: 0x83, 0x226: 0x84, 0x227: 0x85, + 0x22a: 0x86, 0x22b: 0x87, 0x22f: 0x88, + 0x230: 0x89, 0x231: 0x8a, 0x232: 0x8b, 0x233: 0x8c, 0x234: 0x8d, 0x235: 0x8e, 0x236: 0x8f, 0x237: 0x89, + 0x238: 0x8a, 0x239: 0x8b, 0x23a: 0x8c, 0x23b: 0x8d, 0x23c: 0x8e, 0x23d: 0x8f, 0x23e: 0x89, 0x23f: 0x8a, + // Block 0x9, offset 0x240 + 0x240: 0x8b, 0x241: 0x8c, 0x242: 0x8d, 0x243: 0x8e, 0x244: 0x8f, 0x245: 0x89, 0x246: 0x8a, 0x247: 0x8b, + 0x248: 0x8c, 0x249: 0x8d, 0x24a: 0x8e, 0x24b: 0x8f, 0x24c: 0x89, 0x24d: 0x8a, 0x24e: 0x8b, 0x24f: 0x8c, + 0x250: 0x8d, 0x251: 0x8e, 0x252: 0x8f, 0x253: 0x89, 0x254: 0x8a, 0x255: 0x8b, 0x256: 0x8c, 0x257: 0x8d, + 0x258: 0x8e, 0x259: 0x8f, 0x25a: 0x89, 0x25b: 0x8a, 0x25c: 0x8b, 0x25d: 0x8c, 0x25e: 0x8d, 0x25f: 0x8e, + 0x260: 0x8f, 0x261: 0x89, 0x262: 0x8a, 0x263: 0x8b, 0x264: 0x8c, 0x265: 0x8d, 0x266: 0x8e, 0x267: 0x8f, + 0x268: 0x89, 0x269: 0x8a, 0x26a: 0x8b, 0x26b: 0x8c, 0x26c: 0x8d, 0x26d: 0x8e, 0x26e: 0x8f, 0x26f: 0x89, + 0x270: 0x8a, 0x271: 0x8b, 0x272: 0x8c, 0x273: 0x8d, 0x274: 0x8e, 0x275: 0x8f, 0x276: 0x89, 0x277: 0x8a, + 0x278: 0x8b, 0x279: 0x8c, 0x27a: 0x8d, 0x27b: 0x8e, 0x27c: 0x8f, 0x27d: 0x89, 0x27e: 0x8a, 0x27f: 0x8b, + // Block 0xa, offset 0x280 + 0x280: 0x8c, 0x281: 0x8d, 0x282: 0x8e, 0x283: 0x8f, 0x284: 0x89, 0x285: 0x8a, 0x286: 0x8b, 0x287: 0x8c, + 0x288: 0x8d, 0x289: 0x8e, 0x28a: 0x8f, 0x28b: 0x89, 0x28c: 0x8a, 0x28d: 0x8b, 0x28e: 0x8c, 0x28f: 0x8d, + 0x290: 0x8e, 0x291: 0x8f, 0x292: 0x89, 0x293: 0x8a, 0x294: 0x8b, 0x295: 0x8c, 0x296: 0x8d, 0x297: 0x8e, + 0x298: 0x8f, 0x299: 0x89, 0x29a: 0x8a, 0x29b: 0x8b, 0x29c: 0x8c, 0x29d: 0x8d, 0x29e: 0x8e, 0x29f: 0x8f, + 0x2a0: 0x89, 0x2a1: 0x8a, 0x2a2: 0x8b, 0x2a3: 0x8c, 0x2a4: 0x8d, 0x2a5: 0x8e, 0x2a6: 0x8f, 0x2a7: 0x89, + 0x2a8: 0x8a, 0x2a9: 0x8b, 0x2aa: 0x8c, 0x2ab: 0x8d, 0x2ac: 0x8e, 0x2ad: 0x8f, 0x2ae: 0x89, 0x2af: 0x8a, + 0x2b0: 0x8b, 0x2b1: 0x8c, 0x2b2: 0x8d, 0x2b3: 0x8e, 0x2b4: 0x8f, 0x2b5: 0x89, 0x2b6: 0x8a, 0x2b7: 0x8b, + 0x2b8: 0x8c, 0x2b9: 0x8d, 0x2ba: 0x8e, 0x2bb: 0x8f, 0x2bc: 0x89, 0x2bd: 0x8a, 0x2be: 0x8b, 0x2bf: 0x8c, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x8d, 0x2c1: 0x8e, 0x2c2: 0x8f, 0x2c3: 0x89, 0x2c4: 0x8a, 0x2c5: 0x8b, 0x2c6: 0x8c, 0x2c7: 0x8d, + 0x2c8: 0x8e, 0x2c9: 0x8f, 0x2ca: 0x89, 0x2cb: 0x8a, 0x2cc: 0x8b, 0x2cd: 0x8c, 0x2ce: 0x8d, 0x2cf: 0x8e, + 0x2d0: 0x8f, 0x2d1: 0x89, 0x2d2: 0x8a, 0x2d3: 0x8b, 0x2d4: 0x8c, 0x2d5: 0x8d, 0x2d6: 0x8e, 0x2d7: 0x8f, + 0x2d8: 0x89, 0x2d9: 0x8a, 0x2da: 0x8b, 0x2db: 0x8c, 0x2dc: 0x8d, 0x2dd: 0x8e, 0x2de: 0x90, + // Block 0xc, offset 0x300 + 0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20, + 0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x91, 0x32d: 0x92, 0x32e: 0x93, + 0x331: 0x94, 0x332: 0x95, 0x333: 0x96, 0x334: 0x97, + 0x338: 0x98, 0x339: 0x99, 0x33a: 0x9a, 0x33b: 0x9b, 0x33e: 0x9c, 0x33f: 0x9d, + // Block 0xd, offset 0x340 + 0x347: 0x9e, + 0x34b: 0x9f, 0x34d: 0xa0, + 0x368: 0xa1, 0x36b: 0xa2, + 0x374: 0xa3, + 0x37a: 0xa4, 0x37b: 0xa5, 0x37d: 0xa6, 0x37e: 0xa7, + // Block 0xe, offset 0x380 + 0x381: 0xa8, 0x382: 0xa9, 0x384: 0xaa, 0x385: 0x84, 0x387: 0xab, + 0x388: 0xac, 0x38b: 0xad, 0x38c: 0xae, 0x38d: 0xaf, + 0x391: 0xb0, 0x392: 0xb1, 0x393: 0xb2, 0x396: 0xb3, 0x397: 0xb4, + 0x398: 0x75, 0x39a: 0xb5, 0x39c: 0xb6, + 0x3a0: 0xb7, 0x3a4: 0xb8, 0x3a5: 0xb9, 0x3a7: 0xba, + 0x3a8: 0xbb, 0x3a9: 0xbc, 0x3aa: 0xbd, + 0x3b0: 0x75, 0x3b5: 0xbe, 0x3b6: 0xbf, + 0x3bd: 0xc0, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xc1, 0x3ec: 0xc2, + 0x3ff: 0xc3, + // Block 0x10, offset 0x400 + 0x432: 0xc4, + // Block 0x11, offset 0x440 + 0x445: 0xc5, 0x446: 0xc6, 0x447: 0xc7, + 0x449: 0xc8, + // Block 0x12, offset 0x480 + 0x480: 0xc9, 0x482: 0xca, 0x484: 0xc2, + 0x48a: 0xcb, 0x48b: 0xcc, + 0x493: 0xcd, + 0x4a3: 0xce, 0x4a5: 0xcf, + // Block 0x13, offset 0x4c0 + 0x4c8: 0xd0, + // Block 0x14, offset 0x500 + 0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c, + 0x528: 0x2d, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfcSparseOffset: 163 entries, 326 bytes +var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x6e, 0x76, 0x7d, 0x80, 0x88, 0x8c, 0x90, 0x92, 0x94, 0x9d, 0xa1, 0xa8, 0xad, 0xb0, 0xba, 0xbd, 0xc4, 0xcc, 0xcf, 0xd1, 0xd4, 0xd6, 0xdb, 0xec, 0xf8, 0xfa, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10f, 0x112, 0x114, 0x117, 0x11a, 0x11e, 0x124, 0x12b, 0x134, 0x136, 0x139, 0x13b, 0x146, 0x14a, 0x158, 0x15b, 0x161, 0x167, 0x172, 0x176, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x186, 0x18a, 0x18c, 0x18e, 0x196, 0x19a, 0x19d, 0x19f, 0x1a1, 0x1a4, 0x1a7, 0x1a9, 0x1ab, 0x1ad, 0x1af, 0x1b5, 0x1b8, 0x1ba, 0x1c1, 0x1c7, 0x1cd, 0x1d5, 0x1db, 0x1e1, 0x1e7, 0x1eb, 0x1f9, 0x202, 0x205, 0x208, 0x20a, 0x20d, 0x20f, 0x213, 0x218, 0x21a, 0x21c, 0x221, 0x227, 0x229, 0x22b, 0x22d, 0x233, 0x236, 0x238, 0x23a, 0x23c, 0x242, 0x246, 0x24a, 0x252, 0x259, 0x25c, 0x25f, 0x261, 0x264, 0x26c, 0x270, 0x277, 0x27a, 0x280, 0x282, 0x285, 0x287, 0x28a, 0x28f, 0x291, 0x293, 0x295, 0x297, 0x299, 0x29c, 0x29e, 0x2a0, 0x2a2, 0x2a4, 0x2a6, 0x2a8, 0x2b5, 0x2bf, 0x2c1, 0x2c3, 0x2c9, 0x2cb, 0x2cd, 0x2cf, 0x2d3, 0x2d5, 0x2d8} + +// nfcSparseValues: 730 entries, 2920 bytes +var nfcSparseValues = [730]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x04}, + {value: 0xa100, lo: 0xa8, hi: 0xa8}, + {value: 0x8100, lo: 0xaf, hi: 0xaf}, + {value: 0x8100, lo: 0xb4, hi: 0xb4}, + {value: 0x8100, lo: 0xb8, hi: 0xb8}, + // Block 0x1, offset 0x5 + {value: 0x0091, lo: 0x03}, + {value: 0x4823, lo: 0xa0, hi: 0xa1}, + {value: 0x4855, lo: 0xaf, hi: 0xb0}, + {value: 0xa000, lo: 0xb7, hi: 0xb7}, + // Block 0x2, offset 0x9 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + // Block 0x3, offset 0xb + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x98, hi: 0x9d}, + // Block 0x4, offset 0xd + {value: 0x0006, lo: 0x0a}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x85, hi: 0x85}, + {value: 0xa000, lo: 0x89, hi: 0x89}, + {value: 0x4981, lo: 0x8a, hi: 0x8a}, + {value: 0x499f, lo: 0x8b, hi: 0x8b}, + {value: 0x3808, lo: 0x8c, hi: 0x8c}, + {value: 0x3820, lo: 0x8d, hi: 0x8d}, + {value: 0x49b7, lo: 0x8e, hi: 0x8e}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x383e, lo: 0x93, hi: 0x94}, + // Block 0x5, offset 0x18 + {value: 0x0000, lo: 0x0f}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0xa000, lo: 0x8d, hi: 0x8d}, + {value: 0x38e6, lo: 0x90, hi: 0x90}, + {value: 0x38f2, lo: 0x91, hi: 0x91}, + {value: 0x38e0, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x3958, lo: 0x97, hi: 0x97}, + {value: 0x3922, lo: 0x9c, hi: 0x9c}, + {value: 0x390a, lo: 0x9d, hi: 0x9d}, + {value: 0x3934, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x395e, lo: 0xb6, hi: 0xb6}, + {value: 0x3964, lo: 0xb7, hi: 0xb7}, + // Block 0x6, offset 0x28 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x83, hi: 0x87}, + // Block 0x7, offset 0x2a + {value: 0x0001, lo: 0x04}, + {value: 0x8114, lo: 0x81, hi: 0x82}, + {value: 0x8133, lo: 0x84, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + {value: 0x810e, lo: 0x87, hi: 0x87}, + // Block 0x8, offset 0x2f + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x97}, + {value: 0x811a, lo: 0x98, hi: 0x98}, + {value: 0x811b, lo: 0x99, hi: 0x99}, + {value: 0x811c, lo: 0x9a, hi: 0x9a}, + {value: 0x3982, lo: 0xa2, hi: 0xa2}, + {value: 0x3988, lo: 0xa3, hi: 0xa3}, + {value: 0x3994, lo: 0xa4, hi: 0xa4}, + {value: 0x398e, lo: 0xa5, hi: 0xa5}, + {value: 0x399a, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x9, offset 0x3a + {value: 0x0000, lo: 0x0e}, + {value: 0x39ac, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x39a0, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x39a6, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8133, lo: 0x96, hi: 0x9c}, + {value: 0x8133, lo: 0x9f, hi: 0xa2}, + {value: 0x812e, lo: 0xa3, hi: 0xa3}, + {value: 0x8133, lo: 0xa4, hi: 0xa4}, + {value: 0x8133, lo: 0xa7, hi: 0xa8}, + {value: 0x812e, lo: 0xaa, hi: 0xaa}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + // Block 0xa, offset 0x49 + {value: 0x0000, lo: 0x0c}, + {value: 0x8120, lo: 0x91, hi: 0x91}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x812e, lo: 0xb1, hi: 0xb1}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb5, hi: 0xb6}, + {value: 0x812e, lo: 0xb7, hi: 0xb9}, + {value: 0x8133, lo: 0xba, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbc}, + {value: 0x8133, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbe, hi: 0xbe}, + {value: 0x8133, lo: 0xbf, hi: 0xbf}, + // Block 0xb, offset 0x56 + {value: 0x0005, lo: 0x07}, + {value: 0x8133, lo: 0x80, hi: 0x80}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x812e, lo: 0x82, hi: 0x83}, + {value: 0x812e, lo: 0x84, hi: 0x85}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x812e, lo: 0x88, hi: 0x89}, + {value: 0x8133, lo: 0x8a, hi: 0x8a}, + // Block 0xc, offset 0x5e + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0xab, hi: 0xb1}, + {value: 0x812e, lo: 0xb2, hi: 0xb2}, + {value: 0x8133, lo: 0xb3, hi: 0xb3}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0xd, offset 0x63 + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0x96, hi: 0x99}, + {value: 0x8133, lo: 0x9b, hi: 0xa3}, + {value: 0x8133, lo: 0xa5, hi: 0xa7}, + {value: 0x8133, lo: 0xa9, hi: 0xad}, + // Block 0xe, offset 0x68 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + // Block 0xf, offset 0x6a + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0x98, hi: 0x98}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + {value: 0x8133, lo: 0x9c, hi: 0x9f}, + // Block 0x10, offset 0x6e + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x4019, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x4021, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x4029, lo: 0xb4, hi: 0xb4}, + {value: 0x9903, lo: 0xbc, hi: 0xbc}, + // Block 0x11, offset 0x76 + {value: 0x0008, lo: 0x06}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8133, lo: 0x91, hi: 0x91}, + {value: 0x812e, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x93, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x94}, + {value: 0x465d, lo: 0x98, hi: 0x9f}, + // Block 0x12, offset 0x7d + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x13, offset 0x80 + {value: 0x0008, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2dd5, lo: 0x8b, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x469d, lo: 0x9c, hi: 0x9d}, + {value: 0x46ad, lo: 0x9f, hi: 0x9f}, + {value: 0x8133, lo: 0xbe, hi: 0xbe}, + // Block 0x14, offset 0x88 + {value: 0x0000, lo: 0x03}, + {value: 0x46d5, lo: 0xb3, hi: 0xb3}, + {value: 0x46dd, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x15, offset 0x8c + {value: 0x0008, lo: 0x03}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x46b5, lo: 0x99, hi: 0x9b}, + {value: 0x46cd, lo: 0x9e, hi: 0x9e}, + // Block 0x16, offset 0x90 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x17, offset 0x92 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + // Block 0x18, offset 0x94 + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2ded, lo: 0x88, hi: 0x88}, + {value: 0x2de5, lo: 0x8b, hi: 0x8b}, + {value: 0x2df5, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x46e5, lo: 0x9c, hi: 0x9c}, + {value: 0x46ed, lo: 0x9d, hi: 0x9d}, + // Block 0x19, offset 0x9d + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2dfd, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1a, offset 0xa1 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2e05, lo: 0x8a, hi: 0x8a}, + {value: 0x2e15, lo: 0x8b, hi: 0x8b}, + {value: 0x2e0d, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1b, offset 0xa8 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x4031, lo: 0x88, hi: 0x88}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8121, lo: 0x95, hi: 0x96}, + // Block 0x1c, offset 0xad + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1d, offset 0xb0 + {value: 0x0000, lo: 0x09}, + {value: 0x2e1d, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2e25, lo: 0x87, hi: 0x87}, + {value: 0x2e2d, lo: 0x88, hi: 0x88}, + {value: 0x3091, lo: 0x8a, hi: 0x8a}, + {value: 0x2f19, lo: 0x8b, hi: 0x8b}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1e, offset 0xba + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1f, offset 0xbd + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2e35, lo: 0x8a, hi: 0x8a}, + {value: 0x2e45, lo: 0x8b, hi: 0x8b}, + {value: 0x2e3d, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x20, offset 0xc4 + {value: 0x6ab3, lo: 0x07}, + {value: 0x9905, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4039, lo: 0x9a, hi: 0x9a}, + {value: 0x3099, lo: 0x9c, hi: 0x9c}, + {value: 0x2f24, lo: 0x9d, hi: 0x9d}, + {value: 0x2e4d, lo: 0x9e, hi: 0x9f}, + // Block 0x21, offset 0xcc + {value: 0x0000, lo: 0x02}, + {value: 0x8123, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x22, offset 0xcf + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0x88, hi: 0x8b}, + // Block 0x23, offset 0xd1 + {value: 0x0000, lo: 0x02}, + {value: 0x8125, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x24, offset 0xd4 + {value: 0x0000, lo: 0x01}, + {value: 0x8126, lo: 0x88, hi: 0x8b}, + // Block 0x25, offset 0xd6 + {value: 0x0000, lo: 0x04}, + {value: 0x812e, lo: 0x98, hi: 0x99}, + {value: 0x812e, lo: 0xb5, hi: 0xb5}, + {value: 0x812e, lo: 0xb7, hi: 0xb7}, + {value: 0x812c, lo: 0xb9, hi: 0xb9}, + // Block 0x26, offset 0xdb + {value: 0x0000, lo: 0x10}, + {value: 0x2774, lo: 0x83, hi: 0x83}, + {value: 0x277b, lo: 0x8d, hi: 0x8d}, + {value: 0x2782, lo: 0x92, hi: 0x92}, + {value: 0x2789, lo: 0x97, hi: 0x97}, + {value: 0x2790, lo: 0x9c, hi: 0x9c}, + {value: 0x276d, lo: 0xa9, hi: 0xa9}, + {value: 0x8127, lo: 0xb1, hi: 0xb1}, + {value: 0x8128, lo: 0xb2, hi: 0xb2}, + {value: 0x4bc5, lo: 0xb3, hi: 0xb3}, + {value: 0x8129, lo: 0xb4, hi: 0xb4}, + {value: 0x4bce, lo: 0xb5, hi: 0xb5}, + {value: 0x46f5, lo: 0xb6, hi: 0xb6}, + {value: 0x8200, lo: 0xb7, hi: 0xb7}, + {value: 0x46fd, lo: 0xb8, hi: 0xb8}, + {value: 0x8200, lo: 0xb9, hi: 0xb9}, + {value: 0x8128, lo: 0xba, hi: 0xbd}, + // Block 0x27, offset 0xec + {value: 0x0000, lo: 0x0b}, + {value: 0x8128, lo: 0x80, hi: 0x80}, + {value: 0x4bd7, lo: 0x81, hi: 0x81}, + {value: 0x8133, lo: 0x82, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0x86, hi: 0x87}, + {value: 0x279e, lo: 0x93, hi: 0x93}, + {value: 0x27a5, lo: 0x9d, hi: 0x9d}, + {value: 0x27ac, lo: 0xa2, hi: 0xa2}, + {value: 0x27b3, lo: 0xa7, hi: 0xa7}, + {value: 0x27ba, lo: 0xac, hi: 0xac}, + {value: 0x2797, lo: 0xb9, hi: 0xb9}, + // Block 0x28, offset 0xf8 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x86, hi: 0x86}, + // Block 0x29, offset 0xfa + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2e55, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x2a, offset 0x100 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + // Block 0x2b, offset 0x102 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x104 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x106 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x108 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x10a + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x10c + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x94, hi: 0x95}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x10f + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x112 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x114 + {value: 0x0004, lo: 0x02}, + {value: 0x812f, lo: 0xb9, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x117 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x97, hi: 0x97}, + {value: 0x812e, lo: 0x98, hi: 0x98}, + // Block 0x35, offset 0x11a + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + {value: 0x8133, lo: 0xb5, hi: 0xbc}, + {value: 0x812e, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x11e + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + {value: 0x812e, lo: 0xb5, hi: 0xba}, + {value: 0x8133, lo: 0xbb, hi: 0xbc}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbf, hi: 0xbf}, + // Block 0x37, offset 0x124 + {value: 0x0000, lo: 0x06}, + {value: 0x812e, lo: 0x80, hi: 0x80}, + {value: 0x8133, lo: 0x81, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x8133, lo: 0x85, hi: 0x89}, + {value: 0x812e, lo: 0x8a, hi: 0x8a}, + {value: 0x8133, lo: 0x8b, hi: 0x8e}, + // Block 0x38, offset 0x12b + {value: 0x0000, lo: 0x08}, + {value: 0x2e9d, lo: 0x80, hi: 0x80}, + {value: 0x2ea5, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2ead, lo: 0x83, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xab, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xac}, + {value: 0x8133, lo: 0xad, hi: 0xb3}, + // Block 0x39, offset 0x134 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xaa, hi: 0xab}, + // Block 0x3a, offset 0x136 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xa6, hi: 0xa6}, + {value: 0x8105, lo: 0xb2, hi: 0xb3}, + // Block 0x3b, offset 0x139 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x3c, offset 0x13b + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812e, lo: 0x95, hi: 0x99}, + {value: 0x8133, lo: 0x9a, hi: 0x9b}, + {value: 0x812e, lo: 0x9c, hi: 0x9f}, + {value: 0x8133, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x8133, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb8, hi: 0xb9}, + // Block 0x3d, offset 0x146 + {value: 0x0004, lo: 0x03}, + {value: 0x052a, lo: 0x80, hi: 0x81}, + {value: 0x8100, lo: 0x97, hi: 0x97}, + {value: 0x8100, lo: 0xbe, hi: 0xbe}, + // Block 0x3e, offset 0x14a + {value: 0x0000, lo: 0x0d}, + {value: 0x8133, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8133, lo: 0x9b, hi: 0x9c}, + {value: 0x8133, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8133, lo: 0xa7, hi: 0xa7}, + {value: 0x812e, lo: 0xa8, hi: 0xa8}, + {value: 0x8133, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xaf}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + // Block 0x3f, offset 0x158 + {value: 0x43bc, lo: 0x02}, + {value: 0x023c, lo: 0xa6, hi: 0xa6}, + {value: 0x0057, lo: 0xaa, hi: 0xab}, + // Block 0x40, offset 0x15b + {value: 0x0007, lo: 0x05}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3cfa, lo: 0x9a, hi: 0x9b}, + {value: 0x3d08, lo: 0xae, hi: 0xae}, + // Block 0x41, offset 0x161 + {value: 0x000e, lo: 0x05}, + {value: 0x3d0f, lo: 0x8d, hi: 0x8e}, + {value: 0x3d16, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + // Block 0x42, offset 0x167 + {value: 0x62c7, lo: 0x0a}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3d24, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3d2b, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3d32, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3d39, lo: 0xa4, hi: 0xa5}, + {value: 0x3d40, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x43, offset 0x172 + {value: 0x0007, lo: 0x03}, + {value: 0x3da9, lo: 0xa0, hi: 0xa1}, + {value: 0x3dd3, lo: 0xa2, hi: 0xa3}, + {value: 0x3dfd, lo: 0xaa, hi: 0xad}, + // Block 0x44, offset 0x176 + {value: 0x0004, lo: 0x01}, + {value: 0x0586, lo: 0xa9, hi: 0xaa}, + // Block 0x45, offset 0x178 + {value: 0x0000, lo: 0x01}, + {value: 0x461e, lo: 0x9c, hi: 0x9c}, + // Block 0x46, offset 0x17a + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xaf, hi: 0xb1}, + // Block 0x47, offset 0x17c + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x48, offset 0x17e + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa0, hi: 0xbf}, + // Block 0x49, offset 0x180 + {value: 0x0000, lo: 0x05}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x8134, lo: 0xac, hi: 0xac}, + {value: 0x812f, lo: 0xad, hi: 0xad}, + {value: 0x8130, lo: 0xae, hi: 0xaf}, + // Block 0x4a, offset 0x186 + {value: 0x0000, lo: 0x03}, + {value: 0x4be0, lo: 0xb3, hi: 0xb3}, + {value: 0x4be0, lo: 0xb5, hi: 0xb6}, + {value: 0x4be0, lo: 0xba, hi: 0xbf}, + // Block 0x4b, offset 0x18a + {value: 0x0000, lo: 0x01}, + {value: 0x4be0, lo: 0x8f, hi: 0xa3}, + // Block 0x4c, offset 0x18c + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xae, hi: 0xbe}, + // Block 0x4d, offset 0x18e + {value: 0x0000, lo: 0x07}, + {value: 0x8100, lo: 0x84, hi: 0x84}, + {value: 0x8100, lo: 0x87, hi: 0x87}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + {value: 0x8100, lo: 0x9e, hi: 0x9e}, + {value: 0x8100, lo: 0xa1, hi: 0xa1}, + {value: 0x8100, lo: 0xb2, hi: 0xb2}, + {value: 0x8100, lo: 0xbb, hi: 0xbb}, + // Block 0x4e, offset 0x196 + {value: 0x0000, lo: 0x03}, + {value: 0x8100, lo: 0x80, hi: 0x80}, + {value: 0x8100, lo: 0x8b, hi: 0x8b}, + {value: 0x8100, lo: 0x8e, hi: 0x8e}, + // Block 0x4f, offset 0x19a + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + {value: 0x8133, lo: 0xb4, hi: 0xbd}, + // Block 0x50, offset 0x19d + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9e, hi: 0x9f}, + // Block 0x51, offset 0x19f + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb1}, + // Block 0x52, offset 0x1a1 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xac, hi: 0xac}, + // Block 0x53, offset 0x1a4 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xa0, hi: 0xb1}, + // Block 0x54, offset 0x1a7 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xab, hi: 0xad}, + // Block 0x55, offset 0x1a9 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x93, hi: 0x93}, + // Block 0x56, offset 0x1ab + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb3, hi: 0xb3}, + // Block 0x57, offset 0x1ad + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + // Block 0x58, offset 0x1af + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb7, hi: 0xb8}, + {value: 0x8133, lo: 0xbe, hi: 0xbf}, + // Block 0x59, offset 0x1b5 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + // Block 0x5a, offset 0x1b8 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xad, hi: 0xad}, + // Block 0x5b, offset 0x1ba + {value: 0x0000, lo: 0x06}, + {value: 0xe500, lo: 0x80, hi: 0x80}, + {value: 0xc600, lo: 0x81, hi: 0x9b}, + {value: 0xe500, lo: 0x9c, hi: 0x9c}, + {value: 0xc600, lo: 0x9d, hi: 0xb7}, + {value: 0xe500, lo: 0xb8, hi: 0xb8}, + {value: 0xc600, lo: 0xb9, hi: 0xbf}, + // Block 0x5c, offset 0x1c1 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x93}, + {value: 0xe500, lo: 0x94, hi: 0x94}, + {value: 0xc600, lo: 0x95, hi: 0xaf}, + {value: 0xe500, lo: 0xb0, hi: 0xb0}, + {value: 0xc600, lo: 0xb1, hi: 0xbf}, + // Block 0x5d, offset 0x1c7 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8b}, + {value: 0xe500, lo: 0x8c, hi: 0x8c}, + {value: 0xc600, lo: 0x8d, hi: 0xa7}, + {value: 0xe500, lo: 0xa8, hi: 0xa8}, + {value: 0xc600, lo: 0xa9, hi: 0xbf}, + // Block 0x5e, offset 0x1cd + {value: 0x0000, lo: 0x07}, + {value: 0xc600, lo: 0x80, hi: 0x83}, + {value: 0xe500, lo: 0x84, hi: 0x84}, + {value: 0xc600, lo: 0x85, hi: 0x9f}, + {value: 0xe500, lo: 0xa0, hi: 0xa0}, + {value: 0xc600, lo: 0xa1, hi: 0xbb}, + {value: 0xe500, lo: 0xbc, hi: 0xbc}, + {value: 0xc600, lo: 0xbd, hi: 0xbf}, + // Block 0x5f, offset 0x1d5 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x97}, + {value: 0xe500, lo: 0x98, hi: 0x98}, + {value: 0xc600, lo: 0x99, hi: 0xb3}, + {value: 0xe500, lo: 0xb4, hi: 0xb4}, + {value: 0xc600, lo: 0xb5, hi: 0xbf}, + // Block 0x60, offset 0x1db + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8f}, + {value: 0xe500, lo: 0x90, hi: 0x90}, + {value: 0xc600, lo: 0x91, hi: 0xab}, + {value: 0xe500, lo: 0xac, hi: 0xac}, + {value: 0xc600, lo: 0xad, hi: 0xbf}, + // Block 0x61, offset 0x1e1 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + {value: 0xe500, lo: 0xa4, hi: 0xa4}, + {value: 0xc600, lo: 0xa5, hi: 0xbf}, + // Block 0x62, offset 0x1e7 + {value: 0x0000, lo: 0x03}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + // Block 0x63, offset 0x1eb + {value: 0x0006, lo: 0x0d}, + {value: 0x44d1, lo: 0x9d, hi: 0x9d}, + {value: 0x8116, lo: 0x9e, hi: 0x9e}, + {value: 0x4543, lo: 0x9f, hi: 0x9f}, + {value: 0x4531, lo: 0xaa, hi: 0xab}, + {value: 0x4635, lo: 0xac, hi: 0xac}, + {value: 0x463d, lo: 0xad, hi: 0xad}, + {value: 0x4489, lo: 0xae, hi: 0xb1}, + {value: 0x44a7, lo: 0xb2, hi: 0xb4}, + {value: 0x44bf, lo: 0xb5, hi: 0xb6}, + {value: 0x44cb, lo: 0xb8, hi: 0xb8}, + {value: 0x44d7, lo: 0xb9, hi: 0xbb}, + {value: 0x44ef, lo: 0xbc, hi: 0xbc}, + {value: 0x44f5, lo: 0xbe, hi: 0xbe}, + // Block 0x64, offset 0x1f9 + {value: 0x0006, lo: 0x08}, + {value: 0x44fb, lo: 0x80, hi: 0x81}, + {value: 0x4507, lo: 0x83, hi: 0x84}, + {value: 0x4519, lo: 0x86, hi: 0x89}, + {value: 0x453d, lo: 0x8a, hi: 0x8a}, + {value: 0x44b9, lo: 0x8b, hi: 0x8b}, + {value: 0x44a1, lo: 0x8c, hi: 0x8c}, + {value: 0x44e9, lo: 0x8d, hi: 0x8d}, + {value: 0x4513, lo: 0x8e, hi: 0x8e}, + // Block 0x65, offset 0x202 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0xa4, hi: 0xa5}, + {value: 0x8100, lo: 0xb0, hi: 0xb1}, + // Block 0x66, offset 0x205 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x9b, hi: 0x9d}, + {value: 0x8200, lo: 0x9e, hi: 0xa3}, + // Block 0x67, offset 0x208 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + // Block 0x68, offset 0x20a + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x99, hi: 0x99}, + {value: 0x8200, lo: 0xb2, hi: 0xb4}, + // Block 0x69, offset 0x20d + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xbc, hi: 0xbd}, + // Block 0x6a, offset 0x20f + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0xa0, hi: 0xa6}, + {value: 0x812e, lo: 0xa7, hi: 0xad}, + {value: 0x8133, lo: 0xae, hi: 0xaf}, + // Block 0x6b, offset 0x213 + {value: 0x0000, lo: 0x04}, + {value: 0x8100, lo: 0x89, hi: 0x8c}, + {value: 0x8100, lo: 0xb0, hi: 0xb2}, + {value: 0x8100, lo: 0xb4, hi: 0xb4}, + {value: 0x8100, lo: 0xb6, hi: 0xbf}, + // Block 0x6c, offset 0x218 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x81, hi: 0x8c}, + // Block 0x6d, offset 0x21a + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xb5, hi: 0xba}, + // Block 0x6e, offset 0x21c + {value: 0x0000, lo: 0x04}, + {value: 0x4be0, lo: 0x9e, hi: 0x9f}, + {value: 0x4be0, lo: 0xa3, hi: 0xa3}, + {value: 0x4be0, lo: 0xa5, hi: 0xa6}, + {value: 0x4be0, lo: 0xaa, hi: 0xaf}, + // Block 0x6f, offset 0x221 + {value: 0x0000, lo: 0x05}, + {value: 0x4be0, lo: 0x82, hi: 0x87}, + {value: 0x4be0, lo: 0x8a, hi: 0x8f}, + {value: 0x4be0, lo: 0x92, hi: 0x97}, + {value: 0x4be0, lo: 0x9a, hi: 0x9c}, + {value: 0x8100, lo: 0xa3, hi: 0xa3}, + // Block 0x70, offset 0x227 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0x71, offset 0x229 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xa0, hi: 0xa0}, + // Block 0x72, offset 0x22b + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb6, hi: 0xba}, + // Block 0x73, offset 0x22d + {value: 0x002d, lo: 0x05}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + {value: 0x8133, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x74, offset 0x233 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xa5, hi: 0xa5}, + {value: 0x812e, lo: 0xa6, hi: 0xa6}, + // Block 0x75, offset 0x236 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa4, hi: 0xa7}, + // Block 0x76, offset 0x238 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + // Block 0x77, offset 0x23a + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbf}, + // Block 0x78, offset 0x23c + {value: 0x0000, lo: 0x05}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x8133, lo: 0x88, hi: 0x8a}, + {value: 0x812e, lo: 0x8b, hi: 0x8b}, + {value: 0x8133, lo: 0x8c, hi: 0x8c}, + {value: 0x812e, lo: 0x8d, hi: 0x90}, + // Block 0x79, offset 0x242 + {value: 0x0005, lo: 0x03}, + {value: 0x8133, lo: 0x82, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + // Block 0x7a, offset 0x246 + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xb0, hi: 0xb0}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x7b, offset 0x24a + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4379, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4383, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x438d, lo: 0xab, hi: 0xab}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x7c, offset 0x252 + {value: 0x0000, lo: 0x06}, + {value: 0x8133, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2eb5, lo: 0xae, hi: 0xae}, + {value: 0x2ebf, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8105, lo: 0xb3, hi: 0xb4}, + // Block 0x7d, offset 0x259 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0x7e, offset 0x25c + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb5, hi: 0xb5}, + {value: 0x8103, lo: 0xb6, hi: 0xb6}, + // Block 0x7f, offset 0x25f + {value: 0x0002, lo: 0x01}, + {value: 0x8103, lo: 0xa9, hi: 0xaa}, + // Block 0x80, offset 0x261 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x81, offset 0x264 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2ec9, lo: 0x8b, hi: 0x8b}, + {value: 0x2ed3, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8133, lo: 0xa6, hi: 0xac}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + // Block 0x82, offset 0x26c + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x86, hi: 0x86}, + {value: 0x8133, lo: 0x9e, hi: 0x9e}, + // Block 0x83, offset 0x270 + {value: 0x6a23, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2ee7, lo: 0xbb, hi: 0xbb}, + {value: 0x2edd, lo: 0xbc, hi: 0xbd}, + {value: 0x2ef1, lo: 0xbe, hi: 0xbe}, + // Block 0x84, offset 0x277 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x85, offset 0x27a + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2efb, lo: 0xba, hi: 0xba}, + {value: 0x2f05, lo: 0xbb, hi: 0xbb}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x86, offset 0x280 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x80, hi: 0x80}, + // Block 0x87, offset 0x282 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x88, offset 0x285 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xab, hi: 0xab}, + // Block 0x89, offset 0x287 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb9, hi: 0xb9}, + {value: 0x8103, lo: 0xba, hi: 0xba}, + // Block 0x8a, offset 0x28a + {value: 0x0000, lo: 0x04}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb5, hi: 0xb5}, + {value: 0x2f0f, lo: 0xb8, hi: 0xb8}, + {value: 0x8105, lo: 0xbd, hi: 0xbe}, + // Block 0x8b, offset 0x28f + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x8c, offset 0x291 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + // Block 0x8d, offset 0x293 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x8e, offset 0x295 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x87, hi: 0x87}, + // Block 0x8f, offset 0x297 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x99, hi: 0x99}, + // Block 0x90, offset 0x299 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0x82, hi: 0x82}, + {value: 0x8105, lo: 0x84, hi: 0x85}, + // Block 0x91, offset 0x29c + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x97, hi: 0x97}, + // Block 0x92, offset 0x29e + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x81, hi: 0x82}, + // Block 0x93, offset 0x2a0 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x94, offset 0x2a2 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb6}, + // Block 0x95, offset 0x2a4 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb0, hi: 0xb1}, + // Block 0x96, offset 0x2a6 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x97, offset 0x2a8 + {value: 0x0000, lo: 0x0c}, + {value: 0x470d, lo: 0x9e, hi: 0x9e}, + {value: 0x4717, lo: 0x9f, hi: 0x9f}, + {value: 0x474b, lo: 0xa0, hi: 0xa0}, + {value: 0x4759, lo: 0xa1, hi: 0xa1}, + {value: 0x4767, lo: 0xa2, hi: 0xa2}, + {value: 0x4775, lo: 0xa3, hi: 0xa3}, + {value: 0x4783, lo: 0xa4, hi: 0xa4}, + {value: 0x812c, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8131, lo: 0xad, hi: 0xad}, + {value: 0x812c, lo: 0xae, hi: 0xb2}, + {value: 0x812e, lo: 0xbb, hi: 0xbf}, + // Block 0x98, offset 0x2b5 + {value: 0x0000, lo: 0x09}, + {value: 0x812e, lo: 0x80, hi: 0x82}, + {value: 0x8133, lo: 0x85, hi: 0x89}, + {value: 0x812e, lo: 0x8a, hi: 0x8b}, + {value: 0x8133, lo: 0xaa, hi: 0xad}, + {value: 0x4721, lo: 0xbb, hi: 0xbb}, + {value: 0x472b, lo: 0xbc, hi: 0xbc}, + {value: 0x4791, lo: 0xbd, hi: 0xbd}, + {value: 0x47ad, lo: 0xbe, hi: 0xbe}, + {value: 0x479f, lo: 0xbf, hi: 0xbf}, + // Block 0x99, offset 0x2bf + {value: 0x0000, lo: 0x01}, + {value: 0x47bb, lo: 0x80, hi: 0x80}, + // Block 0x9a, offset 0x2c1 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x82, hi: 0x84}, + // Block 0x9b, offset 0x2c3 + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0x80, hi: 0x86}, + {value: 0x8133, lo: 0x88, hi: 0x98}, + {value: 0x8133, lo: 0x9b, hi: 0xa1}, + {value: 0x8133, lo: 0xa3, hi: 0xa4}, + {value: 0x8133, lo: 0xa6, hi: 0xaa}, + // Block 0x9c, offset 0x2c9 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + // Block 0x9d, offset 0x2cb + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xae, hi: 0xae}, + // Block 0x9e, offset 0x2cd + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xac, hi: 0xaf}, + // Block 0x9f, offset 0x2cf + {value: 0x0000, lo: 0x03}, + {value: 0x8134, lo: 0xac, hi: 0xad}, + {value: 0x812e, lo: 0xae, hi: 0xae}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + // Block 0xa0, offset 0x2d3 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x90, hi: 0x96}, + // Block 0xa1, offset 0x2d5 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x84, hi: 0x89}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0xa2, offset 0x2d8 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x93, hi: 0x93}, +} + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfkcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfkcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfkcValues[c0] + } + i := nfkcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfkcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfkcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfkcValues[c0] + } + i := nfkcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// nfkcTrie. Total size: 19260 bytes (18.81 KiB). Checksum: 1a0bbc4c8c24da49. +type nfkcTrie struct{} + +func newNfkcTrie(i int) *nfkcTrie { + return &nfkcTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 95: + return uint16(nfkcValues[n<<6+uint32(b)]) + default: + n -= 95 + return uint16(nfkcSparse.lookup(n, b)) + } +} + +// nfkcValues: 97 blocks, 6208 entries, 12416 bytes +// The third block is the zero block. +var nfkcValues = [6208]uint16{ + // Block 0x0, offset 0x0 + 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, + // Block 0x1, offset 0x40 + 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, + 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, + 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, + 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, + 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, + 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, + 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, + 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, + 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, + 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x30b0, 0xc1: 0x30b5, 0xc2: 0x47c9, 0xc3: 0x30ba, 0xc4: 0x47d8, 0xc5: 0x47dd, + 0xc6: 0xa000, 0xc7: 0x47e7, 0xc8: 0x3123, 0xc9: 0x3128, 0xca: 0x47ec, 0xcb: 0x313c, + 0xcc: 0x31af, 0xcd: 0x31b4, 0xce: 0x31b9, 0xcf: 0x4800, 0xd1: 0x3245, + 0xd2: 0x3268, 0xd3: 0x326d, 0xd4: 0x480a, 0xd5: 0x480f, 0xd6: 0x481e, + 0xd8: 0xa000, 0xd9: 0x32f4, 0xda: 0x32f9, 0xdb: 0x32fe, 0xdc: 0x4850, 0xdd: 0x3376, + 0xe0: 0x33bc, 0xe1: 0x33c1, 0xe2: 0x485a, 0xe3: 0x33c6, + 0xe4: 0x4869, 0xe5: 0x486e, 0xe6: 0xa000, 0xe7: 0x4878, 0xe8: 0x342f, 0xe9: 0x3434, + 0xea: 0x487d, 0xeb: 0x3448, 0xec: 0x34c0, 0xed: 0x34c5, 0xee: 0x34ca, 0xef: 0x4891, + 0xf1: 0x3556, 0xf2: 0x3579, 0xf3: 0x357e, 0xf4: 0x489b, 0xf5: 0x48a0, + 0xf6: 0x48af, 0xf8: 0xa000, 0xf9: 0x360a, 0xfa: 0x360f, 0xfb: 0x3614, + 0xfc: 0x48e1, 0xfd: 0x3691, 0xff: 0x36aa, + // Block 0x4, offset 0x100 + 0x100: 0x30bf, 0x101: 0x33cb, 0x102: 0x47ce, 0x103: 0x485f, 0x104: 0x30dd, 0x105: 0x33e9, + 0x106: 0x30f1, 0x107: 0x33fd, 0x108: 0x30f6, 0x109: 0x3402, 0x10a: 0x30fb, 0x10b: 0x3407, + 0x10c: 0x3100, 0x10d: 0x340c, 0x10e: 0x310a, 0x10f: 0x3416, + 0x112: 0x47f1, 0x113: 0x4882, 0x114: 0x3132, 0x115: 0x343e, 0x116: 0x3137, 0x117: 0x3443, + 0x118: 0x3155, 0x119: 0x3461, 0x11a: 0x3146, 0x11b: 0x3452, 0x11c: 0x316e, 0x11d: 0x347a, + 0x11e: 0x3178, 0x11f: 0x3484, 0x120: 0x317d, 0x121: 0x3489, 0x122: 0x3187, 0x123: 0x3493, + 0x124: 0x318c, 0x125: 0x3498, 0x128: 0x31be, 0x129: 0x34cf, + 0x12a: 0x31c3, 0x12b: 0x34d4, 0x12c: 0x31c8, 0x12d: 0x34d9, 0x12e: 0x31eb, 0x12f: 0x34f7, + 0x130: 0x31cd, 0x132: 0x1a8a, 0x133: 0x1b17, 0x134: 0x31f5, 0x135: 0x3501, + 0x136: 0x3209, 0x137: 0x351a, 0x139: 0x3213, 0x13a: 0x3524, 0x13b: 0x321d, + 0x13c: 0x352e, 0x13d: 0x3218, 0x13e: 0x3529, 0x13f: 0x1cdc, + // Block 0x5, offset 0x140 + 0x140: 0x1d64, 0x143: 0x3240, 0x144: 0x3551, 0x145: 0x3259, + 0x146: 0x356a, 0x147: 0x324f, 0x148: 0x3560, 0x149: 0x1d8c, + 0x14c: 0x4814, 0x14d: 0x48a5, 0x14e: 0x3272, 0x14f: 0x3583, 0x150: 0x327c, 0x151: 0x358d, + 0x154: 0x329a, 0x155: 0x35ab, 0x156: 0x32b3, 0x157: 0x35c4, + 0x158: 0x32a4, 0x159: 0x35b5, 0x15a: 0x4837, 0x15b: 0x48c8, 0x15c: 0x32bd, 0x15d: 0x35ce, + 0x15e: 0x32cc, 0x15f: 0x35dd, 0x160: 0x483c, 0x161: 0x48cd, 0x162: 0x32e5, 0x163: 0x35fb, + 0x164: 0x32d6, 0x165: 0x35ec, 0x168: 0x4846, 0x169: 0x48d7, + 0x16a: 0x484b, 0x16b: 0x48dc, 0x16c: 0x3303, 0x16d: 0x3619, 0x16e: 0x330d, 0x16f: 0x3623, + 0x170: 0x3312, 0x171: 0x3628, 0x172: 0x3330, 0x173: 0x3646, 0x174: 0x3353, 0x175: 0x3669, + 0x176: 0x337b, 0x177: 0x3696, 0x178: 0x338f, 0x179: 0x339e, 0x17a: 0x36be, 0x17b: 0x33a8, + 0x17c: 0x36c8, 0x17d: 0x33ad, 0x17e: 0x36cd, 0x17f: 0x00a7, + // Block 0x6, offset 0x180 + 0x184: 0x2f2f, 0x185: 0x2f35, + 0x186: 0x2f3b, 0x187: 0x1a9f, 0x188: 0x1aa2, 0x189: 0x1b38, 0x18a: 0x1ab7, 0x18b: 0x1aba, + 0x18c: 0x1b6e, 0x18d: 0x30c9, 0x18e: 0x33d5, 0x18f: 0x31d7, 0x190: 0x34e3, 0x191: 0x3281, + 0x192: 0x3592, 0x193: 0x3317, 0x194: 0x362d, 0x195: 0x3b10, 0x196: 0x3c9f, 0x197: 0x3b09, + 0x198: 0x3c98, 0x199: 0x3b17, 0x19a: 0x3ca6, 0x19b: 0x3b02, 0x19c: 0x3c91, + 0x19e: 0x39f1, 0x19f: 0x3b80, 0x1a0: 0x39ea, 0x1a1: 0x3b79, 0x1a2: 0x36f4, 0x1a3: 0x3706, + 0x1a6: 0x3182, 0x1a7: 0x348e, 0x1a8: 0x31ff, 0x1a9: 0x3510, + 0x1aa: 0x482d, 0x1ab: 0x48be, 0x1ac: 0x3ad1, 0x1ad: 0x3c60, 0x1ae: 0x3718, 0x1af: 0x371e, + 0x1b0: 0x3506, 0x1b1: 0x1a6f, 0x1b2: 0x1a72, 0x1b3: 0x1aff, 0x1b4: 0x3169, 0x1b5: 0x3475, + 0x1b8: 0x323b, 0x1b9: 0x354c, 0x1ba: 0x39f8, 0x1bb: 0x3b87, + 0x1bc: 0x36ee, 0x1bd: 0x3700, 0x1be: 0x36fa, 0x1bf: 0x370c, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x30ce, 0x1c1: 0x33da, 0x1c2: 0x30d3, 0x1c3: 0x33df, 0x1c4: 0x314b, 0x1c5: 0x3457, + 0x1c6: 0x3150, 0x1c7: 0x345c, 0x1c8: 0x31dc, 0x1c9: 0x34e8, 0x1ca: 0x31e1, 0x1cb: 0x34ed, + 0x1cc: 0x3286, 0x1cd: 0x3597, 0x1ce: 0x328b, 0x1cf: 0x359c, 0x1d0: 0x32a9, 0x1d1: 0x35ba, + 0x1d2: 0x32ae, 0x1d3: 0x35bf, 0x1d4: 0x331c, 0x1d5: 0x3632, 0x1d6: 0x3321, 0x1d7: 0x3637, + 0x1d8: 0x32c7, 0x1d9: 0x35d8, 0x1da: 0x32e0, 0x1db: 0x35f6, + 0x1de: 0x319b, 0x1df: 0x34a7, + 0x1e6: 0x47d3, 0x1e7: 0x4864, 0x1e8: 0x47fb, 0x1e9: 0x488c, + 0x1ea: 0x3aa0, 0x1eb: 0x3c2f, 0x1ec: 0x3a7d, 0x1ed: 0x3c0c, 0x1ee: 0x4819, 0x1ef: 0x48aa, + 0x1f0: 0x3a99, 0x1f1: 0x3c28, 0x1f2: 0x3385, 0x1f3: 0x36a0, + // Block 0x8, offset 0x200 + 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, + 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, + 0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933, + 0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e, + 0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e, + 0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e, + 0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e, + 0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e, + 0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e, + 0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133, + // Block 0x9, offset 0x240 + 0x240: 0x4aef, 0x241: 0x4af4, 0x242: 0x9933, 0x243: 0x4af9, 0x244: 0x4bb2, 0x245: 0x9937, + 0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133, + 0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133, + 0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133, + 0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136, + 0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133, + 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, + 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, + 0x274: 0x01ee, + 0x27a: 0x43e6, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x439b, 0x285: 0x45bc, + 0x286: 0x372a, 0x287: 0x00ce, 0x288: 0x3748, 0x289: 0x3754, 0x28a: 0x3766, + 0x28c: 0x3784, 0x28e: 0x3796, 0x28f: 0x37b4, 0x290: 0x3f49, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x3778, 0x2ab: 0x37a8, 0x2ac: 0x493f, 0x2ad: 0x37d8, 0x2ae: 0x4969, 0x2af: 0x37ea, + 0x2b0: 0x3fb1, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c1: 0xa000, 0x2c5: 0xa000, + 0x2c9: 0xa000, 0x2ca: 0x4981, 0x2cb: 0x499f, + 0x2cc: 0x3808, 0x2cd: 0x3820, 0x2ce: 0x49b7, 0x2d0: 0x0242, 0x2d1: 0x0254, + 0x2d2: 0x0230, 0x2d3: 0x444d, 0x2d4: 0x4453, 0x2d5: 0x027e, 0x2d6: 0x026c, + 0x2f0: 0x025a, 0x2f1: 0x026f, 0x2f2: 0x0272, 0x2f4: 0x020c, 0x2f5: 0x024b, + 0x2f9: 0x022a, + // Block 0xc, offset 0x300 + 0x300: 0x3862, 0x301: 0x386e, 0x303: 0x385c, + 0x306: 0xa000, 0x307: 0x384a, + 0x30c: 0x389e, 0x30d: 0x3886, 0x30e: 0x38b0, 0x310: 0xa000, + 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, + 0x318: 0xa000, 0x319: 0x3892, 0x31a: 0xa000, + 0x31e: 0xa000, 0x323: 0xa000, + 0x327: 0xa000, + 0x32b: 0xa000, 0x32d: 0xa000, + 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, + 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x3916, 0x33a: 0xa000, + 0x33e: 0xa000, + // Block 0xd, offset 0x340 + 0x341: 0x3874, 0x342: 0x38f8, + 0x350: 0x3850, 0x351: 0x38d4, + 0x352: 0x3856, 0x353: 0x38da, 0x356: 0x3868, 0x357: 0x38ec, + 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x396a, 0x35b: 0x3970, 0x35c: 0x387a, 0x35d: 0x38fe, + 0x35e: 0x3880, 0x35f: 0x3904, 0x362: 0x388c, 0x363: 0x3910, + 0x364: 0x3898, 0x365: 0x391c, 0x366: 0x38a4, 0x367: 0x3928, 0x368: 0xa000, 0x369: 0xa000, + 0x36a: 0x3976, 0x36b: 0x397c, 0x36c: 0x38ce, 0x36d: 0x3952, 0x36e: 0x38aa, 0x36f: 0x392e, + 0x370: 0x38b6, 0x371: 0x393a, 0x372: 0x38bc, 0x373: 0x3940, 0x374: 0x38c2, 0x375: 0x3946, + 0x378: 0x38c8, 0x379: 0x394c, + // Block 0xe, offset 0x380 + 0x387: 0x1e91, + 0x391: 0x812e, + 0x392: 0x8133, 0x393: 0x8133, 0x394: 0x8133, 0x395: 0x8133, 0x396: 0x812e, 0x397: 0x8133, + 0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x812f, 0x39b: 0x812e, 0x39c: 0x8133, 0x39d: 0x8133, + 0x39e: 0x8133, 0x39f: 0x8133, 0x3a0: 0x8133, 0x3a1: 0x8133, 0x3a2: 0x812e, 0x3a3: 0x812e, + 0x3a4: 0x812e, 0x3a5: 0x812e, 0x3a6: 0x812e, 0x3a7: 0x812e, 0x3a8: 0x8133, 0x3a9: 0x8133, + 0x3aa: 0x812e, 0x3ab: 0x8133, 0x3ac: 0x8133, 0x3ad: 0x812f, 0x3ae: 0x8132, 0x3af: 0x8133, + 0x3b0: 0x8106, 0x3b1: 0x8107, 0x3b2: 0x8108, 0x3b3: 0x8109, 0x3b4: 0x810a, 0x3b5: 0x810b, + 0x3b6: 0x810c, 0x3b7: 0x810d, 0x3b8: 0x810e, 0x3b9: 0x810f, 0x3ba: 0x810f, 0x3bb: 0x8110, + 0x3bc: 0x8111, 0x3bd: 0x8112, 0x3bf: 0x8113, + // Block 0xf, offset 0x3c0 + 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8117, + 0x3cc: 0x8118, 0x3cd: 0x8119, 0x3ce: 0x811a, 0x3cf: 0x811b, 0x3d0: 0x811c, 0x3d1: 0x811d, + 0x3d2: 0x811e, 0x3d3: 0x9933, 0x3d4: 0x9933, 0x3d5: 0x992e, 0x3d6: 0x812e, 0x3d7: 0x8133, + 0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x812e, 0x3dd: 0x8133, + 0x3de: 0x8133, 0x3df: 0x812e, + 0x3f0: 0x811f, 0x3f5: 0x1eb4, + 0x3f6: 0x2143, 0x3f7: 0x217f, 0x3f8: 0x217a, + // Block 0x10, offset 0x400 + 0x40a: 0x8133, 0x40b: 0x8133, + 0x40c: 0x8133, 0x40d: 0x8133, 0x40e: 0x8133, 0x40f: 0x812e, 0x410: 0x812e, 0x411: 0x812e, + 0x412: 0x812e, 0x413: 0x812e, 0x414: 0x8133, 0x415: 0x8133, 0x416: 0x8133, 0x417: 0x8133, + 0x418: 0x8133, 0x419: 0x8133, 0x41a: 0x8133, 0x41b: 0x8133, 0x41c: 0x8133, 0x41d: 0x8133, + 0x41e: 0x8133, 0x41f: 0x8133, 0x420: 0x8133, 0x421: 0x8133, 0x423: 0x812e, + 0x424: 0x8133, 0x425: 0x8133, 0x426: 0x812e, 0x427: 0x8133, 0x428: 0x8133, 0x429: 0x812e, + 0x42a: 0x8133, 0x42b: 0x8133, 0x42c: 0x8133, 0x42d: 0x812e, 0x42e: 0x812e, 0x42f: 0x812e, + 0x430: 0x8117, 0x431: 0x8118, 0x432: 0x8119, 0x433: 0x8133, 0x434: 0x8133, 0x435: 0x8133, + 0x436: 0x812e, 0x437: 0x8133, 0x438: 0x8133, 0x439: 0x812e, 0x43a: 0x812e, 0x43b: 0x8133, + 0x43c: 0x8133, 0x43d: 0x8133, 0x43e: 0x8133, 0x43f: 0x8133, + // Block 0x11, offset 0x440 + 0x445: 0xa000, + 0x446: 0x2e5d, 0x447: 0xa000, 0x448: 0x2e65, 0x449: 0xa000, 0x44a: 0x2e6d, 0x44b: 0xa000, + 0x44c: 0x2e75, 0x44d: 0xa000, 0x44e: 0x2e7d, 0x451: 0xa000, + 0x452: 0x2e85, + 0x474: 0x8103, 0x475: 0x9900, + 0x47a: 0xa000, 0x47b: 0x2e8d, + 0x47c: 0xa000, 0x47d: 0x2e95, 0x47e: 0xa000, 0x47f: 0xa000, + // Block 0x12, offset 0x480 + 0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x0104, 0x485: 0x0107, + 0x486: 0x0506, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x011f, 0x48b: 0x0122, + 0x48c: 0x0125, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e6, + 0x492: 0x009f, 0x493: 0x0110, 0x494: 0x050a, 0x495: 0x050e, 0x496: 0x00a1, 0x497: 0x00a9, + 0x498: 0x00ab, 0x499: 0x0516, 0x49a: 0x015b, 0x49b: 0x00ad, 0x49c: 0x051a, 0x49d: 0x0242, + 0x49e: 0x0245, 0x49f: 0x0248, 0x4a0: 0x027e, 0x4a1: 0x0281, 0x4a2: 0x0093, 0x4a3: 0x00a5, + 0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x0242, 0x4a7: 0x0245, 0x4a8: 0x026f, 0x4a9: 0x027e, + 0x4aa: 0x0281, + 0x4b8: 0x02b4, + // Block 0x13, offset 0x4c0 + 0x4db: 0x010a, 0x4dc: 0x0087, 0x4dd: 0x0113, + 0x4de: 0x00d7, 0x4df: 0x0125, 0x4e0: 0x008d, 0x4e1: 0x012b, 0x4e2: 0x0131, 0x4e3: 0x013d, + 0x4e4: 0x0146, 0x4e5: 0x0149, 0x4e6: 0x014c, 0x4e7: 0x051e, 0x4e8: 0x01c7, 0x4e9: 0x0155, + 0x4ea: 0x0522, 0x4eb: 0x01ca, 0x4ec: 0x0161, 0x4ed: 0x015e, 0x4ee: 0x0164, 0x4ef: 0x0167, + 0x4f0: 0x016a, 0x4f1: 0x016d, 0x4f2: 0x0176, 0x4f3: 0x018e, 0x4f4: 0x0191, 0x4f5: 0x00f2, + 0x4f6: 0x019a, 0x4f7: 0x019d, 0x4f8: 0x0512, 0x4f9: 0x01a0, 0x4fa: 0x01a3, 0x4fb: 0x00b5, + 0x4fc: 0x01af, 0x4fd: 0x01b2, 0x4fe: 0x01b5, 0x4ff: 0x0254, + // Block 0x14, offset 0x500 + 0x500: 0x8133, 0x501: 0x8133, 0x502: 0x812e, 0x503: 0x8133, 0x504: 0x8133, 0x505: 0x8133, + 0x506: 0x8133, 0x507: 0x8133, 0x508: 0x8133, 0x509: 0x8133, 0x50a: 0x812e, 0x50b: 0x8133, + 0x50c: 0x8133, 0x50d: 0x8136, 0x50e: 0x812b, 0x50f: 0x812e, 0x510: 0x812a, 0x511: 0x8133, + 0x512: 0x8133, 0x513: 0x8133, 0x514: 0x8133, 0x515: 0x8133, 0x516: 0x8133, 0x517: 0x8133, + 0x518: 0x8133, 0x519: 0x8133, 0x51a: 0x8133, 0x51b: 0x8133, 0x51c: 0x8133, 0x51d: 0x8133, + 0x51e: 0x8133, 0x51f: 0x8133, 0x520: 0x8133, 0x521: 0x8133, 0x522: 0x8133, 0x523: 0x8133, + 0x524: 0x8133, 0x525: 0x8133, 0x526: 0x8133, 0x527: 0x8133, 0x528: 0x8133, 0x529: 0x8133, + 0x52a: 0x8133, 0x52b: 0x8133, 0x52c: 0x8133, 0x52d: 0x8133, 0x52e: 0x8133, 0x52f: 0x8133, + 0x530: 0x8133, 0x531: 0x8133, 0x532: 0x8133, 0x533: 0x8133, 0x534: 0x8133, 0x535: 0x8133, + 0x536: 0x8134, 0x537: 0x8132, 0x538: 0x8132, 0x539: 0x812e, 0x53a: 0x812d, 0x53b: 0x8133, + 0x53c: 0x8135, 0x53d: 0x812e, 0x53e: 0x8133, 0x53f: 0x812e, + // Block 0x15, offset 0x540 + 0x540: 0x30d8, 0x541: 0x33e4, 0x542: 0x30e2, 0x543: 0x33ee, 0x544: 0x30e7, 0x545: 0x33f3, + 0x546: 0x30ec, 0x547: 0x33f8, 0x548: 0x3a0d, 0x549: 0x3b9c, 0x54a: 0x3105, 0x54b: 0x3411, + 0x54c: 0x310f, 0x54d: 0x341b, 0x54e: 0x311e, 0x54f: 0x342a, 0x550: 0x3114, 0x551: 0x3420, + 0x552: 0x3119, 0x553: 0x3425, 0x554: 0x3a30, 0x555: 0x3bbf, 0x556: 0x3a37, 0x557: 0x3bc6, + 0x558: 0x315a, 0x559: 0x3466, 0x55a: 0x315f, 0x55b: 0x346b, 0x55c: 0x3a45, 0x55d: 0x3bd4, + 0x55e: 0x3164, 0x55f: 0x3470, 0x560: 0x3173, 0x561: 0x347f, 0x562: 0x3191, 0x563: 0x349d, + 0x564: 0x31a0, 0x565: 0x34ac, 0x566: 0x3196, 0x567: 0x34a2, 0x568: 0x31a5, 0x569: 0x34b1, + 0x56a: 0x31aa, 0x56b: 0x34b6, 0x56c: 0x31f0, 0x56d: 0x34fc, 0x56e: 0x3a4c, 0x56f: 0x3bdb, + 0x570: 0x31fa, 0x571: 0x350b, 0x572: 0x3204, 0x573: 0x3515, 0x574: 0x320e, 0x575: 0x351f, + 0x576: 0x4805, 0x577: 0x4896, 0x578: 0x3a53, 0x579: 0x3be2, 0x57a: 0x3227, 0x57b: 0x3538, + 0x57c: 0x3222, 0x57d: 0x3533, 0x57e: 0x322c, 0x57f: 0x353d, + // Block 0x16, offset 0x580 + 0x580: 0x3231, 0x581: 0x3542, 0x582: 0x3236, 0x583: 0x3547, 0x584: 0x324a, 0x585: 0x355b, + 0x586: 0x3254, 0x587: 0x3565, 0x588: 0x3263, 0x589: 0x3574, 0x58a: 0x325e, 0x58b: 0x356f, + 0x58c: 0x3a76, 0x58d: 0x3c05, 0x58e: 0x3a84, 0x58f: 0x3c13, 0x590: 0x3a8b, 0x591: 0x3c1a, + 0x592: 0x3a92, 0x593: 0x3c21, 0x594: 0x3290, 0x595: 0x35a1, 0x596: 0x3295, 0x597: 0x35a6, + 0x598: 0x329f, 0x599: 0x35b0, 0x59a: 0x4832, 0x59b: 0x48c3, 0x59c: 0x3ad8, 0x59d: 0x3c67, + 0x59e: 0x32b8, 0x59f: 0x35c9, 0x5a0: 0x32c2, 0x5a1: 0x35d3, 0x5a2: 0x4841, 0x5a3: 0x48d2, + 0x5a4: 0x3adf, 0x5a5: 0x3c6e, 0x5a6: 0x3ae6, 0x5a7: 0x3c75, 0x5a8: 0x3aed, 0x5a9: 0x3c7c, + 0x5aa: 0x32d1, 0x5ab: 0x35e2, 0x5ac: 0x32db, 0x5ad: 0x35f1, 0x5ae: 0x32ef, 0x5af: 0x3605, + 0x5b0: 0x32ea, 0x5b1: 0x3600, 0x5b2: 0x332b, 0x5b3: 0x3641, 0x5b4: 0x333a, 0x5b5: 0x3650, + 0x5b6: 0x3335, 0x5b7: 0x364b, 0x5b8: 0x3af4, 0x5b9: 0x3c83, 0x5ba: 0x3afb, 0x5bb: 0x3c8a, + 0x5bc: 0x333f, 0x5bd: 0x3655, 0x5be: 0x3344, 0x5bf: 0x365a, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x3349, 0x5c1: 0x365f, 0x5c2: 0x334e, 0x5c3: 0x3664, 0x5c4: 0x335d, 0x5c5: 0x3673, + 0x5c6: 0x3358, 0x5c7: 0x366e, 0x5c8: 0x3362, 0x5c9: 0x367d, 0x5ca: 0x3367, 0x5cb: 0x3682, + 0x5cc: 0x336c, 0x5cd: 0x3687, 0x5ce: 0x338a, 0x5cf: 0x36a5, 0x5d0: 0x33a3, 0x5d1: 0x36c3, + 0x5d2: 0x33b2, 0x5d3: 0x36d2, 0x5d4: 0x33b7, 0x5d5: 0x36d7, 0x5d6: 0x34bb, 0x5d7: 0x35e7, + 0x5d8: 0x3678, 0x5d9: 0x36b4, 0x5da: 0x1d10, 0x5db: 0x4418, + 0x5e0: 0x47e2, 0x5e1: 0x4873, 0x5e2: 0x30c4, 0x5e3: 0x33d0, + 0x5e4: 0x39b9, 0x5e5: 0x3b48, 0x5e6: 0x39b2, 0x5e7: 0x3b41, 0x5e8: 0x39c7, 0x5e9: 0x3b56, + 0x5ea: 0x39c0, 0x5eb: 0x3b4f, 0x5ec: 0x39ff, 0x5ed: 0x3b8e, 0x5ee: 0x39d5, 0x5ef: 0x3b64, + 0x5f0: 0x39ce, 0x5f1: 0x3b5d, 0x5f2: 0x39e3, 0x5f3: 0x3b72, 0x5f4: 0x39dc, 0x5f5: 0x3b6b, + 0x5f6: 0x3a06, 0x5f7: 0x3b95, 0x5f8: 0x47f6, 0x5f9: 0x4887, 0x5fa: 0x3141, 0x5fb: 0x344d, + 0x5fc: 0x312d, 0x5fd: 0x3439, 0x5fe: 0x3a1b, 0x5ff: 0x3baa, + // Block 0x18, offset 0x600 + 0x600: 0x3a14, 0x601: 0x3ba3, 0x602: 0x3a29, 0x603: 0x3bb8, 0x604: 0x3a22, 0x605: 0x3bb1, + 0x606: 0x3a3e, 0x607: 0x3bcd, 0x608: 0x31d2, 0x609: 0x34de, 0x60a: 0x31e6, 0x60b: 0x34f2, + 0x60c: 0x4828, 0x60d: 0x48b9, 0x60e: 0x3277, 0x60f: 0x3588, 0x610: 0x3a61, 0x611: 0x3bf0, + 0x612: 0x3a5a, 0x613: 0x3be9, 0x614: 0x3a6f, 0x615: 0x3bfe, 0x616: 0x3a68, 0x617: 0x3bf7, + 0x618: 0x3aca, 0x619: 0x3c59, 0x61a: 0x3aae, 0x61b: 0x3c3d, 0x61c: 0x3aa7, 0x61d: 0x3c36, + 0x61e: 0x3abc, 0x61f: 0x3c4b, 0x620: 0x3ab5, 0x621: 0x3c44, 0x622: 0x3ac3, 0x623: 0x3c52, + 0x624: 0x3326, 0x625: 0x363c, 0x626: 0x3308, 0x627: 0x361e, 0x628: 0x3b25, 0x629: 0x3cb4, + 0x62a: 0x3b1e, 0x62b: 0x3cad, 0x62c: 0x3b33, 0x62d: 0x3cc2, 0x62e: 0x3b2c, 0x62f: 0x3cbb, + 0x630: 0x3b3a, 0x631: 0x3cc9, 0x632: 0x3371, 0x633: 0x368c, 0x634: 0x3399, 0x635: 0x36b9, + 0x636: 0x3394, 0x637: 0x36af, 0x638: 0x3380, 0x639: 0x369b, + // Block 0x19, offset 0x640 + 0x640: 0x4945, 0x641: 0x494b, 0x642: 0x4a5f, 0x643: 0x4a77, 0x644: 0x4a67, 0x645: 0x4a7f, + 0x646: 0x4a6f, 0x647: 0x4a87, 0x648: 0x48eb, 0x649: 0x48f1, 0x64a: 0x49cf, 0x64b: 0x49e7, + 0x64c: 0x49d7, 0x64d: 0x49ef, 0x64e: 0x49df, 0x64f: 0x49f7, 0x650: 0x4957, 0x651: 0x495d, + 0x652: 0x3ef9, 0x653: 0x3f09, 0x654: 0x3f01, 0x655: 0x3f11, + 0x658: 0x48f7, 0x659: 0x48fd, 0x65a: 0x3e29, 0x65b: 0x3e39, 0x65c: 0x3e31, 0x65d: 0x3e41, + 0x660: 0x496f, 0x661: 0x4975, 0x662: 0x4a8f, 0x663: 0x4aa7, + 0x664: 0x4a97, 0x665: 0x4aaf, 0x666: 0x4a9f, 0x667: 0x4ab7, 0x668: 0x4903, 0x669: 0x4909, + 0x66a: 0x49ff, 0x66b: 0x4a17, 0x66c: 0x4a07, 0x66d: 0x4a1f, 0x66e: 0x4a0f, 0x66f: 0x4a27, + 0x670: 0x4987, 0x671: 0x498d, 0x672: 0x3f59, 0x673: 0x3f71, 0x674: 0x3f61, 0x675: 0x3f79, + 0x676: 0x3f69, 0x677: 0x3f81, 0x678: 0x490f, 0x679: 0x4915, 0x67a: 0x3e59, 0x67b: 0x3e71, + 0x67c: 0x3e61, 0x67d: 0x3e79, 0x67e: 0x3e69, 0x67f: 0x3e81, + // Block 0x1a, offset 0x680 + 0x680: 0x4993, 0x681: 0x4999, 0x682: 0x3f89, 0x683: 0x3f99, 0x684: 0x3f91, 0x685: 0x3fa1, + 0x688: 0x491b, 0x689: 0x4921, 0x68a: 0x3e89, 0x68b: 0x3e99, + 0x68c: 0x3e91, 0x68d: 0x3ea1, 0x690: 0x49a5, 0x691: 0x49ab, + 0x692: 0x3fc1, 0x693: 0x3fd9, 0x694: 0x3fc9, 0x695: 0x3fe1, 0x696: 0x3fd1, 0x697: 0x3fe9, + 0x699: 0x4927, 0x69b: 0x3ea9, 0x69d: 0x3eb1, + 0x69f: 0x3eb9, 0x6a0: 0x49bd, 0x6a1: 0x49c3, 0x6a2: 0x4abf, 0x6a3: 0x4ad7, + 0x6a4: 0x4ac7, 0x6a5: 0x4adf, 0x6a6: 0x4acf, 0x6a7: 0x4ae7, 0x6a8: 0x492d, 0x6a9: 0x4933, + 0x6aa: 0x4a2f, 0x6ab: 0x4a47, 0x6ac: 0x4a37, 0x6ad: 0x4a4f, 0x6ae: 0x4a3f, 0x6af: 0x4a57, + 0x6b0: 0x4939, 0x6b1: 0x445f, 0x6b2: 0x37d2, 0x6b3: 0x4465, 0x6b4: 0x4963, 0x6b5: 0x446b, + 0x6b6: 0x37e4, 0x6b7: 0x4471, 0x6b8: 0x3802, 0x6b9: 0x4477, 0x6ba: 0x381a, 0x6bb: 0x447d, + 0x6bc: 0x49b1, 0x6bd: 0x4483, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3ee1, 0x6c1: 0x3ee9, 0x6c2: 0x42c5, 0x6c3: 0x42e3, 0x6c4: 0x42cf, 0x6c5: 0x42ed, + 0x6c6: 0x42d9, 0x6c7: 0x42f7, 0x6c8: 0x3e19, 0x6c9: 0x3e21, 0x6ca: 0x4211, 0x6cb: 0x422f, + 0x6cc: 0x421b, 0x6cd: 0x4239, 0x6ce: 0x4225, 0x6cf: 0x4243, 0x6d0: 0x3f29, 0x6d1: 0x3f31, + 0x6d2: 0x4301, 0x6d3: 0x431f, 0x6d4: 0x430b, 0x6d5: 0x4329, 0x6d6: 0x4315, 0x6d7: 0x4333, + 0x6d8: 0x3e49, 0x6d9: 0x3e51, 0x6da: 0x424d, 0x6db: 0x426b, 0x6dc: 0x4257, 0x6dd: 0x4275, + 0x6de: 0x4261, 0x6df: 0x427f, 0x6e0: 0x4001, 0x6e1: 0x4009, 0x6e2: 0x433d, 0x6e3: 0x435b, + 0x6e4: 0x4347, 0x6e5: 0x4365, 0x6e6: 0x4351, 0x6e7: 0x436f, 0x6e8: 0x3ec1, 0x6e9: 0x3ec9, + 0x6ea: 0x4289, 0x6eb: 0x42a7, 0x6ec: 0x4293, 0x6ed: 0x42b1, 0x6ee: 0x429d, 0x6ef: 0x42bb, + 0x6f0: 0x37c6, 0x6f1: 0x37c0, 0x6f2: 0x3ed1, 0x6f3: 0x37cc, 0x6f4: 0x3ed9, + 0x6f6: 0x4951, 0x6f7: 0x3ef1, 0x6f8: 0x3736, 0x6f9: 0x3730, 0x6fa: 0x3724, 0x6fb: 0x442f, + 0x6fc: 0x373c, 0x6fd: 0x43c8, 0x6fe: 0x0257, 0x6ff: 0x43c8, + // Block 0x1c, offset 0x700 + 0x700: 0x43e1, 0x701: 0x45c3, 0x702: 0x3f19, 0x703: 0x37de, 0x704: 0x3f21, + 0x706: 0x497b, 0x707: 0x3f39, 0x708: 0x3742, 0x709: 0x4435, 0x70a: 0x374e, 0x70b: 0x443b, + 0x70c: 0x375a, 0x70d: 0x45ca, 0x70e: 0x45d1, 0x70f: 0x45d8, 0x710: 0x37f6, 0x711: 0x37f0, + 0x712: 0x3f41, 0x713: 0x4625, 0x716: 0x37fc, 0x717: 0x3f51, + 0x718: 0x3772, 0x719: 0x376c, 0x71a: 0x3760, 0x71b: 0x4441, 0x71d: 0x45df, + 0x71e: 0x45e6, 0x71f: 0x45ed, 0x720: 0x382c, 0x721: 0x3826, 0x722: 0x3fa9, 0x723: 0x462d, + 0x724: 0x380e, 0x725: 0x3814, 0x726: 0x3832, 0x727: 0x3fb9, 0x728: 0x37a2, 0x729: 0x379c, + 0x72a: 0x3790, 0x72b: 0x444d, 0x72c: 0x378a, 0x72d: 0x45b5, 0x72e: 0x45bc, 0x72f: 0x0081, + 0x732: 0x3ff1, 0x733: 0x3838, 0x734: 0x3ff9, + 0x736: 0x49c9, 0x737: 0x4011, 0x738: 0x377e, 0x739: 0x4447, 0x73a: 0x37ae, 0x73b: 0x4459, + 0x73c: 0x37ba, 0x73d: 0x439b, 0x73e: 0x43cd, + // Block 0x1d, offset 0x740 + 0x740: 0x1d08, 0x741: 0x1d0c, 0x742: 0x0047, 0x743: 0x1d84, 0x745: 0x1d18, + 0x746: 0x1d1c, 0x747: 0x00ef, 0x749: 0x1d88, 0x74a: 0x008f, 0x74b: 0x0051, + 0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00e0, 0x750: 0x0053, 0x751: 0x0053, + 0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x1abd, + 0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065, + 0x760: 0x1acf, 0x761: 0x1cf8, 0x762: 0x1ad8, + 0x764: 0x0075, 0x766: 0x023c, 0x768: 0x0075, + 0x76a: 0x0057, 0x76b: 0x4413, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, + 0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0308, + 0x776: 0x030b, 0x777: 0x030e, 0x778: 0x0311, 0x779: 0x0093, 0x77b: 0x1cc8, + 0x77c: 0x026c, 0x77d: 0x0245, 0x77e: 0x01fd, 0x77f: 0x0224, + // Block 0x1e, offset 0x780 + 0x780: 0x055a, 0x785: 0x0049, + 0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095, + 0x790: 0x235e, 0x791: 0x236a, + 0x792: 0x241e, 0x793: 0x2346, 0x794: 0x23ca, 0x795: 0x2352, 0x796: 0x23d0, 0x797: 0x23e8, + 0x798: 0x23f4, 0x799: 0x2358, 0x79a: 0x23fa, 0x79b: 0x2364, 0x79c: 0x23ee, 0x79d: 0x2400, + 0x79e: 0x2406, 0x79f: 0x1dec, 0x7a0: 0x0053, 0x7a1: 0x1a87, 0x7a2: 0x1cd4, 0x7a3: 0x1a90, + 0x7a4: 0x006d, 0x7a5: 0x1adb, 0x7a6: 0x1d00, 0x7a7: 0x1e78, 0x7a8: 0x1a93, 0x7a9: 0x0071, + 0x7aa: 0x1ae7, 0x7ab: 0x1d04, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b, + 0x7b0: 0x0093, 0x7b1: 0x1b14, 0x7b2: 0x1d48, 0x7b3: 0x1b1d, 0x7b4: 0x00ad, 0x7b5: 0x1b92, + 0x7b6: 0x1d7c, 0x7b7: 0x1e8c, 0x7b8: 0x1b20, 0x7b9: 0x00b1, 0x7ba: 0x1b95, 0x7bb: 0x1d80, + 0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x3d47, 0x7c3: 0xa000, 0x7c4: 0x3d4e, 0x7c5: 0xa000, + 0x7c7: 0x3d55, 0x7c8: 0xa000, 0x7c9: 0x3d5c, + 0x7cd: 0xa000, + 0x7e0: 0x30a6, 0x7e1: 0xa000, 0x7e2: 0x3d6a, + 0x7e4: 0xa000, 0x7e5: 0xa000, + 0x7ed: 0x3d63, 0x7ee: 0x30a1, 0x7ef: 0x30ab, + 0x7f0: 0x3d71, 0x7f1: 0x3d78, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3d7f, 0x7f5: 0x3d86, + 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3d8d, 0x7f9: 0x3d94, 0x7fa: 0xa000, 0x7fb: 0xa000, + 0x7fc: 0xa000, 0x7fd: 0xa000, + // Block 0x20, offset 0x800 + 0x800: 0x3d9b, 0x801: 0x3da2, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3db7, 0x805: 0x3dbe, + 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3dc5, 0x809: 0x3dcc, + 0x811: 0xa000, + 0x812: 0xa000, + 0x822: 0xa000, + 0x828: 0xa000, 0x829: 0xa000, + 0x82b: 0xa000, 0x82c: 0x3de1, 0x82d: 0x3de8, 0x82e: 0x3def, 0x82f: 0x3df6, + 0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000, + // Block 0x21, offset 0x840 + 0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029, + 0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x19af, + 0x86a: 0x19b2, 0x86b: 0x19b5, 0x86c: 0x19b8, 0x86d: 0x19bb, 0x86e: 0x19be, 0x86f: 0x19c1, + 0x870: 0x19c4, 0x871: 0x19c7, 0x872: 0x19ca, 0x873: 0x19d3, 0x874: 0x1b98, 0x875: 0x1b9c, + 0x876: 0x1ba0, 0x877: 0x1ba4, 0x878: 0x1ba8, 0x879: 0x1bac, 0x87a: 0x1bb0, 0x87b: 0x1bb4, + 0x87c: 0x1bb8, 0x87d: 0x1db0, 0x87e: 0x1db5, 0x87f: 0x1dba, + // Block 0x22, offset 0x880 + 0x880: 0x1dbf, 0x881: 0x1dc4, 0x882: 0x1dc9, 0x883: 0x1dce, 0x884: 0x1dd3, 0x885: 0x1dd8, + 0x886: 0x1ddd, 0x887: 0x1de2, 0x888: 0x19ac, 0x889: 0x19d0, 0x88a: 0x19f4, 0x88b: 0x1a18, + 0x88c: 0x1a3c, 0x88d: 0x1a45, 0x88e: 0x1a4b, 0x88f: 0x1a51, 0x890: 0x1a57, 0x891: 0x1c90, + 0x892: 0x1c94, 0x893: 0x1c98, 0x894: 0x1c9c, 0x895: 0x1ca0, 0x896: 0x1ca4, 0x897: 0x1ca8, + 0x898: 0x1cac, 0x899: 0x1cb0, 0x89a: 0x1cb4, 0x89b: 0x1cb8, 0x89c: 0x1c24, 0x89d: 0x1c28, + 0x89e: 0x1c2c, 0x89f: 0x1c30, 0x8a0: 0x1c34, 0x8a1: 0x1c38, 0x8a2: 0x1c3c, 0x8a3: 0x1c40, + 0x8a4: 0x1c44, 0x8a5: 0x1c48, 0x8a6: 0x1c4c, 0x8a7: 0x1c50, 0x8a8: 0x1c54, 0x8a9: 0x1c58, + 0x8aa: 0x1c5c, 0x8ab: 0x1c60, 0x8ac: 0x1c64, 0x8ad: 0x1c68, 0x8ae: 0x1c6c, 0x8af: 0x1c70, + 0x8b0: 0x1c74, 0x8b1: 0x1c78, 0x8b2: 0x1c7c, 0x8b3: 0x1c80, 0x8b4: 0x1c84, 0x8b5: 0x1c88, + 0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d, + 0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x07ba, 0x8c1: 0x07de, 0x8c2: 0x07ea, 0x8c3: 0x07fa, 0x8c4: 0x0802, 0x8c5: 0x080e, + 0x8c6: 0x0816, 0x8c7: 0x081e, 0x8c8: 0x082a, 0x8c9: 0x087e, 0x8ca: 0x0896, 0x8cb: 0x08a6, + 0x8cc: 0x08b6, 0x8cd: 0x08c6, 0x8ce: 0x08d6, 0x8cf: 0x08f6, 0x8d0: 0x08fa, 0x8d1: 0x08fe, + 0x8d2: 0x0932, 0x8d3: 0x095a, 0x8d4: 0x096a, 0x8d5: 0x0972, 0x8d6: 0x0976, 0x8d7: 0x0982, + 0x8d8: 0x099e, 0x8d9: 0x09a2, 0x8da: 0x09ba, 0x8db: 0x09be, 0x8dc: 0x09c6, 0x8dd: 0x09d6, + 0x8de: 0x0a72, 0x8df: 0x0a86, 0x8e0: 0x0ac6, 0x8e1: 0x0ada, 0x8e2: 0x0ae2, 0x8e3: 0x0ae6, + 0x8e4: 0x0af6, 0x8e5: 0x0b12, 0x8e6: 0x0b3e, 0x8e7: 0x0b4a, 0x8e8: 0x0b6a, 0x8e9: 0x0b76, + 0x8ea: 0x0b7a, 0x8eb: 0x0b7e, 0x8ec: 0x0b96, 0x8ed: 0x0b9a, 0x8ee: 0x0bc6, 0x8ef: 0x0bd2, + 0x8f0: 0x0bda, 0x8f1: 0x0be2, 0x8f2: 0x0bf2, 0x8f3: 0x0bfa, 0x8f4: 0x0c02, 0x8f5: 0x0c2e, + 0x8f6: 0x0c32, 0x8f7: 0x0c3a, 0x8f8: 0x0c3e, 0x8f9: 0x0c46, 0x8fa: 0x0c4e, 0x8fb: 0x0c5e, + 0x8fc: 0x0c7a, 0x8fd: 0x0cf2, 0x8fe: 0x0d06, 0x8ff: 0x0d0a, + // Block 0x24, offset 0x900 + 0x900: 0x0d8a, 0x901: 0x0d8e, 0x902: 0x0da2, 0x903: 0x0da6, 0x904: 0x0dae, 0x905: 0x0db6, + 0x906: 0x0dbe, 0x907: 0x0dca, 0x908: 0x0df2, 0x909: 0x0e02, 0x90a: 0x0e16, 0x90b: 0x0e86, + 0x90c: 0x0e92, 0x90d: 0x0ea2, 0x90e: 0x0eae, 0x90f: 0x0eba, 0x910: 0x0ec2, 0x911: 0x0ec6, + 0x912: 0x0eca, 0x913: 0x0ece, 0x914: 0x0ed2, 0x915: 0x0f8a, 0x916: 0x0fd2, 0x917: 0x0fde, + 0x918: 0x0fe2, 0x919: 0x0fe6, 0x91a: 0x0fea, 0x91b: 0x0ff2, 0x91c: 0x0ff6, 0x91d: 0x100a, + 0x91e: 0x1026, 0x91f: 0x102e, 0x920: 0x106e, 0x921: 0x1072, 0x922: 0x107a, 0x923: 0x107e, + 0x924: 0x1086, 0x925: 0x108a, 0x926: 0x10ae, 0x927: 0x10b2, 0x928: 0x10ce, 0x929: 0x10d2, + 0x92a: 0x10d6, 0x92b: 0x10da, 0x92c: 0x10ee, 0x92d: 0x1112, 0x92e: 0x1116, 0x92f: 0x111a, + 0x930: 0x113e, 0x931: 0x117e, 0x932: 0x1182, 0x933: 0x11a2, 0x934: 0x11b2, 0x935: 0x11ba, + 0x936: 0x11da, 0x937: 0x11fe, 0x938: 0x1242, 0x939: 0x124a, 0x93a: 0x125e, 0x93b: 0x126a, + 0x93c: 0x1272, 0x93d: 0x127a, 0x93e: 0x127e, 0x93f: 0x1282, + // Block 0x25, offset 0x940 + 0x940: 0x129a, 0x941: 0x129e, 0x942: 0x12ba, 0x943: 0x12c2, 0x944: 0x12ca, 0x945: 0x12ce, + 0x946: 0x12da, 0x947: 0x12e2, 0x948: 0x12e6, 0x949: 0x12ea, 0x94a: 0x12f2, 0x94b: 0x12f6, + 0x94c: 0x1396, 0x94d: 0x13aa, 0x94e: 0x13de, 0x94f: 0x13e2, 0x950: 0x13ea, 0x951: 0x1416, + 0x952: 0x141e, 0x953: 0x1426, 0x954: 0x142e, 0x955: 0x146a, 0x956: 0x146e, 0x957: 0x1476, + 0x958: 0x147a, 0x959: 0x147e, 0x95a: 0x14aa, 0x95b: 0x14ae, 0x95c: 0x14b6, 0x95d: 0x14ca, + 0x95e: 0x14ce, 0x95f: 0x14ea, 0x960: 0x14f2, 0x961: 0x14f6, 0x962: 0x151a, 0x963: 0x153a, + 0x964: 0x154e, 0x965: 0x1552, 0x966: 0x155a, 0x967: 0x1586, 0x968: 0x158a, 0x969: 0x159a, + 0x96a: 0x15be, 0x96b: 0x15ca, 0x96c: 0x15da, 0x96d: 0x15f2, 0x96e: 0x15fa, 0x96f: 0x15fe, + 0x970: 0x1602, 0x971: 0x1606, 0x972: 0x1612, 0x973: 0x1616, 0x974: 0x161e, 0x975: 0x163a, + 0x976: 0x163e, 0x977: 0x1642, 0x978: 0x165a, 0x979: 0x165e, 0x97a: 0x1666, 0x97b: 0x167a, + 0x97c: 0x167e, 0x97d: 0x1682, 0x97e: 0x168a, 0x97f: 0x168e, + // Block 0x26, offset 0x980 + 0x986: 0xa000, 0x98b: 0xa000, + 0x98c: 0x4049, 0x98d: 0xa000, 0x98e: 0x4051, 0x98f: 0xa000, 0x990: 0x4059, 0x991: 0xa000, + 0x992: 0x4061, 0x993: 0xa000, 0x994: 0x4069, 0x995: 0xa000, 0x996: 0x4071, 0x997: 0xa000, + 0x998: 0x4079, 0x999: 0xa000, 0x99a: 0x4081, 0x99b: 0xa000, 0x99c: 0x4089, 0x99d: 0xa000, + 0x99e: 0x4091, 0x99f: 0xa000, 0x9a0: 0x4099, 0x9a1: 0xa000, 0x9a2: 0x40a1, + 0x9a4: 0xa000, 0x9a5: 0x40a9, 0x9a6: 0xa000, 0x9a7: 0x40b1, 0x9a8: 0xa000, 0x9a9: 0x40b9, + 0x9af: 0xa000, + 0x9b0: 0x40c1, 0x9b1: 0x40c9, 0x9b2: 0xa000, 0x9b3: 0x40d1, 0x9b4: 0x40d9, 0x9b5: 0xa000, + 0x9b6: 0x40e1, 0x9b7: 0x40e9, 0x9b8: 0xa000, 0x9b9: 0x40f1, 0x9ba: 0x40f9, 0x9bb: 0xa000, + 0x9bc: 0x4101, 0x9bd: 0x4109, + // Block 0x27, offset 0x9c0 + 0x9d4: 0x4041, + 0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x441d, 0x9dc: 0x4423, 0x9dd: 0xa000, + 0x9de: 0x4111, 0x9df: 0x27e4, + 0x9e6: 0xa000, + 0x9eb: 0xa000, 0x9ec: 0x4121, 0x9ed: 0xa000, 0x9ee: 0x4129, 0x9ef: 0xa000, + 0x9f0: 0x4131, 0x9f1: 0xa000, 0x9f2: 0x4139, 0x9f3: 0xa000, 0x9f4: 0x4141, 0x9f5: 0xa000, + 0x9f6: 0x4149, 0x9f7: 0xa000, 0x9f8: 0x4151, 0x9f9: 0xa000, 0x9fa: 0x4159, 0x9fb: 0xa000, + 0x9fc: 0x4161, 0x9fd: 0xa000, 0x9fe: 0x4169, 0x9ff: 0xa000, + // Block 0x28, offset 0xa00 + 0xa00: 0x4171, 0xa01: 0xa000, 0xa02: 0x4179, 0xa04: 0xa000, 0xa05: 0x4181, + 0xa06: 0xa000, 0xa07: 0x4189, 0xa08: 0xa000, 0xa09: 0x4191, + 0xa0f: 0xa000, 0xa10: 0x4199, 0xa11: 0x41a1, + 0xa12: 0xa000, 0xa13: 0x41a9, 0xa14: 0x41b1, 0xa15: 0xa000, 0xa16: 0x41b9, 0xa17: 0x41c1, + 0xa18: 0xa000, 0xa19: 0x41c9, 0xa1a: 0x41d1, 0xa1b: 0xa000, 0xa1c: 0x41d9, 0xa1d: 0x41e1, + 0xa2f: 0xa000, + 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x4119, + 0xa37: 0x41e9, 0xa38: 0x41f1, 0xa39: 0x41f9, 0xa3a: 0x4201, + 0xa3d: 0xa000, 0xa3e: 0x4209, 0xa3f: 0x27f9, + // Block 0x29, offset 0xa40 + 0xa40: 0x045a, 0xa41: 0x041e, 0xa42: 0x0422, 0xa43: 0x0426, 0xa44: 0x046e, 0xa45: 0x042a, + 0xa46: 0x042e, 0xa47: 0x0432, 0xa48: 0x0436, 0xa49: 0x043a, 0xa4a: 0x043e, 0xa4b: 0x0442, + 0xa4c: 0x0446, 0xa4d: 0x044a, 0xa4e: 0x044e, 0xa4f: 0x4afe, 0xa50: 0x4b04, 0xa51: 0x4b0a, + 0xa52: 0x4b10, 0xa53: 0x4b16, 0xa54: 0x4b1c, 0xa55: 0x4b22, 0xa56: 0x4b28, 0xa57: 0x4b2e, + 0xa58: 0x4b34, 0xa59: 0x4b3a, 0xa5a: 0x4b40, 0xa5b: 0x4b46, 0xa5c: 0x4b4c, 0xa5d: 0x4b52, + 0xa5e: 0x4b58, 0xa5f: 0x4b5e, 0xa60: 0x4b64, 0xa61: 0x4b6a, 0xa62: 0x4b70, 0xa63: 0x4b76, + 0xa64: 0x04b6, 0xa65: 0x0452, 0xa66: 0x0456, 0xa67: 0x04da, 0xa68: 0x04de, 0xa69: 0x04e2, + 0xa6a: 0x04e6, 0xa6b: 0x04ea, 0xa6c: 0x04ee, 0xa6d: 0x04f2, 0xa6e: 0x045e, 0xa6f: 0x04f6, + 0xa70: 0x04fa, 0xa71: 0x0462, 0xa72: 0x0466, 0xa73: 0x046a, 0xa74: 0x0472, 0xa75: 0x0476, + 0xa76: 0x047a, 0xa77: 0x047e, 0xa78: 0x0482, 0xa79: 0x0486, 0xa7a: 0x048a, 0xa7b: 0x048e, + 0xa7c: 0x0492, 0xa7d: 0x0496, 0xa7e: 0x049a, 0xa7f: 0x049e, + // Block 0x2a, offset 0xa80 + 0xa80: 0x04a2, 0xa81: 0x04a6, 0xa82: 0x04fe, 0xa83: 0x0502, 0xa84: 0x04aa, 0xa85: 0x04ae, + 0xa86: 0x04b2, 0xa87: 0x04ba, 0xa88: 0x04be, 0xa89: 0x04c2, 0xa8a: 0x04c6, 0xa8b: 0x04ca, + 0xa8c: 0x04ce, 0xa8d: 0x04d2, 0xa8e: 0x04d6, + 0xa92: 0x07ba, 0xa93: 0x0816, 0xa94: 0x07c6, 0xa95: 0x0a76, 0xa96: 0x07ca, 0xa97: 0x07e2, + 0xa98: 0x07ce, 0xa99: 0x108e, 0xa9a: 0x0802, 0xa9b: 0x07d6, 0xa9c: 0x07be, 0xa9d: 0x0afa, + 0xa9e: 0x0a8a, 0xa9f: 0x082a, + // Block 0x2b, offset 0xac0 + 0xac0: 0x2184, 0xac1: 0x218a, 0xac2: 0x2190, 0xac3: 0x2196, 0xac4: 0x219c, 0xac5: 0x21a2, + 0xac6: 0x21a8, 0xac7: 0x21ae, 0xac8: 0x21b4, 0xac9: 0x21ba, 0xaca: 0x21c0, 0xacb: 0x21c6, + 0xacc: 0x21cc, 0xacd: 0x21d2, 0xace: 0x285d, 0xacf: 0x2866, 0xad0: 0x286f, 0xad1: 0x2878, + 0xad2: 0x2881, 0xad3: 0x288a, 0xad4: 0x2893, 0xad5: 0x289c, 0xad6: 0x28a5, 0xad7: 0x28b7, + 0xad8: 0x28c0, 0xad9: 0x28c9, 0xada: 0x28d2, 0xadb: 0x28db, 0xadc: 0x28ae, 0xadd: 0x2ce3, + 0xade: 0x2c24, 0xae0: 0x21d8, 0xae1: 0x21f0, 0xae2: 0x21e4, 0xae3: 0x2238, + 0xae4: 0x21f6, 0xae5: 0x2214, 0xae6: 0x21de, 0xae7: 0x220e, 0xae8: 0x21ea, 0xae9: 0x2220, + 0xaea: 0x2250, 0xaeb: 0x226e, 0xaec: 0x2268, 0xaed: 0x225c, 0xaee: 0x22aa, 0xaef: 0x223e, + 0xaf0: 0x224a, 0xaf1: 0x2262, 0xaf2: 0x2256, 0xaf3: 0x2280, 0xaf4: 0x222c, 0xaf5: 0x2274, + 0xaf6: 0x229e, 0xaf7: 0x2286, 0xaf8: 0x221a, 0xaf9: 0x21fc, 0xafa: 0x2232, 0xafb: 0x2244, + 0xafc: 0x227a, 0xafd: 0x2202, 0xafe: 0x22a4, 0xaff: 0x2226, + // Block 0x2c, offset 0xb00 + 0xb00: 0x228c, 0xb01: 0x2208, 0xb02: 0x2292, 0xb03: 0x2298, 0xb04: 0x0a2a, 0xb05: 0x0bfe, + 0xb06: 0x0da2, 0xb07: 0x11c2, + 0xb10: 0x1cf4, 0xb11: 0x19d6, + 0xb12: 0x19d9, 0xb13: 0x19dc, 0xb14: 0x19df, 0xb15: 0x19e2, 0xb16: 0x19e5, 0xb17: 0x19e8, + 0xb18: 0x19eb, 0xb19: 0x19ee, 0xb1a: 0x19f7, 0xb1b: 0x19fa, 0xb1c: 0x19fd, 0xb1d: 0x1a00, + 0xb1e: 0x1a03, 0xb1f: 0x1a06, 0xb20: 0x0406, 0xb21: 0x040e, 0xb22: 0x0412, 0xb23: 0x041a, + 0xb24: 0x041e, 0xb25: 0x0422, 0xb26: 0x042a, 0xb27: 0x0432, 0xb28: 0x0436, 0xb29: 0x043e, + 0xb2a: 0x0442, 0xb2b: 0x0446, 0xb2c: 0x044a, 0xb2d: 0x044e, 0xb2e: 0x2f59, 0xb2f: 0x2f61, + 0xb30: 0x2f69, 0xb31: 0x2f71, 0xb32: 0x2f79, 0xb33: 0x2f81, 0xb34: 0x2f89, 0xb35: 0x2f91, + 0xb36: 0x2fa1, 0xb37: 0x2fa9, 0xb38: 0x2fb1, 0xb39: 0x2fb9, 0xb3a: 0x2fc1, 0xb3b: 0x2fc9, + 0xb3c: 0x3014, 0xb3d: 0x2fdc, 0xb3e: 0x2f99, + // Block 0x2d, offset 0xb40 + 0xb40: 0x07ba, 0xb41: 0x0816, 0xb42: 0x07c6, 0xb43: 0x0a76, 0xb44: 0x081a, 0xb45: 0x08aa, + 0xb46: 0x07c2, 0xb47: 0x08a6, 0xb48: 0x0806, 0xb49: 0x0982, 0xb4a: 0x0e02, 0xb4b: 0x0f8a, + 0xb4c: 0x0ed2, 0xb4d: 0x0e16, 0xb4e: 0x155a, 0xb4f: 0x0a86, 0xb50: 0x0dca, 0xb51: 0x0e46, + 0xb52: 0x0e06, 0xb53: 0x1146, 0xb54: 0x09f6, 0xb55: 0x0ffe, 0xb56: 0x1482, 0xb57: 0x115a, + 0xb58: 0x093e, 0xb59: 0x118a, 0xb5a: 0x1096, 0xb5b: 0x0b12, 0xb5c: 0x150a, 0xb5d: 0x087a, + 0xb5e: 0x09a6, 0xb5f: 0x0ef2, 0xb60: 0x1622, 0xb61: 0x083e, 0xb62: 0x08ce, 0xb63: 0x0e96, + 0xb64: 0x07ca, 0xb65: 0x07e2, 0xb66: 0x07ce, 0xb67: 0x0bd6, 0xb68: 0x09ea, 0xb69: 0x097a, + 0xb6a: 0x0b52, 0xb6b: 0x0b46, 0xb6c: 0x10e6, 0xb6d: 0x083a, 0xb6e: 0x1496, 0xb6f: 0x0996, + 0xb70: 0x0aee, 0xb71: 0x1a09, 0xb72: 0x1a0c, 0xb73: 0x1a0f, 0xb74: 0x1a12, 0xb75: 0x1a1b, + 0xb76: 0x1a1e, 0xb77: 0x1a21, 0xb78: 0x1a24, 0xb79: 0x1a27, 0xb7a: 0x1a2a, 0xb7b: 0x1a2d, + 0xb7c: 0x1a30, 0xb7d: 0x1a33, 0xb7e: 0x1a36, 0xb7f: 0x1a3f, + // Block 0x2e, offset 0xb80 + 0xb80: 0x1df6, 0xb81: 0x1e05, 0xb82: 0x1e14, 0xb83: 0x1e23, 0xb84: 0x1e32, 0xb85: 0x1e41, + 0xb86: 0x1e50, 0xb87: 0x1e5f, 0xb88: 0x1e6e, 0xb89: 0x22bc, 0xb8a: 0x22ce, 0xb8b: 0x22e0, + 0xb8c: 0x1a81, 0xb8d: 0x1d34, 0xb8e: 0x1b02, 0xb8f: 0x1cd8, 0xb90: 0x05c6, 0xb91: 0x05ce, + 0xb92: 0x05d6, 0xb93: 0x05de, 0xb94: 0x05e6, 0xb95: 0x05ea, 0xb96: 0x05ee, 0xb97: 0x05f2, + 0xb98: 0x05f6, 0xb99: 0x05fa, 0xb9a: 0x05fe, 0xb9b: 0x0602, 0xb9c: 0x0606, 0xb9d: 0x060a, + 0xb9e: 0x060e, 0xb9f: 0x0612, 0xba0: 0x0616, 0xba1: 0x061e, 0xba2: 0x0622, 0xba3: 0x0626, + 0xba4: 0x062a, 0xba5: 0x062e, 0xba6: 0x0632, 0xba7: 0x0636, 0xba8: 0x063a, 0xba9: 0x063e, + 0xbaa: 0x0642, 0xbab: 0x0646, 0xbac: 0x064a, 0xbad: 0x064e, 0xbae: 0x0652, 0xbaf: 0x0656, + 0xbb0: 0x065a, 0xbb1: 0x065e, 0xbb2: 0x0662, 0xbb3: 0x066a, 0xbb4: 0x0672, 0xbb5: 0x067a, + 0xbb6: 0x067e, 0xbb7: 0x0682, 0xbb8: 0x0686, 0xbb9: 0x068a, 0xbba: 0x068e, 0xbbb: 0x0692, + 0xbbc: 0x0696, 0xbbd: 0x069a, 0xbbe: 0x069e, 0xbbf: 0x282a, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x2c43, 0xbc1: 0x2adf, 0xbc2: 0x2c53, 0xbc3: 0x29b7, 0xbc4: 0x3025, 0xbc5: 0x29c1, + 0xbc6: 0x29cb, 0xbc7: 0x3069, 0xbc8: 0x2aec, 0xbc9: 0x29d5, 0xbca: 0x29df, 0xbcb: 0x29e9, + 0xbcc: 0x2b13, 0xbcd: 0x2b20, 0xbce: 0x2af9, 0xbcf: 0x2b06, 0xbd0: 0x2fea, 0xbd1: 0x2b2d, + 0xbd2: 0x2b3a, 0xbd3: 0x2cf5, 0xbd4: 0x27eb, 0xbd5: 0x2d08, 0xbd6: 0x2d1b, 0xbd7: 0x2c63, + 0xbd8: 0x2b47, 0xbd9: 0x2d2e, 0xbda: 0x2d41, 0xbdb: 0x2b54, 0xbdc: 0x29f3, 0xbdd: 0x29fd, + 0xbde: 0x2ff8, 0xbdf: 0x2b61, 0xbe0: 0x2c73, 0xbe1: 0x3036, 0xbe2: 0x2a07, 0xbe3: 0x2a11, + 0xbe4: 0x2b6e, 0xbe5: 0x2a1b, 0xbe6: 0x2a25, 0xbe7: 0x2800, 0xbe8: 0x2807, 0xbe9: 0x2a2f, + 0xbea: 0x2a39, 0xbeb: 0x2d54, 0xbec: 0x2b7b, 0xbed: 0x2c83, 0xbee: 0x2d67, 0xbef: 0x2b88, + 0xbf0: 0x2a4d, 0xbf1: 0x2a43, 0xbf2: 0x307d, 0xbf3: 0x2b95, 0xbf4: 0x2d7a, 0xbf5: 0x2a57, + 0xbf6: 0x2c93, 0xbf7: 0x2a61, 0xbf8: 0x2baf, 0xbf9: 0x2a6b, 0xbfa: 0x2bbc, 0xbfb: 0x3047, + 0xbfc: 0x2ba2, 0xbfd: 0x2ca3, 0xbfe: 0x2bc9, 0xbff: 0x280e, + // Block 0x30, offset 0xc00 + 0xc00: 0x3058, 0xc01: 0x2a75, 0xc02: 0x2a7f, 0xc03: 0x2bd6, 0xc04: 0x2a89, 0xc05: 0x2a93, + 0xc06: 0x2a9d, 0xc07: 0x2cb3, 0xc08: 0x2be3, 0xc09: 0x2815, 0xc0a: 0x2d8d, 0xc0b: 0x2fd1, + 0xc0c: 0x2cc3, 0xc0d: 0x2bf0, 0xc0e: 0x3006, 0xc0f: 0x2aa7, 0xc10: 0x2ab1, 0xc11: 0x2bfd, + 0xc12: 0x281c, 0xc13: 0x2c0a, 0xc14: 0x2cd3, 0xc15: 0x2823, 0xc16: 0x2da0, 0xc17: 0x2abb, + 0xc18: 0x1de7, 0xc19: 0x1dfb, 0xc1a: 0x1e0a, 0xc1b: 0x1e19, 0xc1c: 0x1e28, 0xc1d: 0x1e37, + 0xc1e: 0x1e46, 0xc1f: 0x1e55, 0xc20: 0x1e64, 0xc21: 0x1e73, 0xc22: 0x22c2, 0xc23: 0x22d4, + 0xc24: 0x22e6, 0xc25: 0x22f2, 0xc26: 0x22fe, 0xc27: 0x230a, 0xc28: 0x2316, 0xc29: 0x2322, + 0xc2a: 0x232e, 0xc2b: 0x233a, 0xc2c: 0x2376, 0xc2d: 0x2382, 0xc2e: 0x238e, 0xc2f: 0x239a, + 0xc30: 0x23a6, 0xc31: 0x1d44, 0xc32: 0x1af6, 0xc33: 0x1a63, 0xc34: 0x1d14, 0xc35: 0x1b77, + 0xc36: 0x1b86, 0xc37: 0x1afc, 0xc38: 0x1d2c, 0xc39: 0x1d30, 0xc3a: 0x1a8d, 0xc3b: 0x2838, + 0xc3c: 0x2846, 0xc3d: 0x2831, 0xc3e: 0x283f, 0xc3f: 0x2c17, + // Block 0x31, offset 0xc40 + 0xc40: 0x1b7a, 0xc41: 0x1b62, 0xc42: 0x1d90, 0xc43: 0x1b4a, 0xc44: 0x1b23, 0xc45: 0x1a96, + 0xc46: 0x1aa5, 0xc47: 0x1a75, 0xc48: 0x1d20, 0xc49: 0x1e82, 0xc4a: 0x1b7d, 0xc4b: 0x1b65, + 0xc4c: 0x1d94, 0xc4d: 0x1da0, 0xc4e: 0x1b56, 0xc4f: 0x1b2c, 0xc50: 0x1a84, 0xc51: 0x1d4c, + 0xc52: 0x1ce0, 0xc53: 0x1ccc, 0xc54: 0x1cfc, 0xc55: 0x1da4, 0xc56: 0x1b59, 0xc57: 0x1af9, + 0xc58: 0x1b2f, 0xc59: 0x1b0e, 0xc5a: 0x1b71, 0xc5b: 0x1da8, 0xc5c: 0x1b5c, 0xc5d: 0x1af0, + 0xc5e: 0x1b32, 0xc5f: 0x1d6c, 0xc60: 0x1d24, 0xc61: 0x1b44, 0xc62: 0x1d54, 0xc63: 0x1d70, + 0xc64: 0x1d28, 0xc65: 0x1b47, 0xc66: 0x1d58, 0xc67: 0x2418, 0xc68: 0x242c, 0xc69: 0x1ac6, + 0xc6a: 0x1d50, 0xc6b: 0x1ce4, 0xc6c: 0x1cd0, 0xc6d: 0x1d78, 0xc6e: 0x284d, 0xc6f: 0x28e4, + 0xc70: 0x1b89, 0xc71: 0x1b74, 0xc72: 0x1dac, 0xc73: 0x1b5f, 0xc74: 0x1b80, 0xc75: 0x1b68, + 0xc76: 0x1d98, 0xc77: 0x1b4d, 0xc78: 0x1b26, 0xc79: 0x1ab1, 0xc7a: 0x1b83, 0xc7b: 0x1b6b, + 0xc7c: 0x1d9c, 0xc7d: 0x1b50, 0xc7e: 0x1b29, 0xc7f: 0x1ab4, + // Block 0x32, offset 0xc80 + 0xc80: 0x1d5c, 0xc81: 0x1ce8, 0xc82: 0x1e7d, 0xc83: 0x1a66, 0xc84: 0x1aea, 0xc85: 0x1aed, + 0xc86: 0x2425, 0xc87: 0x1cc4, 0xc88: 0x1af3, 0xc89: 0x1a78, 0xc8a: 0x1b11, 0xc8b: 0x1a7b, + 0xc8c: 0x1b1a, 0xc8d: 0x1a99, 0xc8e: 0x1a9c, 0xc8f: 0x1b35, 0xc90: 0x1b3b, 0xc91: 0x1b3e, + 0xc92: 0x1d60, 0xc93: 0x1b41, 0xc94: 0x1b53, 0xc95: 0x1d68, 0xc96: 0x1d74, 0xc97: 0x1ac0, + 0xc98: 0x1e87, 0xc99: 0x1cec, 0xc9a: 0x1ac3, 0xc9b: 0x1b8c, 0xc9c: 0x1ad5, 0xc9d: 0x1ae4, + 0xc9e: 0x2412, 0xc9f: 0x240c, 0xca0: 0x1df1, 0xca1: 0x1e00, 0xca2: 0x1e0f, 0xca3: 0x1e1e, + 0xca4: 0x1e2d, 0xca5: 0x1e3c, 0xca6: 0x1e4b, 0xca7: 0x1e5a, 0xca8: 0x1e69, 0xca9: 0x22b6, + 0xcaa: 0x22c8, 0xcab: 0x22da, 0xcac: 0x22ec, 0xcad: 0x22f8, 0xcae: 0x2304, 0xcaf: 0x2310, + 0xcb0: 0x231c, 0xcb1: 0x2328, 0xcb2: 0x2334, 0xcb3: 0x2370, 0xcb4: 0x237c, 0xcb5: 0x2388, + 0xcb6: 0x2394, 0xcb7: 0x23a0, 0xcb8: 0x23ac, 0xcb9: 0x23b2, 0xcba: 0x23b8, 0xcbb: 0x23be, + 0xcbc: 0x23c4, 0xcbd: 0x23d6, 0xcbe: 0x23dc, 0xcbf: 0x1d40, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x1472, 0xcc1: 0x0df6, 0xcc2: 0x14ce, 0xcc3: 0x149a, 0xcc4: 0x0f52, 0xcc5: 0x07e6, + 0xcc6: 0x09da, 0xcc7: 0x1726, 0xcc8: 0x1726, 0xcc9: 0x0b06, 0xcca: 0x155a, 0xccb: 0x0a3e, + 0xccc: 0x0b02, 0xccd: 0x0cea, 0xcce: 0x10ca, 0xccf: 0x125a, 0xcd0: 0x1392, 0xcd1: 0x13ce, + 0xcd2: 0x1402, 0xcd3: 0x1516, 0xcd4: 0x0e6e, 0xcd5: 0x0efa, 0xcd6: 0x0fa6, 0xcd7: 0x103e, + 0xcd8: 0x135a, 0xcd9: 0x1542, 0xcda: 0x166e, 0xcdb: 0x080a, 0xcdc: 0x09ae, 0xcdd: 0x0e82, + 0xcde: 0x0fca, 0xcdf: 0x138e, 0xce0: 0x16be, 0xce1: 0x0bae, 0xce2: 0x0f72, 0xce3: 0x137e, + 0xce4: 0x1412, 0xce5: 0x0d1e, 0xce6: 0x12b6, 0xce7: 0x13da, 0xce8: 0x0c1a, 0xce9: 0x0e0a, + 0xcea: 0x0f12, 0xceb: 0x1016, 0xcec: 0x1522, 0xced: 0x084a, 0xcee: 0x08e2, 0xcef: 0x094e, + 0xcf0: 0x0d86, 0xcf1: 0x0e7a, 0xcf2: 0x0fc6, 0xcf3: 0x10ea, 0xcf4: 0x1272, 0xcf5: 0x1386, + 0xcf6: 0x139e, 0xcf7: 0x14c2, 0xcf8: 0x15ea, 0xcf9: 0x169e, 0xcfa: 0x16ba, 0xcfb: 0x1126, + 0xcfc: 0x1166, 0xcfd: 0x121e, 0xcfe: 0x133e, 0xcff: 0x1576, + // Block 0x34, offset 0xd00 + 0xd00: 0x16c6, 0xd01: 0x1446, 0xd02: 0x0ac2, 0xd03: 0x0c36, 0xd04: 0x11d6, 0xd05: 0x1296, + 0xd06: 0x0ffa, 0xd07: 0x112e, 0xd08: 0x1492, 0xd09: 0x15e2, 0xd0a: 0x0abe, 0xd0b: 0x0b8a, + 0xd0c: 0x0e72, 0xd0d: 0x0f26, 0xd0e: 0x0f5a, 0xd0f: 0x120e, 0xd10: 0x1236, 0xd11: 0x15a2, + 0xd12: 0x094a, 0xd13: 0x12a2, 0xd14: 0x08ee, 0xd15: 0x08ea, 0xd16: 0x1192, 0xd17: 0x1222, + 0xd18: 0x1356, 0xd19: 0x15aa, 0xd1a: 0x1462, 0xd1b: 0x0d22, 0xd1c: 0x0e6e, 0xd1d: 0x1452, + 0xd1e: 0x07f2, 0xd1f: 0x0b5e, 0xd20: 0x0c8e, 0xd21: 0x102a, 0xd22: 0x10aa, 0xd23: 0x096e, + 0xd24: 0x1136, 0xd25: 0x085a, 0xd26: 0x0c72, 0xd27: 0x07d2, 0xd28: 0x0ee6, 0xd29: 0x0d9e, + 0xd2a: 0x120a, 0xd2b: 0x09c2, 0xd2c: 0x0aae, 0xd2d: 0x10f6, 0xd2e: 0x135e, 0xd2f: 0x1436, + 0xd30: 0x0eb2, 0xd31: 0x14f2, 0xd32: 0x0ede, 0xd33: 0x0d32, 0xd34: 0x1316, 0xd35: 0x0d52, + 0xd36: 0x10a6, 0xd37: 0x0826, 0xd38: 0x08a2, 0xd39: 0x08e6, 0xd3a: 0x0e4e, 0xd3b: 0x11f6, + 0xd3c: 0x12ee, 0xd3d: 0x1442, 0xd3e: 0x1556, 0xd3f: 0x0956, + // Block 0x35, offset 0xd40 + 0xd40: 0x0a0a, 0xd41: 0x0b12, 0xd42: 0x0c2a, 0xd43: 0x0dba, 0xd44: 0x0f76, 0xd45: 0x113a, + 0xd46: 0x1592, 0xd47: 0x1676, 0xd48: 0x16ca, 0xd49: 0x16e2, 0xd4a: 0x0932, 0xd4b: 0x0dee, + 0xd4c: 0x0e9e, 0xd4d: 0x14e6, 0xd4e: 0x0bf6, 0xd4f: 0x0cd2, 0xd50: 0x0cee, 0xd51: 0x0d7e, + 0xd52: 0x0f66, 0xd53: 0x0fb2, 0xd54: 0x1062, 0xd55: 0x1186, 0xd56: 0x122a, 0xd57: 0x128e, + 0xd58: 0x14d6, 0xd59: 0x1366, 0xd5a: 0x14fe, 0xd5b: 0x157a, 0xd5c: 0x090a, 0xd5d: 0x0936, + 0xd5e: 0x0a1e, 0xd5f: 0x0fa2, 0xd60: 0x13ee, 0xd61: 0x1436, 0xd62: 0x0c16, 0xd63: 0x0c86, + 0xd64: 0x0d4a, 0xd65: 0x0eaa, 0xd66: 0x11d2, 0xd67: 0x101e, 0xd68: 0x0836, 0xd69: 0x0a7a, + 0xd6a: 0x0b5e, 0xd6b: 0x0bc2, 0xd6c: 0x0c92, 0xd6d: 0x103a, 0xd6e: 0x1056, 0xd6f: 0x1266, + 0xd70: 0x1286, 0xd71: 0x155e, 0xd72: 0x15de, 0xd73: 0x15ee, 0xd74: 0x162a, 0xd75: 0x084e, + 0xd76: 0x117a, 0xd77: 0x154a, 0xd78: 0x15c6, 0xd79: 0x0caa, 0xd7a: 0x0812, 0xd7b: 0x0872, + 0xd7c: 0x0b62, 0xd7d: 0x0b82, 0xd7e: 0x0daa, 0xd7f: 0x0e6e, + // Block 0x36, offset 0xd80 + 0xd80: 0x0fbe, 0xd81: 0x10c6, 0xd82: 0x1372, 0xd83: 0x1512, 0xd84: 0x171e, 0xd85: 0x0dde, + 0xd86: 0x159e, 0xd87: 0x092e, 0xd88: 0x0e2a, 0xd89: 0x0e36, 0xd8a: 0x0f0a, 0xd8b: 0x0f42, + 0xd8c: 0x1046, 0xd8d: 0x10a2, 0xd8e: 0x1122, 0xd8f: 0x1206, 0xd90: 0x1636, 0xd91: 0x08aa, + 0xd92: 0x0cfe, 0xd93: 0x15ae, 0xd94: 0x0862, 0xd95: 0x0ba6, 0xd96: 0x0f2a, 0xd97: 0x14da, + 0xd98: 0x0c62, 0xd99: 0x0cb2, 0xd9a: 0x0e3e, 0xd9b: 0x102a, 0xd9c: 0x15b6, 0xd9d: 0x0912, + 0xd9e: 0x09fa, 0xd9f: 0x0b92, 0xda0: 0x0dce, 0xda1: 0x0e1a, 0xda2: 0x0e5a, 0xda3: 0x0eee, + 0xda4: 0x1042, 0xda5: 0x10b6, 0xda6: 0x1252, 0xda7: 0x13f2, 0xda8: 0x13fe, 0xda9: 0x1552, + 0xdaa: 0x15d2, 0xdab: 0x097e, 0xdac: 0x0f46, 0xdad: 0x09fe, 0xdae: 0x0fc2, 0xdaf: 0x1066, + 0xdb0: 0x1382, 0xdb1: 0x15ba, 0xdb2: 0x16a6, 0xdb3: 0x16ce, 0xdb4: 0x0e32, 0xdb5: 0x0f22, + 0xdb6: 0x12be, 0xdb7: 0x11b2, 0xdb8: 0x11be, 0xdb9: 0x11e2, 0xdba: 0x1012, 0xdbb: 0x0f9a, + 0xdbc: 0x145e, 0xdbd: 0x082e, 0xdbe: 0x1326, 0xdbf: 0x0916, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0906, 0xdc1: 0x0c06, 0xdc2: 0x0d26, 0xdc3: 0x11ee, 0xdc4: 0x0b4e, 0xdc5: 0x0efe, + 0xdc6: 0x0dea, 0xdc7: 0x14e2, 0xdc8: 0x13e2, 0xdc9: 0x15a6, 0xdca: 0x141e, 0xdcb: 0x0c22, + 0xdcc: 0x0882, 0xdcd: 0x0a56, 0xdd0: 0x0aaa, + 0xdd2: 0x0dda, 0xdd5: 0x08f2, 0xdd6: 0x101a, 0xdd7: 0x10de, + 0xdd8: 0x1142, 0xdd9: 0x115e, 0xdda: 0x1162, 0xddb: 0x1176, 0xddc: 0x15f6, 0xddd: 0x11e6, + 0xdde: 0x126a, 0xde0: 0x138a, 0xde2: 0x144e, + 0xde5: 0x1502, 0xde6: 0x152e, + 0xdea: 0x164a, 0xdeb: 0x164e, 0xdec: 0x1652, 0xded: 0x16b6, 0xdee: 0x1526, 0xdef: 0x15c2, + 0xdf0: 0x0852, 0xdf1: 0x0876, 0xdf2: 0x088a, 0xdf3: 0x0946, 0xdf4: 0x0952, 0xdf5: 0x0992, + 0xdf6: 0x0a46, 0xdf7: 0x0a62, 0xdf8: 0x0a6a, 0xdf9: 0x0aa6, 0xdfa: 0x0ab2, 0xdfb: 0x0b8e, + 0xdfc: 0x0b96, 0xdfd: 0x0c9e, 0xdfe: 0x0cc6, 0xdff: 0x0cce, + // Block 0x38, offset 0xe00 + 0xe00: 0x0ce6, 0xe01: 0x0d92, 0xe02: 0x0dc2, 0xe03: 0x0de2, 0xe04: 0x0e52, 0xe05: 0x0f16, + 0xe06: 0x0f32, 0xe07: 0x0f62, 0xe08: 0x0fb6, 0xe09: 0x0fd6, 0xe0a: 0x104a, 0xe0b: 0x112a, + 0xe0c: 0x1146, 0xe0d: 0x114e, 0xe0e: 0x114a, 0xe0f: 0x1152, 0xe10: 0x1156, 0xe11: 0x115a, + 0xe12: 0x116e, 0xe13: 0x1172, 0xe14: 0x1196, 0xe15: 0x11aa, 0xe16: 0x11c6, 0xe17: 0x122a, + 0xe18: 0x1232, 0xe19: 0x123a, 0xe1a: 0x124e, 0xe1b: 0x1276, 0xe1c: 0x12c6, 0xe1d: 0x12fa, + 0xe1e: 0x12fa, 0xe1f: 0x1362, 0xe20: 0x140a, 0xe21: 0x1422, 0xe22: 0x1456, 0xe23: 0x145a, + 0xe24: 0x149e, 0xe25: 0x14a2, 0xe26: 0x14fa, 0xe27: 0x1502, 0xe28: 0x15d6, 0xe29: 0x161a, + 0xe2a: 0x1632, 0xe2b: 0x0c96, 0xe2c: 0x184b, 0xe2d: 0x12de, + 0xe30: 0x07da, 0xe31: 0x08de, 0xe32: 0x089e, 0xe33: 0x0846, 0xe34: 0x0886, 0xe35: 0x08b2, + 0xe36: 0x0942, 0xe37: 0x095e, 0xe38: 0x0a46, 0xe39: 0x0a32, 0xe3a: 0x0a42, 0xe3b: 0x0a5e, + 0xe3c: 0x0aaa, 0xe3d: 0x0aba, 0xe3e: 0x0afe, 0xe3f: 0x0b0a, + // Block 0x39, offset 0xe40 + 0xe40: 0x0b26, 0xe41: 0x0b36, 0xe42: 0x0c1e, 0xe43: 0x0c26, 0xe44: 0x0c56, 0xe45: 0x0c76, + 0xe46: 0x0ca6, 0xe47: 0x0cbe, 0xe48: 0x0cae, 0xe49: 0x0cce, 0xe4a: 0x0cc2, 0xe4b: 0x0ce6, + 0xe4c: 0x0d02, 0xe4d: 0x0d5a, 0xe4e: 0x0d66, 0xe4f: 0x0d6e, 0xe50: 0x0d96, 0xe51: 0x0dda, + 0xe52: 0x0e0a, 0xe53: 0x0e0e, 0xe54: 0x0e22, 0xe55: 0x0ea2, 0xe56: 0x0eb2, 0xe57: 0x0f0a, + 0xe58: 0x0f56, 0xe59: 0x0f4e, 0xe5a: 0x0f62, 0xe5b: 0x0f7e, 0xe5c: 0x0fb6, 0xe5d: 0x110e, + 0xe5e: 0x0fda, 0xe5f: 0x100e, 0xe60: 0x101a, 0xe61: 0x105a, 0xe62: 0x1076, 0xe63: 0x109a, + 0xe64: 0x10be, 0xe65: 0x10c2, 0xe66: 0x10de, 0xe67: 0x10e2, 0xe68: 0x10f2, 0xe69: 0x1106, + 0xe6a: 0x1102, 0xe6b: 0x1132, 0xe6c: 0x11ae, 0xe6d: 0x11c6, 0xe6e: 0x11de, 0xe6f: 0x1216, + 0xe70: 0x122a, 0xe71: 0x1246, 0xe72: 0x1276, 0xe73: 0x132a, 0xe74: 0x1352, 0xe75: 0x13c6, + 0xe76: 0x140e, 0xe77: 0x141a, 0xe78: 0x1422, 0xe79: 0x143a, 0xe7a: 0x144e, 0xe7b: 0x143e, + 0xe7c: 0x1456, 0xe7d: 0x1452, 0xe7e: 0x144a, 0xe7f: 0x145a, + // Block 0x3a, offset 0xe80 + 0xe80: 0x1466, 0xe81: 0x14a2, 0xe82: 0x14de, 0xe83: 0x150e, 0xe84: 0x1546, 0xe85: 0x1566, + 0xe86: 0x15b2, 0xe87: 0x15d6, 0xe88: 0x15f6, 0xe89: 0x160a, 0xe8a: 0x161a, 0xe8b: 0x1626, + 0xe8c: 0x1632, 0xe8d: 0x1686, 0xe8e: 0x1726, 0xe8f: 0x17e2, 0xe90: 0x17dd, 0xe91: 0x180f, + 0xe92: 0x0702, 0xe93: 0x072a, 0xe94: 0x072e, 0xe95: 0x1891, 0xe96: 0x18be, 0xe97: 0x1936, + 0xe98: 0x1712, 0xe99: 0x1722, + // Block 0x3b, offset 0xec0 + 0xec0: 0x1b05, 0xec1: 0x1b08, 0xec2: 0x1b0b, 0xec3: 0x1d38, 0xec4: 0x1d3c, 0xec5: 0x1b8f, + 0xec6: 0x1b8f, + 0xed3: 0x1ea5, 0xed4: 0x1e96, 0xed5: 0x1e9b, 0xed6: 0x1eaa, 0xed7: 0x1ea0, + 0xedd: 0x44d1, + 0xede: 0x8116, 0xedf: 0x4543, 0xee0: 0x0320, 0xee1: 0x0308, 0xee2: 0x0311, 0xee3: 0x0314, + 0xee4: 0x0317, 0xee5: 0x031a, 0xee6: 0x031d, 0xee7: 0x0323, 0xee8: 0x0326, 0xee9: 0x0017, + 0xeea: 0x4531, 0xeeb: 0x4537, 0xeec: 0x4635, 0xeed: 0x463d, 0xeee: 0x4489, 0xeef: 0x448f, + 0xef0: 0x4495, 0xef1: 0x449b, 0xef2: 0x44a7, 0xef3: 0x44ad, 0xef4: 0x44b3, 0xef5: 0x44bf, + 0xef6: 0x44c5, 0xef8: 0x44cb, 0xef9: 0x44d7, 0xefa: 0x44dd, 0xefb: 0x44e3, + 0xefc: 0x44ef, 0xefe: 0x44f5, + // Block 0x3c, offset 0xf00 + 0xf00: 0x44fb, 0xf01: 0x4501, 0xf03: 0x4507, 0xf04: 0x450d, + 0xf06: 0x4519, 0xf07: 0x451f, 0xf08: 0x4525, 0xf09: 0x452b, 0xf0a: 0x453d, 0xf0b: 0x44b9, + 0xf0c: 0x44a1, 0xf0d: 0x44e9, 0xf0e: 0x4513, 0xf0f: 0x1eaf, 0xf10: 0x038c, 0xf11: 0x038c, + 0xf12: 0x0395, 0xf13: 0x0395, 0xf14: 0x0395, 0xf15: 0x0395, 0xf16: 0x0398, 0xf17: 0x0398, + 0xf18: 0x0398, 0xf19: 0x0398, 0xf1a: 0x039e, 0xf1b: 0x039e, 0xf1c: 0x039e, 0xf1d: 0x039e, + 0xf1e: 0x0392, 0xf1f: 0x0392, 0xf20: 0x0392, 0xf21: 0x0392, 0xf22: 0x039b, 0xf23: 0x039b, + 0xf24: 0x039b, 0xf25: 0x039b, 0xf26: 0x038f, 0xf27: 0x038f, 0xf28: 0x038f, 0xf29: 0x038f, + 0xf2a: 0x03c2, 0xf2b: 0x03c2, 0xf2c: 0x03c2, 0xf2d: 0x03c2, 0xf2e: 0x03c5, 0xf2f: 0x03c5, + 0xf30: 0x03c5, 0xf31: 0x03c5, 0xf32: 0x03a4, 0xf33: 0x03a4, 0xf34: 0x03a4, 0xf35: 0x03a4, + 0xf36: 0x03a1, 0xf37: 0x03a1, 0xf38: 0x03a1, 0xf39: 0x03a1, 0xf3a: 0x03a7, 0xf3b: 0x03a7, + 0xf3c: 0x03a7, 0xf3d: 0x03a7, 0xf3e: 0x03aa, 0xf3f: 0x03aa, + // Block 0x3d, offset 0xf40 + 0xf40: 0x03aa, 0xf41: 0x03aa, 0xf42: 0x03b3, 0xf43: 0x03b3, 0xf44: 0x03b0, 0xf45: 0x03b0, + 0xf46: 0x03b6, 0xf47: 0x03b6, 0xf48: 0x03ad, 0xf49: 0x03ad, 0xf4a: 0x03bc, 0xf4b: 0x03bc, + 0xf4c: 0x03b9, 0xf4d: 0x03b9, 0xf4e: 0x03c8, 0xf4f: 0x03c8, 0xf50: 0x03c8, 0xf51: 0x03c8, + 0xf52: 0x03ce, 0xf53: 0x03ce, 0xf54: 0x03ce, 0xf55: 0x03ce, 0xf56: 0x03d4, 0xf57: 0x03d4, + 0xf58: 0x03d4, 0xf59: 0x03d4, 0xf5a: 0x03d1, 0xf5b: 0x03d1, 0xf5c: 0x03d1, 0xf5d: 0x03d1, + 0xf5e: 0x03d7, 0xf5f: 0x03d7, 0xf60: 0x03da, 0xf61: 0x03da, 0xf62: 0x03da, 0xf63: 0x03da, + 0xf64: 0x45af, 0xf65: 0x45af, 0xf66: 0x03e0, 0xf67: 0x03e0, 0xf68: 0x03e0, 0xf69: 0x03e0, + 0xf6a: 0x03dd, 0xf6b: 0x03dd, 0xf6c: 0x03dd, 0xf6d: 0x03dd, 0xf6e: 0x03fb, 0xf6f: 0x03fb, + 0xf70: 0x45a9, 0xf71: 0x45a9, + // Block 0x3e, offset 0xf80 + 0xf93: 0x03cb, 0xf94: 0x03cb, 0xf95: 0x03cb, 0xf96: 0x03cb, 0xf97: 0x03e9, + 0xf98: 0x03e9, 0xf99: 0x03e6, 0xf9a: 0x03e6, 0xf9b: 0x03ec, 0xf9c: 0x03ec, 0xf9d: 0x217f, + 0xf9e: 0x03f2, 0xf9f: 0x03f2, 0xfa0: 0x03e3, 0xfa1: 0x03e3, 0xfa2: 0x03ef, 0xfa3: 0x03ef, + 0xfa4: 0x03f8, 0xfa5: 0x03f8, 0xfa6: 0x03f8, 0xfa7: 0x03f8, 0xfa8: 0x0380, 0xfa9: 0x0380, + 0xfaa: 0x26da, 0xfab: 0x26da, 0xfac: 0x274a, 0xfad: 0x274a, 0xfae: 0x2719, 0xfaf: 0x2719, + 0xfb0: 0x2735, 0xfb1: 0x2735, 0xfb2: 0x272e, 0xfb3: 0x272e, 0xfb4: 0x273c, 0xfb5: 0x273c, + 0xfb6: 0x2743, 0xfb7: 0x2743, 0xfb8: 0x2743, 0xfb9: 0x2720, 0xfba: 0x2720, 0xfbb: 0x2720, + 0xfbc: 0x03f5, 0xfbd: 0x03f5, 0xfbe: 0x03f5, 0xfbf: 0x03f5, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x26e1, 0xfc1: 0x26e8, 0xfc2: 0x2704, 0xfc3: 0x2720, 0xfc4: 0x2727, 0xfc5: 0x1eb9, + 0xfc6: 0x1ebe, 0xfc7: 0x1ec3, 0xfc8: 0x1ed2, 0xfc9: 0x1ee1, 0xfca: 0x1ee6, 0xfcb: 0x1eeb, + 0xfcc: 0x1ef0, 0xfcd: 0x1ef5, 0xfce: 0x1f04, 0xfcf: 0x1f13, 0xfd0: 0x1f18, 0xfd1: 0x1f1d, + 0xfd2: 0x1f2c, 0xfd3: 0x1f3b, 0xfd4: 0x1f40, 0xfd5: 0x1f45, 0xfd6: 0x1f4a, 0xfd7: 0x1f59, + 0xfd8: 0x1f5e, 0xfd9: 0x1f6d, 0xfda: 0x1f72, 0xfdb: 0x1f77, 0xfdc: 0x1f86, 0xfdd: 0x1f8b, + 0xfde: 0x1f90, 0xfdf: 0x1f9a, 0xfe0: 0x1fd6, 0xfe1: 0x1fe5, 0xfe2: 0x1ff4, 0xfe3: 0x1ff9, + 0xfe4: 0x1ffe, 0xfe5: 0x2008, 0xfe6: 0x2017, 0xfe7: 0x201c, 0xfe8: 0x202b, 0xfe9: 0x2030, + 0xfea: 0x2035, 0xfeb: 0x2044, 0xfec: 0x2049, 0xfed: 0x2058, 0xfee: 0x205d, 0xfef: 0x2062, + 0xff0: 0x2067, 0xff1: 0x206c, 0xff2: 0x2071, 0xff3: 0x2076, 0xff4: 0x207b, 0xff5: 0x2080, + 0xff6: 0x2085, 0xff7: 0x208a, 0xff8: 0x208f, 0xff9: 0x2094, 0xffa: 0x2099, 0xffb: 0x209e, + 0xffc: 0x20a3, 0xffd: 0x20a8, 0xffe: 0x20ad, 0xfff: 0x20b7, + // Block 0x40, offset 0x1000 + 0x1000: 0x20bc, 0x1001: 0x20c1, 0x1002: 0x20c6, 0x1003: 0x20d0, 0x1004: 0x20d5, 0x1005: 0x20df, + 0x1006: 0x20e4, 0x1007: 0x20e9, 0x1008: 0x20ee, 0x1009: 0x20f3, 0x100a: 0x20f8, 0x100b: 0x20fd, + 0x100c: 0x2102, 0x100d: 0x2107, 0x100e: 0x2116, 0x100f: 0x2125, 0x1010: 0x212a, 0x1011: 0x212f, + 0x1012: 0x2134, 0x1013: 0x2139, 0x1014: 0x213e, 0x1015: 0x2148, 0x1016: 0x214d, 0x1017: 0x2152, + 0x1018: 0x2161, 0x1019: 0x2170, 0x101a: 0x2175, 0x101b: 0x4561, 0x101c: 0x4567, 0x101d: 0x459d, + 0x101e: 0x45f4, 0x101f: 0x45fb, 0x1020: 0x4602, 0x1021: 0x4609, 0x1022: 0x4610, 0x1023: 0x4617, + 0x1024: 0x26f6, 0x1025: 0x26fd, 0x1026: 0x2704, 0x1027: 0x270b, 0x1028: 0x2720, 0x1029: 0x2727, + 0x102a: 0x1ec8, 0x102b: 0x1ecd, 0x102c: 0x1ed2, 0x102d: 0x1ed7, 0x102e: 0x1ee1, 0x102f: 0x1ee6, + 0x1030: 0x1efa, 0x1031: 0x1eff, 0x1032: 0x1f04, 0x1033: 0x1f09, 0x1034: 0x1f13, 0x1035: 0x1f18, + 0x1036: 0x1f22, 0x1037: 0x1f27, 0x1038: 0x1f2c, 0x1039: 0x1f31, 0x103a: 0x1f3b, 0x103b: 0x1f40, + 0x103c: 0x206c, 0x103d: 0x2071, 0x103e: 0x2080, 0x103f: 0x2085, + // Block 0x41, offset 0x1040 + 0x1040: 0x208a, 0x1041: 0x209e, 0x1042: 0x20a3, 0x1043: 0x20a8, 0x1044: 0x20ad, 0x1045: 0x20c6, + 0x1046: 0x20d0, 0x1047: 0x20d5, 0x1048: 0x20da, 0x1049: 0x20ee, 0x104a: 0x210c, 0x104b: 0x2111, + 0x104c: 0x2116, 0x104d: 0x211b, 0x104e: 0x2125, 0x104f: 0x212a, 0x1050: 0x459d, 0x1051: 0x2157, + 0x1052: 0x215c, 0x1053: 0x2161, 0x1054: 0x2166, 0x1055: 0x2170, 0x1056: 0x2175, 0x1057: 0x26e1, + 0x1058: 0x26e8, 0x1059: 0x26ef, 0x105a: 0x2704, 0x105b: 0x2712, 0x105c: 0x1eb9, 0x105d: 0x1ebe, + 0x105e: 0x1ec3, 0x105f: 0x1ed2, 0x1060: 0x1edc, 0x1061: 0x1eeb, 0x1062: 0x1ef0, 0x1063: 0x1ef5, + 0x1064: 0x1f04, 0x1065: 0x1f0e, 0x1066: 0x1f2c, 0x1067: 0x1f45, 0x1068: 0x1f4a, 0x1069: 0x1f59, + 0x106a: 0x1f5e, 0x106b: 0x1f6d, 0x106c: 0x1f77, 0x106d: 0x1f86, 0x106e: 0x1f8b, 0x106f: 0x1f90, + 0x1070: 0x1f9a, 0x1071: 0x1fd6, 0x1072: 0x1fdb, 0x1073: 0x1fe5, 0x1074: 0x1ff4, 0x1075: 0x1ff9, + 0x1076: 0x1ffe, 0x1077: 0x2008, 0x1078: 0x2017, 0x1079: 0x202b, 0x107a: 0x2030, 0x107b: 0x2035, + 0x107c: 0x2044, 0x107d: 0x2049, 0x107e: 0x2058, 0x107f: 0x205d, + // Block 0x42, offset 0x1080 + 0x1080: 0x2062, 0x1081: 0x2067, 0x1082: 0x2076, 0x1083: 0x207b, 0x1084: 0x208f, 0x1085: 0x2094, + 0x1086: 0x2099, 0x1087: 0x209e, 0x1088: 0x20a3, 0x1089: 0x20b7, 0x108a: 0x20bc, 0x108b: 0x20c1, + 0x108c: 0x20c6, 0x108d: 0x20cb, 0x108e: 0x20df, 0x108f: 0x20e4, 0x1090: 0x20e9, 0x1091: 0x20ee, + 0x1092: 0x20fd, 0x1093: 0x2102, 0x1094: 0x2107, 0x1095: 0x2116, 0x1096: 0x2120, 0x1097: 0x212f, + 0x1098: 0x2134, 0x1099: 0x4591, 0x109a: 0x2148, 0x109b: 0x214d, 0x109c: 0x2152, 0x109d: 0x2161, + 0x109e: 0x216b, 0x109f: 0x2704, 0x10a0: 0x2712, 0x10a1: 0x1ed2, 0x10a2: 0x1edc, 0x10a3: 0x1f04, + 0x10a4: 0x1f0e, 0x10a5: 0x1f2c, 0x10a6: 0x1f36, 0x10a7: 0x1f9a, 0x10a8: 0x1f9f, 0x10a9: 0x1fc2, + 0x10aa: 0x1fc7, 0x10ab: 0x209e, 0x10ac: 0x20a3, 0x10ad: 0x20c6, 0x10ae: 0x2116, 0x10af: 0x2120, + 0x10b0: 0x2161, 0x10b1: 0x216b, 0x10b2: 0x4645, 0x10b3: 0x464d, 0x10b4: 0x4655, 0x10b5: 0x2021, + 0x10b6: 0x2026, 0x10b7: 0x203a, 0x10b8: 0x203f, 0x10b9: 0x204e, 0x10ba: 0x2053, 0x10bb: 0x1fa4, + 0x10bc: 0x1fa9, 0x10bd: 0x1fcc, 0x10be: 0x1fd1, 0x10bf: 0x1f63, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x1f68, 0x10c1: 0x1f4f, 0x10c2: 0x1f54, 0x10c3: 0x1f7c, 0x10c4: 0x1f81, 0x10c5: 0x1fea, + 0x10c6: 0x1fef, 0x10c7: 0x200d, 0x10c8: 0x2012, 0x10c9: 0x1fae, 0x10ca: 0x1fb3, 0x10cb: 0x1fb8, + 0x10cc: 0x1fc2, 0x10cd: 0x1fbd, 0x10ce: 0x1f95, 0x10cf: 0x1fe0, 0x10d0: 0x2003, 0x10d1: 0x2021, + 0x10d2: 0x2026, 0x10d3: 0x203a, 0x10d4: 0x203f, 0x10d5: 0x204e, 0x10d6: 0x2053, 0x10d7: 0x1fa4, + 0x10d8: 0x1fa9, 0x10d9: 0x1fcc, 0x10da: 0x1fd1, 0x10db: 0x1f63, 0x10dc: 0x1f68, 0x10dd: 0x1f4f, + 0x10de: 0x1f54, 0x10df: 0x1f7c, 0x10e0: 0x1f81, 0x10e1: 0x1fea, 0x10e2: 0x1fef, 0x10e3: 0x200d, + 0x10e4: 0x2012, 0x10e5: 0x1fae, 0x10e6: 0x1fb3, 0x10e7: 0x1fb8, 0x10e8: 0x1fc2, 0x10e9: 0x1fbd, + 0x10ea: 0x1f95, 0x10eb: 0x1fe0, 0x10ec: 0x2003, 0x10ed: 0x1fae, 0x10ee: 0x1fb3, 0x10ef: 0x1fb8, + 0x10f0: 0x1fc2, 0x10f1: 0x1f9f, 0x10f2: 0x1fc7, 0x10f3: 0x201c, 0x10f4: 0x1f86, 0x10f5: 0x1f8b, + 0x10f6: 0x1f90, 0x10f7: 0x1fae, 0x10f8: 0x1fb3, 0x10f9: 0x1fb8, 0x10fa: 0x201c, 0x10fb: 0x202b, + 0x10fc: 0x4549, 0x10fd: 0x4549, + // Block 0x44, offset 0x1100 + 0x1110: 0x2441, 0x1111: 0x2456, + 0x1112: 0x2456, 0x1113: 0x245d, 0x1114: 0x2464, 0x1115: 0x2479, 0x1116: 0x2480, 0x1117: 0x2487, + 0x1118: 0x24aa, 0x1119: 0x24aa, 0x111a: 0x24cd, 0x111b: 0x24c6, 0x111c: 0x24e2, 0x111d: 0x24d4, + 0x111e: 0x24db, 0x111f: 0x24fe, 0x1120: 0x24fe, 0x1121: 0x24f7, 0x1122: 0x2505, 0x1123: 0x2505, + 0x1124: 0x252f, 0x1125: 0x252f, 0x1126: 0x254b, 0x1127: 0x2513, 0x1128: 0x2513, 0x1129: 0x250c, + 0x112a: 0x2521, 0x112b: 0x2521, 0x112c: 0x2528, 0x112d: 0x2528, 0x112e: 0x2552, 0x112f: 0x2560, + 0x1130: 0x2560, 0x1131: 0x2567, 0x1132: 0x2567, 0x1133: 0x256e, 0x1134: 0x2575, 0x1135: 0x257c, + 0x1136: 0x2583, 0x1137: 0x2583, 0x1138: 0x258a, 0x1139: 0x2598, 0x113a: 0x25a6, 0x113b: 0x259f, + 0x113c: 0x25ad, 0x113d: 0x25ad, 0x113e: 0x25c2, 0x113f: 0x25c9, + // Block 0x45, offset 0x1140 + 0x1140: 0x25fa, 0x1141: 0x2608, 0x1142: 0x2601, 0x1143: 0x25e5, 0x1144: 0x25e5, 0x1145: 0x260f, + 0x1146: 0x260f, 0x1147: 0x2616, 0x1148: 0x2616, 0x1149: 0x2640, 0x114a: 0x2647, 0x114b: 0x264e, + 0x114c: 0x2624, 0x114d: 0x2632, 0x114e: 0x2655, 0x114f: 0x265c, + 0x1152: 0x262b, 0x1153: 0x26b0, 0x1154: 0x26b7, 0x1155: 0x268d, 0x1156: 0x2694, 0x1157: 0x2678, + 0x1158: 0x2678, 0x1159: 0x267f, 0x115a: 0x26a9, 0x115b: 0x26a2, 0x115c: 0x26cc, 0x115d: 0x26cc, + 0x115e: 0x243a, 0x115f: 0x244f, 0x1160: 0x2448, 0x1161: 0x2472, 0x1162: 0x246b, 0x1163: 0x2495, + 0x1164: 0x248e, 0x1165: 0x24b8, 0x1166: 0x249c, 0x1167: 0x24b1, 0x1168: 0x24e9, 0x1169: 0x2536, + 0x116a: 0x251a, 0x116b: 0x2559, 0x116c: 0x25f3, 0x116d: 0x261d, 0x116e: 0x26c5, 0x116f: 0x26be, + 0x1170: 0x26d3, 0x1171: 0x266a, 0x1172: 0x25d0, 0x1173: 0x269b, 0x1174: 0x25c2, 0x1175: 0x25fa, + 0x1176: 0x2591, 0x1177: 0x25de, 0x1178: 0x2671, 0x1179: 0x2663, 0x117a: 0x25ec, 0x117b: 0x25d7, + 0x117c: 0x25ec, 0x117d: 0x2671, 0x117e: 0x24a3, 0x117f: 0x24bf, + // Block 0x46, offset 0x1180 + 0x1180: 0x2639, 0x1181: 0x25b4, 0x1182: 0x2433, 0x1183: 0x25d7, 0x1184: 0x257c, 0x1185: 0x254b, + 0x1186: 0x24f0, 0x1187: 0x2686, + 0x11b0: 0x2544, 0x11b1: 0x25bb, 0x11b2: 0x28f6, 0x11b3: 0x28ed, 0x11b4: 0x2923, 0x11b5: 0x2911, + 0x11b6: 0x28ff, 0x11b7: 0x291a, 0x11b8: 0x292c, 0x11b9: 0x253d, 0x11ba: 0x2db3, 0x11bb: 0x2c33, + 0x11bc: 0x2908, + // Block 0x47, offset 0x11c0 + 0x11d0: 0x0019, 0x11d1: 0x057e, + 0x11d2: 0x0582, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x05ba, + 0x11d8: 0x05be, 0x11d9: 0x1c8c, + 0x11e0: 0x8133, 0x11e1: 0x8133, 0x11e2: 0x8133, 0x11e3: 0x8133, + 0x11e4: 0x8133, 0x11e5: 0x8133, 0x11e6: 0x8133, 0x11e7: 0x812e, 0x11e8: 0x812e, 0x11e9: 0x812e, + 0x11ea: 0x812e, 0x11eb: 0x812e, 0x11ec: 0x812e, 0x11ed: 0x812e, 0x11ee: 0x8133, 0x11ef: 0x8133, + 0x11f0: 0x19a0, 0x11f1: 0x053a, 0x11f2: 0x0536, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011, + 0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x05b2, 0x11fa: 0x05b6, 0x11fb: 0x05a6, + 0x11fc: 0x05aa, 0x11fd: 0x058e, 0x11fe: 0x0592, 0x11ff: 0x0586, + // Block 0x48, offset 0x1200 + 0x1200: 0x058a, 0x1201: 0x0596, 0x1202: 0x059a, 0x1203: 0x059e, 0x1204: 0x05a2, + 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x43aa, 0x120a: 0x43aa, 0x120b: 0x43aa, + 0x120c: 0x43aa, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x057e, + 0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003, + 0x1218: 0x053a, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x05b2, + 0x121e: 0x05b6, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b, + 0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009, + 0x122a: 0x000b, 0x122b: 0x0041, + 0x1230: 0x43eb, 0x1231: 0x456d, 0x1232: 0x43f0, 0x1234: 0x43f5, + 0x1236: 0x43fa, 0x1237: 0x4573, 0x1238: 0x43ff, 0x1239: 0x4579, 0x123a: 0x4404, 0x123b: 0x457f, + 0x123c: 0x4409, 0x123d: 0x4585, 0x123e: 0x440e, 0x123f: 0x458b, + // Block 0x49, offset 0x1240 + 0x1240: 0x0329, 0x1241: 0x454f, 0x1242: 0x454f, 0x1243: 0x4555, 0x1244: 0x4555, 0x1245: 0x4597, + 0x1246: 0x4597, 0x1247: 0x455b, 0x1248: 0x455b, 0x1249: 0x45a3, 0x124a: 0x45a3, 0x124b: 0x45a3, + 0x124c: 0x45a3, 0x124d: 0x032c, 0x124e: 0x032c, 0x124f: 0x032f, 0x1250: 0x032f, 0x1251: 0x032f, + 0x1252: 0x032f, 0x1253: 0x0332, 0x1254: 0x0332, 0x1255: 0x0335, 0x1256: 0x0335, 0x1257: 0x0335, + 0x1258: 0x0335, 0x1259: 0x0338, 0x125a: 0x0338, 0x125b: 0x0338, 0x125c: 0x0338, 0x125d: 0x033b, + 0x125e: 0x033b, 0x125f: 0x033b, 0x1260: 0x033b, 0x1261: 0x033e, 0x1262: 0x033e, 0x1263: 0x033e, + 0x1264: 0x033e, 0x1265: 0x0341, 0x1266: 0x0341, 0x1267: 0x0341, 0x1268: 0x0341, 0x1269: 0x0344, + 0x126a: 0x0344, 0x126b: 0x0347, 0x126c: 0x0347, 0x126d: 0x034a, 0x126e: 0x034a, 0x126f: 0x034d, + 0x1270: 0x034d, 0x1271: 0x0350, 0x1272: 0x0350, 0x1273: 0x0350, 0x1274: 0x0350, 0x1275: 0x0353, + 0x1276: 0x0353, 0x1277: 0x0353, 0x1278: 0x0353, 0x1279: 0x0356, 0x127a: 0x0356, 0x127b: 0x0356, + 0x127c: 0x0356, 0x127d: 0x0359, 0x127e: 0x0359, 0x127f: 0x0359, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0359, 0x1281: 0x035c, 0x1282: 0x035c, 0x1283: 0x035c, 0x1284: 0x035c, 0x1285: 0x035f, + 0x1286: 0x035f, 0x1287: 0x035f, 0x1288: 0x035f, 0x1289: 0x0362, 0x128a: 0x0362, 0x128b: 0x0362, + 0x128c: 0x0362, 0x128d: 0x0365, 0x128e: 0x0365, 0x128f: 0x0365, 0x1290: 0x0365, 0x1291: 0x0368, + 0x1292: 0x0368, 0x1293: 0x0368, 0x1294: 0x0368, 0x1295: 0x036b, 0x1296: 0x036b, 0x1297: 0x036b, + 0x1298: 0x036b, 0x1299: 0x036e, 0x129a: 0x036e, 0x129b: 0x036e, 0x129c: 0x036e, 0x129d: 0x0371, + 0x129e: 0x0371, 0x129f: 0x0371, 0x12a0: 0x0371, 0x12a1: 0x0374, 0x12a2: 0x0374, 0x12a3: 0x0374, + 0x12a4: 0x0374, 0x12a5: 0x0377, 0x12a6: 0x0377, 0x12a7: 0x0377, 0x12a8: 0x0377, 0x12a9: 0x037a, + 0x12aa: 0x037a, 0x12ab: 0x037a, 0x12ac: 0x037a, 0x12ad: 0x037d, 0x12ae: 0x037d, 0x12af: 0x0380, + 0x12b0: 0x0380, 0x12b1: 0x0383, 0x12b2: 0x0383, 0x12b3: 0x0383, 0x12b4: 0x0383, 0x12b5: 0x2f41, + 0x12b6: 0x2f41, 0x12b7: 0x2f49, 0x12b8: 0x2f49, 0x12b9: 0x2f51, 0x12ba: 0x2f51, 0x12bb: 0x20b2, + 0x12bc: 0x20b2, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b, + 0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097, + 0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3, + 0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af, + 0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb, + 0x12de: 0x00bd, 0x12df: 0x056e, 0x12e0: 0x0572, 0x12e1: 0x0582, 0x12e2: 0x0596, 0x12e3: 0x059a, + 0x12e4: 0x057e, 0x12e5: 0x06a6, 0x12e6: 0x069e, 0x12e7: 0x05c2, 0x12e8: 0x05ca, 0x12e9: 0x05d2, + 0x12ea: 0x05da, 0x12eb: 0x05e2, 0x12ec: 0x0666, 0x12ed: 0x066e, 0x12ee: 0x0676, 0x12ef: 0x061a, + 0x12f0: 0x06aa, 0x12f1: 0x05c6, 0x12f2: 0x05ce, 0x12f3: 0x05d6, 0x12f4: 0x05de, 0x12f5: 0x05e6, + 0x12f6: 0x05ea, 0x12f7: 0x05ee, 0x12f8: 0x05f2, 0x12f9: 0x05f6, 0x12fa: 0x05fa, 0x12fb: 0x05fe, + 0x12fc: 0x0602, 0x12fd: 0x0606, 0x12fe: 0x060a, 0x12ff: 0x060e, + // Block 0x4c, offset 0x1300 + 0x1300: 0x0612, 0x1301: 0x0616, 0x1302: 0x061e, 0x1303: 0x0622, 0x1304: 0x0626, 0x1305: 0x062a, + 0x1306: 0x062e, 0x1307: 0x0632, 0x1308: 0x0636, 0x1309: 0x063a, 0x130a: 0x063e, 0x130b: 0x0642, + 0x130c: 0x0646, 0x130d: 0x064a, 0x130e: 0x064e, 0x130f: 0x0652, 0x1310: 0x0656, 0x1311: 0x065a, + 0x1312: 0x065e, 0x1313: 0x0662, 0x1314: 0x066a, 0x1315: 0x0672, 0x1316: 0x067a, 0x1317: 0x067e, + 0x1318: 0x0682, 0x1319: 0x0686, 0x131a: 0x068a, 0x131b: 0x068e, 0x131c: 0x0692, 0x131d: 0x06a2, + 0x131e: 0x4bb9, 0x131f: 0x4bbf, 0x1320: 0x04b6, 0x1321: 0x0406, 0x1322: 0x040a, 0x1323: 0x4b7c, + 0x1324: 0x040e, 0x1325: 0x4b82, 0x1326: 0x4b88, 0x1327: 0x0412, 0x1328: 0x0416, 0x1329: 0x041a, + 0x132a: 0x4b8e, 0x132b: 0x4b94, 0x132c: 0x4b9a, 0x132d: 0x4ba0, 0x132e: 0x4ba6, 0x132f: 0x4bac, + 0x1330: 0x045a, 0x1331: 0x041e, 0x1332: 0x0422, 0x1333: 0x0426, 0x1334: 0x046e, 0x1335: 0x042a, + 0x1336: 0x042e, 0x1337: 0x0432, 0x1338: 0x0436, 0x1339: 0x043a, 0x133a: 0x043e, 0x133b: 0x0442, + 0x133c: 0x0446, 0x133d: 0x044a, 0x133e: 0x044e, + // Block 0x4d, offset 0x1340 + 0x1342: 0x4afe, 0x1343: 0x4b04, 0x1344: 0x4b0a, 0x1345: 0x4b10, + 0x1346: 0x4b16, 0x1347: 0x4b1c, 0x134a: 0x4b22, 0x134b: 0x4b28, + 0x134c: 0x4b2e, 0x134d: 0x4b34, 0x134e: 0x4b3a, 0x134f: 0x4b40, + 0x1352: 0x4b46, 0x1353: 0x4b4c, 0x1354: 0x4b52, 0x1355: 0x4b58, 0x1356: 0x4b5e, 0x1357: 0x4b64, + 0x135a: 0x4b6a, 0x135b: 0x4b70, 0x135c: 0x4b76, + 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x43a5, + 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x053e, 0x1368: 0x0562, 0x1369: 0x0542, + 0x136a: 0x0546, 0x136b: 0x054a, 0x136c: 0x054e, 0x136d: 0x0566, 0x136e: 0x056a, + // Block 0x4e, offset 0x1380 + 0x1381: 0x01f1, 0x1382: 0x01f4, 0x1383: 0x00d4, 0x1384: 0x01be, 0x1385: 0x010d, + 0x1387: 0x01d3, 0x1388: 0x174e, 0x1389: 0x01d9, 0x138a: 0x01d6, 0x138b: 0x0116, + 0x138c: 0x0119, 0x138d: 0x0526, 0x138e: 0x011c, 0x138f: 0x0128, 0x1390: 0x01e5, 0x1391: 0x013a, + 0x1392: 0x0134, 0x1393: 0x012e, 0x1394: 0x01c1, 0x1395: 0x00e0, 0x1396: 0x01c4, 0x1397: 0x0143, + 0x1398: 0x0194, 0x1399: 0x01e8, 0x139a: 0x01eb, 0x139b: 0x0152, 0x139c: 0x1756, 0x139d: 0x1742, + 0x139e: 0x0158, 0x139f: 0x175b, 0x13a0: 0x01a9, 0x13a1: 0x1760, 0x13a2: 0x00da, 0x13a3: 0x0170, + 0x13a4: 0x0173, 0x13a5: 0x00a3, 0x13a6: 0x017c, 0x13a7: 0x1765, 0x13a8: 0x0182, 0x13a9: 0x0185, + 0x13aa: 0x0188, 0x13ab: 0x01e2, 0x13ac: 0x01dc, 0x13ad: 0x1752, 0x13ae: 0x01df, 0x13af: 0x0197, + 0x13b0: 0x0576, 0x13b2: 0x01ac, 0x13b3: 0x01cd, 0x13b4: 0x01d0, 0x13b5: 0x01bb, + 0x13b6: 0x00f5, 0x13b7: 0x00f8, 0x13b8: 0x00fb, 0x13b9: 0x176a, 0x13ba: 0x176f, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0063, 0x13c1: 0x0065, 0x13c2: 0x0067, 0x13c3: 0x0069, 0x13c4: 0x006b, 0x13c5: 0x006d, + 0x13c6: 0x006f, 0x13c7: 0x0071, 0x13c8: 0x0073, 0x13c9: 0x0075, 0x13ca: 0x0083, 0x13cb: 0x0085, + 0x13cc: 0x0087, 0x13cd: 0x0089, 0x13ce: 0x008b, 0x13cf: 0x008d, 0x13d0: 0x008f, 0x13d1: 0x0091, + 0x13d2: 0x0093, 0x13d3: 0x0095, 0x13d4: 0x0097, 0x13d5: 0x0099, 0x13d6: 0x009b, 0x13d7: 0x009d, + 0x13d8: 0x009f, 0x13d9: 0x00a1, 0x13da: 0x00a3, 0x13db: 0x00a5, 0x13dc: 0x00a7, 0x13dd: 0x00a9, + 0x13de: 0x00ab, 0x13df: 0x00ad, 0x13e0: 0x00af, 0x13e1: 0x00b1, 0x13e2: 0x00b3, 0x13e3: 0x00b5, + 0x13e4: 0x00e3, 0x13e5: 0x0101, 0x13e8: 0x01f7, 0x13e9: 0x01fa, + 0x13ea: 0x01fd, 0x13eb: 0x0200, 0x13ec: 0x0203, 0x13ed: 0x0206, 0x13ee: 0x0209, 0x13ef: 0x020c, + 0x13f0: 0x020f, 0x13f1: 0x0212, 0x13f2: 0x0215, 0x13f3: 0x0218, 0x13f4: 0x021b, 0x13f5: 0x021e, + 0x13f6: 0x0221, 0x13f7: 0x0224, 0x13f8: 0x0227, 0x13f9: 0x020c, 0x13fa: 0x022a, 0x13fb: 0x022d, + 0x13fc: 0x0230, 0x13fd: 0x0233, 0x13fe: 0x0236, 0x13ff: 0x0239, + // Block 0x50, offset 0x1400 + 0x1400: 0x0281, 0x1401: 0x0284, 0x1402: 0x0287, 0x1403: 0x0552, 0x1404: 0x024b, 0x1405: 0x0254, + 0x1406: 0x025a, 0x1407: 0x027e, 0x1408: 0x026f, 0x1409: 0x026c, 0x140a: 0x028a, 0x140b: 0x028d, + 0x140e: 0x0021, 0x140f: 0x0023, 0x1410: 0x0025, 0x1411: 0x0027, + 0x1412: 0x0029, 0x1413: 0x002b, 0x1414: 0x002d, 0x1415: 0x002f, 0x1416: 0x0031, 0x1417: 0x0033, + 0x1418: 0x0021, 0x1419: 0x0023, 0x141a: 0x0025, 0x141b: 0x0027, 0x141c: 0x0029, 0x141d: 0x002b, + 0x141e: 0x002d, 0x141f: 0x002f, 0x1420: 0x0031, 0x1421: 0x0033, 0x1422: 0x0021, 0x1423: 0x0023, + 0x1424: 0x0025, 0x1425: 0x0027, 0x1426: 0x0029, 0x1427: 0x002b, 0x1428: 0x002d, 0x1429: 0x002f, + 0x142a: 0x0031, 0x142b: 0x0033, 0x142c: 0x0021, 0x142d: 0x0023, 0x142e: 0x0025, 0x142f: 0x0027, + 0x1430: 0x0029, 0x1431: 0x002b, 0x1432: 0x002d, 0x1433: 0x002f, 0x1434: 0x0031, 0x1435: 0x0033, + 0x1436: 0x0021, 0x1437: 0x0023, 0x1438: 0x0025, 0x1439: 0x0027, 0x143a: 0x0029, 0x143b: 0x002b, + 0x143c: 0x002d, 0x143d: 0x002f, 0x143e: 0x0031, 0x143f: 0x0033, + // Block 0x51, offset 0x1440 + 0x1440: 0x8133, 0x1441: 0x8133, 0x1442: 0x8133, 0x1443: 0x8133, 0x1444: 0x8133, 0x1445: 0x8133, + 0x1446: 0x8133, 0x1448: 0x8133, 0x1449: 0x8133, 0x144a: 0x8133, 0x144b: 0x8133, + 0x144c: 0x8133, 0x144d: 0x8133, 0x144e: 0x8133, 0x144f: 0x8133, 0x1450: 0x8133, 0x1451: 0x8133, + 0x1452: 0x8133, 0x1453: 0x8133, 0x1454: 0x8133, 0x1455: 0x8133, 0x1456: 0x8133, 0x1457: 0x8133, + 0x1458: 0x8133, 0x145b: 0x8133, 0x145c: 0x8133, 0x145d: 0x8133, + 0x145e: 0x8133, 0x145f: 0x8133, 0x1460: 0x8133, 0x1461: 0x8133, 0x1463: 0x8133, + 0x1464: 0x8133, 0x1466: 0x8133, 0x1467: 0x8133, 0x1468: 0x8133, 0x1469: 0x8133, + 0x146a: 0x8133, + 0x1470: 0x0290, 0x1471: 0x0293, 0x1472: 0x0296, 0x1473: 0x0299, 0x1474: 0x029c, 0x1475: 0x029f, + 0x1476: 0x02a2, 0x1477: 0x02a5, 0x1478: 0x02a8, 0x1479: 0x02ab, 0x147a: 0x02ae, 0x147b: 0x02b1, + 0x147c: 0x02b7, 0x147d: 0x02ba, 0x147e: 0x02bd, 0x147f: 0x02c0, + // Block 0x52, offset 0x1480 + 0x1480: 0x02c3, 0x1481: 0x02c6, 0x1482: 0x02c9, 0x1483: 0x02cc, 0x1484: 0x02cf, 0x1485: 0x02d2, + 0x1486: 0x02d5, 0x1487: 0x02db, 0x1488: 0x02e1, 0x1489: 0x02e4, 0x148a: 0x1736, 0x148b: 0x0302, + 0x148c: 0x02ea, 0x148d: 0x02ed, 0x148e: 0x0305, 0x148f: 0x02f9, 0x1490: 0x02ff, 0x1491: 0x0290, + 0x1492: 0x0293, 0x1493: 0x0296, 0x1494: 0x0299, 0x1495: 0x029c, 0x1496: 0x029f, 0x1497: 0x02a2, + 0x1498: 0x02a5, 0x1499: 0x02a8, 0x149a: 0x02ab, 0x149b: 0x02ae, 0x149c: 0x02b7, 0x149d: 0x02ba, + 0x149e: 0x02c0, 0x149f: 0x02c6, 0x14a0: 0x02c9, 0x14a1: 0x02cc, 0x14a2: 0x02cf, 0x14a3: 0x02d2, + 0x14a4: 0x02d5, 0x14a5: 0x02d8, 0x14a6: 0x02db, 0x14a7: 0x02f3, 0x14a8: 0x02ea, 0x14a9: 0x02e7, + 0x14aa: 0x02f0, 0x14ab: 0x02f6, 0x14ac: 0x1732, 0x14ad: 0x02fc, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x032c, 0x14c1: 0x032f, 0x14c2: 0x033b, 0x14c3: 0x0344, 0x14c5: 0x037d, + 0x14c6: 0x034d, 0x14c7: 0x033e, 0x14c8: 0x035c, 0x14c9: 0x0383, 0x14ca: 0x036e, 0x14cb: 0x0371, + 0x14cc: 0x0374, 0x14cd: 0x0377, 0x14ce: 0x0350, 0x14cf: 0x0362, 0x14d0: 0x0368, 0x14d1: 0x0356, + 0x14d2: 0x036b, 0x14d3: 0x034a, 0x14d4: 0x0353, 0x14d5: 0x0335, 0x14d6: 0x0338, 0x14d7: 0x0341, + 0x14d8: 0x0347, 0x14d9: 0x0359, 0x14da: 0x035f, 0x14db: 0x0365, 0x14dc: 0x0386, 0x14dd: 0x03d7, + 0x14de: 0x03bf, 0x14df: 0x0389, 0x14e1: 0x032f, 0x14e2: 0x033b, + 0x14e4: 0x037a, 0x14e7: 0x033e, 0x14e9: 0x0383, + 0x14ea: 0x036e, 0x14eb: 0x0371, 0x14ec: 0x0374, 0x14ed: 0x0377, 0x14ee: 0x0350, 0x14ef: 0x0362, + 0x14f0: 0x0368, 0x14f1: 0x0356, 0x14f2: 0x036b, 0x14f4: 0x0353, 0x14f5: 0x0335, + 0x14f6: 0x0338, 0x14f7: 0x0341, 0x14f9: 0x0359, 0x14fb: 0x0365, + // Block 0x54, offset 0x1500 + 0x1502: 0x033b, + 0x1507: 0x033e, 0x1509: 0x0383, 0x150b: 0x0371, + 0x150d: 0x0377, 0x150e: 0x0350, 0x150f: 0x0362, 0x1511: 0x0356, + 0x1512: 0x036b, 0x1514: 0x0353, 0x1517: 0x0341, + 0x1519: 0x0359, 0x151b: 0x0365, 0x151d: 0x03d7, + 0x151f: 0x0389, 0x1521: 0x032f, 0x1522: 0x033b, + 0x1524: 0x037a, 0x1527: 0x033e, 0x1528: 0x035c, 0x1529: 0x0383, + 0x152a: 0x036e, 0x152c: 0x0374, 0x152d: 0x0377, 0x152e: 0x0350, 0x152f: 0x0362, + 0x1530: 0x0368, 0x1531: 0x0356, 0x1532: 0x036b, 0x1534: 0x0353, 0x1535: 0x0335, + 0x1536: 0x0338, 0x1537: 0x0341, 0x1539: 0x0359, 0x153a: 0x035f, 0x153b: 0x0365, + 0x153c: 0x0386, 0x153e: 0x03bf, + // Block 0x55, offset 0x1540 + 0x1540: 0x032c, 0x1541: 0x032f, 0x1542: 0x033b, 0x1543: 0x0344, 0x1544: 0x037a, 0x1545: 0x037d, + 0x1546: 0x034d, 0x1547: 0x033e, 0x1548: 0x035c, 0x1549: 0x0383, 0x154b: 0x0371, + 0x154c: 0x0374, 0x154d: 0x0377, 0x154e: 0x0350, 0x154f: 0x0362, 0x1550: 0x0368, 0x1551: 0x0356, + 0x1552: 0x036b, 0x1553: 0x034a, 0x1554: 0x0353, 0x1555: 0x0335, 0x1556: 0x0338, 0x1557: 0x0341, + 0x1558: 0x0347, 0x1559: 0x0359, 0x155a: 0x035f, 0x155b: 0x0365, + 0x1561: 0x032f, 0x1562: 0x033b, 0x1563: 0x0344, + 0x1565: 0x037d, 0x1566: 0x034d, 0x1567: 0x033e, 0x1568: 0x035c, 0x1569: 0x0383, + 0x156b: 0x0371, 0x156c: 0x0374, 0x156d: 0x0377, 0x156e: 0x0350, 0x156f: 0x0362, + 0x1570: 0x0368, 0x1571: 0x0356, 0x1572: 0x036b, 0x1573: 0x034a, 0x1574: 0x0353, 0x1575: 0x0335, + 0x1576: 0x0338, 0x1577: 0x0341, 0x1578: 0x0347, 0x1579: 0x0359, 0x157a: 0x035f, 0x157b: 0x0365, + // Block 0x56, offset 0x1580 + 0x1580: 0x19a6, 0x1581: 0x19a3, 0x1582: 0x19a9, 0x1583: 0x19cd, 0x1584: 0x19f1, 0x1585: 0x1a15, + 0x1586: 0x1a39, 0x1587: 0x1a42, 0x1588: 0x1a48, 0x1589: 0x1a4e, 0x158a: 0x1a54, + 0x1590: 0x1bbc, 0x1591: 0x1bc0, + 0x1592: 0x1bc4, 0x1593: 0x1bc8, 0x1594: 0x1bcc, 0x1595: 0x1bd0, 0x1596: 0x1bd4, 0x1597: 0x1bd8, + 0x1598: 0x1bdc, 0x1599: 0x1be0, 0x159a: 0x1be4, 0x159b: 0x1be8, 0x159c: 0x1bec, 0x159d: 0x1bf0, + 0x159e: 0x1bf4, 0x159f: 0x1bf8, 0x15a0: 0x1bfc, 0x15a1: 0x1c00, 0x15a2: 0x1c04, 0x15a3: 0x1c08, + 0x15a4: 0x1c0c, 0x15a5: 0x1c10, 0x15a6: 0x1c14, 0x15a7: 0x1c18, 0x15a8: 0x1c1c, 0x15a9: 0x1c20, + 0x15aa: 0x2855, 0x15ab: 0x0047, 0x15ac: 0x0065, 0x15ad: 0x1a69, 0x15ae: 0x1ae1, + 0x15b0: 0x0043, 0x15b1: 0x0045, 0x15b2: 0x0047, 0x15b3: 0x0049, 0x15b4: 0x004b, 0x15b5: 0x004d, + 0x15b6: 0x004f, 0x15b7: 0x0051, 0x15b8: 0x0053, 0x15b9: 0x0055, 0x15ba: 0x0057, 0x15bb: 0x0059, + 0x15bc: 0x005b, 0x15bd: 0x005d, 0x15be: 0x005f, 0x15bf: 0x0061, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x27dd, 0x15c1: 0x27f2, 0x15c2: 0x05fe, + 0x15d0: 0x0d0a, 0x15d1: 0x0b42, + 0x15d2: 0x09ce, 0x15d3: 0x4705, 0x15d4: 0x0816, 0x15d5: 0x0aea, 0x15d6: 0x142a, 0x15d7: 0x0afa, + 0x15d8: 0x0822, 0x15d9: 0x0dd2, 0x15da: 0x0faa, 0x15db: 0x0daa, 0x15dc: 0x0922, 0x15dd: 0x0c66, + 0x15de: 0x08ba, 0x15df: 0x0db2, 0x15e0: 0x090e, 0x15e1: 0x1212, 0x15e2: 0x107e, 0x15e3: 0x1486, + 0x15e4: 0x0ace, 0x15e5: 0x0a06, 0x15e6: 0x0f5e, 0x15e7: 0x0d16, 0x15e8: 0x0d42, 0x15e9: 0x07ba, + 0x15ea: 0x07c6, 0x15eb: 0x1506, 0x15ec: 0x0bd6, 0x15ed: 0x07e2, 0x15ee: 0x09ea, 0x15ef: 0x0d36, + 0x15f0: 0x14ae, 0x15f1: 0x0d0e, 0x15f2: 0x116a, 0x15f3: 0x11a6, 0x15f4: 0x09f2, 0x15f5: 0x0f3e, + 0x15f6: 0x0e06, 0x15f7: 0x0e02, 0x15f8: 0x1092, 0x15f9: 0x0926, 0x15fa: 0x0a52, 0x15fb: 0x153e, + // Block 0x58, offset 0x1600 + 0x1600: 0x07f6, 0x1601: 0x07ee, 0x1602: 0x07fe, 0x1603: 0x1774, 0x1604: 0x0842, 0x1605: 0x0852, + 0x1606: 0x0856, 0x1607: 0x085e, 0x1608: 0x0866, 0x1609: 0x086a, 0x160a: 0x0876, 0x160b: 0x086e, + 0x160c: 0x06ae, 0x160d: 0x1788, 0x160e: 0x088a, 0x160f: 0x088e, 0x1610: 0x0892, 0x1611: 0x08ae, + 0x1612: 0x1779, 0x1613: 0x06b2, 0x1614: 0x089a, 0x1615: 0x08ba, 0x1616: 0x1783, 0x1617: 0x08ca, + 0x1618: 0x08d2, 0x1619: 0x0832, 0x161a: 0x08da, 0x161b: 0x08de, 0x161c: 0x195e, 0x161d: 0x08fa, + 0x161e: 0x0902, 0x161f: 0x06ba, 0x1620: 0x091a, 0x1621: 0x091e, 0x1622: 0x0926, 0x1623: 0x092a, + 0x1624: 0x06be, 0x1625: 0x0942, 0x1626: 0x0946, 0x1627: 0x0952, 0x1628: 0x095e, 0x1629: 0x0962, + 0x162a: 0x0966, 0x162b: 0x096e, 0x162c: 0x098e, 0x162d: 0x0992, 0x162e: 0x099a, 0x162f: 0x09aa, + 0x1630: 0x09b2, 0x1631: 0x09b6, 0x1632: 0x09b6, 0x1633: 0x09b6, 0x1634: 0x1797, 0x1635: 0x0f8e, + 0x1636: 0x09ca, 0x1637: 0x09d2, 0x1638: 0x179c, 0x1639: 0x09de, 0x163a: 0x09e6, 0x163b: 0x09ee, + 0x163c: 0x0a16, 0x163d: 0x0a02, 0x163e: 0x0a0e, 0x163f: 0x0a12, + // Block 0x59, offset 0x1640 + 0x1640: 0x0a1a, 0x1641: 0x0a22, 0x1642: 0x0a26, 0x1643: 0x0a2e, 0x1644: 0x0a36, 0x1645: 0x0a3a, + 0x1646: 0x0a3a, 0x1647: 0x0a42, 0x1648: 0x0a4a, 0x1649: 0x0a4e, 0x164a: 0x0a5a, 0x164b: 0x0a7e, + 0x164c: 0x0a62, 0x164d: 0x0a82, 0x164e: 0x0a66, 0x164f: 0x0a6e, 0x1650: 0x0906, 0x1651: 0x0aca, + 0x1652: 0x0a92, 0x1653: 0x0a96, 0x1654: 0x0a9a, 0x1655: 0x0a8e, 0x1656: 0x0aa2, 0x1657: 0x0a9e, + 0x1658: 0x0ab6, 0x1659: 0x17a1, 0x165a: 0x0ad2, 0x165b: 0x0ad6, 0x165c: 0x0ade, 0x165d: 0x0aea, + 0x165e: 0x0af2, 0x165f: 0x0b0e, 0x1660: 0x17a6, 0x1661: 0x17ab, 0x1662: 0x0b1a, 0x1663: 0x0b1e, + 0x1664: 0x0b22, 0x1665: 0x0b16, 0x1666: 0x0b2a, 0x1667: 0x06c2, 0x1668: 0x06c6, 0x1669: 0x0b32, + 0x166a: 0x0b3a, 0x166b: 0x0b3a, 0x166c: 0x17b0, 0x166d: 0x0b56, 0x166e: 0x0b5a, 0x166f: 0x0b5e, + 0x1670: 0x0b66, 0x1671: 0x17b5, 0x1672: 0x0b6e, 0x1673: 0x0b72, 0x1674: 0x0c4a, 0x1675: 0x0b7a, + 0x1676: 0x06ca, 0x1677: 0x0b86, 0x1678: 0x0b96, 0x1679: 0x0ba2, 0x167a: 0x0b9e, 0x167b: 0x17bf, + 0x167c: 0x0baa, 0x167d: 0x17c4, 0x167e: 0x0bb6, 0x167f: 0x0bb2, + // Block 0x5a, offset 0x1680 + 0x1680: 0x0bba, 0x1681: 0x0bca, 0x1682: 0x0bce, 0x1683: 0x06ce, 0x1684: 0x0bde, 0x1685: 0x0be6, + 0x1686: 0x0bea, 0x1687: 0x0bee, 0x1688: 0x06d2, 0x1689: 0x17c9, 0x168a: 0x06d6, 0x168b: 0x0c0a, + 0x168c: 0x0c0e, 0x168d: 0x0c12, 0x168e: 0x0c1a, 0x168f: 0x1990, 0x1690: 0x0c32, 0x1691: 0x17d3, + 0x1692: 0x17d3, 0x1693: 0x12d2, 0x1694: 0x0c42, 0x1695: 0x0c42, 0x1696: 0x06da, 0x1697: 0x17f6, + 0x1698: 0x18c8, 0x1699: 0x0c52, 0x169a: 0x0c5a, 0x169b: 0x06de, 0x169c: 0x0c6e, 0x169d: 0x0c7e, + 0x169e: 0x0c82, 0x169f: 0x0c8a, 0x16a0: 0x0c9a, 0x16a1: 0x06e6, 0x16a2: 0x06e2, 0x16a3: 0x0c9e, + 0x16a4: 0x17d8, 0x16a5: 0x0ca2, 0x16a6: 0x0cb6, 0x16a7: 0x0cba, 0x16a8: 0x0cbe, 0x16a9: 0x0cba, + 0x16aa: 0x0cca, 0x16ab: 0x0cce, 0x16ac: 0x0cde, 0x16ad: 0x0cd6, 0x16ae: 0x0cda, 0x16af: 0x0ce2, + 0x16b0: 0x0ce6, 0x16b1: 0x0cea, 0x16b2: 0x0cf6, 0x16b3: 0x0cfa, 0x16b4: 0x0d12, 0x16b5: 0x0d1a, + 0x16b6: 0x0d2a, 0x16b7: 0x0d3e, 0x16b8: 0x17e7, 0x16b9: 0x0d3a, 0x16ba: 0x0d2e, 0x16bb: 0x0d46, + 0x16bc: 0x0d4e, 0x16bd: 0x0d62, 0x16be: 0x17ec, 0x16bf: 0x0d6a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x0d5e, 0x16c1: 0x0d56, 0x16c2: 0x06ea, 0x16c3: 0x0d72, 0x16c4: 0x0d7a, 0x16c5: 0x0d82, + 0x16c6: 0x0d76, 0x16c7: 0x06ee, 0x16c8: 0x0d92, 0x16c9: 0x0d9a, 0x16ca: 0x17f1, 0x16cb: 0x0dc6, + 0x16cc: 0x0dfa, 0x16cd: 0x0dd6, 0x16ce: 0x06fa, 0x16cf: 0x0de2, 0x16d0: 0x06f6, 0x16d1: 0x06f2, + 0x16d2: 0x08be, 0x16d3: 0x08c2, 0x16d4: 0x0dfe, 0x16d5: 0x0de6, 0x16d6: 0x12a6, 0x16d7: 0x075e, + 0x16d8: 0x0e0a, 0x16d9: 0x0e0e, 0x16da: 0x0e12, 0x16db: 0x0e26, 0x16dc: 0x0e1e, 0x16dd: 0x180a, + 0x16de: 0x06fe, 0x16df: 0x0e3a, 0x16e0: 0x0e2e, 0x16e1: 0x0e4a, 0x16e2: 0x0e52, 0x16e3: 0x1814, + 0x16e4: 0x0e56, 0x16e5: 0x0e42, 0x16e6: 0x0e5e, 0x16e7: 0x0702, 0x16e8: 0x0e62, 0x16e9: 0x0e66, + 0x16ea: 0x0e6a, 0x16eb: 0x0e76, 0x16ec: 0x1819, 0x16ed: 0x0e7e, 0x16ee: 0x0706, 0x16ef: 0x0e8a, + 0x16f0: 0x181e, 0x16f1: 0x0e8e, 0x16f2: 0x070a, 0x16f3: 0x0e9a, 0x16f4: 0x0ea6, 0x16f5: 0x0eb2, + 0x16f6: 0x0eb6, 0x16f7: 0x1823, 0x16f8: 0x17ba, 0x16f9: 0x1828, 0x16fa: 0x0ed6, 0x16fb: 0x182d, + 0x16fc: 0x0ee2, 0x16fd: 0x0eea, 0x16fe: 0x0eda, 0x16ff: 0x0ef6, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0f06, 0x1701: 0x0f16, 0x1702: 0x0f0a, 0x1703: 0x0f0e, 0x1704: 0x0f1a, 0x1705: 0x0f1e, + 0x1706: 0x1832, 0x1707: 0x0f02, 0x1708: 0x0f36, 0x1709: 0x0f3a, 0x170a: 0x070e, 0x170b: 0x0f4e, + 0x170c: 0x0f4a, 0x170d: 0x1837, 0x170e: 0x0f2e, 0x170f: 0x0f6a, 0x1710: 0x183c, 0x1711: 0x1841, + 0x1712: 0x0f6e, 0x1713: 0x0f82, 0x1714: 0x0f7e, 0x1715: 0x0f7a, 0x1716: 0x0712, 0x1717: 0x0f86, + 0x1718: 0x0f96, 0x1719: 0x0f92, 0x171a: 0x0f9e, 0x171b: 0x177e, 0x171c: 0x0fae, 0x171d: 0x1846, + 0x171e: 0x0fba, 0x171f: 0x1850, 0x1720: 0x0fce, 0x1721: 0x0fda, 0x1722: 0x0fee, 0x1723: 0x1855, + 0x1724: 0x1002, 0x1725: 0x1006, 0x1726: 0x185a, 0x1727: 0x185f, 0x1728: 0x1022, 0x1729: 0x1032, + 0x172a: 0x0716, 0x172b: 0x1036, 0x172c: 0x071a, 0x172d: 0x071a, 0x172e: 0x104e, 0x172f: 0x1052, + 0x1730: 0x105a, 0x1731: 0x105e, 0x1732: 0x106a, 0x1733: 0x071e, 0x1734: 0x1082, 0x1735: 0x1864, + 0x1736: 0x109e, 0x1737: 0x1869, 0x1738: 0x10aa, 0x1739: 0x17ce, 0x173a: 0x10ba, 0x173b: 0x186e, + 0x173c: 0x1873, 0x173d: 0x1878, 0x173e: 0x0722, 0x173f: 0x0726, + // Block 0x5d, offset 0x1740 + 0x1740: 0x10f2, 0x1741: 0x1882, 0x1742: 0x187d, 0x1743: 0x1887, 0x1744: 0x188c, 0x1745: 0x10fa, + 0x1746: 0x10fe, 0x1747: 0x10fe, 0x1748: 0x1106, 0x1749: 0x072e, 0x174a: 0x110a, 0x174b: 0x0732, + 0x174c: 0x0736, 0x174d: 0x1896, 0x174e: 0x111e, 0x174f: 0x1126, 0x1750: 0x1132, 0x1751: 0x073a, + 0x1752: 0x189b, 0x1753: 0x1156, 0x1754: 0x18a0, 0x1755: 0x18a5, 0x1756: 0x1176, 0x1757: 0x118e, + 0x1758: 0x073e, 0x1759: 0x1196, 0x175a: 0x119a, 0x175b: 0x119e, 0x175c: 0x18aa, 0x175d: 0x18af, + 0x175e: 0x18af, 0x175f: 0x11b6, 0x1760: 0x0742, 0x1761: 0x18b4, 0x1762: 0x11ca, 0x1763: 0x11ce, + 0x1764: 0x0746, 0x1765: 0x18b9, 0x1766: 0x11ea, 0x1767: 0x074a, 0x1768: 0x11fa, 0x1769: 0x11f2, + 0x176a: 0x1202, 0x176b: 0x18c3, 0x176c: 0x121a, 0x176d: 0x074e, 0x176e: 0x1226, 0x176f: 0x122e, + 0x1770: 0x123e, 0x1771: 0x0752, 0x1772: 0x18cd, 0x1773: 0x18d2, 0x1774: 0x0756, 0x1775: 0x18d7, + 0x1776: 0x1256, 0x1777: 0x18dc, 0x1778: 0x1262, 0x1779: 0x126e, 0x177a: 0x1276, 0x177b: 0x18e1, + 0x177c: 0x18e6, 0x177d: 0x128a, 0x177e: 0x18eb, 0x177f: 0x1292, + // Block 0x5e, offset 0x1780 + 0x1780: 0x17fb, 0x1781: 0x075a, 0x1782: 0x12aa, 0x1783: 0x12ae, 0x1784: 0x0762, 0x1785: 0x12b2, + 0x1786: 0x0b2e, 0x1787: 0x18f0, 0x1788: 0x18f5, 0x1789: 0x1800, 0x178a: 0x1805, 0x178b: 0x12d2, + 0x178c: 0x12d6, 0x178d: 0x14ee, 0x178e: 0x0766, 0x178f: 0x1302, 0x1790: 0x12fe, 0x1791: 0x1306, + 0x1792: 0x093a, 0x1793: 0x130a, 0x1794: 0x130e, 0x1795: 0x1312, 0x1796: 0x131a, 0x1797: 0x18fa, + 0x1798: 0x1316, 0x1799: 0x131e, 0x179a: 0x1332, 0x179b: 0x1336, 0x179c: 0x1322, 0x179d: 0x133a, + 0x179e: 0x134e, 0x179f: 0x1362, 0x17a0: 0x132e, 0x17a1: 0x1342, 0x17a2: 0x1346, 0x17a3: 0x134a, + 0x17a4: 0x18ff, 0x17a5: 0x1909, 0x17a6: 0x1904, 0x17a7: 0x076a, 0x17a8: 0x136a, 0x17a9: 0x136e, + 0x17aa: 0x1376, 0x17ab: 0x191d, 0x17ac: 0x137a, 0x17ad: 0x190e, 0x17ae: 0x076e, 0x17af: 0x0772, + 0x17b0: 0x1913, 0x17b1: 0x1918, 0x17b2: 0x0776, 0x17b3: 0x139a, 0x17b4: 0x139e, 0x17b5: 0x13a2, + 0x17b6: 0x13a6, 0x17b7: 0x13b2, 0x17b8: 0x13ae, 0x17b9: 0x13ba, 0x17ba: 0x13b6, 0x17bb: 0x13c6, + 0x17bc: 0x13be, 0x17bd: 0x13c2, 0x17be: 0x13ca, 0x17bf: 0x077a, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x13d2, 0x17c1: 0x13d6, 0x17c2: 0x077e, 0x17c3: 0x13e6, 0x17c4: 0x13ea, 0x17c5: 0x1922, + 0x17c6: 0x13f6, 0x17c7: 0x13fa, 0x17c8: 0x0782, 0x17c9: 0x1406, 0x17ca: 0x06b6, 0x17cb: 0x1927, + 0x17cc: 0x192c, 0x17cd: 0x0786, 0x17ce: 0x078a, 0x17cf: 0x1432, 0x17d0: 0x144a, 0x17d1: 0x1466, + 0x17d2: 0x1476, 0x17d3: 0x1931, 0x17d4: 0x148a, 0x17d5: 0x148e, 0x17d6: 0x14a6, 0x17d7: 0x14b2, + 0x17d8: 0x193b, 0x17d9: 0x178d, 0x17da: 0x14be, 0x17db: 0x14ba, 0x17dc: 0x14c6, 0x17dd: 0x1792, + 0x17de: 0x14d2, 0x17df: 0x14de, 0x17e0: 0x1940, 0x17e1: 0x1945, 0x17e2: 0x151e, 0x17e3: 0x152a, + 0x17e4: 0x1532, 0x17e5: 0x194a, 0x17e6: 0x1536, 0x17e7: 0x1562, 0x17e8: 0x156e, 0x17e9: 0x1572, + 0x17ea: 0x156a, 0x17eb: 0x157e, 0x17ec: 0x1582, 0x17ed: 0x194f, 0x17ee: 0x158e, 0x17ef: 0x078e, + 0x17f0: 0x1596, 0x17f1: 0x1954, 0x17f2: 0x0792, 0x17f3: 0x15ce, 0x17f4: 0x0bbe, 0x17f5: 0x15e6, + 0x17f6: 0x1959, 0x17f7: 0x1963, 0x17f8: 0x0796, 0x17f9: 0x079a, 0x17fa: 0x160e, 0x17fb: 0x1968, + 0x17fc: 0x079e, 0x17fd: 0x196d, 0x17fe: 0x1626, 0x17ff: 0x1626, + // Block 0x60, offset 0x1800 + 0x1800: 0x162e, 0x1801: 0x1972, 0x1802: 0x1646, 0x1803: 0x07a2, 0x1804: 0x1656, 0x1805: 0x1662, + 0x1806: 0x166a, 0x1807: 0x1672, 0x1808: 0x07a6, 0x1809: 0x1977, 0x180a: 0x1686, 0x180b: 0x16a2, + 0x180c: 0x16ae, 0x180d: 0x07aa, 0x180e: 0x07ae, 0x180f: 0x16b2, 0x1810: 0x197c, 0x1811: 0x07b2, + 0x1812: 0x1981, 0x1813: 0x1986, 0x1814: 0x198b, 0x1815: 0x16d6, 0x1816: 0x07b6, 0x1817: 0x16ea, + 0x1818: 0x16f2, 0x1819: 0x16f6, 0x181a: 0x16fe, 0x181b: 0x1706, 0x181c: 0x170e, 0x181d: 0x1995, +} + +// nfkcIndex: 22 blocks, 1408 entries, 2816 bytes +// Block 0 is the zero block. +var nfkcIndex = [1408]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x5f, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x60, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x61, 0xcb: 0x62, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, + 0xd0: 0x0a, 0xd1: 0x63, 0xd2: 0x64, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x65, + 0xd8: 0x66, 0xd9: 0x0d, 0xdb: 0x67, 0xdc: 0x68, 0xdd: 0x69, 0xdf: 0x6a, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, + 0xf0: 0x13, + // Block 0x4, offset 0x100 + 0x120: 0x6b, 0x121: 0x6c, 0x122: 0x6d, 0x123: 0x0e, 0x124: 0x6e, 0x125: 0x6f, 0x126: 0x70, 0x127: 0x71, + 0x128: 0x72, 0x129: 0x73, 0x12a: 0x74, 0x12b: 0x75, 0x12c: 0x70, 0x12d: 0x76, 0x12e: 0x77, 0x12f: 0x78, + 0x130: 0x74, 0x131: 0x79, 0x132: 0x7a, 0x133: 0x7b, 0x134: 0x7c, 0x135: 0x7d, 0x137: 0x7e, + 0x138: 0x7f, 0x139: 0x80, 0x13a: 0x81, 0x13b: 0x82, 0x13c: 0x83, 0x13d: 0x84, 0x13e: 0x85, 0x13f: 0x86, + // Block 0x5, offset 0x140 + 0x140: 0x87, 0x142: 0x88, 0x143: 0x89, 0x144: 0x8a, 0x145: 0x8b, 0x146: 0x8c, 0x147: 0x8d, + 0x14d: 0x8e, + 0x15c: 0x8f, 0x15f: 0x90, + 0x162: 0x91, 0x164: 0x92, + 0x168: 0x93, 0x169: 0x94, 0x16a: 0x95, 0x16b: 0x96, 0x16c: 0x0f, 0x16d: 0x97, 0x16e: 0x98, 0x16f: 0x99, + 0x170: 0x9a, 0x173: 0x9b, 0x174: 0x9c, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12, + 0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a, + // Block 0x6, offset 0x180 + 0x180: 0x9d, 0x181: 0x9e, 0x182: 0x9f, 0x183: 0xa0, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0xa1, 0x187: 0xa2, + 0x188: 0xa3, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0xa4, 0x18c: 0xa5, + 0x191: 0x1f, 0x192: 0x20, 0x193: 0xa6, + 0x1a8: 0xa7, 0x1a9: 0xa8, 0x1ab: 0xa9, + 0x1b1: 0xaa, 0x1b3: 0xab, 0x1b5: 0xac, 0x1b7: 0xad, + 0x1ba: 0xae, 0x1bb: 0xaf, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xb0, + // Block 0x7, offset 0x1c0 + 0x1c0: 0xb1, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xb2, 0x1c5: 0x27, 0x1c6: 0x28, + 0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30, + // Block 0x8, offset 0x200 + 0x219: 0xb3, 0x21a: 0xb4, 0x21b: 0xb5, 0x21d: 0xb6, 0x21f: 0xb7, + 0x220: 0xb8, 0x223: 0xb9, 0x224: 0xba, 0x225: 0xbb, 0x226: 0xbc, 0x227: 0xbd, + 0x22a: 0xbe, 0x22b: 0xbf, 0x22d: 0xc0, 0x22f: 0xc1, + 0x230: 0xc2, 0x231: 0xc3, 0x232: 0xc4, 0x233: 0xc5, 0x234: 0xc6, 0x235: 0xc7, 0x236: 0xc8, 0x237: 0xc2, + 0x238: 0xc3, 0x239: 0xc4, 0x23a: 0xc5, 0x23b: 0xc6, 0x23c: 0xc7, 0x23d: 0xc8, 0x23e: 0xc2, 0x23f: 0xc3, + // Block 0x9, offset 0x240 + 0x240: 0xc4, 0x241: 0xc5, 0x242: 0xc6, 0x243: 0xc7, 0x244: 0xc8, 0x245: 0xc2, 0x246: 0xc3, 0x247: 0xc4, + 0x248: 0xc5, 0x249: 0xc6, 0x24a: 0xc7, 0x24b: 0xc8, 0x24c: 0xc2, 0x24d: 0xc3, 0x24e: 0xc4, 0x24f: 0xc5, + 0x250: 0xc6, 0x251: 0xc7, 0x252: 0xc8, 0x253: 0xc2, 0x254: 0xc3, 0x255: 0xc4, 0x256: 0xc5, 0x257: 0xc6, + 0x258: 0xc7, 0x259: 0xc8, 0x25a: 0xc2, 0x25b: 0xc3, 0x25c: 0xc4, 0x25d: 0xc5, 0x25e: 0xc6, 0x25f: 0xc7, + 0x260: 0xc8, 0x261: 0xc2, 0x262: 0xc3, 0x263: 0xc4, 0x264: 0xc5, 0x265: 0xc6, 0x266: 0xc7, 0x267: 0xc8, + 0x268: 0xc2, 0x269: 0xc3, 0x26a: 0xc4, 0x26b: 0xc5, 0x26c: 0xc6, 0x26d: 0xc7, 0x26e: 0xc8, 0x26f: 0xc2, + 0x270: 0xc3, 0x271: 0xc4, 0x272: 0xc5, 0x273: 0xc6, 0x274: 0xc7, 0x275: 0xc8, 0x276: 0xc2, 0x277: 0xc3, + 0x278: 0xc4, 0x279: 0xc5, 0x27a: 0xc6, 0x27b: 0xc7, 0x27c: 0xc8, 0x27d: 0xc2, 0x27e: 0xc3, 0x27f: 0xc4, + // Block 0xa, offset 0x280 + 0x280: 0xc5, 0x281: 0xc6, 0x282: 0xc7, 0x283: 0xc8, 0x284: 0xc2, 0x285: 0xc3, 0x286: 0xc4, 0x287: 0xc5, + 0x288: 0xc6, 0x289: 0xc7, 0x28a: 0xc8, 0x28b: 0xc2, 0x28c: 0xc3, 0x28d: 0xc4, 0x28e: 0xc5, 0x28f: 0xc6, + 0x290: 0xc7, 0x291: 0xc8, 0x292: 0xc2, 0x293: 0xc3, 0x294: 0xc4, 0x295: 0xc5, 0x296: 0xc6, 0x297: 0xc7, + 0x298: 0xc8, 0x299: 0xc2, 0x29a: 0xc3, 0x29b: 0xc4, 0x29c: 0xc5, 0x29d: 0xc6, 0x29e: 0xc7, 0x29f: 0xc8, + 0x2a0: 0xc2, 0x2a1: 0xc3, 0x2a2: 0xc4, 0x2a3: 0xc5, 0x2a4: 0xc6, 0x2a5: 0xc7, 0x2a6: 0xc8, 0x2a7: 0xc2, + 0x2a8: 0xc3, 0x2a9: 0xc4, 0x2aa: 0xc5, 0x2ab: 0xc6, 0x2ac: 0xc7, 0x2ad: 0xc8, 0x2ae: 0xc2, 0x2af: 0xc3, + 0x2b0: 0xc4, 0x2b1: 0xc5, 0x2b2: 0xc6, 0x2b3: 0xc7, 0x2b4: 0xc8, 0x2b5: 0xc2, 0x2b6: 0xc3, 0x2b7: 0xc4, + 0x2b8: 0xc5, 0x2b9: 0xc6, 0x2ba: 0xc7, 0x2bb: 0xc8, 0x2bc: 0xc2, 0x2bd: 0xc3, 0x2be: 0xc4, 0x2bf: 0xc5, + // Block 0xb, offset 0x2c0 + 0x2c0: 0xc6, 0x2c1: 0xc7, 0x2c2: 0xc8, 0x2c3: 0xc2, 0x2c4: 0xc3, 0x2c5: 0xc4, 0x2c6: 0xc5, 0x2c7: 0xc6, + 0x2c8: 0xc7, 0x2c9: 0xc8, 0x2ca: 0xc2, 0x2cb: 0xc3, 0x2cc: 0xc4, 0x2cd: 0xc5, 0x2ce: 0xc6, 0x2cf: 0xc7, + 0x2d0: 0xc8, 0x2d1: 0xc2, 0x2d2: 0xc3, 0x2d3: 0xc4, 0x2d4: 0xc5, 0x2d5: 0xc6, 0x2d6: 0xc7, 0x2d7: 0xc8, + 0x2d8: 0xc2, 0x2d9: 0xc3, 0x2da: 0xc4, 0x2db: 0xc5, 0x2dc: 0xc6, 0x2dd: 0xc7, 0x2de: 0xc9, + // Block 0xc, offset 0x300 + 0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34, + 0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c, + 0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44, + 0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xca, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b, + // Block 0xd, offset 0x340 + 0x347: 0xcb, + 0x34b: 0xcc, 0x34d: 0xcd, + 0x35e: 0x4c, + 0x368: 0xce, 0x36b: 0xcf, + 0x374: 0xd0, + 0x37a: 0xd1, 0x37b: 0xd2, 0x37d: 0xd3, 0x37e: 0xd4, + // Block 0xe, offset 0x380 + 0x381: 0xd5, 0x382: 0xd6, 0x384: 0xd7, 0x385: 0xbc, 0x387: 0xd8, + 0x388: 0xd9, 0x38b: 0xda, 0x38c: 0xdb, 0x38d: 0xdc, + 0x391: 0xdd, 0x392: 0xde, 0x393: 0xdf, 0x396: 0xe0, 0x397: 0xe1, + 0x398: 0xe2, 0x39a: 0xe3, 0x39c: 0xe4, + 0x3a0: 0xe5, 0x3a4: 0xe6, 0x3a5: 0xe7, 0x3a7: 0xe8, + 0x3a8: 0xe9, 0x3a9: 0xea, 0x3aa: 0xeb, + 0x3b0: 0xe2, 0x3b5: 0xec, 0x3b6: 0xed, + 0x3bd: 0xee, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xef, 0x3ec: 0xf0, + 0x3ff: 0xf1, + // Block 0x10, offset 0x400 + 0x432: 0xf2, + // Block 0x11, offset 0x440 + 0x445: 0xf3, 0x446: 0xf4, 0x447: 0xf5, + 0x449: 0xf6, + 0x450: 0xf7, 0x451: 0xf8, 0x452: 0xf9, 0x453: 0xfa, 0x454: 0xfb, 0x455: 0xfc, 0x456: 0xfd, 0x457: 0xfe, + 0x458: 0xff, 0x459: 0x100, 0x45a: 0x4d, 0x45b: 0x101, 0x45c: 0x102, 0x45d: 0x103, 0x45e: 0x104, 0x45f: 0x4e, + // Block 0x12, offset 0x480 + 0x480: 0x4f, 0x481: 0x50, 0x482: 0x105, 0x484: 0xf0, + 0x48a: 0x106, 0x48b: 0x107, + 0x493: 0x108, + 0x4a3: 0x109, 0x4a5: 0x10a, + 0x4b8: 0x51, 0x4b9: 0x52, 0x4ba: 0x53, + // Block 0x13, offset 0x4c0 + 0x4c4: 0x54, 0x4c5: 0x10b, 0x4c6: 0x10c, + 0x4c8: 0x55, 0x4c9: 0x10d, + 0x4ef: 0x10e, + // Block 0x14, offset 0x500 + 0x520: 0x56, 0x521: 0x57, 0x522: 0x58, 0x523: 0x59, 0x524: 0x5a, 0x525: 0x5b, 0x526: 0x5c, 0x527: 0x5d, + 0x528: 0x5e, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfkcSparseOffset: 176 entries, 352 bytes +var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1c, 0x26, 0x36, 0x38, 0x3d, 0x48, 0x57, 0x64, 0x6c, 0x71, 0x76, 0x78, 0x7c, 0x84, 0x8b, 0x8e, 0x96, 0x9a, 0x9e, 0xa0, 0xa2, 0xab, 0xaf, 0xb6, 0xbb, 0xbe, 0xc8, 0xcb, 0xd2, 0xda, 0xde, 0xe0, 0xe4, 0xe8, 0xee, 0xff, 0x10b, 0x10d, 0x113, 0x115, 0x117, 0x119, 0x11b, 0x11d, 0x11f, 0x121, 0x124, 0x127, 0x129, 0x12c, 0x12f, 0x133, 0x139, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x174, 0x182, 0x192, 0x1a0, 0x1a7, 0x1ad, 0x1bc, 0x1c0, 0x1c2, 0x1c6, 0x1c8, 0x1cb, 0x1cd, 0x1d0, 0x1d2, 0x1d5, 0x1d7, 0x1d9, 0x1db, 0x1e7, 0x1f1, 0x1fb, 0x1fe, 0x202, 0x204, 0x206, 0x20b, 0x20e, 0x211, 0x213, 0x215, 0x217, 0x219, 0x21f, 0x222, 0x227, 0x229, 0x230, 0x236, 0x23c, 0x244, 0x24a, 0x250, 0x256, 0x25a, 0x25c, 0x25e, 0x260, 0x262, 0x268, 0x26b, 0x26d, 0x26f, 0x271, 0x277, 0x27b, 0x27f, 0x287, 0x28e, 0x291, 0x294, 0x296, 0x299, 0x2a1, 0x2a5, 0x2ac, 0x2af, 0x2b5, 0x2b7, 0x2b9, 0x2bc, 0x2be, 0x2c1, 0x2c6, 0x2c8, 0x2ca, 0x2cc, 0x2ce, 0x2d0, 0x2d3, 0x2d5, 0x2d7, 0x2d9, 0x2db, 0x2dd, 0x2df, 0x2ec, 0x2f6, 0x2f8, 0x2fa, 0x2fe, 0x303, 0x30f, 0x314, 0x31d, 0x323, 0x328, 0x32c, 0x331, 0x335, 0x345, 0x353, 0x361, 0x36f, 0x371, 0x373, 0x375, 0x379, 0x37b, 0x37e, 0x389, 0x38b, 0x395} + +// nfkcSparseValues: 919 entries, 3676 bytes +var nfkcSparseValues = [919]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0002, lo: 0x0d}, + {value: 0x0001, lo: 0xa0, hi: 0xa0}, + {value: 0x43b9, lo: 0xa8, hi: 0xa8}, + {value: 0x0083, lo: 0xaa, hi: 0xaa}, + {value: 0x43a5, lo: 0xaf, hi: 0xaf}, + {value: 0x0025, lo: 0xb2, hi: 0xb3}, + {value: 0x439b, lo: 0xb4, hi: 0xb4}, + {value: 0x0260, lo: 0xb5, hi: 0xb5}, + {value: 0x43d2, lo: 0xb8, hi: 0xb8}, + {value: 0x0023, lo: 0xb9, hi: 0xb9}, + {value: 0x009f, lo: 0xba, hi: 0xba}, + {value: 0x234c, lo: 0xbc, hi: 0xbc}, + {value: 0x2340, lo: 0xbd, hi: 0xbd}, + {value: 0x23e2, lo: 0xbe, hi: 0xbe}, + // Block 0x1, offset 0xe + {value: 0x0091, lo: 0x03}, + {value: 0x4823, lo: 0xa0, hi: 0xa1}, + {value: 0x4855, lo: 0xaf, hi: 0xb0}, + {value: 0xa000, lo: 0xb7, hi: 0xb7}, + // Block 0x2, offset 0x12 + {value: 0x0004, lo: 0x09}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x0091, lo: 0xb0, hi: 0xb0}, + {value: 0x0140, lo: 0xb1, hi: 0xb1}, + {value: 0x0095, lo: 0xb2, hi: 0xb2}, + {value: 0x00a5, lo: 0xb3, hi: 0xb3}, + {value: 0x0179, lo: 0xb4, hi: 0xb4}, + {value: 0x017f, lo: 0xb5, hi: 0xb5}, + {value: 0x018b, lo: 0xb6, hi: 0xb6}, + {value: 0x00af, lo: 0xb7, hi: 0xb8}, + // Block 0x3, offset 0x1c + {value: 0x000a, lo: 0x09}, + {value: 0x43af, lo: 0x98, hi: 0x98}, + {value: 0x43b4, lo: 0x99, hi: 0x9a}, + {value: 0x43d7, lo: 0x9b, hi: 0x9b}, + {value: 0x43a0, lo: 0x9c, hi: 0x9c}, + {value: 0x43c3, lo: 0x9d, hi: 0x9d}, + {value: 0x0137, lo: 0xa0, hi: 0xa0}, + {value: 0x0099, lo: 0xa1, hi: 0xa1}, + {value: 0x00a7, lo: 0xa2, hi: 0xa3}, + {value: 0x01b8, lo: 0xa4, hi: 0xa4}, + // Block 0x4, offset 0x26 + {value: 0x0000, lo: 0x0f}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0xa000, lo: 0x8d, hi: 0x8d}, + {value: 0x38e6, lo: 0x90, hi: 0x90}, + {value: 0x38f2, lo: 0x91, hi: 0x91}, + {value: 0x38e0, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x3958, lo: 0x97, hi: 0x97}, + {value: 0x3922, lo: 0x9c, hi: 0x9c}, + {value: 0x390a, lo: 0x9d, hi: 0x9d}, + {value: 0x3934, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x395e, lo: 0xb6, hi: 0xb6}, + {value: 0x3964, lo: 0xb7, hi: 0xb7}, + // Block 0x5, offset 0x36 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x83, hi: 0x87}, + // Block 0x6, offset 0x38 + {value: 0x0001, lo: 0x04}, + {value: 0x8114, lo: 0x81, hi: 0x82}, + {value: 0x8133, lo: 0x84, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + {value: 0x810e, lo: 0x87, hi: 0x87}, + // Block 0x7, offset 0x3d + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x97}, + {value: 0x811a, lo: 0x98, hi: 0x98}, + {value: 0x811b, lo: 0x99, hi: 0x99}, + {value: 0x811c, lo: 0x9a, hi: 0x9a}, + {value: 0x3982, lo: 0xa2, hi: 0xa2}, + {value: 0x3988, lo: 0xa3, hi: 0xa3}, + {value: 0x3994, lo: 0xa4, hi: 0xa4}, + {value: 0x398e, lo: 0xa5, hi: 0xa5}, + {value: 0x399a, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x8, offset 0x48 + {value: 0x0000, lo: 0x0e}, + {value: 0x39ac, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x39a0, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x39a6, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8133, lo: 0x96, hi: 0x9c}, + {value: 0x8133, lo: 0x9f, hi: 0xa2}, + {value: 0x812e, lo: 0xa3, hi: 0xa3}, + {value: 0x8133, lo: 0xa4, hi: 0xa4}, + {value: 0x8133, lo: 0xa7, hi: 0xa8}, + {value: 0x812e, lo: 0xaa, hi: 0xaa}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + // Block 0x9, offset 0x57 + {value: 0x0000, lo: 0x0c}, + {value: 0x8120, lo: 0x91, hi: 0x91}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x812e, lo: 0xb1, hi: 0xb1}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb5, hi: 0xb6}, + {value: 0x812e, lo: 0xb7, hi: 0xb9}, + {value: 0x8133, lo: 0xba, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbc}, + {value: 0x8133, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbe, hi: 0xbe}, + {value: 0x8133, lo: 0xbf, hi: 0xbf}, + // Block 0xa, offset 0x64 + {value: 0x0005, lo: 0x07}, + {value: 0x8133, lo: 0x80, hi: 0x80}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x812e, lo: 0x82, hi: 0x83}, + {value: 0x812e, lo: 0x84, hi: 0x85}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x812e, lo: 0x88, hi: 0x89}, + {value: 0x8133, lo: 0x8a, hi: 0x8a}, + // Block 0xb, offset 0x6c + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0xab, hi: 0xb1}, + {value: 0x812e, lo: 0xb2, hi: 0xb2}, + {value: 0x8133, lo: 0xb3, hi: 0xb3}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0xc, offset 0x71 + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0x96, hi: 0x99}, + {value: 0x8133, lo: 0x9b, hi: 0xa3}, + {value: 0x8133, lo: 0xa5, hi: 0xa7}, + {value: 0x8133, lo: 0xa9, hi: 0xad}, + // Block 0xd, offset 0x76 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + // Block 0xe, offset 0x78 + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0x98, hi: 0x98}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + {value: 0x8133, lo: 0x9c, hi: 0x9f}, + // Block 0xf, offset 0x7c + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x4019, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x4021, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x4029, lo: 0xb4, hi: 0xb4}, + {value: 0x9903, lo: 0xbc, hi: 0xbc}, + // Block 0x10, offset 0x84 + {value: 0x0008, lo: 0x06}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8133, lo: 0x91, hi: 0x91}, + {value: 0x812e, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x93, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x94}, + {value: 0x465d, lo: 0x98, hi: 0x9f}, + // Block 0x11, offset 0x8b + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x12, offset 0x8e + {value: 0x0008, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2dd5, lo: 0x8b, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x469d, lo: 0x9c, hi: 0x9d}, + {value: 0x46ad, lo: 0x9f, hi: 0x9f}, + {value: 0x8133, lo: 0xbe, hi: 0xbe}, + // Block 0x13, offset 0x96 + {value: 0x0000, lo: 0x03}, + {value: 0x46d5, lo: 0xb3, hi: 0xb3}, + {value: 0x46dd, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x14, offset 0x9a + {value: 0x0008, lo: 0x03}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x46b5, lo: 0x99, hi: 0x9b}, + {value: 0x46cd, lo: 0x9e, hi: 0x9e}, + // Block 0x15, offset 0x9e + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x16, offset 0xa0 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + // Block 0x17, offset 0xa2 + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2ded, lo: 0x88, hi: 0x88}, + {value: 0x2de5, lo: 0x8b, hi: 0x8b}, + {value: 0x2df5, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x46e5, lo: 0x9c, hi: 0x9c}, + {value: 0x46ed, lo: 0x9d, hi: 0x9d}, + // Block 0x18, offset 0xab + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2dfd, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x19, offset 0xaf + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2e05, lo: 0x8a, hi: 0x8a}, + {value: 0x2e15, lo: 0x8b, hi: 0x8b}, + {value: 0x2e0d, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1a, offset 0xb6 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x4031, lo: 0x88, hi: 0x88}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8121, lo: 0x95, hi: 0x96}, + // Block 0x1b, offset 0xbb + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1c, offset 0xbe + {value: 0x0000, lo: 0x09}, + {value: 0x2e1d, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2e25, lo: 0x87, hi: 0x87}, + {value: 0x2e2d, lo: 0x88, hi: 0x88}, + {value: 0x3091, lo: 0x8a, hi: 0x8a}, + {value: 0x2f19, lo: 0x8b, hi: 0x8b}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1d, offset 0xc8 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1e, offset 0xcb + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2e35, lo: 0x8a, hi: 0x8a}, + {value: 0x2e45, lo: 0x8b, hi: 0x8b}, + {value: 0x2e3d, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1f, offset 0xd2 + {value: 0x6ab3, lo: 0x07}, + {value: 0x9905, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4039, lo: 0x9a, hi: 0x9a}, + {value: 0x3099, lo: 0x9c, hi: 0x9c}, + {value: 0x2f24, lo: 0x9d, hi: 0x9d}, + {value: 0x2e4d, lo: 0x9e, hi: 0x9f}, + // Block 0x20, offset 0xda + {value: 0x0000, lo: 0x03}, + {value: 0x2751, lo: 0xb3, hi: 0xb3}, + {value: 0x8123, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x21, offset 0xde + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0x88, hi: 0x8b}, + // Block 0x22, offset 0xe0 + {value: 0x0000, lo: 0x03}, + {value: 0x2766, lo: 0xb3, hi: 0xb3}, + {value: 0x8125, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x23, offset 0xe4 + {value: 0x0000, lo: 0x03}, + {value: 0x8126, lo: 0x88, hi: 0x8b}, + {value: 0x2758, lo: 0x9c, hi: 0x9c}, + {value: 0x275f, lo: 0x9d, hi: 0x9d}, + // Block 0x24, offset 0xe8 + {value: 0x0000, lo: 0x05}, + {value: 0x03fe, lo: 0x8c, hi: 0x8c}, + {value: 0x812e, lo: 0x98, hi: 0x99}, + {value: 0x812e, lo: 0xb5, hi: 0xb5}, + {value: 0x812e, lo: 0xb7, hi: 0xb7}, + {value: 0x812c, lo: 0xb9, hi: 0xb9}, + // Block 0x25, offset 0xee + {value: 0x0000, lo: 0x10}, + {value: 0x2774, lo: 0x83, hi: 0x83}, + {value: 0x277b, lo: 0x8d, hi: 0x8d}, + {value: 0x2782, lo: 0x92, hi: 0x92}, + {value: 0x2789, lo: 0x97, hi: 0x97}, + {value: 0x2790, lo: 0x9c, hi: 0x9c}, + {value: 0x276d, lo: 0xa9, hi: 0xa9}, + {value: 0x8127, lo: 0xb1, hi: 0xb1}, + {value: 0x8128, lo: 0xb2, hi: 0xb2}, + {value: 0x4bc5, lo: 0xb3, hi: 0xb3}, + {value: 0x8129, lo: 0xb4, hi: 0xb4}, + {value: 0x4bce, lo: 0xb5, hi: 0xb5}, + {value: 0x46f5, lo: 0xb6, hi: 0xb6}, + {value: 0x4735, lo: 0xb7, hi: 0xb7}, + {value: 0x46fd, lo: 0xb8, hi: 0xb8}, + {value: 0x4740, lo: 0xb9, hi: 0xb9}, + {value: 0x8128, lo: 0xba, hi: 0xbd}, + // Block 0x26, offset 0xff + {value: 0x0000, lo: 0x0b}, + {value: 0x8128, lo: 0x80, hi: 0x80}, + {value: 0x4bd7, lo: 0x81, hi: 0x81}, + {value: 0x8133, lo: 0x82, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0x86, hi: 0x87}, + {value: 0x279e, lo: 0x93, hi: 0x93}, + {value: 0x27a5, lo: 0x9d, hi: 0x9d}, + {value: 0x27ac, lo: 0xa2, hi: 0xa2}, + {value: 0x27b3, lo: 0xa7, hi: 0xa7}, + {value: 0x27ba, lo: 0xac, hi: 0xac}, + {value: 0x2797, lo: 0xb9, hi: 0xb9}, + // Block 0x27, offset 0x10b + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x86, hi: 0x86}, + // Block 0x28, offset 0x10d + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2e55, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x29, offset 0x113 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + // Block 0x2a, offset 0x115 + {value: 0x0000, lo: 0x01}, + {value: 0x0402, lo: 0xbc, hi: 0xbc}, + // Block 0x2b, offset 0x117 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x119 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x11b + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x11d + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x11f + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x121 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x94, hi: 0x95}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x124 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x127 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x129 + {value: 0x0004, lo: 0x02}, + {value: 0x812f, lo: 0xb9, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x12c + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x97, hi: 0x97}, + {value: 0x812e, lo: 0x98, hi: 0x98}, + // Block 0x35, offset 0x12f + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + {value: 0x8133, lo: 0xb5, hi: 0xbc}, + {value: 0x812e, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x133 + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + {value: 0x812e, lo: 0xb5, hi: 0xba}, + {value: 0x8133, lo: 0xbb, hi: 0xbc}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbf, hi: 0xbf}, + // Block 0x37, offset 0x139 + {value: 0x0000, lo: 0x06}, + {value: 0x812e, lo: 0x80, hi: 0x80}, + {value: 0x8133, lo: 0x81, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x8133, lo: 0x85, hi: 0x89}, + {value: 0x812e, lo: 0x8a, hi: 0x8a}, + {value: 0x8133, lo: 0x8b, hi: 0x8e}, + // Block 0x38, offset 0x140 + {value: 0x0000, lo: 0x08}, + {value: 0x2e9d, lo: 0x80, hi: 0x80}, + {value: 0x2ea5, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2ead, lo: 0x83, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xab, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xac}, + {value: 0x8133, lo: 0xad, hi: 0xb3}, + // Block 0x39, offset 0x149 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xaa, hi: 0xab}, + // Block 0x3a, offset 0x14b + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xa6, hi: 0xa6}, + {value: 0x8105, lo: 0xb2, hi: 0xb3}, + // Block 0x3b, offset 0x14e + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x3c, offset 0x150 + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812e, lo: 0x95, hi: 0x99}, + {value: 0x8133, lo: 0x9a, hi: 0x9b}, + {value: 0x812e, lo: 0x9c, hi: 0x9f}, + {value: 0x8133, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x8133, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb8, hi: 0xb9}, + // Block 0x3d, offset 0x15b + {value: 0x0002, lo: 0x0a}, + {value: 0x0043, lo: 0xac, hi: 0xac}, + {value: 0x00d1, lo: 0xad, hi: 0xad}, + {value: 0x0045, lo: 0xae, hi: 0xae}, + {value: 0x0049, lo: 0xb0, hi: 0xb1}, + {value: 0x00ec, lo: 0xb2, hi: 0xb2}, + {value: 0x004f, lo: 0xb3, hi: 0xba}, + {value: 0x005f, lo: 0xbc, hi: 0xbc}, + {value: 0x00fe, lo: 0xbd, hi: 0xbd}, + {value: 0x0061, lo: 0xbe, hi: 0xbe}, + {value: 0x0065, lo: 0xbf, hi: 0xbf}, + // Block 0x3e, offset 0x166 + {value: 0x0000, lo: 0x0d}, + {value: 0x0001, lo: 0x80, hi: 0x8a}, + {value: 0x0532, lo: 0x91, hi: 0x91}, + {value: 0x43dc, lo: 0x97, hi: 0x97}, + {value: 0x001d, lo: 0xa4, hi: 0xa4}, + {value: 0x19a0, lo: 0xa5, hi: 0xa5}, + {value: 0x1c8c, lo: 0xa6, hi: 0xa6}, + {value: 0x0001, lo: 0xaf, hi: 0xaf}, + {value: 0x27c1, lo: 0xb3, hi: 0xb3}, + {value: 0x2935, lo: 0xb4, hi: 0xb4}, + {value: 0x27c8, lo: 0xb6, hi: 0xb6}, + {value: 0x293f, lo: 0xb7, hi: 0xb7}, + {value: 0x199a, lo: 0xbc, hi: 0xbc}, + {value: 0x43aa, lo: 0xbe, hi: 0xbe}, + // Block 0x3f, offset 0x174 + {value: 0x0002, lo: 0x0d}, + {value: 0x1a60, lo: 0x87, hi: 0x87}, + {value: 0x1a5d, lo: 0x88, hi: 0x88}, + {value: 0x199d, lo: 0x89, hi: 0x89}, + {value: 0x2ac5, lo: 0x97, hi: 0x97}, + {value: 0x0001, lo: 0x9f, hi: 0x9f}, + {value: 0x0021, lo: 0xb0, hi: 0xb0}, + {value: 0x0093, lo: 0xb1, hi: 0xb1}, + {value: 0x0029, lo: 0xb4, hi: 0xb9}, + {value: 0x0017, lo: 0xba, hi: 0xba}, + {value: 0x055e, lo: 0xbb, hi: 0xbb}, + {value: 0x003b, lo: 0xbc, hi: 0xbc}, + {value: 0x0011, lo: 0xbd, hi: 0xbe}, + {value: 0x009d, lo: 0xbf, hi: 0xbf}, + // Block 0x40, offset 0x182 + {value: 0x0002, lo: 0x0f}, + {value: 0x0021, lo: 0x80, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8a}, + {value: 0x055e, lo: 0x8b, hi: 0x8b}, + {value: 0x003b, lo: 0x8c, hi: 0x8c}, + {value: 0x0011, lo: 0x8d, hi: 0x8e}, + {value: 0x0083, lo: 0x90, hi: 0x90}, + {value: 0x008b, lo: 0x91, hi: 0x91}, + {value: 0x009f, lo: 0x92, hi: 0x92}, + {value: 0x00b1, lo: 0x93, hi: 0x93}, + {value: 0x011f, lo: 0x94, hi: 0x94}, + {value: 0x0091, lo: 0x95, hi: 0x95}, + {value: 0x0097, lo: 0x96, hi: 0x99}, + {value: 0x00a1, lo: 0x9a, hi: 0x9a}, + {value: 0x00a7, lo: 0x9b, hi: 0x9c}, + {value: 0x1ac9, lo: 0xa8, hi: 0xa8}, + // Block 0x41, offset 0x192 + {value: 0x0000, lo: 0x0d}, + {value: 0x8133, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8133, lo: 0x9b, hi: 0x9c}, + {value: 0x8133, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8133, lo: 0xa7, hi: 0xa7}, + {value: 0x812e, lo: 0xa8, hi: 0xa8}, + {value: 0x8133, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xaf}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + // Block 0x42, offset 0x1a0 + {value: 0x0007, lo: 0x06}, + {value: 0x22b0, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3cfa, lo: 0x9a, hi: 0x9b}, + {value: 0x3d08, lo: 0xae, hi: 0xae}, + // Block 0x43, offset 0x1a7 + {value: 0x000e, lo: 0x05}, + {value: 0x3d0f, lo: 0x8d, hi: 0x8e}, + {value: 0x3d16, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + // Block 0x44, offset 0x1ad + {value: 0x017a, lo: 0x0e}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3d24, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3d2b, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3d32, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3d39, lo: 0xa4, hi: 0xa4}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x3d40, lo: 0xa6, hi: 0xa6}, + {value: 0x27cf, lo: 0xac, hi: 0xad}, + {value: 0x27d6, lo: 0xaf, hi: 0xaf}, + {value: 0x2953, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x45, offset 0x1bc + {value: 0x0007, lo: 0x03}, + {value: 0x3da9, lo: 0xa0, hi: 0xa1}, + {value: 0x3dd3, lo: 0xa2, hi: 0xa3}, + {value: 0x3dfd, lo: 0xaa, hi: 0xad}, + // Block 0x46, offset 0x1c0 + {value: 0x0004, lo: 0x01}, + {value: 0x0586, lo: 0xa9, hi: 0xaa}, + // Block 0x47, offset 0x1c2 + {value: 0x0002, lo: 0x03}, + {value: 0x0057, lo: 0x80, hi: 0x8f}, + {value: 0x0083, lo: 0x90, hi: 0xa9}, + {value: 0x0021, lo: 0xaa, hi: 0xaa}, + // Block 0x48, offset 0x1c6 + {value: 0x0000, lo: 0x01}, + {value: 0x2ad2, lo: 0x8c, hi: 0x8c}, + // Block 0x49, offset 0x1c8 + {value: 0x0266, lo: 0x02}, + {value: 0x1cbc, lo: 0xb4, hi: 0xb4}, + {value: 0x1a5a, lo: 0xb5, hi: 0xb6}, + // Block 0x4a, offset 0x1cb + {value: 0x0000, lo: 0x01}, + {value: 0x461e, lo: 0x9c, hi: 0x9c}, + // Block 0x4b, offset 0x1cd + {value: 0x0000, lo: 0x02}, + {value: 0x0095, lo: 0xbc, hi: 0xbc}, + {value: 0x006d, lo: 0xbd, hi: 0xbd}, + // Block 0x4c, offset 0x1d0 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xaf, hi: 0xb1}, + // Block 0x4d, offset 0x1d2 + {value: 0x0000, lo: 0x02}, + {value: 0x057a, lo: 0xaf, hi: 0xaf}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x4e, offset 0x1d5 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa0, hi: 0xbf}, + // Block 0x4f, offset 0x1d7 + {value: 0x0000, lo: 0x01}, + {value: 0x0ebe, lo: 0x9f, hi: 0x9f}, + // Block 0x50, offset 0x1d9 + {value: 0x0000, lo: 0x01}, + {value: 0x172a, lo: 0xb3, hi: 0xb3}, + // Block 0x51, offset 0x1db + {value: 0x0004, lo: 0x0b}, + {value: 0x1692, lo: 0x80, hi: 0x82}, + {value: 0x16aa, lo: 0x83, hi: 0x83}, + {value: 0x16c2, lo: 0x84, hi: 0x85}, + {value: 0x16d2, lo: 0x86, hi: 0x89}, + {value: 0x16e6, lo: 0x8a, hi: 0x8c}, + {value: 0x16fa, lo: 0x8d, hi: 0x8d}, + {value: 0x1702, lo: 0x8e, hi: 0x8e}, + {value: 0x170a, lo: 0x8f, hi: 0x90}, + {value: 0x1716, lo: 0x91, hi: 0x93}, + {value: 0x1726, lo: 0x94, hi: 0x94}, + {value: 0x172e, lo: 0x95, hi: 0x95}, + // Block 0x52, offset 0x1e7 + {value: 0x0004, lo: 0x09}, + {value: 0x0001, lo: 0x80, hi: 0x80}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x8134, lo: 0xac, hi: 0xac}, + {value: 0x812f, lo: 0xad, hi: 0xad}, + {value: 0x8130, lo: 0xae, hi: 0xae}, + {value: 0x8130, lo: 0xaf, hi: 0xaf}, + {value: 0x05ae, lo: 0xb6, hi: 0xb6}, + {value: 0x0982, lo: 0xb8, hi: 0xba}, + // Block 0x53, offset 0x1f1 + {value: 0x0006, lo: 0x09}, + {value: 0x0406, lo: 0xb1, hi: 0xb1}, + {value: 0x040a, lo: 0xb2, hi: 0xb2}, + {value: 0x4b7c, lo: 0xb3, hi: 0xb3}, + {value: 0x040e, lo: 0xb4, hi: 0xb4}, + {value: 0x4b82, lo: 0xb5, hi: 0xb6}, + {value: 0x0412, lo: 0xb7, hi: 0xb7}, + {value: 0x0416, lo: 0xb8, hi: 0xb8}, + {value: 0x041a, lo: 0xb9, hi: 0xb9}, + {value: 0x4b8e, lo: 0xba, hi: 0xbf}, + // Block 0x54, offset 0x1fb + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + {value: 0x8133, lo: 0xb4, hi: 0xbd}, + // Block 0x55, offset 0x1fe + {value: 0x0000, lo: 0x03}, + {value: 0x02d8, lo: 0x9c, hi: 0x9c}, + {value: 0x02de, lo: 0x9d, hi: 0x9d}, + {value: 0x8133, lo: 0x9e, hi: 0x9f}, + // Block 0x56, offset 0x202 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb1}, + // Block 0x57, offset 0x204 + {value: 0x0000, lo: 0x01}, + {value: 0x173e, lo: 0xb0, hi: 0xb0}, + // Block 0x58, offset 0x206 + {value: 0x0006, lo: 0x04}, + {value: 0x0047, lo: 0xb2, hi: 0xb3}, + {value: 0x0063, lo: 0xb4, hi: 0xb4}, + {value: 0x00dd, lo: 0xb8, hi: 0xb8}, + {value: 0x00e9, lo: 0xb9, hi: 0xb9}, + // Block 0x59, offset 0x20b + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xac, hi: 0xac}, + // Block 0x5a, offset 0x20e + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xa0, hi: 0xb1}, + // Block 0x5b, offset 0x211 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xab, hi: 0xad}, + // Block 0x5c, offset 0x213 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x93, hi: 0x93}, + // Block 0x5d, offset 0x215 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb3, hi: 0xb3}, + // Block 0x5e, offset 0x217 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + // Block 0x5f, offset 0x219 + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb7, hi: 0xb8}, + {value: 0x8133, lo: 0xbe, hi: 0xbf}, + // Block 0x60, offset 0x21f + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + // Block 0x61, offset 0x222 + {value: 0x000c, lo: 0x04}, + {value: 0x173a, lo: 0x9c, hi: 0x9d}, + {value: 0x014f, lo: 0x9e, hi: 0x9e}, + {value: 0x174a, lo: 0x9f, hi: 0x9f}, + {value: 0x01a6, lo: 0xa9, hi: 0xa9}, + // Block 0x62, offset 0x227 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xad, hi: 0xad}, + // Block 0x63, offset 0x229 + {value: 0x0000, lo: 0x06}, + {value: 0xe500, lo: 0x80, hi: 0x80}, + {value: 0xc600, lo: 0x81, hi: 0x9b}, + {value: 0xe500, lo: 0x9c, hi: 0x9c}, + {value: 0xc600, lo: 0x9d, hi: 0xb7}, + {value: 0xe500, lo: 0xb8, hi: 0xb8}, + {value: 0xc600, lo: 0xb9, hi: 0xbf}, + // Block 0x64, offset 0x230 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x93}, + {value: 0xe500, lo: 0x94, hi: 0x94}, + {value: 0xc600, lo: 0x95, hi: 0xaf}, + {value: 0xe500, lo: 0xb0, hi: 0xb0}, + {value: 0xc600, lo: 0xb1, hi: 0xbf}, + // Block 0x65, offset 0x236 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8b}, + {value: 0xe500, lo: 0x8c, hi: 0x8c}, + {value: 0xc600, lo: 0x8d, hi: 0xa7}, + {value: 0xe500, lo: 0xa8, hi: 0xa8}, + {value: 0xc600, lo: 0xa9, hi: 0xbf}, + // Block 0x66, offset 0x23c + {value: 0x0000, lo: 0x07}, + {value: 0xc600, lo: 0x80, hi: 0x83}, + {value: 0xe500, lo: 0x84, hi: 0x84}, + {value: 0xc600, lo: 0x85, hi: 0x9f}, + {value: 0xe500, lo: 0xa0, hi: 0xa0}, + {value: 0xc600, lo: 0xa1, hi: 0xbb}, + {value: 0xe500, lo: 0xbc, hi: 0xbc}, + {value: 0xc600, lo: 0xbd, hi: 0xbf}, + // Block 0x67, offset 0x244 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x97}, + {value: 0xe500, lo: 0x98, hi: 0x98}, + {value: 0xc600, lo: 0x99, hi: 0xb3}, + {value: 0xe500, lo: 0xb4, hi: 0xb4}, + {value: 0xc600, lo: 0xb5, hi: 0xbf}, + // Block 0x68, offset 0x24a + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8f}, + {value: 0xe500, lo: 0x90, hi: 0x90}, + {value: 0xc600, lo: 0x91, hi: 0xab}, + {value: 0xe500, lo: 0xac, hi: 0xac}, + {value: 0xc600, lo: 0xad, hi: 0xbf}, + // Block 0x69, offset 0x250 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + {value: 0xe500, lo: 0xa4, hi: 0xa4}, + {value: 0xc600, lo: 0xa5, hi: 0xbf}, + // Block 0x6a, offset 0x256 + {value: 0x0000, lo: 0x03}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + // Block 0x6b, offset 0x25a + {value: 0x0002, lo: 0x01}, + {value: 0x0003, lo: 0x81, hi: 0xbf}, + // Block 0x6c, offset 0x25c + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0x6d, offset 0x25e + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xa0, hi: 0xa0}, + // Block 0x6e, offset 0x260 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb6, hi: 0xba}, + // Block 0x6f, offset 0x262 + {value: 0x002d, lo: 0x05}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + {value: 0x8133, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x70, offset 0x268 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xa5, hi: 0xa5}, + {value: 0x812e, lo: 0xa6, hi: 0xa6}, + // Block 0x71, offset 0x26b + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa4, hi: 0xa7}, + // Block 0x72, offset 0x26d + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + // Block 0x73, offset 0x26f + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbf}, + // Block 0x74, offset 0x271 + {value: 0x0000, lo: 0x05}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x8133, lo: 0x88, hi: 0x8a}, + {value: 0x812e, lo: 0x8b, hi: 0x8b}, + {value: 0x8133, lo: 0x8c, hi: 0x8c}, + {value: 0x812e, lo: 0x8d, hi: 0x90}, + // Block 0x75, offset 0x277 + {value: 0x0005, lo: 0x03}, + {value: 0x8133, lo: 0x82, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + // Block 0x76, offset 0x27b + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xb0, hi: 0xb0}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x77, offset 0x27f + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4379, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4383, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x438d, lo: 0xab, hi: 0xab}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x78, offset 0x287 + {value: 0x0000, lo: 0x06}, + {value: 0x8133, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2eb5, lo: 0xae, hi: 0xae}, + {value: 0x2ebf, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8105, lo: 0xb3, hi: 0xb4}, + // Block 0x79, offset 0x28e + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0x7a, offset 0x291 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb5, hi: 0xb5}, + {value: 0x8103, lo: 0xb6, hi: 0xb6}, + // Block 0x7b, offset 0x294 + {value: 0x0002, lo: 0x01}, + {value: 0x8103, lo: 0xa9, hi: 0xaa}, + // Block 0x7c, offset 0x296 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x7d, offset 0x299 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2ec9, lo: 0x8b, hi: 0x8b}, + {value: 0x2ed3, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8133, lo: 0xa6, hi: 0xac}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + // Block 0x7e, offset 0x2a1 + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x86, hi: 0x86}, + {value: 0x8133, lo: 0x9e, hi: 0x9e}, + // Block 0x7f, offset 0x2a5 + {value: 0x6a23, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2ee7, lo: 0xbb, hi: 0xbb}, + {value: 0x2edd, lo: 0xbc, hi: 0xbd}, + {value: 0x2ef1, lo: 0xbe, hi: 0xbe}, + // Block 0x80, offset 0x2ac + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x81, offset 0x2af + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2efb, lo: 0xba, hi: 0xba}, + {value: 0x2f05, lo: 0xbb, hi: 0xbb}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x82, offset 0x2b5 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x80, hi: 0x80}, + // Block 0x83, offset 0x2b7 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x84, offset 0x2b9 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x85, offset 0x2bc + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xab, hi: 0xab}, + // Block 0x86, offset 0x2be + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb9, hi: 0xb9}, + {value: 0x8103, lo: 0xba, hi: 0xba}, + // Block 0x87, offset 0x2c1 + {value: 0x0000, lo: 0x04}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb5, hi: 0xb5}, + {value: 0x2f0f, lo: 0xb8, hi: 0xb8}, + {value: 0x8105, lo: 0xbd, hi: 0xbe}, + // Block 0x88, offset 0x2c6 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x89, offset 0x2c8 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + // Block 0x8a, offset 0x2ca + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x8b, offset 0x2cc + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x87, hi: 0x87}, + // Block 0x8c, offset 0x2ce + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x99, hi: 0x99}, + // Block 0x8d, offset 0x2d0 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0x82, hi: 0x82}, + {value: 0x8105, lo: 0x84, hi: 0x85}, + // Block 0x8e, offset 0x2d3 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x97, hi: 0x97}, + // Block 0x8f, offset 0x2d5 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x81, hi: 0x82}, + // Block 0x90, offset 0x2d7 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x91, offset 0x2d9 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb6}, + // Block 0x92, offset 0x2db + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb0, hi: 0xb1}, + // Block 0x93, offset 0x2dd + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x94, offset 0x2df + {value: 0x0000, lo: 0x0c}, + {value: 0x470d, lo: 0x9e, hi: 0x9e}, + {value: 0x4717, lo: 0x9f, hi: 0x9f}, + {value: 0x474b, lo: 0xa0, hi: 0xa0}, + {value: 0x4759, lo: 0xa1, hi: 0xa1}, + {value: 0x4767, lo: 0xa2, hi: 0xa2}, + {value: 0x4775, lo: 0xa3, hi: 0xa3}, + {value: 0x4783, lo: 0xa4, hi: 0xa4}, + {value: 0x812c, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8131, lo: 0xad, hi: 0xad}, + {value: 0x812c, lo: 0xae, hi: 0xb2}, + {value: 0x812e, lo: 0xbb, hi: 0xbf}, + // Block 0x95, offset 0x2ec + {value: 0x0000, lo: 0x09}, + {value: 0x812e, lo: 0x80, hi: 0x82}, + {value: 0x8133, lo: 0x85, hi: 0x89}, + {value: 0x812e, lo: 0x8a, hi: 0x8b}, + {value: 0x8133, lo: 0xaa, hi: 0xad}, + {value: 0x4721, lo: 0xbb, hi: 0xbb}, + {value: 0x472b, lo: 0xbc, hi: 0xbc}, + {value: 0x4791, lo: 0xbd, hi: 0xbd}, + {value: 0x47ad, lo: 0xbe, hi: 0xbe}, + {value: 0x479f, lo: 0xbf, hi: 0xbf}, + // Block 0x96, offset 0x2f6 + {value: 0x0000, lo: 0x01}, + {value: 0x47bb, lo: 0x80, hi: 0x80}, + // Block 0x97, offset 0x2f8 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x82, hi: 0x84}, + // Block 0x98, offset 0x2fa + {value: 0x0002, lo: 0x03}, + {value: 0x0043, lo: 0x80, hi: 0x99}, + {value: 0x0083, lo: 0x9a, hi: 0xb3}, + {value: 0x0043, lo: 0xb4, hi: 0xbf}, + // Block 0x99, offset 0x2fe + {value: 0x0002, lo: 0x04}, + {value: 0x005b, lo: 0x80, hi: 0x8d}, + {value: 0x0083, lo: 0x8e, hi: 0x94}, + {value: 0x0093, lo: 0x96, hi: 0xa7}, + {value: 0x0043, lo: 0xa8, hi: 0xbf}, + // Block 0x9a, offset 0x303 + {value: 0x0002, lo: 0x0b}, + {value: 0x0073, lo: 0x80, hi: 0x81}, + {value: 0x0083, lo: 0x82, hi: 0x9b}, + {value: 0x0043, lo: 0x9c, hi: 0x9c}, + {value: 0x0047, lo: 0x9e, hi: 0x9f}, + {value: 0x004f, lo: 0xa2, hi: 0xa2}, + {value: 0x0055, lo: 0xa5, hi: 0xa6}, + {value: 0x005d, lo: 0xa9, hi: 0xac}, + {value: 0x0067, lo: 0xae, hi: 0xb5}, + {value: 0x0083, lo: 0xb6, hi: 0xb9}, + {value: 0x008d, lo: 0xbb, hi: 0xbb}, + {value: 0x0091, lo: 0xbd, hi: 0xbf}, + // Block 0x9b, offset 0x30f + {value: 0x0002, lo: 0x04}, + {value: 0x0097, lo: 0x80, hi: 0x83}, + {value: 0x00a1, lo: 0x85, hi: 0x8f}, + {value: 0x0043, lo: 0x90, hi: 0xa9}, + {value: 0x0083, lo: 0xaa, hi: 0xbf}, + // Block 0x9c, offset 0x314 + {value: 0x0002, lo: 0x08}, + {value: 0x00af, lo: 0x80, hi: 0x83}, + {value: 0x0043, lo: 0x84, hi: 0x85}, + {value: 0x0049, lo: 0x87, hi: 0x8a}, + {value: 0x0055, lo: 0x8d, hi: 0x94}, + {value: 0x0067, lo: 0x96, hi: 0x9c}, + {value: 0x0083, lo: 0x9e, hi: 0xb7}, + {value: 0x0043, lo: 0xb8, hi: 0xb9}, + {value: 0x0049, lo: 0xbb, hi: 0xbe}, + // Block 0x9d, offset 0x31d + {value: 0x0002, lo: 0x05}, + {value: 0x0053, lo: 0x80, hi: 0x84}, + {value: 0x005f, lo: 0x86, hi: 0x86}, + {value: 0x0067, lo: 0x8a, hi: 0x90}, + {value: 0x0083, lo: 0x92, hi: 0xab}, + {value: 0x0043, lo: 0xac, hi: 0xbf}, + // Block 0x9e, offset 0x323 + {value: 0x0002, lo: 0x04}, + {value: 0x006b, lo: 0x80, hi: 0x85}, + {value: 0x0083, lo: 0x86, hi: 0x9f}, + {value: 0x0043, lo: 0xa0, hi: 0xb9}, + {value: 0x0083, lo: 0xba, hi: 0xbf}, + // Block 0x9f, offset 0x328 + {value: 0x0002, lo: 0x03}, + {value: 0x008f, lo: 0x80, hi: 0x93}, + {value: 0x0043, lo: 0x94, hi: 0xad}, + {value: 0x0083, lo: 0xae, hi: 0xbf}, + // Block 0xa0, offset 0x32c + {value: 0x0002, lo: 0x04}, + {value: 0x00a7, lo: 0x80, hi: 0x87}, + {value: 0x0043, lo: 0x88, hi: 0xa1}, + {value: 0x0083, lo: 0xa2, hi: 0xbb}, + {value: 0x0043, lo: 0xbc, hi: 0xbf}, + // Block 0xa1, offset 0x331 + {value: 0x0002, lo: 0x03}, + {value: 0x004b, lo: 0x80, hi: 0x95}, + {value: 0x0083, lo: 0x96, hi: 0xaf}, + {value: 0x0043, lo: 0xb0, hi: 0xbf}, + // Block 0xa2, offset 0x335 + {value: 0x0003, lo: 0x0f}, + {value: 0x023c, lo: 0x80, hi: 0x80}, + {value: 0x0556, lo: 0x81, hi: 0x81}, + {value: 0x023f, lo: 0x82, hi: 0x9a}, + {value: 0x0552, lo: 0x9b, hi: 0x9b}, + {value: 0x024b, lo: 0x9c, hi: 0x9c}, + {value: 0x0254, lo: 0x9d, hi: 0x9d}, + {value: 0x025a, lo: 0x9e, hi: 0x9e}, + {value: 0x027e, lo: 0x9f, hi: 0x9f}, + {value: 0x026f, lo: 0xa0, hi: 0xa0}, + {value: 0x026c, lo: 0xa1, hi: 0xa1}, + {value: 0x01f7, lo: 0xa2, hi: 0xb2}, + {value: 0x020c, lo: 0xb3, hi: 0xb3}, + {value: 0x022a, lo: 0xb4, hi: 0xba}, + {value: 0x0556, lo: 0xbb, hi: 0xbb}, + {value: 0x023f, lo: 0xbc, hi: 0xbf}, + // Block 0xa3, offset 0x345 + {value: 0x0003, lo: 0x0d}, + {value: 0x024b, lo: 0x80, hi: 0x94}, + {value: 0x0552, lo: 0x95, hi: 0x95}, + {value: 0x024b, lo: 0x96, hi: 0x96}, + {value: 0x0254, lo: 0x97, hi: 0x97}, + {value: 0x025a, lo: 0x98, hi: 0x98}, + {value: 0x027e, lo: 0x99, hi: 0x99}, + {value: 0x026f, lo: 0x9a, hi: 0x9a}, + {value: 0x026c, lo: 0x9b, hi: 0x9b}, + {value: 0x01f7, lo: 0x9c, hi: 0xac}, + {value: 0x020c, lo: 0xad, hi: 0xad}, + {value: 0x022a, lo: 0xae, hi: 0xb4}, + {value: 0x0556, lo: 0xb5, hi: 0xb5}, + {value: 0x023f, lo: 0xb6, hi: 0xbf}, + // Block 0xa4, offset 0x353 + {value: 0x0003, lo: 0x0d}, + {value: 0x025d, lo: 0x80, hi: 0x8e}, + {value: 0x0552, lo: 0x8f, hi: 0x8f}, + {value: 0x024b, lo: 0x90, hi: 0x90}, + {value: 0x0254, lo: 0x91, hi: 0x91}, + {value: 0x025a, lo: 0x92, hi: 0x92}, + {value: 0x027e, lo: 0x93, hi: 0x93}, + {value: 0x026f, lo: 0x94, hi: 0x94}, + {value: 0x026c, lo: 0x95, hi: 0x95}, + {value: 0x01f7, lo: 0x96, hi: 0xa6}, + {value: 0x020c, lo: 0xa7, hi: 0xa7}, + {value: 0x022a, lo: 0xa8, hi: 0xae}, + {value: 0x0556, lo: 0xaf, hi: 0xaf}, + {value: 0x023f, lo: 0xb0, hi: 0xbf}, + // Block 0xa5, offset 0x361 + {value: 0x0003, lo: 0x0d}, + {value: 0x026f, lo: 0x80, hi: 0x88}, + {value: 0x0552, lo: 0x89, hi: 0x89}, + {value: 0x024b, lo: 0x8a, hi: 0x8a}, + {value: 0x0254, lo: 0x8b, hi: 0x8b}, + {value: 0x025a, lo: 0x8c, hi: 0x8c}, + {value: 0x027e, lo: 0x8d, hi: 0x8d}, + {value: 0x026f, lo: 0x8e, hi: 0x8e}, + {value: 0x026c, lo: 0x8f, hi: 0x8f}, + {value: 0x01f7, lo: 0x90, hi: 0xa0}, + {value: 0x020c, lo: 0xa1, hi: 0xa1}, + {value: 0x022a, lo: 0xa2, hi: 0xa8}, + {value: 0x0556, lo: 0xa9, hi: 0xa9}, + {value: 0x023f, lo: 0xaa, hi: 0xbf}, + // Block 0xa6, offset 0x36f + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + // Block 0xa7, offset 0x371 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xae, hi: 0xae}, + // Block 0xa8, offset 0x373 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xac, hi: 0xaf}, + // Block 0xa9, offset 0x375 + {value: 0x0000, lo: 0x03}, + {value: 0x8134, lo: 0xac, hi: 0xad}, + {value: 0x812e, lo: 0xae, hi: 0xae}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + // Block 0xaa, offset 0x379 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x90, hi: 0x96}, + // Block 0xab, offset 0x37b + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x84, hi: 0x89}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0xac, offset 0x37e + {value: 0x0002, lo: 0x0a}, + {value: 0x0063, lo: 0x80, hi: 0x89}, + {value: 0x1a7e, lo: 0x8a, hi: 0x8a}, + {value: 0x1ab1, lo: 0x8b, hi: 0x8b}, + {value: 0x1acc, lo: 0x8c, hi: 0x8c}, + {value: 0x1ad2, lo: 0x8d, hi: 0x8d}, + {value: 0x1cf0, lo: 0x8e, hi: 0x8e}, + {value: 0x1ade, lo: 0x8f, hi: 0x8f}, + {value: 0x1aa8, lo: 0xaa, hi: 0xaa}, + {value: 0x1aab, lo: 0xab, hi: 0xab}, + {value: 0x1aae, lo: 0xac, hi: 0xac}, + // Block 0xad, offset 0x389 + {value: 0x0000, lo: 0x01}, + {value: 0x1a6c, lo: 0x90, hi: 0x90}, + // Block 0xae, offset 0x38b + {value: 0x0028, lo: 0x09}, + {value: 0x2999, lo: 0x80, hi: 0x80}, + {value: 0x295d, lo: 0x81, hi: 0x81}, + {value: 0x2967, lo: 0x82, hi: 0x82}, + {value: 0x297b, lo: 0x83, hi: 0x84}, + {value: 0x2985, lo: 0x85, hi: 0x86}, + {value: 0x2971, lo: 0x87, hi: 0x87}, + {value: 0x298f, lo: 0x88, hi: 0x88}, + {value: 0x0c6a, lo: 0x90, hi: 0x90}, + {value: 0x09e2, lo: 0x91, hi: 0x91}, + // Block 0xaf, offset 0x395 + {value: 0x0002, lo: 0x01}, + {value: 0x0021, lo: 0xb0, hi: 0xb9}, +} + +// recompMap: 7528 bytes (entries only) +var recompMap map[uint32]rune +var recompMapOnce sync.Once + +const recompMapPacked = "" + + "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0 + "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1 + "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2 + "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3 + "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4 + "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5 + "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7 + "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8 + "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9 + "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA + "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB + "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC + "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD + "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE + "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF + "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1 + "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2 + "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3 + "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4 + "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5 + "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6 + "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9 + "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA + "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB + "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC + "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD + "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0 + "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1 + "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2 + "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3 + "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4 + "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5 + "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7 + "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8 + "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9 + "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA + "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB + "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC + "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED + "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE + "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF + "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1 + "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2 + "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3 + "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4 + "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5 + "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6 + "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9 + "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA + "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB + "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC + "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD + "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF + "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100 + "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101 + "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102 + "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103 + "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104 + "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105 + "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106 + "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107 + "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108 + "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109 + "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A + "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B + "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C + "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D + "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E + "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F + "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112 + "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113 + "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114 + "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115 + "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116 + "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117 + "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118 + "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119 + "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A + "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B + "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C + "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D + "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E + "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F + "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120 + "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121 + "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122 + "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123 + "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124 + "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125 + "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128 + "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129 + "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A + "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B + "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C + "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D + "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E + "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F + "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130 + "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134 + "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135 + "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136 + "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137 + "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139 + "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A + "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B + "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C + "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D + "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E + "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 + "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 + "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 + "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 + "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 + "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 + "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C + "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D + "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E + "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F + "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 + "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 + "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 + "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 + "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 + "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 + "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 + "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 + "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A + "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B + "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C + "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D + "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E + "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F + "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 + "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 + "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 + "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 + "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 + "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 + "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 + "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 + "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A + "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B + "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C + "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D + "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E + "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F + "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 + "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 + "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 + "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 + "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 + "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 + "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 + "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 + "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 + "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 + "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A + "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B + "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C + "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D + "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E + "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 + "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 + "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF + "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 + "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD + "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE + "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF + "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 + "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 + "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 + "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 + "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 + "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 + "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 + "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 + "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 + "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 + "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA + "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB + "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC + "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE + "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF + "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 + "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 + "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 + "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 + "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 + "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 + "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 + "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 + "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA + "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB + "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC + "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED + "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE + "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF + "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 + "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 + "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 + "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 + "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 + "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA + "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB + "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC + "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD + "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE + "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF + "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 + "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 + "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 + "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 + "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 + "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 + "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 + "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 + "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 + "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 + "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A + "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B + "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C + "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D + "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E + "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F + "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 + "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 + "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 + "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 + "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 + "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 + "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 + "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 + "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 + "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 + "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A + "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B + "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E + "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F + "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 + "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 + "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 + "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 + "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A + "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B + "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C + "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D + "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E + "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F + "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 + "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 + "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 + "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 + "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 + "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 + "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 + "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 + "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A + "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C + "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E + "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F + "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 + "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA + "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB + "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC + "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD + "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE + "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF + "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 + "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA + "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB + "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC + "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD + "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE + "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 + "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 + "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 + "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 + "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 + "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 + "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C + "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D + "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E + "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 + "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 + "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 + "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 + "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 + "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 + "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C + "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D + "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E + "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 + "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 + "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 + "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 + "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 + "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 + "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 + "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 + "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 + "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 + "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA + "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB + "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC + "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD + "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE + "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF + "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 + "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 + "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 + "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 + "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 + "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 + "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA + "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB + "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC + "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED + "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE + "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF + "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 + "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 + "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 + "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 + "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 + "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 + "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 + "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 + "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 + "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 + "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 + "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 + "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 + "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 + "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 + "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 + "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 + "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 + "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 + "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB + "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC + "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 + "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B + "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C + "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 + "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA + "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB + "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC + "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 + "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 + "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 + "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 + "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA + "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB + "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A + "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B + "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C + "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA + "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC + "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD + "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE + "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 + "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 + "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 + "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A + "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C + "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E + "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 + "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B + "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D + "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 + "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 + "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 + "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 + "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 + "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 + "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 + "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 + "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 + "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 + "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 + "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 + "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 + "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A + "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B + "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C + "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D + "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E + "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F + "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 + "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 + "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 + "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 + "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 + "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 + "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 + "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 + "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 + "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 + "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A + "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B + "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C + "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D + "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E + "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F + "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 + "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 + "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 + "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 + "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 + "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 + "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 + "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 + "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 + "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 + "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A + "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B + "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C + "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D + "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E + "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F + "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 + "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 + "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 + "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 + "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 + "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 + "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 + "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 + "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 + "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 + "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A + "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B + "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C + "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D + "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E + "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F + "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 + "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 + "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 + "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 + "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 + "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 + "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 + "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 + "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 + "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 + "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A + "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B + "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C + "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D + "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E + "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F + "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 + "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 + "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 + "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 + "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 + "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 + "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 + "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 + "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 + "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 + "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A + "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B + "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C + "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D + "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E + "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F + "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 + "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 + "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 + "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 + "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 + "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 + "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 + "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 + "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 + "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 + "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A + "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B + "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C + "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D + "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E + "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F + "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 + "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 + "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 + "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 + "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 + "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 + "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 + "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 + "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 + "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 + "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A + "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B + "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C + "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D + "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E + "\x00v\x03#\x00\x00\x1e\x7f" + // 0x00760323: 0x00001E7F + "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 + "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 + "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 + "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 + "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 + "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 + "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 + "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 + "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 + "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 + "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A + "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B + "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C + "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D + "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E + "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F + "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 + "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 + "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 + "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 + "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 + "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 + "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 + "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 + "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 + "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 + "\x01\x7f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B + "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 + "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 + "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 + "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 + "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 + "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 + "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 + "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 + "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 + "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 + "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA + "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB + "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC + "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD + "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE + "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF + "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 + "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 + "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 + "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 + "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 + "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 + "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 + "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 + "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 + "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 + "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA + "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB + "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC + "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD + "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE + "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF + "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 + "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 + "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 + "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 + "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 + "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 + "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 + "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 + "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 + "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 + "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA + "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB + "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC + "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD + "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE + "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF + "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 + "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 + "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 + "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 + "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 + "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 + "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 + "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 + "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 + "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 + "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA + "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB + "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC + "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD + "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE + "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF + "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 + "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 + "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 + "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 + "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 + "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 + "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 + "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 + "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 + "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 + "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA + "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB + "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC + "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED + "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE + "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF + "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 + "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 + "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 + "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 + "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 + "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 + "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 + "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 + "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 + "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 + "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 + "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 + "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 + "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 + "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 + "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 + "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 + "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 + "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 + "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 + "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A + "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B + "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C + "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D + "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E + "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F + "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 + "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 + "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 + "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 + "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 + "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 + "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 + "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 + "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A + "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B + "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C + "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D + "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 + "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 + "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 + "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 + "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 + "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 + "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 + "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 + "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 + "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 + "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A + "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B + "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C + "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D + "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E + "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F + "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 + "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 + "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 + "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 + "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 + "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 + "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 + "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 + "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 + "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 + "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A + "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B + "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C + "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D + "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E + "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F + "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 + "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 + "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 + "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 + "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 + "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 + "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 + "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 + "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A + "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B + "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C + "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D + "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 + "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 + "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 + "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 + "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 + "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 + "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 + "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 + "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 + "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B + "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D + "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F + "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 + "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 + "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 + "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 + "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 + "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 + "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 + "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 + "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 + "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 + "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A + "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B + "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C + "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D + "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E + "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F + "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 + "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 + "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 + "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 + "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 + "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A + "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C + "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 + "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 + "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 + "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 + "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 + "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 + "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 + "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 + "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 + "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 + "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A + "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B + "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C + "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D + "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E + "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F + "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 + "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 + "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 + "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 + "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 + "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 + "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 + "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 + "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 + "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 + "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A + "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B + "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C + "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D + "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E + "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F + "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 + "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 + "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 + "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 + "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 + "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 + "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 + "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 + "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 + "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 + "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA + "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB + "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC + "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD + "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE + "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF + "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 + "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 + "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 + "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 + "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 + "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 + "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 + "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 + "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 + "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA + "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC + "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 + "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 + "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 + "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 + "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 + "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 + "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 + "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA + "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC + "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD + "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE + "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF + "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 + "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 + "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 + "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 + "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 + "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 + "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 + "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA + "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD + "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE + "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF + "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 + "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 + "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 + "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 + "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 + "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 + "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 + "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 + "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 + "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA + "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC + "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED + "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 + "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 + "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 + "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 + "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 + "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 + "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA + "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC + "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A + "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B + "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE + "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD + "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE + "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF + "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 + "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 + "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C + "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 + "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 + "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 + "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 + "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 + "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 + "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 + "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 + "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D + "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E + "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F + "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 + "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 + "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 + "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 + "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 + "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 + "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 + "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 + "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 + "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 + "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 + "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 + "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC + "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD + "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE + "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF + "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 + "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 + "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 + "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 + "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA + "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB + "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC + "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED + "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C + "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E + "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 + "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 + "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 + "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 + "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 + "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A + "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C + "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E + "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 + "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 + "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 + "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 + "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 + "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 + "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 + "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 + "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 + "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 + "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 + "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 + "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A + "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C + "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D + "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 + "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E + "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC + "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE + "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 + "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 + "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 + "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 + "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 + "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA + "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC + "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE + "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 + "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 + "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 + "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 + "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 + "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 + "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 + "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 + "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 + "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 + "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 + "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 + "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA + "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC + "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD + "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 + "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 + "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 + "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 + "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA + "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE + "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A + "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C + "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB + "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E + "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F + "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B + "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C + "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB + "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC + "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE + "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA + "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB + "\x195\x190\x00\x01\x198" + // 0x19351930: 0x00011938 + "" + // Total size of tables: 56KB (57068 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/trie.go b/vendor/golang.org/x/text/unicode/norm/trie.go index 423386bf4369f..e4250ae22ce0c 100644 --- a/vendor/golang.org/x/text/unicode/norm/trie.go +++ b/vendor/golang.org/x/text/unicode/norm/trie.go @@ -29,7 +29,7 @@ var ( nfkcData = newNfkcTrie(0) ) -// lookupValue determines the type of block n and looks up the value for b. +// lookup determines the type of block n and looks up the value for b. // For n < t.cutoff, the block is a simple lookup table. Otherwise, the block // is a list of ranges with an accompanying value. Given a matching range r, // the value for b is by r.value + (b - r.lo) * stride. diff --git a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go index 165ede0f8f38d..03543bd4bb8f7 100644 --- a/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go +++ b/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go @@ -128,15 +128,14 @@ func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, // (from "version"). Select appropriate importer. if len(data) > 0 { switch data[0] { - case 'i': - _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) - return pkg, err + case 'v', 'c', 'd': // binary, till go1.10 + return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) - case 'v', 'c', 'd': - _, pkg, err := gcimporter.BImportData(fset, imports, data, path) + case 'i': // indexed, till go1.19 + _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) return pkg, err - case 'u': + case 'u': // unified, from go1.20 _, pkg, err := gcimporter.UImportData(fset, imports, data[1:], path) return pkg, err diff --git a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go index 18a002f82a1f9..0454cdd78e55e 100644 --- a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go +++ b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go @@ -8,7 +8,6 @@ package packagesdriver import ( "context" "fmt" - "go/types" "strings" "golang.org/x/tools/internal/gocommand" @@ -16,7 +15,7 @@ import ( var debug = false -func GetSizesGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (types.Sizes, error) { +func GetSizesForArgsGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) { inv.Verb = "list" inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"} stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv) @@ -29,21 +28,21 @@ func GetSizesGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner * inv.Args = []string{"GOARCH"} envout, enverr := gocmdRunner.Run(ctx, inv) if enverr != nil { - return nil, enverr + return "", "", enverr } goarch = strings.TrimSpace(envout.String()) compiler = "gc" } else { - return nil, friendlyErr + return "", "", friendlyErr } } else { fields := strings.Fields(stdout.String()) if len(fields) < 2 { - return nil, fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", + return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", stdout.String(), stderr.String()) } goarch = fields[0] compiler = fields[1] } - return types.SizesFor(compiler, goarch), nil + return compiler, goarch, nil } diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go index 6bb7168d2e343..b5de9cf9f210b 100644 --- a/vendor/golang.org/x/tools/go/packages/golist.go +++ b/vendor/golang.org/x/tools/go/packages/golist.go @@ -9,7 +9,6 @@ import ( "context" "encoding/json" "fmt" - "go/types" "io/ioutil" "log" "os" @@ -153,10 +152,10 @@ func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { sizeswg.Add(1) go func() { - var sizes types.Sizes - sizes, sizeserr = packagesdriver.GetSizesGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) - // types.SizesFor always returns nil or a *types.StdSizes. - response.dr.Sizes, _ = sizes.(*types.StdSizes) + compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) + sizeserr = err + response.dr.Compiler = compiler + response.dr.Arch = arch sizeswg.Done() }() } @@ -625,7 +624,12 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse } if pkg.PkgPath == "unsafe" { - pkg.GoFiles = nil // ignore fake unsafe.go file + pkg.CompiledGoFiles = nil // ignore fake unsafe.go file (#59929) + } else if len(pkg.CompiledGoFiles) == 0 { + // Work around for pre-go.1.11 versions of go list. + // TODO(matloob): they should be handled by the fallback. + // Can we delete this? + pkg.CompiledGoFiles = pkg.GoFiles } // Assume go list emits only absolute paths for Dir. @@ -663,16 +667,12 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse response.Roots = append(response.Roots, pkg.ID) } - // Work around for pre-go.1.11 versions of go list. - // TODO(matloob): they should be handled by the fallback. - // Can we delete this? - if len(pkg.CompiledGoFiles) == 0 { - pkg.CompiledGoFiles = pkg.GoFiles - } - // Temporary work-around for golang/go#39986. Parse filenames out of // error messages. This happens if there are unrecoverable syntax // errors in the source, so we can't match on a specific error message. + // + // TODO(rfindley): remove this heuristic, in favor of considering + // InvalidGoFiles from the list driver. if err := p.Error; err != nil && state.shouldAddFilenameFromError(p) { addFilenameFromPos := func(pos string) bool { split := strings.Split(pos, ":") @@ -891,6 +891,15 @@ func golistargs(cfg *Config, words []string, goVersion int) []string { // probably because you'd just get the TestMain. fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0 && !usesExportData(cfg)), } + + // golang/go#60456: with go1.21 and later, go list serves pgo variants, which + // can be costly to compute and may result in redundant processing for the + // caller. Disable these variants. If someone wants to add e.g. a NeedPGO + // mode flag, that should be a separate proposal. + if goVersion >= 21 { + fullargs = append(fullargs, "-pgo=off") + } + fullargs = append(fullargs, cfg.BuildFlags...) fullargs = append(fullargs, "--") fullargs = append(fullargs, words...) diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go index 0f1505b808a69..124a6fe143b1f 100644 --- a/vendor/golang.org/x/tools/go/packages/packages.go +++ b/vendor/golang.org/x/tools/go/packages/packages.go @@ -220,8 +220,10 @@ type driverResponse struct { // lists of multiple drivers, go/packages will fall back to the next driver. NotHandled bool - // Sizes, if not nil, is the types.Sizes to use when type checking. - Sizes *types.StdSizes + // Compiler and Arch are the arguments pass of types.SizesFor + // to get a types.Sizes to use when type checking. + Compiler string + Arch string // Roots is the set of package IDs that make up the root packages. // We have to encode this separately because when we encode a single package @@ -262,7 +264,7 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) { if err != nil { return nil, err } - l.sizes = response.Sizes + l.sizes = types.SizesFor(response.Compiler, response.Arch) return l.refine(response) } @@ -308,6 +310,9 @@ type Package struct { TypeErrors []types.Error // GoFiles lists the absolute file paths of the package's Go source files. + // It may include files that should not be compiled, for example because + // they contain non-matching build tags, are documentary pseudo-files such as + // unsafe/unsafe.go or builtin/builtin.go, or are subject to cgo preprocessing. GoFiles []string // CompiledGoFiles lists the absolute file paths of the package's source @@ -627,7 +632,7 @@ func newLoader(cfg *Config) *loader { return ld } -// refine connects the supplied packages into a graph and then adds type and +// refine connects the supplied packages into a graph and then adds type // and syntax information as requested by the LoadMode. func (ld *loader) refine(response *driverResponse) ([]*Package, error) { roots := response.Roots @@ -1040,6 +1045,9 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) { Error: appendError, Sizes: ld.sizes, } + if lpkg.Module != nil && lpkg.Module.GoVersion != "" { + typesinternal.SetGoVersion(tc, "go"+lpkg.Module.GoVersion) + } if (ld.Mode & typecheckCgo) != 0 { if !typesinternal.SetUsesCgo(tc) { appendError(Error{ diff --git a/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go new file mode 100644 index 0000000000000..fa5834baf72ba --- /dev/null +++ b/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -0,0 +1,827 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package objectpath defines a naming scheme for types.Objects +// (that is, named entities in Go programs) relative to their enclosing +// package. +// +// Type-checker objects are canonical, so they are usually identified by +// their address in memory (a pointer), but a pointer has meaning only +// within one address space. By contrast, objectpath names allow the +// identity of an object to be sent from one program to another, +// establishing a correspondence between types.Object variables that are +// distinct but logically equivalent. +// +// A single object may have multiple paths. In this example, +// +// type A struct{ X int } +// type B A +// +// the field X has two paths due to its membership of both A and B. +// The For(obj) function always returns one of these paths, arbitrarily +// but consistently. +package objectpath + +import ( + "fmt" + "go/types" + "sort" + "strconv" + "strings" + _ "unsafe" + + "golang.org/x/tools/internal/typeparams" + "golang.org/x/tools/internal/typesinternal" +) + +// A Path is an opaque name that identifies a types.Object +// relative to its package. Conceptually, the name consists of a +// sequence of destructuring operations applied to the package scope +// to obtain the original object. +// The name does not include the package itself. +type Path string + +// Encoding +// +// An object path is a textual and (with training) human-readable encoding +// of a sequence of destructuring operators, starting from a types.Package. +// The sequences represent a path through the package/object/type graph. +// We classify these operators by their type: +// +// PO package->object Package.Scope.Lookup +// OT object->type Object.Type +// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] +// TO type->object Type.{At,Field,Method,Obj} [AFMO] +// +// All valid paths start with a package and end at an object +// and thus may be defined by the regular language: +// +// objectpath = PO (OT TT* TO)* +// +// The concrete encoding follows directly: +// - The only PO operator is Package.Scope.Lookup, which requires an identifier. +// - The only OT operator is Object.Type, +// which we encode as '.' because dot cannot appear in an identifier. +// - The TT operators are encoded as [EKPRUTC]; +// one of these (TypeParam) requires an integer operand, +// which is encoded as a string of decimal digits. +// - The TO operators are encoded as [AFMO]; +// three of these (At,Field,Method) require an integer operand, +// which is encoded as a string of decimal digits. +// These indices are stable across different representations +// of the same package, even source and export data. +// The indices used are implementation specific and may not correspond to +// the argument to the go/types function. +// +// In the example below, +// +// package p +// +// type T interface { +// f() (a string, b struct{ X int }) +// } +// +// field X has the path "T.UM0.RA1.F0", +// representing the following sequence of operations: +// +// p.Lookup("T") T +// .Type().Underlying().Method(0). f +// .Type().Results().At(1) b +// .Type().Field(0) X +// +// The encoding is not maximally compact---every R or P is +// followed by an A, for example---but this simplifies the +// encoder and decoder. +const ( + // object->type operators + opType = '.' // .Type() (Object) + + // type->type operators + opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) + opKey = 'K' // .Key() (Map) + opParams = 'P' // .Params() (Signature) + opResults = 'R' // .Results() (Signature) + opUnderlying = 'U' // .Underlying() (Named) + opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) + opConstraint = 'C' // .Constraint() (TypeParam) + + // type->object operators + opAt = 'A' // .At(i) (Tuple) + opField = 'F' // .Field(i) (Struct) + opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) + opObj = 'O' // .Obj() (Named, TypeParam) +) + +// For is equivalent to new(Encoder).For(obj). +// +// It may be more efficient to reuse a single Encoder across several calls. +func For(obj types.Object) (Path, error) { + return new(Encoder).For(obj) +} + +// An Encoder amortizes the cost of encoding the paths of multiple objects. +// The zero value of an Encoder is ready to use. +type Encoder struct { + scopeMemo map[*types.Scope][]types.Object // memoization of scopeObjects + namedMethodsMemo map[*types.Named][]*types.Func // memoization of namedMethods() + skipMethodSorting bool +} + +// Expose back doors so that gopls can avoid method sorting, which can dominate +// analysis on certain repositories. +// +// TODO(golang/go#61443): remove this. +func init() { + typesinternal.SkipEncoderMethodSorting = func(enc interface{}) { + enc.(*Encoder).skipMethodSorting = true + } + typesinternal.ObjectpathObject = object +} + +// For returns the path to an object relative to its package, +// or an error if the object is not accessible from the package's Scope. +// +// The For function guarantees to return a path only for the following objects: +// - package-level types +// - exported package-level non-types +// - methods +// - parameter and result variables +// - struct fields +// These objects are sufficient to define the API of their package. +// The objects described by a package's export data are drawn from this set. +// +// The set of objects accessible from a package's Scope depends on +// whether the package was produced by type-checking syntax, or +// reading export data; the latter may have a smaller Scope since +// export data trims objects that are not reachable from an exported +// declaration. For example, the For function will return a path for +// an exported method of an unexported type that is not reachable +// from any public declaration; this path will cause the Object +// function to fail if called on a package loaded from export data. +// TODO(adonovan): is this a bug or feature? Should this package +// compute accessibility in the same way? +// +// For does not return a path for predeclared names, imported package +// names, local names, and unexported package-level names (except +// types). +// +// Example: given this definition, +// +// package p +// +// type T interface { +// f() (a string, b struct{ X int }) +// } +// +// For(X) would return a path that denotes the following sequence of operations: +// +// p.Scope().Lookup("T") (TypeName T) +// .Type().Underlying().Method(0). (method Func f) +// .Type().Results().At(1) (field Var b) +// .Type().Field(0) (field Var X) +// +// where p is the package (*types.Package) to which X belongs. +func (enc *Encoder) For(obj types.Object) (Path, error) { + pkg := obj.Pkg() + + // This table lists the cases of interest. + // + // Object Action + // ------ ------ + // nil reject + // builtin reject + // pkgname reject + // label reject + // var + // package-level accept + // func param/result accept + // local reject + // struct field accept + // const + // package-level accept + // local reject + // func + // package-level accept + // init functions reject + // concrete method accept + // interface method accept + // type + // package-level accept + // local reject + // + // The only accessible package-level objects are members of pkg itself. + // + // The cases are handled in four steps: + // + // 1. reject nil and builtin + // 2. accept package-level objects + // 3. reject obviously invalid objects + // 4. search the API for the path to the param/result/field/method. + + // 1. reference to nil or builtin? + if pkg == nil { + return "", fmt.Errorf("predeclared %s has no path", obj) + } + scope := pkg.Scope() + + // 2. package-level object? + if scope.Lookup(obj.Name()) == obj { + // Only exported objects (and non-exported types) have a path. + // Non-exported types may be referenced by other objects. + if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() { + return "", fmt.Errorf("no path for non-exported %v", obj) + } + return Path(obj.Name()), nil + } + + // 3. Not a package-level object. + // Reject obviously non-viable cases. + switch obj := obj.(type) { + case *types.TypeName: + if _, ok := obj.Type().(*typeparams.TypeParam); !ok { + // With the exception of type parameters, only package-level type names + // have a path. + return "", fmt.Errorf("no path for %v", obj) + } + case *types.Const, // Only package-level constants have a path. + *types.Label, // Labels are function-local. + *types.PkgName: // PkgNames are file-local. + return "", fmt.Errorf("no path for %v", obj) + + case *types.Var: + // Could be: + // - a field (obj.IsField()) + // - a func parameter or result + // - a local var. + // Sadly there is no way to distinguish + // a param/result from a local + // so we must proceed to the find. + + case *types.Func: + // A func, if not package-level, must be a method. + if recv := obj.Type().(*types.Signature).Recv(); recv == nil { + return "", fmt.Errorf("func is not a method: %v", obj) + } + + if path, ok := enc.concreteMethod(obj); ok { + // Fast path for concrete methods that avoids looping over scope. + return path, nil + } + + default: + panic(obj) + } + + // 4. Search the API for the path to the var (field/param/result) or method. + + // First inspect package-level named types. + // In the presence of path aliases, these give + // the best paths because non-types may + // refer to types, but not the reverse. + empty := make([]byte, 0, 48) // initial space + objs := enc.scopeObjects(scope) + for _, o := range objs { + tname, ok := o.(*types.TypeName) + if !ok { + continue // handle non-types in second pass + } + + path := append(empty, o.Name()...) + path = append(path, opType) + + T := o.Type() + + if tname.IsAlias() { + // type alias + if r := find(obj, T, path, nil); r != nil { + return Path(r), nil + } + } else { + if named, _ := T.(*types.Named); named != nil { + if r := findTypeParam(obj, typeparams.ForNamed(named), path, nil); r != nil { + // generic named type + return Path(r), nil + } + } + // defined (named) type + if r := find(obj, T.Underlying(), append(path, opUnderlying), nil); r != nil { + return Path(r), nil + } + } + } + + // Then inspect everything else: + // non-types, and declared methods of defined types. + for _, o := range objs { + path := append(empty, o.Name()...) + if _, ok := o.(*types.TypeName); !ok { + if o.Exported() { + // exported non-type (const, var, func) + if r := find(obj, o.Type(), append(path, opType), nil); r != nil { + return Path(r), nil + } + } + continue + } + + // Inspect declared methods of defined types. + if T, ok := o.Type().(*types.Named); ok { + path = append(path, opType) + if !enc.skipMethodSorting { + // Note that method index here is always with respect + // to canonical ordering of methods, regardless of how + // they appear in the underlying type. + for i, m := range enc.namedMethods(T) { + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return Path(path2), nil // found declared method + } + if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { + return Path(r), nil + } + } + } else { + // This branch must match the logic in the branch above, using go/types + // APIs without sorting. + for i := 0; i < T.NumMethods(); i++ { + m := T.Method(i) + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return Path(path2), nil // found declared method + } + if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { + return Path(r), nil + } + } + } + } + } + + return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path()) +} + +func appendOpArg(path []byte, op byte, arg int) []byte { + path = append(path, op) + path = strconv.AppendInt(path, int64(arg), 10) + return path +} + +// concreteMethod returns the path for meth, which must have a non-nil receiver. +// The second return value indicates success and may be false if the method is +// an interface method or if it is an instantiated method. +// +// This function is just an optimization that avoids the general scope walking +// approach. You are expected to fall back to the general approach if this +// function fails. +func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { + // Concrete methods can only be declared on package-scoped named types. For + // that reason we can skip the expensive walk over the package scope: the + // path will always be package -> named type -> method. We can trivially get + // the type name from the receiver, and only have to look over the type's + // methods to find the method index. + // + // Methods on generic types require special consideration, however. Consider + // the following package: + // + // L1: type S[T any] struct{} + // L2: func (recv S[A]) Foo() { recv.Bar() } + // L3: func (recv S[B]) Bar() { } + // L4: type Alias = S[int] + // L5: func _[T any]() { var s S[int]; s.Foo() } + // + // The receivers of methods on generic types are instantiations. L2 and L3 + // instantiate S with the type-parameters A and B, which are scoped to the + // respective methods. L4 and L5 each instantiate S with int. Each of these + // instantiations has its own method set, full of methods (and thus objects) + // with receivers whose types are the respective instantiations. In other + // words, we have + // + // S[A].Foo, S[A].Bar + // S[B].Foo, S[B].Bar + // S[int].Foo, S[int].Bar + // + // We may thus be trying to produce object paths for any of these objects. + // + // S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo + // and S.Bar, which are the paths that this function naturally produces. + // + // S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that + // don't correspond to the origin methods. For S[int], this is significant. + // The most precise object path for S[int].Foo, for example, is Alias.Foo, + // not S.Foo. Our function, however, would produce S.Foo, which would + // resolve to a different object. + // + // For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are + // still the correct paths, since only the origin methods have meaningful + // paths. But this is likely only true for trivial cases and has edge cases. + // Since this function is only an optimization, we err on the side of giving + // up, deferring to the slower but definitely correct algorithm. Most users + // of objectpath will only be giving us origin methods, anyway, as referring + // to instantiated methods is usually not useful. + + if typeparams.OriginMethod(meth) != meth { + return "", false + } + + recvT := meth.Type().(*types.Signature).Recv().Type() + if ptr, ok := recvT.(*types.Pointer); ok { + recvT = ptr.Elem() + } + + named, ok := recvT.(*types.Named) + if !ok { + return "", false + } + + if types.IsInterface(named) { + // Named interfaces don't have to be package-scoped + // + // TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface + // methods, too, I think. + return "", false + } + + // Preallocate space for the name, opType, opMethod, and some digits. + name := named.Obj().Name() + path := make([]byte, 0, len(name)+8) + path = append(path, name...) + path = append(path, opType) + + if !enc.skipMethodSorting { + for i, m := range enc.namedMethods(named) { + if m == meth { + path = appendOpArg(path, opMethod, i) + return Path(path), true + } + } + } else { + // This branch must match the logic of the branch above, using go/types + // APIs without sorting. + for i := 0; i < named.NumMethods(); i++ { + m := named.Method(i) + if m == meth { + path = appendOpArg(path, opMethod, i) + return Path(path), true + } + } + } + + // Due to golang/go#59944, go/types fails to associate the receiver with + // certain methods on cgo types. + // + // TODO(rfindley): replace this panic once golang/go#59944 is fixed in all Go + // versions gopls supports. + return "", false + // panic(fmt.Sprintf("couldn't find method %s on type %s; methods: %#v", meth, named, enc.namedMethods(named))) +} + +// find finds obj within type T, returning the path to it, or nil if not found. +// +// The seen map is used to short circuit cycles through type parameters. If +// nil, it will be allocated as necessary. +func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte { + switch T := T.(type) { + case *types.Basic, *types.Named: + // Named types belonging to pkg were handled already, + // so T must belong to another package. No path. + return nil + case *types.Pointer: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Slice: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Array: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Chan: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Map: + if r := find(obj, T.Key(), append(path, opKey), seen); r != nil { + return r + } + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Signature: + if r := findTypeParam(obj, typeparams.ForSignature(T), path, seen); r != nil { + return r + } + if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { + return r + } + return find(obj, T.Results(), append(path, opResults), seen) + case *types.Struct: + for i := 0; i < T.NumFields(); i++ { + fld := T.Field(i) + path2 := appendOpArg(path, opField, i) + if fld == obj { + return path2 // found field var + } + if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *types.Tuple: + for i := 0; i < T.Len(); i++ { + v := T.At(i) + path2 := appendOpArg(path, opAt, i) + if v == obj { + return path2 // found param/result var + } + if r := find(obj, v.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *types.Interface: + for i := 0; i < T.NumMethods(); i++ { + m := T.Method(i) + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return path2 // found interface method + } + if r := find(obj, m.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *typeparams.TypeParam: + name := T.Obj() + if name == obj { + return append(path, opObj) + } + if seen[name] { + return nil + } + if seen == nil { + seen = make(map[*types.TypeName]bool) + } + seen[name] = true + if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil { + return r + } + return nil + } + panic(T) +} + +func findTypeParam(obj types.Object, list *typeparams.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { + for i := 0; i < list.Len(); i++ { + tparam := list.At(i) + path2 := appendOpArg(path, opTypeParam, i) + if r := find(obj, tparam, path2, seen); r != nil { + return r + } + } + return nil +} + +// Object returns the object denoted by path p within the package pkg. +func Object(pkg *types.Package, p Path) (types.Object, error) { + return object(pkg, string(p), false) +} + +// Note: the skipMethodSorting parameter must match the value of +// Encoder.skipMethodSorting used during encoding. +func object(pkg *types.Package, pathstr string, skipMethodSorting bool) (types.Object, error) { + if pathstr == "" { + return nil, fmt.Errorf("empty path") + } + + var pkgobj, suffix string + if dot := strings.IndexByte(pathstr, opType); dot < 0 { + pkgobj = pathstr + } else { + pkgobj = pathstr[:dot] + suffix = pathstr[dot:] // suffix starts with "." + } + + obj := pkg.Scope().Lookup(pkgobj) + if obj == nil { + return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj) + } + + // abstraction of *types.{Pointer,Slice,Array,Chan,Map} + type hasElem interface { + Elem() types.Type + } + // abstraction of *types.{Named,Signature} + type hasTypeParams interface { + TypeParams() *typeparams.TypeParamList + } + // abstraction of *types.{Named,TypeParam} + type hasObj interface { + Obj() *types.TypeName + } + + // The loop state is the pair (t, obj), + // exactly one of which is non-nil, initially obj. + // All suffixes start with '.' (the only object->type operation), + // followed by optional type->type operations, + // then a type->object operation. + // The cycle then repeats. + var t types.Type + for suffix != "" { + code := suffix[0] + suffix = suffix[1:] + + // Codes [AFM] have an integer operand. + var index int + switch code { + case opAt, opField, opMethod, opTypeParam: + rest := strings.TrimLeft(suffix, "0123456789") + numerals := suffix[:len(suffix)-len(rest)] + suffix = rest + i, err := strconv.Atoi(numerals) + if err != nil { + return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code) + } + index = int(i) + case opObj: + // no operand + default: + // The suffix must end with a type->object operation. + if suffix == "" { + return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code) + } + } + + if code == opType { + if t != nil { + return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType) + } + t = obj.Type() + obj = nil + continue + } + + if t == nil { + return nil, fmt.Errorf("invalid path: code %q in object context", code) + } + + // Inv: t != nil, obj == nil + + switch code { + case opElem: + hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t) + } + t = hasElem.Elem() + + case opKey: + mapType, ok := t.(*types.Map) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t) + } + t = mapType.Key() + + case opParams: + sig, ok := t.(*types.Signature) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + t = sig.Params() + + case opResults: + sig, ok := t.(*types.Signature) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + t = sig.Results() + + case opUnderlying: + named, ok := t.(*types.Named) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t) + } + t = named.Underlying() + + case opTypeParam: + hasTypeParams, ok := t.(hasTypeParams) // Named, Signature + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t) + } + tparams := hasTypeParams.TypeParams() + if n := tparams.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + t = tparams.At(index) + + case opConstraint: + tparam, ok := t.(*typeparams.TypeParam) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t) + } + t = tparam.Constraint() + + case opAt: + tuple, ok := t.(*types.Tuple) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t) + } + if n := tuple.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + obj = tuple.At(index) + t = nil + + case opField: + structType, ok := t.(*types.Struct) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t) + } + if n := structType.NumFields(); index >= n { + return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n) + } + obj = structType.Field(index) + t = nil + + case opMethod: + switch t := t.(type) { + case *types.Interface: + if index >= t.NumMethods() { + return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) + } + obj = t.Method(index) // Id-ordered + + case *types.Named: + if index >= t.NumMethods() { + return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) + } + if skipMethodSorting { + obj = t.Method(index) + } else { + methods := namedMethods(t) // (unmemoized) + obj = methods[index] // Id-ordered + } + + default: + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t) + } + t = nil + + case opObj: + hasObj, ok := t.(hasObj) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t) + } + obj = hasObj.Obj() + t = nil + + default: + return nil, fmt.Errorf("invalid path: unknown code %q", code) + } + } + + if obj.Pkg() != pkg { + return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) + } + + return obj, nil // success +} + +// namedMethods returns the methods of a Named type in ascending Id order. +func namedMethods(named *types.Named) []*types.Func { + methods := make([]*types.Func, named.NumMethods()) + for i := range methods { + methods[i] = named.Method(i) + } + sort.Slice(methods, func(i, j int) bool { + return methods[i].Id() < methods[j].Id() + }) + return methods +} + +// namedMethods is a memoization of the namedMethods function. Callers must not modify the result. +func (enc *Encoder) namedMethods(named *types.Named) []*types.Func { + m := enc.namedMethodsMemo + if m == nil { + m = make(map[*types.Named][]*types.Func) + enc.namedMethodsMemo = m + } + methods, ok := m[named] + if !ok { + methods = namedMethods(named) // allocates and sorts + m[named] = methods + } + return methods +} + +// scopeObjects is a memoization of scope objects. +// Callers must not modify the result. +func (enc *Encoder) scopeObjects(scope *types.Scope) []types.Object { + m := enc.scopeMemo + if m == nil { + m = make(map[*types.Scope][]types.Object) + enc.scopeMemo = m + } + objs, ok := m[scope] + if !ok { + names := scope.Names() // allocates and sorts + objs = make([]types.Object, len(names)) + for i, name := range names { + objs[i] = scope.Lookup(name) + } + m[scope] = objs + } + return objs +} diff --git a/vendor/golang.org/x/tools/internal/event/tag/tag.go b/vendor/golang.org/x/tools/internal/event/tag/tag.go new file mode 100644 index 0000000000000..581b26c2041fe --- /dev/null +++ b/vendor/golang.org/x/tools/internal/event/tag/tag.go @@ -0,0 +1,59 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tag provides the labels used for telemetry throughout gopls. +package tag + +import ( + "golang.org/x/tools/internal/event/keys" +) + +var ( + // create the label keys we use + Method = keys.NewString("method", "") + StatusCode = keys.NewString("status.code", "") + StatusMessage = keys.NewString("status.message", "") + RPCID = keys.NewString("id", "") + RPCDirection = keys.NewString("direction", "") + File = keys.NewString("file", "") + Directory = keys.New("directory", "") + URI = keys.New("URI", "") + Package = keys.NewString("package", "") // sorted comma-separated list of Package IDs + PackagePath = keys.NewString("package_path", "") + Query = keys.New("query", "") + Snapshot = keys.NewUInt64("snapshot", "") + Operation = keys.NewString("operation", "") + + Position = keys.New("position", "") + Category = keys.NewString("category", "") + PackageCount = keys.NewInt("packages", "") + Files = keys.New("files", "") + Port = keys.NewInt("port", "") + Type = keys.New("type", "") + HoverKind = keys.NewString("hoverkind", "") + + NewServer = keys.NewString("new_server", "A new server was added") + EndServer = keys.NewString("end_server", "A server was shut down") + + ServerID = keys.NewString("server", "The server ID an event is related to") + Logfile = keys.NewString("logfile", "") + DebugAddress = keys.NewString("debug_address", "") + GoplsPath = keys.NewString("gopls_path", "") + ClientID = keys.NewString("client_id", "") + + Level = keys.NewInt("level", "The logging level") +) + +var ( + // create the stats we measure + Started = keys.NewInt64("started", "Count of started RPCs.") + ReceivedBytes = keys.NewInt64("received_bytes", "Bytes received.") //, unit.Bytes) + SentBytes = keys.NewInt64("sent_bytes", "Bytes sent.") //, unit.Bytes) + Latency = keys.NewFloat64("latency_ms", "Elapsed time in milliseconds") //, unit.Milliseconds) +) + +const ( + Inbound = "in" + Outbound = "out" +) diff --git a/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go index 798fe599be4ce..c40c7e9310666 100644 --- a/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go +++ b/vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package fastwalk provides a faster version of filepath.Walk for file system +// Package fastwalk provides a faster version of [filepath.Walk] for file system // scanning tools. package fastwalk @@ -23,31 +23,31 @@ var ErrTraverseLink = errors.New("fastwalk: traverse symlink, assuming target is // Child directories will still be traversed. var ErrSkipFiles = errors.New("fastwalk: skip remaining files in directory") -// Walk is a faster implementation of filepath.Walk. +// Walk is a faster implementation of [filepath.Walk]. // -// filepath.Walk's design necessarily calls os.Lstat on each file, +// [filepath.Walk]'s design necessarily calls [os.Lstat] on each file, // even if the caller needs less info. // Many tools need only the type of each file. // On some platforms, this information is provided directly by the readdir // system call, avoiding the need to stat each file individually. // fastwalk_unix.go contains a fork of the syscall routines. // -// See golang.org/issue/16399 +// See golang.org/issue/16399. // // Walk walks the file tree rooted at root, calling walkFn for // each file or directory in the tree, including root. // -// If fastWalk returns filepath.SkipDir, the directory is skipped. +// If Walk returns [filepath.SkipDir], the directory is skipped. // -// Unlike filepath.Walk: +// Unlike [filepath.Walk]: // - file stat calls must be done by the user. // The only provided metadata is the file type, which does not include // any permission bits. // - multiple goroutines stat the filesystem concurrently. The provided // walkFn must be safe for concurrent use. -// - fastWalk can follow symlinks if walkFn returns the TraverseLink +// - Walk can follow symlinks if walkFn returns the TraverseLink // sentinel error. It is the walkFn's responsibility to prevent -// fastWalk from going into symlink cycles. +// Walk from going into symlink cycles. func Walk(root string, walkFn func(path string, typ os.FileMode) error) error { // TODO(bradfitz): make numWorkers configurable? We used a // minimum of 4 to give the kernel more info about multiple diff --git a/vendor/golang.org/x/tools/internal/gcimporter/bexport.go b/vendor/golang.org/x/tools/internal/gcimporter/bexport.go deleted file mode 100644 index 30582ed6d3d70..0000000000000 --- a/vendor/golang.org/x/tools/internal/gcimporter/bexport.go +++ /dev/null @@ -1,852 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Binary package export. -// This file was derived from $GOROOT/src/cmd/compile/internal/gc/bexport.go; -// see that file for specification of the format. - -package gcimporter - -import ( - "bytes" - "encoding/binary" - "fmt" - "go/constant" - "go/token" - "go/types" - "math" - "math/big" - "sort" - "strings" -) - -// If debugFormat is set, each integer and string value is preceded by a marker -// and position information in the encoding. This mechanism permits an importer -// to recognize immediately when it is out of sync. The importer recognizes this -// mode automatically (i.e., it can import export data produced with debugging -// support even if debugFormat is not set at the time of import). This mode will -// lead to massively larger export data (by a factor of 2 to 3) and should only -// be enabled during development and debugging. -// -// NOTE: This flag is the first flag to enable if importing dies because of -// (suspected) format errors, and whenever a change is made to the format. -const debugFormat = false // default: false - -// Current export format version. Increase with each format change. -// -// Note: The latest binary (non-indexed) export format is at version 6. -// This exporter is still at level 4, but it doesn't matter since -// the binary importer can handle older versions just fine. -// -// 6: package height (CL 105038) -- NOT IMPLEMENTED HERE -// 5: improved position encoding efficiency (issue 20080, CL 41619) -- NOT IMPLEMENTED HERE -// 4: type name objects support type aliases, uses aliasTag -// 3: Go1.8 encoding (same as version 2, aliasTag defined but never used) -// 2: removed unused bool in ODCL export (compiler only) -// 1: header format change (more regular), export package for _ struct fields -// 0: Go1.7 encoding -const exportVersion = 4 - -// trackAllTypes enables cycle tracking for all types, not just named -// types. The existing compiler invariants assume that unnamed types -// that are not completely set up are not used, or else there are spurious -// errors. -// If disabled, only named types are tracked, possibly leading to slightly -// less efficient encoding in rare cases. It also prevents the export of -// some corner-case type declarations (but those are not handled correctly -// with with the textual export format either). -// TODO(gri) enable and remove once issues caused by it are fixed -const trackAllTypes = false - -type exporter struct { - fset *token.FileSet - out bytes.Buffer - - // object -> index maps, indexed in order of serialization - strIndex map[string]int - pkgIndex map[*types.Package]int - typIndex map[types.Type]int - - // position encoding - posInfoFormat bool - prevFile string - prevLine int - - // debugging support - written int // bytes written - indent int // for trace -} - -// internalError represents an error generated inside this package. -type internalError string - -func (e internalError) Error() string { return "gcimporter: " + string(e) } - -func internalErrorf(format string, args ...interface{}) error { - return internalError(fmt.Sprintf(format, args...)) -} - -// BExportData returns binary export data for pkg. -// If no file set is provided, position info will be missing. -func BExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) { - if !debug { - defer func() { - if e := recover(); e != nil { - if ierr, ok := e.(internalError); ok { - err = ierr - return - } - // Not an internal error; panic again. - panic(e) - } - }() - } - - p := exporter{ - fset: fset, - strIndex: map[string]int{"": 0}, // empty string is mapped to 0 - pkgIndex: make(map[*types.Package]int), - typIndex: make(map[types.Type]int), - posInfoFormat: true, // TODO(gri) might become a flag, eventually - } - - // write version info - // The version string must start with "version %d" where %d is the version - // number. Additional debugging information may follow after a blank; that - // text is ignored by the importer. - p.rawStringln(fmt.Sprintf("version %d", exportVersion)) - var debug string - if debugFormat { - debug = "debug" - } - p.rawStringln(debug) // cannot use p.bool since it's affected by debugFormat; also want to see this clearly - p.bool(trackAllTypes) - p.bool(p.posInfoFormat) - - // --- generic export data --- - - // populate type map with predeclared "known" types - for index, typ := range predeclared() { - p.typIndex[typ] = index - } - if len(p.typIndex) != len(predeclared()) { - return nil, internalError("duplicate entries in type map?") - } - - // write package data - p.pkg(pkg, true) - if trace { - p.tracef("\n") - } - - // write objects - objcount := 0 - scope := pkg.Scope() - for _, name := range scope.Names() { - if !token.IsExported(name) { - continue - } - if trace { - p.tracef("\n") - } - p.obj(scope.Lookup(name)) - objcount++ - } - - // indicate end of list - if trace { - p.tracef("\n") - } - p.tag(endTag) - - // for self-verification only (redundant) - p.int(objcount) - - if trace { - p.tracef("\n") - } - - // --- end of export data --- - - return p.out.Bytes(), nil -} - -func (p *exporter) pkg(pkg *types.Package, emptypath bool) { - if pkg == nil { - panic(internalError("unexpected nil pkg")) - } - - // if we saw the package before, write its index (>= 0) - if i, ok := p.pkgIndex[pkg]; ok { - p.index('P', i) - return - } - - // otherwise, remember the package, write the package tag (< 0) and package data - if trace { - p.tracef("P%d = { ", len(p.pkgIndex)) - defer p.tracef("} ") - } - p.pkgIndex[pkg] = len(p.pkgIndex) - - p.tag(packageTag) - p.string(pkg.Name()) - if emptypath { - p.string("") - } else { - p.string(pkg.Path()) - } -} - -func (p *exporter) obj(obj types.Object) { - switch obj := obj.(type) { - case *types.Const: - p.tag(constTag) - p.pos(obj) - p.qualifiedName(obj) - p.typ(obj.Type()) - p.value(obj.Val()) - - case *types.TypeName: - if obj.IsAlias() { - p.tag(aliasTag) - p.pos(obj) - p.qualifiedName(obj) - } else { - p.tag(typeTag) - } - p.typ(obj.Type()) - - case *types.Var: - p.tag(varTag) - p.pos(obj) - p.qualifiedName(obj) - p.typ(obj.Type()) - - case *types.Func: - p.tag(funcTag) - p.pos(obj) - p.qualifiedName(obj) - sig := obj.Type().(*types.Signature) - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) - - default: - panic(internalErrorf("unexpected object %v (%T)", obj, obj)) - } -} - -func (p *exporter) pos(obj types.Object) { - if !p.posInfoFormat { - return - } - - file, line := p.fileLine(obj) - if file == p.prevFile { - // common case: write line delta - // delta == 0 means different file or no line change - delta := line - p.prevLine - p.int(delta) - if delta == 0 { - p.int(-1) // -1 means no file change - } - } else { - // different file - p.int(0) - // Encode filename as length of common prefix with previous - // filename, followed by (possibly empty) suffix. Filenames - // frequently share path prefixes, so this can save a lot - // of space and make export data size less dependent on file - // path length. The suffix is unlikely to be empty because - // file names tend to end in ".go". - n := commonPrefixLen(p.prevFile, file) - p.int(n) // n >= 0 - p.string(file[n:]) // write suffix only - p.prevFile = file - p.int(line) - } - p.prevLine = line -} - -func (p *exporter) fileLine(obj types.Object) (file string, line int) { - if p.fset != nil { - pos := p.fset.Position(obj.Pos()) - file = pos.Filename - line = pos.Line - } - return -} - -func commonPrefixLen(a, b string) int { - if len(a) > len(b) { - a, b = b, a - } - // len(a) <= len(b) - i := 0 - for i < len(a) && a[i] == b[i] { - i++ - } - return i -} - -func (p *exporter) qualifiedName(obj types.Object) { - p.string(obj.Name()) - p.pkg(obj.Pkg(), false) -} - -func (p *exporter) typ(t types.Type) { - if t == nil { - panic(internalError("nil type")) - } - - // Possible optimization: Anonymous pointer types *T where - // T is a named type are common. We could canonicalize all - // such types *T to a single type PT = *T. This would lead - // to at most one *T entry in typIndex, and all future *T's - // would be encoded as the respective index directly. Would - // save 1 byte (pointerTag) per *T and reduce the typIndex - // size (at the cost of a canonicalization map). We can do - // this later, without encoding format change. - - // if we saw the type before, write its index (>= 0) - if i, ok := p.typIndex[t]; ok { - p.index('T', i) - return - } - - // otherwise, remember the type, write the type tag (< 0) and type data - if trackAllTypes { - if trace { - p.tracef("T%d = {>\n", len(p.typIndex)) - defer p.tracef("<\n} ") - } - p.typIndex[t] = len(p.typIndex) - } - - switch t := t.(type) { - case *types.Named: - if !trackAllTypes { - // if we don't track all types, track named types now - p.typIndex[t] = len(p.typIndex) - } - - p.tag(namedTag) - p.pos(t.Obj()) - p.qualifiedName(t.Obj()) - p.typ(t.Underlying()) - if !types.IsInterface(t) { - p.assocMethods(t) - } - - case *types.Array: - p.tag(arrayTag) - p.int64(t.Len()) - p.typ(t.Elem()) - - case *types.Slice: - p.tag(sliceTag) - p.typ(t.Elem()) - - case *dddSlice: - p.tag(dddTag) - p.typ(t.elem) - - case *types.Struct: - p.tag(structTag) - p.fieldList(t) - - case *types.Pointer: - p.tag(pointerTag) - p.typ(t.Elem()) - - case *types.Signature: - p.tag(signatureTag) - p.paramList(t.Params(), t.Variadic()) - p.paramList(t.Results(), false) - - case *types.Interface: - p.tag(interfaceTag) - p.iface(t) - - case *types.Map: - p.tag(mapTag) - p.typ(t.Key()) - p.typ(t.Elem()) - - case *types.Chan: - p.tag(chanTag) - p.int(int(3 - t.Dir())) // hack - p.typ(t.Elem()) - - default: - panic(internalErrorf("unexpected type %T: %s", t, t)) - } -} - -func (p *exporter) assocMethods(named *types.Named) { - // Sort methods (for determinism). - var methods []*types.Func - for i := 0; i < named.NumMethods(); i++ { - methods = append(methods, named.Method(i)) - } - sort.Sort(methodsByName(methods)) - - p.int(len(methods)) - - if trace && methods != nil { - p.tracef("associated methods {>\n") - } - - for i, m := range methods { - if trace && i > 0 { - p.tracef("\n") - } - - p.pos(m) - name := m.Name() - p.string(name) - if !exported(name) { - p.pkg(m.Pkg(), false) - } - - sig := m.Type().(*types.Signature) - p.paramList(types.NewTuple(sig.Recv()), false) - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) - p.int(0) // dummy value for go:nointerface pragma - ignored by importer - } - - if trace && methods != nil { - p.tracef("<\n} ") - } -} - -type methodsByName []*types.Func - -func (x methodsByName) Len() int { return len(x) } -func (x methodsByName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } -func (x methodsByName) Less(i, j int) bool { return x[i].Name() < x[j].Name() } - -func (p *exporter) fieldList(t *types.Struct) { - if trace && t.NumFields() > 0 { - p.tracef("fields {>\n") - defer p.tracef("<\n} ") - } - - p.int(t.NumFields()) - for i := 0; i < t.NumFields(); i++ { - if trace && i > 0 { - p.tracef("\n") - } - p.field(t.Field(i)) - p.string(t.Tag(i)) - } -} - -func (p *exporter) field(f *types.Var) { - if !f.IsField() { - panic(internalError("field expected")) - } - - p.pos(f) - p.fieldName(f) - p.typ(f.Type()) -} - -func (p *exporter) iface(t *types.Interface) { - // TODO(gri): enable importer to load embedded interfaces, - // then emit Embeddeds and ExplicitMethods separately here. - p.int(0) - - n := t.NumMethods() - if trace && n > 0 { - p.tracef("methods {>\n") - defer p.tracef("<\n} ") - } - p.int(n) - for i := 0; i < n; i++ { - if trace && i > 0 { - p.tracef("\n") - } - p.method(t.Method(i)) - } -} - -func (p *exporter) method(m *types.Func) { - sig := m.Type().(*types.Signature) - if sig.Recv() == nil { - panic(internalError("method expected")) - } - - p.pos(m) - p.string(m.Name()) - if m.Name() != "_" && !token.IsExported(m.Name()) { - p.pkg(m.Pkg(), false) - } - - // interface method; no need to encode receiver. - p.paramList(sig.Params(), sig.Variadic()) - p.paramList(sig.Results(), false) -} - -func (p *exporter) fieldName(f *types.Var) { - name := f.Name() - - if f.Anonymous() { - // anonymous field - we distinguish between 3 cases: - // 1) field name matches base type name and is exported - // 2) field name matches base type name and is not exported - // 3) field name doesn't match base type name (alias name) - bname := basetypeName(f.Type()) - if name == bname { - if token.IsExported(name) { - name = "" // 1) we don't need to know the field name or package - } else { - name = "?" // 2) use unexported name "?" to force package export - } - } else { - // 3) indicate alias and export name as is - // (this requires an extra "@" but this is a rare case) - p.string("@") - } - } - - p.string(name) - if name != "" && !token.IsExported(name) { - p.pkg(f.Pkg(), false) - } -} - -func basetypeName(typ types.Type) string { - switch typ := deref(typ).(type) { - case *types.Basic: - return typ.Name() - case *types.Named: - return typ.Obj().Name() - default: - return "" // unnamed type - } -} - -func (p *exporter) paramList(params *types.Tuple, variadic bool) { - // use negative length to indicate unnamed parameters - // (look at the first parameter only since either all - // names are present or all are absent) - n := params.Len() - if n > 0 && params.At(0).Name() == "" { - n = -n - } - p.int(n) - for i := 0; i < params.Len(); i++ { - q := params.At(i) - t := q.Type() - if variadic && i == params.Len()-1 { - t = &dddSlice{t.(*types.Slice).Elem()} - } - p.typ(t) - if n > 0 { - name := q.Name() - p.string(name) - if name != "_" { - p.pkg(q.Pkg(), false) - } - } - p.string("") // no compiler-specific info - } -} - -func (p *exporter) value(x constant.Value) { - if trace { - p.tracef("= ") - } - - switch x.Kind() { - case constant.Bool: - tag := falseTag - if constant.BoolVal(x) { - tag = trueTag - } - p.tag(tag) - - case constant.Int: - if v, exact := constant.Int64Val(x); exact { - // common case: x fits into an int64 - use compact encoding - p.tag(int64Tag) - p.int64(v) - return - } - // uncommon case: large x - use float encoding - // (powers of 2 will be encoded efficiently with exponent) - p.tag(floatTag) - p.float(constant.ToFloat(x)) - - case constant.Float: - p.tag(floatTag) - p.float(x) - - case constant.Complex: - p.tag(complexTag) - p.float(constant.Real(x)) - p.float(constant.Imag(x)) - - case constant.String: - p.tag(stringTag) - p.string(constant.StringVal(x)) - - case constant.Unknown: - // package contains type errors - p.tag(unknownTag) - - default: - panic(internalErrorf("unexpected value %v (%T)", x, x)) - } -} - -func (p *exporter) float(x constant.Value) { - if x.Kind() != constant.Float { - panic(internalErrorf("unexpected constant %v, want float", x)) - } - // extract sign (there is no -0) - sign := constant.Sign(x) - if sign == 0 { - // x == 0 - p.int(0) - return - } - // x != 0 - - var f big.Float - if v, exact := constant.Float64Val(x); exact { - // float64 - f.SetFloat64(v) - } else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int { - // TODO(gri): add big.Rat accessor to constant.Value. - r := valueToRat(num) - f.SetRat(r.Quo(r, valueToRat(denom))) - } else { - // Value too large to represent as a fraction => inaccessible. - // TODO(gri): add big.Float accessor to constant.Value. - f.SetFloat64(math.MaxFloat64) // FIXME - } - - // extract exponent such that 0.5 <= m < 1.0 - var m big.Float - exp := f.MantExp(&m) - - // extract mantissa as *big.Int - // - set exponent large enough so mant satisfies mant.IsInt() - // - get *big.Int from mant - m.SetMantExp(&m, int(m.MinPrec())) - mant, acc := m.Int(nil) - if acc != big.Exact { - panic(internalError("internal error")) - } - - p.int(sign) - p.int(exp) - p.string(string(mant.Bytes())) -} - -func valueToRat(x constant.Value) *big.Rat { - // Convert little-endian to big-endian. - // I can't believe this is necessary. - bytes := constant.Bytes(x) - for i := 0; i < len(bytes)/2; i++ { - bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] - } - return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) -} - -func (p *exporter) bool(b bool) bool { - if trace { - p.tracef("[") - defer p.tracef("= %v] ", b) - } - - x := 0 - if b { - x = 1 - } - p.int(x) - return b -} - -// ---------------------------------------------------------------------------- -// Low-level encoders - -func (p *exporter) index(marker byte, index int) { - if index < 0 { - panic(internalError("invalid index < 0")) - } - if debugFormat { - p.marker('t') - } - if trace { - p.tracef("%c%d ", marker, index) - } - p.rawInt64(int64(index)) -} - -func (p *exporter) tag(tag int) { - if tag >= 0 { - panic(internalError("invalid tag >= 0")) - } - if debugFormat { - p.marker('t') - } - if trace { - p.tracef("%s ", tagString[-tag]) - } - p.rawInt64(int64(tag)) -} - -func (p *exporter) int(x int) { - p.int64(int64(x)) -} - -func (p *exporter) int64(x int64) { - if debugFormat { - p.marker('i') - } - if trace { - p.tracef("%d ", x) - } - p.rawInt64(x) -} - -func (p *exporter) string(s string) { - if debugFormat { - p.marker('s') - } - if trace { - p.tracef("%q ", s) - } - // if we saw the string before, write its index (>= 0) - // (the empty string is mapped to 0) - if i, ok := p.strIndex[s]; ok { - p.rawInt64(int64(i)) - return - } - // otherwise, remember string and write its negative length and bytes - p.strIndex[s] = len(p.strIndex) - p.rawInt64(-int64(len(s))) - for i := 0; i < len(s); i++ { - p.rawByte(s[i]) - } -} - -// marker emits a marker byte and position information which makes -// it easy for a reader to detect if it is "out of sync". Used for -// debugFormat format only. -func (p *exporter) marker(m byte) { - p.rawByte(m) - // Enable this for help tracking down the location - // of an incorrect marker when running in debugFormat. - if false && trace { - p.tracef("#%d ", p.written) - } - p.rawInt64(int64(p.written)) -} - -// rawInt64 should only be used by low-level encoders. -func (p *exporter) rawInt64(x int64) { - var tmp [binary.MaxVarintLen64]byte - n := binary.PutVarint(tmp[:], x) - for i := 0; i < n; i++ { - p.rawByte(tmp[i]) - } -} - -// rawStringln should only be used to emit the initial version string. -func (p *exporter) rawStringln(s string) { - for i := 0; i < len(s); i++ { - p.rawByte(s[i]) - } - p.rawByte('\n') -} - -// rawByte is the bottleneck interface to write to p.out. -// rawByte escapes b as follows (any encoding does that -// hides '$'): -// -// '$' => '|' 'S' -// '|' => '|' '|' -// -// Necessary so other tools can find the end of the -// export data by searching for "$$". -// rawByte should only be used by low-level encoders. -func (p *exporter) rawByte(b byte) { - switch b { - case '$': - // write '$' as '|' 'S' - b = 'S' - fallthrough - case '|': - // write '|' as '|' '|' - p.out.WriteByte('|') - p.written++ - } - p.out.WriteByte(b) - p.written++ -} - -// tracef is like fmt.Printf but it rewrites the format string -// to take care of indentation. -func (p *exporter) tracef(format string, args ...interface{}) { - if strings.ContainsAny(format, "<>\n") { - var buf bytes.Buffer - for i := 0; i < len(format); i++ { - // no need to deal with runes - ch := format[i] - switch ch { - case '>': - p.indent++ - continue - case '<': - p.indent-- - continue - } - buf.WriteByte(ch) - if ch == '\n' { - for j := p.indent; j > 0; j-- { - buf.WriteString(". ") - } - } - } - format = buf.String() - } - fmt.Printf(format, args...) -} - -// Debugging support. -// (tagString is only used when tracing is enabled) -var tagString = [...]string{ - // Packages - -packageTag: "package", - - // Types - -namedTag: "named type", - -arrayTag: "array", - -sliceTag: "slice", - -dddTag: "ddd", - -structTag: "struct", - -pointerTag: "pointer", - -signatureTag: "signature", - -interfaceTag: "interface", - -mapTag: "map", - -chanTag: "chan", - - // Values - -falseTag: "false", - -trueTag: "true", - -int64Tag: "int64", - -floatTag: "float", - -fractionTag: "fraction", - -complexTag: "complex", - -stringTag: "string", - -unknownTag: "unknown", - - // Type aliases - -aliasTag: "alias", -} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go index b85de01470018..d98b0db2a9a98 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/bimport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/bimport.go @@ -2,340 +2,24 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// This file is a copy of $GOROOT/src/go/internal/gcimporter/bimport.go. +// This file contains the remaining vestiges of +// $GOROOT/src/go/internal/gcimporter/bimport.go. package gcimporter import ( - "encoding/binary" "fmt" - "go/constant" "go/token" "go/types" - "sort" - "strconv" - "strings" "sync" - "unicode" - "unicode/utf8" ) -type importer struct { - imports map[string]*types.Package - data []byte - importpath string - buf []byte // for reading strings - version int // export format version - - // object lists - strList []string // in order of appearance - pathList []string // in order of appearance - pkgList []*types.Package // in order of appearance - typList []types.Type // in order of appearance - interfaceList []*types.Interface // for delayed completion only - trackAllTypes bool - - // position encoding - posInfoFormat bool - prevFile string - prevLine int - fake fakeFileSet - - // debugging support - debugFormat bool - read int // bytes read -} - -// BImportData imports a package from the serialized package data -// and returns the number of bytes consumed and a reference to the package. -// If the export data version is not recognized or the format is otherwise -// compromised, an error is returned. -func BImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { - // catch panics and return them as errors - const currentVersion = 6 - version := -1 // unknown version - defer func() { - if e := recover(); e != nil { - // Return a (possibly nil or incomplete) package unchanged (see #16088). - if version > currentVersion { - err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) - } else { - err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) - } - } - }() - - p := importer{ - imports: imports, - data: data, - importpath: path, - version: version, - strList: []string{""}, // empty string is mapped to 0 - pathList: []string{""}, // empty string is mapped to 0 - fake: fakeFileSet{ - fset: fset, - files: make(map[string]*fileInfo), - }, - } - defer p.fake.setLines() // set lines for files in fset - - // read version info - var versionstr string - if b := p.rawByte(); b == 'c' || b == 'd' { - // Go1.7 encoding; first byte encodes low-level - // encoding format (compact vs debug). - // For backward-compatibility only (avoid problems with - // old installed packages). Newly compiled packages use - // the extensible format string. - // TODO(gri) Remove this support eventually; after Go1.8. - if b == 'd' { - p.debugFormat = true - } - p.trackAllTypes = p.rawByte() == 'a' - p.posInfoFormat = p.int() != 0 - versionstr = p.string() - if versionstr == "v1" { - version = 0 - } - } else { - // Go1.8 extensible encoding - // read version string and extract version number (ignore anything after the version number) - versionstr = p.rawStringln(b) - if s := strings.SplitN(versionstr, " ", 3); len(s) >= 2 && s[0] == "version" { - if v, err := strconv.Atoi(s[1]); err == nil && v > 0 { - version = v - } - } - } - p.version = version - - // read version specific flags - extend as necessary - switch p.version { - // case currentVersion: - // ... - // fallthrough - case currentVersion, 5, 4, 3, 2, 1: - p.debugFormat = p.rawStringln(p.rawByte()) == "debug" - p.trackAllTypes = p.int() != 0 - p.posInfoFormat = p.int() != 0 - case 0: - // Go1.7 encoding format - nothing to do here - default: - errorf("unknown bexport format version %d (%q)", p.version, versionstr) - } - - // --- generic export data --- - - // populate typList with predeclared "known" types - p.typList = append(p.typList, predeclared()...) - - // read package data - pkg = p.pkg() - - // read objects of phase 1 only (see cmd/compile/internal/gc/bexport.go) - objcount := 0 - for { - tag := p.tagOrIndex() - if tag == endTag { - break - } - p.obj(tag) - objcount++ - } - - // self-verification - if count := p.int(); count != objcount { - errorf("got %d objects; want %d", objcount, count) - } - - // ignore compiler-specific import data - - // complete interfaces - // TODO(gri) re-investigate if we still need to do this in a delayed fashion - for _, typ := range p.interfaceList { - typ.Complete() - } - - // record all referenced packages as imports - list := append(([]*types.Package)(nil), p.pkgList[1:]...) - sort.Sort(byPath(list)) - pkg.SetImports(list) - - // package was imported completely and without errors - pkg.MarkComplete() - - return p.read, pkg, nil -} - func errorf(format string, args ...interface{}) { panic(fmt.Sprintf(format, args...)) } -func (p *importer) pkg() *types.Package { - // if the package was seen before, i is its index (>= 0) - i := p.tagOrIndex() - if i >= 0 { - return p.pkgList[i] - } - - // otherwise, i is the package tag (< 0) - if i != packageTag { - errorf("unexpected package tag %d version %d", i, p.version) - } - - // read package data - name := p.string() - var path string - if p.version >= 5 { - path = p.path() - } else { - path = p.string() - } - if p.version >= 6 { - p.int() // package height; unused by go/types - } - - // we should never see an empty package name - if name == "" { - errorf("empty package name in import") - } - - // an empty path denotes the package we are currently importing; - // it must be the first package we see - if (path == "") != (len(p.pkgList) == 0) { - errorf("package path %q for pkg index %d", path, len(p.pkgList)) - } - - // if the package was imported before, use that one; otherwise create a new one - if path == "" { - path = p.importpath - } - pkg := p.imports[path] - if pkg == nil { - pkg = types.NewPackage(path, name) - p.imports[path] = pkg - } else if pkg.Name() != name { - errorf("conflicting names %s and %s for package %q", pkg.Name(), name, path) - } - p.pkgList = append(p.pkgList, pkg) - - return pkg -} - -// objTag returns the tag value for each object kind. -func objTag(obj types.Object) int { - switch obj.(type) { - case *types.Const: - return constTag - case *types.TypeName: - return typeTag - case *types.Var: - return varTag - case *types.Func: - return funcTag - default: - errorf("unexpected object: %v (%T)", obj, obj) // panics - panic("unreachable") - } -} - -func sameObj(a, b types.Object) bool { - // Because unnamed types are not canonicalized, we cannot simply compare types for - // (pointer) identity. - // Ideally we'd check equality of constant values as well, but this is good enough. - return objTag(a) == objTag(b) && types.Identical(a.Type(), b.Type()) -} - -func (p *importer) declare(obj types.Object) { - pkg := obj.Pkg() - if alt := pkg.Scope().Insert(obj); alt != nil { - // This can only trigger if we import a (non-type) object a second time. - // Excluding type aliases, this cannot happen because 1) we only import a package - // once; and b) we ignore compiler-specific export data which may contain - // functions whose inlined function bodies refer to other functions that - // were already imported. - // However, type aliases require reexporting the original type, so we need - // to allow it (see also the comment in cmd/compile/internal/gc/bimport.go, - // method importer.obj, switch case importing functions). - // TODO(gri) review/update this comment once the gc compiler handles type aliases. - if !sameObj(obj, alt) { - errorf("inconsistent import:\n\t%v\npreviously imported as:\n\t%v\n", obj, alt) - } - } -} - -func (p *importer) obj(tag int) { - switch tag { - case constTag: - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - val := p.value() - p.declare(types.NewConst(pos, pkg, name, typ, val)) - - case aliasTag: - // TODO(gri) verify type alias hookup is correct - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - p.declare(types.NewTypeName(pos, pkg, name, typ)) - - case typeTag: - p.typ(nil, nil) - - case varTag: - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - p.declare(types.NewVar(pos, pkg, name, typ)) - - case funcTag: - pos := p.pos() - pkg, name := p.qualifiedName() - params, isddd := p.paramList() - result, _ := p.paramList() - sig := types.NewSignature(nil, params, result, isddd) - p.declare(types.NewFunc(pos, pkg, name, sig)) - - default: - errorf("unexpected object tag %d", tag) - } -} - const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go -func (p *importer) pos() token.Pos { - if !p.posInfoFormat { - return token.NoPos - } - - file := p.prevFile - line := p.prevLine - delta := p.int() - line += delta - if p.version >= 5 { - if delta == deltaNewFile { - if n := p.int(); n >= 0 { - // file changed - file = p.path() - line = n - } - } - } else { - if delta == 0 { - if n := p.int(); n >= 0 { - // file changed - file = p.prevFile[:n] + p.string() - line = p.int() - } - } - } - p.prevFile = file - p.prevLine = line - - return p.fake.pos(file, line, 0) -} - // Synthesize a token.Pos type fakeFileSet struct { fset *token.FileSet @@ -389,205 +73,6 @@ var ( fakeLinesOnce sync.Once ) -func (p *importer) qualifiedName() (pkg *types.Package, name string) { - name = p.string() - pkg = p.pkg() - return -} - -func (p *importer) record(t types.Type) { - p.typList = append(p.typList, t) -} - -// A dddSlice is a types.Type representing ...T parameters. -// It only appears for parameter types and does not escape -// the importer. -type dddSlice struct { - elem types.Type -} - -func (t *dddSlice) Underlying() types.Type { return t } -func (t *dddSlice) String() string { return "..." + t.elem.String() } - -// parent is the package which declared the type; parent == nil means -// the package currently imported. The parent package is needed for -// exported struct fields and interface methods which don't contain -// explicit package information in the export data. -// -// A non-nil tname is used as the "owner" of the result type; i.e., -// the result type is the underlying type of tname. tname is used -// to give interface methods a named receiver type where possible. -func (p *importer) typ(parent *types.Package, tname *types.Named) types.Type { - // if the type was seen before, i is its index (>= 0) - i := p.tagOrIndex() - if i >= 0 { - return p.typList[i] - } - - // otherwise, i is the type tag (< 0) - switch i { - case namedTag: - // read type object - pos := p.pos() - parent, name := p.qualifiedName() - scope := parent.Scope() - obj := scope.Lookup(name) - - // if the object doesn't exist yet, create and insert it - if obj == nil { - obj = types.NewTypeName(pos, parent, name, nil) - scope.Insert(obj) - } - - if _, ok := obj.(*types.TypeName); !ok { - errorf("pkg = %s, name = %s => %s", parent, name, obj) - } - - // associate new named type with obj if it doesn't exist yet - t0 := types.NewNamed(obj.(*types.TypeName), nil, nil) - - // but record the existing type, if any - tname := obj.Type().(*types.Named) // tname is either t0 or the existing type - p.record(tname) - - // read underlying type - t0.SetUnderlying(p.typ(parent, t0)) - - // interfaces don't have associated methods - if types.IsInterface(t0) { - return tname - } - - // read associated methods - for i := p.int(); i > 0; i-- { - // TODO(gri) replace this with something closer to fieldName - pos := p.pos() - name := p.string() - if !exported(name) { - p.pkg() - } - - recv, _ := p.paramList() // TODO(gri) do we need a full param list for the receiver? - params, isddd := p.paramList() - result, _ := p.paramList() - p.int() // go:nointerface pragma - discarded - - sig := types.NewSignature(recv.At(0), params, result, isddd) - t0.AddMethod(types.NewFunc(pos, parent, name, sig)) - } - - return tname - - case arrayTag: - t := new(types.Array) - if p.trackAllTypes { - p.record(t) - } - - n := p.int64() - *t = *types.NewArray(p.typ(parent, nil), n) - return t - - case sliceTag: - t := new(types.Slice) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewSlice(p.typ(parent, nil)) - return t - - case dddTag: - t := new(dddSlice) - if p.trackAllTypes { - p.record(t) - } - - t.elem = p.typ(parent, nil) - return t - - case structTag: - t := new(types.Struct) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewStruct(p.fieldList(parent)) - return t - - case pointerTag: - t := new(types.Pointer) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewPointer(p.typ(parent, nil)) - return t - - case signatureTag: - t := new(types.Signature) - if p.trackAllTypes { - p.record(t) - } - - params, isddd := p.paramList() - result, _ := p.paramList() - *t = *types.NewSignature(nil, params, result, isddd) - return t - - case interfaceTag: - // Create a dummy entry in the type list. This is safe because we - // cannot expect the interface type to appear in a cycle, as any - // such cycle must contain a named type which would have been - // first defined earlier. - // TODO(gri) Is this still true now that we have type aliases? - // See issue #23225. - n := len(p.typList) - if p.trackAllTypes { - p.record(nil) - } - - var embeddeds []types.Type - for n := p.int(); n > 0; n-- { - p.pos() - embeddeds = append(embeddeds, p.typ(parent, nil)) - } - - t := newInterface(p.methodList(parent, tname), embeddeds) - p.interfaceList = append(p.interfaceList, t) - if p.trackAllTypes { - p.typList[n] = t - } - return t - - case mapTag: - t := new(types.Map) - if p.trackAllTypes { - p.record(t) - } - - key := p.typ(parent, nil) - val := p.typ(parent, nil) - *t = *types.NewMap(key, val) - return t - - case chanTag: - t := new(types.Chan) - if p.trackAllTypes { - p.record(t) - } - - dir := chanDir(p.int()) - val := p.typ(parent, nil) - *t = *types.NewChan(dir, val) - return t - - default: - errorf("unexpected type tag %d", i) // panics - panic("unreachable") - } -} - func chanDir(d int) types.ChanDir { // tag values must match the constants in cmd/compile/internal/gc/go.go switch d { @@ -603,394 +88,6 @@ func chanDir(d int) types.ChanDir { } } -func (p *importer) fieldList(parent *types.Package) (fields []*types.Var, tags []string) { - if n := p.int(); n > 0 { - fields = make([]*types.Var, n) - tags = make([]string, n) - for i := range fields { - fields[i], tags[i] = p.field(parent) - } - } - return -} - -func (p *importer) field(parent *types.Package) (*types.Var, string) { - pos := p.pos() - pkg, name, alias := p.fieldName(parent) - typ := p.typ(parent, nil) - tag := p.string() - - anonymous := false - if name == "" { - // anonymous field - typ must be T or *T and T must be a type name - switch typ := deref(typ).(type) { - case *types.Basic: // basic types are named types - pkg = nil // // objects defined in Universe scope have no package - name = typ.Name() - case *types.Named: - name = typ.Obj().Name() - default: - errorf("named base type expected") - } - anonymous = true - } else if alias { - // anonymous field: we have an explicit name because it's an alias - anonymous = true - } - - return types.NewField(pos, pkg, name, typ, anonymous), tag -} - -func (p *importer) methodList(parent *types.Package, baseType *types.Named) (methods []*types.Func) { - if n := p.int(); n > 0 { - methods = make([]*types.Func, n) - for i := range methods { - methods[i] = p.method(parent, baseType) - } - } - return -} - -func (p *importer) method(parent *types.Package, baseType *types.Named) *types.Func { - pos := p.pos() - pkg, name, _ := p.fieldName(parent) - // If we don't have a baseType, use a nil receiver. - // A receiver using the actual interface type (which - // we don't know yet) will be filled in when we call - // types.Interface.Complete. - var recv *types.Var - if baseType != nil { - recv = types.NewVar(token.NoPos, parent, "", baseType) - } - params, isddd := p.paramList() - result, _ := p.paramList() - sig := types.NewSignature(recv, params, result, isddd) - return types.NewFunc(pos, pkg, name, sig) -} - -func (p *importer) fieldName(parent *types.Package) (pkg *types.Package, name string, alias bool) { - name = p.string() - pkg = parent - if pkg == nil { - // use the imported package instead - pkg = p.pkgList[0] - } - if p.version == 0 && name == "_" { - // version 0 didn't export a package for _ fields - return - } - switch name { - case "": - // 1) field name matches base type name and is exported: nothing to do - case "?": - // 2) field name matches base type name and is not exported: need package - name = "" - pkg = p.pkg() - case "@": - // 3) field name doesn't match type name (alias) - name = p.string() - alias = true - fallthrough - default: - if !exported(name) { - pkg = p.pkg() - } - } - return -} - -func (p *importer) paramList() (*types.Tuple, bool) { - n := p.int() - if n == 0 { - return nil, false - } - // negative length indicates unnamed parameters - named := true - if n < 0 { - n = -n - named = false - } - // n > 0 - params := make([]*types.Var, n) - isddd := false - for i := range params { - params[i], isddd = p.param(named) - } - return types.NewTuple(params...), isddd -} - -func (p *importer) param(named bool) (*types.Var, bool) { - t := p.typ(nil, nil) - td, isddd := t.(*dddSlice) - if isddd { - t = types.NewSlice(td.elem) - } - - var pkg *types.Package - var name string - if named { - name = p.string() - if name == "" { - errorf("expected named parameter") - } - if name != "_" { - pkg = p.pkg() - } - if i := strings.Index(name, "·"); i > 0 { - name = name[:i] // cut off gc-specific parameter numbering - } - } - - // read and discard compiler-specific info - p.string() - - return types.NewVar(token.NoPos, pkg, name, t), isddd -} - -func exported(name string) bool { - ch, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(ch) -} - -func (p *importer) value() constant.Value { - switch tag := p.tagOrIndex(); tag { - case falseTag: - return constant.MakeBool(false) - case trueTag: - return constant.MakeBool(true) - case int64Tag: - return constant.MakeInt64(p.int64()) - case floatTag: - return p.float() - case complexTag: - re := p.float() - im := p.float() - return constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) - case stringTag: - return constant.MakeString(p.string()) - case unknownTag: - return constant.MakeUnknown() - default: - errorf("unexpected value tag %d", tag) // panics - panic("unreachable") - } -} - -func (p *importer) float() constant.Value { - sign := p.int() - if sign == 0 { - return constant.MakeInt64(0) - } - - exp := p.int() - mant := []byte(p.string()) // big endian - - // remove leading 0's if any - for len(mant) > 0 && mant[0] == 0 { - mant = mant[1:] - } - - // convert to little endian - // TODO(gri) go/constant should have a more direct conversion function - // (e.g., once it supports a big.Float based implementation) - for i, j := 0, len(mant)-1; i < j; i, j = i+1, j-1 { - mant[i], mant[j] = mant[j], mant[i] - } - - // adjust exponent (constant.MakeFromBytes creates an integer value, - // but mant represents the mantissa bits such that 0.5 <= mant < 1.0) - exp -= len(mant) << 3 - if len(mant) > 0 { - for msd := mant[len(mant)-1]; msd&0x80 == 0; msd <<= 1 { - exp++ - } - } - - x := constant.MakeFromBytes(mant) - switch { - case exp < 0: - d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp)) - x = constant.BinaryOp(x, token.QUO, d) - case exp > 0: - x = constant.Shift(x, token.SHL, uint(exp)) - } - - if sign < 0 { - x = constant.UnaryOp(token.SUB, x, 0) - } - return x -} - -// ---------------------------------------------------------------------------- -// Low-level decoders - -func (p *importer) tagOrIndex() int { - if p.debugFormat { - p.marker('t') - } - - return int(p.rawInt64()) -} - -func (p *importer) int() int { - x := p.int64() - if int64(int(x)) != x { - errorf("exported integer too large") - } - return int(x) -} - -func (p *importer) int64() int64 { - if p.debugFormat { - p.marker('i') - } - - return p.rawInt64() -} - -func (p *importer) path() string { - if p.debugFormat { - p.marker('p') - } - // if the path was seen before, i is its index (>= 0) - // (the empty string is at index 0) - i := p.rawInt64() - if i >= 0 { - return p.pathList[i] - } - // otherwise, i is the negative path length (< 0) - a := make([]string, -i) - for n := range a { - a[n] = p.string() - } - s := strings.Join(a, "/") - p.pathList = append(p.pathList, s) - return s -} - -func (p *importer) string() string { - if p.debugFormat { - p.marker('s') - } - // if the string was seen before, i is its index (>= 0) - // (the empty string is at index 0) - i := p.rawInt64() - if i >= 0 { - return p.strList[i] - } - // otherwise, i is the negative string length (< 0) - if n := int(-i); n <= cap(p.buf) { - p.buf = p.buf[:n] - } else { - p.buf = make([]byte, n) - } - for i := range p.buf { - p.buf[i] = p.rawByte() - } - s := string(p.buf) - p.strList = append(p.strList, s) - return s -} - -func (p *importer) marker(want byte) { - if got := p.rawByte(); got != want { - errorf("incorrect marker: got %c; want %c (pos = %d)", got, want, p.read) - } - - pos := p.read - if n := int(p.rawInt64()); n != pos { - errorf("incorrect position: got %d; want %d", n, pos) - } -} - -// rawInt64 should only be used by low-level decoders. -func (p *importer) rawInt64() int64 { - i, err := binary.ReadVarint(p) - if err != nil { - errorf("read error: %v", err) - } - return i -} - -// rawStringln should only be used to read the initial version string. -func (p *importer) rawStringln(b byte) string { - p.buf = p.buf[:0] - for b != '\n' { - p.buf = append(p.buf, b) - b = p.rawByte() - } - return string(p.buf) -} - -// needed for binary.ReadVarint in rawInt64 -func (p *importer) ReadByte() (byte, error) { - return p.rawByte(), nil -} - -// byte is the bottleneck interface for reading p.data. -// It unescapes '|' 'S' to '$' and '|' '|' to '|'. -// rawByte should only be used by low-level decoders. -func (p *importer) rawByte() byte { - b := p.data[0] - r := 1 - if b == '|' { - b = p.data[1] - r = 2 - switch b { - case 'S': - b = '$' - case '|': - // nothing to do - default: - errorf("unexpected escape sequence in export data") - } - } - p.data = p.data[r:] - p.read += r - return b - -} - -// ---------------------------------------------------------------------------- -// Export format - -// Tags. Must be < 0. -const ( - // Objects - packageTag = -(iota + 1) - constTag - typeTag - varTag - funcTag - endTag - - // Types - namedTag - arrayTag - sliceTag - dddTag - structTag - pointerTag - signatureTag - interfaceTag - mapTag - chanTag - - // Values - falseTag - trueTag - int64Tag - floatTag - fractionTag // not used by gc - complexTag - stringTag - nilTag // only used by gc (appears in exported inlined function bodies) - unknownTag // not used by gc (only appears in packages with errors) - - // Type aliases - aliasTag -) - var predeclOnce sync.Once var predecl []types.Type // initialized lazily diff --git a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go index 0372fb3a64693..b1223713b9402 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go @@ -7,6 +7,18 @@ // Package gcimporter provides various functions for reading // gc-generated object files that can be used to implement the // Importer interface defined by the Go 1.5 standard library package. +// +// The encoding is deterministic: if the encoder is applied twice to +// the same types.Package data structure, both encodings are equal. +// This property may be important to avoid spurious changes in +// applications such as build systems. +// +// However, the encoder is not necessarily idempotent. Importing an +// exported package may yield a types.Package that, while it +// represents the same set of Go types as the original, may differ in +// the details of its internal representation. Because of these +// differences, re-encoding the imported package may yield a +// different, but equally valid, encoding of the package. package gcimporter // import "golang.org/x/tools/internal/gcimporter" import ( @@ -218,20 +230,17 @@ func Import(packages map[string]*types.Package, path, srcDir string, lookup func // Or, define a new standard go/types/gcexportdata package. fset := token.NewFileSet() - // The indexed export format starts with an 'i'; the older - // binary export format starts with a 'c', 'd', or 'v' - // (from "version"). Select appropriate importer. + // Select appropriate importer. if len(data) > 0 { switch data[0] { - case 'i': - _, pkg, err := IImportData(fset, packages, data[1:], id) - return pkg, err + case 'v', 'c', 'd': // binary, till go1.10 + return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) - case 'v', 'c', 'd': - _, pkg, err := BImportData(fset, packages, data, id) + case 'i': // indexed, till go1.19 + _, pkg, err := IImportData(fset, packages, data[1:], id) return pkg, err - case 'u': + case 'u': // unified, from go1.20 _, pkg, err := UImportData(fset, packages, data[1:size], id) return pkg, err diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go index ba53cdcdd1073..6103dd7102b38 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iexport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iexport.go @@ -22,17 +22,23 @@ import ( "strconv" "strings" + "golang.org/x/tools/go/types/objectpath" "golang.org/x/tools/internal/tokeninternal" "golang.org/x/tools/internal/typeparams" ) // IExportShallow encodes "shallow" export data for the specified package. // -// No promises are made about the encoding other than that it can be -// decoded by the same version of IIExportShallow. If you plan to save -// export data in the file system, be sure to include a cryptographic -// digest of the executable in the key to avoid version skew. -func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) { +// No promises are made about the encoding other than that it can be decoded by +// the same version of IIExportShallow. If you plan to save export data in the +// file system, be sure to include a cryptographic digest of the executable in +// the key to avoid version skew. +// +// If the provided reportf func is non-nil, it will be used for reporting bugs +// encountered during export. +// TODO(rfindley): remove reportf when we are confident enough in the new +// objectpath encoding. +func IExportShallow(fset *token.FileSet, pkg *types.Package, reportf ReportFunc) ([]byte, error) { // In principle this operation can only fail if out.Write fails, // but that's impossible for bytes.Buffer---and as a matter of // fact iexportCommon doesn't even check for I/O errors. @@ -44,22 +50,30 @@ func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) { return out.Bytes(), err } -// IImportShallow decodes "shallow" types.Package data encoded by IExportShallow -// in the same executable. This function cannot import data from +// IImportShallow decodes "shallow" types.Package data encoded by +// IExportShallow in the same executable. This function cannot import data from // cmd/compile or gcexportdata.Write. -func IImportShallow(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string, insert InsertType) (*types.Package, error) { +// +// The importer calls getPackages to obtain package symbols for all +// packages mentioned in the export data, including the one being +// decoded. +// +// If the provided reportf func is non-nil, it will be used for reporting bugs +// encountered during import. +// TODO(rfindley): remove reportf when we are confident enough in the new +// objectpath encoding. +func IImportShallow(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, path string, reportf ReportFunc) (*types.Package, error) { const bundle = false - pkgs, err := iimportCommon(fset, imports, data, bundle, path, insert) + const shallow = true + pkgs, err := iimportCommon(fset, getPackages, data, bundle, path, shallow, reportf) if err != nil { return nil, err } return pkgs[0], nil } -// InsertType is the type of a function that creates a types.TypeName -// object for a named type and inserts it into the scope of the -// specified Package. -type InsertType = func(pkg *types.Package, name string) +// ReportFunc is the type of a function used to report formatted bugs. +type ReportFunc = func(string, ...interface{}) // Current bundled export format version. Increase with each format change. // 0: initial implementation @@ -313,8 +327,9 @@ type iexporter struct { out *bytes.Buffer version int - shallow bool // don't put types from other packages in the index - localpkg *types.Package // (nil in bundle mode) + shallow bool // don't put types from other packages in the index + objEncoder *objectpath.Encoder // encodes objects from other packages in shallow mode; lazily allocated + localpkg *types.Package // (nil in bundle mode) // allPkgs tracks all packages that have been referenced by // the export data, so we can ensure to include them in the @@ -354,6 +369,17 @@ func (p *iexporter) trace(format string, args ...interface{}) { fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...) } +// objectpathEncoder returns the lazily allocated objectpath.Encoder to use +// when encoding objects in other packages during shallow export. +// +// Using a shared Encoder amortizes some of cost of objectpath search. +func (p *iexporter) objectpathEncoder() *objectpath.Encoder { + if p.objEncoder == nil { + p.objEncoder = new(objectpath.Encoder) + } + return p.objEncoder +} + // stringOff returns the offset of s within the string section. // If not already present, it's added to the end. func (p *iexporter) stringOff(s string) uint64 { @@ -413,7 +439,6 @@ type exportWriter struct { p *iexporter data intWriter - currPkg *types.Package prevFile string prevLine int64 prevColumn int64 @@ -436,7 +461,6 @@ func (p *iexporter) doDecl(obj types.Object) { }() } w := p.newWriter() - w.setPkg(obj.Pkg(), false) switch obj := obj.(type) { case *types.Var: @@ -673,6 +697,9 @@ func (w *exportWriter) qualifiedType(obj *types.TypeName) { w.pkg(obj.Pkg()) } +// TODO(rfindley): what does 'pkg' even mean here? It would be better to pass +// it in explicitly into signatures and structs that may use it for +// constructing fields. func (w *exportWriter) typ(t types.Type, pkg *types.Package) { w.data.uint64(w.p.typOff(t, pkg)) } @@ -764,30 +791,53 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { case *types.Signature: w.startType(signatureType) - w.setPkg(pkg, true) + w.pkg(pkg) w.signature(t) case *types.Struct: w.startType(structType) n := t.NumFields() + // Even for struct{} we must emit some qualifying package, because that's + // what the compiler does, and thus that's what the importer expects. + fieldPkg := pkg if n > 0 { - w.setPkg(t.Field(0).Pkg(), true) // qualifying package for field objects - } else { - w.setPkg(pkg, true) + fieldPkg = t.Field(0).Pkg() + } + if fieldPkg == nil { + // TODO(rfindley): improve this very hacky logic. + // + // The importer expects a package to be set for all struct types, even + // those with no fields. A better encoding might be to set NumFields + // before pkg. setPkg panics with a nil package, which may be possible + // to reach with invalid packages (and perhaps valid packages, too?), so + // (arbitrarily) set the localpkg if available. + // + // Alternatively, we may be able to simply guarantee that pkg != nil, by + // reconsidering the encoding of constant values. + if w.p.shallow { + fieldPkg = w.p.localpkg + } else { + panic(internalErrorf("no package to set for empty struct")) + } } + w.pkg(fieldPkg) w.uint64(uint64(n)) + for i := 0; i < n; i++ { f := t.Field(i) + if w.p.shallow { + w.objectPath(f) + } w.pos(f.Pos()) w.string(f.Name()) // unexported fields implicitly qualified by prior setPkg - w.typ(f.Type(), pkg) + w.typ(f.Type(), fieldPkg) w.bool(f.Anonymous()) w.string(t.Tag(i)) // note (or tag) } case *types.Interface: w.startType(interfaceType) - w.setPkg(pkg, true) + w.pkg(pkg) n := t.NumEmbeddeds() w.uint64(uint64(n)) @@ -802,10 +852,16 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { w.typ(ft, tPkg) } + // See comment for struct fields. In shallow mode we change the encoding + // for interface methods that are promoted from other packages. + n = t.NumExplicitMethods() w.uint64(uint64(n)) for i := 0; i < n; i++ { m := t.ExplicitMethod(i) + if w.p.shallow { + w.objectPath(m) + } w.pos(m.Pos()) w.string(m.Name()) sig, _ := m.Type().(*types.Signature) @@ -827,12 +883,61 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { } } -func (w *exportWriter) setPkg(pkg *types.Package, write bool) { - if write { - w.pkg(pkg) +// objectPath writes the package and objectPath to use to look up obj in a +// different package, when encoding in "shallow" mode. +// +// When doing a shallow import, the importer creates only the local package, +// and requests package symbols for dependencies from the client. +// However, certain types defined in the local package may hold objects defined +// (perhaps deeply) within another package. +// +// For example, consider the following: +// +// package a +// func F() chan * map[string] struct { X int } +// +// package b +// import "a" +// var B = a.F() +// +// In this example, the type of b.B holds fields defined in package a. +// In order to have the correct canonical objects for the field defined in the +// type of B, they are encoded as objectPaths and later looked up in the +// importer. The same problem applies to interface methods. +func (w *exportWriter) objectPath(obj types.Object) { + if obj.Pkg() == nil || obj.Pkg() == w.p.localpkg { + // obj.Pkg() may be nil for the builtin error.Error. + // In this case, or if obj is declared in the local package, no need to + // encode. + w.string("") + return } - - w.currPkg = pkg + objectPath, err := w.p.objectpathEncoder().For(obj) + if err != nil { + // Fall back to the empty string, which will cause the importer to create a + // new object, which matches earlier behavior. Creating a new object is + // sufficient for many purposes (such as type checking), but causes certain + // references algorithms to fail (golang/go#60819). However, we didn't + // notice this problem during months of gopls@v0.12.0 testing. + // + // TODO(golang/go#61674): this workaround is insufficient, as in the case + // where the field forwarded from an instantiated type that may not appear + // in the export data of the original package: + // + // // package a + // type A[P any] struct{ F P } + // + // // package b + // type B a.A[int] + // + // We need to update references algorithms not to depend on this + // de-duplication, at which point we may want to simply remove the + // workaround here. + w.string("") + return + } + w.string(string(objectPath)) + w.pkg(obj.Pkg()) } func (w *exportWriter) signature(sig *types.Signature) { @@ -913,6 +1018,17 @@ func (w *exportWriter) value(typ types.Type, v constant.Value) { w.int64(int64(v.Kind())) } + if v.Kind() == constant.Unknown { + // golang/go#60605: treat unknown constant values as if they have invalid type + // + // This loses some fidelity over the package type-checked from source, but that + // is acceptable. + // + // TODO(rfindley): we should switch on the recorded constant kind rather + // than the constant type + return + } + switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { case types.IsBoolean: w.bool(constant.BoolVal(v)) @@ -969,6 +1085,16 @@ func constantToFloat(x constant.Value) *big.Float { return &f } +func valueToRat(x constant.Value) *big.Rat { + // Convert little-endian to big-endian. + // I can't believe this is necessary. + bytes := constant.Bytes(x) + for i := 0; i < len(bytes)/2; i++ { + bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] + } + return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) +} + // mpint exports a multi-precision integer. // // For unsigned types, small values are written out as a single @@ -1178,3 +1304,19 @@ func (q *objQueue) popHead() types.Object { q.head++ return obj } + +// internalError represents an error generated inside this package. +type internalError string + +func (e internalError) Error() string { return "gcimporter: " + string(e) } + +// TODO(adonovan): make this call panic, so that it's symmetric with errorf. +// Otherwise it's easy to forget to do anything with the error. +// +// TODO(adonovan): also, consider switching the names "errorf" and +// "internalErrorf" as the former is used for bugs, whose cause is +// internal inconsistency, whereas the latter is used for ordinary +// situations like bad input, whose cause is external. +func internalErrorf(format string, args ...interface{}) error { + return internalError(fmt.Sprintf(format, args...)) +} diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index 448f903e86a7d..8e64cf644fce2 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -21,6 +21,7 @@ import ( "sort" "strings" + "golang.org/x/tools/go/types/objectpath" "golang.org/x/tools/internal/typeparams" ) @@ -85,7 +86,7 @@ const ( // If the export data version is not recognized or the format is otherwise // compromised, an error is returned. func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) { - pkgs, err := iimportCommon(fset, imports, data, false, path, nil) + pkgs, err := iimportCommon(fset, GetPackagesFromMap(imports), data, false, path, false, nil) if err != nil { return 0, nil, err } @@ -94,10 +95,49 @@ func IImportData(fset *token.FileSet, imports map[string]*types.Package, data [] // IImportBundle imports a set of packages from the serialized package bundle. func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) { - return iimportCommon(fset, imports, data, true, "", nil) + return iimportCommon(fset, GetPackagesFromMap(imports), data, true, "", false, nil) } -func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data []byte, bundle bool, path string, insert InsertType) (pkgs []*types.Package, err error) { +// A GetPackagesFunc function obtains the non-nil symbols for a set of +// packages, creating and recursively importing them as needed. An +// implementation should store each package symbol is in the Pkg +// field of the items array. +// +// Any error causes importing to fail. This can be used to quickly read +// the import manifest of an export data file without fully decoding it. +type GetPackagesFunc = func(items []GetPackagesItem) error + +// A GetPackagesItem is a request from the importer for the package +// symbol of the specified name and path. +type GetPackagesItem struct { + Name, Path string + Pkg *types.Package // to be filled in by GetPackagesFunc call + + // private importer state + pathOffset uint64 + nameIndex map[string]uint64 +} + +// GetPackagesFromMap returns a GetPackagesFunc that retrieves +// packages from the given map of package path to package. +// +// The returned function may mutate m: each requested package that is not +// found is created with types.NewPackage and inserted into m. +func GetPackagesFromMap(m map[string]*types.Package) GetPackagesFunc { + return func(items []GetPackagesItem) error { + for i, item := range items { + pkg, ok := m[item.Path] + if !ok { + pkg = types.NewPackage(item.Path, item.Name) + m[item.Path] = pkg + } + items[i].Pkg = pkg + } + return nil + } +} + +func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, bundle bool, path string, shallow bool, reportf ReportFunc) (pkgs []*types.Package, err error) { const currentVersion = iexportVersionCurrent version := int64(-1) if !debug { @@ -108,7 +148,7 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data } else if version > currentVersion { err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) } else { - err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) + err = fmt.Errorf("internal error while importing %q (%v); please report an issue", path, e) } } }() @@ -117,11 +157,8 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data r := &intReader{bytes.NewReader(data), path} if bundle { - bundleVersion := r.uint64() - switch bundleVersion { - case bundleVersion: - default: - errorf("unknown bundle format version %d", bundleVersion) + if v := r.uint64(); v != bundleVersion { + errorf("unknown bundle format version %d", v) } } @@ -139,7 +176,7 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data sLen := int64(r.uint64()) var fLen int64 var fileOffset []uint64 - if insert != nil { + if shallow { // Shallow mode uses a different position encoding. fLen = int64(r.uint64()) fileOffset = make([]uint64, r.uint64()) @@ -158,7 +195,8 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data p := iimporter{ version: int(version), ipath: path, - insert: insert, + shallow: shallow, + reportf: reportf, stringData: stringData, stringCache: make(map[uint64]string), @@ -185,8 +223,9 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data p.typCache[uint64(i)] = pt } - pkgList := make([]*types.Package, r.uint64()) - for i := range pkgList { + // Gather the relevant packages from the manifest. + items := make([]GetPackagesItem, r.uint64()) + for i := range items { pkgPathOff := r.uint64() pkgPath := p.stringAt(pkgPathOff) pkgName := p.stringAt(r.uint64()) @@ -195,30 +234,42 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data if pkgPath == "" { pkgPath = path } - pkg := imports[pkgPath] - if pkg == nil { - pkg = types.NewPackage(pkgPath, pkgName) - imports[pkgPath] = pkg - } else if pkg.Name() != pkgName { - errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path) - } - if i == 0 && !bundle { - p.localpkg = pkg - } - - p.pkgCache[pkgPathOff] = pkg + items[i].Name = pkgName + items[i].Path = pkgPath + items[i].pathOffset = pkgPathOff // Read index for package. nameIndex := make(map[string]uint64) nSyms := r.uint64() - // In shallow mode we don't expect an index for other packages. - assert(nSyms == 0 || p.localpkg == pkg || p.insert == nil) + // In shallow mode, only the current package (i=0) has an index. + assert(!(shallow && i > 0 && nSyms != 0)) for ; nSyms > 0; nSyms-- { name := p.stringAt(r.uint64()) nameIndex[name] = r.uint64() } - p.pkgIndex[pkg] = nameIndex + items[i].nameIndex = nameIndex + } + + // Request packages all at once from the client, + // enabling a parallel implementation. + if err := getPackages(items); err != nil { + return nil, err // don't wrap this error + } + + // Check the results and complete the index. + pkgList := make([]*types.Package, len(items)) + for i, item := range items { + pkg := item.Pkg + if pkg == nil { + errorf("internal error: getPackages returned nil package for %q", item.Path) + } else if pkg.Path() != item.Path { + errorf("internal error: getPackages returned wrong path %q, want %q", pkg.Path(), item.Path) + } else if pkg.Name() != item.Name { + errorf("internal error: getPackages returned wrong name %s for package %q, want %s", pkg.Name(), item.Path, item.Name) + } + p.pkgCache[item.pathOffset] = pkg + p.pkgIndex[pkg] = item.nameIndex pkgList[i] = pkg } @@ -277,6 +328,13 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data typ.Complete() } + // Workaround for golang/go#61561. See the doc for instanceList for details. + for _, typ := range p.instanceList { + if iface, _ := typ.Underlying().(*types.Interface); iface != nil { + iface.Complete() + } + } + return pkgs, nil } @@ -289,8 +347,8 @@ type iimporter struct { version int ipath string - localpkg *types.Package - insert func(pkg *types.Package, name string) // "shallow" mode only + shallow bool + reportf ReportFunc // if non-nil, used to report bugs stringData []byte stringCache map[uint64]string @@ -307,6 +365,12 @@ type iimporter struct { fake fakeFileSet interfaceList []*types.Interface + // Workaround for the go/types bug golang/go#61561: instances produced during + // instantiation may contain incomplete interfaces. Here we only complete the + // underlying type of the instance, which is the most common case but doesn't + // handle parameterized interface literals defined deeper in the type. + instanceList []types.Type // instances for later completion (see golang/go#61561) + // Arguments for calls to SetConstraint that are deferred due to recursive types later []setConstraintArgs @@ -338,13 +402,9 @@ func (p *iimporter) doDecl(pkg *types.Package, name string) { off, ok := p.pkgIndex[pkg][name] if !ok { - // In "shallow" mode, call back to the application to - // find the object and insert it into the package scope. - if p.insert != nil { - assert(pkg != p.localpkg) - p.insert(pkg, name) // "can't fail" - return - } + // In deep mode, the index should be complete. In shallow + // mode, we should have already recursively loaded necessary + // dependencies so the above Lookup succeeds. errorf("%v.%v not in index", pkg, name) } @@ -711,7 +771,8 @@ func (r *importReader) qualifiedIdent() (*types.Package, string) { } func (r *importReader) pos() token.Pos { - if r.p.insert != nil { // shallow mode + if r.p.shallow { + // precise offsets are encoded only in shallow mode return r.posv2() } if r.p.version >= iexportVersionPosCol { @@ -812,13 +873,28 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { fields := make([]*types.Var, r.uint64()) tags := make([]string, len(fields)) for i := range fields { + var field *types.Var + if r.p.shallow { + field, _ = r.objectPathObject().(*types.Var) + } + fpos := r.pos() fname := r.ident() ftyp := r.typ() emb := r.bool() tag := r.string() - fields[i] = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + // Either this is not a shallow import, the field is local, or the + // encoded objectPath failed to produce an object (a bug). + // + // Even in this last, buggy case, fall back on creating a new field. As + // discussed in iexport.go, this is not correct, but mostly works and is + // preferable to failing (for now at least). + if field == nil { + field = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + } + + fields[i] = field tags[i] = tag } return types.NewStruct(fields, tags) @@ -834,6 +910,11 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { methods := make([]*types.Func, r.uint64()) for i := range methods { + var method *types.Func + if r.p.shallow { + method, _ = r.objectPathObject().(*types.Func) + } + mpos := r.pos() mname := r.ident() @@ -843,9 +924,12 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { if base != nil { recv = types.NewVar(token.NoPos, r.currPkg, "", base) } - msig := r.signature(recv, nil, nil) - methods[i] = types.NewFunc(mpos, r.currPkg, mname, msig) + + if method == nil { + method = types.NewFunc(mpos, r.currPkg, mname, msig) + } + methods[i] = method } typ := newInterface(methods, embeddeds) @@ -883,6 +967,9 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { // we must always use the methods of the base (orig) type. // TODO provide a non-nil *Environment t, _ := typeparams.Instantiate(nil, baseType, targs, false) + + // Workaround for golang/go#61561. See the doc for instanceList for details. + r.p.instanceList = append(r.p.instanceList, t) return t case unionType: @@ -901,6 +988,26 @@ func (r *importReader) kind() itag { return itag(r.uint64()) } +// objectPathObject is the inverse of exportWriter.objectPath. +// +// In shallow mode, certain fields and methods may need to be looked up in an +// imported package. See the doc for exportWriter.objectPath for a full +// explanation. +func (r *importReader) objectPathObject() types.Object { + objPath := objectpath.Path(r.string()) + if objPath == "" { + return nil + } + pkg := r.pkg() + obj, err := objectpath.Object(pkg, objPath) + if err != nil { + if r.p.reportf != nil { + r.p.reportf("failed to find object for objectPath %q: %v", objPath, err) + } + } + return obj +} + func (r *importReader) signature(recv *types.Var, rparams []*typeparams.TypeParam, tparams []*typeparams.TypeParam) *types.Signature { params := r.paramList() results := r.paramList() diff --git a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go index b285a11ce25a6..b977435f626dc 100644 --- a/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go +++ b/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go @@ -10,8 +10,10 @@ package gcimporter import ( + "fmt" "go/token" "go/types" + "sort" "strings" "golang.org/x/tools/internal/pkgbits" @@ -62,6 +64,14 @@ type typeInfo struct { } func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { + if !debug { + defer func() { + if x := recover(); x != nil { + err = fmt.Errorf("internal error in importing %q (%v); please report an issue", path, x) + } + }() + } + s := string(data) s = s[:strings.LastIndex(s, "\n$$\n")] input := pkgbits.NewPkgDecoder(path, s) @@ -121,6 +131,16 @@ func readUnifiedPackage(fset *token.FileSet, ctxt *types.Context, imports map[st iface.Complete() } + // Imports() of pkg are all of the transitive packages that were loaded. + var imps []*types.Package + for _, imp := range pr.pkgs { + if imp != nil && imp != pkg { + imps = append(imps, imp) + } + } + sort.Sort(byPath(imps)) + pkg.SetImports(imps) + pkg.MarkComplete() return pkg } @@ -260,39 +280,9 @@ func (r *reader) doPkg() *types.Package { pkg := types.NewPackage(path, name) r.p.imports[path] = pkg - imports := make([]*types.Package, r.Len()) - for i := range imports { - imports[i] = r.pkg() - } - pkg.SetImports(flattenImports(imports)) - return pkg } -// flattenImports returns the transitive closure of all imported -// packages rooted from pkgs. -func flattenImports(pkgs []*types.Package) []*types.Package { - var res []*types.Package - seen := make(map[*types.Package]struct{}) - for _, pkg := range pkgs { - if _, ok := seen[pkg]; ok { - continue - } - seen[pkg] = struct{}{} - res = append(res, pkg) - - // pkg.Imports() is already flattened. - for _, pkg := range pkg.Imports() { - if _, ok := seen[pkg]; ok { - continue - } - seen[pkg] = struct{}{} - res = append(res, pkg) - } - } - return res -} - // @@@ Types func (r *reader) typ() types.Type { diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/vendor/golang.org/x/tools/internal/gocommand/invoke.go index d50551693f3dc..53cf66da01932 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -8,10 +8,12 @@ package gocommand import ( "bytes" "context" + "errors" "fmt" "io" "log" "os" + "reflect" "regexp" "runtime" "strconv" @@ -22,6 +24,9 @@ import ( exec "golang.org/x/sys/execabs" "golang.org/x/tools/internal/event" + "golang.org/x/tools/internal/event/keys" + "golang.org/x/tools/internal/event/label" + "golang.org/x/tools/internal/event/tag" ) // An Runner will run go command invocations and serialize @@ -51,9 +56,19 @@ func (runner *Runner) initialize() { // 1.14: go: updating go.mod: existing contents have changed since last read var modConcurrencyError = regexp.MustCompile(`go:.*go.mod.*contents have changed`) +// verb is an event label for the go command verb. +var verb = keys.NewString("verb", "go command verb") + +func invLabels(inv Invocation) []label.Label { + return []label.Label{verb.Of(inv.Verb), tag.Directory.Of(inv.WorkingDir)} +} + // Run is a convenience wrapper around RunRaw. // It returns only stdout and a "friendly" error. func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, error) { + ctx, done := event.Start(ctx, "gocommand.Runner.Run", invLabels(inv)...) + defer done() + stdout, _, friendly, _ := runner.RunRaw(ctx, inv) return stdout, friendly } @@ -61,6 +76,9 @@ func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, e // RunPiped runs the invocation serially, always waiting for any concurrent // invocations to complete first. func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) error { + ctx, done := event.Start(ctx, "gocommand.Runner.RunPiped", invLabels(inv)...) + defer done() + _, err := runner.runPiped(ctx, inv, stdout, stderr) return err } @@ -68,6 +86,8 @@ func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stde // RunRaw runs the invocation, serializing requests only if they fight over // go.mod changes. func (runner *Runner) RunRaw(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) { + ctx, done := event.Start(ctx, "gocommand.Runner.RunRaw", invLabels(inv)...) + defer done() // Make sure the runner is always initialized. runner.initialize() @@ -215,6 +235,18 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { cmd := exec.Command("go", goArgs...) cmd.Stdout = stdout cmd.Stderr = stderr + + // cmd.WaitDelay was added only in go1.20 (see #50436). + if waitDelay := reflect.ValueOf(cmd).Elem().FieldByName("WaitDelay"); waitDelay.IsValid() { + // https://go.dev/issue/59541: don't wait forever copying stderr + // after the command has exited. + // After CL 484741 we copy stdout manually, so we we'll stop reading that as + // soon as ctx is done. However, we also don't want to wait around forever + // for stderr. Give a much-longer-than-reasonable delay and then assume that + // something has wedged in the kernel or runtime. + waitDelay.Set(reflect.ValueOf(30 * time.Second)) + } + // On darwin the cwd gets resolved to the real path, which breaks anything that // expects the working directory to keep the original path, including the // go command when dealing with modules. @@ -229,6 +261,7 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { cmd.Env = append(cmd.Env, "PWD="+i.WorkingDir) cmd.Dir = i.WorkingDir } + defer func(start time.Time) { log("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now()) return runCmdContext(ctx, cmd) @@ -242,10 +275,85 @@ var DebugHangingGoCommands = false // runCmdContext is like exec.CommandContext except it sends os.Interrupt // before os.Kill. -func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { - if err := cmd.Start(); err != nil { +func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { + // If cmd.Stdout is not an *os.File, the exec package will create a pipe and + // copy it to the Writer in a goroutine until the process has finished and + // either the pipe reaches EOF or command's WaitDelay expires. + // + // However, the output from 'go list' can be quite large, and we don't want to + // keep reading (and allocating buffers) if we've already decided we don't + // care about the output. We don't want to wait for the process to finish, and + // we don't wait to wait for the WaitDelay to expire either. + // + // Instead, if cmd.Stdout requires a copying goroutine we explicitly replace + // it with a pipe (which is an *os.File), which we can close in order to stop + // copying output as soon as we realize we don't care about it. + var stdoutW *os.File + if cmd.Stdout != nil { + if _, ok := cmd.Stdout.(*os.File); !ok { + var stdoutR *os.File + stdoutR, stdoutW, err = os.Pipe() + if err != nil { + return err + } + prevStdout := cmd.Stdout + cmd.Stdout = stdoutW + + stdoutErr := make(chan error, 1) + go func() { + _, err := io.Copy(prevStdout, stdoutR) + if err != nil { + err = fmt.Errorf("copying stdout: %w", err) + } + stdoutErr <- err + }() + defer func() { + // We started a goroutine to copy a stdout pipe. + // Wait for it to finish, or terminate it if need be. + var err2 error + select { + case err2 = <-stdoutErr: + stdoutR.Close() + case <-ctx.Done(): + stdoutR.Close() + // Per https://pkg.go.dev/os#File.Close, the call to stdoutR.Close + // should cause the Read call in io.Copy to unblock and return + // immediately, but we still need to receive from stdoutErr to confirm + // that it has happened. + <-stdoutErr + err2 = ctx.Err() + } + if err == nil { + err = err2 + } + }() + + // Per https://pkg.go.dev/os/exec#Cmd, “If Stdout and Stderr are the + // same writer, and have a type that can be compared with ==, at most + // one goroutine at a time will call Write.” + // + // Since we're starting a goroutine that writes to cmd.Stdout, we must + // also update cmd.Stderr so that it still holds. + func() { + defer func() { recover() }() + if cmd.Stderr == prevStdout { + cmd.Stderr = cmd.Stdout + } + }() + } + } + + err = cmd.Start() + if stdoutW != nil { + // The child process has inherited the pipe file, + // so close the copy held in this process. + stdoutW.Close() + stdoutW = nil + } + if err != nil { return err } + resChan := make(chan error, 1) go func() { resChan <- cmd.Wait() @@ -253,11 +361,14 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { // If we're interested in debugging hanging Go commands, stop waiting after a // minute and panic with interesting information. - if DebugHangingGoCommands { + debug := DebugHangingGoCommands + if debug { + timer := time.NewTimer(1 * time.Minute) + defer timer.Stop() select { case err := <-resChan: return err - case <-time.After(1 * time.Minute): + case <-timer.C: HandleHangingGoCommand(cmd.Process) case <-ctx.Done(): } @@ -270,30 +381,25 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { } // Cancelled. Interrupt and see if it ends voluntarily. - cmd.Process.Signal(os.Interrupt) - select { - case err := <-resChan: - return err - case <-time.After(time.Second): + if err := cmd.Process.Signal(os.Interrupt); err == nil { + // (We used to wait only 1s but this proved + // fragile on loaded builder machines.) + timer := time.NewTimer(5 * time.Second) + defer timer.Stop() + select { + case err := <-resChan: + return err + case <-timer.C: + } } // Didn't shut down in response to interrupt. Kill it hard. // TODO(rfindley): per advice from bcmills@, it may be better to send SIGQUIT // on certain platforms, such as unix. - if err := cmd.Process.Kill(); err != nil && DebugHangingGoCommands { - // Don't panic here as this reliably fails on windows with EINVAL. + if err := cmd.Process.Kill(); err != nil && !errors.Is(err, os.ErrProcessDone) && debug { log.Printf("error killing the Go command: %v", err) } - // See above: don't wait indefinitely if we're debugging hanging Go commands. - if DebugHangingGoCommands { - select { - case err := <-resChan: - return err - case <-time.After(10 * time.Second): // a shorter wait as resChan should return quickly following Kill - HandleHangingGoCommand(cmd.Process) - } - } return <-resChan } diff --git a/vendor/golang.org/x/tools/internal/gocommand/version.go b/vendor/golang.org/x/tools/internal/gocommand/version.go index 307a76d474ad1..446c5846a60f9 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/version.go +++ b/vendor/golang.org/x/tools/internal/gocommand/version.go @@ -23,21 +23,11 @@ import ( func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) { inv.Verb = "list" inv.Args = []string{"-e", "-f", `{{context.ReleaseTags}}`, `--`, `unsafe`} - inv.Env = append(append([]string{}, inv.Env...), "GO111MODULE=off") - // Unset any unneeded flags, and remove them from BuildFlags, if they're - // present. - inv.ModFile = "" + inv.BuildFlags = nil // This is not a build command. inv.ModFlag = "" - var buildFlags []string - for _, flag := range inv.BuildFlags { - // Flags can be prefixed by one or two dashes. - f := strings.TrimPrefix(strings.TrimPrefix(flag, "-"), "-") - if strings.HasPrefix(f, "mod=") || strings.HasPrefix(f, "modfile=") { - continue - } - buildFlags = append(buildFlags, flag) - } - inv.BuildFlags = buildFlags + inv.ModFile = "" + inv.Env = append(inv.Env[:len(inv.Env):len(inv.Env)], "GO111MODULE=off") + stdoutBytes, err := r.Run(ctx, inv) if err != nil { return 0, err diff --git a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go index 168405322683b..452e342c559cf 100644 --- a/vendor/golang.org/x/tools/internal/gopathwalk/walk.go +++ b/vendor/golang.org/x/tools/internal/gopathwalk/walk.go @@ -9,8 +9,6 @@ package gopathwalk import ( "bufio" "bytes" - "fmt" - "io/ioutil" "log" "os" "path/filepath" @@ -78,7 +76,7 @@ func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) } start := time.Now() if opts.Logf != nil { - opts.Logf("gopathwalk: scanning %s", root.Path) + opts.Logf("scanning %s", root.Path) } w := &walker{ root: root, @@ -88,11 +86,15 @@ func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) } w.init() if err := fastwalk.Walk(root.Path, w.walk); err != nil { - log.Printf("gopathwalk: scanning directory %v: %v", root.Path, err) + logf := opts.Logf + if logf == nil { + logf = log.Printf + } + logf("scanning directory %v: %v", root.Path, err) } if opts.Logf != nil { - opts.Logf("gopathwalk: scanned %s in %v", root.Path, time.Since(start)) + opts.Logf("scanned %s in %v", root.Path, time.Since(start)) } } @@ -135,7 +137,7 @@ func (w *walker) init() { // The provided path is one of the $GOPATH entries with "src" appended. func (w *walker) getIgnoredDirs(path string) []string { file := filepath.Join(path, ".goimportsignore") - slurp, err := ioutil.ReadFile(file) + slurp, err := os.ReadFile(file) if w.opts.Logf != nil { if err != nil { w.opts.Logf("%v", err) @@ -222,7 +224,11 @@ func (w *walker) walk(path string, typ os.FileMode) error { func (w *walker) shouldTraverse(path string) bool { ts, err := os.Stat(path) if err != nil { - fmt.Fprintln(os.Stderr, err) + logf := w.opts.Logf + if logf == nil { + logf = log.Printf + } + logf("%v", err) return false } if !ts.IsDir() { diff --git a/vendor/golang.org/x/tools/internal/imports/fix.go b/vendor/golang.org/x/tools/internal/imports/fix.go index 642a5ac2d7570..d4f1b4e8a0f25 100644 --- a/vendor/golang.org/x/tools/internal/imports/fix.go +++ b/vendor/golang.org/x/tools/internal/imports/fix.go @@ -26,6 +26,7 @@ import ( "unicode/utf8" "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/internal/event" "golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/gopathwalk" ) @@ -414,9 +415,16 @@ func (p *pass) fix() ([]*ImportFix, bool) { }) } } + // Collecting fixes involved map iteration, so sort for stability. See + // golang/go#59976. + sortFixes(fixes) + // collect selected fixes in a separate slice, so that it can be sorted + // separately. Note that these fixes must occur after fixes to existing + // imports. TODO(rfindley): figure out why. + var selectedFixes []*ImportFix for _, imp := range selected { - fixes = append(fixes, &ImportFix{ + selectedFixes = append(selectedFixes, &ImportFix{ StmtInfo: ImportInfo{ Name: p.importSpecName(imp), ImportPath: imp.ImportPath, @@ -425,8 +433,25 @@ func (p *pass) fix() ([]*ImportFix, bool) { FixType: AddImport, }) } + sortFixes(selectedFixes) - return fixes, true + return append(fixes, selectedFixes...), true +} + +func sortFixes(fixes []*ImportFix) { + sort.Slice(fixes, func(i, j int) bool { + fi, fj := fixes[i], fixes[j] + if fi.StmtInfo.ImportPath != fj.StmtInfo.ImportPath { + return fi.StmtInfo.ImportPath < fj.StmtInfo.ImportPath + } + if fi.StmtInfo.Name != fj.StmtInfo.Name { + return fi.StmtInfo.Name < fj.StmtInfo.Name + } + if fi.IdentName != fj.IdentName { + return fi.IdentName < fj.IdentName + } + return fi.FixType < fj.FixType + }) } // importSpecName gets the import name of imp in the import spec. @@ -519,7 +544,7 @@ func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) { var fixImports = fixImportsDefault func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error { - fixes, err := getFixes(fset, f, filename, env) + fixes, err := getFixes(context.Background(), fset, f, filename, env) if err != nil { return err } @@ -529,7 +554,7 @@ func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *P // getFixes gets the import fixes that need to be made to f in order to fix the imports. // It does not modify the ast. -func getFixes(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) { +func getFixes(ctx context.Context, fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) { abs, err := filepath.Abs(filename) if err != nil { return nil, err @@ -583,7 +608,7 @@ func getFixes(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv // Go look for candidates in $GOPATH, etc. We don't necessarily load // the real exports of sibling imports, so keep assuming their contents. - if err := addExternalCandidates(p, p.missingRefs, filename); err != nil { + if err := addExternalCandidates(ctx, p, p.missingRefs, filename); err != nil { return nil, err } @@ -1031,7 +1056,10 @@ type scanCallback struct { exportsLoaded func(pkg *pkg, exports []string) } -func addExternalCandidates(pass *pass, refs references, filename string) error { +func addExternalCandidates(ctx context.Context, pass *pass, refs references, filename string) error { + ctx, done := event.Start(ctx, "imports.addExternalCandidates") + defer done() + var mu sync.Mutex found := make(map[string][]pkgDistance) callback := &scanCallback{ diff --git a/vendor/golang.org/x/tools/internal/imports/imports.go b/vendor/golang.org/x/tools/internal/imports/imports.go index 95a88383a7922..58e637b90f240 100644 --- a/vendor/golang.org/x/tools/internal/imports/imports.go +++ b/vendor/golang.org/x/tools/internal/imports/imports.go @@ -11,6 +11,7 @@ package imports import ( "bufio" "bytes" + "context" "fmt" "go/ast" "go/format" @@ -23,6 +24,7 @@ import ( "strings" "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/internal/event" ) // Options is golang.org/x/tools/imports.Options with extra internal-only options. @@ -66,14 +68,17 @@ func Process(filename string, src []byte, opt *Options) (formatted []byte, err e // // Note that filename's directory influences which imports can be chosen, // so it is important that filename be accurate. -func FixImports(filename string, src []byte, opt *Options) (fixes []*ImportFix, err error) { +func FixImports(ctx context.Context, filename string, src []byte, opt *Options) (fixes []*ImportFix, err error) { + ctx, done := event.Start(ctx, "imports.FixImports") + defer done() + fileSet := token.NewFileSet() file, _, err := parse(fileSet, filename, src, opt) if err != nil { return nil, err } - return getFixes(fileSet, file, filename, opt.Env) + return getFixes(ctx, fileSet, file, filename, opt.Env) } // ApplyFixes applies all of the fixes to the file and formats it. extraMode diff --git a/vendor/golang.org/x/tools/internal/imports/mod.go b/vendor/golang.org/x/tools/internal/imports/mod.go index 7d99d04ca8ad2..977d2389da123 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod.go +++ b/vendor/golang.org/x/tools/internal/imports/mod.go @@ -19,6 +19,7 @@ import ( "strings" "golang.org/x/mod/module" + "golang.org/x/tools/internal/event" "golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/gopathwalk" ) @@ -37,7 +38,7 @@ type ModuleResolver struct { mains []*gocommand.ModuleJSON mainByDir map[string]*gocommand.ModuleJSON modsByModPath []*gocommand.ModuleJSON // All modules, ordered by # of path components in module Path... - modsByDir []*gocommand.ModuleJSON // ...or Dir. + modsByDir []*gocommand.ModuleJSON // ...or number of path components in their Dir. // moduleCacheCache stores information about the module cache. moduleCacheCache *dirInfoCache @@ -123,7 +124,7 @@ func (r *ModuleResolver) init() error { }) sort.Slice(r.modsByDir, func(i, j int) bool { count := func(x int) int { - return strings.Count(r.modsByDir[x].Dir, "/") + return strings.Count(r.modsByDir[x].Dir, string(filepath.Separator)) } return count(j) < count(i) // descending order }) @@ -327,6 +328,10 @@ func (r *ModuleResolver) findModuleByDir(dir string) *gocommand.ModuleJSON { // - in /vendor/ in -mod=vendor mode. // - nested module? Dunno. // Rumor has it that replace targets cannot contain other replace targets. + // + // Note that it is critical here that modsByDir is sorted to have deeper dirs + // first. This ensures that findModuleByDir finds the innermost module. + // See also golang/go#56291. for _, m := range r.modsByDir { if !strings.HasPrefix(dir, m.Dir) { continue @@ -424,6 +429,9 @@ func (r *ModuleResolver) loadPackageNames(importPaths []string, srcDir string) ( } func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error { + ctx, done := event.Start(ctx, "imports.ModuleResolver.scan") + defer done() + if err := r.init(); err != nil { return err } diff --git a/vendor/golang.org/x/tools/internal/imports/mod_cache.go b/vendor/golang.org/x/tools/internal/imports/mod_cache.go index 18dada495ca8a..45690abbb4f12 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod_cache.go +++ b/vendor/golang.org/x/tools/internal/imports/mod_cache.go @@ -12,7 +12,7 @@ import ( "golang.org/x/tools/internal/gopathwalk" ) -// To find packages to import, the resolver needs to know about all of the +// To find packages to import, the resolver needs to know about all of // the packages that could be imported. This includes packages that are // already in modules that are in (1) the current module, (2) replace targets, // and (3) packages in the module cache. Packages in (1) and (2) may change over diff --git a/vendor/golang.org/x/tools/internal/imports/zstdlib.go b/vendor/golang.org/x/tools/internal/imports/zstdlib.go index 31a75949cdc5c..9f992c2bec8e1 100644 --- a/vendor/golang.org/x/tools/internal/imports/zstdlib.go +++ b/vendor/golang.org/x/tools/internal/imports/zstdlib.go @@ -93,6 +93,7 @@ var stdlib = map[string][]string{ "Compare", "Contains", "ContainsAny", + "ContainsFunc", "ContainsRune", "Count", "Cut", @@ -147,6 +148,11 @@ var stdlib = map[string][]string{ "TrimSpace", "TrimSuffix", }, + "cmp": { + "Compare", + "Less", + "Ordered", + }, "compress/bzip2": { "NewReader", "StructuralError", @@ -228,6 +234,7 @@ var stdlib = map[string][]string{ "Ring", }, "context": { + "AfterFunc", "Background", "CancelCauseFunc", "CancelFunc", @@ -239,8 +246,11 @@ var stdlib = map[string][]string{ "WithCancel", "WithCancelCause", "WithDeadline", + "WithDeadlineCause", "WithTimeout", + "WithTimeoutCause", "WithValue", + "WithoutCancel", }, "crypto": { "BLAKE2b_256", @@ -445,6 +455,7 @@ var stdlib = map[string][]string{ "XORBytes", }, "crypto/tls": { + "AlertError", "Certificate", "CertificateRequestInfo", "CertificateVerificationError", @@ -476,6 +487,7 @@ var stdlib = map[string][]string{ "LoadX509KeyPair", "NewLRUClientSessionCache", "NewListener", + "NewResumptionState", "NoClientCert", "PKCS1WithSHA1", "PKCS1WithSHA256", @@ -484,6 +496,27 @@ var stdlib = map[string][]string{ "PSSWithSHA256", "PSSWithSHA384", "PSSWithSHA512", + "ParseSessionState", + "QUICClient", + "QUICConfig", + "QUICConn", + "QUICEncryptionLevel", + "QUICEncryptionLevelApplication", + "QUICEncryptionLevelEarly", + "QUICEncryptionLevelHandshake", + "QUICEncryptionLevelInitial", + "QUICEvent", + "QUICEventKind", + "QUICHandshakeDone", + "QUICNoEvent", + "QUICRejectedEarlyData", + "QUICServer", + "QUICSessionTicketOptions", + "QUICSetReadSecret", + "QUICSetWriteSecret", + "QUICTransportParameters", + "QUICTransportParametersRequired", + "QUICWriteData", "RecordHeaderError", "RenegotiateFreelyAsClient", "RenegotiateNever", @@ -493,6 +526,7 @@ var stdlib = map[string][]string{ "RequireAndVerifyClientCert", "RequireAnyClientCert", "Server", + "SessionState", "SignatureScheme", "TLS_AES_128_GCM_SHA256", "TLS_AES_256_GCM_SHA384", @@ -523,6 +557,7 @@ var stdlib = map[string][]string{ "TLS_RSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_RC4_128_SHA", "VerifyClientCertIfGiven", + "VersionName", "VersionSSL30", "VersionTLS10", "VersionTLS11", @@ -618,6 +653,7 @@ var stdlib = map[string][]string{ "PureEd25519", "RSA", "RevocationList", + "RevocationListEntry", "SHA1WithRSA", "SHA256WithRSA", "SHA256WithRSAPSS", @@ -1002,10 +1038,42 @@ var stdlib = map[string][]string{ "COMPRESS_LOOS", "COMPRESS_LOPROC", "COMPRESS_ZLIB", + "COMPRESS_ZSTD", "Chdr32", "Chdr64", "Class", "CompressionType", + "DF_1_CONFALT", + "DF_1_DIRECT", + "DF_1_DISPRELDNE", + "DF_1_DISPRELPND", + "DF_1_EDITED", + "DF_1_ENDFILTEE", + "DF_1_GLOBAL", + "DF_1_GLOBAUDIT", + "DF_1_GROUP", + "DF_1_IGNMULDEF", + "DF_1_INITFIRST", + "DF_1_INTERPOSE", + "DF_1_KMOD", + "DF_1_LOADFLTR", + "DF_1_NOCOMMON", + "DF_1_NODEFLIB", + "DF_1_NODELETE", + "DF_1_NODIRECT", + "DF_1_NODUMP", + "DF_1_NOHDR", + "DF_1_NOKSYMS", + "DF_1_NOOPEN", + "DF_1_NORELOC", + "DF_1_NOW", + "DF_1_ORIGIN", + "DF_1_PIE", + "DF_1_SINGLETON", + "DF_1_STUB", + "DF_1_SYMINTPOSE", + "DF_1_TRANS", + "DF_1_WEAKFILTER", "DF_BIND_NOW", "DF_ORIGIN", "DF_STATIC_TLS", @@ -1144,6 +1212,7 @@ var stdlib = map[string][]string{ "Dyn32", "Dyn64", "DynFlag", + "DynFlag1", "DynTag", "EI_ABIVERSION", "EI_CLASS", @@ -2111,6 +2180,7 @@ var stdlib = map[string][]string{ "R_PPC64_REL16_LO", "R_PPC64_REL24", "R_PPC64_REL24_NOTOC", + "R_PPC64_REL24_P9NOTOC", "R_PPC64_REL30", "R_PPC64_REL32", "R_PPC64_REL64", @@ -2848,6 +2918,7 @@ var stdlib = map[string][]string{ "MaxVarintLen16", "MaxVarintLen32", "MaxVarintLen64", + "NativeEndian", "PutUvarint", "PutVarint", "Read", @@ -2963,6 +3034,7 @@ var stdlib = map[string][]string{ }, "errors": { "As", + "ErrUnsupported", "Is", "Join", "New", @@ -2989,6 +3061,7 @@ var stdlib = map[string][]string{ "Arg", "Args", "Bool", + "BoolFunc", "BoolVar", "CommandLine", "ContinueOnError", @@ -3119,6 +3192,7 @@ var stdlib = map[string][]string{ "Inspect", "InterfaceType", "IsExported", + "IsGenerated", "KeyValueExpr", "LabeledStmt", "Lbl", @@ -3169,6 +3243,7 @@ var stdlib = map[string][]string{ "ArchChar", "Context", "Default", + "Directive", "FindOnly", "IgnoreVendor", "Import", @@ -3184,6 +3259,7 @@ var stdlib = map[string][]string{ "go/build/constraint": { "AndExpr", "Expr", + "GoVersion", "IsGoBuild", "IsPlusBuild", "NotExpr", @@ -3626,6 +3702,7 @@ var stdlib = map[string][]string{ "ErrBadHTML", "ErrBranchEnd", "ErrEndContext", + "ErrJSTemplate", "ErrNoSuchTemplate", "ErrOutputContext", "ErrPartialCharset", @@ -3870,6 +3947,8 @@ var stdlib = map[string][]string{ "FileInfo", "FileInfoToDirEntry", "FileMode", + "FormatDirEntry", + "FormatFileInfo", "Glob", "GlobFS", "ModeAppend", @@ -3942,6 +4021,78 @@ var stdlib = map[string][]string{ "SetPrefix", "Writer", }, + "log/slog": { + "Any", + "AnyValue", + "Attr", + "Bool", + "BoolValue", + "Debug", + "DebugContext", + "Default", + "Duration", + "DurationValue", + "Error", + "ErrorContext", + "Float64", + "Float64Value", + "Group", + "GroupValue", + "Handler", + "HandlerOptions", + "Info", + "InfoContext", + "Int", + "Int64", + "Int64Value", + "IntValue", + "JSONHandler", + "Kind", + "KindAny", + "KindBool", + "KindDuration", + "KindFloat64", + "KindGroup", + "KindInt64", + "KindLogValuer", + "KindString", + "KindTime", + "KindUint64", + "Level", + "LevelDebug", + "LevelError", + "LevelInfo", + "LevelKey", + "LevelVar", + "LevelWarn", + "Leveler", + "Log", + "LogAttrs", + "LogValuer", + "Logger", + "MessageKey", + "New", + "NewJSONHandler", + "NewLogLogger", + "NewRecord", + "NewTextHandler", + "Record", + "SetDefault", + "Source", + "SourceKey", + "String", + "StringValue", + "TextHandler", + "Time", + "TimeKey", + "TimeValue", + "Uint64", + "Uint64Value", + "Value", + "Warn", + "WarnContext", + "With", + }, "log/syslog": { "Dial", "LOG_ALERT", @@ -3977,6 +4128,13 @@ var stdlib = map[string][]string{ "Priority", "Writer", }, + "maps": { + "Clone", + "Copy", + "DeleteFunc", + "Equal", + "EqualFunc", + }, "math": { "Abs", "Acos", @@ -4371,6 +4529,7 @@ var stdlib = map[string][]string{ "ErrNoLocation", "ErrNotMultipart", "ErrNotSupported", + "ErrSchemeMismatch", "ErrServerClosed", "ErrShortBody", "ErrSkipAltProtocol", @@ -5084,6 +5243,8 @@ var stdlib = map[string][]string{ "NumCPU", "NumCgoCall", "NumGoroutine", + "PanicNilError", + "Pinner", "ReadMemStats", "ReadTrace", "SetBlockProfileRate", @@ -5172,6 +5333,37 @@ var stdlib = map[string][]string{ "Task", "WithRegion", }, + "slices": { + "BinarySearch", + "BinarySearchFunc", + "Clip", + "Clone", + "Compact", + "CompactFunc", + "Compare", + "CompareFunc", + "Contains", + "ContainsFunc", + "Delete", + "DeleteFunc", + "Equal", + "EqualFunc", + "Grow", + "Index", + "IndexFunc", + "Insert", + "IsSorted", + "IsSortedFunc", + "Max", + "MaxFunc", + "Min", + "MinFunc", + "Replace", + "Reverse", + "Sort", + "SortFunc", + "SortStableFunc", + }, "sort": { "Find", "Float64Slice", @@ -5242,6 +5434,7 @@ var stdlib = map[string][]string{ "Compare", "Contains", "ContainsAny", + "ContainsFunc", "ContainsRune", "Count", "Cut", @@ -5299,6 +5492,9 @@ var stdlib = map[string][]string{ "Mutex", "NewCond", "Once", + "OnceFunc", + "OnceValue", + "OnceValues", "Pool", "RWMutex", "WaitGroup", @@ -9135,10 +9331,12 @@ var stdlib = map[string][]string{ "SYS_AIO_CANCEL", "SYS_AIO_ERROR", "SYS_AIO_FSYNC", + "SYS_AIO_MLOCK", "SYS_AIO_READ", "SYS_AIO_RETURN", "SYS_AIO_SUSPEND", "SYS_AIO_SUSPEND_NOCANCEL", + "SYS_AIO_WAITCOMPLETE", "SYS_AIO_WRITE", "SYS_ALARM", "SYS_ARCH_PRCTL", @@ -9368,6 +9566,7 @@ var stdlib = map[string][]string{ "SYS_GET_MEMPOLICY", "SYS_GET_ROBUST_LIST", "SYS_GET_THREAD_AREA", + "SYS_GSSD_SYSCALL", "SYS_GTTY", "SYS_IDENTITYSVC", "SYS_IDLE", @@ -9411,8 +9610,24 @@ var stdlib = map[string][]string{ "SYS_KLDSYM", "SYS_KLDUNLOAD", "SYS_KLDUNLOADF", + "SYS_KMQ_NOTIFY", + "SYS_KMQ_OPEN", + "SYS_KMQ_SETATTR", + "SYS_KMQ_TIMEDRECEIVE", + "SYS_KMQ_TIMEDSEND", + "SYS_KMQ_UNLINK", "SYS_KQUEUE", "SYS_KQUEUE1", + "SYS_KSEM_CLOSE", + "SYS_KSEM_DESTROY", + "SYS_KSEM_GETVALUE", + "SYS_KSEM_INIT", + "SYS_KSEM_OPEN", + "SYS_KSEM_POST", + "SYS_KSEM_TIMEDWAIT", + "SYS_KSEM_TRYWAIT", + "SYS_KSEM_UNLINK", + "SYS_KSEM_WAIT", "SYS_KTIMER_CREATE", "SYS_KTIMER_DELETE", "SYS_KTIMER_GETOVERRUN", @@ -9504,11 +9719,14 @@ var stdlib = map[string][]string{ "SYS_NFSSVC", "SYS_NFSTAT", "SYS_NICE", + "SYS_NLM_SYSCALL", "SYS_NLSTAT", "SYS_NMOUNT", "SYS_NSTAT", "SYS_NTP_ADJTIME", "SYS_NTP_GETTIME", + "SYS_NUMA_GETAFFINITY", + "SYS_NUMA_SETAFFINITY", "SYS_OABI_SYSCALL_BASE", "SYS_OBREAK", "SYS_OLDFSTAT", @@ -9891,6 +10109,7 @@ var stdlib = map[string][]string{ "SYS___ACL_SET_FD", "SYS___ACL_SET_FILE", "SYS___ACL_SET_LINK", + "SYS___CAP_RIGHTS_GET", "SYS___CLONE", "SYS___DISABLE_THREADSIGNAL", "SYS___GETCWD", @@ -10574,6 +10793,7 @@ var stdlib = map[string][]string{ "Short", "T", "TB", + "Testing", "Verbose", }, "testing/fstest": { @@ -10603,6 +10823,9 @@ var stdlib = map[string][]string{ "SetupError", "Value", }, + "testing/slogtest": { + "TestHandler", + }, "text/scanner": { "Char", "Comment", @@ -10826,6 +11049,7 @@ var stdlib = map[string][]string{ "Cs", "Cuneiform", "Cypriot", + "Cypro_Minoan", "Cyrillic", "Dash", "Deprecated", @@ -10889,6 +11113,7 @@ var stdlib = map[string][]string{ "Kaithi", "Kannada", "Katakana", + "Kawi", "Kayah_Li", "Kharoshthi", "Khitan_Small_Script", @@ -10943,6 +11168,7 @@ var stdlib = map[string][]string{ "Myanmar", "N", "Nabataean", + "Nag_Mundari", "Nandinagari", "Nd", "New_Tai_Lue", @@ -10964,6 +11190,7 @@ var stdlib = map[string][]string{ "Old_Sogdian", "Old_South_Arabian", "Old_Turkic", + "Old_Uyghur", "Oriya", "Osage", "Osmanya", @@ -11038,6 +11265,7 @@ var stdlib = map[string][]string{ "Tai_Viet", "Takri", "Tamil", + "Tangsa", "Tangut", "Telugu", "Terminal_Punctuation", @@ -11052,6 +11280,7 @@ var stdlib = map[string][]string{ "ToLower", "ToTitle", "ToUpper", + "Toto", "TurkishCase", "Ugaritic", "Unified_Ideograph", @@ -11061,6 +11290,7 @@ var stdlib = map[string][]string{ "Vai", "Variation_Selector", "Version", + "Vithkuqi", "Wancho", "Warang_Citi", "White_Space", diff --git a/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go b/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go index a3fb2d4f29d0f..7e638ec24fcbb 100644 --- a/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go +++ b/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go @@ -7,7 +7,9 @@ package tokeninternal import ( + "fmt" "go/token" + "sort" "sync" "unsafe" ) @@ -57,3 +59,93 @@ func GetLines(file *token.File) []int { panic("unexpected token.File size") } } + +// AddExistingFiles adds the specified files to the FileSet if they +// are not already present. It panics if any pair of files in the +// resulting FileSet would overlap. +func AddExistingFiles(fset *token.FileSet, files []*token.File) { + // Punch through the FileSet encapsulation. + type tokenFileSet struct { + // This type remained essentially consistent from go1.16 to go1.21. + mutex sync.RWMutex + base int + files []*token.File + _ *token.File // changed to atomic.Pointer[token.File] in go1.19 + } + + // If the size of token.FileSet changes, this will fail to compile. + const delta = int64(unsafe.Sizeof(tokenFileSet{})) - int64(unsafe.Sizeof(token.FileSet{})) + var _ [-delta * delta]int + + type uP = unsafe.Pointer + var ptr *tokenFileSet + *(*uP)(uP(&ptr)) = uP(fset) + ptr.mutex.Lock() + defer ptr.mutex.Unlock() + + // Merge and sort. + newFiles := append(ptr.files, files...) + sort.Slice(newFiles, func(i, j int) bool { + return newFiles[i].Base() < newFiles[j].Base() + }) + + // Reject overlapping files. + // Discard adjacent identical files. + out := newFiles[:0] + for i, file := range newFiles { + if i > 0 { + prev := newFiles[i-1] + if file == prev { + continue + } + if prev.Base()+prev.Size()+1 > file.Base() { + panic(fmt.Sprintf("file %s (%d-%d) overlaps with file %s (%d-%d)", + prev.Name(), prev.Base(), prev.Base()+prev.Size(), + file.Name(), file.Base(), file.Base()+file.Size())) + } + } + out = append(out, file) + } + newFiles = out + + ptr.files = newFiles + + // Advance FileSet.Base(). + if len(newFiles) > 0 { + last := newFiles[len(newFiles)-1] + newBase := last.Base() + last.Size() + 1 + if ptr.base < newBase { + ptr.base = newBase + } + } +} + +// FileSetFor returns a new FileSet containing a sequence of new Files with +// the same base, size, and line as the input files, for use in APIs that +// require a FileSet. +// +// Precondition: the input files must be non-overlapping, and sorted in order +// of their Base. +func FileSetFor(files ...*token.File) *token.FileSet { + fset := token.NewFileSet() + for _, f := range files { + f2 := fset.AddFile(f.Name(), f.Base(), f.Size()) + lines := GetLines(f) + f2.SetLines(lines) + } + return fset +} + +// CloneFileSet creates a new FileSet holding all files in fset. It does not +// create copies of the token.Files in fset: they are added to the resulting +// FileSet unmodified. +func CloneFileSet(fset *token.FileSet) *token.FileSet { + var files []*token.File + fset.Iterate(func(f *token.File) bool { + files = append(files, f) + return true + }) + newFileSet := token.NewFileSet() + AddExistingFiles(newFileSet, files) + return newFileSet +} diff --git a/vendor/golang.org/x/tools/internal/typeparams/common.go b/vendor/golang.org/x/tools/internal/typeparams/common.go index 25a1426d30ec2..d0d0649fe2ac6 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/common.go +++ b/vendor/golang.org/x/tools/internal/typeparams/common.go @@ -23,6 +23,7 @@ package typeparams import ( + "fmt" "go/ast" "go/token" "go/types" @@ -87,7 +88,6 @@ func IsTypeParam(t types.Type) bool { func OriginMethod(fn *types.Func) *types.Func { recv := fn.Type().(*types.Signature).Recv() if recv == nil { - return fn } base := recv.Type() @@ -106,6 +106,31 @@ func OriginMethod(fn *types.Func) *types.Func { } orig := NamedTypeOrigin(named) gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name()) + + // This is a fix for a gopls crash (#60628) due to a go/types bug (#60634). In: + // package p + // type T *int + // func (*T) f() {} + // LookupFieldOrMethod(T, true, p, f)=nil, but NewMethodSet(*T)={(*T).f}. + // Here we make them consistent by force. + // (The go/types bug is general, but this workaround is reached only + // for generic T thanks to the early return above.) + if gfn == nil { + mset := types.NewMethodSet(types.NewPointer(orig)) + for i := 0; i < mset.Len(); i++ { + m := mset.At(i) + if m.Obj().Id() == fn.Id() { + gfn = m.Obj() + break + } + } + } + + // In golang/go#61196, we observe another crash, this time inexplicable. + if gfn == nil { + panic(fmt.Sprintf("missing origin method for %s.%s; named == origin: %t, named.NumMethods(): %d, origin.NumMethods(): %d", named, fn, named == orig, named.NumMethods(), orig.NumMethods())) + } + return gfn.(*types.Func) } diff --git a/vendor/golang.org/x/tools/internal/typeparams/coretype.go b/vendor/golang.org/x/tools/internal/typeparams/coretype.go index 993135ec90e89..71248209ee5e0 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/coretype.go +++ b/vendor/golang.org/x/tools/internal/typeparams/coretype.go @@ -81,13 +81,13 @@ func CoreType(T types.Type) types.Type { // restrictions may be arbitrarily complex. For example, consider the // following: // -// type A interface{ ~string|~[]byte } +// type A interface{ ~string|~[]byte } // -// type B interface{ int|string } +// type B interface{ int|string } // -// type C interface { ~string|~int } +// type C interface { ~string|~int } // -// type T[P interface{ A|B; C }] int +// type T[P interface{ A|B; C }] int // // In this example, the structural type restriction of P is ~string|int: A|B // expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int, diff --git a/vendor/golang.org/x/tools/internal/typeparams/termlist.go b/vendor/golang.org/x/tools/internal/typeparams/termlist.go index 933106a23dd43..cbd12f801314b 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/termlist.go +++ b/vendor/golang.org/x/tools/internal/typeparams/termlist.go @@ -30,7 +30,7 @@ func (xl termlist) String() string { var buf bytes.Buffer for i, x := range xl { if i > 0 { - buf.WriteString(" ∪ ") + buf.WriteString(" | ") } buf.WriteString(x.String()) } diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go index b4788978ff4b6..7ed86e1711b93 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go @@ -129,7 +129,7 @@ func NamedTypeArgs(*types.Named) *TypeList { } // NamedTypeOrigin is the identity method at this Go version. -func NamedTypeOrigin(named *types.Named) types.Type { +func NamedTypeOrigin(named *types.Named) *types.Named { return named } diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go index 114a36b866bc0..cf301af1dbe81 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go @@ -103,7 +103,7 @@ func NamedTypeArgs(named *types.Named) *TypeList { } // NamedTypeOrigin returns named.Orig(). -func NamedTypeOrigin(named *types.Named) types.Type { +func NamedTypeOrigin(named *types.Named) *types.Named { return named.Origin() } diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeterm.go b/vendor/golang.org/x/tools/internal/typeparams/typeterm.go index 7ddee28d98754..7350bb702a173 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeterm.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeterm.go @@ -10,11 +10,10 @@ import "go/types" // A term describes elementary type sets: // -// ∅: (*term)(nil) == ∅ // set of no types (empty set) -// 𝓤: &term{} == 𝓤 // set of all types (𝓤niverse) -// T: &term{false, T} == {T} // set of type T -// ~t: &term{true, t} == {t' | under(t') == t} // set of types with underlying type t -// +// ∅: (*term)(nil) == ∅ // set of no types (empty set) +// 𝓤: &term{} == 𝓤 // set of all types (𝓤niverse) +// T: &term{false, T} == {T} // set of type T +// ~t: &term{true, t} == {t' | under(t') == t} // set of types with underlying type t type term struct { tilde bool // valid if typ != nil typ types.Type diff --git a/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go b/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go new file mode 100644 index 0000000000000..5e96e8955737f --- /dev/null +++ b/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go @@ -0,0 +1,24 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package typesinternal + +import "go/types" + +// This file contains back doors that allow gopls to avoid method sorting when +// using the objectpath package. +// +// This is performance-critical in certain repositories, but changing the +// behavior of the objectpath package is still being discussed in +// golang/go#61443. If we decide to remove the sorting in objectpath we can +// simply delete these back doors. Otherwise, we should add a new API to +// objectpath that allows controlling the sorting. + +// SkipEncoderMethodSorting marks enc (which must be an *objectpath.Encoder) as +// not requiring sorted methods. +var SkipEncoderMethodSorting func(enc interface{}) + +// ObjectpathObject is like objectpath.Object, but allows suppressing method +// sorting. +var ObjectpathObject func(pkg *types.Package, p string, skipMethodSorting bool) (types.Object, error) diff --git a/vendor/google.golang.org/appengine/.travis.yml b/vendor/google.golang.org/appengine/.travis.yml deleted file mode 100644 index 6d03f4d36e8ca..0000000000000 --- a/vendor/google.golang.org/appengine/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: go - -go_import_path: google.golang.org/appengine - -install: - - ./travis_install.sh - -script: - - ./travis_test.sh - -matrix: - include: - - go: 1.9.x - env: GOAPP=true - - go: 1.10.x - env: GOAPP=false - - go: 1.11.x - env: GO111MODULE=on diff --git a/vendor/google.golang.org/appengine/CONTRIBUTING.md b/vendor/google.golang.org/appengine/CONTRIBUTING.md index ffc298520856c..289693613cccd 100644 --- a/vendor/google.golang.org/appengine/CONTRIBUTING.md +++ b/vendor/google.golang.org/appengine/CONTRIBUTING.md @@ -19,14 +19,12 @@ ## Running system tests -Download and install the [Go App Engine SDK](https://cloud.google.com/appengine/docs/go/download). Make sure the `go_appengine` dir is in your `PATH`. - Set the `APPENGINE_DEV_APPSERVER` environment variable to `/path/to/go_appengine/dev_appserver.py`. -Run tests with `goapp test`: +Run tests with `go test`: ``` -goapp test -v google.golang.org/appengine/... +go test -v google.golang.org/appengine/... ``` ## Contributor License Agreements diff --git a/vendor/google.golang.org/appengine/README.md b/vendor/google.golang.org/appengine/README.md index 9fdbacd3c6016..5ccddd9990dd8 100644 --- a/vendor/google.golang.org/appengine/README.md +++ b/vendor/google.golang.org/appengine/README.md @@ -1,6 +1,6 @@ # Go App Engine packages -[![Build Status](https://travis-ci.org/golang/appengine.svg)](https://travis-ci.org/golang/appengine) +[![CI Status](https://github.com/golang/appengine/actions/workflows/ci.yml/badge.svg)](https://github.com/golang/appengine/actions/workflows/ci.yml) This repository supports the Go runtime on *App Engine standard*. It provides APIs for interacting with App Engine services. @@ -51,7 +51,7 @@ code importing `appengine/datastore` will now need to import `google.golang.org/ Most App Engine services are available with exactly the same API. A few APIs were cleaned up, and there are some differences: -* `appengine.Context` has been replaced with the `Context` type from `golang.org/x/net/context`. +* `appengine.Context` has been replaced with the `Context` type from `context`. * Logging methods that were on `appengine.Context` are now functions in `google.golang.org/appengine/log`. * `appengine.Timeout` has been removed. Use `context.WithTimeout` instead. * `appengine.Datacenter` now takes a `context.Context` argument. @@ -72,7 +72,7 @@ A few APIs were cleaned up, and there are some differences: * `appengine/socket` is not required on App Engine flexible environment / Managed VMs. Use the standard `net` package instead. -## Key Encode/Decode compatibiltiy to help with datastore library migrations +## Key Encode/Decode compatibility to help with datastore library migrations Key compatibility updates have been added to help customers transition from google.golang.org/appengine/datastore to cloud.google.com/go/datastore. The `EnableKeyConversion` enables automatic conversion from a key encoded with cloud.google.com/go/datastore to google.golang.org/appengine/datastore key type. diff --git a/vendor/google.golang.org/appengine/appengine.go b/vendor/google.golang.org/appengine/appengine.go index 8c9697674f20d..35ba9c896766d 100644 --- a/vendor/google.golang.org/appengine/appengine.go +++ b/vendor/google.golang.org/appengine/appengine.go @@ -9,10 +9,10 @@ package appengine // import "google.golang.org/appengine" import ( + "context" "net/http" "github.com/golang/protobuf/proto" - "golang.org/x/net/context" "google.golang.org/appengine/internal" ) @@ -35,18 +35,18 @@ import ( // // Main is designed so that the app's main package looks like this: // -// package main +// package main // -// import ( -// "google.golang.org/appengine" +// import ( +// "google.golang.org/appengine" // -// _ "myapp/package0" -// _ "myapp/package1" -// ) +// _ "myapp/package0" +// _ "myapp/package1" +// ) // -// func main() { -// appengine.Main() -// } +// func main() { +// appengine.Main() +// } // // The "myapp/packageX" packages are expected to register HTTP handlers // in their init functions. @@ -54,6 +54,9 @@ func Main() { internal.Main() } +// Middleware wraps an http handler so that it can make GAE API calls +var Middleware func(http.Handler) http.Handler = internal.Middleware + // IsDevAppServer reports whether the App Engine app is running in the // development App Server. func IsDevAppServer() bool { diff --git a/vendor/google.golang.org/appengine/appengine_vm.go b/vendor/google.golang.org/appengine/appengine_vm.go index f4b645aad3bec..6e1d041cd95be 100644 --- a/vendor/google.golang.org/appengine/appengine_vm.go +++ b/vendor/google.golang.org/appengine/appengine_vm.go @@ -2,19 +2,19 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build !appengine // +build !appengine package appengine import ( - "golang.org/x/net/context" - - "google.golang.org/appengine/internal" + "context" ) // BackgroundContext returns a context not associated with a request. -// This should only be used when not servicing a request. -// This only works in App Engine "flexible environment". +// +// Deprecated: App Engine no longer has a special background context. +// Just use context.Background(). func BackgroundContext() context.Context { - return internal.BackgroundContext() + return context.Background() } diff --git a/vendor/google.golang.org/appengine/datastore/datastore.go b/vendor/google.golang.org/appengine/datastore/datastore.go index 576bc50132aaa..790fca771f1ce 100644 --- a/vendor/google.golang.org/appengine/datastore/datastore.go +++ b/vendor/google.golang.org/appengine/datastore/datastore.go @@ -5,12 +5,12 @@ package datastore import ( + "context" "errors" "fmt" "reflect" "github.com/golang/protobuf/proto" - "golang.org/x/net/context" "google.golang.org/appengine" "google.golang.org/appengine/internal" diff --git a/vendor/google.golang.org/appengine/datastore/doc.go b/vendor/google.golang.org/appengine/datastore/doc.go index 85616cf27410d..1ecf51885fa2c 100644 --- a/vendor/google.golang.org/appengine/datastore/doc.go +++ b/vendor/google.golang.org/appengine/datastore/doc.go @@ -5,8 +5,7 @@ /* Package datastore provides a client for App Engine's datastore service. - -Basic Operations +# Basic Operations Entities are the unit of storage and are associated with a key. A key consists of an optional parent key, a string application ID, a string kind @@ -74,8 +73,7 @@ GetMulti, PutMulti and DeleteMulti are batch versions of the Get, Put and Delete functions. They take a []*Key instead of a *Key, and may return an appengine.MultiError when encountering partial failure. - -Properties +# Properties An entity's contents can be represented by a variety of types. These are typically struct pointers, but can also be any type that implements the @@ -137,8 +135,7 @@ Example code: J int `datastore:",noindex" json:"j"` } - -Structured Properties +# Structured Properties If the struct pointed to contains other structs, then the nested or embedded structs are flattened. For example, given these definitions: @@ -179,8 +176,7 @@ equivalent field would instead be: FooDotZ bool `datastore:"Foo.Z"`. If an outer struct is tagged "noindex" then all of its implicit flattened fields are effectively "noindex". - -The PropertyLoadSaver Interface +# The PropertyLoadSaver Interface An entity's contents can also be represented by any type that implements the PropertyLoadSaver interface. This type may be a struct pointer, but it does @@ -230,8 +226,7 @@ Example code: The *PropertyList type implements PropertyLoadSaver, and can therefore hold an arbitrary entity's contents. - -Queries +# Queries Queries retrieve entities based on their properties or key's ancestry. Running a query yields an iterator of results: either keys or (key, entity) pairs. @@ -284,8 +279,7 @@ Example code: io.Copy(w, b) } - -Transactions +# Transactions RunInTransaction runs a function in a transaction. @@ -323,8 +317,7 @@ Example code: fmt.Fprintf(w, "Count=%d", count) } - -Metadata +# Metadata The datastore package provides access to some of App Engine's datastore metadata. This metadata includes information about the entity groups, diff --git a/vendor/google.golang.org/appengine/datastore/key.go b/vendor/google.golang.org/appengine/datastore/key.go index fd598dc9657f0..e312df519db5b 100644 --- a/vendor/google.golang.org/appengine/datastore/key.go +++ b/vendor/google.golang.org/appengine/datastore/key.go @@ -6,6 +6,7 @@ package datastore import ( "bytes" + "context" "encoding/base64" "encoding/gob" "errors" @@ -14,7 +15,6 @@ import ( "strings" "github.com/golang/protobuf/proto" - "golang.org/x/net/context" "google.golang.org/appengine/internal" pb "google.golang.org/appengine/internal/datastore" diff --git a/vendor/google.golang.org/appengine/datastore/keycompat.go b/vendor/google.golang.org/appengine/datastore/keycompat.go index 371a64eeefe87..e852f29cf7b75 100644 --- a/vendor/google.golang.org/appengine/datastore/keycompat.go +++ b/vendor/google.golang.org/appengine/datastore/keycompat.go @@ -5,10 +5,9 @@ package datastore import ( + "context" "sync" - "golang.org/x/net/context" - "google.golang.org/appengine/datastore/internal/cloudkey" "google.golang.org/appengine/internal" ) diff --git a/vendor/google.golang.org/appengine/datastore/metadata.go b/vendor/google.golang.org/appengine/datastore/metadata.go index 6acacc3db9aa0..e1b2d2259bd81 100644 --- a/vendor/google.golang.org/appengine/datastore/metadata.go +++ b/vendor/google.golang.org/appengine/datastore/metadata.go @@ -4,7 +4,7 @@ package datastore -import "golang.org/x/net/context" +import "context" // Datastore kinds for the metadata entities. const ( @@ -50,13 +50,14 @@ func keyNames(keys []*Key) []string { // The properties are returned as a map of property names to a slice of the // representation types. The representation types for the supported Go property // types are: -// "INT64": signed integers and time.Time -// "DOUBLE": float32 and float64 -// "BOOLEAN": bool -// "STRING": string, []byte and ByteString -// "POINT": appengine.GeoPoint -// "REFERENCE": *Key -// "USER": (not used in the Go runtime) +// +// "INT64": signed integers and time.Time +// "DOUBLE": float32 and float64 +// "BOOLEAN": bool +// "STRING": string, []byte and ByteString +// "POINT": appengine.GeoPoint +// "REFERENCE": *Key +// "USER": (not used in the Go runtime) func KindProperties(ctx context.Context, kind string) (map[string][]string, error) { // TODO(djd): Support range queries. kindKey := NewKey(ctx, kindKind, kind, 0, nil) diff --git a/vendor/google.golang.org/appengine/datastore/query.go b/vendor/google.golang.org/appengine/datastore/query.go index 4124534b22f3a..b1b80bf7b6c11 100644 --- a/vendor/google.golang.org/appengine/datastore/query.go +++ b/vendor/google.golang.org/appengine/datastore/query.go @@ -5,6 +5,7 @@ package datastore import ( + "context" "encoding/base64" "errors" "fmt" @@ -13,7 +14,6 @@ import ( "strings" "github.com/golang/protobuf/proto" - "golang.org/x/net/context" "google.golang.org/appengine/internal" pb "google.golang.org/appengine/internal/datastore" @@ -476,7 +476,7 @@ func callNext(c context.Context, res *pb.QueryResult, offset, count int32) error // The keys returned by GetAll will be in a 1-1 correspondence with the entities // added to dst. // -// If q is a ``keys-only'' query, GetAll ignores dst and only returns the keys. +// If q is a “keys-only” query, GetAll ignores dst and only returns the keys. // // The running time and number of API calls made by GetAll scale linearly with // the sum of the query's offset and limit. Unless the result count is @@ -754,7 +754,7 @@ func (c Cursor) String() string { return strings.TrimRight(base64.URLEncoding.EncodeToString(b), "=") } -// Decode decodes a cursor from its base-64 string representation. +// DecodeCursor decodes a cursor from its base-64 string representation. func DecodeCursor(s string) (Cursor, error) { if s == "" { return Cursor{&zeroCC}, nil diff --git a/vendor/google.golang.org/appengine/datastore/transaction.go b/vendor/google.golang.org/appengine/datastore/transaction.go index 2ae8428f856ab..06deeb43e774f 100644 --- a/vendor/google.golang.org/appengine/datastore/transaction.go +++ b/vendor/google.golang.org/appengine/datastore/transaction.go @@ -5,10 +5,9 @@ package datastore import ( + "context" "errors" - "golang.org/x/net/context" - "google.golang.org/appengine/internal" pb "google.golang.org/appengine/internal/datastore" ) diff --git a/vendor/google.golang.org/appengine/identity.go b/vendor/google.golang.org/appengine/identity.go index b8dcf8f361989..1202fc1a5317c 100644 --- a/vendor/google.golang.org/appengine/identity.go +++ b/vendor/google.golang.org/appengine/identity.go @@ -5,10 +5,9 @@ package appengine import ( + "context" "time" - "golang.org/x/net/context" - "google.golang.org/appengine/internal" pb "google.golang.org/appengine/internal/app_identity" modpb "google.golang.org/appengine/internal/modules" diff --git a/vendor/google.golang.org/appengine/internal/api.go b/vendor/google.golang.org/appengine/internal/api.go index 721053c20a1b1..0569f5dd43e49 100644 --- a/vendor/google.golang.org/appengine/internal/api.go +++ b/vendor/google.golang.org/appengine/internal/api.go @@ -2,12 +2,14 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build !appengine // +build !appengine package internal import ( "bytes" + "context" "errors" "fmt" "io/ioutil" @@ -24,7 +26,6 @@ import ( "time" "github.com/golang/protobuf/proto" - netcontext "golang.org/x/net/context" basepb "google.golang.org/appengine/internal/base" logpb "google.golang.org/appengine/internal/log" @@ -32,8 +33,7 @@ import ( ) const ( - apiPath = "/rpc_http" - defaultTicketSuffix = "/default.20150612t184001.0" + apiPath = "/rpc_http" ) var ( @@ -65,21 +65,22 @@ var ( IdleConnTimeout: 90 * time.Second, }, } - - defaultTicketOnce sync.Once - defaultTicket string - backgroundContextOnce sync.Once - backgroundContext netcontext.Context ) -func apiURL() *url.URL { +func apiURL(ctx context.Context) *url.URL { host, port := "appengine.googleapis.internal", "10001" if h := os.Getenv("API_HOST"); h != "" { host = h } + if hostOverride := ctx.Value(apiHostOverrideKey); hostOverride != nil { + host = hostOverride.(string) + } if p := os.Getenv("API_PORT"); p != "" { port = p } + if portOverride := ctx.Value(apiPortOverrideKey); portOverride != nil { + port = portOverride.(string) + } return &url.URL{ Scheme: "http", Host: host + ":" + port, @@ -87,82 +88,97 @@ func apiURL() *url.URL { } } -func handleHTTP(w http.ResponseWriter, r *http.Request) { - c := &context{ - req: r, - outHeader: w.Header(), - apiURL: apiURL(), - } - r = r.WithContext(withContext(r.Context(), c)) - c.req = r - - stopFlushing := make(chan int) +// Middleware wraps an http handler so that it can make GAE API calls +func Middleware(next http.Handler) http.Handler { + return handleHTTPMiddleware(executeRequestSafelyMiddleware(next)) +} - // Patch up RemoteAddr so it looks reasonable. - if addr := r.Header.Get(userIPHeader); addr != "" { - r.RemoteAddr = addr - } else if addr = r.Header.Get(remoteAddrHeader); addr != "" { - r.RemoteAddr = addr - } else { - // Should not normally reach here, but pick a sensible default anyway. - r.RemoteAddr = "127.0.0.1" - } - // The address in the headers will most likely be of these forms: - // 123.123.123.123 - // 2001:db8::1 - // net/http.Request.RemoteAddr is specified to be in "IP:port" form. - if _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil { - // Assume the remote address is only a host; add a default port. - r.RemoteAddr = net.JoinHostPort(r.RemoteAddr, "80") - } +func handleHTTPMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + c := &aeContext{ + req: r, + outHeader: w.Header(), + } + r = r.WithContext(withContext(r.Context(), c)) + c.req = r + + stopFlushing := make(chan int) + + // Patch up RemoteAddr so it looks reasonable. + if addr := r.Header.Get(userIPHeader); addr != "" { + r.RemoteAddr = addr + } else if addr = r.Header.Get(remoteAddrHeader); addr != "" { + r.RemoteAddr = addr + } else { + // Should not normally reach here, but pick a sensible default anyway. + r.RemoteAddr = "127.0.0.1" + } + // The address in the headers will most likely be of these forms: + // 123.123.123.123 + // 2001:db8::1 + // net/http.Request.RemoteAddr is specified to be in "IP:port" form. + if _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil { + // Assume the remote address is only a host; add a default port. + r.RemoteAddr = net.JoinHostPort(r.RemoteAddr, "80") + } - // Start goroutine responsible for flushing app logs. - // This is done after adding c to ctx.m (and stopped before removing it) - // because flushing logs requires making an API call. - go c.logFlusher(stopFlushing) + if logToLogservice() { + // Start goroutine responsible for flushing app logs. + // This is done after adding c to ctx.m (and stopped before removing it) + // because flushing logs requires making an API call. + go c.logFlusher(stopFlushing) + } - executeRequestSafely(c, r) - c.outHeader = nil // make sure header changes aren't respected any more + next.ServeHTTP(c, r) + c.outHeader = nil // make sure header changes aren't respected any more - stopFlushing <- 1 // any logging beyond this point will be dropped + flushed := make(chan struct{}) + if logToLogservice() { + stopFlushing <- 1 // any logging beyond this point will be dropped - // Flush any pending logs asynchronously. - c.pendingLogs.Lock() - flushes := c.pendingLogs.flushes - if len(c.pendingLogs.lines) > 0 { - flushes++ - } - c.pendingLogs.Unlock() - flushed := make(chan struct{}) - go func() { - defer close(flushed) - // Force a log flush, because with very short requests we - // may not ever flush logs. - c.flushLog(true) - }() - w.Header().Set(logFlushHeader, strconv.Itoa(flushes)) + // Flush any pending logs asynchronously. + c.pendingLogs.Lock() + flushes := c.pendingLogs.flushes + if len(c.pendingLogs.lines) > 0 { + flushes++ + } + c.pendingLogs.Unlock() + go func() { + defer close(flushed) + // Force a log flush, because with very short requests we + // may not ever flush logs. + c.flushLog(true) + }() + w.Header().Set(logFlushHeader, strconv.Itoa(flushes)) + } - // Avoid nil Write call if c.Write is never called. - if c.outCode != 0 { - w.WriteHeader(c.outCode) - } - if c.outBody != nil { - w.Write(c.outBody) - } - // Wait for the last flush to complete before returning, - // otherwise the security ticket will not be valid. - <-flushed + // Avoid nil Write call if c.Write is never called. + if c.outCode != 0 { + w.WriteHeader(c.outCode) + } + if c.outBody != nil { + w.Write(c.outBody) + } + if logToLogservice() { + // Wait for the last flush to complete before returning, + // otherwise the security ticket will not be valid. + <-flushed + } + }) } -func executeRequestSafely(c *context, r *http.Request) { - defer func() { - if x := recover(); x != nil { - logf(c, 4, "%s", renderPanic(x)) // 4 == critical - c.outCode = 500 - } - }() +func executeRequestSafelyMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer func() { + if x := recover(); x != nil { + c := w.(*aeContext) + logf(c, 4, "%s", renderPanic(x)) // 4 == critical + c.outCode = 500 + } + }() - http.DefaultServeMux.ServeHTTP(c, r) + next.ServeHTTP(w, r) + }) } func renderPanic(x interface{}) string { @@ -204,9 +220,9 @@ func renderPanic(x interface{}) string { return string(buf) } -// context represents the context of an in-flight HTTP request. +// aeContext represents the aeContext of an in-flight HTTP request. // It implements the appengine.Context and http.ResponseWriter interfaces. -type context struct { +type aeContext struct { req *http.Request outCode int @@ -218,8 +234,6 @@ type context struct { lines []*logpb.UserAppLogLine flushes int } - - apiURL *url.URL } var contextKey = "holds a *context" @@ -227,8 +241,8 @@ var contextKey = "holds a *context" // jointContext joins two contexts in a superficial way. // It takes values and timeouts from a base context, and only values from another context. type jointContext struct { - base netcontext.Context - valuesOnly netcontext.Context + base context.Context + valuesOnly context.Context } func (c jointContext) Deadline() (time.Time, bool) { @@ -252,94 +266,54 @@ func (c jointContext) Value(key interface{}) interface{} { // fromContext returns the App Engine context or nil if ctx is not // derived from an App Engine context. -func fromContext(ctx netcontext.Context) *context { - c, _ := ctx.Value(&contextKey).(*context) +func fromContext(ctx context.Context) *aeContext { + c, _ := ctx.Value(&contextKey).(*aeContext) return c } -func withContext(parent netcontext.Context, c *context) netcontext.Context { - ctx := netcontext.WithValue(parent, &contextKey, c) +func withContext(parent context.Context, c *aeContext) context.Context { + ctx := context.WithValue(parent, &contextKey, c) if ns := c.req.Header.Get(curNamespaceHeader); ns != "" { ctx = withNamespace(ctx, ns) } return ctx } -func toContext(c *context) netcontext.Context { - return withContext(netcontext.Background(), c) +func toContext(c *aeContext) context.Context { + return withContext(context.Background(), c) } -func IncomingHeaders(ctx netcontext.Context) http.Header { +func IncomingHeaders(ctx context.Context) http.Header { if c := fromContext(ctx); c != nil { return c.req.Header } return nil } -func ReqContext(req *http.Request) netcontext.Context { +func ReqContext(req *http.Request) context.Context { return req.Context() } -func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context { +func WithContext(parent context.Context, req *http.Request) context.Context { return jointContext{ base: parent, valuesOnly: req.Context(), } } -// DefaultTicket returns a ticket used for background context or dev_appserver. -func DefaultTicket() string { - defaultTicketOnce.Do(func() { - if IsDevAppServer() { - defaultTicket = "testapp" + defaultTicketSuffix - return - } - appID := partitionlessAppID() - escAppID := strings.Replace(strings.Replace(appID, ":", "_", -1), ".", "_", -1) - majVersion := VersionID(nil) - if i := strings.Index(majVersion, "."); i > 0 { - majVersion = majVersion[:i] - } - defaultTicket = fmt.Sprintf("%s/%s.%s.%s", escAppID, ModuleName(nil), majVersion, InstanceID()) - }) - return defaultTicket -} - -func BackgroundContext() netcontext.Context { - backgroundContextOnce.Do(func() { - // Compute background security ticket. - ticket := DefaultTicket() - - c := &context{ - req: &http.Request{ - Header: http.Header{ - ticketHeader: []string{ticket}, - }, - }, - apiURL: apiURL(), - } - backgroundContext = toContext(c) - - // TODO(dsymonds): Wire up the shutdown handler to do a final flush. - go c.logFlusher(make(chan int)) - }) - - return backgroundContext -} - // RegisterTestRequest registers the HTTP request req for testing, such that -// any API calls are sent to the provided URL. It returns a closure to delete -// the registration. +// any API calls are sent to the provided URL. // It should only be used by aetest package. -func RegisterTestRequest(req *http.Request, apiURL *url.URL, decorate func(netcontext.Context) netcontext.Context) (*http.Request, func()) { - c := &context{ - req: req, - apiURL: apiURL, - } - ctx := withContext(decorate(req.Context()), c) - req = req.WithContext(ctx) - c.req = req - return req, func() {} +func RegisterTestRequest(req *http.Request, apiURL *url.URL, appID string) *http.Request { + ctx := req.Context() + ctx = withAPIHostOverride(ctx, apiURL.Hostname()) + ctx = withAPIPortOverride(ctx, apiURL.Port()) + ctx = WithAppIDOverride(ctx, appID) + + // use the unregistered request as a placeholder so that withContext can read the headers + c := &aeContext{req: req} + c.req = req.WithContext(withContext(ctx, c)) + return c.req } var errTimeout = &CallError{ @@ -348,7 +322,7 @@ var errTimeout = &CallError{ Timeout: true, } -func (c *context) Header() http.Header { return c.outHeader } +func (c *aeContext) Header() http.Header { return c.outHeader } // Copied from $GOROOT/src/pkg/net/http/transfer.go. Some response status // codes do not permit a response body (nor response entity headers such as @@ -365,7 +339,7 @@ func bodyAllowedForStatus(status int) bool { return true } -func (c *context) Write(b []byte) (int, error) { +func (c *aeContext) Write(b []byte) (int, error) { if c.outCode == 0 { c.WriteHeader(http.StatusOK) } @@ -376,7 +350,7 @@ func (c *context) Write(b []byte) (int, error) { return len(b), nil } -func (c *context) WriteHeader(code int) { +func (c *aeContext) WriteHeader(code int) { if c.outCode != 0 { logf(c, 3, "WriteHeader called multiple times on request.") // error level return @@ -384,10 +358,11 @@ func (c *context) WriteHeader(code int) { c.outCode = code } -func (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) { +func post(ctx context.Context, body []byte, timeout time.Duration) (b []byte, err error) { + apiURL := apiURL(ctx) hreq := &http.Request{ Method: "POST", - URL: c.apiURL, + URL: apiURL, Header: http.Header{ apiEndpointHeader: apiEndpointHeaderValue, apiMethodHeader: apiMethodHeaderValue, @@ -396,13 +371,16 @@ func (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) }, Body: ioutil.NopCloser(bytes.NewReader(body)), ContentLength: int64(len(body)), - Host: c.apiURL.Host, - } - if info := c.req.Header.Get(dapperHeader); info != "" { - hreq.Header.Set(dapperHeader, info) + Host: apiURL.Host, } - if info := c.req.Header.Get(traceHeader); info != "" { - hreq.Header.Set(traceHeader, info) + c := fromContext(ctx) + if c != nil { + if info := c.req.Header.Get(dapperHeader); info != "" { + hreq.Header.Set(dapperHeader, info) + } + if info := c.req.Header.Get(traceHeader); info != "" { + hreq.Header.Set(traceHeader, info) + } } tr := apiHTTPClient.Transport.(*http.Transport) @@ -444,7 +422,7 @@ func (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) return hrespBody, nil } -func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error { +func Call(ctx context.Context, service, method string, in, out proto.Message) error { if ns := NamespaceFromContext(ctx); ns != "" { if fn, ok := NamespaceMods[service]; ok { fn(in, ns) @@ -463,15 +441,11 @@ func Call(ctx netcontext.Context, service, method string, in, out proto.Message) } c := fromContext(ctx) - if c == nil { - // Give a good error message rather than a panic lower down. - return errNotAppEngineContext - } // Apply transaction modifications if we're in a transaction. if t := transactionFromContext(ctx); t != nil { if t.finished { - return errors.New("transaction context has expired") + return errors.New("transaction aeContext has expired") } applyTransaction(in, &t.transaction) } @@ -487,20 +461,13 @@ func Call(ctx netcontext.Context, service, method string, in, out proto.Message) return err } - ticket := c.req.Header.Get(ticketHeader) - // Use a test ticket under test environment. - if ticket == "" { - if appid := ctx.Value(&appIDOverrideKey); appid != nil { - ticket = appid.(string) + defaultTicketSuffix + ticket := "" + if c != nil { + ticket = c.req.Header.Get(ticketHeader) + if dri := c.req.Header.Get(devRequestIdHeader); IsDevAppServer() && dri != "" { + ticket = dri } } - // Fall back to use background ticket when the request ticket is not available in Flex or dev_appserver. - if ticket == "" { - ticket = DefaultTicket() - } - if dri := c.req.Header.Get(devRequestIdHeader); IsDevAppServer() && dri != "" { - ticket = dri - } req := &remotepb.Request{ ServiceName: &service, Method: &method, @@ -512,7 +479,7 @@ func Call(ctx netcontext.Context, service, method string, in, out proto.Message) return err } - hrespBody, err := c.post(hreqBody, timeout) + hrespBody, err := post(ctx, hreqBody, timeout) if err != nil { return err } @@ -549,11 +516,11 @@ func Call(ctx netcontext.Context, service, method string, in, out proto.Message) return proto.Unmarshal(res.Response, out) } -func (c *context) Request() *http.Request { +func (c *aeContext) Request() *http.Request { return c.req } -func (c *context) addLogLine(ll *logpb.UserAppLogLine) { +func (c *aeContext) addLogLine(ll *logpb.UserAppLogLine) { // Truncate long log lines. // TODO(dsymonds): Check if this is still necessary. const lim = 8 << 10 @@ -575,18 +542,20 @@ var logLevelName = map[int64]string{ 4: "CRITICAL", } -func logf(c *context, level int64, format string, args ...interface{}) { +func logf(c *aeContext, level int64, format string, args ...interface{}) { if c == nil { - panic("not an App Engine context") + panic("not an App Engine aeContext") } s := fmt.Sprintf(format, args...) s = strings.TrimRight(s, "\n") // Remove any trailing newline characters. - c.addLogLine(&logpb.UserAppLogLine{ - TimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3), - Level: &level, - Message: &s, - }) - // Only duplicate log to stderr if not running on App Engine second generation + if logToLogservice() { + c.addLogLine(&logpb.UserAppLogLine{ + TimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3), + Level: &level, + Message: &s, + }) + } + // Log to stdout if not deployed if !IsSecondGen() { log.Print(logLevelName[level] + ": " + s) } @@ -594,7 +563,7 @@ func logf(c *context, level int64, format string, args ...interface{}) { // flushLog attempts to flush any pending logs to the appserver. // It should not be called concurrently. -func (c *context) flushLog(force bool) (flushed bool) { +func (c *aeContext) flushLog(force bool) (flushed bool) { c.pendingLogs.Lock() // Grab up to 30 MB. We can get away with up to 32 MB, but let's be cautious. n, rem := 0, 30<<20 @@ -655,7 +624,7 @@ const ( forceFlushInterval = 60 * time.Second ) -func (c *context) logFlusher(stop <-chan int) { +func (c *aeContext) logFlusher(stop <-chan int) { lastFlush := time.Now() tick := time.NewTicker(flushInterval) for { @@ -673,6 +642,12 @@ func (c *context) logFlusher(stop <-chan int) { } } -func ContextForTesting(req *http.Request) netcontext.Context { - return toContext(&context{req: req}) +func ContextForTesting(req *http.Request) context.Context { + return toContext(&aeContext{req: req}) +} + +func logToLogservice() bool { + // TODO: replace logservice with json structured logs to $LOG_DIR/app.log.json + // where $LOG_DIR is /var/log in prod and some tmpdir in dev + return os.Getenv("LOG_TO_LOGSERVICE") != "0" } diff --git a/vendor/google.golang.org/appengine/internal/api_classic.go b/vendor/google.golang.org/appengine/internal/api_classic.go index f0f40b2e35c2c..87c33c798e879 100644 --- a/vendor/google.golang.org/appengine/internal/api_classic.go +++ b/vendor/google.golang.org/appengine/internal/api_classic.go @@ -2,11 +2,13 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build appengine // +build appengine package internal import ( + "context" "errors" "fmt" "net/http" @@ -17,20 +19,19 @@ import ( basepb "appengine_internal/base" "github.com/golang/protobuf/proto" - netcontext "golang.org/x/net/context" ) var contextKey = "holds an appengine.Context" // fromContext returns the App Engine context or nil if ctx is not // derived from an App Engine context. -func fromContext(ctx netcontext.Context) appengine.Context { +func fromContext(ctx context.Context) appengine.Context { c, _ := ctx.Value(&contextKey).(appengine.Context) return c } // This is only for classic App Engine adapters. -func ClassicContextFromContext(ctx netcontext.Context) (appengine.Context, error) { +func ClassicContextFromContext(ctx context.Context) (appengine.Context, error) { c := fromContext(ctx) if c == nil { return nil, errNotAppEngineContext @@ -38,8 +39,8 @@ func ClassicContextFromContext(ctx netcontext.Context) (appengine.Context, error return c, nil } -func withContext(parent netcontext.Context, c appengine.Context) netcontext.Context { - ctx := netcontext.WithValue(parent, &contextKey, c) +func withContext(parent context.Context, c appengine.Context) context.Context { + ctx := context.WithValue(parent, &contextKey, c) s := &basepb.StringProto{} c.Call("__go__", "GetNamespace", &basepb.VoidProto{}, s, nil) @@ -50,7 +51,7 @@ func withContext(parent netcontext.Context, c appengine.Context) netcontext.Cont return ctx } -func IncomingHeaders(ctx netcontext.Context) http.Header { +func IncomingHeaders(ctx context.Context) http.Header { if c := fromContext(ctx); c != nil { if req, ok := c.Request().(*http.Request); ok { return req.Header @@ -59,11 +60,11 @@ func IncomingHeaders(ctx netcontext.Context) http.Header { return nil } -func ReqContext(req *http.Request) netcontext.Context { - return WithContext(netcontext.Background(), req) +func ReqContext(req *http.Request) context.Context { + return WithContext(context.Background(), req) } -func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context { +func WithContext(parent context.Context, req *http.Request) context.Context { c := appengine.NewContext(req) return withContext(parent, c) } @@ -83,11 +84,11 @@ func (t *testingContext) Call(service, method string, _, _ appengine_internal.Pr } func (t *testingContext) Request() interface{} { return t.req } -func ContextForTesting(req *http.Request) netcontext.Context { - return withContext(netcontext.Background(), &testingContext{req: req}) +func ContextForTesting(req *http.Request) context.Context { + return withContext(context.Background(), &testingContext{req: req}) } -func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error { +func Call(ctx context.Context, service, method string, in, out proto.Message) error { if ns := NamespaceFromContext(ctx); ns != "" { if fn, ok := NamespaceMods[service]; ok { fn(in, ns) @@ -144,8 +145,8 @@ func Call(ctx netcontext.Context, service, method string, in, out proto.Message) return err } -func handleHTTP(w http.ResponseWriter, r *http.Request) { - panic("handleHTTP called; this should be impossible") +func Middleware(next http.Handler) http.Handler { + panic("Middleware called; this should be impossible") } func logf(c appengine.Context, level int64, format string, args ...interface{}) { diff --git a/vendor/google.golang.org/appengine/internal/api_common.go b/vendor/google.golang.org/appengine/internal/api_common.go index e0c0b214b7242..5b95c13d92661 100644 --- a/vendor/google.golang.org/appengine/internal/api_common.go +++ b/vendor/google.golang.org/appengine/internal/api_common.go @@ -5,20 +5,26 @@ package internal import ( + "context" "errors" "os" "github.com/golang/protobuf/proto" - netcontext "golang.org/x/net/context" ) +type ctxKey string + +func (c ctxKey) String() string { + return "appengine context key: " + string(c) +} + var errNotAppEngineContext = errors.New("not an App Engine context") -type CallOverrideFunc func(ctx netcontext.Context, service, method string, in, out proto.Message) error +type CallOverrideFunc func(ctx context.Context, service, method string, in, out proto.Message) error var callOverrideKey = "holds []CallOverrideFunc" -func WithCallOverride(ctx netcontext.Context, f CallOverrideFunc) netcontext.Context { +func WithCallOverride(ctx context.Context, f CallOverrideFunc) context.Context { // We avoid appending to any existing call override // so we don't risk overwriting a popped stack below. var cofs []CallOverrideFunc @@ -26,10 +32,10 @@ func WithCallOverride(ctx netcontext.Context, f CallOverrideFunc) netcontext.Con cofs = append(cofs, uf...) } cofs = append(cofs, f) - return netcontext.WithValue(ctx, &callOverrideKey, cofs) + return context.WithValue(ctx, &callOverrideKey, cofs) } -func callOverrideFromContext(ctx netcontext.Context) (CallOverrideFunc, netcontext.Context, bool) { +func callOverrideFromContext(ctx context.Context) (CallOverrideFunc, context.Context, bool) { cofs, _ := ctx.Value(&callOverrideKey).([]CallOverrideFunc) if len(cofs) == 0 { return nil, nil, false @@ -37,7 +43,7 @@ func callOverrideFromContext(ctx netcontext.Context) (CallOverrideFunc, netconte // We found a list of overrides; grab the last, and reconstitute a // context that will hide it. f := cofs[len(cofs)-1] - ctx = netcontext.WithValue(ctx, &callOverrideKey, cofs[:len(cofs)-1]) + ctx = context.WithValue(ctx, &callOverrideKey, cofs[:len(cofs)-1]) return f, ctx, true } @@ -45,23 +51,35 @@ type logOverrideFunc func(level int64, format string, args ...interface{}) var logOverrideKey = "holds a logOverrideFunc" -func WithLogOverride(ctx netcontext.Context, f logOverrideFunc) netcontext.Context { - return netcontext.WithValue(ctx, &logOverrideKey, f) +func WithLogOverride(ctx context.Context, f logOverrideFunc) context.Context { + return context.WithValue(ctx, &logOverrideKey, f) } var appIDOverrideKey = "holds a string, being the full app ID" -func WithAppIDOverride(ctx netcontext.Context, appID string) netcontext.Context { - return netcontext.WithValue(ctx, &appIDOverrideKey, appID) +func WithAppIDOverride(ctx context.Context, appID string) context.Context { + return context.WithValue(ctx, &appIDOverrideKey, appID) +} + +var apiHostOverrideKey = ctxKey("holds a string, being the alternate API_HOST") + +func withAPIHostOverride(ctx context.Context, apiHost string) context.Context { + return context.WithValue(ctx, apiHostOverrideKey, apiHost) +} + +var apiPortOverrideKey = ctxKey("holds a string, being the alternate API_PORT") + +func withAPIPortOverride(ctx context.Context, apiPort string) context.Context { + return context.WithValue(ctx, apiPortOverrideKey, apiPort) } var namespaceKey = "holds the namespace string" -func withNamespace(ctx netcontext.Context, ns string) netcontext.Context { - return netcontext.WithValue(ctx, &namespaceKey, ns) +func withNamespace(ctx context.Context, ns string) context.Context { + return context.WithValue(ctx, &namespaceKey, ns) } -func NamespaceFromContext(ctx netcontext.Context) string { +func NamespaceFromContext(ctx context.Context) string { // If there's no namespace, return the empty string. ns, _ := ctx.Value(&namespaceKey).(string) return ns @@ -70,14 +88,14 @@ func NamespaceFromContext(ctx netcontext.Context) string { // FullyQualifiedAppID returns the fully-qualified application ID. // This may contain a partition prefix (e.g. "s~" for High Replication apps), // or a domain prefix (e.g. "example.com:"). -func FullyQualifiedAppID(ctx netcontext.Context) string { +func FullyQualifiedAppID(ctx context.Context) string { if id, ok := ctx.Value(&appIDOverrideKey).(string); ok { return id } return fullyQualifiedAppID(ctx) } -func Logf(ctx netcontext.Context, level int64, format string, args ...interface{}) { +func Logf(ctx context.Context, level int64, format string, args ...interface{}) { if f, ok := ctx.Value(&logOverrideKey).(logOverrideFunc); ok { f(level, format, args...) return @@ -90,7 +108,7 @@ func Logf(ctx netcontext.Context, level int64, format string, args ...interface{ } // NamespacedContext wraps a Context to support namespaces. -func NamespacedContext(ctx netcontext.Context, namespace string) netcontext.Context { +func NamespacedContext(ctx context.Context, namespace string) context.Context { return withNamespace(ctx, namespace) } diff --git a/vendor/google.golang.org/appengine/internal/identity.go b/vendor/google.golang.org/appengine/internal/identity.go index 9b4134e425732..0f95aa91d5bc6 100644 --- a/vendor/google.golang.org/appengine/internal/identity.go +++ b/vendor/google.golang.org/appengine/internal/identity.go @@ -5,9 +5,8 @@ package internal import ( + "context" "os" - - netcontext "golang.org/x/net/context" ) var ( @@ -23,7 +22,7 @@ var ( // AppID is the implementation of the wrapper function of the same name in // ../identity.go. See that file for commentary. -func AppID(c netcontext.Context) string { +func AppID(c context.Context) string { return appID(FullyQualifiedAppID(c)) } @@ -35,7 +34,7 @@ func IsStandard() bool { return appengineStandard || IsSecondGen() } -// IsStandard is the implementation of the wrapper function of the same name in +// IsSecondGen is the implementation of the wrapper function of the same name in // ../appengine.go. See that file for commentary. func IsSecondGen() bool { // Second-gen runtimes set $GAE_ENV so we use that to check if we're on a second-gen runtime. diff --git a/vendor/google.golang.org/appengine/internal/identity_classic.go b/vendor/google.golang.org/appengine/internal/identity_classic.go index 4e979f45e34d5..5ad3548bf7416 100644 --- a/vendor/google.golang.org/appengine/internal/identity_classic.go +++ b/vendor/google.golang.org/appengine/internal/identity_classic.go @@ -2,21 +2,22 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build appengine // +build appengine package internal import ( - "appengine" + "context" - netcontext "golang.org/x/net/context" + "appengine" ) func init() { appengineStandard = true } -func DefaultVersionHostname(ctx netcontext.Context) string { +func DefaultVersionHostname(ctx context.Context) string { c := fromContext(ctx) if c == nil { panic(errNotAppEngineContext) @@ -24,12 +25,12 @@ func DefaultVersionHostname(ctx netcontext.Context) string { return appengine.DefaultVersionHostname(c) } -func Datacenter(_ netcontext.Context) string { return appengine.Datacenter() } -func ServerSoftware() string { return appengine.ServerSoftware() } -func InstanceID() string { return appengine.InstanceID() } -func IsDevAppServer() bool { return appengine.IsDevAppServer() } +func Datacenter(_ context.Context) string { return appengine.Datacenter() } +func ServerSoftware() string { return appengine.ServerSoftware() } +func InstanceID() string { return appengine.InstanceID() } +func IsDevAppServer() bool { return appengine.IsDevAppServer() } -func RequestID(ctx netcontext.Context) string { +func RequestID(ctx context.Context) string { c := fromContext(ctx) if c == nil { panic(errNotAppEngineContext) @@ -37,14 +38,14 @@ func RequestID(ctx netcontext.Context) string { return appengine.RequestID(c) } -func ModuleName(ctx netcontext.Context) string { +func ModuleName(ctx context.Context) string { c := fromContext(ctx) if c == nil { panic(errNotAppEngineContext) } return appengine.ModuleName(c) } -func VersionID(ctx netcontext.Context) string { +func VersionID(ctx context.Context) string { c := fromContext(ctx) if c == nil { panic(errNotAppEngineContext) @@ -52,7 +53,7 @@ func VersionID(ctx netcontext.Context) string { return appengine.VersionID(c) } -func fullyQualifiedAppID(ctx netcontext.Context) string { +func fullyQualifiedAppID(ctx context.Context) string { c := fromContext(ctx) if c == nil { panic(errNotAppEngineContext) diff --git a/vendor/google.golang.org/appengine/internal/identity_flex.go b/vendor/google.golang.org/appengine/internal/identity_flex.go index d5e2e7b5e3f8c..4201b6b585a69 100644 --- a/vendor/google.golang.org/appengine/internal/identity_flex.go +++ b/vendor/google.golang.org/appengine/internal/identity_flex.go @@ -2,6 +2,7 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build appenginevm // +build appenginevm package internal diff --git a/vendor/google.golang.org/appengine/internal/identity_vm.go b/vendor/google.golang.org/appengine/internal/identity_vm.go index 5d80672635560..18ddda3a4235e 100644 --- a/vendor/google.golang.org/appengine/internal/identity_vm.go +++ b/vendor/google.golang.org/appengine/internal/identity_vm.go @@ -2,17 +2,17 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build !appengine // +build !appengine package internal import ( + "context" "log" "net/http" "os" "strings" - - netcontext "golang.org/x/net/context" ) // These functions are implementations of the wrapper functions @@ -24,7 +24,7 @@ const ( hDatacenter = "X-AppEngine-Datacenter" ) -func ctxHeaders(ctx netcontext.Context) http.Header { +func ctxHeaders(ctx context.Context) http.Header { c := fromContext(ctx) if c == nil { return nil @@ -32,15 +32,15 @@ func ctxHeaders(ctx netcontext.Context) http.Header { return c.Request().Header } -func DefaultVersionHostname(ctx netcontext.Context) string { +func DefaultVersionHostname(ctx context.Context) string { return ctxHeaders(ctx).Get(hDefaultVersionHostname) } -func RequestID(ctx netcontext.Context) string { +func RequestID(ctx context.Context) string { return ctxHeaders(ctx).Get(hRequestLogId) } -func Datacenter(ctx netcontext.Context) string { +func Datacenter(ctx context.Context) string { if dc := ctxHeaders(ctx).Get(hDatacenter); dc != "" { return dc } @@ -71,7 +71,7 @@ func ServerSoftware() string { // TODO(dsymonds): Remove the metadata fetches. -func ModuleName(_ netcontext.Context) string { +func ModuleName(_ context.Context) string { if s := os.Getenv("GAE_MODULE_NAME"); s != "" { return s } @@ -81,7 +81,7 @@ func ModuleName(_ netcontext.Context) string { return string(mustGetMetadata("instance/attributes/gae_backend_name")) } -func VersionID(_ netcontext.Context) string { +func VersionID(_ context.Context) string { if s1, s2 := os.Getenv("GAE_MODULE_VERSION"), os.Getenv("GAE_MINOR_VERSION"); s1 != "" && s2 != "" { return s1 + "." + s2 } @@ -112,7 +112,7 @@ func partitionlessAppID() string { return string(mustGetMetadata("instance/attributes/gae_project")) } -func fullyQualifiedAppID(_ netcontext.Context) string { +func fullyQualifiedAppID(_ context.Context) string { if s := os.Getenv("GAE_APPLICATION"); s != "" { return s } @@ -130,5 +130,5 @@ func fullyQualifiedAppID(_ netcontext.Context) string { } func IsDevAppServer() bool { - return os.Getenv("RUN_WITH_DEVAPPSERVER") != "" + return os.Getenv("RUN_WITH_DEVAPPSERVER") != "" || os.Getenv("GAE_ENV") == "localdev" } diff --git a/vendor/google.golang.org/appengine/internal/main.go b/vendor/google.golang.org/appengine/internal/main.go index 1e765312fd180..afd0ae84fdfbf 100644 --- a/vendor/google.golang.org/appengine/internal/main.go +++ b/vendor/google.golang.org/appengine/internal/main.go @@ -2,6 +2,7 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build appengine // +build appengine package internal diff --git a/vendor/google.golang.org/appengine/internal/main_vm.go b/vendor/google.golang.org/appengine/internal/main_vm.go index ddb79a333879a..86a8caf06f31a 100644 --- a/vendor/google.golang.org/appengine/internal/main_vm.go +++ b/vendor/google.golang.org/appengine/internal/main_vm.go @@ -2,6 +2,7 @@ // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. +//go:build !appengine // +build !appengine package internal @@ -29,7 +30,7 @@ func Main() { if IsDevAppServer() { host = "127.0.0.1" } - if err := http.ListenAndServe(host+":"+port, http.HandlerFunc(handleHTTP)); err != nil { + if err := http.ListenAndServe(host+":"+port, Middleware(http.DefaultServeMux)); err != nil { log.Fatalf("http.ListenAndServe: %v", err) } } diff --git a/vendor/google.golang.org/appengine/internal/transaction.go b/vendor/google.golang.org/appengine/internal/transaction.go index 9006ae65380a7..2ae8ab9fa4212 100644 --- a/vendor/google.golang.org/appengine/internal/transaction.go +++ b/vendor/google.golang.org/appengine/internal/transaction.go @@ -7,11 +7,11 @@ package internal // This file implements hooks for applying datastore transactions. import ( + "context" "errors" "reflect" "github.com/golang/protobuf/proto" - netcontext "golang.org/x/net/context" basepb "google.golang.org/appengine/internal/base" pb "google.golang.org/appengine/internal/datastore" @@ -38,13 +38,13 @@ func applyTransaction(pb proto.Message, t *pb.Transaction) { var transactionKey = "used for *Transaction" -func transactionFromContext(ctx netcontext.Context) *transaction { +func transactionFromContext(ctx context.Context) *transaction { t, _ := ctx.Value(&transactionKey).(*transaction) return t } -func withTransaction(ctx netcontext.Context, t *transaction) netcontext.Context { - return netcontext.WithValue(ctx, &transactionKey, t) +func withTransaction(ctx context.Context, t *transaction) context.Context { + return context.WithValue(ctx, &transactionKey, t) } type transaction struct { @@ -54,7 +54,7 @@ type transaction struct { var ErrConcurrentTransaction = errors.New("internal: concurrent transaction") -func RunTransactionOnce(c netcontext.Context, f func(netcontext.Context) error, xg bool, readOnly bool, previousTransaction *pb.Transaction) (*pb.Transaction, error) { +func RunTransactionOnce(c context.Context, f func(context.Context) error, xg bool, readOnly bool, previousTransaction *pb.Transaction) (*pb.Transaction, error) { if transactionFromContext(c) != nil { return nil, errors.New("nested transactions are not supported") } diff --git a/vendor/google.golang.org/appengine/namespace.go b/vendor/google.golang.org/appengine/namespace.go index 21860ca08227c..6f169be487d62 100644 --- a/vendor/google.golang.org/appengine/namespace.go +++ b/vendor/google.golang.org/appengine/namespace.go @@ -5,11 +5,10 @@ package appengine import ( + "context" "fmt" "regexp" - "golang.org/x/net/context" - "google.golang.org/appengine/internal" ) diff --git a/vendor/google.golang.org/appengine/timeout.go b/vendor/google.golang.org/appengine/timeout.go index 05642a992a39e..fcf3ad0a58f11 100644 --- a/vendor/google.golang.org/appengine/timeout.go +++ b/vendor/google.golang.org/appengine/timeout.go @@ -4,7 +4,7 @@ package appengine -import "golang.org/x/net/context" +import "context" // IsTimeoutError reports whether err is a timeout error. func IsTimeoutError(err error) bool { diff --git a/vendor/google.golang.org/appengine/travis_install.sh b/vendor/google.golang.org/appengine/travis_install.sh deleted file mode 100644 index 785b62f46e8ec..0000000000000 --- a/vendor/google.golang.org/appengine/travis_install.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -set -e - -if [[ $GO111MODULE == "on" ]]; then - go get . -else - go get -u -v $(go list -f '{{join .Imports "\n"}}{{"\n"}}{{join .TestImports "\n"}}' ./... | sort | uniq | grep -v appengine) -fi - -if [[ $GOAPP == "true" ]]; then - mkdir /tmp/sdk - curl -o /tmp/sdk.zip "https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.68.zip" - unzip -q /tmp/sdk.zip -d /tmp/sdk - # NOTE: Set the following env vars in the test script: - # export PATH="$PATH:/tmp/sdk/go_appengine" - # export APPENGINE_DEV_APPSERVER=/tmp/sdk/go_appengine/dev_appserver.py -fi - diff --git a/vendor/google.golang.org/appengine/travis_test.sh b/vendor/google.golang.org/appengine/travis_test.sh deleted file mode 100644 index d4390f045b6a0..0000000000000 --- a/vendor/google.golang.org/appengine/travis_test.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -set -e - -go version -go test -v google.golang.org/appengine/... -go test -v -race google.golang.org/appengine/... -if [[ $GOAPP == "true" ]]; then - export PATH="$PATH:/tmp/sdk/go_appengine" - export APPENGINE_DEV_APPSERVER=/tmp/sdk/go_appengine/dev_appserver.py - goapp version - goapp test -v google.golang.org/appengine/... -fi diff --git a/vendor/google.golang.org/appengine/urlfetch/urlfetch.go b/vendor/google.golang.org/appengine/urlfetch/urlfetch.go index 6ffe1e6d901af..6c0d72418d890 100644 --- a/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +++ b/vendor/google.golang.org/appengine/urlfetch/urlfetch.go @@ -7,6 +7,7 @@ package urlfetch // import "google.golang.org/appengine/urlfetch" import ( + "context" "errors" "fmt" "io" @@ -18,7 +19,6 @@ import ( "time" "github.com/golang/protobuf/proto" - "golang.org/x/net/context" "google.golang.org/appengine/internal" pb "google.golang.org/appengine/internal/urlfetch" @@ -44,11 +44,10 @@ type Transport struct { var _ http.RoundTripper = (*Transport)(nil) // Client returns an *http.Client using a default urlfetch Transport. This -// client will have the default deadline of 5 seconds, and will check the -// validity of SSL certificates. +// client will check the validity of SSL certificates. // -// Any deadline of the provided context will be used for requests through this client; -// if the client does not have a deadline then a 5 second default is used. +// Any deadline of the provided context will be used for requests through this client. +// If the client does not have a deadline, then an App Engine default of 60 second is used. func Client(ctx context.Context) *http.Client { return &http.Client{ Transport: &Transport{ diff --git a/vendor/google.golang.org/genproto/LICENSE b/vendor/google.golang.org/genproto/googleapis/rpc/LICENSE similarity index 100% rename from vendor/google.golang.org/genproto/LICENSE rename to vendor/google.golang.org/genproto/googleapis/rpc/LICENSE diff --git a/vendor/google.golang.org/grpc/CONTRIBUTING.md b/vendor/google.golang.org/grpc/CONTRIBUTING.md index 52338d004ce37..608aa6e1ac5e4 100644 --- a/vendor/google.golang.org/grpc/CONTRIBUTING.md +++ b/vendor/google.golang.org/grpc/CONTRIBUTING.md @@ -20,6 +20,15 @@ How to get your contributions merged smoothly and quickly. both author's & review's time is wasted. Create more PRs to address different concerns and everyone will be happy. +- If you are searching for features to work on, issues labeled [Status: Help + Wanted](https://github.com/grpc/grpc-go/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Status%3A+Help+Wanted%22) + is a great place to start. These issues are well-documented and usually can be + resolved with a single pull request. + +- If you are adding a new file, make sure it has the copyright message template + at the top as a comment. You can copy over the message from an existing file + and update the year. + - The grpc package should only depend on standard Go packages and a small number of exceptions. If your contribution introduces new dependencies which are NOT in the [list](https://godoc.org/google.golang.org/grpc?imports), you need a @@ -32,14 +41,18 @@ How to get your contributions merged smoothly and quickly. - Provide a good **PR description** as a record of **what** change is being made and **why** it was made. Link to a github issue if it exists. -- Don't fix code style and formatting unless you are already changing that line - to address an issue. PRs with irrelevant changes won't be merged. If you do - want to fix formatting or style, do that in a separate PR. +- If you want to fix formatting or style, consider whether your changes are an + obvious improvement or might be considered a personal preference. If a style + change is based on preference, it likely will not be accepted. If it corrects + widely agreed-upon anti-patterns, then please do create a PR and explain the + benefits of the change. - Unless your PR is trivial, you should expect there will be reviewer comments - that you'll need to address before merging. We expect you to be reasonably - responsive to those comments, otherwise the PR will be closed after 2-3 weeks - of inactivity. + that you'll need to address before merging. We'll mark it as `Status: Requires + Reporter Clarification` if we expect you to respond to these comments in a + timely manner. If the PR remains inactive for 6 days, it will be marked as + `stale` and automatically close 7 days after that if we don't hear back from + you. - Maintain **clean commit history** and use **meaningful commit messages**. PRs with messy commit history are difficult to review and won't be merged. Use diff --git a/vendor/google.golang.org/grpc/README.md b/vendor/google.golang.org/grpc/README.md index 0e6ae69a58461..1bc92248cb470 100644 --- a/vendor/google.golang.org/grpc/README.md +++ b/vendor/google.golang.org/grpc/README.md @@ -14,21 +14,14 @@ RPC framework that puts mobile and HTTP/2 first. For more information see the ## Installation -With [Go module][] support (Go 1.11+), simply add the following import +Simply add the following import to your code, and then `go [build|run|test]` +will automatically fetch the necessary dependencies: + ```go import "google.golang.org/grpc" ``` -to your code, and then `go [build|run|test]` will automatically fetch the -necessary dependencies. - -Otherwise, to install the `grpc-go` package, run the following command: - -```console -$ go get -u google.golang.org/grpc -``` - > **Note:** If you are trying to access `grpc-go` from **China**, see the > [FAQ](#FAQ) below. @@ -56,15 +49,6 @@ To build Go code, there are several options: - Set up a VPN and access google.golang.org through that. -- Without Go module support: `git clone` the repo manually: - - ```sh - git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc - ``` - - You will need to do the same for all of grpc's dependencies in `golang.org`, - e.g. `golang.org/x/net`. - - With Go module support: it is possible to use the `replace` feature of `go mod` to create aliases for golang.org packages. In your project's directory: @@ -76,33 +60,13 @@ To build Go code, there are several options: ``` Again, this will need to be done for all transitive dependencies hosted on - golang.org as well. For details, refer to [golang/go issue #28652](https://github.com/golang/go/issues/28652). + golang.org as well. For details, refer to [golang/go issue + #28652](https://github.com/golang/go/issues/28652). ### Compiling error, undefined: grpc.SupportPackageIsVersion -#### If you are using Go modules: - -Ensure your gRPC-Go version is `require`d at the appropriate version in -the same module containing the generated `.pb.go` files. For example, -`SupportPackageIsVersion6` needs `v1.27.0`, so in your `go.mod` file: - -```go -module - -require ( - google.golang.org/grpc v1.27.0 -) -``` - -#### If you are *not* using Go modules: - -Update the `proto` package, gRPC package, and rebuild the `.proto` files: - -```sh -go get -u github.com/golang/protobuf/{proto,protoc-gen-go} -go get -u google.golang.org/grpc -protoc --go_out=plugins=grpc:. *.proto -``` +Please update to the latest version of gRPC-Go using +`go get google.golang.org/grpc`. ### How to turn on logging @@ -121,9 +85,11 @@ possible reasons, including: 1. mis-configured transport credentials, connection failed on handshaking 1. bytes disrupted, possibly by a proxy in between 1. server shutdown - 1. Keepalive parameters caused connection shutdown, for example if you have configured - your server to terminate connections regularly to [trigger DNS lookups](https://github.com/grpc/grpc-go/issues/3170#issuecomment-552517779). - If this is the case, you may want to increase your [MaxConnectionAgeGrace](https://pkg.go.dev/google.golang.org/grpc/keepalive?tab=doc#ServerParameters), + 1. Keepalive parameters caused connection shutdown, for example if you have + configured your server to terminate connections regularly to [trigger DNS + lookups](https://github.com/grpc/grpc-go/issues/3170#issuecomment-552517779). + If this is the case, you may want to increase your + [MaxConnectionAgeGrace](https://pkg.go.dev/google.golang.org/grpc/keepalive?tab=doc#ServerParameters), to allow longer RPC calls to finish. It can be tricky to debug this because the error happens on the client side but diff --git a/vendor/google.golang.org/grpc/attributes/attributes.go b/vendor/google.golang.org/grpc/attributes/attributes.go index 02f5dc5318914..712fef4d0fb9d 100644 --- a/vendor/google.golang.org/grpc/attributes/attributes.go +++ b/vendor/google.golang.org/grpc/attributes/attributes.go @@ -25,30 +25,35 @@ // later release. package attributes +import ( + "fmt" + "strings" +) + // Attributes is an immutable struct for storing and retrieving generic // key/value pairs. Keys must be hashable, and users should define their own // types for keys. Values should not be modified after they are added to an // Attributes or if they were received from one. If values implement 'Equal(o -// interface{}) bool', it will be called by (*Attributes).Equal to determine -// whether two values with the same key should be considered equal. +// any) bool', it will be called by (*Attributes).Equal to determine whether +// two values with the same key should be considered equal. type Attributes struct { - m map[interface{}]interface{} + m map[any]any } // New returns a new Attributes containing the key/value pair. -func New(key, value interface{}) *Attributes { - return &Attributes{m: map[interface{}]interface{}{key: value}} +func New(key, value any) *Attributes { + return &Attributes{m: map[any]any{key: value}} } // WithValue returns a new Attributes containing the previous keys and values // and the new key/value pair. If the same key appears multiple times, the // last value overwrites all previous values for that key. To remove an // existing key, use a nil value. value should not be modified later. -func (a *Attributes) WithValue(key, value interface{}) *Attributes { +func (a *Attributes) WithValue(key, value any) *Attributes { if a == nil { return New(key, value) } - n := &Attributes{m: make(map[interface{}]interface{}, len(a.m)+1)} + n := &Attributes{m: make(map[any]any, len(a.m)+1)} for k, v := range a.m { n.m[k] = v } @@ -58,20 +63,19 @@ func (a *Attributes) WithValue(key, value interface{}) *Attributes { // Value returns the value associated with these attributes for key, or nil if // no value is associated with key. The returned value should not be modified. -func (a *Attributes) Value(key interface{}) interface{} { +func (a *Attributes) Value(key any) any { if a == nil { return nil } return a.m[key] } -// Equal returns whether a and o are equivalent. If 'Equal(o interface{}) -// bool' is implemented for a value in the attributes, it is called to -// determine if the value matches the one stored in the other attributes. If -// Equal is not implemented, standard equality is used to determine if the two -// values are equal. Note that some types (e.g. maps) aren't comparable by -// default, so they must be wrapped in a struct, or in an alias type, with Equal -// defined. +// Equal returns whether a and o are equivalent. If 'Equal(o any) bool' is +// implemented for a value in the attributes, it is called to determine if the +// value matches the one stored in the other attributes. If Equal is not +// implemented, standard equality is used to determine if the two values are +// equal. Note that some types (e.g. maps) aren't comparable by default, so +// they must be wrapped in a struct, or in an alias type, with Equal defined. func (a *Attributes) Equal(o *Attributes) bool { if a == nil && o == nil { return true @@ -88,7 +92,7 @@ func (a *Attributes) Equal(o *Attributes) bool { // o missing element of a return false } - if eq, ok := v.(interface{ Equal(o interface{}) bool }); ok { + if eq, ok := v.(interface{ Equal(o any) bool }); ok { if !eq.Equal(ov) { return false } @@ -99,3 +103,39 @@ func (a *Attributes) Equal(o *Attributes) bool { } return true } + +// String prints the attribute map. If any key or values throughout the map +// implement fmt.Stringer, it calls that method and appends. +func (a *Attributes) String() string { + var sb strings.Builder + sb.WriteString("{") + first := true + for k, v := range a.m { + if !first { + sb.WriteString(", ") + } + sb.WriteString(fmt.Sprintf("%q: %q ", str(k), str(v))) + first = false + } + sb.WriteString("}") + return sb.String() +} + +func str(x any) string { + if v, ok := x.(fmt.Stringer); ok { + return v.String() + } else if v, ok := x.(string); ok { + return v + } + return fmt.Sprintf("<%p>", x) +} + +// MarshalJSON helps implement the json.Marshaler interface, thereby rendering +// the Attributes correctly when printing (via pretty.JSON) structs containing +// Attributes as fields. +// +// Is it impossible to unmarshal attributes from a JSON representation and this +// method is meant only for debugging purposes. +func (a *Attributes) MarshalJSON() ([]byte, error) { + return []byte(a.String()), nil +} diff --git a/vendor/google.golang.org/grpc/balancer/balancer.go b/vendor/google.golang.org/grpc/balancer/balancer.go index 09d61dd1b55b4..b6377f445ad24 100644 --- a/vendor/google.golang.org/grpc/balancer/balancer.go +++ b/vendor/google.golang.org/grpc/balancer/balancer.go @@ -105,8 +105,8 @@ type SubConn interface { // // This will trigger a state transition for the SubConn. // - // Deprecated: This method is now part of the ClientConn interface and will - // eventually be removed from here. + // Deprecated: this method will be removed. Create new SubConns for new + // addresses instead. UpdateAddresses([]resolver.Address) // Connect starts the connecting for this SubConn. Connect() @@ -115,6 +115,13 @@ type SubConn interface { // creates a new one and returns it. Returns a close function which must // be called when the Producer is no longer needed. GetOrBuildProducer(ProducerBuilder) (p Producer, close func()) + // Shutdown shuts down the SubConn gracefully. Any started RPCs will be + // allowed to complete. No future calls should be made on the SubConn. + // One final state update will be delivered to the StateListener (or + // UpdateSubConnState; deprecated) with ConnectivityState of Shutdown to + // indicate the shutdown operation. This may be delivered before + // in-progress RPCs are complete and the actual connection is closed. + Shutdown() } // NewSubConnOptions contains options to create new SubConn. @@ -129,6 +136,11 @@ type NewSubConnOptions struct { // HealthCheckEnabled indicates whether health check service should be // enabled on this SubConn HealthCheckEnabled bool + // StateListener is called when the state of the subconn changes. If nil, + // Balancer.UpdateSubConnState will be called instead. Will never be + // invoked until after Connect() is called on the SubConn created with + // these options. + StateListener func(SubConnState) } // State contains the balancer's state relevant to the gRPC ClientConn. @@ -150,16 +162,24 @@ type ClientConn interface { // NewSubConn is called by balancer to create a new SubConn. // It doesn't block and wait for the connections to be established. // Behaviors of the SubConn can be controlled by options. + // + // Deprecated: please be aware that in a future version, SubConns will only + // support one address per SubConn. NewSubConn([]resolver.Address, NewSubConnOptions) (SubConn, error) // RemoveSubConn removes the SubConn from ClientConn. // The SubConn will be shutdown. + // + // Deprecated: use SubConn.Shutdown instead. RemoveSubConn(SubConn) // UpdateAddresses updates the addresses used in the passed in SubConn. // gRPC checks if the currently connected address is still in the new list. // If so, the connection will be kept. Else, the connection will be // gracefully closed, and a new connection will be created. // - // This will trigger a state transition for the SubConn. + // This may trigger a state transition for the SubConn. + // + // Deprecated: this method will be removed. Create new SubConns for new + // addresses instead. UpdateAddresses(SubConn, []resolver.Address) // UpdateState notifies gRPC that the balancer's internal state has @@ -250,7 +270,7 @@ type DoneInfo struct { // trailing metadata. // // The only supported type now is *orca_v3.LoadReport. - ServerLoad interface{} + ServerLoad any } var ( @@ -286,7 +306,7 @@ type PickResult struct { // // LB policies with child policies are responsible for propagating metadata // injected by their children to the ClientConn, as part of Pick(). - Metatada metadata.MD + Metadata metadata.MD } // TransientFailureError returns e. It exists for backward compatibility and @@ -343,9 +363,13 @@ type Balancer interface { ResolverError(error) // UpdateSubConnState is called by gRPC when the state of a SubConn // changes. + // + // Deprecated: Use NewSubConnOptions.StateListener when creating the + // SubConn instead. UpdateSubConnState(SubConn, SubConnState) - // Close closes the balancer. The balancer is not required to call - // ClientConn.RemoveSubConn for its existing SubConns. + // Close closes the balancer. The balancer is not currently required to + // call SubConn.Shutdown for its existing SubConns; however, this will be + // required in a future release, so it is recommended. Close() } @@ -390,15 +414,14 @@ var ErrBadResolverState = errors.New("bad resolver state") type ProducerBuilder interface { // Build creates a Producer. The first parameter is always a // grpc.ClientConnInterface (a type to allow creating RPCs/streams on the - // associated SubConn), but is declared as interface{} to avoid a - // dependency cycle. Should also return a close function that will be - // called when all references to the Producer have been given up. - Build(grpcClientConnInterface interface{}) (p Producer, close func()) + // associated SubConn), but is declared as `any` to avoid a dependency + // cycle. Should also return a close function that will be called when all + // references to the Producer have been given up. + Build(grpcClientConnInterface any) (p Producer, close func()) } // A Producer is a type shared among potentially many consumers. It is // associated with a SubConn, and an implementation will typically contain // other methods to provide additional functionality, e.g. configuration or // subscription registration. -type Producer interface { -} +type Producer any diff --git a/vendor/google.golang.org/grpc/balancer/base/balancer.go b/vendor/google.golang.org/grpc/balancer/base/balancer.go index 3929c26d31e1c..a7f1eeec8e6ae 100644 --- a/vendor/google.golang.org/grpc/balancer/base/balancer.go +++ b/vendor/google.golang.org/grpc/balancer/base/balancer.go @@ -105,7 +105,12 @@ func (b *baseBalancer) UpdateClientConnState(s balancer.ClientConnState) error { addrsSet.Set(a, nil) if _, ok := b.subConns.Get(a); !ok { // a is a new address (not existing in b.subConns). - sc, err := b.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{HealthCheckEnabled: b.config.HealthCheck}) + var sc balancer.SubConn + opts := balancer.NewSubConnOptions{ + HealthCheckEnabled: b.config.HealthCheck, + StateListener: func(scs balancer.SubConnState) { b.updateSubConnState(sc, scs) }, + } + sc, err := b.cc.NewSubConn([]resolver.Address{a}, opts) if err != nil { logger.Warningf("base.baseBalancer: failed to create new SubConn: %v", err) continue @@ -121,10 +126,10 @@ func (b *baseBalancer) UpdateClientConnState(s balancer.ClientConnState) error { sc := sci.(balancer.SubConn) // a was removed by resolver. if _, ok := addrsSet.Get(a); !ok { - b.cc.RemoveSubConn(sc) + sc.Shutdown() b.subConns.Delete(a) // Keep the state of this sc in b.scStates until sc's state becomes Shutdown. - // The entry will be deleted in UpdateSubConnState. + // The entry will be deleted in updateSubConnState. } } // If resolver state contains no addresses, return an error so ClientConn @@ -177,7 +182,12 @@ func (b *baseBalancer) regeneratePicker() { b.picker = b.pickerBuilder.Build(PickerBuildInfo{ReadySCs: readySCs}) } +// UpdateSubConnState is a nop because a StateListener is always set in NewSubConn. func (b *baseBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { + logger.Errorf("base.baseBalancer: UpdateSubConnState(%v, %+v) called unexpectedly", sc, state) +} + +func (b *baseBalancer) updateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { s := state.ConnectivityState if logger.V(2) { logger.Infof("base.baseBalancer: handle SubConn state change: %p, %v", sc, s) @@ -204,8 +214,8 @@ func (b *baseBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.Su case connectivity.Idle: sc.Connect() case connectivity.Shutdown: - // When an address was removed by resolver, b called RemoveSubConn but - // kept the sc's state in scStates. Remove state for this sc here. + // When an address was removed by resolver, b called Shutdown but kept + // the sc's state in scStates. Remove state for this sc here. delete(b.scStates, sc) case connectivity.TransientFailure: // Save error to be reported via picker. @@ -226,7 +236,7 @@ func (b *baseBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.Su } // Close is a nop because base balancer doesn't have internal state to clean up, -// and it doesn't need to call RemoveSubConn for the SubConns. +// and it doesn't need to call Shutdown for the SubConns. func (b *baseBalancer) Close() { } diff --git a/vendor/google.golang.org/grpc/balancer_conn_wrappers.go b/vendor/google.golang.org/grpc/balancer_conn_wrappers.go index 0359956d36fa3..a4411c22bfc8c 100644 --- a/vendor/google.golang.org/grpc/balancer_conn_wrappers.go +++ b/vendor/google.golang.org/grpc/balancer_conn_wrappers.go @@ -25,14 +25,20 @@ import ( "sync" "google.golang.org/grpc/balancer" - "google.golang.org/grpc/codes" "google.golang.org/grpc/connectivity" "google.golang.org/grpc/internal/balancer/gracefulswitch" - "google.golang.org/grpc/internal/buffer" "google.golang.org/grpc/internal/channelz" "google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/resolver" - "google.golang.org/grpc/status" +) + +type ccbMode int + +const ( + ccbModeActive = iota + ccbModeIdle + ccbModeClosed + ccbModeExitingIdle ) // ccBalancerWrapper sits between the ClientConn and the Balancer. @@ -49,192 +55,89 @@ import ( // It uses the gracefulswitch.Balancer internally to ensure that balancer // switches happen in a graceful manner. type ccBalancerWrapper struct { - cc *ClientConn - - // Since these fields are accessed only from handleXxx() methods which are - // synchronized by the watcher goroutine, we do not need a mutex to protect - // these fields. + // The following fields are initialized when the wrapper is created and are + // read-only afterwards, and therefore can be accessed without a mutex. + cc *ClientConn + opts balancer.BuildOptions + + // Outgoing (gRPC --> balancer) calls are guaranteed to execute in a + // mutually exclusive manner as they are scheduled in the serializer. Fields + // accessed *only* in these serializer callbacks, can therefore be accessed + // without a mutex. balancer *gracefulswitch.Balancer curBalancerName string - updateCh *buffer.Unbounded // Updates written on this channel are processed by watcher(). - resultCh *buffer.Unbounded // Results of calls to UpdateClientConnState() are pushed here. - closed *grpcsync.Event // Indicates if close has been called. - done *grpcsync.Event // Indicates if close has completed its work. + // mu guards access to the below fields. Access to the serializer and its + // cancel function needs to be mutex protected because they are overwritten + // when the wrapper exits idle mode. + mu sync.Mutex + serializer *grpcsync.CallbackSerializer // To serialize all outoing calls. + serializerCancel context.CancelFunc // To close the seralizer at close/enterIdle time. + mode ccbMode // Tracks the current mode of the wrapper. } // newCCBalancerWrapper creates a new balancer wrapper. The underlying balancer // is not created until the switchTo() method is invoked. func newCCBalancerWrapper(cc *ClientConn, bopts balancer.BuildOptions) *ccBalancerWrapper { + ctx, cancel := context.WithCancel(context.Background()) ccb := &ccBalancerWrapper{ - cc: cc, - updateCh: buffer.NewUnbounded(), - resultCh: buffer.NewUnbounded(), - closed: grpcsync.NewEvent(), - done: grpcsync.NewEvent(), + cc: cc, + opts: bopts, + serializer: grpcsync.NewCallbackSerializer(ctx), + serializerCancel: cancel, } - go ccb.watcher() ccb.balancer = gracefulswitch.NewBalancer(ccb, bopts) return ccb } -// The following xxxUpdate structs wrap the arguments received as part of the -// corresponding update. The watcher goroutine uses the 'type' of the update to -// invoke the appropriate handler routine to handle the update. - -type ccStateUpdate struct { - ccs *balancer.ClientConnState -} - -type scStateUpdate struct { - sc balancer.SubConn - state connectivity.State - err error -} - -type exitIdleUpdate struct{} - -type resolverErrorUpdate struct { - err error -} - -type switchToUpdate struct { - name string -} - -type subConnUpdate struct { - acbw *acBalancerWrapper -} - -// watcher is a long-running goroutine which reads updates from a channel and -// invokes corresponding methods on the underlying balancer. It ensures that -// these methods are invoked in a synchronous fashion. It also ensures that -// these methods are invoked in the order in which the updates were received. -func (ccb *ccBalancerWrapper) watcher() { - for { - select { - case u := <-ccb.updateCh.Get(): - ccb.updateCh.Load() - if ccb.closed.HasFired() { - break - } - switch update := u.(type) { - case *ccStateUpdate: - ccb.handleClientConnStateChange(update.ccs) - case *scStateUpdate: - ccb.handleSubConnStateChange(update) - case *exitIdleUpdate: - ccb.handleExitIdle() - case *resolverErrorUpdate: - ccb.handleResolverError(update.err) - case *switchToUpdate: - ccb.handleSwitchTo(update.name) - case *subConnUpdate: - ccb.handleRemoveSubConn(update.acbw) - default: - logger.Errorf("ccBalancerWrapper.watcher: unknown update %+v, type %T", update, update) - } - case <-ccb.closed.Done(): - } - - if ccb.closed.HasFired() { - ccb.handleClose() - return - } - } -} - // updateClientConnState is invoked by grpc to push a ClientConnState update to // the underlying balancer. -// -// Unlike other methods invoked by grpc to push updates to the underlying -// balancer, this method cannot simply push the update onto the update channel -// and return. It needs to return the error returned by the underlying balancer -// back to grpc which propagates that to the resolver. func (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnState) error { - ccb.updateCh.Put(&ccStateUpdate{ccs: ccs}) - - var res interface{} - select { - case res = <-ccb.resultCh.Get(): - ccb.resultCh.Load() - case <-ccb.closed.Done(): - // Return early if the balancer wrapper is closed while we are waiting for - // the underlying balancer to process a ClientConnState update. - return nil - } - // If the returned error is nil, attempting to type assert to error leads to - // panic. So, this needs to handled separately. - if res == nil { - return nil + ccb.mu.Lock() + errCh := make(chan error, 1) + // Here and everywhere else where Schedule() is called, it is done with the + // lock held. But the lock guards only the scheduling part. The actual + // callback is called asynchronously without the lock being held. + ok := ccb.serializer.Schedule(func(_ context.Context) { + errCh <- ccb.balancer.UpdateClientConnState(*ccs) + }) + if !ok { + // If we are unable to schedule a function with the serializer, it + // indicates that it has been closed. A serializer is only closed when + // the wrapper is closed or is in idle. + ccb.mu.Unlock() + return fmt.Errorf("grpc: cannot send state update to a closed or idle balancer") } - return res.(error) -} - -// handleClientConnStateChange handles a ClientConnState update from the update -// channel and invokes the appropriate method on the underlying balancer. -// -// If the addresses specified in the update contain addresses of type "grpclb" -// and the selected LB policy is not "grpclb", these addresses will be filtered -// out and ccs will be modified with the updated address list. -func (ccb *ccBalancerWrapper) handleClientConnStateChange(ccs *balancer.ClientConnState) { - if ccb.curBalancerName != grpclbName { - // Filter any grpclb addresses since we don't have the grpclb balancer. - var addrs []resolver.Address - for _, addr := range ccs.ResolverState.Addresses { - if addr.Type == resolver.GRPCLB { - continue - } - addrs = append(addrs, addr) - } - ccs.ResolverState.Addresses = addrs + ccb.mu.Unlock() + + // We get here only if the above call to Schedule succeeds, in which case it + // is guaranteed that the scheduled function will run. Therefore it is safe + // to block on this channel. + err := <-errCh + if logger.V(2) && err != nil { + logger.Infof("error from balancer.UpdateClientConnState: %v", err) } - ccb.resultCh.Put(ccb.balancer.UpdateClientConnState(*ccs)) + return err } // updateSubConnState is invoked by grpc to push a subConn state update to the // underlying balancer. func (ccb *ccBalancerWrapper) updateSubConnState(sc balancer.SubConn, s connectivity.State, err error) { - // When updating addresses for a SubConn, if the address in use is not in - // the new addresses, the old ac will be tearDown() and a new ac will be - // created. tearDown() generates a state change with Shutdown state, we - // don't want the balancer to receive this state change. So before - // tearDown() on the old ac, ac.acbw (acWrapper) will be set to nil, and - // this function will be called with (nil, Shutdown). We don't need to call - // balancer method in this case. - if sc == nil { - return - } - ccb.updateCh.Put(&scStateUpdate{ - sc: sc, - state: s, - err: err, + ccb.mu.Lock() + ccb.serializer.Schedule(func(_ context.Context) { + // Even though it is optional for balancers, gracefulswitch ensures + // opts.StateListener is set, so this cannot ever be nil. + sc.(*acBalancerWrapper).stateListener(balancer.SubConnState{ConnectivityState: s, ConnectionError: err}) }) -} - -// handleSubConnStateChange handles a SubConnState update from the update -// channel and invokes the appropriate method on the underlying balancer. -func (ccb *ccBalancerWrapper) handleSubConnStateChange(update *scStateUpdate) { - ccb.balancer.UpdateSubConnState(update.sc, balancer.SubConnState{ConnectivityState: update.state, ConnectionError: update.err}) -} - -func (ccb *ccBalancerWrapper) exitIdle() { - ccb.updateCh.Put(&exitIdleUpdate{}) -} - -func (ccb *ccBalancerWrapper) handleExitIdle() { - if ccb.cc.GetState() != connectivity.Idle { - return - } - ccb.balancer.ExitIdle() + ccb.mu.Unlock() } func (ccb *ccBalancerWrapper) resolverError(err error) { - ccb.updateCh.Put(&resolverErrorUpdate{err: err}) -} - -func (ccb *ccBalancerWrapper) handleResolverError(err error) { - ccb.balancer.ResolverError(err) + ccb.mu.Lock() + ccb.serializer.Schedule(func(_ context.Context) { + ccb.balancer.ResolverError(err) + }) + ccb.mu.Unlock() } // switchTo is invoked by grpc to instruct the balancer wrapper to switch to the @@ -248,24 +151,27 @@ func (ccb *ccBalancerWrapper) handleResolverError(err error) { // the ccBalancerWrapper keeps track of the current LB policy name, and skips // the graceful balancer switching process if the name does not change. func (ccb *ccBalancerWrapper) switchTo(name string) { - ccb.updateCh.Put(&switchToUpdate{name: name}) + ccb.mu.Lock() + ccb.serializer.Schedule(func(_ context.Context) { + // TODO: Other languages use case-sensitive balancer registries. We should + // switch as well. See: https://github.com/grpc/grpc-go/issues/5288. + if strings.EqualFold(ccb.curBalancerName, name) { + return + } + ccb.buildLoadBalancingPolicy(name) + }) + ccb.mu.Unlock() } -// handleSwitchTo handles a balancer switch update from the update channel. It -// calls the SwitchTo() method on the gracefulswitch.Balancer with a -// balancer.Builder corresponding to name. If no balancer.Builder is registered -// for the given name, it uses the default LB policy which is "pick_first". -func (ccb *ccBalancerWrapper) handleSwitchTo(name string) { - // TODO: Other languages use case-insensitive balancer registries. We should - // switch as well. See: https://github.com/grpc/grpc-go/issues/5288. - if strings.EqualFold(ccb.curBalancerName, name) { - return - } - - // TODO: Ensure that name is a registered LB policy when we get here. - // We currently only validate the `loadBalancingConfig` field. We need to do - // the same for the `loadBalancingPolicy` field and reject the service config - // if the specified policy is not registered. +// buildLoadBalancingPolicy performs the following: +// - retrieve a balancer builder for the given name. Use the default LB +// policy, pick_first, if no LB policy with name is found in the registry. +// - instruct the gracefulswitch balancer to switch to the above builder. This +// will actually build the new balancer. +// - update the `curBalancerName` field +// +// Must be called from a serializer callback. +func (ccb *ccBalancerWrapper) buildLoadBalancingPolicy(name string) { builder := balancer.Get(name) if builder == nil { channelz.Warningf(logger, ccb.cc.channelzID, "Channel switches to new LB policy %q, since the specified LB policy %q was not registered", PickFirstBalancerName, name) @@ -281,26 +187,112 @@ func (ccb *ccBalancerWrapper) handleSwitchTo(name string) { ccb.curBalancerName = builder.Name() } -// handleRemoveSucConn handles a request from the underlying balancer to remove -// a subConn. -// -// See comments in RemoveSubConn() for more details. -func (ccb *ccBalancerWrapper) handleRemoveSubConn(acbw *acBalancerWrapper) { - ccb.cc.removeAddrConn(acbw.getAddrConn(), errConnDrain) +func (ccb *ccBalancerWrapper) close() { + channelz.Info(logger, ccb.cc.channelzID, "ccBalancerWrapper: closing") + ccb.closeBalancer(ccbModeClosed) } -func (ccb *ccBalancerWrapper) close() { - ccb.closed.Fire() - <-ccb.done.Done() +// enterIdleMode is invoked by grpc when the channel enters idle mode upon +// expiry of idle_timeout. This call blocks until the balancer is closed. +func (ccb *ccBalancerWrapper) enterIdleMode() { + channelz.Info(logger, ccb.cc.channelzID, "ccBalancerWrapper: entering idle mode") + ccb.closeBalancer(ccbModeIdle) +} + +// closeBalancer is invoked when the channel is being closed or when it enters +// idle mode upon expiry of idle_timeout. +func (ccb *ccBalancerWrapper) closeBalancer(m ccbMode) { + ccb.mu.Lock() + if ccb.mode == ccbModeClosed || ccb.mode == ccbModeIdle { + ccb.mu.Unlock() + return + } + + ccb.mode = m + done := ccb.serializer.Done() + b := ccb.balancer + ok := ccb.serializer.Schedule(func(_ context.Context) { + // Close the serializer to ensure that no more calls from gRPC are sent + // to the balancer. + ccb.serializerCancel() + // Empty the current balancer name because we don't have a balancer + // anymore and also so that we act on the next call to switchTo by + // creating a new balancer specified by the new resolver. + ccb.curBalancerName = "" + }) + if !ok { + ccb.mu.Unlock() + return + } + ccb.mu.Unlock() + + // Give enqueued callbacks a chance to finish before closing the balancer. + <-done + b.Close() } -func (ccb *ccBalancerWrapper) handleClose() { - ccb.balancer.Close() - ccb.done.Fire() +// exitIdleMode is invoked by grpc when the channel exits idle mode either +// because of an RPC or because of an invocation of the Connect() API. This +// recreates the balancer that was closed previously when entering idle mode. +// +// If the channel is not in idle mode, we know for a fact that we are here as a +// result of the user calling the Connect() method on the ClientConn. In this +// case, we can simply forward the call to the underlying balancer, instructing +// it to reconnect to the backends. +func (ccb *ccBalancerWrapper) exitIdleMode() { + ccb.mu.Lock() + if ccb.mode == ccbModeClosed { + // Request to exit idle is a no-op when wrapper is already closed. + ccb.mu.Unlock() + return + } + + if ccb.mode == ccbModeIdle { + // Recreate the serializer which was closed when we entered idle. + ctx, cancel := context.WithCancel(context.Background()) + ccb.serializer = grpcsync.NewCallbackSerializer(ctx) + ccb.serializerCancel = cancel + } + + // The ClientConn guarantees that mutual exclusion between close() and + // exitIdleMode(), and since we just created a new serializer, we can be + // sure that the below function will be scheduled. + done := make(chan struct{}) + ccb.serializer.Schedule(func(_ context.Context) { + defer close(done) + + ccb.mu.Lock() + defer ccb.mu.Unlock() + + if ccb.mode != ccbModeIdle { + ccb.balancer.ExitIdle() + return + } + + // Gracefulswitch balancer does not support a switchTo operation after + // being closed. Hence we need to create a new one here. + ccb.balancer = gracefulswitch.NewBalancer(ccb, ccb.opts) + ccb.mode = ccbModeActive + channelz.Info(logger, ccb.cc.channelzID, "ccBalancerWrapper: exiting idle mode") + + }) + ccb.mu.Unlock() + + <-done +} + +func (ccb *ccBalancerWrapper) isIdleOrClosed() bool { + ccb.mu.Lock() + defer ccb.mu.Unlock() + return ccb.mode == ccbModeIdle || ccb.mode == ccbModeClosed } func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) { - if len(addrs) <= 0 { + if ccb.isIdleOrClosed() { + return nil, fmt.Errorf("grpc: cannot create SubConn when balancer is closed or idle") + } + + if len(addrs) == 0 { return nil, fmt.Errorf("grpc: cannot create SubConn with empty address list") } ac, err := ccb.cc.newAddrConn(addrs, opts) @@ -308,32 +300,26 @@ func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer channelz.Warningf(logger, ccb.cc.channelzID, "acBalancerWrapper: NewSubConn: failed to newAddrConn: %v", err) return nil, err } - acbw := &acBalancerWrapper{ac: ac, producers: make(map[balancer.ProducerBuilder]*refCountedProducer)} - acbw.ac.mu.Lock() + acbw := &acBalancerWrapper{ + ccb: ccb, + ac: ac, + producers: make(map[balancer.ProducerBuilder]*refCountedProducer), + stateListener: opts.StateListener, + } ac.acbw = acbw - acbw.ac.mu.Unlock() return acbw, nil } func (ccb *ccBalancerWrapper) RemoveSubConn(sc balancer.SubConn) { - // Before we switched the ccBalancerWrapper to use gracefulswitch.Balancer, it - // was required to handle the RemoveSubConn() method asynchronously by pushing - // the update onto the update channel. This was done to avoid a deadlock as - // switchBalancer() was holding cc.mu when calling Close() on the old - // balancer, which would in turn call RemoveSubConn(). - // - // With the use of gracefulswitch.Balancer in ccBalancerWrapper, handling this - // asynchronously is probably not required anymore since the switchTo() method - // handles the balancer switch by pushing the update onto the channel. - // TODO(easwars): Handle this inline. - acbw, ok := sc.(*acBalancerWrapper) - if !ok { - return - } - ccb.updateCh.Put(&subConnUpdate{acbw: acbw}) + // The graceful switch balancer will never call this. + logger.Errorf("ccb RemoveSubConn(%v) called unexpectedly, sc") } func (ccb *ccBalancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) { + if ccb.isIdleOrClosed() { + return + } + acbw, ok := sc.(*acBalancerWrapper) if !ok { return @@ -342,6 +328,10 @@ func (ccb *ccBalancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resol } func (ccb *ccBalancerWrapper) UpdateState(s balancer.State) { + if ccb.isIdleOrClosed() { + return + } + // Update picker before updating state. Even though the ordering here does // not matter, it can lead to multiple calls of Pick in the common start-up // case where we wait for ready and then perform an RPC. If the picker is @@ -352,6 +342,10 @@ func (ccb *ccBalancerWrapper) UpdateState(s balancer.State) { } func (ccb *ccBalancerWrapper) ResolveNow(o resolver.ResolveNowOptions) { + if ccb.isIdleOrClosed() { + return + } + ccb.cc.resolveNow(o) } @@ -362,78 +356,57 @@ func (ccb *ccBalancerWrapper) Target() string { // acBalancerWrapper is a wrapper on top of ac for balancers. // It implements balancer.SubConn interface. type acBalancerWrapper struct { + ac *addrConn // read-only + ccb *ccBalancerWrapper // read-only + stateListener func(balancer.SubConnState) + mu sync.Mutex - ac *addrConn producers map[balancer.ProducerBuilder]*refCountedProducer } -func (acbw *acBalancerWrapper) UpdateAddresses(addrs []resolver.Address) { - acbw.mu.Lock() - defer acbw.mu.Unlock() - if len(addrs) <= 0 { - acbw.ac.cc.removeAddrConn(acbw.ac, errConnDrain) - return - } - if !acbw.ac.tryUpdateAddrs(addrs) { - cc := acbw.ac.cc - opts := acbw.ac.scopts - acbw.ac.mu.Lock() - // Set old ac.acbw to nil so the Shutdown state update will be ignored - // by balancer. - // - // TODO(bar) the state transition could be wrong when tearDown() old ac - // and creating new ac, fix the transition. - acbw.ac.acbw = nil - acbw.ac.mu.Unlock() - acState := acbw.ac.getState() - acbw.ac.cc.removeAddrConn(acbw.ac, errConnDrain) - - if acState == connectivity.Shutdown { - return - } +func (acbw *acBalancerWrapper) String() string { + return fmt.Sprintf("SubConn(id:%d)", acbw.ac.channelzID.Int()) +} - newAC, err := cc.newAddrConn(addrs, opts) - if err != nil { - channelz.Warningf(logger, acbw.ac.channelzID, "acBalancerWrapper: UpdateAddresses: failed to newAddrConn: %v", err) - return - } - acbw.ac = newAC - newAC.mu.Lock() - newAC.acbw = acbw - newAC.mu.Unlock() - if acState != connectivity.Idle { - go newAC.connect() - } - } +func (acbw *acBalancerWrapper) UpdateAddresses(addrs []resolver.Address) { + acbw.ac.updateAddrs(addrs) } func (acbw *acBalancerWrapper) Connect() { - acbw.mu.Lock() - defer acbw.mu.Unlock() go acbw.ac.connect() } -func (acbw *acBalancerWrapper) getAddrConn() *addrConn { - acbw.mu.Lock() - defer acbw.mu.Unlock() - return acbw.ac -} +func (acbw *acBalancerWrapper) Shutdown() { + ccb := acbw.ccb + if ccb.isIdleOrClosed() { + // It it safe to ignore this call when the balancer is closed or in idle + // because the ClientConn takes care of closing the connections. + // + // Not returning early from here when the balancer is closed or in idle + // leads to a deadlock though, because of the following sequence of + // calls when holding cc.mu: + // cc.exitIdleMode --> ccb.enterIdleMode --> gsw.Close --> + // ccb.RemoveAddrConn --> cc.removeAddrConn + return + } -var errSubConnNotReady = status.Error(codes.Unavailable, "SubConn not currently connected") + ccb.cc.removeAddrConn(acbw.ac, errConnDrain) +} // NewStream begins a streaming RPC on the addrConn. If the addrConn is not -// ready, returns errSubConnNotReady. +// ready, blocks until it is or ctx expires. Returns an error when the context +// expires or the addrConn is shut down. func (acbw *acBalancerWrapper) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) { - transport := acbw.ac.getReadyTransport() - if transport == nil { - return nil, errSubConnNotReady + transport, err := acbw.ac.getTransport(ctx) + if err != nil { + return nil, err } return newNonRetryClientStream(ctx, desc, method, transport, acbw.ac, opts...) } // Invoke performs a unary RPC. If the addrConn is not ready, returns // errSubConnNotReady. -func (acbw *acBalancerWrapper) Invoke(ctx context.Context, method string, args interface{}, reply interface{}, opts ...CallOption) error { +func (acbw *acBalancerWrapper) Invoke(ctx context.Context, method string, args any, reply any, opts ...CallOption) error { cs, err := acbw.NewStream(ctx, unaryStreamDesc, method, opts...) if err != nil { return err diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go index 66d141fce707b..5954801122ad9 100644 --- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go +++ b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go @@ -18,8 +18,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.14.0 +// protoc-gen-go v1.31.0 +// protoc v4.22.0 // source: grpc/binlog/v1/binarylog.proto package grpc_binarylog_v1 diff --git a/vendor/google.golang.org/grpc/call.go b/vendor/google.golang.org/grpc/call.go index 9e20e4d385f9d..a67a3db02eb40 100644 --- a/vendor/google.golang.org/grpc/call.go +++ b/vendor/google.golang.org/grpc/call.go @@ -26,7 +26,12 @@ import ( // received. This is typically called by generated code. // // All errors returned by Invoke are compatible with the status package. -func (cc *ClientConn) Invoke(ctx context.Context, method string, args, reply interface{}, opts ...CallOption) error { +func (cc *ClientConn) Invoke(ctx context.Context, method string, args, reply any, opts ...CallOption) error { + if err := cc.idlenessMgr.OnCallBegin(); err != nil { + return err + } + defer cc.idlenessMgr.OnCallEnd() + // allow interceptor to see all applicable call options, which means those // configured as defaults from dial option as well as per-call options opts = combine(cc.dopts.callOptions, opts) @@ -56,13 +61,13 @@ func combine(o1 []CallOption, o2 []CallOption) []CallOption { // received. This is typically called by generated code. // // DEPRECATED: Use ClientConn.Invoke instead. -func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) error { +func Invoke(ctx context.Context, method string, args, reply any, cc *ClientConn, opts ...CallOption) error { return cc.Invoke(ctx, method, args, reply, opts...) } var unaryStreamDesc = &StreamDesc{ServerStreams: false, ClientStreams: false} -func invoke(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error { +func invoke(ctx context.Context, method string, req, reply any, cc *ClientConn, opts ...CallOption) error { cs, err := newClientStream(ctx, unaryStreamDesc, cc, method, opts...) if err != nil { return err diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index d607d4e9e243e..d53d91d5d9f36 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -24,7 +24,6 @@ import ( "fmt" "math" "net/url" - "reflect" "strings" "sync" "sync/atomic" @@ -35,9 +34,12 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/backoff" "google.golang.org/grpc/internal/channelz" "google.golang.org/grpc/internal/grpcsync" + "google.golang.org/grpc/internal/idle" + "google.golang.org/grpc/internal/pretty" iresolver "google.golang.org/grpc/internal/resolver" "google.golang.org/grpc/internal/transport" "google.golang.org/grpc/keepalive" @@ -54,8 +56,6 @@ import ( const ( // minimum time to give a connection to complete minConnectTimeout = 20 * time.Second - // must match grpclbName in grpclb/grpclb.go - grpclbName = "grpclb" ) var ( @@ -69,6 +69,9 @@ var ( errConnDrain = errors.New("grpc: the connection is drained") // errConnClosing indicates that the connection is closing. errConnClosing = errors.New("grpc: the connection is closing") + // errConnIdling indicates the the connection is being closed as the channel + // is moving to an idle mode due to inactivity. + errConnIdling = errors.New("grpc: the connection is closing due to channel idleness") // invalidDefaultServiceConfigErrPrefix is used to prefix the json parsing error for the default // service config. invalidDefaultServiceConfigErrPrefix = "grpc: the provided default service config is invalid" @@ -134,20 +137,41 @@ func (dcs *defaultConfigSelector) SelectConfig(rpcInfo iresolver.RPCInfo) (*ires // e.g. to use dns resolver, a "dns:///" prefix should be applied to the target. func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) { cc := &ClientConn{ - target: target, - csMgr: &connectivityStateManager{}, - conns: make(map[*addrConn]struct{}), - dopts: defaultDialOptions(), - blockingpicker: newPickerWrapper(), - czData: new(channelzData), - firstResolveEvent: grpcsync.NewEvent(), + target: target, + conns: make(map[*addrConn]struct{}), + dopts: defaultDialOptions(), + czData: new(channelzData), } + + // We start the channel off in idle mode, but kick it out of idle at the end + // of this method, instead of waiting for the first RPC. Other gRPC + // implementations do wait for the first RPC to kick the channel out of + // idle. But doing so would be a major behavior change for our users who are + // used to seeing the channel active after Dial. + // + // Taking this approach of kicking it out of idle at the end of this method + // allows us to share the code between channel creation and exiting idle + // mode. This will also make it easy for us to switch to starting the + // channel off in idle, if at all we ever get to do that. + cc.idlenessState = ccIdlenessStateIdle + cc.retryThrottler.Store((*retryThrottler)(nil)) cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{nil}) cc.ctx, cc.cancel = context.WithCancel(context.Background()) + cc.exitIdleCond = sync.NewCond(&cc.mu) - for _, opt := range extraDialOptions { - opt.apply(&cc.dopts) + disableGlobalOpts := false + for _, opt := range opts { + if _, ok := opt.(*disableGlobalDialOptions); ok { + disableGlobalOpts = true + break + } + } + + if !disableGlobalOpts { + for _, opt := range globalDialOptions { + opt.apply(&cc.dopts) + } } for _, opt := range opts { @@ -163,40 +187,13 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * } }() - pid := cc.dopts.channelzParentID - cc.channelzID = channelz.RegisterChannel(&channelzChannel{cc}, pid, target) - ted := &channelz.TraceEventDesc{ - Desc: "Channel created", - Severity: channelz.CtInfo, - } - if cc.dopts.channelzParentID != nil { - ted.Parent = &channelz.TraceEventDesc{ - Desc: fmt.Sprintf("Nested Channel(id:%d) created", cc.channelzID.Int()), - Severity: channelz.CtInfo, - } - } - channelz.AddTraceEvent(logger, cc.channelzID, 1, ted) - cc.csMgr.channelzID = cc.channelzID + // Register ClientConn with channelz. + cc.channelzRegistration(target) - if cc.dopts.copts.TransportCredentials == nil && cc.dopts.copts.CredsBundle == nil { - return nil, errNoTransportSecurity - } - if cc.dopts.copts.TransportCredentials != nil && cc.dopts.copts.CredsBundle != nil { - return nil, errTransportCredsAndBundle - } - if cc.dopts.copts.CredsBundle != nil && cc.dopts.copts.CredsBundle.TransportCredentials() == nil { - return nil, errNoTransportCredsInBundle - } - transportCreds := cc.dopts.copts.TransportCredentials - if transportCreds == nil { - transportCreds = cc.dopts.copts.CredsBundle.TransportCredentials() - } - if transportCreds.Info().SecurityProtocol == "insecure" { - for _, cd := range cc.dopts.copts.PerRPCCredentials { - if cd.RequireTransportSecurity() { - return nil, errTransportCredentialsMissing - } - } + cc.csMgr = newConnectivityStateManager(cc.ctx, cc.channelzID) + + if err := cc.validateTransportCredentials(); err != nil { + return nil, err } if cc.dopts.defaultServiceConfigRawJSON != nil { @@ -234,35 +231,19 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * } }() - scSet := false - if cc.dopts.scChan != nil { - // Try to get an initial service config. - select { - case sc, ok := <-cc.dopts.scChan: - if ok { - cc.sc = &sc - cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{&sc}) - scSet = true - } - default: - } - } if cc.dopts.bs == nil { cc.dopts.bs = backoff.DefaultExponential } // Determine the resolver to use. - resolverBuilder, err := cc.parseTargetAndFindResolver() - if err != nil { + if err := cc.parseTargetAndFindResolver(); err != nil { return nil, err } - cc.authority, err = determineAuthority(cc.parsedTarget.Endpoint(), cc.target, cc.dopts) - if err != nil { + if err = cc.determineAuthority(); err != nil { return nil, err } - channelz.Infof(logger, cc.channelzID, "Channel authority set to %q", cc.authority) - if cc.dopts.scChan != nil && !scSet { + if cc.dopts.scChan != nil { // Blocking wait for the initial service config. select { case sc, ok := <-cc.dopts.scChan: @@ -278,57 +259,234 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * go cc.scWatcher() } + // This creates the name resolver, load balancer, blocking picker etc. + if err := cc.exitIdleMode(); err != nil { + return nil, err + } + + // Configure idleness support with configured idle timeout or default idle + // timeout duration. Idleness can be explicitly disabled by the user, by + // setting the dial option to 0. + cc.idlenessMgr = idle.NewManager(idle.ManagerOptions{Enforcer: (*idler)(cc), Timeout: cc.dopts.idleTimeout, Logger: logger}) + + // Return early for non-blocking dials. + if !cc.dopts.block { + return cc, nil + } + + // A blocking dial blocks until the clientConn is ready. + for { + s := cc.GetState() + if s == connectivity.Idle { + cc.Connect() + } + if s == connectivity.Ready { + return cc, nil + } else if cc.dopts.copts.FailOnNonTempDialError && s == connectivity.TransientFailure { + if err = cc.connectionError(); err != nil { + terr, ok := err.(interface { + Temporary() bool + }) + if ok && !terr.Temporary() { + return nil, err + } + } + } + if !cc.WaitForStateChange(ctx, s) { + // ctx got timeout or canceled. + if err = cc.connectionError(); err != nil && cc.dopts.returnLastError { + return nil, err + } + return nil, ctx.Err() + } + } +} + +// addTraceEvent is a helper method to add a trace event on the channel. If the +// channel is a nested one, the same event is also added on the parent channel. +func (cc *ClientConn) addTraceEvent(msg string) { + ted := &channelz.TraceEventDesc{ + Desc: fmt.Sprintf("Channel %s", msg), + Severity: channelz.CtInfo, + } + if cc.dopts.channelzParentID != nil { + ted.Parent = &channelz.TraceEventDesc{ + Desc: fmt.Sprintf("Nested channel(id:%d) %s", cc.channelzID.Int(), msg), + Severity: channelz.CtInfo, + } + } + channelz.AddTraceEvent(logger, cc.channelzID, 0, ted) +} + +type idler ClientConn + +func (i *idler) EnterIdleMode() error { + return (*ClientConn)(i).enterIdleMode() +} + +func (i *idler) ExitIdleMode() error { + return (*ClientConn)(i).exitIdleMode() +} + +// exitIdleMode moves the channel out of idle mode by recreating the name +// resolver and load balancer. +func (cc *ClientConn) exitIdleMode() error { + cc.mu.Lock() + if cc.conns == nil { + cc.mu.Unlock() + return errConnClosing + } + if cc.idlenessState != ccIdlenessStateIdle { + cc.mu.Unlock() + channelz.Infof(logger, cc.channelzID, "ClientConn asked to exit idle mode, current mode is %v", cc.idlenessState) + return nil + } + + defer func() { + // When Close() and exitIdleMode() race against each other, one of the + // following two can happen: + // - Close() wins the race and runs first. exitIdleMode() runs after, and + // sees that the ClientConn is already closed and hence returns early. + // - exitIdleMode() wins the race and runs first and recreates the balancer + // and releases the lock before recreating the resolver. If Close() runs + // in this window, it will wait for exitIdleMode to complete. + // + // We achieve this synchronization using the below condition variable. + cc.mu.Lock() + cc.idlenessState = ccIdlenessStateActive + cc.exitIdleCond.Signal() + cc.mu.Unlock() + }() + + cc.idlenessState = ccIdlenessStateExitingIdle + exitedIdle := false + if cc.blockingpicker == nil { + cc.blockingpicker = newPickerWrapper(cc.dopts.copts.StatsHandlers) + } else { + cc.blockingpicker.exitIdleMode() + exitedIdle = true + } + var credsClone credentials.TransportCredentials if creds := cc.dopts.copts.TransportCredentials; creds != nil { credsClone = creds.Clone() } - cc.balancerWrapper = newCCBalancerWrapper(cc, balancer.BuildOptions{ - DialCreds: credsClone, - CredsBundle: cc.dopts.copts.CredsBundle, - Dialer: cc.dopts.copts.Dialer, - Authority: cc.authority, - CustomUserAgent: cc.dopts.copts.UserAgent, - ChannelzParentID: cc.channelzID, - Target: cc.parsedTarget, - }) + if cc.balancerWrapper == nil { + cc.balancerWrapper = newCCBalancerWrapper(cc, balancer.BuildOptions{ + DialCreds: credsClone, + CredsBundle: cc.dopts.copts.CredsBundle, + Dialer: cc.dopts.copts.Dialer, + Authority: cc.authority, + CustomUserAgent: cc.dopts.copts.UserAgent, + ChannelzParentID: cc.channelzID, + Target: cc.parsedTarget, + }) + } else { + cc.balancerWrapper.exitIdleMode() + } + cc.firstResolveEvent = grpcsync.NewEvent() + cc.mu.Unlock() - // Build the resolver. - rWrapper, err := newCCResolverWrapper(cc, resolverBuilder) - if err != nil { - return nil, fmt.Errorf("failed to build resolver: %v", err) + // This needs to be called without cc.mu because this builds a new resolver + // which might update state or report error inline which needs to be handled + // by cc.updateResolverState() which also grabs cc.mu. + if err := cc.initResolverWrapper(credsClone); err != nil { + return err + } + + if exitedIdle { + cc.addTraceEvent("exiting idle mode") } + return nil +} + +// enterIdleMode puts the channel in idle mode, and as part of it shuts down the +// name resolver, load balancer and any subchannels. +func (cc *ClientConn) enterIdleMode() error { cc.mu.Lock() - cc.resolverWrapper = rWrapper + if cc.conns == nil { + cc.mu.Unlock() + return ErrClientConnClosing + } + if cc.idlenessState != ccIdlenessStateActive { + channelz.Errorf(logger, cc.channelzID, "ClientConn asked to enter idle mode, current mode is %v", cc.idlenessState) + cc.mu.Unlock() + return nil + } + + // cc.conns == nil is a proxy for the ClientConn being closed. So, instead + // of setting it to nil here, we recreate the map. This also means that we + // don't have to do this when exiting idle mode. + conns := cc.conns + cc.conns = make(map[*addrConn]struct{}) + + // TODO: Currently, we close the resolver wrapper upon entering idle mode + // and create a new one upon exiting idle mode. This means that the + // `cc.resolverWrapper` field would be overwritten everytime we exit idle + // mode. While this means that we need to hold `cc.mu` when accessing + // `cc.resolverWrapper`, it makes the code simpler in the wrapper. We should + // try to do the same for the balancer and picker wrappers too. + cc.resolverWrapper.close() + cc.blockingpicker.enterIdleMode() + cc.balancerWrapper.enterIdleMode() + cc.csMgr.updateState(connectivity.Idle) + cc.idlenessState = ccIdlenessStateIdle cc.mu.Unlock() - // A blocking dial blocks until the clientConn is ready. - if cc.dopts.block { - for { - cc.Connect() - s := cc.GetState() - if s == connectivity.Ready { - break - } else if cc.dopts.copts.FailOnNonTempDialError && s == connectivity.TransientFailure { - if err = cc.connectionError(); err != nil { - terr, ok := err.(interface { - Temporary() bool - }) - if ok && !terr.Temporary() { - return nil, err - } - } - } - if !cc.WaitForStateChange(ctx, s) { - // ctx got timeout or canceled. - if err = cc.connectionError(); err != nil && cc.dopts.returnLastError { - return nil, err - } - return nil, ctx.Err() + go func() { + cc.addTraceEvent("entering idle mode") + for ac := range conns { + ac.tearDown(errConnIdling) + } + }() + return nil +} + +// validateTransportCredentials performs a series of checks on the configured +// transport credentials. It returns a non-nil error if any of these conditions +// are met: +// - no transport creds and no creds bundle is configured +// - both transport creds and creds bundle are configured +// - creds bundle is configured, but it lacks a transport credentials +// - insecure transport creds configured alongside call creds that require +// transport level security +// +// If none of the above conditions are met, the configured credentials are +// deemed valid and a nil error is returned. +func (cc *ClientConn) validateTransportCredentials() error { + if cc.dopts.copts.TransportCredentials == nil && cc.dopts.copts.CredsBundle == nil { + return errNoTransportSecurity + } + if cc.dopts.copts.TransportCredentials != nil && cc.dopts.copts.CredsBundle != nil { + return errTransportCredsAndBundle + } + if cc.dopts.copts.CredsBundle != nil && cc.dopts.copts.CredsBundle.TransportCredentials() == nil { + return errNoTransportCredsInBundle + } + transportCreds := cc.dopts.copts.TransportCredentials + if transportCreds == nil { + transportCreds = cc.dopts.copts.CredsBundle.TransportCredentials() + } + if transportCreds.Info().SecurityProtocol == "insecure" { + for _, cd := range cc.dopts.copts.PerRPCCredentials { + if cd.RequireTransportSecurity() { + return errTransportCredentialsMissing } } } + return nil +} - return cc, nil +// channelzRegistration registers the newly created ClientConn with channelz and +// stores the returned identifier in `cc.channelzID` and `cc.csMgr.channelzID`. +// A channelz trace event is emitted for ClientConn creation. If the newly +// created ClientConn is a nested one, i.e a valid parent ClientConn ID is +// specified via a dial option, the trace event is also added to the parent. +// +// Doesn't grab cc.mu as this method is expected to be called only at Dial time. +func (cc *ClientConn) channelzRegistration(target string) { + cc.channelzID = channelz.RegisterChannel(&channelzChannel{cc}, cc.dopts.channelzParentID, target) + cc.addTraceEvent("created") } // chainUnaryClientInterceptors chains all unary client interceptors into one. @@ -345,7 +503,7 @@ func chainUnaryClientInterceptors(cc *ClientConn) { } else if len(interceptors) == 1 { chainedInt = interceptors[0] } else { - chainedInt = func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error { + chainedInt = func(ctx context.Context, method string, req, reply any, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error { return interceptors[0](ctx, method, req, reply, cc, getChainUnaryInvoker(interceptors, 0, invoker), opts...) } } @@ -357,7 +515,7 @@ func getChainUnaryInvoker(interceptors []UnaryClientInterceptor, curr int, final if curr == len(interceptors)-1 { return finalInvoker } - return func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error { + return func(ctx context.Context, method string, req, reply any, cc *ClientConn, opts ...CallOption) error { return interceptors[curr+1](ctx, method, req, reply, cc, getChainUnaryInvoker(interceptors, curr+1, finalInvoker), opts...) } } @@ -393,13 +551,27 @@ func getChainStreamer(interceptors []StreamClientInterceptor, curr int, finalStr } } +// newConnectivityStateManager creates an connectivityStateManager with +// the specified id. +func newConnectivityStateManager(ctx context.Context, id *channelz.Identifier) *connectivityStateManager { + return &connectivityStateManager{ + channelzID: id, + pubSub: grpcsync.NewPubSub(ctx), + } +} + // connectivityStateManager keeps the connectivity.State of ClientConn. // This struct will eventually be exported so the balancers can access it. +// +// TODO: If possible, get rid of the `connectivityStateManager` type, and +// provide this functionality using the `PubSub`, to avoid keeping track of +// the connectivity state at two places. type connectivityStateManager struct { mu sync.Mutex state connectivity.State notifyChan chan struct{} channelzID *channelz.Identifier + pubSub *grpcsync.PubSub } // updateState updates the connectivity.State of ClientConn. @@ -415,6 +587,8 @@ func (csm *connectivityStateManager) updateState(state connectivity.State) { return } csm.state = state + csm.pubSub.Publish(state) + channelz.Infof(logger, csm.channelzID, "Channel Connectivity change to %v", state) if csm.notifyChan != nil { // There are other goroutines waiting on this channel. @@ -444,7 +618,7 @@ func (csm *connectivityStateManager) getNotifyChan() <-chan struct{} { type ClientConnInterface interface { // Invoke performs a unary RPC and returns after the response is received // into reply. - Invoke(ctx context.Context, method string, args interface{}, reply interface{}, opts ...CallOption) error + Invoke(ctx context.Context, method string, args any, reply any, opts ...CallOption) error // NewStream begins a streaming RPC. NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) } @@ -474,7 +648,9 @@ type ClientConn struct { authority string // See determineAuthority(). dopts dialOptions // Default and user specified dial options. channelzID *channelz.Identifier // Channelz identifier for the channel. + resolverBuilder resolver.Builder // See parseTargetAndFindResolver(). balancerWrapper *ccBalancerWrapper // Uses gracefulswitch.balancer underneath. + idlenessMgr idle.Manager // The following provide their own synchronization, and therefore don't // require cc.mu to be held to access them. @@ -495,11 +671,44 @@ type ClientConn struct { sc *ServiceConfig // Latest service config received from the resolver. conns map[*addrConn]struct{} // Set to nil on close. mkp keepalive.ClientParameters // May be updated upon receipt of a GoAway. + idlenessState ccIdlenessState // Tracks idleness state of the channel. + exitIdleCond *sync.Cond // Signalled when channel exits idle. lceMu sync.Mutex // protects lastConnectionError lastConnectionError error } +// ccIdlenessState tracks the idleness state of the channel. +// +// Channels start off in `active` and move to `idle` after a period of +// inactivity. When moving back to `active` upon an incoming RPC, they +// transition through `exiting_idle`. This state is useful for synchronization +// with Close(). +// +// This state tracking is mostly for self-protection. The idlenessManager is +// expected to keep track of the state as well, and is expected not to call into +// the ClientConn unnecessarily. +type ccIdlenessState int8 + +const ( + ccIdlenessStateActive ccIdlenessState = iota + ccIdlenessStateIdle + ccIdlenessStateExitingIdle +) + +func (s ccIdlenessState) String() string { + switch s { + case ccIdlenessStateActive: + return "active" + case ccIdlenessStateIdle: + return "idle" + case ccIdlenessStateExitingIdle: + return "exitingIdle" + default: + return "unknown" + } +} + // WaitForStateChange waits until the connectivity.State of ClientConn changes from sourceState or // ctx expires. A true value is returned in former case and false in latter. // @@ -539,7 +748,10 @@ func (cc *ClientConn) GetState() connectivity.State { // Notice: This API is EXPERIMENTAL and may be changed or removed in a later // release. func (cc *ClientConn) Connect() { - cc.balancerWrapper.exitIdle() + cc.exitIdleMode() + // If the ClientConn was not in idle mode, we need to call ExitIdle on the + // LB policy so that connections can be created. + cc.balancerWrapper.exitIdleMode() } func (cc *ClientConn) scWatcher() { @@ -588,6 +800,10 @@ func init() { panic(fmt.Sprintf("impossible error parsing empty service config: %v", cfg.Err)) } emptyServiceConfig = cfg.Config.(*ServiceConfig) + + internal.SubscribeToConnectivityStateChanges = func(cc *ClientConn, s grpcsync.Subscriber) func() { + return cc.csMgr.pubSub.Subscribe(s) + } } func (cc *ClientConn) maybeApplyDefaultServiceConfig(addrs []resolver.Address) { @@ -696,6 +912,20 @@ func (cc *ClientConn) handleSubConnStateChange(sc balancer.SubConn, s connectivi cc.balancerWrapper.updateSubConnState(sc, s, err) } +// Makes a copy of the input addresses slice and clears out the balancer +// attributes field. Addresses are passed during subconn creation and address +// update operations. In both cases, we will clear the balancer attributes by +// calling this function, and therefore we will be able to use the Equal method +// provided by the resolver.Address type for comparison. +func copyAddressesWithoutBalancerAttributes(in []resolver.Address) []resolver.Address { + out := make([]resolver.Address, len(in)) + for i := range in { + out[i] = in[i] + out[i].BalancerAttributes = nil + } + return out +} + // newAddrConn creates an addrConn for addrs and adds it to cc.conns. // // Caller needs to make sure len(addrs) > 0. @@ -703,11 +933,12 @@ func (cc *ClientConn) newAddrConn(addrs []resolver.Address, opts balancer.NewSub ac := &addrConn{ state: connectivity.Idle, cc: cc, - addrs: addrs, + addrs: copyAddressesWithoutBalancerAttributes(addrs), scopts: opts, dopts: cc.dopts, czData: new(channelzData), resetBackoff: make(chan struct{}), + stateChan: make(chan struct{}), } ac.ctx, ac.cancel = context.WithCancel(cc.ctx) // Track ac in cc. This needs to be done before any getTransport(...) is called. @@ -801,9 +1032,6 @@ func (ac *addrConn) connect() error { ac.mu.Unlock() return nil } - // Update connectivity state within the lock to prevent subsequent or - // concurrent calls from resetting the transport more than once. - ac.updateConnectivityState(connectivity.Connecting, nil) ac.mu.Unlock() ac.resetTransport() @@ -822,58 +1050,63 @@ func equalAddresses(a, b []resolver.Address) bool { return true } -// tryUpdateAddrs tries to update ac.addrs with the new addresses list. -// -// If ac is TransientFailure, it updates ac.addrs and returns true. The updated -// addresses will be picked up by retry in the next iteration after backoff. -// -// If ac is Shutdown or Idle, it updates ac.addrs and returns true. -// -// If the addresses is the same as the old list, it does nothing and returns -// true. -// -// If ac is Connecting, it returns false. The caller should tear down the ac and -// create a new one. Note that the backoff will be reset when this happens. -// -// If ac is Ready, it checks whether current connected address of ac is in the -// new addrs list. -// - If true, it updates ac.addrs and returns true. The ac will keep using -// the existing connection. -// - If false, it does nothing and returns false. -func (ac *addrConn) tryUpdateAddrs(addrs []resolver.Address) bool { +// updateAddrs updates ac.addrs with the new addresses list and handles active +// connections or connection attempts. +func (ac *addrConn) updateAddrs(addrs []resolver.Address) { ac.mu.Lock() - defer ac.mu.Unlock() - channelz.Infof(logger, ac.channelzID, "addrConn: tryUpdateAddrs curAddr: %v, addrs: %v", ac.curAddr, addrs) + channelz.Infof(logger, ac.channelzID, "addrConn: updateAddrs curAddr: %v, addrs: %v", pretty.ToJSON(ac.curAddr), pretty.ToJSON(addrs)) + + addrs = copyAddressesWithoutBalancerAttributes(addrs) + if equalAddresses(ac.addrs, addrs) { + ac.mu.Unlock() + return + } + + ac.addrs = addrs + if ac.state == connectivity.Shutdown || ac.state == connectivity.TransientFailure || ac.state == connectivity.Idle { - ac.addrs = addrs - return true + // We were not connecting, so do nothing but update the addresses. + ac.mu.Unlock() + return } - if equalAddresses(ac.addrs, addrs) { - return true + if ac.state == connectivity.Ready { + // Try to find the connected address. + for _, a := range addrs { + a.ServerName = ac.cc.getServerName(a) + if a.Equal(ac.curAddr) { + // We are connected to a valid address, so do nothing but + // update the addresses. + ac.mu.Unlock() + return + } + } } - if ac.state == connectivity.Connecting { - return false - } + // We are either connected to the wrong address or currently connecting. + // Stop the current iteration and restart. - // ac.state is Ready, try to find the connected address. - var curAddrFound bool - for _, a := range addrs { - a.ServerName = ac.cc.getServerName(a) - if reflect.DeepEqual(ac.curAddr, a) { - curAddrFound = true - break - } + ac.cancel() + ac.ctx, ac.cancel = context.WithCancel(ac.cc.ctx) + + // We have to defer here because GracefulClose => Close => onClose, which + // requires locking ac.mu. + if ac.transport != nil { + defer ac.transport.GracefulClose() + ac.transport = nil } - channelz.Infof(logger, ac.channelzID, "addrConn: tryUpdateAddrs curAddrFound: %v", curAddrFound) - if curAddrFound { - ac.addrs = addrs + + if len(addrs) == 0 { + ac.updateConnectivityState(connectivity.Idle, nil) } - return curAddrFound + ac.mu.Unlock() + + // Since we were connecting/connected, we should start a new connection + // attempt. + go ac.resetTransport() } // getServerName determines the serverName to be used in the connection @@ -964,23 +1197,13 @@ func (cc *ClientConn) applyServiceConfigAndBalancer(sc *ServiceConfig, configSel } var newBalancerName string - if cc.sc != nil && cc.sc.lbConfig != nil { + if cc.sc == nil || (cc.sc.lbConfig == nil && cc.sc.LB == nil) { + // No service config or no LB policy specified in config. + newBalancerName = PickFirstBalancerName + } else if cc.sc.lbConfig != nil { newBalancerName = cc.sc.lbConfig.name - } else { - var isGRPCLB bool - for _, a := range addrs { - if a.Type == resolver.GRPCLB { - isGRPCLB = true - break - } - } - if isGRPCLB { - newBalancerName = grpclbName - } else if cc.sc != nil && cc.sc.LB != nil { - newBalancerName = *cc.sc.LB - } else { - newBalancerName = PickFirstBalancerName - } + } else { // cc.sc.LB != nil + newBalancerName = *cc.sc.LB } cc.balancerWrapper.switchTo(newBalancerName) } @@ -1019,46 +1242,50 @@ func (cc *ClientConn) ResetConnectBackoff() { // Close tears down the ClientConn and all underlying connections. func (cc *ClientConn) Close() error { - defer cc.cancel() + defer func() { + cc.cancel() + <-cc.csMgr.pubSub.Done() + }() cc.mu.Lock() if cc.conns == nil { cc.mu.Unlock() return ErrClientConnClosing } + + for cc.idlenessState == ccIdlenessStateExitingIdle { + cc.exitIdleCond.Wait() + } + conns := cc.conns cc.conns = nil cc.csMgr.updateState(connectivity.Shutdown) + pWrapper := cc.blockingpicker rWrapper := cc.resolverWrapper - cc.resolverWrapper = nil bWrapper := cc.balancerWrapper + idlenessMgr := cc.idlenessMgr cc.mu.Unlock() // The order of closing matters here since the balancer wrapper assumes the // picker is closed before it is closed. - cc.blockingpicker.close() + if pWrapper != nil { + pWrapper.close() + } if bWrapper != nil { bWrapper.close() } if rWrapper != nil { rWrapper.close() } + if idlenessMgr != nil { + idlenessMgr.Close() + } for ac := range conns { ac.tearDown(ErrClientConnClosing) } - ted := &channelz.TraceEventDesc{ - Desc: "Channel deleted", - Severity: channelz.CtInfo, - } - if cc.dopts.channelzParentID != nil { - ted.Parent = &channelz.TraceEventDesc{ - Desc: fmt.Sprintf("Nested channel(id:%d) deleted", cc.channelzID.Int()), - Severity: channelz.CtInfo, - } - } - channelz.AddTraceEvent(logger, cc.channelzID, 0, ted) + cc.addTraceEvent("deleted") // TraceEvent needs to be called before RemoveEntry, as TraceEvent may add // trace reference to the entity being deleted, and thus prevent it from being // deleted right away. @@ -1088,7 +1315,8 @@ type addrConn struct { addrs []resolver.Address // All addresses that the resolver resolved to. // Use updateConnectivityState for updating addrConn's connectivity state. - state connectivity.State + state connectivity.State + stateChan chan struct{} // closed and recreated on every state change. backoffIdx int // Needs to be stateful for resetConnectBackoff. resetBackoff chan struct{} @@ -1102,8 +1330,15 @@ func (ac *addrConn) updateConnectivityState(s connectivity.State, lastErr error) if ac.state == s { return } + // When changing states, reset the state change channel. + close(ac.stateChan) + ac.stateChan = make(chan struct{}) ac.state = s - channelz.Infof(logger, ac.channelzID, "Subchannel Connectivity change to %v", s) + if lastErr == nil { + channelz.Infof(logger, ac.channelzID, "Subchannel Connectivity change to %v", s) + } else { + channelz.Infof(logger, ac.channelzID, "Subchannel Connectivity change to %v, last error: %s", s, lastErr) + } ac.cc.handleSubConnStateChange(ac.acbw, s, lastErr) } @@ -1123,7 +1358,8 @@ func (ac *addrConn) adjustParams(r transport.GoAwayReason) { func (ac *addrConn) resetTransport() { ac.mu.Lock() - if ac.state == connectivity.Shutdown { + acCtx := ac.ctx + if acCtx.Err() != nil { ac.mu.Unlock() return } @@ -1151,15 +1387,16 @@ func (ac *addrConn) resetTransport() { ac.updateConnectivityState(connectivity.Connecting, nil) ac.mu.Unlock() - if err := ac.tryAllAddrs(addrs, connectDeadline); err != nil { + if err := ac.tryAllAddrs(acCtx, addrs, connectDeadline); err != nil { ac.cc.resolveNow(resolver.ResolveNowOptions{}) - // After exhausting all addresses, the addrConn enters - // TRANSIENT_FAILURE. ac.mu.Lock() - if ac.state == connectivity.Shutdown { + if acCtx.Err() != nil { + // addrConn was torn down. ac.mu.Unlock() return } + // After exhausting all addresses, the addrConn enters + // TRANSIENT_FAILURE. ac.updateConnectivityState(connectivity.TransientFailure, err) // Backoff. @@ -1174,13 +1411,13 @@ func (ac *addrConn) resetTransport() { ac.mu.Unlock() case <-b: timer.Stop() - case <-ac.ctx.Done(): + case <-acCtx.Done(): timer.Stop() return } ac.mu.Lock() - if ac.state != connectivity.Shutdown { + if acCtx.Err() == nil { ac.updateConnectivityState(connectivity.Idle, err) } ac.mu.Unlock() @@ -1195,14 +1432,13 @@ func (ac *addrConn) resetTransport() { // tryAllAddrs tries to creates a connection to the addresses, and stop when at // the first successful one. It returns an error if no address was successfully // connected, or updates ac appropriately with the new transport. -func (ac *addrConn) tryAllAddrs(addrs []resolver.Address, connectDeadline time.Time) error { +func (ac *addrConn) tryAllAddrs(ctx context.Context, addrs []resolver.Address, connectDeadline time.Time) error { var firstConnErr error for _, addr := range addrs { - ac.mu.Lock() - if ac.state == connectivity.Shutdown { - ac.mu.Unlock() + if ctx.Err() != nil { return errConnClosing } + ac.mu.Lock() ac.cc.mu.RLock() ac.dopts.copts.KeepaliveParams = ac.cc.mkp @@ -1216,7 +1452,7 @@ func (ac *addrConn) tryAllAddrs(addrs []resolver.Address, connectDeadline time.T channelz.Infof(logger, ac.channelzID, "Subchannel picks a new address %q to connect", addr.Addr) - err := ac.createTransport(addr, copts, connectDeadline) + err := ac.createTransport(ctx, addr, copts, connectDeadline) if err == nil { return nil } @@ -1233,19 +1469,20 @@ func (ac *addrConn) tryAllAddrs(addrs []resolver.Address, connectDeadline time.T // createTransport creates a connection to addr. It returns an error if the // address was not successfully connected, or updates ac appropriately with the // new transport. -func (ac *addrConn) createTransport(addr resolver.Address, copts transport.ConnectOptions, connectDeadline time.Time) error { +func (ac *addrConn) createTransport(ctx context.Context, addr resolver.Address, copts transport.ConnectOptions, connectDeadline time.Time) error { addr.ServerName = ac.cc.getServerName(addr) - hctx, hcancel := context.WithCancel(ac.ctx) + hctx, hcancel := context.WithCancel(ctx) onClose := func(r transport.GoAwayReason) { ac.mu.Lock() defer ac.mu.Unlock() // adjust params based on GoAwayReason ac.adjustParams(r) - if ac.state == connectivity.Shutdown { - // Already shut down. tearDown() already cleared the transport and - // canceled hctx via ac.ctx, and we expected this connection to be - // closed, so do nothing here. + if ctx.Err() != nil { + // Already shut down or connection attempt canceled. tearDown() or + // updateAddrs() already cleared the transport and canceled hctx + // via ac.ctx, and we expected this connection to be closed, so do + // nothing here. return } hcancel() @@ -1264,7 +1501,7 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne ac.updateConnectivityState(connectivity.Idle, nil) } - connectCtx, cancel := context.WithDeadline(ac.ctx, connectDeadline) + connectCtx, cancel := context.WithDeadline(ctx, connectDeadline) defer cancel() copts.ChannelzParentID = ac.channelzID @@ -1281,7 +1518,7 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne ac.mu.Lock() defer ac.mu.Unlock() - if ac.state == connectivity.Shutdown { + if ctx.Err() != nil { // This can happen if the subConn was removed while in `Connecting` // state. tearDown() would have set the state to `Shutdown`, but // would not have closed the transport since ac.transport would not @@ -1293,6 +1530,9 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne // The error we pass to Close() is immaterial since there are no open // streams at this point, so no trailers with error details will be sent // out. We just need to pass a non-nil error. + // + // This can also happen when updateAddrs is called during a connection + // attempt. go newTr.Close(transport.ErrConnClosing) return nil } @@ -1352,7 +1592,7 @@ func (ac *addrConn) startHealthCheck(ctx context.Context) { // Set up the health check helper functions. currentTr := ac.transport - newStream := func(method string) (interface{}, error) { + newStream := func(method string) (any, error) { ac.mu.Lock() if ac.transport != currentTr { ac.mu.Unlock() @@ -1400,6 +1640,29 @@ func (ac *addrConn) getReadyTransport() transport.ClientTransport { return nil } +// getTransport waits until the addrconn is ready and returns the transport. +// If the context expires first, returns an appropriate status. If the +// addrConn is stopped first, returns an Unavailable status error. +func (ac *addrConn) getTransport(ctx context.Context) (transport.ClientTransport, error) { + for ctx.Err() == nil { + ac.mu.Lock() + t, state, sc := ac.transport, ac.state, ac.stateChan + ac.mu.Unlock() + if state == connectivity.Ready { + return t, nil + } + if state == connectivity.Shutdown { + return nil, status.Errorf(codes.Unavailable, "SubConn shutting down") + } + + select { + case <-ctx.Done(): + case <-sc: + } + } + return nil, status.FromContextError(ctx.Err()).Err() +} + // tearDown starts to tear down the addrConn. // // Note that tearDown doesn't remove ac from ac.cc.conns, so the addrConn struct @@ -1527,6 +1790,9 @@ func (c *channelzChannel) ChannelzMetric() *channelz.ChannelInternalMetric { // referenced by users. var ErrClientConnTimeout = errors.New("grpc: timed out when dialing") +// getResolver finds the scheme in the cc's resolvers or the global registry. +// scheme should always be lowercase (typically by virtue of url.Parse() +// performing proper RFC3986 behavior). func (cc *ClientConn) getResolver(scheme string) resolver.Builder { for _, rb := range cc.dopts.resolvers { if scheme == rb.Scheme() { @@ -1548,7 +1814,14 @@ func (cc *ClientConn) connectionError() error { return cc.lastConnectionError } -func (cc *ClientConn) parseTargetAndFindResolver() (resolver.Builder, error) { +// parseTargetAndFindResolver parses the user's dial target and stores the +// parsed target in `cc.parsedTarget`. +// +// The resolver to use is determined based on the scheme in the parsed target +// and the same is stored in `cc.resolverBuilder`. +// +// Doesn't grab cc.mu as this method is expected to be called only at Dial time. +func (cc *ClientConn) parseTargetAndFindResolver() error { channelz.Infof(logger, cc.channelzID, "original dial target is: %q", cc.target) var rb resolver.Builder @@ -1560,7 +1833,8 @@ func (cc *ClientConn) parseTargetAndFindResolver() (resolver.Builder, error) { rb = cc.getResolver(parsedTarget.URL.Scheme) if rb != nil { cc.parsedTarget = parsedTarget - return rb, nil + cc.resolverBuilder = rb + return nil } } @@ -1575,38 +1849,98 @@ func (cc *ClientConn) parseTargetAndFindResolver() (resolver.Builder, error) { parsedTarget, err = parseTarget(canonicalTarget) if err != nil { channelz.Infof(logger, cc.channelzID, "dial target %q parse failed: %v", canonicalTarget, err) - return nil, err + return err } channelz.Infof(logger, cc.channelzID, "parsed dial target is: %+v", parsedTarget) rb = cc.getResolver(parsedTarget.URL.Scheme) if rb == nil { - return nil, fmt.Errorf("could not get resolver for default scheme: %q", parsedTarget.URL.Scheme) + return fmt.Errorf("could not get resolver for default scheme: %q", parsedTarget.URL.Scheme) } cc.parsedTarget = parsedTarget - return rb, nil + cc.resolverBuilder = rb + return nil } // parseTarget uses RFC 3986 semantics to parse the given target into a -// resolver.Target struct containing scheme, authority and url. Query -// params are stripped from the endpoint. +// resolver.Target struct containing url. Query params are stripped from the +// endpoint. func parseTarget(target string) (resolver.Target, error) { u, err := url.Parse(target) if err != nil { return resolver.Target{}, err } - return resolver.Target{ - Scheme: u.Scheme, - Authority: u.Host, - URL: *u, - }, nil + return resolver.Target{URL: *u}, nil +} + +func encodeAuthority(authority string) string { + const upperhex = "0123456789ABCDEF" + + // Return for characters that must be escaped as per + // Valid chars are mentioned here: + // https://datatracker.ietf.org/doc/html/rfc3986#section-3.2 + shouldEscape := func(c byte) bool { + // Alphanum are always allowed. + if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' { + return false + } + switch c { + case '-', '_', '.', '~': // Unreserved characters + return false + case '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=': // Subdelim characters + return false + case ':', '[', ']', '@': // Authority related delimeters + return false + } + // Everything else must be escaped. + return true + } + + hexCount := 0 + for i := 0; i < len(authority); i++ { + c := authority[i] + if shouldEscape(c) { + hexCount++ + } + } + + if hexCount == 0 { + return authority + } + + required := len(authority) + 2*hexCount + t := make([]byte, required) + + j := 0 + // This logic is a barebones version of escape in the go net/url library. + for i := 0; i < len(authority); i++ { + switch c := authority[i]; { + case shouldEscape(c): + t[j] = '%' + t[j+1] = upperhex[c>>4] + t[j+2] = upperhex[c&15] + j += 3 + default: + t[j] = authority[i] + j++ + } + } + return string(t) } // Determine channel authority. The order of precedence is as follows: // - user specified authority override using `WithAuthority` dial option // - creds' notion of server name for the authentication handshake // - endpoint from dial target of the form "scheme://[authority]/endpoint" -func determineAuthority(endpoint, target string, dopts dialOptions) (string, error) { +// +// Stores the determined authority in `cc.authority`. +// +// Returns a non-nil error if the authority returned by the transport +// credentials do not match the authority configured through the dial option. +// +// Doesn't grab cc.mu as this method is expected to be called only at Dial time. +func (cc *ClientConn) determineAuthority() error { + dopts := cc.dopts // Historically, we had two options for users to specify the serverName or // authority for a channel. One was through the transport credentials // (either in its constructor, or through the OverrideServerName() method). @@ -1623,25 +1957,62 @@ func determineAuthority(endpoint, target string, dopts dialOptions) (string, err } authorityFromDialOption := dopts.authority if (authorityFromCreds != "" && authorityFromDialOption != "") && authorityFromCreds != authorityFromDialOption { - return "", fmt.Errorf("ClientConn's authority from transport creds %q and dial option %q don't match", authorityFromCreds, authorityFromDialOption) + return fmt.Errorf("ClientConn's authority from transport creds %q and dial option %q don't match", authorityFromCreds, authorityFromDialOption) } + endpoint := cc.parsedTarget.Endpoint() + target := cc.target switch { case authorityFromDialOption != "": - return authorityFromDialOption, nil + cc.authority = authorityFromDialOption case authorityFromCreds != "": - return authorityFromCreds, nil + cc.authority = authorityFromCreds case strings.HasPrefix(target, "unix:") || strings.HasPrefix(target, "unix-abstract:"): // TODO: remove when the unix resolver implements optional interface to // return channel authority. - return "localhost", nil + cc.authority = "localhost" case strings.HasPrefix(endpoint, ":"): - return "localhost" + endpoint, nil + cc.authority = "localhost" + endpoint default: // TODO: Define an optional interface on the resolver builder to return // the channel authority given the user's dial target. For resolvers // which don't implement this interface, we will use the endpoint from // "scheme://authority/endpoint" as the default authority. - return endpoint, nil + // Escape the endpoint to handle use cases where the endpoint + // might not be a valid authority by default. + // For example an endpoint which has multiple paths like + // 'a/b/c', which is not a valid authority by default. + cc.authority = encodeAuthority(endpoint) + } + channelz.Infof(logger, cc.channelzID, "Channel authority set to %q", cc.authority) + return nil +} + +// initResolverWrapper creates a ccResolverWrapper, which builds the name +// resolver. This method grabs the lock to assign the newly built resolver +// wrapper to the cc.resolverWrapper field. +func (cc *ClientConn) initResolverWrapper(creds credentials.TransportCredentials) error { + rw, err := newCCResolverWrapper(cc, ccResolverWrapperOpts{ + target: cc.parsedTarget, + builder: cc.resolverBuilder, + bOpts: resolver.BuildOptions{ + DisableServiceConfig: cc.dopts.disableServiceConfig, + DialCreds: creds, + CredsBundle: cc.dopts.copts.CredsBundle, + Dialer: cc.dopts.copts.Dialer, + }, + channelzID: cc.channelzID, + }) + if err != nil { + return fmt.Errorf("failed to build resolver: %v", err) } + // Resolver implementations may report state update or error inline when + // built (or right after), and this is handled in cc.updateResolverState. + // Also, an error from the resolver might lead to a re-resolution request + // from the balancer, which is handled in resolveNow() where + // `cc.resolverWrapper` is accessed. Hence, we need to hold the lock here. + cc.mu.Lock() + cc.resolverWrapper = rw + cc.mu.Unlock() + return nil } diff --git a/vendor/google.golang.org/grpc/codec.go b/vendor/google.golang.org/grpc/codec.go index 129776547811b..411e3dfd47ccd 100644 --- a/vendor/google.golang.org/grpc/codec.go +++ b/vendor/google.golang.org/grpc/codec.go @@ -27,8 +27,8 @@ import ( // omits the name/string, which vary between the two and are not needed for // anything besides the registry in the encoding package. type baseCodec interface { - Marshal(v interface{}) ([]byte, error) - Unmarshal(data []byte, v interface{}) error + Marshal(v any) ([]byte, error) + Unmarshal(data []byte, v any) error } var _ baseCodec = Codec(nil) @@ -41,9 +41,9 @@ var _ baseCodec = encoding.Codec(nil) // Deprecated: use encoding.Codec instead. type Codec interface { // Marshal returns the wire format of v. - Marshal(v interface{}) ([]byte, error) + Marshal(v any) ([]byte, error) // Unmarshal parses the wire format into v. - Unmarshal(data []byte, v interface{}) error + Unmarshal(data []byte, v any) error // String returns the name of the Codec implementation. This is unused by // gRPC. String() string diff --git a/vendor/google.golang.org/grpc/codes/code_string.go b/vendor/google.golang.org/grpc/codes/code_string.go index 0b206a57822af..934fac2b090ae 100644 --- a/vendor/google.golang.org/grpc/codes/code_string.go +++ b/vendor/google.golang.org/grpc/codes/code_string.go @@ -18,7 +18,15 @@ package codes -import "strconv" +import ( + "strconv" + + "google.golang.org/grpc/internal" +) + +func init() { + internal.CanonicalString = canonicalString +} func (c Code) String() string { switch c { @@ -60,3 +68,44 @@ func (c Code) String() string { return "Code(" + strconv.FormatInt(int64(c), 10) + ")" } } + +func canonicalString(c Code) string { + switch c { + case OK: + return "OK" + case Canceled: + return "CANCELLED" + case Unknown: + return "UNKNOWN" + case InvalidArgument: + return "INVALID_ARGUMENT" + case DeadlineExceeded: + return "DEADLINE_EXCEEDED" + case NotFound: + return "NOT_FOUND" + case AlreadyExists: + return "ALREADY_EXISTS" + case PermissionDenied: + return "PERMISSION_DENIED" + case ResourceExhausted: + return "RESOURCE_EXHAUSTED" + case FailedPrecondition: + return "FAILED_PRECONDITION" + case Aborted: + return "ABORTED" + case OutOfRange: + return "OUT_OF_RANGE" + case Unimplemented: + return "UNIMPLEMENTED" + case Internal: + return "INTERNAL" + case Unavailable: + return "UNAVAILABLE" + case DataLoss: + return "DATA_LOSS" + case Unauthenticated: + return "UNAUTHENTICATED" + default: + return "CODE(" + strconv.FormatInt(int64(c), 10) + ")" + } +} diff --git a/vendor/google.golang.org/grpc/dialoptions.go b/vendor/google.golang.org/grpc/dialoptions.go index 4866da101c607..1fd0d5c127f4f 100644 --- a/vendor/google.golang.org/grpc/dialoptions.go +++ b/vendor/google.golang.org/grpc/dialoptions.go @@ -38,13 +38,14 @@ import ( func init() { internal.AddGlobalDialOptions = func(opt ...DialOption) { - extraDialOptions = append(extraDialOptions, opt...) + globalDialOptions = append(globalDialOptions, opt...) } internal.ClearGlobalDialOptions = func() { - extraDialOptions = nil + globalDialOptions = nil } internal.WithBinaryLogger = withBinaryLogger internal.JoinDialOptions = newJoinDialOption + internal.DisableGlobalDialOptions = newDisableGlobalDialOptions } // dialOptions configure a Dial call. dialOptions are set by the DialOption @@ -76,6 +77,8 @@ type dialOptions struct { defaultServiceConfig *ServiceConfig // defaultServiceConfig is parsed from defaultServiceConfigRawJSON. defaultServiceConfigRawJSON *string resolvers []resolver.Builder + idleTimeout time.Duration + recvBufferPool SharedBufferPool } // DialOption configures how we set up the connection. @@ -83,7 +86,7 @@ type DialOption interface { apply(*dialOptions) } -var extraDialOptions []DialOption +var globalDialOptions []DialOption // EmptyDialOption does not alter the dial configuration. It can be embedded in // another structure to build custom dial options. @@ -96,6 +99,16 @@ type EmptyDialOption struct{} func (EmptyDialOption) apply(*dialOptions) {} +type disableGlobalDialOptions struct{} + +func (disableGlobalDialOptions) apply(*dialOptions) {} + +// newDisableGlobalDialOptions returns a DialOption that prevents the ClientConn +// from applying the global DialOptions (set via AddGlobalDialOptions). +func newDisableGlobalDialOptions() DialOption { + return &disableGlobalDialOptions{} +} + // funcDialOption wraps a function that modifies dialOptions into an // implementation of the DialOption interface. type funcDialOption struct { @@ -126,6 +139,20 @@ func newJoinDialOption(opts ...DialOption) DialOption { return &joinDialOption{opts: opts} } +// WithSharedWriteBuffer allows reusing per-connection transport write buffer. +// If this option is set to true every connection will release the buffer after +// flushing the data on the wire. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func WithSharedWriteBuffer(val bool) DialOption { + return newFuncDialOption(func(o *dialOptions) { + o.copts.SharedWriteBuffer = val + }) +} + // WithWriteBufferSize determines how much data can be batched before doing a // write on the wire. The corresponding memory allocation for this buffer will // be twice the size to keep syscalls low. The default value for this buffer is @@ -284,6 +311,9 @@ func withBackoff(bs internalbackoff.Strategy) DialOption { // WithBlock returns a DialOption which makes callers of Dial block until the // underlying connection is up. Without this, Dial returns immediately and // connecting the server happens in background. +// +// Use of this feature is not recommended. For more information, please see: +// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md func WithBlock() DialOption { return newFuncDialOption(func(o *dialOptions) { o.block = true @@ -295,6 +325,9 @@ func WithBlock() DialOption { // the context.DeadlineExceeded error. // Implies WithBlock() // +// Use of this feature is not recommended. For more information, please see: +// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md +// // # Experimental // // Notice: This API is EXPERIMENTAL and may be changed or removed in a @@ -437,6 +470,9 @@ func withBinaryLogger(bl binarylog.Logger) DialOption { // FailOnNonTempDialError only affects the initial dial, and does not do // anything useful unless you are also using WithBlock(). // +// Use of this feature is not recommended. For more information, please see: +// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md +// // # Experimental // // Notice: This API is EXPERIMENTAL and may be changed or removed in a @@ -607,6 +643,7 @@ func defaultDialOptions() dialOptions { ReadBufferSize: defaultReadBufSize, UseProxy: true, }, + recvBufferPool: nopBufferPool{}, } } @@ -635,3 +672,44 @@ func WithResolvers(rs ...resolver.Builder) DialOption { o.resolvers = append(o.resolvers, rs...) }) } + +// WithIdleTimeout returns a DialOption that configures an idle timeout for the +// channel. If the channel is idle for the configured timeout, i.e there are no +// ongoing RPCs and no new RPCs are initiated, the channel will enter idle mode +// and as a result the name resolver and load balancer will be shut down. The +// channel will exit idle mode when the Connect() method is called or when an +// RPC is initiated. +// +// By default this feature is disabled, which can also be explicitly configured +// by passing zero to this function. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func WithIdleTimeout(d time.Duration) DialOption { + return newFuncDialOption(func(o *dialOptions) { + o.idleTimeout = d + }) +} + +// WithRecvBufferPool returns a DialOption that configures the ClientConn +// to use the provided shared buffer pool for parsing incoming messages. Depending +// on the application's workload, this could result in reduced memory allocation. +// +// If you are unsure about how to implement a memory pool but want to utilize one, +// begin with grpc.NewSharedBufferPool. +// +// Note: The shared buffer pool feature will not be active if any of the following +// options are used: WithStatsHandler, EnableTracing, or binary logging. In such +// cases, the shared buffer pool will be ignored. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func WithRecvBufferPool(bufferPool SharedBufferPool) DialOption { + return newFuncDialOption(func(o *dialOptions) { + o.recvBufferPool = bufferPool + }) +} diff --git a/vendor/google.golang.org/grpc/encoding/encoding.go b/vendor/google.golang.org/grpc/encoding/encoding.go index 07a5861352a6f..69d5580b6adfd 100644 --- a/vendor/google.golang.org/grpc/encoding/encoding.go +++ b/vendor/google.golang.org/grpc/encoding/encoding.go @@ -90,9 +90,9 @@ func GetCompressor(name string) Compressor { // methods can be called from concurrent goroutines. type Codec interface { // Marshal returns the wire format of v. - Marshal(v interface{}) ([]byte, error) + Marshal(v any) ([]byte, error) // Unmarshal parses the wire format into v. - Unmarshal(data []byte, v interface{}) error + Unmarshal(data []byte, v any) error // Name returns the name of the Codec implementation. The returned string // will be used as part of content type in transmission. The result must be // static; the result cannot change between calls. diff --git a/vendor/google.golang.org/grpc/encoding/proto/proto.go b/vendor/google.golang.org/grpc/encoding/proto/proto.go index 3009b35afe7d3..0ee3d3bae9739 100644 --- a/vendor/google.golang.org/grpc/encoding/proto/proto.go +++ b/vendor/google.golang.org/grpc/encoding/proto/proto.go @@ -37,7 +37,7 @@ func init() { // codec is a Codec implementation with protobuf. It is the default codec for gRPC. type codec struct{} -func (codec) Marshal(v interface{}) ([]byte, error) { +func (codec) Marshal(v any) ([]byte, error) { vv, ok := v.(proto.Message) if !ok { return nil, fmt.Errorf("failed to marshal, message is %T, want proto.Message", v) @@ -45,7 +45,7 @@ func (codec) Marshal(v interface{}) ([]byte, error) { return proto.Marshal(vv) } -func (codec) Unmarshal(data []byte, v interface{}) error { +func (codec) Unmarshal(data []byte, v any) error { vv, ok := v.(proto.Message) if !ok { return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v) diff --git a/vendor/google.golang.org/grpc/grpclog/component.go b/vendor/google.golang.org/grpc/grpclog/component.go index 8358dd6e2abb9..ac73c9ced2553 100644 --- a/vendor/google.golang.org/grpc/grpclog/component.go +++ b/vendor/google.golang.org/grpc/grpclog/component.go @@ -31,71 +31,71 @@ type componentData struct { var cache = map[string]*componentData{} -func (c *componentData) InfoDepth(depth int, args ...interface{}) { - args = append([]interface{}{"[" + string(c.name) + "]"}, args...) +func (c *componentData) InfoDepth(depth int, args ...any) { + args = append([]any{"[" + string(c.name) + "]"}, args...) grpclog.InfoDepth(depth+1, args...) } -func (c *componentData) WarningDepth(depth int, args ...interface{}) { - args = append([]interface{}{"[" + string(c.name) + "]"}, args...) +func (c *componentData) WarningDepth(depth int, args ...any) { + args = append([]any{"[" + string(c.name) + "]"}, args...) grpclog.WarningDepth(depth+1, args...) } -func (c *componentData) ErrorDepth(depth int, args ...interface{}) { - args = append([]interface{}{"[" + string(c.name) + "]"}, args...) +func (c *componentData) ErrorDepth(depth int, args ...any) { + args = append([]any{"[" + string(c.name) + "]"}, args...) grpclog.ErrorDepth(depth+1, args...) } -func (c *componentData) FatalDepth(depth int, args ...interface{}) { - args = append([]interface{}{"[" + string(c.name) + "]"}, args...) +func (c *componentData) FatalDepth(depth int, args ...any) { + args = append([]any{"[" + string(c.name) + "]"}, args...) grpclog.FatalDepth(depth+1, args...) } -func (c *componentData) Info(args ...interface{}) { +func (c *componentData) Info(args ...any) { c.InfoDepth(1, args...) } -func (c *componentData) Warning(args ...interface{}) { +func (c *componentData) Warning(args ...any) { c.WarningDepth(1, args...) } -func (c *componentData) Error(args ...interface{}) { +func (c *componentData) Error(args ...any) { c.ErrorDepth(1, args...) } -func (c *componentData) Fatal(args ...interface{}) { +func (c *componentData) Fatal(args ...any) { c.FatalDepth(1, args...) } -func (c *componentData) Infof(format string, args ...interface{}) { +func (c *componentData) Infof(format string, args ...any) { c.InfoDepth(1, fmt.Sprintf(format, args...)) } -func (c *componentData) Warningf(format string, args ...interface{}) { +func (c *componentData) Warningf(format string, args ...any) { c.WarningDepth(1, fmt.Sprintf(format, args...)) } -func (c *componentData) Errorf(format string, args ...interface{}) { +func (c *componentData) Errorf(format string, args ...any) { c.ErrorDepth(1, fmt.Sprintf(format, args...)) } -func (c *componentData) Fatalf(format string, args ...interface{}) { +func (c *componentData) Fatalf(format string, args ...any) { c.FatalDepth(1, fmt.Sprintf(format, args...)) } -func (c *componentData) Infoln(args ...interface{}) { +func (c *componentData) Infoln(args ...any) { c.InfoDepth(1, args...) } -func (c *componentData) Warningln(args ...interface{}) { +func (c *componentData) Warningln(args ...any) { c.WarningDepth(1, args...) } -func (c *componentData) Errorln(args ...interface{}) { +func (c *componentData) Errorln(args ...any) { c.ErrorDepth(1, args...) } -func (c *componentData) Fatalln(args ...interface{}) { +func (c *componentData) Fatalln(args ...any) { c.FatalDepth(1, args...) } diff --git a/vendor/google.golang.org/grpc/grpclog/grpclog.go b/vendor/google.golang.org/grpc/grpclog/grpclog.go index c8bb2be34bf5f..16928c9cb993c 100644 --- a/vendor/google.golang.org/grpc/grpclog/grpclog.go +++ b/vendor/google.golang.org/grpc/grpclog/grpclog.go @@ -42,53 +42,53 @@ func V(l int) bool { } // Info logs to the INFO log. -func Info(args ...interface{}) { +func Info(args ...any) { grpclog.Logger.Info(args...) } // Infof logs to the INFO log. Arguments are handled in the manner of fmt.Printf. -func Infof(format string, args ...interface{}) { +func Infof(format string, args ...any) { grpclog.Logger.Infof(format, args...) } // Infoln logs to the INFO log. Arguments are handled in the manner of fmt.Println. -func Infoln(args ...interface{}) { +func Infoln(args ...any) { grpclog.Logger.Infoln(args...) } // Warning logs to the WARNING log. -func Warning(args ...interface{}) { +func Warning(args ...any) { grpclog.Logger.Warning(args...) } // Warningf logs to the WARNING log. Arguments are handled in the manner of fmt.Printf. -func Warningf(format string, args ...interface{}) { +func Warningf(format string, args ...any) { grpclog.Logger.Warningf(format, args...) } // Warningln logs to the WARNING log. Arguments are handled in the manner of fmt.Println. -func Warningln(args ...interface{}) { +func Warningln(args ...any) { grpclog.Logger.Warningln(args...) } // Error logs to the ERROR log. -func Error(args ...interface{}) { +func Error(args ...any) { grpclog.Logger.Error(args...) } // Errorf logs to the ERROR log. Arguments are handled in the manner of fmt.Printf. -func Errorf(format string, args ...interface{}) { +func Errorf(format string, args ...any) { grpclog.Logger.Errorf(format, args...) } // Errorln logs to the ERROR log. Arguments are handled in the manner of fmt.Println. -func Errorln(args ...interface{}) { +func Errorln(args ...any) { grpclog.Logger.Errorln(args...) } // Fatal logs to the FATAL log. Arguments are handled in the manner of fmt.Print. // It calls os.Exit() with exit code 1. -func Fatal(args ...interface{}) { +func Fatal(args ...any) { grpclog.Logger.Fatal(args...) // Make sure fatal logs will exit. os.Exit(1) @@ -96,7 +96,7 @@ func Fatal(args ...interface{}) { // Fatalf logs to the FATAL log. Arguments are handled in the manner of fmt.Printf. // It calls os.Exit() with exit code 1. -func Fatalf(format string, args ...interface{}) { +func Fatalf(format string, args ...any) { grpclog.Logger.Fatalf(format, args...) // Make sure fatal logs will exit. os.Exit(1) @@ -104,7 +104,7 @@ func Fatalf(format string, args ...interface{}) { // Fatalln logs to the FATAL log. Arguments are handled in the manner of fmt.Println. // It calle os.Exit()) with exit code 1. -func Fatalln(args ...interface{}) { +func Fatalln(args ...any) { grpclog.Logger.Fatalln(args...) // Make sure fatal logs will exit. os.Exit(1) @@ -113,20 +113,20 @@ func Fatalln(args ...interface{}) { // Print prints to the logger. Arguments are handled in the manner of fmt.Print. // // Deprecated: use Info. -func Print(args ...interface{}) { +func Print(args ...any) { grpclog.Logger.Info(args...) } // Printf prints to the logger. Arguments are handled in the manner of fmt.Printf. // // Deprecated: use Infof. -func Printf(format string, args ...interface{}) { +func Printf(format string, args ...any) { grpclog.Logger.Infof(format, args...) } // Println prints to the logger. Arguments are handled in the manner of fmt.Println. // // Deprecated: use Infoln. -func Println(args ...interface{}) { +func Println(args ...any) { grpclog.Logger.Infoln(args...) } diff --git a/vendor/google.golang.org/grpc/grpclog/logger.go b/vendor/google.golang.org/grpc/grpclog/logger.go index ef06a4822b703..b1674d8267ca4 100644 --- a/vendor/google.golang.org/grpc/grpclog/logger.go +++ b/vendor/google.golang.org/grpc/grpclog/logger.go @@ -24,12 +24,12 @@ import "google.golang.org/grpc/internal/grpclog" // // Deprecated: use LoggerV2. type Logger interface { - Fatal(args ...interface{}) - Fatalf(format string, args ...interface{}) - Fatalln(args ...interface{}) - Print(args ...interface{}) - Printf(format string, args ...interface{}) - Println(args ...interface{}) + Fatal(args ...any) + Fatalf(format string, args ...any) + Fatalln(args ...any) + Print(args ...any) + Printf(format string, args ...any) + Println(args ...any) } // SetLogger sets the logger that is used in grpc. Call only from @@ -45,39 +45,39 @@ type loggerWrapper struct { Logger } -func (g *loggerWrapper) Info(args ...interface{}) { +func (g *loggerWrapper) Info(args ...any) { g.Logger.Print(args...) } -func (g *loggerWrapper) Infoln(args ...interface{}) { +func (g *loggerWrapper) Infoln(args ...any) { g.Logger.Println(args...) } -func (g *loggerWrapper) Infof(format string, args ...interface{}) { +func (g *loggerWrapper) Infof(format string, args ...any) { g.Logger.Printf(format, args...) } -func (g *loggerWrapper) Warning(args ...interface{}) { +func (g *loggerWrapper) Warning(args ...any) { g.Logger.Print(args...) } -func (g *loggerWrapper) Warningln(args ...interface{}) { +func (g *loggerWrapper) Warningln(args ...any) { g.Logger.Println(args...) } -func (g *loggerWrapper) Warningf(format string, args ...interface{}) { +func (g *loggerWrapper) Warningf(format string, args ...any) { g.Logger.Printf(format, args...) } -func (g *loggerWrapper) Error(args ...interface{}) { +func (g *loggerWrapper) Error(args ...any) { g.Logger.Print(args...) } -func (g *loggerWrapper) Errorln(args ...interface{}) { +func (g *loggerWrapper) Errorln(args ...any) { g.Logger.Println(args...) } -func (g *loggerWrapper) Errorf(format string, args ...interface{}) { +func (g *loggerWrapper) Errorf(format string, args ...any) { g.Logger.Printf(format, args...) } diff --git a/vendor/google.golang.org/grpc/grpclog/loggerv2.go b/vendor/google.golang.org/grpc/grpclog/loggerv2.go index 5de66e40d365b..ecfd36d713032 100644 --- a/vendor/google.golang.org/grpc/grpclog/loggerv2.go +++ b/vendor/google.golang.org/grpc/grpclog/loggerv2.go @@ -33,35 +33,35 @@ import ( // LoggerV2 does underlying logging work for grpclog. type LoggerV2 interface { // Info logs to INFO log. Arguments are handled in the manner of fmt.Print. - Info(args ...interface{}) + Info(args ...any) // Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println. - Infoln(args ...interface{}) + Infoln(args ...any) // Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf. - Infof(format string, args ...interface{}) + Infof(format string, args ...any) // Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print. - Warning(args ...interface{}) + Warning(args ...any) // Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println. - Warningln(args ...interface{}) + Warningln(args ...any) // Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf. - Warningf(format string, args ...interface{}) + Warningf(format string, args ...any) // Error logs to ERROR log. Arguments are handled in the manner of fmt.Print. - Error(args ...interface{}) + Error(args ...any) // Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println. - Errorln(args ...interface{}) + Errorln(args ...any) // Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. - Errorf(format string, args ...interface{}) + Errorf(format string, args ...any) // Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code. - Fatal(args ...interface{}) + Fatal(args ...any) // Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code. - Fatalln(args ...interface{}) + Fatalln(args ...any) // Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code. - Fatalf(format string, args ...interface{}) + Fatalf(format string, args ...any) // V reports whether verbosity level l is at least the requested verbose level. V(l int) bool } @@ -182,53 +182,53 @@ func (g *loggerT) output(severity int, s string) { g.m[severity].Output(2, string(b)) } -func (g *loggerT) Info(args ...interface{}) { +func (g *loggerT) Info(args ...any) { g.output(infoLog, fmt.Sprint(args...)) } -func (g *loggerT) Infoln(args ...interface{}) { +func (g *loggerT) Infoln(args ...any) { g.output(infoLog, fmt.Sprintln(args...)) } -func (g *loggerT) Infof(format string, args ...interface{}) { +func (g *loggerT) Infof(format string, args ...any) { g.output(infoLog, fmt.Sprintf(format, args...)) } -func (g *loggerT) Warning(args ...interface{}) { +func (g *loggerT) Warning(args ...any) { g.output(warningLog, fmt.Sprint(args...)) } -func (g *loggerT) Warningln(args ...interface{}) { +func (g *loggerT) Warningln(args ...any) { g.output(warningLog, fmt.Sprintln(args...)) } -func (g *loggerT) Warningf(format string, args ...interface{}) { +func (g *loggerT) Warningf(format string, args ...any) { g.output(warningLog, fmt.Sprintf(format, args...)) } -func (g *loggerT) Error(args ...interface{}) { +func (g *loggerT) Error(args ...any) { g.output(errorLog, fmt.Sprint(args...)) } -func (g *loggerT) Errorln(args ...interface{}) { +func (g *loggerT) Errorln(args ...any) { g.output(errorLog, fmt.Sprintln(args...)) } -func (g *loggerT) Errorf(format string, args ...interface{}) { +func (g *loggerT) Errorf(format string, args ...any) { g.output(errorLog, fmt.Sprintf(format, args...)) } -func (g *loggerT) Fatal(args ...interface{}) { +func (g *loggerT) Fatal(args ...any) { g.output(fatalLog, fmt.Sprint(args...)) os.Exit(1) } -func (g *loggerT) Fatalln(args ...interface{}) { +func (g *loggerT) Fatalln(args ...any) { g.output(fatalLog, fmt.Sprintln(args...)) os.Exit(1) } -func (g *loggerT) Fatalf(format string, args ...interface{}) { +func (g *loggerT) Fatalf(format string, args ...any) { g.output(fatalLog, fmt.Sprintf(format, args...)) os.Exit(1) } @@ -248,11 +248,11 @@ func (g *loggerT) V(l int) bool { type DepthLoggerV2 interface { LoggerV2 // InfoDepth logs to INFO log at the specified depth. Arguments are handled in the manner of fmt.Println. - InfoDepth(depth int, args ...interface{}) + InfoDepth(depth int, args ...any) // WarningDepth logs to WARNING log at the specified depth. Arguments are handled in the manner of fmt.Println. - WarningDepth(depth int, args ...interface{}) + WarningDepth(depth int, args ...any) // ErrorDepth logs to ERROR log at the specified depth. Arguments are handled in the manner of fmt.Println. - ErrorDepth(depth int, args ...interface{}) + ErrorDepth(depth int, args ...any) // FatalDepth logs to FATAL log at the specified depth. Arguments are handled in the manner of fmt.Println. - FatalDepth(depth int, args ...interface{}) + FatalDepth(depth int, args ...any) } diff --git a/vendor/google.golang.org/grpc/health/client.go b/vendor/google.golang.org/grpc/health/client.go index b5bee48380240..740745c45f630 100644 --- a/vendor/google.golang.org/grpc/health/client.go +++ b/vendor/google.golang.org/grpc/health/client.go @@ -56,7 +56,7 @@ const healthCheckMethod = "/grpc.health.v1.Health/Watch" // This function implements the protocol defined at: // https://github.com/grpc/grpc/blob/master/doc/health-checking.md -func clientHealthCheck(ctx context.Context, newStream func(string) (interface{}, error), setConnectivityState func(connectivity.State, error), service string) error { +func clientHealthCheck(ctx context.Context, newStream func(string) (any, error), setConnectivityState func(connectivity.State, error), service string) error { tryCnt := 0 retryConnection: diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go index 8e29a62f164f5..24299efd63f7a 100644 --- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go @@ -17,8 +17,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.14.0 +// protoc-gen-go v1.31.0 +// protoc v4.22.0 // source: grpc/health/v1/health.proto package grpc_health_v1 diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go index a332dfd7b54e0..a01a1b4d54bd5 100644 --- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go @@ -17,8 +17,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.14.0 +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.22.0 // source: grpc/health/v1/health.proto package grpc_health_v1 @@ -35,6 +35,11 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + Health_Check_FullMethodName = "/grpc.health.v1.Health/Check" + Health_Watch_FullMethodName = "/grpc.health.v1.Health/Watch" +) + // HealthClient is the client API for Health service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. @@ -70,7 +75,7 @@ func NewHealthClient(cc grpc.ClientConnInterface) HealthClient { func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) { out := new(HealthCheckResponse) - err := c.cc.Invoke(ctx, "/grpc.health.v1.Health/Check", in, out, opts...) + err := c.cc.Invoke(ctx, Health_Check_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -78,7 +83,7 @@ func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts . } func (c *healthClient) Watch(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (Health_WatchClient, error) { - stream, err := c.cc.NewStream(ctx, &Health_ServiceDesc.Streams[0], "/grpc.health.v1.Health/Watch", opts...) + stream, err := c.cc.NewStream(ctx, &Health_ServiceDesc.Streams[0], Health_Watch_FullMethodName, opts...) if err != nil { return nil, err } @@ -166,7 +171,7 @@ func _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.health.v1.Health/Check", + FullMethod: Health_Check_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest)) diff --git a/vendor/google.golang.org/grpc/interceptor.go b/vendor/google.golang.org/grpc/interceptor.go index bb96ef57be89f..877d78fc3d003 100644 --- a/vendor/google.golang.org/grpc/interceptor.go +++ b/vendor/google.golang.org/grpc/interceptor.go @@ -23,7 +23,7 @@ import ( ) // UnaryInvoker is called by UnaryClientInterceptor to complete RPCs. -type UnaryInvoker func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error +type UnaryInvoker func(ctx context.Context, method string, req, reply any, cc *ClientConn, opts ...CallOption) error // UnaryClientInterceptor intercepts the execution of a unary RPC on the client. // Unary interceptors can be specified as a DialOption, using @@ -40,7 +40,7 @@ type UnaryInvoker func(ctx context.Context, method string, req, reply interface{ // defaults from the ClientConn as well as per-call options. // // The returned error must be compatible with the status package. -type UnaryClientInterceptor func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error +type UnaryClientInterceptor func(ctx context.Context, method string, req, reply any, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error // Streamer is called by StreamClientInterceptor to create a ClientStream. type Streamer func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) @@ -66,7 +66,7 @@ type StreamClientInterceptor func(ctx context.Context, desc *StreamDesc, cc *Cli // server side. All per-rpc information may be mutated by the interceptor. type UnaryServerInfo struct { // Server is the service implementation the user provides. This is read-only. - Server interface{} + Server any // FullMethod is the full RPC method string, i.e., /package.service/method. FullMethod string } @@ -78,13 +78,13 @@ type UnaryServerInfo struct { // status package, or be one of the context errors. Otherwise, gRPC will use // codes.Unknown as the status code and err.Error() as the status message of the // RPC. -type UnaryHandler func(ctx context.Context, req interface{}) (interface{}, error) +type UnaryHandler func(ctx context.Context, req any) (any, error) // UnaryServerInterceptor provides a hook to intercept the execution of a unary RPC on the server. info // contains all the information of this RPC the interceptor can operate on. And handler is the wrapper // of the service method implementation. It is the responsibility of the interceptor to invoke handler // to complete the RPC. -type UnaryServerInterceptor func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (resp interface{}, err error) +type UnaryServerInterceptor func(ctx context.Context, req any, info *UnaryServerInfo, handler UnaryHandler) (resp any, err error) // StreamServerInfo consists of various information about a streaming RPC on // server side. All per-rpc information may be mutated by the interceptor. @@ -101,4 +101,4 @@ type StreamServerInfo struct { // info contains all the information of this RPC the interceptor can operate on. And handler is the // service method implementation. It is the responsibility of the interceptor to invoke handler to // complete the RPC. -type StreamServerInterceptor func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error +type StreamServerInterceptor func(srv any, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error diff --git a/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go b/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go index 08666f62a7cbf..3c594e6e4e55a 100644 --- a/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go +++ b/vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go @@ -200,8 +200,8 @@ func (gsb *Balancer) ExitIdle() { } } -// UpdateSubConnState forwards the update to the appropriate child. -func (gsb *Balancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { +// updateSubConnState forwards the update to the appropriate child. +func (gsb *Balancer) updateSubConnState(sc balancer.SubConn, state balancer.SubConnState, cb func(balancer.SubConnState)) { gsb.currentMu.Lock() defer gsb.currentMu.Unlock() gsb.mu.Lock() @@ -214,13 +214,26 @@ func (gsb *Balancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubC } else if gsb.balancerPending != nil && gsb.balancerPending.subconns[sc] { balToUpdate = gsb.balancerPending } - gsb.mu.Unlock() if balToUpdate == nil { // SubConn belonged to a stale lb policy that has not yet fully closed, // or the balancer was already closed. + gsb.mu.Unlock() return } - balToUpdate.UpdateSubConnState(sc, state) + if state.ConnectivityState == connectivity.Shutdown { + delete(balToUpdate.subconns, sc) + } + gsb.mu.Unlock() + if cb != nil { + cb(state) + } else { + balToUpdate.UpdateSubConnState(sc, state) + } +} + +// UpdateSubConnState forwards the update to the appropriate child. +func (gsb *Balancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { + gsb.updateSubConnState(sc, state, nil) } // Close closes any active child balancers. @@ -242,7 +255,7 @@ func (gsb *Balancer) Close() { // // It implements the balancer.ClientConn interface and is passed down in that // capacity to the wrapped balancer. It maintains a set of subConns created by -// the wrapped balancer and calls from the latter to create/update/remove +// the wrapped balancer and calls from the latter to create/update/shutdown // SubConns update this set before being forwarded to the parent ClientConn. // State updates from the wrapped balancer can result in invocation of the // graceful switch logic. @@ -254,21 +267,10 @@ type balancerWrapper struct { subconns map[balancer.SubConn]bool // subconns created by this balancer } -func (bw *balancerWrapper) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { - if state.ConnectivityState == connectivity.Shutdown { - bw.gsb.mu.Lock() - delete(bw.subconns, sc) - bw.gsb.mu.Unlock() - } - // There is no need to protect this read with a mutex, as the write to the - // Balancer field happens in SwitchTo, which completes before this can be - // called. - bw.Balancer.UpdateSubConnState(sc, state) -} - -// Close closes the underlying LB policy and removes the subconns it created. bw -// must not be referenced via balancerCurrent or balancerPending in gsb when -// called. gsb.mu must not be held. Does not panic with a nil receiver. +// Close closes the underlying LB policy and shuts down the subconns it +// created. bw must not be referenced via balancerCurrent or balancerPending in +// gsb when called. gsb.mu must not be held. Does not panic with a nil +// receiver. func (bw *balancerWrapper) Close() { // before Close is called. if bw == nil { @@ -281,7 +283,7 @@ func (bw *balancerWrapper) Close() { bw.Balancer.Close() bw.gsb.mu.Lock() for sc := range bw.subconns { - bw.gsb.cc.RemoveSubConn(sc) + sc.Shutdown() } bw.gsb.mu.Unlock() } @@ -335,13 +337,16 @@ func (bw *balancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.Ne } bw.gsb.mu.Unlock() + var sc balancer.SubConn + oldListener := opts.StateListener + opts.StateListener = func(state balancer.SubConnState) { bw.gsb.updateSubConnState(sc, state, oldListener) } sc, err := bw.gsb.cc.NewSubConn(addrs, opts) if err != nil { return nil, err } bw.gsb.mu.Lock() if !bw.gsb.balancerCurrentOrPending(bw) { // balancer was closed during this call - bw.gsb.cc.RemoveSubConn(sc) + sc.Shutdown() bw.gsb.mu.Unlock() return nil, fmt.Errorf("%T at address %p that called NewSubConn is deleted", bw, bw) } @@ -360,13 +365,9 @@ func (bw *balancerWrapper) ResolveNow(opts resolver.ResolveNowOptions) { } func (bw *balancerWrapper) RemoveSubConn(sc balancer.SubConn) { - bw.gsb.mu.Lock() - if !bw.gsb.balancerCurrentOrPending(bw) { - bw.gsb.mu.Unlock() - return - } - bw.gsb.mu.Unlock() - bw.gsb.cc.RemoveSubConn(sc) + // Note: existing third party balancers may call this, so it must remain + // until RemoveSubConn is fully removed. + sc.Shutdown() } func (bw *balancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) { diff --git a/vendor/google.golang.org/grpc/internal/balancerload/load.go b/vendor/google.golang.org/grpc/internal/balancerload/load.go index 3a905d96657e1..94a08d6875a95 100644 --- a/vendor/google.golang.org/grpc/internal/balancerload/load.go +++ b/vendor/google.golang.org/grpc/internal/balancerload/load.go @@ -25,7 +25,7 @@ import ( // Parser converts loads from metadata into a concrete type. type Parser interface { // Parse parses loads from metadata. - Parse(md metadata.MD) interface{} + Parse(md metadata.MD) any } var parser Parser @@ -38,7 +38,7 @@ func SetParser(lr Parser) { } // Parse calls parser.Read(). -func Parse(md metadata.MD) interface{} { +func Parse(md metadata.MD) any { if parser == nil { return nil } diff --git a/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go b/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go index 809d73ccafb08..755fdebc1b15a 100644 --- a/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go +++ b/vendor/google.golang.org/grpc/internal/binarylog/binarylog.go @@ -28,8 +28,13 @@ import ( "google.golang.org/grpc/internal/grpcutil" ) -// Logger is the global binary logger. It can be used to get binary logger for -// each method. +var grpclogLogger = grpclog.Component("binarylog") + +// Logger specifies MethodLoggers for method names with a Log call that +// takes a context. +// +// This is used in the 1.0 release of gcp/observability, and thus must not be +// deleted or changed. type Logger interface { GetMethodLogger(methodName string) MethodLogger } @@ -40,8 +45,6 @@ type Logger interface { // It is used to get a MethodLogger for each individual method. var binLogger Logger -var grpclogLogger = grpclog.Component("binarylog") - // SetLogger sets the binary logger. // // Only call this at init time. diff --git a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go index d71e441778f4e..0f31274a3ccca 100644 --- a/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go +++ b/vendor/google.golang.org/grpc/internal/binarylog/method_logger.go @@ -19,6 +19,7 @@ package binarylog import ( + "context" "net" "strings" "sync/atomic" @@ -48,8 +49,11 @@ func (g *callIDGenerator) reset() { var idGen callIDGenerator // MethodLogger is the sub-logger for each method. +// +// This is used in the 1.0 release of gcp/observability, and thus must not be +// deleted or changed. type MethodLogger interface { - Log(LogEntryConfig) + Log(context.Context, LogEntryConfig) } // TruncatingMethodLogger is a method logger that truncates headers and messages @@ -64,6 +68,9 @@ type TruncatingMethodLogger struct { } // NewTruncatingMethodLogger returns a new truncating method logger. +// +// This is used in the 1.0 release of gcp/observability, and thus must not be +// deleted or changed. func NewTruncatingMethodLogger(h, m uint64) *TruncatingMethodLogger { return &TruncatingMethodLogger{ headerMaxLen: h, @@ -98,7 +105,7 @@ func (ml *TruncatingMethodLogger) Build(c LogEntryConfig) *binlogpb.GrpcLogEntry } // Log creates a proto binary log entry, and logs it to the sink. -func (ml *TruncatingMethodLogger) Log(c LogEntryConfig) { +func (ml *TruncatingMethodLogger) Log(ctx context.Context, c LogEntryConfig) { ml.sink.Write(ml.Build(c)) } @@ -144,6 +151,9 @@ func (ml *TruncatingMethodLogger) truncateMessage(msgPb *binlogpb.Message) (trun } // LogEntryConfig represents the configuration for binary log entry. +// +// This is used in the 1.0 release of gcp/observability, and thus must not be +// deleted or changed. type LogEntryConfig interface { toProto() *binlogpb.GrpcLogEntry } @@ -220,7 +230,7 @@ type ClientMessage struct { OnClientSide bool // Message can be a proto.Message or []byte. Other messages formats are not // supported. - Message interface{} + Message any } func (c *ClientMessage) toProto() *binlogpb.GrpcLogEntry { @@ -260,7 +270,7 @@ type ServerMessage struct { OnClientSide bool // Message can be a proto.Message or []byte. Other messages formats are not // supported. - Message interface{} + Message any } func (c *ServerMessage) toProto() *binlogpb.GrpcLogEntry { diff --git a/vendor/google.golang.org/grpc/internal/buffer/unbounded.go b/vendor/google.golang.org/grpc/internal/buffer/unbounded.go index 9f6a0c1200db2..4399c3df4959d 100644 --- a/vendor/google.golang.org/grpc/internal/buffer/unbounded.go +++ b/vendor/google.golang.org/grpc/internal/buffer/unbounded.go @@ -28,35 +28,38 @@ import "sync" // the underlying mutex used for synchronization. // // Unbounded supports values of any type to be stored in it by using a channel -// of `interface{}`. This means that a call to Put() incurs an extra memory -// allocation, and also that users need a type assertion while reading. For -// performance critical code paths, using Unbounded is strongly discouraged and -// defining a new type specific implementation of this buffer is preferred. See +// of `any`. This means that a call to Put() incurs an extra memory allocation, +// and also that users need a type assertion while reading. For performance +// critical code paths, using Unbounded is strongly discouraged and defining a +// new type specific implementation of this buffer is preferred. See // internal/transport/transport.go for an example of this. type Unbounded struct { - c chan interface{} + c chan any + closed bool mu sync.Mutex - backlog []interface{} + backlog []any } // NewUnbounded returns a new instance of Unbounded. func NewUnbounded() *Unbounded { - return &Unbounded{c: make(chan interface{}, 1)} + return &Unbounded{c: make(chan any, 1)} } // Put adds t to the unbounded buffer. -func (b *Unbounded) Put(t interface{}) { +func (b *Unbounded) Put(t any) { b.mu.Lock() + defer b.mu.Unlock() + if b.closed { + return + } if len(b.backlog) == 0 { select { case b.c <- t: - b.mu.Unlock() return default: } } b.backlog = append(b.backlog, t) - b.mu.Unlock() } // Load sends the earliest buffered data, if any, onto the read channel @@ -64,6 +67,10 @@ func (b *Unbounded) Put(t interface{}) { // value from the read channel. func (b *Unbounded) Load() { b.mu.Lock() + defer b.mu.Unlock() + if b.closed { + return + } if len(b.backlog) > 0 { select { case b.c <- b.backlog[0]: @@ -72,7 +79,6 @@ func (b *Unbounded) Load() { default: } } - b.mu.Unlock() } // Get returns a read channel on which values added to the buffer, via Put(), @@ -80,6 +86,20 @@ func (b *Unbounded) Load() { // // Upon reading a value from this channel, users are expected to call Load() to // send the next buffered value onto the channel if there is any. -func (b *Unbounded) Get() <-chan interface{} { +// +// If the unbounded buffer is closed, the read channel returned by this method +// is closed. +func (b *Unbounded) Get() <-chan any { return b.c } + +// Close closes the unbounded buffer. +func (b *Unbounded) Close() { + b.mu.Lock() + defer b.mu.Unlock() + if b.closed { + return + } + b.closed = true + close(b.c) +} diff --git a/vendor/google.golang.org/grpc/internal/channelz/funcs.go b/vendor/google.golang.org/grpc/internal/channelz/funcs.go index 777cbcd7921d9..5395e77529cd6 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/funcs.go +++ b/vendor/google.golang.org/grpc/internal/channelz/funcs.go @@ -24,9 +24,7 @@ package channelz import ( - "context" "errors" - "fmt" "sort" "sync" "sync/atomic" @@ -40,8 +38,11 @@ const ( ) var ( - db dbWrapper - idGen idGenerator + // IDGen is the global channelz entity ID generator. It should not be used + // outside this package except by tests. + IDGen IDGenerator + + db dbWrapper // EntryPerPage defines the number of channelz entries to be shown on a web page. EntryPerPage = int64(50) curState int32 @@ -52,14 +53,14 @@ var ( func TurnOn() { if !IsOn() { db.set(newChannelMap()) - idGen.reset() + IDGen.Reset() atomic.StoreInt32(&curState, 1) } } // IsOn returns whether channelz data collection is on. func IsOn() bool { - return atomic.CompareAndSwapInt32(&curState, 1, 1) + return atomic.LoadInt32(&curState) == 1 } // SetMaxTraceEntry sets maximum number of trace entry per entity (i.e. channel/subchannel). @@ -97,43 +98,6 @@ func (d *dbWrapper) get() *channelMap { return d.DB } -// NewChannelzStorageForTesting initializes channelz data storage and id -// generator for testing purposes. -// -// Returns a cleanup function to be invoked by the test, which waits for up to -// 10s for all channelz state to be reset by the grpc goroutines when those -// entities get closed. This cleanup function helps with ensuring that tests -// don't mess up each other. -func NewChannelzStorageForTesting() (cleanup func() error) { - db.set(newChannelMap()) - idGen.reset() - - return func() error { - cm := db.get() - if cm == nil { - return nil - } - - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - ticker := time.NewTicker(10 * time.Millisecond) - defer ticker.Stop() - for { - cm.mu.RLock() - topLevelChannels, servers, channels, subChannels, listenSockets, normalSockets := len(cm.topLevelChannels), len(cm.servers), len(cm.channels), len(cm.subChannels), len(cm.listenSockets), len(cm.normalSockets) - cm.mu.RUnlock() - - if err := ctx.Err(); err != nil { - return fmt.Errorf("after 10s the channelz map has not been cleaned up yet, topchannels: %d, servers: %d, channels: %d, subchannels: %d, listen sockets: %d, normal sockets: %d", topLevelChannels, servers, channels, subChannels, listenSockets, normalSockets) - } - if topLevelChannels == 0 && servers == 0 && channels == 0 && subChannels == 0 && listenSockets == 0 && normalSockets == 0 { - return nil - } - <-ticker.C - } - } -} - // GetTopChannels returns a slice of top channel's ChannelMetric, along with a // boolean indicating whether there's more top channels to be queried for. // @@ -193,7 +157,7 @@ func GetServer(id int64) *ServerMetric { // // If channelz is not turned ON, the channelz database is not mutated. func RegisterChannel(c Channel, pid *Identifier, ref string) *Identifier { - id := idGen.genID() + id := IDGen.genID() var parent int64 isTopChannel := true if pid != nil { @@ -229,7 +193,7 @@ func RegisterSubChannel(c Channel, pid *Identifier, ref string) (*Identifier, er if pid == nil { return nil, errors.New("a SubChannel's parent id cannot be nil") } - id := idGen.genID() + id := IDGen.genID() if !IsOn() { return newIdentifer(RefSubChannel, id, pid), nil } @@ -251,7 +215,7 @@ func RegisterSubChannel(c Channel, pid *Identifier, ref string) (*Identifier, er // // If channelz is not turned ON, the channelz database is not mutated. func RegisterServer(s Server, ref string) *Identifier { - id := idGen.genID() + id := IDGen.genID() if !IsOn() { return newIdentifer(RefServer, id, nil) } @@ -277,7 +241,7 @@ func RegisterListenSocket(s Socket, pid *Identifier, ref string) (*Identifier, e if pid == nil { return nil, errors.New("a ListenSocket's parent id cannot be 0") } - id := idGen.genID() + id := IDGen.genID() if !IsOn() { return newIdentifer(RefListenSocket, id, pid), nil } @@ -297,7 +261,7 @@ func RegisterNormalSocket(s Socket, pid *Identifier, ref string) (*Identifier, e if pid == nil { return nil, errors.New("a NormalSocket's parent id cannot be 0") } - id := idGen.genID() + id := IDGen.genID() if !IsOn() { return newIdentifer(RefNormalSocket, id, pid), nil } @@ -776,14 +740,17 @@ func (c *channelMap) GetServer(id int64) *ServerMetric { return sm } -type idGenerator struct { +// IDGenerator is an incrementing atomic that tracks IDs for channelz entities. +type IDGenerator struct { id int64 } -func (i *idGenerator) reset() { +// Reset resets the generated ID back to zero. Should only be used at +// initialization or by tests sensitive to the ID number. +func (i *IDGenerator) Reset() { atomic.StoreInt64(&i.id, 0) } -func (i *idGenerator) genID() int64 { +func (i *IDGenerator) genID() int64 { return atomic.AddInt64(&i.id, 1) } diff --git a/vendor/google.golang.org/grpc/internal/channelz/logging.go b/vendor/google.golang.org/grpc/internal/channelz/logging.go index 8e13a3d2ce7b6..f89e6f77bbd0a 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/logging.go +++ b/vendor/google.golang.org/grpc/internal/channelz/logging.go @@ -31,7 +31,7 @@ func withParens(id *Identifier) string { } // Info logs and adds a trace event if channelz is on. -func Info(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { +func Info(l grpclog.DepthLoggerV2, id *Identifier, args ...any) { AddTraceEvent(l, id, 1, &TraceEventDesc{ Desc: fmt.Sprint(args...), Severity: CtInfo, @@ -39,7 +39,7 @@ func Info(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { } // Infof logs and adds a trace event if channelz is on. -func Infof(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) { +func Infof(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...any) { AddTraceEvent(l, id, 1, &TraceEventDesc{ Desc: fmt.Sprintf(format, args...), Severity: CtInfo, @@ -47,7 +47,7 @@ func Infof(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...inter } // Warning logs and adds a trace event if channelz is on. -func Warning(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { +func Warning(l grpclog.DepthLoggerV2, id *Identifier, args ...any) { AddTraceEvent(l, id, 1, &TraceEventDesc{ Desc: fmt.Sprint(args...), Severity: CtWarning, @@ -55,7 +55,7 @@ func Warning(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { } // Warningf logs and adds a trace event if channelz is on. -func Warningf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) { +func Warningf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...any) { AddTraceEvent(l, id, 1, &TraceEventDesc{ Desc: fmt.Sprintf(format, args...), Severity: CtWarning, @@ -63,7 +63,7 @@ func Warningf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...in } // Error logs and adds a trace event if channelz is on. -func Error(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { +func Error(l grpclog.DepthLoggerV2, id *Identifier, args ...any) { AddTraceEvent(l, id, 1, &TraceEventDesc{ Desc: fmt.Sprint(args...), Severity: CtError, @@ -71,7 +71,7 @@ func Error(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) { } // Errorf logs and adds a trace event if channelz is on. -func Errorf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) { +func Errorf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...any) { AddTraceEvent(l, id, 1, &TraceEventDesc{ Desc: fmt.Sprintf(format, args...), Severity: CtError, diff --git a/vendor/google.golang.org/grpc/internal/channelz/types.go b/vendor/google.golang.org/grpc/internal/channelz/types.go index 7b2f350e2e645..1d4020f537953 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/types.go +++ b/vendor/google.golang.org/grpc/internal/channelz/types.go @@ -628,6 +628,7 @@ type tracedChannel interface { type channelTrace struct { cm *channelMap + clearCalled bool createdTime time.Time eventCount int64 mu sync.Mutex @@ -656,6 +657,10 @@ func (c *channelTrace) append(e *TraceEvent) { } func (c *channelTrace) clear() { + if c.clearCalled { + return + } + c.clearCalled = true c.mu.Lock() for _, e := range c.events { if e.RefID != 0 { diff --git a/vendor/google.golang.org/grpc/internal/channelz/util_linux.go b/vendor/google.golang.org/grpc/internal/channelz/util_linux.go index 8d194e44e1dcb..98288c3f866fd 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/util_linux.go +++ b/vendor/google.golang.org/grpc/internal/channelz/util_linux.go @@ -23,7 +23,7 @@ import ( ) // GetSocketOption gets the socket option info of the conn. -func GetSocketOption(socket interface{}) *SocketOptionData { +func GetSocketOption(socket any) *SocketOptionData { c, ok := socket.(syscall.Conn) if !ok { return nil diff --git a/vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go b/vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go index 837ddc4024000..b5568b22e208c 100644 --- a/vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go +++ b/vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go @@ -22,6 +22,6 @@ package channelz // GetSocketOption gets the socket option info of the conn. -func GetSocketOption(c interface{}) *SocketOptionData { +func GetSocketOption(c any) *SocketOptionData { return nil } diff --git a/vendor/google.golang.org/grpc/internal/credentials/credentials.go b/vendor/google.golang.org/grpc/internal/credentials/credentials.go index 32c9b59033cd1..9deee7f6513e1 100644 --- a/vendor/google.golang.org/grpc/internal/credentials/credentials.go +++ b/vendor/google.golang.org/grpc/internal/credentials/credentials.go @@ -25,12 +25,12 @@ import ( type requestInfoKey struct{} // NewRequestInfoContext creates a context with ri. -func NewRequestInfoContext(ctx context.Context, ri interface{}) context.Context { +func NewRequestInfoContext(ctx context.Context, ri any) context.Context { return context.WithValue(ctx, requestInfoKey{}, ri) } // RequestInfoFromContext extracts the RequestInfo from ctx. -func RequestInfoFromContext(ctx context.Context) interface{} { +func RequestInfoFromContext(ctx context.Context) any { return ctx.Value(requestInfoKey{}) } @@ -39,11 +39,11 @@ func RequestInfoFromContext(ctx context.Context) interface{} { type clientHandshakeInfoKey struct{} // ClientHandshakeInfoFromContext extracts the ClientHandshakeInfo from ctx. -func ClientHandshakeInfoFromContext(ctx context.Context) interface{} { +func ClientHandshakeInfoFromContext(ctx context.Context) any { return ctx.Value(clientHandshakeInfoKey{}) } // NewClientHandshakeInfoContext creates a context with chi. -func NewClientHandshakeInfoContext(ctx context.Context, chi interface{}) context.Context { +func NewClientHandshakeInfoContext(ctx context.Context, chi any) context.Context { return context.WithValue(ctx, clientHandshakeInfoKey{}, chi) } diff --git a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go index 5ba9d94d49c2e..3cf10ddfbd4c0 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/envconfig.go @@ -36,6 +36,16 @@ var ( // "GRPC_RING_HASH_CAP". This does not override the default bounds // checking which NACKs configs specifying ring sizes > 8*1024*1024 (~8M). RingHashCap = uint64FromEnv("GRPC_RING_HASH_CAP", 4096, 1, 8*1024*1024) + // PickFirstLBConfig is set if we should support configuration of the + // pick_first LB policy. + PickFirstLBConfig = boolFromEnv("GRPC_EXPERIMENTAL_PICKFIRST_LB_CONFIG", true) + // LeastRequestLB is set if we should support the least_request_experimental + // LB policy, which can be enabled by setting the environment variable + // "GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST" to "true". + LeastRequestLB = boolFromEnv("GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST", false) + // ALTSMaxConcurrentHandshakes is the maximum number of concurrent ALTS + // handshakes that can be performed. + ALTSMaxConcurrentHandshakes = uint64FromEnv("GRPC_ALTS_MAX_CONCURRENT_HANDSHAKES", 100, 1, 100) ) func boolFromEnv(envVar string, def bool) bool { diff --git a/vendor/google.golang.org/grpc/internal/envconfig/observability.go b/vendor/google.golang.org/grpc/internal/envconfig/observability.go index 821dd0a7c1988..dd314cfb18f48 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/observability.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/observability.go @@ -28,9 +28,15 @@ const ( var ( // ObservabilityConfig is the json configuration for the gcp/observability // package specified directly in the envObservabilityConfig env var. + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. ObservabilityConfig = os.Getenv(envObservabilityConfig) // ObservabilityConfigFile is the json configuration for the // gcp/observability specified in a file with the location specified in // envObservabilityConfigFile env var. + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. ObservabilityConfigFile = os.Getenv(envObservabilityConfigFile) ) diff --git a/vendor/google.golang.org/grpc/internal/envconfig/xds.go b/vendor/google.golang.org/grpc/internal/envconfig/xds.go index 04136882c7bcb..02b4b6a1c1096 100644 --- a/vendor/google.golang.org/grpc/internal/envconfig/xds.go +++ b/vendor/google.golang.org/grpc/internal/envconfig/xds.go @@ -61,11 +61,10 @@ var ( // have a brand new API on the server-side and users explicitly need to use // the new API to get security integration on the server. XDSClientSideSecurity = boolFromEnv("GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT", true) - // XDSAggregateAndDNS indicates whether processing of aggregated cluster - // and DNS cluster is enabled, which can be enabled by setting the - // environment variable - // "GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER" to - // "true". + // XDSAggregateAndDNS indicates whether processing of aggregated cluster and + // DNS cluster is enabled, which can be disabled by setting the environment + // variable "GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER" + // to "false". XDSAggregateAndDNS = boolFromEnv("GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER", true) // XDSRBAC indicates whether xDS configured RBAC HTTP Filter is enabled, @@ -79,14 +78,18 @@ var ( // XDSFederation indicates whether federation support is enabled, which can // be enabled by setting the environment variable // "GRPC_EXPERIMENTAL_XDS_FEDERATION" to "true". - XDSFederation = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FEDERATION", false) + XDSFederation = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FEDERATION", true) // XDSRLS indicates whether processing of Cluster Specifier plugins and - // support for the RLS CLuster Specifier is enabled, which can be enabled by + // support for the RLS CLuster Specifier is enabled, which can be disabled by // setting the environment variable "GRPC_EXPERIMENTAL_XDS_RLS_LB" to - // "true". - XDSRLS = boolFromEnv("GRPC_EXPERIMENTAL_XDS_RLS_LB", false) + // "false". + XDSRLS = boolFromEnv("GRPC_EXPERIMENTAL_XDS_RLS_LB", true) // C2PResolverTestOnlyTrafficDirectorURI is the TD URI for testing. C2PResolverTestOnlyTrafficDirectorURI = os.Getenv("GRPC_TEST_ONLY_GOOGLE_C2P_RESOLVER_TRAFFIC_DIRECTOR_URI") + // XDSCustomLBPolicy indicates whether Custom LB Policies are enabled, which + // can be disabled by setting the environment variable + // "GRPC_EXPERIMENTAL_XDS_CUSTOM_LB_CONFIG" to "false". + XDSCustomLBPolicy = boolFromEnv("GRPC_EXPERIMENTAL_XDS_CUSTOM_LB_CONFIG", true) ) diff --git a/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go b/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go index b68e26a364935..bfc45102ab245 100644 --- a/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go +++ b/vendor/google.golang.org/grpc/internal/grpclog/grpclog.go @@ -30,7 +30,7 @@ var Logger LoggerV2 var DepthLogger DepthLoggerV2 // InfoDepth logs to the INFO log at the specified depth. -func InfoDepth(depth int, args ...interface{}) { +func InfoDepth(depth int, args ...any) { if DepthLogger != nil { DepthLogger.InfoDepth(depth, args...) } else { @@ -39,7 +39,7 @@ func InfoDepth(depth int, args ...interface{}) { } // WarningDepth logs to the WARNING log at the specified depth. -func WarningDepth(depth int, args ...interface{}) { +func WarningDepth(depth int, args ...any) { if DepthLogger != nil { DepthLogger.WarningDepth(depth, args...) } else { @@ -48,7 +48,7 @@ func WarningDepth(depth int, args ...interface{}) { } // ErrorDepth logs to the ERROR log at the specified depth. -func ErrorDepth(depth int, args ...interface{}) { +func ErrorDepth(depth int, args ...any) { if DepthLogger != nil { DepthLogger.ErrorDepth(depth, args...) } else { @@ -57,7 +57,7 @@ func ErrorDepth(depth int, args ...interface{}) { } // FatalDepth logs to the FATAL log at the specified depth. -func FatalDepth(depth int, args ...interface{}) { +func FatalDepth(depth int, args ...any) { if DepthLogger != nil { DepthLogger.FatalDepth(depth, args...) } else { @@ -71,35 +71,35 @@ func FatalDepth(depth int, args ...interface{}) { // is defined here to avoid a circular dependency. type LoggerV2 interface { // Info logs to INFO log. Arguments are handled in the manner of fmt.Print. - Info(args ...interface{}) + Info(args ...any) // Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println. - Infoln(args ...interface{}) + Infoln(args ...any) // Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf. - Infof(format string, args ...interface{}) + Infof(format string, args ...any) // Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print. - Warning(args ...interface{}) + Warning(args ...any) // Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println. - Warningln(args ...interface{}) + Warningln(args ...any) // Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf. - Warningf(format string, args ...interface{}) + Warningf(format string, args ...any) // Error logs to ERROR log. Arguments are handled in the manner of fmt.Print. - Error(args ...interface{}) + Error(args ...any) // Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println. - Errorln(args ...interface{}) + Errorln(args ...any) // Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. - Errorf(format string, args ...interface{}) + Errorf(format string, args ...any) // Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code. - Fatal(args ...interface{}) + Fatal(args ...any) // Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code. - Fatalln(args ...interface{}) + Fatalln(args ...any) // Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. // gRPC ensures that all Fatal logs will exit with os.Exit(1). // Implementations may also call os.Exit() with a non-zero exit code. - Fatalf(format string, args ...interface{}) + Fatalf(format string, args ...any) // V reports whether verbosity level l is at least the requested verbose level. V(l int) bool } @@ -116,11 +116,11 @@ type LoggerV2 interface { // later release. type DepthLoggerV2 interface { // InfoDepth logs to INFO log at the specified depth. Arguments are handled in the manner of fmt.Println. - InfoDepth(depth int, args ...interface{}) + InfoDepth(depth int, args ...any) // WarningDepth logs to WARNING log at the specified depth. Arguments are handled in the manner of fmt.Println. - WarningDepth(depth int, args ...interface{}) + WarningDepth(depth int, args ...any) // ErrorDepth logs to ERROR log at the specified depth. Arguments are handled in the manner of fmt.Println. - ErrorDepth(depth int, args ...interface{}) + ErrorDepth(depth int, args ...any) // FatalDepth logs to FATAL log at the specified depth. Arguments are handled in the manner of fmt.Println. - FatalDepth(depth int, args ...interface{}) + FatalDepth(depth int, args ...any) } diff --git a/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go b/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go index 82af70e96f157..faa998de7632b 100644 --- a/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go +++ b/vendor/google.golang.org/grpc/internal/grpclog/prefixLogger.go @@ -31,7 +31,7 @@ type PrefixLogger struct { } // Infof does info logging. -func (pl *PrefixLogger) Infof(format string, args ...interface{}) { +func (pl *PrefixLogger) Infof(format string, args ...any) { if pl != nil { // Handle nil, so the tests can pass in a nil logger. format = pl.prefix + format @@ -42,7 +42,7 @@ func (pl *PrefixLogger) Infof(format string, args ...interface{}) { } // Warningf does warning logging. -func (pl *PrefixLogger) Warningf(format string, args ...interface{}) { +func (pl *PrefixLogger) Warningf(format string, args ...any) { if pl != nil { format = pl.prefix + format pl.logger.WarningDepth(1, fmt.Sprintf(format, args...)) @@ -52,7 +52,7 @@ func (pl *PrefixLogger) Warningf(format string, args ...interface{}) { } // Errorf does error logging. -func (pl *PrefixLogger) Errorf(format string, args ...interface{}) { +func (pl *PrefixLogger) Errorf(format string, args ...any) { if pl != nil { format = pl.prefix + format pl.logger.ErrorDepth(1, fmt.Sprintf(format, args...)) @@ -62,7 +62,10 @@ func (pl *PrefixLogger) Errorf(format string, args ...interface{}) { } // Debugf does info logging at verbose level 2. -func (pl *PrefixLogger) Debugf(format string, args ...interface{}) { +func (pl *PrefixLogger) Debugf(format string, args ...any) { + // TODO(6044): Refactor interfaces LoggerV2 and DepthLogger, and maybe + // rewrite PrefixLogger a little to ensure that we don't use the global + // `Logger` here, and instead use the `logger` field. if !Logger.V(2) { return } @@ -73,6 +76,15 @@ func (pl *PrefixLogger) Debugf(format string, args ...interface{}) { return } InfoDepth(1, fmt.Sprintf(format, args...)) + +} + +// V reports whether verbosity level l is at least the requested verbose level. +func (pl *PrefixLogger) V(l int) bool { + // TODO(6044): Refactor interfaces LoggerV2 and DepthLogger, and maybe + // rewrite PrefixLogger a little to ensure that we don't use the global + // `Logger` here, and instead use the `logger` field. + return Logger.V(l) } // NewPrefixLogger creates a prefix logger with the given prefix. diff --git a/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go b/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go index 517ea70642a1f..aa97273e7d13e 100644 --- a/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go +++ b/vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go @@ -72,3 +72,24 @@ func Uint64() uint64 { defer mu.Unlock() return r.Uint64() } + +// Uint32 implements rand.Uint32 on the grpcrand global source. +func Uint32() uint32 { + mu.Lock() + defer mu.Unlock() + return r.Uint32() +} + +// ExpFloat64 implements rand.ExpFloat64 on the grpcrand global source. +func ExpFloat64() float64 { + mu.Lock() + defer mu.Unlock() + return r.ExpFloat64() +} + +// Shuffle implements rand.Shuffle on the grpcrand global source. +var Shuffle = func(n int, f func(int, int)) { + mu.Lock() + defer mu.Unlock() + r.Shuffle(n, f) +} diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go new file mode 100644 index 0000000000000..900917dbe6c1d --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go @@ -0,0 +1,125 @@ +/* + * + * Copyright 2022 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpcsync + +import ( + "context" + "sync" + + "google.golang.org/grpc/internal/buffer" +) + +// CallbackSerializer provides a mechanism to schedule callbacks in a +// synchronized manner. It provides a FIFO guarantee on the order of execution +// of scheduled callbacks. New callbacks can be scheduled by invoking the +// Schedule() method. +// +// This type is safe for concurrent access. +type CallbackSerializer struct { + // done is closed once the serializer is shut down completely, i.e all + // scheduled callbacks are executed and the serializer has deallocated all + // its resources. + done chan struct{} + + callbacks *buffer.Unbounded + closedMu sync.Mutex + closed bool +} + +// NewCallbackSerializer returns a new CallbackSerializer instance. The provided +// context will be passed to the scheduled callbacks. Users should cancel the +// provided context to shutdown the CallbackSerializer. It is guaranteed that no +// callbacks will be added once this context is canceled, and any pending un-run +// callbacks will be executed before the serializer is shut down. +func NewCallbackSerializer(ctx context.Context) *CallbackSerializer { + cs := &CallbackSerializer{ + done: make(chan struct{}), + callbacks: buffer.NewUnbounded(), + } + go cs.run(ctx) + return cs +} + +// Schedule adds a callback to be scheduled after existing callbacks are run. +// +// Callbacks are expected to honor the context when performing any blocking +// operations, and should return early when the context is canceled. +// +// Return value indicates if the callback was successfully added to the list of +// callbacks to be executed by the serializer. It is not possible to add +// callbacks once the context passed to NewCallbackSerializer is cancelled. +func (cs *CallbackSerializer) Schedule(f func(ctx context.Context)) bool { + cs.closedMu.Lock() + defer cs.closedMu.Unlock() + + if cs.closed { + return false + } + cs.callbacks.Put(f) + return true +} + +func (cs *CallbackSerializer) run(ctx context.Context) { + var backlog []func(context.Context) + + defer close(cs.done) + for ctx.Err() == nil { + select { + case <-ctx.Done(): + // Do nothing here. Next iteration of the for loop will not happen, + // since ctx.Err() would be non-nil. + case callback, ok := <-cs.callbacks.Get(): + if !ok { + return + } + cs.callbacks.Load() + callback.(func(ctx context.Context))(ctx) + } + } + + // Fetch pending callbacks if any, and execute them before returning from + // this method and closing cs.done. + cs.closedMu.Lock() + cs.closed = true + backlog = cs.fetchPendingCallbacks() + cs.callbacks.Close() + cs.closedMu.Unlock() + for _, b := range backlog { + b(ctx) + } +} + +func (cs *CallbackSerializer) fetchPendingCallbacks() []func(context.Context) { + var backlog []func(context.Context) + for { + select { + case b := <-cs.callbacks.Get(): + backlog = append(backlog, b.(func(context.Context))) + cs.callbacks.Load() + default: + return backlog + } + } +} + +// Done returns a channel that is closed after the context passed to +// NewCallbackSerializer is canceled and all callbacks have been executed. +func (cs *CallbackSerializer) Done() <-chan struct{} { + return cs.done +} diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go b/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go new file mode 100644 index 0000000000000..aef8cec1ab0cd --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/grpcsync/pubsub.go @@ -0,0 +1,121 @@ +/* + * + * Copyright 2023 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpcsync + +import ( + "context" + "sync" +) + +// Subscriber represents an entity that is subscribed to messages published on +// a PubSub. It wraps the callback to be invoked by the PubSub when a new +// message is published. +type Subscriber interface { + // OnMessage is invoked when a new message is published. Implementations + // must not block in this method. + OnMessage(msg any) +} + +// PubSub is a simple one-to-many publish-subscribe system that supports +// messages of arbitrary type. It guarantees that messages are delivered in +// the same order in which they were published. +// +// Publisher invokes the Publish() method to publish new messages, while +// subscribers interested in receiving these messages register a callback +// via the Subscribe() method. +// +// Once a PubSub is stopped, no more messages can be published, but any pending +// published messages will be delivered to the subscribers. Done may be used +// to determine when all published messages have been delivered. +type PubSub struct { + cs *CallbackSerializer + + // Access to the below fields are guarded by this mutex. + mu sync.Mutex + msg any + subscribers map[Subscriber]bool +} + +// NewPubSub returns a new PubSub instance. Users should cancel the +// provided context to shutdown the PubSub. +func NewPubSub(ctx context.Context) *PubSub { + return &PubSub{ + cs: NewCallbackSerializer(ctx), + subscribers: map[Subscriber]bool{}, + } +} + +// Subscribe registers the provided Subscriber to the PubSub. +// +// If the PubSub contains a previously published message, the Subscriber's +// OnMessage() callback will be invoked asynchronously with the existing +// message to begin with, and subsequently for every newly published message. +// +// The caller is responsible for invoking the returned cancel function to +// unsubscribe itself from the PubSub. +func (ps *PubSub) Subscribe(sub Subscriber) (cancel func()) { + ps.mu.Lock() + defer ps.mu.Unlock() + + ps.subscribers[sub] = true + + if ps.msg != nil { + msg := ps.msg + ps.cs.Schedule(func(context.Context) { + ps.mu.Lock() + defer ps.mu.Unlock() + if !ps.subscribers[sub] { + return + } + sub.OnMessage(msg) + }) + } + + return func() { + ps.mu.Lock() + defer ps.mu.Unlock() + delete(ps.subscribers, sub) + } +} + +// Publish publishes the provided message to the PubSub, and invokes +// callbacks registered by subscribers asynchronously. +func (ps *PubSub) Publish(msg any) { + ps.mu.Lock() + defer ps.mu.Unlock() + + ps.msg = msg + for sub := range ps.subscribers { + s := sub + ps.cs.Schedule(func(context.Context) { + ps.mu.Lock() + defer ps.mu.Unlock() + if !ps.subscribers[s] { + return + } + s.OnMessage(msg) + }) + } +} + +// Done returns a channel that is closed after the context passed to NewPubSub +// is canceled and all updates have been sent to subscribers. +func (ps *PubSub) Done() <-chan struct{} { + return ps.cs.Done() +} diff --git a/vendor/google.golang.org/grpc/internal/idle/idle.go b/vendor/google.golang.org/grpc/internal/idle/idle.go new file mode 100644 index 0000000000000..6c272476e5ef6 --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/idle/idle.go @@ -0,0 +1,301 @@ +/* + * + * Copyright 2023 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package idle contains a component for managing idleness (entering and exiting) +// based on RPC activity. +package idle + +import ( + "fmt" + "math" + "sync" + "sync/atomic" + "time" + + "google.golang.org/grpc/grpclog" +) + +// For overriding in unit tests. +var timeAfterFunc = func(d time.Duration, f func()) *time.Timer { + return time.AfterFunc(d, f) +} + +// Enforcer is the functionality provided by grpc.ClientConn to enter +// and exit from idle mode. +type Enforcer interface { + ExitIdleMode() error + EnterIdleMode() error +} + +// Manager defines the functionality required to track RPC activity on a +// channel. +type Manager interface { + OnCallBegin() error + OnCallEnd() + Close() +} + +type noopManager struct{} + +func (noopManager) OnCallBegin() error { return nil } +func (noopManager) OnCallEnd() {} +func (noopManager) Close() {} + +// manager implements the Manager interface. It uses atomic operations to +// synchronize access to shared state and a mutex to guarantee mutual exclusion +// in a critical section. +type manager struct { + // State accessed atomically. + lastCallEndTime int64 // Unix timestamp in nanos; time when the most recent RPC completed. + activeCallsCount int32 // Count of active RPCs; -math.MaxInt32 means channel is idle or is trying to get there. + activeSinceLastTimerCheck int32 // Boolean; True if there was an RPC since the last timer callback. + closed int32 // Boolean; True when the manager is closed. + + // Can be accessed without atomics or mutex since these are set at creation + // time and read-only after that. + enforcer Enforcer // Functionality provided by grpc.ClientConn. + timeout int64 // Idle timeout duration nanos stored as an int64. + logger grpclog.LoggerV2 + + // idleMu is used to guarantee mutual exclusion in two scenarios: + // - Opposing intentions: + // - a: Idle timeout has fired and handleIdleTimeout() is trying to put + // the channel in idle mode because the channel has been inactive. + // - b: At the same time an RPC is made on the channel, and OnCallBegin() + // is trying to prevent the channel from going idle. + // - Competing intentions: + // - The channel is in idle mode and there are multiple RPCs starting at + // the same time, all trying to move the channel out of idle. Only one + // of them should succeed in doing so, while the other RPCs should + // piggyback on the first one and be successfully handled. + idleMu sync.RWMutex + actuallyIdle bool + timer *time.Timer +} + +// ManagerOptions is a collection of options used by +// NewManager. +type ManagerOptions struct { + Enforcer Enforcer + Timeout time.Duration + Logger grpclog.LoggerV2 +} + +// NewManager creates a new idleness manager implementation for the +// given idle timeout. +func NewManager(opts ManagerOptions) Manager { + if opts.Timeout == 0 { + return noopManager{} + } + + m := &manager{ + enforcer: opts.Enforcer, + timeout: int64(opts.Timeout), + logger: opts.Logger, + } + m.timer = timeAfterFunc(opts.Timeout, m.handleIdleTimeout) + return m +} + +// resetIdleTimer resets the idle timer to the given duration. This method +// should only be called from the timer callback. +func (m *manager) resetIdleTimer(d time.Duration) { + m.idleMu.Lock() + defer m.idleMu.Unlock() + + if m.timer == nil { + // Only close sets timer to nil. We are done. + return + } + + // It is safe to ignore the return value from Reset() because this method is + // only ever called from the timer callback, which means the timer has + // already fired. + m.timer.Reset(d) +} + +// handleIdleTimeout is the timer callback that is invoked upon expiry of the +// configured idle timeout. The channel is considered inactive if there are no +// ongoing calls and no RPC activity since the last time the timer fired. +func (m *manager) handleIdleTimeout() { + if m.isClosed() { + return + } + + if atomic.LoadInt32(&m.activeCallsCount) > 0 { + m.resetIdleTimer(time.Duration(m.timeout)) + return + } + + // There has been activity on the channel since we last got here. Reset the + // timer and return. + if atomic.LoadInt32(&m.activeSinceLastTimerCheck) == 1 { + // Set the timer to fire after a duration of idle timeout, calculated + // from the time the most recent RPC completed. + atomic.StoreInt32(&m.activeSinceLastTimerCheck, 0) + m.resetIdleTimer(time.Duration(atomic.LoadInt64(&m.lastCallEndTime) + m.timeout - time.Now().UnixNano())) + return + } + + // This CAS operation is extremely likely to succeed given that there has + // been no activity since the last time we were here. Setting the + // activeCallsCount to -math.MaxInt32 indicates to OnCallBegin() that the + // channel is either in idle mode or is trying to get there. + if !atomic.CompareAndSwapInt32(&m.activeCallsCount, 0, -math.MaxInt32) { + // This CAS operation can fail if an RPC started after we checked for + // activity at the top of this method, or one was ongoing from before + // the last time we were here. In both case, reset the timer and return. + m.resetIdleTimer(time.Duration(m.timeout)) + return + } + + // Now that we've set the active calls count to -math.MaxInt32, it's time to + // actually move to idle mode. + if m.tryEnterIdleMode() { + // Successfully entered idle mode. No timer needed until we exit idle. + return + } + + // Failed to enter idle mode due to a concurrent RPC that kept the channel + // active, or because of an error from the channel. Undo the attempt to + // enter idle, and reset the timer to try again later. + atomic.AddInt32(&m.activeCallsCount, math.MaxInt32) + m.resetIdleTimer(time.Duration(m.timeout)) +} + +// tryEnterIdleMode instructs the channel to enter idle mode. But before +// that, it performs a last minute check to ensure that no new RPC has come in, +// making the channel active. +// +// Return value indicates whether or not the channel moved to idle mode. +// +// Holds idleMu which ensures mutual exclusion with exitIdleMode. +func (m *manager) tryEnterIdleMode() bool { + m.idleMu.Lock() + defer m.idleMu.Unlock() + + if atomic.LoadInt32(&m.activeCallsCount) != -math.MaxInt32 { + // We raced and lost to a new RPC. Very rare, but stop entering idle. + return false + } + if atomic.LoadInt32(&m.activeSinceLastTimerCheck) == 1 { + // An very short RPC could have come in (and also finished) after we + // checked for calls count and activity in handleIdleTimeout(), but + // before the CAS operation. So, we need to check for activity again. + return false + } + + // No new RPCs have come in since we last set the active calls count value + // -math.MaxInt32 in the timer callback. And since we have the lock, it is + // safe to enter idle mode now. + if err := m.enforcer.EnterIdleMode(); err != nil { + m.logger.Errorf("Failed to enter idle mode: %v", err) + return false + } + + // Successfully entered idle mode. + m.actuallyIdle = true + return true +} + +// OnCallBegin is invoked at the start of every RPC. +func (m *manager) OnCallBegin() error { + if m.isClosed() { + return nil + } + + if atomic.AddInt32(&m.activeCallsCount, 1) > 0 { + // Channel is not idle now. Set the activity bit and allow the call. + atomic.StoreInt32(&m.activeSinceLastTimerCheck, 1) + return nil + } + + // Channel is either in idle mode or is in the process of moving to idle + // mode. Attempt to exit idle mode to allow this RPC. + if err := m.exitIdleMode(); err != nil { + // Undo the increment to calls count, and return an error causing the + // RPC to fail. + atomic.AddInt32(&m.activeCallsCount, -1) + return err + } + + atomic.StoreInt32(&m.activeSinceLastTimerCheck, 1) + return nil +} + +// exitIdleMode instructs the channel to exit idle mode. +// +// Holds idleMu which ensures mutual exclusion with tryEnterIdleMode. +func (m *manager) exitIdleMode() error { + m.idleMu.Lock() + defer m.idleMu.Unlock() + + if !m.actuallyIdle { + // This can happen in two scenarios: + // - handleIdleTimeout() set the calls count to -math.MaxInt32 and called + // tryEnterIdleMode(). But before the latter could grab the lock, an RPC + // came in and OnCallBegin() noticed that the calls count is negative. + // - Channel is in idle mode, and multiple new RPCs come in at the same + // time, all of them notice a negative calls count in OnCallBegin and get + // here. The first one to get the lock would got the channel to exit idle. + // + // Either way, nothing to do here. + return nil + } + + if err := m.enforcer.ExitIdleMode(); err != nil { + return fmt.Errorf("channel failed to exit idle mode: %v", err) + } + + // Undo the idle entry process. This also respects any new RPC attempts. + atomic.AddInt32(&m.activeCallsCount, math.MaxInt32) + m.actuallyIdle = false + + // Start a new timer to fire after the configured idle timeout. + m.timer = timeAfterFunc(time.Duration(m.timeout), m.handleIdleTimeout) + return nil +} + +// OnCallEnd is invoked at the end of every RPC. +func (m *manager) OnCallEnd() { + if m.isClosed() { + return + } + + // Record the time at which the most recent call finished. + atomic.StoreInt64(&m.lastCallEndTime, time.Now().UnixNano()) + + // Decrement the active calls count. This count can temporarily go negative + // when the timer callback is in the process of moving the channel to idle + // mode, but one or more RPCs come in and complete before the timer callback + // can get done with the process of moving to idle mode. + atomic.AddInt32(&m.activeCallsCount, -1) +} + +func (m *manager) isClosed() bool { + return atomic.LoadInt32(&m.closed) == 1 +} + +func (m *manager) Close() { + atomic.StoreInt32(&m.closed, 1) + + m.idleMu.Lock() + m.timer.Stop() + m.timer = nil + m.idleMu.Unlock() +} diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go index 0a76d9de6e027..c8a8c76d628ca 100644 --- a/vendor/google.golang.org/grpc/internal/internal.go +++ b/vendor/google.golang.org/grpc/internal/internal.go @@ -30,7 +30,7 @@ import ( var ( // WithHealthCheckFunc is set by dialoptions.go - WithHealthCheckFunc interface{} // func (HealthChecker) DialOption + WithHealthCheckFunc any // func (HealthChecker) DialOption // HealthCheckFunc is used to provide client-side LB channel health checking HealthCheckFunc HealthChecker // BalancerUnregister is exported by package balancer to unregister a balancer. @@ -38,8 +38,12 @@ var ( // KeepaliveMinPingTime is the minimum ping interval. This must be 10s by // default, but tests may wish to set it lower for convenience. KeepaliveMinPingTime = 10 * time.Second + // KeepaliveMinServerPingTime is the minimum ping interval for servers. + // This must be 1s by default, but tests may wish to set it lower for + // convenience. + KeepaliveMinServerPingTime = time.Second // ParseServiceConfig parses a JSON representation of the service config. - ParseServiceConfig interface{} // func(string) *serviceconfig.ParseResult + ParseServiceConfig any // func(string) *serviceconfig.ParseResult // EqualServiceConfigForTesting is for testing service config generation and // parsing. Both a and b should be returned by ParseServiceConfig. // This function compares the config without rawJSON stripped, in case the @@ -49,47 +53,81 @@ var ( // given name. This is set by package certprovider for use from xDS // bootstrap code while parsing certificate provider configs in the // bootstrap file. - GetCertificateProviderBuilder interface{} // func(string) certprovider.Builder + GetCertificateProviderBuilder any // func(string) certprovider.Builder // GetXDSHandshakeInfoForTesting returns a pointer to the xds.HandshakeInfo // stored in the passed in attributes. This is set by // credentials/xds/xds.go. - GetXDSHandshakeInfoForTesting interface{} // func (*attributes.Attributes) *xds.HandshakeInfo + GetXDSHandshakeInfoForTesting any // func (*attributes.Attributes) *xds.HandshakeInfo // GetServerCredentials returns the transport credentials configured on a // gRPC server. An xDS-enabled server needs to know what type of credentials // is configured on the underlying gRPC server. This is set by server.go. - GetServerCredentials interface{} // func (*grpc.Server) credentials.TransportCredentials + GetServerCredentials any // func (*grpc.Server) credentials.TransportCredentials + // CanonicalString returns the canonical string of the code defined here: + // https://github.com/grpc/grpc/blob/master/doc/statuscodes.md. + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. + CanonicalString any // func (codes.Code) string // DrainServerTransports initiates a graceful close of existing connections // on a gRPC server accepted on the provided listener address. An // xDS-enabled server invokes this method on a grpc.Server when a particular // listener moves to "not-serving" mode. - DrainServerTransports interface{} // func(*grpc.Server, string) + DrainServerTransports any // func(*grpc.Server, string) // AddGlobalServerOptions adds an array of ServerOption that will be // effective globally for newly created servers. The priority will be: 1. // user-provided; 2. this method; 3. default values. - AddGlobalServerOptions interface{} // func(opt ...ServerOption) + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. + AddGlobalServerOptions any // func(opt ...ServerOption) // ClearGlobalServerOptions clears the array of extra ServerOption. This // method is useful in testing and benchmarking. + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. ClearGlobalServerOptions func() // AddGlobalDialOptions adds an array of DialOption that will be effective // globally for newly created client channels. The priority will be: 1. // user-provided; 2. this method; 3. default values. - AddGlobalDialOptions interface{} // func(opt ...DialOption) + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. + AddGlobalDialOptions any // func(opt ...DialOption) + // DisableGlobalDialOptions returns a DialOption that prevents the + // ClientConn from applying the global DialOptions (set via + // AddGlobalDialOptions). + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. + DisableGlobalDialOptions any // func() grpc.DialOption // ClearGlobalDialOptions clears the array of extra DialOption. This // method is useful in testing and benchmarking. + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. ClearGlobalDialOptions func() // JoinDialOptions combines the dial options passed as arguments into a // single dial option. - JoinDialOptions interface{} // func(...grpc.DialOption) grpc.DialOption + JoinDialOptions any // func(...grpc.DialOption) grpc.DialOption // JoinServerOptions combines the server options passed as arguments into a // single server option. - JoinServerOptions interface{} // func(...grpc.ServerOption) grpc.ServerOption + JoinServerOptions any // func(...grpc.ServerOption) grpc.ServerOption // WithBinaryLogger returns a DialOption that specifies the binary logger // for a ClientConn. - WithBinaryLogger interface{} // func(binarylog.Logger) grpc.DialOption + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. + WithBinaryLogger any // func(binarylog.Logger) grpc.DialOption // BinaryLogger returns a ServerOption that can set the binary logger for a // server. - BinaryLogger interface{} // func(binarylog.Logger) grpc.ServerOption + // + // This is used in the 1.0 release of gcp/observability, and thus must not be + // deleted or changed. + BinaryLogger any // func(binarylog.Logger) grpc.ServerOption + + // SubscribeToConnectivityStateChanges adds a grpcsync.Subscriber to a provided grpc.ClientConn + SubscribeToConnectivityStateChanges any // func(*grpc.ClientConn, grpcsync.Subscriber) // NewXDSResolverWithConfigForTesting creates a new xds resolver builder using // the provided xds bootstrap config instead of the global configuration from @@ -100,7 +138,7 @@ var ( // // This function should ONLY be used for testing and may not work with some // other features, including the CSDS service. - NewXDSResolverWithConfigForTesting interface{} // func([]byte) (resolver.Builder, error) + NewXDSResolverWithConfigForTesting any // func([]byte) (resolver.Builder, error) // RegisterRLSClusterSpecifierPluginForTesting registers the RLS Cluster // Specifier Plugin for testing purposes, regardless of the XDSRLS environment @@ -130,6 +168,13 @@ var ( // // TODO: Remove this function once the RBAC env var is removed. UnregisterRBACHTTPFilterForTesting func() + + // ORCAAllowAnyMinReportingInterval is for examples/orca use ONLY. + ORCAAllowAnyMinReportingInterval any // func(so *orca.ServiceOptions) + + // GRPCResolverSchemeExtraMetadata determines when gRPC will add extra + // metadata to RPCs. + GRPCResolverSchemeExtraMetadata string = "xds" ) // HealthChecker defines the signature of the client-side LB channel health checking function. @@ -140,7 +185,7 @@ var ( // // The health checking protocol is defined at: // https://github.com/grpc/grpc/blob/master/doc/health-checking.md -type HealthChecker func(ctx context.Context, newStream func(string) (interface{}, error), setConnectivityState func(connectivity.State, error), serviceName string) error +type HealthChecker func(ctx context.Context, newStream func(string) (any, error), setConnectivityState func(connectivity.State, error), serviceName string) error const ( // CredsBundleModeFallback switches GoogleDefaultCreds to fallback mode. diff --git a/vendor/google.golang.org/grpc/internal/metadata/metadata.go b/vendor/google.golang.org/grpc/internal/metadata/metadata.go index b2980f8ac44ad..900bfb7160803 100644 --- a/vendor/google.golang.org/grpc/internal/metadata/metadata.go +++ b/vendor/google.golang.org/grpc/internal/metadata/metadata.go @@ -35,7 +35,7 @@ const mdKey = mdKeyType("grpc.internal.address.metadata") type mdValue metadata.MD -func (m mdValue) Equal(o interface{}) bool { +func (m mdValue) Equal(o any) bool { om, ok := o.(mdValue) if !ok { return false @@ -76,33 +76,11 @@ func Set(addr resolver.Address, md metadata.MD) resolver.Address { return addr } -// Validate returns an error if the input md contains invalid keys or values. -// -// If the header is not a pseudo-header, the following items are checked: -// - header names must contain one or more characters from this set [0-9 a-z _ - .]. -// - if the header-name ends with a "-bin" suffix, no validation of the header value is performed. -// - otherwise, the header value must contain one or more characters from the set [%x20-%x7E]. +// Validate validates every pair in md with ValidatePair. func Validate(md metadata.MD) error { for k, vals := range md { - // pseudo-header will be ignored - if k[0] == ':' { - continue - } - // check key, for i that saving a conversion if not using for range - for i := 0; i < len(k); i++ { - r := k[i] - if !(r >= 'a' && r <= 'z') && !(r >= '0' && r <= '9') && r != '.' && r != '-' && r != '_' { - return fmt.Errorf("header key %q contains illegal characters not in [0-9a-z-_.]", k) - } - } - if strings.HasSuffix(k, "-bin") { - continue - } - // check value - for _, val := range vals { - if hasNotPrintable(val) { - return fmt.Errorf("header key %q contains value with non-printable ASCII characters", k) - } + if err := ValidatePair(k, vals...); err != nil { + return err } } return nil @@ -118,3 +96,37 @@ func hasNotPrintable(msg string) bool { } return false } + +// ValidatePair validate a key-value pair with the following rules (the pseudo-header will be skipped) : +// +// - key must contain one or more characters. +// - the characters in the key must be contained in [0-9 a-z _ - .]. +// - if the key ends with a "-bin" suffix, no validation of the corresponding value is performed. +// - the characters in the every value must be printable (in [%x20-%x7E]). +func ValidatePair(key string, vals ...string) error { + // key should not be empty + if key == "" { + return fmt.Errorf("there is an empty key in the header") + } + // pseudo-header will be ignored + if key[0] == ':' { + return nil + } + // check key, for i that saving a conversion if not using for range + for i := 0; i < len(key); i++ { + r := key[i] + if !(r >= 'a' && r <= 'z') && !(r >= '0' && r <= '9') && r != '.' && r != '-' && r != '_' { + return fmt.Errorf("header key %q contains illegal characters not in [0-9a-z-_.]", key) + } + } + if strings.HasSuffix(key, "-bin") { + return nil + } + // check value + for _, val := range vals { + if hasNotPrintable(val) { + return fmt.Errorf("header key %q contains value with non-printable ASCII characters", key) + } + } + return nil +} diff --git a/vendor/google.golang.org/grpc/internal/pretty/pretty.go b/vendor/google.golang.org/grpc/internal/pretty/pretty.go index 0177af4b51140..7033191375deb 100644 --- a/vendor/google.golang.org/grpc/internal/pretty/pretty.go +++ b/vendor/google.golang.org/grpc/internal/pretty/pretty.go @@ -35,7 +35,7 @@ const jsonIndent = " " // ToJSON marshals the input into a json string. // // If marshal fails, it falls back to fmt.Sprintf("%+v"). -func ToJSON(e interface{}) string { +func ToJSON(e any) string { switch ee := e.(type) { case protov1.Message: mm := jsonpb.Marshaler{Indent: jsonIndent} diff --git a/vendor/google.golang.org/grpc/internal/resolver/config_selector.go b/vendor/google.golang.org/grpc/internal/resolver/config_selector.go index c7a18a948adbe..f0603871c93ac 100644 --- a/vendor/google.golang.org/grpc/internal/resolver/config_selector.go +++ b/vendor/google.golang.org/grpc/internal/resolver/config_selector.go @@ -92,7 +92,7 @@ type ClientStream interface { // calling RecvMsg on the same stream at the same time, but it is not safe // to call SendMsg on the same stream in different goroutines. It is also // not safe to call CloseSend concurrently with SendMsg. - SendMsg(m interface{}) error + SendMsg(m any) error // RecvMsg blocks until it receives a message into m or the stream is // done. It returns io.EOF when the stream completes successfully. On // any other error, the stream is aborted and the error contains the RPC @@ -101,7 +101,7 @@ type ClientStream interface { // It is safe to have a goroutine calling SendMsg and another goroutine // calling RecvMsg on the same stream at the same time, but it is not // safe to call RecvMsg on the same stream in different goroutines. - RecvMsg(m interface{}) error + RecvMsg(m any) error } // ClientInterceptor is an interceptor for gRPC client streams. diff --git a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go index 09a667f33cb09..99e1e5b36c891 100644 --- a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go +++ b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go @@ -62,7 +62,8 @@ const ( defaultPort = "443" defaultDNSSvrPort = "53" golang = "GO" - // txtPrefix is the prefix string to be prepended to the host name for txt record lookup. + // txtPrefix is the prefix string to be prepended to the host name for txt + // record lookup. txtPrefix = "_grpc_config." // In DNS, service config is encoded in a TXT record via the mechanism // described in RFC-1464 using the attribute name grpc_config. @@ -86,14 +87,14 @@ var ( minDNSResRate = 30 * time.Second ) -var customAuthorityDialler = func(authority string) func(ctx context.Context, network, address string) (net.Conn, error) { - return func(ctx context.Context, network, address string) (net.Conn, error) { +var addressDialer = func(address string) func(context.Context, string, string) (net.Conn, error) { + return func(ctx context.Context, network, _ string) (net.Conn, error) { var dialer net.Dialer - return dialer.DialContext(ctx, network, authority) + return dialer.DialContext(ctx, network, address) } } -var customAuthorityResolver = func(authority string) (netResolver, error) { +var newNetResolver = func(authority string) (netResolver, error) { host, port, err := parseTarget(authority, defaultDNSSvrPort) if err != nil { return nil, err @@ -103,7 +104,7 @@ var customAuthorityResolver = func(authority string) (netResolver, error) { return &net.Resolver{ PreferGo: true, - Dial: customAuthorityDialler(authorityWithPort), + Dial: addressDialer(authorityWithPort), }, nil } @@ -114,7 +115,8 @@ func NewBuilder() resolver.Builder { type dnsBuilder struct{} -// Build creates and starts a DNS resolver that watches the name resolution of the target. +// Build creates and starts a DNS resolver that watches the name resolution of +// the target. func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { host, port, err := parseTarget(target.Endpoint(), defaultPort) if err != nil { @@ -143,7 +145,7 @@ func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts if target.URL.Host == "" { d.resolver = defaultResolver } else { - d.resolver, err = customAuthorityResolver(target.URL.Host) + d.resolver, err = newNetResolver(target.URL.Host) if err != nil { return nil, err } @@ -180,19 +182,22 @@ type dnsResolver struct { ctx context.Context cancel context.CancelFunc cc resolver.ClientConn - // rn channel is used by ResolveNow() to force an immediate resolution of the target. + // rn channel is used by ResolveNow() to force an immediate resolution of the + // target. rn chan struct{} - // wg is used to enforce Close() to return after the watcher() goroutine has finished. - // Otherwise, data race will be possible. [Race Example] in dns_resolver_test we - // replace the real lookup functions with mocked ones to facilitate testing. - // If Close() doesn't wait for watcher() goroutine finishes, race detector sometimes - // will warns lookup (READ the lookup function pointers) inside watcher() goroutine - // has data race with replaceNetFunc (WRITE the lookup function pointers). + // wg is used to enforce Close() to return after the watcher() goroutine has + // finished. Otherwise, data race will be possible. [Race Example] in + // dns_resolver_test we replace the real lookup functions with mocked ones to + // facilitate testing. If Close() doesn't wait for watcher() goroutine + // finishes, race detector sometimes will warns lookup (READ the lookup + // function pointers) inside watcher() goroutine has data race with + // replaceNetFunc (WRITE the lookup function pointers). wg sync.WaitGroup disableServiceConfig bool } -// ResolveNow invoke an immediate resolution of the target that this dnsResolver watches. +// ResolveNow invoke an immediate resolution of the target that this +// dnsResolver watches. func (d *dnsResolver) ResolveNow(resolver.ResolveNowOptions) { select { case d.rn <- struct{}{}: @@ -220,8 +225,8 @@ func (d *dnsResolver) watcher() { var timer *time.Timer if err == nil { - // Success resolving, wait for the next ResolveNow. However, also wait 30 seconds at the very least - // to prevent constantly re-resolving. + // Success resolving, wait for the next ResolveNow. However, also wait 30 + // seconds at the very least to prevent constantly re-resolving. backoffIndex = 1 timer = newTimerDNSResRate(minDNSResRate) select { @@ -231,7 +236,8 @@ func (d *dnsResolver) watcher() { case <-d.rn: } } else { - // Poll on an error found in DNS Resolver or an error received from ClientConn. + // Poll on an error found in DNS Resolver or an error received from + // ClientConn. timer = newTimer(backoff.DefaultExponential.Backoff(backoffIndex)) backoffIndex++ } @@ -278,7 +284,8 @@ func (d *dnsResolver) lookupSRV() ([]resolver.Address, error) { } func handleDNSError(err error, lookupType string) error { - if dnsErr, ok := err.(*net.DNSError); ok && !dnsErr.IsTimeout && !dnsErr.IsTemporary { + dnsErr, ok := err.(*net.DNSError) + if ok && !dnsErr.IsTimeout && !dnsErr.IsTemporary { // Timeouts and temporary errors should be communicated to gRPC to // attempt another DNS query (with backoff). Other errors should be // suppressed (they may represent the absence of a TXT record). @@ -307,10 +314,12 @@ func (d *dnsResolver) lookupTXT() *serviceconfig.ParseResult { res += s } - // TXT record must have "grpc_config=" attribute in order to be used as service config. + // TXT record must have "grpc_config=" attribute in order to be used as + // service config. if !strings.HasPrefix(res, txtAttribute) { logger.Warningf("dns: TXT record %v missing %v attribute", res, txtAttribute) - // This is not an error; it is the equivalent of not having a service config. + // This is not an error; it is the equivalent of not having a service + // config. return nil } sc := canaryingSC(strings.TrimPrefix(res, txtAttribute)) @@ -352,9 +361,10 @@ func (d *dnsResolver) lookup() (*resolver.State, error) { return &state, nil } -// formatIP returns ok = false if addr is not a valid textual representation of an IP address. -// If addr is an IPv4 address, return the addr and ok = true. -// If addr is an IPv6 address, return the addr enclosed in square brackets and ok = true. +// formatIP returns ok = false if addr is not a valid textual representation of +// an IP address. If addr is an IPv4 address, return the addr and ok = true. +// If addr is an IPv6 address, return the addr enclosed in square brackets and +// ok = true. func formatIP(addr string) (addrIP string, ok bool) { ip := net.ParseIP(addr) if ip == nil { @@ -366,10 +376,10 @@ func formatIP(addr string) (addrIP string, ok bool) { return "[" + addr + "]", true } -// parseTarget takes the user input target string and default port, returns formatted host and port info. -// If target doesn't specify a port, set the port to be the defaultPort. -// If target is in IPv6 format and host-name is enclosed in square brackets, brackets -// are stripped when setting the host. +// parseTarget takes the user input target string and default port, returns +// formatted host and port info. If target doesn't specify a port, set the port +// to be the defaultPort. If target is in IPv6 format and host-name is enclosed +// in square brackets, brackets are stripped when setting the host. // examples: // target: "www.google.com" defaultPort: "443" returns host: "www.google.com", port: "443" // target: "ipv4-host:80" defaultPort: "443" returns host: "ipv4-host", port: "80" @@ -385,12 +395,14 @@ func parseTarget(target, defaultPort string) (host, port string, err error) { } if host, port, err = net.SplitHostPort(target); err == nil { if port == "" { - // If the port field is empty (target ends with colon), e.g. "[::1]:", this is an error. + // If the port field is empty (target ends with colon), e.g. "[::1]:", + // this is an error. return "", "", errEndsWithColon } // target has port, i.e ipv4-host:port, [ipv6-host]:port, host-name:port if host == "" { - // Keep consistent with net.Dial(): If the host is empty, as in ":80", the local system is assumed. + // Keep consistent with net.Dial(): If the host is empty, as in ":80", + // the local system is assumed. host = "localhost" } return host, port, nil diff --git a/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go b/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go new file mode 100644 index 0000000000000..11d82afcc7ec3 --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/serviceconfig/duration.go @@ -0,0 +1,130 @@ +/* + * + * Copyright 2023 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package serviceconfig + +import ( + "encoding/json" + "fmt" + "math" + "strconv" + "strings" + "time" +) + +// Duration defines JSON marshal and unmarshal methods to conform to the +// protobuf JSON spec defined [here]. +// +// [here]: https://protobuf.dev/reference/protobuf/google.protobuf/#duration +type Duration time.Duration + +func (d Duration) String() string { + return fmt.Sprint(time.Duration(d)) +} + +// MarshalJSON converts from d to a JSON string output. +func (d Duration) MarshalJSON() ([]byte, error) { + ns := time.Duration(d).Nanoseconds() + sec := ns / int64(time.Second) + ns = ns % int64(time.Second) + + var sign string + if sec < 0 || ns < 0 { + sign, sec, ns = "-", -1*sec, -1*ns + } + + // Generated output always contains 0, 3, 6, or 9 fractional digits, + // depending on required precision. + str := fmt.Sprintf("%s%d.%09d", sign, sec, ns) + str = strings.TrimSuffix(str, "000") + str = strings.TrimSuffix(str, "000") + str = strings.TrimSuffix(str, ".000") + return []byte(fmt.Sprintf("\"%ss\"", str)), nil +} + +// UnmarshalJSON unmarshals b as a duration JSON string into d. +func (d *Duration) UnmarshalJSON(b []byte) error { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + if !strings.HasSuffix(s, "s") { + return fmt.Errorf("malformed duration %q: missing seconds unit", s) + } + neg := false + if s[0] == '-' { + neg = true + s = s[1:] + } + ss := strings.SplitN(s[:len(s)-1], ".", 3) + if len(ss) > 2 { + return fmt.Errorf("malformed duration %q: too many decimals", s) + } + // hasDigits is set if either the whole or fractional part of the number is + // present, since both are optional but one is required. + hasDigits := false + var sec, ns int64 + if len(ss[0]) > 0 { + var err error + if sec, err = strconv.ParseInt(ss[0], 10, 64); err != nil { + return fmt.Errorf("malformed duration %q: %v", s, err) + } + // Maximum seconds value per the durationpb spec. + const maxProtoSeconds = 315_576_000_000 + if sec > maxProtoSeconds { + return fmt.Errorf("out of range: %q", s) + } + hasDigits = true + } + if len(ss) == 2 && len(ss[1]) > 0 { + if len(ss[1]) > 9 { + return fmt.Errorf("malformed duration %q: too many digits after decimal", s) + } + var err error + if ns, err = strconv.ParseInt(ss[1], 10, 64); err != nil { + return fmt.Errorf("malformed duration %q: %v", s, err) + } + for i := 9; i > len(ss[1]); i-- { + ns *= 10 + } + hasDigits = true + } + if !hasDigits { + return fmt.Errorf("malformed duration %q: contains no numbers", s) + } + + if neg { + sec *= -1 + ns *= -1 + } + + // Maximum/minimum seconds/nanoseconds representable by Go's time.Duration. + const maxSeconds = math.MaxInt64 / int64(time.Second) + const maxNanosAtMaxSeconds = math.MaxInt64 % int64(time.Second) + const minSeconds = math.MinInt64 / int64(time.Second) + const minNanosAtMinSeconds = math.MinInt64 % int64(time.Second) + + if sec > maxSeconds || (sec == maxSeconds && ns >= maxNanosAtMaxSeconds) { + *d = Duration(math.MaxInt64) + } else if sec < minSeconds || (sec == minSeconds && ns <= minNanosAtMinSeconds) { + *d = Duration(math.MinInt64) + } else { + *d = Duration(sec*int64(time.Second) + ns) + } + return nil +} diff --git a/vendor/google.golang.org/grpc/internal/status/status.go b/vendor/google.golang.org/grpc/internal/status/status.go index b0ead4f54f82f..4cf85cad9f810 100644 --- a/vendor/google.golang.org/grpc/internal/status/status.go +++ b/vendor/google.golang.org/grpc/internal/status/status.go @@ -49,7 +49,7 @@ func New(c codes.Code, msg string) *Status { } // Newf returns New(c, fmt.Sprintf(format, a...)). -func Newf(c codes.Code, format string, a ...interface{}) *Status { +func Newf(c codes.Code, format string, a ...any) *Status { return New(c, fmt.Sprintf(format, a...)) } @@ -64,7 +64,7 @@ func Err(c codes.Code, msg string) error { } // Errorf returns Error(c, fmt.Sprintf(format, a...)). -func Errorf(c codes.Code, format string, a ...interface{}) error { +func Errorf(c codes.Code, format string, a ...any) error { return Err(c, fmt.Sprintf(format, a...)) } @@ -120,11 +120,11 @@ func (s *Status) WithDetails(details ...proto.Message) (*Status, error) { // Details returns a slice of details messages attached to the status. // If a detail cannot be decoded, the error is returned in place of the detail. -func (s *Status) Details() []interface{} { +func (s *Status) Details() []any { if s == nil || s.s == nil { return nil } - details := make([]interface{}, 0, len(s.s.Details)) + details := make([]any, 0, len(s.s.Details)) for _, any := range s.s.Details { detail := &ptypes.DynamicAny{} if err := ptypes.UnmarshalAny(any, detail); err != nil { diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go index 9097385e1a6a5..b330ccedc8abd 100644 --- a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go +++ b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go @@ -22,6 +22,7 @@ import ( "bytes" "errors" "fmt" + "net" "runtime" "strconv" "sync" @@ -29,6 +30,7 @@ import ( "golang.org/x/net/http2" "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" "google.golang.org/grpc/status" ) @@ -38,7 +40,7 @@ var updateHeaderTblSize = func(e *hpack.Encoder, v uint32) { } type itemNode struct { - it interface{} + it any next *itemNode } @@ -47,7 +49,7 @@ type itemList struct { tail *itemNode } -func (il *itemList) enqueue(i interface{}) { +func (il *itemList) enqueue(i any) { n := &itemNode{it: i} if il.tail == nil { il.head, il.tail = n, n @@ -59,11 +61,11 @@ func (il *itemList) enqueue(i interface{}) { // peek returns the first item in the list without removing it from the // list. -func (il *itemList) peek() interface{} { +func (il *itemList) peek() any { return il.head.it } -func (il *itemList) dequeue() interface{} { +func (il *itemList) dequeue() any { if il.head == nil { return nil } @@ -334,7 +336,7 @@ func (c *controlBuffer) put(it cbItem) error { return err } -func (c *controlBuffer) executeAndPut(f func(it interface{}) bool, it cbItem) (bool, error) { +func (c *controlBuffer) executeAndPut(f func(it any) bool, it cbItem) (bool, error) { var wakeUp bool c.mu.Lock() if c.err != nil { @@ -371,7 +373,7 @@ func (c *controlBuffer) executeAndPut(f func(it interface{}) bool, it cbItem) (b } // Note argument f should never be nil. -func (c *controlBuffer) execute(f func(it interface{}) bool, it interface{}) (bool, error) { +func (c *controlBuffer) execute(f func(it any) bool, it any) (bool, error) { c.mu.Lock() if c.err != nil { c.mu.Unlock() @@ -385,7 +387,7 @@ func (c *controlBuffer) execute(f func(it interface{}) bool, it interface{}) (bo return true, nil } -func (c *controlBuffer) get(block bool) (interface{}, error) { +func (c *controlBuffer) get(block bool) (any, error) { for { c.mu.Lock() if c.err != nil { @@ -486,12 +488,14 @@ type loopyWriter struct { hEnc *hpack.Encoder // HPACK encoder. bdpEst *bdpEstimator draining bool + conn net.Conn + logger *grpclog.PrefixLogger // Side-specific handlers ssGoAwayHandler func(*goAway) (bool, error) } -func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator) *loopyWriter { +func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger) *loopyWriter { var buf bytes.Buffer l := &loopyWriter{ side: s, @@ -504,6 +508,8 @@ func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimato hBuf: &buf, hEnc: hpack.NewEncoder(&buf), bdpEst: bdpEst, + conn: conn, + logger: logger, } return l } @@ -521,15 +527,27 @@ const minBatchSize = 1000 // 2. Stream level flow control quota available. // // In each iteration of run loop, other than processing the incoming control -// frame, loopy calls processData, which processes one node from the activeStreams linked-list. -// This results in writing of HTTP2 frames into an underlying write buffer. -// When there's no more control frames to read from controlBuf, loopy flushes the write buffer. -// As an optimization, to increase the batch size for each flush, loopy yields the processor, once -// if the batch size is too low to give stream goroutines a chance to fill it up. +// frame, loopy calls processData, which processes one node from the +// activeStreams linked-list. This results in writing of HTTP2 frames into an +// underlying write buffer. When there's no more control frames to read from +// controlBuf, loopy flushes the write buffer. As an optimization, to increase +// the batch size for each flush, loopy yields the processor, once if the batch +// size is too low to give stream goroutines a chance to fill it up. +// +// Upon exiting, if the error causing the exit is not an I/O error, run() +// flushes and closes the underlying connection. Otherwise, the connection is +// left open to allow the I/O error to be encountered by the reader instead. func (l *loopyWriter) run() (err error) { - // Always flush the writer before exiting in case there are pending frames - // to be sent. - defer l.framer.writer.Flush() + defer func() { + if l.logger.V(logLevel) { + l.logger.Infof("loopyWriter exiting with error: %v", err) + } + if !isIOError(err) { + l.framer.writer.Flush() + l.conn.Close() + } + l.cbuf.finish() + }() for { it, err := l.cbuf.get(true) if err != nil { @@ -581,11 +599,11 @@ func (l *loopyWriter) outgoingWindowUpdateHandler(w *outgoingWindowUpdate) error return l.framer.fr.WriteWindowUpdate(w.streamID, w.increment) } -func (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) error { +func (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) { // Otherwise update the quota. if w.streamID == 0 { l.sendQuota += w.increment - return nil + return } // Find the stream and update it. if str, ok := l.estdStreams[w.streamID]; ok { @@ -593,10 +611,9 @@ func (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) error if strQuota := int(l.oiws) - str.bytesOutStanding; strQuota > 0 && str.state == waitingOnStreamQuota { str.state = active l.activeStreams.enqueue(str) - return nil + return } } - return nil } func (l *loopyWriter) outgoingSettingsHandler(s *outgoingSettings) error { @@ -604,13 +621,11 @@ func (l *loopyWriter) outgoingSettingsHandler(s *outgoingSettings) error { } func (l *loopyWriter) incomingSettingsHandler(s *incomingSettings) error { - if err := l.applySettings(s.ss); err != nil { - return err - } + l.applySettings(s.ss) return l.framer.fr.WriteSettingsAck() } -func (l *loopyWriter) registerStreamHandler(h *registerStream) error { +func (l *loopyWriter) registerStreamHandler(h *registerStream) { str := &outStream{ id: h.streamID, state: empty, @@ -618,15 +633,14 @@ func (l *loopyWriter) registerStreamHandler(h *registerStream) error { wq: h.wq, } l.estdStreams[h.streamID] = str - return nil } func (l *loopyWriter) headerHandler(h *headerFrame) error { if l.side == serverSide { str, ok := l.estdStreams[h.streamID] if !ok { - if logger.V(logLevel) { - logger.Warningf("transport: loopy doesn't recognize the stream: %d", h.streamID) + if l.logger.V(logLevel) { + l.logger.Infof("Unrecognized streamID %d in loopyWriter", h.streamID) } return nil } @@ -681,8 +695,8 @@ func (l *loopyWriter) writeHeader(streamID uint32, endStream bool, hf []hpack.He l.hBuf.Reset() for _, f := range hf { if err := l.hEnc.WriteField(f); err != nil { - if logger.V(logLevel) { - logger.Warningf("transport: loopyWriter.writeHeader encountered error while encoding headers: %v", err) + if l.logger.V(logLevel) { + l.logger.Warningf("Encountered error while encoding headers: %v", err) } } } @@ -720,10 +734,10 @@ func (l *loopyWriter) writeHeader(streamID uint32, endStream bool, hf []hpack.He return nil } -func (l *loopyWriter) preprocessData(df *dataFrame) error { +func (l *loopyWriter) preprocessData(df *dataFrame) { str, ok := l.estdStreams[df.streamID] if !ok { - return nil + return } // If we got data for a stream it means that // stream was originated and the headers were sent out. @@ -732,7 +746,6 @@ func (l *loopyWriter) preprocessData(df *dataFrame) error { str.state = active l.activeStreams.enqueue(str) } - return nil } func (l *loopyWriter) pingHandler(p *ping) error { @@ -743,9 +756,8 @@ func (l *loopyWriter) pingHandler(p *ping) error { } -func (l *loopyWriter) outFlowControlSizeRequestHandler(o *outFlowControlSizeRequest) error { +func (l *loopyWriter) outFlowControlSizeRequestHandler(o *outFlowControlSizeRequest) { o.resp <- l.sendQuota - return nil } func (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error { @@ -763,6 +775,7 @@ func (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error { } } if l.draining && len(l.estdStreams) == 0 { + // Flush and close the connection; we are done with it. return errors.New("finished processing active streams while in draining mode") } return nil @@ -798,6 +811,7 @@ func (l *loopyWriter) incomingGoAwayHandler(*incomingGoAway) error { if l.side == clientSide { l.draining = true if len(l.estdStreams) == 0 { + // Flush and close the connection; we are done with it. return errors.New("received GOAWAY with no active streams") } } @@ -816,17 +830,10 @@ func (l *loopyWriter) goAwayHandler(g *goAway) error { return nil } -func (l *loopyWriter) closeConnectionHandler() error { - // Exit loopyWriter entirely by returning an error here. This will lead to - // the transport closing the connection, and, ultimately, transport - // closure. - return ErrConnClosing -} - -func (l *loopyWriter) handle(i interface{}) error { +func (l *loopyWriter) handle(i any) error { switch i := i.(type) { case *incomingWindowUpdate: - return l.incomingWindowUpdateHandler(i) + l.incomingWindowUpdateHandler(i) case *outgoingWindowUpdate: return l.outgoingWindowUpdateHandler(i) case *incomingSettings: @@ -836,7 +843,7 @@ func (l *loopyWriter) handle(i interface{}) error { case *headerFrame: return l.headerHandler(i) case *registerStream: - return l.registerStreamHandler(i) + l.registerStreamHandler(i) case *cleanupStream: return l.cleanupStreamHandler(i) case *earlyAbortStream: @@ -844,21 +851,24 @@ func (l *loopyWriter) handle(i interface{}) error { case *incomingGoAway: return l.incomingGoAwayHandler(i) case *dataFrame: - return l.preprocessData(i) + l.preprocessData(i) case *ping: return l.pingHandler(i) case *goAway: return l.goAwayHandler(i) case *outFlowControlSizeRequest: - return l.outFlowControlSizeRequestHandler(i) + l.outFlowControlSizeRequestHandler(i) case closeConnection: - return l.closeConnectionHandler() + // Just return a non-I/O error and run() will flush and close the + // connection. + return ErrConnClosing default: return fmt.Errorf("transport: unknown control message type %T", i) } + return nil } -func (l *loopyWriter) applySettings(ss []http2.Setting) error { +func (l *loopyWriter) applySettings(ss []http2.Setting) { for _, s := range ss { switch s.ID { case http2.SettingInitialWindowSize: @@ -877,7 +887,6 @@ func (l *loopyWriter) applySettings(ss []http2.Setting) error { updateHeaderTblSize(l.hEnc, s.Val) } } - return nil } // processData removes the first stream from active streams, writes out at most 16KB @@ -911,7 +920,7 @@ func (l *loopyWriter) processData() (bool, error) { return false, err } if err := l.cleanupStreamHandler(trailer.cleanup); err != nil { - return false, nil + return false, err } } else { l.activeStreams.enqueue(str) diff --git a/vendor/google.golang.org/grpc/internal/transport/handler_server.go b/vendor/google.golang.org/grpc/internal/transport/handler_server.go index e6626bf96e7c5..98f80e3fa00aa 100644 --- a/vendor/google.golang.org/grpc/internal/transport/handler_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/handler_server.go @@ -39,6 +39,7 @@ import ( "golang.org/x/net/http2" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" @@ -83,6 +84,7 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats []s contentSubtype: contentSubtype, stats: stats, } + st.logger = prefixLoggerForServerHandlerTransport(st) if v := r.Header.Get("grpc-timeout"); v != "" { to, err := decodeTimeout(v) @@ -150,13 +152,14 @@ type serverHandlerTransport struct { // TODO make sure this is consistent across handler_server and http2_server contentSubtype string - stats []stats.Handler + stats []stats.Handler + logger *grpclog.PrefixLogger } func (ht *serverHandlerTransport) Close(err error) { ht.closeOnce.Do(func() { - if logger.V(logLevel) { - logger.Infof("Closing serverHandlerTransport: %v", err) + if ht.logger.V(logLevel) { + ht.logger.Infof("Closing: %v", err) } close(ht.closedCh) }) @@ -450,7 +453,7 @@ func (ht *serverHandlerTransport) IncrMsgSent() {} func (ht *serverHandlerTransport) IncrMsgRecv() {} -func (ht *serverHandlerTransport) Drain() { +func (ht *serverHandlerTransport) Drain(debugData string) { panic("Drain() is not implemented") } diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_client.go b/vendor/google.golang.org/grpc/internal/transport/http2_client.go index 79ee8aea0a21a..badab8acf3b11 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_client.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_client.go @@ -38,6 +38,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/internal/channelz" icredentials "google.golang.org/grpc/internal/credentials" + "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/internal/grpcutil" imetadata "google.golang.org/grpc/internal/metadata" @@ -145,6 +146,7 @@ type http2Client struct { bufferPool *bufferPool connectionID uint64 + logger *grpclog.PrefixLogger } func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr resolver.Address, useProxy bool, grpcUA string) (net.Conn, error) { @@ -244,7 +246,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts if err := connectCtx.Err(); err != nil { // connectCtx expired before exiting the function. Hard close the connection. if logger.V(logLevel) { - logger.Infof("newClientTransport: aborting due to connectCtx: %v", err) + logger.Infof("Aborting due to connect deadline expiring: %v", err) } conn.Close() } @@ -328,7 +330,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts readerDone: make(chan struct{}), writerDone: make(chan struct{}), goAway: make(chan struct{}), - framer: newFramer(conn, writeBufSize, readBufSize, maxHeaderListSize), + framer: newFramer(conn, writeBufSize, readBufSize, opts.SharedWriteBuffer, maxHeaderListSize), fc: &trInFlow{limit: uint32(icwz)}, scheme: scheme, activeStreams: make(map[uint32]*Stream), @@ -346,6 +348,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts bufferPool: newBufferPool(), onClose: onClose, } + t.logger = prefixLoggerForClientTransport(t) // Add peer information to the http2client context. t.ctx = peer.NewContext(t.ctx, t.getPeer()) @@ -444,15 +447,8 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts return nil, err } go func() { - t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst) - err := t.loopy.run() - if logger.V(logLevel) { - logger.Infof("transport: loopyWriter exited. Closing connection. Err: %v", err) - } - // Do not close the transport. Let reader goroutine handle it since - // there might be data in the buffers. - t.conn.Close() - t.controlBuf.finish() + t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger) + t.loopy.run() close(t.writerDone) }() return t, nil @@ -766,7 +762,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, firstTry := true var ch chan struct{} transportDrainRequired := false - checkForStreamQuota := func(it interface{}) bool { + checkForStreamQuota := func(it any) bool { if t.streamQuota <= 0 { // Can go negative if server decreases it. if firstTry { t.waitingStreams++ @@ -789,7 +785,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, s.id = h.streamID s.fc = &inFlow{limit: uint32(t.initialWindowSize)} t.mu.Lock() - if t.activeStreams == nil { // Can be niled from Close(). + if t.state == draining || t.activeStreams == nil { // Can be niled from Close(). t.mu.Unlock() return false // Don't create a stream if the transport is already closed. } @@ -804,7 +800,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, return true } var hdrListSizeErr error - checkForHeaderListSize := func(it interface{}) bool { + checkForHeaderListSize := func(it any) bool { if t.maxSendHeaderListSize == nil { return true } @@ -819,7 +815,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, return true } for { - success, err := t.controlBuf.executeAndPut(func(it interface{}) bool { + success, err := t.controlBuf.executeAndPut(func(it any) bool { return checkForHeaderListSize(it) && checkForStreamQuota(it) }, hdr) if err != nil { @@ -866,8 +862,8 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, } } if transportDrainRequired { - if logger.V(logLevel) { - logger.Infof("transport: t.nextID > MaxStreamID. Draining") + if t.logger.V(logLevel) { + t.logger.Infof("Draining transport: t.nextID > MaxStreamID") } t.GracefulClose() } @@ -931,7 +927,7 @@ func (t *http2Client) closeStream(s *Stream, err error, rst bool, rstCode http2. rst: rst, rstCode: rstCode, } - addBackStreamQuota := func(interface{}) bool { + addBackStreamQuota := func(any) bool { t.streamQuota++ if t.streamQuota > 0 && t.waitingStreams > 0 { select { @@ -959,8 +955,8 @@ func (t *http2Client) Close(err error) { t.mu.Unlock() return } - if logger.V(logLevel) { - logger.Infof("transport: closing: %v", err) + if t.logger.V(logLevel) { + t.logger.Infof("Closing: %v", err) } // Call t.onClose ASAP to prevent the client from attempting to create new // streams. @@ -1016,8 +1012,8 @@ func (t *http2Client) GracefulClose() { t.mu.Unlock() return } - if logger.V(logLevel) { - logger.Infof("transport: GracefulClose called") + if t.logger.V(logLevel) { + t.logger.Infof("GracefulClose called") } t.onClose(GoAwayInvalid) t.state = draining @@ -1084,7 +1080,7 @@ func (t *http2Client) updateWindow(s *Stream, n uint32) { // for the transport and the stream based on the current bdp // estimation. func (t *http2Client) updateFlowControl(n uint32) { - updateIWS := func(interface{}) bool { + updateIWS := func(any) bool { t.initialWindowSize = int32(n) t.mu.Lock() for _, s := range t.activeStreams { @@ -1181,8 +1177,8 @@ func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) { } statusCode, ok := http2ErrConvTab[f.ErrCode] if !ok { - if logger.V(logLevel) { - logger.Warningf("transport: http2Client.handleRSTStream found no mapped gRPC status for the received http2 error: %v", f.ErrCode) + if t.logger.V(logLevel) { + t.logger.Infof("Received a RST_STREAM frame with code %q, but found no mapped gRPC status", f.ErrCode) } statusCode = codes.Unknown } @@ -1237,7 +1233,7 @@ func (t *http2Client) handleSettings(f *http2.SettingsFrame, isFirst bool) { } updateFuncs = append(updateFuncs, updateStreamQuota) } - t.controlBuf.executeAndPut(func(interface{}) bool { + t.controlBuf.executeAndPut(func(any) bool { for _, f := range updateFuncs { f() } @@ -1264,10 +1260,12 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { t.mu.Unlock() return } - if f.ErrCode == http2.ErrCodeEnhanceYourCalm { - if logger.V(logLevel) { - logger.Infof("Client received GoAway with http2.ErrCodeEnhanceYourCalm.") - } + if f.ErrCode == http2.ErrCodeEnhanceYourCalm && string(f.DebugData()) == "too_many_pings" { + // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug + // data equal to ASCII "too_many_pings", it should log the occurrence at a log level that is + // enabled by default and double the configure KEEPALIVE_TIME used for new connections + // on that channel. + logger.Errorf("Client received GoAway with error code ENHANCE_YOUR_CALM and debug data equal to ASCII \"too_many_pings\".") } id := f.LastStreamID if id > 0 && id%2 == 0 { @@ -1339,7 +1337,7 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { // setGoAwayReason sets the value of t.goAwayReason based // on the GoAway frame received. -// It expects a lock on transport's mutext to be held by +// It expects a lock on transport's mutex to be held by // the caller. func (t *http2Client) setGoAwayReason(f *http2.GoAwayFrame) { t.goAwayReason = GoAwayNoReason @@ -1507,14 +1505,15 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { return } - isHeader := false - - // If headerChan hasn't been closed yet - if atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) { - s.headerValid = true - if !endStream { - // HEADERS frame block carries a Response-Headers. - isHeader = true + // For headers, set them in s.header and close headerChan. For trailers or + // trailers-only, closeStream will set the trailers and close headerChan as + // needed. + if !endStream { + // If headerChan hasn't been closed yet (expected, given we checked it + // above, but something else could have potentially closed the whole + // stream). + if atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) { + s.headerValid = true // These values can be set without any synchronization because // stream goroutine will read it only after seeing a closed // headerChan which we'll close after setting this. @@ -1522,15 +1521,12 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { if len(mdata) > 0 { s.header = mdata } - } else { - // HEADERS frame block carries a Trailers-Only. - s.noHeaders = true + close(s.headerChan) } - close(s.headerChan) } for _, sh := range t.statsHandlers { - if isHeader { + if !endStream { inHeader := &stats.InHeader{ Client: true, WireLength: int(frame.Header().Length), @@ -1556,9 +1552,10 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { statusGen = status.New(rawStatusCode, grpcMessage) } - // if client received END_STREAM from server while stream was still active, send RST_STREAM - rst := s.getState() == streamActive - t.closeStream(s, io.EOF, rst, http2.ErrCodeNo, statusGen, mdata, true) + // If client received END_STREAM from server while stream was still active, + // send RST_STREAM. + rstStream := s.getState() == streamActive + t.closeStream(s, io.EOF, rstStream, http2.ErrCodeNo, statusGen, mdata, true) } // readServerPreface reads and handles the initial settings frame from the diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go index bc3da706726d5..8d3a353c1d581 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go @@ -35,7 +35,9 @@ import ( "github.com/golang/protobuf/proto" "golang.org/x/net/http2" "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/internal/grpclog" "google.golang.org/grpc/internal/grpcutil" + "google.golang.org/grpc/internal/pretty" "google.golang.org/grpc/internal/syscall" "google.golang.org/grpc/codes" @@ -129,6 +131,8 @@ type http2Server struct { // This lock may not be taken if mu is already held. maxStreamMu sync.Mutex maxStreamID uint32 // max stream ID ever seen + + logger *grpclog.PrefixLogger } // NewServerTransport creates a http2 transport with conn and configuration @@ -161,7 +165,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, if config.MaxHeaderListSize != nil { maxHeaderListSize = *config.MaxHeaderListSize } - framer := newFramer(conn, writeBufSize, readBufSize, maxHeaderListSize) + framer := newFramer(conn, writeBufSize, readBufSize, config.SharedWriteBuffer, maxHeaderListSize) // Send initial settings as connection preface to client. isettings := []http2.Setting{{ ID: http2.SettingMaxFrameSize, @@ -234,7 +238,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, kp.Timeout = defaultServerKeepaliveTimeout } if kp.Time != infinity { - if err = syscall.SetTCPUserTimeout(conn, kp.Timeout); err != nil { + if err = syscall.SetTCPUserTimeout(rawConn, kp.Timeout); err != nil { return nil, connectionErrorf(false, err, "transport: failed to set TCP_USER_TIMEOUT: %v", err) } } @@ -267,6 +271,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, czData: new(channelzData), bufferPool: newBufferPool(), } + t.logger = prefixLoggerForServerTransport(t) // Add peer information to the http2server context. t.ctx = peer.NewContext(t.ctx, t.getPeer()) @@ -331,14 +336,9 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport, t.handleSettings(sf) go func() { - t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst) + t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger) t.loopy.ssGoAwayHandler = t.outgoingGoAwayHandler - err := t.loopy.run() - if logger.V(logLevel) { - logger.Infof("transport: loopyWriter exited. Closing connection. Err: %v", err) - } - t.conn.Close() - t.controlBuf.finish() + t.loopy.run() close(t.writerDone) }() go t.keepalive() @@ -383,7 +383,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( // if false, content-type was missing or invalid isGRPC = false contentType = "" - mdata = make(map[string][]string) + mdata = make(metadata.MD, len(frame.Fields)) httpMethod string // these are set if an error is encountered while parsing the headers protocolError bool @@ -404,6 +404,17 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( mdata[hf.Name] = append(mdata[hf.Name], hf.Value) s.contentSubtype = contentSubtype isGRPC = true + + case "grpc-accept-encoding": + mdata[hf.Name] = append(mdata[hf.Name], hf.Value) + if hf.Value == "" { + continue + } + compressors := hf.Value + if s.clientAdvertisedCompressors != "" { + compressors = s.clientAdvertisedCompressors + "," + compressors + } + s.clientAdvertisedCompressors = compressors case "grpc-encoding": s.recvCompress = hf.Value case ":method": @@ -419,8 +430,8 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( // "Transports must consider requests containing the Connection header // as malformed." - A41 case "connection": - if logger.V(logLevel) { - logger.Errorf("transport: http2Server.operateHeaders parsed a :connection header which makes a request malformed as per the HTTP/2 spec") + if t.logger.V(logLevel) { + t.logger.Infof("Received a HEADERS frame with a :connection header which makes the request malformed, as per the HTTP/2 spec") } protocolError = true default: @@ -430,7 +441,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( v, err := decodeMetadataHeader(hf.Name, hf.Value) if err != nil { headerError = status.Newf(codes.Internal, "malformed binary metadata %q in header %q: %v", hf.Value, hf.Name, err) - logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err) + t.logger.Warningf("Failed to decode metadata header (%q, %q): %v", hf.Name, hf.Value, err) break } mdata[hf.Name] = append(mdata[hf.Name], v) @@ -444,8 +455,8 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( // error, this takes precedence over a client not speaking gRPC. if len(mdata[":authority"]) > 1 || len(mdata["host"]) > 1 { errMsg := fmt.Sprintf("num values of :authority: %v, num values of host: %v, both must only have 1 value as per HTTP/2 spec", len(mdata[":authority"]), len(mdata["host"])) - if logger.V(logLevel) { - logger.Errorf("transport: %v", errMsg) + if t.logger.V(logLevel) { + t.logger.Infof("Aborting the stream early: %v", errMsg) } t.controlBuf.put(&earlyAbortStream{ httpStatus: http.StatusBadRequest, @@ -539,9 +550,9 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( } if httpMethod != http.MethodPost { t.mu.Unlock() - errMsg := fmt.Sprintf("http2Server.operateHeaders parsed a :method field: %v which should be POST", httpMethod) - if logger.V(logLevel) { - logger.Infof("transport: %v", errMsg) + errMsg := fmt.Sprintf("Received a HEADERS frame with :method %q which should be POST", httpMethod) + if t.logger.V(logLevel) { + t.logger.Infof("Aborting the stream early: %v", errMsg) } t.controlBuf.put(&earlyAbortStream{ httpStatus: 405, @@ -557,8 +568,8 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( var err error if s.ctx, err = t.inTapHandle(s.ctx, &tap.Info{FullMethodName: s.method}); err != nil { t.mu.Unlock() - if logger.V(logLevel) { - logger.Infof("transport: http2Server.operateHeaders got an error from InTapHandle: %v", err) + if t.logger.V(logLevel) { + t.logger.Infof("Aborting the stream early due to InTapHandle failure: %v", err) } stat, ok := status.FromError(err) if !ok { @@ -595,7 +606,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( LocalAddr: t.localAddr, Compression: s.recvCompress, WireLength: int(frame.Header().Length), - Header: metadata.MD(mdata).Copy(), + Header: mdata.Copy(), } sh.HandleRPC(s.ctx, inHeader) } @@ -632,8 +643,8 @@ func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context. atomic.StoreInt64(&t.lastRead, time.Now().UnixNano()) if err != nil { if se, ok := err.(http2.StreamError); ok { - if logger.V(logLevel) { - logger.Warningf("transport: http2Server.HandleStreams encountered http2.StreamError: %v", se) + if t.logger.V(logLevel) { + t.logger.Warningf("Encountered http2.StreamError: %v", se) } t.mu.Lock() s := t.activeStreams[se.StreamID] @@ -676,8 +687,8 @@ func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context. case *http2.GoAwayFrame: // TODO: Handle GoAway from the client appropriately. default: - if logger.V(logLevel) { - logger.Errorf("transport: http2Server.HandleStreams found unhandled frame type %v.", frame) + if t.logger.V(logLevel) { + t.logger.Infof("Received unsupported frame type %T", frame) } } } @@ -844,7 +855,7 @@ func (t *http2Server) handleSettings(f *http2.SettingsFrame) { } return nil }) - t.controlBuf.executeAndPut(func(interface{}) bool { + t.controlBuf.executeAndPut(func(any) bool { for _, f := range updateFuncs { f() } @@ -928,7 +939,7 @@ func appendHeaderFieldsFromMD(headerFields []hpack.HeaderField, md metadata.MD) return headerFields } -func (t *http2Server) checkForHeaderListSize(it interface{}) bool { +func (t *http2Server) checkForHeaderListSize(it any) bool { if t.maxSendHeaderListSize == nil { return true } @@ -936,8 +947,8 @@ func (t *http2Server) checkForHeaderListSize(it interface{}) bool { var sz int64 for _, f := range hdrFrame.hf { if sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) { - if logger.V(logLevel) { - logger.Errorf("header list size to send violates the maximum size (%d bytes) set by client", *t.maxSendHeaderListSize) + if t.logger.V(logLevel) { + t.logger.Infof("Header list size to send violates the maximum size (%d bytes) set by client", *t.maxSendHeaderListSize) } return false } @@ -1050,7 +1061,7 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { stBytes, err := proto.Marshal(p) if err != nil { // TODO: return error instead, when callers are able to handle it. - logger.Errorf("transport: failed to marshal rpc status: %v, error: %v", p, err) + t.logger.Errorf("Failed to marshal rpc status: %s, error: %v", pretty.ToJSON(p), err) } else { headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status-details-bin", Value: encodeBinHeader(stBytes)}) } @@ -1155,18 +1166,18 @@ func (t *http2Server) keepalive() { if val <= 0 { // The connection has been idle for a duration of keepalive.MaxConnectionIdle or more. // Gracefully close the connection. - t.Drain() + t.Drain("max_idle") return } idleTimer.Reset(val) case <-ageTimer.C: - t.Drain() + t.Drain("max_age") ageTimer.Reset(t.kp.MaxConnectionAgeGrace) select { case <-ageTimer.C: // Close the connection after grace period. - if logger.V(logLevel) { - logger.Infof("transport: closing server transport due to maximum connection age.") + if t.logger.V(logLevel) { + t.logger.Infof("Closing server transport due to maximum connection age") } t.controlBuf.put(closeConnection{}) case <-t.done: @@ -1217,8 +1228,8 @@ func (t *http2Server) Close(err error) { t.mu.Unlock() return } - if logger.V(logLevel) { - logger.Infof("transport: closing: %v", err) + if t.logger.V(logLevel) { + t.logger.Infof("Closing: %v", err) } t.state = closing streams := t.activeStreams @@ -1226,8 +1237,8 @@ func (t *http2Server) Close(err error) { t.mu.Unlock() t.controlBuf.finish() close(t.done) - if err := t.conn.Close(); err != nil && logger.V(logLevel) { - logger.Infof("transport: error closing conn during Close: %v", err) + if err := t.conn.Close(); err != nil && t.logger.V(logLevel) { + t.logger.Infof("Error closing underlying net.Conn during Close: %v", err) } channelz.RemoveEntry(t.channelzID) // Cancel all active streams. @@ -1307,14 +1318,14 @@ func (t *http2Server) RemoteAddr() net.Addr { return t.remoteAddr } -func (t *http2Server) Drain() { +func (t *http2Server) Drain(debugData string) { t.mu.Lock() defer t.mu.Unlock() if t.drainEvent != nil { return } t.drainEvent = grpcsync.NewEvent() - t.controlBuf.put(&goAway{code: http2.ErrCodeNo, debugData: []byte{}, headsUp: true}) + t.controlBuf.put(&goAway{code: http2.ErrCodeNo, debugData: []byte(debugData), headsUp: true}) } var goAwayPing = &ping{data: [8]byte{1, 6, 1, 8, 0, 3, 3, 9}} @@ -1344,9 +1355,6 @@ func (t *http2Server) outgoingGoAwayHandler(g *goAway) (bool, error) { return false, err } if retErr != nil { - // Abruptly close the connection following the GoAway (via - // loopywriter). But flush out what's inside the buffer first. - t.framer.writer.Flush() return false, retErr } return true, nil @@ -1359,7 +1367,7 @@ func (t *http2Server) outgoingGoAwayHandler(g *goAway) (bool, error) { // originated before the GoAway reaches the client. // After getting the ack or timer expiration send out another GoAway this // time with an ID of the max stream server intends to process. - if err := t.framer.fr.WriteGoAway(math.MaxUint32, http2.ErrCodeNo, []byte{}); err != nil { + if err := t.framer.fr.WriteGoAway(math.MaxUint32, http2.ErrCodeNo, g.debugData); err != nil { return false, err } if err := t.framer.fr.WritePing(false, goAwayPing.data); err != nil { diff --git a/vendor/google.golang.org/grpc/internal/transport/http_util.go b/vendor/google.golang.org/grpc/internal/transport/http_util.go index 2c601a864d995..1958140082b35 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http_util.go +++ b/vendor/google.golang.org/grpc/internal/transport/http_util.go @@ -21,6 +21,7 @@ package transport import ( "bufio" "encoding/base64" + "errors" "fmt" "io" "math" @@ -29,6 +30,7 @@ import ( "net/url" "strconv" "strings" + "sync" "time" "unicode/utf8" @@ -37,7 +39,6 @@ import ( "golang.org/x/net/http2/hpack" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" ) @@ -85,7 +86,6 @@ var ( // 504 Gateway timeout - UNAVAILABLE. http.StatusGatewayTimeout: codes.Unavailable, } - logger = grpclog.Component("transport") ) // isReservedHeader checks whether hdr belongs to HTTP2 headers @@ -310,6 +310,7 @@ func decodeGrpcMessageUnchecked(msg string) string { } type bufWriter struct { + pool *sync.Pool buf []byte offset int batchSize int @@ -317,12 +318,17 @@ type bufWriter struct { err error } -func newBufWriter(conn net.Conn, batchSize int) *bufWriter { - return &bufWriter{ - buf: make([]byte, batchSize*2), +func newBufWriter(conn net.Conn, batchSize int, pool *sync.Pool) *bufWriter { + w := &bufWriter{ batchSize: batchSize, conn: conn, + pool: pool, } + // this indicates that we should use non shared buf + if pool == nil { + w.buf = make([]byte, batchSize) + } + return w } func (w *bufWriter) Write(b []byte) (n int, err error) { @@ -330,7 +336,12 @@ func (w *bufWriter) Write(b []byte) (n int, err error) { return 0, w.err } if w.batchSize == 0 { // Buffer has been disabled. - return w.conn.Write(b) + n, err = w.conn.Write(b) + return n, toIOError(err) + } + if w.buf == nil { + b := w.pool.Get().(*[]byte) + w.buf = *b } for len(b) > 0 { nn := copy(w.buf[w.offset:], b) @@ -338,13 +349,24 @@ func (w *bufWriter) Write(b []byte) (n int, err error) { w.offset += nn n += nn if w.offset >= w.batchSize { - err = w.Flush() + err = w.flushKeepBuffer() } } return n, err } func (w *bufWriter) Flush() error { + err := w.flushKeepBuffer() + // Only release the buffer if we are in a "shared" mode + if w.buf != nil && w.pool != nil { + b := w.buf + w.pool.Put(&b) + w.buf = nil + } + return err +} + +func (w *bufWriter) flushKeepBuffer() error { if w.err != nil { return w.err } @@ -352,16 +374,39 @@ func (w *bufWriter) Flush() error { return nil } _, w.err = w.conn.Write(w.buf[:w.offset]) + w.err = toIOError(w.err) w.offset = 0 return w.err } +type ioError struct { + error +} + +func (i ioError) Unwrap() error { + return i.error +} + +func isIOError(err error) bool { + return errors.As(err, &ioError{}) +} + +func toIOError(err error) error { + if err == nil { + return nil + } + return ioError{error: err} +} + type framer struct { writer *bufWriter fr *http2.Framer } -func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, maxHeaderListSize uint32) *framer { +var writeBufferPoolMap map[int]*sync.Pool = make(map[int]*sync.Pool) +var writeBufferMutex sync.Mutex + +func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, sharedWriteBuffer bool, maxHeaderListSize uint32) *framer { if writeBufferSize < 0 { writeBufferSize = 0 } @@ -369,7 +414,11 @@ func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, maxHeaderList if readBufferSize > 0 { r = bufio.NewReaderSize(r, readBufferSize) } - w := newBufWriter(conn, writeBufferSize) + var pool *sync.Pool + if sharedWriteBuffer { + pool = getWriteBufferPool(writeBufferSize) + } + w := newBufWriter(conn, writeBufferSize, pool) f := &framer{ writer: w, fr: http2.NewFramer(w, r), @@ -383,6 +432,24 @@ func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, maxHeaderList return f } +func getWriteBufferPool(writeBufferSize int) *sync.Pool { + writeBufferMutex.Lock() + defer writeBufferMutex.Unlock() + size := writeBufferSize * 2 + pool, ok := writeBufferPoolMap[size] + if ok { + return pool + } + pool = &sync.Pool{ + New: func() any { + b := make([]byte, size) + return &b + }, + } + writeBufferPoolMap[size] = pool + return pool +} + // parseDialTarget returns the network and address to pass to dialer. func parseDialTarget(target string) (string, string) { net := "tcp" diff --git a/vendor/google.golang.org/grpc/internal/transport/logging.go b/vendor/google.golang.org/grpc/internal/transport/logging.go new file mode 100644 index 0000000000000..42ed2b07af663 --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/transport/logging.go @@ -0,0 +1,40 @@ +/* + * + * Copyright 2023 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package transport + +import ( + "fmt" + + "google.golang.org/grpc/grpclog" + internalgrpclog "google.golang.org/grpc/internal/grpclog" +) + +var logger = grpclog.Component("transport") + +func prefixLoggerForServerTransport(p *http2Server) *internalgrpclog.PrefixLogger { + return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[server-transport %p] ", p)) +} + +func prefixLoggerForServerHandlerTransport(p *serverHandlerTransport) *internalgrpclog.PrefixLogger { + return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[server-handler-transport %p] ", p)) +} + +func prefixLoggerForClientTransport(p *http2Client) *internalgrpclog.PrefixLogger { + return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[client-transport %p] ", p)) +} diff --git a/vendor/google.golang.org/grpc/internal/transport/transport.go b/vendor/google.golang.org/grpc/internal/transport/transport.go index 0ac77ea4f8c70..74a811fc0590b 100644 --- a/vendor/google.golang.org/grpc/internal/transport/transport.go +++ b/vendor/google.golang.org/grpc/internal/transport/transport.go @@ -43,10 +43,6 @@ import ( "google.golang.org/grpc/tap" ) -// ErrNoHeaders is used as a signal that a trailers only response was received, -// and is not a real error. -var ErrNoHeaders = errors.New("stream has no headers") - const logLevel = 2 type bufferPool struct { @@ -56,7 +52,7 @@ type bufferPool struct { func newBufferPool() *bufferPool { return &bufferPool{ pool: sync.Pool{ - New: func() interface{} { + New: func() any { return new(bytes.Buffer) }, }, @@ -257,6 +253,9 @@ type Stream struct { fc *inFlow wq *writeQuota + // Holds compressor names passed in grpc-accept-encoding metadata from the + // client. This is empty for the client side stream. + clientAdvertisedCompressors string // Callback to state application's intentions to read data. This // is used to adjust flow control, if needed. requestRead func(int) @@ -345,8 +344,24 @@ func (s *Stream) RecvCompress() string { } // SetSendCompress sets the compression algorithm to the stream. -func (s *Stream) SetSendCompress(str string) { - s.sendCompress = str +func (s *Stream) SetSendCompress(name string) error { + if s.isHeaderSent() || s.getState() == streamDone { + return errors.New("transport: set send compressor called after headers sent or stream done") + } + + s.sendCompress = name + return nil +} + +// SendCompress returns the send compressor name. +func (s *Stream) SendCompress() string { + return s.sendCompress +} + +// ClientAdvertisedCompressors returns the compressor names advertised by the +// client via grpc-accept-encoding header. +func (s *Stream) ClientAdvertisedCompressors() string { + return s.clientAdvertisedCompressors } // Done returns a channel which is closed when it receives the final status @@ -371,14 +386,10 @@ func (s *Stream) Header() (metadata.MD, error) { } s.waitOnHeader() - if !s.headerValid { + if !s.headerValid || s.noHeaders { return nil, s.status.Err() } - if s.noHeaders { - return nil, ErrNoHeaders - } - return s.header.Copy(), nil } @@ -540,6 +551,7 @@ type ServerConfig struct { InitialConnWindowSize int32 WriteBufferSize int ReadBufferSize int + SharedWriteBuffer bool ChannelzParentID *channelz.Identifier MaxHeaderListSize *uint32 HeaderTableSize *uint32 @@ -573,6 +585,8 @@ type ConnectOptions struct { WriteBufferSize int // ReadBufferSize sets the size of read buffer, which in turn determines how much data can be read at most for one read syscall. ReadBufferSize int + // SharedWriteBuffer indicates whether connections should reuse write buffer + SharedWriteBuffer bool // ChannelzParentID sets the addrConn id which initiate the creation of this client transport. ChannelzParentID *channelz.Identifier // MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received. @@ -707,7 +721,7 @@ type ServerTransport interface { RemoteAddr() net.Addr // Drain notifies the client this ServerTransport stops accepting new RPCs. - Drain() + Drain(debugData string) // IncrMsgSent increments the number of message sent through this transport. IncrMsgSent() @@ -717,7 +731,7 @@ type ServerTransport interface { } // connectionErrorf creates an ConnectionError with the specified error description. -func connectionErrorf(temp bool, e error, format string, a ...interface{}) ConnectionError { +func connectionErrorf(temp bool, e error, format string, a ...any) ConnectionError { return ConnectionError{ Desc: fmt.Sprintf(format, a...), temp: temp, diff --git a/vendor/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go index fb4a88f59bd3c..a2cdcaf12a87f 100644 --- a/vendor/google.golang.org/grpc/metadata/metadata.go +++ b/vendor/google.golang.org/grpc/metadata/metadata.go @@ -91,7 +91,11 @@ func (md MD) Len() int { // Copy returns a copy of md. func (md MD) Copy() MD { - return Join(md) + out := make(MD, len(md)) + for k, v := range md { + out[k] = copyOf(v) + } + return out } // Get obtains the values for a given key. @@ -171,8 +175,11 @@ func AppendToOutgoingContext(ctx context.Context, kv ...string) context.Context md, _ := ctx.Value(mdOutgoingKey{}).(rawMD) added := make([][]string, len(md.added)+1) copy(added, md.added) - added[len(added)-1] = make([]string, len(kv)) - copy(added[len(added)-1], kv) + kvCopy := make([]string, 0, len(kv)) + for i := 0; i < len(kv); i += 2 { + kvCopy = append(kvCopy, strings.ToLower(kv[i]), kv[i+1]) + } + added[len(added)-1] = kvCopy return context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md.md, added: added}) } diff --git a/vendor/google.golang.org/grpc/picker_wrapper.go b/vendor/google.golang.org/grpc/picker_wrapper.go index c525dc070fc6d..236837f4157cf 100644 --- a/vendor/google.golang.org/grpc/picker_wrapper.go +++ b/vendor/google.golang.org/grpc/picker_wrapper.go @@ -28,26 +28,36 @@ import ( "google.golang.org/grpc/internal/channelz" istatus "google.golang.org/grpc/internal/status" "google.golang.org/grpc/internal/transport" + "google.golang.org/grpc/stats" "google.golang.org/grpc/status" ) // pickerWrapper is a wrapper of balancer.Picker. It blocks on certain pick // actions and unblock when there's a picker update. type pickerWrapper struct { - mu sync.Mutex - done bool - blockingCh chan struct{} - picker balancer.Picker + mu sync.Mutex + done bool + idle bool + blockingCh chan struct{} + picker balancer.Picker + statsHandlers []stats.Handler // to record blocking picker calls } -func newPickerWrapper() *pickerWrapper { - return &pickerWrapper{blockingCh: make(chan struct{})} +func newPickerWrapper(statsHandlers []stats.Handler) *pickerWrapper { + return &pickerWrapper{ + blockingCh: make(chan struct{}), + statsHandlers: statsHandlers, + } } // updatePicker is called by UpdateBalancerState. It unblocks all blocked pick. func (pw *pickerWrapper) updatePicker(p balancer.Picker) { pw.mu.Lock() - if pw.done { + if pw.done || pw.idle { + // There is a small window where a picker update from the LB policy can + // race with the channel going to idle mode. If the picker is idle here, + // it is because the channel asked it to do so, and therefore it is sage + // to ignore the update from the LB policy. pw.mu.Unlock() return } @@ -63,10 +73,8 @@ func (pw *pickerWrapper) updatePicker(p balancer.Picker) { // - wraps the done function in the passed in result to increment the calls // failed or calls succeeded channelz counter before invoking the actual // done function. -func doneChannelzWrapper(acw *acBalancerWrapper, result *balancer.PickResult) { - acw.mu.Lock() - ac := acw.ac - acw.mu.Unlock() +func doneChannelzWrapper(acbw *acBalancerWrapper, result *balancer.PickResult) { + ac := acbw.ac ac.incrCallsStarted() done := result.Done result.Done = func(b balancer.DoneInfo) { @@ -92,6 +100,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer. var ch chan struct{} var lastPickErr error + for { pw.mu.Lock() if pw.done { @@ -126,6 +135,20 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer. continue } + // If the channel is set, it means that the pick call had to wait for a + // new picker at some point. Either it's the first iteration and this + // function received the first picker, or a picker errored with + // ErrNoSubConnAvailable or errored with failfast set to false, which + // will trigger a continue to the next iteration. In the first case this + // conditional will hit if this call had to block (the channel is set). + // In the second case, the only way it will get to this conditional is + // if there is a new picker. + if ch != nil { + for _, sh := range pw.statsHandlers { + sh.HandleRPC(ctx, &stats.PickerUpdated{}) + } + } + ch = pw.blockingCh p := pw.picker pw.mu.Unlock() @@ -152,14 +175,14 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer. return nil, balancer.PickResult{}, status.Error(codes.Unavailable, err.Error()) } - acw, ok := pickResult.SubConn.(*acBalancerWrapper) + acbw, ok := pickResult.SubConn.(*acBalancerWrapper) if !ok { logger.Errorf("subconn returned from pick is type %T, not *acBalancerWrapper", pickResult.SubConn) continue } - if t := acw.getAddrConn().getReadyTransport(); t != nil { + if t := acbw.ac.getReadyTransport(); t != nil { if channelz.IsOn() { - doneChannelzWrapper(acw, &pickResult) + doneChannelzWrapper(acbw, &pickResult) return t, pickResult, nil } return t, pickResult, nil @@ -187,6 +210,25 @@ func (pw *pickerWrapper) close() { close(pw.blockingCh) } +func (pw *pickerWrapper) enterIdleMode() { + pw.mu.Lock() + defer pw.mu.Unlock() + if pw.done { + return + } + pw.idle = true +} + +func (pw *pickerWrapper) exitIdleMode() { + pw.mu.Lock() + defer pw.mu.Unlock() + if pw.done { + return + } + pw.blockingCh = make(chan struct{}) + pw.idle = false +} + // dropError is a wrapper error that indicates the LB policy wishes to drop the // RPC and not retry it. type dropError struct { diff --git a/vendor/google.golang.org/grpc/pickfirst.go b/vendor/google.golang.org/grpc/pickfirst.go index fc91b4d266de2..2e9cf66b4afc4 100644 --- a/vendor/google.golang.org/grpc/pickfirst.go +++ b/vendor/google.golang.org/grpc/pickfirst.go @@ -19,15 +19,25 @@ package grpc import ( + "encoding/json" "errors" "fmt" "google.golang.org/grpc/balancer" "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/internal/envconfig" + internalgrpclog "google.golang.org/grpc/internal/grpclog" + "google.golang.org/grpc/internal/grpcrand" + "google.golang.org/grpc/internal/pretty" + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/serviceconfig" ) -// PickFirstBalancerName is the name of the pick_first balancer. -const PickFirstBalancerName = "pick_first" +const ( + // PickFirstBalancerName is the name of the pick_first balancer. + PickFirstBalancerName = "pick_first" + logPrefix = "[pick-first-lb %p] " +) func newPickfirstBuilder() balancer.Builder { return &pickfirstBuilder{} @@ -36,22 +46,55 @@ func newPickfirstBuilder() balancer.Builder { type pickfirstBuilder struct{} func (*pickfirstBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { - return &pickfirstBalancer{cc: cc} + b := &pickfirstBalancer{cc: cc} + b.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(logPrefix, b)) + return b } func (*pickfirstBuilder) Name() string { return PickFirstBalancerName } +type pfConfig struct { + serviceconfig.LoadBalancingConfig `json:"-"` + + // If set to true, instructs the LB policy to shuffle the order of the list + // of addresses received from the name resolver before attempting to + // connect to them. + ShuffleAddressList bool `json:"shuffleAddressList"` +} + +func (*pickfirstBuilder) ParseConfig(js json.RawMessage) (serviceconfig.LoadBalancingConfig, error) { + if !envconfig.PickFirstLBConfig { + // Prior to supporting loadbalancing configuration, the pick_first LB + // policy did not implement the balancer.ConfigParser interface. This + // meant that if a non-empty configuration was passed to it, the service + // config unmarshaling code would throw a warning log, but would + // continue using the pick_first LB policy. The code below ensures the + // same behavior is retained if the env var is not set. + if string(js) != "{}" { + logger.Warningf("Ignoring non-empty balancer configuration %q for the pick_first LB policy", string(js)) + } + return nil, nil + } + + var cfg pfConfig + if err := json.Unmarshal(js, &cfg); err != nil { + return nil, fmt.Errorf("pickfirst: unable to unmarshal LB policy config: %s, error: %v", string(js), err) + } + return cfg, nil +} + type pickfirstBalancer struct { + logger *internalgrpclog.PrefixLogger state connectivity.State cc balancer.ClientConn subConn balancer.SubConn } func (b *pickfirstBalancer) ResolverError(err error) { - if logger.V(2) { - logger.Infof("pickfirstBalancer: ResolverError called with error: %v", err) + if b.logger.V(2) { + b.logger.Infof("Received error from the name resolver: %v", err) } if b.subConn == nil { b.state = connectivity.TransientFailure @@ -69,28 +112,49 @@ func (b *pickfirstBalancer) ResolverError(err error) { } func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error { - if len(state.ResolverState.Addresses) == 0 { + addrs := state.ResolverState.Addresses + if len(addrs) == 0 { // The resolver reported an empty address list. Treat it like an error by // calling b.ResolverError. if b.subConn != nil { - // Remove the old subConn. All addresses were removed, so it is no longer - // valid. - b.cc.RemoveSubConn(b.subConn) + // Shut down the old subConn. All addresses were removed, so it is + // no longer valid. + b.subConn.Shutdown() b.subConn = nil } b.ResolverError(errors.New("produced zero addresses")) return balancer.ErrBadResolverState } + // We don't have to guard this block with the env var because ParseConfig + // already does so. + cfg, ok := state.BalancerConfig.(pfConfig) + if state.BalancerConfig != nil && !ok { + return fmt.Errorf("pickfirst: received illegal BalancerConfig (type %T): %v", state.BalancerConfig, state.BalancerConfig) + } + if cfg.ShuffleAddressList { + addrs = append([]resolver.Address{}, addrs...) + grpcrand.Shuffle(len(addrs), func(i, j int) { addrs[i], addrs[j] = addrs[j], addrs[i] }) + } + + if b.logger.V(2) { + b.logger.Infof("Received new config %s, resolver state %s", pretty.ToJSON(cfg), pretty.ToJSON(state.ResolverState)) + } + if b.subConn != nil { - b.cc.UpdateAddresses(b.subConn, state.ResolverState.Addresses) + b.cc.UpdateAddresses(b.subConn, addrs) return nil } - subConn, err := b.cc.NewSubConn(state.ResolverState.Addresses, balancer.NewSubConnOptions{}) + var subConn balancer.SubConn + subConn, err := b.cc.NewSubConn(addrs, balancer.NewSubConnOptions{ + StateListener: func(state balancer.SubConnState) { + b.updateSubConnState(subConn, state) + }, + }) if err != nil { - if logger.V(2) { - logger.Errorf("pickfirstBalancer: failed to NewSubConn: %v", err) + if b.logger.V(2) { + b.logger.Infof("Failed to create new SubConn: %v", err) } b.state = connectivity.TransientFailure b.cc.UpdateState(balancer.State{ @@ -109,17 +173,22 @@ func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState return nil } +// UpdateSubConnState is unused as a StateListener is always registered when +// creating SubConns. func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) { - if logger.V(2) { - logger.Infof("pickfirstBalancer: UpdateSubConnState: %p, %v", subConn, state) + b.logger.Errorf("UpdateSubConnState(%v, %+v) called unexpectedly", subConn, state) +} + +func (b *pickfirstBalancer) updateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) { + if b.logger.V(2) { + b.logger.Infof("Received SubConn state update: %p, %+v", subConn, state) } if b.subConn != subConn { - if logger.V(2) { - logger.Infof("pickfirstBalancer: ignored state change because subConn is not recognized") + if b.logger.V(2) { + b.logger.Infof("Ignored state change because subConn is not recognized") } return } - b.state = state.ConnectivityState if state.ConnectivityState == connectivity.Shutdown { b.subConn = nil return @@ -132,11 +201,21 @@ func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state b Picker: &picker{result: balancer.PickResult{SubConn: subConn}}, }) case connectivity.Connecting: + if b.state == connectivity.TransientFailure { + // We stay in TransientFailure until we are Ready. See A62. + return + } b.cc.UpdateState(balancer.State{ ConnectivityState: state.ConnectivityState, Picker: &picker{err: balancer.ErrNoSubConnAvailable}, }) case connectivity.Idle: + if b.state == connectivity.TransientFailure { + // We stay in TransientFailure until we are Ready. Also kick the + // subConn out of Idle into Connecting. See A62. + b.subConn.Connect() + return + } b.cc.UpdateState(balancer.State{ ConnectivityState: state.ConnectivityState, Picker: &idlePicker{subConn: subConn}, @@ -147,6 +226,7 @@ func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state b Picker: &picker{err: state.ConnectionError}, }) } + b.state = state.ConnectivityState } func (b *pickfirstBalancer) Close() { diff --git a/vendor/google.golang.org/grpc/preloader.go b/vendor/google.golang.org/grpc/preloader.go index cd45547854f07..73bd63364335e 100644 --- a/vendor/google.golang.org/grpc/preloader.go +++ b/vendor/google.golang.org/grpc/preloader.go @@ -37,7 +37,7 @@ type PreparedMsg struct { } // Encode marshalls and compresses the message using the codec and compressor for the stream. -func (p *PreparedMsg) Encode(s Stream, msg interface{}) error { +func (p *PreparedMsg) Encode(s Stream, msg any) error { ctx := s.Context() rpcInfo, ok := rpcInfoFromContext(ctx) if !ok { diff --git a/vendor/google.golang.org/grpc/reflection/adapt.go b/vendor/google.golang.org/grpc/reflection/adapt.go new file mode 100644 index 0000000000000..33b907a36da43 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/adapt.go @@ -0,0 +1,187 @@ +/* + * + * Copyright 2023 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package reflection + +import ( + v1reflectiongrpc "google.golang.org/grpc/reflection/grpc_reflection_v1" + v1reflectionpb "google.golang.org/grpc/reflection/grpc_reflection_v1" + v1alphareflectiongrpc "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" + v1alphareflectionpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" +) + +// asV1Alpha returns an implementation of the v1alpha version of the reflection +// interface that delegates all calls to the given v1 version. +func asV1Alpha(svr v1reflectiongrpc.ServerReflectionServer) v1alphareflectiongrpc.ServerReflectionServer { + return v1AlphaServerImpl{svr: svr} +} + +type v1AlphaServerImpl struct { + svr v1reflectiongrpc.ServerReflectionServer +} + +func (s v1AlphaServerImpl) ServerReflectionInfo(stream v1alphareflectiongrpc.ServerReflection_ServerReflectionInfoServer) error { + return s.svr.ServerReflectionInfo(v1AlphaServerStreamAdapter{stream}) +} + +type v1AlphaServerStreamAdapter struct { + v1alphareflectiongrpc.ServerReflection_ServerReflectionInfoServer +} + +func (s v1AlphaServerStreamAdapter) Send(response *v1reflectionpb.ServerReflectionResponse) error { + return s.ServerReflection_ServerReflectionInfoServer.Send(v1ToV1AlphaResponse(response)) +} + +func (s v1AlphaServerStreamAdapter) Recv() (*v1reflectionpb.ServerReflectionRequest, error) { + resp, err := s.ServerReflection_ServerReflectionInfoServer.Recv() + if err != nil { + return nil, err + } + return v1AlphaToV1Request(resp), nil +} + +func v1ToV1AlphaResponse(v1 *v1reflectionpb.ServerReflectionResponse) *v1alphareflectionpb.ServerReflectionResponse { + var v1alpha v1alphareflectionpb.ServerReflectionResponse + v1alpha.ValidHost = v1.ValidHost + if v1.OriginalRequest != nil { + v1alpha.OriginalRequest = v1ToV1AlphaRequest(v1.OriginalRequest) + } + switch mr := v1.MessageResponse.(type) { + case *v1reflectionpb.ServerReflectionResponse_FileDescriptorResponse: + if mr != nil { + v1alpha.MessageResponse = &v1alphareflectionpb.ServerReflectionResponse_FileDescriptorResponse{ + FileDescriptorResponse: &v1alphareflectionpb.FileDescriptorResponse{ + FileDescriptorProto: mr.FileDescriptorResponse.GetFileDescriptorProto(), + }, + } + } + case *v1reflectionpb.ServerReflectionResponse_AllExtensionNumbersResponse: + if mr != nil { + v1alpha.MessageResponse = &v1alphareflectionpb.ServerReflectionResponse_AllExtensionNumbersResponse{ + AllExtensionNumbersResponse: &v1alphareflectionpb.ExtensionNumberResponse{ + BaseTypeName: mr.AllExtensionNumbersResponse.GetBaseTypeName(), + ExtensionNumber: mr.AllExtensionNumbersResponse.GetExtensionNumber(), + }, + } + } + case *v1reflectionpb.ServerReflectionResponse_ListServicesResponse: + if mr != nil { + svcs := make([]*v1alphareflectionpb.ServiceResponse, len(mr.ListServicesResponse.GetService())) + for i, svc := range mr.ListServicesResponse.GetService() { + svcs[i] = &v1alphareflectionpb.ServiceResponse{ + Name: svc.GetName(), + } + } + v1alpha.MessageResponse = &v1alphareflectionpb.ServerReflectionResponse_ListServicesResponse{ + ListServicesResponse: &v1alphareflectionpb.ListServiceResponse{ + Service: svcs, + }, + } + } + case *v1reflectionpb.ServerReflectionResponse_ErrorResponse: + if mr != nil { + v1alpha.MessageResponse = &v1alphareflectionpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &v1alphareflectionpb.ErrorResponse{ + ErrorCode: mr.ErrorResponse.GetErrorCode(), + ErrorMessage: mr.ErrorResponse.GetErrorMessage(), + }, + } + } + default: + // no value set + } + return &v1alpha +} + +func v1AlphaToV1Request(v1alpha *v1alphareflectionpb.ServerReflectionRequest) *v1reflectionpb.ServerReflectionRequest { + var v1 v1reflectionpb.ServerReflectionRequest + v1.Host = v1alpha.Host + switch mr := v1alpha.MessageRequest.(type) { + case *v1alphareflectionpb.ServerReflectionRequest_FileByFilename: + v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_FileByFilename{ + FileByFilename: mr.FileByFilename, + } + case *v1alphareflectionpb.ServerReflectionRequest_FileContainingSymbol: + v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_FileContainingSymbol{ + FileContainingSymbol: mr.FileContainingSymbol, + } + case *v1alphareflectionpb.ServerReflectionRequest_FileContainingExtension: + if mr.FileContainingExtension != nil { + v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_FileContainingExtension{ + FileContainingExtension: &v1reflectionpb.ExtensionRequest{ + ContainingType: mr.FileContainingExtension.GetContainingType(), + ExtensionNumber: mr.FileContainingExtension.GetExtensionNumber(), + }, + } + } + case *v1alphareflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType: + v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType{ + AllExtensionNumbersOfType: mr.AllExtensionNumbersOfType, + } + case *v1alphareflectionpb.ServerReflectionRequest_ListServices: + v1.MessageRequest = &v1reflectionpb.ServerReflectionRequest_ListServices{ + ListServices: mr.ListServices, + } + default: + // no value set + } + return &v1 +} + +func v1ToV1AlphaRequest(v1 *v1reflectionpb.ServerReflectionRequest) *v1alphareflectionpb.ServerReflectionRequest { + var v1alpha v1alphareflectionpb.ServerReflectionRequest + v1alpha.Host = v1.Host + switch mr := v1.MessageRequest.(type) { + case *v1reflectionpb.ServerReflectionRequest_FileByFilename: + if mr != nil { + v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_FileByFilename{ + FileByFilename: mr.FileByFilename, + } + } + case *v1reflectionpb.ServerReflectionRequest_FileContainingSymbol: + if mr != nil { + v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_FileContainingSymbol{ + FileContainingSymbol: mr.FileContainingSymbol, + } + } + case *v1reflectionpb.ServerReflectionRequest_FileContainingExtension: + if mr != nil { + v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_FileContainingExtension{ + FileContainingExtension: &v1alphareflectionpb.ExtensionRequest{ + ContainingType: mr.FileContainingExtension.GetContainingType(), + ExtensionNumber: mr.FileContainingExtension.GetExtensionNumber(), + }, + } + } + case *v1reflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType: + if mr != nil { + v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType{ + AllExtensionNumbersOfType: mr.AllExtensionNumbersOfType, + } + } + case *v1reflectionpb.ServerReflectionRequest_ListServices: + if mr != nil { + v1alpha.MessageRequest = &v1alphareflectionpb.ServerReflectionRequest_ListServices{ + ListServices: mr.ListServices, + } + } + default: + // no value set + } + return &v1alpha +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go new file mode 100644 index 0000000000000..6f5c786b211c8 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go @@ -0,0 +1,953 @@ +// Copyright 2016 The gRPC Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Service exported by server reflection. A more complete description of how +// server reflection works can be found at +// https://github.com/grpc/grpc/blob/master/doc/server-reflection.md +// +// The canonical version of this proto can be found at +// https://github.com/grpc/grpc-proto/blob/master/grpc/reflection/v1/reflection.proto + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.22.0 +// source: grpc/reflection/v1/reflection.proto + +package grpc_reflection_v1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// The message sent by the client when calling ServerReflectionInfo method. +type ServerReflectionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` + // To use reflection service, the client should set one of the following + // fields in message_request. The server distinguishes requests by their + // defined field and then handles them using corresponding methods. + // + // Types that are assignable to MessageRequest: + // + // *ServerReflectionRequest_FileByFilename + // *ServerReflectionRequest_FileContainingSymbol + // *ServerReflectionRequest_FileContainingExtension + // *ServerReflectionRequest_AllExtensionNumbersOfType + // *ServerReflectionRequest_ListServices + MessageRequest isServerReflectionRequest_MessageRequest `protobuf_oneof:"message_request"` +} + +func (x *ServerReflectionRequest) Reset() { + *x = ServerReflectionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerReflectionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerReflectionRequest) ProtoMessage() {} + +func (x *ServerReflectionRequest) ProtoReflect() protoreflect.Message { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerReflectionRequest.ProtoReflect.Descriptor instead. +func (*ServerReflectionRequest) Descriptor() ([]byte, []int) { + return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{0} +} + +func (x *ServerReflectionRequest) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (m *ServerReflectionRequest) GetMessageRequest() isServerReflectionRequest_MessageRequest { + if m != nil { + return m.MessageRequest + } + return nil +} + +func (x *ServerReflectionRequest) GetFileByFilename() string { + if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileByFilename); ok { + return x.FileByFilename + } + return "" +} + +func (x *ServerReflectionRequest) GetFileContainingSymbol() string { + if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingSymbol); ok { + return x.FileContainingSymbol + } + return "" +} + +func (x *ServerReflectionRequest) GetFileContainingExtension() *ExtensionRequest { + if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingExtension); ok { + return x.FileContainingExtension + } + return nil +} + +func (x *ServerReflectionRequest) GetAllExtensionNumbersOfType() string { + if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_AllExtensionNumbersOfType); ok { + return x.AllExtensionNumbersOfType + } + return "" +} + +func (x *ServerReflectionRequest) GetListServices() string { + if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_ListServices); ok { + return x.ListServices + } + return "" +} + +type isServerReflectionRequest_MessageRequest interface { + isServerReflectionRequest_MessageRequest() +} + +type ServerReflectionRequest_FileByFilename struct { + // Find a proto file by the file name. + FileByFilename string `protobuf:"bytes,3,opt,name=file_by_filename,json=fileByFilename,proto3,oneof"` +} + +type ServerReflectionRequest_FileContainingSymbol struct { + // Find the proto file that declares the given fully-qualified symbol name. + // This field should be a fully-qualified symbol name + // (e.g. .[.] or .). + FileContainingSymbol string `protobuf:"bytes,4,opt,name=file_containing_symbol,json=fileContainingSymbol,proto3,oneof"` +} + +type ServerReflectionRequest_FileContainingExtension struct { + // Find the proto file which defines an extension extending the given + // message type with the given field number. + FileContainingExtension *ExtensionRequest `protobuf:"bytes,5,opt,name=file_containing_extension,json=fileContainingExtension,proto3,oneof"` +} + +type ServerReflectionRequest_AllExtensionNumbersOfType struct { + // Finds the tag numbers used by all known extensions of the given message + // type, and appends them to ExtensionNumberResponse in an undefined order. + // Its corresponding method is best-effort: it's not guaranteed that the + // reflection service will implement this method, and it's not guaranteed + // that this method will provide all extensions. Returns + // StatusCode::UNIMPLEMENTED if it's not implemented. + // This field should be a fully-qualified type name. The format is + // . + AllExtensionNumbersOfType string `protobuf:"bytes,6,opt,name=all_extension_numbers_of_type,json=allExtensionNumbersOfType,proto3,oneof"` +} + +type ServerReflectionRequest_ListServices struct { + // List the full names of registered services. The content will not be + // checked. + ListServices string `protobuf:"bytes,7,opt,name=list_services,json=listServices,proto3,oneof"` +} + +func (*ServerReflectionRequest_FileByFilename) isServerReflectionRequest_MessageRequest() {} + +func (*ServerReflectionRequest_FileContainingSymbol) isServerReflectionRequest_MessageRequest() {} + +func (*ServerReflectionRequest_FileContainingExtension) isServerReflectionRequest_MessageRequest() {} + +func (*ServerReflectionRequest_AllExtensionNumbersOfType) isServerReflectionRequest_MessageRequest() { +} + +func (*ServerReflectionRequest_ListServices) isServerReflectionRequest_MessageRequest() {} + +// The type name and extension number sent by the client when requesting +// file_containing_extension. +type ExtensionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Fully-qualified type name. The format should be . + ContainingType string `protobuf:"bytes,1,opt,name=containing_type,json=containingType,proto3" json:"containing_type,omitempty"` + ExtensionNumber int32 `protobuf:"varint,2,opt,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` +} + +func (x *ExtensionRequest) Reset() { + *x = ExtensionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExtensionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtensionRequest) ProtoMessage() {} + +func (x *ExtensionRequest) ProtoReflect() protoreflect.Message { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtensionRequest.ProtoReflect.Descriptor instead. +func (*ExtensionRequest) Descriptor() ([]byte, []int) { + return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{1} +} + +func (x *ExtensionRequest) GetContainingType() string { + if x != nil { + return x.ContainingType + } + return "" +} + +func (x *ExtensionRequest) GetExtensionNumber() int32 { + if x != nil { + return x.ExtensionNumber + } + return 0 +} + +// The message sent by the server to answer ServerReflectionInfo method. +type ServerReflectionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ValidHost string `protobuf:"bytes,1,opt,name=valid_host,json=validHost,proto3" json:"valid_host,omitempty"` + OriginalRequest *ServerReflectionRequest `protobuf:"bytes,2,opt,name=original_request,json=originalRequest,proto3" json:"original_request,omitempty"` + // The server sets one of the following fields according to the message_request + // in the request. + // + // Types that are assignable to MessageResponse: + // + // *ServerReflectionResponse_FileDescriptorResponse + // *ServerReflectionResponse_AllExtensionNumbersResponse + // *ServerReflectionResponse_ListServicesResponse + // *ServerReflectionResponse_ErrorResponse + MessageResponse isServerReflectionResponse_MessageResponse `protobuf_oneof:"message_response"` +} + +func (x *ServerReflectionResponse) Reset() { + *x = ServerReflectionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerReflectionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerReflectionResponse) ProtoMessage() {} + +func (x *ServerReflectionResponse) ProtoReflect() protoreflect.Message { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerReflectionResponse.ProtoReflect.Descriptor instead. +func (*ServerReflectionResponse) Descriptor() ([]byte, []int) { + return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{2} +} + +func (x *ServerReflectionResponse) GetValidHost() string { + if x != nil { + return x.ValidHost + } + return "" +} + +func (x *ServerReflectionResponse) GetOriginalRequest() *ServerReflectionRequest { + if x != nil { + return x.OriginalRequest + } + return nil +} + +func (m *ServerReflectionResponse) GetMessageResponse() isServerReflectionResponse_MessageResponse { + if m != nil { + return m.MessageResponse + } + return nil +} + +func (x *ServerReflectionResponse) GetFileDescriptorResponse() *FileDescriptorResponse { + if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_FileDescriptorResponse); ok { + return x.FileDescriptorResponse + } + return nil +} + +func (x *ServerReflectionResponse) GetAllExtensionNumbersResponse() *ExtensionNumberResponse { + if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_AllExtensionNumbersResponse); ok { + return x.AllExtensionNumbersResponse + } + return nil +} + +func (x *ServerReflectionResponse) GetListServicesResponse() *ListServiceResponse { + if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ListServicesResponse); ok { + return x.ListServicesResponse + } + return nil +} + +func (x *ServerReflectionResponse) GetErrorResponse() *ErrorResponse { + if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ErrorResponse); ok { + return x.ErrorResponse + } + return nil +} + +type isServerReflectionResponse_MessageResponse interface { + isServerReflectionResponse_MessageResponse() +} + +type ServerReflectionResponse_FileDescriptorResponse struct { + // This message is used to answer file_by_filename, file_containing_symbol, + // file_containing_extension requests with transitive dependencies. + // As the repeated label is not allowed in oneof fields, we use a + // FileDescriptorResponse message to encapsulate the repeated fields. + // The reflection service is allowed to avoid sending FileDescriptorProtos + // that were previously sent in response to earlier requests in the stream. + FileDescriptorResponse *FileDescriptorResponse `protobuf:"bytes,4,opt,name=file_descriptor_response,json=fileDescriptorResponse,proto3,oneof"` +} + +type ServerReflectionResponse_AllExtensionNumbersResponse struct { + // This message is used to answer all_extension_numbers_of_type requests. + AllExtensionNumbersResponse *ExtensionNumberResponse `protobuf:"bytes,5,opt,name=all_extension_numbers_response,json=allExtensionNumbersResponse,proto3,oneof"` +} + +type ServerReflectionResponse_ListServicesResponse struct { + // This message is used to answer list_services requests. + ListServicesResponse *ListServiceResponse `protobuf:"bytes,6,opt,name=list_services_response,json=listServicesResponse,proto3,oneof"` +} + +type ServerReflectionResponse_ErrorResponse struct { + // This message is used when an error occurs. + ErrorResponse *ErrorResponse `protobuf:"bytes,7,opt,name=error_response,json=errorResponse,proto3,oneof"` +} + +func (*ServerReflectionResponse_FileDescriptorResponse) isServerReflectionResponse_MessageResponse() { +} + +func (*ServerReflectionResponse_AllExtensionNumbersResponse) isServerReflectionResponse_MessageResponse() { +} + +func (*ServerReflectionResponse_ListServicesResponse) isServerReflectionResponse_MessageResponse() {} + +func (*ServerReflectionResponse_ErrorResponse) isServerReflectionResponse_MessageResponse() {} + +// Serialized FileDescriptorProto messages sent by the server answering +// a file_by_filename, file_containing_symbol, or file_containing_extension +// request. +type FileDescriptorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Serialized FileDescriptorProto messages. We avoid taking a dependency on + // descriptor.proto, which uses proto2 only features, by making them opaque + // bytes instead. + FileDescriptorProto [][]byte `protobuf:"bytes,1,rep,name=file_descriptor_proto,json=fileDescriptorProto,proto3" json:"file_descriptor_proto,omitempty"` +} + +func (x *FileDescriptorResponse) Reset() { + *x = FileDescriptorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileDescriptorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileDescriptorResponse) ProtoMessage() {} + +func (x *FileDescriptorResponse) ProtoReflect() protoreflect.Message { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileDescriptorResponse.ProtoReflect.Descriptor instead. +func (*FileDescriptorResponse) Descriptor() ([]byte, []int) { + return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{3} +} + +func (x *FileDescriptorResponse) GetFileDescriptorProto() [][]byte { + if x != nil { + return x.FileDescriptorProto + } + return nil +} + +// A list of extension numbers sent by the server answering +// all_extension_numbers_of_type request. +type ExtensionNumberResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Full name of the base type, including the package name. The format + // is . + BaseTypeName string `protobuf:"bytes,1,opt,name=base_type_name,json=baseTypeName,proto3" json:"base_type_name,omitempty"` + ExtensionNumber []int32 `protobuf:"varint,2,rep,packed,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` +} + +func (x *ExtensionNumberResponse) Reset() { + *x = ExtensionNumberResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExtensionNumberResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtensionNumberResponse) ProtoMessage() {} + +func (x *ExtensionNumberResponse) ProtoReflect() protoreflect.Message { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtensionNumberResponse.ProtoReflect.Descriptor instead. +func (*ExtensionNumberResponse) Descriptor() ([]byte, []int) { + return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{4} +} + +func (x *ExtensionNumberResponse) GetBaseTypeName() string { + if x != nil { + return x.BaseTypeName + } + return "" +} + +func (x *ExtensionNumberResponse) GetExtensionNumber() []int32 { + if x != nil { + return x.ExtensionNumber + } + return nil +} + +// A list of ServiceResponse sent by the server answering list_services request. +type ListServiceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The information of each service may be expanded in the future, so we use + // ServiceResponse message to encapsulate it. + Service []*ServiceResponse `protobuf:"bytes,1,rep,name=service,proto3" json:"service,omitempty"` +} + +func (x *ListServiceResponse) Reset() { + *x = ListServiceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListServiceResponse) ProtoMessage() {} + +func (x *ListServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListServiceResponse.ProtoReflect.Descriptor instead. +func (*ListServiceResponse) Descriptor() ([]byte, []int) { + return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{5} +} + +func (x *ListServiceResponse) GetService() []*ServiceResponse { + if x != nil { + return x.Service + } + return nil +} + +// The information of a single service used by ListServiceResponse to answer +// list_services request. +type ServiceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Full name of a registered service, including its package name. The format + // is . + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *ServiceResponse) Reset() { + *x = ServiceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServiceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceResponse) ProtoMessage() {} + +func (x *ServiceResponse) ProtoReflect() protoreflect.Message { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceResponse.ProtoReflect.Descriptor instead. +func (*ServiceResponse) Descriptor() ([]byte, []int) { + return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{6} +} + +func (x *ServiceResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// The error code and error message sent by the server when an error occurs. +type ErrorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // This field uses the error codes defined in grpc::StatusCode. + ErrorCode int32 `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` +} + +func (x *ErrorResponse) Reset() { + *x = ErrorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ErrorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ErrorResponse) ProtoMessage() {} + +func (x *ErrorResponse) ProtoReflect() protoreflect.Message { + mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ErrorResponse.ProtoReflect.Descriptor instead. +func (*ErrorResponse) Descriptor() ([]byte, []int) { + return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{7} +} + +func (x *ErrorResponse) GetErrorCode() int32 { + if x != nil { + return x.ErrorCode + } + return 0 +} + +func (x *ErrorResponse) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +var File_grpc_reflection_v1_reflection_proto protoreflect.FileDescriptor + +var file_grpc_reflection_v1_reflection_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x22, 0xf3, 0x02, 0x0a, 0x17, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x79, 0x46, 0x69, 0x6c, + 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x14, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x62, 0x0a, + 0x19, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, + 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x17, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x19, 0x61, 0x6c, 0x6c, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x4f, + 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, + 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x66, 0x0a, 0x10, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, + 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xae, 0x04, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x6f, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x48, + 0x6f, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x18, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x66, 0x69, 0x6c, + 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1e, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x16, 0x6c, 0x69, 0x73, 0x74, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, + 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x48, 0x00, 0x52, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0e, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0c, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x22, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x53, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x32, 0x89, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, + 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x14, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x2b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, + 0x42, 0x66, 0x0a, 0x15, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x34, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, + 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_grpc_reflection_v1_reflection_proto_rawDescOnce sync.Once + file_grpc_reflection_v1_reflection_proto_rawDescData = file_grpc_reflection_v1_reflection_proto_rawDesc +) + +func file_grpc_reflection_v1_reflection_proto_rawDescGZIP() []byte { + file_grpc_reflection_v1_reflection_proto_rawDescOnce.Do(func() { + file_grpc_reflection_v1_reflection_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_reflection_v1_reflection_proto_rawDescData) + }) + return file_grpc_reflection_v1_reflection_proto_rawDescData +} + +var file_grpc_reflection_v1_reflection_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_grpc_reflection_v1_reflection_proto_goTypes = []interface{}{ + (*ServerReflectionRequest)(nil), // 0: grpc.reflection.v1.ServerReflectionRequest + (*ExtensionRequest)(nil), // 1: grpc.reflection.v1.ExtensionRequest + (*ServerReflectionResponse)(nil), // 2: grpc.reflection.v1.ServerReflectionResponse + (*FileDescriptorResponse)(nil), // 3: grpc.reflection.v1.FileDescriptorResponse + (*ExtensionNumberResponse)(nil), // 4: grpc.reflection.v1.ExtensionNumberResponse + (*ListServiceResponse)(nil), // 5: grpc.reflection.v1.ListServiceResponse + (*ServiceResponse)(nil), // 6: grpc.reflection.v1.ServiceResponse + (*ErrorResponse)(nil), // 7: grpc.reflection.v1.ErrorResponse +} +var file_grpc_reflection_v1_reflection_proto_depIdxs = []int32{ + 1, // 0: grpc.reflection.v1.ServerReflectionRequest.file_containing_extension:type_name -> grpc.reflection.v1.ExtensionRequest + 0, // 1: grpc.reflection.v1.ServerReflectionResponse.original_request:type_name -> grpc.reflection.v1.ServerReflectionRequest + 3, // 2: grpc.reflection.v1.ServerReflectionResponse.file_descriptor_response:type_name -> grpc.reflection.v1.FileDescriptorResponse + 4, // 3: grpc.reflection.v1.ServerReflectionResponse.all_extension_numbers_response:type_name -> grpc.reflection.v1.ExtensionNumberResponse + 5, // 4: grpc.reflection.v1.ServerReflectionResponse.list_services_response:type_name -> grpc.reflection.v1.ListServiceResponse + 7, // 5: grpc.reflection.v1.ServerReflectionResponse.error_response:type_name -> grpc.reflection.v1.ErrorResponse + 6, // 6: grpc.reflection.v1.ListServiceResponse.service:type_name -> grpc.reflection.v1.ServiceResponse + 0, // 7: grpc.reflection.v1.ServerReflection.ServerReflectionInfo:input_type -> grpc.reflection.v1.ServerReflectionRequest + 2, // 8: grpc.reflection.v1.ServerReflection.ServerReflectionInfo:output_type -> grpc.reflection.v1.ServerReflectionResponse + 8, // [8:9] is the sub-list for method output_type + 7, // [7:8] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_grpc_reflection_v1_reflection_proto_init() } +func file_grpc_reflection_v1_reflection_proto_init() { + if File_grpc_reflection_v1_reflection_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_grpc_reflection_v1_reflection_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerReflectionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_grpc_reflection_v1_reflection_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExtensionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_grpc_reflection_v1_reflection_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerReflectionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_grpc_reflection_v1_reflection_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileDescriptorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_grpc_reflection_v1_reflection_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExtensionNumberResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_grpc_reflection_v1_reflection_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListServiceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_grpc_reflection_v1_reflection_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServiceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_grpc_reflection_v1_reflection_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ErrorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_grpc_reflection_v1_reflection_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*ServerReflectionRequest_FileByFilename)(nil), + (*ServerReflectionRequest_FileContainingSymbol)(nil), + (*ServerReflectionRequest_FileContainingExtension)(nil), + (*ServerReflectionRequest_AllExtensionNumbersOfType)(nil), + (*ServerReflectionRequest_ListServices)(nil), + } + file_grpc_reflection_v1_reflection_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*ServerReflectionResponse_FileDescriptorResponse)(nil), + (*ServerReflectionResponse_AllExtensionNumbersResponse)(nil), + (*ServerReflectionResponse_ListServicesResponse)(nil), + (*ServerReflectionResponse_ErrorResponse)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_grpc_reflection_v1_reflection_proto_rawDesc, + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_grpc_reflection_v1_reflection_proto_goTypes, + DependencyIndexes: file_grpc_reflection_v1_reflection_proto_depIdxs, + MessageInfos: file_grpc_reflection_v1_reflection_proto_msgTypes, + }.Build() + File_grpc_reflection_v1_reflection_proto = out.File + file_grpc_reflection_v1_reflection_proto_rawDesc = nil + file_grpc_reflection_v1_reflection_proto_goTypes = nil + file_grpc_reflection_v1_reflection_proto_depIdxs = nil +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection_grpc.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection_grpc.pb.go new file mode 100644 index 0000000000000..62b56a8be0e68 --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection_grpc.pb.go @@ -0,0 +1,164 @@ +// Copyright 2016 The gRPC Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Service exported by server reflection. A more complete description of how +// server reflection works can be found at +// https://github.com/grpc/grpc/blob/master/doc/server-reflection.md +// +// The canonical version of this proto can be found at +// https://github.com/grpc/grpc-proto/blob/master/grpc/reflection/v1/reflection.proto + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.22.0 +// source: grpc/reflection/v1/reflection.proto + +package grpc_reflection_v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + ServerReflection_ServerReflectionInfo_FullMethodName = "/grpc.reflection.v1.ServerReflection/ServerReflectionInfo" +) + +// ServerReflectionClient is the client API for ServerReflection service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ServerReflectionClient interface { + // The reflection service is structured as a bidirectional stream, ensuring + // all related requests go to a single server. + ServerReflectionInfo(ctx context.Context, opts ...grpc.CallOption) (ServerReflection_ServerReflectionInfoClient, error) +} + +type serverReflectionClient struct { + cc grpc.ClientConnInterface +} + +func NewServerReflectionClient(cc grpc.ClientConnInterface) ServerReflectionClient { + return &serverReflectionClient{cc} +} + +func (c *serverReflectionClient) ServerReflectionInfo(ctx context.Context, opts ...grpc.CallOption) (ServerReflection_ServerReflectionInfoClient, error) { + stream, err := c.cc.NewStream(ctx, &ServerReflection_ServiceDesc.Streams[0], ServerReflection_ServerReflectionInfo_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &serverReflectionServerReflectionInfoClient{stream} + return x, nil +} + +type ServerReflection_ServerReflectionInfoClient interface { + Send(*ServerReflectionRequest) error + Recv() (*ServerReflectionResponse, error) + grpc.ClientStream +} + +type serverReflectionServerReflectionInfoClient struct { + grpc.ClientStream +} + +func (x *serverReflectionServerReflectionInfoClient) Send(m *ServerReflectionRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *serverReflectionServerReflectionInfoClient) Recv() (*ServerReflectionResponse, error) { + m := new(ServerReflectionResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// ServerReflectionServer is the server API for ServerReflection service. +// All implementations should embed UnimplementedServerReflectionServer +// for forward compatibility +type ServerReflectionServer interface { + // The reflection service is structured as a bidirectional stream, ensuring + // all related requests go to a single server. + ServerReflectionInfo(ServerReflection_ServerReflectionInfoServer) error +} + +// UnimplementedServerReflectionServer should be embedded to have forward compatible implementations. +type UnimplementedServerReflectionServer struct { +} + +func (UnimplementedServerReflectionServer) ServerReflectionInfo(ServerReflection_ServerReflectionInfoServer) error { + return status.Errorf(codes.Unimplemented, "method ServerReflectionInfo not implemented") +} + +// UnsafeServerReflectionServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ServerReflectionServer will +// result in compilation errors. +type UnsafeServerReflectionServer interface { + mustEmbedUnimplementedServerReflectionServer() +} + +func RegisterServerReflectionServer(s grpc.ServiceRegistrar, srv ServerReflectionServer) { + s.RegisterService(&ServerReflection_ServiceDesc, srv) +} + +func _ServerReflection_ServerReflectionInfo_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ServerReflectionServer).ServerReflectionInfo(&serverReflectionServerReflectionInfoServer{stream}) +} + +type ServerReflection_ServerReflectionInfoServer interface { + Send(*ServerReflectionResponse) error + Recv() (*ServerReflectionRequest, error) + grpc.ServerStream +} + +type serverReflectionServerReflectionInfoServer struct { + grpc.ServerStream +} + +func (x *serverReflectionServerReflectionInfoServer) Send(m *ServerReflectionResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *serverReflectionServerReflectionInfoServer) Recv() (*ServerReflectionRequest, error) { + m := new(ServerReflectionRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// ServerReflection_ServiceDesc is the grpc.ServiceDesc for ServerReflection service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ServerReflection_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.reflection.v1.ServerReflection", + HandlerType: (*ServerReflectionServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "ServerReflectionInfo", + Handler: _ServerReflection_ServerReflectionInfo_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "grpc/reflection/v1/reflection.proto", +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go index ee4b04caf0da1..69fbfb621ec0d 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go @@ -18,8 +18,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.14.0 +// protoc-gen-go v1.31.0 +// protoc v4.22.0 // grpc/reflection/v1alpha/reflection.proto is a deprecated file. package grpc_reflection_v1alpha @@ -39,11 +39,14 @@ const ( ) // The message sent by the client when calling ServerReflectionInfo method. +// +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. type ServerReflectionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` // To use reflection service, the client should set one of the following // fields in message_request. The server distinguishes requests by their @@ -91,6 +94,7 @@ func (*ServerReflectionRequest) Descriptor() ([]byte, []int) { return file_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{0} } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionRequest) GetHost() string { if x != nil { return x.Host @@ -105,6 +109,7 @@ func (m *ServerReflectionRequest) GetMessageRequest() isServerReflectionRequest_ return nil } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionRequest) GetFileByFilename() string { if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileByFilename); ok { return x.FileByFilename @@ -112,6 +117,7 @@ func (x *ServerReflectionRequest) GetFileByFilename() string { return "" } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionRequest) GetFileContainingSymbol() string { if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingSymbol); ok { return x.FileContainingSymbol @@ -119,6 +125,7 @@ func (x *ServerReflectionRequest) GetFileContainingSymbol() string { return "" } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionRequest) GetFileContainingExtension() *ExtensionRequest { if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingExtension); ok { return x.FileContainingExtension @@ -126,6 +133,7 @@ func (x *ServerReflectionRequest) GetFileContainingExtension() *ExtensionRequest return nil } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionRequest) GetAllExtensionNumbersOfType() string { if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_AllExtensionNumbersOfType); ok { return x.AllExtensionNumbersOfType @@ -133,6 +141,7 @@ func (x *ServerReflectionRequest) GetAllExtensionNumbersOfType() string { return "" } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionRequest) GetListServices() string { if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_ListServices); ok { return x.ListServices @@ -146,6 +155,8 @@ type isServerReflectionRequest_MessageRequest interface { type ServerReflectionRequest_FileByFilename struct { // Find a proto file by the file name. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. FileByFilename string `protobuf:"bytes,3,opt,name=file_by_filename,json=fileByFilename,proto3,oneof"` } @@ -153,12 +164,16 @@ type ServerReflectionRequest_FileContainingSymbol struct { // Find the proto file that declares the given fully-qualified symbol name. // This field should be a fully-qualified symbol name // (e.g. .[.] or .). + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. FileContainingSymbol string `protobuf:"bytes,4,opt,name=file_containing_symbol,json=fileContainingSymbol,proto3,oneof"` } type ServerReflectionRequest_FileContainingExtension struct { // Find the proto file which defines an extension extending the given // message type with the given field number. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. FileContainingExtension *ExtensionRequest `protobuf:"bytes,5,opt,name=file_containing_extension,json=fileContainingExtension,proto3,oneof"` } @@ -171,12 +186,16 @@ type ServerReflectionRequest_AllExtensionNumbersOfType struct { // StatusCode::UNIMPLEMENTED if it's not implemented. // This field should be a fully-qualified type name. The format is // . + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. AllExtensionNumbersOfType string `protobuf:"bytes,6,opt,name=all_extension_numbers_of_type,json=allExtensionNumbersOfType,proto3,oneof"` } type ServerReflectionRequest_ListServices struct { // List the full names of registered services. The content will not be // checked. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. ListServices string `protobuf:"bytes,7,opt,name=list_services,json=listServices,proto3,oneof"` } @@ -193,14 +212,19 @@ func (*ServerReflectionRequest_ListServices) isServerReflectionRequest_MessageRe // The type name and extension number sent by the client when requesting // file_containing_extension. +// +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. type ExtensionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Fully-qualified type name. The format should be . - ContainingType string `protobuf:"bytes,1,opt,name=containing_type,json=containingType,proto3" json:"containing_type,omitempty"` - ExtensionNumber int32 `protobuf:"varint,2,opt,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. + ContainingType string `protobuf:"bytes,1,opt,name=containing_type,json=containingType,proto3" json:"containing_type,omitempty"` + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. + ExtensionNumber int32 `protobuf:"varint,2,opt,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` } func (x *ExtensionRequest) Reset() { @@ -235,6 +259,7 @@ func (*ExtensionRequest) Descriptor() ([]byte, []int) { return file_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{1} } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ExtensionRequest) GetContainingType() string { if x != nil { return x.ContainingType @@ -242,6 +267,7 @@ func (x *ExtensionRequest) GetContainingType() string { return "" } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ExtensionRequest) GetExtensionNumber() int32 { if x != nil { return x.ExtensionNumber @@ -250,12 +276,16 @@ func (x *ExtensionRequest) GetExtensionNumber() int32 { } // The message sent by the server to answer ServerReflectionInfo method. +// +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. type ServerReflectionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ValidHost string `protobuf:"bytes,1,opt,name=valid_host,json=validHost,proto3" json:"valid_host,omitempty"` + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. + ValidHost string `protobuf:"bytes,1,opt,name=valid_host,json=validHost,proto3" json:"valid_host,omitempty"` + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. OriginalRequest *ServerReflectionRequest `protobuf:"bytes,2,opt,name=original_request,json=originalRequest,proto3" json:"original_request,omitempty"` // The server set one of the following fields according to the message_request // in the request. @@ -301,6 +331,7 @@ func (*ServerReflectionResponse) Descriptor() ([]byte, []int) { return file_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{2} } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionResponse) GetValidHost() string { if x != nil { return x.ValidHost @@ -308,6 +339,7 @@ func (x *ServerReflectionResponse) GetValidHost() string { return "" } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionResponse) GetOriginalRequest() *ServerReflectionRequest { if x != nil { return x.OriginalRequest @@ -322,6 +354,7 @@ func (m *ServerReflectionResponse) GetMessageResponse() isServerReflectionRespon return nil } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionResponse) GetFileDescriptorResponse() *FileDescriptorResponse { if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_FileDescriptorResponse); ok { return x.FileDescriptorResponse @@ -329,6 +362,7 @@ func (x *ServerReflectionResponse) GetFileDescriptorResponse() *FileDescriptorRe return nil } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionResponse) GetAllExtensionNumbersResponse() *ExtensionNumberResponse { if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_AllExtensionNumbersResponse); ok { return x.AllExtensionNumbersResponse @@ -336,6 +370,7 @@ func (x *ServerReflectionResponse) GetAllExtensionNumbersResponse() *ExtensionNu return nil } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionResponse) GetListServicesResponse() *ListServiceResponse { if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ListServicesResponse); ok { return x.ListServicesResponse @@ -343,6 +378,7 @@ func (x *ServerReflectionResponse) GetListServicesResponse() *ListServiceRespons return nil } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServerReflectionResponse) GetErrorResponse() *ErrorResponse { if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ErrorResponse); ok { return x.ErrorResponse @@ -361,21 +397,29 @@ type ServerReflectionResponse_FileDescriptorResponse struct { // FileDescriptorResponse message to encapsulate the repeated fields. // The reflection service is allowed to avoid sending FileDescriptorProtos // that were previously sent in response to earlier requests in the stream. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. FileDescriptorResponse *FileDescriptorResponse `protobuf:"bytes,4,opt,name=file_descriptor_response,json=fileDescriptorResponse,proto3,oneof"` } type ServerReflectionResponse_AllExtensionNumbersResponse struct { // This message is used to answer all_extension_numbers_of_type requst. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. AllExtensionNumbersResponse *ExtensionNumberResponse `protobuf:"bytes,5,opt,name=all_extension_numbers_response,json=allExtensionNumbersResponse,proto3,oneof"` } type ServerReflectionResponse_ListServicesResponse struct { // This message is used to answer list_services request. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. ListServicesResponse *ListServiceResponse `protobuf:"bytes,6,opt,name=list_services_response,json=listServicesResponse,proto3,oneof"` } type ServerReflectionResponse_ErrorResponse struct { // This message is used when an error occurs. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. ErrorResponse *ErrorResponse `protobuf:"bytes,7,opt,name=error_response,json=errorResponse,proto3,oneof"` } @@ -392,6 +436,8 @@ func (*ServerReflectionResponse_ErrorResponse) isServerReflectionResponse_Messag // Serialized FileDescriptorProto messages sent by the server answering // a file_by_filename, file_containing_symbol, or file_containing_extension // request. +// +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. type FileDescriptorResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -400,6 +446,8 @@ type FileDescriptorResponse struct { // Serialized FileDescriptorProto messages. We avoid taking a dependency on // descriptor.proto, which uses proto2 only features, by making them opaque // bytes instead. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. FileDescriptorProto [][]byte `protobuf:"bytes,1,rep,name=file_descriptor_proto,json=fileDescriptorProto,proto3" json:"file_descriptor_proto,omitempty"` } @@ -435,6 +483,7 @@ func (*FileDescriptorResponse) Descriptor() ([]byte, []int) { return file_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{3} } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *FileDescriptorResponse) GetFileDescriptorProto() [][]byte { if x != nil { return x.FileDescriptorProto @@ -444,6 +493,8 @@ func (x *FileDescriptorResponse) GetFileDescriptorProto() [][]byte { // A list of extension numbers sent by the server answering // all_extension_numbers_of_type request. +// +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. type ExtensionNumberResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -451,7 +502,10 @@ type ExtensionNumberResponse struct { // Full name of the base type, including the package name. The format // is . - BaseTypeName string `protobuf:"bytes,1,opt,name=base_type_name,json=baseTypeName,proto3" json:"base_type_name,omitempty"` + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. + BaseTypeName string `protobuf:"bytes,1,opt,name=base_type_name,json=baseTypeName,proto3" json:"base_type_name,omitempty"` + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. ExtensionNumber []int32 `protobuf:"varint,2,rep,packed,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` } @@ -487,6 +541,7 @@ func (*ExtensionNumberResponse) Descriptor() ([]byte, []int) { return file_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{4} } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ExtensionNumberResponse) GetBaseTypeName() string { if x != nil { return x.BaseTypeName @@ -494,6 +549,7 @@ func (x *ExtensionNumberResponse) GetBaseTypeName() string { return "" } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ExtensionNumberResponse) GetExtensionNumber() []int32 { if x != nil { return x.ExtensionNumber @@ -502,6 +558,8 @@ func (x *ExtensionNumberResponse) GetExtensionNumber() []int32 { } // A list of ServiceResponse sent by the server answering list_services request. +// +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. type ListServiceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -509,6 +567,8 @@ type ListServiceResponse struct { // The information of each service may be expanded in the future, so we use // ServiceResponse message to encapsulate it. + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. Service []*ServiceResponse `protobuf:"bytes,1,rep,name=service,proto3" json:"service,omitempty"` } @@ -544,6 +604,7 @@ func (*ListServiceResponse) Descriptor() ([]byte, []int) { return file_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{5} } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ListServiceResponse) GetService() []*ServiceResponse { if x != nil { return x.Service @@ -553,6 +614,8 @@ func (x *ListServiceResponse) GetService() []*ServiceResponse { // The information of a single service used by ListServiceResponse to answer // list_services request. +// +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. type ServiceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -560,6 +623,8 @@ type ServiceResponse struct { // Full name of a registered service, including its package name. The format // is . + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } @@ -595,6 +660,7 @@ func (*ServiceResponse) Descriptor() ([]byte, []int) { return file_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{6} } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ServiceResponse) GetName() string { if x != nil { return x.Name @@ -603,13 +669,18 @@ func (x *ServiceResponse) GetName() string { } // The error code and error message sent by the server when an error occurs. +// +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. type ErrorResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // This field uses the error codes defined in grpc::StatusCode. - ErrorCode int32 `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + // + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. + ErrorCode int32 `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + // Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` } @@ -645,6 +716,7 @@ func (*ErrorResponse) Descriptor() ([]byte, []int) { return file_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{7} } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ErrorResponse) GetErrorCode() int32 { if x != nil { return x.ErrorCode @@ -652,6 +724,7 @@ func (x *ErrorResponse) GetErrorCode() int32 { return 0 } +// Deprecated: The entire proto file grpc/reflection/v1alpha/reflection.proto is marked as deprecated. func (x *ErrorResponse) GetErrorMessage() string { if x != nil { return x.ErrorMessage diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection_grpc.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection_grpc.pb.go index ed54ab1378eb3..367a029be6b36 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection_grpc.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection_grpc.pb.go @@ -18,8 +18,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.14.0 +// - protoc-gen-go-grpc v1.3.0 +// - protoc v4.22.0 // grpc/reflection/v1alpha/reflection.proto is a deprecated file. package grpc_reflection_v1alpha @@ -36,6 +36,10 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + ServerReflection_ServerReflectionInfo_FullMethodName = "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo" +) + // ServerReflectionClient is the client API for ServerReflection service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. @@ -54,7 +58,7 @@ func NewServerReflectionClient(cc grpc.ClientConnInterface) ServerReflectionClie } func (c *serverReflectionClient) ServerReflectionInfo(ctx context.Context, opts ...grpc.CallOption) (ServerReflection_ServerReflectionInfoClient, error) { - stream, err := c.cc.NewStream(ctx, &ServerReflection_ServiceDesc.Streams[0], "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo", opts...) + stream, err := c.cc.NewStream(ctx, &ServerReflection_ServiceDesc.Streams[0], ServerReflection_ServerReflectionInfo_FullMethodName, opts...) if err != nil { return nil, err } diff --git a/vendor/google.golang.org/grpc/reflection/serverreflection.go b/vendor/google.golang.org/grpc/reflection/serverreflection.go index e2f9ebfbbce85..76dae09d8886e 100644 --- a/vendor/google.golang.org/grpc/reflection/serverreflection.go +++ b/vendor/google.golang.org/grpc/reflection/serverreflection.go @@ -48,8 +48,9 @@ import ( "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/reflect/protoregistry" - v1alphagrpc "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" - v1alphapb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" + v1reflectiongrpc "google.golang.org/grpc/reflection/grpc_reflection_v1" + v1reflectionpb "google.golang.org/grpc/reflection/grpc_reflection_v1" + v1alphareflectiongrpc "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" ) // GRPCServer is the interface provided by a gRPC server. It is implemented by @@ -63,9 +64,19 @@ type GRPCServer interface { var _ GRPCServer = (*grpc.Server)(nil) // Register registers the server reflection service on the given gRPC server. +// Both the v1 and v1alpha versions are registered. func Register(s GRPCServer) { - svr := NewServer(ServerOptions{Services: s}) - v1alphagrpc.RegisterServerReflectionServer(s, svr) + svr := NewServerV1(ServerOptions{Services: s}) + v1alphareflectiongrpc.RegisterServerReflectionServer(s, asV1Alpha(svr)) + v1reflectiongrpc.RegisterServerReflectionServer(s, svr) +} + +// RegisterV1 registers only the v1 version of the server reflection service +// on the given gRPC server. Many clients may only support v1alpha so most +// users should use Register instead, at least until clients have upgraded. +func RegisterV1(s GRPCServer) { + svr := NewServerV1(ServerOptions{Services: s}) + v1reflectiongrpc.RegisterServerReflectionServer(s, svr) } // ServiceInfoProvider is an interface used to retrieve metadata about the @@ -120,13 +131,27 @@ type ServerOptions struct { // NewServer returns a reflection server implementation using the given options. // This can be used to customize behavior of the reflection service. Most usages +// should prefer to use Register instead. For backwards compatibility reasons, +// this returns the v1alpha version of the reflection server. For a v1 version +// of the reflection server, see NewServerV1. +// +// # Experimental +// +// Notice: This function is EXPERIMENTAL and may be changed or removed in a +// later release. +func NewServer(opts ServerOptions) v1alphareflectiongrpc.ServerReflectionServer { + return asV1Alpha(NewServerV1(opts)) +} + +// NewServerV1 returns a reflection server implementation using the given options. +// This can be used to customize behavior of the reflection service. Most usages // should prefer to use Register instead. // // # Experimental // // Notice: This function is EXPERIMENTAL and may be changed or removed in a // later release. -func NewServer(opts ServerOptions) v1alphagrpc.ServerReflectionServer { +func NewServerV1(opts ServerOptions) v1reflectiongrpc.ServerReflectionServer { if opts.DescriptorResolver == nil { opts.DescriptorResolver = protoregistry.GlobalFiles } @@ -141,7 +166,7 @@ func NewServer(opts ServerOptions) v1alphagrpc.ServerReflectionServer { } type serverReflectionServer struct { - v1alphagrpc.UnimplementedServerReflectionServer + v1alphareflectiongrpc.UnimplementedServerReflectionServer s ServiceInfoProvider descResolver protodesc.Resolver extResolver ExtensionResolver @@ -215,11 +240,11 @@ func (s *serverReflectionServer) allExtensionNumbersForTypeName(name string) ([] } // listServices returns the names of services this server exposes. -func (s *serverReflectionServer) listServices() []*v1alphapb.ServiceResponse { +func (s *serverReflectionServer) listServices() []*v1reflectionpb.ServiceResponse { serviceInfo := s.s.GetServiceInfo() - resp := make([]*v1alphapb.ServiceResponse, 0, len(serviceInfo)) + resp := make([]*v1reflectionpb.ServiceResponse, 0, len(serviceInfo)) for svc := range serviceInfo { - resp = append(resp, &v1alphapb.ServiceResponse{Name: svc}) + resp = append(resp, &v1reflectionpb.ServiceResponse{Name: svc}) } sort.Slice(resp, func(i, j int) bool { return resp[i].Name < resp[j].Name @@ -228,7 +253,7 @@ func (s *serverReflectionServer) listServices() []*v1alphapb.ServiceResponse { } // ServerReflectionInfo is the reflection service handler. -func (s *serverReflectionServer) ServerReflectionInfo(stream v1alphagrpc.ServerReflection_ServerReflectionInfoServer) error { +func (s *serverReflectionServer) ServerReflectionInfo(stream v1reflectiongrpc.ServerReflection_ServerReflectionInfoServer) error { sentFileDescriptors := make(map[string]bool) for { in, err := stream.Recv() @@ -239,79 +264,79 @@ func (s *serverReflectionServer) ServerReflectionInfo(stream v1alphagrpc.ServerR return err } - out := &v1alphapb.ServerReflectionResponse{ + out := &v1reflectionpb.ServerReflectionResponse{ ValidHost: in.Host, OriginalRequest: in, } switch req := in.MessageRequest.(type) { - case *v1alphapb.ServerReflectionRequest_FileByFilename: + case *v1reflectionpb.ServerReflectionRequest_FileByFilename: var b [][]byte fd, err := s.descResolver.FindFileByPath(req.FileByFilename) if err == nil { b, err = s.fileDescWithDependencies(fd, sentFileDescriptors) } if err != nil { - out.MessageResponse = &v1alphapb.ServerReflectionResponse_ErrorResponse{ - ErrorResponse: &v1alphapb.ErrorResponse{ + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &v1reflectionpb.ErrorResponse{ ErrorCode: int32(codes.NotFound), ErrorMessage: err.Error(), }, } } else { - out.MessageResponse = &v1alphapb.ServerReflectionResponse_FileDescriptorResponse{ - FileDescriptorResponse: &v1alphapb.FileDescriptorResponse{FileDescriptorProto: b}, + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_FileDescriptorResponse{ + FileDescriptorResponse: &v1reflectionpb.FileDescriptorResponse{FileDescriptorProto: b}, } } - case *v1alphapb.ServerReflectionRequest_FileContainingSymbol: + case *v1reflectionpb.ServerReflectionRequest_FileContainingSymbol: b, err := s.fileDescEncodingContainingSymbol(req.FileContainingSymbol, sentFileDescriptors) if err != nil { - out.MessageResponse = &v1alphapb.ServerReflectionResponse_ErrorResponse{ - ErrorResponse: &v1alphapb.ErrorResponse{ + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &v1reflectionpb.ErrorResponse{ ErrorCode: int32(codes.NotFound), ErrorMessage: err.Error(), }, } } else { - out.MessageResponse = &v1alphapb.ServerReflectionResponse_FileDescriptorResponse{ - FileDescriptorResponse: &v1alphapb.FileDescriptorResponse{FileDescriptorProto: b}, + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_FileDescriptorResponse{ + FileDescriptorResponse: &v1reflectionpb.FileDescriptorResponse{FileDescriptorProto: b}, } } - case *v1alphapb.ServerReflectionRequest_FileContainingExtension: + case *v1reflectionpb.ServerReflectionRequest_FileContainingExtension: typeName := req.FileContainingExtension.ContainingType extNum := req.FileContainingExtension.ExtensionNumber b, err := s.fileDescEncodingContainingExtension(typeName, extNum, sentFileDescriptors) if err != nil { - out.MessageResponse = &v1alphapb.ServerReflectionResponse_ErrorResponse{ - ErrorResponse: &v1alphapb.ErrorResponse{ + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &v1reflectionpb.ErrorResponse{ ErrorCode: int32(codes.NotFound), ErrorMessage: err.Error(), }, } } else { - out.MessageResponse = &v1alphapb.ServerReflectionResponse_FileDescriptorResponse{ - FileDescriptorResponse: &v1alphapb.FileDescriptorResponse{FileDescriptorProto: b}, + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_FileDescriptorResponse{ + FileDescriptorResponse: &v1reflectionpb.FileDescriptorResponse{FileDescriptorProto: b}, } } - case *v1alphapb.ServerReflectionRequest_AllExtensionNumbersOfType: + case *v1reflectionpb.ServerReflectionRequest_AllExtensionNumbersOfType: extNums, err := s.allExtensionNumbersForTypeName(req.AllExtensionNumbersOfType) if err != nil { - out.MessageResponse = &v1alphapb.ServerReflectionResponse_ErrorResponse{ - ErrorResponse: &v1alphapb.ErrorResponse{ + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_ErrorResponse{ + ErrorResponse: &v1reflectionpb.ErrorResponse{ ErrorCode: int32(codes.NotFound), ErrorMessage: err.Error(), }, } } else { - out.MessageResponse = &v1alphapb.ServerReflectionResponse_AllExtensionNumbersResponse{ - AllExtensionNumbersResponse: &v1alphapb.ExtensionNumberResponse{ + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_AllExtensionNumbersResponse{ + AllExtensionNumbersResponse: &v1reflectionpb.ExtensionNumberResponse{ BaseTypeName: req.AllExtensionNumbersOfType, ExtensionNumber: extNums, }, } } - case *v1alphapb.ServerReflectionRequest_ListServices: - out.MessageResponse = &v1alphapb.ServerReflectionResponse_ListServicesResponse{ - ListServicesResponse: &v1alphapb.ListServiceResponse{ + case *v1reflectionpb.ServerReflectionRequest_ListServices: + out.MessageResponse = &v1reflectionpb.ServerReflectionResponse_ListServicesResponse{ + ListServicesResponse: &v1reflectionpb.ListServiceResponse{ Service: s.listServices(), }, } diff --git a/vendor/google.golang.org/grpc/resolver/map.go b/vendor/google.golang.org/grpc/resolver/map.go index efcb7f3efd82d..804be887de0ac 100644 --- a/vendor/google.golang.org/grpc/resolver/map.go +++ b/vendor/google.golang.org/grpc/resolver/map.go @@ -20,7 +20,7 @@ package resolver type addressMapEntry struct { addr Address - value interface{} + value any } // AddressMap is a map of addresses to arbitrary values taking into account @@ -69,7 +69,7 @@ func (l addressMapEntryList) find(addr Address) int { } // Get returns the value for the address in the map, if present. -func (a *AddressMap) Get(addr Address) (value interface{}, ok bool) { +func (a *AddressMap) Get(addr Address) (value any, ok bool) { addrKey := toMapKey(&addr) entryList := a.m[addrKey] if entry := entryList.find(addr); entry != -1 { @@ -79,7 +79,7 @@ func (a *AddressMap) Get(addr Address) (value interface{}, ok bool) { } // Set updates or adds the value to the address in the map. -func (a *AddressMap) Set(addr Address, value interface{}) { +func (a *AddressMap) Set(addr Address, value any) { addrKey := toMapKey(&addr) entryList := a.m[addrKey] if entry := entryList.find(addr); entry != -1 { @@ -127,8 +127,8 @@ func (a *AddressMap) Keys() []Address { } // Values returns a slice of all current map values. -func (a *AddressMap) Values() []interface{} { - ret := make([]interface{}, 0, a.Len()) +func (a *AddressMap) Values() []any { + ret := make([]any, 0, a.Len()) for _, entryList := range a.m { for _, entry := range entryList { ret = append(ret, entry.value) diff --git a/vendor/google.golang.org/grpc/resolver/resolver.go b/vendor/google.golang.org/grpc/resolver/resolver.go index 654e9ce69f4a8..11384e228e54d 100644 --- a/vendor/google.golang.org/grpc/resolver/resolver.go +++ b/vendor/google.golang.org/grpc/resolver/resolver.go @@ -22,13 +22,13 @@ package resolver import ( "context" + "fmt" "net" "net/url" "strings" "google.golang.org/grpc/attributes" "google.golang.org/grpc/credentials" - "google.golang.org/grpc/internal/pretty" "google.golang.org/grpc/serviceconfig" ) @@ -41,8 +41,9 @@ var ( // TODO(bar) install dns resolver in init(){}. -// Register registers the resolver builder to the resolver map. b.Scheme will be -// used as the scheme registered with this builder. +// Register registers the resolver builder to the resolver map. b.Scheme will +// be used as the scheme registered with this builder. The registry is case +// sensitive, and schemes should not contain any uppercase characters. // // NOTE: this function must only be called during initialization time (i.e. in // an init() function), and is not thread-safe. If multiple Resolvers are @@ -76,25 +77,6 @@ func GetDefaultScheme() string { return defaultScheme } -// AddressType indicates the address type returned by name resolution. -// -// Deprecated: use Attributes in Address instead. -type AddressType uint8 - -const ( - // Backend indicates the address is for a backend server. - // - // Deprecated: use Attributes in Address instead. - Backend AddressType = iota - // GRPCLB indicates the address is for a grpclb load balancer. - // - // Deprecated: to select the GRPCLB load balancing policy, use a service - // config with a corresponding loadBalancingConfig. To supply balancer - // addresses to the GRPCLB load balancing policy, set State.Attributes - // using balancer/grpclb/state.Set. - GRPCLB -) - // Address represents a server the client connects to. // // # Experimental @@ -110,9 +92,6 @@ type Address struct { // the address, instead of the hostname from the Dial target string. In most cases, // this should not be set. // - // If Type is GRPCLB, ServerName should be the name of the remote load - // balancer, not the name of the backend. - // // WARNING: ServerName must only be populated with trusted values. It // is insecure to populate it with data from untrusted inputs since untrusted // values could be used to bypass the authority checks performed by TLS. @@ -123,34 +102,46 @@ type Address struct { Attributes *attributes.Attributes // BalancerAttributes contains arbitrary data about this address intended - // for consumption by the LB policy. These attribes do not affect SubConn + // for consumption by the LB policy. These attributes do not affect SubConn // creation, connection establishment, handshaking, etc. - BalancerAttributes *attributes.Attributes - - // Type is the type of this address. // - // Deprecated: use Attributes instead. - Type AddressType + // Deprecated: when an Address is inside an Endpoint, this field should not + // be used, and it will eventually be removed entirely. + BalancerAttributes *attributes.Attributes // Metadata is the information associated with Addr, which may be used // to make load balancing decision. // // Deprecated: use Attributes instead. - Metadata interface{} + Metadata any } // Equal returns whether a and o are identical. Metadata is compared directly, // not with any recursive introspection. +// +// This method compares all fields of the address. When used to tell apart +// addresses during subchannel creation or connection establishment, it might be +// more appropriate for the caller to implement custom equality logic. func (a Address) Equal(o Address) bool { return a.Addr == o.Addr && a.ServerName == o.ServerName && a.Attributes.Equal(o.Attributes) && a.BalancerAttributes.Equal(o.BalancerAttributes) && - a.Type == o.Type && a.Metadata == o.Metadata + a.Metadata == o.Metadata } // String returns JSON formatted string representation of the address. func (a Address) String() string { - return pretty.ToJSON(a) + var sb strings.Builder + sb.WriteString(fmt.Sprintf("{Addr: %q, ", a.Addr)) + sb.WriteString(fmt.Sprintf("ServerName: %q, ", a.ServerName)) + if a.Attributes != nil { + sb.WriteString(fmt.Sprintf("Attributes: %v, ", a.Attributes.String())) + } + if a.BalancerAttributes != nil { + sb.WriteString(fmt.Sprintf("BalancerAttributes: %v", a.BalancerAttributes.String())) + } + sb.WriteString("}") + return sb.String() } // BuildOptions includes additional information for the builder to create @@ -179,11 +170,37 @@ type BuildOptions struct { Dialer func(context.Context, string) (net.Conn, error) } +// An Endpoint is one network endpoint, or server, which may have multiple +// addresses with which it can be accessed. +type Endpoint struct { + // Addresses contains a list of addresses used to access this endpoint. + Addresses []Address + + // Attributes contains arbitrary data about this endpoint intended for + // consumption by the LB policy. + Attributes *attributes.Attributes +} + // State contains the current Resolver state relevant to the ClientConn. type State struct { // Addresses is the latest set of resolved addresses for the target. + // + // If a resolver sets Addresses but does not set Endpoints, one Endpoint + // will be created for each Address before the State is passed to the LB + // policy. The BalancerAttributes of each entry in Addresses will be set + // in Endpoints.Attributes, and be cleared in the Endpoint's Address's + // BalancerAttributes. + // + // Soon, Addresses will be deprecated and replaced fully by Endpoints. Addresses []Address + // Endpoints is the latest set of resolved endpoints for the target. + // + // If a resolver produces a State containing Endpoints but not Addresses, + // it must take care to ensure the LB policies it selects will support + // Endpoints. + Endpoints []Endpoint + // ServiceConfig contains the result from parsing the latest service // config. If it is nil, it indicates no service config is present or the // resolver does not provide service configs. @@ -203,6 +220,15 @@ type State struct { // gRPC to add new methods to this interface. type ClientConn interface { // UpdateState updates the state of the ClientConn appropriately. + // + // If an error is returned, the resolver should try to resolve the + // target again. The resolver should use a backoff timer to prevent + // overloading the server with requests. If a resolver is certain that + // reresolving will not change the result, e.g. because it is + // a watch-based resolver, returned errors can be ignored. + // + // If the resolved State is the same as the last reported one, calling + // UpdateState can be omitted. UpdateState(State) error // ReportError notifies the ClientConn that the Resolver encountered an // error. The ClientConn will notify the load balancer and begin calling @@ -234,20 +260,7 @@ type ClientConn interface { // target does not contain a scheme or if the parsed scheme is not registered // (i.e. no corresponding resolver available to resolve the endpoint), we will // apply the default scheme, and will attempt to reparse it. -// -// Examples: -// -// - "dns://some_authority/foo.bar" -// Target{Scheme: "dns", Authority: "some_authority", Endpoint: "foo.bar"} -// - "foo.bar" -// Target{Scheme: resolver.GetDefaultScheme(), Endpoint: "foo.bar"} -// - "unknown_scheme://authority/endpoint" -// Target{Scheme: resolver.GetDefaultScheme(), Endpoint: "unknown_scheme://authority/endpoint"} type Target struct { - // Deprecated: use URL.Scheme instead. - Scheme string - // Deprecated: use URL.Host instead. - Authority string // URL contains the parsed dial target with an optional default scheme added // to it if the original dial target contained no scheme or contained an // unregistered scheme. Any query params specified in the original dial @@ -280,8 +293,10 @@ type Builder interface { // gRPC dial calls Build synchronously, and fails if the returned error is // not nil. Build(target Target, cc ClientConn, opts BuildOptions) (Resolver, error) - // Scheme returns the scheme supported by this resolver. - // Scheme is defined at https://github.com/grpc/grpc/blob/master/doc/naming.md. + // Scheme returns the scheme supported by this resolver. Scheme is defined + // at https://github.com/grpc/grpc/blob/master/doc/naming.md. The returned + // string should not contain uppercase characters, as they will not match + // the parsed target's scheme as defined in RFC 3986. Scheme() string } @@ -299,10 +314,3 @@ type Resolver interface { // Close closes the resolver. Close() } - -// UnregisterForTesting removes the resolver builder with the given scheme from the -// resolver map. -// This function is for testing only. -func UnregisterForTesting(scheme string) { - delete(m, scheme) -} diff --git a/vendor/google.golang.org/grpc/resolver_conn_wrapper.go b/vendor/google.golang.org/grpc/resolver_conn_wrapper.go index 05a9d4e0bac00..d68330560848f 100644 --- a/vendor/google.golang.org/grpc/resolver_conn_wrapper.go +++ b/vendor/google.golang.org/grpc/resolver_conn_wrapper.go @@ -19,11 +19,11 @@ package grpc import ( + "context" "strings" "sync" "google.golang.org/grpc/balancer" - "google.golang.org/grpc/credentials" "google.golang.org/grpc/internal/channelz" "google.golang.org/grpc/internal/grpcsync" "google.golang.org/grpc/internal/pretty" @@ -31,129 +31,200 @@ import ( "google.golang.org/grpc/serviceconfig" ) +// resolverStateUpdater wraps the single method used by ccResolverWrapper to +// report a state update from the actual resolver implementation. +type resolverStateUpdater interface { + updateResolverState(s resolver.State, err error) error +} + // ccResolverWrapper is a wrapper on top of cc for resolvers. // It implements resolver.ClientConn interface. type ccResolverWrapper struct { - cc *ClientConn - resolverMu sync.Mutex - resolver resolver.Resolver - done *grpcsync.Event - curState resolver.State + // The following fields are initialized when the wrapper is created and are + // read-only afterwards, and therefore can be accessed without a mutex. + cc resolverStateUpdater + channelzID *channelz.Identifier + ignoreServiceConfig bool + opts ccResolverWrapperOpts + serializer *grpcsync.CallbackSerializer // To serialize all incoming calls. + serializerCancel context.CancelFunc // To close the serializer, accessed only from close(). + + // All incoming (resolver --> gRPC) calls are guaranteed to execute in a + // mutually exclusive manner as they are scheduled on the serializer. + // Fields accessed *only* in these serializer callbacks, can therefore be + // accessed without a mutex. + curState resolver.State + + // mu guards access to the below fields. + mu sync.Mutex + closed bool + resolver resolver.Resolver // Accessed only from outgoing calls. +} - incomingMu sync.Mutex // Synchronizes all the incoming calls. +// ccResolverWrapperOpts wraps the arguments to be passed when creating a new +// ccResolverWrapper. +type ccResolverWrapperOpts struct { + target resolver.Target // User specified dial target to resolve. + builder resolver.Builder // Resolver builder to use. + bOpts resolver.BuildOptions // Resolver build options to use. + channelzID *channelz.Identifier // Channelz identifier for the channel. } // newCCResolverWrapper uses the resolver.Builder to build a Resolver and // returns a ccResolverWrapper object which wraps the newly built resolver. -func newCCResolverWrapper(cc *ClientConn, rb resolver.Builder) (*ccResolverWrapper, error) { +func newCCResolverWrapper(cc resolverStateUpdater, opts ccResolverWrapperOpts) (*ccResolverWrapper, error) { + ctx, cancel := context.WithCancel(context.Background()) ccr := &ccResolverWrapper{ - cc: cc, - done: grpcsync.NewEvent(), - } - - var credsClone credentials.TransportCredentials - if creds := cc.dopts.copts.TransportCredentials; creds != nil { - credsClone = creds.Clone() - } - rbo := resolver.BuildOptions{ - DisableServiceConfig: cc.dopts.disableServiceConfig, - DialCreds: credsClone, - CredsBundle: cc.dopts.copts.CredsBundle, - Dialer: cc.dopts.copts.Dialer, - } - - var err error - // We need to hold the lock here while we assign to the ccr.resolver field - // to guard against a data race caused by the following code path, - // rb.Build-->ccr.ReportError-->ccr.poll-->ccr.resolveNow, would end up - // accessing ccr.resolver which is being assigned here. - ccr.resolverMu.Lock() - defer ccr.resolverMu.Unlock() - ccr.resolver, err = rb.Build(cc.parsedTarget, ccr, rbo) + cc: cc, + channelzID: opts.channelzID, + ignoreServiceConfig: opts.bOpts.DisableServiceConfig, + opts: opts, + serializer: grpcsync.NewCallbackSerializer(ctx), + serializerCancel: cancel, + } + + // Cannot hold the lock at build time because the resolver can send an + // update or error inline and these incoming calls grab the lock to schedule + // a callback in the serializer. + r, err := opts.builder.Build(opts.target, ccr, opts.bOpts) if err != nil { + cancel() return nil, err } + + // Any error reported by the resolver at build time that leads to a + // re-resolution request from the balancer is dropped by grpc until we + // return from this function. So, we don't have to handle pending resolveNow + // requests here. + ccr.mu.Lock() + ccr.resolver = r + ccr.mu.Unlock() + return ccr, nil } func (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOptions) { - ccr.resolverMu.Lock() - if !ccr.done.HasFired() { - ccr.resolver.ResolveNow(o) + ccr.mu.Lock() + defer ccr.mu.Unlock() + + // ccr.resolver field is set only after the call to Build() returns. But in + // the process of building, the resolver may send an error update which when + // propagated to the balancer may result in a re-resolution request. + if ccr.closed || ccr.resolver == nil { + return } - ccr.resolverMu.Unlock() + ccr.resolver.ResolveNow(o) } func (ccr *ccResolverWrapper) close() { - ccr.resolverMu.Lock() - ccr.resolver.Close() - ccr.done.Fire() - ccr.resolverMu.Unlock() + ccr.mu.Lock() + if ccr.closed { + ccr.mu.Unlock() + return + } + + channelz.Info(logger, ccr.channelzID, "Closing the name resolver") + + // Close the serializer to ensure that no more calls from the resolver are + // handled, before actually closing the resolver. + ccr.serializerCancel() + ccr.closed = true + r := ccr.resolver + ccr.mu.Unlock() + + // Give enqueued callbacks a chance to finish. + <-ccr.serializer.Done() + + // Spawn a goroutine to close the resolver (since it may block trying to + // cleanup all allocated resources) and return early. + go r.Close() +} + +// serializerScheduleLocked is a convenience method to schedule a function to be +// run on the serializer while holding ccr.mu. +func (ccr *ccResolverWrapper) serializerScheduleLocked(f func(context.Context)) { + ccr.mu.Lock() + ccr.serializer.Schedule(f) + ccr.mu.Unlock() } +// UpdateState is called by resolver implementations to report new state to gRPC +// which includes addresses and service config. func (ccr *ccResolverWrapper) UpdateState(s resolver.State) error { - ccr.incomingMu.Lock() - defer ccr.incomingMu.Unlock() - if ccr.done.HasFired() { + errCh := make(chan error, 1) + if s.Endpoints == nil { + s.Endpoints = make([]resolver.Endpoint, 0, len(s.Addresses)) + for _, a := range s.Addresses { + ep := resolver.Endpoint{Addresses: []resolver.Address{a}, Attributes: a.BalancerAttributes} + ep.Addresses[0].BalancerAttributes = nil + s.Endpoints = append(s.Endpoints, ep) + } + } + ok := ccr.serializer.Schedule(func(context.Context) { + ccr.addChannelzTraceEvent(s) + ccr.curState = s + if err := ccr.cc.updateResolverState(ccr.curState, nil); err == balancer.ErrBadResolverState { + errCh <- balancer.ErrBadResolverState + return + } + errCh <- nil + }) + if !ok { + // The only time when Schedule() fail to add the callback to the + // serializer is when the serializer is closed, and this happens only + // when the resolver wrapper is closed. return nil } - ccr.addChannelzTraceEvent(s) - ccr.curState = s - if err := ccr.cc.updateResolverState(ccr.curState, nil); err == balancer.ErrBadResolverState { - return balancer.ErrBadResolverState - } - return nil + return <-errCh } +// ReportError is called by resolver implementations to report errors +// encountered during name resolution to gRPC. func (ccr *ccResolverWrapper) ReportError(err error) { - ccr.incomingMu.Lock() - defer ccr.incomingMu.Unlock() - if ccr.done.HasFired() { - return - } - channelz.Warningf(logger, ccr.cc.channelzID, "ccResolverWrapper: reporting error to cc: %v", err) - ccr.cc.updateResolverState(resolver.State{}, err) + ccr.serializerScheduleLocked(func(_ context.Context) { + channelz.Warningf(logger, ccr.channelzID, "ccResolverWrapper: reporting error to cc: %v", err) + ccr.cc.updateResolverState(resolver.State{}, err) + }) } -// NewAddress is called by the resolver implementation to send addresses to gRPC. +// NewAddress is called by the resolver implementation to send addresses to +// gRPC. func (ccr *ccResolverWrapper) NewAddress(addrs []resolver.Address) { - ccr.incomingMu.Lock() - defer ccr.incomingMu.Unlock() - if ccr.done.HasFired() { - return - } - ccr.addChannelzTraceEvent(resolver.State{Addresses: addrs, ServiceConfig: ccr.curState.ServiceConfig}) - ccr.curState.Addresses = addrs - ccr.cc.updateResolverState(ccr.curState, nil) + ccr.serializerScheduleLocked(func(_ context.Context) { + ccr.addChannelzTraceEvent(resolver.State{Addresses: addrs, ServiceConfig: ccr.curState.ServiceConfig}) + ccr.curState.Addresses = addrs + ccr.cc.updateResolverState(ccr.curState, nil) + }) } // NewServiceConfig is called by the resolver implementation to send service // configs to gRPC. func (ccr *ccResolverWrapper) NewServiceConfig(sc string) { - ccr.incomingMu.Lock() - defer ccr.incomingMu.Unlock() - if ccr.done.HasFired() { - return - } - channelz.Infof(logger, ccr.cc.channelzID, "ccResolverWrapper: got new service config: %s", sc) - if ccr.cc.dopts.disableServiceConfig { - channelz.Info(logger, ccr.cc.channelzID, "Service config lookups disabled; ignoring config") - return - } - scpr := parseServiceConfig(sc) - if scpr.Err != nil { - channelz.Warningf(logger, ccr.cc.channelzID, "ccResolverWrapper: error parsing service config: %v", scpr.Err) - return - } - ccr.addChannelzTraceEvent(resolver.State{Addresses: ccr.curState.Addresses, ServiceConfig: scpr}) - ccr.curState.ServiceConfig = scpr - ccr.cc.updateResolverState(ccr.curState, nil) + ccr.serializerScheduleLocked(func(_ context.Context) { + channelz.Infof(logger, ccr.channelzID, "ccResolverWrapper: got new service config: %s", sc) + if ccr.ignoreServiceConfig { + channelz.Info(logger, ccr.channelzID, "Service config lookups disabled; ignoring config") + return + } + scpr := parseServiceConfig(sc) + if scpr.Err != nil { + channelz.Warningf(logger, ccr.channelzID, "ccResolverWrapper: error parsing service config: %v", scpr.Err) + return + } + ccr.addChannelzTraceEvent(resolver.State{Addresses: ccr.curState.Addresses, ServiceConfig: scpr}) + ccr.curState.ServiceConfig = scpr + ccr.cc.updateResolverState(ccr.curState, nil) + }) } +// ParseServiceConfig is called by resolver implementations to parse a JSON +// representation of the service config. func (ccr *ccResolverWrapper) ParseServiceConfig(scJSON string) *serviceconfig.ParseResult { return parseServiceConfig(scJSON) } +// addChannelzTraceEvent adds a channelz trace event containing the new +// state received from resolver implementations. func (ccr *ccResolverWrapper) addChannelzTraceEvent(s resolver.State) { var updates []string var oldSC, newSC *ServiceConfig @@ -172,5 +243,5 @@ func (ccr *ccResolverWrapper) addChannelzTraceEvent(s resolver.State) { } else if len(ccr.curState.Addresses) == 0 && len(s.Addresses) > 0 { updates = append(updates, "resolver returned new addresses") } - channelz.Infof(logger, ccr.cc.channelzID, "Resolver state updated: %s (%v)", pretty.ToJSON(s), strings.Join(updates, "; ")) + channelz.Infof(logger, ccr.channelzID, "Resolver state updated: %s (%v)", pretty.ToJSON(s), strings.Join(updates, "; ")) } diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go index cb7020ebecd78..b7723aa09cbb6 100644 --- a/vendor/google.golang.org/grpc/rpc_util.go +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -75,7 +75,7 @@ func NewGZIPCompressorWithLevel(level int) (Compressor, error) { } return &gzipCompressor{ pool: sync.Pool{ - New: func() interface{} { + New: func() any { w, err := gzip.NewWriterLevel(io.Discard, level) if err != nil { panic(err) @@ -159,6 +159,7 @@ type callInfo struct { contentSubtype string codec baseCodec maxRetryRPCBufferSize int + onFinish []func(err error) } func defaultCallInfo() *callInfo { @@ -295,6 +296,41 @@ func (o FailFastCallOption) before(c *callInfo) error { } func (o FailFastCallOption) after(c *callInfo, attempt *csAttempt) {} +// OnFinish returns a CallOption that configures a callback to be called when +// the call completes. The error passed to the callback is the status of the +// RPC, and may be nil. The onFinish callback provided will only be called once +// by gRPC. This is mainly used to be used by streaming interceptors, to be +// notified when the RPC completes along with information about the status of +// the RPC. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func OnFinish(onFinish func(err error)) CallOption { + return OnFinishCallOption{ + OnFinish: onFinish, + } +} + +// OnFinishCallOption is CallOption that indicates a callback to be called when +// the call completes. +// +// # Experimental +// +// Notice: This type is EXPERIMENTAL and may be changed or removed in a +// later release. +type OnFinishCallOption struct { + OnFinish func(error) +} + +func (o OnFinishCallOption) before(c *callInfo) error { + c.onFinish = append(c.onFinish, o.OnFinish) + return nil +} + +func (o OnFinishCallOption) after(c *callInfo, attempt *csAttempt) {} + // MaxCallRecvMsgSize returns a CallOption which sets the maximum message size // in bytes the client can receive. If this is not set, gRPC uses the default // 4MB. @@ -541,6 +577,9 @@ type parser struct { // The header of a gRPC message. Find more detail at // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md header [5]byte + + // recvBufferPool is the pool of shared receive buffers. + recvBufferPool SharedBufferPool } // recvMsg reads a complete gRPC message from the stream. @@ -574,9 +613,7 @@ func (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byt if int(length) > maxReceiveMessageSize { return 0, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", length, maxReceiveMessageSize) } - // TODO(bradfitz,zhaoq): garbage. reuse buffer after proto decoding instead - // of making it for each message: - msg = make([]byte, int(length)) + msg = p.recvBufferPool.Get(int(length)) if _, err := p.r.Read(msg); err != nil { if err == io.EOF { err = io.ErrUnexpectedEOF @@ -589,7 +626,7 @@ func (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byt // encode serializes msg and returns a buffer containing the message, or an // error if it is too large to be transmitted by grpc. If msg is nil, it // generates an empty message. -func encode(c baseCodec, msg interface{}) ([]byte, error) { +func encode(c baseCodec, msg any) ([]byte, error) { if msg == nil { // NOTE: typed nils will not be caught by this check return nil, nil } @@ -656,14 +693,15 @@ func msgHeader(data, compData []byte) (hdr []byte, payload []byte) { return hdr, data } -func outPayload(client bool, msg interface{}, data, payload []byte, t time.Time) *stats.OutPayload { +func outPayload(client bool, msg any, data, payload []byte, t time.Time) *stats.OutPayload { return &stats.OutPayload{ - Client: client, - Payload: msg, - Data: data, - Length: len(data), - WireLength: len(payload) + headerLen, - SentTime: t, + Client: client, + Payload: msg, + Data: data, + Length: len(data), + WireLength: len(payload) + headerLen, + CompressedLength: len(payload), + SentTime: t, } } @@ -684,17 +722,17 @@ func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool } type payloadInfo struct { - wireLength int // The compressed length got from wire. + compressedLength int // The compressed length got from wire. uncompressedBytes []byte } func recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) ([]byte, error) { - pf, d, err := p.recvMsg(maxReceiveMessageSize) + pf, buf, err := p.recvMsg(maxReceiveMessageSize) if err != nil { return nil, err } if payInfo != nil { - payInfo.wireLength = len(d) + payInfo.compressedLength = len(buf) } if st := checkRecvPayload(pf, s.RecvCompress(), compressor != nil || dc != nil); st != nil { @@ -706,10 +744,10 @@ func recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxRecei // To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor, // use this decompressor as the default. if dc != nil { - d, err = dc.Do(bytes.NewReader(d)) - size = len(d) + buf, err = dc.Do(bytes.NewReader(buf)) + size = len(buf) } else { - d, size, err = decompress(compressor, d, maxReceiveMessageSize) + buf, size, err = decompress(compressor, buf, maxReceiveMessageSize) } if err != nil { return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err) @@ -720,7 +758,7 @@ func recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxRecei return nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max (%d vs. %d)", size, maxReceiveMessageSize) } } - return d, nil + return buf, nil } // Using compressor, decompress d, returning data and size. @@ -754,16 +792,18 @@ func decompress(compressor encoding.Compressor, d []byte, maxReceiveMessageSize // For the two compressor parameters, both should not be set, but if they are, // dc takes precedence over compressor. // TODO(dfawley): wrap the old compressor/decompressor using the new API? -func recv(p *parser, c baseCodec, s *transport.Stream, dc Decompressor, m interface{}, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) error { - d, err := recvAndDecompress(p, s, dc, maxReceiveMessageSize, payInfo, compressor) +func recv(p *parser, c baseCodec, s *transport.Stream, dc Decompressor, m any, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) error { + buf, err := recvAndDecompress(p, s, dc, maxReceiveMessageSize, payInfo, compressor) if err != nil { return err } - if err := c.Unmarshal(d, m); err != nil { + if err := c.Unmarshal(buf, m); err != nil { return status.Errorf(codes.Internal, "grpc: failed to unmarshal the received message: %v", err) } if payInfo != nil { - payInfo.uncompressedBytes = d + payInfo.uncompressedBytes = buf + } else { + p.recvBufferPool.Put(&buf) } return nil } @@ -823,19 +863,22 @@ func ErrorDesc(err error) string { // Errorf returns nil if c is OK. // // Deprecated: use status.Errorf instead. -func Errorf(c codes.Code, format string, a ...interface{}) error { +func Errorf(c codes.Code, format string, a ...any) error { return status.Errorf(c, format, a...) } +var errContextCanceled = status.Error(codes.Canceled, context.Canceled.Error()) +var errContextDeadline = status.Error(codes.DeadlineExceeded, context.DeadlineExceeded.Error()) + // toRPCErr converts an error into an error from the status package. func toRPCErr(err error) error { switch err { case nil, io.EOF: return err case context.DeadlineExceeded: - return status.Error(codes.DeadlineExceeded, err.Error()) + return errContextDeadline case context.Canceled: - return status.Error(codes.Canceled, err.Error()) + return errContextCanceled case io.ErrUnexpectedEOF: return status.Error(codes.Internal, err.Error()) } diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go index d5a6e78be44d0..244123c6c5a89 100644 --- a/vendor/google.golang.org/grpc/server.go +++ b/vendor/google.golang.org/grpc/server.go @@ -43,8 +43,8 @@ import ( "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/binarylog" "google.golang.org/grpc/internal/channelz" - "google.golang.org/grpc/internal/grpcrand" "google.golang.org/grpc/internal/grpcsync" + "google.golang.org/grpc/internal/grpcutil" "google.golang.org/grpc/internal/transport" "google.golang.org/grpc/keepalive" "google.golang.org/grpc/metadata" @@ -74,10 +74,10 @@ func init() { srv.drainServerTransports(addr) } internal.AddGlobalServerOptions = func(opt ...ServerOption) { - extraServerOptions = append(extraServerOptions, opt...) + globalServerOptions = append(globalServerOptions, opt...) } internal.ClearGlobalServerOptions = func() { - extraServerOptions = nil + globalServerOptions = nil } internal.BinaryLogger = binaryLogger internal.JoinServerOptions = newJoinServerOption @@ -86,7 +86,7 @@ func init() { var statusOK = status.New(codes.OK, "") var logger = grpclog.Component("core") -type methodHandler func(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor UnaryServerInterceptor) (interface{}, error) +type methodHandler func(srv any, ctx context.Context, dec func(any) error, interceptor UnaryServerInterceptor) (any, error) // MethodDesc represents an RPC service's method specification. type MethodDesc struct { @@ -99,20 +99,20 @@ type ServiceDesc struct { ServiceName string // The pointer to the service interface. Used to check whether the user // provided implementation satisfies the interface requirements. - HandlerType interface{} + HandlerType any Methods []MethodDesc Streams []StreamDesc - Metadata interface{} + Metadata any } // serviceInfo wraps information about a service. It is very similar to // ServiceDesc and is constructed from it for internal purposes. type serviceInfo struct { // Contains the implementation for the methods in this service. - serviceImpl interface{} + serviceImpl any methods map[string]*MethodDesc streams map[string]*StreamDesc - mdata interface{} + mdata any } type serverWorkerData struct { @@ -145,7 +145,7 @@ type Server struct { channelzID *channelz.Identifier czData *channelzData - serverWorkerChannels []chan *serverWorkerData + serverWorkerChannel chan *serverWorkerData } type serverOptions struct { @@ -170,10 +170,12 @@ type serverOptions struct { initialConnWindowSize int32 writeBufferSize int readBufferSize int + sharedWriteBuffer bool connectionTimeout time.Duration maxHeaderListSize *uint32 headerTableSize *uint32 numServerWorkers uint32 + recvBufferPool SharedBufferPool } var defaultServerOptions = serverOptions{ @@ -182,8 +184,9 @@ var defaultServerOptions = serverOptions{ connectionTimeout: 120 * time.Second, writeBufferSize: defaultWriteBufSize, readBufferSize: defaultReadBufSize, + recvBufferPool: nopBufferPool{}, } -var extraServerOptions []ServerOption +var globalServerOptions []ServerOption // A ServerOption sets options such as credentials, codec and keepalive parameters, etc. type ServerOption interface { @@ -233,6 +236,20 @@ func newJoinServerOption(opts ...ServerOption) ServerOption { return &joinServerOption{opts: opts} } +// SharedWriteBuffer allows reusing per-connection transport write buffer. +// If this option is set to true every connection will release the buffer after +// flushing the data on the wire. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func SharedWriteBuffer(val bool) ServerOption { + return newFuncServerOption(func(o *serverOptions) { + o.sharedWriteBuffer = val + }) +} + // WriteBufferSize determines how much data can be batched before doing a write // on the wire. The corresponding memory allocation for this buffer will be // twice the size to keep syscalls low. The default value for this buffer is @@ -273,9 +290,9 @@ func InitialConnWindowSize(s int32) ServerOption { // KeepaliveParams returns a ServerOption that sets keepalive and max-age parameters for the server. func KeepaliveParams(kp keepalive.ServerParameters) ServerOption { - if kp.Time > 0 && kp.Time < time.Second { + if kp.Time > 0 && kp.Time < internal.KeepaliveMinServerPingTime { logger.Warning("Adjusting keepalive ping interval to minimum period of 1s") - kp.Time = time.Second + kp.Time = internal.KeepaliveMinServerPingTime } return newFuncServerOption(func(o *serverOptions) { @@ -552,6 +569,27 @@ func NumStreamWorkers(numServerWorkers uint32) ServerOption { }) } +// RecvBufferPool returns a ServerOption that configures the server +// to use the provided shared buffer pool for parsing incoming messages. Depending +// on the application's workload, this could result in reduced memory allocation. +// +// If you are unsure about how to implement a memory pool but want to utilize one, +// begin with grpc.NewSharedBufferPool. +// +// Note: The shared buffer pool feature will not be active if any of the following +// options are used: StatsHandler, EnableTracing, or binary logging. In such +// cases, the shared buffer pool will be ignored. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func RecvBufferPool(bufferPool SharedBufferPool) ServerOption { + return newFuncServerOption(func(o *serverOptions) { + o.recvBufferPool = bufferPool + }) +} + // serverWorkerResetThreshold defines how often the stack must be reset. Every // N requests, by spawning a new goroutine in its place, a worker can reset its // stack so that large stacks don't live in memory forever. 2^16 should allow @@ -560,47 +598,45 @@ func NumStreamWorkers(numServerWorkers uint32) ServerOption { const serverWorkerResetThreshold = 1 << 16 // serverWorkers blocks on a *transport.Stream channel forever and waits for -// data to be fed by serveStreams. This allows different requests to be +// data to be fed by serveStreams. This allows multiple requests to be // processed by the same goroutine, removing the need for expensive stack // re-allocations (see the runtime.morestack problem [1]). // // [1] https://github.com/golang/go/issues/18138 -func (s *Server) serverWorker(ch chan *serverWorkerData) { - // To make sure all server workers don't reset at the same time, choose a - // random number of iterations before resetting. - threshold := serverWorkerResetThreshold + grpcrand.Intn(serverWorkerResetThreshold) - for completed := 0; completed < threshold; completed++ { - data, ok := <-ch +func (s *Server) serverWorker() { + for completed := 0; completed < serverWorkerResetThreshold; completed++ { + data, ok := <-s.serverWorkerChannel if !ok { return } - s.handleStream(data.st, data.stream, s.traceInfo(data.st, data.stream)) - data.wg.Done() + s.handleSingleStream(data) } - go s.serverWorker(ch) + go s.serverWorker() } -// initServerWorkers creates worker goroutines and channels to process incoming +func (s *Server) handleSingleStream(data *serverWorkerData) { + defer data.wg.Done() + s.handleStream(data.st, data.stream, s.traceInfo(data.st, data.stream)) +} + +// initServerWorkers creates worker goroutines and a channel to process incoming // connections to reduce the time spent overall on runtime.morestack. func (s *Server) initServerWorkers() { - s.serverWorkerChannels = make([]chan *serverWorkerData, s.opts.numServerWorkers) + s.serverWorkerChannel = make(chan *serverWorkerData) for i := uint32(0); i < s.opts.numServerWorkers; i++ { - s.serverWorkerChannels[i] = make(chan *serverWorkerData) - go s.serverWorker(s.serverWorkerChannels[i]) + go s.serverWorker() } } func (s *Server) stopServerWorkers() { - for i := uint32(0); i < s.opts.numServerWorkers; i++ { - close(s.serverWorkerChannels[i]) - } + close(s.serverWorkerChannel) } // NewServer creates a gRPC server which has no service registered and has not // started to accept requests yet. func NewServer(opt ...ServerOption) *Server { opts := defaultServerOptions - for _, o := range extraServerOptions { + for _, o := range globalServerOptions { o.apply(&opts) } for _, o := range opt { @@ -634,7 +670,7 @@ func NewServer(opt ...ServerOption) *Server { // printf records an event in s's event log, unless s has been stopped. // REQUIRES s.mu is held. -func (s *Server) printf(format string, a ...interface{}) { +func (s *Server) printf(format string, a ...any) { if s.events != nil { s.events.Printf(format, a...) } @@ -642,7 +678,7 @@ func (s *Server) printf(format string, a ...interface{}) { // errorf records an error in s's event log, unless s has been stopped. // REQUIRES s.mu is held. -func (s *Server) errorf(format string, a ...interface{}) { +func (s *Server) errorf(format string, a ...any) { if s.events != nil { s.events.Errorf(format, a...) } @@ -657,14 +693,14 @@ type ServiceRegistrar interface { // once the server has started serving. // desc describes the service and its methods and handlers. impl is the // service implementation which is passed to the method handlers. - RegisterService(desc *ServiceDesc, impl interface{}) + RegisterService(desc *ServiceDesc, impl any) } // RegisterService registers a service and its implementation to the gRPC // server. It is called from the IDL generated code. This must be called before // invoking Serve. If ss is non-nil (for legacy code), its type is checked to // ensure it implements sd.HandlerType. -func (s *Server) RegisterService(sd *ServiceDesc, ss interface{}) { +func (s *Server) RegisterService(sd *ServiceDesc, ss any) { if ss != nil { ht := reflect.TypeOf(sd.HandlerType).Elem() st := reflect.TypeOf(ss) @@ -675,7 +711,7 @@ func (s *Server) RegisterService(sd *ServiceDesc, ss interface{}) { s.register(sd, ss) } -func (s *Server) register(sd *ServiceDesc, ss interface{}) { +func (s *Server) register(sd *ServiceDesc, ss any) { s.mu.Lock() defer s.mu.Unlock() s.printf("RegisterService(%q)", sd.ServiceName) @@ -716,7 +752,7 @@ type MethodInfo struct { type ServiceInfo struct { Methods []MethodInfo // Metadata is the metadata specified in ServiceDesc when registering service. - Metadata interface{} + Metadata any } // GetServiceInfo returns a map from service names to ServiceInfo. @@ -897,7 +933,7 @@ func (s *Server) drainServerTransports(addr string) { s.mu.Lock() conns := s.conns[addr] for st := range conns { - st.Drain() + st.Drain("") } s.mu.Unlock() } @@ -917,6 +953,7 @@ func (s *Server) newHTTP2Transport(c net.Conn) transport.ServerTransport { InitialConnWindowSize: s.opts.initialConnWindowSize, WriteBufferSize: s.opts.writeBufferSize, ReadBufferSize: s.opts.readBufferSize, + SharedWriteBuffer: s.opts.sharedWriteBuffer, ChannelzParentID: s.channelzID, MaxHeaderListSize: s.opts.maxHeaderListSize, HeaderTableSize: s.opts.headerTableSize, @@ -945,26 +982,21 @@ func (s *Server) serveStreams(st transport.ServerTransport) { defer st.Close(errors.New("finished serving streams for the server transport")) var wg sync.WaitGroup - var roundRobinCounter uint32 st.HandleStreams(func(stream *transport.Stream) { wg.Add(1) if s.opts.numServerWorkers > 0 { data := &serverWorkerData{st: st, wg: &wg, stream: stream} select { - case s.serverWorkerChannels[atomic.AddUint32(&roundRobinCounter, 1)%s.opts.numServerWorkers] <- data: + case s.serverWorkerChannel <- data: + return default: // If all stream workers are busy, fallback to the default code path. - go func() { - s.handleStream(st, stream, s.traceInfo(st, stream)) - wg.Done() - }() } - } else { - go func() { - defer wg.Done() - s.handleStream(st, stream, s.traceInfo(st, stream)) - }() } + go func() { + defer wg.Done() + s.handleStream(st, stream, s.traceInfo(st, stream)) + }() }, func(ctx context.Context, method string) context.Context { if !EnableTracing { return ctx @@ -1053,7 +1085,7 @@ func (s *Server) addConn(addr string, st transport.ServerTransport) bool { if s.drain { // Transport added after we drained our existing conns: drain it // immediately. - st.Drain() + st.Drain("") } if s.conns[addr] == nil { @@ -1103,7 +1135,7 @@ func (s *Server) incrCallsFailed() { atomic.AddInt64(&s.czData.callsFailed, 1) } -func (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Stream, msg interface{}, cp Compressor, opts *transport.Options, comp encoding.Compressor) error { +func (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Stream, msg any, cp Compressor, opts *transport.Options, comp encoding.Compressor) error { data, err := encode(s.getCodec(stream.ContentSubtype()), msg) if err != nil { channelz.Error(logger, s.channelzID, "grpc: server failed to encode response: ", err) @@ -1150,7 +1182,7 @@ func chainUnaryServerInterceptors(s *Server) { } func chainUnaryInterceptors(interceptors []UnaryServerInterceptor) UnaryServerInterceptor { - return func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (interface{}, error) { + return func(ctx context.Context, req any, info *UnaryServerInfo, handler UnaryHandler) (any, error) { return interceptors[0](ctx, req, info, getChainUnaryHandler(interceptors, 0, info, handler)) } } @@ -1159,7 +1191,7 @@ func getChainUnaryHandler(interceptors []UnaryServerInterceptor, curr int, info if curr == len(interceptors)-1 { return finalHandler } - return func(ctx context.Context, req interface{}) (interface{}, error) { + return func(ctx context.Context, req any) (any, error) { return interceptors[curr+1](ctx, req, info, getChainUnaryHandler(interceptors, curr+1, info, finalHandler)) } } @@ -1196,7 +1228,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. defer func() { if trInfo != nil { if err != nil && err != io.EOF { - trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true) trInfo.tr.SetError() } trInfo.tr.Finish() @@ -1252,7 +1284,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. logEntry.PeerAddr = peer.Addr } for _, binlog := range binlogs { - binlog.Log(logEntry) + binlog.Log(ctx, logEntry) } } @@ -1263,6 +1295,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. var comp, decomp encoding.Compressor var cp Compressor var dc Decompressor + var sendCompressorName string // If dc is set and matches the stream's compression, use it. Otherwise, try // to find a matching registered compressor for decomp. @@ -1283,12 +1316,18 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. if s.opts.cp != nil { cp = s.opts.cp - stream.SetSendCompress(cp.Type()) + sendCompressorName = cp.Type() } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { // Legacy compressor not specified; attempt to respond with same encoding. comp = encoding.GetCompressor(rc) if comp != nil { - stream.SetSendCompress(rc) + sendCompressorName = comp.Name() + } + } + + if sendCompressorName != "" { + if err := stream.SetSendCompress(sendCompressorName); err != nil { + return status.Errorf(codes.Internal, "grpc: failed to set send compressor: %v", err) } } @@ -1296,7 +1335,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. if len(shs) != 0 || len(binlogs) != 0 { payInfo = &payloadInfo{} } - d, err := recvAndDecompress(&parser{r: stream}, stream, dc, s.opts.maxReceiveMessageSize, payInfo, decomp) + d, err := recvAndDecompress(&parser{r: stream, recvBufferPool: s.opts.recvBufferPool}, stream, dc, s.opts.maxReceiveMessageSize, payInfo, decomp) if err != nil { if e := t.WriteStatus(stream, status.Convert(err)); e != nil { channelz.Warningf(logger, s.channelzID, "grpc: Server.processUnaryRPC failed to write status: %v", e) @@ -1306,17 +1345,18 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. if channelz.IsOn() { t.IncrMsgRecv() } - df := func(v interface{}) error { + df := func(v any) error { if err := s.getCodec(stream.ContentSubtype()).Unmarshal(d, v); err != nil { return status.Errorf(codes.Internal, "grpc: error unmarshalling request: %v", err) } for _, sh := range shs { sh.HandleRPC(stream.Context(), &stats.InPayload{ - RecvTime: time.Now(), - Payload: v, - WireLength: payInfo.wireLength + headerLen, - Data: d, - Length: len(d), + RecvTime: time.Now(), + Payload: v, + Length: len(d), + WireLength: payInfo.compressedLength + headerLen, + CompressedLength: payInfo.compressedLength, + Data: d, }) } if len(binlogs) != 0 { @@ -1324,7 +1364,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Message: d, } for _, binlog := range binlogs { - binlog.Log(cm) + binlog.Log(stream.Context(), cm) } } if trInfo != nil { @@ -1357,7 +1397,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Header: h, } for _, binlog := range binlogs { - binlog.Log(sh) + binlog.Log(stream.Context(), sh) } } st := &binarylog.ServerTrailer{ @@ -1365,7 +1405,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Err: appErr, } for _, binlog := range binlogs { - binlog.Log(st) + binlog.Log(stream.Context(), st) } } return appErr @@ -1375,6 +1415,11 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. } opts := &transport.Options{Last: true} + // Server handler could have set new compressor by calling SetSendCompressor. + // In case it is set, we need to use it for compressing outbound message. + if stream.SendCompress() != sendCompressorName { + comp = encoding.GetCompressor(stream.SendCompress()) + } if err := s.sendResponse(t, stream, reply, cp, opts, comp); err != nil { if err == io.EOF { // The entire stream is done (for unary RPC only). @@ -1402,8 +1447,8 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Err: appErr, } for _, binlog := range binlogs { - binlog.Log(sh) - binlog.Log(st) + binlog.Log(stream.Context(), sh) + binlog.Log(stream.Context(), st) } } return err @@ -1417,8 +1462,8 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Message: reply, } for _, binlog := range binlogs { - binlog.Log(sh) - binlog.Log(sm) + binlog.Log(stream.Context(), sh) + binlog.Log(stream.Context(), sm) } } if channelz.IsOn() { @@ -1430,17 +1475,16 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. // TODO: Should we be logging if writing status failed here, like above? // Should the logging be in WriteStatus? Should we ignore the WriteStatus // error or allow the stats handler to see it? - err = t.WriteStatus(stream, statusOK) if len(binlogs) != 0 { st := &binarylog.ServerTrailer{ Trailer: stream.Trailer(), Err: appErr, } for _, binlog := range binlogs { - binlog.Log(st) + binlog.Log(stream.Context(), st) } } - return err + return t.WriteStatus(stream, statusOK) } // chainStreamServerInterceptors chains all stream server interceptors into one. @@ -1465,7 +1509,7 @@ func chainStreamServerInterceptors(s *Server) { } func chainStreamInterceptors(interceptors []StreamServerInterceptor) StreamServerInterceptor { - return func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error { + return func(srv any, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error { return interceptors[0](srv, ss, info, getChainStreamHandler(interceptors, 0, info, handler)) } } @@ -1474,7 +1518,7 @@ func getChainStreamHandler(interceptors []StreamServerInterceptor, curr int, inf if curr == len(interceptors)-1 { return finalHandler } - return func(srv interface{}, stream ServerStream) error { + return func(srv any, stream ServerStream) error { return interceptors[curr+1](srv, stream, info, getChainStreamHandler(interceptors, curr+1, info, finalHandler)) } } @@ -1501,7 +1545,7 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp ctx: ctx, t: t, s: stream, - p: &parser{r: stream}, + p: &parser{r: stream, recvBufferPool: s.opts.recvBufferPool}, codec: s.getCodec(stream.ContentSubtype()), maxReceiveMessageSize: s.opts.maxReceiveMessageSize, maxSendMessageSize: s.opts.maxSendMessageSize, @@ -1515,7 +1559,7 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp if trInfo != nil { ss.mu.Lock() if err != nil && err != io.EOF { - ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true) ss.trInfo.tr.SetError() } ss.trInfo.tr.Finish() @@ -1574,7 +1618,7 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp logEntry.PeerAddr = peer.Addr } for _, binlog := range ss.binlogs { - binlog.Log(logEntry) + binlog.Log(stream.Context(), logEntry) } } @@ -1597,12 +1641,18 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. if s.opts.cp != nil { ss.cp = s.opts.cp - stream.SetSendCompress(s.opts.cp.Type()) + ss.sendCompressorName = s.opts.cp.Type() } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { // Legacy compressor not specified; attempt to respond with same encoding. ss.comp = encoding.GetCompressor(rc) if ss.comp != nil { - stream.SetSendCompress(rc) + ss.sendCompressorName = rc + } + } + + if ss.sendCompressorName != "" { + if err := stream.SetSendCompress(ss.sendCompressorName); err != nil { + return status.Errorf(codes.Internal, "grpc: failed to set send compressor: %v", err) } } @@ -1612,7 +1662,7 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp trInfo.tr.LazyLog(&trInfo.firstLine, false) } var appErr error - var server interface{} + var server any if info != nil { server = info.serviceImpl } @@ -1640,16 +1690,16 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp ss.trInfo.tr.SetError() ss.mu.Unlock() } - t.WriteStatus(ss.s, appStatus) if len(ss.binlogs) != 0 { st := &binarylog.ServerTrailer{ Trailer: ss.s.Trailer(), Err: appErr, } for _, binlog := range ss.binlogs { - binlog.Log(st) + binlog.Log(stream.Context(), st) } } + t.WriteStatus(ss.s, appStatus) // TODO: Should we log an error from WriteStatus here and below? return appErr } @@ -1658,17 +1708,16 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp ss.trInfo.tr.LazyLog(stringer("OK"), false) ss.mu.Unlock() } - err = t.WriteStatus(ss.s, statusOK) if len(ss.binlogs) != 0 { st := &binarylog.ServerTrailer{ Trailer: ss.s.Trailer(), Err: appErr, } for _, binlog := range ss.binlogs { - binlog.Log(st) + binlog.Log(stream.Context(), st) } } - return err + return t.WriteStatus(ss.s, statusOK) } func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Stream, trInfo *traceInfo) { @@ -1679,13 +1728,13 @@ func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Str pos := strings.LastIndex(sm, "/") if pos == -1 { if trInfo != nil { - trInfo.tr.LazyLog(&fmtStringer{"Malformed method name %q", []interface{}{sm}}, true) + trInfo.tr.LazyLog(&fmtStringer{"Malformed method name %q", []any{sm}}, true) trInfo.tr.SetError() } errDesc := fmt.Sprintf("malformed method name: %q", stream.Method()) if err := t.WriteStatus(stream, status.New(codes.Unimplemented, errDesc)); err != nil { if trInfo != nil { - trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true) trInfo.tr.SetError() } channelz.Warningf(logger, s.channelzID, "grpc: Server.handleStream failed to write status: %v", err) @@ -1726,7 +1775,7 @@ func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Str } if err := t.WriteStatus(stream, status.New(codes.Unimplemented, errDesc)); err != nil { if trInfo != nil { - trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true) trInfo.tr.SetError() } channelz.Warningf(logger, s.channelzID, "grpc: Server.handleStream failed to write status: %v", err) @@ -1846,7 +1895,7 @@ func (s *Server) GracefulStop() { if !s.drain { for _, conns := range s.conns { for st := range conns { - st.Drain() + st.Drain("graceful_stop") } } s.drain = true @@ -1935,6 +1984,60 @@ func SendHeader(ctx context.Context, md metadata.MD) error { return nil } +// SetSendCompressor sets a compressor for outbound messages from the server. +// It must not be called after any event that causes headers to be sent +// (see ServerStream.SetHeader for the complete list). Provided compressor is +// used when below conditions are met: +// +// - compressor is registered via encoding.RegisterCompressor +// - compressor name must exist in the client advertised compressor names +// sent in grpc-accept-encoding header. Use ClientSupportedCompressors to +// get client supported compressor names. +// +// The context provided must be the context passed to the server's handler. +// It must be noted that compressor name encoding.Identity disables the +// outbound compression. +// By default, server messages will be sent using the same compressor with +// which request messages were sent. +// +// It is not safe to call SetSendCompressor concurrently with SendHeader and +// SendMsg. +// +// # Experimental +// +// Notice: This function is EXPERIMENTAL and may be changed or removed in a +// later release. +func SetSendCompressor(ctx context.Context, name string) error { + stream, ok := ServerTransportStreamFromContext(ctx).(*transport.Stream) + if !ok || stream == nil { + return fmt.Errorf("failed to fetch the stream from the given context") + } + + if err := validateSendCompressor(name, stream.ClientAdvertisedCompressors()); err != nil { + return fmt.Errorf("unable to set send compressor: %w", err) + } + + return stream.SetSendCompress(name) +} + +// ClientSupportedCompressors returns compressor names advertised by the client +// via grpc-accept-encoding header. +// +// The context provided must be the context passed to the server's handler. +// +// # Experimental +// +// Notice: This function is EXPERIMENTAL and may be changed or removed in a +// later release. +func ClientSupportedCompressors(ctx context.Context) ([]string, error) { + stream, ok := ServerTransportStreamFromContext(ctx).(*transport.Stream) + if !ok || stream == nil { + return nil, fmt.Errorf("failed to fetch the stream from the given context %v", ctx) + } + + return strings.Split(stream.ClientAdvertisedCompressors(), ","), nil +} + // SetTrailer sets the trailer metadata that will be sent when an RPC returns. // When called more than once, all the provided metadata will be merged. // @@ -1969,3 +2072,22 @@ type channelzServer struct { func (c *channelzServer) ChannelzMetric() *channelz.ServerInternalMetric { return c.s.channelzMetric() } + +// validateSendCompressor returns an error when given compressor name cannot be +// handled by the server or the client based on the advertised compressors. +func validateSendCompressor(name, clientCompressors string) error { + if name == encoding.Identity { + return nil + } + + if !grpcutil.IsCompressorNameRegistered(name) { + return fmt.Errorf("compressor not registered %q", name) + } + + for _, c := range strings.Split(clientCompressors, ",") { + if c == name { + return nil // found match + } + } + return fmt.Errorf("client does not support compressor %q", name) +} diff --git a/vendor/google.golang.org/grpc/service_config.go b/vendor/google.golang.org/grpc/service_config.go index f22acace4253c..0df11fc098825 100644 --- a/vendor/google.golang.org/grpc/service_config.go +++ b/vendor/google.golang.org/grpc/service_config.go @@ -23,8 +23,6 @@ import ( "errors" "fmt" "reflect" - "strconv" - "strings" "time" "google.golang.org/grpc/codes" @@ -106,8 +104,8 @@ type healthCheckConfig struct { type jsonRetryPolicy struct { MaxAttempts int - InitialBackoff string - MaxBackoff string + InitialBackoff internalserviceconfig.Duration + MaxBackoff internalserviceconfig.Duration BackoffMultiplier float64 RetryableStatusCodes []codes.Code } @@ -129,50 +127,6 @@ type retryThrottlingPolicy struct { TokenRatio float64 } -func parseDuration(s *string) (*time.Duration, error) { - if s == nil { - return nil, nil - } - if !strings.HasSuffix(*s, "s") { - return nil, fmt.Errorf("malformed duration %q", *s) - } - ss := strings.SplitN((*s)[:len(*s)-1], ".", 3) - if len(ss) > 2 { - return nil, fmt.Errorf("malformed duration %q", *s) - } - // hasDigits is set if either the whole or fractional part of the number is - // present, since both are optional but one is required. - hasDigits := false - var d time.Duration - if len(ss[0]) > 0 { - i, err := strconv.ParseInt(ss[0], 10, 32) - if err != nil { - return nil, fmt.Errorf("malformed duration %q: %v", *s, err) - } - d = time.Duration(i) * time.Second - hasDigits = true - } - if len(ss) == 2 && len(ss[1]) > 0 { - if len(ss[1]) > 9 { - return nil, fmt.Errorf("malformed duration %q", *s) - } - f, err := strconv.ParseInt(ss[1], 10, 64) - if err != nil { - return nil, fmt.Errorf("malformed duration %q: %v", *s, err) - } - for i := 9; i > len(ss[1]); i-- { - f *= 10 - } - d += time.Duration(f) - hasDigits = true - } - if !hasDigits { - return nil, fmt.Errorf("malformed duration %q", *s) - } - - return &d, nil -} - type jsonName struct { Service string Method string @@ -201,7 +155,7 @@ func (j jsonName) generatePath() (string, error) { type jsonMC struct { Name *[]jsonName WaitForReady *bool - Timeout *string + Timeout *internalserviceconfig.Duration MaxRequestMessageBytes *int64 MaxResponseMessageBytes *int64 RetryPolicy *jsonRetryPolicy @@ -252,15 +206,10 @@ func parseServiceConfig(js string) *serviceconfig.ParseResult { if m.Name == nil { continue } - d, err := parseDuration(m.Timeout) - if err != nil { - logger.Warningf("grpc: unmarshaling service config %s: %v", js, err) - return &serviceconfig.ParseResult{Err: err} - } mc := MethodConfig{ WaitForReady: m.WaitForReady, - Timeout: d, + Timeout: (*time.Duration)(m.Timeout), } if mc.RetryPolicy, err = convertRetryPolicy(m.RetryPolicy); err != nil { logger.Warningf("grpc: unmarshaling service config %s: %v", js, err) @@ -312,18 +261,10 @@ func convertRetryPolicy(jrp *jsonRetryPolicy) (p *internalserviceconfig.RetryPol if jrp == nil { return nil, nil } - ib, err := parseDuration(&jrp.InitialBackoff) - if err != nil { - return nil, err - } - mb, err := parseDuration(&jrp.MaxBackoff) - if err != nil { - return nil, err - } if jrp.MaxAttempts <= 1 || - *ib <= 0 || - *mb <= 0 || + jrp.InitialBackoff <= 0 || + jrp.MaxBackoff <= 0 || jrp.BackoffMultiplier <= 0 || len(jrp.RetryableStatusCodes) == 0 { logger.Warningf("grpc: ignoring retry policy %v due to illegal configuration", jrp) @@ -332,8 +273,8 @@ func convertRetryPolicy(jrp *jsonRetryPolicy) (p *internalserviceconfig.RetryPol rp := &internalserviceconfig.RetryPolicy{ MaxAttempts: jrp.MaxAttempts, - InitialBackoff: *ib, - MaxBackoff: *mb, + InitialBackoff: time.Duration(jrp.InitialBackoff), + MaxBackoff: time.Duration(jrp.MaxBackoff), BackoffMultiplier: jrp.BackoffMultiplier, RetryableStatusCodes: make(map[codes.Code]bool), } diff --git a/vendor/google.golang.org/grpc/shared_buffer_pool.go b/vendor/google.golang.org/grpc/shared_buffer_pool.go new file mode 100644 index 0000000000000..48a64cfe8e256 --- /dev/null +++ b/vendor/google.golang.org/grpc/shared_buffer_pool.go @@ -0,0 +1,154 @@ +/* + * + * Copyright 2023 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import "sync" + +// SharedBufferPool is a pool of buffers that can be shared, resulting in +// decreased memory allocation. Currently, in gRPC-go, it is only utilized +// for parsing incoming messages. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +type SharedBufferPool interface { + // Get returns a buffer with specified length from the pool. + // + // The returned byte slice may be not zero initialized. + Get(length int) []byte + + // Put returns a buffer to the pool. + Put(*[]byte) +} + +// NewSharedBufferPool creates a simple SharedBufferPool with buckets +// of different sizes to optimize memory usage. This prevents the pool from +// wasting large amounts of memory, even when handling messages of varying sizes. +// +// # Experimental +// +// Notice: This API is EXPERIMENTAL and may be changed or removed in a +// later release. +func NewSharedBufferPool() SharedBufferPool { + return &simpleSharedBufferPool{ + pools: [poolArraySize]simpleSharedBufferChildPool{ + newBytesPool(level0PoolMaxSize), + newBytesPool(level1PoolMaxSize), + newBytesPool(level2PoolMaxSize), + newBytesPool(level3PoolMaxSize), + newBytesPool(level4PoolMaxSize), + newBytesPool(0), + }, + } +} + +// simpleSharedBufferPool is a simple implementation of SharedBufferPool. +type simpleSharedBufferPool struct { + pools [poolArraySize]simpleSharedBufferChildPool +} + +func (p *simpleSharedBufferPool) Get(size int) []byte { + return p.pools[p.poolIdx(size)].Get(size) +} + +func (p *simpleSharedBufferPool) Put(bs *[]byte) { + p.pools[p.poolIdx(cap(*bs))].Put(bs) +} + +func (p *simpleSharedBufferPool) poolIdx(size int) int { + switch { + case size <= level0PoolMaxSize: + return level0PoolIdx + case size <= level1PoolMaxSize: + return level1PoolIdx + case size <= level2PoolMaxSize: + return level2PoolIdx + case size <= level3PoolMaxSize: + return level3PoolIdx + case size <= level4PoolMaxSize: + return level4PoolIdx + default: + return levelMaxPoolIdx + } +} + +const ( + level0PoolMaxSize = 16 // 16 B + level1PoolMaxSize = level0PoolMaxSize * 16 // 256 B + level2PoolMaxSize = level1PoolMaxSize * 16 // 4 KB + level3PoolMaxSize = level2PoolMaxSize * 16 // 64 KB + level4PoolMaxSize = level3PoolMaxSize * 16 // 1 MB +) + +const ( + level0PoolIdx = iota + level1PoolIdx + level2PoolIdx + level3PoolIdx + level4PoolIdx + levelMaxPoolIdx + poolArraySize +) + +type simpleSharedBufferChildPool interface { + Get(size int) []byte + Put(any) +} + +type bufferPool struct { + sync.Pool + + defaultSize int +} + +func (p *bufferPool) Get(size int) []byte { + bs := p.Pool.Get().(*[]byte) + + if cap(*bs) < size { + p.Pool.Put(bs) + + return make([]byte, size) + } + + return (*bs)[:size] +} + +func newBytesPool(size int) simpleSharedBufferChildPool { + return &bufferPool{ + Pool: sync.Pool{ + New: func() any { + bs := make([]byte, size) + return &bs + }, + }, + defaultSize: size, + } +} + +// nopBufferPool is a buffer pool just makes new buffer without pooling. +type nopBufferPool struct { +} + +func (nopBufferPool) Get(length int) []byte { + return make([]byte, length) +} + +func (nopBufferPool) Put(*[]byte) { +} diff --git a/vendor/google.golang.org/grpc/stats/stats.go b/vendor/google.golang.org/grpc/stats/stats.go index 0285dcc6a2683..4ab70e2d462ab 100644 --- a/vendor/google.golang.org/grpc/stats/stats.go +++ b/vendor/google.golang.org/grpc/stats/stats.go @@ -59,18 +59,36 @@ func (s *Begin) IsClient() bool { return s.Client } func (s *Begin) isRPCStats() {} +// PickerUpdated indicates that the LB policy provided a new picker while the +// RPC was waiting for one. +type PickerUpdated struct{} + +// IsClient indicates if the stats information is from client side. Only Client +// Side interfaces with a Picker, thus always returns true. +func (*PickerUpdated) IsClient() bool { return true } + +func (*PickerUpdated) isRPCStats() {} + // InPayload contains the information for an incoming payload. type InPayload struct { // Client is true if this InPayload is from client side. Client bool // Payload is the payload with original type. - Payload interface{} + Payload any // Data is the serialized message payload. Data []byte - // Length is the length of uncompressed data. + + // Length is the size of the uncompressed payload data. Does not include any + // framing (gRPC or HTTP/2). Length int - // WireLength is the length of data on wire (compressed, signed, encrypted). + // CompressedLength is the size of the compressed payload data. Does not + // include any framing (gRPC or HTTP/2). Same as Length if compression not + // enabled. + CompressedLength int + // WireLength is the size of the compressed payload data plus gRPC framing. + // Does not include HTTP/2 framing. WireLength int + // RecvTime is the time when the payload is received. RecvTime time.Time } @@ -126,12 +144,18 @@ type OutPayload struct { // Client is true if this OutPayload is from client side. Client bool // Payload is the payload with original type. - Payload interface{} + Payload any // Data is the serialized message payload. Data []byte - // Length is the length of uncompressed data. + // Length is the size of the uncompressed payload data. Does not include any + // framing (gRPC or HTTP/2). Length int - // WireLength is the length of data on wire (compressed, signed, encrypted). + // CompressedLength is the size of the compressed payload data. Does not + // include any framing (gRPC or HTTP/2). Same as Length if compression not + // enabled. + CompressedLength int + // WireLength is the size of the compressed payload data plus gRPC framing. + // Does not include HTTP/2 framing. WireLength int // SentTime is the time when the payload is sent. SentTime time.Time diff --git a/vendor/google.golang.org/grpc/status/status.go b/vendor/google.golang.org/grpc/status/status.go index 623be39f26bab..a93360efb8475 100644 --- a/vendor/google.golang.org/grpc/status/status.go +++ b/vendor/google.golang.org/grpc/status/status.go @@ -50,7 +50,7 @@ func New(c codes.Code, msg string) *Status { } // Newf returns New(c, fmt.Sprintf(format, a...)). -func Newf(c codes.Code, format string, a ...interface{}) *Status { +func Newf(c codes.Code, format string, a ...any) *Status { return New(c, fmt.Sprintf(format, a...)) } @@ -60,7 +60,7 @@ func Error(c codes.Code, msg string) error { } // Errorf returns Error(c, fmt.Sprintf(format, a...)). -func Errorf(c codes.Code, format string, a ...interface{}) error { +func Errorf(c codes.Code, format string, a ...any) error { return Error(c, fmt.Sprintf(format, a...)) } @@ -77,9 +77,18 @@ func FromProto(s *spb.Status) *Status { // FromError returns a Status representation of err. // // - If err was produced by this package or implements the method `GRPCStatus() -// *Status`, the appropriate Status is returned. +// *Status` and `GRPCStatus()` does not return nil, or if err wraps a type +// satisfying this, the Status from `GRPCStatus()` is returned. For wrapped +// errors, the message returned contains the entire err.Error() text and not +// just the wrapped status. In that case, ok is true. // -// - If err is nil, a Status is returned with codes.OK and no message. +// - If err is nil, a Status is returned with codes.OK and no message, and ok +// is true. +// +// - If err implements the method `GRPCStatus() *Status` and `GRPCStatus()` +// returns nil (which maps to Codes.OK), or if err wraps a type +// satisfying this, a Status is returned with codes.Unknown and err's +// Error() message, and ok is false. // // - Otherwise, err is an error not compatible with this package. In this // case, a Status is returned with codes.Unknown and err's Error() message, @@ -88,10 +97,31 @@ func FromError(err error) (s *Status, ok bool) { if err == nil { return nil, true } - if se, ok := err.(interface { - GRPCStatus() *Status - }); ok { - return se.GRPCStatus(), true + type grpcstatus interface{ GRPCStatus() *Status } + if gs, ok := err.(grpcstatus); ok { + grpcStatus := gs.GRPCStatus() + if grpcStatus == nil { + // Error has status nil, which maps to codes.OK. There + // is no sensible behavior for this, so we turn it into + // an error with codes.Unknown and discard the existing + // status. + return New(codes.Unknown, err.Error()), false + } + return grpcStatus, true + } + var gs grpcstatus + if errors.As(err, &gs) { + grpcStatus := gs.GRPCStatus() + if grpcStatus == nil { + // Error wraps an error that has status nil, which maps + // to codes.OK. There is no sensible behavior for this, + // so we turn it into an error with codes.Unknown and + // discard the existing status. + return New(codes.Unknown, err.Error()), false + } + p := grpcStatus.Proto() + p.Message = err.Error() + return status.FromProto(p), true } return New(codes.Unknown, err.Error()), false } @@ -103,19 +133,16 @@ func Convert(err error) *Status { return s } -// Code returns the Code of the error if it is a Status error, codes.OK if err -// is nil, or codes.Unknown otherwise. +// Code returns the Code of the error if it is a Status error or if it wraps a +// Status error. If that is not the case, it returns codes.OK if err is nil, or +// codes.Unknown otherwise. func Code(err error) codes.Code { // Don't use FromError to avoid allocation of OK status. if err == nil { return codes.OK } - if se, ok := err.(interface { - GRPCStatus() *Status - }); ok { - return se.GRPCStatus().Code() - } - return codes.Unknown + + return Convert(err).Code() } // FromContextError converts a context error or wrapped context error into a diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index 93231af2ac569..421a41f8854f4 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -31,6 +31,7 @@ import ( "google.golang.org/grpc/balancer" "google.golang.org/grpc/codes" "google.golang.org/grpc/encoding" + "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/balancerload" "google.golang.org/grpc/internal/binarylog" "google.golang.org/grpc/internal/channelz" @@ -54,7 +55,7 @@ import ( // status package, or be one of the context errors. Otherwise, gRPC will use // codes.Unknown as the status code and err.Error() as the status message of the // RPC. -type StreamHandler func(srv interface{}, stream ServerStream) error +type StreamHandler func(srv any, stream ServerStream) error // StreamDesc represents a streaming RPC service's method specification. Used // on the server when registering services and on the client when initiating @@ -79,9 +80,9 @@ type Stream interface { // Deprecated: See ClientStream and ServerStream documentation instead. Context() context.Context // Deprecated: See ClientStream and ServerStream documentation instead. - SendMsg(m interface{}) error + SendMsg(m any) error // Deprecated: See ClientStream and ServerStream documentation instead. - RecvMsg(m interface{}) error + RecvMsg(m any) error } // ClientStream defines the client-side behavior of a streaming RPC. @@ -90,7 +91,9 @@ type Stream interface { // status package. type ClientStream interface { // Header returns the header metadata received from the server if there - // is any. It blocks if the metadata is not ready to read. + // is any. It blocks if the metadata is not ready to read. If the metadata + // is nil and the error is also nil, then the stream was terminated without + // headers, and the status can be discovered by calling RecvMsg. Header() (metadata.MD, error) // Trailer returns the trailer metadata from the server, if there is any. // It must only be called after stream.CloseAndRecv has returned, or @@ -123,7 +126,10 @@ type ClientStream interface { // calling RecvMsg on the same stream at the same time, but it is not safe // to call SendMsg on the same stream in different goroutines. It is also // not safe to call CloseSend concurrently with SendMsg. - SendMsg(m interface{}) error + // + // It is not safe to modify the message after calling SendMsg. Tracing + // libraries and stats handlers may use the message lazily. + SendMsg(m any) error // RecvMsg blocks until it receives a message into m or the stream is // done. It returns io.EOF when the stream completes successfully. On // any other error, the stream is aborted and the error contains the RPC @@ -132,7 +138,7 @@ type ClientStream interface { // It is safe to have a goroutine calling SendMsg and another goroutine // calling RecvMsg on the same stream at the same time, but it is not // safe to call RecvMsg on the same stream in different goroutines. - RecvMsg(m interface{}) error + RecvMsg(m any) error } // NewStream creates a new Stream for the client side. This is typically @@ -152,6 +158,11 @@ type ClientStream interface { // If none of the above happen, a goroutine and a context will be leaked, and grpc // will not call the optionally-configured stats handler with a stats.End message. func (cc *ClientConn) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) { + if err := cc.idlenessMgr.OnCallBegin(); err != nil { + return nil, err + } + defer cc.idlenessMgr.OnCallEnd() + // allow interceptor to see all applicable call options, which means those // configured as defaults from dial option as well as per-call options opts = combine(cc.dopts.callOptions, opts) @@ -168,10 +179,19 @@ func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth } func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { - if md, _, ok := metadata.FromOutgoingContextRaw(ctx); ok { + if md, added, ok := metadata.FromOutgoingContextRaw(ctx); ok { + // validate md if err := imetadata.Validate(md); err != nil { return nil, status.Error(codes.Internal, err.Error()) } + // validate added + for _, kvs := range added { + for i := 0; i < len(kvs); i += 2 { + if err := imetadata.ValidatePair(kvs[i], kvs[i+1]); err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + } + } } if channelz.IsOn() { cc.incrCallsStarted() @@ -352,7 +372,7 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client } } for _, binlog := range cs.binlogs { - binlog.Log(logEntry) + binlog.Log(cs.ctx, logEntry) } } @@ -416,7 +436,7 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error) ctx = trace.NewContext(ctx, trInfo.tr) } - if cs.cc.parsedTarget.URL.Scheme == "xds" { + if cs.cc.parsedTarget.URL.Scheme == internal.GRPCResolverSchemeExtraMetadata { // Add extra metadata (metadata that will be added by transport) to context // so the balancer can see them. ctx = grpcutil.WithExtraMetadata(ctx, metadata.Pairs( @@ -460,7 +480,7 @@ func (a *csAttempt) newStream() error { // It is safe to overwrite the csAttempt's context here, since all state // maintained in it are local to the attempt. When the attempt has to be // retried, a new instance of csAttempt will be created. - if a.pickResult.Metatada != nil { + if a.pickResult.Metadata != nil { // We currently do not have a function it the metadata package which // merges given metadata with existing metadata in a context. Existing // function `AppendToOutgoingContext()` takes a variadic argument of key @@ -470,7 +490,7 @@ func (a *csAttempt) newStream() error { // in a form passable to AppendToOutgoingContext(), or create a version // of AppendToOutgoingContext() that accepts a metadata.MD. md, _ := metadata.FromOutgoingContext(a.ctx) - md = metadata.Join(md, a.pickResult.Metatada) + md = metadata.Join(md, a.pickResult.Metadata) a.ctx = metadata.NewOutgoingContext(a.ctx, md) } @@ -490,7 +510,7 @@ func (a *csAttempt) newStream() error { return toRPCErr(nse.Err) } a.s = s - a.p = &parser{r: s} + a.p = &parser{r: s, recvBufferPool: a.cs.cc.dopts.recvBufferPool} return nil } @@ -771,23 +791,24 @@ func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func()) func (cs *clientStream) Header() (metadata.MD, error) { var m metadata.MD - noHeader := false err := cs.withRetry(func(a *csAttempt) error { var err error m, err = a.s.Header() - if err == transport.ErrNoHeaders { - noHeader = true - return nil - } return toRPCErr(err) }, cs.commitAttemptLocked) + if m == nil && err == nil { + // The stream ended with success. Finish the clientStream. + err = io.EOF + } + if err != nil { cs.finish(err) - return nil, err + // Do not return the error. The user should get it by calling Recv(). + return nil, nil } - if len(cs.binlogs) != 0 && !cs.serverHeaderBinlogged && !noHeader { + if len(cs.binlogs) != 0 && !cs.serverHeaderBinlogged && m != nil { // Only log if binary log is on and header has not been logged, and // there is actually headers to log. logEntry := &binarylog.ServerHeader{ @@ -800,9 +821,10 @@ func (cs *clientStream) Header() (metadata.MD, error) { } cs.serverHeaderBinlogged = true for _, binlog := range cs.binlogs { - binlog.Log(logEntry) + binlog.Log(cs.ctx, logEntry) } } + return m, nil } @@ -843,7 +865,7 @@ func (cs *clientStream) bufferForRetryLocked(sz int, op func(a *csAttempt) error cs.buffer = append(cs.buffer, op) } -func (cs *clientStream) SendMsg(m interface{}) (err error) { +func (cs *clientStream) SendMsg(m any) (err error) { defer func() { if err != nil && err != io.EOF { // Call finish on the client stream for errors generated by this SendMsg @@ -881,13 +903,13 @@ func (cs *clientStream) SendMsg(m interface{}) (err error) { Message: data, } for _, binlog := range cs.binlogs { - binlog.Log(cm) + binlog.Log(cs.ctx, cm) } } return err } -func (cs *clientStream) RecvMsg(m interface{}) error { +func (cs *clientStream) RecvMsg(m any) error { if len(cs.binlogs) != 0 && !cs.serverHeaderBinlogged { // Call Header() to binary log header if it's not already logged. cs.Header() @@ -905,30 +927,12 @@ func (cs *clientStream) RecvMsg(m interface{}) error { Message: recvInfo.uncompressedBytes, } for _, binlog := range cs.binlogs { - binlog.Log(sm) + binlog.Log(cs.ctx, sm) } } if err != nil || !cs.desc.ServerStreams { // err != nil or non-server-streaming indicates end of stream. cs.finish(err) - - if len(cs.binlogs) != 0 { - // finish will not log Trailer. Log Trailer here. - logEntry := &binarylog.ServerTrailer{ - OnClientSide: true, - Trailer: cs.Trailer(), - Err: err, - } - if logEntry.Err == io.EOF { - logEntry.Err = nil - } - if peer, ok := peer.FromContext(cs.Context()); ok { - logEntry.PeerAddr = peer.Addr - } - for _, binlog := range cs.binlogs { - binlog.Log(logEntry) - } - } } return err } @@ -953,7 +957,7 @@ func (cs *clientStream) CloseSend() error { OnClientSide: true, } for _, binlog := range cs.binlogs { - binlog.Log(chc) + binlog.Log(cs.ctx, chc) } } // We never returned an error here for reasons. @@ -971,6 +975,9 @@ func (cs *clientStream) finish(err error) { return } cs.finished = true + for _, onFinish := range cs.callInfo.onFinish { + onFinish(err) + } cs.commitAttemptLocked() if cs.attempt != nil { cs.attempt.finish(err) @@ -981,18 +988,30 @@ func (cs *clientStream) finish(err error) { } } } + cs.mu.Unlock() - // For binary logging. only log cancel in finish (could be caused by RPC ctx - // canceled or ClientConn closed). Trailer will be logged in RecvMsg. - // - // Only one of cancel or trailer needs to be logged. In the cases where - // users don't call RecvMsg, users must have already canceled the RPC. - if len(cs.binlogs) != 0 && status.Code(err) == codes.Canceled { - c := &binarylog.Cancel{ - OnClientSide: true, - } - for _, binlog := range cs.binlogs { - binlog.Log(c) + // Only one of cancel or trailer needs to be logged. + if len(cs.binlogs) != 0 { + switch err { + case errContextCanceled, errContextDeadline, ErrClientConnClosing: + c := &binarylog.Cancel{ + OnClientSide: true, + } + for _, binlog := range cs.binlogs { + binlog.Log(cs.ctx, c) + } + default: + logEntry := &binarylog.ServerTrailer{ + OnClientSide: true, + Trailer: cs.Trailer(), + Err: err, + } + if peer, ok := peer.FromContext(cs.Context()); ok { + logEntry.PeerAddr = peer.Addr + } + for _, binlog := range cs.binlogs { + binlog.Log(cs.ctx, logEntry) + } } } if err == nil { @@ -1008,7 +1027,7 @@ func (cs *clientStream) finish(err error) { cs.cancel() } -func (a *csAttempt) sendMsg(m interface{}, hdr, payld, data []byte) error { +func (a *csAttempt) sendMsg(m any, hdr, payld, data []byte) error { cs := a.cs if a.trInfo != nil { a.mu.Lock() @@ -1035,7 +1054,7 @@ func (a *csAttempt) sendMsg(m interface{}, hdr, payld, data []byte) error { return nil } -func (a *csAttempt) recvMsg(m interface{}, payInfo *payloadInfo) (err error) { +func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { cs := a.cs if len(a.statsHandlers) != 0 && payInfo == nil { payInfo = &payloadInfo{} @@ -1081,9 +1100,10 @@ func (a *csAttempt) recvMsg(m interface{}, payInfo *payloadInfo) (err error) { RecvTime: time.Now(), Payload: m, // TODO truncate large payload. - Data: payInfo.uncompressedBytes, - WireLength: payInfo.wireLength + headerLen, - Length: len(payInfo.uncompressedBytes), + Data: payInfo.uncompressedBytes, + WireLength: payInfo.compressedLength + headerLen, + CompressedLength: payInfo.compressedLength, + Length: len(payInfo.uncompressedBytes), }) } if channelz.IsOn() { @@ -1249,17 +1269,22 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin return nil, err } as.s = s - as.p = &parser{r: s} + as.p = &parser{r: s, recvBufferPool: ac.dopts.recvBufferPool} ac.incrCallsStarted() if desc != unaryStreamDesc { - // Listen on cc and stream contexts to cleanup when the user closes the - // ClientConn or cancels the stream context. In all other cases, an error - // should already be injected into the recv buffer by the transport, which - // the client will eventually receive, and then we will cancel the stream's - // context in clientStream.finish. + // Listen on stream context to cleanup when the stream context is + // canceled. Also listen for the addrConn's context in case the + // addrConn is closed or reconnects to a different address. In all + // other cases, an error should already be injected into the recv + // buffer by the transport, which the client will eventually receive, + // and then we will cancel the stream's context in + // addrConnStream.finish. go func() { + ac.mu.Lock() + acCtx := ac.ctx + ac.mu.Unlock() select { - case <-ac.ctx.Done(): + case <-acCtx.Done(): as.finish(status.Error(codes.Canceled, "grpc: the SubConn is closing")) case <-ctx.Done(): as.finish(toRPCErr(ctx.Err())) @@ -1322,7 +1347,7 @@ func (as *addrConnStream) Context() context.Context { return as.s.Context() } -func (as *addrConnStream) SendMsg(m interface{}) (err error) { +func (as *addrConnStream) SendMsg(m any) (err error) { defer func() { if err != nil && err != io.EOF { // Call finish on the client stream for errors generated by this SendMsg @@ -1367,7 +1392,7 @@ func (as *addrConnStream) SendMsg(m interface{}) (err error) { return nil } -func (as *addrConnStream) RecvMsg(m interface{}) (err error) { +func (as *addrConnStream) RecvMsg(m any) (err error) { defer func() { if err != nil || !as.desc.ServerStreams { // err != nil or non-server-streaming indicates end of stream. @@ -1486,7 +1511,7 @@ type ServerStream interface { // // It is not safe to modify the message after calling SendMsg. Tracing // libraries and stats handlers may use the message lazily. - SendMsg(m interface{}) error + SendMsg(m any) error // RecvMsg blocks until it receives a message into m or the stream is // done. It returns io.EOF when the client has performed a CloseSend. On // any non-EOF error, the stream is aborted and the error contains the @@ -1495,7 +1520,7 @@ type ServerStream interface { // It is safe to have a goroutine calling SendMsg and another goroutine // calling RecvMsg on the same stream at the same time, but it is not // safe to call RecvMsg on the same stream in different goroutines. - RecvMsg(m interface{}) error + RecvMsg(m any) error } // serverStream implements a server side Stream. @@ -1511,6 +1536,8 @@ type serverStream struct { comp encoding.Compressor decomp encoding.Compressor + sendCompressorName string + maxReceiveMessageSize int maxSendMessageSize int trInfo *traceInfo @@ -1558,7 +1585,7 @@ func (ss *serverStream) SendHeader(md metadata.MD) error { } ss.serverHeaderBinlogged = true for _, binlog := range ss.binlogs { - binlog.Log(sh) + binlog.Log(ss.ctx, sh) } } return err @@ -1574,7 +1601,7 @@ func (ss *serverStream) SetTrailer(md metadata.MD) { ss.s.SetTrailer(md) } -func (ss *serverStream) SendMsg(m interface{}) (err error) { +func (ss *serverStream) SendMsg(m any) (err error) { defer func() { if ss.trInfo != nil { ss.mu.Lock() @@ -1582,7 +1609,7 @@ func (ss *serverStream) SendMsg(m interface{}) (err error) { if err == nil { ss.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) } else { - ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true) ss.trInfo.tr.SetError() } } @@ -1603,6 +1630,13 @@ func (ss *serverStream) SendMsg(m interface{}) (err error) { } }() + // Server handler could have set new compressor by calling SetSendCompressor. + // In case it is set, we need to use it for compressing outbound message. + if sendCompressorsName := ss.s.SendCompress(); sendCompressorsName != ss.sendCompressorName { + ss.comp = encoding.GetCompressor(sendCompressorsName) + ss.sendCompressorName = sendCompressorsName + } + // load hdr, payload, data hdr, payload, data, err := prepareMsg(m, ss.codec, ss.cp, ss.comp) if err != nil { @@ -1624,14 +1658,14 @@ func (ss *serverStream) SendMsg(m interface{}) (err error) { } ss.serverHeaderBinlogged = true for _, binlog := range ss.binlogs { - binlog.Log(sh) + binlog.Log(ss.ctx, sh) } } sm := &binarylog.ServerMessage{ Message: data, } for _, binlog := range ss.binlogs { - binlog.Log(sm) + binlog.Log(ss.ctx, sm) } } if len(ss.statsHandler) != 0 { @@ -1642,7 +1676,7 @@ func (ss *serverStream) SendMsg(m interface{}) (err error) { return nil } -func (ss *serverStream) RecvMsg(m interface{}) (err error) { +func (ss *serverStream) RecvMsg(m any) (err error) { defer func() { if ss.trInfo != nil { ss.mu.Lock() @@ -1650,7 +1684,7 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { if err == nil { ss.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) } else if err != io.EOF { - ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []any{err}}, true) ss.trInfo.tr.SetError() } } @@ -1679,7 +1713,7 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { if len(ss.binlogs) != 0 { chc := &binarylog.ClientHalfClose{} for _, binlog := range ss.binlogs { - binlog.Log(chc) + binlog.Log(ss.ctx, chc) } } return err @@ -1695,9 +1729,10 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { RecvTime: time.Now(), Payload: m, // TODO truncate large payload. - Data: payInfo.uncompressedBytes, - WireLength: payInfo.wireLength + headerLen, - Length: len(payInfo.uncompressedBytes), + Data: payInfo.uncompressedBytes, + Length: len(payInfo.uncompressedBytes), + WireLength: payInfo.compressedLength + headerLen, + CompressedLength: payInfo.compressedLength, }) } } @@ -1706,7 +1741,7 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { Message: payInfo.uncompressedBytes, } for _, binlog := range ss.binlogs { - binlog.Log(cm) + binlog.Log(ss.ctx, cm) } } return nil @@ -1721,7 +1756,7 @@ func MethodFromServerStream(stream ServerStream) (string, bool) { // prepareMsg returns the hdr, payload and data // using the compressors passed or using the // passed preparedmsg -func prepareMsg(m interface{}, codec baseCodec, cp Compressor, comp encoding.Compressor) (hdr, payload, data []byte, err error) { +func prepareMsg(m any, codec baseCodec, cp Compressor, comp encoding.Compressor) (hdr, payload, data []byte, err error) { if preparedMsg, ok := m.(*PreparedMsg); ok { return preparedMsg.hdr, preparedMsg.payload, preparedMsg.encodedData, nil } diff --git a/vendor/google.golang.org/grpc/trace.go b/vendor/google.golang.org/grpc/trace.go index 07a2d26b3e77d..9ded79321ba7a 100644 --- a/vendor/google.golang.org/grpc/trace.go +++ b/vendor/google.golang.org/grpc/trace.go @@ -97,8 +97,8 @@ func truncate(x string, l int) string { // payload represents an RPC request or response payload. type payload struct { - sent bool // whether this is an outgoing payload - msg interface{} // e.g. a proto.Message + sent bool // whether this is an outgoing payload + msg any // e.g. a proto.Message // TODO(dsymonds): add stringifying info to codec, and limit how much we hold here? } @@ -111,7 +111,7 @@ func (p payload) String() string { type fmtStringer struct { format string - a []interface{} + a []any } func (f *fmtStringer) String() string { diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go index fe552c315be22..914ce665f53e5 100644 --- a/vendor/google.golang.org/grpc/version.go +++ b/vendor/google.golang.org/grpc/version.go @@ -19,4 +19,4 @@ package grpc // Version is the current grpc version. -const Version = "1.53.0" +const Version = "1.58.0" diff --git a/vendor/google.golang.org/grpc/vet.sh b/vendor/google.golang.org/grpc/vet.sh index 3728aed04fc74..bbc9e2e3c8e36 100644 --- a/vendor/google.golang.org/grpc/vet.sh +++ b/vendor/google.golang.org/grpc/vet.sh @@ -41,16 +41,8 @@ if [[ "$1" = "-install" ]]; then github.com/client9/misspell/cmd/misspell popd if [[ -z "${VET_SKIP_PROTO}" ]]; then - if [[ "${TRAVIS}" = "true" ]]; then - PROTOBUF_VERSION=3.14.0 - PROTOC_FILENAME=protoc-${PROTOBUF_VERSION}-linux-x86_64.zip - pushd /home/travis - wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOC_FILENAME} - unzip ${PROTOC_FILENAME} - bin/protoc --version - popd - elif [[ "${GITHUB_ACTIONS}" = "true" ]]; then - PROTOBUF_VERSION=3.14.0 + if [[ "${GITHUB_ACTIONS}" = "true" ]]; then + PROTOBUF_VERSION=22.0 # a.k.a v4.22.0 in pb.go files. PROTOC_FILENAME=protoc-${PROTOBUF_VERSION}-linux-x86_64.zip pushd /home/runner/go wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOC_FILENAME} @@ -68,8 +60,7 @@ fi # - Check that generated proto files are up to date. if [[ -z "${VET_SKIP_PROTO}" ]]; then - PATH="/home/travis/bin:${PATH}" make proto && \ - git status --porcelain 2>&1 | fail_on_output || \ + make proto && git status --porcelain 2>&1 | fail_on_output || \ (git status; git --no-pager diff; exit 1) fi @@ -93,6 +84,9 @@ not git grep -l 'x/net/context' -- "*.go" # thread safety. git grep -l '"math/rand"' -- "*.go" 2>&1 | not grep -v '^examples\|^stress\|grpcrand\|^benchmark\|wrr_test' +# - Do not use "interface{}"; use "any" instead. +git grep -l 'interface{}' -- "*.go" 2>&1 | not grep -v '\.pb\.go\|protoc-gen-go-grpc' + # - Do not call grpclog directly. Use grpclog.Component instead. git grep -l -e 'grpclog.I' --or -e 'grpclog.W' --or -e 'grpclog.E' --or -e 'grpclog.F' --or -e 'grpclog.V' -- "*.go" | not grep -v '^grpclog/component.go\|^internal/grpctest/tlogger_test.go' @@ -115,7 +109,7 @@ for MOD_FILE in $(find . -name 'go.mod'); do goimports -l . 2>&1 | not grep -vE "\.pb\.go" golint ./... 2>&1 | not grep -vE "/grpc_testing_not_regenerate/.*\.pb\.go:" - go mod tidy -compat=1.17 + go mod tidy -compat=1.19 git status --porcelain 2>&1 | fail_on_output || \ (git status; git --no-pager diff; exit 1) popd @@ -177,8 +171,6 @@ proto.RegisteredExtension is deprecated proto.RegisteredExtensions is deprecated proto.RegisterMapType is deprecated proto.Unmarshaler is deprecated -resolver.Backend -resolver.GRPCLB Target is deprecated: Use the Target field in the BuildOptions instead. xxx_messageInfo_ ' "${SC_OUT}" diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/doc.go b/vendor/google.golang.org/protobuf/encoding/protojson/doc.go index 00ea2fecfb79c..21d5d2cb18e1e 100644 --- a/vendor/google.golang.org/protobuf/encoding/protojson/doc.go +++ b/vendor/google.golang.org/protobuf/encoding/protojson/doc.go @@ -4,7 +4,7 @@ // Package protojson marshals and unmarshals protocol buffer messages as JSON // format. It follows the guide at -// https://developers.google.com/protocol-buffers/docs/proto3#json. +// https://protobuf.dev/programming-guides/proto3#json. // // This package produces a different output than the standard "encoding/json" // package, which does not operate correctly on protocol buffer messages. diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go index d09d22e139bce..66b95870e9774 100644 --- a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go +++ b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go @@ -106,13 +106,19 @@ func (o MarshalOptions) Format(m proto.Message) string { // MarshalOptions. Do not depend on the output being stable. It may change over // time across different versions of the program. func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { - return o.marshal(m) + return o.marshal(nil, m) +} + +// MarshalAppend appends the JSON format encoding of m to b, +// returning the result. +func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) { + return o.marshal(b, m) } // marshal is a centralized function that all marshal operations go through. // For profiling purposes, avoid changing the name of this function or // introducing other code paths for marshal that do not go through this. -func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { +func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) { if o.Multiline && o.Indent == "" { o.Indent = defaultIndent } @@ -120,7 +126,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { o.Resolver = protoregistry.GlobalTypes } - internalEnc, err := json.NewEncoder(o.Indent) + internalEnc, err := json.NewEncoder(b, o.Indent) if err != nil { return nil, err } @@ -128,7 +134,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { // Treat nil message interface as an empty message, // in which case the output in an empty JSON object. if m == nil { - return []byte("{}"), nil + return append(b, '{', '}'), nil } enc := encoder{internalEnc, o} diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go index c85f8469480a7..6c37d417449a5 100644 --- a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go +++ b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go @@ -814,16 +814,22 @@ func (d decoder) unmarshalTimestamp(m protoreflect.Message) error { return d.unexpectedTokenError(tok) } - t, err := time.Parse(time.RFC3339Nano, tok.ParsedString()) + s := tok.ParsedString() + t, err := time.Parse(time.RFC3339Nano, s) if err != nil { return d.newError(tok.Pos(), "invalid %v value %v", genid.Timestamp_message_fullname, tok.RawString()) } - // Validate seconds. No need to validate nanos because time.Parse would have - // covered that already. + // Validate seconds. secs := t.Unix() if secs < minTimestampSeconds || secs > maxTimestampSeconds { return d.newError(tok.Pos(), "%v value out of range: %v", genid.Timestamp_message_fullname, tok.RawString()) } + // Validate subseconds. + i := strings.LastIndexByte(s, '.') // start of subsecond field + j := strings.LastIndexAny(s, "Z-+") // start of timezone field + if i >= 0 && j >= i && j-i > len(".999999999") { + return d.newError(tok.Pos(), "invalid %v value %v", genid.Timestamp_message_fullname, tok.RawString()) + } fds := m.Descriptor().Fields() fdSeconds := fds.ByNumber(genid.Timestamp_Seconds_field_number) diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/encode.go b/vendor/google.golang.org/protobuf/encoding/prototext/encode.go index ebf6c65284ddf..722a7b41df36a 100644 --- a/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +++ b/vendor/google.golang.org/protobuf/encoding/prototext/encode.go @@ -101,13 +101,19 @@ func (o MarshalOptions) Format(m proto.Message) string { // MarshalOptions object. Do not depend on the output being stable. It may // change over time across different versions of the program. func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { - return o.marshal(m) + return o.marshal(nil, m) +} + +// MarshalAppend appends the textproto format encoding of m to b, +// returning the result. +func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) { + return o.marshal(b, m) } // marshal is a centralized function that all marshal operations go through. // For profiling purposes, avoid changing the name of this function or // introducing other code paths for marshal that do not go through this. -func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { +func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) { var delims = [2]byte{'{', '}'} if o.Multiline && o.Indent == "" { @@ -117,7 +123,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { o.Resolver = protoregistry.GlobalTypes } - internalEnc, err := text.NewEncoder(o.Indent, delims, o.EmitASCII) + internalEnc, err := text.NewEncoder(b, o.Indent, delims, o.EmitASCII) if err != nil { return nil, err } @@ -125,7 +131,7 @@ func (o MarshalOptions) marshal(m proto.Message) ([]byte, error) { // Treat nil message interface as an empty message, // in which case there is nothing to output. if m == nil { - return []byte{}, nil + return b, nil } enc := encoder{internalEnc, o} diff --git a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go index ce57f57ebd486..f4b4686cf9de0 100644 --- a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +++ b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // Package protowire parses and formats the raw wire encoding. -// See https://developers.google.com/protocol-buffers/docs/encoding. +// See https://protobuf.dev/programming-guides/encoding. // // For marshaling and unmarshaling entire protobuf messages, // use the "google.golang.org/protobuf/proto" package instead. @@ -29,12 +29,8 @@ const ( ) // IsValid reports whether the field number is semantically valid. -// -// Note that while numbers within the reserved range are semantically invalid, -// they are syntactically valid in the wire format. -// Implementations may treat records with reserved field numbers as unknown. func (n Number) IsValid() bool { - return MinValidNumber <= n && n < FirstReservedNumber || LastReservedNumber < n && n <= MaxValidNumber + return MinValidNumber <= n && n <= MaxValidNumber } // Type represents the wire type. diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go index b13fd29e81e6d..d043a6ebe0b9a 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go @@ -294,7 +294,7 @@ func (d *Decoder) isValueNext() bool { } // consumeToken constructs a Token for given Kind with raw value derived from -// current d.in and given size, and consumes the given size-lenght of it. +// current d.in and given size, and consumes the given size-length of it. func (d *Decoder) consumeToken(kind Kind, size int) Token { tok := Token{ kind: kind, diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go b/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go index fbdf348734201..934f2dcb39d06 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go @@ -41,8 +41,10 @@ type Encoder struct { // // If indent is a non-empty string, it causes every entry for an Array or Object // to be preceded by the indent and trailed by a newline. -func NewEncoder(indent string) (*Encoder, error) { - e := &Encoder{} +func NewEncoder(buf []byte, indent string) (*Encoder, error) { + e := &Encoder{ + out: buf, + } if len(indent) > 0 { if strings.Trim(indent, " \t") != "" { return nil, errors.New("indent may only be composed of space or tab characters") @@ -176,13 +178,13 @@ func appendFloat(out []byte, n float64, bitSize int) []byte { // WriteInt writes out the given signed integer in JSON number value. func (e *Encoder) WriteInt(n int64) { e.prepareNext(scalar) - e.out = append(e.out, strconv.FormatInt(n, 10)...) + e.out = strconv.AppendInt(e.out, n, 10) } // WriteUint writes out the given unsigned integer in JSON number value. func (e *Encoder) WriteUint(n uint64) { e.prepareNext(scalar) - e.out = append(e.out, strconv.FormatUint(n, 10)...) + e.out = strconv.AppendUint(e.out, n, 10) } // StartObject writes out the '{' symbol. diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go index 427c62d037fca..87853e786d0d2 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go @@ -412,12 +412,13 @@ func (d *Decoder) parseFieldName() (tok Token, err error) { // Field number. Identify if input is a valid number that is not negative // and is decimal integer within 32-bit range. if num := parseNumber(d.in); num.size > 0 { + str := num.string(d.in) if !num.neg && num.kind == numDec { - if _, err := strconv.ParseInt(string(d.in[:num.size]), 10, 32); err == nil { + if _, err := strconv.ParseInt(str, 10, 32); err == nil { return d.consumeToken(Name, num.size, uint8(FieldNumber)), nil } } - return Token{}, d.newSyntaxError("invalid field number: %s", d.in[:num.size]) + return Token{}, d.newSyntaxError("invalid field number: %s", str) } return Token{}, d.newSyntaxError("invalid field name: %s", errId(d.in)) diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go index 81a5d8c861390..45c81f0298e22 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go @@ -15,17 +15,12 @@ func (d *Decoder) parseNumberValue() (Token, bool) { if num.neg { numAttrs |= isNegative } - strSize := num.size - last := num.size - 1 - if num.kind == numFloat && (d.in[last] == 'f' || d.in[last] == 'F') { - strSize = last - } tok := Token{ kind: Scalar, attrs: numberValue, pos: len(d.orig) - len(d.in), raw: d.in[:num.size], - str: string(d.in[:strSize]), + str: num.string(d.in), numAttrs: numAttrs, } d.consume(num.size) @@ -46,6 +41,27 @@ type number struct { kind uint8 neg bool size int + // if neg, this is the length of whitespace and comments between + // the minus sign and the rest fo the number literal + sep int +} + +func (num number) string(data []byte) string { + strSize := num.size + last := num.size - 1 + if num.kind == numFloat && (data[last] == 'f' || data[last] == 'F') { + strSize = last + } + if num.neg && num.sep > 0 { + // strip whitespace/comments between negative sign and the rest + strLen := strSize - num.sep + str := make([]byte, strLen) + str[0] = data[0] + copy(str[1:], data[num.sep+1:strSize]) + return string(str) + } + return string(data[:strSize]) + } // parseNumber constructs a number object from given input. It allows for the @@ -67,19 +83,22 @@ func parseNumber(input []byte) number { } // Optional - + var sep int if s[0] == '-' { neg = true s = s[1:] size++ + // Consume any whitespace or comments between the + // negative sign and the rest of the number + lenBefore := len(s) + s = consume(s, 0) + sep = lenBefore - len(s) + size += sep if len(s) == 0 { return number{} } } - // C++ allows for whitespace and comments in between the negative sign and - // the rest of the number. This logic currently does not but is consistent - // with v1. - switch { case s[0] == '0': if len(s) > 1 { @@ -116,7 +135,7 @@ func parseNumber(input []byte) number { if len(s) > 0 && !isDelim(s[0]) { return number{} } - return number{kind: kind, neg: neg, size: size} + return number{kind: kind, neg: neg, size: size, sep: sep} } } s = s[1:] @@ -188,5 +207,5 @@ func parseNumber(input []byte) number { return number{} } - return number{kind: kind, neg: neg, size: size} + return number{kind: kind, neg: neg, size: size, sep: sep} } diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go index da289ccce6e23..cf7aed77bc309 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go @@ -53,8 +53,10 @@ type encoderState struct { // If outputASCII is true, strings will be serialized in such a way that // multi-byte UTF-8 sequences are escaped. This property ensures that the // overall output is ASCII (as opposed to UTF-8). -func NewEncoder(indent string, delims [2]byte, outputASCII bool) (*Encoder, error) { - e := &Encoder{} +func NewEncoder(buf []byte, indent string, delims [2]byte, outputASCII bool) (*Encoder, error) { + e := &Encoder{ + encoderState: encoderState{out: buf}, + } if len(indent) > 0 { if strings.Trim(indent, " \t") != "" { return nil, errors.New("indent may only be composed of space and tab characters") @@ -195,13 +197,13 @@ func appendFloat(out []byte, n float64, bitSize int) []byte { // WriteInt writes out the given signed integer value. func (e *Encoder) WriteInt(n int64) { e.prepareNext(scalar) - e.out = append(e.out, strconv.FormatInt(n, 10)...) + e.out = strconv.AppendInt(e.out, n, 10) } // WriteUint writes out the given unsigned integer value. func (e *Encoder) WriteUint(n uint64) { e.prepareNext(scalar) - e.out = append(e.out, strconv.FormatUint(n, 10)...) + e.out = strconv.AppendUint(e.out, n, 10) } // WriteLiteral writes out the given string as a literal value without quotes. diff --git a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go index e3cdf1c20591f..136f1b215733b 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go @@ -50,6 +50,7 @@ const ( FileDescriptorProto_Options_field_name protoreflect.Name = "options" FileDescriptorProto_SourceCodeInfo_field_name protoreflect.Name = "source_code_info" FileDescriptorProto_Syntax_field_name protoreflect.Name = "syntax" + FileDescriptorProto_Edition_field_name protoreflect.Name = "edition" FileDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.name" FileDescriptorProto_Package_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.package" @@ -63,6 +64,7 @@ const ( FileDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.options" FileDescriptorProto_SourceCodeInfo_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.source_code_info" FileDescriptorProto_Syntax_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.syntax" + FileDescriptorProto_Edition_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.edition" ) // Field numbers for google.protobuf.FileDescriptorProto. @@ -79,6 +81,7 @@ const ( FileDescriptorProto_Options_field_number protoreflect.FieldNumber = 8 FileDescriptorProto_SourceCodeInfo_field_number protoreflect.FieldNumber = 9 FileDescriptorProto_Syntax_field_number protoreflect.FieldNumber = 12 + FileDescriptorProto_Edition_field_number protoreflect.FieldNumber = 13 ) // Names for google.protobuf.DescriptorProto. @@ -180,13 +183,58 @@ const ( // Field names for google.protobuf.ExtensionRangeOptions. const ( ExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + ExtensionRangeOptions_Declaration_field_name protoreflect.Name = "declaration" + ExtensionRangeOptions_Verification_field_name protoreflect.Name = "verification" ExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.uninterpreted_option" + ExtensionRangeOptions_Declaration_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.declaration" + ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification" ) // Field numbers for google.protobuf.ExtensionRangeOptions. const ( ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 + ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2 + ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3 +) + +// Full and short names for google.protobuf.ExtensionRangeOptions.VerificationState. +const ( + ExtensionRangeOptions_VerificationState_enum_fullname = "google.protobuf.ExtensionRangeOptions.VerificationState" + ExtensionRangeOptions_VerificationState_enum_name = "VerificationState" +) + +// Names for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_message_name protoreflect.Name = "Declaration" + ExtensionRangeOptions_Declaration_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration" +) + +// Field names for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number" + ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name" + ExtensionRangeOptions_Declaration_Type_field_name protoreflect.Name = "type" + ExtensionRangeOptions_Declaration_IsRepeated_field_name protoreflect.Name = "is_repeated" + ExtensionRangeOptions_Declaration_Reserved_field_name protoreflect.Name = "reserved" + ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated" + + ExtensionRangeOptions_Declaration_Number_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.number" + ExtensionRangeOptions_Declaration_FullName_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.full_name" + ExtensionRangeOptions_Declaration_Type_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.type" + ExtensionRangeOptions_Declaration_IsRepeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.is_repeated" + ExtensionRangeOptions_Declaration_Reserved_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.reserved" + ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated" +) + +// Field numbers for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1 + ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2 + ExtensionRangeOptions_Declaration_Type_field_number protoreflect.FieldNumber = 3 + ExtensionRangeOptions_Declaration_IsRepeated_field_number protoreflect.FieldNumber = 4 + ExtensionRangeOptions_Declaration_Reserved_field_number protoreflect.FieldNumber = 5 + ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6 ) // Names for google.protobuf.FieldDescriptorProto. @@ -494,26 +542,29 @@ const ( // Field names for google.protobuf.MessageOptions. const ( - MessageOptions_MessageSetWireFormat_field_name protoreflect.Name = "message_set_wire_format" - MessageOptions_NoStandardDescriptorAccessor_field_name protoreflect.Name = "no_standard_descriptor_accessor" - MessageOptions_Deprecated_field_name protoreflect.Name = "deprecated" - MessageOptions_MapEntry_field_name protoreflect.Name = "map_entry" - MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + MessageOptions_MessageSetWireFormat_field_name protoreflect.Name = "message_set_wire_format" + MessageOptions_NoStandardDescriptorAccessor_field_name protoreflect.Name = "no_standard_descriptor_accessor" + MessageOptions_Deprecated_field_name protoreflect.Name = "deprecated" + MessageOptions_MapEntry_field_name protoreflect.Name = "map_entry" + MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts" + MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" - MessageOptions_MessageSetWireFormat_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.message_set_wire_format" - MessageOptions_NoStandardDescriptorAccessor_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.no_standard_descriptor_accessor" - MessageOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated" - MessageOptions_MapEntry_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.map_entry" - MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option" + MessageOptions_MessageSetWireFormat_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.message_set_wire_format" + MessageOptions_NoStandardDescriptorAccessor_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.no_standard_descriptor_accessor" + MessageOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated" + MessageOptions_MapEntry_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.map_entry" + MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts" + MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option" ) // Field numbers for google.protobuf.MessageOptions. const ( - MessageOptions_MessageSetWireFormat_field_number protoreflect.FieldNumber = 1 - MessageOptions_NoStandardDescriptorAccessor_field_number protoreflect.FieldNumber = 2 - MessageOptions_Deprecated_field_number protoreflect.FieldNumber = 3 - MessageOptions_MapEntry_field_number protoreflect.FieldNumber = 7 - MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 + MessageOptions_MessageSetWireFormat_field_number protoreflect.FieldNumber = 1 + MessageOptions_NoStandardDescriptorAccessor_field_number protoreflect.FieldNumber = 2 + MessageOptions_Deprecated_field_number protoreflect.FieldNumber = 3 + MessageOptions_MapEntry_field_number protoreflect.FieldNumber = 7 + MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 11 + MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 ) // Names for google.protobuf.FieldOptions. @@ -528,16 +579,26 @@ const ( FieldOptions_Packed_field_name protoreflect.Name = "packed" FieldOptions_Jstype_field_name protoreflect.Name = "jstype" FieldOptions_Lazy_field_name protoreflect.Name = "lazy" + FieldOptions_UnverifiedLazy_field_name protoreflect.Name = "unverified_lazy" FieldOptions_Deprecated_field_name protoreflect.Name = "deprecated" FieldOptions_Weak_field_name protoreflect.Name = "weak" + FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact" + FieldOptions_Retention_field_name protoreflect.Name = "retention" + FieldOptions_Target_field_name protoreflect.Name = "target" + FieldOptions_Targets_field_name protoreflect.Name = "targets" FieldOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" FieldOptions_Ctype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.ctype" FieldOptions_Packed_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.packed" FieldOptions_Jstype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.jstype" FieldOptions_Lazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.lazy" + FieldOptions_UnverifiedLazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.unverified_lazy" FieldOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.deprecated" FieldOptions_Weak_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.weak" + FieldOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.debug_redact" + FieldOptions_Retention_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.retention" + FieldOptions_Target_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.target" + FieldOptions_Targets_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.targets" FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option" ) @@ -547,8 +608,13 @@ const ( FieldOptions_Packed_field_number protoreflect.FieldNumber = 2 FieldOptions_Jstype_field_number protoreflect.FieldNumber = 6 FieldOptions_Lazy_field_number protoreflect.FieldNumber = 5 + FieldOptions_UnverifiedLazy_field_number protoreflect.FieldNumber = 15 FieldOptions_Deprecated_field_number protoreflect.FieldNumber = 3 FieldOptions_Weak_field_number protoreflect.FieldNumber = 10 + FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16 + FieldOptions_Retention_field_number protoreflect.FieldNumber = 17 + FieldOptions_Target_field_number protoreflect.FieldNumber = 18 + FieldOptions_Targets_field_number protoreflect.FieldNumber = 19 FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 ) @@ -564,6 +630,18 @@ const ( FieldOptions_JSType_enum_name = "JSType" ) +// Full and short names for google.protobuf.FieldOptions.OptionRetention. +const ( + FieldOptions_OptionRetention_enum_fullname = "google.protobuf.FieldOptions.OptionRetention" + FieldOptions_OptionRetention_enum_name = "OptionRetention" +) + +// Full and short names for google.protobuf.FieldOptions.OptionTargetType. +const ( + FieldOptions_OptionTargetType_enum_fullname = "google.protobuf.FieldOptions.OptionTargetType" + FieldOptions_OptionTargetType_enum_name = "OptionTargetType" +) + // Names for google.protobuf.OneofOptions. const ( OneofOptions_message_name protoreflect.Name = "OneofOptions" @@ -590,20 +668,23 @@ const ( // Field names for google.protobuf.EnumOptions. const ( - EnumOptions_AllowAlias_field_name protoreflect.Name = "allow_alias" - EnumOptions_Deprecated_field_name protoreflect.Name = "deprecated" - EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + EnumOptions_AllowAlias_field_name protoreflect.Name = "allow_alias" + EnumOptions_Deprecated_field_name protoreflect.Name = "deprecated" + EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts" + EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" - EnumOptions_AllowAlias_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.allow_alias" - EnumOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated" - EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option" + EnumOptions_AllowAlias_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.allow_alias" + EnumOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated" + EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts" + EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option" ) // Field numbers for google.protobuf.EnumOptions. const ( - EnumOptions_AllowAlias_field_number protoreflect.FieldNumber = 2 - EnumOptions_Deprecated_field_number protoreflect.FieldNumber = 3 - EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 + EnumOptions_AllowAlias_field_number protoreflect.FieldNumber = 2 + EnumOptions_Deprecated_field_number protoreflect.FieldNumber = 3 + EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 6 + EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 ) // Names for google.protobuf.EnumValueOptions. @@ -813,11 +894,13 @@ const ( GeneratedCodeInfo_Annotation_SourceFile_field_name protoreflect.Name = "source_file" GeneratedCodeInfo_Annotation_Begin_field_name protoreflect.Name = "begin" GeneratedCodeInfo_Annotation_End_field_name protoreflect.Name = "end" + GeneratedCodeInfo_Annotation_Semantic_field_name protoreflect.Name = "semantic" GeneratedCodeInfo_Annotation_Path_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.path" GeneratedCodeInfo_Annotation_SourceFile_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.source_file" GeneratedCodeInfo_Annotation_Begin_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.begin" GeneratedCodeInfo_Annotation_End_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.end" + GeneratedCodeInfo_Annotation_Semantic_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.semantic" ) // Field numbers for google.protobuf.GeneratedCodeInfo.Annotation. @@ -826,4 +909,11 @@ const ( GeneratedCodeInfo_Annotation_SourceFile_field_number protoreflect.FieldNumber = 2 GeneratedCodeInfo_Annotation_Begin_field_number protoreflect.FieldNumber = 3 GeneratedCodeInfo_Annotation_End_field_number protoreflect.FieldNumber = 4 + GeneratedCodeInfo_Annotation_Semantic_field_number protoreflect.FieldNumber = 5 +) + +// Full and short names for google.protobuf.GeneratedCodeInfo.Annotation.Semantic. +const ( + GeneratedCodeInfo_Annotation_Semantic_enum_fullname = "google.protobuf.GeneratedCodeInfo.Annotation.Semantic" + GeneratedCodeInfo_Annotation_Semantic_enum_name = "Semantic" ) diff --git a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go index 3bc710138ad92..e0f75fea0a136 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/type_gen.go @@ -32,6 +32,7 @@ const ( Type_Options_field_name protoreflect.Name = "options" Type_SourceContext_field_name protoreflect.Name = "source_context" Type_Syntax_field_name protoreflect.Name = "syntax" + Type_Edition_field_name protoreflect.Name = "edition" Type_Name_field_fullname protoreflect.FullName = "google.protobuf.Type.name" Type_Fields_field_fullname protoreflect.FullName = "google.protobuf.Type.fields" @@ -39,6 +40,7 @@ const ( Type_Options_field_fullname protoreflect.FullName = "google.protobuf.Type.options" Type_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Type.source_context" Type_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Type.syntax" + Type_Edition_field_fullname protoreflect.FullName = "google.protobuf.Type.edition" ) // Field numbers for google.protobuf.Type. @@ -49,6 +51,7 @@ const ( Type_Options_field_number protoreflect.FieldNumber = 4 Type_SourceContext_field_number protoreflect.FieldNumber = 5 Type_Syntax_field_number protoreflect.FieldNumber = 6 + Type_Edition_field_number protoreflect.FieldNumber = 7 ) // Names for google.protobuf.Field. @@ -121,12 +124,14 @@ const ( Enum_Options_field_name protoreflect.Name = "options" Enum_SourceContext_field_name protoreflect.Name = "source_context" Enum_Syntax_field_name protoreflect.Name = "syntax" + Enum_Edition_field_name protoreflect.Name = "edition" Enum_Name_field_fullname protoreflect.FullName = "google.protobuf.Enum.name" Enum_Enumvalue_field_fullname protoreflect.FullName = "google.protobuf.Enum.enumvalue" Enum_Options_field_fullname protoreflect.FullName = "google.protobuf.Enum.options" Enum_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Enum.source_context" Enum_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Enum.syntax" + Enum_Edition_field_fullname protoreflect.FullName = "google.protobuf.Enum.edition" ) // Field numbers for google.protobuf.Enum. @@ -136,6 +141,7 @@ const ( Enum_Options_field_number protoreflect.FieldNumber = 3 Enum_SourceContext_field_number protoreflect.FieldNumber = 4 Enum_Syntax_field_number protoreflect.FieldNumber = 5 + Enum_Edition_field_number protoreflect.FieldNumber = 6 ) // Names for google.protobuf.EnumValue. diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert.go b/vendor/google.golang.org/protobuf/internal/impl/convert.go index 11a6128ba56bd..185ef2efa5bfd 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/convert.go +++ b/vendor/google.golang.org/protobuf/internal/impl/convert.go @@ -59,7 +59,6 @@ func NewConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter { default: return newSingularConverter(t, fd) } - panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) } var ( diff --git a/vendor/google.golang.org/protobuf/internal/order/order.go b/vendor/google.golang.org/protobuf/internal/order/order.go index 33745ed062541..dea522e127dc9 100644 --- a/vendor/google.golang.org/protobuf/internal/order/order.go +++ b/vendor/google.golang.org/protobuf/internal/order/order.go @@ -33,7 +33,7 @@ var ( return !inOneof(ox) && inOneof(oy) } // Fields in disjoint oneof sets are sorted by declaration index. - if ox != nil && oy != nil && ox != oy { + if inOneof(ox) && inOneof(oy) && ox != oy { return ox.Index() < oy.Index() } // Fields sorted by field number. diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go index fea589c457e94..61a84d34185a4 100644 --- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +++ b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go @@ -87,7 +87,7 @@ func (sb *Builder) grow(n int) { // Unlike strings.Builder, we do not need to copy over the contents // of the old buffer since our builder provides no API for // retrieving previously created strings. - sb.buf = make([]byte, 2*(cap(sb.buf)+n)) + sb.buf = make([]byte, 0, 2*(cap(sb.buf)+n)) } func (sb *Builder) last(n int) string { diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go index b480c5010f1d0..0999f29d501e8 100644 --- a/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/vendor/google.golang.org/protobuf/internal/version/version.go @@ -51,8 +51,8 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 28 - Patch = 1 + Minor = 31 + Patch = 0 PreRelease = "" ) diff --git a/vendor/google.golang.org/protobuf/proto/doc.go b/vendor/google.golang.org/protobuf/proto/doc.go index 08d2a46f53525..ec71e717fe7d1 100644 --- a/vendor/google.golang.org/protobuf/proto/doc.go +++ b/vendor/google.golang.org/protobuf/proto/doc.go @@ -5,16 +5,13 @@ // Package proto provides functions operating on protocol buffer messages. // // For documentation on protocol buffers in general, see: -// -// https://developers.google.com/protocol-buffers +// https://protobuf.dev. // // For a tutorial on using protocol buffers with Go, see: -// -// https://developers.google.com/protocol-buffers/docs/gotutorial +// https://protobuf.dev/getting-started/gotutorial. // // For a guide to generated Go protocol buffer code, see: -// -// https://developers.google.com/protocol-buffers/docs/reference/go-generated +// https://protobuf.dev/reference/go/go-generated. // // # Binary serialization // diff --git a/vendor/google.golang.org/protobuf/proto/equal.go b/vendor/google.golang.org/protobuf/proto/equal.go index 67948dd1df8cc..1a0be1b03c73d 100644 --- a/vendor/google.golang.org/protobuf/proto/equal.go +++ b/vendor/google.golang.org/protobuf/proto/equal.go @@ -5,30 +5,39 @@ package proto import ( - "bytes" - "math" "reflect" - "google.golang.org/protobuf/encoding/protowire" "google.golang.org/protobuf/reflect/protoreflect" ) -// Equal reports whether two messages are equal. -// If two messages marshal to the same bytes under deterministic serialization, -// then Equal is guaranteed to report true. +// Equal reports whether two messages are equal, +// by recursively comparing the fields of the message. // -// Two messages are equal if they belong to the same message descriptor, -// have the same set of populated known and extension field values, -// and the same set of unknown fields values. If either of the top-level -// messages are invalid, then Equal reports true only if both are invalid. +// - Bytes fields are equal if they contain identical bytes. +// Empty bytes (regardless of nil-ness) are considered equal. // -// Scalar values are compared with the equivalent of the == operator in Go, -// except bytes values which are compared using bytes.Equal and -// floating point values which specially treat NaNs as equal. -// Message values are compared by recursively calling Equal. -// Lists are equal if each element value is also equal. -// Maps are equal if they have the same set of keys, where the pair of values -// for each key is also equal. +// - Floating-point fields are equal if they contain the same value. +// Unlike the == operator, a NaN is equal to another NaN. +// +// - Other scalar fields are equal if they contain the same value. +// +// - Message fields are equal if they have +// the same set of populated known and extension field values, and +// the same set of unknown fields values. +// +// - Lists are equal if they are the same length and +// each corresponding element is equal. +// +// - Maps are equal if they have the same set of keys and +// the corresponding value for each key is equal. +// +// An invalid message is not equal to a valid message. +// An invalid message is only equal to another invalid message of the +// same type. An invalid message often corresponds to a nil pointer +// of the concrete message type. For example, (*pb.M)(nil) is not equal +// to &pb.M{}. +// If two valid messages marshal to the same bytes under deterministic +// serialization, then Equal is guaranteed to report true. func Equal(x, y Message) bool { if x == nil || y == nil { return x == nil && y == nil @@ -42,130 +51,7 @@ func Equal(x, y Message) bool { if mx.IsValid() != my.IsValid() { return false } - return equalMessage(mx, my) -} - -// equalMessage compares two messages. -func equalMessage(mx, my protoreflect.Message) bool { - if mx.Descriptor() != my.Descriptor() { - return false - } - - nx := 0 - equal := true - mx.Range(func(fd protoreflect.FieldDescriptor, vx protoreflect.Value) bool { - nx++ - vy := my.Get(fd) - equal = my.Has(fd) && equalField(fd, vx, vy) - return equal - }) - if !equal { - return false - } - ny := 0 - my.Range(func(fd protoreflect.FieldDescriptor, vx protoreflect.Value) bool { - ny++ - return true - }) - if nx != ny { - return false - } - - return equalUnknown(mx.GetUnknown(), my.GetUnknown()) -} - -// equalField compares two fields. -func equalField(fd protoreflect.FieldDescriptor, x, y protoreflect.Value) bool { - switch { - case fd.IsList(): - return equalList(fd, x.List(), y.List()) - case fd.IsMap(): - return equalMap(fd, x.Map(), y.Map()) - default: - return equalValue(fd, x, y) - } -} - -// equalMap compares two maps. -func equalMap(fd protoreflect.FieldDescriptor, x, y protoreflect.Map) bool { - if x.Len() != y.Len() { - return false - } - equal := true - x.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool { - vy := y.Get(k) - equal = y.Has(k) && equalValue(fd.MapValue(), vx, vy) - return equal - }) - return equal -} - -// equalList compares two lists. -func equalList(fd protoreflect.FieldDescriptor, x, y protoreflect.List) bool { - if x.Len() != y.Len() { - return false - } - for i := x.Len() - 1; i >= 0; i-- { - if !equalValue(fd, x.Get(i), y.Get(i)) { - return false - } - } - return true -} - -// equalValue compares two singular values. -func equalValue(fd protoreflect.FieldDescriptor, x, y protoreflect.Value) bool { - switch fd.Kind() { - case protoreflect.BoolKind: - return x.Bool() == y.Bool() - case protoreflect.EnumKind: - return x.Enum() == y.Enum() - case protoreflect.Int32Kind, protoreflect.Sint32Kind, - protoreflect.Int64Kind, protoreflect.Sint64Kind, - protoreflect.Sfixed32Kind, protoreflect.Sfixed64Kind: - return x.Int() == y.Int() - case protoreflect.Uint32Kind, protoreflect.Uint64Kind, - protoreflect.Fixed32Kind, protoreflect.Fixed64Kind: - return x.Uint() == y.Uint() - case protoreflect.FloatKind, protoreflect.DoubleKind: - fx := x.Float() - fy := y.Float() - if math.IsNaN(fx) || math.IsNaN(fy) { - return math.IsNaN(fx) && math.IsNaN(fy) - } - return fx == fy - case protoreflect.StringKind: - return x.String() == y.String() - case protoreflect.BytesKind: - return bytes.Equal(x.Bytes(), y.Bytes()) - case protoreflect.MessageKind, protoreflect.GroupKind: - return equalMessage(x.Message(), y.Message()) - default: - return x.Interface() == y.Interface() - } -} - -// equalUnknown compares unknown fields by direct comparison on the raw bytes -// of each individual field number. -func equalUnknown(x, y protoreflect.RawFields) bool { - if len(x) != len(y) { - return false - } - if bytes.Equal([]byte(x), []byte(y)) { - return true - } - - mx := make(map[protoreflect.FieldNumber]protoreflect.RawFields) - my := make(map[protoreflect.FieldNumber]protoreflect.RawFields) - for len(x) > 0 { - fnum, _, n := protowire.ConsumeField(x) - mx[fnum] = append(mx[fnum], x[:n]...) - x = x[n:] - } - for len(y) > 0 { - fnum, _, n := protowire.ConsumeField(y) - my[fnum] = append(my[fnum], y[:n]...) - y = y[n:] - } - return reflect.DeepEqual(mx, my) + vx := protoreflect.ValueOfMessage(mx) + vy := protoreflect.ValueOfMessage(my) + return vx.Equal(vy) } diff --git a/vendor/google.golang.org/protobuf/proto/size.go b/vendor/google.golang.org/protobuf/proto/size.go index 554b9c6c09a1f..f1692b49b6c79 100644 --- a/vendor/google.golang.org/protobuf/proto/size.go +++ b/vendor/google.golang.org/protobuf/proto/size.go @@ -73,23 +73,27 @@ func (o MarshalOptions) sizeField(fd protoreflect.FieldDescriptor, value protore } func (o MarshalOptions) sizeList(num protowire.Number, fd protoreflect.FieldDescriptor, list protoreflect.List) (size int) { + sizeTag := protowire.SizeTag(num) + if fd.IsPacked() && list.Len() > 0 { content := 0 for i, llen := 0, list.Len(); i < llen; i++ { content += o.sizeSingular(num, fd.Kind(), list.Get(i)) } - return protowire.SizeTag(num) + protowire.SizeBytes(content) + return sizeTag + protowire.SizeBytes(content) } for i, llen := 0, list.Len(); i < llen; i++ { - size += protowire.SizeTag(num) + o.sizeSingular(num, fd.Kind(), list.Get(i)) + size += sizeTag + o.sizeSingular(num, fd.Kind(), list.Get(i)) } return size } func (o MarshalOptions) sizeMap(num protowire.Number, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) (size int) { + sizeTag := protowire.SizeTag(num) + mapv.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool { - size += protowire.SizeTag(num) + size += sizeTag size += protowire.SizeBytes(o.sizeField(fd.MapKey(), key.Value()) + o.sizeField(fd.MapValue(), value)) return true }) diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go index b03c1223c4a49..717b106f3da9b 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go @@ -35,6 +35,8 @@ func (p *SourcePath) appendFileDescriptorProto(b []byte) []byte { b = p.appendSingularField(b, "source_code_info", (*SourcePath).appendSourceCodeInfo) case 12: b = p.appendSingularField(b, "syntax", nil) + case 13: + b = p.appendSingularField(b, "edition", nil) } return b } @@ -236,6 +238,8 @@ func (p *SourcePath) appendMessageOptions(b []byte) []byte { b = p.appendSingularField(b, "deprecated", nil) case 7: b = p.appendSingularField(b, "map_entry", nil) + case 11: + b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil) case 999: b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) } @@ -279,6 +283,8 @@ func (p *SourcePath) appendEnumOptions(b []byte) []byte { b = p.appendSingularField(b, "allow_alias", nil) case 3: b = p.appendSingularField(b, "deprecated", nil) + case 6: + b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil) case 999: b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) } @@ -345,10 +351,20 @@ func (p *SourcePath) appendFieldOptions(b []byte) []byte { b = p.appendSingularField(b, "jstype", nil) case 5: b = p.appendSingularField(b, "lazy", nil) + case 15: + b = p.appendSingularField(b, "unverified_lazy", nil) case 3: b = p.appendSingularField(b, "deprecated", nil) case 10: b = p.appendSingularField(b, "weak", nil) + case 16: + b = p.appendSingularField(b, "debug_redact", nil) + case 17: + b = p.appendSingularField(b, "retention", nil) + case 18: + b = p.appendSingularField(b, "target", nil) + case 19: + b = p.appendRepeatedField(b, "targets", nil) case 999: b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) } @@ -404,6 +420,10 @@ func (p *SourcePath) appendExtensionRangeOptions(b []byte) []byte { switch (*p)[0] { case 999: b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + case 2: + b = p.appendRepeatedField(b, "declaration", (*SourcePath).appendExtensionRangeOptions_Declaration) + case 3: + b = p.appendSingularField(b, "verification", nil) } return b } @@ -459,3 +479,24 @@ func (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte { } return b } + +func (p *SourcePath) appendExtensionRangeOptions_Declaration(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "number", nil) + case 2: + b = p.appendSingularField(b, "full_name", nil) + case 3: + b = p.appendSingularField(b, "type", nil) + case 4: + b = p.appendSingularField(b, "is_repeated", nil) + case 5: + b = p.appendSingularField(b, "reserved", nil) + case 6: + b = p.appendSingularField(b, "repeated", nil) + } + return b +} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go index f31981077827f..37601b7819972 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go @@ -148,7 +148,7 @@ type Message interface { // be preserved in marshaling or other operations. IsValid() bool - // ProtoMethods returns optional fast-path implementions of various operations. + // ProtoMethods returns optional fast-path implementations of various operations. // This method may return nil. // // The returned methods type is identical to diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go new file mode 100644 index 0000000000000..591652541f288 --- /dev/null +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go @@ -0,0 +1,168 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import ( + "bytes" + "fmt" + "math" + "reflect" + + "google.golang.org/protobuf/encoding/protowire" +) + +// Equal reports whether v1 and v2 are recursively equal. +// +// - Values of different types are always unequal. +// +// - Bytes values are equal if they contain identical bytes. +// Empty bytes (regardless of nil-ness) are considered equal. +// +// - Floating point values are equal if they contain the same value. +// Unlike the == operator, a NaN is equal to another NaN. +// +// - Enums are equal if they contain the same number. +// Since Value does not contain an enum descriptor, +// enum values do not consider the type of the enum. +// +// - Other scalar values are equal if they contain the same value. +// +// - Message values are equal if they belong to the same message descriptor, +// have the same set of populated known and extension field values, +// and the same set of unknown fields values. +// +// - Lists are equal if they are the same length and +// each corresponding element is equal. +// +// - Maps are equal if they have the same set of keys and +// the corresponding value for each key is equal. +func (v1 Value) Equal(v2 Value) bool { + return equalValue(v1, v2) +} + +func equalValue(x, y Value) bool { + eqType := x.typ == y.typ + switch x.typ { + case nilType: + return eqType + case boolType: + return eqType && x.Bool() == y.Bool() + case int32Type, int64Type: + return eqType && x.Int() == y.Int() + case uint32Type, uint64Type: + return eqType && x.Uint() == y.Uint() + case float32Type, float64Type: + return eqType && equalFloat(x.Float(), y.Float()) + case stringType: + return eqType && x.String() == y.String() + case bytesType: + return eqType && bytes.Equal(x.Bytes(), y.Bytes()) + case enumType: + return eqType && x.Enum() == y.Enum() + default: + switch x := x.Interface().(type) { + case Message: + y, ok := y.Interface().(Message) + return ok && equalMessage(x, y) + case List: + y, ok := y.Interface().(List) + return ok && equalList(x, y) + case Map: + y, ok := y.Interface().(Map) + return ok && equalMap(x, y) + default: + panic(fmt.Sprintf("unknown type: %T", x)) + } + } +} + +// equalFloat compares two floats, where NaNs are treated as equal. +func equalFloat(x, y float64) bool { + if math.IsNaN(x) || math.IsNaN(y) { + return math.IsNaN(x) && math.IsNaN(y) + } + return x == y +} + +// equalMessage compares two messages. +func equalMessage(mx, my Message) bool { + if mx.Descriptor() != my.Descriptor() { + return false + } + + nx := 0 + equal := true + mx.Range(func(fd FieldDescriptor, vx Value) bool { + nx++ + vy := my.Get(fd) + equal = my.Has(fd) && equalValue(vx, vy) + return equal + }) + if !equal { + return false + } + ny := 0 + my.Range(func(fd FieldDescriptor, vx Value) bool { + ny++ + return true + }) + if nx != ny { + return false + } + + return equalUnknown(mx.GetUnknown(), my.GetUnknown()) +} + +// equalList compares two lists. +func equalList(x, y List) bool { + if x.Len() != y.Len() { + return false + } + for i := x.Len() - 1; i >= 0; i-- { + if !equalValue(x.Get(i), y.Get(i)) { + return false + } + } + return true +} + +// equalMap compares two maps. +func equalMap(x, y Map) bool { + if x.Len() != y.Len() { + return false + } + equal := true + x.Range(func(k MapKey, vx Value) bool { + vy := y.Get(k) + equal = y.Has(k) && equalValue(vx, vy) + return equal + }) + return equal +} + +// equalUnknown compares unknown fields by direct comparison on the raw bytes +// of each individual field number. +func equalUnknown(x, y RawFields) bool { + if len(x) != len(y) { + return false + } + if bytes.Equal([]byte(x), []byte(y)) { + return true + } + + mx := make(map[FieldNumber]RawFields) + my := make(map[FieldNumber]RawFields) + for len(x) > 0 { + fnum, _, n := protowire.ConsumeField(x) + mx[fnum] = append(mx[fnum], x[:n]...) + x = x[n:] + } + for len(y) > 0 { + fnum, _, n := protowire.ConsumeField(y) + my[fnum] = append(my[fnum], y[:n]...) + y = y[n:] + } + return reflect.DeepEqual(mx, my) +} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go index ca8e28c5bc8b9..08e5ef73fc0e8 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go @@ -54,11 +54,11 @@ import ( // // Append a 0 to a "repeated int32" field. // // Since the Value returned by Mutable is guaranteed to alias // // the source message, modifying the Value modifies the message. -// message.Mutable(fieldDesc).(List).Append(protoreflect.ValueOfInt32(0)) +// message.Mutable(fieldDesc).List().Append(protoreflect.ValueOfInt32(0)) // // // Assign [0] to a "repeated int32" field by creating a new Value, // // modifying it, and assigning it. -// list := message.NewField(fieldDesc).(List) +// list := message.NewField(fieldDesc).List() // list.Append(protoreflect.ValueOfInt32(0)) // message.Set(fieldDesc, list) // // ERROR: Since it is not defined whether Set aliases the source, diff --git a/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go b/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go index 58352a6978bee..aeb559774469f 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +++ b/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go @@ -46,7 +46,7 @@ var conflictPolicy = "panic" // "panic" | "warn" | "ignore" // It is a variable so that the behavior is easily overridden in another file. var ignoreConflict = func(d protoreflect.Descriptor, err error) bool { const env = "GOLANG_PROTOBUF_REGISTRATION_CONFLICT" - const faq = "https://developers.google.com/protocol-buffers/docs/reference/go/faq#namespace-conflict" + const faq = "https://protobuf.dev/reference/go/faq#namespace-conflict" policy := conflictPolicy if v := os.Getenv(env); v != "" { policy = v diff --git a/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go b/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go index abe4ab5115bb2..04c00f737c1e0 100644 --- a/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +++ b/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go @@ -48,6 +48,64 @@ import ( sync "sync" ) +// The verification state of the extension range. +type ExtensionRangeOptions_VerificationState int32 + +const ( + // All the extensions of the range must be declared. + ExtensionRangeOptions_DECLARATION ExtensionRangeOptions_VerificationState = 0 + ExtensionRangeOptions_UNVERIFIED ExtensionRangeOptions_VerificationState = 1 +) + +// Enum value maps for ExtensionRangeOptions_VerificationState. +var ( + ExtensionRangeOptions_VerificationState_name = map[int32]string{ + 0: "DECLARATION", + 1: "UNVERIFIED", + } + ExtensionRangeOptions_VerificationState_value = map[string]int32{ + "DECLARATION": 0, + "UNVERIFIED": 1, + } +) + +func (x ExtensionRangeOptions_VerificationState) Enum() *ExtensionRangeOptions_VerificationState { + p := new(ExtensionRangeOptions_VerificationState) + *p = x + return p +} + +func (x ExtensionRangeOptions_VerificationState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExtensionRangeOptions_VerificationState) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[0].Descriptor() +} + +func (ExtensionRangeOptions_VerificationState) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[0] +} + +func (x ExtensionRangeOptions_VerificationState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *ExtensionRangeOptions_VerificationState) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = ExtensionRangeOptions_VerificationState(num) + return nil +} + +// Deprecated: Use ExtensionRangeOptions_VerificationState.Descriptor instead. +func (ExtensionRangeOptions_VerificationState) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3, 0} +} + type FieldDescriptorProto_Type int32 const ( @@ -137,11 +195,11 @@ func (x FieldDescriptorProto_Type) String() string { } func (FieldDescriptorProto_Type) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[0].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() } func (FieldDescriptorProto_Type) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[0] + return &file_google_protobuf_descriptor_proto_enumTypes[1] } func (x FieldDescriptorProto_Type) Number() protoreflect.EnumNumber { @@ -197,11 +255,11 @@ func (x FieldDescriptorProto_Label) String() string { } func (FieldDescriptorProto_Label) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() } func (FieldDescriptorProto_Label) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[1] + return &file_google_protobuf_descriptor_proto_enumTypes[2] } func (x FieldDescriptorProto_Label) Number() protoreflect.EnumNumber { @@ -258,11 +316,11 @@ func (x FileOptions_OptimizeMode) String() string { } func (FileOptions_OptimizeMode) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() } func (FileOptions_OptimizeMode) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[2] + return &file_google_protobuf_descriptor_proto_enumTypes[3] } func (x FileOptions_OptimizeMode) Number() protoreflect.EnumNumber { @@ -288,7 +346,13 @@ type FieldOptions_CType int32 const ( // Default mode. - FieldOptions_STRING FieldOptions_CType = 0 + FieldOptions_STRING FieldOptions_CType = 0 + // The option [ctype=CORD] may be applied to a non-repeated field of type + // "bytes". It indicates that in C++, the data should be stored in a Cord + // instead of a string. For very large strings, this may reduce memory + // fragmentation. It may also allow better performance when parsing from a + // Cord, or when parsing with aliasing enabled, as the parsed Cord may then + // alias the original buffer. FieldOptions_CORD FieldOptions_CType = 1 FieldOptions_STRING_PIECE FieldOptions_CType = 2 ) @@ -318,11 +382,11 @@ func (x FieldOptions_CType) String() string { } func (FieldOptions_CType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() } func (FieldOptions_CType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[3] + return &file_google_protobuf_descriptor_proto_enumTypes[4] } func (x FieldOptions_CType) Number() protoreflect.EnumNumber { @@ -380,11 +444,11 @@ func (x FieldOptions_JSType) String() string { } func (FieldOptions_JSType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() } func (FieldOptions_JSType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[4] + return &file_google_protobuf_descriptor_proto_enumTypes[5] } func (x FieldOptions_JSType) Number() protoreflect.EnumNumber { @@ -406,6 +470,152 @@ func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 1} } +// If set to RETENTION_SOURCE, the option will be omitted from the binary. +// Note: as of January 2023, support for this is in progress and does not yet +// have an effect (b/264593489). +type FieldOptions_OptionRetention int32 + +const ( + FieldOptions_RETENTION_UNKNOWN FieldOptions_OptionRetention = 0 + FieldOptions_RETENTION_RUNTIME FieldOptions_OptionRetention = 1 + FieldOptions_RETENTION_SOURCE FieldOptions_OptionRetention = 2 +) + +// Enum value maps for FieldOptions_OptionRetention. +var ( + FieldOptions_OptionRetention_name = map[int32]string{ + 0: "RETENTION_UNKNOWN", + 1: "RETENTION_RUNTIME", + 2: "RETENTION_SOURCE", + } + FieldOptions_OptionRetention_value = map[string]int32{ + "RETENTION_UNKNOWN": 0, + "RETENTION_RUNTIME": 1, + "RETENTION_SOURCE": 2, + } +) + +func (x FieldOptions_OptionRetention) Enum() *FieldOptions_OptionRetention { + p := new(FieldOptions_OptionRetention) + *p = x + return p +} + +func (x FieldOptions_OptionRetention) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldOptions_OptionRetention) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[6].Descriptor() +} + +func (FieldOptions_OptionRetention) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[6] +} + +func (x FieldOptions_OptionRetention) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldOptions_OptionRetention) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldOptions_OptionRetention(num) + return nil +} + +// Deprecated: Use FieldOptions_OptionRetention.Descriptor instead. +func (FieldOptions_OptionRetention) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 2} +} + +// This indicates the types of entities that the field may apply to when used +// as an option. If it is unset, then the field may be freely used as an +// option on any kind of entity. Note: as of January 2023, support for this is +// in progress and does not yet have an effect (b/264593489). +type FieldOptions_OptionTargetType int32 + +const ( + FieldOptions_TARGET_TYPE_UNKNOWN FieldOptions_OptionTargetType = 0 + FieldOptions_TARGET_TYPE_FILE FieldOptions_OptionTargetType = 1 + FieldOptions_TARGET_TYPE_EXTENSION_RANGE FieldOptions_OptionTargetType = 2 + FieldOptions_TARGET_TYPE_MESSAGE FieldOptions_OptionTargetType = 3 + FieldOptions_TARGET_TYPE_FIELD FieldOptions_OptionTargetType = 4 + FieldOptions_TARGET_TYPE_ONEOF FieldOptions_OptionTargetType = 5 + FieldOptions_TARGET_TYPE_ENUM FieldOptions_OptionTargetType = 6 + FieldOptions_TARGET_TYPE_ENUM_ENTRY FieldOptions_OptionTargetType = 7 + FieldOptions_TARGET_TYPE_SERVICE FieldOptions_OptionTargetType = 8 + FieldOptions_TARGET_TYPE_METHOD FieldOptions_OptionTargetType = 9 +) + +// Enum value maps for FieldOptions_OptionTargetType. +var ( + FieldOptions_OptionTargetType_name = map[int32]string{ + 0: "TARGET_TYPE_UNKNOWN", + 1: "TARGET_TYPE_FILE", + 2: "TARGET_TYPE_EXTENSION_RANGE", + 3: "TARGET_TYPE_MESSAGE", + 4: "TARGET_TYPE_FIELD", + 5: "TARGET_TYPE_ONEOF", + 6: "TARGET_TYPE_ENUM", + 7: "TARGET_TYPE_ENUM_ENTRY", + 8: "TARGET_TYPE_SERVICE", + 9: "TARGET_TYPE_METHOD", + } + FieldOptions_OptionTargetType_value = map[string]int32{ + "TARGET_TYPE_UNKNOWN": 0, + "TARGET_TYPE_FILE": 1, + "TARGET_TYPE_EXTENSION_RANGE": 2, + "TARGET_TYPE_MESSAGE": 3, + "TARGET_TYPE_FIELD": 4, + "TARGET_TYPE_ONEOF": 5, + "TARGET_TYPE_ENUM": 6, + "TARGET_TYPE_ENUM_ENTRY": 7, + "TARGET_TYPE_SERVICE": 8, + "TARGET_TYPE_METHOD": 9, + } +) + +func (x FieldOptions_OptionTargetType) Enum() *FieldOptions_OptionTargetType { + p := new(FieldOptions_OptionTargetType) + *p = x + return p +} + +func (x FieldOptions_OptionTargetType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldOptions_OptionTargetType) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[7].Descriptor() +} + +func (FieldOptions_OptionTargetType) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[7] +} + +func (x FieldOptions_OptionTargetType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldOptions_OptionTargetType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldOptions_OptionTargetType(num) + return nil +} + +// Deprecated: Use FieldOptions_OptionTargetType.Descriptor instead. +func (FieldOptions_OptionTargetType) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 3} +} + // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, // or neither? HTTP based RPC implementation may choose GET verb for safe // methods, and PUT verb for idempotent methods instead of the default POST. @@ -442,11 +652,11 @@ func (x MethodOptions_IdempotencyLevel) String() string { } func (MethodOptions_IdempotencyLevel) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[8].Descriptor() } func (MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[5] + return &file_google_protobuf_descriptor_proto_enumTypes[8] } func (x MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber { @@ -468,6 +678,70 @@ func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{17, 0} } +// Represents the identified object's effect on the element in the original +// .proto file. +type GeneratedCodeInfo_Annotation_Semantic int32 + +const ( + // There is no effect or the effect is indescribable. + GeneratedCodeInfo_Annotation_NONE GeneratedCodeInfo_Annotation_Semantic = 0 + // The element is set or otherwise mutated. + GeneratedCodeInfo_Annotation_SET GeneratedCodeInfo_Annotation_Semantic = 1 + // An alias to the element is returned. + GeneratedCodeInfo_Annotation_ALIAS GeneratedCodeInfo_Annotation_Semantic = 2 +) + +// Enum value maps for GeneratedCodeInfo_Annotation_Semantic. +var ( + GeneratedCodeInfo_Annotation_Semantic_name = map[int32]string{ + 0: "NONE", + 1: "SET", + 2: "ALIAS", + } + GeneratedCodeInfo_Annotation_Semantic_value = map[string]int32{ + "NONE": 0, + "SET": 1, + "ALIAS": 2, + } +) + +func (x GeneratedCodeInfo_Annotation_Semantic) Enum() *GeneratedCodeInfo_Annotation_Semantic { + p := new(GeneratedCodeInfo_Annotation_Semantic) + *p = x + return p +} + +func (x GeneratedCodeInfo_Annotation_Semantic) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GeneratedCodeInfo_Annotation_Semantic) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[9].Descriptor() +} + +func (GeneratedCodeInfo_Annotation_Semantic) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[9] +} + +func (x GeneratedCodeInfo_Annotation_Semantic) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *GeneratedCodeInfo_Annotation_Semantic) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = GeneratedCodeInfo_Annotation_Semantic(num) + return nil +} + +// Deprecated: Use GeneratedCodeInfo_Annotation_Semantic.Descriptor instead. +func (GeneratedCodeInfo_Annotation_Semantic) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{20, 0, 0} +} + // The protocol compiler can output a FileDescriptorSet containing the .proto // files it parses. type FileDescriptorSet struct { @@ -544,8 +818,12 @@ type FileDescriptorProto struct { // development tools. SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"` // The syntax of the proto file. - // The supported values are "proto2" and "proto3". + // The supported values are "proto2", "proto3", and "editions". + // + // If `edition` is present, this value must be "editions". Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` + // The edition of the proto file, which is an opaque string. + Edition *string `protobuf:"bytes,13,opt,name=edition" json:"edition,omitempty"` } func (x *FileDescriptorProto) Reset() { @@ -664,6 +942,13 @@ func (x *FileDescriptorProto) GetSyntax() string { return "" } +func (x *FileDescriptorProto) GetEdition() string { + if x != nil && x.Edition != nil { + return *x.Edition + } + return "" +} + // Describes a message type. type DescriptorProto struct { state protoimpl.MessageState @@ -794,7 +1079,21 @@ type ExtensionRangeOptions struct { // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` -} + // go/protobuf-stripping-extension-declarations + // Like Metadata, but we use a repeated field to hold all extension + // declarations. This should avoid the size increases of transforming a large + // extension range into small ranges in generated binaries. + Declaration []*ExtensionRangeOptions_Declaration `protobuf:"bytes,2,rep,name=declaration" json:"declaration,omitempty"` + // The verification state of the range. + // TODO(b/278783756): flip the default to DECLARATION once all empty ranges + // are marked as UNVERIFIED. + Verification *ExtensionRangeOptions_VerificationState `protobuf:"varint,3,opt,name=verification,enum=google.protobuf.ExtensionRangeOptions_VerificationState,def=1" json:"verification,omitempty"` +} + +// Default values for ExtensionRangeOptions fields. +const ( + Default_ExtensionRangeOptions_Verification = ExtensionRangeOptions_UNVERIFIED +) func (x *ExtensionRangeOptions) Reset() { *x = ExtensionRangeOptions{} @@ -835,6 +1134,20 @@ func (x *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption return nil } +func (x *ExtensionRangeOptions) GetDeclaration() []*ExtensionRangeOptions_Declaration { + if x != nil { + return x.Declaration + } + return nil +} + +func (x *ExtensionRangeOptions) GetVerification() ExtensionRangeOptions_VerificationState { + if x != nil && x.Verification != nil { + return *x.Verification + } + return Default_ExtensionRangeOptions_Verification +} + // Describes a field within a message. type FieldDescriptorProto struct { state protoimpl.MessageState @@ -860,7 +1173,6 @@ type FieldDescriptorProto struct { // For booleans, "true" or "false". // For strings, contains the default text contents (not escaped in any way). // For bytes, contains the C escaped value. All bytes >= 128 are escaped. - // TODO(kenton): Base-64 encode? DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` // If set, gives the index of a oneof in the containing type's oneof_decl // list. This field is a member of that oneof. @@ -1382,22 +1694,22 @@ type FileOptions struct { // inappropriate because proto packages do not normally start with backwards // domain names. JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"` - // If set, all the classes from the .proto file are wrapped in a single - // outer class with the given name. This applies to both Proto1 - // (equivalent to the old "--one_java_file" option) and Proto2 (where - // a .proto always translates to a single class, but you may want to - // explicitly choose the class name). + // Controls the name of the wrapper Java class generated for the .proto file. + // That class will always contain the .proto file's getDescriptor() method as + // well as any top-level extensions defined in the .proto file. + // If java_multiple_files is disabled, then all the other classes from the + // .proto file will be nested inside the single wrapper outer class. JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"` - // If set true, then the Java code generator will generate a separate .java + // If enabled, then the Java code generator will generate a separate .java // file for each top-level message, enum, and service defined in the .proto - // file. Thus, these types will *not* be nested inside the outer class - // named by java_outer_classname. However, the outer class will still be + // file. Thus, these types will *not* be nested inside the wrapper class + // named by java_outer_classname. However, the wrapper class will still be // generated to contain the file's getDescriptor() method as well as any // top-level extensions defined in the file. JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` // This option does nothing. // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` // If set true, then the Java2 code generator will generate code that // throws an exception whenever an attempt is made to assign a non-UTF-8 @@ -1531,7 +1843,7 @@ func (x *FileOptions) GetJavaMultipleFiles() bool { return Default_FileOptions_JavaMultipleFiles } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. func (x *FileOptions) GetJavaGenerateEqualsAndHash() bool { if x != nil && x.JavaGenerateEqualsAndHash != nil { return *x.JavaGenerateEqualsAndHash @@ -1670,10 +1982,12 @@ type MessageOptions struct { // efficient, has fewer features, and is more complicated. // // The message must be defined exactly as follows: - // message Foo { - // option message_set_wire_format = true; - // extensions 4 to max; - // } + // + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // // Note that the message cannot have any defined fields; MessageSets only // have extensions. // @@ -1692,28 +2006,44 @@ type MessageOptions struct { // for the message, or it will be completely ignored; in the very least, // this is a formalization for deprecating messages. Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + // // Whether the message is an automatically generated map entry type for the // maps field. // // For maps fields: - // map map_field = 1; + // + // map map_field = 1; + // // The parsed descriptor looks like: - // message MapFieldEntry { - // option map_entry = true; - // optional KeyType key = 1; - // optional ValueType value = 2; - // } - // repeated MapFieldEntry map_field = 1; + // + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; // // Implementations may choose not to generate the map_entry=true message, but // use a native map in the target language to hold the keys and values. // The reflection APIs in such implementations still need to work as // if the field is a repeated message field. - // - // NOTE: Do not set the option in .proto files. Always use the maps syntax - // instead. The option should only be implicitly set by the proto compiler - // parser. MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` + // Enable the legacy handling of JSON field name conflicts. This lowercases + // and strips underscored from the fields before comparison in proto3 only. + // The new behavior takes `json_name` into account and applies to proto2 as + // well. + // + // This should only be used as a temporary measure against broken builds due + // to the change in behavior for JSON field name conflicts. + // + // TODO(b/261750190) This is legacy behavior we plan to remove once downstream + // teams have had time to migrate. + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + DeprecatedLegacyJsonFieldConflicts *bool `protobuf:"varint,11,opt,name=deprecated_legacy_json_field_conflicts,json=deprecatedLegacyJsonFieldConflicts" json:"deprecated_legacy_json_field_conflicts,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` } @@ -1785,6 +2115,14 @@ func (x *MessageOptions) GetMapEntry() bool { return false } +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *MessageOptions) GetDeprecatedLegacyJsonFieldConflicts() bool { + if x != nil && x.DeprecatedLegacyJsonFieldConflicts != nil { + return *x.DeprecatedLegacyJsonFieldConflicts + } + return false +} + func (x *MessageOptions) GetUninterpretedOption() []*UninterpretedOption { if x != nil { return x.UninterpretedOption @@ -1800,8 +2138,10 @@ type FieldOptions struct { // The ctype option instructs the C++ code generator to use a different // representation of the field than it normally would. See the specific - // options below. This option is not yet implemented in the open source - // release -- sorry, we'll try to include it in a future version! + // options below. This option is only implemented to support use of + // [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of + // type "bytes" in the open source release -- sorry, we'll try to include + // other types in a future version! Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` // The packed option can be enabled for repeated primitive fields to enable // a more efficient representation on the wire. Rather than repeatedly @@ -1838,7 +2178,6 @@ type FieldOptions struct { // call from multiple threads concurrently, while non-const methods continue // to require exclusive access. // - // // Note that implementations may choose not to check required fields within // a lazy sub-message. That is, calling IsInitialized() on the outer message // may return true even if the inner message has missing required fields. @@ -1849,7 +2188,14 @@ type FieldOptions struct { // implementation must either *always* check its required fields, or *never* // check its required fields, regardless of whether or not the message has // been parsed. + // + // As of May 2022, lazy verifies the contents of the byte stream during + // parsing. An invalid byte stream will cause the overall parsing to fail. Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"` + // unverified_lazy does no correctness checks on the byte stream. This should + // only be used where lazy with verification is prohibitive for performance + // reasons. + UnverifiedLazy *bool `protobuf:"varint,15,opt,name=unverified_lazy,json=unverifiedLazy,def=0" json:"unverified_lazy,omitempty"` // Is this field deprecated? // Depending on the target platform, this can emit Deprecated annotations // for accessors, or it will be completely ignored; in the very least, this @@ -1857,17 +2203,26 @@ type FieldOptions struct { Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` // For Google-internal migration only. Do not use. Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` + // Indicate that the field value should not be printed out when using debug + // formats, e.g. when the field contains sensitive credentials. + DebugRedact *bool `protobuf:"varint,16,opt,name=debug_redact,json=debugRedact,def=0" json:"debug_redact,omitempty"` + Retention *FieldOptions_OptionRetention `protobuf:"varint,17,opt,name=retention,enum=google.protobuf.FieldOptions_OptionRetention" json:"retention,omitempty"` + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + Target *FieldOptions_OptionTargetType `protobuf:"varint,18,opt,name=target,enum=google.protobuf.FieldOptions_OptionTargetType" json:"target,omitempty"` + Targets []FieldOptions_OptionTargetType `protobuf:"varint,19,rep,name=targets,enum=google.protobuf.FieldOptions_OptionTargetType" json:"targets,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` } // Default values for FieldOptions fields. const ( - Default_FieldOptions_Ctype = FieldOptions_STRING - Default_FieldOptions_Jstype = FieldOptions_JS_NORMAL - Default_FieldOptions_Lazy = bool(false) - Default_FieldOptions_Deprecated = bool(false) - Default_FieldOptions_Weak = bool(false) + Default_FieldOptions_Ctype = FieldOptions_STRING + Default_FieldOptions_Jstype = FieldOptions_JS_NORMAL + Default_FieldOptions_Lazy = bool(false) + Default_FieldOptions_UnverifiedLazy = bool(false) + Default_FieldOptions_Deprecated = bool(false) + Default_FieldOptions_Weak = bool(false) + Default_FieldOptions_DebugRedact = bool(false) ) func (x *FieldOptions) Reset() { @@ -1930,6 +2285,13 @@ func (x *FieldOptions) GetLazy() bool { return Default_FieldOptions_Lazy } +func (x *FieldOptions) GetUnverifiedLazy() bool { + if x != nil && x.UnverifiedLazy != nil { + return *x.UnverifiedLazy + } + return Default_FieldOptions_UnverifiedLazy +} + func (x *FieldOptions) GetDeprecated() bool { if x != nil && x.Deprecated != nil { return *x.Deprecated @@ -1944,6 +2306,35 @@ func (x *FieldOptions) GetWeak() bool { return Default_FieldOptions_Weak } +func (x *FieldOptions) GetDebugRedact() bool { + if x != nil && x.DebugRedact != nil { + return *x.DebugRedact + } + return Default_FieldOptions_DebugRedact +} + +func (x *FieldOptions) GetRetention() FieldOptions_OptionRetention { + if x != nil && x.Retention != nil { + return *x.Retention + } + return FieldOptions_RETENTION_UNKNOWN +} + +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *FieldOptions) GetTarget() FieldOptions_OptionTargetType { + if x != nil && x.Target != nil { + return *x.Target + } + return FieldOptions_TARGET_TYPE_UNKNOWN +} + +func (x *FieldOptions) GetTargets() []FieldOptions_OptionTargetType { + if x != nil { + return x.Targets + } + return nil +} + func (x *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { if x != nil { return x.UninterpretedOption @@ -2014,6 +2405,15 @@ type EnumOptions struct { // for the enum, or it will be completely ignored; in the very least, this // is a formalization for deprecating enums. Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Enable the legacy handling of JSON field name conflicts. This lowercases + // and strips underscored from the fields before comparison in proto3 only. + // The new behavior takes `json_name` into account and applies to proto2 as + // well. + // TODO(b/261750190) Remove this legacy behavior once downstream teams have + // had time to migrate. + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + DeprecatedLegacyJsonFieldConflicts *bool `protobuf:"varint,6,opt,name=deprecated_legacy_json_field_conflicts,json=deprecatedLegacyJsonFieldConflicts" json:"deprecated_legacy_json_field_conflicts,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` } @@ -2069,6 +2469,14 @@ func (x *EnumOptions) GetDeprecated() bool { return Default_EnumOptions_Deprecated } +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *EnumOptions) GetDeprecatedLegacyJsonFieldConflicts() bool { + if x != nil && x.DeprecatedLegacyJsonFieldConflicts != nil { + return *x.DeprecatedLegacyJsonFieldConflicts + } + return false +} + func (x *EnumOptions) GetUninterpretedOption() []*UninterpretedOption { if x != nil { return x.UninterpretedOption @@ -2399,43 +2807,48 @@ type SourceCodeInfo struct { // tools. // // For example, say we have a file like: - // message Foo { - // optional string foo = 1; - // } + // + // message Foo { + // optional string foo = 1; + // } + // // Let's look at just the field definition: - // optional string foo = 1; - // ^ ^^ ^^ ^ ^^^ - // a bc de f ghi + // + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // // We have the following locations: - // span path represents - // [a,i) [ 4, 0, 2, 0 ] The whole field definition. - // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). // // Notes: - // - A location may refer to a repeated field itself (i.e. not to any - // particular index within it). This is used whenever a set of elements are - // logically enclosed in a single code segment. For example, an entire - // extend block (possibly containing multiple extension definitions) will - // have an outer location whose path refers to the "extensions" repeated - // field without an index. - // - Multiple locations may have the same path. This happens when a single - // logical declaration is spread out across multiple places. The most - // obvious example is the "extend" block again -- there may be multiple - // extend blocks in the same scope, each of which will have the same path. - // - A location's span is not always a subset of its parent's span. For - // example, the "extendee" of an extension declaration appears at the - // beginning of the "extend" block and is shared by all extensions within - // the block. - // - Just because a location's span is a subset of some other location's span - // does not mean that it is a descendant. For example, a "group" defines - // both a type and a field in a single declaration. Thus, the locations - // corresponding to the type and field and their components will overlap. - // - Code which tries to interpret locations should probably be designed to - // ignore those that it doesn't understand, as more types of locations could - // be recorded in the future. + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendant. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` } @@ -2651,6 +3064,108 @@ func (x *DescriptorProto_ReservedRange) GetEnd() int32 { return 0 } +type ExtensionRangeOptions_Declaration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The extension number declared within the extension range. + Number *int32 `protobuf:"varint,1,opt,name=number" json:"number,omitempty"` + // The fully-qualified name of the extension field. There must be a leading + // dot in front of the full name. + FullName *string `protobuf:"bytes,2,opt,name=full_name,json=fullName" json:"full_name,omitempty"` + // The fully-qualified type name of the extension field. Unlike + // Metadata.type, Declaration.type must have a leading dot for messages + // and enums. + Type *string `protobuf:"bytes,3,opt,name=type" json:"type,omitempty"` + // Deprecated. Please use "repeated". + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + IsRepeated *bool `protobuf:"varint,4,opt,name=is_repeated,json=isRepeated" json:"is_repeated,omitempty"` + // If true, indicates that the number is reserved in the extension range, + // and any extension field with the number will fail to compile. Set this + // when a declared extension field is deleted. + Reserved *bool `protobuf:"varint,5,opt,name=reserved" json:"reserved,omitempty"` + // If true, indicates that the extension must be defined as repeated. + // Otherwise the extension must be defined as optional. + Repeated *bool `protobuf:"varint,6,opt,name=repeated" json:"repeated,omitempty"` +} + +func (x *ExtensionRangeOptions_Declaration) Reset() { + *x = ExtensionRangeOptions_Declaration{} + if protoimpl.UnsafeEnabled { + mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExtensionRangeOptions_Declaration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtensionRangeOptions_Declaration) ProtoMessage() {} + +func (x *ExtensionRangeOptions_Declaration) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtensionRangeOptions_Declaration.ProtoReflect.Descriptor instead. +func (*ExtensionRangeOptions_Declaration) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *ExtensionRangeOptions_Declaration) GetNumber() int32 { + if x != nil && x.Number != nil { + return *x.Number + } + return 0 +} + +func (x *ExtensionRangeOptions_Declaration) GetFullName() string { + if x != nil && x.FullName != nil { + return *x.FullName + } + return "" +} + +func (x *ExtensionRangeOptions_Declaration) GetType() string { + if x != nil && x.Type != nil { + return *x.Type + } + return "" +} + +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *ExtensionRangeOptions_Declaration) GetIsRepeated() bool { + if x != nil && x.IsRepeated != nil { + return *x.IsRepeated + } + return false +} + +func (x *ExtensionRangeOptions_Declaration) GetReserved() bool { + if x != nil && x.Reserved != nil { + return *x.Reserved + } + return false +} + +func (x *ExtensionRangeOptions_Declaration) GetRepeated() bool { + if x != nil && x.Repeated != nil { + return *x.Repeated + } + return false +} + // Range of reserved numeric values. Reserved values may not be used by // entries in the same enum. Reserved ranges may not overlap. // @@ -2669,7 +3184,7 @@ type EnumDescriptorProto_EnumReservedRange struct { func (x *EnumDescriptorProto_EnumReservedRange) Reset() { *x = EnumDescriptorProto_EnumReservedRange{} if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + mi := &file_google_protobuf_descriptor_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2682,7 +3197,7 @@ func (x *EnumDescriptorProto_EnumReservedRange) String() string { func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} func (x *EnumDescriptorProto_EnumReservedRange) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + mi := &file_google_protobuf_descriptor_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2715,8 +3230,8 @@ func (x *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 { // The name of the uninterpreted option. Each string represents a segment in // a dot-separated name. is_extension is true iff a segment represents an // extension (denoted with parentheses in options specs in .proto files). -// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents -// "foo.(bar.baz).qux". +// E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents +// "foo.(bar.baz).moo". type UninterpretedOption_NamePart struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2729,7 +3244,7 @@ type UninterpretedOption_NamePart struct { func (x *UninterpretedOption_NamePart) Reset() { *x = UninterpretedOption_NamePart{} if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[24] + mi := &file_google_protobuf_descriptor_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2742,7 +3257,7 @@ func (x *UninterpretedOption_NamePart) String() string { func (*UninterpretedOption_NamePart) ProtoMessage() {} func (x *UninterpretedOption_NamePart) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[24] + mi := &file_google_protobuf_descriptor_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2781,23 +3296,34 @@ type SourceCodeInfo_Location struct { // location. // // Each element is a field number or an index. They form a path from - // the root FileDescriptorProto to the place where the definition. For - // example, this path: - // [ 4, 3, 2, 7, 1 ] + // the root FileDescriptorProto to the place where the definition occurs. + // For example, this path: + // + // [ 4, 3, 2, 7, 1 ] + // // refers to: - // file.message_type(3) // 4, 3 - // .field(7) // 2, 7 - // .name() // 1 + // + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // // This is because FileDescriptorProto.message_type has field number 4: - // repeated DescriptorProto message_type = 4; + // + // repeated DescriptorProto message_type = 4; + // // and DescriptorProto.field has field number 2: - // repeated FieldDescriptorProto field = 2; + // + // repeated FieldDescriptorProto field = 2; + // // and FieldDescriptorProto.name has field number 1: - // optional string name = 1; + // + // optional string name = 1; // // Thus, the above path gives the location of a field name. If we removed // the last element: - // [ 4, 3, 2, 7 ] + // + // [ 4, 3, 2, 7 ] + // // this path refers to the whole field declaration (from the beginning // of the label to the terminating semicolon). Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` @@ -2826,34 +3352,34 @@ type SourceCodeInfo_Location struct { // // Examples: // - // optional int32 foo = 1; // Comment attached to foo. - // // Comment attached to bar. - // optional int32 bar = 2; + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; // - // optional string baz = 3; - // // Comment attached to baz. - // // Another line attached to baz. + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. // - // // Comment attached to qux. - // // - // // Another line attached to qux. - // optional double qux = 4; + // // Comment attached to moo. + // // + // // Another line attached to moo. + // optional double moo = 4; // - // // Detached comment for corge. This is not leading or trailing comments - // // to qux or corge because there are blank lines separating it from - // // both. + // // Detached comment for corge. This is not leading or trailing comments + // // to moo or corge because there are blank lines separating it from + // // both. // - // // Detached comment for corge paragraph 2. + // // Detached comment for corge paragraph 2. // - // optional string corge = 5; - // /* Block comment attached - // * to corge. Leading asterisks - // * will be removed. */ - // /* Block comment attached to - // * grault. */ - // optional int32 grault = 6; + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; // - // // ignored detached comments. + // // ignored detached comments. LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` @@ -2862,7 +3388,7 @@ type SourceCodeInfo_Location struct { func (x *SourceCodeInfo_Location) Reset() { *x = SourceCodeInfo_Location{} if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[25] + mi := &file_google_protobuf_descriptor_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2875,7 +3401,7 @@ func (x *SourceCodeInfo_Location) String() string { func (*SourceCodeInfo_Location) ProtoMessage() {} func (x *SourceCodeInfo_Location) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[25] + mi := &file_google_protobuf_descriptor_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2940,15 +3466,16 @@ type GeneratedCodeInfo_Annotation struct { // that relates to the identified object. Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"` // Identifies the ending offset in bytes in the generated code that - // relates to the identified offset. The end offset should be one past + // relates to the identified object. The end offset should be one past // the last relevant byte (so the length of the text = end - begin). - End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` + End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` + Semantic *GeneratedCodeInfo_Annotation_Semantic `protobuf:"varint,5,opt,name=semantic,enum=google.protobuf.GeneratedCodeInfo_Annotation_Semantic" json:"semantic,omitempty"` } func (x *GeneratedCodeInfo_Annotation) Reset() { *x = GeneratedCodeInfo_Annotation{} if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[26] + mi := &file_google_protobuf_descriptor_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2961,7 +3488,7 @@ func (x *GeneratedCodeInfo_Annotation) String() string { func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} func (x *GeneratedCodeInfo_Annotation) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[26] + mi := &file_google_protobuf_descriptor_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3005,6 +3532,13 @@ func (x *GeneratedCodeInfo_Annotation) GetEnd() int32 { return 0 } +func (x *GeneratedCodeInfo_Annotation) GetSemantic() GeneratedCodeInfo_Annotation_Semantic { + if x != nil && x.Semantic != nil { + return *x.Semantic + } + return GeneratedCodeInfo_Annotation_NONE +} + var File_google_protobuf_descriptor_proto protoreflect.FileDescriptor var file_google_protobuf_descriptor_proto_rawDesc = []byte{ @@ -3016,7 +3550,7 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x04, 0x66, 0x69, - 0x6c, 0x65, 0x22, 0xe4, 0x04, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x6c, 0x65, 0x22, 0xfe, 0x04, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, @@ -3054,330 +3588,423 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x22, 0xb9, 0x06, 0x0a, 0x0f, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x43, - 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0a, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, - 0x08, 0x65, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x0f, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x09, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0xb9, 0x06, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, + 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x64, 0x65, 0x63, - 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, - 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x63, 0x6c, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, + 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0a, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x41, 0x0a, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x08, 0x65, 0x6e, 0x75, 0x6d, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x1a, 0x7a, 0x0a, 0x0e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x37, 0x0a, 0x0d, - 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x7c, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, - 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, - 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, - 0x80, 0x80, 0x02, 0x22, 0xc1, 0x06, 0x0a, 0x14, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3e, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x64, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x64, 0x65, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, - 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xb6, 0x02, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, - 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, - 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, - 0x34, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, - 0x36, 0x34, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, - 0x33, 0x32, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, - 0x45, 0x44, 0x36, 0x34, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, - 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x0f, 0x12, 0x11, 0x0a, - 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x10, - 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, - 0x11, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x36, 0x34, - 0x10, 0x12, 0x22, 0x43, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x0e, 0x4c, - 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, - 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x50, - 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x03, 0x22, 0x63, 0x0a, 0x14, 0x4f, 0x6e, 0x65, 0x6f, 0x66, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0e, 0x65, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x44, 0x0a, + 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x64, 0x65, 0x63, 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x44, + 0x65, 0x63, 0x6c, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, + 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x7a, 0x0a, 0x0e, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x65, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x37, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, + 0xad, 0x04, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x0b, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0x88, 0x01, + 0x02, 0x52, 0x0b, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, + 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x0a, + 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb3, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x63, + 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x23, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x34, + 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x43, 0x4c, 0x41, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x01, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, + 0xc1, 0x06, 0x0a, 0x14, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe3, 0x02, 0x0a, - 0x13, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, - 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x5d, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x11, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, - 0x6e, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xb6, 0x02, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, + 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, + 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x02, 0x12, + 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x03, 0x12, + 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x04, + 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x05, + 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, + 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, + 0x33, 0x32, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, + 0x4c, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, + 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, 0x4f, + 0x55, 0x50, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, + 0x59, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, + 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, + 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x10, 0x12, 0x0f, 0x0a, 0x0b, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x11, 0x12, 0x0f, 0x0a, + 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x12, 0x22, 0x43, + 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, + 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, + 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, + 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, 0x50, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0x03, 0x22, 0x63, 0x0a, 0x14, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x13, 0x45, 0x6e, 0x75, + 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, + 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, + 0x65, 0x1a, 0x3b, 0x0a, 0x11, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x83, + 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x07, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, - 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0x89, 0x02, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x10, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x10, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x22, 0x91, - 0x09, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, - 0x0a, 0x0c, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x61, 0x76, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x6a, 0x61, 0x76, 0x61, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x6a, 0x61, 0x76, 0x61, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x6a, 0x61, - 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x19, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x3a, 0x0a, 0x16, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x75, 0x74, 0x66, 0x38, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, - 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x74, 0x66, 0x38, 0x12, 0x53, 0x0a, 0x0c, - 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x05, 0x53, - 0x50, 0x45, 0x45, 0x44, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x46, 0x6f, - 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x12, 0x35, 0x0a, 0x13, 0x63, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x63, 0x63, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x15, 0x6a, 0x61, 0x76, 0x61, 0x5f, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, - 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x35, 0x0a, 0x13, 0x70, 0x79, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x3a, - 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x70, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x70, 0x68, 0x70, - 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x12, - 0x70, 0x68, 0x70, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x41, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, - 0x63, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, - 0x68, 0x70, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, - 0x0d, 0x70, 0x68, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x14, 0x70, 0x68, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, - 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x72, 0x75, 0x62, 0x79, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x75, - 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x02, 0x12, - 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, - 0x03, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x26, - 0x10, 0x27, 0x22, 0xd1, 0x02, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x12, 0x4c, 0x0a, 0x1f, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, - 0x72, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x52, 0x1c, 0x6e, 0x6f, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, - 0x72, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x70, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, - 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, - 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xe2, 0x03, 0x0a, 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x06, 0x53, 0x54, 0x52, - 0x49, 0x4e, 0x47, 0x52, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, - 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x89, + 0x02, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x22, 0x91, 0x09, 0x0a, 0x0b, 0x46, + 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x61, + 0x76, 0x61, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x6a, 0x61, 0x76, 0x61, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, + 0x14, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6a, 0x61, 0x76, + 0x61, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x52, 0x11, 0x6a, 0x61, 0x76, 0x61, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x5f, 0x61, + 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x19, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, + 0x71, 0x75, 0x61, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3a, 0x0a, 0x16, + 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x5f, 0x75, 0x74, 0x66, 0x38, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x55, 0x74, 0x66, 0x38, 0x12, 0x53, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, + 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x3a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, + 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x1d, 0x0a, + 0x0a, 0x67, 0x6f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x67, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x13, + 0x63, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, + 0x52, 0x11, 0x63, 0x63, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x15, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x35, + 0x0a, 0x13, 0x70, 0x79, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, + 0x73, 0x65, 0x52, 0x11, 0x70, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x14, 0x70, 0x68, 0x70, 0x5f, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x2a, 0x20, + 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x12, 0x70, 0x68, 0x70, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x25, + 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x3a, + 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x72, 0x65, 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x63, 0x5f, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x73, 0x68, + 0x61, 0x72, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x27, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, + 0x28, 0x0a, 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x68, 0x70, 0x43, 0x6c, + 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x70, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x34, + 0x0a, 0x16, 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x70, 0x68, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, 0x5f, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x62, 0x79, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, + 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, + 0x49, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x2a, 0x09, 0x08, + 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x22, 0xbb, + 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x74, + 0x5f, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x4c, 0x0a, 0x1f, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, + 0x1c, 0x6e, 0x6f, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x25, 0x0a, + 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, + 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, + 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0x85, 0x09, 0x0a, + 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, + 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, + 0x65, 0x3a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x52, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, + 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x52, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x19, 0x0a, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, + 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x12, 0x2e, 0x0a, 0x0f, + 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0e, 0x75, 0x6e, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x4c, 0x61, 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, + 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x12, 0x28, + 0x0a, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, + 0x75, 0x67, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x4b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x12, 0x48, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x13, 0x20, 0x03, + 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, - 0x4d, 0x41, 0x4c, 0x52, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x04, 0x6c, - 0x61, 0x7a, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x52, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, - 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, - 0x04, 0x77, 0x65, 0x61, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x52, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, - 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x05, 0x43, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, - 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x52, 0x44, 0x10, - 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x49, 0x45, 0x43, - 0x45, 0x10, 0x02, 0x22, 0x35, 0x0a, 0x06, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, - 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, - 0x4a, 0x53, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4a, - 0x53, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, - 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x73, 0x0a, 0x0c, 0x4f, - 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, + 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, - 0x22, 0xc0, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x6c, 0x69, 0x61, - 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, - 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, - 0x05, 0x10, 0x06, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x0a, 0x05, 0x43, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, + 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, + 0x52, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, + 0x49, 0x45, 0x43, 0x45, 0x10, 0x02, 0x22, 0x35, 0x0a, 0x06, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, + 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, + 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x22, 0x55, 0x0a, + 0x0f, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, 0x4e, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x14, + 0x0a, 0x10, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x10, 0x02, 0x22, 0x8c, 0x02, 0x0a, 0x10, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, + 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x41, 0x52, 0x47, + 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, + 0x4e, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, + 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, + 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x52, + 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x4e, 0x45, 0x4f, 0x46, 0x10, 0x05, + 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x06, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, + 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x08, 0x12, 0x16, 0x0a, 0x12, 0x54, + 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, + 0x44, 0x10, 0x09, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, + 0x08, 0x04, 0x10, 0x05, 0x22, 0x73, 0x0a, 0x0c, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, + 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, + 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, + 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x98, 0x02, 0x0a, 0x0b, 0x45, 0x6e, + 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, + 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, + 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, + 0x08, 0x05, 0x10, 0x06, 0x22, 0x9e, 0x01, 0x0a, 0x10, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, + 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, + 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, + 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, + 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, + 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, + 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, @@ -3385,97 +4012,95 @@ var file_google_protobuf_descriptor_proto_rawDesc = []byte{ 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, - 0x80, 0x80, 0x80, 0x02, 0x22, 0x9c, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, - 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x80, 0x80, 0x80, 0x02, 0x22, 0xe0, 0x02, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, + 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x71, 0x0a, + 0x11, 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, + 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, + 0x4f, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x10, + 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, + 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, + 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x10, 0x49, 0x64, + 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, + 0x0a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x5f, 0x53, 0x49, + 0x44, 0x45, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, + 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, + 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x9a, 0x03, 0x0a, 0x13, 0x55, 0x6e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, - 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, - 0x80, 0x80, 0x02, 0x22, 0xe0, 0x02, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x71, 0x0a, 0x11, - 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, - 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x10, 0x69, - 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, - 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x10, 0x49, 0x64, 0x65, - 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, - 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x4f, 0x5f, 0x53, 0x49, 0x44, - 0x45, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x53, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, - 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, 0x07, - 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x9a, 0x03, 0x0a, 0x13, 0x55, 0x6e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, - 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, - 0x0a, 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x4a, 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x50, - 0x61, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, - 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x02, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x02, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, - 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xce, 0x01, 0x0a, - 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x16, 0x0a, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x42, - 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x65, 0x61, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x10, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x74, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd1, 0x01, - 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x6d, 0x0a, 0x0a, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, - 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x65, 0x67, - 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x12, - 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, - 0x64, 0x42, 0x7e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x69, 0x6f, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, + 0x12, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x27, 0x0a, 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x4a, 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, + 0x50, 0x61, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x72, + 0x74, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, + 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x02, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x02, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, + 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xce, 0x01, + 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x16, 0x0a, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, + 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x65, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, + 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, + 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, + 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xd0, + 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x1a, 0xeb, 0x01, 0x0a, 0x0a, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, + 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, + 0x65, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, + 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x65, 0x6e, 0x64, 0x12, 0x52, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x52, 0x08, 0x73, + 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x22, 0x28, 0x0a, 0x08, 0x53, 0x65, 0x6d, 0x61, 0x6e, + 0x74, 0x69, 0x63, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, + 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x10, + 0x02, 0x42, 0x7e, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x48, 0x01, 0x5a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, @@ -3498,92 +4123,103 @@ func file_google_protobuf_descriptor_proto_rawDescGZIP() []byte { return file_google_protobuf_descriptor_proto_rawDescData } -var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_google_protobuf_descriptor_proto_goTypes = []interface{}{ - (FieldDescriptorProto_Type)(0), // 0: google.protobuf.FieldDescriptorProto.Type - (FieldDescriptorProto_Label)(0), // 1: google.protobuf.FieldDescriptorProto.Label - (FileOptions_OptimizeMode)(0), // 2: google.protobuf.FileOptions.OptimizeMode - (FieldOptions_CType)(0), // 3: google.protobuf.FieldOptions.CType - (FieldOptions_JSType)(0), // 4: google.protobuf.FieldOptions.JSType - (MethodOptions_IdempotencyLevel)(0), // 5: google.protobuf.MethodOptions.IdempotencyLevel - (*FileDescriptorSet)(nil), // 6: google.protobuf.FileDescriptorSet - (*FileDescriptorProto)(nil), // 7: google.protobuf.FileDescriptorProto - (*DescriptorProto)(nil), // 8: google.protobuf.DescriptorProto - (*ExtensionRangeOptions)(nil), // 9: google.protobuf.ExtensionRangeOptions - (*FieldDescriptorProto)(nil), // 10: google.protobuf.FieldDescriptorProto - (*OneofDescriptorProto)(nil), // 11: google.protobuf.OneofDescriptorProto - (*EnumDescriptorProto)(nil), // 12: google.protobuf.EnumDescriptorProto - (*EnumValueDescriptorProto)(nil), // 13: google.protobuf.EnumValueDescriptorProto - (*ServiceDescriptorProto)(nil), // 14: google.protobuf.ServiceDescriptorProto - (*MethodDescriptorProto)(nil), // 15: google.protobuf.MethodDescriptorProto - (*FileOptions)(nil), // 16: google.protobuf.FileOptions - (*MessageOptions)(nil), // 17: google.protobuf.MessageOptions - (*FieldOptions)(nil), // 18: google.protobuf.FieldOptions - (*OneofOptions)(nil), // 19: google.protobuf.OneofOptions - (*EnumOptions)(nil), // 20: google.protobuf.EnumOptions - (*EnumValueOptions)(nil), // 21: google.protobuf.EnumValueOptions - (*ServiceOptions)(nil), // 22: google.protobuf.ServiceOptions - (*MethodOptions)(nil), // 23: google.protobuf.MethodOptions - (*UninterpretedOption)(nil), // 24: google.protobuf.UninterpretedOption - (*SourceCodeInfo)(nil), // 25: google.protobuf.SourceCodeInfo - (*GeneratedCodeInfo)(nil), // 26: google.protobuf.GeneratedCodeInfo - (*DescriptorProto_ExtensionRange)(nil), // 27: google.protobuf.DescriptorProto.ExtensionRange - (*DescriptorProto_ReservedRange)(nil), // 28: google.protobuf.DescriptorProto.ReservedRange - (*EnumDescriptorProto_EnumReservedRange)(nil), // 29: google.protobuf.EnumDescriptorProto.EnumReservedRange - (*UninterpretedOption_NamePart)(nil), // 30: google.protobuf.UninterpretedOption.NamePart - (*SourceCodeInfo_Location)(nil), // 31: google.protobuf.SourceCodeInfo.Location - (*GeneratedCodeInfo_Annotation)(nil), // 32: google.protobuf.GeneratedCodeInfo.Annotation + (ExtensionRangeOptions_VerificationState)(0), // 0: google.protobuf.ExtensionRangeOptions.VerificationState + (FieldDescriptorProto_Type)(0), // 1: google.protobuf.FieldDescriptorProto.Type + (FieldDescriptorProto_Label)(0), // 2: google.protobuf.FieldDescriptorProto.Label + (FileOptions_OptimizeMode)(0), // 3: google.protobuf.FileOptions.OptimizeMode + (FieldOptions_CType)(0), // 4: google.protobuf.FieldOptions.CType + (FieldOptions_JSType)(0), // 5: google.protobuf.FieldOptions.JSType + (FieldOptions_OptionRetention)(0), // 6: google.protobuf.FieldOptions.OptionRetention + (FieldOptions_OptionTargetType)(0), // 7: google.protobuf.FieldOptions.OptionTargetType + (MethodOptions_IdempotencyLevel)(0), // 8: google.protobuf.MethodOptions.IdempotencyLevel + (GeneratedCodeInfo_Annotation_Semantic)(0), // 9: google.protobuf.GeneratedCodeInfo.Annotation.Semantic + (*FileDescriptorSet)(nil), // 10: google.protobuf.FileDescriptorSet + (*FileDescriptorProto)(nil), // 11: google.protobuf.FileDescriptorProto + (*DescriptorProto)(nil), // 12: google.protobuf.DescriptorProto + (*ExtensionRangeOptions)(nil), // 13: google.protobuf.ExtensionRangeOptions + (*FieldDescriptorProto)(nil), // 14: google.protobuf.FieldDescriptorProto + (*OneofDescriptorProto)(nil), // 15: google.protobuf.OneofDescriptorProto + (*EnumDescriptorProto)(nil), // 16: google.protobuf.EnumDescriptorProto + (*EnumValueDescriptorProto)(nil), // 17: google.protobuf.EnumValueDescriptorProto + (*ServiceDescriptorProto)(nil), // 18: google.protobuf.ServiceDescriptorProto + (*MethodDescriptorProto)(nil), // 19: google.protobuf.MethodDescriptorProto + (*FileOptions)(nil), // 20: google.protobuf.FileOptions + (*MessageOptions)(nil), // 21: google.protobuf.MessageOptions + (*FieldOptions)(nil), // 22: google.protobuf.FieldOptions + (*OneofOptions)(nil), // 23: google.protobuf.OneofOptions + (*EnumOptions)(nil), // 24: google.protobuf.EnumOptions + (*EnumValueOptions)(nil), // 25: google.protobuf.EnumValueOptions + (*ServiceOptions)(nil), // 26: google.protobuf.ServiceOptions + (*MethodOptions)(nil), // 27: google.protobuf.MethodOptions + (*UninterpretedOption)(nil), // 28: google.protobuf.UninterpretedOption + (*SourceCodeInfo)(nil), // 29: google.protobuf.SourceCodeInfo + (*GeneratedCodeInfo)(nil), // 30: google.protobuf.GeneratedCodeInfo + (*DescriptorProto_ExtensionRange)(nil), // 31: google.protobuf.DescriptorProto.ExtensionRange + (*DescriptorProto_ReservedRange)(nil), // 32: google.protobuf.DescriptorProto.ReservedRange + (*ExtensionRangeOptions_Declaration)(nil), // 33: google.protobuf.ExtensionRangeOptions.Declaration + (*EnumDescriptorProto_EnumReservedRange)(nil), // 34: google.protobuf.EnumDescriptorProto.EnumReservedRange + (*UninterpretedOption_NamePart)(nil), // 35: google.protobuf.UninterpretedOption.NamePart + (*SourceCodeInfo_Location)(nil), // 36: google.protobuf.SourceCodeInfo.Location + (*GeneratedCodeInfo_Annotation)(nil), // 37: google.protobuf.GeneratedCodeInfo.Annotation } var file_google_protobuf_descriptor_proto_depIdxs = []int32{ - 7, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto - 8, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto - 12, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto - 14, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto - 10, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto - 16, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions - 25, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo - 10, // 7: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto - 10, // 8: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto - 8, // 9: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto - 12, // 10: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto - 27, // 11: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange - 11, // 12: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto - 17, // 13: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions - 28, // 14: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange - 24, // 15: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 1, // 16: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label - 0, // 17: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type - 18, // 18: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions - 19, // 19: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions - 13, // 20: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto - 20, // 21: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions - 29, // 22: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange - 21, // 23: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions - 15, // 24: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto - 22, // 25: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions - 23, // 26: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions - 2, // 27: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode - 24, // 28: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 24, // 29: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 3, // 30: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType - 4, // 31: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType - 24, // 32: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 24, // 33: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 24, // 34: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 24, // 35: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 24, // 36: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 5, // 37: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel - 24, // 38: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 30, // 39: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart - 31, // 40: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location - 32, // 41: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation - 9, // 42: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions - 43, // [43:43] is the sub-list for method output_type - 43, // [43:43] is the sub-list for method input_type - 43, // [43:43] is the sub-list for extension type_name - 43, // [43:43] is the sub-list for extension extendee - 0, // [0:43] is the sub-list for field type_name + 11, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto + 12, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto + 16, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto + 18, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto + 14, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto + 20, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions + 29, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo + 14, // 7: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto + 14, // 8: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto + 12, // 9: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto + 16, // 10: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto + 31, // 11: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange + 15, // 12: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto + 21, // 13: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions + 32, // 14: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange + 28, // 15: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 33, // 16: google.protobuf.ExtensionRangeOptions.declaration:type_name -> google.protobuf.ExtensionRangeOptions.Declaration + 0, // 17: google.protobuf.ExtensionRangeOptions.verification:type_name -> google.protobuf.ExtensionRangeOptions.VerificationState + 2, // 18: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label + 1, // 19: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type + 22, // 20: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions + 23, // 21: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions + 17, // 22: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto + 24, // 23: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions + 34, // 24: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange + 25, // 25: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions + 19, // 26: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto + 26, // 27: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions + 27, // 28: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions + 3, // 29: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode + 28, // 30: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 31: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 4, // 32: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType + 5, // 33: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType + 6, // 34: google.protobuf.FieldOptions.retention:type_name -> google.protobuf.FieldOptions.OptionRetention + 7, // 35: google.protobuf.FieldOptions.target:type_name -> google.protobuf.FieldOptions.OptionTargetType + 7, // 36: google.protobuf.FieldOptions.targets:type_name -> google.protobuf.FieldOptions.OptionTargetType + 28, // 37: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 38: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 39: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 40: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 28, // 41: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 8, // 42: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel + 28, // 43: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 35, // 44: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart + 36, // 45: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location + 37, // 46: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation + 13, // 47: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions + 9, // 48: google.protobuf.GeneratedCodeInfo.Annotation.semantic:type_name -> google.protobuf.GeneratedCodeInfo.Annotation.Semantic + 49, // [49:49] is the sub-list for method output_type + 49, // [49:49] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name } func init() { file_google_protobuf_descriptor_proto_init() } @@ -3887,7 +4523,7 @@ func file_google_protobuf_descriptor_proto_init() { } } file_google_protobuf_descriptor_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnumDescriptorProto_EnumReservedRange); i { + switch v := v.(*ExtensionRangeOptions_Declaration); i { case 0: return &v.state case 1: @@ -3899,7 +4535,7 @@ func file_google_protobuf_descriptor_proto_init() { } } file_google_protobuf_descriptor_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UninterpretedOption_NamePart); i { + switch v := v.(*EnumDescriptorProto_EnumReservedRange); i { case 0: return &v.state case 1: @@ -3911,7 +4547,7 @@ func file_google_protobuf_descriptor_proto_init() { } } file_google_protobuf_descriptor_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SourceCodeInfo_Location); i { + switch v := v.(*UninterpretedOption_NamePart); i { case 0: return &v.state case 1: @@ -3923,6 +4559,18 @@ func file_google_protobuf_descriptor_proto_init() { } } file_google_protobuf_descriptor_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SourceCodeInfo_Location); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_protobuf_descriptor_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GeneratedCodeInfo_Annotation); i { case 0: return &v.state @@ -3940,8 +4588,8 @@ func file_google_protobuf_descriptor_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_protobuf_descriptor_proto_rawDesc, - NumEnums: 6, - NumMessages: 27, + NumEnums: 10, + NumMessages: 28, NumExtensions: 0, NumServices: 0, }, diff --git a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go index 8c10797b905e7..580b232f477ab 100644 --- a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go +++ b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go @@ -37,8 +37,7 @@ // It is functionally a tuple of the full name of the remote message type and // the serialized bytes of the remote message value. // -// -// Constructing an Any +// # Constructing an Any // // An Any message containing another message value is constructed using New: // @@ -48,8 +47,7 @@ // } // ... // make use of any // -// -// Unmarshaling an Any +// # Unmarshaling an Any // // With a populated Any message, the underlying message can be serialized into // a remote concrete message value in a few ways. @@ -95,8 +93,7 @@ // listed in the case clauses are linked into the Go binary and therefore also // registered in the global registry. // -// -// Type checking an Any +// # Type checking an Any // // In order to type check whether an Any message represents some other message, // then use the MessageIs method: @@ -115,7 +112,6 @@ // } // ... // make use of m // } -// package anypb import ( @@ -136,45 +132,49 @@ import ( // // Example 1: Pack and unpack a message in C++. // -// Foo foo = ...; -// Any any; -// any.PackFrom(foo); -// ... -// if (any.UnpackTo(&foo)) { -// ... -// } +// Foo foo = ...; +// Any any; +// any.PackFrom(foo); +// ... +// if (any.UnpackTo(&foo)) { +// ... +// } // // Example 2: Pack and unpack a message in Java. // -// Foo foo = ...; -// Any any = Any.pack(foo); -// ... -// if (any.is(Foo.class)) { -// foo = any.unpack(Foo.class); -// } -// -// Example 3: Pack and unpack a message in Python. -// -// foo = Foo(...) -// any = Any() -// any.Pack(foo) -// ... -// if any.Is(Foo.DESCRIPTOR): -// any.Unpack(foo) -// ... -// -// Example 4: Pack and unpack a message in Go -// -// foo := &pb.Foo{...} -// any, err := anypb.New(foo) -// if err != nil { -// ... -// } -// ... -// foo := &pb.Foo{} -// if err := any.UnmarshalTo(foo); err != nil { -// ... -// } +// Foo foo = ...; +// Any any = Any.pack(foo); +// ... +// if (any.is(Foo.class)) { +// foo = any.unpack(Foo.class); +// } +// // or ... +// if (any.isSameTypeAs(Foo.getDefaultInstance())) { +// foo = any.unpack(Foo.getDefaultInstance()); +// } +// +// Example 3: Pack and unpack a message in Python. +// +// foo = Foo(...) +// any = Any() +// any.Pack(foo) +// ... +// if any.Is(Foo.DESCRIPTOR): +// any.Unpack(foo) +// ... +// +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } +// ... +// foo := &pb.Foo{} +// if err := any.UnmarshalTo(foo); err != nil { +// ... +// } // // The pack methods provided by protobuf library will by default use // 'type.googleapis.com/full.type.name' as the type URL and the unpack @@ -182,35 +182,33 @@ import ( // in the type URL, for example "foo.bar.com/x/y.z" will yield type // name "y.z". // -// // JSON // ==== // The JSON representation of an `Any` value uses the regular // representation of the deserialized, embedded message, with an // additional field `@type` which contains the type URL. Example: // -// package google.profile; -// message Person { -// string first_name = 1; -// string last_name = 2; -// } +// package google.profile; +// message Person { +// string first_name = 1; +// string last_name = 2; +// } // -// { -// "@type": "type.googleapis.com/google.profile.Person", -// "firstName": , -// "lastName": -// } +// { +// "@type": "type.googleapis.com/google.profile.Person", +// "firstName": , +// "lastName": +// } // // If the embedded message type is well-known and has a custom JSON // representation, that representation will be embedded adding a field // `value` which holds the custom JSON in addition to the `@type` // field. Example (for message [google.protobuf.Duration][]): // -// { -// "@type": "type.googleapis.com/google.protobuf.Duration", -// "value": "1.212s" -// } -// +// { +// "@type": "type.googleapis.com/google.protobuf.Duration", +// "value": "1.212s" +// } type Any struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -228,14 +226,14 @@ type Any struct { // scheme `http`, `https`, or no scheme, one can optionally set up a type // server that maps type URLs to message definitions as follows: // - // * If no scheme is provided, `https` is assumed. - // * An HTTP GET on the URL must yield a [google.protobuf.Type][] - // value in binary format, or produce an error. - // * Applications are allowed to cache lookup results based on the - // URL, or have them precompiled into a binary to avoid any - // lookup. Therefore, binary compatibility needs to be preserved - // on changes to types. (Use versioned type names to manage - // breaking changes.) + // - If no scheme is provided, `https` is assumed. + // - An HTTP GET on the URL must yield a [google.protobuf.Type][] + // value in binary format, or produce an error. + // - Applications are allowed to cache lookup results based on the + // URL, or have them precompiled into a binary to avoid any + // lookup. Therefore, binary compatibility needs to be preserved + // on changes to types. (Use versioned type names to manage + // breaking changes.) // // Note: this functionality is not currently available in the official // protobuf release, and it is not used for type URLs beginning with @@ -243,7 +241,6 @@ type Any struct { // // Schemes other than `http`, `https` (or the empty scheme) might be // used with implementation specific semantics. - // TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` // Must be a valid serialized protocol buffer of the above specified type. Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` diff --git a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go index a583ca2f6c771..df709a8dd4c25 100644 --- a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go +++ b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go @@ -35,8 +35,7 @@ // // The Duration message represents a signed span of time. // -// -// Conversion to a Go Duration +// # Conversion to a Go Duration // // The AsDuration method can be used to convert a Duration message to a // standard Go time.Duration value: @@ -65,15 +64,13 @@ // the resulting value to the closest representable value (e.g., math.MaxInt64 // for positive overflow and math.MinInt64 for negative overflow). // -// -// Conversion from a Go Duration +// # Conversion from a Go Duration // // The durationpb.New function can be used to construct a Duration message // from a standard Go time.Duration value: // // dur := durationpb.New(d) // ... // make use of d as a *durationpb.Duration -// package durationpb import ( @@ -96,43 +93,43 @@ import ( // // Example 1: Compute Duration from two Timestamps in pseudo code. // -// Timestamp start = ...; -// Timestamp end = ...; -// Duration duration = ...; +// Timestamp start = ...; +// Timestamp end = ...; +// Duration duration = ...; // -// duration.seconds = end.seconds - start.seconds; -// duration.nanos = end.nanos - start.nanos; +// duration.seconds = end.seconds - start.seconds; +// duration.nanos = end.nanos - start.nanos; // -// if (duration.seconds < 0 && duration.nanos > 0) { -// duration.seconds += 1; -// duration.nanos -= 1000000000; -// } else if (duration.seconds > 0 && duration.nanos < 0) { -// duration.seconds -= 1; -// duration.nanos += 1000000000; -// } +// if (duration.seconds < 0 && duration.nanos > 0) { +// duration.seconds += 1; +// duration.nanos -= 1000000000; +// } else if (duration.seconds > 0 && duration.nanos < 0) { +// duration.seconds -= 1; +// duration.nanos += 1000000000; +// } // // Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. // -// Timestamp start = ...; -// Duration duration = ...; -// Timestamp end = ...; +// Timestamp start = ...; +// Duration duration = ...; +// Timestamp end = ...; // -// end.seconds = start.seconds + duration.seconds; -// end.nanos = start.nanos + duration.nanos; +// end.seconds = start.seconds + duration.seconds; +// end.nanos = start.nanos + duration.nanos; // -// if (end.nanos < 0) { -// end.seconds -= 1; -// end.nanos += 1000000000; -// } else if (end.nanos >= 1000000000) { -// end.seconds += 1; -// end.nanos -= 1000000000; -// } +// if (end.nanos < 0) { +// end.seconds -= 1; +// end.nanos += 1000000000; +// } else if (end.nanos >= 1000000000) { +// end.seconds += 1; +// end.nanos -= 1000000000; +// } // // Example 3: Compute Duration from datetime.timedelta in Python. // -// td = datetime.timedelta(days=3, minutes=10) -// duration = Duration() -// duration.FromTimedelta(td) +// td = datetime.timedelta(days=3, minutes=10) +// duration = Duration() +// duration.FromTimedelta(td) // // # JSON Mapping // @@ -143,8 +140,6 @@ import ( // encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should // be expressed in JSON format as "3.000000001s", and 3 seconds and 1 // microsecond should be expressed in JSON format as "3.000001s". -// -// type Duration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go b/vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go index e7fcea31f6279..9a7277ba394ce 100644 --- a/vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go +++ b/vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go @@ -44,11 +44,9 @@ import ( // empty messages in your APIs. A typical example is to use it as the request // or the response type of an API method. For instance: // -// service Foo { -// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); -// } -// -// The JSON representation for `Empty` is empty JSON object `{}`. +// service Foo { +// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); +// } type Empty struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go index c9ae92132aade..81511a3363ee0 100644 --- a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go +++ b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go @@ -36,8 +36,7 @@ // The Timestamp message represents a timestamp, // an instant in time since the Unix epoch (January 1st, 1970). // -// -// Conversion to a Go Time +// # Conversion to a Go Time // // The AsTime method can be used to convert a Timestamp message to a // standard Go time.Time value in UTC: @@ -59,8 +58,7 @@ // ... // handle error // } // -// -// Conversion from a Go Time +// # Conversion from a Go Time // // The timestamppb.New function can be used to construct a Timestamp message // from a standard Go time.Time value: @@ -72,7 +70,6 @@ // // ts := timestamppb.Now() // ... // make use of ts as a *timestamppb.Timestamp -// package timestamppb import ( @@ -101,52 +98,50 @@ import ( // // Example 1: Compute Timestamp from POSIX `time()`. // -// Timestamp timestamp; -// timestamp.set_seconds(time(NULL)); -// timestamp.set_nanos(0); +// Timestamp timestamp; +// timestamp.set_seconds(time(NULL)); +// timestamp.set_nanos(0); // // Example 2: Compute Timestamp from POSIX `gettimeofday()`. // -// struct timeval tv; -// gettimeofday(&tv, NULL); +// struct timeval tv; +// gettimeofday(&tv, NULL); // -// Timestamp timestamp; -// timestamp.set_seconds(tv.tv_sec); -// timestamp.set_nanos(tv.tv_usec * 1000); +// Timestamp timestamp; +// timestamp.set_seconds(tv.tv_sec); +// timestamp.set_nanos(tv.tv_usec * 1000); // // Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. // -// FILETIME ft; -// GetSystemTimeAsFileTime(&ft); -// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +// FILETIME ft; +// GetSystemTimeAsFileTime(&ft); +// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // -// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z -// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. -// Timestamp timestamp; -// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); -// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); +// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z +// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. +// Timestamp timestamp; +// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); +// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); // // Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. // -// long millis = System.currentTimeMillis(); -// -// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) -// .setNanos((int) ((millis % 1000) * 1000000)).build(); +// long millis = System.currentTimeMillis(); // +// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) +// .setNanos((int) ((millis % 1000) * 1000000)).build(); // // Example 5: Compute Timestamp from Java `Instant.now()`. // -// Instant now = Instant.now(); -// -// Timestamp timestamp = -// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) -// .setNanos(now.getNano()).build(); +// Instant now = Instant.now(); // +// Timestamp timestamp = +// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) +// .setNanos(now.getNano()).build(); // // Example 6: Compute Timestamp from current time in Python. // -// timestamp = Timestamp() -// timestamp.GetCurrentTime() +// timestamp = Timestamp() +// timestamp.GetCurrentTime() // // # JSON Mapping // @@ -172,10 +167,8 @@ import ( // [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with // the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use // the Joda Time's [`ISODateTimeFormat.dateTime()`]( -// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() // ) to obtain a formatter capable of generating timestamps in this format. -// -// type Timestamp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/vendor/modules.txt b/vendor/modules.txt index 89437845d6d1e..3fe6386befd6c 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -53,30 +53,60 @@ github.com/Azure/go-autorest/logger # github.com/Azure/go-autorest/tracing v0.6.0 ## explicit; go 1.12 github.com/Azure/go-autorest/tracing +# github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 +## explicit; go 1.13 +github.com/ProtonMail/go-crypto/bitcurves +github.com/ProtonMail/go-crypto/brainpool +github.com/ProtonMail/go-crypto/eax +github.com/ProtonMail/go-crypto/internal/byteutil +github.com/ProtonMail/go-crypto/ocb +github.com/ProtonMail/go-crypto/openpgp +github.com/ProtonMail/go-crypto/openpgp/aes/keywrap +github.com/ProtonMail/go-crypto/openpgp/armor +github.com/ProtonMail/go-crypto/openpgp/ecdh +github.com/ProtonMail/go-crypto/openpgp/ecdsa +github.com/ProtonMail/go-crypto/openpgp/eddsa +github.com/ProtonMail/go-crypto/openpgp/elgamal +github.com/ProtonMail/go-crypto/openpgp/errors +github.com/ProtonMail/go-crypto/openpgp/internal/algorithm +github.com/ProtonMail/go-crypto/openpgp/internal/ecc +github.com/ProtonMail/go-crypto/openpgp/internal/encoding +github.com/ProtonMail/go-crypto/openpgp/packet +github.com/ProtonMail/go-crypto/openpgp/s2k # github.com/agext/levenshtein v1.2.3 ## explicit github.com/agext/levenshtein -# github.com/agiledragon/gomonkey/v2 v2.9.0 -## explicit; go 1.14 -github.com/agiledragon/gomonkey/v2 -github.com/agiledragon/gomonkey/v2/creflect # github.com/apparentlymart/go-textseg v1.0.0 ## explicit github.com/apparentlymart/go-textseg/textseg -# github.com/apparentlymart/go-textseg/v13 v13.0.0 +# github.com/apparentlymart/go-textseg/v15 v15.0.0 ## explicit; go 1.16 -github.com/apparentlymart/go-textseg/v13/textseg -# github.com/btubbs/datetime v0.1.0 +github.com/apparentlymart/go-textseg/v15/textseg +# github.com/btubbs/datetime v0.1.1 ## explicit github.com/btubbs/datetime +# github.com/cloudflare/circl v1.3.3 +## explicit; go 1.19 +github.com/cloudflare/circl/dh/x25519 +github.com/cloudflare/circl/dh/x448 +github.com/cloudflare/circl/ecc/goldilocks +github.com/cloudflare/circl/internal/conv +github.com/cloudflare/circl/internal/sha3 +github.com/cloudflare/circl/math +github.com/cloudflare/circl/math/fp25519 +github.com/cloudflare/circl/math/fp448 +github.com/cloudflare/circl/math/mlsbset +github.com/cloudflare/circl/sign +github.com/cloudflare/circl/sign/ed25519 +github.com/cloudflare/circl/sign/ed448 # github.com/dave/jennifer v1.6.0 ## explicit; go 1.19 github.com/dave/jennifer/jen # github.com/davecgh/go-spew v1.1.1 ## explicit github.com/davecgh/go-spew/spew -# github.com/fatih/color v1.13.0 -## explicit; go 1.13 +# github.com/fatih/color v1.15.0 +## explicit; go 1.17 github.com/fatih/color # github.com/gofrs/uuid v4.4.0+incompatible ## explicit @@ -84,7 +114,7 @@ github.com/gofrs/uuid # github.com/golang-jwt/jwt/v4 v4.5.0 ## explicit; go 1.16 github.com/golang-jwt/jwt/v4 -# github.com/golang/protobuf v1.5.2 +# github.com/golang/protobuf v1.5.3 ## explicit; go 1.9 github.com/golang/protobuf/jsonpb github.com/golang/protobuf/proto @@ -100,13 +130,13 @@ github.com/google/go-cmp/cmp/internal/diff github.com/google/go-cmp/cmp/internal/flags github.com/google/go-cmp/cmp/internal/function github.com/google/go-cmp/cmp/internal/value -# github.com/google/uuid v1.3.0 +# github.com/google/uuid v1.3.1 ## explicit github.com/google/uuid # github.com/hashicorp/errwrap v1.1.0 ## explicit github.com/hashicorp/errwrap -# github.com/hashicorp/go-azure-helpers v0.59.0 +# github.com/hashicorp/go-azure-helpers v0.61.0 ## explicit; go 1.19 github.com/hashicorp/go-azure-helpers/authentication github.com/hashicorp/go-azure-helpers/eventhub @@ -126,7 +156,7 @@ github.com/hashicorp/go-azure-helpers/resourcemanager/tags github.com/hashicorp/go-azure-helpers/resourcemanager/zones github.com/hashicorp/go-azure-helpers/sender github.com/hashicorp/go-azure-helpers/storage -# github.com/hashicorp/go-azure-sdk v0.20230825.1030756 +# github.com/hashicorp/go-azure-sdk v0.20230918.1115907 ## explicit; go 1.19 github.com/hashicorp/go-azure-sdk/resource-manager/aad/2021-05-01/domainservices github.com/hashicorp/go-azure-sdk/resource-manager/aadb2c/2021-04-01-preview @@ -186,6 +216,7 @@ github.com/hashicorp/go-azure-sdk/resource-manager/apimanagement/2021-08-01/user github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/configurationstores github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/deletedconfigurationstores github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/operations +github.com/hashicorp/go-azure-sdk/resource-manager/appconfiguration/2023-03-01/replicas github.com/hashicorp/go-azure-sdk/resource-manager/applicationinsights/2020-11-20/workbooktemplatesapis github.com/hashicorp/go-azure-sdk/resource-manager/applicationinsights/2022-04-01/workbooksapis github.com/hashicorp/go-azure-sdk/resource-manager/applicationinsights/2022-06-15/webtestsapis @@ -269,12 +300,12 @@ github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/images github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-01/proximityplacementgroups github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/diskaccesses github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/diskencryptionsets -github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/disks github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-02/snapshots github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/galleries github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/galleryapplications github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/galleryapplicationversions github.com/hashicorp/go-azure-sdk/resource-manager/compute/2022-03-03/gallerysharingupdate +github.com/hashicorp/go-azure-sdk/resource-manager/compute/2023-04-02/disks github.com/hashicorp/go-azure-sdk/resource-manager/confidentialledger/2022-05-13/confidentialledger github.com/hashicorp/go-azure-sdk/resource-manager/consumption/2019-10-01/budgets github.com/hashicorp/go-azure-sdk/resource-manager/containerapps/2023-05-01/certificates @@ -330,10 +361,10 @@ github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-04-02-p github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-04-02-preview/managedclusters github.com/hashicorp/go-azure-sdk/resource-manager/containerservice/2023-04-02-preview/snapshots github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/cosmosdb -github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/managedcassandras github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-05-15/sqldedicatedgateway github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2022-11-15/mongorbacs github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/cosmosdb +github.com/hashicorp/go-azure-sdk/resource-manager/cosmosdb/2023-04-15/managedcassandras github.com/hashicorp/go-azure-sdk/resource-manager/costmanagement/2021-10-01/exports github.com/hashicorp/go-azure-sdk/resource-manager/costmanagement/2022-06-01-preview/scheduledactions github.com/hashicorp/go-azure-sdk/resource-manager/costmanagement/2022-10-01/scheduledactions @@ -575,25 +606,27 @@ github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2020-01-01/serverkeys github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2020-01-01/serverstart github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2020-01-01/serverstop github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2020-01-01/serverupgrade -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01 -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/backups -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/checknameavailability -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/configurations -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/databases -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/firewallrules -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/getprivatednszonesuffix -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/locationbasedcapabilities -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverfailover -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverrestart -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/servers -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstart -github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2021-05-01/serverstop +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01 github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/azureadadministrators +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/backups +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/checknameavailability +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/configurations +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/databases +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/firewallrules +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/getprivatednszonesuffix +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/locationbasedcapabilities +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/logfiles +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverfailover +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverrestart +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/servers +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstart +github.com/hashicorp/go-azure-sdk/resource-manager/mysql/2022-01-01/serverstop github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/capacitypools github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/netappaccounts github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/snapshotpolicy github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/snapshots github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumegroups +github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumequotarules github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumes github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-05-01/volumesreplication github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01 @@ -706,6 +739,7 @@ github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/webapplica github.com/hashicorp/go-azure-sdk/resource-manager/network/2023-04-01/webcategories github.com/hashicorp/go-azure-sdk/resource-manager/networkfunction/2022-11-01/azuretrafficcollectors github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/monitors +github.com/hashicorp/go-azure-sdk/resource-manager/newrelic/2022-07-01/tagrules github.com/hashicorp/go-azure-sdk/resource-manager/nginx/2022-08-01 github.com/hashicorp/go-azure-sdk/resource-manager/nginx/2022-08-01/nginxcertificate github.com/hashicorp/go-azure-sdk/resource-manager/nginx/2022-08-01/nginxconfiguration @@ -795,10 +829,11 @@ github.com/hashicorp/go-azure-sdk/resource-manager/redis/2023-04-01/patchschedul github.com/hashicorp/go-azure-sdk/resource-manager/redis/2023-04-01/privateendpointconnections github.com/hashicorp/go-azure-sdk/resource-manager/redis/2023-04-01/privatelinkresources github.com/hashicorp/go-azure-sdk/resource-manager/redis/2023-04-01/redis -github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/databases -github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2022-01-01/redisenterprise +github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/databases +github.com/hashicorp/go-azure-sdk/resource-manager/redisenterprise/2023-07-01/redisenterprise github.com/hashicorp/go-azure-sdk/resource-manager/relay/2021-11-01/hybridconnections github.com/hashicorp/go-azure-sdk/resource-manager/relay/2021-11-01/namespaces +github.com/hashicorp/go-azure-sdk/resource-manager/resourceconnector/2022-10-27/appliances github.com/hashicorp/go-azure-sdk/resource-manager/resources/2020-05-01/managementlocks github.com/hashicorp/go-azure-sdk/resource-manager/resources/2020-10-01/deploymentscripts github.com/hashicorp/go-azure-sdk/resource-manager/resources/2021-07-01/features @@ -808,6 +843,7 @@ github.com/hashicorp/go-azure-sdk/resource-manager/search/2022-09-01/adminkeys github.com/hashicorp/go-azure-sdk/resource-manager/search/2022-09-01/querykeys github.com/hashicorp/go-azure-sdk/resource-manager/search/2022-09-01/services github.com/hashicorp/go-azure-sdk/resource-manager/search/2022-09-01/sharedprivatelinkresources +github.com/hashicorp/go-azure-sdk/resource-manager/security/2021-06-01/assessmentsmetadata github.com/hashicorp/go-azure-sdk/resource-manager/security/2023-01-01/pricings github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/alertrules github.com/hashicorp/go-azure-sdk/resource-manager/securityinsights/2022-10-01-preview/automationrules @@ -926,16 +962,18 @@ github.com/hashicorp/go-cty/cty/gocty github.com/hashicorp/go-cty/cty/json github.com/hashicorp/go-cty/cty/msgpack github.com/hashicorp/go-cty/cty/set -# github.com/hashicorp/go-hclog v1.4.0 +# github.com/hashicorp/go-hclog v1.5.0 ## explicit; go 1.13 github.com/hashicorp/go-hclog # github.com/hashicorp/go-multierror v1.1.1 ## explicit; go 1.13 github.com/hashicorp/go-multierror -# github.com/hashicorp/go-plugin v1.4.8 +# github.com/hashicorp/go-plugin v1.5.1 ## explicit; go 1.17 github.com/hashicorp/go-plugin +github.com/hashicorp/go-plugin/internal/cmdrunner github.com/hashicorp/go-plugin/internal/plugin +github.com/hashicorp/go-plugin/runner # github.com/hashicorp/go-retryablehttp v0.7.4 ## explicit; go 1.13 github.com/hashicorp/go-retryablehttp @@ -945,8 +983,8 @@ github.com/hashicorp/go-uuid # github.com/hashicorp/go-version v1.6.0 ## explicit github.com/hashicorp/go-version -# github.com/hashicorp/hc-install v0.5.0 -## explicit; go 1.16 +# github.com/hashicorp/hc-install v0.6.0 +## explicit; go 1.18 github.com/hashicorp/hc-install github.com/hashicorp/hc-install/checkpoint github.com/hashicorp/hc-install/errors @@ -961,7 +999,7 @@ github.com/hashicorp/hc-install/product github.com/hashicorp/hc-install/releases github.com/hashicorp/hc-install/src github.com/hashicorp/hc-install/version -# github.com/hashicorp/hcl/v2 v2.16.2 +# github.com/hashicorp/hcl/v2 v2.18.0 ## explicit; go 1.18 github.com/hashicorp/hcl/v2 github.com/hashicorp/hcl/v2/ext/customdecode @@ -974,15 +1012,15 @@ github.com/hashicorp/hcl2/hclwrite # github.com/hashicorp/logutils v1.0.0 ## explicit github.com/hashicorp/logutils -# github.com/hashicorp/terraform-exec v0.18.1 +# github.com/hashicorp/terraform-exec v0.19.0 ## explicit; go 1.18 github.com/hashicorp/terraform-exec/internal/version github.com/hashicorp/terraform-exec/tfexec -# github.com/hashicorp/terraform-json v0.16.0 +# github.com/hashicorp/terraform-json v0.17.1 ## explicit; go 1.18 github.com/hashicorp/terraform-json -# github.com/hashicorp/terraform-plugin-go v0.14.3 -## explicit; go 1.18 +# github.com/hashicorp/terraform-plugin-go v0.19.0 +## explicit; go 1.20 github.com/hashicorp/terraform-plugin-go/internal/logging github.com/hashicorp/terraform-plugin-go/tfprotov5 github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/diag @@ -999,18 +1037,19 @@ github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6 github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/toproto github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server github.com/hashicorp/terraform-plugin-go/tftypes -# github.com/hashicorp/terraform-plugin-log v0.8.0 -## explicit; go 1.18 +# github.com/hashicorp/terraform-plugin-log v0.9.0 +## explicit; go 1.19 github.com/hashicorp/terraform-plugin-log/internal/fieldutils github.com/hashicorp/terraform-plugin-log/internal/hclogutils github.com/hashicorp/terraform-plugin-log/internal/logging github.com/hashicorp/terraform-plugin-log/tflog github.com/hashicorp/terraform-plugin-log/tfsdklog -# github.com/hashicorp/terraform-plugin-sdk/v2 v2.26.1 -## explicit; go 1.19 +# github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0 +## explicit; go 1.20 github.com/hashicorp/terraform-plugin-sdk/v2/diag github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging +github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation @@ -1025,34 +1064,40 @@ github.com/hashicorp/terraform-plugin-sdk/v2/internal/tfdiags github.com/hashicorp/terraform-plugin-sdk/v2/meta github.com/hashicorp/terraform-plugin-sdk/v2/plugin github.com/hashicorp/terraform-plugin-sdk/v2/terraform -# github.com/hashicorp/terraform-plugin-testing v1.0.0 -## explicit; go 1.18 +# github.com/hashicorp/terraform-plugin-testing v1.5.1 +## explicit; go 1.19 +github.com/hashicorp/terraform-plugin-testing/config github.com/hashicorp/terraform-plugin-testing/helper/acctest github.com/hashicorp/terraform-plugin-testing/helper/resource github.com/hashicorp/terraform-plugin-testing/internal/addrs github.com/hashicorp/terraform-plugin-testing/internal/configs/configschema github.com/hashicorp/terraform-plugin-testing/internal/configs/hcl2shim +github.com/hashicorp/terraform-plugin-testing/internal/errorshim github.com/hashicorp/terraform-plugin-testing/internal/logging github.com/hashicorp/terraform-plugin-testing/internal/plugintest +github.com/hashicorp/terraform-plugin-testing/internal/teststep github.com/hashicorp/terraform-plugin-testing/internal/tfdiags +github.com/hashicorp/terraform-plugin-testing/plancheck github.com/hashicorp/terraform-plugin-testing/terraform -# github.com/hashicorp/terraform-registry-address v0.1.0 -## explicit; go 1.14 +github.com/hashicorp/terraform-plugin-testing/tfjsonpath +github.com/hashicorp/terraform-plugin-testing/tfversion +# github.com/hashicorp/terraform-registry-address v0.2.2 +## explicit; go 1.19 github.com/hashicorp/terraform-registry-address -# github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 -## explicit; go 1.12 +# github.com/hashicorp/terraform-svchost v0.1.1 +## explicit; go 1.19 github.com/hashicorp/terraform-svchost -# github.com/hashicorp/yamux v0.0.0-20210316155119-a95892c5f864 +# github.com/hashicorp/yamux v0.1.1 ## explicit; go 1.15 github.com/hashicorp/yamux # github.com/magodo/terraform-provider-azurerm-example-gen v0.0.0-20220407025246-3a3ee0ab24a8 ## explicit; go 1.16 github.com/magodo/terraform-provider-azurerm-example-gen/examplegen -# github.com/mattn/go-colorable v0.1.12 -## explicit; go 1.13 +# github.com/mattn/go-colorable v0.1.13 +## explicit; go 1.15 github.com/mattn/go-colorable -# github.com/mattn/go-isatty v0.0.14 -## explicit; go 1.12 +# github.com/mattn/go-isatty v0.0.19 +## explicit; go 1.15 github.com/mattn/go-isatty # github.com/mitchellh/copystructure v1.2.0 ## explicit; go 1.15 @@ -1075,8 +1120,8 @@ github.com/oklog/run # github.com/rickb777/date v1.12.5-0.20200422084442-6300e543c4d9 ## explicit; go 1.13 github.com/rickb777/date/period -# github.com/rickb777/plural v1.2.0 -## explicit +# github.com/rickb777/plural v1.4.1 +## explicit; go 1.17 github.com/rickb777/plural # github.com/sergi/go-diff v1.2.0 ## explicit; go 1.12 @@ -1120,16 +1165,16 @@ github.com/tombuildsstuff/kermit/version ## explicit github.com/vmihailenco/msgpack github.com/vmihailenco/msgpack/codes -# github.com/vmihailenco/msgpack/v4 v4.3.12 +# github.com/vmihailenco/msgpack/v5 v5.3.5 ## explicit; go 1.11 -github.com/vmihailenco/msgpack/v4 -github.com/vmihailenco/msgpack/v4/codes -# github.com/vmihailenco/tagparser v0.1.1 -## explicit; go 1.13 -github.com/vmihailenco/tagparser -github.com/vmihailenco/tagparser/internal -github.com/vmihailenco/tagparser/internal/parser -# github.com/zclconf/go-cty v1.13.1 +github.com/vmihailenco/msgpack/v5 +github.com/vmihailenco/msgpack/v5/msgpcode +# github.com/vmihailenco/tagparser/v2 v2.0.0 +## explicit; go 1.15 +github.com/vmihailenco/tagparser/v2 +github.com/vmihailenco/tagparser/v2/internal +github.com/vmihailenco/tagparser/v2/internal/parser +# github.com/zclconf/go-cty v1.14.0 ## explicit; go 1.18 github.com/zclconf/go-cty/cty github.com/zclconf/go-cty/cty/convert @@ -1139,69 +1184,73 @@ github.com/zclconf/go-cty/cty/function/stdlib github.com/zclconf/go-cty/cty/gocty github.com/zclconf/go-cty/cty/json github.com/zclconf/go-cty/cty/set -# golang.org/x/crypto v0.9.0 +# golang.org/x/crypto v0.13.0 ## explicit; go 1.17 +golang.org/x/crypto/argon2 +golang.org/x/crypto/blake2b golang.org/x/crypto/blowfish golang.org/x/crypto/cast5 golang.org/x/crypto/chacha20 golang.org/x/crypto/curve25519 golang.org/x/crypto/curve25519/internal/field golang.org/x/crypto/ed25519 +golang.org/x/crypto/hkdf golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 -golang.org/x/crypto/openpgp -golang.org/x/crypto/openpgp/armor -golang.org/x/crypto/openpgp/elgamal -golang.org/x/crypto/openpgp/errors -golang.org/x/crypto/openpgp/packet -golang.org/x/crypto/openpgp/s2k golang.org/x/crypto/pbkdf2 golang.org/x/crypto/pkcs12 golang.org/x/crypto/pkcs12/internal/rc2 +golang.org/x/crypto/sha3 golang.org/x/crypto/ssh golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -# golang.org/x/mod v0.8.0 +# golang.org/x/exp v0.0.0-20230905200255-921286631fa9 +## explicit; go 1.20 +golang.org/x/exp/constraints +# golang.org/x/mod v0.12.0 ## explicit; go 1.17 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/net v0.10.0 +# golang.org/x/net v0.15.0 ## explicit; go 1.17 golang.org/x/net/context -golang.org/x/net/context/ctxhttp golang.org/x/net/http/httpguts golang.org/x/net/http2 golang.org/x/net/http2/hpack golang.org/x/net/idna golang.org/x/net/internal/timeseries golang.org/x/net/trace -# golang.org/x/oauth2 v0.4.0 -## explicit; go 1.17 +# golang.org/x/oauth2 v0.12.0 +## explicit; go 1.18 golang.org/x/oauth2 golang.org/x/oauth2/internal -# golang.org/x/sys v0.8.0 +# golang.org/x/sys v0.12.0 ## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/execabs +golang.org/x/sys/internal/unsafeheader golang.org/x/sys/unix -# golang.org/x/text v0.9.0 +golang.org/x/sys/windows +# golang.org/x/text v0.13.0 ## explicit; go 1.17 golang.org/x/text/secure/bidirule golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm -# golang.org/x/tools v0.6.0 +# golang.org/x/tools v0.13.0 ## explicit; go 1.18 golang.org/x/tools/go/ast/astutil golang.org/x/tools/go/gcexportdata golang.org/x/tools/go/internal/packagesdriver golang.org/x/tools/go/packages +golang.org/x/tools/go/types/objectpath golang.org/x/tools/imports golang.org/x/tools/internal/event golang.org/x/tools/internal/event/core golang.org/x/tools/internal/event/keys golang.org/x/tools/internal/event/label +golang.org/x/tools/internal/event/tag golang.org/x/tools/internal/fastwalk golang.org/x/tools/internal/gcimporter golang.org/x/tools/internal/gocommand @@ -1212,7 +1261,7 @@ golang.org/x/tools/internal/pkgbits golang.org/x/tools/internal/tokeninternal golang.org/x/tools/internal/typeparams golang.org/x/tools/internal/typesinternal -# google.golang.org/appengine v1.6.7 +# google.golang.org/appengine v1.6.8 ## explicit; go 1.11 google.golang.org/appengine google.golang.org/appengine/datastore @@ -1227,11 +1276,11 @@ google.golang.org/appengine/internal/modules google.golang.org/appengine/internal/remote_api google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/urlfetch -# google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f +# google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d ## explicit; go 1.19 google.golang.org/genproto/googleapis/rpc/status -# google.golang.org/grpc v1.53.0 -## explicit; go 1.17 +# google.golang.org/grpc v1.58.0 +## explicit; go 1.19 google.golang.org/grpc google.golang.org/grpc/attributes google.golang.org/grpc/backoff @@ -1263,6 +1312,7 @@ google.golang.org/grpc/internal/grpclog google.golang.org/grpc/internal/grpcrand google.golang.org/grpc/internal/grpcsync google.golang.org/grpc/internal/grpcutil +google.golang.org/grpc/internal/idle google.golang.org/grpc/internal/metadata google.golang.org/grpc/internal/pretty google.golang.org/grpc/internal/resolver @@ -1278,13 +1328,14 @@ google.golang.org/grpc/keepalive google.golang.org/grpc/metadata google.golang.org/grpc/peer google.golang.org/grpc/reflection +google.golang.org/grpc/reflection/grpc_reflection_v1 google.golang.org/grpc/reflection/grpc_reflection_v1alpha google.golang.org/grpc/resolver google.golang.org/grpc/serviceconfig google.golang.org/grpc/stats google.golang.org/grpc/status google.golang.org/grpc/tap -# google.golang.org/protobuf v1.28.1 +# google.golang.org/protobuf v1.31.0 ## explicit; go 1.11 google.golang.org/protobuf/encoding/protojson google.golang.org/protobuf/encoding/prototext @@ -1322,7 +1373,7 @@ google.golang.org/protobuf/types/known/timestamppb # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# software.sslmate.com/src/go-pkcs12 v0.2.0 -## explicit; go 1.15 +# software.sslmate.com/src/go-pkcs12 v0.2.1 +## explicit; go 1.19 software.sslmate.com/src/go-pkcs12 software.sslmate.com/src/go-pkcs12/internal/rc2 diff --git a/vendor/software.sslmate.com/src/go-pkcs12/pkcs12.go b/vendor/software.sslmate.com/src/go-pkcs12/pkcs12.go index ba6f6fb5c6f8f..2fb3d28c16254 100644 --- a/vendor/software.sslmate.com/src/go-pkcs12/pkcs12.go +++ b/vendor/software.sslmate.com/src/go-pkcs12/pkcs12.go @@ -27,6 +27,7 @@ import ( "encoding/hex" "encoding/pem" "errors" + "fmt" "io" ) @@ -138,8 +139,8 @@ func unmarshal(in []byte, out interface{}) error { // // Deprecated: ToPEM creates invalid PEM blocks (private keys // are encoded as raw RSA or EC private keys rather than PKCS#8 despite being -// labeled "PRIVATE KEY"). To decode a PKCS#12 file, use DecodeChain instead, -// and use the encoding/pem package to convert to PEM if necessary. +// labeled "PRIVATE KEY"). To decode a PKCS#12 file, use [DecodeChain] instead, +// and use the [encoding/pem] package to convert to PEM if necessary. func ToPEM(pfxData []byte, password string) ([]*pem.Block, error) { encodedPassword, err := bmpStringZeroTerminated(password) if err != nil { @@ -248,7 +249,7 @@ func convertAttribute(attribute *pkcs12Attribute) (key, value string, err error) // Decode extracts a certificate and private key from pfxData, which must be a DER-encoded PKCS#12 file. This function // assumes that there is only one certificate and only one private key in the // pfxData. Since PKCS#12 files often contain more than one certificate, you -// probably want to use DecodeChain instead. +// probably want to use [DecodeChain] instead. func Decode(pfxData []byte, password string) (privateKey interface{}, certificate *x509.Certificate, err error) { var caCerts []*x509.Certificate privateKey, certificate, caCerts, err = DecodeChain(pfxData, password) @@ -403,7 +404,7 @@ func getSafeContents(p12Data, password []byte, expectedItems int) (bags []safeBa } if len(authenticatedSafe) != expectedItems { - return nil, nil, NotImplementedError("expected exactly two items in the authenticated safe") + return nil, nil, NotImplementedError(fmt.Sprintf("expected exactly %d items in the authenticated safe", expectedItems)) } for _, ci := range authenticatedSafe { @@ -445,11 +446,11 @@ func getSafeContents(p12Data, password []byte, expectedItems int) (bags []safeBa // // The private key is encrypted with the provided password, but due to the // weak encryption primitives used by PKCS#12, it is RECOMMENDED that you -// specify a hard-coded password (such as pkcs12.DefaultPassword) and protect +// specify a hard-coded password (such as [DefaultPassword]) and protect // the resulting pfxData using other means. // // The rand argument is used to provide entropy for the encryption, and -// can be set to rand.Reader from the crypto/rand package. +// can be set to [crypto/rand.Reader]. // // Encode emulates the behavior of OpenSSL's PKCS12_create: it creates two // SafeContents: one that's encrypted with RC2 and contains the certificates, @@ -546,11 +547,11 @@ func Encode(rand io.Reader, privateKey interface{}, certificate *x509.Certificat // allow it to be used as a Java TrustStore in Java 1.8 and newer. // // Due to the weak encryption primitives used by PKCS#12, it is RECOMMENDED that -// you specify a hard-coded password (such as pkcs12.DefaultPassword) and protect +// you specify a hard-coded password (such as [DefaultPassword]) and protect // the resulting pfxData using other means. // // The rand argument is used to provide entropy for the encryption, and -// can be set to rand.Reader from the crypto/rand package. +// can be set to [crypto/rand.Reader]. // // EncodeTrustStore creates a single SafeContents that's encrypted with RC2 // and contains the certificates. @@ -559,7 +560,7 @@ func Encode(rand io.Reader, privateKey interface{}, certificate *x509.Certificat // within the resulting pfxData. If certificates share a Subject, then the // resulting Friendly Names (Aliases) will be identical, which Java may treat as // the same entry when used as a Java TrustStore, e.g. with `keytool`. To -// customize the Friendly Names, use EncodeTrustStoreEntries. +// customize the Friendly Names, use [EncodeTrustStoreEntries]. func EncodeTrustStore(rand io.Reader, certs []*x509.Certificate, password string) (pfxData []byte, err error) { var certsWithFriendlyNames []TrustStoreEntry for _, cert := range certs { @@ -581,7 +582,7 @@ type TrustStoreEntry struct { // certificates (entries) to be trusted. The certificates will be marked with a // special OID that allow it to be used as a Java TrustStore in Java 1.8 and newer. // -// This is identical to EncodeTrustStore, but also allows for setting specific +// This is identical to [EncodeTrustStore], but also allows for setting specific // Friendly Names (Aliases) to be used per certificate, by specifying a slice // of TrustStoreEntry. // @@ -590,11 +591,11 @@ type TrustStoreEntry struct { // may treat as the same entry when used as a Java TrustStore, e.g. with `keytool`. // // Due to the weak encryption primitives used by PKCS#12, it is RECOMMENDED that -// you specify a hard-coded password (such as pkcs12.DefaultPassword) and protect +// you specify a hard-coded password (such as [DefaultPassword]) and protect // the resulting pfxData using other means. // // The rand argument is used to provide entropy for the encryption, and -// can be set to rand.Reader from the crypto/rand package. +// can be set to [crypto/rand.Reader]. // // EncodeTrustStoreEntries creates a single SafeContents that's encrypted // with RC2 and contains the certificates. diff --git a/website/allowed-subcategories b/website/allowed-subcategories index d0783de08aa60..cb7312f079d11 100644 --- a/website/allowed-subcategories +++ b/website/allowed-subcategories @@ -6,6 +6,7 @@ Analysis Services App Configuration App Service (Web Apps) Application Insights +Arc Resource Bridge ArcKubernetes Attestation Authorization diff --git a/website/docs/d/app_configuration.html.markdown b/website/docs/d/app_configuration.html.markdown index a61a8dd595283..8a042fd13f865 100644 --- a/website/docs/d/app_configuration.html.markdown +++ b/website/docs/d/app_configuration.html.markdown @@ -53,6 +53,8 @@ In addition to the Arguments listed above - the following Attributes are exporte * `purge_protection_enabled` - Whether Purge Protection is enabled. +* `replica` - One or more `replica` blocks as defined below. + * `secondary_read_key` - A `secondary_read_key` block as defined below containing the secondary read access key. * `secondary_write_key` - A `secondary_write_key` block as defined below containing the secondary write access key. @@ -83,6 +85,19 @@ A `primary_write_key` block exports the following: * `secret` - The Secret of the Access Key. +--- + +A `replica` block exports the following: + +* `id` - The ID of the App Configuration Replica. + +* `endpoint` - The URL of the App Configuration Replica. + +* `location` - The supported Azure location where the App Configuration Replica exists. + +* `name` - The name of the App Configuration Replica. + + --- A `secondary_read_key` block exports the following: diff --git a/website/docs/d/eventgrid_domain.html.markdown b/website/docs/d/eventgrid_domain.html.markdown index 08bd714a9ff0c..d1aac45cb5262 100644 --- a/website/docs/d/eventgrid_domain.html.markdown +++ b/website/docs/d/eventgrid_domain.html.markdown @@ -58,6 +58,8 @@ The following attributes are exported: * `tags` - A mapping of tags assigned to the EventGrid Domain. +* `identity` - An `identity` block as documented below. + --- A `input_mapping_fields` supports the following: @@ -92,6 +94,18 @@ A `inbound_ip_rule` block supports the following: * `action` - The action to take when the rule is matched. Possible values are `Allow`. +--- + +An `identity` block exports the following: + +* `type` - The type of Managed Service Identity that is configured on this EventGrid Domain. + +* `principal_id` - The Principal ID of the System Assigned Managed Service Identity. + +* `tenant_id` - The Tenant ID of the System Assigned Managed Service Identity. + +* `identity_ids` - The list of User Assigned Managed Identity IDs assigned to this EventGrid Domain. + ## Timeouts The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/language/resources/syntax#operation-timeouts) for certain actions: diff --git a/website/docs/d/function_app_host_keys.html.markdown b/website/docs/d/function_app_host_keys.html.markdown index 2f257bbaca9b5..82b531a834215 100644 --- a/website/docs/d/function_app_host_keys.html.markdown +++ b/website/docs/d/function_app_host_keys.html.markdown @@ -31,7 +31,7 @@ The following arguments are supported: ## Attributes Reference -The following arguments are supported: +In addition to the Arguments listed above - the following Attributes are exported: - `default_function_key` - Function App resource's default function key. diff --git a/website/docs/d/monitor_log_profile.html.markdown b/website/docs/d/monitor_log_profile.html.markdown index d1a5ae39bc4ce..5738f80faa687 100644 --- a/website/docs/d/monitor_log_profile.html.markdown +++ b/website/docs/d/monitor_log_profile.html.markdown @@ -10,6 +10,8 @@ description: |- Use this data source to access the properties of a Log Profile. +!> **NOTE:** Azure Log Profiles will be retired on 30th September 2026 and will be removed in v4.0 of the AzureRM Provider. More information on the deprecation can be found [in the Azure documentation](https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log?tabs=powershell#legacy-collection-methods). + ## Example Usage ```hcl diff --git a/website/docs/d/netapp_volume_quota_rule.html.markdown b/website/docs/d/netapp_volume_quota_rule.html.markdown new file mode 100644 index 0000000000000..24124145f370b --- /dev/null +++ b/website/docs/d/netapp_volume_quota_rule.html.markdown @@ -0,0 +1,52 @@ +--- +subcategory: "NetApp" +layout: "azurerm" +page_title: "Azure Resource Manager: Data Source: azurerm_netapp_volume_quota_rule" +description: |- + Gets information about an existing Volume Quota Rule. +--- + +# Data Source: azurerm_netapp_volume_quota_rule + +Use this data source to access information about an existing Volume Quota Rule. + +## Example Usage + +```hcl +data "azurerm_netapp_volume_quota_rule" "example" { + name = "exampleQuotaRule" + volume_id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg1/providers/Microsoft.NetApp/netAppAccounts/account1/capacityPools/pool1/volumes/vol1" +} + +output "id" { + value = data.azurerm_netapp_volume_quota_rule.example.id +} +``` + +## Arguments Reference + +The following arguments are supported: + +* `name` - (Required) The name of this Volume Quota Rule. + +* `volume_id` - (Required) The NetApp volume ID where the Volume Quota Rule is assigned to. + +## Attributes Reference + +In addition to the Arguments listed above - the following Attributes are exported: + +* `id` - The ID of the Volume Quota Rule. + +* `location` - The Azure Region where the Volume Quota Rule exists. + +* `quota_size_in_kib` - The quota size in kibibytes. + +* `quota_target` - The quota Target. + +* `quota_type` - The quota type. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/language/resources/syntax#operation-timeouts) for certain actions: + +* `read` - (Defaults to 5 minutes) Used when retrieving the Volume Quota Rule. diff --git a/website/docs/d/public_ip.html.markdown b/website/docs/d/public_ip.html.markdown index 311bd6967149b..2fd9d2b258490 100644 --- a/website/docs/d/public_ip.html.markdown +++ b/website/docs/d/public_ip.html.markdown @@ -102,6 +102,7 @@ output "public_ip_address" { ## Attributes Reference * `id` - The ID of the Public IP address. +* `allocation_method` - The allocation method for this IP address. Possible values are `Static` or `Dynamic`. * `domain_name_label` - The label for the Domain Name. * `idle_timeout_in_minutes` - Specifies the timeout for the TCP idle connection. * `ddos_protection_mode` - The DDoS protection mode of the public IP. @@ -109,6 +110,8 @@ output "public_ip_address" { * `fqdn` - Fully qualified domain name of the A DNS record associated with the public IP. This is the concatenation of the domainNameLabel and the regionalized DNS zone. * `ip_address` - The IP address value that was allocated. * `ip_version` - The IP version being used, for example `IPv4` or `IPv6`. +* `location` - The region that this public ip exists. +* `reverse_fqdn` - The fully qualified domain name that resolves to this public IP address. * `sku` - The SKU of the Public IP. * `ip_tags` - A mapping of tags to assigned to the resource. * `tags` - A mapping of tags to assigned to the resource. diff --git a/website/docs/guides/features-block.html.markdown b/website/docs/guides/features-block.html.markdown index 2e2c41ffaf368..36ace635190a5 100644 --- a/website/docs/guides/features-block.html.markdown +++ b/website/docs/guides/features-block.html.markdown @@ -62,6 +62,10 @@ provider "azurerm" { prevent_deletion_if_contains_resources = true } + subscription { + prevent_cancellation_on_destroy = false + } + template_deployment { delete_nested_items_during_deletion = true } @@ -185,6 +189,12 @@ The `resource_group` block supports the following: --- +The `subscription` block supports the following: + +* `prevent_cancellation_on_destroy` - (Optional) Should the `azurerm_subscription` resource prevent a subscription to be cancelled on destroy? Defaults to `false`. + +--- + The `template_deployment` block supports the following: * `delete_nested_items_during_deletion` - (Optional) Should the `azurerm_resource_group_template_deployment` resource attempt to delete resources that have been provisioned by the ARM Template, when the Resource Group Template Deployment is deleted? Defaults to `true`. diff --git a/website/docs/r/api_management.html.markdown b/website/docs/r/api_management.html.markdown index 7237a8c21b8f5..f26904cf1b504 100644 --- a/website/docs/r/api_management.html.markdown +++ b/website/docs/r/api_management.html.markdown @@ -97,7 +97,9 @@ The following arguments are supported: ~> **NOTE:** Custom public IPs are only supported on the `Premium` and `Developer` tiers when deployed in a virtual network. -* `public_network_access_enabled` - (Optional) Is public access to the service allowed?. Defaults to `true` +* `public_network_access_enabled` - (Optional) Is public access to the service allowed? Defaults to `true`. + +~> **NOTE:** This option is applicable only to the Management plane, not the API gateway or Developer portal. It is required to be `true` on the creation. * `virtual_network_type` - (Optional) The type of virtual network you want to use, valid values include: `None`, `External`, `Internal`. diff --git a/website/docs/r/app_configuration.html.markdown b/website/docs/r/app_configuration.html.markdown index 5921934f6c4bb..115b6f4cfab6f 100644 --- a/website/docs/r/app_configuration.html.markdown +++ b/website/docs/r/app_configuration.html.markdown @@ -127,6 +127,11 @@ resource "azurerm_app_configuration" "example" { identity_client_id = azurerm_user_assigned_identity.example.client_id } + replica { + name = "replica1" + location = "West US" + } + tags = { environment = "development" } @@ -164,6 +169,8 @@ The following arguments are supported: !> **Note:** Once Purge Protection has been enabled it's not possible to disable it. Deleting the App Configuration with Purge Protection enabled will schedule the App Configuration to be deleted (which will happen by Azure in the configured number of days). +* `replica` - (Optional) One or more `replica` blocks as defined below. + * `sku` - (Optional) The SKU name of the App Configuration. Possible values are `free` and `standard`. Defaults to `free`. * `soft_delete_retention_days` - (Optional) The number of days that items should be retained for once soft-deleted. This field only works for `standard` sku. This value can be between `1` and `7` days. Defaults to `7`. Changing this forces a new resource to be created. @@ -192,6 +199,14 @@ An `identity` block supports the following: --- +A `replica` block supports the following: + +* `location` - (Required) Specifies the supported Azure location where the replica exists. Changing this forces a new replica to be created. + +* `name` - (Required) Specifies the name of the replica. Changing this forces a new replica to be created. + +--- + ## Attributes Reference In addition to the Arguments listed above - the following Attributes are exported: @@ -220,6 +235,14 @@ An `identity` block exports the following: --- +A `replica` block exports the following: + +* `id` - The ID of the App Configuration Replica. + +* `endpoint` - The URL of the App Configuration Replica. + +--- + A `primary_read_key` block exports the following: * `connection_string` - The Connection String for this Access Key - comprising of the Endpoint, ID and Secret. @@ -262,10 +285,10 @@ A `secondary_write_key` block exports the following: The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/language/resources/syntax#operation-timeouts) for certain actions: -* `create` - (Defaults to 30 minutes) Used when creating the App Configuration. -* `update` - (Defaults to 30 minutes) Used when updating the App Configuration. +* `create` - (Defaults to 60 minutes) Used when creating the App Configuration. +* `update` - (Defaults to 60 minutes) Used when updating the App Configuration. * `read` - (Defaults to 5 minutes) Used when retrieving the App Configuration. -* `delete` - (Defaults to 30 minutes) Used when deleting the App Configuration. +* `delete` - (Defaults to 60 minutes) Used when deleting the App Configuration. ## Import diff --git a/website/docs/r/app_configuration_feature.html.markdown b/website/docs/r/app_configuration_feature.html.markdown index ca5ad6e2fa0ef..f753af25c0ee9 100644 --- a/website/docs/r/app_configuration_feature.html.markdown +++ b/website/docs/r/app_configuration_feature.html.markdown @@ -62,7 +62,7 @@ The following arguments are supported: * `name` - (Required) The name of the App Configuration Feature. Changing this forces a new resource to be created. -* `percentage_filter_value` - (Optional) A list of one or more numbers representing the value of the percentage required to enable this feature. +* `percentage_filter_value` - (Optional) A number representing the value of the percentage required to enable this feature. * `tags` - (Optional) A mapping of tags to assign to the resource. diff --git a/website/docs/r/application_gateway.html.markdown b/website/docs/r/application_gateway.html.markdown index 8e72e12aea0d8..6e03619470e6b 100644 --- a/website/docs/r/application_gateway.html.markdown +++ b/website/docs/r/application_gateway.html.markdown @@ -63,8 +63,8 @@ resource "azurerm_application_gateway" "network" { location = azurerm_resource_group.example.location sku { - name = "Standard_Small" - tier = "Standard" + name = "Standard_v2" + tier = "Standard_v2" capacity = 2 } @@ -105,6 +105,7 @@ resource "azurerm_application_gateway" "network" { request_routing_rule { name = local.request_routing_rule_name + priority = 9 rule_type = "Basic" http_listener_name = local.listener_name backend_address_pool_name = local.backend_address_pool_name @@ -453,6 +454,8 @@ A `sku` block supports the following: * `tier` - (Required) The Tier of the SKU to use for this Application Gateway. Possible values are `Standard`, `Standard_v2`, `WAF` and `WAF_v2`. +!> **NOTE:** The `Standard` and `WAF` SKU have been deprecated in favour of the `Standard_v2` and `WAF_v2` SKU. Please see the [Azure documentation](https://aka.ms/V1retirement) for more details. + * `capacity` - (Optional) The Capacity of the SKU to use for this Application Gateway. When using a V1 SKU this value must be between 1 and 32, and 1 to 125 for a V2 SKU. This property is optional if `autoscale_configuration` is set. --- @@ -507,6 +510,8 @@ A `ssl_profile` block supports the following: * `trusted_client_certificate_names` - (Optional) The name of the Trusted Client Certificate that will be used to authenticate requests from clients. * `verify_client_cert_issuer_dn` - (Optional) Should client certificate issuer DN be verified? Defaults to `false`. + +* `verify_client_certificate_revocation` - (Optional) Specify the method to check client certificate revocation status. Possible value is `OCSP`. * `ssl_policy` - (Optional) a `ssl_policy` block as defined below. diff --git a/website/docs/r/arc_resource_bridge_appliance.html.markdown b/website/docs/r/arc_resource_bridge_appliance.html.markdown new file mode 100644 index 0000000000000..fe3c3bee875cf --- /dev/null +++ b/website/docs/r/arc_resource_bridge_appliance.html.markdown @@ -0,0 +1,86 @@ +--- +subcategory: "Arc Resource Bridge" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_arc_resource_bridge_appliance" +description: |- + Manages an Arc Resource Bridge Appliance. +--- + +# azurerm_arc_resource_bridge_appliance + +Manages an Arc Resource Bridge Appliance. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_arc_resource_bridge_appliance" "example" { + name = "example-appliance" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name + distro = "AKSEdge" + infrastructure_provider = "VMWare" + + identity { + type = "SystemAssigned" + } + + tags = { + "hello" = "world" + } +} +``` + +## Arguments Reference + +The following arguments are supported: + +* `name` - (Required) The Name which should be used for this Arc Resource Bridge Appliance. Changing this forces a new resource to be created. + +* `resource_group_name` - (Required) Specifies the resource group where the Arc Resource Bridge Appliance exists. Changing this forces a new resource to be created. + +* `location` - (Required) The Azure Region where the Arc Resource Bridge Appliance should exist. Changing this forces a new resource to be created. + +* `distro` - (Required) Specifies a supported Fabric/Infrastructure for this Arc Resource Bridge Appliance. The possible value is `AKSEdge`. + +* `identity` - (Required) An `identity` block as defined below. Changing this forces a new resource to be created. + +* `infrastructure_provider`- (Required) The infrastructure provider about the connected Arc Resource Bridge Appliance. Possible values are `HCI`,`SCVMM` and `VMWare`. Changing this forces a new resource to be created. + +* `public_key_base64`- (Optional) The `public_key_base64` is an RSA public key in PKCS1 format encoded in base64. Changing this forces a new resource to be created. + +* `tags` - (Optional) A mapping of tags which should be assigned to the Arc Resource Bridge Appliance. + +--- + +An `identity` block supports the following: + +* `type` - (Required) Specifies the type of Managed Service Identity that should be configured on this Arc Resource Bridge Appliance. The only possible value is `SystemAssigned`. + + +## Attributes Reference + +In addition to the Arguments listed above - the following Attributes are exported: + +* `id` - The ID of the Arc Resource Bridge Appliance. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/language/resources/syntax#operation-timeouts) for certain actions: + +* `create` - (Defaults to 60 minutes) Used when creating the Arc Resource Bridge Appliance. +* `read` - (Defaults to 5 minutes) Used when retrieving the Arc Resource Bridge Appliance. +* `update` - (Defaults to 30 minutes) Used when updating the Arc Resource Bridge Appliance. +* `delete` - (Defaults to 30 minutes) Used when deleting the Arc Resource Bridge Appliance. + +## Import + +Arc Resource Bridge Appliance can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_arc_resource_bridge_appliance.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/providers/Microsoft.ResourceConnector/appliances/appliancesExample +``` diff --git a/website/docs/r/batch_pool.html.markdown b/website/docs/r/batch_pool.html.markdown index 1bdaaabdf46d5..4825dde53aeee 100644 --- a/website/docs/r/batch_pool.html.markdown +++ b/website/docs/r/batch_pool.html.markdown @@ -458,10 +458,12 @@ A `nfs_mount` block supports the following: A `network_configuration` block supports the following: -* `subnet_id` - (Required) The ARM resource identifier of the virtual network subnet which the compute nodes of the pool will join. Changing this forces a new resource to be created. +* `subnet_id` - (Optional) The ARM resource identifier of the virtual network subnet which the compute nodes of the pool will join. Changing this forces a new resource to be created. * `dynamic_vnet_assignment_scope` - (Optional) The scope of dynamic vnet assignment. Allowed values: `none`, `job`. Changing this forces a new resource to be created. +* `accelerated_networking_enabled` - (Optional) Whether to enable accelerated networking. Possible values are `true` and `false`. Defaults to `false`. Changing this forces a new resource to be created. + * `public_ips` - (Optional) A list of public IP ids that will be allocated to nodes. Changing this forces a new resource to be created. * `endpoint_configuration` - (Optional) A list of inbound NAT pools that can be used to address specific ports on an individual compute node externally. Set as documented in the inbound_nat_pools block below. Changing this forces a new resource to be created. diff --git a/website/docs/r/bot_channel_direct_line_speech.html.markdown b/website/docs/r/bot_channel_direct_line_speech.html.markdown index bf18c4dcc96ce..58d88286e99e4 100644 --- a/website/docs/r/bot_channel_direct_line_speech.html.markdown +++ b/website/docs/r/bot_channel_direct_line_speech.html.markdown @@ -55,6 +55,8 @@ The following arguments are supported: * `bot_name` - (Required) The name of the Bot Resource this channel will be associated with. Changing this forces a new resource to be created. +* `cognitive_account_id` - (Optional) The ID of the Cognitive Account this Bot Channel should be associated with. + * `cognitive_service_access_key` - (Required) The access key to access the Cognitive Service. * `cognitive_service_location` - (Required) Specifies the supported Azure location where the Cognitive Service resource exists. diff --git a/website/docs/r/bot_channel_directline.html.markdown b/website/docs/r/bot_channel_directline.html.markdown index d0bc738a32325..c97d9e82df997 100644 --- a/website/docs/r/bot_channel_directline.html.markdown +++ b/website/docs/r/bot_channel_directline.html.markdown @@ -58,8 +58,14 @@ A `site` block has the following properties: * `name` - (Required) The name of the site +* `user_upload_enabled` - (Optional) Is the user upload enabled for this site? Defaults to `true`. + * `enabled` - (Optional) Enables/Disables this site. Enabled by default Defaults to `true`. +* `endpoint_parameters_enabled` - (Optional) Is the endpoint parameters enabled for this site? + +* `storage_enabled` - (Optional) Is the storage site enabled for detailed logging? Defaults to `true`. + * `v1_allowed` - (Optional) Enables v1 of the Directline protocol for this site. Enabled by default Defaults to `true`. * `v3_allowed` - (Optional) Enables v3 of the Directline protocol for this site. Enabled by default Defaults to `true`. diff --git a/website/docs/r/bot_channel_ms_teams.html.markdown b/website/docs/r/bot_channel_ms_teams.html.markdown index da4a0ed1f0945..5a07b28500dfd 100644 --- a/website/docs/r/bot_channel_ms_teams.html.markdown +++ b/website/docs/r/bot_channel_ms_teams.html.markdown @@ -49,6 +49,8 @@ The following arguments are supported: * `calling_web_hook` - (Optional) Specifies the webhook for Microsoft Teams channel calls. +* `deployment_environment` - (Optional) The deployment environment for Microsoft Teams channel calls. Possible values are `CommercialDeployment` and `GCCModerateDeployment`. Defaults to `CommercialDeployment`. + * `enable_calling` - (Optional) Specifies whether to enable Microsoft Teams channel calls. This defaults to `false`. ## Attributes Reference diff --git a/website/docs/r/bot_channel_web_chat.html.markdown b/website/docs/r/bot_channel_web_chat.html.markdown index 832893676a3b1..29dad3ea34bf0 100644 --- a/website/docs/r/bot_channel_web_chat.html.markdown +++ b/website/docs/r/bot_channel_web_chat.html.markdown @@ -33,9 +33,9 @@ resource "azurerm_bot_channel_web_chat" "example" { location = azurerm_bot_channels_registration.example.location resource_group_name = azurerm_resource_group.example.name - site_names = [ - "TestSite", - ] + site { + name = "TestSite" + } } ``` @@ -49,7 +49,23 @@ The following arguments are supported: * `bot_name` - (Required) The name of the Bot Resource this channel will be associated with. Changing this forces a new resource to be created. -* `site_names` - (Required) A list of Web Chat Site names. +* `site_names` - (Optional) A list of Web Chat Site names. + +~> **NOTE:** `site_names` is deprecated and will be removed in favour of the property `site` in version 4.0 of the AzureRM Provider. + +* `site` - (Optional) A site represents a client application that you want to connect to your bot. Multiple `site` blocks may be defined as below + +--- + +A `site` block has the following properties: + +* `name` - (Required) The name of the site. + +* `user_upload_enabled` - (Optional) Is the user upload enabled for this site? Defaults to `true`. + +* `endpoint_parameters_enabled` - (Optional) Is the endpoint parameters enabled for this site? + +* `storage_enabled` - (Optional) Is the storage site enabled for detailed logging? Defaults to `true`. ## Attributes Reference diff --git a/website/docs/r/bot_service_azure_bot.html.markdown b/website/docs/r/bot_service_azure_bot.html.markdown index c0306afdb11ba..a68870375dd12 100644 --- a/website/docs/r/bot_service_azure_bot.html.markdown +++ b/website/docs/r/bot_service_azure_bot.html.markdown @@ -80,6 +80,8 @@ The following arguments are supported: * `microsoft_app_type` - (Optional) The Microsoft App Type for this Azure Bot Service. Possible values are `MultiTenant`, `SingleTenant` and `UserAssignedMSI`. Changing this forces a new resource to be created. +* `local_authentication_enabled` - (Optional) Is local authentication enabled? Defaults to `true`. + * `luis_app_ids` - (Optional) A list of LUIS App IDs to associate with this Azure Bot Service. * `luis_key` - (Optional) The LUIS key to associate with this Azure Bot Service. diff --git a/website/docs/r/container_app.html.markdown b/website/docs/r/container_app.html.markdown index c5ab110a84696..5394f1f435211 100644 --- a/website/docs/r/container_app.html.markdown +++ b/website/docs/r/container_app.html.markdown @@ -97,12 +97,72 @@ A `template` block supports the following: * `min_replicas` - (Optional) The minimum number of replicas for this container. +* `azure_queue_scale_rule` - (Optional) One or more `azure_queue_scale_rule` blocks as defined below. + +* `custom_scale_rule` - (Optional) One or more `custom_scale_rule` blocks as defined below. + +* `http_scale_rule` - (Optional) One or more `http_scale_rule` blocks as defined below. + +* `tcp_scale_rule` - (Optional) One or more `tcp_scale_rule` blocks as defined below. + * `revision_suffix` - (Optional) The suffix for the revision. This value must be unique for the lifetime of the Resource. If omitted the service will use a hash function to create one. * `volume` - (Optional) A `volume` block as detailed below. --- +An `azure_queue_scale_rule` block supports the following: + +* `name` - (Required) The name of the Scaling Rule + +* `queue_name` - (Required) The name of the Azure Queue + +* `queue_length` - (Required) The value of the length of the queue to trigger scaling actions. + +* `authentication` - (Required) One or more `authentication` blocks as defined below. + +--- + +A `custom_scale_rule` block supports the following: + +* `name` - (Required) The name of the Scaling Rule + +* `custom_rule_type` - (Required) The Custom rule type. Possible values include: `activemq`, `artemis-queue`, `kafka`, `pulsar`, `aws-cloudwatch`, `aws-dynamodb`, `aws-dynamodb-streams`, `aws-kinesis-stream`, `aws-sqs-queue`, `azure-app-insights`, `azure-blob`, `azure-data-explorer`, `azure-eventhub`, `azure-log-analytics`, `azure-monitor`, `azure-pipelines`, `azure-servicebus`, `azure-queue`, `cassandra`, `cpu`, `cron`, `datadog`, `elasticsearch`, `external`, `external-push`, `gcp-stackdriver`, `gcp-storage`, `gcp-pubsub`, `graphite`, `http`, `huawei-cloudeye`, `ibmmq`, `influxdb`, `kubernetes-workload`, `liiklus`, `memory`, `metrics-api`, `mongodb`, `mssql`, `mysql`, `nats-jetstream`, `stan`, `tcp`, `new-relic`, `openstack-metric`, `openstack-swift`, `postgresql`, `predictkube`, `prometheus`, `rabbitmq`, `redis`, `redis-cluster`, `redis-sentinel`, `redis-streams`, `redis-cluster-streams`, `redis-sentinel-streams`, `selenium-grid`,`solace-event-queue`, and `github-runner`. + +* `metadata`- (Required) - A map of string key-value pairs to configure the Custom Scale Rule. + +* `authentication` - (Optional) Zero or more `authentication` blocks as defined below. + +--- + +A `http_scale_rule` block supports the following: + +* `name` - (Required) The name of the Scaling Rule + +* `concurrent_requests`- (Required) - The number of concurrent requests to trigger scaling. + +* `authentication` - (Optional) Zero or more `authentication` blocks as defined below. + +--- + +A `tcp_scale_rule` block supports the following: + +* `name` - (Required) The name of the Scaling Rule + +* `concurrent_requests`- (Required) - The number of concurrent requests to trigger scaling. + +* `authentication` - (Optional) Zero or more `authentication` blocks as defined below. + +--- + +An `authentication` block supports the following: + +* `secret_name` - (Required) The name of the Container App Secret to use for this Scale Rule Authentication. + +* `trigger_parameter` - (Required) The Trigger Parameter name to use the supply the value retrieved from the `secret_name`. + +--- + A `volume` block supports the following: * `name` - (Required) The name of the volume. diff --git a/website/docs/r/container_app_environment.html.markdown b/website/docs/r/container_app_environment.html.markdown index 4968213de28f8..6c229d4cb4f82 100644 --- a/website/docs/r/container_app_environment.html.markdown +++ b/website/docs/r/container_app_environment.html.markdown @@ -56,6 +56,10 @@ The following arguments are supported: ~> **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified. +* `zone_redundancy_enabled` - (Optional) Should the Container App Environment be created with Zone Redundancy enabled? Defaults to `false`. Changing this forces a new resource to be created. + +~> **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified. + * `log_analytics_workspace_id` - (Optional) The ID for the Log Analytics Workspace to link this Container Apps Managed Environment to. Changing this forces a new resource to be created. * `tags` - (Optional) A mapping of tags to assign to the resource. diff --git a/website/docs/r/cosmosdb_account.html.markdown b/website/docs/r/cosmosdb_account.html.markdown index c6c3ad11646bf..0a8103bbb33bb 100644 --- a/website/docs/r/cosmosdb_account.html.markdown +++ b/website/docs/r/cosmosdb_account.html.markdown @@ -311,6 +311,22 @@ In addition to the Arguments listed above - the following Attributes are exporte * `connection_strings` - A list of connection strings available for this CosmosDB account. +* `primary_sql_connection_string` - Primary SQL connection string for the CosmosDB Account. + +* `secondary_sql_connection_string` - Secondary SQL connection string for the CosmosDB Account. + +* `primary_readonly_sql_connection_string` - Primary readonly SQL connection string for the CosmosDB Account. + +* `secondary_readonly_sql_connection_string` - Secondary readonly SQL connection string for the CosmosDB Account. + +* `primary_mongodb_connection_string` - Primary Mongodb connection string for the CosmosDB Account. + +* `secondary_mongodb_connection_string` - Secondary Mongodb connection string for the CosmosDB Account. + +* `primary_readonly_mongodb_connection_string` - Primary readonly Mongodb connection string for the CosmosDB Account. + +* `secondary_readonly_mongodb_connection_string` - Secondary readonly Mongodb connection string for the CosmosDB Account. + --- An `identity` block exports the following: diff --git a/website/docs/r/data_factory_dataset_azure_sql_table.html.markdown b/website/docs/r/data_factory_dataset_azure_sql_table.html.markdown new file mode 100644 index 0000000000000..5766e5cc9794b --- /dev/null +++ b/website/docs/r/data_factory_dataset_azure_sql_table.html.markdown @@ -0,0 +1,97 @@ +--- +subcategory: "Data Factory" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_data_factory_dataset_azure_sql_table" +description: |- + Manages an Azure SQL Table Dataset inside an Azure Data Factory. +--- + +# azurerm_data_factory_dataset_azure_sql_table + +Manages an Azure SQL Table Dataset inside an Azure Data Factory. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_data_factory" "example" { + name = "example" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name +} + +resource "azurerm_data_factory_linked_service_azure_sql_database" "example" { + name = "example" + data_factory_id = azurerm_data_factory.example.id + connection_string = "Integrated Security=False;Data Source=test;Initial Catalog=test;Initial Catalog=test;User ID=test;Password=test" +} + +resource "azurerm_data_factory_dataset_azure_sql_table" "example" { + name = "example" + data_factory_id = azurerm_data_factory.example.id + linked_service_id = azurerm_data_factory_linked_service_azure_sql_database.example.id +} +``` + +## Argument Reference + +The following arguments are supported: + +* `name` - (Required) Specifies the name of the Data Factory Dataset Azure SQL Table. Changing this forces a new resource to be created. Must be globally unique. See the [Microsoft documentation](https://docs.microsoft.com/azure/data-factory/naming-rules) for all restrictions. + +* `data_factory_id` - (Required) The Data Factory ID in which to associate the Linked Service with. Changing this forces a new resource. + +* `linked_service_id` - (Required) The Data Factory Linked Service ID in which to associate the Dataset with. + +* `schema` - (Optional) The schema name of the table in the Azure SQL Database. + +* `table` - (Optional) The table name of the table in the Azure SQL Database. + +* `folder` - (Optional) The folder that this Dataset is in. If not specified, the Dataset will appear at the root level. + +* `schema_column` - (Optional) A `schema_column` block as defined below. + +* `description` - (Optional) The description for the Data Factory Dataset Azure SQL Table. + +* `annotations` - (Optional) List of tags that can be used for describing the Data Factory Dataset Azure SQL Table. + +* `parameters` - (Optional) A map of parameters to associate with the Data Factory Dataset Azure SQL Table. + +* `additional_properties` - (Optional) A map of additional properties to associate with the Data Factory Dataset Azure SQL Table. + +--- + +A `schema_column` block supports the following: + +* `name` - (Required) The name of the column. + +* `type` - (Optional) Type of the column. Valid values are `Byte`, `Byte[]`, `Boolean`, `Date`, `DateTime`,`DateTimeOffset`, `Decimal`, `Double`, `Guid`, `Int16`, `Int32`, `Int64`, `Single`, `String`, `TimeSpan`. Please note these values are case sensitive. + +* `description` - (Optional) The description of the column. + +## Attributes Reference + +In addition to the Arguments listed above - the following Attributes are exported: + +* `id` - The ID of the Data Factory Azure SQL Table Dataset. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/language/resources/syntax#operation-timeouts) for certain actions: + +* `create` - (Defaults to 30 minutes) Used when creating the Data Factory Azure SQL Table Dataset. +* `update` - (Defaults to 30 minutes) Used when updating the Data Factory Azure SQL Table Dataset. +* `read` - (Defaults to 5 minutes) Used when retrieving the Data Factory Azure SQL Table Dataset. +* `delete` - (Defaults to 30 minutes) Used when deleting the Data Factory Azure SQL Table Dataset. + +## Import + +Data Factory Azure SQL Table Datasets can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_data_factory_dataset_azure_sql_table.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example/providers/Microsoft.DataFactory/factories/example/datasets/example +``` diff --git a/website/docs/r/data_factory_dataset_delimited_text.html.markdown b/website/docs/r/data_factory_dataset_delimited_text.html.markdown index 36c90f71246ac..49b2a11d539c6 100644 --- a/website/docs/r/data_factory_dataset_delimited_text.html.markdown +++ b/website/docs/r/data_factory_dataset_delimited_text.html.markdown @@ -118,10 +118,16 @@ An `azure_blob_fs_location` block supports the following: * `file_system` - (Required) The storage data lake gen2 file system on the Azure Blob Storage Account hosting the file. +* `dynamic_file_system_enabled` - (Optional) Is the `file_system` using dynamic expression, function or system variables? Defaults to `false`. + * `path` - (Optional) The folder path to the file. +* `dynamic_path_enabled` - (Optional) Is the `path` using dynamic expression, function or system variables? Defaults to `false`. + * `filename` - (Optional) The filename of the file. +* `dynamic_filename_enabled` - (Optional) Is the `filename` using dynamic expression, function or system variables? Defaults to `false`. + --- An `azure_blob_storage_location` block supports the following: diff --git a/website/docs/r/data_factory_dataset_parquet.html.markdown b/website/docs/r/data_factory_dataset_parquet.html.markdown index 48646a2398b5c..cca28815ddf91 100644 --- a/website/docs/r/data_factory_dataset_parquet.html.markdown +++ b/website/docs/r/data_factory_dataset_parquet.html.markdown @@ -70,6 +70,8 @@ The following supported locations for a Parquet Dataset: * `http_server_location` - (Optional) A `http_server_location` block as defined below. +* `azure_blob_fs_location` - (Optional) A `azure_blob_fs_location` block as defined below. + * `azure_blob_storage_location` - (Optional) A `azure_blob_storage_location` block as defined below. The following supported arguments are specific to Parquet Dataset: @@ -103,19 +105,35 @@ A `http_server_location` block supports the following: * `path` - (Optional) The folder path to the file on the web server. --- -A `azure_blob_storage_location` block supports the following: +A `azure_blob_fs_location` block supports the following: -* `container` - (Required) The container on the Azure Blob Storage Account hosting the file. +* `file_system` - (Required) The container on the Azure Data Lake Storage Account hosting the file. -* `filename` - (Optional) The filename of the file on the web server. +* `dynamic_file_system_enabled` - (Optional) Is the `file_system` using dynamic expression, function or system variables? Defaults to `false`. -* `dynamic_container_enabled` - (Optional) Is the `container` using dynamic expression, function or system variables? Defaults to `false`. +* `path` - (Optional) The folder path to the file on the Azure Data Lake Storage Account. * `dynamic_path_enabled` - (Optional) Is the `path` using dynamic expression, function or system variables? Defaults to `false`. +* `filename` - (Optional) The filename of the file on the Azure Data Lake Storage Account. + * `dynamic_filename_enabled` - (Optional) Is the `filename` using dynamic expression, function or system variables? Defaults to `false`. -* `path` - (Optional) The folder path to the file on the web server. +--- + +An `azure_blob_storage_location` block supports the following: + +* `container` - (Required) The container on the Azure Blob Storage Account hosting the file. + +* `dynamic_container_enabled` - (Optional) Is the `container` using dynamic expression, function or system variables? Defaults to `false`. + +* `path` - (Optional) The folder path to the file on the Azure Blob Storage Account. + +* `dynamic_path_enabled` - (Optional) Is the `path` using dynamic expression, function or system variables? Defaults to `false`. + +* `filename` - (Optional) The filename of the file on the Azure Blob Storage Account. + +* `dynamic_filename_enabled` - (Optional) Is the `filename` using dynamic expression, function or system variables? Defaults to `false`. ## Attributes Reference diff --git a/website/docs/r/firewall_policy_rule_collection_group.html.markdown b/website/docs/r/firewall_policy_rule_collection_group.html.markdown index 061fd5f233ee5..77e2bbcb50d3f 100644 --- a/website/docs/r/firewall_policy_rule_collection_group.html.markdown +++ b/website/docs/r/firewall_policy_rule_collection_group.html.markdown @@ -139,7 +139,7 @@ A `application_rule` (application rule) block supports the following: * `description` - (Optional) The description which should be used for this rule. -* `protocols` - (Optional) One or more `protocols` blocks as defined below. Not required when specifying `destination_fqdn_tags`, but required when specifying `destination_fqdns`. +* `protocols` - (Required) One or more `protocols` blocks as defined below. * `source_addresses` - (Optional) Specifies a list of source IP addresses (including CIDR, IP range and `*`). diff --git a/website/docs/r/function_app_connection.html.markdown b/website/docs/r/function_app_connection.html.markdown new file mode 100644 index 0000000000000..dacab32be8b50 --- /dev/null +++ b/website/docs/r/function_app_connection.html.markdown @@ -0,0 +1,163 @@ +--- +subcategory: "App Service (Web Apps)" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_function_app_connection" +description: |- + Manages a service connector for function app. +--- + +# azurerm_function_app_connection + +Manages a service connector for function app. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_cosmosdb_account" "example" { + name = "example-cosmosdb-account" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name + offer_type = "Standard" + kind = "GlobalDocumentDB" + + consistency_policy { + consistency_level = "BoundedStaleness" + max_interval_in_seconds = 10 + max_staleness_prefix = 200 + } + + geo_location { + location = azurerm_resource_group.example.location + failover_priority = 0 + } +} + +resource "azurerm_cosmosdb_sql_database" "example" { + name = "cosmos-sql-db" + resource_group_name = azurerm_cosmosdb_account.example.resource_group_name + account_name = azurerm_cosmosdb_account.example.name + throughput = 400 +} + +resource "azurerm_cosmosdb_sql_container" "example" { + name = "example-container" + resource_group_name = azurerm_cosmosdb_account.example.resource_group_name + account_name = azurerm_cosmosdb_account.example.name + database_name = azurerm_cosmosdb_sql_database.example.name + partition_key_path = "/definition" +} + +resource "azurerm_storage_account" "example" { + name = "examplestorageaccount" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + account_tier = "Standard" + account_replication_type = "LRS" +} + +resource "azurerm_service_plan" "example" { + location = azurerm_resource_group.example.location + name = "example-serviceplan" + resource_group_name = azurerm_resource_group.example.name + sku_name = "P1v2" + os_type = "Linux" +} + +resource "azurerm_function_app" "test" { + name = "example-function-app" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + app_service_plan_id = azurerm_app_service_plan.test.id + storage_account_name = azurerm_storage_account.test.name + storage_account_access_key = azurerm_storage_account.test.primary_access_key + + lifecycle { + ignore_changes = [ + identity, + ] + } +} + +resource "azurerm_app_service_connection" "example" { + name = "example-serviceconnector" + function_app_id = azurerm_function_app.example.id + target_resource_id = azurerm_cosmosdb_account.test.id + authentication { + type = "systemAssignedIdentity" + } +} +``` + +## Argument Reference + +The following arguments are supported: + +* `name` - (Required) The name of the service connection. Changing this forces a new resource to be created. + +* `function_app_id` - (Required) The ID of the data source function app. Changing this forces a new resource to be created. + +* `target_resource_id` - (Required) The ID of the target resource. Changing this forces a new resource to be created. Possible target resources are `Postgres`, `PostgresFlexible`, `Mysql`, `Sql`, `Redis`, `RedisEnterprise`, `CosmosCassandra`, `CosmosGremlin`, `CosmosMongo`, `CosmosSql`, `CosmosTable`, `StorageBlob`, `StorageQueue`, `StorageFile`, `StorageTable`, `AppConfig`, `EventHub`, `ServiceBus`, `SignalR`, `WebPubSub`, `ConfluentKafka`. The integration guide can be found [here](https://learn.microsoft.com/en-us/azure/service-connector/how-to-integrate-postgres). + +* `authentication` - (Required) The authentication info. An `authentication` block as defined below. + +-> **Note:** If a Managed Identity is used, this will need to be configured on the App Service. + +--- + +An `authentication` block supports the following: + +* `type` - (Required) The authentication type. Possible values are `systemAssignedIdentity`, `userAssignedIdentity`, `servicePrincipalSecret`, `servicePrincipalCertificate`, `secret`. Changing this forces a new resource to be created. + +* `name` - (Optional) Username or account name for secret auth. `name` and `secret` should be either both specified or both not specified when `type` is set to `secret`. + +* `secret` - (Optional) Password or account key for secret auth. `secret` and `name` should be either both specified or both not specified when `type` is set to `secret`. + +* `client_id` - (Optional) Client ID for `userAssignedIdentity` or `servicePrincipal` auth. Should be specified when `type` is set to `servicePrincipalSecret` or `servicePrincipalCertificate`. When `type` is set to `userAssignedIdentity`, `client_id` and `subscription_id` should be either both specified or both not specified. + +* `subscription_id` - (Optional) Subscription ID for `userAssignedIdentity`. `subscription_id` and `client_id` should be either both specified or both not specified. + +* `principal_id` - (Optional) Principal ID for `servicePrincipal` auth. Should be specified when `type` is set to `servicePrincipalSecret` or `servicePrincipalCertificate`. + +* `certificate` - (Optional) Service principal certificate for `servicePrincipal` auth. Should be specified when `type` is set to `servicePrincipalCertificate`. + +--- + +* `client_type` - (Optional) The application client type. Possible values are `none`, `dotnet`, `java`, `python`, `go`, `php`, `ruby`, `django`, `nodejs` and `springBoot`. + +* `vnet_solution` - (Optional) The type of the VNet solution. Possible values are `serviceEndpoint`, `privateLink`. + +* `secret_store` - (Optional) An option to store secret value in secure place. An `secret_store` block as defined below. + +--- + +An `secret_store` block supports the following: + +* `key_vault_id` - (required) The key vault id to store secret. + +## Attribute Reference + +In addition to the Arguments listed above - the following Attributes are exported: + +* `id` - The ID of the service connector. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/docs/configuration/resources.html#timeouts) for certain actions: + +* `create` - (Defaults to 30 minutes) Used when creating the Service Connector for app service. +* `read` - (Defaults to 5 minutes) Used when retrieving the Service Connector for app service. +* `update` - (Defaults to 30 minutes) Used when updating the Service Connector for app service. +* `delete` - (Defaults to 30 minutes) Used when deleting the Service Connector for app service. + +## Import + +Service Connector for app service can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_app_service_connection.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.Web/sites/webapp/providers/Microsoft.ServiceLinker/linkers/serviceconnector1 +``` diff --git a/website/docs/r/iothub.html.markdown b/website/docs/r/iothub.html.markdown index f8b4ac51ac65c..db4288ac0cee1 100644 --- a/website/docs/r/iothub.html.markdown +++ b/website/docs/r/iothub.html.markdown @@ -66,9 +66,10 @@ resource "azurerm_eventhub_authorization_rule" "example" { } resource "azurerm_iothub" "example" { - name = "Example-IoTHub" - resource_group_name = azurerm_resource_group.example.name - location = azurerm_resource_group.example.location + name = "Example-IoTHub" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + local_authentication_enabled = false sku { name = "S1" @@ -142,6 +143,8 @@ The following arguments are supported: * `sku` - (Required) A `sku` block as defined below. +* `local_authentication_enabled` - (Optional) If false, SAS tokens with Iot hub scoped SAS keys cannot be used for authentication. Defaults to `true`. + * `event_hub_partition_count` - (Optional) The number of device-to-cloud partitions used by backing event hubs. Must be between `2` and `128`. * `event_hub_retention_in_days` - (Optional) The event hub retention to use in days. Must be between `1` and `7`. diff --git a/website/docs/r/iothub_endpoint_cosmosdb_account.html.markdown b/website/docs/r/iothub_endpoint_cosmosdb_account.html.markdown new file mode 100644 index 0000000000000..1a89224d2636f --- /dev/null +++ b/website/docs/r/iothub_endpoint_cosmosdb_account.html.markdown @@ -0,0 +1,136 @@ +--- +subcategory: "IoT Hub" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_iothub_endpoint_cosmosdb_account" +description: |- + Manages an IotHub Cosmos DB Account Endpoint +--- + +# azurerm_iothub_endpoint_cosmosdb_account + +Manages an IotHub Cosmos DB Account Endpoint + +~> **NOTE:** Endpoints can be defined either directly on the `azurerm_iothub` resource, or using the `azurerm_iothub_endpoint_*` resources - but the two ways of defining the endpoints cannot be used together. If both are used against the same IoTHub, spurious changes will occur. Also, defining a `azurerm_iothub_endpoint_*` resource and another endpoint of a different type directly on the `azurerm_iothub` resource is not supported. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_iothub" "example" { + name = "exampleIothub" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + + sku { + name = "B1" + capacity = "1" + } + + tags = { + purpose = "example" + } +} + +resource "azurerm_cosmosdb_account" "example" { + name = "cosmosdb-account" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name + offer_type = "Standard" + kind = "GlobalDocumentDB" + + consistency_policy { + consistency_level = "Strong" + } + + geo_location { + location = azurerm_resource_group.example.location + failover_priority = 0 + } +} + +resource "azurerm_cosmosdb_sql_database" "example" { + name = "cosmos-sql-db" + resource_group_name = azurerm_cosmosdb_account.example.resource_group_name + account_name = azurerm_cosmosdb_account.example.name +} + +resource "azurerm_cosmosdb_sql_container" "example" { + name = "example-container" + resource_group_name = azurerm_cosmosdb_account.example.resource_group_name + account_name = azurerm_cosmosdb_account.example.name + database_name = azurerm_cosmosdb_sql_database.example.name + partition_key_path = "/definition/id" +} + +resource "azurerm_iothub_endpoint_cosmosdb_account" "example" { + name = "example" + resource_group_name = azurerm_resource_group.example.name + iothub_id = azurerm_iothub.example.id + container_name = azurerm_cosmosdb_sql_container.example.name + database_name = azurerm_cosmosdb_sql_database.example.name + endpoint_uri = azurerm_cosmosdb_account.example.endpoint + primary_key = azurerm_cosmosdb_account.example.primary_key + secondary_key = azurerm_cosmosdb_account.example.secondary_key +} +``` + +## Argument Reference + +The following arguments are supported: + +* `name` - (Required) The name of the endpoint. The name must be unique across endpoint types. The following names are reserved: `events`, `operationsMonitoringEvents`, `fileNotifications` and `$default`. Changing this forces a new resource to be created. + +* `resource_group_name` - (Required) The name of the resource group under which the Cosmos DB Account has been created. Changing this forces a new resource to be created. + +* `iothub_id` - (Required) The ID of the IoT Hub to create the endpoint. Changing this forces a new resource to be created. + +* `container_name` - (Required) The name of the Cosmos DB Container in the Cosmos DB Database. Changing this forces a new resource to be created. + +* `database_name` - (Required) The name of the Cosmos DB Database in the Cosmos DB Account. Changing this forces a new resource to be created. + +* `endpoint_uri` - (Required) The URI of the Cosmos DB Account. Changing this forces a new resource to be created. + +* `authentication_type` - (Optional) The type used to authenticate against the Cosmos DB Account endpoint. Possible values are `keyBased` and `identityBased`. Defaults to `keyBased`. + +* `identity_id` - (Optional) The ID of the User Managed Identity used to authenticate against the Cosmos DB Account endpoint. + +~> **NOTE:** `identity_id` can only be specified when `authentication_type` is `identityBased`. It must be one of the `identity_ids` of the Iot Hub. If not specified when `authentication_type` is `identityBased`, System Assigned Managed Identity of the Iot Hub will be used. + +* `partition_key_name` - (Optional) The name of the partition key associated with the Cosmos DB Container. + +* `partition_key_template` - (Optional) The template for generating a synthetic partition key value for use within the Cosmos DB Container. + +* `primary_key` - (Optional) The primary key of the Cosmos DB Account. + +~> **NOTE:** `primary_key` must and can only be specified when `authentication_type` is `keyBased`. + +* `secondary_key` - (Optional) The secondary key of the Cosmos DB Account. + +~> **NOTE:** `secondary_key` must and can only be specified when `authentication_type` is `keyBased`. + +## Attributes Reference + +In addition to the Arguments listed above - the following Attributes are exported: + +* `id` - The ID of the IoTHub Cosmos DB Account Endpoint. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/language/resources/syntax#operation-timeouts) for certain actions: + +* `create` - (Defaults to 30 minutes) Used when creating the IotHub Cosmos DB Account Endpoint. +* `update` - (Defaults to 30 minutes) Used when updating the IotHub Cosmos DB Account Endpoint. +* `read` - (Defaults to 5 minutes) Used when retrieving the IotHub Cosmos DB Account Endpoint. +* `delete` - (Defaults to 30 minutes) Used when deleting the IotHub Cosmos DB Account Endpoint. + +## Import + +IoTHub Cosmos DB Account Endpoint can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_iothub_endpoint_cosmosdb_account.endpoint1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup1/providers/Microsoft.Devices/iotHubs/hub1/endpoints/cosmosDBAccountEndpoint1 +``` diff --git a/website/docs/r/key_vault_certificate.html.markdown b/website/docs/r/key_vault_certificate.html.markdown index 513d19f56c6d9..ffb3cbf0bc530 100644 --- a/website/docs/r/key_vault_certificate.html.markdown +++ b/website/docs/r/key_vault_certificate.html.markdown @@ -11,7 +11,7 @@ description: |- Manages a Key Vault Certificate. -~> **Note:** the Azure Provider includes a Feature Toggle which will purge a Key Vault Certificate resource on destroy, rather than the default soft-delete. See [`purge_soft_deleted_certificates_on_destroy`](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block#purge_soft_deleted_certificates_on_destroy) for more information. +~> **Note:** The Azure Provider includes a Feature Toggle which will purge a Key Vault Certificate resource on destroy, rather than the default soft-delete. See [`purge_soft_deleted_certificates_on_destroy`](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block#purge_soft_deleted_certificates_on_destroy) for more information. ## Example Usage (Importing a PFX) @@ -236,9 +236,9 @@ The following arguments are supported: * `key_vault_id` - (Required) The ID of the Key Vault where the Certificate should be created. Changing this forces a new resource to be created. -* `certificate` - (Optional) A `certificate` block as defined below, used to Import an existing certificate. +* `certificate` - (Optional) A `certificate` block as defined below, used to Import an existing certificate. Changing this will create a new version of the Key Vault Certificate. -* `certificate_policy` - (Optional) A `certificate_policy` block as defined below. Changing this forces a new resource to be created. +* `certificate_policy` - (Optional) A `certificate_policy` block as defined below. Changing this will create a new version of the Key Vault Certificate. ~> **NOTE:** When creating a Key Vault Certificate, at least one of `certificate` or `certificate_policy` is required. Provide `certificate` to import an existing certificate, `certificate_policy` to generate a new certificate. diff --git a/website/docs/r/key_vault_key.html.markdown b/website/docs/r/key_vault_key.html.markdown index 34c061f854699..4633b590a03b9 100644 --- a/website/docs/r/key_vault_key.html.markdown +++ b/website/docs/r/key_vault_key.html.markdown @@ -15,7 +15,7 @@ Manages a Key Vault Key. ~> **Note:** To use this resource, your client should have RBAC roles with permissions like `Key Vault Crypto Officer` or `Key Vault Administrator` or an assigned Key Vault Access Policy with permissions `Create`,`Delete`,`Get`,`Purge`,`Recover`,`Update` and `GetRotationPolicy` for keys without Rotation Policy. Include `SetRotationPolicy` for keys with Rotation Policy. -~> **Note:** the Azure Provider includes a Feature Toggle which will purge a Key Vault Key resource on destroy, rather than the default soft-delete. See [`purge_soft_deleted_keys_on_destroy`](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block#purge_soft_deleted_keys_on_destroy) for more information. +~> **Note:** The Azure Provider includes a Feature Toggle which will purge a Key Vault Key resource on destroy, rather than the default soft-delete. See [`purge_soft_deleted_keys_on_destroy`](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block#purge_soft_deleted_keys_on_destroy) for more information. ## Example Usage diff --git a/website/docs/r/key_vault_managed_hardware_security_module.html.markdown b/website/docs/r/key_vault_managed_hardware_security_module.html.markdown index 2ddcdbb8e84df..06e26b7672e67 100644 --- a/website/docs/r/key_vault_managed_hardware_security_module.html.markdown +++ b/website/docs/r/key_vault_managed_hardware_security_module.html.markdown @@ -10,7 +10,7 @@ description: |- Manages a Key Vault Managed Hardware Security Module. -~> **Note:** the Azure Provider includes a Feature Toggle which will purge a Key Vault Managed Hardware Security Module resource on destroy, rather than the default soft-delete. See [`purge_soft_deleted_hardware_security_modules_on_destroy`](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block#purge_soft_deleted_hardware_security_modules_on_destroy) for more information. +~> **Note:** The Azure Provider includes a Feature Toggle which will purge a Key Vault Managed Hardware Security Module resource on destroy, rather than the default soft-delete. See [`purge_soft_deleted_hardware_security_modules_on_destroy`](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block#purge_soft_deleted_hardware_security_modules_on_destroy) for more information. ## Example Usage diff --git a/website/docs/r/key_vault_secret.html.markdown b/website/docs/r/key_vault_secret.html.markdown index d97d53b42deed..c6387f8e37318 100644 --- a/website/docs/r/key_vault_secret.html.markdown +++ b/website/docs/r/key_vault_secret.html.markdown @@ -14,7 +14,7 @@ Manages a Key Vault Secret. ~> **Note:** All arguments including the secret value will be stored in the raw state as plain-text. [Read more about sensitive data in state](/docs/state/sensitive-data.html). -~> **Note:** the Azure Provider includes a Feature Toggle which will purge a Key Vault Secret resource on destroy, rather than the default soft-delete. See [`purge_soft_deleted_secrets_on_destroy`](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block#purge_soft_deleted_secrets_on_destroy) for more information. +~> **Note:** The Azure Provider includes a Feature Toggle which will purge a Key Vault Secret resource on destroy, rather than the default soft-delete. See [`purge_soft_deleted_secrets_on_destroy`](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block#purge_soft_deleted_secrets_on_destroy) for more information. ## Example Usage @@ -75,7 +75,7 @@ The following arguments are supported: * `name` - (Required) Specifies the name of the Key Vault Secret. Changing this forces a new resource to be created. -* `value` - (Required) Specifies the value of the Key Vault Secret. +* `value` - (Required) Specifies the value of the Key Vault Secret. Changing this will create a new version of the Key Vault Secret. ~> **Note:** Key Vault strips newlines. To preserve newlines in multi-line secrets try replacing them with `\n` or by base 64 encoding them with `replace(file("my_secret_file"), "/\n/", "\n")` or `base64encode(file("my_secret_file"))`, respectively. diff --git a/website/docs/r/kubernetes_cluster.html.markdown b/website/docs/r/kubernetes_cluster.html.markdown index dd15afff6cce8..7fa6d0abc6d03 100644 --- a/website/docs/r/kubernetes_cluster.html.markdown +++ b/website/docs/r/kubernetes_cluster.html.markdown @@ -681,9 +681,9 @@ A `network_profile` block supports the following: -> **Note:** This requires that the Preview Feature `Microsoft.ContainerService/CiliumDataplanePreview` is enabled and the Resource Provider is re-registered, see [the documentation](https://learn.microsoft.com/en-us/azure/aks/azure-cni-powered-by-cilium) for more information. -* `network_plugin_mode` - (Optional) Specifies the network plugin mode used for building the Kubernetes network. Possible value is `overlay`. Changing this forces a new resource to be created. +* `network_plugin_mode` - (Optional) Specifies the network plugin mode used for building the Kubernetes network. Possible value is `overlay`. -~> **Note:** When `network_plugin_mode` is set to `overlay`, the `network_plugin` field can only be set to `azure`. +~> **Note:** When `network_plugin_mode` is set to `overlay`, the `network_plugin` field can only be set to `azure`. When upgrading from Azure CNI without overlay, `pod_subnet_id` must be specified. * `outbound_type` - (Optional) The outbound (egress) routing method which should be used for this Kubernetes Cluster. Possible values are `loadBalancer`, `userDefinedRouting`, `managedNATGateway` and `userAssignedNATGateway`. Defaults to `loadBalancer`. Changing this forces a new resource to be created. diff --git a/website/docs/r/linux_function_app.html.markdown b/website/docs/r/linux_function_app.html.markdown index 64182a9080b7c..f90173b93e050 100644 --- a/website/docs/r/linux_function_app.html.markdown +++ b/website/docs/r/linux_function_app.html.markdown @@ -69,11 +69,15 @@ The following arguments are supported: * `app_settings` - (Optional) A map of key-value pairs for [App Settings](https://docs.microsoft.com/azure/azure-functions/functions-app-settings) and custom values. -~> **Note:** for runtime related settings, please use `node_version` in `site_config` to set the node version and use `functions_extension_version` to set the function runtime version, terraform will assign the values to the key `WEBSITE_NODE_DEFAULT_VERSION` and `FUNCTIONS_EXTENSION_VERSION` in app setting. +~> **Note:** For runtime related settings, please use `node_version` in `site_config` to set the node version and use `functions_extension_version` to set the function runtime version, terraform will assign the values to the key `WEBSITE_NODE_DEFAULT_VERSION` and `FUNCTIONS_EXTENSION_VERSION` in app setting. + ~> **Note:** For storage related settings, please use related properties that are available such as `storage_account_access_key`, terraform will assign the value to keys such as `WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`, `AzureWebJobsStorage` in app_setting. -~> **Note:** for application insight related settings, please use `application_insights_connection_string` and `application_insights_key`, terraform will assign the value to the key `APPINSIGHTS_INSTRUMENTATIONKEY` and `APPLICATIONINSIGHTS_CONNECTION_STRING` in app setting. -~> **Note:** for health check related settings, please use `health_check_eviction_time_in_min`, terraform will assign the value to the key `WEBSITE_HEALTHCHECK_MAXPINGFAILURES` in app setting. -~> **NOTE:** Please create a predefined share if you are restricting your storage account to a virtual network by setting `WEBSITE_CONTENTOVERVNET` to 1 in app_setting. + +~> **Note:** For application insight related settings, please use `application_insights_connection_string` and `application_insights_key`, terraform will assign the value to the key `APPINSIGHTS_INSTRUMENTATIONKEY` and `APPLICATIONINSIGHTS_CONNECTION_STRING` in app setting. + +~> **Note:** For health check related settings, please use `health_check_eviction_time_in_min`, terraform will assign the value to the key `WEBSITE_HEALTHCHECK_MAXPINGFAILURES` in app setting. + +~> **Note:** Please create a predefined share if you are restricting your storage account to a virtual network by setting `WEBSITE_CONTENTOVERVNET` to 1 in app_setting. * `auth_settings` - (Optional) A `auth_settings` block as defined below. @@ -241,6 +245,8 @@ An `auth_settings_v2` block supports the following: * `excluded_paths` - (Optional) The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`. +~> **NOTE:** This list should be used instead of setting `WEBSITE_WARMUP_PATH` in `app_settings` as it takes priority. + * `require_https` - (Optional) Should HTTPS be required on connections? Defaults to `true`. * `http_route_api_prefix` - (Optional) The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`. diff --git a/website/docs/r/linux_function_app_slot.html.markdown b/website/docs/r/linux_function_app_slot.html.markdown index 958ba2a9a2c87..46fa54271efa9 100644 --- a/website/docs/r/linux_function_app_slot.html.markdown +++ b/website/docs/r/linux_function_app_slot.html.markdown @@ -191,6 +191,8 @@ An `auth_settings_v2` block supports the following: * `excluded_paths` - (Optional) The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`. +~> **NOTE:** This list should be used instead of setting `WEBSITE_WARMUP_PATH` in `app_settings` as it takes priority. + * `require_https` - (Optional) Should HTTPS be required on connections? Defaults to `true`. * `http_route_api_prefix` - (Optional) The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`. diff --git a/website/docs/r/linux_web_app.html.markdown b/website/docs/r/linux_web_app.html.markdown index 4b31cba7063d2..e56cd49ce66aa 100644 --- a/website/docs/r/linux_web_app.html.markdown +++ b/website/docs/r/linux_web_app.html.markdown @@ -236,6 +236,8 @@ An `auth_settings_v2` block supports the following: * `excluded_paths` - (Optional) The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`. +~> **NOTE:** This list should be used instead of setting `WEBSITE_WARMUP_PATH` in `app_settings` as it takes priority. + * `require_https` - (Optional) Should HTTPS be required on connections? Defaults to `true`. * `http_route_api_prefix` - (Optional) The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`. diff --git a/website/docs/r/linux_web_app_slot.html.markdown b/website/docs/r/linux_web_app_slot.html.markdown index 0d89db0760f28..76b859ea09729 100644 --- a/website/docs/r/linux_web_app_slot.html.markdown +++ b/website/docs/r/linux_web_app_slot.html.markdown @@ -238,6 +238,8 @@ An `auth_settings_v2` block supports the following: * `excluded_paths` - (Optional) The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`. +~> **NOTE:** This list should be used instead of setting `WEBSITE_WARMUP_PATH` in `app_settings` as it takes priority. + * `require_https` - (Optional) Should HTTPS be required on connections? Defaults to `true`. * `http_route_api_prefix` - (Optional) The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`. diff --git a/website/docs/r/managed_disk.html.markdown b/website/docs/r/managed_disk.html.markdown index 0bc0732669d8f..ab6e0c8a2279e 100644 --- a/website/docs/r/managed_disk.html.markdown +++ b/website/docs/r/managed_disk.html.markdown @@ -133,6 +133,14 @@ The following arguments are supported: ~> **NOTE:** Setting logical sector size is supported only with `UltraSSD_LRS` disks and `PremiumV2_LRS` disks. +* `optimized_frequent_attach_enabled` - (Optional) Specifies whether this Managed Disk should be optimized for frequent disk attachments (where a disk is attached/detached more than 5 times in a day). Defaults to `false`. + +-> **Note:** Setting `optimized_frequent_attach_enabled` to `true` causes the disks to not align with the fault domain of the Virtual Machine, which can have operational implications. + +* `performance_plus_enabled` - (Optional) Specifies whether Performance Plus is enabled for this Managed Disk. Defaults to `false`. Changing this forces a new resource to be created. + +-> **Note:** `performance_plus_enabled` can only be set to `true` when using a Managed Disk with an Ultra SSD. + * `os_type` - (Optional) Specify a value when the source of an `Import`, `ImportSecure` or `Copy` operation targets a source that contains an operating system. Valid values are `Linux` or `Windows`. * `source_resource_id` - (Optional) The ID of an existing Managed Disk or Snapshot to copy when `create_option` is `Copy` or the recovery point to restore when `create_option` is `Restore`. Changing this forces a new resource to be created. diff --git a/website/docs/r/maps_account.html.markdown b/website/docs/r/maps_account.html.markdown index 43f32c0d8c228..1b41c3939e0f3 100644 --- a/website/docs/r/maps_account.html.markdown +++ b/website/docs/r/maps_account.html.markdown @@ -19,9 +19,10 @@ resource "azurerm_resource_group" "example" { } resource "azurerm_maps_account" "example" { - name = "example-maps-account" - resource_group_name = azurerm_resource_group.example.name - sku_name = "S1" + name = "example-maps-account" + resource_group_name = azurerm_resource_group.example.name + sku_name = "S1" + local_authentication_enabled = true tags = { environment = "Test" @@ -39,6 +40,8 @@ The following arguments are supported: * `sku_name` - (Required) The SKU of the Azure Maps Account. Possible values are `S0`, `S1` and `G2`. Changing this forces a new resource to be created. +* `local_authentication_enabled` - (Optional) Is local authentication enabled for this Azure Maps Account? When `false`, all authentication to the Azure Maps data-plane REST API is disabled, except Azure AD authentication. Defaults to `true`. + * `tags` - (Optional) A mapping of tags to assign to the Azure Maps Account. ## Attributes Reference diff --git a/website/docs/r/monitor_diagnostic_setting.html.markdown b/website/docs/r/monitor_diagnostic_setting.html.markdown index 493de7b692a68..d3389703a611a 100644 --- a/website/docs/r/monitor_diagnostic_setting.html.markdown +++ b/website/docs/r/monitor_diagnostic_setting.html.markdown @@ -124,6 +124,8 @@ A `log` block supports the following: * `retention_policy` - (Optional) A `retention_policy` block as defined below. +!> **NOTE:** `retention_policy` has been deprecated in favor of `azurerm_storage_management_policy` resource - to learn more information on the deprecation [in the Azure documentation](https://aka.ms/diagnostic_settings_log_retention). + * `enabled` - (Optional) Is this Diagnostic Log enabled? Defaults to `true`. --- @@ -140,6 +142,8 @@ An `enabled_log` block supports the following: * `retention_policy` - (Optional) A `retention_policy` block as defined below. +!> **NOTE:** `retention_policy` has been deprecated in favor of `azurerm_storage_management_policy` resource - to learn more information on the deprecation [in the Azure documentation](https://aka.ms/diagnostic_settings_log_retention). + --- A `metric` block supports the following: @@ -150,15 +154,20 @@ A `metric` block supports the following: * `retention_policy` - (Optional) A `retention_policy` block as defined below. +!> **NOTE:** `retention_policy` has been deprecated in favor of `azurerm_storage_management_policy` resource - to learn more information on the deprecation [in the Azure documentation](https://aka.ms/diagnostic_settings_log_retention). + * `enabled` - (Optional) Is this Diagnostic Metric enabled? Defaults to `true`. --- A `retention_policy` block supports the following: +!> **NOTE:** `retention_policy` has been deprecated in favor of `azurerm_storage_management_policy` resource - to learn more information on the deprecation [in the Azure documentation](https://aka.ms/diagnostic_settings_log_retention). + * `enabled` - (Required) Is this Retention Policy enabled? * `days` - (Optional) The number of days for which this Retention Policy should apply. + -> **NOTE:** Setting this to `0` will retain the events indefinitely. diff --git a/website/docs/r/monitor_log_profile.html.markdown b/website/docs/r/monitor_log_profile.html.markdown index 80137406f850c..346c36206c316 100644 --- a/website/docs/r/monitor_log_profile.html.markdown +++ b/website/docs/r/monitor_log_profile.html.markdown @@ -12,6 +12,8 @@ Manages a [Log Profile](https://docs.microsoft.com/azure/monitoring-and-diagnost -> **NOTE:** It's only possible to configure one Log Profile per Subscription. If you are trying to create more than one Log Profile, an error with `StatusCode=409` will occur. +!> **NOTE:** Azure Log Profiles will be retired on 30th September 2026 and will be removed in v4.0 of the AzureRM Provider. More information on the deprecation can be found [in the Azure documentation](https://learn.microsoft.com/azure/azure-monitor/essentials/activity-log?tabs=powershell#legacy-collection-methods). + ## Example Usage ```hcl diff --git a/website/docs/r/monitor_scheduled_query_rules_alert_v2.html.markdown b/website/docs/r/monitor_scheduled_query_rules_alert_v2.html.markdown index 6318a3c48e2c0..44257582c0fd3 100644 --- a/website/docs/r/monitor_scheduled_query_rules_alert_v2.html.markdown +++ b/website/docs/r/monitor_scheduled_query_rules_alert_v2.html.markdown @@ -122,7 +122,7 @@ The following arguments are supported: * `mute_actions_after_alert_duration` - (Optional) Mute actions for the chosen period of time in ISO 8601 duration format after the alert is fired. Possible values are `PT5M`, `PT10M`, `PT15M`, `PT30M`, `PT45M`, `PT1H`, `PT2H`, `PT3H`, `PT4H`, `PT5H`, `PT6H`, `P1D` and `P2D`. --> **NOTE** `auto_mitigation_enabled` and `mute_actions_after_alert_duration` are mutually exclusive and cannot both be set. +-> **Note** `auto_mitigation_enabled` and `mute_actions_after_alert_duration` are mutually exclusive and cannot both be set. * `query_time_range_override` - (Optional) Set this if the alert evaluation period is different from the query time range. If not specified, the value is `window_duration`*`number_of_evaluation_periods`. Possible values are `PT5M`, `PT10M`, `PT15M`, `PT20M`, `PT30M`, `PT45M`, `PT1H`, `PT2H`, `PT3H`, `PT4H`, `PT5H`, `PT6H`, `P1D` and `P2D`. @@ -160,6 +160,8 @@ A `criteria` block supports the following: * `metric_measure_column` - (Optional) Specifies the column containing the metric measure number. +-> **Note** `metric_measure_column` is required if `time_aggregation_method` is `Average`, `Maximum`, `Minimum`, or `Total`. And `metric_measure_column` can not be specified if `time_aggregation_method` is `Count`. + * `resource_id_column` - (Optional) Specifies the column containing the resource ID. The content of the column must be an uri formatted as resource ID. --- diff --git a/website/docs/r/mssql_elasticpool.html.markdown b/website/docs/r/mssql_elasticpool.html.markdown index bd41c4b633146..dbcb7b82712b7 100644 --- a/website/docs/r/mssql_elasticpool.html.markdown +++ b/website/docs/r/mssql_elasticpool.html.markdown @@ -79,8 +79,6 @@ The following arguments are supported: * `license_type` - (Optional) Specifies the license type applied to this database. Possible values are `LicenseIncluded` and `BasePrice`. --> **Note:** `license_type` can only be configured when `sku.0.tier` is set to `GeneralPurpose` or `BusinessCritical` - --- The `sku` block supports the following: diff --git a/website/docs/r/netapp_volume_quota_rule.html.markdown b/website/docs/r/netapp_volume_quota_rule.html.markdown new file mode 100644 index 0000000000000..b0b11bf94324d --- /dev/null +++ b/website/docs/r/netapp_volume_quota_rule.html.markdown @@ -0,0 +1,158 @@ +--- +subcategory: "NetApp" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_netapp_volume_quota_rule" +description: |- + Manages a Volume Quota Rule. +--- + +# azurerm_netapp_volume_quota_rule + +Manages a Volume Quota Rule. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_virtual_network" "example" { + name = "example-virtualnetwork" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name + address_space = ["10.0.0.0/16"] +} + +resource "azurerm_subnet" "example" { + name = "example-subnet" + resource_group_name = azurerm_resource_group.example.name + virtual_network_name = azurerm_virtual_network.example.name + address_prefixes = ["10.0.2.0/24"] + + delegation { + name = "netapp" + + service_delegation { + name = "Microsoft.Netapp/volumes" + actions = ["Microsoft.Network/networkinterfaces/*", "Microsoft.Network/virtualNetworks/subnets/join/action"] + } + } +} + +resource "azurerm_netapp_account" "example" { + name = "example-netappaccount" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name +} + +resource "azurerm_netapp_pool" "example" { + name = "example-netapppool" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name + account_name = azurerm_netapp_account.example.name + service_level = "Premium" + size_in_tb = 4 +} + +resource "azurerm_netapp_volume" "example" { + lifecycle { + prevent_destroy = true + } + + name = "example-netappvolume" + location = azurerm_resource_group.example.location + zone = "1" + resource_group_name = azurerm_resource_group.example.name + account_name = azurerm_netapp_account.example.name + pool_name = azurerm_netapp_pool.example.name + volume_path = "my-unique-file-path" + service_level = "Premium" + subnet_id = azurerm_subnet.example.id + network_features = "Basic" + protocols = ["NFSv4.1"] + security_style = "unix" + storage_quota_in_gb = 100 + snapshot_directory_visible = false +} + +resource "azurerm_netapp_volume_quota_rule" "quota1" { + name = "example-quota-rule-1" + location = azurerm_resource_group.example.location + volume_id = azurerm_netapp_volume.example.id + quota_target = "3001" + quota_size_in_kib = 1024 + quota_type = "IndividualGroupQuota" +} + +resource "azurerm_netapp_volume_quota_rule" "quota2" { + name = "example-quota-rule-2" + location = azurerm_resource_group.example.location + volume_id = azurerm_netapp_volume.example.id + quota_target = "2001" + quota_size_in_kib = 1024 + quota_type = "IndividualUserQuota" +} + +resource "azurerm_netapp_volume_quota_rule" "quota3" { + name = "example-quota-rule-3" + location = azurerm_resource_group.example.location + volume_id = azurerm_netapp_volume.example.id + quota_size_in_kib = 1024 + quota_type = "DefaultUserQuota" +} + +resource "azurerm_netapp_volume_quota_rule" "quota4" { + name = "example-quota-rule-4" + location = azurerm_resource_group.example.location + volume_id = azurerm_netapp_volume.example.id + quota_size_in_kib = 1024 + quota_type = "DefaultGroupQuota" +} +``` + +## Arguments Reference + +The following arguments are supported: + +* `account_name` - (Required) The name of the NetApp Account where the volume is located. Changing this forces a new Volume Quota Rule to be created. + +* `location` - (Required) The Azure Region where the Volume Quota Rule should exist. Changing this forces a new Volume Quota Rule to be created. + +* `name` - (Required) The name which should be used for this Volume Quota Rule. Changing this forces a new Volume Quota Rule to be created. + +* `volume_id` - (Required) The NetApp volume ID where the Volume Quota Rule is assigned to. + +* `quota_size_in_kib` - (Required) Quota size in kibibytes. + +* `quota_type` - (Required) Quota type. Possible values are `DefaultGroupQuota`, `DefaultUserQuota`, `IndividualGroupQuota` and `IndividualUserQuota`. Please note that `IndividualGroupQuota` and `DefaultGroupQuota` are not applicable to SMB and dual-protocol volumes. + +* `quota_target` - (Optional) Quota Target. This can be Unix UID/GID for NFSv3/NFSv4.1 volumes and Windows User SID for CIFS based volumes. + +-> **NOTE:** `quota_target ` must be used when `quota_type` is `IndividualGroupQuota` or `IndividualUserQuota` + +~> **NOTE:** more information about this resource can be found at [Understand default and individual user and group quotas](https://learn.microsoft.com/en-us/azure/azure-netapp-files/default-individual-user-group-quotas-introduction) + +## Attributes Reference + +In addition to the Arguments listed above - the following Attributes are exported: + +* `id` - The ID of the Volume Quota Rule. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/language/resources/syntax#operation-timeouts) for certain actions: + +* `create` - (Defaults to 1 hour and 30 minutes) Used when creating the Volume Quota Rule. +* `read` - (Defaults to 5 minutes) Used when retrieving the Volume Quota Rule. +* `update` - (Defaults to 2 hours) Used when updating the Volume Quota Rule. +* `delete` - (Defaults to 2 hours) Used when deleting the Volume Quota Rule. + +## Import + +Volume Quota Rules can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_netapp_volume_quota_rule.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg1/providers/Microsoft.NetApp/netAppAccounts/account1/capacityPools/pool1/volumes/vol1/volumeQuotaRules/quota1 +``` diff --git a/website/docs/r/network_interface.html.markdown b/website/docs/r/network_interface.html.markdown index f5387f3f578b5..a99bf6e523c02 100644 --- a/website/docs/r/network_interface.html.markdown +++ b/website/docs/r/network_interface.html.markdown @@ -60,6 +60,14 @@ The following arguments are supported: --- +* `auxiliary_mode` - (Optional) Specifies the auxiliary mode used to enable network high-performance feature on Network Virtual Appliances (NVAs). This feature offers competitive performance in Connections Per Second (CPS) optimization, along with improvements to handling large amounts of simultaneous connections. Possible values are `AcceleratedConnections` and `Floating`. + +-> **Note:** `auxiliary_mode` is in **Preview** and requires that the preview is enabled - [more information can be found in the Azure documentation](https://learn.microsoft.com/azure/networking/nva-accelerated-connections#prerequisites). + +* `auxiliary_sku` - (Optional) Specifies the SKU used for the network high-performance feature on Network Virtual Appliances (NVAs). Possible values are `A1`, `A2`, `A4` and `A8`. + +-> **Note:** `auxiliary_sku` is in **Preview** and requires that the preview is enabled - [more information can be found in the Azure documentation](https://learn.microsoft.com/azure/networking/nva-accelerated-connections#prerequisites). + * `dns_servers` - (Optional) A list of IP Addresses defining the DNS Servers which should be used for this Network Interface. -> **Note:** Configuring DNS Servers on the Network Interface will override the DNS Servers defined on the Virtual Network. diff --git a/website/docs/r/new_relic_tag_rule.html.markdown b/website/docs/r/new_relic_tag_rule.html.markdown new file mode 100644 index 0000000000000..4c8583ab6dd52 --- /dev/null +++ b/website/docs/r/new_relic_tag_rule.html.markdown @@ -0,0 +1,118 @@ +--- +subcategory: "New Relic" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_new_relic_tag_rule" +description: |- + Manages an Azure Native New Relic Tag Rule. +--- + +# azurerm_new_relic_tag_rule + +Manages an Azure Native New Relic Tag Rule. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "East US" +} + +resource "azurerm_new_relic_monitor" "example" { + name = "example-nrm" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + + plan { + effective_date = "2023-06-06T00:00:00Z" + } + + user { + email = "user@example.com" + first_name = "Example" + last_name = "User" + phone_number = "+12313803556" + } +} + +resource "azurerm_new_relic_tag_rule" "example" { + monitor_id = azurerm_new_relic_monitor.example.id + azure_active_directory_log_enabled = true + activity_log_enabled = true + metric_enabled = true + subscription_log_enabled = true + + log_tag_filter { + name = "key" + action = "Include" + value = "value" + } + + metric_tag_filter { + name = "key" + action = "Exclude" + value = "value" + } +} +``` + +## Arguments Reference + +The following arguments are supported: + +* `monitor_id` - (Required) Specifies the ID of the New Relic Monitor this Tag Rule should be created within. Changing this forces a new Azure Native New Relic Tag Rule to be created. + +* `azure_active_directory_log_enabled` - (Optional) Whether Azure Active Directory logs should be sent for the Monitor resource. Defaults to `false`. + +* `activity_log_enabled` - (Optional) Whether activity logs from Azure resources should be sent for the Monitor resource. Defaults to `false`. + +* `log_tag_filter` - (Optional) A `log_tag_filter` block as defined below. + +* `metric_enabled` - (Optional) Whether metrics should be sent for the Monitor resource. Defaults to `false`. + +* `metric_tag_filter` - (Optional) A `metric_tag_filter` block as defined below. + +* `subscription_log_enabled` - (Optional) Whether subscription logs should be sent for the Monitor resource. Defaults to `false`. + +--- + +A `log_tag_filter` block supports the following: + +* `name` - (Required) Specifies the name (also known as the key) of the tag. + +* `action` - (Required) Valid actions for a filtering tag. Possible values are `Exclude` and `Include`. Exclusion takes priority over inclusion. + +* `value` - (Required) Specifies the value of the tag. + +--- + +A `metric_tag_filter` block supports the following: + +* `name` - (Required) Specifies the name (also known as the key) of the tag. + +* `action` - (Required) Valid actions for a filtering tag. Possible values are `Exclude` and `Include`. Exclusion takes priority over inclusion. + +* `value` - (Required) Specifies the value of the tag. + +## Attributes Reference + +In addition to the Arguments listed above - the following Attributes are exported: + +* `id` - The ID of the Azure Native New Relic Tag Rule. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/docs/configuration/resources.html#timeouts) for certain actions: + +* `create` - (Defaults to 30 minutes) Used when creating the Azure Native New Relic Tag Rule. +* `read` - (Defaults to 5 minutes) Used when retrieving the Azure Native New Relic Tag Rule. +* `update` - (Defaults to 30 minutes) Used when updating the Azure Native New Relic Tag Rule. +* `delete` - (Defaults to 30 minutes) Used when deleting the Azure Native New Relic Tag Rule. + +## Import + +Azure Native New Relic Tag Rule can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_new_relic_tag_rule.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup1/providers/NewRelic.Observability/monitors/monitor1/tagRules/ruleSet1 +``` diff --git a/website/docs/r/postgresql_flexible_server.html.markdown b/website/docs/r/postgresql_flexible_server.html.markdown index 9995637376b7e..be26995aaa06e 100644 --- a/website/docs/r/postgresql_flexible_server.html.markdown +++ b/website/docs/r/postgresql_flexible_server.html.markdown @@ -132,7 +132,7 @@ The following arguments are supported: * `auto_grow_enabled` - (Optional) Is the storage auto grow for PostgreSQL Flexible Server enabled? Defaults to `false`. -* `storage_mb` - (Optional) The max storage allowed for the PostgreSQL Flexible Server. Possible values are `32768`, `65536`, `131072`, `262144`, `524288`, `1048576`, `2097152`, `4194304`, `8388608`, `16777216` and `33553408`. +* `storage_mb` - (Optional) The max storage allowed for the PostgreSQL Flexible Server. Possible values are `32768`, `65536`, `131072`, `262144`, `524288`, `1048576`, `2097152`, `4193280`, `4194304`, `8388608`, `16777216` and `33553408`. * `tags` - (Optional) A mapping of tags which should be assigned to the PostgreSQL Flexible Server. diff --git a/website/docs/r/recovery_services_vault_resource_guard_association.html.markdown b/website/docs/r/recovery_services_vault_resource_guard_association.html.markdown index 1a1e91d3e1b27..02b800e41144c 100644 --- a/website/docs/r/recovery_services_vault_resource_guard_association.html.markdown +++ b/website/docs/r/recovery_services_vault_resource_guard_association.html.markdown @@ -34,7 +34,7 @@ resource "azurerm_recovery_services_vault" "vault" { } resource "azurerm_recovery_services_vault_resource_guard_association" "test" { - name = "example-guard-proxy" + name = "VaultProxy" vault_id = azurerm_recovery_services_vault.test.id resource_guard_id = azurerm_data_protection_resource_guard.test.id } @@ -44,7 +44,9 @@ resource "azurerm_recovery_services_vault_resource_guard_association" "test" { The following arguments are supported: -* `name` - (Required) Specifies the name of the Recovery Services Vault Resource Guard Association. Changing this forces a new resource to be created. +* `name` - (Optional) Specifies the name of the Recovery Services Vault Resource Guard Association. Changing this forces a new resource to be created. + +-> **NOTE:** `name` has been deprecated and will be removed in version 4.0 of the provider. * `vault_id` - (Required) ID of the Recovery Services Vault which should be associated with. Changing this forces a new resource to be created. diff --git a/website/docs/r/redis_cache.html.markdown b/website/docs/r/redis_cache.html.markdown index 39761e9e1c645..b1bb4fc69fe9f 100644 --- a/website/docs/r/redis_cache.html.markdown +++ b/website/docs/r/redis_cache.html.markdown @@ -108,6 +108,9 @@ An `identity` block supports the following: A `redis_configuration` block supports the following: * `aof_backup_enabled` - (Optional) Enable or disable AOF persistence for this Redis Cache. Defaults to `false`. + +~> **NOTE:** `aof_backup_enabled` can only be set when SKU is `Premium`. + * `aof_storage_connection_string_0` - (Optional) First Storage Account connection string for AOF persistence. * `aof_storage_connection_string_1` - (Optional) Second Storage Account connection string for AOF persistence. diff --git a/website/docs/r/shared_image_version.html.markdown b/website/docs/r/shared_image_version.html.markdown index e357935c61f4f..b96f0616618a5 100644 --- a/website/docs/r/shared_image_version.html.markdown +++ b/website/docs/r/shared_image_version.html.markdown @@ -77,6 +77,8 @@ The following arguments are supported: -> **NOTE:** You must specify exact one of `blob_uri`, `managed_image_id` and `os_disk_snapshot_id`. +* `deletion_of_replicated_locations_enabled` - (Optional) Specifies whether this Shared Image Version can be deleted from the Azure Regions this is replicated to. Defaults to `false`. Changing this forces a new resource to be created. + * `replication_mode` - (Optional) Mode to be used for replication. Possible values are `Full` and `Shallow`. Defaults to `Full`. Changing this forces a new resource to be created. * `storage_account_id` - (Optional) The ID of the Storage Account where the Blob exists. Changing this forces a new resource to be created. @@ -95,6 +97,8 @@ The `target_region` block supports the following: * `disk_encryption_set_id` - (Optional) The ID of the Disk Encryption Set to encrypt the Image Version in the target region. Changing this forces a new resource to be created. +* `exclude_from_latest_enabled` - (Optional) Specifies whether this Shared Image Version should be excluded when querying for the `latest` version. Defaults to `false`. + * `storage_account_type` - (Optional) The storage account type for the image version. Possible values are `Standard_LRS`, `Premium_LRS` and `Standard_ZRS`. Defaults to `Standard_LRS`. You can store all of your image version replicas in Zone Redundant Storage by specifying `Standard_ZRS`. ## Attributes Reference diff --git a/website/docs/r/storage_account.html.markdown b/website/docs/r/storage_account.html.markdown index 166b2ecb83c4d..26a0f722980e0 100644 --- a/website/docs/r/storage_account.html.markdown +++ b/website/docs/r/storage_account.html.markdown @@ -183,16 +183,26 @@ A `blob_properties` block supports the following: * `restore_policy` - (Optional) A `restore_policy` block as defined below. This must be used together with `delete_retention_policy` set, `versioning_enabled` and `change_feed_enabled` set to `true`. +-> **NOTE:** This field cannot be configured when `kind` is set to `Storage` (V1). + * `versioning_enabled` - (Optional) Is versioning enabled? Default to `false`. +-> **NOTE:** This field cannot be configured when `kind` is set to `Storage` (V1). + * `change_feed_enabled` - (Optional) Is the blob service properties for change feed events enabled? Default to `false`. +-> **NOTE:** This field cannot be configured when `kind` is set to `Storage` (V1). + * `change_feed_retention_in_days` - (Optional) The duration of change feed events retention in days. The possible values are between 1 and 146000 days (400 years). Setting this to null (or omit this in the configuration file) indicates an infinite retention of the change feed. +-> **NOTE:** This field cannot be configured when `kind` is set to `Storage` (V1). + * `default_service_version` - (Optional) The API Version which should be used by default for requests to the Data Plane API if an incoming request doesn't specify an API Version. * `last_access_time_enabled` - (Optional) Is the last access time based tracking enabled? Default to `false`. +-> **NOTE:** This field cannot be configured when `kind` is set to `Storage` (V1). + * `container_delete_retention_policy` - (Optional) A `container_delete_retention_policy` block as defined below. --- @@ -344,23 +354,21 @@ A `azure_files_authentication` block supports the following: * `active_directory` - (Optional) A `active_directory` block as defined below. Required when `directory_type` is `AD`. -~> **Note:** If `directory_type` is set to `AADKERB`, `active_directory` is not supported. Use [icals](https://learn.microsoft.com/en-us/azure/storage/files/storage-files-identity-auth-azure-active-directory-enable?tabs=azure-portal#configure-directory-and-file-level-permissions) to configure directory and file level permissions. - --- A `active_directory` block supports the following: -* `storage_sid` - (Required) Specifies the security identifier (SID) for Azure Storage. - * `domain_name` - (Required) Specifies the primary domain that the AD DNS server is authoritative for. -* `domain_sid` - (Required) Specifies the security identifier (SID). - * `domain_guid` - (Required) Specifies the domain GUID. -* `forest_name` - (Required) Specifies the Active Directory forest. +* `domain_sid` - (Optional) Specifies the security identifier (SID). This is required when `directory_type` is set to `AD`. + +* `storage_sid` - (Optional) Specifies the security identifier (SID) for Azure Storage. This is required when `directory_type` is set to `AD`. + +* `forest_name` - (Optional) Specifies the Active Directory forest. This is required when `directory_type` is set to `AD`. -* `netbios_domain_name` - (Required) Specifies the NetBIOS domain name. +* `netbios_domain_name` - (Optional) Specifies the NetBIOS domain name. This is required when `directory_type` is set to `AD`. --- diff --git a/website/docs/r/subscription.html.markdown b/website/docs/r/subscription.html.markdown index 4bbafff3c7063..90c527a40a15b 100644 --- a/website/docs/r/subscription.html.markdown +++ b/website/docs/r/subscription.html.markdown @@ -14,6 +14,8 @@ Manages an Alias for a Subscription - which adds an Alias to an existing Subscri ~> **NOTE:** It is not possible to destroy (cancel) a subscription if it contains resources. If resources are present that are not managed by Terraform then these will need to be removed before the Subscription can be destroyed. +~> **Note:** This resource will automatically attempt to cancel a subscription when it is deleted. This behavior can be disabled in the provider `features` block by setting the `prevent_cancellation_on_destroy` field to `true` within the `subscription` block. + ~> **NOTE:** Azure supports Multiple Aliases per Subscription, however, to reliably manage this resource in Terraform only a single Alias is supported. ~> **NOTE:** When using this resource across tenants the `client_id` and `tenant_id` of the `provider` config block should be for the home tenant details for the SPN / User or a permissions error will likely be encountered. See [the official documentation](https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/programmatically-create-subscription) for more details. diff --git a/website/docs/r/virtual_hub_routing_intent.html.markdown b/website/docs/r/virtual_hub_routing_intent.html.markdown new file mode 100644 index 0000000000000..9dfbaf52eece8 --- /dev/null +++ b/website/docs/r/virtual_hub_routing_intent.html.markdown @@ -0,0 +1,101 @@ +--- +subcategory: "Network" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_virtual_hub_routing_intent" +description: |- + Manages a Virtual Hub Routing Intent. +--- + +# azurerm_virtual_hub_routing_intent + +Manages a Virtual Hub Routing Intent. + +## Example Usage + +```hcl +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_virtual_wan" "example" { + name = "example-vwan" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location +} + +resource "azurerm_virtual_hub" "example" { + name = "example-vhub" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + virtual_wan_id = azurerm_virtual_wan.example.id + address_prefix = "10.0.1.0/24" +} + +resource "azurerm_firewall" "example" { + name = "example-fw" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name + sku_name = "AZFW_Hub" + sku_tier = "Standard" + + virtual_hub { + virtual_hub_id = azurerm_virtual_hub.example.id + public_ip_count = 1 + } +} + +resource "azurerm_virtual_hub_routing_intent" "example" { + name = "example-routingintent" + virtual_hub_id = azurerm_virtual_hub.example.id + + routing_policy { + name = "InternetTrafficPolicy" + destinations = ["Internet"] + next_hop = azurerm_firewall.example.id + } +} +``` + +## Arguments Reference + +The following arguments are supported: + +* `name` - (Required) The name which should be used for this Virtual Hub Routing Intent. Changing this forces a new resource to be created. + +* `virtual_hub_id` - (Required) The resource ID of the Virtual Hub. Changing this forces a new resource to be created. + +* `routing_policy` - (Required) One or more `routing_policy` blocks as defined below. + +--- + +A `routing_policy` block supports the following: + +* `name` - (Required) The unique name for the routing policy. + +* `destinations` - (Required) A list of destinations which this routing policy is applicable to. Possible values are `Internet` and `PrivateTraffic`. + +* `next_hop` - (Required) The resource ID of the next hop on which this routing policy is applicable to. + +## Attributes Reference + +In addition to the Arguments listed above - the following Attributes are exported: + +* `id` - The ID of the Virtual Hub Routing Intent. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/docs/configuration/resources.html#timeouts) for certain actions: + +* `create` - (Defaults to 30 minutes) Used when creating the Virtual Hub Routing Intent. +* `read` - (Defaults to 5 minutes) Used when retrieving the Virtual Hub Routing Intent. +* `update` - (Defaults to 30 minutes) Used when updating the Virtual Hub Routing Intent. +* `delete` - (Defaults to 30 minutes) Used when deleting the Virtual Hub Routing Intent. + +## Import + +Virtual Hub Routing Intents can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_virtual_hub_routing_intent.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup1/providers/Microsoft.Network/virtualHubs/virtualHub1/routingIntent/routingIntent1 +``` diff --git a/website/docs/r/virtual_machine_extension.html.markdown b/website/docs/r/virtual_machine_extension.html.markdown index 14c1e754162ad..eb77408614ede 100644 --- a/website/docs/r/virtual_machine_extension.html.markdown +++ b/website/docs/r/virtual_machine_extension.html.markdown @@ -137,6 +137,8 @@ az vm extension image list --location westus -o table ~> **Note:** `protected_settings_from_key_vault` cannot be used with `protected_settings` +* `provision_after_extensions` - (Optional) Specifies the collection of extension names after which this extension needs to be provisioned. + * `tags` - (Optional) A mapping of tags to assign to the resource. --- diff --git a/website/docs/r/web_application_firewall_policy.html.markdown b/website/docs/r/web_application_firewall_policy.html.markdown index a70cab665c329..6f84692021ff0 100644 --- a/website/docs/r/web_application_firewall_policy.html.markdown +++ b/website/docs/r/web_application_firewall_policy.html.markdown @@ -134,16 +134,24 @@ The following arguments are supported: The `custom_rules` block supports the following: +* `enabled` - (Optional) Describes if the policy is in enabled state or disabled state. Defaults to `true`. + * `name` - (Optional) Gets name of the resource that is unique within a policy. This name can be used to access the resource. * `priority` - (Required) Describes priority of the rule. Rules with a lower value will be evaluated before rules with a higher value. -* `rule_type` - (Required) Describes the type of rule. Possible values are `MatchRule` and `Invalid`. +* `rule_type` - (Required) Describes the type of rule. Possible values are `MatchRule`, `RateLimitRule` and `Invalid`. * `match_conditions` - (Required) One or more `match_conditions` blocks as defined below. * `action` - (Required) Type of action. Possible values are `Allow`, `Block` and `Log`. +* `rate_limit_duration` - (Optional) Specifies the duration at which the rate limit policy will be applied. Should be used with `RateLimitRule` rule type. Possible values are `FiveMins` and `OneMin`. + +* `rate_limit_threshold` - (Optional) Specifies the threshold value for the rate limit policy. Must be greater than or equal to 1 if provided. + +* `group_rate_limit_by` - (Optional) Specifies what grouping the rate limit will count requests by. Possible values are `GeoLocation`, `ClientAddr` and `None`. + --- The `match_conditions` block supports the following: @@ -182,6 +190,8 @@ The `policy_settings` block supports the following: * `log_scrubbing` - (Optional) One `log_scrubbing` block as defined below. +* `request_body_inspect_limit_in_kb` - (Optional) Specifies the maximum request body inspection limit in KB for the Web Application Firewall. Defaults to `128`. + --- The `managed_rules` block supports the following: diff --git a/website/docs/r/windows_function_app.html.markdown b/website/docs/r/windows_function_app.html.markdown index f2649def0a1ad..f0f43006a86d5 100644 --- a/website/docs/r/windows_function_app.html.markdown +++ b/website/docs/r/windows_function_app.html.markdown @@ -68,12 +68,16 @@ The following arguments are supported: --- * `app_settings` - (Optional) A map of key-value pairs for [App Settings](https://docs.microsoft.com/azure/azure-functions/functions-app-settings) and custom values. - -~> **Note:** for runtime related settings, please use `node_version` in `site_config` to set the node version and use `functions_extension_version` to set the function runtime version, terraform will assign the values to the key `WEBSITE_NODE_DEFAULT_VERSION` and `FUNCTIONS_EXTENSION_VERSION` in app setting. + +~> **Note:** For runtime related settings, please use `node_version` in `site_config` to set the node version and use `functions_extension_version` to set the function runtime version, terraform will assign the values to the key `WEBSITE_NODE_DEFAULT_VERSION` and `FUNCTIONS_EXTENSION_VERSION` in app setting. + ~> **Note:** For storage related settings, please use related properties that are available such as `storage_account_access_key`, terraform will assign the value to keys such as `WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`, `AzureWebJobsStorage` in app_setting. -~> **Note:** for application insight related settings, please use `application_insights_connection_string` and `application_insights_key`, terraform will assign the value to the key `APPINSIGHTS_INSTRUMENTATIONKEY` and `APPLICATIONINSIGHTS_CONNECTION_STRING` in app setting. -~> **Note:** for health check related settings, please use `health_check_eviction_time_in_min`, terraform will assign the value to the key `WEBSITE_HEALTHCHECK_MAXPINGFAILURES` in app setting. -~> **NOTE:** Please create a predefined share if you are restricting your storage account to a virtual network by setting `WEBSITE_CONTENTOVERVNET` to 1 in app_setting. + +~> **Note:** For application insight related settings, please use `application_insights_connection_string` and `application_insights_key`, terraform will assign the value to the key `APPINSIGHTS_INSTRUMENTATIONKEY` and `APPLICATIONINSIGHTS_CONNECTION_STRING` in app setting. + +~> **Note:** For health check related settings, please use `health_check_eviction_time_in_min`, terraform will assign the value to the key `WEBSITE_HEALTHCHECK_MAXPINGFAILURES` in app setting. + +~> **Note:** Please create a predefined share if you are restricting your storage account to a virtual network by setting `WEBSITE_CONTENTOVERVNET` to 1 in app_setting. * `auth_settings` - (Optional) A `auth_settings` block as defined below. @@ -239,6 +243,8 @@ An `auth_settings_v2` block supports the following: * `excluded_paths` - (Optional) The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`. +~> **NOTE:** This list should be used instead of setting `WEBSITE_WARMUP_PATH` in `app_settings` as it takes priority. + * `require_https` - (Optional) Should HTTPS be required on connections? Defaults to `true`. * `http_route_api_prefix` - (Optional) The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`. diff --git a/website/docs/r/windows_function_app_slot.html.markdown b/website/docs/r/windows_function_app_slot.html.markdown index 65e52a9a61409..db4601bcc6453 100644 --- a/website/docs/r/windows_function_app_slot.html.markdown +++ b/website/docs/r/windows_function_app_slot.html.markdown @@ -189,6 +189,8 @@ An `auth_settings_v2` block supports the following: * `excluded_paths` - (Optional) The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`. +~> **NOTE:** This list should be used instead of setting `WEBSITE_WARMUP_PATH` in `app_settings` as it takes priority. + * `require_https` - (Optional) Should HTTPS be required on connections? Defaults to `true`. * `http_route_api_prefix` - (Optional) The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`. diff --git a/website/docs/r/windows_web_app.html.markdown b/website/docs/r/windows_web_app.html.markdown index ccbea7e0c0248..5d1d3d1fce7bf 100644 --- a/website/docs/r/windows_web_app.html.markdown +++ b/website/docs/r/windows_web_app.html.markdown @@ -246,6 +246,8 @@ An `auth_settings_v2` block supports the following: * `excluded_paths` - (Optional) The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`. +~> **NOTE:** This list should be used instead of setting `WEBSITE_WARMUP_PATH` in `app_settings` as it takes priority. + * `require_https` - (Optional) Should HTTPS be required on connections? Defaults to `true`. * `http_route_api_prefix` - (Optional) The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`. diff --git a/website/docs/r/windows_web_app_slot.html.markdown b/website/docs/r/windows_web_app_slot.html.markdown index bb3ca2b16395a..e0f1af0a55631 100644 --- a/website/docs/r/windows_web_app_slot.html.markdown +++ b/website/docs/r/windows_web_app_slot.html.markdown @@ -242,6 +242,8 @@ An `auth_settings_v2` block supports the following: * `excluded_paths` - (Optional) The paths which should be excluded from the `unauthenticated_action` when it is set to `RedirectToLoginPage`. +~> **NOTE:** This list should be used instead of setting `WEBSITE_WARMUP_PATH` in `app_settings` as it takes priority. + * `require_https` - (Optional) Should HTTPS be required on connections? Defaults to `true`. * `http_route_api_prefix` - (Optional) The prefix that should precede all the authentication and authorisation paths. Defaults to `/.auth`.